tmp_ns50wwy/0000700000175000017500000000000014164035577013154 5ustar carstencarstentmp_ns50wwy/src/0000755000175000017500000000000014163340332013740 5ustar carstencarstentmp_ns50wwy/src/spectrum0000644000175000017500000001222714163340332015531 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 tmp_ns50wwy/src/pkgIndex.tcl.in0000644000175000017500000000765014163340332016632 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] tmp_ns50wwy/src/maths/0000755000175000017500000000000014163340332015054 5ustar carstencarstentmp_ns50wwy/src/maths/deriv/0000755000175000017500000000000014163340332016165 5ustar carstencarstentmp_ns50wwy/src/maths/deriv/Makefile.am0000644000175000017500000000064614163340332020227 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 tmp_ns50wwy/src/maths/deriv/equalder.c0000644000175000017500000000153714163340332020141 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 ; } tmp_ns50wwy/src/maths/deriv/expderiv.c0000644000175000017500000000413614163340332020163 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; } tmp_ns50wwy/src/maths/deriv/sqrtder.c0000644000175000017500000000770414163340332020025 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)); } } tmp_ns50wwy/src/maths/deriv/cosderiv.c0000644000175000017500000000625714163340332020161 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)); } tmp_ns50wwy/src/maths/deriv/tanderiv.c0000644000175000017500000000562314163340332020153 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); } tmp_ns50wwy/src/maths/deriv/multder.c0000644000175000017500000000722114163340332020007 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; } tmp_ns50wwy/src/maths/deriv/timesder.c0000644000175000017500000000211514163340332020144 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; } tmp_ns50wwy/src/maths/deriv/divderiv.c0000644000175000017500000001262014163340332020146 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; } tmp_ns50wwy/src/maths/deriv/plusder.c0000644000175000017500000000251714163340332020014 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; } tmp_ns50wwy/src/maths/deriv/invderiv.c0000644000175000017500000000552714163340332020170 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); } tmp_ns50wwy/src/maths/deriv/powderiv.c0000644000175000017500000000765114163340332020201 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; } tmp_ns50wwy/src/maths/deriv/atander.c0000644000175000017500000000674514163340332017763 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)); } tmp_ns50wwy/src/maths/deriv/cubeder.c0000644000175000017500000000640114163340332017743 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); } tmp_ns50wwy/src/maths/Makefile.am0000644000175000017500000000025314163340332017110 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 tmp_ns50wwy/src/maths/ni/0000755000175000017500000000000014163340332015462 5ustar carstencarstentmp_ns50wwy/src/maths/ni/niniter.c0000644000175000017500000000174314163340332017303 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; } tmp_ns50wwy/src/maths/ni/Makefile.am0000644000175000017500000000062614163340332017522 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 tmp_ns50wwy/src/maths/ni/nireinit.c0000644000175000017500000000222514163340332017450 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); } tmp_ns50wwy/src/maths/ni/nisenre.c0000644000175000017500000000425114163340332017273 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); } tmp_ns50wwy/src/maths/ni/niinteg.c0000644000175000017500000000455614163340332017275 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); } tmp_ns50wwy/src/maths/ni/nicomcof.c0000644000175000017500000001361714163340332017433 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); } tmp_ns50wwy/src/maths/ni/nipzmeth.c0000644000175000017500000002242014163340332017464 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; 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; } tmp_ns50wwy/src/maths/ni/ChangeLog0000644000175000017500000000121414163340332017232 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 tmp_ns50wwy/src/maths/ni/niaciter.c0000644000175000017500000000470614163340332017433 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); } tmp_ns50wwy/src/maths/ni/niditer.c0000644000175000017500000000432314163340332017266 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); } tmp_ns50wwy/src/maths/ni/nipred.c0000644000175000017500000001104214163340332017105 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 */ tmp_ns50wwy/src/maths/ni/niiter.c0000644000175000017500000002300114163340332017114 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 = fabs(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*/ } tmp_ns50wwy/src/maths/ni/niinit.c0000644000175000017500000000131214163340332017115 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); } tmp_ns50wwy/src/maths/ni/nidest.c0000644000175000017500000000167714163340332017127 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 } tmp_ns50wwy/src/maths/ni/niconv.c0000644000175000017500000000516114163340332017125 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 */ } tmp_ns50wwy/src/maths/fft/0000755000175000017500000000000014163340332015633 5ustar carstencarstentmp_ns50wwy/src/maths/fft/Read-Me0000644000175000017500000000546314163340332017000 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. tmp_ns50wwy/src/maths/fft/NOTE0000644000175000017500000000344414163340332016330 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] tmp_ns50wwy/src/maths/fft/Makefile.am0000644000175000017500000000050714163340332017671 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 tmp_ns50wwy/src/maths/fft/fftlib.c0000644000175000017500000022730514163340332017256 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); } } } tmp_ns50wwy/src/maths/fft/matlib.h0000644000175000017500000000240514163340332017255 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 */ tmp_ns50wwy/src/maths/fft/matlib.c0000644000175000017500000002153714163340332017257 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; } } tmp_ns50wwy/src/maths/fft/fftlib.h0000644000175000017500000000577014163340332017263 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 */ tmp_ns50wwy/src/maths/fft/fftext.c0000644000175000017500000002641614163340332017310 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 */ tmp_ns50wwy/src/maths/sparse/0000755000175000017500000000000014163340332016351 5ustar carstencarstentmp_ns50wwy/src/maths/sparse/Makefile.am0000644000175000017500000000055614163340332020413 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 tmp_ns50wwy/src/maths/sparse/spoutput.c0000644000175000017500000005343614163340332020433 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 write mode. */ pMatrixFile = fopen(File,"w"); 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 */ tmp_ns50wwy/src/maths/sparse/spalloc.c0000644000175000017500000005525214163340332020163 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; } tmp_ns50wwy/src/maths/sparse/spconfig.h0000644000175000017500000004415014163340332020336 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 tmp_ns50wwy/src/maths/sparse/spsolve.c0000644000175000017500000004650714163340332020224 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 */ tmp_ns50wwy/src/maths/sparse/spsmp.c0000644000175000017500000002725414163340332017671 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]; if (Col == -1) /* No element available */ return NULL; 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); } tmp_ns50wwy/src/maths/sparse/ChangeLog0000644000175000017500000000023114163340332020117 0ustar carstencarsten1999-08-28 Emmanuel Rouat * spdefs.h: #includes spice.h instead of misc.h added a few #undefs to avoid redaclarations tmp_ns50wwy/src/maths/sparse/sputils.c0000644000175000017500000020125314163340332020223 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 */ tmp_ns50wwy/src/maths/sparse/spdefs.h0000644000175000017500000007650214163340332020020 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 tmp_ns50wwy/src/maths/sparse/spbuild.c0000644000175000017500000010242414163340332020162 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 */ tmp_ns50wwy/src/maths/sparse/spextra.c0000644000175000017500000000152214163340332020203 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; } } } tmp_ns50wwy/src/maths/sparse/spfactor.c0000644000175000017500000030637314163340332020352 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" #ifdef HAS_WINGUI extern void SetAnalyse(char *Analyse, int Percent); /* to increase responsiveness of Windows GUI */ #define INCRESP \ do { \ static int ii = 100; \ ii--;\ if (ii == 0) { \ SetAnalyse("or", 0); \ ii = 100; \ } \ } while(0) #endif /* * 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++) { #ifdef HAS_WINGUI /* macro to improve responsiveness of Windows GUI */ INCRESP; #endif 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++) { #ifdef HAS_WINGUI /* macro to improve responsiveness of Windows GUI */ INCRESP; #endif 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 */ tmp_ns50wwy/src/maths/misc/0000755000175000017500000000000014163340332016007 5ustar carstencarstentmp_ns50wwy/src/maths/misc/bernoull.h0000644000175000017500000000037014163340332020002 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 tmp_ns50wwy/src/maths/misc/Makefile.am0000644000175000017500000000064414163340332020047 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 tmp_ns50wwy/src/maths/misc/norm.h0000644000175000017500000000045114163340332017133 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 tmp_ns50wwy/src/maths/misc/equality.c0000644000175000017500000000341114163340332020007 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 /* 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; } tmp_ns50wwy/src/maths/misc/accuracy.h0000644000175000017500000000106514163340332017754 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 tmp_ns50wwy/src/maths/misc/norm.c0000644000175000017500000000252614163340332017133 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 ); } tmp_ns50wwy/src/maths/misc/scalb.c0000644000175000017500000000114414163340332017237 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 */ tmp_ns50wwy/src/maths/misc/accuracy.c0000644000175000017500000001165514163340332017755 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 ); } } */ tmp_ns50wwy/src/maths/misc/logb.c0000644000175000017500000000066514163340332017105 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 tmp_ns50wwy/src/maths/misc/test_accuracy.c0000644000175000017500000000224414163340332021006 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); } tmp_ns50wwy/src/maths/misc/randnumb.c0000644000175000017500000002330014163340332017757 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; } tmp_ns50wwy/src/maths/misc/isnan.c0000644000175000017500000000203614163340332017264 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 */ tmp_ns50wwy/src/maths/misc/bernoull.c0000644000175000017500000000334014163340332017775 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; } tmp_ns50wwy/src/maths/misc/isinf.c0000644000175000017500000000107714163340332017270 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 */ tmp_ns50wwy/src/maths/poly/0000755000175000017500000000000014163340332016037 5ustar carstencarstentmp_ns50wwy/src/maths/poly/Makefile.am0000644000175000017500000000055714163340332020102 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 tmp_ns50wwy/src/maths/poly/polyderiv.h0000644000175000017500000000016014163340332020222 0ustar carstencarsten#ifndef ngspice_POLYDERIV_H #define ngspice_POLYDERIV_H void ft_polyderiv(double *coeffs, int degree); #endif tmp_ns50wwy/src/maths/poly/polyderiv.c0000644000175000017500000000023514163340332020220 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]; } } tmp_ns50wwy/src/maths/poly/polyeval.c0000644000175000017500000000044614163340332020042 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; } tmp_ns50wwy/src/maths/poly/interpolate.c0000644000175000017500000000724314163340332020537 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); } tmp_ns50wwy/src/maths/poly/interpolate.h0000644000175000017500000000032214163340332020533 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 tmp_ns50wwy/src/maths/poly/polyfit.h0000644000175000017500000000026614163340332017702 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 tmp_ns50wwy/src/maths/poly/ChangeLog0000644000175000017500000000026414163340332017613 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. tmp_ns50wwy/src/maths/poly/poly.h0000644000175000017500000000030714163340332017173 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 tmp_ns50wwy/src/maths/poly/polyfit.c0000644000175000017500000000733114163340332017675 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); } tmp_ns50wwy/src/maths/poly/polyeval.h0000644000175000017500000000016614163340332020046 0ustar carstencarsten#ifndef ngspice_POLYEVAL_H #define ngspice_POLYEVAL_H double ft_peval(double x, double *coeffs, int degree); #endif tmp_ns50wwy/src/maths/cmaths/0000755000175000017500000000000014163340332016333 5ustar carstencarstentmp_ns50wwy/src/maths/cmaths/cmath.h0000644000175000017500000000023414163340332017577 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 tmp_ns50wwy/src/maths/cmaths/test_cx_mag.c0000644000175000017500000000104514163340332020774 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; } tmp_ns50wwy/src/maths/cmaths/Makefile.am0000644000175000017500000000222614163340332020371 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 CMATHTESTS 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 endif CMATHTESTS AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/maths/poly AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/maths/cmaths/cmath3.c0000644000175000017500000003205114163340332017657 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 int cln(ngcomplex_t *c, ngcomplex_t *rv); static void ctimes(ngcomplex_t *c1, ngcomplex_t *c2, ngcomplex_t *rv); void *cx_divide(void *data1, void *data2, short int datatype1, short int datatype2, int length) { int xrc = 0; void *rv; 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; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { double *d; rv = d = alloc_d(length); for (i = 0; i < length; i++) { rcheck(dd2[i] != 0, "divide"); d[i] = dd1[i] / dd2[i]; } } else { rv = 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])); } } EXITPOINT: if (xrc != 0) { /* Free resources on error */ tfree(rv); rv = NULL; } return rv; } /* end of function cx_divide */ /* 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) { int xrc = 0; void *rv; double *dd1 = (double *) data1; double *dd2 = (double *) data2; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { double *d; rv = d = alloc_d(length); int i; for (i = 0; i < length; i++) { rcheck((dd1[i] >= 0) || (floor(dd2[i]) == ceil(dd2[i])), "power"); d[i] = pow(dd1[i], dd2[i]); } } else { ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; ngcomplex_t *c, c1, c2, *t; rv = c = alloc_c(length); int i; 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)) */ ngcomplex_t tmp, tmp2; if (cln(&c1, &tmp) != 0) { (void) fprintf(cp_err, "power of 0 + i 0 not allowed.\n"); xrc = -1; goto EXITPOINT; } ctimes(&c2, &tmp, &tmp2); t = cexp_sp3(&tmp2); c[i] = *t; /* } else { realpart(c[i]) = pow(realpart(c1), realpart(c2)); imagpart(c[i]) = 0.0; */ } } } EXITPOINT: if (xrc != 0) { /* Free resources on error */ txfree(rv); rv = NULL; } return rv; } /* end of function cx_power */ /* 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 int cln(ngcomplex_t *c, ngcomplex_t *rv) { double c_r = c->cx_real; double c_i = c->cx_imag; if (c_r == 0 && c_i == 0) { (void) fprintf(cp_err, "Complex log of 0 + i0 is undefined.\n"); return -1; } rv->cx_real = log(cmag(*c)); if (c_i != 0.0) { rv->cx_imag = atan2(c_i, c_r); } else { rv->cx_imag = 0.0; } return 0; } /* end of functon cln */ static void ctimes(ngcomplex_t *c1, ngcomplex_t *c2, ngcomplex_t *rv) { rv->cx_real = realpart(*c1) * realpart(*c2) - imagpart(*c1) * imagpart(*c2); rv->cx_imag = imagpart(*c1) * realpart(*c2) + realpart(*c1) * imagpart(*c2); return; } /* 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); } tmp_ns50wwy/src/maths/cmaths/cmath2.c0000644000175000017500000006076114163340332017667 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) { if (length == 0) { (void) fprintf(cp_err, "mean calculation requires " "at least one element.\n"); return NULL; } *newlength = 1; 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) { if (length == 0) { (void) fprintf(cp_err, "standard deviation calculation requires " "at least one element.\n"); return NULL; } *newlength = 1; if (type == VF_REAL) { double *p_mean = (double *) cx_mean(data, type, length, newlength, newtype); double mean = *p_mean; double *d, sum = 0.0; double *dd = (double *) data; d = alloc_d(1); *newtype = VF_REAL; int i; for (i = 0; i < length; i++) { const double tmp = dd[i] - mean; sum += tmp * tmp; } *d = sqrt(sum / ((double) length - 1.0)); txfree(p_mean); return (void *) d; } else { ngcomplex_t * const p_cmean = (ngcomplex_t *) cx_mean(data, type, length, newlength, newtype); const ngcomplex_t cmean = *p_cmean; const double rmean = realpart(cmean); const double imean = imagpart(cmean); double *d, sum = 0.0; ngcomplex_t *cc = (ngcomplex_t *) data; d = alloc_d(1); *newtype = VF_REAL; int i; for (i = 0; i < length; i++) { const double a = realpart(cc[i]) - rmean; const double b = imagpart(cc[i]) - imean; sum += a * a + b * b; } *d = sqrt(sum / ((double) length - 1.0)); txfree(p_cmean); return (void *) d; } } /* end of function cx_stddev */ 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) { int xrc = 0; void *rv; double *dd1 = (double *) data1; double *dd2 = (double *) data2; if ((datatype1 == VF_REAL) && (datatype2 == VF_REAL)) { double *d; rv = d = alloc_d(length); int i; for (i = 0; i < length; i++) { const int r1 = (int) floor(fabs(dd1[i])); rcheck(r1 > 0, "mod"); const int r2 = (int)floor(fabs(dd2[i])); rcheck(r2 > 0, "mod"); const int r3 = r1 % r2; d[i] = (double) r3; } } else { ngcomplex_t *c, c1, c2; ngcomplex_t *cc1 = (ngcomplex_t *) data1; ngcomplex_t *cc2 = (ngcomplex_t *) data2; rv = c = alloc_c(length); int i; 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]; } const int r1 = (int) floor(fabs(realpart(c1))); rcheck(r1 > 0, "mod"); const int r2 = (int) floor(fabs(realpart(c2))); rcheck(r2 > 0, "mod"); const int i1 = (int) floor(fabs(imagpart(c1))); rcheck(i1 > 0, "mod"); const int i2 = (int) floor(fabs(imagpart(c2))); rcheck(i2 > 0, "mod"); const int r3 = r1 % r2; const int i3 = i1 % i2; realpart(c[i]) = (double) r3; imagpart(c[i]) = (double) i3; } } EXITPOINT: if (xrc != 0) { /* Free resources on error */ txfree(rv); rv = NULL; } return rv; } /* end of function cx_mod */ /* Routoure JM : Compute the max of a vector. */ void *cx_max(void *data, short int type, int length, int *newlength, short int *newtype) { if (length == 0) { (void) fprintf(cp_err, "maximum calculation requires " "at least one element.\n"); return NULL; } *newlength = 1; 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++) { const double tmp = dd[i]; if (largest < tmp) { largest = tmp; } } *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 = 1; i < length; i++) { const double tmpr = realpart(cc[i]); if (largest_real < tmpr) { largest_real = tmpr; } const double tmpi = imagpart(cc[i]); if (largest_complex < tmpi) { largest_complex = tmpi; } } realpart(*c) = largest_real; imagpart(*c) = largest_complex; return (void *) c; } } /* end of function cx_max */ /* Routoure JM : Compute the min of a vector. */ void *cx_min(void *data, short int type, int length, int *newlength, short int *newtype) { if (length == 0) { (void) fprintf(cp_err, "minimum calculation requires " "at least one element.\n"); return NULL; } *newlength = 1; 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++) { const double tmp = dd[i]; if (smallest > tmp) { smallest = tmp; } } *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++) { const double tmpr = realpart(cc[i]); if (smallest_real > tmpr) { smallest_real = tmpr; } const double tmpi = imagpart(cc[i]); if (smallest_complex > tmpi) { smallest_complex = tmpi; } } realpart(*c) = smallest_real; imagpart(*c) = smallest_complex; return (void *) c; } } /* end of function cx_min */ /* Routoure JM : Compute the differential of a vector. */ void *cx_d(void *data, short int type, int length, int *newlength, short int *newtype) { if (length == 0) { (void) fprintf(cp_err, "differential calculation requires " "at least one element.\n"); return NULL; } *newlength = length; 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; } } /* end of function cx_d */ 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); } } tmp_ns50wwy/src/maths/cmaths/test_cx_ph.c0000644000175000017500000000124514163340332020641 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; } tmp_ns50wwy/src/maths/cmaths/cmath1.h0000644000175000017500000000415214163340332017663 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_conj(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 tmp_ns50wwy/src/maths/cmaths/cmath1.c0000644000175000017500000005672214163340332017670 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 #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); *newlength = length; *newtype = VF_COMPLEX; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) { realpart(c[i]) = -imagpart(cc[i]); imagpart(c[i]) = realpart(cc[i]); } } else { double *dd = (double *) data; int i; 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); *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) { d[i] = realpart(cc[i]); } } else { double *dd = (double *) data; int i; 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); *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) { d[i] = imagpart(cc[i]); } } else { double *dd = (double *) data; int i; for (i = 0; i < length; i++) { d[i] = dd[i]; } } return (void *) d; } /* Create complex conjugate of data */ void *cx_conj(void *data, short int type, int length, int *p_newlength, short int *p_newtype) { /* Length and type do not change */ *p_newlength = length; *p_newtype = type; /* For complex, copy with conjugation */ if (type == VF_COMPLEX) { ngcomplex_t * const c_dst = alloc_c(length); ngcomplex_t *c_dst_cur = c_dst; ngcomplex_t *c_src_cur = (ngcomplex_t *) data; ngcomplex_t * const c_src_end = c_src_cur + length; for ( ; c_src_cur < c_src_end; c_src_cur++, c_dst_cur++) { c_dst_cur->cx_real = c_src_cur->cx_real; c_dst_cur->cx_imag = -c_src_cur->cx_imag; } return (void *) c_dst; } /* Else real, so just copy */ return memcpy(alloc_d(length), data, (unsigned int) length * sizeof(double)); } /* end of function cx_conj */ /* 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) { int xrc = 0; double *d = alloc_d(length); *newlength = length; *newtype = VF_REAL; if (type == VF_COMPLEX) { ngcomplex_t *cc = (ngcomplex_t *) data; int i; for (i = 0; i < length; i++) { const double 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 { double *dd = (double *) data; int i; for (i = 0; i < length; i++) { const double tt = dd[i]; rcheck(tt > 0, "db"); /* if (dd[i] == 0.0) d[i] = 20.0 * - log(HUGE); else */ d[i] = 20.0 * log10(tt); } } EXITPOINT: if (xrc != 0) { txfree(d); d = (double *) NULL; } return ((void *) d); } /* end of function cx_db */ void *cx_log10(void *data, short int type, int length, int *newlength, short int *newtype) { int xrc = 0; void *rv; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; int i; rv = 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])); } } } else { double *d; double *dd = (double *) data; int i; rv = 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]); } } } *newlength = length; EXITPOINT: if (xrc != 0) { /* Free resources on error */ txfree(rv); rv = NULL; } return rv; } /* end of function cx_log10 */ void *cx_log(void *data, short int type, int length, int *newlength, short int *newtype) { int xrc = 0; void *rv; if (type == VF_COMPLEX) { ngcomplex_t *c; ngcomplex_t *cc = (ngcomplex_t *) data; rv = c = alloc_c(length); *newtype = VF_COMPLEX; int i; 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])); } } } else { double *d; double *dd = (double *) data; rv = d = alloc_d(length); *newtype = VF_REAL; int i; 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]); } } *newlength = length; EXITPOINT: if (xrc != 0) { /* Free resources on error */ txfree(rv); rv = NULL; } return rv; } /* end of function cx_log */ 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) { int xrc = 0; double *d = alloc_d(length); int i; for (i = 0; i < length; i++) { rcheck(tan(degtorad(dd[i])) != 0, "tan"); d[i] = tan(degtorad(dd[i])); } EXITPOINT: if (xrc != 0) { /* Free resources on error */ txfree(d); d = (double *) NULL; } return d; } /* end of function d_tan */ 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; } /* See https://proofwiki.org/wiki/Tangent_of_Complex_Number (formulation 4) among * others for the tangent formula: * sin z = sin(x + iy) = sin x cos(iy) + cos x sin(iy) = sin x cosh y + i cos x sinh y * cos z = cos(x + iy) = cos x cos(iy) + sin x sin(iy) = cos x cosh y - i sin x sinh y * tan z = ((sin x cosh y + i cos x sinh y) / (cos x cosh y - i sin x sinh y)) * (cos x cosh y + isin x sinh y) / (cos x cosh y + i sin x sinh y) = ... * * * tan(a + bi) = (sin(2a) + i * sinh(2b)) / (cos(2a) + cosh(2b)) */ static ngcomplex_t *c_tan(ngcomplex_t *cc, int length) { ngcomplex_t * const c = alloc_c(length); int i; for (i = 0; i < length; i++) { errno = 0; ngcomplex_t *p_dst = c + i; ngcomplex_t *p_src = cc + i; const double a = p_src->cx_real; const double b = p_src->cx_imag; const double u = 2 * degtorad(a); const double v = 2 * degtorad(b); const double n_r = sin(u); const double n_i = sinh(v); const double d1 = cos(u); const double d2 = cosh(v); const double d = d1 + d2; if (errno != 0 || d == 0.0) { (void) fprintf(cp_err, "Invalid argument %lf + %lf i for compex tangent", a, b); txfree(c); return (ngcomplex_t *) NULL; } p_dst->cx_real = n_r / d; p_dst->cx_imag = n_i / d; } /* end of loop over elements in array */ return c; } /* end of function c_tan */ /* complex tanh function, uses tanh(z) = -i * tan(i * z). * Unfortunately, it did so very inefficiently (a memory allocations per * value calculated!) and leaked memory badly (all of the aforementioned * allocations.) These issues were fixed 2020-03-04 */ static ngcomplex_t *c_tanh(ngcomplex_t *cc, int length) { ngcomplex_t * const tmp = alloc_c(length); /* i * z */ /* Build the i * z array to allow tan() to be called */ { int i; for (i = 0; i < length; ++i) { ngcomplex_t *p_dst = tmp + i; ngcomplex_t *p_src = cc + i; /* multiply by i */ p_dst->cx_real = -p_src->cx_imag; p_dst->cx_imag = p_src->cx_real; } } /* Calculat tan(i * z), exiting on failure */ ngcomplex_t *const c = c_tan(tmp, length); if (c == (ngcomplex_t *) NULL) { txfree(tmp); return (ngcomplex_t *) NULL; } /* Multiply by -i to find final result */ { int i; for (i = 0; i < length; ++i) { ngcomplex_t *p_cur = c + i; const double cx_real = p_cur->cx_real; p_cur->cx_real = p_cur->cx_imag; p_cur->cx_imag = -cx_real; } } return c; } /* end of function c_tanh */ 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 * const 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; } txfree(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; } tmp_ns50wwy/src/maths/cmaths/cmath4.h0000644000175000017500000000246614163340332017674 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_integ(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 tmp_ns50wwy/src/maths/cmaths/test_cx_j.c0000644000175000017500000000111714163340332020461 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; } tmp_ns50wwy/src/maths/cmaths/cmath3.h0000644000175000017500000000174114163340332017666 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 tmp_ns50wwy/src/maths/cmaths/test_cx_cph.c0000644000175000017500000000300614163340332021001 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; } tmp_ns50wwy/src/maths/cmaths/cmath2.h0000644000175000017500000000436414163340332017671 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 tmp_ns50wwy/src/maths/cmaths/cmath4.c0000644000175000017500000006750414163340332017673 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; if (grouping != length) { fprintf(cp_err, "Error: interpolation of multi-dimensional vectors is currently not supported\n"); return (NULL); } /* 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; /* FIXME: this function is defect: ns data cannot have same base and grouping as the original data. Will now do only if grouping == length. */ for (base = 0; base < length; base += grouping) { if (!ft_interpolate((double *) data + base, d + base, os->v_realdata + base, grouping, ns->v_realdata + base, ns->v_length, 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; } } /* integrate a vector using trapezoidal rule */ void* cx_integ(void* data, short int type, int length, int* newlength, short int* newtype, struct plot* pl, struct plot* newpl, int grouping) { 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_integ: bad scale\n"); return (NULL); } *newlength = length; *newtype = type; if (type == VF_COMPLEX) { fprintf(cp_err, "Error: Function integ is not supported for complex data\n"); return (NULL); } else { /* all-real case */ double* outdata, * indata; double* scale; int i; double delta; indata = (double*)data; outdata = alloc_d(length); scale = alloc_d(length); /* 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]; /* use trapezoidal rule */ outdata[0] = 0; for (i = 1; i < length; i++) { delta = scale[i] - scale[i - 1]; outdata[i] = outdata[i - 1] + (indata[i] + indata[i - 1]) * delta / 2.; } tfree(scale); 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 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 = \ 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 libngspice_la_LDFLAGS += -lstdc++ 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 ## if !SHWIN ## if !SHCYG libngspice_la_LDFLAGS += -version-info $(LT_NGSPICE_CURRENT):$(LT_NGSPICE_REVISION):$(LT_LIBNGSPICE_AGE) ## endif ## endif SHAREDSPICE_VERSION = @VERSION@ endif SHARED_MODULE tmp_ns50wwy/src/tclspice.c0000644000175000017500000021410014163340332015710 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) { NG_IGNORE(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); } tmp_ns50wwy/src/devaxis0000644000175000017500000000237614163340332015336 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 tmp_ns50wwy/src/ngspice.ico0000644000175000017500000000137614163340332016073 0ustar carstencarsten è( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿüÌÌÌÌÌÌÌÌÌÌÌÌÌÌÏÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÏÿÿÿðÿÿÿÿÿÿÿÿÿüÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿðð@ÿÿÿÿÿÿÿÿðð@ÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÌÌÿÿÿÿððÿÿÿÿÿüÏüÏÿÿÿððÿÿÿÿÿÿÿüÏÿÿÿððÿüÏüÏÿÌüÏÿÿÿðÿÿÿüÏüÏüÌÌÏÿÿÿððÿüÏüÏüÏüÏÿðÿüÏüÏüÏüÏÿðÿüÏüÏüÏüÏÿÿÿððÿüÏüÏüÏüÏÿÿÿðÿÿÿüÌÌÏüÌÌÏÿÿÿððÿüÏÌÿÿÌüÏÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿÿÿÿðð@ÿÿÿÿÿÿÿÿðð@ÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÏÿÿÿðÿÿÿÿÿÿÿÿÿüÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌüÌÌÌÌÌÌÌÌÌÌÌÌÌÌÏÿÌÌÌÌÌÌÌÌÌÌÌÌÌÌÿtmp_ns50wwy/src/ciderinit0000644000175000017500000000075214163340332015641 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 tmp_ns50wwy/src/xspice/0000755000175000017500000000000014163340332015233 5ustar carstencarstentmp_ns50wwy/src/xspice/Makefile.am0000644000175000017500000000206414163340332017271 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 tmp_ns50wwy/src/xspice/mif/0000755000175000017500000000000014163340332016006 5ustar carstencarstentmp_ns50wwy/src/xspice/mif/Makefile.am0000644000175000017500000000076214163340332020047 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 tmp_ns50wwy/src/xspice/mif/mifmpara.c0000644000175000017500000001476014163340332017756 0ustar carstencarsten/*============================================================================ FILE MIFmParam.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/mifask.c0000644000175000017500000001415414163340332017431 0ustar carstencarsten/*============================================================================ FILE MIFask.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/miftrunc.c0000644000175000017500000001271114163340332020003 0ustar carstencarsten/*============================================================================ FILE MIFtrunc.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } /* * * 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; } tmp_ns50wwy/src/xspice/mif/mifconvt.c0000644000175000017500000000754514163340332020012 0ustar carstencarsten/*============================================================================ FILE MIFconvTest.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/mifutil.c0000644000175000017500000002064614163340332017633 0ustar carstencarsten/*============================================================================ FILE MIFutil.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } #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; } tmp_ns50wwy/src/xspice/mif/mif.c0000644000175000017500000000203714163340332016727 0ustar carstencarsten/*============================================================================ FILE MIF.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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,}, }; tmp_ns50wwy/src/xspice/mif/mifdelete.c0000644000175000017500000001335114163340332020113 0ustar carstencarsten/*============================================================================ FILE MIFdelete.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/mif/mifload.c0000644000175000017500000010553114163340332017572 0ustar carstencarsten/*============================================================================ FILE MIFload.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/mifmask.c0000644000175000017500000001335214163340332017605 0ustar carstencarsten/*============================================================================ FILE MIFmAsk.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/mifdestr.c0000644000175000017500000000146614163340332017776 0ustar carstencarsten/*============================================================================ FILE MIFdestroy.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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) { } tmp_ns50wwy/src/xspice/mif/mifgetvalue.c0000644000175000017500000002063714163340332020472 0ustar carstencarsten/*============================================================================ FILE MIFgetValue.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/mif/mifgetmod.c0000644000175000017500000002110714163340332020126 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); } tmp_ns50wwy/src/xspice/mif/mifsetup.c0000644000175000017500000005405614163340332020020 0ustar carstencarsten/*============================================================================ FILE MIFsetup.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/mif/mifmdelete.c0000644000175000017500000000356714163340332020300 0ustar carstencarsten/*============================================================================ FILE MIFmDelete.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/mif/mif_inp2.c0000644000175000017500000010736514163340332017671 0ustar carstencarsten/*============================================================================ FILE MIF_INP2A.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/cmpp/0000755000175000017500000000000014163340332016172 5ustar carstencarstentmp_ns50wwy/src/xspice/cmpp/ifs_yacc_y.h0000644000175000017500000000263314163340332020457 0ustar carstencarsten/*============================================================================ FILE ifs_yacc.h MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 { bool has_value; Data_Type_t kind; union { bool bvalue; int ivalue; double rvalue; Complex_t cvalue; char *svalue; } u; } My_Value_t; typedef struct { bool has_bound; My_Value_t bound; } Bound_t; typedef struct { bool 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*); tmp_ns50wwy/src/xspice/cmpp/Makefile.am0000644000175000017500000000232614163340332020231 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 noinst_PROGRAMS = cmpp AM_CPPFLAGS = -I. -I$(srcdir) AM_YFLAGS = -d cmpp_SOURCES = main.c cmpp.h file_buffer.c file_buffer.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 if WINGUI cmpp_LDADD = -lshlwapi endif if WINCONSOLE cmpp_LDADD = -lshlwapi endif if SHWIN cmpp_LDADD = -lshlwapi endif 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 file_buffer.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 $@ $^ $(cmpp_LDADD) distclean-local: -rm -rf build endif tmp_ns50wwy/src/xspice/cmpp/pp_ifs.c0000644000175000017500000000570314163340332017623 0ustar carstencarsten/*============================================================================ FILE pp_ifs.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 */ int 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 != 0) { exit(1); } /* Write the ifspec.c file required by the spice simulator */ status = write_ifs_c_file("ifspec.c",&ifs_table); if(status != 0) { exit(1); } rem_ifs_table(&ifs_table); } void rem_ifs_table(Ifs_Table_t *ifs_table) { /* Remove the ifs_table */ free(ifs_table->name.c_fcn_name); free(ifs_table->name.description); free(ifs_table->name.model_name); { Conn_Info_t * const p_conn = ifs_table->conn; const int num_conn = ifs_table->num_conn; int i; for (i = 0; i < num_conn; ++i) { Conn_Info_t *p_conn_cur = p_conn + i; free(p_conn_cur->name); free(p_conn_cur->description); free(p_conn_cur->default_type); } } { Param_Info_t * const p_param = ifs_table->param; const int num_param = ifs_table->num_param; int i; for (i = 0; i < num_param; ++i) { Param_Info_t *p_param_cur = p_param + i; free(p_param_cur->name); free(p_param_cur->description); } } { Inst_Var_Info_t * const p_inst_var = ifs_table->inst_var; const int num_inst_var = ifs_table->num_inst_var; int i; for(i = 0; i < num_inst_var; ++i) { Inst_Var_Info_t *p_inst_var_cur = p_inst_var + i; free(p_inst_var_cur->name); free(p_inst_var_cur->description); } } free(ifs_table->conn); free(ifs_table->param); free(ifs_table->inst_var); } /* end of function rem_ifs_table */ tmp_ns50wwy/src/xspice/cmpp/mod_lex.l0000644000175000017500000000603214163340332017777 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;} %% tmp_ns50wwy/src/xspice/cmpp/cmpp.h0000644000175000017500000002160014163340332017301 0ustar carstencarsten/*============================================================================ FILE cmpp.h MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #include #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 #include /* If CRT debugging is being used so that crtdbg.h is included, strdup will * be defined to a debug version. In this case, strdup should not be * redefined to the standard version. */ #ifndef strdup #define strdup _strdup #endif #define unlink _unlink #define isatty _isatty #define fileno _fileno #endif /* _MSC_VER */ /* *********************************************************************** */ #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_NAME_LEN 1024 /* Maximum SPICE name length */ /* ******************************************************************** */ /* Structures used by parser to check for valid connections/parameters */ /* ******************************************************************** */ /* * The direction of a connector */ typedef enum { CMPP_IN, CMPP_OUT, CMPP_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 { CMPP_BOOLEAN, CMPP_INTEGER, CMPP_REAL, CMPP_COMPLEX, CMPP_STRING, CMPP_POINTER, /* NOTE: CMPP_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 { bool 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 */ bool is_array; /* True if connection is an array */ bool has_conn_ref; /* True if there is associated with an array conn */ int conn_ref; /* Subscript of the associated array conn */ bool has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ bool has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ bool 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, ... */ bool has_default; /* True if there is a default value */ Value_t default_value; /* The default value */ bool has_lower_limit; /* True if there is a lower limit */ Value_t lower_limit; /* The lower limit for this parameter */ bool has_upper_limit; /* True if there is a upper limit */ Value_t upper_limit; /* The upper limit for this parameter */ bool is_array; /* True if parameter is an array */ bool has_conn_ref; /* True if there is associated with an array conn */ int conn_ref; /* Subscript of the associated array conn */ bool has_lower_bound; /* True if there is an array size lower bound */ int lower_bound; /* Array size lower bound */ bool has_upper_bound; /* True if there is an array size upper bound */ int upper_bound; /* Array size upper bound */ bool 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, ... */ bool 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(const char *filename); int output_paths_from_lst_file(const 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 vprint_error(const char *fmt, va_list p); void str_to_lower(char *s); int read_ifs_file(const char *filename, int mode, Ifs_Table_t *ifs_table); int write_ifs_c_file(const char *filename, Ifs_Table_t *ifs_table); char *gen_filename(const char *filename, const char *mode); void rem_ifs_table(Ifs_Table_t *ifs_table); /* * 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 tmp_ns50wwy/src/xspice/cmpp/pp_lst.c0000644000175000017500000014651514163340332017653 0ustar carstencarsten/*============================================================================ FILE pp_lst.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #include #include #include #include #include #include "cmpp.h" #include "file_buffer.h" /* *********************************************************************** */ /* * 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 */ unsigned int version; /* version of the code model */ } Model_Info_t; typedef struct { char *path_name; /* Pathname read from udn path file */ char *node_name; /* Name of node type */ unsigned int version; /* version of the code model */ } Node_Info_t; /* Structure for uniqueness testing */ struct Key_src { const char *key; /* value to compare */ const char *src; /* source of value */ }; /************************************************************************ */ static int cmpr_ks(const struct Key_src *ks1, const struct Key_src *ks2); static void free_model_info(int num_models, Model_Info_t *p_model_info); static void free_node_info(int num_nodes, Node_Info_t *p_node_info); static int read_modpath(int *num_models, Model_Info_t **model_info); static int read_udnpath(int *num_nodes, Node_Info_t **node_info); static int read_model_names(int num_models, Model_Info_t *model_info); static int read_node_names(int num_nodes, Node_Info_t *node_info); static int check_uniqueness(int num_models, Model_Info_t *model_info, int num_nodes, Node_Info_t *node_info); static void report_error_spice_name(const struct Key_src *p_ks1, const struct Key_src *p_ks2); static void report_error_function_name (const struct Key_src *p_ks1, const struct Key_src *p_ks2); static void report_error_udn_name(const struct Key_src *p_ks1, const struct Key_src *p_ks2); static bool test_for_duplicates(unsigned int n, struct Key_src *p_ks, void (*p_error_reporter)(const struct Key_src *p_ks1, const struct Key_src *p_ks2)); static inline void trim_slash(size_t *p_n, char *p); static int write_CMextrn(int num_models, Model_Info_t *model_info); static int write_CMinfo(int num_models, Model_Info_t *model_info); static int write_CMinfo2(int num_models, Model_Info_t *model_info); static int write_UDNextrn(int num_nodes, Node_Info_t *node_info); static int write_UDNinfo(int num_nodes, Node_Info_t *node_info); static int write_UDNinfo2(int num_nodes, Node_Info_t *node_info); static int write_objects_inc(int num_models, Model_Info_t *model_info, int num_nodes, Node_Info_t *node_info); static int 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) { int 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 != 0) { exit(1); } /* Get list of node types from udn pathname file */ status = read_udnpath(&num_nodes, &node_info); if (status < 0) { exit(1); } /* Get the spice and C function names from the ifspec.ifs files */ status = read_model_names(num_models, model_info); if(status != 0) { exit(1); } /* Get the user-defined node type names */ status = read_node_names(num_nodes, node_info); if(status != 0) { exit(1); } /* Check to be sure the names are unique */ status = check_uniqueness(num_models, model_info, num_nodes, node_info); if(status != 0) { exit(1); } /* Write out the CMextrn.h file used to compile SPIinit.c */ status = write_CMextrn(num_models, model_info); if(status != 0) { exit(1); } /* Write out the CMinfo.h file used to compile SPIinit.c */ status = write_CMinfo(num_models, model_info); if(status != 0) { exit(1); } status = write_CMinfo2(num_models, model_info); if(status != 0) { exit(1); } /* Write out the UDNextrn.h file used to compile SPIinit.c */ status = write_UDNextrn(num_nodes, node_info); if(status != 0) { exit(1); } /* Write out the UDNinfo.h file used to compile SPIinit.c */ status = write_UDNinfo(num_nodes, node_info); if(status != 0) { exit(1); } status = write_UDNinfo2(num_nodes, node_info); if(status != 0) { 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 != 0) { exit(1); } /* Free allocations */ if (model_info != (Model_Info_t *) NULL) { free_model_info(num_models, model_info); } if (node_info != (Node_Info_t *) NULL) { free_node_info(num_nodes, node_info); } } /* end of function preprocess_lst_files */ /* This function parses the supplied .lst file and outputs the paths to * stdout */ int output_paths_from_lst_file(const char *filename) { int xrc = 0; FILEBUF *fbp = (FILEBUF *) NULL; /* for reading MODPATH_FILENAME */ unsigned int n_path = 0; /* Open the file */ if ((fbp = fbopen(filename, 0)) == (FILEBUF *) NULL) { print_error("ERROR - Unable to open file \"%s\" to obtain " "paths: %s", filename, strerror(errno)); xrc = -1; goto EXITPOINT; } bool f_have_path = false; /* do not have a path to store */ FBTYPE fbtype; FBOBJ fbobj; for ( ; ; ) { /* Read items until end of file */ /* Get the next path if not found yet */ if (!f_have_path) { const int rc = fbget(fbp, 0, (FBTYPE *) NULL, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } /* Output the file that was found */ if (fprintf(stdout, "%s\n", fbobj.str_value.sz) < 0) { print_error("ERROR - Unable to output path name to stdout: %s", strerror(errno)); xrc = -1; goto EXITPOINT; } ++n_path; /* 1 more path printed OK */ /* Try getting a version. If found, it will be discarded */ FBTYPE type_wanted = BUF_TYPE_ULONG; const int rc = fbget(fbp, 1, &type_wanted, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ if (fbtype == BUF_TYPE_ULONG) { /* found version number */ f_have_path = false; } else { /* it was a string, so it is the next path */ f_have_path = true; /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } } /* end of loop reading items into buffer */ EXITPOINT: /* Close model pathname file and return data read */ if (fbclose(fbp) != 0) { print_error("ERROR - Unable to close file with path names: %s", strerror(errno)); xrc = -1; } /* Return the path count if no errors */ if (xrc == 0) { xrc = (int) n_path; } return xrc; } /* end of function output_paths_from_lst_file */ /* *********************************************************************** */ /* 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. */ /* Structure for retrieving data items from the file. These will be either * names, such as directory names or unsigned integers that are version * numbers */ #define N_MODEL_INIT 10 static int read_modpath( int *p_num_model_info, /* Number of model pathnames found */ Model_Info_t **pp_model_info) /* Info about each model */ { int xrc = 0; FILEBUF *fbp = (FILEBUF *) NULL; /* for reading MODPATH_FILENAME */ Model_Info_t *p_model_info = (Model_Info_t *) NULL; unsigned int n_model_info = 0; unsigned int n_model_info_alloc = 0; char *filename = (char *) NULL; /* Open the model pathname file */ if ((filename = gen_filename(MODPATH_FILENAME, "r")) == (char *) NULL) { print_error("ERROR - Unable to build mod path file name"); xrc = -1; goto EXITPOINT; } /* Open the file using the default buffer size. For debugging, a very * small value can be used, for example by giving the size as 1, to * force the function do actions that otherwise would be done rarely * if at all. */ if ((fbp = fbopen(filename, 0)) == (FILEBUF *) NULL) { print_error("ERROR - Unable to open mod path file \"%s\": %s", filename, strerror(errno)); xrc = -1; goto EXITPOINT; } /* Allocate initial model info array */ if ((p_model_info = (Model_Info_t *) malloc(N_MODEL_INIT * sizeof(Model_Info_t))) == (Model_Info_t *) NULL) { print_error("ERROR - Unable to allocate initial model array"); xrc = -1; goto EXITPOINT; } n_model_info_alloc = N_MODEL_INIT; bool f_have_path = false; /* do not have a path to store */ FBTYPE fbtype; FBOBJ fbobj; for ( ; ; ) { /* Read items until end of file */ /* Get the next path if not found yet */ if (!f_have_path) { const int rc = fbget(fbp, 0, (FBTYPE *) NULL, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } /* Enlarge model array if full */ if (n_model_info_alloc == n_model_info) { n_model_info_alloc *= 2; void * const p = realloc(p_model_info, n_model_info_alloc * sizeof(Model_Info_t)); if (p == NULL) { print_error("ERROR - Unable to enlarge model array"); xrc = -1; goto EXITPOINT; } p_model_info = (Model_Info_t *) p; } /* Put pathname into info structure */ Model_Info_t * const p_model_info_cur = p_model_info + n_model_info; if ((p_model_info_cur->path_name = (char *) malloc( fbobj.str_value.n_char + 1)) == (char *) NULL) { print_error("ERROR - Unable to allocate path name"); xrc = -1; goto EXITPOINT; } strcpy(p_model_info_cur->path_name, fbobj.str_value.sz); p_model_info_cur->spice_name = (char *) NULL; p_model_info_cur->cfunc_name = (char *) NULL; /* Must set before returning due to EOF. */ p_model_info_cur->version = 1; ++n_model_info; /* Try getting a version */ FBTYPE type_wanted = BUF_TYPE_ULONG; const int rc = fbget(fbp, 1, &type_wanted, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ if (fbtype == BUF_TYPE_ULONG) { /* found version number */ f_have_path = false; p_model_info_cur->version = (unsigned int) fbobj.ulong_value; } else { /* it was a string, so it is the next path */ f_have_path = true; /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } } /* end of loop reading items into buffer */ EXITPOINT: /* Close model pathname file and return data read */ if (fbclose(fbp) != 0) { print_error("ERROR - Unable to close file with model info: %s", strerror(errno)); xrc = -1; } /* Free name of file being used */ if (filename) { free((void *) filename); } /* If error, free model info */ if (xrc != 0) { free_model_info(n_model_info, p_model_info); n_model_info = 0; p_model_info = (Model_Info_t *) NULL; } *p_num_model_info = n_model_info; *pp_model_info = p_model_info; return xrc; } /* end of function read_modpath */ /* Remove slash at end of path name if present */ static inline void trim_slash(size_t *p_n, char *p) { size_t n = *p_n; if (n > 1) { char * const p_last = p + n - 1; if (*p_last == '/') { *p_last = '\0'; --*p_n; } } } /* end of function trim_slash */ /* *********************************************************************** */ /* 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. */ #define N_NODE_INIT 5 static int read_udnpath( int *p_num_node_info, /* Addr to receive # node pathnames */ Node_Info_t **pp_node_info /* Addr to receive node info */ ) { int xrc = 0; FILEBUF *fbp = (FILEBUF *) NULL; /* For reading Udn pathname */ Node_Info_t *p_node_info = (Node_Info_t *) NULL; /* array of node info */ unsigned int n_node_info = 0; unsigned int n_node_info_alloc = 0; char *filename = (char *) NULL; /* Open the node pathname file */ if ((filename = gen_filename(UDNPATH_FILENAME, "r")) == (char *) NULL) { print_error("ERROR - Unable to build udn path file name"); xrc = -1; goto EXITPOINT; } /* For backward compatibility, return with WARNING only if file * not found */ if ((fbp = fbopen(filename, 0)) == (FILEBUF *) NULL) { print_error("WARNING - File not found: %s", filename); xrc = +1; goto EXITPOINT; } /* Allocate initial node info array */ if ((p_node_info = (Node_Info_t *) malloc(N_NODE_INIT * sizeof(Node_Info_t))) == (Node_Info_t *) NULL) { print_error("ERROR - Unable to allocate initial node array"); xrc = -1; goto EXITPOINT; } n_node_info_alloc = N_NODE_INIT; bool f_have_path = false; /* do not have a path to store */ FBTYPE fbtype; FBOBJ fbobj; for ( ; ; ) { /* Read items until end of file */ /* Get the next path if not found yet */ if (!f_have_path) { const int rc = fbget(fbp, 0, (FBTYPE *) NULL, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } /* Enlarge node array if full */ if (n_node_info_alloc == n_node_info) { n_node_info_alloc *= 2; void * const p = realloc(p_node_info, n_node_info_alloc * sizeof(Node_Info_t)); if (p == NULL) { print_error("ERROR - Unable to enlarge node array"); xrc = -1; goto EXITPOINT; } p_node_info = (Node_Info_t *) p; } /* Put pathname into info structure */ Node_Info_t * const p_node_info_cur = p_node_info + n_node_info; if ((p_node_info_cur->path_name = (char *) malloc( fbobj.str_value.n_char + 1)) == (char *) NULL) { print_error("ERROR - Unable to allocate path name"); xrc = -1; goto EXITPOINT; } strcpy(p_node_info_cur->path_name, fbobj.str_value.sz); p_node_info_cur->node_name = NULL; /* Must set before returning due to EOF. */ p_node_info_cur->version = 1; ++n_node_info; /* Try getting a version */ FBTYPE type_wanted = BUF_TYPE_ULONG; const int rc = fbget(fbp, 1, &type_wanted, &fbtype, &fbobj); if (rc != 0) { if (rc == -1) { /* Error */ print_error("ERROR - Unable to read item to buffer"); xrc = -1; goto EXITPOINT; } else { /* +1 -- EOF */ break; } } /* end of abnormal case */ if (fbtype == BUF_TYPE_ULONG) { /* found version number */ f_have_path = false; p_node_info_cur->version = (unsigned int) fbobj.ulong_value; } else { /* it was a string, so it is the next path */ f_have_path = true; /* Remove trailing slash if appended to path */ trim_slash(&fbobj.str_value.n_char, fbobj.str_value.sz); } } /* end of loop reading items into buffer */ EXITPOINT: /* Close model pathname file and return data read */ if (fbclose(fbp) != 0) { print_error("ERROR - Unable to close file with node info: %s", strerror(errno)); xrc = -1; } /* Free name of file being used */ if (filename) { free((void *) filename); } /* If error, free node info */ if (xrc != 0) { free_node_info(n_node_info, p_node_info); n_node_info = 0; p_node_info = (Node_Info_t *) NULL; } *p_num_node_info = n_node_info; *pp_node_info = p_node_info; return xrc; } /* end of function read_udnpath */ /* *********************************************************************** */ /* 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 int read_model_names( int num_models, /* Number of model pathnames */ Model_Info_t *model_info /* Info about each model */ ) { bool all_found = true; /* True if all ifspec files read */ int i; /* A temporary counter */ char path_stack[100]; /* full pathname to ifspec file if from stack */ char *path = path_stack; /* actual path buffer */ int status; /* Return status */ /* Repository for info read from ifspec file.*/ Ifs_Table_t ifs_table; /* Find the required buffer size and allocate if the default buffer * on the stack is too small */ { int j; size_t n_byte_needed = 0; for (j = 0; j < num_models; j++) { /* max(model path lengths) */ const size_t n = strlen(model_info[j].path_name); if (n_byte_needed < n) { n_byte_needed = n; } } n_byte_needed += 1 + strlen(IFSPEC_FILENAME) + 1; if (n_byte_needed > sizeof path_stack) { if ((path = (char *) malloc(n_byte_needed)) == (char *) NULL) { print_error("ERROR - Unable to allocate a buffer " "for model paths"); return -1; } } } /* 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; i < num_models; i++) { Model_Info_t *p_model_info_cur = model_info + i; /* 0 for error recovery */ (void) memset(&ifs_table, 0, sizeof ifs_table); /* Form the full pathname to the interface spec file. Size has * been checked to ensure that all strings will fit. */ { char *p_dst = path; /* Copy path name */ const char *p_src = model_info[i].path_name; for ( ; ; ) { const char ch_cur = *p_src; if (ch_cur == '\0') { break; } *p_dst++ = ch_cur; ++p_src; } *p_dst++ = '/'; /* add directory separator */ strcpy(p_dst, 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 == 0) { if ((p_model_info_cur->spice_name = strdup( ifs_table.name.model_name)) == (char *) NULL) { print_error("ERROR - Unable to copy code model name"); all_found = false; break; } if ((p_model_info_cur->cfunc_name = strdup( ifs_table.name.c_fcn_name)) == (char *) NULL) { print_error("ERROR - Unable to copy code model function name"); all_found = false; break; } } else { print_error( "ERROR - Problems reading \"%s\" in directory \"%s\"", IFSPEC_FILENAME, p_model_info_cur->path_name); all_found = false; break; } /* Remove the ifs_table */ rem_ifs_table(&ifs_table); } /* end of loop over models */ /* Free buffer if allocated */ if (path != path_stack) { free(path); } if (all_found) { return 0; } else { /* Free allocations of model when failure occurred */ rem_ifs_table(&ifs_table); return -1; } } /* end of function read_model_names */ /* *********************************************************************** */ /* 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 int read_node_names( int num_nodes, /* Number of node pathnames */ Node_Info_t *node_info /* Info about each node */ ) { bool all_found = true; /* True if all ifspec files read */ int i; /* A temporary counter */ char path_stack[100]; /* full pathname to ifspec file if from stack */ char *path = path_stack; /* actual path buffer */ int status; /* Return status */ char *node_name; /* Name of node type read from file */ /* Find the required buffer size and allocate if the default buffer * on the stack is too small */ { int j; size_t n_byte_needed = 0; for (j = 0; j < num_nodes; j++) { /* max(model path lengths) */ const size_t n = strlen(node_info[j].path_name); if (n_byte_needed < n) { n_byte_needed = n; } } n_byte_needed += 1 + strlen(UDNFUNC_FILENAME) + 1; if (n_byte_needed > sizeof path_stack) { if ((path = (char *) malloc(n_byte_needed)) == (char *) NULL) { print_error("ERROR - Unable to allocate a buffer " "for user types"); return -1; } } } /* 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 user-defined type file. Size has * been checked to ensure that all strings will fit. */ { char *p_dst = path; /* Copy path name */ const char *p_src = node_info[i].path_name; for ( ; ; ) { const char ch_cur = *p_src; if (ch_cur == '\0') { break; } *p_dst++ = ch_cur; ++p_src; } *p_dst++ = '/'; /* add directory separator */ strcpy(p_dst, 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 == 0) { 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 0; else return -1; } /* end of function read_node_names */ /* *********************************************************************** */ /* 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 int 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 */ ) { /* 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 const char *SPICEmodel[] = { "npn", "pnp", "d", "njf", "pjf", "nmf", "pmf", "urc", "nmos", "pmos", "r", "c", "sw", "csw", "poly" }; static const 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 const char *UDNidentifier[] = { "v", "vd", "i", "id", "vnam", "g", "gd", "h", "hd", "d" }; static const int numUDNidentifiers = sizeof(UDNidentifier) / sizeof(char *); bool f_have_duplicate = false; /* no duplicates found yet */ /* First, normalize case of all model and node names to lower since */ /* SPICE is case insensitive in parsing decks */ { int i; for(i = 0; i < num_models; i++) { str_to_lower(model_info[i].spice_name); } } { int i; for(i = 0; i < num_nodes; i++) { str_to_lower(node_info[i].node_name); } } /* Sizes of models and nodes */ const unsigned int n_model = (unsigned int) numSPICEmodels + num_models; const unsigned int n_node = (unsigned int) numUDNidentifiers + num_nodes; const unsigned int n_ks = n_model > n_node ? n_model : n_node; /* Allocate structure to compare */ struct Key_src * const p_ks = (struct Key_src *) malloc( n_ks * sizeof *p_ks); if (p_ks == (struct Key_src *) NULL) { print_error("ERROR - Unable to allocate array to check uniqueness."); return -1; } /* Set up for test of SPICE name of models and test */ if (num_models > 0) { /* Have user-defined models */ { int i, j; /* Fill up with SPICE models */ for (i = 0; i < numSPICEmodels; ++i) { struct Key_src *p_ks_cur = p_ks + i; p_ks_cur->key = SPICEmodel[i]; p_ks_cur->src = (char *) NULL; /* denotes internal SPICE */ } /* Add SPICE model names for code models */ for (j = 0; j < num_models; ++i, ++j) { struct Key_src *p_ks_cur = p_ks + i; Model_Info_t *p_mi_cur = model_info + j; p_ks_cur->key = p_mi_cur->spice_name; p_ks_cur->src = p_mi_cur->path_name; } /* Test for duplicates */ f_have_duplicate |= test_for_duplicates(n_model, p_ks, &report_error_spice_name); } /* Set up for test of function names */ { int i; /* Fill up with C function names from code models */ for (i = 0; i < num_models; ++i) { struct Key_src *p_ks_cur = p_ks + i; Model_Info_t *p_mi_cur = model_info + i; p_ks_cur->key = p_mi_cur->cfunc_name; p_ks_cur->src = p_mi_cur->path_name; } /* Test for duplicates */ f_have_duplicate |= test_for_duplicates(num_models, p_ks, &report_error_function_name); } } /* Set up for test of node types and test */ if (num_nodes > 0) { /* Have user-defined types */ int i, j; /* Fill up with SPICE node types */ for (i = 0; i < numUDNidentifiers; ++i) { struct Key_src *p_ks_cur = p_ks + i; p_ks_cur->key = UDNidentifier[i]; p_ks_cur->src = (char *) NULL; /* denotes internal SPICE */ } /* Add user-defined nodes */ for (j = 0; j < num_nodes; ++i, ++j) { struct Key_src *p_ks_cur = p_ks + i; Node_Info_t *p_ni_cur = node_info + j; p_ks_cur->key = p_ni_cur->node_name; p_ks_cur->src = p_ni_cur->path_name; } /* Test for duplicates */ f_have_duplicate |= test_for_duplicates(n_node, p_ks, &report_error_udn_name); } /* Free allocation for compares */ free(p_ks); /* Return error status */ return f_have_duplicate ? -1 : 0; } /* end of function check_uniqueness */ /* Test for duplicate key values and report using the supplied function * if found */ static bool test_for_duplicates(unsigned int n, struct Key_src *p_ks, void (*p_error_reporter)(const struct Key_src *p_ks1, const struct Key_src *p_ks2)) { bool f_have_duplicate = false; /* Sort to put duplicates together */ qsort(p_ks, n, sizeof(struct Key_src), (int (*)(const void *, const void *)) &cmpr_ks); unsigned int i; for (i = 0; i != n; ) { const struct Key_src * const p_ks_i = p_ks + i; const char * const p_key_i_val = p_ks_i->key; unsigned int j; for (j = i + 1; j != n; ++j) { const struct Key_src * const p_ks_j = p_ks + j; const char * const p_key_j_val = p_ks_j->key; if (strcmp(p_key_i_val, p_key_j_val) != 0) { break; } /* Duplicate found. Indicate a duplicate was found and report * the error */ f_have_duplicate = true; (*p_error_reporter)(p_ks_i, p_ks_j); } /* end of loop testing for duplicates */ i = j; /* advance to next unique value or end of list */ } /* end of loop over items to test */ return f_have_duplicate; } /* end of function test_for_duplicates */ /* Compare function for struct Key_src. * * Remarks * the src field may be NULL to indicate internal values. These should * be ordered before values that are not NULL for nicer error messages. * Note that for a given key, only one src field can be NULL. */ static int cmpr_ks(const struct Key_src *ks1, const struct Key_src *ks2) { /* First order by the value of the key */ const int rc = strcmp(ks1->key, ks2->key); if (rc != 0) { return rc; } /* Test for NULL src fields. Only one can be NULL for the same key */ if (ks1->src == (char *) NULL) { return -1; } if (ks2->src == (char *) NULL) { return +1; } /* Both keys not NULL, so compare */ return strcmp(ks1->src, ks2->src); } /* end of function cmpr_ks */ static void report_error_spice_name(const struct Key_src *p_ks1, const struct Key_src *p_ks2) { const char * const p_ks1_src = p_ks1->src; if (p_ks1_src == (char *) NULL) { /* internal SPICE name */ print_error("ERROR: Model name \"%s\" from directory \"%s\" " "is the name of an internal SPICE model", p_ks1->key, p_ks2->src); } else { print_error("ERROR: Model name \"%s\" in directory \"%s\" " "is also in directory \"%s\".", p_ks1->key, p_ks1_src, p_ks2->src); } } /* end of function report_error_spice_name */ static void report_error_function_name (const struct Key_src *p_ks1, const struct Key_src *p_ks2) { print_error("ERROR: C function name \"%s\" in directory \"%s\" " "is also in directory \"%s\".", p_ks1->key, p_ks1->src, p_ks2->src); } /* end of function report_error_spice_name */ static void report_error_udn_name(const struct Key_src *p_ks1, const struct Key_src *p_ks2) { const char * const p_ks1_src = p_ks1->src; if (p_ks1_src == (char *) NULL) { /* internal SPICE name */ print_error("ERROR: Node type \"%s\" from directory \"%s\" " "is the name of an internal SPICE node type", p_ks1->key, p_ks2->src); } else { print_error("ERROR: Node type \"%s\" in directory \"%s\" " "is also in directory \"%s\".", p_ks1->key, p_ks1_src, p_ks2->src); } } /* end of function report_error_udn_name */ /* *********************************************************************** */ /* 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 int 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("cmextrn.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to cmextrn.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); free(filename); return -1; } /* 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 */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_CMextrn */ /* *********************************************************************** */ /* 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 int 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("cminfo.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to cminfo.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); free(filename); return -1; } /* Write out the data */ for(i = 0; i < num_models; i++) { Model_Info_t *p_mi_cur = model_info + i; if (p_mi_cur->version == 1) { fprintf(fp, "&%s_info,\n", model_info[i].cfunc_name); } } /* Close the file and return */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_CMinfo */ static int write_CMinfo2( 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("cminfo2.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to cminfo2.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); free(filename); return -1; } /* Write out the data */ for (i = 0; i < num_models; i++) { Model_Info_t *p_mi_cur = model_info + i; if (p_mi_cur->version <= 2) { fprintf(fp, "&%s_info,\n", model_info[i].cfunc_name); } } /* Close the file and return */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_CMinfo2 */ /* *********************************************************************** */ /* 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 int 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("udnextrn.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to udnextrn.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return -1; } /* 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 */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_UDNextrn */ /* *********************************************************************** */ /* 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 int 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("udninfo.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to udninfo.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return -1; } /* Write out the data */ for(i = 0; i < num_nodes; i++) { Node_Info_t *p_ni_cur = node_info + i; if (p_ni_cur->version == 1) { fprintf(fp, "&udn_%s_info,\n", p_ni_cur->node_name); } } /* Close the file and return */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_UDNinfo */ static int write_UDNinfo2( 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("udninfo2.h", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to udninfo2.h"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return -1; } /* Write out the data */ for(i = 0; i < num_nodes; i++) { Node_Info_t *p_ni_cur = node_info + i; if (p_ni_cur->version <= 2) { fprintf(fp, "&udn_%s_info,\n", p_ni_cur->node_name); } } /* Close the file and return */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_UDNinfo */ /* *********************************************************************** */ /* 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 int 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 */ char *filename = (char *) NULL; /* Open the file to be written */ if ((filename = gen_filename("objects.inc", "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to objects.inc"); return -1; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening %s for write", filename); return -1; } /* 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 */ if (fclose(fp) != 0) { print_error("ERROR - Problems closing %s", filename); free(filename); return -1; } free(filename); return 0; } /* end of function write_objects_inc */ /* 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 int 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 */ bool found; /* true if name found successfully */ bool 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"; char *filename = (char *) NULL; /* Open the file from which the node type name will be read */ if ((filename = gen_filename(path, "r")) == (char *) NULL) { print_error("ERROR - Unable to build path to Evt_Udn_Info_t"); return -1; } fp = fopen(filename, "r"); if(fp == NULL) { print_error("ERROR - Problems opening %s for reading", filename); return -1; } /* 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; if (i >= sizeof name) { print_error("name too long"); exit(1); } name[i] = '\0'; } else if(c != EOF) { if (i > sizeof name) { print_error("name too long"); exit(1); } 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) { if ((*node_name = (char *) malloc( strlen(name) + 1)) == (char *) NULL) { print_error("ERROR - Unable to allocate node name"); return -1; } strcpy(*node_name, name); return 0; } else { *node_name = NULL; return -1; } } /* Free allocations in p_model_info array */ static void free_model_info(int num_models, Model_Info_t *p_model_info) { /* Return if no structure */ if (p_model_info == (Model_Info_t *) NULL) { return; } int i; for (i = 0; i < num_models; ++i) { Model_Info_t *p_cur = p_model_info + i; void *p; if ((p = p_cur->cfunc_name) != NULL) { free(p); } if ((p = p_cur->path_name) != NULL) { free(p); } if ((p = p_cur->spice_name) != NULL) { free(p); } } free(p_model_info); } /* end of function free_model_info */ /* Free allocations in p_nod_info array */ static void free_node_info(int num_nodes, Node_Info_t *p_node_info) { /* Return if no structure */ if (p_node_info == (Node_Info_t *) NULL) { return; } int i; for (i = 0; i < num_nodes; ++i) { Node_Info_t *p_cur = p_node_info + i; void *p; if ((p = p_cur->node_name) != NULL) { free(p); } if ((p = p_cur->path_name) != NULL) { free(p); } } free(p_node_info); } /* end of function free_node_info */ tmp_ns50wwy/src/xspice/cmpp/mod_yacc.y0000644000175000017500000004220714163340332020147 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 #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 CMPP_INTEGER: ch = 'i'; break; case CMPP_REAL: ch = 'r'; break; case CMPP_COMPLEX: ch = 'c'; break; case CMPP_BOOLEAN: ch = 'b'; break; case CMPP_STRING: ch = 's'; break; case CMPP_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 != CMPP_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 == CMPP_IN) ? "IN" : "OUT"); yyerror (error_str); mod_num_errors++; } } } /*---------------------------------------------------------------------------*/ static void check_subscript (bool formal, bool actual, bool 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, bool 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, CMPP_OUT, "PARTIAL"); check_dir (j, CMPP_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, CMPP_OUT, "AC_GAIN"); check_dir (j, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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, CMPP_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);} ; %% tmp_ns50wwy/src/xspice/cmpp/main.c0000644000175000017500000001263714163340332017273 0ustar carstencarsten/*============================================================================ FILE main.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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. ============================================================================*/ #ifdef DEBUG_CMPP #ifdef _WIN32 #include #endif #endif #include #include #include #include "cmpp.h" #define USAGE_MSG \ "Usage: cmpp [-ifs] | [-mod []] | [-lst] | [-p fn.lst]" #define TOO_FEW_ARGS "ERROR - Too few arguments" #define TOO_MANY_ARGS "ERROR - Too many arguments" #define UNRECOGNIZED_ARGS "ERROR - Unrecognized argument" #ifdef DEBUG_CMPP #define PRINT_CMPP_INFO(argc, argv) print_cmpp_info(argc, argv); static void print_cmpp_info(int argc, char **argv); #else #define PRINT_CMPP_INFO(argc, argv) #endif /* *********************************************************************** */ /* 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. output_paths_from_lst_file Write paths from a list file to stdout to facilite building the code models depending on the argument. */ int main( int argc, /* Number of command line arguments */ char *argv[]) /* Command line argument text */ { init_error (argv[0]); PRINT_CMPP_INFO(argc, argv) /* 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 if (strcmp(argv[1],"-p") == 0) { /* Output paths from a list file */ if (argc == 3) { const int n_item = output_paths_from_lst_file(argv[2]); if (n_item < 0) { print_error("Unable to print paths to stdout"); exit(-1); } exit(n_item); } else { /* Wrong number of arguments */ if (argc < 3) { print_error(TOO_FEW_ARGS); } 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); } /* end of function main */ #ifdef DEBUG_CMPP /* Print some debugging information for cmpp * * With the use of environment variables to locate files, it is helpful * to know some information about the program when debugging. If the * build of a code model fails due to cmpp, the macro can be enabled to * find the information needed to separately debug cmpp */ static void print_cmpp_info(int argc, char **argv) { /* Print the program and its arguments */ { int i; for (i = 0; i < argc; ++i) { (void) fprintf(stdout, "%s ", argv[i]); } (void) fprintf(stdout, "\n"); } #ifdef _WIN32 /* Print the current directory */ { const DWORD n_char = GetCurrentDirectoryA(0, (char *) NULL); if (n_char > 0) { char *p_buf = (char *) malloc(n_char); if (p_buf != (char *) NULL) { if (GetCurrentDirectoryA(n_char, p_buf) != 0) { (void) fprintf(stdout, "Current Directory: \"%s\".\n", p_buf); } free(p_buf); } } } #endif /* Print the CMPP_IDIR environment variable if defined */ { const char * const ev = getenv("CMPP_IDIR"); if (ev) { (void) fprintf(stdout, "CMPP_IDIR = \"%s\"\n", ev); } else { (void) fprintf(stdout, "CMPP_IDIR is not defined\n"); } } /* Print the CMPP_ODIR environment variable if defined */ { const char * const ev = getenv("CMPP_ODIR"); if (ev) { (void) fprintf(stdout, "CMPP_ODIR = \"%s\"\n", ev); } else { (void) fprintf(stdout, "CMPP_ODIR is not defined\n"); } } } /* end of function print_cmpp_info */ #endif /* #ifdef DEBUG_CMPP */ tmp_ns50wwy/src/xspice/cmpp/mod_yacc_y.h0000644000175000017500000000154614163340332020457 0ustar carstencarsten/*============================================================================ FILE mod_yacc.h MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #include "cmpp.h" typedef struct { char *id; bool has_subscript; char *subscript; } Sub_Id_t; extern void mod_yyerror(char*); tmp_ns50wwy/src/xspice/cmpp/file_buffer.h0000644000175000017500000000412214163340332020612 0ustar carstencarsten#ifndef file_buffer_h_included #define file_buffer_h_included #include /* Null-terminated string prefixed by length excluding null */ typedef struct Filebuf_len_str { size_t n_char; /* length of string excluding null termination */ char *sz; /* Start of string */ } FBSTRING; /* Union for returned value */ typedef union Filebuf_obj { FBSTRING str_value; unsigned long ulong_value; long long_value; double dbl_value; } FBOBJ; /* Structure for getting file data */ typedef struct Filebuf { FILE *fp; /* handle to file */ bool is_eof; /* flag that EOF reached */ bool f_skip_to_eol; /* Flag that text until the next EOL character should be * skipped before getting the next item from the buffer. * This flag is set when a comment terminates an item, * such as "abc# This is a comment." */ size_t n_byte_buf_alloc; /* Allocated buffer size */ char *p_buf; /* buffer to receive data from file */ char *p_obj_start; /* start of object being returned */ char *p_obj_end; /* byte past object being returned */ char *p_data_cur; /* current position in buffer. Depending on * circumstances, it points to either the character * being processed or the next character to process */ char *p_data_end; /* byte past end of data in buffer */ char *p_buf_end; /* byte past end of allocated buffer size, equal to * p_buf + n_byte_buf_alloc, so it is redundant, but * convenient to have available */ } FILEBUF; /* Types of data */ typedef enum FBtype { BUF_TYPE_STRING, /* value type string (always possible) */ BUF_TYPE_ULONG, /* value type an unsigned int */ BUF_TYPE_LONG, /* value type an int */ BUF_TYPE_DOUBLE /* value type double */ } FBTYPE; FILEBUF *fbopen(const char *filename, size_t n_byte_buf_init); int fbget(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj); int fbclose(FILEBUF *fbp); #endif /* include guard */ tmp_ns50wwy/src/xspice/cmpp/pp_mod.c0000644000175000017500000001455214163340332017623 0ustar carstencarsten/*============================================================================ FILE pp_mod.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #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 char *current_filename; extern char *prog_name; /*---------------------------------------------------------------------------*/ /* Allocate and build a file name from the input filename by changing its * extension (text after the last '.') in filename to ext or append .ext if * the filename has no extension */ static char *change_extension(const char *filename, const char *ext) { const char * const p = strrchr(filename, '.'); const size_t prefix_len = p ? (size_t) (p - filename) : strlen(filename); const size_t ext_len = strlen(ext); char * const new_filename = malloc(prefix_len + ext_len + 2); /* +1 for '.' +1 for '\0' */ if (new_filename == (char *) NULL) { return (char *) NULL; } { char *p_cur = (char *) memcpy(new_filename, filename, prefix_len) + prefix_len; *p_cur++ = '.'; (void) memcpy(p_cur, ext, ext_len + 1); } return new_filename; } /* end of function change_extension */ /*---------------------------------------------------------------------------*/ /* 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 ( const char *filename) /* The file to read */ { Ifs_Table_t ifs_table; /* info read from ifspec.ifs file */ int status; /* Return status */ char *output_filename = (char *) NULL; /* .mod file being written */ /* * 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 != 0) { exit(1); } /* Open the cfunc.mod file defining the code model function */ if ((current_filename = gen_filename(filename, "r")) == (char *) NULL) { print_error("ERROR - Unable to build mod file name"); exit(1); } if ((mod_yyin = fopen(current_filename, "r")) == (FILE *) NULL) { print_error("ERROR - Unable to open mod file \"%s\": %s", current_filename, strerror(errno)); exit(1); } { char *output_filename_base = (char *) NULL; if ((output_filename_base = change_extension( filename, "c")) == (char *) NULL) { print_error("ERROR - Could not change extension of " "\"%s\".", filename); exit(1); } if ((output_filename = gen_filename( output_filename_base, "w")) == (char *) NULL) { print_error("ERROR - Unable to build output file name"); exit(1); } free(output_filename_base); } if ((mod_yyout = fopen(output_filename, "w")) == (FILE *) NULL) { /* .c file could not be opened */ print_error("ERROR - Could not open output .c file\"%s\": %s", output_filename, strerror(errno)); exit(1); } mod_ifs_table = &ifs_table; mod_num_errors = 0; /* Define DEBUG_WITH_MOD_FILE to have the compiler use the cfunc.mod file for * deugging instead of the cfunc.c file. */ #ifdef DEBUG_WITH_MOD_FILE fprintf (mod_yyout, "#line 1 \"%s\"\n", current_filename); #endif fprintf (mod_yyout, "#include \"ngspice/cm.h\"\n"); fprintf (mod_yyout, "extern void %s(Mif_Private_t *);\n", ifs_table.name.c_fcn_name); #ifdef DEBUG_WITH_MOD_FILE fprintf (mod_yyout, "#line 1 \"%s\"\n", current_filename); #endif mod_yylineno = 1; if (mod_yyparse() || (mod_num_errors > 0)) { print_error("Error parsing .mod file: \"%s\"", current_filename); unlink(output_filename); exit(1); } if (fclose(mod_yyout) != 0) { print_error("Error closing output file \"%s\": %s", current_filename, strerror(errno)); unlink(output_filename); exit(1); } rem_ifs_table(&ifs_table); mod_yyrestart(NULL); free(output_filename); free(current_filename); } /* end of function preprocess_mod_file */ /*---------------------------------------------------------------------------*/ 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); } tmp_ns50wwy/src/xspice/cmpp/util.c0000644000175000017500000001026114163340332017313 0ustar carstencarsten/*============================================================================ FILE util.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #include #include #include #include #include #if defined(_WIN32) #include /* for definition of PathIsRelativeA() */ #if defined(_MSC_VER) #pragma comment(lib, "Shlwapi.lib") #endif #endif #include "cmpp.h" /* Using only Unix directory separator since it is used to build directory * paths in include files that must work on any supported operating * system */ #define DIR_TERM_UNIX '/' /* *********************************************************************** */ char *prog_name; inline static bool is_absolute_pathname(const char *path); /* Initialize external variable prog_name with the name of the program. * A copy is not made. */ void init_error(char *program_name) { prog_name = program_name; } /* end of function init_error */ /* Print an error message to stderr. The message is prefixed with the * name of the program and a newline character is added to the end. */ void print_error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vprint_error(fmt, ap); va_end(ap); } /* end of function print_error */ void vprint_error(const char *fmt, va_list p_arg) { fprintf(stderr, "%s: ", prog_name); vfprintf(stderr, fmt, p_arg); fprintf(stderr, "\n"); } /* end of function vprint_error */ /* 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++) { s[i] = tolower_c(c); } } /* end of function str_to_lower */ /* If *path_p is relative, prefix with the value of the CMPP output or * input environment variable. Open the file and return the path that * was used to open it. */ char *gen_filename(const char *filename, const char *mode) { char *buf = (char *) NULL; /* If absoulte path, prefix with CMPP_ODIR/CMPP_IDIR env value */ if (!is_absolute_pathname(filename)) { /* relative path */ const char *e = getenv((*mode == 'w' || *mode == 'a') ? "CMPP_ODIR" : "CMPP_IDIR"); if (e) { /* have env var */ const size_t len_prefix = strlen(e); const size_t len_filename = strlen(filename); const size_t n_char = len_prefix + len_filename + 1; /* Allocate buffer to build full file name */ if ((buf = (char *) malloc(n_char + 1)) == (char *) NULL) { return (char *) NULL; } /* Build the full file name */ { char *p_cur = buf; (void) memcpy(p_cur, e, len_prefix); p_cur += len_prefix; *p_cur++ = DIR_TERM_UNIX; (void) memcpy(p_cur, filename, len_filename + 1); } } /* end of case that env variable found */ } /* end of case that path is absolute */ /* If did not build full file name yet, make the original * name of the file the full file name */ if (buf == (char *) NULL) { if ((buf = strdup(filename)) == (char *) NULL) { /* failed */ return (char *) NULL; } } return buf; } /* end of function gen_filename */ /* Returns true if path is an absolute path and false if it is a * relative path. No check is done for the existance of the path. */ /*** NOTE: Same as in inpcom.c Currently the cmpp project is "isolated * from others. It would be good to make into one function used in common */ inline static bool is_absolute_pathname(const char *path) { #ifdef _WIN32 return !PathIsRelativeA(path); #else return path[0] == DIR_TERM_UNIX; #endif } /* end of funciton is_absolute_pathname */ tmp_ns50wwy/src/xspice/cmpp/writ_ifs.c0000644000175000017500000011173614163340332020175 0ustar carstencarsten/*============================================================================ FILE writ_ifs.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #include "cmpp.h" /* Local function prototypes */ static int write_comment(FILE *fp, Ifs_Table_t *ifs_table); static int write_includes(FILE *fp); static int write_mPTable(FILE *fp, Ifs_Table_t *ifs_table); static int write_pTable(FILE *fp, Ifs_Table_t *ifs_table); static int write_conn_info(FILE *fp, Ifs_Table_t *ifs_table); static int write_param_info(FILE *fp, Ifs_Table_t *ifs_table); static int write_inst_var_info(FILE *fp, Ifs_Table_t *ifs_table); static int write_SPICEdev(FILE *fp, Ifs_Table_t *ifs_table); static const char *data_type_to_str(Data_Type_t type); static const char *port_type_to_str(Port_Type_t port); static const char *dir_to_str(Dir_t dir); static char *value_to_str(Data_Type_t type, Value_t value); static const char *no_value_to_str(void); static const char *boolean_to_str(bool value); static char *integer_to_str(int value); static const 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. */ int write_ifs_c_file( const char *filename_in, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { FILE *fp = (FILE *) NULL; /* File pointer */ char *filename = (char *) NULL; int xrc = 0; /* Open the ifspec.c file for write access */ if ((filename = gen_filename(filename_in, "w")) == (char *) NULL) { print_error("ERROR - Unable to build path to \"%s\".", filename); xrc = -1; goto EXITPOINT; } fp = fopen(filename, "w"); if(fp == NULL) { print_error("ERROR - Problems opening \"%s\" for write", filename); xrc = -1; goto EXITPOINT; } /* Write out a comment section at the top of the file */ if (write_comment(fp, ifs_table) != 0) { print_error("ERROR - Problems writing comment to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Put in the # includes */ if (write_includes(fp) != 0) { print_error("ERROR - Problems writing includes to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write the SPICE3 required XXXmPTable structure */ if (write_mPTable(fp, ifs_table) != 0) { print_error("ERROR - Problems writing mPTable to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write the SPICE3 required XXXpTable structure */ if (write_pTable(fp, ifs_table) != 0) { print_error("ERROR - Problems writing pTable to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write out the connector table required for the code model element parser */ if (write_conn_info(fp, ifs_table) != 0) { print_error("ERROR - Problems writing includes to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write out the parameter table required for the code model element parser */ if (write_param_info(fp, ifs_table) != 0) { print_error("ERROR - Problems writing params to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write out the instance variable table required for the code model element parser */ if (write_inst_var_info(fp, ifs_table) != 0) { print_error("ERROR - Problems writing instaice variables to \"%s\"", filename); xrc = -1; goto EXITPOINT; } /* Write out the externally visible structure for this model */ if (write_SPICEdev(fp, ifs_table) != 0) { print_error("ERROR - Problems writing model structureto \"%s\"", filename); xrc = -1; goto EXITPOINT; } EXITPOINT: /* Close the ifspec.c file, free allocation, and return */ if (fp != (FILE *) NULL) { if (fclose(fp) != 0) { print_error("ERROR - Problems closing \"%s\": %s.", filename, strerror(errno)); xrc = -1; } } if (filename != (char *) NULL) { free(filename); } return xrc; } /* end of function write_ifs_c_file */ /* *********************************************************************** */ /* 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 int write_comment( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { const int rc = fprintf(fp, "\n" "/*\n" " * Structures for model: %s\n" " *\n" " * Automatically generated by cmpp preprocessor\n" " *\n" " * !!! DO NOT EDIT !!!\n" " *\n" " */\n" "\n", ifs_table->name.model_name); if (rc < 0) { print_error("Comment writing failed."); return -1; } return 0; } /* end of function write_comment */ /* *********************************************************************** */ /* write_includes Function write_includes writes the C header files required in ifspec.c. */ static int write_includes( FILE *fp) /* File to write to */ { const int rc = fprintf(fp, "\n" "#include \"ngspice/ngspice.h\"\n" /* "#include \"ngspice/prefix.h\"\n"*/ "#include \n" "#include \"ngspice/devdefs.h\"\n" "#include \"ngspice/ifsim.h\"\n" "#include \"ngspice/mifdefs.h\"\n" "#include \"ngspice/mifproto.h\"\n" "#include \"ngspice/mifparse.h\"\n" /* "#include \"ngspice/suffix.h\"\n"*/ "\n"); if (rc < 0) { print_error("Include writing failed."); return -1; } return 0; } /* end of function write_includes */ /* *********************************************************************** */ /* 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 int write_pTable( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int xrc = 0; int i; bool 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 0; } int rc = 0; /* Write the structure beginning */ rc |= fprintf(fp, "\n" "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 */ rc |= fprintf(fp, " OP("); /* Put in the name of the parameter and the integer tag */ rc |= fprintf(fp, "\"%s\", ", ifs_table->inst_var[i].name); rc |= 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; if(is_array == true) { rc |= fprintf(fp, "("); } if(type == CMPP_BOOLEAN) { rc |= fprintf(fp, "IF_FLAG"); /* no BOOLEAN in SPICE3 */ } else if(type == CMPP_INTEGER) { rc |= fprintf(fp, "IF_INTEGER"); } else if(type == CMPP_REAL) { rc |= fprintf(fp, "IF_REAL"); } else if(type == CMPP_COMPLEX) { rc |= fprintf(fp, "IF_COMPLEX"); } else if(type == CMPP_STRING) { rc |= fprintf(fp, "IF_STRING"); } else if(type == CMPP_POINTER) { rc |= fprintf(fp, "IF_STRING"); } else { print_error("INTERNAL ERROR - write_pTable() - Impossible data type."); xrc = -1; rc |= fprintf(fp, "INVALID DATA TYPE"); } if(is_array == true) { rc |= fprintf(fp, "|IF_VECTOR)"); } /* Put in the description string and finish this line off */ rc |= fprintf(fp, ", \"%s\"),\n", ifs_table->inst_var[i].description); } /* end of loop over instance variables */ /* Finish off the structure */ rc |= fprintf(fp, "};\n\n"); /* Check outputs */ if (rc < 0) { print_error("pTable writing failed."); xrc = -1; } return xrc; } /* end of function write_pTable */ /* *********************************************************************** */ /* 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 int write_mPTable( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int xrc = 0; int i; /* 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 0; } int rc = 0; /* Write the structure beginning */ rc |= fprintf(fp, "\n" "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. */ Param_Info_t *param = ifs_table->param; for(i = 0; i < ifs_table->num_param; i++) { Param_Info_t *param_cur = param + i; /* Use the SPICE3 IOP macro since model parameters are input/output */ rc |= fprintf(fp, " IOP("); /* Put in the name of the parameter and the integer tag */ rc |= fprintf(fp, "\"%s\", ", param_cur->name); rc |= fprintf(fp, "%d, ", i); /* Format SPICE3 type according to parameter type field */ const bool is_array = param_cur->is_array; const Data_Type_t type = param_cur->type; if (is_array) { rc |= fprintf(fp, "("); } if (type == CMPP_BOOLEAN) { rc |= fprintf(fp, "IF_FLAG"); /* no BOOLEAN in SPICE3 */ } else if (type == CMPP_INTEGER) { rc |= fprintf(fp, "IF_INTEGER"); } else if (type == CMPP_REAL) { rc |= fprintf(fp, "IF_REAL"); } else if (type == CMPP_COMPLEX) { rc |= fprintf(fp, "IF_COMPLEX"); } else if (type == CMPP_STRING) { rc |= fprintf(fp, "IF_STRING"); } else { print_error("INTERNAL ERROR - write_mPTable() - Impossible data type."); xrc = -1; } if (is_array) { rc |= fprintf(fp, "|IF_VECTOR)"); } /* Put in the description string and finish this line off */ rc |= fprintf(fp, ", \"%s\"),\n", ifs_table->param[i].description); } /* end of loop over parameters */ /* Finish off the structure */ rc |= fprintf(fp, "};\n\n"); /* Check outputs */ if (rc < 0) { print_error("mPTable writing failed."); xrc = -1; } return xrc; } /* end of function write_mPTable */ /* *********************************************************************** */ /* 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 int write_conn_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int xrc = 0; int i; int j; const char *str; int rc = 0; /* 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 0; } /* 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 */ const Conn_Info_t * const conn = ifs_table->conn; const int num_conn = ifs_table->num_conn; for (i = 0; i < num_conn; i++) { const Conn_Info_t * const p_conn_cur = conn + i; rc |= fprintf(fp, "\n" "static Mif_Port_Type_t MIFportEnum%d[] = {\n", i); if (p_conn_cur->num_allowed_types < 1) { print_error("ERROR - write_conn_info() - " "Number of allowed types cannot be zero"); xrc = -1; } const int num_allowed_types = p_conn_cur->num_allowed_types; for (j = 0; j < num_allowed_types; j++) { rc |= fprintf(fp, " %s,\n", port_type_to_str(p_conn_cur->allowed_port_type[j])); } /* for number of allowed types */ rc |= fprintf(fp, "};\n" "\n" "\n" "static char *MIFportStr%d[] = {\n", i); for (j = 0; j < num_allowed_types; j++) { if (p_conn_cur->allowed_port_type[j] == USER_DEFINED) { rc |= fprintf(fp, " \"%s\",\n", p_conn_cur->allowed_type[j]); } else { str = gen_port_type_str(p_conn_cur->allowed_port_type[j]); rc |= fprintf(fp, " \"%s\",\n", str); } } /* for number of allowed types */ rc |= fprintf(fp, "};\n" "\n"); } /* for number of connections */ /* Now write the structure */ rc |= fprintf(fp, "\n" "static Mif_Conn_Info_t MIFconnTable[] = {\n"); /* Write out an entry for each parameter in the table */ for (i = 0; i < num_conn; i++) { const Conn_Info_t * const p_conn_cur = conn + i; rc |= fprintf(fp, " {\n"); rc |= fprintf(fp, " \"%s\",\n", p_conn_cur->name); rc |= fprintf(fp, " \"%s\",\n", p_conn_cur->description); str = dir_to_str(p_conn_cur->direction); rc |= fprintf(fp, " %s,\n", str); rc |= fprintf(fp, " %s,\n", port_type_to_str(p_conn_cur->default_port_type)); rc |= fprintf(fp, " \"%s\",\n", (p_conn_cur->default_port_type == USER_DEFINED) ? p_conn_cur->default_type : gen_port_type_str(p_conn_cur->default_port_type)); rc |= fprintf(fp," %d,\n", p_conn_cur->num_allowed_types); rc |= fprintf(fp, " MIFportEnum%d,\n", i); rc |= fprintf(fp, " MIFportStr%d,\n", i); str = boolean_to_str(p_conn_cur->is_array); rc |= fprintf(fp, " %s,\n", str); if (p_conn_cur->is_array == false) { str = boolean_to_str(false); /* has_lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(false); /* has_upper_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ rc |= fprintf(fp, " %s,\n", str); } else { /* is_array == true */ str = boolean_to_str(p_conn_cur->has_lower_bound); rc |= fprintf(fp, " %s,\n", str); if (p_conn_cur->has_lower_bound == true) str = integer_to_str(p_conn_cur->lower_bound); else str = integer_to_str(0); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_conn_cur->has_upper_bound); rc |= fprintf(fp, " %s,\n", str); if (p_conn_cur->has_upper_bound == true) str = integer_to_str(p_conn_cur->upper_bound); else str = integer_to_str(0); rc |= fprintf(fp, " %s,\n", str); } /* if is_array */ str = boolean_to_str(p_conn_cur->null_allowed); rc |= fprintf(fp, " %s,\n", str); rc |= fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ rc |= fprintf(fp, "};\n" "\n"); /* Check outputs */ if (rc < 0) { print_error("Writing of connection information failed."); xrc = -1; } return xrc; } /* end of function write_conn_info */ /* *********************************************************************** */ /* 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 int write_param_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int xrc = 0; int i; const 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 0; } /* Write the structure beginning */ int rc = 0; rc |= fprintf(fp, "\n" "static Mif_Param_Info_t MIFparamTable[] = {\n"); /* Write out an entry for each parameter in the table */ const Param_Info_t * const param = ifs_table->param; const int num_param = ifs_table->num_param; for (i = 0; i < num_param; i++) { const Param_Info_t * const p_param_cur = param + i; rc |= fprintf(fp, " {\n"); rc |= fprintf(fp, " \"%s\",\n", p_param_cur->name); rc |= fprintf(fp, " \"%s\",\n", p_param_cur->description); rc |= fprintf(fp, " %s,\n", data_type_to_str(p_param_cur->type)); str = boolean_to_str(p_param_cur->has_default); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_default == true) str = value_to_str(p_param_cur->type, p_param_cur->default_value); else str = no_value_to_str(); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_param_cur->has_lower_limit); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_lower_limit == true) str = value_to_str(p_param_cur->type, p_param_cur->lower_limit); else str = no_value_to_str(); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_param_cur->has_upper_limit); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_upper_limit == true) str = value_to_str(p_param_cur->type, p_param_cur->upper_limit); else str = no_value_to_str(); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_param_cur->is_array); rc |= fprintf(fp, " %s,\n", str); if (!p_param_cur->is_array) { str = boolean_to_str(false); /* has_conn_ref */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* conn_ref */ rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(false); /* has_lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(false); /* has_upper_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ rc |= fprintf(fp, " %s,\n", str); } else { /* is_array == true */ str = boolean_to_str(p_param_cur->has_conn_ref); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_conn_ref) { str = integer_to_str(p_param_cur->conn_ref); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(false); /* has_lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* lower_bound */ rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(false); /* has_upper_bound */ rc |= fprintf(fp, " %s,\n", str); str = integer_to_str(0); /* upper_bound */ rc |= fprintf(fp, " %s,\n", str); } else { /* has_conn_ref == false */ str = integer_to_str(0); /* conn_ref */ rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_param_cur->has_lower_bound); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_lower_bound) str = integer_to_str(p_param_cur->lower_bound); else str = integer_to_str(0); rc |= fprintf(fp, " %s,\n", str); str = boolean_to_str(p_param_cur->has_upper_bound); rc |= fprintf(fp, " %s,\n", str); if (p_param_cur->has_upper_bound) str = integer_to_str(p_param_cur->upper_bound); else str = integer_to_str(0); rc |= fprintf(fp, " %s,\n", str); } /* if has_conn_ref */ } /* if is_array */ str = boolean_to_str(p_param_cur->null_allowed); rc |= fprintf(fp, " %s,\n", str); rc |= fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ rc |= fprintf(fp, "};\n\n"); /* Check outputs */ if (rc < 0) { print_error("Writing of param information failed."); xrc = -1; } return xrc; } /* end of function write_param_info */ /* *********************************************************************** */ /* 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 int write_inst_var_info( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int xrc = 0; int i; const 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 0; /* Write the structure beginning */ int rc = 0; rc |= fprintf(fp, "\n" "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++) { rc |= fprintf(fp, " {\n"); rc |= fprintf(fp, " \"%s\",\n",ifs_table->inst_var[i].name); rc |= fprintf(fp, " \"%s\",\n",ifs_table->inst_var[i].description); rc |= fprintf(fp, " %s,\n", data_type_to_str(ifs_table->inst_var[i].type)); str = boolean_to_str(ifs_table->inst_var[i].is_array); rc |= fprintf(fp, " %s,\n", str); rc |= fprintf(fp, " },\n"); } /* for number of parameters */ /* Finish off the structure */ rc |= fprintf(fp, "};\n\n"); /* Check outputs */ if (rc < 0) { print_error("Writing of instance variable information failed."); xrc = -1; } return xrc; } /* end of function write_inst_var_info */ /* *********************************************************************** */ /* 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 int write_SPICEdev( FILE *fp, /* File to write to */ Ifs_Table_t *ifs_table) /* Table of Interface Specification data */ { int rc = 0; /* init print rc to nonnegative (no error) */ int xrc = 0; /* Extern the code model function name */ rc |= fprintf(fp, "\n" "extern void %s(Mif_Private_t *);\n", ifs_table->name.c_fcn_name); /* SPICE now needs these static integers */ rc |= fprintf(fp, "\n" "static int val_terms = 0;\n" "static int val_numNames = 0;\n" "static int val_numInstanceParms = %d;\n" "static int val_numModelParms = %d;\n" "static int val_sizeofMIFinstance = sizeof(MIFinstance);\n" "static int val_sizeofMIFmodel = sizeof(MIFmodel);\n", ifs_table->num_inst_var, ifs_table->num_param); /* Write out the structure beginning */ /* Use the c function external identifier appended with _info as the */ /* external identifier for the structure. */ rc |= fprintf(fp, "\n" "SPICEdev %s_info = {\n", ifs_table->name.c_fcn_name); /* Write the IFdevice structure */ rc |= fprintf(fp, " .DEVpublic = {\n"); rc |= fprintf(fp, " .name = \"%s\",\n", ifs_table->name.model_name); rc |= fprintf(fp, " .description = \"%s\",\n", ifs_table->name.description); rc |= fprintf(fp, " .terms = &val_terms,\n" " .numNames = &val_numNames,\n" " .termNames = NULL,\n" " .numInstanceParms = &val_numInstanceParms,\n"); if(ifs_table->num_inst_var > 0) rc |= fprintf(fp, " .instanceParms = MIFpTable,\n"); else rc |= fprintf(fp, " .instanceParms = NULL,\n"); rc |= fprintf(fp, " .numModelParms = &val_numModelParms,\n"); if(ifs_table->num_param > 0) rc |= fprintf(fp, " .modelParms = MIFmPTable,\n"); else rc |= fprintf(fp, " .modelParms = NULL,\n"); rc |= fprintf(fp, " .flags = 0,\n\n"); rc |= fprintf(fp, " .cm_func = %s,\n", ifs_table->name.c_fcn_name); rc |= fprintf(fp, " .num_conn = %d,\n", ifs_table->num_conn); if(ifs_table->num_conn > 0) rc |= fprintf(fp, " .conn = MIFconnTable,\n"); else rc |= fprintf(fp, " .conn = NULL,\n"); rc |= fprintf(fp, " .num_param = %d,\n", ifs_table->num_param); if(ifs_table->num_param > 0) rc |= fprintf(fp, " .param = MIFparamTable,\n"); else rc |= fprintf(fp, " .param = NULL,\n"); rc |= fprintf(fp, " .num_inst_var = %d,\n", ifs_table->num_inst_var); if(ifs_table->num_inst_var > 0) rc |= fprintf(fp, " .inst_var = MIFinst_varTable,\n"); else rc |= fprintf(fp, " .inst_var = NULL,\n"); rc |= fprintf(fp, " },\n\n"); /* Write the names of the generic code model functions */ rc |= fprintf(fp, " .DEVparam = NULL,\n" " .DEVmodParam = MIFmParam,\n" " .DEVload = MIFload,\n" " .DEVsetup = MIFsetup,\n" " .DEVunsetup = MIFunsetup,\n" " .DEVpzSetup = NULL,\n" " .DEVtemperature = NULL,\n" " .DEVtrunc = MIFtrunc,\n" " .DEVfindBranch = NULL,\n" " .DEVacLoad = MIFload,\n" " .DEVaccept = NULL,\n" " .DEVdestroy = NULL,\n" " .DEVmodDelete = MIFmDelete,\n" " .DEVdelete = MIFdelete,\n" " .DEVsetic = NULL,\n" " .DEVask = MIFask,\n" " .DEVmodAsk = MIFmAsk,\n" " .DEVpzLoad = NULL,\n" " .DEVconvTest = MIFconvTest,\n" " .DEVsenSetup = NULL,\n" " .DEVsenLoad = NULL,\n" " .DEVsenUpdate = NULL,\n" " .DEVsenAcLoad = NULL,\n" " .DEVsenPrint = NULL,\n" " .DEVsenTrunc = NULL,\n" " .DEVdisto = NULL,\n" " .DEVnoise = NULL,\n" " .DEVsoaCheck = NULL,\n" " .DEVinstSize = &val_sizeofMIFinstance,\n" " .DEVmodSize = &val_sizeofMIFmodel,\n" "\n" "#ifdef CIDER\n" " .DEVdump = NULL,\n" " .DEVacct = NULL,\n" "#endif\n" "};\n\n" ); /* Check outputs */ if (rc < 0) { print_error("Writing of SPICE device information failed."); xrc = -1; } return xrc; } /* end of function write_SPICEdev */ /* *********************************************************************** */ /* 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 const char *data_type_to_str(Data_Type_t type) { switch (type) { case CMPP_BOOLEAN: return "MIF_BOOLEAN"; case CMPP_INTEGER: return "MIF_INTEGER"; case CMPP_REAL: return "MIF_REAL"; case CMPP_COMPLEX: return "MIF_COMPLEX"; case CMPP_STRING: case CMPP_POINTER: return "MIF_STRING"; default: print_error("INTERNAL ERROR - data_type_to_str() - Impossible data type."); return "INVALID DATA TYPE"; } } /* *********************************************************************** */ static const char *port_type_to_str(Port_Type_t port) { switch (port) { case VOLTAGE: return "MIF_VOLTAGE"; case DIFF_VOLTAGE: return "MIF_DIFF_VOLTAGE"; case CURRENT: return "MIF_CURRENT"; case DIFF_CURRENT: return "MIF_DIFF_CURRENT"; case VSOURCE_CURRENT: return "MIF_VSOURCE_CURRENT"; case CONDUCTANCE: return "MIF_CONDUCTANCE"; case DIFF_CONDUCTANCE: return "MIF_DIFF_CONDUCTANCE"; case RESISTANCE: return "MIF_RESISTANCE"; case DIFF_RESISTANCE: return "MIF_DIFF_RESISTANCE"; case DIGITAL: return "MIF_DIGITAL"; case USER_DEFINED: return "MIF_USER_DEFINED"; default: print_error("INTERNAL ERROR - port_type_to_str() - Impossible port type."); return "INVALID PORT TYPE"; } } /* *********************************************************************** */ static const char *gen_port_type_str(Port_Type_t port) { switch (port) { case VOLTAGE: return "v"; case DIFF_VOLTAGE: return "vd"; case CURRENT: return "i"; case DIFF_CURRENT: return "id"; case VSOURCE_CURRENT: return "vnam"; case CONDUCTANCE: return "g"; case DIFF_CONDUCTANCE: return "gd"; case RESISTANCE: return "h"; case DIFF_RESISTANCE: return "hd"; case DIGITAL: return "d"; case USER_DEFINED: return ""; default: print_error("INTERNAL ERROR - gen_port_type_str() - " "Impossible port type."); return "INVALID PORT TYPE"; } } /* end of function gen_port_type_str */ /* *********************************************************************** */ static const char *dir_to_str(Dir_t dir) { switch(dir) { case CMPP_IN: return "MIF_IN"; case CMPP_OUT: return "MIF_OUT"; case CMPP_INOUT: return "MIF_INOUT"; default: print_error("INTERNAL ERROR - dir_to_str() - Impossible direction type."); return "MIF_DIRECTION_INVALID"; } } /* *********************************************************************** */ static char *value_to_str(Data_Type_t type, Value_t value) { static char *str = NULL; static int max_len = 0; const char *bool_str; int str_len; if(str == NULL) { if ((str = (char *) malloc(2 * BASE_STR_LEN + 1)) == (char *) NULL) { (void) fprintf(stderr, "Unable to allocate string buffer.\n"); return (char *) NULL; } max_len = 2 * BASE_STR_LEN; } switch(type) { case CMPP_BOOLEAN: bool_str = boolean_to_str(value.bvalue); sprintf(str, "{%s, 0, 0.0, {0.0, 0.0}, NULL}", bool_str); break; case CMPP_INTEGER: sprintf(str, "{MIF_FALSE, %d, 0.0, {0.0, 0.0}, NULL}", value.ivalue); break; case CMPP_REAL: sprintf(str, "{MIF_FALSE, 0, %e, {0.0, 0.0}, NULL}", value.rvalue); break; case CMPP_COMPLEX: sprintf(str, "{MIF_FALSE, 0, 0.0, {%e, %e}, NULL}", value.cvalue.real, value.cvalue.imag); break; case CMPP_STRING: /* be careful, the string could conceivably be very long... */ str_len = (int) strlen(value.svalue); if ((str_len + BASE_STR_LEN) > max_len) { int n_byte_alloc = max_len + str_len + 1; void * const p = realloc(str, n_byte_alloc); if (p == NULL) { (void) fprintf(stderr, "Unable to resize string buffer to size %d.\n", n_byte_alloc); free(str); return (char *) NULL; } str = (char *) p; max_len += str_len; } /* end of resize */ 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."); } /* end of switch */ return str; } /* end of function value_to_string */ /* *********************************************************************** */ static const char *boolean_to_str(bool value) { return value ? "MIF_TRUE" : "MIF_FALSE"; } /* *********************************************************************** */ static char *integer_to_str(int value) { static char str[3 * sizeof(int) + 1]; sprintf(str, "%d", value); return str; } /* *********************************************************************** */ static const char *no_value_to_str(void) { return "{MIF_FALSE, 0, 0.0, {0.0, 0.0}, NULL}"; } tmp_ns50wwy/src/xspice/cmpp/ifs_yacc.y0000644000175000017500000006625714163340332020164 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); bool parser_just_names; static bool saw_model_name; static bool saw_function_name; static char *dtype_to_str[] = { "BOOLEAN", "INTEGER", "REAL", "COMPLEX", "STRING", "POINTER" }; static bool did_default_type; static bool did_allowed_types; static int num_items; static int item; static int item_offset; static bool 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 == CMPP_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 == CMPP_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: if (dir == CMPP_INOUT) { yyerror ("Port types `v', `vd', `i', `id' are not valid for `inout' ports"); ifs_num_errors++; } break; case DIGITAL: case USER_DEFINED: /* * anything goes */ break; case VSOURCE_CURRENT: if (dir != CMPP_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 != CMPP_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 == CMPP_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 == CMPP_REAL) && (src_value.kind == CMPP_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 CMPP_BOOLEAN: dest_value->bvalue = src_value.u.bvalue; break; case CMPP_INTEGER: dest_value->ivalue = src_value.u.ivalue; break; case CMPP_REAL: dest_value->rvalue = src_value.u.rvalue; break; case CMPP_COMPLEX: dest_value->cvalue = src_value.u.cvalue; break; case CMPP_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; bool btype; 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 btype %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).btype; }} | 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).btype; }} ; 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).btype; }} | 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).btype; }} ; 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).btype; }} ; 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 {$$ = CMPP_IN;} | TOK_DIR_OUT {$$ = CMPP_OUT;} | TOK_DIR_INOUT {$$ = CMPP_INOUT;} ; list_of_bool : /* empty */ | list_of_bool btype {ITEM; BUF.btype = $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 {$$ = CMPP_REAL;} | TOK_DTYPE_INT {$$ = CMPP_INTEGER;} | TOK_DTYPE_BOOLEAN {$$ = CMPP_BOOLEAN;} | TOK_DTYPE_COMPLEX {$$ = CMPP_COMPLEX;} | TOK_DTYPE_STRING {$$ = CMPP_STRING;} | TOK_DTYPE_POINTER {$$ = CMPP_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 = CMPP_STRING; $$.u.svalue = $1;} | btype {$$.has_value = true; $$.kind = CMPP_BOOLEAN; $$.u.bvalue = $1;} | complex {$$.has_value = true; $$.kind = CMPP_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 = $$;*/} ; btype : 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 = CMPP_REAL; $$.u.rvalue = $1;} | integer_value ; integer_value : integer {$$.has_value = true; $$.kind = CMPP_INTEGER; $$.u.ivalue = $1;} ; real : TOK_REAL_LITERAL {$$ = yydval;} ; integer : TOK_INT_LITERAL {$$ = yyival;} ; %% tmp_ns50wwy/src/xspice/cmpp/read_ifs.c0000644000175000017500000001102614163340332020112 0ustar carstencarsten/*============================================================================ FILE read_ifs.c MEMBER OF process cmpp Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 #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 bool parser_just_names; extern int ifs_num_errors; static int read_ifs_table(FILE *fp, int mode, Ifs_Table_t *ifs_table); 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. */ int 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 = (FILE *) NULL; /* Ifs file pointer */ int status = 0; /* returned status from function */ /* Open the ifs file for read access */ /* Open the model pathname file */ if ((current_filename = gen_filename(filename, "r")) == (char *) NULL) { print_error("ERROR - Unable to build full file name"); return -1; } if ((fp = fopen(current_filename, "r")) == (FILE *) NULL) { print_error("ERROR - Unable to open \"%s\": %s", current_filename, strerror(errno)); status = -1; goto EXITPOINT; } /* Get the stuff from the file into the ifs_table struct. Here mode * defines the data that will be added to the structure */ status = read_ifs_table(fp, mode, ifs_table); EXITPOINT: /* Close file and return */ if (fp != (FILE *) NULL) { if (fclose(fp) != 0) { print_error("ERROR - Unable to close \"%s\": %s", current_filename, strerror(errno)); status = -1; } } free(current_filename); current_filename = (char *) NULL; return status; } /* end of function read_ifs_file */ /* *********************************************************************** */ /* 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 int 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_table->name.description = ifs_table->name.c_fcn_name = ifs_table->name.model_name = NULL; 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 -1; } ifs_yyrestart(NULL); return 0; } /*---------------------------------------------------------------------------*/ 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); } tmp_ns50wwy/src/xspice/cmpp/ifs_lex.l0000644000175000017500000001010414163340332017774 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 tmp_ns50wwy/src/xspice/cmpp/.gitignore0000644000175000017500000000010714163340332020160 0ustar carstencarsten/mod_yacc.c /mod_yacc.h /mod_lex.c /ifs_yacc.c /ifs_yacc.h /ifs_lex.c tmp_ns50wwy/src/xspice/cmpp/file_buffer.c0000644000175000017500000006335514163340332020622 0ustar carstencarsten#include #include #include #include #include #include #include #include "file_buffer.h" #include "cmpp.h" /* Default buffer size */ #define N_BYTE_FILEBUF_INIT_DFLT 16384 static int fb_fill(FILEBUF *p_fb); static int fbget_quoted_unescaped_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj); static size_t fb_make_space_at_end(FILEBUF *p_fb); static int fbget_quoted_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj); static int fbget_quoted_escaped_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj); static int fbget_unquoted_string(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj); static int fb_return_obj(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj); static int fb_return_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj); static int fb_skip_to_eol(FILEBUF *p_fb); static int fb_skip_whitespace(FILEBUF *p_fb); /* This function initializes a file-buffer read access to the named file. * * Parameters * filename: Name of file to be opened for reading * n_byte_buf_init: Intial buffer size. May be 0 for default size * * Return values * NULL: Error occurred. The value of errno will provide more details * Otherwise an initialized structure */ FILEBUF *fbopen(const char *filename, size_t n_byte_buf_init) { int xrc = 0; FILEBUF *p_fb = (FILEBUF *) NULL; /* Set default buffer size if requested */ if (n_byte_buf_init == 0) { n_byte_buf_init = N_BYTE_FILEBUF_INIT_DFLT; } /* Allocate structure to return */ if ((p_fb = (FILEBUF *) malloc(sizeof *p_fb)) == (FILEBUF *) NULL) { xrc = -1; goto EXITPOINT; } p_fb->is_eof = false; p_fb->f_skip_to_eol = false; /* Init resources for error recovery */ p_fb->fp = (FILE *) NULL; p_fb->p_buf = (char *) NULL; /* Allocate data buffer */ if ((p_fb->p_buf = (char *) malloc(n_byte_buf_init)) == (char *) NULL) { xrc = -1; goto EXITPOINT; } p_fb->n_byte_buf_alloc = n_byte_buf_init; p_fb->p_data_end = p_fb->p_data_cur = p_fb->p_buf; p_fb->p_buf_end = p_fb->p_buf + n_byte_buf_init; /* p_fb->p_obj_undefined since no object yet */ /* Open file. It is opened in binary mode because the scanning will * handle all EOL chars, so any translations by the OS are almost * pure overhead. Also, not converting ensures that if fread returns * fewer than the requested number of chars, that read was to the * end of the file (if not an error). Otherwise an additional read * getting a size of 0 would be required. */ if ((p_fb->fp = fopen(filename, "rb")) == (FILE *) NULL) { xrc = -1; goto EXITPOINT; } EXITPOINT: /* Free resources on error */ if (xrc != 0) { if (p_fb != (FILEBUF *) NULL) { const int errno_save = errno; /* save errno in case fbclose() * changes it */ (void) fbclose(p_fb); errno = errno_save; p_fb = (FILEBUF *) NULL; } } /* end of case of error */ return p_fb; } /* end of function fbopen */ /* This function frees resources used by a FILEBUF. * * Parameter * p_fb: The address of the FILEBUF to free. This argument may be NULL. * * Return values * 0: OK * EOF: Error closing file. Details can be found using errno. */ int fbclose(FILEBUF *p_fb) { if (p_fb == (FILEBUF *) NULL) { return 0; } int xrc = 0; { void *p; if ((p = p_fb->p_buf) != NULL) { free(p); } } { FILE *fp; if ((fp = p_fb->fp) != (FILE *) NULL) { xrc = fclose(fp); } } free(p_fb); return xrc; } /* end of function fbclose */ /* This function gets the next object converting it to the most desired * type. * * Parameters * p_fb: FILEBUF pointer initialized using fbopen() * n_type_wanted: number of desired type conversions for data from highest * priority to lowest. * p_type_wanted: Desired type conversions for data from highest priority * to lowest. * p_type_found: Address to receive the type of the data obtained * p_fbobj: Address of an FBOBJ structure to receive the data * * Return codes * +1: EOF reached * 0: Normal return * -1: Error. Use errno for further details. * * Remarks * Type BUF_TYPE_STRING is always implicitly added to the list of wanted * types as the final choice, which any data will satisfy * * A string may be double-quoted. In this case the quotes are not supplied * to the caller as part of the data. Double-quoting ensures that a string * will not be converted to any other type. Within double quotes, a double * qoute and a backslash are escaped by a backslash, and a final unescaped * double quote is impilcitly added if EOF is reached when scanning for a * closing quote. * * A "*" or a "#" not within a quoted expression begins a comment that * extends to the end of the line. * * When called p_fb has data from the last get or it is the first call. * * Return Codes * +1: EOF * 0: Normal * -1: Error */ int fbget(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj) { /* Test for existing EOF */ if (p_fb->is_eof && p_fb->p_data_cur == p_fb->p_data_end) { /* no data */ return +1; } /* Init to no object */ p_fb->p_obj_start = (char *) NULL; /* Skip the comment if the initiating character was processed during * the last call to fbget */ if (p_fb->f_skip_to_eol) { const int rc = fb_skip_to_eol(p_fb); if (rc != 0) { /* EOF or error */ return rc; } } { const int rc = fb_skip_whitespace(p_fb); if (rc != 0) { /* EOF or error */ return rc; } } /* Current char exists and starts the item */ if (*p_fb->p_data_cur == '"') { /* quoted string */ return fbget_quoted_string(p_fb, p_type_found, p_fbobj); } /* Else unquoted string */ return fbget_unquoted_string(p_fb, n_type_wanted, p_type_wanted, p_type_found, p_fbobj); } /* end of function fbget */ /* Get a quoted string given at a quote. On entry p_fb->p_data_cur points * to the quote starting the quoted string. On return it points to the first * character after the current item or equals p_fb->p_data_end if the * current item extens to the end of the current data string. */ static int fbget_quoted_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj) { /* Advance past the opening quote to the true start of the string */ if (++p_fb->p_data_cur == p_fb->p_data_end) { /* The leading quote ended the current data */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ if (rc < 0) { /* error */ return -1; } /* Else EOF. This item is an empty string that ended without the * closing quote, so add an implicit closing quote, i.e., end * the string to form "". * * Since the object was started at the beginning of the buffer * and the buffer has at leat 1 byte a NULL to create the * string "" can be written here */ *(p_fb->p_obj_end = p_fb->p_obj_start = p_fb->p_buf) = '\0'; return fb_return_string(p_fb, p_type_found, p_fbobj); } /* Else data is now available at p_fb->p_data_cur */ } /* end of case that at end of data from file */ /* Save the start of the string as the current position */ p_fb->p_obj_start = p_fb->p_data_cur; /* Continue processing as an unescaped string, unless the contrary * is found to be true */ return fbget_quoted_unescaped_string(p_fb, p_type_found, p_fbobj); } /* end of function fbget_quoted_string */ /* Get a quoted string with no escape. The start has already been set on * entry. If an escape is found, processing continues as an escaped string */ int fbget_quoted_unescaped_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj) { /* Step through characters until end or escape */ char *p_data_cur = p_fb->p_data_cur; char *p_data_end = p_fb->p_data_end; for ( ; ; ) { /* continue until done */ for ( ; p_data_cur != p_data_end; ++p_data_cur) { /* current data */ const char ch_cur = *p_data_cur; if (ch_cur == '"') { /* Closing quote, so done */ *(p_fb->p_obj_end = p_data_cur) = '\0'; p_fb->p_data_cur = p_data_cur + 1; return fb_return_string(p_fb, p_type_found, p_fbobj); } if (ch_cur == '\\') { /* Escape */ /* After an escape, data must be moved to fill in the gap * left by the escape character */ p_fb->p_data_cur = p_data_cur; /* Reprocess the escape */ return fbget_quoted_escaped_string(p_fb, p_type_found, p_fbobj); } /* Else the character is part of the quoted string */ } /* end of loop over current text */ p_fb->p_data_cur = p_data_cur; /* update current position */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ if (rc < 0) { /* error */ return -1; } /* Else EOF. Ended without closing quote, so add an implicit * closing quote, i.e., end the string. Since fb_fill() * did not return -1, there is at least 1 byte at the end of * the buffer where the read would have gone. */ *(p_fb->p_obj_end = p_fb->p_data_cur) = '\0'; return fb_return_string(p_fb, p_type_found, p_fbobj); } p_data_cur = p_fb->p_data_cur; /* Update after fill */ p_data_end = p_fb->p_data_end; } /* end of loop processing until done or escape */ } /* end of function fbget_quoted_unescaped_string */ /* Get a quoted string with an escape. The start has already been set on * entry */ static int fbget_quoted_escaped_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj) { /* Step through characters until end */ char *p_data_src = p_fb->p_data_cur; /* at current char */ char *p_data_dst = p_data_src; /* at current char */ char *p_data_end = p_fb->p_data_end; bool f_escape_in_progress = false; for ( ; ; ) { /* continue until done */ for ( ; p_data_src != p_data_end; ++p_data_src) { /* current data */ const char ch_cur = *p_data_src; if (f_escape_in_progress) { /* Always copy the char */ f_escape_in_progress = false; *p_data_dst++ = ch_cur; } else { /* Not an escaped character */ if (ch_cur == '"') { /* Closing quote, so done */ p_fb->p_data_cur = p_data_src + 1; *(p_fb->p_obj_end = p_data_dst) = '\0'; return fb_return_string(p_fb, p_type_found, p_fbobj); } if (ch_cur == '\\') { /* Escape */ f_escape_in_progress = true; /* Do not copy the escape or advancd p_data_dst */ } else { /* ordinary character */ *p_data_dst++ = ch_cur; } } /* end of case of not an escaped character */ /* Else the character is part of the quoted string */ } /* end of loop over current text */ /* Indicate that there is no more unprocessed data */ p_fb->p_data_end = p_fb->p_data_cur = p_data_dst; /* If no pending escape, can switch back to unescaped version and * avoid the moves */ if (!f_escape_in_progress) { return fbget_quoted_unescaped_string(p_fb, p_type_found, p_fbobj); } /* Else escape must be processed, so continue with escaped version */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ if (rc < 0) { /* error */ return -1; } /* Else EOF. Ended without closing quote, so add an implicit * closing quote, i.e., end the string. Since fb_fill() * did not return -1, there is at least 1 byte at the end of * the buffer where the read would have gone. */ *(p_fb->p_obj_end = p_fb->p_data_cur) = '\0'; return fb_return_string(p_fb, p_type_found, p_fbobj); } p_data_dst = p_data_src = p_fb->p_data_cur; /* Update after fill */ p_data_end = p_fb->p_data_end; } /* end of loop processing until done or escape */ } /* end of function fbget_quoted_escaped_string */ /* Get an unquoted string starting at the current position */ static int fbget_unquoted_string(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj) { /* Save the start of the string as the current position */ p_fb->p_obj_start = p_fb->p_data_cur; static const signed char p_map[1 << CHAR_BIT] = { [(unsigned char ) ' '] = (signed char) +1, [(unsigned char ) '\t'] = (signed char) +1, [(unsigned char ) '\n'] = (signed char) +1, [(unsigned char ) '\r'] = (signed char) +1, [(unsigned char ) '\v'] = (signed char) +1, [(unsigned char ) '\f'] = (signed char) +1, [(unsigned char ) '*'] = (signed char) -1, [(unsigned char ) '#'] = (signed char) -1 }; /* Step through characters until whitespace or comment */ char *p_data_cur = p_fb->p_data_cur; char *p_data_end = p_fb->p_data_end; for ( ; ; ) { /* continue until done */ for ( ; p_data_cur != p_data_end; ++p_data_cur) { /* current data */ const char ch_cur = *p_data_cur; const signed char map_cur = p_map[(unsigned char) ch_cur]; if (map_cur != 0) { /* ws or comment start, so done */ *(p_fb->p_obj_end = p_data_cur) = '\0'; p_fb->p_data_cur = p_data_cur + 1; /* 1st char past string */ p_fb->f_skip_to_eol = map_cur < 0; return fb_return_obj(p_fb, n_type_wanted, p_type_wanted, p_type_found, p_fbobj); } /* Else more of the string */ } /* end of loop over current text */ p_fb->p_data_cur = p_data_cur; /* update current position */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ if (rc < 0) { /* error */ return -1; } /* Else EOF. Ended without closing quote, so add an implicit * closing quote, i.e., end the string. Since fb_fill() * did not return -1, there is at least 1 byte at the end of * the buffer where the read would have gone. */ *(p_fb->p_obj_end = p_fb->p_data_cur) = '\0'; return fb_return_obj(p_fb, n_type_wanted, p_type_wanted, p_type_found, p_fbobj); } p_data_cur = p_fb->p_data_cur; /* Update after fill */ p_data_end = p_fb->p_data_end; } /* end of loop processing until done or escape */ } /* end of function fbget_unquoted_string */ /* This function fills the buffer. First it moves all data in the interval * [start current object, current position) to the beginning of the buffer. * * If there is no space left at the end of the buffer after the move (so * that the move did not occur and data extends to the end), the buffer is * doubled in size. In either case, the end of the buffer is filled with * data read from the file. */ static int fb_fill(FILEBUF *p_fb) { /* Exit if EOF already */ if (p_fb->is_eof) { return +1; } /* Move the data in use to the front of the buffer if not already and * enlarge the buffer if still no space. Returned value is bytes * available at the end of the buffer at p_data_end */ const size_t n_byte_read = fb_make_space_at_end(p_fb); if (n_byte_read == 0) { return -1; } const size_t n_got = fread(p_fb->p_data_end, 1, n_byte_read, p_fb->fp); if (n_got < n_byte_read) { /* EOF or error */ if (ferror(p_fb->fp)) { return -1; } /* Else mark as EOF for subsequent calls */ p_fb->is_eof = true; if (n_got == 0) { /* Nothing to return for this call */ return +1; } /* Else partial buffer to return */ } /* Extend the end of the data by the bytes obtained */ p_fb->p_data_end += n_got; return 0; } /* end of function fb_fill */ /* Make space at the end of the buffer by moving data of current object * to the front of the buffer and enlarging if there is still no room * * Return value: Number of spaces that are free at the end of p_buf on * return. If 0, more space could not be obtained. */ static size_t fb_make_space_at_end(FILEBUF *p_fb) { const char * const p_obj_start = p_fb->p_obj_start; const char * const p_src = p_obj_start == (char *) NULL ? p_fb->p_data_cur : p_obj_start; char * const p_dst = p_fb->p_buf; /* Shift data in use to the front of the buffer if not already */ if (p_dst != p_src) { /* object is not at start of buffer */ const size_t n = p_fb->p_data_end - p_src; if (n > 0) { /* Will be 0 if skipping whitespace and comments */ (void) memmove(p_dst, p_src, n); } /* Adjust pointers after the move */ ptrdiff_t delta = p_src - p_dst; p_fb->p_data_cur -= delta; p_fb->p_data_end -= delta; if (p_obj_start != (char *) NULL) { p_fb->p_obj_start -= delta; } /* never called when p_obj_end is valid */ } else { /* already at front */ if (p_fb->p_buf_end - p_fb->p_data_end == 0) { const size_t n_alloc_orig = p_fb->n_byte_buf_alloc; /* For debugging, this added size can be made very small to * force many reallocs and to have strings end at "hard" * locations such as right before where a terminating null * should be added to a string */ //const size_t n_added = 1; const size_t n_added = n_alloc_orig; const size_t n_byte_buf_alloc_new = n_alloc_orig + n_added; void * const p = realloc(p_fb->p_buf, n_byte_buf_alloc_new); if (p == NULL) { return 0; } /* Else allocation OK, so update buffer and internal pointers */ ptrdiff_t delta = (char *) p - p_fb->p_buf; p_fb->p_buf = (char *) p; p_fb->p_buf_end = (char *) p + n_byte_buf_alloc_new; p_fb->n_byte_buf_alloc = n_byte_buf_alloc_new; p_fb->p_data_cur += delta; p_fb->p_data_end += delta; if (p_obj_start != (char *) NULL) { p_fb->p_obj_start += delta; } /* never called when p_obj_end is valid */ } } return p_fb->p_buf_end - p_fb->p_data_end; } /* end of function fb_make_space_at_end */ /* Skip whitespace, including comments starting at the current position */ static int fb_skip_whitespace(FILEBUF *p_fb) { static const signed char p_map[1 << CHAR_BIT] = { [(unsigned char ) ' '] = (signed char) +1, [(unsigned char ) '\t'] = (signed char) +1, [(unsigned char ) '\n'] = (signed char) +1, [(unsigned char ) '\r'] = (signed char) +1, [(unsigned char ) '\v'] = (signed char) +1, [(unsigned char ) '\f'] = (signed char) +1, [(unsigned char ) '*'] = (signed char) -1, [(unsigned char ) '#'] = (signed char) -1 }; /* Step through characters until not whitespace (including comments) */ char *p_data_cur = p_fb->p_data_cur; char *p_data_end = p_fb->p_data_end; for ( ; ; ) { /* continue until done */ for ( ; p_data_cur != p_data_end; ++p_data_cur) { /* current data */ const char ch_cur = *p_data_cur; const signed char map_cur = p_map[(unsigned char) ch_cur]; if (map_cur == 0) { /* not in ws or at comment start, so done */ p_fb->p_data_cur = p_data_cur; return 0; } if (map_cur == -1) { /* a comment has started */ p_fb->p_data_cur = p_data_cur + 1; /* after comment start */ const int rc = fb_skip_to_eol(p_fb); if (rc != 0) { /* EOF or error */ return rc; } /* Update local variables. Note that p_fb->p_data_cur is at * the character after the comment, which is a \n or \r. * These characters are whitespace that will be skipped, * so incrementing past it in the ++p_data_cur of the for() * only skips a character that will be skipped anyhow. * (A long comment to say that * p_data_cur = p_fb->p_data_cur - 1 is not necessary.) */ p_data_cur = p_fb->p_data_cur; p_data_end = p_fb->p_data_end; } /* end of comment processing */ /* Else whitespace, which is skipped */ } /* end of loop over current text */ p_fb->p_data_cur = p_data_cur; /* update current position */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ return rc; } /* Else got more text to process */ p_data_cur = p_fb->p_data_cur; /* Update after fill */ p_data_end = p_fb->p_data_end; } /* end of loop over text pieces */ } /* end of function fb_skip_whitespace */ /* Skip text to EOL char, starting at the current position */ static int fb_skip_to_eol(FILEBUF *p_fb) { /* Step through characters until not whitespace (including comments) */ char *p_data_cur = p_fb->p_data_cur; char *p_data_end = p_fb->p_data_end; for ( ; ; ) { /* continue until done */ for ( ; p_data_cur != p_data_end; ++p_data_cur) { /* current data */ const char ch_cur = *p_data_cur; if (ch_cur == '\n' || ch_cur == '\r') { p_fb->p_data_cur = p_data_cur; return 0; } /* Else not EOL, which is skipped */ } /* end of loop over current text */ p_fb->p_data_cur = p_data_cur; /* update current position */ const int rc = fb_fill(p_fb); /* Try to refill buffer */ if (rc != 0) { /* EOF or error */ return rc; } /* Else got more text to process */ p_data_cur = p_fb->p_data_cur; /* Update after fill */ p_data_end = p_fb->p_data_end; } /* end of loop over text pieces */ } /* end of function fb_skip_to_eol */ /* Return the data found in the most preferred format possible */ static int fb_return_obj(FILEBUF *p_fb, unsigned int n_type_wanted, FBTYPE *p_type_wanted, FBTYPE *p_type_found, FBOBJ *p_fbobj) { const char * const p_obj_start = p_fb->p_obj_start; /* data to convert */ const char * const p_obj_end = p_fb->p_obj_end; /* Must test for null string separately since strto* does not set * errno in this case. Aside from that, it can only be returned * as a string anyhow. */ if (p_obj_start != p_obj_end) { /* have a string besides "" */ unsigned int i; for (i = 0; i < n_type_wanted; ++i) { FBTYPE type_cur = p_type_wanted[i]; errno = 0; if (type_cur == BUF_TYPE_ULONG) { char *p_end; unsigned long val = strtoul(p_obj_start, &p_end, 10); /* Test for processing of full string. Note that checking * for the end of the string rather than a NULL handles the * case of an embedded NULL which the latter test would * not */ if (errno == 0 && p_end == p_obj_end) { *p_type_found = BUF_TYPE_ULONG; p_fbobj->ulong_value = val; return 0; } } else if (type_cur == BUF_TYPE_LONG) { char *p_end; long val = strtol(p_obj_start, &p_end, 10); if (errno == 0 && p_end == p_obj_end) { *p_type_found = BUF_TYPE_LONG; p_fbobj->long_value = val; return 0; } } else if (type_cur == BUF_TYPE_DOUBLE) { char *p_end; double val = strtod(p_obj_start, &p_end); if (errno == 0 && p_end == p_obj_end) { *p_type_found = BUF_TYPE_DOUBLE; p_fbobj->dbl_value = val; return 0; } } else if (type_cur == BUF_TYPE_STRING) { break; /* exit loop and use default return of string */ } else { /* unknown type */ print_error("Unknown output data type %d is ignored.", (int) type_cur); } } /* end of loop trying types */ } /* end of case that string is not "" */ /* If no rquested type was converted OK or string requested, return as * a string */ return fb_return_string(p_fb, p_type_found, p_fbobj); } /* end of function fb_return_obj */ /* Return string */ static int fb_return_string(FILEBUF *p_fb, FBTYPE *p_type_found, FBOBJ *p_fbobj) { const char *p_data_start = p_fbobj->str_value.sz = p_fb->p_obj_start; p_fbobj->str_value.n_char = p_fb->p_obj_end - p_data_start; *p_type_found = BUF_TYPE_STRING; return 0; } /* end of function fb_return_string */ tmp_ns50wwy/src/xspice/xspice.c0000644000175000017500000000265314163340332016700 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 }; tmp_ns50wwy/src/xspice/evt/0000755000175000017500000000000014163340332016031 5ustar carstencarstentmp_ns50wwy/src/xspice/evt/evtsetup.c0000644000175000017500000004420514163340332020061 0ustar carstencarsten/*============================================================================ FILE EVTsetup.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); int EVTsetup_plot(CKTcircuit* ckt, char* plottypename); int EVTswitch_plot(CKTcircuit* ckt, const char* plottypename); /* 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); } int EVTunsetup( 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); /* 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->job_plot, 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->job_plot[i] = NULL; /* fill in later */ 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; /* Reset init flag, required when any run is called a second time */ fast->initialized = FALSE; /* 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); } /* get the analog plot name and store it into the current event job */ int EVTsetup_plot(CKTcircuit* ckt, char *plotname) { if (ckt->evt->counts.num_insts == 0) return(OK); Evt_Job_t* jobs = &(ckt->evt->jobs); if (jobs) { jobs->job_plot[jobs->num_jobs - 1] = copy(plotname); jobs->cur_job = jobs->num_jobs - 1; return OK; } return 1; } /* If command 'setplot' is called, we switch to the corresponding event data. Their pointers have been stored in the jobs structure. The circuit must be still available! */ int EVTswitch_plot(CKTcircuit* ckt, const char* plottypename) { int i; bool found = FALSE; Evt_Job_t* jobs; Evt_Data_t* data; if (ckt->evt->counts.num_insts == 0) return(OK); jobs = &(ckt->evt->jobs); data = &(ckt->evt->data); if (jobs) { /* check for the job with current plot type name , e.g. tran2 */ for (i = 0; i < jobs->num_jobs; i++) { if (jobs->job_plot[i] && eq(jobs->job_plot[i], plottypename)) { found = TRUE; jobs->cur_job = i; break; } } if (found) { data->node = jobs->node_data[i]; data->state = jobs->state_data[i]; data->msg = jobs->msg_data[i]; data->statistics = jobs->statistics[i]; return OK; } } return 1; } tmp_ns50wwy/src/xspice/evt/evtaccept.c0000644000175000017500000001117414163340332020157 0ustar carstencarsten/*============================================================================ FILE EVTaccept.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 */ tmp_ns50wwy/src/xspice/evt/Makefile.am0000644000175000017500000000107314163340332020066 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 tmp_ns50wwy/src/xspice/evt/evtshared.c0000644000175000017500000001516314163340332020170 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] = NULL; return allnodes; } tmp_ns50wwy/src/xspice/evt/evtnode_copy.c0000644000175000017500000000753514163340332020705 0ustar carstencarsten/*============================================================================ FILE EVTnode_copy.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } } tmp_ns50wwy/src/xspice/evt/evtop.c0000644000175000017500000002125114163340332017333 0ustar carstencarsten/*============================================================================ FILE EVTop.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/evt/evtdeque.c0000644000175000017500000002324514163340332020025 0ustar carstencarsten/*============================================================================ FILE EVTdequeue.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/evt/evtload.c0000644000175000017500000004371514163340332017645 0ustar carstencarsten/*============================================================================ FILE EVTload.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; new_state->next = NULL; // reusing dirty memory: next must be reset } 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 */ } tmp_ns50wwy/src/xspice/evt/evtdest.c0000644000175000017500000002025614163340332017660 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_Ckt_Data_t* evt, 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 is removed during Evt_Job_destroy() */ Evt_Job_destroy(evt, & 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_Ckt_Data_t* evt, Evt_Job_t *job) { int i; for (i = 0; i < job->num_jobs; i++) { tfree(job->job_name[i]); tfree(job->job_plot[i]); Evt_State_Data_destroy(evt, job->state_data[i]); Evt_Node_Data_destroy(evt, job->node_data[i]); Evt_Msg_Data_destroy(evt, job->msg_data[i]); tfree(job->state_data[i]); tfree(job->node_data[i]); tfree(job->msg_data[i]); tfree(job->statistics[i]); } tfree(job->job_name); tfree(job->job_plot); 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); } tmp_ns50wwy/src/xspice/evt/evtprint.c0000644000175000017500000004440214163340332020054 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 #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; } if (!ckt->evt->jobs.job_plot) { out_printf("No event job run, no data available!\n"); return; } out_printf("\nList of event nodes in plot %s\n", ckt->evt->jobs.job_plot[ckt->evt->jobs.cur_job]); 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(); /* for gtkwave, avoid e.g. German Umlaute */ setlocale(LC_TIME, "en_US"); /* 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); /* return to what it was before */ setlocale(LC_TIME, ""); 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"); } tmp_ns50wwy/src/xspice/evt/evtinit.c0000644000175000017500000002666114163340332017672 0ustar carstencarsten/*============================================================================ FILE EVTinit.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/evt/evtdump.c0000644000175000017500000004372714163340332017676 0ustar carstencarsten/*============================================================================ FILE EVTdump.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/evt/evtbackup.c0000644000175000017500000004424714163340332020174 0ustar carstencarsten/*============================================================================ FILE EVTbackup.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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->posted_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++; } } } tmp_ns50wwy/src/xspice/evt/evtplot.c0000644000175000017500000001233214163340332017673 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->info.node_table) 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); } tmp_ns50wwy/src/xspice/evt/evttermi.c0000644000175000017500000003427014163340332020042 0ustar carstencarsten/*============================================================================ FILE EVTtermInsert.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/evt/evtqueue.c0000644000175000017500000001545014163340332020045 0ustar carstencarsten/*============================================================================ FILE EVTqueue.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/evt/evtiter.c0000644000175000017500000002156014163340332017663 0ustar carstencarsten/*============================================================================ FILE EVTiter.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/evt/evtcall_hybrids.c0000644000175000017500000000302114163340332021347 0ustar carstencarsten/*============================================================================ FILE EVTcall_hybrids.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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]); } tmp_ns50wwy/src/xspice/evt/evtnext_time.c0000644000175000017500000000356014163340332020714 0ustar carstencarsten/*============================================================================ FILE EVTnext_time.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/enh/0000755000175000017500000000000014163340332016005 5ustar carstencarstentmp_ns50wwy/src/xspice/enh/Makefile.am0000644000175000017500000000047314163340332020045 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 tmp_ns50wwy/src/xspice/enh/enh.c0000644000175000017500000000371714163340332016733 0ustar carstencarsten/*============================================================================ FILE ENH.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 */ tmp_ns50wwy/src/xspice/enh/enhtrans.c0000644000175000017500000003476014163340332020005 0ustar carstencarsten/* =========================================================================== FILE ENHtranslate_poly.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 */ tmp_ns50wwy/src/xspice/README0000644000175000017500000000501514163340332016114 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. tmp_ns50wwy/src/xspice/examples/0000755000175000017500000000000014163340332017051 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/d_to_real/0000755000175000017500000000000014163340332021001 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/d_to_real/ifspec.ifs0000644000175000017500000000230614163340332022756 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 tmp_ns50wwy/src/xspice/examples/d_to_real/Makefile0000644000175000017500000000160114163340332022437 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 tmp_ns50wwy/src/xspice/examples/d_to_real/cfunc.mod0000644000175000017500000000124414163340332022601 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; } tmp_ns50wwy/src/xspice/examples/nco/0000755000175000017500000000000014163340332017630 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/nco/ifspec.ifs0000644000175000017500000000202314163340332021601 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" tmp_ns50wwy/src/xspice/examples/nco/Makefile0000644000175000017500000000160114163340332021266 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 tmp_ns50wwy/src/xspice/examples/nco/cfunc.mod0000644000175000017500000000421214163340332021426 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; } } tmp_ns50wwy/src/xspice/examples/real_to_v/0000755000175000017500000000000014163340332021023 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/real_to_v/ifspec.ifs0000644000175000017500000000165214163340332023003 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 tmp_ns50wwy/src/xspice/examples/real_to_v/Makefile0000644000175000017500000000160114163340332022461 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 tmp_ns50wwy/src/xspice/examples/real_to_v/cfunc.mod0000644000175000017500000000272714163340332022632 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; } } tmp_ns50wwy/src/xspice/examples/print_param_types/0000755000175000017500000000000014163340332022611 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/print_param_types/ifspec.ifs0000644000175000017500000000501114163340332024562 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 tmp_ns50wwy/src/xspice/examples/print_param_types/Makefile0000644000175000017500000000160114163340332024247 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 tmp_ns50wwy/src/xspice/examples/print_param_types/cfunc.mod0000644000175000017500000000202714163340332024411 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])); } } tmp_ns50wwy/src/xspice/examples/real_delay/0000755000175000017500000000000014163340332021152 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/real_delay/ifspec.ifs0000644000175000017500000000162114163340332023126 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 tmp_ns50wwy/src/xspice/examples/real_delay/Makefile0000644000175000017500000000160114163340332022610 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 tmp_ns50wwy/src/xspice/examples/real_delay/cfunc.mod0000644000175000017500000000166714163340332022763 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); } } } tmp_ns50wwy/src/xspice/examples/real_gain/0000755000175000017500000000000014163340332020772 5ustar carstencarstentmp_ns50wwy/src/xspice/examples/real_gain/ifspec.ifs0000644000175000017500000000261514163340332022752 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 tmp_ns50wwy/src/xspice/examples/real_gain/Makefile0000644000175000017500000000160114163340332022430 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 tmp_ns50wwy/src/xspice/examples/real_gain/cfunc.mod0000644000175000017500000000132614163340332022573 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; } } tmp_ns50wwy/src/xspice/idn/0000755000175000017500000000000014163340332016005 5ustar carstencarstentmp_ns50wwy/src/xspice/idn/Makefile.am0000644000175000017500000000045714163340332020047 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 tmp_ns50wwy/src/xspice/idn/idndig.c0000644000175000017500000002050614163340332017412 0ustar carstencarsten/*============================================================================ FILE IDNdig.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 }; tmp_ns50wwy/src/xspice/ipc/0000755000175000017500000000000014163340332016006 5ustar carstencarstentmp_ns50wwy/src/xspice/ipc/Makefile.am0000644000175000017500000000062614163340332020046 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 tmp_ns50wwy/src/xspice/ipc/ipc.c0000644000175000017500000006247714163340332016745 0ustar carstencarsten/*============================================================================ FILE IPC.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 } tmp_ns50wwy/src/xspice/ipc/ipcstdio.c0000644000175000017500000000315414163340332017773 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"); fgets (str, 512, stdin); char *tmp = strchr(str, '\n'); if (tmp) *tmp = '\0'; *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 */ tmp_ns50wwy/src/xspice/ipc/ipctiein.c0000644000175000017500000003210214163340332017754 0ustar carstencarsten/*============================================================================ FILE IPCtiein.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/ipc/ipcsockets.c0000644000175000017500000005024014163340332020322 0ustar carstencarsten/*============================================================================= FILE IPCsockets.c Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 PROJECT 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*/ 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, (socklen_t*)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 */ tmp_ns50wwy/src/xspice/ipc/ipcaegis.c0000644000175000017500000002042314163340332017737 0ustar carstencarsten/*============================================================================ FILE IPCaegis.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 */ tmp_ns50wwy/src/xspice/icm/0000755000175000017500000000000014163340332016003 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/GNUmakefile.in0000644000175000017500000001023314163340332020461 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 #Invoke $(MAKE) for each of the CMDDIRS all: dstring.o # One common dstring object file for all code modules 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: rm -f dstring.o for cm in $(CMDIRS) ; do \ $(MAKE) cm=$$cm cm-clean \ || exit 1; \ done #----------------------------------------------------------------------------- NGSRCDIR = $(srcdir)/../.. NGSRCBUILDDIR = $(CURDIR)/../.. dstring.o: $(NGSRCDIR)/misc/dstring.c $(NGSRCDIR)/include/ngspice/dstring.h $(CC) $(CFLAGS) -I$(NGSRCDIR)/include -I$(NGSRCBUILDDIR)/include -fPIC -o $@ -c $< ifdef cm ifeq ($(OS),Windows_NT) cmpp = ../cmpp/cmpp.exe else cmpp = ../cmpp/cmpp endif modlst := $(shell $(cmpp) -p $(srcdir)/$(cm)/modpath.lst) udnlst := $(shell $(cmpp) -p $(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 \ dstring.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)/cminfo2.h \ $(cm)/udnextrn.h \ $(cm)/udninfo.h \ $(cm)/udninfo2.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 #include "ngspice/devdefs.h" #include "ngspice/dstring.h" #include "ngspice/dllitf.h" #include "ngspice/evtudn.h" #include "ngspice/inpdefs.h" #include "cmextrn.h" #include "udnextrn.h" ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // 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; /* Instantiation of pointer to core info structure containing pointers * to core functions. */ struct coreInfo_t *coreitf = (struct coreInfo_t *) NULL; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// // 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); // 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 DFLT_BUF_SIZE 256 FILE *fopen_with_path(const char *path, const char *mode) { FILE *fp; if((path[0] != '/') && (path[1] != ':')) { /* path absolue (probably) */ // const char *x = getenv("ngspice_vpath"); const char *x = cm_get_path(); if (x) { DS_CREATE(ds, DFLT_BUF_SIZE); /* Build file /path> */ if (ds_cat_printf(&ds, "%s/%s", x, path) != 0) { cm_message_printf( "Unable to build cm_get_path() path for opening file."); ds_free(&ds); return (FILE *) NULL; } /* Try opening file. If fail, try using NGSPICE_INPUT_DIR * env variable location */ if ((fp = fopen(ds_get_buf(&ds), mode)) == (FILE *) NULL) { char *y = getenv("NGSPICE_INPUT_DIR"); if (y && *y) { /* have env var and not "" */ int rc_ds = 0; /* Build /path and try opening. If the env var * ends with a slash, do not add a second slash */ ds_clear(&ds); rc_ds |= ds_cat_str(&ds, y); /* Add slash if not present. Note that check for * length > 0 is done on the remote chance that the * ds_cat_str() failed. */ const size_t len = ds_get_length(&ds); if (len > 0 && ds_get_buf(&ds)[len - 1] != '/') { rc_ds |= ds_cat_char(&ds, '/'); /* add dir sep */ } rc_ds |= ds_cat_str(&ds, path); /* add input path */ /* Ensure path built OK */ if (rc_ds != 0) { cm_message_printf( "Unable to build NGSPICE_INPUT_DIR " "path for opening file."); ds_free(&ds); return (FILE *) NULL; } /* Try opening file name that was built */ if ((fp = fopen(ds_get_buf(&ds), mode)) != (FILE *) NULL) { ds_free(&ds); return fp; } } } /* end of open using prefix from cm_get_path() failed */ else { /* Opened OK */ ds_free(&ds); return fp; } ds_free(&ds); /* free dstring resources, if any */ } } /* end of case that path is not absolute */ /* If not opened yet, try opening exactly as given */ fp = fopen(path, mode); return fp; } /* end of function fopen_with_path */ 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; } tmp_ns50wwy/src/xspice/icm/xtraevt/0000755000175000017500000000000014163340332017500 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/udnpath.lst0000644000175000017500000000001114163340332021657 0ustar carstencarstenint real tmp_ns50wwy/src/xspice/icm/xtraevt/d_to_real/0000755000175000017500000000000014163340332021430 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/d_to_real/ifspec.ifs0000644000175000017500000000230614163340332023405 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 tmp_ns50wwy/src/xspice/icm/xtraevt/d_to_real/cfunc.mod0000644000175000017500000000126314163340332023231 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; } tmp_ns50wwy/src/xspice/icm/xtraevt/real_to_v/0000755000175000017500000000000014163340332021452 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/real_to_v/ifspec.ifs0000644000175000017500000000165214163340332023432 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 tmp_ns50wwy/src/xspice/icm/xtraevt/real_to_v/cfunc.mod0000644000175000017500000000304614163340332023254 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 * PARAM(gain); v[0] = *in; v[1] = *in; } else { if(TIME <= t[0]) OUTPUT(out) = v[0] * PARAM(gain); else if(TIME >= t[1]) OUTPUT(out) = v[1] * PARAM(gain); else { OUTPUT(out) = v[0] + (v[1] - v[0]) * (TIME - t[0]) / (t[1] - t[0]) * PARAM(gain); } } 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; } } tmp_ns50wwy/src/xspice/icm/xtraevt/real_delay/0000755000175000017500000000000014163340332021601 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/real_delay/ifspec.ifs0000644000175000017500000000162114163340332023555 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 tmp_ns50wwy/src/xspice/icm/xtraevt/real_delay/cfunc.mod0000644000175000017500000000175614163340332023411 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); } } } tmp_ns50wwy/src/xspice/icm/xtraevt/real_gain/0000755000175000017500000000000014163340332021421 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/real_gain/ifspec.ifs0000644000175000017500000000261514163340332023401 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 tmp_ns50wwy/src/xspice/icm/xtraevt/real_gain/cfunc.mod0000644000175000017500000000135614163340332023225 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; } } tmp_ns50wwy/src/xspice/icm/xtraevt/.gitignore0000644000175000017500000000017614163340332021474 0ustar carstencarsten/xtraevt.cm /cmextrn.h /cminfo.h /cminfo2.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /udninfo2.h /*/*.c !/*/udnfunc.c tmp_ns50wwy/src/xspice/icm/xtraevt/int/0000755000175000017500000000000014163340332020272 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/int/udnfunc.c0000644000175000017500000001005314163340332022077 0ustar carstencarsten/*============================================================================ FILE int/udnfunc.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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" #include "ngspice/memory.h" /* 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 }; tmp_ns50wwy/src/xspice/icm/xtraevt/real/0000755000175000017500000000000014163340332020423 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtraevt/real/udnfunc.c0000644000175000017500000001024514163340332022233 0ustar carstencarsten/*============================================================================ FILE real/udnfunc.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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" #include "ngspice/memory.h" /* 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 }; tmp_ns50wwy/src/xspice/icm/xtraevt/modpath.lst0000644000175000017500000000005114163340332021654 0ustar carstencarstend_to_real real_delay real_gain real_to_v tmp_ns50wwy/src/xspice/icm/dlmain.h0000644000175000017500000000077714163340332017433 0ustar carstencarsten////////////////////////////////////////////////////////////////////////////// // Copyright 2000 The ngspice team // 3 - Clause BSD license // (see COPYING or https://opensource.org/licenses/BSD-3-Clause) // Author: Arpad Buermen ////////////////////////////////////////////////////////////////////////////// #ifndef dlmain_h_included #define dlmain_h_included #include "ngspice/cmproto.h" #include "ngspice/mifproto.h" #include "ngspice/dllitf.h" extern struct coreInfo_t *coreitf; #endif /* dlmain.h */ tmp_ns50wwy/src/xspice/icm/xtradev/0000755000175000017500000000000014163340332017460 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/udnpath.lst0000644000175000017500000000000014163340332021635 0ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/lmeter/0000755000175000017500000000000014163340332020750 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/lmeter/ifspec.ifs0000644000175000017500000000257414163340332022734 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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" tmp_ns50wwy/src/xspice/icm/xtradev/lmeter/cfunc.mod0000644000175000017500000000417614163340332022557 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE lmeter/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/icm/xtradev/potentiometer/0000755000175000017500000000000014163340332022356 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/potentiometer/ifspec.ifs0000644000175000017500000000440114163340332024331 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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: tmp_ns50wwy/src/xspice/icm/xtradev/potentiometer/cfunc.mod0000644000175000017500000001076114163340332024162 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE potentiometer/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/xtradev/cmeter/0000755000175000017500000000000014163340332020737 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/cmeter/ifspec.ifs0000644000175000017500000000264014163340332022715 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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" tmp_ns50wwy/src/xspice/icm/xtradev/cmeter/cfunc.mod0000644000175000017500000000414314163340332022540 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE cmeter/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/icm/xtradev/lcouple/0000755000175000017500000000000014163340332021123 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/lcouple/ifspec.ifs0000644000175000017500000000244114163340332023100 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/xtradev/lcouple/cfunc.mod0000644000175000017500000001640414163340332022727 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE lcouple/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/xtradev/inductor/0000755000175000017500000000000014163340332021307 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/inductor/ifspec.ifs0000644000175000017500000000257014163340332023267 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: inductoric 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 tmp_ns50wwy/src/xspice/icm/xtradev/inductor/cfunc.mod0000644000175000017500000000344614163340332023115 0ustar carstencarsten/* =========================================================================== FILE cfunc.mod MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/xtradev/sidiode/0000755000175000017500000000000014163340332021100 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/sidiode/ifspec.ifs0000644000175000017500000000615014163340332023056 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ /* ---------------------------------------------------------------------- Copyright 2018 The ngspice team All Rights Reserved 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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" tmp_ns50wwy/src/xspice/icm/xtradev/sidiode/cfunc.mod0000644000175000017500000001405614163340332022705 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE sidiode/cfunc.mod ------------------------------------------------------------------------- Copyright 2012 The ngspice team All Rights Reserved 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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; } } tmp_ns50wwy/src/xspice/icm/xtradev/core/0000755000175000017500000000000014163340332020410 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/core/ifspec.ifs0000644000175000017500000000672514163340332022376 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/xtradev/core/cfunc.mod0000644000175000017500000004670514163340332022223 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE core/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/xtradev/memristor/0000755000175000017500000000000014163340332021501 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/memristor/ifspec.ifs0000644000175000017500000000517514163340332023465 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE /* ---------------------------------------------------------------------- Copyright 2012 The ngspice team All Rights Reserved 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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 tmp_ns50wwy/src/xspice/icm/xtradev/memristor/cfunc.mod0000644000175000017500000000547514163340332023313 0ustar carstencarsten/* =========================================================================== FILE memristor/cfunc.mod MEMBER OF process XSPICE ------------------------------------------------------------------------- Copyright 2012 The ngspice team All Rights Reserved 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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))); } tmp_ns50wwy/src/xspice/icm/xtradev/zener/0000755000175000017500000000000014163340332020603 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/zener/ifspec.ifs0000644000175000017500000000524414163340332022564 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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" tmp_ns50wwy/src/xspice/icm/xtradev/zener/cfunc.mod0000644000175000017500000002344514163340332022412 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE zener/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/xtradev/aswitch/0000755000175000017500000000000014163340332021122 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/aswitch/ifspec.ifs0000644000175000017500000000435614163340332023106 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 limit Description: "on resistance" "set upper and lower limits to resistance" Data_Type: real boolean Default_Value: 1.0 false Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes tmp_ns50wwy/src/xspice/icm/xtradev/aswitch/cfunc.mod0000644000175000017500000001216214163340332022723 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE aswitch/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 (PARAM(limit) == MIF_TRUE) { if(rr_off) r=r_off;/* maximum resistance limiter */ } else { 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 (PARAM(limit) == MIF_TRUE) { if(rr_off) r=r_off;/* maximum resistance limiter */ } else { if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */ } pi_pvout = 1.0 / r; pi_pcntl = -intermediate * INPUT(out) / (r*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; } } tmp_ns50wwy/src/xspice/icm/xtradev/capacitor/0000755000175000017500000000000014163340332021425 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/capacitor/ifspec.ifs0000644000175000017500000000255614163340332023411 0ustar carstencarsten/* =========================================================================== FILE ifspec.ifs MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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: capacitoric 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 tmp_ns50wwy/src/xspice/icm/xtradev/capacitor/cfunc.mod0000644000175000017500000000350614163340332023230 0ustar carstencarsten/* =========================================================================== FILE capacitor/cfunc.mod MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/xtradev/.gitignore0000644000175000017500000000017614163340332021454 0ustar carstencarsten/xtradev.cm /cmextrn.h /cminfo.h /cminfo2.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /udninfo2.h /*/*.c !/*/udnfunc.c tmp_ns50wwy/src/xspice/icm/xtradev/modpath.lst0000644000175000017500000000014414163340332021637 0ustar carstencarstenaswitch capacitor cmeter core inductor lcouple lmeter potentiometer zener memristor sidiode pswitch tmp_ns50wwy/src/xspice/icm/xtradev/pswitch/0000755000175000017500000000000014163340332021141 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/xtradev/pswitch/ifspec.ifs0000644000175000017500000000461214163340332023120 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ 3-Clause BSD Copyright 2020 The ngspice team AUTHORS 27 September 2020 Holger Vogt 03 June 2021 Yurii Demchyna SUMMARY This file contains the interface specification file for the analog pswitch code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_pswitch Spice_Model_Name: pswitch Description: "analog PSPICE compatible switch" PORT_TABLE: Port_Name: cntl_in out Description: "input" "resistive output" Direction: inout inout Default_Type: gd gd Allowed_Types: [g,gd] [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 r_cntl_in Description: "on resistance" "input resistance for control terminal" Data_Type: real real Default_Value: 1.0 1.0e12 Limits: - - Vector: no no Vector_Bounds: - - Null_Allowed: yes yes STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "local static data" Data_Type: pointer tmp_ns50wwy/src/xspice/icm/xtradev/pswitch/cfunc.mod0000644000175000017500000002120214163340332022735 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE pswitch/cfunc.mod 3-Clause BSD Copyright 2020 The ngspice team AUTHORS 27 September 2020 Holger Vogt MODIFICATIONS 03 June 2021 Yurii Demchyna SUMMARY This file contains the functional description of the pswitch 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 #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { double logmean; /* log-mean of resistor values */ double logratio; /* log-ratio of resistor values */ double cntl_mean; /* mean of control values */ double cntl_diff; /* diff of control values */ double intermediate; /* intermediate value used to calculate the resistance of the switch when the controlling voltage is between cntl_on and cntl_of */ double c1; /* some constants */ double c2; double c3; } Local_Data_t; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ static void cm_pswitch_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = STATIC_VAR (locdata); free(loc); break; } } } /*============================================================================== FUNCTION cm_pswitch() AUTHORS 27 September 2020 Holger Vogt MODIFICATIONS SUMMARY This function implements the pswitch 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_PSWITCH ROUTINE ===*/ void cm_pswitch(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 r_cntl_in; /* input resistance for control terminal */ double logmean; /* log-mean of resistor values */ double logratio; /* log-ratio of resistor values */ double cntl_mean; /* mean of control values */ double cntl_diff; /* diff of control values */ 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; Local_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ /* Retrieve frequently used parameters... */ cntl_on = PARAM(cntl_on); cntl_off = PARAM(cntl_off); r_on = PARAM(r_on); r_off = PARAM(r_off); r_cntl_in = PARAM(r_cntl_in); r_on = (r_on < 1.0e-3) ? 1.0e-3 : r_on; /* Set minimum 'ON' resistance */ r_off = (r_off > 1.0e12) ? 1.0e12 : r_off; /* Set maximum 'OFF' resistance */ if(INIT == 1) { /* first time through, allocate memory, set static parameters */ char *cntl_error = "\n*****ERROR*****\nPSWITCH: CONTROL voltage delta less than 1.0e-12\n"; if( (fabs(cntl_on - cntl_off) < 1.0e-12) ) { cm_message_send(cntl_error); return; } CALLBACK = cm_pswitch_callback; /*** allocate static storage for *loc ***/ STATIC_VAR (locdata) = calloc (1 , sizeof ( Local_Data_t )); loc = STATIC_VAR (locdata); if ( PARAM(log) == MIF_TRUE ) { /* Logarithmic Variation in 'R' */ if (cntl_on > cntl_off) { cntl_on = 1; cntl_off = 0; } else { cntl_on = 0; cntl_off = 1; } loc->logmean = log(sqrt(r_on * r_off)); loc->logratio = log(r_on / r_off); loc->cntl_mean = 0.5; loc->cntl_diff = cntl_on - cntl_off; loc->intermediate = loc->logratio / loc->cntl_diff; loc->c1 = 1.5 * loc->logratio / loc->cntl_diff; loc->c3 = 2. * loc->logratio / (loc->cntl_diff * loc->cntl_diff * loc->cntl_diff); //pow(loc->cntl_diff, 3); loc->c2 = 3 * loc->c3; } else { loc->cntl_diff = cntl_on - cntl_off; loc->intermediate = (r_on - r_off) / (cntl_on - cntl_off); } } loc = STATIC_VAR (locdata); if ( PARAM(log) == MIF_TRUE ) { /* Logarithmic Variation in 'R' */ logmean = loc->logmean; logratio = loc->logratio; cntl_mean = loc->cntl_mean; cntl_diff = loc->cntl_diff; intermediate = loc->intermediate; double inmean;// = INPUT(cntl_in) - cntl_mean; int outOfLimit = 0; if (cntl_on > cntl_off) { inmean = ((INPUT(cntl_in) - PARAM(cntl_off)) / (PARAM(cntl_on) - PARAM(cntl_off))) - cntl_mean; if (INPUT(cntl_in) > cntl_on) { r = r_on; outOfLimit = 1; } else if (INPUT(cntl_in) < cntl_off) { r = r_off; outOfLimit = 1; } else { r = exp(logmean + loc->c1 * inmean - loc->c3 * inmean * inmean * inmean); if(r cntl_off) { r = r_off; outOfLimit = 1; } else { r = exp(logmean + loc->c1 * inmean - loc->c3 * inmean * inmean * inmean); if(rc2 * inmean * inmean - loc->c1); if(1 == outOfLimit){ pi_pcntl = 0; } pi_pvout = 1.0 / r; } else { /* Linear Variation in 'R' */ intermediate = loc->intermediate; cntl_diff = loc->cntl_diff; r = INPUT(cntl_in) * intermediate + ((r_off*cntl_on - r_on*cntl_off) / cntl_diff); if(r<=1.0e-9) r=1.0e-9;/* minimum resistance limiter */ pi_pvout = 1.0 / r; pi_pcntl = -intermediate * INPUT(out) / (r*r); } if(ANALYSIS != MIF_AC) { /* Output DC & Transient Values */ OUTPUT(out) = INPUT(out) / r; OUTPUT(cntl_in) = INPUT(cntl_in) / r_cntl_in; // PARTIAL(out,out) = pi_pvout; // PARTIAL(out,cntl_in) = pi_pcntl; // PARTIAL(cntl_in,cntl_in) = 1 / r_cntl_in; // PARTIAL(cntl_in,out) = 0; /* cntl input resistance is // independent to out port */ cm_analog_auto_partial(); /* Note that the minus signs are required 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 signs above... */ ac_gain.imag= 0.0; AC_GAIN(out,out) = ac_gain; ac_gain.real = -pi_pcntl; ac_gain.imag= 0.0; AC_GAIN(out,cntl_in) = ac_gain; } } tmp_ns50wwy/src/xspice/icm/digital/0000755000175000017500000000000014163340332017420 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_srff/0000755000175000017500000000000014163340332020663 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_srff/ifspec.ifs0000644000175000017500000001014214163340332022635 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_srff/cfunc.mod0000644000175000017500000005573214163340332022476 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_srff/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/digital/d_or/0000755000175000017500000000000014163340332020343 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_or/ifspec.ifs0000644000175000017500000000350714163340332022324 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_or/cfunc.mod0000644000175000017500000001322214163340332022142 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_or/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/digital/d_genlut/0000755000175000017500000000000014163340332021221 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_genlut/ifspec.ifs0000644000175000017500000000432414163340332023200 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 tmp_ns50wwy/src/xspice/icm/digital/d_genlut/cfunc.mod0000644000175000017500000003030714163340332023023 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; } } } } tmp_ns50wwy/src/xspice/icm/digital/d_xor/0000755000175000017500000000000014163340332020533 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_xor/ifspec.ifs0000644000175000017500000000351214163340332022510 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_xor/cfunc.mod0000644000175000017500000001541414163340332022337 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_xor/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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: default: 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; } } tmp_ns50wwy/src/xspice/icm/digital/d_lut/0000755000175000017500000000000014163340332020527 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_lut/ifspec.ifs0000644000175000017500000000375714163340332022517 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 tmp_ns50wwy/src/xspice/icm/digital/d_lut/cfunc.mod0000644000175000017500000001435314163340332022334 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; } tmp_ns50wwy/src/xspice/icm/digital/adc_bridge/0000755000175000017500000000000014163340332021463 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/adc_bridge/ifspec.ifs0000644000175000017500000000433414163340332023443 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/adc_bridge/cfunc.mod0000644000175000017500000002426714163340332023275 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE adc_bridge/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/digital/d_dlatch/0000755000175000017500000000000014163340332021162 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_dlatch/ifspec.ifs0000644000175000017500000001042214163340332023135 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_dlatch/cfunc.mod0000644000175000017500000006161114163340332022766 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_dlatch/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/digital/d_pullup/0000755000175000017500000000000014163340332021244 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_pullup/ifspec.ifs0000644000175000017500000000235714163340332023227 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_pullup/cfunc.mod0000644000175000017500000000465014163340332023050 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_pullup/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/icm/digital/d_nor/0000755000175000017500000000000014163340332020521 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_nor/ifspec.ifs0000644000175000017500000000347014163340332022501 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_nor/cfunc.mod0000644000175000017500000001322714163340332022325 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_nor/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 ===*/ /*=============================================================================*/ tmp_ns50wwy/src/xspice/icm/digital/d_source/cfunc.mod0000644000175000017500000007622414163340332023035 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_source/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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. */ imal; /* array size malloced */ 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. */ bool init_ok; /* set to true if init is succeful */ } 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 ===*/ static void free_local_data(Local_Data_t *loc); /*============================================================================== 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; loc->imal = 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); loc->imal = i; 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 (!token) return 4; 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] ) { free(token); 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) { free(token); return 4; } else { /* need to store this value in the all_data[] array */ loc->all_data[i][j-1] = bit_value; } } free(token); } i++; } s = temp; } } return 0; } static void cm_d_source_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = STATIC_VAR(locdata); if (loc) { free_local_data(loc); STATIC_VAR(locdata) = loc = NULL; } break; } /* end of case MIF_CB_DESTROY */ } /* end of switch over reason being called */ } /* end of function cm_d_source_callback */ /*============================================================================== 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); CALLBACK = cm_d_source_callback; /*** 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); if (err > 0) { loc->init_ok = FALSE; cm_message_send(" dsource will return only its initial state.\n"); return; } else loc->init_ok = TRUE; } 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); if (!loc->init_ok) return; /* 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; } } } } /* Free memory allocations in Local_Data_t structure */ static void free_local_data(Local_Data_t *loc) { if (loc == (Local_Data_t *) NULL) { return; } /* Free data table and related values */ if (loc->all_timepoints) { free(loc->all_timepoints); } if (loc->all_data) { int i; for (i = 0; i <= loc->imal; i++) free(loc->all_data[i]); free(loc->all_data); } free(loc); } /* end of function free_local_data */ tmp_ns50wwy/src/xspice/icm/digital/d_nand/0000755000175000017500000000000014163340332020643 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_nand/ifspec.ifs0000644000175000017500000000351714163340332022625 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_nand/cfunc.mod0000644000175000017500000001321714163340332022446 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_nand/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 ====================================*/ /*=======================================================================*/ tmp_ns50wwy/src/xspice/icm/digital/d_osc/cfunc.mod0000644000175000017500000003251614163340332022315 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_osc/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/digital/d_ram/0000755000175000017500000000000014163340332020502 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_ram/ifspec.ifs0000644000175000017500000000737014163340332022465 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_ram/cfunc.mod0000644000175000017500000006731214163340332022312 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_ram/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/digital/d_xnor/0000755000175000017500000000000014163340332020711 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/d_xnor/ifspec.ifs0000644000175000017500000000352114163340332022666 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/d_xnor/cfunc.mod0000644000175000017500000001626114163340332022516 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_xnor/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/icm/digital/dac_bridge/0000755000175000017500000000000014163340332021463 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/digital/dac_bridge/ifspec.ifs0000644000175000017500000000552014163340332023441 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/digital/dac_bridge/cfunc.mod0000644000175000017500000003470414163340332023272 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE dac_bridge/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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(!token) return 1; 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) { free(token); 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) { free(token); 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; } } } } free(token); } } 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(!token) return 1; 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) { free(token); 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; } } free(token); } } 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); *reset = *reset_old = *clk = *clk_old = ZERO; /*** 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); if ( !PORT_NULL(reset) ) { 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; } } } } } tmp_ns50wwy/src/xspice/icm/digital/.gitignore0000644000175000017500000000017614163340332021414 0ustar carstencarsten/digital.cm /cmextrn.h /cminfo.h /cminfo2.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /udninfo2.h /*/*.c !/*/udnfunc.c tmp_ns50wwy/src/xspice/icm/digital/modpath.lst0000644000175000017500000000034014163340332021575 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 tmp_ns50wwy/src/xspice/icm/spice2poly/0000755000175000017500000000000014163340332020074 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/spice2poly/udnpath.lst0000644000175000017500000000000014163340332022251 0ustar carstencarstentmp_ns50wwy/src/xspice/icm/spice2poly/icm_spice2poly/0000755000175000017500000000000014163340332023015 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/spice2poly/icm_spice2poly/ifspec.ifs0000644000175000017500000000312514163340332024772 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 tmp_ns50wwy/src/xspice/icm/spice2poly/icm_spice2poly/README0000644000175000017500000000364514163340332023705 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 tmp_ns50wwy/src/xspice/icm/spice2poly/icm_spice2poly/cfunc.mod0000644000175000017500000002105414163340332024616 0ustar carstencarsten/* =========================================================================== FILE cfunc.mod MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } tmp_ns50wwy/src/xspice/icm/spice2poly/.gitignore0000644000175000017500000000020114163340332022055 0ustar carstencarsten/spice2poly.cm /cmextrn.h /cminfo.h /cminfo2.h /dlmain.c /objects.inc /udnextrn.h /udninfo.h /udninfo2.h /*/*.c !/*/udnfunc.c tmp_ns50wwy/src/xspice/icm/spice2poly/modpath.lst0000644000175000017500000000001714163340332022252 0ustar carstencarstenicm_spice2poly tmp_ns50wwy/src/xspice/icm/README0000644000175000017500000000376314163340332016674 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 tmp_ns50wwy/src/xspice/icm/table/0000755000175000017500000000000014163340332017072 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/udnpath.lst0000644000175000017500000000000014163340332021247 0ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/table3D/0000755000175000017500000000000014163340332020350 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/table3D/ifspec.ifs0000644000175000017500000000506414163340332022331 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ ------------------------------------------------------------------------- Copyright 2015 The ngspice team All Rights Reserved GPL (see COPYING or https://opensource.org/licenses/GPL-2.0) ------------------------------------------------------------------------- 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 tmp_ns50wwy/src/xspice/icm/table/table3D/cfunc.mod0000644000175000017500000006070114163340332022153 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE table3D/cfunc.mod ------------------------------------------------------------------------- Copyright 2015 The ngspice team All Rights Reserved GPL (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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 #include "support/gettokens.h" #include "mada/eno2.h" #include "mada/eno3.h" typedef struct { int ix; /* size of array in x */ int iy; /* size of array in y */ int iz; /* size of array in z */ sf_eno3 newtable; /* the table, code borrowed from madagascar project */ /* Input values corresponding to each index. They define the value * in the domain at each index value */ double *xcol; /* array of doubles in x */ double *ycol; /* array of doubles in y */ double *zcol; /* array of doubles in z */ double ***table; /* f(xi, yj, zk) */ } Table3_Data_t; typedef Table3_Data_t Local_Data_t; /*=== 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 =======*/ /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ extern double BilinearInterpolation(double x, double y, int xind, int yind, double **td); extern double TrilinearInterpolation(double x, double y, double z, int xind, int yind, int zind, double ***td); extern int findCrossOver(double arr[], int n, double x); static void free_local_data(Table3_Data_t *loc); static inline double get_local_diff(int n, double *col, int ind); static Table3_Data_t *init_local_data(const char *filename, int order); /*============================================================================== 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 void cm_table3D_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Table3_Data_t *loc = STATIC_VAR(locdata); if (loc) { free_local_data(loc); STATIC_VAR(locdata) = loc = NULL; } break; } /* end of case MIF_CB_DESTROY */ } /* end of switch over reason being called */ } /* end of function cm_table2D_callback */ /*============================================================================== 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 * z column independent variables z0 z1 z2 z3 ... ziz-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; Table3_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ size = PORT_SIZE(out); if (INIT == 1) { /* Must do initializations */ STATIC_VAR(locdata) = init_local_data( PARAM(file), PARAM(order)); CALLBACK = cm_table3D_callback; } /* return immediately if there was an initialization error */ if ((loc = STATIC_VAR(locdata)) == (Table3_Data_t *) NULL) { 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,\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; } if (zval < loc->zcol[0] || zval > loc->zcol[loc->iz - 1]) { if (PARAM(verbose) > 0) { cm_message_printf("z value %g exceeds table limits,\n" " please enlarge range of your table", zval); } return; } /*** find indices where interpolation will be done ***/ /* something like binary search to get the index */ xind = findCrossOver(loc->xcol, loc->ix, xval); xoff = xval - loc->xcol[xind]; yind = findCrossOver(loc->ycol, loc->iy, yval); yoff = yval - loc->ycol[yind]; zind = findCrossOver(loc->zcol, loc->iz, zval); zoff = zval - loc->zcol[zind]; /* Find local difference around index of independent row and * column values */ xdiff = get_local_diff(loc->ix, loc->xcol, xind); ydiff = get_local_diff(loc->iy, loc->ycol, yind); zdiff = get_local_diff(loc->iz, loc->zcol, zind); /* 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 and yind 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 { Mif_Complex_t ac_gain; 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; ac_gain.real = PARAM(gain) * derivval[2] / zdiff; ac_gain.imag= 0.0; AC_GAIN(out, iny) = ac_gain; } } /* end of function cm_table3D */ /* This function initializes local data */ static Table3_Data_t *init_local_data(const char *filename, int interporder) { int xrc = 0; int ix = 0, /* elements in a row */ iy = 0, /* number of rows */ iz = 0; /* number of 2D tables */ double ***table_data; double tmp; FILE *fp = (FILE *) NULL; /* Handle to file */ char *cFile = (char *) NULL; char *cThisLine = (char *) NULL; char *cThisPtr, *cThisLinePtr; size_t lFileLen; /* Length of file */ size_t lFileRead; /* Length of file read in */ int lLineCount; /* Current line number */ size_t lTotalChar; /* Total characters read */ int lTableCount; /* Number of tables */ Table3_Data_t *loc = (Table3_Data_t *) NULL; /* local data */ /* Allocate static storage for *loc */ if ((loc = (Table3_Data_t *) calloc(1, sizeof(Table3_Data_t))) == (Table3_Data_t *) NULL) { cm_message_printf("cannot allocate memory for lookup table."); xrc = -1; goto EXITPOINT; } /* Init row and column counts to 0 (actually already were due * to calloc) */ loc->ix = loc->iy = loc->iz = 0; /* open file */ fp = fopen_with_path(filename, "r"); if (!fp) { /* Standard open attempt failed */ const char * const lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { char * const p = (char *) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(filename) + 1); if (p == (char *) NULL) { cm_message_printf("cannot allocate buffer to " "attempt alternate file open."); xrc = -1; goto EXITPOINT; } (void) sprintf(p, "%s%s%s", lbuffer, DIR_PATHSEP, filename); fp = fopen(p, "r"); free(p); } } /* Test for valid file pointer */ if (!fp) { cm_message_printf("cannot open file %s", filename); xrc = -1; goto EXITPOINT; } /* Find the size of the data file */ { struct stat st; if (fstat(fileno(fp), &st)) { cm_message_printf("cannot get length of file %s", filename); xrc = -1; goto EXITPOINT; } /* Copy 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", filename); xrc = -1; goto EXITPOINT; } /* read whole file into cFile */ { /* Number of chars read may be less than lFileLen, because /r are * skipped by 'fread' when file opened in text mode */ lFileRead = fread(cFile, sizeof(char), lFileLen, fp); const int file_error = ferror(fp); fclose(fp); /* done with file */ fp = (FILE *) NULL; if (file_error) { cm_message_printf("Error reading data file %s", filename); xrc = -1; goto EXITPOINT; } } /* Number of chars read may be less than lFileLen, because /r are * skipped by 'fread' when file opened in text mode */ cFile[lFileRead] = '\0'; cThisPtr = cFile; cThisLinePtr = cThisLine; lLineCount = 0L; lTotalChar = 0L; while (*cThisPtr) { /* Read until reaching null char */ long lIndex = 0L; /* Index into cThisLine array */ bool isNewline = false; /* Boolean indicating read a CR or LF */ while (*cThisPtr) { /* Read until reaching null char */ if (!isNewline) { /* Haven't read a LF yet */ if (*cThisPtr == '\n') { /* This char is a LF */ isNewline = true; /* Set flag */ } } else if (*cThisPtr != '\n') { /* Already found LF */ break; /* Done with line */ } /* Add char to output and increment */ cThisLinePtr[lIndex++] = *cThisPtr++; lTotalChar++; } 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) */ if ((loc->xcol = (double *) calloc((size_t) ix, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate row structure."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 2) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iy = iy = (int) tmp; /* generate column data structure (y) */ if ((loc->ycol = (double *) calloc((size_t) iy, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate column structure."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 3) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iz = iz = (int) tmp; /* generate column data structure (z) */ if ((loc->zcol = (double *) calloc((size_t) iz, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate \"z\" structure."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 4) { char *token = CNVgettok(&cThisLinePtr); int i = 0; while (token) { if (i == ix) { cm_message_printf("Too many numbers in x row."); xrc = -1; goto EXITPOINT; } 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."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 5) { char *token = CNVgettok(&cThisLinePtr); int i = 0; while (token) { if (i == iy) { cm_message_printf("Too many numbers in y row."); xrc = -1; goto EXITPOINT; } 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."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 6) { char *token = CNVgettok(&cThisLinePtr); int i = 0; while (token) { if (i == iz) { cm_message_printf("Too many numbers in z row."); xrc = -1; goto EXITPOINT; } 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."); xrc = -1; goto EXITPOINT; } /* jump out of while loop to read in the table */ break; } } /* generate table core */ /* 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 */ if ((loc->newtable = sf_eno3_init( interporder, ix, iy, iz)) == (sf_eno3) NULL) { cm_message_printf("eno3 initialization failure."); xrc = -1; goto EXITPOINT; } /* create table_data in memory */ /* data [n3][n2][n1] */ if ((loc->table = table_data = (double ***) calloc((size_t) iz, sizeof(double **))) == (double ***) NULL) { cm_message_printf("Unable to allocate data table."); xrc = -1; goto EXITPOINT; } { int i, j; for (i = 0; i < iz; i++) { if ((table_data[i] = (double **) calloc((size_t) iy, sizeof(double *))) == (double **) NULL) { cm_message_printf("Unable to allocate data table " "z=%d", i); xrc = -1; goto EXITPOINT; } for (j = 0; j < iy; j++) { if ((table_data[i][j] = (double *) calloc((size_t) ix, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate data table " "z=%d y=%d", i, j); xrc = -1; goto EXITPOINT; } } } } /* continue reading f(x,y,z) values from cFile */ for (lTableCount = 0; lTableCount < iz; lTableCount++) { lLineCount = 0; while (lLineCount < iy) { char *token; long int lIndex = 0; /* Index into cThisLine array */ bool isNewline = 0; 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 */ lTotalChar++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\0') { if (lTotalChar >= lFileLen) { cm_message_printf("Not enough data in file %s", filename); xrc = -1; goto EXITPOINT; } continue; } token = CNVgettok(&cThisLinePtr); { int 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); xrc = -1; goto EXITPOINT; } /* 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); xrc = -1; goto EXITPOINT; } } lLineCount++; } } /* end of loop over characters read from file */ /* fill table data into eno3 structure */ sf_eno3_set(loc->newtable, table_data /* data [n3][n2][n1] */); EXITPOINT: /* free the file and memory allocated */ if (cFile != (char *) NULL) { free(cFile); } if (cThisLine != (char *) NULL) { free(cThisLine); } if (fp != (FILE *) NULL) { (void) fclose(fp); } /* On error free any initialization that was started */ if (xrc != 0) { if (loc != (Table3_Data_t *) NULL) { free_local_data(loc); loc = (Table3_Data_t *) NULL; } } return loc; } /* end of function init_local_data */ /* Free memory allocations in Local_Data_t structure */ static void free_local_data(Table3_Data_t *loc) { if (loc == (Table3_Data_t *) NULL) { return; } /* Free data table and related values */ if (loc->table) { int i, j; int n_y = loc->iy; int n_z = loc->iz; for (i = 0; i < n_z; i++) { for (j = 0; j < n_y; 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); } /* end of function free_local_data */ /* Finds difference between column values */ static inline double get_local_diff(int n, double *col, int ind) { if (ind >= n - 1) { return col[n - 1] - col[n - 2]; } if (ind <= 0) { return col[1] - col[0]; } return 0.5 * (col[ind + 1] - col[ind - 1]); } /* end of function get_local_diff */ /* 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 */ tmp_ns50wwy/src/xspice/icm/table/support/0000755000175000017500000000000014163340332020606 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/support/table_util.h0000644000175000017500000000177114163340332023111 0ustar carstencarsten#include "eno2.h" #include "eno3.h" typedef struct { int ix; /* size of array in x */ int iy; /* size of array in y */ int iz; /* size of array in z */ sf_eno3 newtable; /* the table, code borrowed from madagascar project */ /* Input values corresponding to each index. They define the value * in the domain at each index value */ double *xcol; /* array of doubles in x */ double *ycol; /* array of doubles in y */ double *zcol; /* array of doubles in z */ double ***table; /* f(xi, yj, zk) */ } Table3_Data_t; void free_local_data(Table3_Data_t *loc); Table3_Data_t *init_local_data(const char *filename, int order); /* Finds difference between column values */ static inline double get_local_diff(int n, double *col, int ind) { if (ind >= n - 1) { return col[n - 1] - col[n - 2]; } if (ind <= 0) { return col[1] - col[0]; } return 0.5 * (col[ind + 1] - col[ind - 1]); } /* end of function get_local_diff */ tmp_ns50wwy/src/xspice/icm/table/support/interp.c0000644000175000017500000001201214163340332022247 0ustar carstencarsten#include #include #include #include #include /*********************/ /* 3d geometry types */ /*********************/ typedef struct Point3Struct { /* 3d point */ double x, y, z; } Point3; typedef Point3 Vector3; /* 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) Returns the highest index of an element in arr whose value is less than or equal to x or 0 if all elements are greater than x. It is assumed that arr is sorted in order of increasing values. */ int findCrossOver(double arr[], int n, double x) { int low = 0; int high = n; /* 1 more than highest index */ while (high - low > 1) { const int mid = (low + high) / 2; if (arr[mid] > x) { /* search lower */ high = mid; } else { /* search higher */ low = mid; } } /* end of bisecting loop */ return low; } /* end of function findCrossOver */ #if 0 /* 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 * */ 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 double BilinearInterpolation(double x, double y, int xind, int yind, double **td) { double V00, V10, V01, V11, Vxyz; V00 = td[yind][xind]; V10 = td[yind][xind+1]; V01 = td[yind+1][xind]; V11 = td[yind+1][xind+1]; Vxyz = V00 * (1 - x) * (1 - y) + V10 * x * (1 - y) + V01 * (1 - x) * y + V11 * x * y; return Vxyz; } /* end of function BilinearInterpolation */ /* 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; } tmp_ns50wwy/src/xspice/icm/table/support/gettokens.c0000644000175000017500000001270514163340332022762 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 #include "gettokens.h" 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; } /* end of function CNVgettok */ /* 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; } /* end of function CNVget_token */ /* Function takes as input a string token from a SPICE deck and returns a floating point equivalent value. */ 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; /* A SPICE size line. <= 80 characters plus '\n\0' */ typedef char line_t[82]; 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 != 'E') && (c != 'e')) break; else if (isspace(c)) break; else val_str[i] = c; } val_str[i] = '\0'; /* Determine the scale factor */ if ((i >= len) || (! isalpha(c))) scale_factor = 1.0; else { c = (char) tolower(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(c1)) { scale_factor = 1.0e-3; break; } c1 = (char) toupper(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 -1; } *p_value = value * scale_factor; return 0; } /* end of function cnv_get_spice_value */ tmp_ns50wwy/src/xspice/icm/table/support/gettokens.h0000644000175000017500000000055014163340332022762 0ustar carstencarsten#ifndef gettokens_h_included #define gettokens_h_included /* Type definition for each possible token returned. */ typedef enum token_type_s { CNV_NO_TOK, CNV_STRING_TOK } Cnv_Token_Type_t; char * CNVget_token(char **s, Cnv_Token_Type_t *type); char *CNVgettok(char **s); int cnv_get_spice_value(char *str, double *p_value); #endif /* gettokens_h_included */ tmp_ns50wwy/src/xspice/icm/table/table2D/0000755000175000017500000000000014163340332020347 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/table2D/ifspec.ifs0000644000175000017500000000450514163340332022327 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ ------------------------------------------------------------------------- Copyright 2015 The ngspice team All Rights Reserved GPL (see COPYING or https://opensource.org/licenses/GPL-2.0) ------------------------------------------------------------------------- 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 tmp_ns50wwy/src/xspice/icm/table/table2D/cfunc.mod0000644000175000017500000005231714163340332022156 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE table2D/cfunc.mod ------------------------------------------------------------------------- Copyright 2015 The ngspice team All Rights Reserved GPL (see COPYING or https://opensource.org/licenses/GPL-2.0) ------------------------------------------------------------------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 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 #include "mada/eno2.h" typedef struct { int ix; /* size of array in x */ int iy; /* size of array in y */ sf_eno2 newtable; /* the table, code borrowed from madagascar project */ /* Input values corresponding to each index. They define the value * in the domain at each index value */ double *xcol; /* array of doubles in x */ double *ycol; /* array of doubles in y */ double **table; /* f(xi, yj) */ } Table2_Data_t; typedef Table2_Data_t Local_Data_t; /*=== 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; }; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ double BilinearInterpolation(double x, double y, int xind, int yind, double **td); extern char *CNVgettok(char **s); int cnv_get_spice_value(char *str, double *p_value); extern int findCrossOver(double arr[], int n, double x); static void free_local_data(Table2_Data_t *loc); static inline double get_local_diff(int n, double *col, int ind); static Table2_Data_t *init_local_data(const char *filename, int order); /*============================================================================== 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 void cm_table2D_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Table2_Data_t *loc = STATIC_VAR(locdata); if (loc) { free_local_data(loc); STATIC_VAR(locdata) = loc = NULL; } break; } /* end of case MIF_CB_DESTROY */ } /* end of switch over reason being called */ } /* end of function cm_table2D_callback */ /*============================================================================== 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; Table2_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ size = PORT_SIZE(out); if (INIT == 1) { /* Must do initializations */ STATIC_VAR(locdata) = init_local_data( PARAM(file), PARAM(order)); CALLBACK = cm_table2D_callback; } /* return immediately if there was an initialization error */ if ((loc = STATIC_VAR(locdata)) == (Table2_Data_t *) NULL) { return; } /* get input x, y; find corresponding indices; get x and y offsets; call interpolation functions with value and derivative */ xval = INPUT(inx); yval = INPUT(iny); /* 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,\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; } /*** find indices where interpolation will be done ***/ /* something like binary search to get the index */ xind = findCrossOver(loc->xcol, loc->ix, xval); xoff = xval - loc->xcol[xind]; yind = findCrossOver(loc->ycol, loc->iy, yval); yoff = yval - loc->ycol[yind]; /* Find local difference around index of independent row and * column values */ xdiff = get_local_diff(loc->ix, loc->xcol, xind); ydiff = get_local_diff(loc->iy, loc->ycol, yind); /* 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] */ ); /* xind and yind may become too large */ if (xind == loc->ix - 1) { --xind; } if (yind == loc->iy - 1) { --yind; } /* Overwrite outval from sf_eno2_apply by bilinear interpolation */ outval = BilinearInterpolation( xoff / (loc->xcol[xind + 1] - loc->xcol[xind]), yoff / (loc->ycol[yind + 1] - loc->ycol[yind]), xind, yind, loc->table); 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 { Mif_Complex_t ac_gain; 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; } } /* end of function cm_table2D */ /* This function initializes local data */ static Table2_Data_t *init_local_data(const char *filename, int order) { int xrc = 0; int ix = 0, /* elements in a row */ iy = 0; /* number of rows */ double **table_data; double tmp; FILE *fp = (FILE *) NULL; /* Handle to file */ char *cFile = (char *) NULL; char *cThisLine = (char *) NULL; char *cThisPtr, *cThisLinePtr; size_t lFileLen; /* Length of file */ size_t lFileRead; /* Length of file read in */ int lLineCount; /* Current line number */ size_t lTotalChar; /* Total characters read */ int interporder; /* order of interpolation for eno */ Table2_Data_t *loc = (Table2_Data_t *) NULL; /* local data */ /* Allocate static storage for *loc */ if ((loc = (Table2_Data_t *) calloc(1, sizeof(Table2_Data_t))) == (Table2_Data_t *) NULL) { cm_message_printf("cannot allocate memory for lookup table."); xrc = -1; goto EXITPOINT; } /* Init row and column counts to 0 (actually already were due * to calloc) */ loc->ix = loc->iy = 0; /* open file */ fp = fopen_with_path(filename, "r"); if (!fp) { /* Standard open attempt failed */ const char * const lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { char * const p = (char *) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(filename) + 1); if (p == (char *) NULL) { cm_message_printf("cannot allocate buffer to " "attempt alternate file open."); xrc = -1; goto EXITPOINT; } (void) sprintf(p, "%s%s%s", lbuffer, DIR_PATHSEP, filename); fp = fopen(p, "r"); free(p); } } /* Test for valid file pointer */ if (!fp) { cm_message_printf("cannot open file %s", filename); xrc = -1; goto EXITPOINT; } /* Find the size of the data file */ { struct stat st; if (fstat(fileno(fp), &st)) { cm_message_printf("cannot get length of file %s", filename); xrc = -1; goto EXITPOINT; } /* Copy 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", filename); xrc = -1; goto EXITPOINT; } /* read whole file into cFile */ { /* Number of chars read may be less than lFileLen, because /r are * skipped by 'fread' when file opened in text mode */ lFileRead = fread(cFile, sizeof(char), lFileLen, fp); const int file_error = ferror(fp); fclose(fp); /* done with file */ fp = (FILE *) NULL; if (file_error) { cm_message_printf("Error reading data file %s", filename); xrc = -1; goto EXITPOINT; } } /* Number of chars read may be less than lFileLen, because /r are * skipped by 'fread' when file opened in text mode */ cFile[lFileRead] = '\0'; cThisPtr = cFile; cThisLinePtr = cThisLine; lLineCount = 0L; lTotalChar = 0L; while (*cThisPtr) { /* Read until reaching null char */ long lIndex = 0L; /* Index into cThisLine array */ bool isNewline = false; /* Boolean indicating read a CR or LF */ while (*cThisPtr) { /* Read until reaching null char */ if (!isNewline) { /* Haven't read a LF yet */ if (*cThisPtr == '\n') { /* This char is a LF */ isNewline = true; /* Set flag */ } } else if (*cThisPtr != '\n') { /* Already found LF */ break; /* Done with line */ } /* Add char to output and increment */ cThisLinePtr[lIndex++] = *cThisPtr++; lTotalChar++; } 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) */ if ((loc->xcol = (double *) calloc((size_t) ix, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate row structure."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 2) { cnv_get_spice_value(cThisLinePtr, &tmp); loc->iy = iy = (int) tmp; /* generate column data structure (y) */ if ((loc->ycol = (double *) calloc((size_t) iy, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate column structure."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 3) { char *token = CNVgettok(&cThisLinePtr); int i = 0; while (token) { if (i == ix) { cm_message_printf("Too many numbers in x row."); xrc = -1; goto EXITPOINT; } 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."); xrc = -1; goto EXITPOINT; } } else if (lLineCount == 4) { char *token = CNVgettok(&cThisLinePtr); int i = 0; while (token) { if (i == iy) { cm_message_printf("Too many numbers in y row."); xrc = -1; goto EXITPOINT; } 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."); xrc = -1; goto EXITPOINT; } /* jump out of while loop to read in the table */ break; } } /* generate table core */ interporder = 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 */ if ((loc->newtable = sf_eno2_init( interporder, ix, iy)) == (sf_eno2) NULL) { cm_message_printf("eno2 initialization failure."); xrc = -1; goto EXITPOINT; } /* create table_data in memory */ /* data [n2][n1] */ if ((loc->table = table_data = (double **) calloc((size_t) iy, sizeof(double *))) == (double **) NULL) { cm_message_printf("Unable to allocate data table."); free(cFile); free(cThisLine); free_local_data(loc); return (Local_Data_t *) NULL; } { int i; for (i = 0; i < iy; i++) { if ((table_data[i] = (double *) calloc((size_t) ix, sizeof(double))) == (double *) NULL) { cm_message_printf("Unable to allocate data table " "row %d", i + 1); free(cFile); free(cThisLine); free_local_data(loc); return (Local_Data_t *) NULL; } } } loc->table = table_data; /* give to local data structure */ /* continue reading f(x,y) values from cFile */ lLineCount = 0; while (*cThisPtr) { /* Read until reaching null char */ char *token; long int lIndex = 0; /* Index into cThisLine array */ bool isNewline = 0; 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 */ } /* Add char to output and increment */ cThisLinePtr[lIndex++] = *cThisPtr++; lTotalChar++; } cThisLinePtr[lIndex] = '\0'; /* Terminate the string */ lLineCount++; /* Increment the line counter */ /* continue if comment or empty */ if (cThisLinePtr[0] == '*' || cThisLinePtr[0] == '\0') { if (lTotalChar >= lFileLen) { cm_message_printf("Not enough data in file %s", filename); free(cFile); free(cThisLine); free_local_data(loc); return (Local_Data_t *) NULL; } lLineCount--; /* we count only real lines */ continue; } token = CNVgettok(&cThisLinePtr); { int i = 0; while (token) { double tmpval; if (i == ix) { cm_message_printf("Too many numbers in y row no. %d.", lLineCount); xrc = -1; goto EXITPOINT; } /* 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); xrc = -1; goto EXITPOINT; } } } /* end of loop over characters read from file */ /* fill table data into eno2 structure */ sf_eno2_set(loc->newtable, table_data /* data [n2][n1] */); EXITPOINT: /* free the file and memory allocated */ if (cFile != (char *) NULL) { free(cFile); } if (cThisLine != (char *) NULL) { free(cThisLine); } if (fp != (FILE *) NULL) { (void) fclose(fp); } /* On error free any initialization that was started */ if (xrc != 0) { if (loc != (Table2_Data_t *) NULL) { free_local_data(loc); loc = (Table2_Data_t *) NULL; } } return loc; } /* end of function init_local_data */ /* Free memory allocations in Local_Data_t structure */ static void free_local_data(Table2_Data_t *loc) { if (loc == (Table2_Data_t *) NULL) { return; } /* Free data table and related values */ if (loc->table) { int i; int n_y = loc->iy; for (i = 0; i < n_y; i++) { free(loc->table[i]); } free(loc->table); } free(loc->xcol); free(loc->ycol); sf_eno2_close(loc->newtable); free(loc); } /* end of function free_local_data */ /* Finds difference between column values */ static inline double get_local_diff(int n, double *col, int ind) { if (ind >= n - 1) { return col[n - 1] - col[n - 2]; } if (ind <= 0) { return col[1] - col[0]; } return 0.5 * (col[ind + 1] - col[ind - 1]); } /* end of function get_local_diff */ tmp_ns50wwy/src/xspice/icm/table/mada/0000755000175000017500000000000014163340332017774 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/table/mada/eno.c0000644000175000017500000001061714163340332020726 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 "../xspice/icm/dlmain.h" #include "alloc.h" #include "eno.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. >*/ { int xrc = 0; sf_eno ent = (sf_eno) NULL; if ((ent = (sf_eno) sf_alloc( 1, sizeof(*ent))) == (sf_eno) NULL) { cm_message_printf("Unable to allocate sf_eno structure " "in sf_eno_init"); xrc = -1; goto EXITPOINT; } ent->order = order; ent->n = n; if ((ent->diff = (double **) sf_alloc( order, sizeof(double *))) == (double **) NULL) { cm_message_printf("Unable to allocate diff field " "in sf_eno_init"); xrc = -1; goto EXITPOINT; } { int i; for (i = 0; i < order; i++) { if ((ent->diff[i] = sf_doublealloc( n - i)) == (double *) NULL) { cm_message_printf("Unable to allocate in sf_eno_init " "at index %d.", i); xrc = -1; goto EXITPOINT; } } } EXITPOINT: if (xrc != 0) { if (ent != (sf_eno) NULL) { sf_eno_close(ent); ent = (sf_eno) NULL; } } return ent; } void sf_eno_close (sf_eno ent) /*< Free internal storage >*/ { if (ent == (sf_eno) NULL) { return; } int i; const int n = ent->order; for (i = 0; i < n; 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 $ */ tmp_ns50wwy/src/xspice/icm/table/mada/eno3.c0000644000175000017500000001315214163340332021006 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 >*/ { int xrc = 0; sf_eno3 pnt = (sf_eno3) NULL; /* Allocate base structrue */ if ((pnt = (sf_eno3) sf_alloc (1, sizeof *pnt)) == (sf_eno3) NULL) { cm_message_printf("Unable to allocate sf_eno3 structure " "in sf_eno3_init"); xrc = -1; goto EXITPOINT; } 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); xrc = -1; goto EXITPOINT; } if ((pnt->jnt = sf_eno2_init( order, pnt->ng, pnt->ng)) == (sf_eno2) NULL) { cm_message_printf("Unable to initialize field jnt " "in sf_eno3_init"); xrc = -1; goto EXITPOINT; } if ((pnt->f = sf_doublealloc2(pnt->ng, pnt->ng)) == (double **) NULL) { cm_message_printf("Unable to allocate field f in sf_eno3_init()"); xrc = -1; goto EXITPOINT; } if ((pnt->f1 = sf_doublealloc2(pnt->ng, pnt->ng)) == (double **) NULL) { cm_message_printf("Unable to allocate field f1 in sf_eno3_init()"); xrc = -1; goto EXITPOINT; } if ((pnt->ent = (sf_eno **) sf_alloc( n3, sizeof(sf_eno*))) == (sf_eno **) NULL) { cm_message_printf("Unable to allocate field ent in sf_eno3_init()"); xrc = -1; goto EXITPOINT; } { int i3; for (i3 = 0; i3 < n3; i3++) { if ((pnt->ent[i3] = (sf_eno*) sf_alloc( n2, sizeof(sf_eno))) == (sf_eno *) NULL) { cm_message_printf("Unable to allocate field ent[%d] " "in sf_eno3_init()", i3); xrc = -1; goto EXITPOINT; } int i2; for (i2 = 0; i2 < n2; i2++) { if ((pnt->ent[i3][i2] = sf_eno_init( order, n1)) == (sf_eno) NULL) { cm_message_printf("Unable to initialize field " "ent[%d][%d] in sf_eno3_init()", i2, i3); xrc = -1; goto EXITPOINT; } } } } EXITPOINT: if (xrc != 0) { if (pnt != (sf_eno3) NULL) { sf_eno3_close(pnt); free(pnt); pnt = (sf_eno3) NULL; } } 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; if (!pnt) return; 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 $ */ tmp_ns50wwy/src/xspice/icm/table/mada/alloc.c0000644000175000017500000000431014163340332021230 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; if (n < 0) { cm_message_printf("%s: illegal allocation(%d X %zd bytes)", __FILE__, n, size); return NULL; } /* Use calloc so that any internal allocations will be set to NULL to * facilitate error recovery */ if ((ptr = calloc((size_t)n, size)) == NULL) { cm_message_printf("%s: cannot allocate %zd bytes : ", __FILE__, (size_t)n * size); return NULL; } 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; } tmp_ns50wwy/src/xspice/icm/table/mada/eno2.h0000644000175000017500000000167014163340332021014 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 tmp_ns50wwy/src/xspice/icm/table/mada/alloc.h0000644000175000017500000000126314163340332021241 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 tmp_ns50wwy/src/xspice/icm/table/mada/eno.h0000644000175000017500000000160114163340332020724 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 tmp_ns50wwy/src/xspice/icm/table/mada/eno2.c0000644000175000017500000001111014163340332020775 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 >*/ { int xrc = 0; sf_eno2 pnt = (sf_eno2) NULL; if ((pnt = (sf_eno2) sf_alloc( 1, sizeof(*pnt))) == (sf_eno2) NULL) { cm_message_printf("Unable to allocate sf_eno2 structure " "in sf_eno2_init"); xrc = -1; goto EXITPOINT; } 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); xrc = -1; goto EXITPOINT; } if ((pnt->jnt = sf_eno_init(order, pnt->ng)) == (sf_eno) NULL) { cm_message_printf("Unable to initialize field jnt " "in sf_eno2_init"); xrc = -1; goto EXITPOINT; } if ((pnt->f = sf_doublealloc (pnt->ng)) == (double *) NULL) { cm_message_printf("Unable to allocate field f in sf_eno2_init()"); xrc = -1; goto EXITPOINT; } if ((pnt->f1 = sf_doublealloc (pnt->ng)) == (double *) NULL) { cm_message_printf("Unable to allocate field f1 in sf_eno2_init()"); xrc = -1; goto EXITPOINT; } if ((pnt->ent = (sf_eno *) sf_alloc( n2, sizeof(sf_eno))) == (sf_eno *) NULL) { cm_message_printf("Unable to allocate field ent in sf_eno2_init()"); xrc = -1; goto EXITPOINT; } { int i2; for (i2 = 0; i2 < n2; i2++) { if ((pnt->ent[i2] = sf_eno_init( order, n1)) == (sf_eno) NULL) { cm_message_printf("Unable to initialize field ent[%d] " "in sf_eno3_init()", i2); xrc = -1; goto EXITPOINT; } } } EXITPOINT: if (xrc != 0) { if (pnt != (sf_eno2) NULL) { sf_eno2_close(pnt); pnt = (sf_eno2) NULL; } } 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; if (!pnt) return; 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 $ */ tmp_ns50wwy/src/xspice/icm/table/mada/eno3.h0000644000175000017500000000176714163340332021024 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 tmp_ns50wwy/src/xspice/icm/table/.gitignore0000644000175000017500000000014314163340332021060 0ustar carstencarsten/table.cm /cmextrn.h /cminfo.h /cminfo2.h /objects.inc /udnextrn.h /udninfo.h /udninfo2.h /*/*.c tmp_ns50wwy/src/xspice/icm/table/modpath.lst0000644000175000017500000000002014163340332021242 0ustar carstencarstentable2D table3D tmp_ns50wwy/src/xspice/icm/makedefs.in0000644000175000017500000000276614163340332020125 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@ tmp_ns50wwy/src/xspice/icm/analog/0000755000175000017500000000000014163340332017244 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/triangle/0000755000175000017500000000000014163340332021051 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/triangle/ifspec.ifs0000644000175000017500000000432514163340332023031 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/triangle/cfunc.mod0000644000175000017500000002456114163340332022660 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE triangle/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/pwl/0000755000175000017500000000000014163340332020046 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/pwl/ifspec.ifs0000644000175000017500000000474514163340332022034 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 AUTHORS 19 Apr 1991 Jeffrey P. Murray 01 Nov 2020 Holger Vogt 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 PARAMETER_TABLE: Parameter_Name: limit Description: "const or linearily extrapolated output" Data_Type: boolean Default_Value: FALSE Limits: - Vector: no Vector_Bounds: - Null_Allowed: 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" tmp_ns50wwy/src/xspice/icm/analog/pwl/cfunc.mod0000644000175000017500000004107714163340332021656 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE pwl/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 PROJECT A-8503-405 AUTHORS 19 Apr 1991 Jeffrey P. Murray MODIFICATIONS 25 Sep 1991 Jeffrey P. Murray 2 Oct 1991 Jeffrey P. Murray 1 Nov 2020 Holger Vogt 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 ==============================================================================*/ static void cm_pwl_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { double *last_x_value = STATIC_VAR (last_x_value); double *x = STATIC_VAR (x); double *y = STATIC_VAR (y); free(last_x_value); free(x); free(y); STATIC_VAR (last_x_value) = NULL; STATIC_VAR (x) = NULL; STATIC_VAR (y) = NULL; break; } } } /*=== 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 = 0.0; /* output * Init to 0 to suppress compiler warning */ double dout_din = 0.0; /* partial derivative of the output wrt input. * Init to 0 to suppress compiler warning */ 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; CALLBACK = cm_pwl_callback; 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 including space for two additional x,y pairs */ size = PARAM_SIZE(x_array) + 2; /* First pass: Allocate storage for previous value. Allocate storage for x an y input arrays Read input array and store from Add additional x,y pair at beginning and end of x, y arrays: */ if (INIT==1) { /* 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=1; 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 /* For WIN32, make strdup become _strdup unless it is defined already, * as it would be if CRT debugging is being used */ #if defined(_WIN32) && !defined(strdup) #define strdup _strdup #endif /*=== LOCAL VARIABLES & TYPEDEFS =======*/ struct filesource_state { FILE *fp; unsigned char atend; }; struct infiledata { double *datavec; size_t 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); 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; /*** allocate static storage for *loc ***/ if ((loc = (Local_Data_t *) (STATIC_VAR(locdata) = calloc(1, sizeof(Local_Data_t)))) == (Local_Data_t *) NULL) { cm_message_send("Unable to allocate Local_Data_t " "in cm_filesource()"); return; } /* 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 *) calloc(1, sizeof(struct filesource_state)); /* calloc to null fp */ loc->indata = (struct infiledata *) malloc( sizeof(struct infiledata)); loc->indata->datavec = (double *) malloc(sizeof(double) * (size_t) (stepsize * 1000)); /* Check allocations */ if (loc->timeinterval == (double *) NULL || loc->amplinterval == (double *) NULL || loc->state == (struct filesource_state *) NULL || loc->indata == (struct infiledata *) NULL || loc->indata->datavec == (double *) NULL) { cm_message_send("Unable to allocate Local_Data_t fields " "in cm_filesource()"); cm_filesource_callback(mif_private, MIF_CB_DESTROY); return; } CALLBACK = cm_filesource_callback; loc->indata->vecallocated = (size_t) (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; lbuffer = getenv("NGSPICE_INPUT_DIR"); if (lbuffer && *lbuffer) { char *p; if ((p = (char *) malloc(strlen(lbuffer) + strlen(DIR_PATHSEP) + strlen(PARAM(file)) + 1)) == (char *) NULL) { cm_message_send("Unable to allocate buffer " "for building file name in cm_filesource()"); } else { 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; } if ((cpdel = cp = strdup(line)) == (char *) NULL) { cm_message_send("Unable to duplicate string " "cm_filesource()"); loc->state->atend = 1; break; } /* 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 > (int) loc->indata->vecallocated - size) { loc->indata->vecallocated += (size_t) (size * 1000); void * const p = realloc(loc->indata->datavec, sizeof(double) * loc->indata->vecallocated); if (p == NULL) { cm_message_printf("cannot allocate enough memory"); break; // loc->state->atend = 1; } loc->indata->datavec = (double *) p; } 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]; } } /* end of function cm_filesource */ static void cm_filesource_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { Local_Data_t *loc = (Local_Data_t *) STATIC_VAR(locdata); if (loc == (Local_Data_t *) NULL) { break; } if (loc->state != (struct filesource_state *) NULL) { if (loc->state->fp != (FILE *) NULL) { fclose(loc->state->fp); } free(loc->state); } if (loc->amplinterval != (double *) NULL) { free(loc->amplinterval); } if (loc->timeinterval != (double *) NULL) { free(loc->timeinterval); } if (loc->indata) { if (loc->indata->datavec) { free(loc->indata->datavec); } free(loc->indata); } free(loc); STATIC_VAR(locdata) = NULL; break; } } } /* end of function cm_filesource_callback */ tmp_ns50wwy/src/xspice/icm/analog/d_dt/0000755000175000017500000000000014163340332020156 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/d_dt/ifspec.ifs0000644000175000017500000000450514163340332022136 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/d_dt/cfunc.mod0000644000175000017500000001575114163340332021766 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE d_dt/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/divide/0000755000175000017500000000000014163340332020510 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/divide/ifspec.ifs0000644000175000017500000000627514163340332022476 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/divide/cfunc.mod0000644000175000017500000001204214163340332022306 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE divide/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/delay/0000755000175000017500000000000014163340332020342 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/delay/ifspec.ifs0000644000175000017500000000443514163340332022324 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ ------------------------------------------------------------------------- Copyright 2011 Thomas Sailer 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- AUTHORS 19 May 2011 Thomas Sailer SUMMARY This file contains the interface specification file for the delay code model. ===============================================================================*/ NAME_TABLE: C_Function_Name: cm_delay Spice_Model_Name: delay Description: "analog delay line" PORT_TABLE: Port_Name: in out cntrl Description: "input" "output" "control" Direction: in out in Default_Type: v v v Allowed_Types: [v,vd,vnam] [v,vd] [v,vd,i,id] Vector: no no no Vector_Bounds: - - - Null_Allowed: no no yes PARAMETER_TABLE: Parameter_Name: delay buffer_size Description: "time delay" "size of delay buffer" Data_Type: real int Default_Value: 0.0 1024 Limits: - [1 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes PARAMETER_TABLE: Parameter_Name: has_delay_cnt Description: "controlled delay" Data_Type: boolean Default_Value: FALSE Limits: - Vector: no Vector_Bounds: - Null_Allowed: yes PARAMETER_TABLE: Parameter_Name: delmin delmax Description: "min delay" "max delay" Data_Type: real real Default_Value: 0 0 Limits: [0 -] [0 -] Vector: no no Vector_Bounds: - - Null_Allowed: yes yes STATIC_VAR_TABLE: Static_Var_Name: locdata Description: "local static data" Data_Type: pointer tmp_ns50wwy/src/xspice/icm/analog/delay/cfunc.mod0000644000175000017500000003033714163340332022147 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE delay/cfunc.mod 3-clause BSD Copyright 2021 The ngspice team AUTHORS 12 June 2021 Holger Vogt MODIFICATIONS SUMMARY This file contains the functional description of the analog delay 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() cm_delay_callback() REFERENCED FILES Inputs from and outputs to ARGS structure. NON-STANDARD FEATURES NONE ===============================================================================*/ /*=== INCLUDE FILES ====================*/ #include /*=== CONSTANTS ========================*/ /*=== MACROS ===========================*/ /*=== LOCAL VARIABLES & TYPEDEFS =======*/ typedef struct { double *buffer; /* the storage array for input values */ int buffer_size; /* size of buffer */ int buff_write; /* buffer write index */ int buff_del; /* buffer index, delayed */ int step_count; /* steps processed */ double tdelmin; /* min delay, if controlled */ double tdelmax; /* max delay, if controlled */ double tdelay; /* time delay */ double tstep; /* tran step size */ double tstop; /* tran stop value */ double tprev; /* previous time value */ double prev_val; /* previous data value */ double start_val; /* signal time 0 value */ } mLocal_Data_t; struct CKTcircuitmin { /* This is a minimum re-definition of the circuit structure defined in cktdefs.h. We are interested in TSTEP and TSTOP */ GENmodel **CKThead; STATistics *CKTstat; /* The STATistics structure */ double *CKTstates[8]; /* Used as memory of past steps ??? */ double CKTtime; /* Current transient simulation time */ double CKTdelta; /* next time step in transient simulation */ double CKTdeltaOld[7]; /* Memory for the 7 most recent CKTdelta */ double CKTtemp; /* Actual temperature of CKT, initialzed to 300.15 K in cktinit.c*/ double CKTnomTemp; /* Reference temperature 300.15 K set in cktinit.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 */ 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)*/ int CKTmaxEqNum; /* And this ? */ int CKTcurrentAnalysis; /* the analysis in progress (if any) */ CKTnode *CKTnodes; /* ??? */ CKTnode *CKTlastNode; /* ??? */ CKTnode *prev_CKTlastNode; /* just before model setup */ int CKTnumStates; /* Number of sates effectively valid ??? */ long CKTmode; /* Mode of operation of the circuit ??? */ 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*/ 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 CKTcshunt; /* .options CSHUNT */ double CKTdelmin; /* minimum time step for tran analysis */ double CKTtrtol; /* .options TRTOL */ double CKTfinalTime; /* TSTOP */ double CKTstep; /* TSTEP */ double CKTmaxStep; /* TMAX */ double CKTinitTime; /* TSTART */ /* struct is truncated here */ }; typedef struct CKTcircuitmin CKTcircuitmin; /*=== FUNCTION PROTOTYPE DEFINITIONS ===*/ static void cm_delay_callback(ARGS, Mif_Callback_Reason_t reason); /*=== CM_DELAY ROUTINE ===*/ void cm_delay(ARGS) { int buffer_size, delay_step; double delay, lcntrl; double delmin, delmax; mLocal_Data_t *loc; /* Pointer to local static data, not to be included in the state vector */ CKTcircuitmin *ckt; if (ANALYSIS != MIF_AC) { /**** only Transient Analysis and dc ****/ /** INIT: allocate storage **/ if (INIT==1) { CALLBACK = cm_delay_callback; ckt = (CKTcircuitmin*)cm_get_circuit(); if (PARAM_NULL(buffer_size)) { /* size depends on TSTOP/TSTEP, if no parameter given */ buffer_size = (int) (ckt->CKTfinalTime / ckt->CKTstep) + 1; } else { buffer_size = PARAM(buffer_size); if (buffer_size < 0) { cm_message_send("Negative buffer size is not allowed " "in a delay code model"); return; } } delay = PARAM(delay); if (delay < 0.0) { delay = 0.0; cm_message_send("Negative delay not allowed, set to 0"); } /*** allocate static storage for *loc ***/ if ((loc = (mLocal_Data_t *) (STATIC_VAR(locdata) = calloc(1, sizeof(mLocal_Data_t)))) == (mLocal_Data_t *) NULL) { cm_message_send("Unable to allocate Local_Data_t " "in cm_delay()"); return; } /*** allocate static storage for the delay buffer ***/ loc->buffer = (double *) calloc((size_t)buffer_size, sizeof(double)); if (loc->buffer == (double *) NULL) { cm_message_send("Unable to allocate delay buffer " "in cm_delay()"); return; } loc->buffer_size = buffer_size; /* The delay is controlled by input delay_cnt */ if (PARAM(has_delay_cnt) == MIF_TRUE) { if (PARAM_NULL(delmin)) loc->tdelmin = 0.0; else { loc->tdelmin = PARAM(delmin); if (loc->tdelmin < 0) { loc->tdelmin = 0.0; cm_message_send("Negative min delay not allowed, set to 0"); } else if (loc->tdelmin > ckt->CKTfinalTime) { loc->tdelmin = ckt->CKTfinalTime; cm_message_send("min delay greater than final sim time not allowed, set to final time"); } } if (PARAM_NULL(delmax)) loc->tdelmax = ckt->CKTfinalTime; else { loc->tdelmax = PARAM(delmax); if (loc->tdelmax < 0) { loc->tdelmin = 0.0; cm_message_send("Negative max delay not allowed, set to 0"); } else if (loc->tdelmax > ckt->CKTfinalTime) { loc->tdelmax = ckt->CKTfinalTime; cm_message_send("max delay greater than final sim time not allowed, set to final time"); } } if (loc->tdelmax < loc->tdelmin) { loc->tdelmax = loc->tdelmin; cm_message_send("max delay smaller than min delay, set to min delay"); } } loc->buff_write = 0; loc->buff_del = 0; loc->step_count = 0; loc->tdelay = delay; loc->tstop = ckt->CKTfinalTime; loc->tstep = ckt->CKTstep; loc->tprev = 0.0; loc->prev_val = 0.0; } /* retrieve previous values */ loc = STATIC_VAR (locdata); delay = loc->tdelay; if (delay == 0.0 && !PARAM(has_delay_cnt)) { OUTPUT(out) = INPUT(in); return; } if (delay < loc->tstep) { delay = 0.; } if (TIME == 0.0) loc->start_val = INPUT(in); /* input, simply interpolated to TSTEP */ double tacct = loc->step_count * loc->tstep; if (TIME >= tacct) { loc->buffer[loc->buff_write] = INPUT(in); /* next buffer location, circular, for writing */ loc->buff_write = (loc->buff_write + 1) % loc->buffer_size; loc->step_count++; loc->tprev = tacct; loc->prev_val = INPUT(in); } delmin = loc->tdelmin; delmax = loc->tdelmax; lcntrl = INPUT(cntrl); if (lcntrl < 0) lcntrl = 0.; else if (lcntrl > 1.) lcntrl = 1.; if (PARAM(has_delay_cnt) == MIF_TRUE) { delay = (delmax - delmin) * lcntrl + delmin; } /* time not yet advanced for delay output */ if (TIME < delay) { OUTPUT(out) = loc->start_val; } else if (delay == 0) OUTPUT(out) = INPUT(in); else OUTPUT(out) = loc->buffer[loc->buff_del]; /* add offset to reduce error */ /* FIXME: may not be needed if (better) interpolation */ delay += 0.5 * loc->tstep; /* delay in steps */ delay_step = (int)(delay / loc->tstep); /* FIXME: For whatever reason the model is assessed two times per time step */ /* next readout location, delayed after writing */ if ((loc->buff_write - delay_step) >= 0) loc->buff_del = loc->buff_write - delay_step; else loc->buff_del = loc->buff_write - delay_step + loc->buffer_size; } else { /**** all others ****/ OUTPUT(out) = INPUT(in); } } /* free the memory created locally */ static void cm_delay_callback(ARGS, Mif_Callback_Reason_t reason) { switch (reason) { case MIF_CB_DESTROY: { mLocal_Data_t *loc = (mLocal_Data_t *) STATIC_VAR(locdata); if (loc == (mLocal_Data_t *) NULL) { break; } if (loc->buffer != (double *) NULL) { free(loc->buffer); } free(loc); STATIC_VAR(locdata) = NULL; break; } } } /* end of function cm_delay_callback */ tmp_ns50wwy/src/xspice/icm/analog/slew/0000755000175000017500000000000014163340332020216 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/slew/slew.h0000644000175000017500000000222614163340332021343 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE slew/slew.h Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 ===*/ tmp_ns50wwy/src/xspice/icm/analog/slew/ifspec.ifs0000644000175000017500000000301514163340332022171 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/slew/cfunc.mod0000644000175000017500000001757214163340332022031 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE slew/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/sine/0000755000175000017500000000000014163340332020202 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/sine/ifspec.ifs0000644000175000017500000000351014163340332022155 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/sine/cfunc.mod0000644000175000017500000001437214163340332022010 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE sine/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/square/0000755000175000017500000000000014163340332020544 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/square/ifspec.ifs0000644000175000017500000000510614163340332022522 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/square/cfunc.mod0000644000175000017500000003004414163340332022344 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE square/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/multi_input_pwl/0000755000175000017500000000000014163340332022477 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/multi_input_pwl/ifspec.ifs0000644000175000017500000000340114163340332024451 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ ------------------------------------------------------------------------- Copyright 2005 Intrinsity, Inc. Austin, TX 78738 All Rights Reserved 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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 tmp_ns50wwy/src/xspice/icm/analog/multi_input_pwl/cfunc.mod0000644000175000017500000001051214163340332024275 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 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) ------------------------------------------------------------------------- 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; } } tmp_ns50wwy/src/xspice/icm/analog/hyst/0000755000175000017500000000000014163340332020233 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/hyst/ifspec.ifs0000644000175000017500000000522614163340332022214 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/hyst/cm_hyst.h0000644000175000017500000000225514163340332022056 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE hyst/cm_hyst.h Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 ===*/ tmp_ns50wwy/src/xspice/icm/analog/hyst/cfunc.mod0000644000175000017500000003104714163340332022037 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE hyst/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/oneshot/0000755000175000017500000000000014163340332020723 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/oneshot/ifspec.ifs0000644000175000017500000001006514163340332022701 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/oneshot/oneshot.h0000644000175000017500000000174414163340332022561 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 ***************************************/ tmp_ns50wwy/src/xspice/icm/analog/oneshot/cfunc.mod0000644000175000017500000004327214163340332022532 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE oneshot/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/ilimit/0000755000175000017500000000000014163340332020533 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/ilimit/ifspec.ifs0000644000175000017500000000752014163340332022513 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/ilimit/cfunc.mod0000644000175000017500000003275514163340332022346 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE ilimit/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } } tmp_ns50wwy/src/xspice/icm/analog/limit/0000755000175000017500000000000014163340332020362 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/limit/ifspec.ifs0000644000175000017500000000465614163340332022351 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/limit/cfunc.mod0000644000175000017500000001133014163340332022157 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE limit/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/summer/0000755000175000017500000000000014163340332020554 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/summer/ifspec.ifs0000644000175000017500000000350114163340332022527 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/summer/cfunc.mod0000644000175000017500000000623214163340332022356 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE summer/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/icm/analog/climit/0000755000175000017500000000000014163340332020525 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/climit/ifspec.ifs0000644000175000017500000000502214163340332022500 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 tmp_ns50wwy/src/xspice/icm/analog/climit/cfunc.mod0000644000175000017500000001670714163340332022337 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE climit/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/mult/0000755000175000017500000000000014163340332020225 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/mult/ifspec.ifs0000644000175000017500000000350514163340332022204 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/mult/cfunc.mod0000644000175000017500000001040514163340332022024 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE mult/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/icm/analog/modpath.lst0000644000175000017500000000021114163340332021416 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 delay tmp_ns50wwy/src/xspice/icm/analog/gain/0000755000175000017500000000000014163340332020162 5ustar carstencarstentmp_ns50wwy/src/xspice/icm/analog/gain/ifspec.ifs0000644000175000017500000000272514163340332022144 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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 tmp_ns50wwy/src/xspice/icm/analog/gain/cfunc.mod0000644000175000017500000000440014163340332021757 0ustar carstencarsten/*.......1.........2.........3.........4.........5.........6.........7.........8 ================================================================================ FILE gain/cfunc.mod Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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; } } tmp_ns50wwy/src/xspice/.gitignore0000644000175000017500000000010214163340332017214 0ustar carstencarsten/cmpp/cmpp /icm/GNUmakefile /icm/makedefs !/examples/*/Makefile tmp_ns50wwy/src/xspice/cm/0000755000175000017500000000000014163340332015632 5ustar carstencarstentmp_ns50wwy/src/xspice/cm/Makefile.am0000644000175000017500000000061614163340332017671 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 tmp_ns50wwy/src/xspice/cm/cmutil.c0000644000175000017500000004715014163340332017302 0ustar carstencarsten/* =========================================================================== FILE CMutil.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/xspice/cm/cm.c0000644000175000017500000004677314163340332016416 0ustar carstencarsten/* =========================================================================== FILE CM.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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() * */ 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); } tmp_ns50wwy/src/xspice/cm/cmexport.c0000644000175000017500000000270414163340332017642 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 }; tmp_ns50wwy/src/xspice/cm/cmevt.c0000644000175000017500000001414414163340332017120 0ustar carstencarsten/* =========================================================================== FILE CMevt.c MEMBER OF process XSPICE Public Domain Georgia Tech Research Corporation Atlanta, Georgia 30332 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); } tmp_ns50wwy/src/sharedspice.c0000644000175000017500000020100314163340332016372 0ustar carstencarsten/* Copyright 2013 - 2019 Holger Vogt * * Modified BSD license */ /* For comments and explanations see sharedspice.h */ /*******************/ /* Defines */ /*******************/ #ifdef _MSC_VER #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" #include "ngspice/stringskip.h" #include "frontend/variable.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 /********** includes copied from main.c ************/ #ifdef CIDER # include "ngspice/numenum.h" # include "maths/misc/accuracy.h" #endif /********** global variables copied from main.c ************/ 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 */ 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; const bool ft_nutmeg = FALSE; extern struct comm spcp_coms[]; struct comm* cp_coms = spcp_coms; /* 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 bool orflag = FALSE; /* global for -o option */ /* 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; IFfrontEnd nutmeginfo = { IFnewUid, IFdelUid, OUTstopnow, seconds, OUTerror, OUTerrorf, OUTpBeginPlot, OUTpData, OUTwBeginPlot, OUTwReference, OUTwData, OUTwEnd, OUTendPlot, OUTbeginDomain, OUTendDomain, OUTattributes }; #ifdef CIDER /* Global debug flags from CIDER, soon they will become * spice variables :) */ int ONEacDebug = FALSE; int ONEdcDebug = TRUE; int ONEtranDebug = TRUE; int ONEjacDebug = FALSE; int TWOacDebug = FALSE; int TWOdcDebug = TRUE; int TWOtranDebug = TRUE; int 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); /***********************************************************/ extern IFsimulator SIMinfo; extern struct comm spcp_coms[ ]; extern void DevInit(void); extern wordlist *cp_varwl(struct variable *var); extern void create_circbyline(char *line, bool reset, bool lastline); static int SIMinit(IFfrontEnd *frontEnd, IFsimulator **simulator); 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 NG_BOOL immediate = FALSE; static NG_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; } /* -------------------------------------------------------------------------- */ static int SIMinit(IFfrontEnd* frontEnd, IFsimulator** 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 */ SPfrontEnd = frontEnd; *simulator = &SIMinfo; return OK; } /* end of function SIMinit */ /******************************************************************/ /* Main spice command executions and thread control */ /*****************************************************************/ #ifdef THREADS static threadId_t tid, printtid, tid2; static bool fl_running = FALSE; static NG_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] = ""; #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 #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")) { 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*/ 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(const char *dir, const char *name) { const 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 NG_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_sigsegv = NULL; struct variable* sourcepathvar; 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; cp_nocc = TRUE; #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(); #endif if (!cp_getvar("nosighandling", CP_BOOL, NULL, 0)) old_sigsegv = signal(SIGSEGV, (SIGNAL_FUNCTION) sigsegvsh); 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 */ #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 try accessing the initialisation file .spiceinit in the current directory if that fails try the alternate name spice.rc, then look into the HOME directory, then into USERPROFILE */ do { if (read_initialisation_file("", INITSTR) != FALSE) { break; } if (read_initialisation_file("", ALT_INITSTR) != FALSE) { break; } { const char* const home = getenv("HOME"); if (home) { if (read_initialisation_file(home, INITSTR) != FALSE) { break; } if (read_initialisation_file(home, ALT_INITSTR) != FALSE) { break; } } } { const char* const usr = getenv("USERPROFILE"); if (usr) { if (read_initialisation_file(usr, INITSTR) != FALSE) { break; } if (read_initialisation_file(usr, ALT_INITSTR) != FALSE) { break; } } } } while (0); /* end of case that init file is read */ #endif /* ~ HAVE_PWD_H */ if (!cp_getvar("nosighandling", CP_BOOL, NULL, 0)) signal(SIGSEGV, old_sigsegv); /* initialize 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 fprintf(cp_out, "******\n" "** %s-%s shared library\n", ft_sim->simulator, ft_sim->version); if (*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)); /* Read first entry of sourcepath var, set Infile_path for code models */ if ( cp_getvar("sourcepath", CP_LIST, &sourcepathvar, 0)) { Infile_Path = copy(sourcepathvar->va_string); } #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. If NULL is sent, we clear the command memory */ IMPEXP int ngSpice_Command(char* comexec) { /* delete existing command memory */ if (comexec == NULL) { cp_resetcontrol(FALSE); return 0; } /* Check if command is reasonable */ 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; bool reset = FALSE, lastline = FALSE; if ( ! setjmp(errbufm) ) { intermj = 0; immediate = FALSE; /* count the entries */ while (circa[entries]) { char* line = skip_ws(circa[entries++]); if (ciprefix(".end", line) && (line[4] == '\0' || isspace_c(line[4]))) break; } if (ft_ngdebug) fprintf(stdout, "\nngspiceCirc: received netlist array with %d entries\n", entries); /* create a local copy (to be freed in inpcom.c) */ for (i = 0; i < entries; i++) { newline = copy(circa[i]); if (i == 0) reset = TRUE; else reset = FALSE; if (i == entries - 1) lastline = TRUE; create_circbyline(newline, reset, lastline); } 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] = NULL; 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 NG_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. We may have two threads: main and bg_run */ #define DELTATIME 150 void SetAnalyse( const 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; /* check in which thread we are in */ static unsigned int ng_id1 = 0, ng_id2 = 0; bool thread1; #ifdef HAVE_FTIME struct timeb timenow; /* actual time stamp */ int diffsec, diffmillisec; /* differences actual minus prev. time stamp */ int result; /* return value from callback function */ char* s; /* outputs to callback function */ int OldPercent; /* Previous progress value */ char OldAn[128]; /* Previous analysis type */ char olds[128]; /* previous output */ static struct timeb timebefore; /* previous time stamp */ /* thread 1 */ static int OldPercent1 = -2; /* Previous progress value */ static char OldAn1[128]; /* Previous analysis type */ static char olds1[128]; /* previous output */ static struct timeb timebefore1; /* previous time stamp */ /* thread2 */ static int OldPercent2 = -2; /* Previous progress value */ static char OldAn2[128]; /* Previous analysis type */ static char olds2[128]; /* previous output */ static struct timeb timebefore2; /* previous time stamp */ /*set the two thread ids */ unsigned int ng_idl = threadid_self(); if (ng_id1 == 0) { ng_id1 = ng_idl; strncpy(OldAn1, Analyse, 127); //strcpy(OldAn1, "?"); /* initial value */ } else if (ng_id2 == 0 && ng_id1 != ng_idl) { ng_id2 = ng_idl; strncpy(OldAn2, Analyse, 127); // strcpy(OldAn2, "?"); /* initial value */ } if (ng_idl == ng_id1) { thread1 = TRUE; strcpy(OldAn, OldAn1); strcpy(olds, olds1); OldPercent = OldPercent1; timebefore.dstflag = timebefore1.dstflag; timebefore.millitm = timebefore1.millitm; timebefore.time = timebefore1.time; timebefore.timezone = timebefore1.timezone; } else if (ng_idl == ng_id2) { thread1 = FALSE; strcpy(OldAn, OldAn2); strcpy(olds, olds2); OldPercent = OldPercent2; timebefore.dstflag = timebefore2.dstflag; timebefore.millitm = timebefore2.millitm; timebefore.time = timebefore2.time; timebefore.timezone = timebefore2.timezone; } else return; CKTcircuit *ckt = NULL; if (ft_curckt) ckt = ft_curckt->ci_ckt; 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()); } if(thread1) OldPercent1 = DecaPercent; else OldPercent2 = 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.); } if (thread1) { timebefore1.dstflag = timenow.dstflag; timebefore1.millitm = timenow.millitm; timebefore1.time = timenow.time; timebefore1.timezone = timenow.timezone; } else { timebefore2.dstflag = timenow.dstflag; timebefore2.millitm = timenow.millitm; timebefore2.time = timenow.time; timebefore2.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()); if(thread1) strncpy(OldAn1, Analyse, 127); else strncpy(OldAn2, Analyse, 127); } /* ouput only after a change */ if (strcmp(olds, s)) result = statfcn(s, ng_ident, userptr); if(thread1) strcpy(olds1, s); else strcpy(olds2, 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 < 0) 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); } 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); } 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 tmp_ns50wwy/src/conf.h0000644000175000017500000000054114163340332015036 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 tmp_ns50wwy/src/spinit.in0000644000175000017500000000126114163340332015576 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 strcmp __flag $program "ngspice" if $__flag = 0 @XSPICEINIT@ codemodel @pkglibdir@/spice2poly.cm @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 tmp_ns50wwy/src/ngspice.txt0000644000175000017500000142263314163340332016144 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 ------------------------------------------------------------ tmp_ns50wwy/src/winmain.c0000644000175000017500000015467114163340332015564 0ustar carstencarsten/* Main program for ngspice under Windows OS Autor: Wolfgang Muees Stand: 28.10.97 Copyright: Holger Vogt Stand: 09.01.2018 Stand: 20.07.2019 Stand: 07.12.2019 Modified BSD license */ #include "ngspice/config.h" #ifdef HAS_WINGUI #ifndef _WIN32 #define _WIN32 #endif #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 #ifdef __MINGW32__ #include #include #endif #include "hist_info.h" /* history management */ #include "ngspice/bool.h" /* bool defined as unsigned char */ #include "misc/misc_time.h" /* timediff */ #include "ngspice/memory.h" /* TMALLOC */ #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 300 // 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 */ #ifdef EXT_ASC 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 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 WNDCLASS hwElementClass; /* Class definition of status displays */ static LPCTSTR hwElementClassName = "ElementClass"; static LPCTSTR hwSourceWindowName = "SourceDisplay"; static LPCTSTR hwAnalyseWindowName = "AnalyseDisplay"; #else static WNDCLASSW hwMainClassW; /* Class definition for the main window */ static LPCWSTR hwClassNameW = L"SPICE_TEXT_WND";/* Class name of the main window */ static LPCWSTR hwWindowNameW = L"ngspice 26"; /* main window displayed name */ static WNDCLASSW twTextClassW; /* Class definition for the text box */ static LPCWSTR twClassNameW = L"SPICE_TEXT_BOX"; /* Class name for the text box */ static LPCWSTR twWindowNameW = L"TextOut"; /* text box name */ static WNDCLASSW swStringClassW; /* Class definition of string window */ static LPCWSTR swClassNameW = L"SPICE_STR_IN"; /* Class name of text input */ static LPCWSTR swWindowNameW = L"StringIn"; /* Window name */ static WNDCLASSW hwElementClassW; /* Class definition of status displays */ static LPCWSTR hwElementClassNameW = L"ElementClass"; static LPCWSTR hwSourceWindowNameW = L"SourceDisplay"; static LPCWSTR hwAnalyseWindowNameW = L"AnalyseDisplay"; #endif static size_t TBufEnd = 0; /* Pointer to \0 */ static char TBuffer[TBufSize + 1]; /* Text buffer */ static SBufLine SBuffer; /* Input buffer */ static char CRLF[] = {CR, LF, SE}; /* CR/LF */ 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 */ static HFONT efont; /* Font for element windows */ static HFONT tfont; /* Font for text window */ static HFONT sfont; /* Font for string window */ 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); void UpdateMainText(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) { #ifdef EXT_ASC SetWindowText(hwSource, Name); #else wchar_t *NameW; NameW = TMALLOC(wchar_t, 2 * strlen(Name) + 1); MultiByteToWideChar(CP_UTF8, 0, Name, -1, NameW, 2 * (int)strlen(Name) + 1); SetWindowTextW(hwSource, NameW); tfree(NameW); #endif 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(); OldAn[127] = '\0'; if (((DecaPercent == OldPercent) && !strcmp(OldAn, Analyse)) || !strcmp(Analyse, "or")) return; /* get actual time */ ftime(&timenow); timediff(&timenow, &timebefore, &diffsec, &diffmillisec); 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 (hwAnalyse && ((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); } #ifdef EXT_ASC SetWindowText(hwAnalyse, s); SetWindowText(hwMain, t); #else wchar_t sw[256]; wchar_t tw[256]; MultiByteToWideChar(CP_UTF8, 0, s, -1, sw, 256); MultiByteToWideChar(CP_UTF8, 0, t, -1, tw, 256); /* Analysis window */ SetWindowTextW(hwAnalyse, sw); /* ngspice task bar */ SetWindowTextW(hwMain, tw); #endif InvalidateRgn(hwAnalyse, NULL, TRUE); UpdateWindow(hwAnalyse); InvalidateRgn(hwMain, NULL, TRUE); 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) { // Show text #ifdef EXT_ASC Edit_SetText(twText, TBuffer); #else wchar_t *TWBuffer; TWBuffer = TMALLOC(wchar_t, 2 * strlen(TBuffer) + 1); if (MultiByteToWideChar(CP_UTF8, 0, TBuffer, -1, TWBuffer, 2 * (int)strlen(TBuffer) + 1) == 0) swprintf(TWBuffer, 2 * strlen(TBuffer), L"UTF-8 to UTF-16 conversion failed with 0x%x\n%hs could not be converted\n", GetLastError(), TBuffer); SetWindowTextW(twText, TWBuffer); tfree(TWBuffer); #endif // 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 - 2; int statbegin = 3 * StatusFrame + QuitButtonLength + AnalyseLength + 4; MoveWindow(hwSource, StatusFrame, h, cx - statbegin - BorderSize, StatusElHeight, TRUE); MoveWindow( hwAnalyse, cx - statbegin, h, AnalyseLength, StatusElHeight, TRUE); MoveWindow( hwQuitButton, cx - StatusFrame - QuitButtonLength - 1, h + 1, 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: #ifdef EXT_ASC return DefWindowProc(hwnd, uMsg, wParam, lParam); #else return DefWindowProcW(hwnd, uMsg, wParam, lParam); #endif } } /* 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 */ #ifdef EXT_ASC pp_hi = (struct History_info **) ((LPCREATESTRUCT) lParam)->lpCreateParams; #else pp_hi = (struct History_info **) ((LPCREATESTRUCTW) lParam)->lpCreateParams; #endif break; case WM_KEYDOWN: { const UINT i = (UINT) wParam; if ((i == VK_UP) || (i == VK_DOWN)) { /* Set old text to new */ #ifdef EXT_ASC 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); #else const char *newtext = (i == VK_UP) ? history_get_prev(*pp_hi, NULL) : history_get_next(*pp_hi, NULL); wchar_t *newtextW; newtextW = TMALLOC(wchar_t, 2 * strlen(newtext) + 1); MultiByteToWideChar( CP_UTF8, 0, newtext, -1, newtextW, 2 * (int) strlen(newtext) + 1); SetWindowTextW(swString, newtextW); tfree(newtextW); /* Put cursor to end of line */ CallWindowProcW(swProc, hwnd, uMsg, (WPARAM) VK_END, lParam); #endif 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. */ #ifdef EXT_ASC const int n_char_returned = GetWindowText( hwnd, SBuffer, sizeof SBuffer - (sizeof CRLF - 1)); #else wchar_t *WBuffer = TMALLOC(wchar_t, sizeof(SBuffer)); /* for utf-8 the number of characters is not the number of bytes returned */ GetWindowTextW(hwnd, WBuffer, sizeof SBuffer - (sizeof CRLF - 1)); WideCharToMultiByte(CP_UTF8, 0, WBuffer, -1, SBuffer, sizeof SBuffer - 1, NULL, FALSE); /* retrive here the number of bytes returned */ const int n_char_returned = (int)strlen(SBuffer); tfree(WBuffer); #endif 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 */ #ifdef EXT_ASC return CallWindowProc(swProc, hwnd, uMsg, wParam, lParam); #else return CallWindowProcW( swProc, hwnd, uMsg, wParam, lParam); #endif } /* 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: #ifdef EXT_ASC return CallWindowProc(twProc, hwnd, uMsg, wParam, lParam); #else return CallWindowProcW( twProc, hwnd, uMsg, wParam, lParam); #endif } } static void Element_OnPaint(HWND hwnd) { PAINTSTRUCT ps; RECT r; RECT s; HGDIOBJ o; #ifdef EXT_ASC char buffer[128]; #else wchar_t bufferW[256]; #endif 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 */ #ifdef EXT_ASC 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); #else bufferW[0] = '\0'; i = GetWindowTextW(hwnd, bufferW, 255); s.left = r.left + 1; s.right = r.right - 1; s.top = r.top + 1; s.bottom = r.bottom - 1; o = GetSysColorBrush(COLOR_BTNFACE); FillRect(hdc, &s, o); SetBkMode(hdc, TRANSPARENT); SelectObject(hdc, efont); ExtTextOutW(hdc, s.left + 1, s.top + 1, ETO_CLIPPED, &s, bufferW, (unsigned)i, NULL); #endif /* 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: #ifdef EXT_ASC return DefWindowProc(hwnd, uMsg, wParam, lParam); #else return DefWindowProcW( hwnd, uMsg, wParam, lParam); #endif } } #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 */ #ifdef EXT_ASC int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpszCmdLine, _In_ int nCmdShow) #else int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR wlpszCmdLine, _In_ int nCmdShow) #endif { 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); #ifndef EXT_ASC /* convert wchar to utf-8 */ char lpszCmdLine[1024]; WideCharToMultiByte(CP_UTF8, 0, wlpszCmdLine, -1, lpszCmdLine, 1023, NULL, FALSE); #endif /* fill global variables */ hInst = hInstance; nShowState = nCmdShow; /* Initialize text buffer */ TBufEnd = 0; TBuffer[TBufEnd] = SE; SBuffer[0] = SE; /* Define main window class */ #ifdef EXT_ASC 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; #else hwMainClassW.style = CS_HREDRAW | CS_VREDRAW; hwMainClassW.lpfnWndProc = MainWindowProc; hwMainClassW.cbClsExtra = 0; hwMainClassW.cbWndExtra = 0; hwMainClassW.hInstance = hInst; hwMainClassW.hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(101)); hwMainClassW.hCursor = LoadCursorW(NULL, MAKEINTRESOURCEW(32512)); hwMainClassW.hbrBackground = GetStockObject(LTGRAY_BRUSH); hwMainClassW.lpszMenuName = NULL; hwMainClassW.lpszClassName = hwClassNameW; if (!RegisterClassW(&hwMainClassW)) goto THE_END; #endif /* Define text window class */ #ifdef EXT_ASC 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; #else if (!GetClassInfoW(NULL, L"EDIT", &twTextClassW)) goto THE_END; twProc = twTextClassW.lpfnWndProc; twTextClassW.lpfnWndProc = TextWindowProc; twTextClassW.hInstance = hInst; twTextClassW.lpszMenuName = NULL; twTextClassW.lpszClassName = twClassNameW; if (!RegisterClassW(&twTextClassW)) goto THE_END; #endif /* Define string window class */ #ifdef EXT_ASC 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; #else if (!GetClassInfoW(NULL, L"EDIT", &swStringClassW)) goto THE_END; swProc = swStringClassW.lpfnWndProc; swStringClassW.lpfnWndProc = StringWindowProc; swStringClassW.hInstance = hInst; swStringClassW.lpszMenuName = NULL; swStringClassW.lpszClassName = swClassNameW; if (!RegisterClassW(&swStringClassW)) goto THE_END; #endif /* Define status element class */ #ifdef EXT_ASC 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; #else hwElementClassW.style = CS_HREDRAW | CS_VREDRAW; hwElementClassW.lpfnWndProc = ElementWindowProc; hwElementClassW.cbClsExtra = 0; hwElementClassW.cbWndExtra = 0; hwElementClassW.hInstance = hInst; hwElementClassW.hIcon = NULL; hwElementClassW.hCursor = LoadCursorW(NULL, MAKEINTRESOURCEW(32512)); hwElementClassW.hbrBackground = GetStockObject(LTGRAY_BRUSH); hwElementClassW.lpszMenuName = NULL; hwElementClassW.lpszClassName = hwElementClassNameW; if (!RegisterClassW(&hwElementClassW)) goto THE_END; #endif /* Font for element status windows (source, analysis, Quit button) */ efont = CreateFontW(16, 6, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, L""); /* efont = CreateFontW(16, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, NONANTIALIASED_QUALITY, VARIABLE_PITCH, L"Segoe UI");*/ /* efont = CreateFontW(15, 0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, NONANTIALIASED_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier");*/ if (!efont) efont = GetStockFont(ANSI_FIXED_FONT); #ifdef EXT_ASC SystemParametersInfo(SPI_GETWORKAREA, 0, &wsize, 0); #else SystemParametersInfoW(SPI_GETWORKAREA, 0, &wsize, 0); #endif iy = wsize.bottom; ix = wsize.right; #ifndef BIG_WINDOW_FOR_DEBUGGING const int iyt = iy / 3; /* height of screen divided by 3 */ #ifdef EXT_ASC hwMain = CreateWindow(hwClassName, hwWindowName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, iyt * 2, ix, iyt, NULL, NULL, hInst, NULL); #else hwMain = CreateWindowW(hwClassNameW, hwWindowNameW, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, iyt * 2, ix, iyt, NULL, NULL, hInst, NULL); #endif #else #ifdef EXT_ASC hwMain = CreateWindow(hwClassName, hwWindowName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, 0, ix, iy, NULL, NULL, hInst, NULL); #else hwMain = CreateWindowW(hwClassName, hwWindowName, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, 0, 0, ix, iy, NULL, NULL, hInst, NULL); #endif #endif if (!hwMain) goto THE_END; /* Create text window */ #ifdef EXT_ASC 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); #else twText = CreateWindowExW(WS_EX_NOPARENTNOTIFY, twClassNameW, twWindowNameW, ES_LEFT | ES_MULTILINE | ES_READONLY | WS_CHILD | WS_BORDER | WS_VSCROLL, 20,20,300,100, hwMain, NULL, hInst, NULL); #endif if (!twText) goto THE_END; #ifdef EXT_ASC { HDC textDC; TEXTMETRIC tm; tfont = GetStockFont(ANSI_FIXED_FONT); SetWindowFont(twText, tfont, FALSE); textDC = GetDC(twText); if (textDC) { SelectObject(textDC, tfont); if (GetTextMetrics(textDC, &tm)) { RowHeight = tm.tmHeight; WinLineWidth = 90 * tm.tmAveCharWidth; } ReleaseDC(twText, textDC); } } #else { HDC textDC; TEXTMETRICW tm; tfont = CreateFontW(15, 0, 0, 0, FW_MEDIUM, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, NONANTIALIASED_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier"); /* Ansi fixed font */ if(!tfont) tfont = GetStockFont(ANSI_FIXED_FONT); SetWindowFont( twText, tfont, FALSE); textDC = GetDC( twText); if (textDC) { SelectObject( textDC, tfont); if (GetTextMetricsW( textDC, &tm)) { RowHeight = tm.tmHeight; WinLineWidth = 90 * tm.tmAveCharWidth; } ReleaseDC( twText, textDC); } } #endif /* Create string window for input. Give a handle to history info to * the window for saving and retrieving commands */ /* Font for element status windows (source, analysis) */ sfont = CreateFontW(16, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, L""); /* Ansi fixed font */ if(!sfont) sfont = GetStockFont(ANSI_FIXED_FONT); #ifdef EXT_ASC 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); } } #else swString = CreateWindowExW(WS_EX_NOPARENTNOTIFY, swClassNameW, swWindowNameW, 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; TEXTMETRICW tm; stringDC = GetDC(swString); if (stringDC) { SelectObject(stringDC, sfont); if (GetTextMetricsW(stringDC, &tm)) LineHeight = tm.tmHeight + tm.tmExternalLeading + BorderSize; ReleaseDC(swString, stringDC); } } #endif /* Element windows */ /* Create source window */ #ifdef EXT_ASC hwSource = CreateWindowEx(WS_EX_NOPARENTNOTIFY, hwElementClassName, hwSourceWindowName, WS_CHILD, 0, 0, SourceLength, StatusElHeight, hwMain, NULL, hInst, NULL); #else hwSource = CreateWindowExW(WS_EX_NOPARENTNOTIFY, hwElementClassNameW, hwSourceWindowNameW, WS_CHILD, 0, 0, SourceLength, StatusElHeight, hwMain, NULL, hInst, NULL); #endif if (!hwSource) goto THE_END; SetWindowFont(hwSource, efont, FALSE); /* Create analysis window */ #ifdef EXT_ASC hwAnalyse = CreateWindowEx(WS_EX_NOPARENTNOTIFY, hwElementClassName, hwAnalyseWindowName, WS_CHILD, 0, 0, AnalyseLength, StatusElHeight, hwMain, NULL, hInst, NULL); #else hwAnalyse = CreateWindowExW(WS_EX_NOPARENTNOTIFY, hwElementClassNameW, hwAnalyseWindowNameW, WS_CHILD, 0,0, AnalyseLength, StatusElHeight, hwMain, NULL, hInst, NULL); #endif if (!hwAnalyse) goto THE_END; SetWindowFont(hwAnalyse, efont, FALSE); /* Create "Quit" button */ #ifdef EXT_ASC hwQuitButton = CreateWindow("BUTTON", "Quit", WS_CHILD | BS_PUSHBUTTON, 0, 0, QuitButtonLength, StatusElHeight, hwMain, (HMENU)(UINT_PTR)QUIT_BUTTON_ID, hInst, NULL); #else hwQuitButton = CreateWindowW(L"BUTTON", L"Quit", WS_CHILD | BS_PUSHBUTTON, 0, 0, QuitButtonLength, StatusElHeight, hwMain, (HMENU)(UINT_PTR)QUIT_BUTTON_ID, hInst, NULL); #endif if (!hwQuitButton) goto THE_END; SetWindowFont(hwQuitButton, efont, FALSE); /* Define a minimum width */ int MinWidth = AnalyseLength + SourceLength + QuitButtonLength + 48; if (WinLineWidth < MinWidth) WinLineWidth = MinWidth; /* 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 empty input line */ static const char cmd_welcome[] = ""; (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); } void UpdateMainText(void) { DisplayText(); } #else /* HAS_WINGUI not defined */ /* Prevent warning regarding empty translation unit */ static void dummy(void) { return; } /* end of function dummy */ #endif /* HAS_WINGUI */ tmp_ns50wwy/src/hist_info.h0000644000175000017500000000442614163340332016101 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 */ tmp_ns50wwy/src/ngproc2mod.c0000644000175000017500000003222414163340332016161 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; } } } void controlled_exit(int status) { exit(status); } tmp_ns50wwy/src/conf.c0000644000175000017500000000175714163340332015043 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 = ""; tmp_ns50wwy/src/main.c0000644000175000017500000011333514163340332015036 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 "ngspice/dstring.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 bool read_initialisation_file(const char *dir, const 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 EVTswitch_plot(CKTcircuit* ckt, const char* plottypename) { NG_IGNORE(ckt); NG_IGNORE(plottypename); return 1; }; int load_opus(const 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 = (*s++); /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (c) { case '!': p += sprintf(p, "%d", where_history() + 1); break; case '\\': /* skip an escape char */ if (*s) c = (char) (*s++); /* FALLTHROUGH */ 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 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 /* 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) */ } /* end of function app_rl_readlines */ /* -------------------------------------------------------------------------- */ 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" " -D, --define=variable[=value] define variable to true/[value]\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); } #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(const char *dir, const char *name) { const 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) { /* Allocated by tprintf() */ txfree(path); } return result; } /* end of function read_initialisation_file */ /* -------------------------------------------------------------------------- */ static void print_news(void) { if (News_File && *News_File) { const char * const fname = cp_tildexpand(News_File); /*DG Memory leak */ FILE * const fp = fopen(fname, "r"); txfree(fname); if (fp) { char buf[BSIZE_SP]; while (fgets(buf, BSIZE_SP, fp)) { fputs(buf, stdout); } fclose(fp); } } } /* end of function print_news */ #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 added to resolve GCC -Wclobbered */ volatile bool readinit = TRUE; /* read initialization file */ volatile bool istty = TRUE; bool iflag = FALSE; /* flag for interactive mode */ bool qflag = FALSE; /* flag for command completion */ 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 #ifdef TRACE1 int jj; for (jj = 0; jj < argc; jj++) { fprintf(stdout, "%s\n", argv[jj]); } #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]); /* Create internal variables */ /* Set default data sources */ 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[] = { {"define", required_argument, NULL, 'D'}, {"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, "D:hvbac:ino:pqr:st:", long_options, &option_index); if (c == -1) { break; } switch (c) { case 'D': /* Definition of variable */ if (optarg) { const char *eq = strchr(optarg, '='); if (eq == (char *) NULL) { /* no assignment */ bool true_val = TRUE; cp_vset(optarg, CP_BOOL, &true_val); } else { DS_CREATE(ds, 100); if (ds_cat_mem(&ds, optarg, (size_t) (eq - optarg)) == 0) { cp_vset(ds_get_buf(&ds), CP_STRING, eq + 1); } ds_free(&ds); } } break; case 'h': /* Help */ show_help(); sp_shutdown(EXIT_INFO); break; case 'v': /* Version info */ com_version(NULL); 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 #ifdef TRACE1 fprintf(stdout, "We are ready to read initialization files.\n"); #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 */ do { if (read_initialisation_file("", INITSTR) != FALSE) { break; } if (read_initialisation_file("", ALT_INITSTR) != FALSE) { break; } { const char * const home = getenv("HOME"); if (home) { if (read_initialisation_file(home, INITSTR) != FALSE) { break; } if (read_initialisation_file(home, ALT_INITSTR) != FALSE) { break; } } } { const char * const usr = getenv("USERPROFILE"); if (usr) { if (read_initialisation_file(usr, INITSTR) != FALSE) { break; } if (read_initialisation_file(usr, ALT_INITSTR) != FALSE) { break; } } } } while (0); } /* end of case that init file is read */ if (!ft_batchmode) { com_version(NULL); DevInit(); print_news(); } } /* end of normal execution for setjmp() */ #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 user's home 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.\n"); 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" DIR_PATHSEP "%s", lbuffer, 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 */ if (inp_spsource(tempfile, FALSE, dname, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); } tfree(dname); gotone = TRUE; } if (ft_batchmode && err) { sp_shutdown(EXIT_BAD); } } /* --- if (!ft_servermode) --- */ if (!gotone && ft_batchmode) { if (inp_spsource(circuit_file, FALSE, NULL, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); } } } 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++) { txfree(argv[i]); } tfree(argv); } #endif app_rl_readlines(); } else { ft_sigintr_cleanup(); } } } /* end of function main */ tmp_ns50wwy/src/spice.def0000644000175000017500000000007214163340332015522 0ustar carstencarstenLIBRARY spice DESCRIPTION "tclspice" EXPORTS _Spice_Init tmp_ns50wwy/src/frontend/0000755000175000017500000000000014163340332015557 5ustar carstencarstentmp_ns50wwy/src/frontend/com_hardcopy.h0000644000175000017500000000015114163340332020374 0ustar carstencarsten#ifndef ngspice_COM_HARDCOPY_H #define ngspice_COM_HARDCOPY_H void com_hardcopy(wordlist *wl); #endif tmp_ns50wwy/src/frontend/com_chdir.h0000644000175000017500000000033114163340332017654 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 tmp_ns50wwy/src/frontend/vectors.h0000644000175000017500000000054214163340332017416 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 tmp_ns50wwy/src/frontend/variable.h0000644000175000017500000000312014163340332017511 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 tmp_ns50wwy/src/frontend/aspice.h0000644000175000017500000000034414163340332017175 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 tmp_ns50wwy/src/frontend/com_help.c0000644000175000017500000000716314163340332017520 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" #define N_CMD_DFLT 512 void com_help(wordlist *wl) { bool allflag = FALSE; /* Make empty list and "all" behave the same except for the part * related to "help all" */ if (wl && eq(wl->wl_word, "all")) { allflag = TRUE; wl = (wordlist *) NULL; } /* We want to use more mode whether "moremode" is set or not. * In that case the code below should be changed... */ out_moremode = TRUE; out_init(); out_moremode = FALSE; if (wl == NULL) { struct comm *ccc_dflt[N_CMD_DFLT]; /* Should be enough. */ struct comm **ccc; /* dynamic alloc in case it is not */ int numcoms; if (!allflag) { out_printf("For a list of all commands " "type \"help all\", for a short\n" "description of \"command\", " "type \"help command\".\n"); return; } /* Count the number of commands */ for (numcoms = 0; cp_coms[numcoms].co_func != NULL; numcoms++) { ; } if (numcoms > N_CMD_DFLT) { ccc = TMALLOC(struct comm *, numcoms); } else { ccc = ccc_dflt; } /* 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); /* Print help for each of the "major" commands */ { int i; 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"); } } /* Free allocation if it was required */ if (ccc != ccc_dflt) { txfree(ccc); } } else { while (wl != NULL) { struct comm *c; 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"); } } /* end of case that a function with the given name was found */ wl = wl->wl_next; /* step to next word in list of help items */ } /* end of loop over list of help items */ } out_send("\n"); } /* end of function com_help */ tmp_ns50wwy/src/frontend/nutmegif.c0000644000175000017500000000106314163340332017541 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); } tmp_ns50wwy/src/frontend/com_alias.c0000644000175000017500000001313714163340332017657 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); /* 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; } } tmp_ns50wwy/src/frontend/Makefile.am0000644000175000017500000000766714163340332017633 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_wr_ic.c \ com_wr_ic.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 \ get_avail_mem_size.c \ get_resident_set_size.c \ get_phys_mem_size.c \ hpgl.c \ hpgl.h \ inp.c \ inp.h \ inpcom.c \ inpcom.h \ inpc_probe.c \ 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 \ svg.c \ svg.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 tmp_ns50wwy/src/frontend/com_cdump.c0000644000175000017500000001117514163340332017676 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"); } tmp_ns50wwy/src/frontend/aspice.c0000644000175000017500000002536614163340332017203 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 tmp_ns50wwy/src/frontend/device.c0000644000175000017500000013243414163340332017171 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 || !ft_curckt->ci_ckt) { 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 || !ft_curckt->ci_ckt) { 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; free_struct_variable(v); 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; free_struct_variable(v); 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); strtolower(dev); words = eqword->wl_next; /* skip next line if words is a vector */ if (!eq(words->wl_word, "[")) names = ft_getpnames_quotes(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') && (eq(param, "w") || eq(param, "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 (!strcmp(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); if (modfile == NULL) { fprintf(cp_err, "Warning: Could not open file %s, altermod ignored\n", filename); tfree(input); tfree(filename); return; } { 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) /* We are looking for *model because the input paerser has invalidated all unused models by replacing '.' by '*'. */ 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_node(&modelline)) != NULL) { /* exclude level, version and mfg */ if (ciprefix("version", inptoken) || ciprefix("level", inptoken) || ciprefix("mfg", inptoken)) { tfree(inptoken); continue; } arglist[2] = inptoken; /* create a new wordlist from array arglist */ newcommand = wl_build((const char * const *) 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 tmp_ns50wwy/src/frontend/com_option.h0000644000175000017500000000014214163340332020073 0ustar carstencarsten#ifndef ngspice_COM_OPTION_H #define ngspice_COM_OPTION_H void com_option(wordlist *wl); #endif tmp_ns50wwy/src/frontend/signal_handler.c0000644000175000017500000001021314163340332020672 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) /* 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(TRUE); } /* 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 code) { 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 sigsegvsh(void) { fprintf(cp_err, "\ninternal error -- segmentation violation\n"); controlled_exit(EXIT_SEGV); } RETSIGTYPE sig_sys(void) { fprintf(cp_err, "\ninternal error -- bad argument to system call\n"); fatal(); } tmp_ns50wwy/src/frontend/postsc.h0000644000175000017500000000106114163340332017241 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; disp_fn_Finalize_t PS_Finalize; #endif tmp_ns50wwy/src/frontend/com_commands.h0000644000175000017500000000051014163340332020363 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 tmp_ns50wwy/src/frontend/com_set.h0000644000175000017500000000013114163340332017354 0ustar carstencarsten#ifndef ngspice_COM_SET_H #define ngspice_COM_SET_H void com_set(wordlist *wl); #endif tmp_ns50wwy/src/frontend/dotcards.c0000644000175000017500000004651514163340332017541 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/dstring.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) { wordlist* freecom; freecom = command = cp_lexer(coms->wl_word); if (!command) { /* Line not converted to a wordlist */ goto bad; } if (command->wl_word == (char*)NULL) { /* Line not converted to a wordlist */ wl_free(freecom); 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; wl_free(freecom); 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; wl_free(freecom); 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; wl_free(freecom); 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") && !ciprefix(".meas", command->wl_word) && !eq(command->wl_word, ".tf")) { wl_free(freecom); goto bad; } coms = coms->wl_next; /* go to next line */ wl_free(freecom); } /* end of loop over '.' lines */ 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) { /* Create a buffer for printing numbers */ DS_CREATE(numbuf, 100); 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 == '(')) { double d1, d2; char *s = wl->wl_word + 1; if (ft_numparse(&s, FALSE, &d1) < 0 || *s != ',') { fprintf(cp_err, "Error: bad limits \"%s\"\n", wl->wl_word); goto EXITPOINT; } s++; /* step past comma */ if (ft_numparse(&s, FALSE, &d2) < 0 || *s != ')' || s[1] != '\0') { /* must end with ")" */ fprintf(cp_err, "Error: bad limits \"%s\"\n", wl->wl_word); goto EXITPOINT; } tfree(wl->wl_word); wl->wl_word = copy("xlimit"); ds_clear(&numbuf); if (printnum_ds(&numbuf, d1) != 0) { fprintf(cp_err, "Unable to print limit 1: %g\n", d1); goto EXITPOINT; } wl_append_word(NULL, &wl, copy(ds_get_buf(&numbuf))); ds_clear(&numbuf); if (printnum_ds(&numbuf, d2) != 0) { fprintf(cp_err, "Unable to print limit 2: %g\n", d2); goto EXITPOINT; } wl_append_word(NULL, &wl, copy(ds_get_buf(&numbuf))); } /* end of case of start of potential (a,b) */ wl = wl->wl_next; } /* end of loop over words */ EXITPOINT: ds_free(&numbuf); /* Free DSTRING resources */ } /* end of function fixdotplot */ static void fixdotprint(wordlist *wl) { /* Process each word in the wordlist */ while (wl) { wl->wl_word = fixem(wl->wl_word); wl = wl->wl_next; } } /* end of function fixdotprint */ static char *fixem(char *string) { char buf[BSIZE_SP], *s, *t; char *ss = string; /* save addr of string in case it is freed */ 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; } txfree(ss); string = copy(buf); return string; } /* end of function fixem */ 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); } /* end of loop parsing string */ txfree(s0); return list; } /* end of function gettoks */ tmp_ns50wwy/src/frontend/commands.c0000644000175000017500000011513114163340332017526 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_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 "../spicelib/analysis/com_optran.h" #include "com_wr_ic.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." } , { "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." } , { "remzerovec", com_remzerovec, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "remove zero length 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." } , { "cutout", com_cutout, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, " [ vec ... ] : Cut out portion of a vector." }, { "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" }, { "optran", com_optran, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 6, 6, NULL, ": Prepare optran by setting 6 flags " }, { "wrnodev", com_wric, TRUE, FALSE, { 0, 0, 0, 0 }, E_DEFHMASK, 0, 1, NULL, ": Save current node voltage values to file " }, #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." } , { "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." } , { "remzerovec", com_remzerovec, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, "remove zero length 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." } , { "cutout", com_cutout, FALSE, FALSE, { 040000, 040000, 040000, 040000 }, E_DEFHMASK, 0, LOTS, NULL, " [ vec ... ] : Cut out portion of a vector." }, { "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 } }; tmp_ns50wwy/src/frontend/ftesopt.c0000644000175000017500000000360014163340332017406 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" }, { "netpreptime", FTEOPT_PRT, "Subckt and Param expansion 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_PRT: return var_alloc_real(copy(p->description), stat->FTESTATnetPrepTime, next); case FTEOPT_NPT: return var_alloc_real(copy(p->description), stat->FTESTATnetParseTime, next); default: return NULL; } } tmp_ns50wwy/src/frontend/com_xgraph.h0000644000175000017500000000014214163340332020054 0ustar carstencarsten#ifndef ngspice_COM_XGRAPH_H #define ngspice_COM_XGRAPH_H void com_xgraph(wordlist *wl); #endif tmp_ns50wwy/src/frontend/linear.h0000644000175000017500000000031114163340332017175 0ustar carstencarsten/************* * Header file for linear.c * 1999 E. Rouat ************/ #ifndef ngspice_LINEAR_H #define ngspice_LINEAR_H void com_linearize(wordlist *wl); void com_cutout(wordlist *wl); #endif tmp_ns50wwy/src/frontend/breakp2.h0000644000175000017500000000047114163340332017260 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 tmp_ns50wwy/src/frontend/mw_coms.c0000644000175000017500000000666414163340332017403 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; } tmp_ns50wwy/src/frontend/com_history.h0000644000175000017500000000026414163340332020271 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 tmp_ns50wwy/src/frontend/breakp.h0000644000175000017500000000052314163340332017174 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 tmp_ns50wwy/src/frontend/options.c0000644000175000017500000003537314163340332017431 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" 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; static void setdb(char *str); static struct variable *cp_enqvec_as_var(const char *vec_name, int *p_f_found); /* 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. * * Note that if tbfreed is set to 1 that any changes will have no effect * on the original variable. The variables that are copied are as follows: * "curplotname", "curplottitle", "curplotdate", "curplot", and * "plots". * * The $&v notation returns the values of a real vector v or the real part * of a complex vector v. If there is only a single element, it is returned * as a CP_REAL variable; otherwise a list is returned. In either case, * tbfreed is set to 1 for this case. */ struct variable *cp_enqvar(const char *word, int *tbfreed) { if (*word == '&') { /* The variable is a vector */ return cp_enqvec_as_var(word + 1, tbfreed); } if (plot_cur) { /* a current plot is defined */ struct variable *vv; for (vv = plot_cur->pl_env; vv; vv = vv->va_next) { if (eq(vv->va_name, word)) { *tbfreed = 0; return vv; } } /* end of loop over variables of the current plot */ *tbfreed = 1; /* Look for the variables beginning with curplot: * curplot, curplotname, curplottitle, and curplotdate */ if (strncmp(word, "curplot", 7) == 0) { /* begins with curplot */ const char * const rest = word + 7; if (*rest == '\0') { /* curplot */ return var_alloc_string(copy(word), copy(plot_cur->pl_typename), NULL); } else if (eq(rest, "name")) { /* curplotname */ return var_alloc_string(copy(word), copy(plot_cur->pl_name), NULL); } else if (eq(rest, "title")) { /* curplottitle */ return var_alloc_string(copy(word), copy(plot_cur->pl_title), NULL); } else if (eq(rest, "date")) { /* curplotname */ return var_alloc_string(copy(word), copy(plot_cur->pl_date), NULL); } } if (eq(word, "plots")) { /* list of defined 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); } } /* end of case that a current plot is defined */ *tbfreed = 0; if (ft_curckt) { /* a current circuit is defined */ struct variable *vv; for (vv = ft_curckt->ci_vars; vv; vv = vv->va_next) { if (eq(vv->va_name, word)) { return vv; } } } return (struct variable *) NULL; } /* end of function cp_enqvar */ /* This functon returns the contents of a vector as a variable. * If the vector has more than one element, it is returned as a list. * The "shape" of the vector (number of dimensions and number of * elements per dimension) has no effect on the returned list. * * Paramters * vec_name: Name of vector * p_f_found: Address to receive 1 if the vector was found and * the corresponding variable must be freed and 0 if the vector * was not found. * * Return values * The address of the created list variable or NULL if none * was found. * * Remarks * The name of the created variable is the same as that of the vector. */ static struct variable *cp_enqvec_as_var(const char *vec_name, int *p_f_found) { const struct dvec * const d = vec_get(vec_name); /* locate vector */ if (!d) { /* not found */ *p_f_found = 0; return (struct variable *) NULL; } /* Variables from vectors are always copies since variable * structures must be created. */ *p_f_found = 1; if (d->v_link2) { /* The vector has other vectors linked to it via the v_link2 * pointer. That is OK, but a warning is printed that other * vectors will not be returned */ fprintf(cp_err, "Warning: only one vector may be accessed with the $& notation.\n"); } if (d->v_length == 1) { /* 1 element, so return as a CP_REAL */ double value = isreal(d) ? d->v_realdata[0] : realpart(d->v_compdata[0]); return var_alloc_real(copy(vec_name), value, NULL); } else { /* >1 element, so return as a list of all CP_REALs */ struct variable *list = NULL; if (isreal(d)) { int i; double *realdata = d->v_realdata; for (i = d->v_length; --i >= 0;) { list = var_alloc_real(NULL, realdata[i], list); } } else { int i; ngcomplex_t *compdata = d->v_compdata; for (i = d->v_length; --i >= 0;) { list = var_alloc_real(NULL, realpart(compdata[i]), list); } } return var_alloc_vlist(copy(vec_name), list, NULL); } } /* end of function cp_enqvec_as_var */ /* Return $plots, $curplot, $curplottitle, $curplotname, and * $curplotdate as a linked list of variables in that order */ struct variable * cp_usrvars(void) { struct variable *v, *tv; int tbfreed; v = (struct variable *) 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; } /* end of function cp_usrvars */ /* 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; /* .option with params is excluded here. These options will be handled after parameter substitution by INP2dot(), dot_options(), and INPdoOpts(). */ if (ciprefix(".opt", dd->line) && !strchr(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, "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 && ft_curckt->ci_ckt) { 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); } tmp_ns50wwy/src/frontend/postsc.c0000644000175000017500000006223614163340332017247 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 red, green, blue; } COLOR; /* duplicated colors from src/frontend/plotting/x11.c in rgb-style */ static 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 */ {255, 255, 0}, /*19: yello */ { 96, 96, 96}, /*20: gray for smith grid */ {150, 150, 150}, /*21: gray for smith grid */ {128, 128, 128}}; /*22: gray for normal grid */ 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; static double linewidth; static double gridlinewidth; static int maxcolor = 2; void PS_LinestyleColor(int linestyleid, int colorid); void PS_SelectColor(int colorid); void PS_Stroke(void); static size_t utf8_to_latin9(char * const output, const char *const input, const size_t length); /* Set scale, color and size of the plot */ int PS_Init(void) { char pswidth[30], psheight[30]; maxcolor = NUMELEMS(colors); if (!cp_getvar("hcopyscale", CP_STRING, psscale, sizeof(psscale))) { scale = 1.0; } else if (sscanf(psscale, "%lf", &scale) != 1) { (void) fprintf(cp_err, "Error getting scale value\n"); scale = 1.0; } else if ((scale <= 0.0) || (scale > 10.0)) { (void) fprintf(cp_err, "Scale value %lf is out of range\n", scale); 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 text color and set plot to color */ colorflag = 1; dispdev->numcolors = maxcolor; cp_getvar("hcopypstxcolor", CP_NUM, &settxcolor, 0); } if (settxcolor > maxcolor || settxcolor < 0) { fprintf(stderr, "Bad PS text color selection %d\n", settxcolor); fprintf(stderr, " Maximum for hcopypstxcolor is %d\n\n", maxcolor - 1); colorflag = 0; dispdev->numcolors = 2; } if (setbgcolor > maxcolor || setbgcolor < 0) { fprintf(stderr, "Bad PS background color selection %d\n", setbgcolor); fprintf(stderr, " Maximum for hcopypscolor is %d\n", maxcolor - 1); fprintf(stderr, " Set to 1 (white)\n\n"); setbgcolor = 1; } /* 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; } /* get linewidth information from spinit */ if (!cp_getvar("xbrushwidth", CP_REAL, &linewidth, 0)) linewidth = 1; if (linewidth < 0) linewidth = 0; /* get linewidth for grid from spinit */ if (!cp_getvar("xgridwidth", CP_REAL, &gridlinewidth, 0)) gridlinewidth = 1; if (gridlinewidth < 0) gridlinewidth = 0; /* 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 > 18)) 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; } /* end of function PS_Init */ /* 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); free(graph->devdep); graph->devdep = NULL; graph->n_byte_devdep = 0; 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.5 * 72 - fontheight); y1 = x1; x2 = (int)(graph->absolute.width + .5 * 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: ngspice\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)); tfree(graph->devdep); graph->devdep = TMALLOC(PSdevdep, 1); graph->n_byte_devdep = sizeof(PSdevdep); 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) { if (hcopygraphid > 0) 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, bool isgrid) { /* 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; if(isgrid) fprintf(plotfile, "%f setlinewidth\n", gridlinewidth); else fprintf(plotfile, "%f setlinewidth\n", linewidth); } 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(const char *text_in, int x, int y, int angle) { int savedlstyle, savedcolor; #ifdef EXT_ASC const char *text = text_in; #else char *text; { const size_t n_char_text = strlen(text_in); const size_t n_char_textp = n_char_text + 2; text = TMALLOC(char, n_char_textp); utf8_to_latin9(text, text_in, n_char_text); } #endif /* 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); #ifndef EXT_ASC txfree(text); #endif 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; } int PS_Finalize(void) { fprintf(plotfile, "stroke\n"); 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; /* 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 >= maxcolor) { 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; } } /* UTF-8 to ISO-8859-1/ISO-8859-15 mapper. * Return 0..255 for valid ISO-8859-15 code points, 256 otherwise. */ static inline unsigned int to_latin9(const unsigned int code) { /* Code points 0 to U+00FF are the same in both. */ if (code < 256U) return code; switch (code) { case 0x0152U: return 188U; /* U+0152 = 0xBC: OE ligature */ case 0x0153U: return 189U; /* U+0153 = 0xBD: oe ligature */ case 0x0160U: return 166U; /* U+0160 = 0xA6: S with caron */ case 0x0161U: return 168U; /* U+0161 = 0xA8: s with caron */ case 0x0178U: return 190U; /* U+0178 = 0xBE: Y with diaresis */ case 0x017DU: return 180U; /* U+017D = 0xB4: Z with caron */ case 0x017EU: return 184U; /* U+017E = 0xB8: z with caron */ case 0x20ACU: return 164U; /* U+20AC = 0xA4: Euro */ default: return 256U; } } /* Convert an UTF-8 string to ISO-8859-15. * All invalid sequences are ignored. * Note: output == input is allowed, * but input < output < input + length * is not. * Output has to have room for (length+1) chars, including the trailing NUL byte. from http://stackoverflow.com/questions/11156473/is-there-a-way-to-convert-from-utf8-to-iso-8859-1#11173493 */ size_t utf8_to_latin9(char * const output, const char *const input, const size_t length) { unsigned char *out = (unsigned char *)output; const unsigned char *in = (const unsigned char *)input; const unsigned char *const end = (const unsigned char *)input + length; unsigned int c; while (in < end) if (*in < 128) *(out++) = *(in++); /* Valid codepoint */ else if (*in < 192) in++; /* 10000000 .. 10111111 are invalid */ else if (*in < 224) { /* 110xxxxx 10xxxxxx */ if (in + 1 >= end) break; if ((in[1] & 192U) == 128U) { c = to_latin9((((unsigned int)(in[0] & 0x1FU)) << 6U) | ((unsigned int)(in[1] & 0x3FU))); if (c < 256) *(out++) = (unsigned char)c; } in += 2; } else if (*in < 240) { /* 1110xxxx 10xxxxxx 10xxxxxx */ if (in + 2 >= end) break; if ((in[1] & 192U) == 128U && (in[2] & 192U) == 128U) { c = to_latin9((((unsigned int)(in[0] & 0x0FU)) << 12U) | (((unsigned int)(in[1] & 0x3FU)) << 6U) | ((unsigned int)(in[2] & 0x3FU))); if (c < 256) *(out++) = (unsigned char)c; } in += 3; } else if (*in < 248) { /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ if (in + 3 >= end) break; if ((in[1] & 192U) == 128U && (in[2] & 192U) == 128U && (in[3] & 192U) == 128U) { c = to_latin9((((unsigned int)(in[0] & 0x07U)) << 18U) | (((unsigned int)(in[1] & 0x3FU)) << 12U) | (((unsigned int)(in[2] & 0x3FU)) << 6U) | ((unsigned int)(in[3] & 0x3FU))); if (c < 256) *(out++) = (unsigned char)c; } in += 4; } else if (*in < 252) { /* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ if (in + 4 >= end) break; if ((in[1] & 192U) == 128U && (in[2] & 192U) == 128U && (in[3] & 192U) == 128U && (in[4] & 192U) == 128U) { c = to_latin9((((unsigned int)(in[0] & 0x03U)) << 24U) | (((unsigned int)(in[1] & 0x3FU)) << 18U) | (((unsigned int)(in[2] & 0x3FU)) << 12U) | (((unsigned int)(in[3] & 0x3FU)) << 6U) | ((unsigned int)(in[4] & 0x3FU))); if (c < 256) *(out++) = (unsigned char)c; } in += 5; } else if (*in < 254) { /* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ if (in + 5 >= end) break; if ((in[1] & 192U) == 128U && (in[2] & 192U) == 128U && (in[3] & 192U) == 128U && (in[4] & 192U) == 128U && (in[5] & 192U) == 128U) { c = to_latin9((((unsigned int)(in[0] & 0x01U)) << 30U) | (((unsigned int)(in[1] & 0x3FU)) << 24U) | (((unsigned int)(in[2] & 0x3FU)) << 18U) | (((unsigned int)(in[3] & 0x3FU)) << 12U) | (((unsigned int)(in[4] & 0x3FU)) << 6U) | ((unsigned int)(in[5] & 0x3FU))); if (c < 256) *(out++) = (unsigned char)c; } in += 6; } else in++; /* 11111110 and 11111111 are invalid */ /* Terminate the output string. */ *out = '\0'; return (size_t)(out - (unsigned char *)output); } tmp_ns50wwy/src/frontend/com_measure2.h0000644000175000017500000000043614163340332020314 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 tmp_ns50wwy/src/frontend/com_shell.c0000644000175000017500000000340214163340332017667 0ustar carstencarsten/************* * com_shell.c ************/ #include #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 *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 { char * const com = wl_flatten(wl); execl("/bin/sh", "sh", "-c", com, 0); txfree(com); } } 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) { char * const com = wl_flatten(wl); if (system(com) == -1) { (void) fprintf(cp_err, "Unable to execute \"%s\".\n", com); } txfree(com); } else { if (system(shell) == -1) { (void) fprintf(cp_err, "Unable to execute \"%s\".\n", shell); } } #endif } /* end of function com_shell */ tmp_ns50wwy/src/frontend/spec.h0000644000175000017500000000023614163340332016663 0ustar carstencarsten/************* * Header file for spec.c * 1999 E. Rouat ************/ #ifndef ngspice_SPEC_H #define ngspice_SPEC_H void com_spec(wordlist *wl); #endif tmp_ns50wwy/src/frontend/outitf.h0000644000175000017500000000454114163340332017246 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(runDesc *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 tmp_ns50wwy/src/frontend/com_ahelp.c0000644000175000017500000000365214163340332017660 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"); } tmp_ns50wwy/src/frontend/com_shell.h0000644000175000017500000000023314163340332017673 0ustar carstencarsten/************* * Header file for com_shell.c ************/ #ifndef ngspice_COM_SHELL_H #define ngspice_COM_SHELL_H void com_shell(wordlist *wl); #endif tmp_ns50wwy/src/frontend/com_wr_ic.c0000644000175000017500000000306514163340332017670 0ustar carstencarsten/* ngspice file Copyright Holger Vogt 2021 License: BSD 3-clause */ /* Print the current node status to a file with format .ic V(node) = value */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/ftedev.h" #include "ngspice/ftedebug.h" #include "ngspice/cktdefs.h" void com_wric(wordlist* wl); /* Print the current node status to a file with format .ic V(node) = value */ void com_wric(wordlist* wl) { CKTnode* node; CKTcircuit* ckt = NULL; FILE* fp; char* file; if (wl) file = wl->wl_word; else file = "dot_ic_out.txt"; if ((fp = fopen(file, "w")) == NULL) { perror(file); return; } 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; } ckt = ft_curckt->ci_ckt; fprintf(fp, "* Intermediate Transient Solution\n"); fprintf(fp, "* Circuit: %s\n", ft_curckt->ci_name); fprintf(fp, "* Recorded at simulation time: %g\n", ckt->CKTtime); for (node = ckt->CKTnodes->next; node; node = node->next) { if (!strstr(node->name, "#branch") && !strchr(node->name, '#')) fprintf(fp, ".ic v(%s) = %g\n", node->name, ckt->CKTrhsOld[node->number]); } fprintf(stdout, "\nNode data saved to file %s\n", file); fclose(fp); } tmp_ns50wwy/src/frontend/resource.h0000644000175000017500000000210114163340332017551 0ustar carstencarsten/************* * Header file for resources.c * 1999 E. Rouat ************/ #ifndef ngspice_RESOURCE_H #define ngspice_RESOURCE_H #include "ngspice/wordlist.h" extern unsigned long long getMemorySize(void); extern unsigned long long getPeakRSS(void); extern unsigned long long getCurrentRSS(void); extern unsigned long long getAvailableMemorySize(void); 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 tmp_ns50wwy/src/frontend/commands.h0000644000175000017500000000020114163340332017522 0ustar carstencarsten#ifndef ngspice_COMMANDS_H #define ngspice_COMMANDS_H extern struct comm spcp_coms[]; extern struct comm nutcp_coms[]; #endif tmp_ns50wwy/src/frontend/runcoms.c0000644000175000017500000002401514163340332017413 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; } /* 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 { /* binary */ 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); } 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) { txfree(ww->wl_word); if (wl) { wl->wl_prev = NULL; } txfree(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; } /* end of function dosim */ /* 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); } } tmp_ns50wwy/src/frontend/hcomp.c0000644000175000017500000000040114163340332017024 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)); } tmp_ns50wwy/src/frontend/inpc_probe.c0000644000175000017500000013004414163340332020045 0ustar carstencarsten/* ngspice file inpc_probe.c Copyright Holger Vogt 2021 License: BSD 3-clause */ #include "ngspice/ngspice.h" #include "ngspice/cpextern.h" #include "ngspice/dstring.h" #include "numparam/general.h" #include "ngspice/hash.h" #include "ngspice/inpdefs.h" #include "ngspice/wordlist.h" void inp_probe(struct card* card); void modprobenames(INPtables* tab); extern struct card* insert_new_line( struct card* card, char* line, int linenum, int linenum_orig); extern int get_number_terminals(char* c); static char* get_terminal_name(char* element, char* numberstr, NGHASHPTR instances); static char* get_terminal_number(char* element, char* numberstr); /* Find any line starting with .probe: assemble all parameters like add V(0) current measure sources to all device nodes in addition to .save all all add V(0) current measure sources to all device nodes in addition to .save all I(R1) add V(0) measure source to node 1 of a two-terminal device R1 I(M4,3) add V(0) measure source to node 3 of a multi-terminal device M4 Vd(R1) add E source inputs to measure voltage difference to both terminals of a two-terminal device R1 Vd(X1:2:3) add E source inputs to terminals 2 and 3 of a multi-terminal device X1 Vd(X1:2,X2:3) add E source inputs to terminal 2 of a multi-terminal device X1 and to terminal 3 of X2 Seach the netlist for the devices found in the .probe parameters. Check the number of terminals for each device. Add 0V voltage sources in series to each of the named terminals. Add E sources to the differential voltage probes. */ void inp_probe(struct card* deck) { struct card *card; int skip_control = 0; int skip_subckt = 0; wordlist* probes = NULL, *probeparams = NULL, *wltmp, *allsaves = NULL; bool haveall = FALSE, havedifferential = FALSE, t = TRUE; NGHASHPTR instances; /* instance hash table */ int ee = 0; /* serial number for sources */ for (card = deck; card; card = card->nextcard) { /* get the .probe netlist lines, comment them out */ if (ciprefix(".probe", card->line)) { probes = wl_cons(card->line, probes); *(card->line) = '*'; } } /* no .probe command */ if (probes == NULL) return; /* set a variable if .probe command is given */ cp_vset("probe_is_given", CP_BOOL, &t); /* Assemble all .probe parameters in a wordlist 'probeparams' */ for (wltmp = probes; wltmp; wltmp = wltmp->wl_next) { char* nextnode; char* tmpstr = wltmp->wl_word; /* skip *probe */ tmpstr = nexttok(tmpstr); if (*tmpstr == '\0') continue; if (ciprefix("(all)", tmpstr)) { haveall = TRUE; tmpstr = nexttok(tmpstr); } nextnode = gettok_char(&tmpstr, ')', TRUE, FALSE); while (nextnode && (*nextnode != '\0')) { if (cieq(nextnode, "(all)")) { haveall = TRUE; } else { probeparams = wl_cons(nextnode, probeparams); } if (ciprefix("vd(", nextnode)) { havedifferential = TRUE; } nextnode = gettok_char(&tmpstr, ')', TRUE, FALSE); } } /* don't free the wl_word, they belong to the cards */ tfree(probes); /* Set up the hash table for all instances (instance name is key, data is the storage location of the card) */ instances = nghash_init(100); nghash_unique(instances, TRUE); 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; } /* exclude any device or command inside .subckt ... .ends */ if (ciprefix(".subckt", curr_line)) { skip_subckt++; continue; } else if (ciprefix(".ends", curr_line)) { skip_subckt--; continue; } else if (skip_subckt > 0) { continue; } if (*curr_line == '*') continue; if (*curr_line == '.') continue; if (*curr_line == '\0') continue; /* here we should go on with only true device instances at top level. Put all instance names as key into a hash table, with the address as parameter. */ /* Get the instance name as key */ char* instname = gettok_instance(&curr_line); if (!instname) continue; nghash_insert(instances, instname, card); } if (haveall || probeparams == NULL) { /* Either we have 'all' among the .probe parameters, or we have a single .probe command without parameters: Add current measure voltage sources for all devices, add differential E sources only for selected devices. */ int numnodes, i; for (card = deck; card; card = card->nextcard) { char* curr_line = card->line; struct card* prevcard = NULL; /* 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 any device or command inside .subckt ... .ends */ if (ciprefix(".subckt", curr_line)) { skip_subckt++; continue; } else if (ciprefix(".ends", curr_line)) { skip_subckt--; continue; } else if (skip_subckt > 0) { continue; } if (*curr_line == '*') continue; if (*curr_line == '.') continue; if (*curr_line == '\0') continue; char* instname = gettok_instance(&curr_line); if (!instname) continue; /* select elements not in need of a measure Vsource */ if (strchr("evihk", *instname)) continue; numnodes = get_number_terminals(card->line); char* thisline = curr_line; prevcard = card; /* all elements with 2 nodes: add a voltage source to the second node in the elements line */ if (numnodes == 2) { char *strnode1, *strnode2, *nodename2; strnode1 = gettok(&thisline); strnode2 = gettok(&thisline); if (!strnode2 || *strnode2 == '\0') { fprintf(stderr, "Warning: Cannot read 2 nodes in line %s\n", curr_line); fprintf(stderr, " Instance not ready for .probe command\n"); tfree(strnode1); tfree(strnode2); continue; } nodename2 = get_terminal_name(instname, "2", instances); char* newnode = tprintf("int_%s_%s", strnode2, instname); char* vline = tprintf("vcurr_%s:%s_%s %s %s 0", instname, nodename2, strnode2, newnode, strnode2); char *newline = tprintf("%s %s %s %s", instname, strnode1, newnode, thisline); char* nodesaves = tprintf("%s#branch", instname); allsaves = wl_cons(nodesaves, allsaves); tfree(card->line); card->line = newline; card = insert_new_line(card, vline, 0, 0); tfree(strnode1); tfree(strnode2); tfree(newnode); tfree(nodename2); } else { char* nodename; DS_CREATE(dnewline, 200); sadd(&dnewline, instname); cadd(&dnewline, ' '); for (i = 1; i <= numnodes; i++) { char* thisnode; char nodebuf[20]; thisnode = gettok(&thisline); if (!thisnode || *thisnode == '\0') { fprintf(stderr, "Warning: Cannot read node %d in line %s\n", i, curr_line); fprintf(stderr, " Instance not ready for .probe command\n"); tfree(thisnode); continue; } char* newnode = tprintf("int_%s_%s_%d", thisnode, instname, i); sadd(&dnewline, newnode); cadd(&dnewline, ' '); /* to make the nodes unique */ snprintf(nodebuf, 12, "%d", i); nodename = get_terminal_name(instname, nodebuf, instances); char* vline = tprintf("vcurr_%s:%s:%s_%s %s %s 0", instname, nodename, thisnode, nodebuf, newnode, thisnode); card = insert_new_line(card, vline, 0, 0); /* special treatment for xlines: keep the x if next char is a number */ if (*instname == 'x' && !isdigit_c(instname[1])) { char* nodesaves = tprintf("%s:%s#branch", instname + 1, nodename); allsaves = wl_cons(nodesaves, allsaves); } else { char* nodesaves = tprintf("%s:%s#branch", instname, nodename); allsaves = wl_cons(nodesaves, allsaves); } tfree(newnode); tfree(nodename); } sadd(&dnewline, thisline); tfree(prevcard->line); prevcard->line = copy(ds_get_buf(&dnewline)); ds_free(&dnewline); } if (allsaves) { allsaves = wl_cons(copy(".save"), allsaves); char* newline = wl_flatten(allsaves); wl_free(allsaves); allsaves = NULL; card = insert_new_line(card, newline, 0, 0); } } } if (probeparams) { /* There are .probe with parameters: Add current measure voltage sources only for the selected devices. Add differential probes only if 'all' had been found. */ for (wltmp = probeparams; wltmp; wltmp = wltmp->wl_next) { char *tmpstr = wltmp->wl_word; ee++; /* check for differential voltage probes: v(nR1) voltage at node named nR1 vd(R1) voltage across a two-terminal device named R1 vd(m4:1:0) voltage at instance node 1 of device m4 vd(m4:1:3) voltage between instance nodes 1 and 3 of device m4 vd(m4:1, m5:3) voltage between instance node 1 of device m4 and node 3 of device m5 */ /* no nodes after first token: must be a node itself */ /* v(nodename), voltage at node named nodename */ if (ciprefix("v(", tmpstr)) { char* instname1 = gettok_char(&tmpstr, ')', TRUE, FALSE); allsaves = wl_cons(copy(instname1), allsaves); continue; } /* vd(R1), vd(R1:1,R2:1), vd(MN4:d:s), vd(QN4:1:3), vd(nodename,MN5:d), vd(nodename1,nodename2) */ else if (ciprefix("vd(", tmpstr)) { char* instname1, *instname2; int numnodes1, numnodes2; struct card* tmpcard1; /* skip vd_ */ tmpstr += 3; /* vd(R1) vd(nodename1,nodename2) */ if (!strchr(tmpstr, ':')) { char* newline = NULL, *strnode1, *strnode2, *tmpstr2; tmpstr2 = tmpstr; strnode1 = gettok_char(&tmpstr2, ',', FALSE, FALSE); if (strnode1) { tmpstr2++; /* beyond ',' */ strnode2 = gettok_char(&tmpstr2, ')', FALSE, FALSE); if (!strnode2) { } else { newline = tprintf("Ediff%d_nodes vd_%s:%s 0 %s %s 1", ee, strnode1, strnode2, strnode1, strnode2); char* nodesaves = tprintf("vd_%s:%s", strnode1, strnode2); allsaves = wl_cons(nodesaves, allsaves); tfree(strnode1); tfree(strnode2); tmpcard1 = deck->nextcard; tmpcard1 = insert_new_line(tmpcard1, newline, 0, 0); } continue; } instname1 = gettok_char(&tmpstr, ')', FALSE, FALSE); tmpcard1 = nghash_find(instances, instname1); if (!tmpcard1) { fprintf(stderr, "Warning: Could not find the instance line for %s,\n .probe %s will be ignored\n", instname1, wltmp->wl_word); tfree(instname1); continue; } char* thisline = tmpcard1->line; numnodes1 = get_number_terminals(thisline); if (numnodes1 != 2) { fprintf(stderr, "Warning: Instnace %s has more than 2 nodes,\n .probe %s will be ignored\n", instname1, wltmp->wl_word); tfree(instname1); continue; } thisline = nexttok(thisline); /* skip instance name */ strnode1 = gettok(&thisline); strnode2 = gettok(&thisline); if (!strnode2 || *strnode2 == '\0') { fprintf(stderr, "Warning: Cannot read 2 nodes in line %s\n", tmpcard1->line); fprintf(stderr, " Instance not ready for .probe command\n"); tfree(strnode1); tfree(strnode2); continue; } newline = tprintf("Ediff%d_%s vd_%s 0 %s %s 1", ee, instname1, instname1, strnode1, strnode2); char* nodesaves = tprintf("vd_%s", instname1); allsaves = wl_cons(nodesaves, allsaves); tfree(strnode1); tfree(strnode2); tmpcard1 = insert_new_line(tmpcard1, newline, 0, 0); continue; } /* node containing ':' vd(R1:1,R2:2) vd(M4:1:3) vd(m5:d:s)*/ else { char* tmpstr2, *nodename1, *nodename2; struct card* tmpcard2; tmpstr2 = tmpstr; instname1 = gettok_char(&tmpstr, ':', FALSE, FALSE); if (!instname1) { fprintf(stderr, "Warning: Cannot read instance name in %s, ignored\n", tmpstr); continue; } tmpcard1 = nghash_find(instances, instname1); if (!tmpcard1) { fprintf(stderr, "Warning: Could not find the instance line for %s,\n .probe %s will be ignored\n", instname1, wltmp->wl_word); tfree(instname1); continue; } char* thisline = tmpcard1->line; numnodes1 = get_number_terminals(thisline); tmpstr++; tmpstr2 = tmpstr; nodename1 = gettok_char(&tmpstr2, ',', FALSE, FALSE); if (nodename1) { /* vd(R1:1,R2:2) */ int nodenum1, nodenum2, i; char* ptr, *node1, *node2, *strnode1, *strnode2; bool err = FALSE; tmpstr2++; /* beyond ',' */ instname2 = gettok_char(&tmpstr2, ':', FALSE, FALSE); if (!instname2) { fprintf(stderr, "Warning: Cannot read instance name in %s, ignored\n", tmpstr); tfree(nodename1); continue; } tmpstr2++; /* beyond ':' */ tmpcard2 = nghash_find(instances, instname2); if (!tmpcard2) { fprintf(stderr, "Warning: Could not find the instance line for %s,\n .probe %s will be ignored\n", instname2, wltmp->wl_word); tfree(instname2); tfree(nodename1); continue; } char* thisline2 = tmpcard2->line; numnodes2 = get_number_terminals(thisline2); nodename2 = gettok_char(&tmpstr2, ')', FALSE, FALSE); if (!nodename2) { fprintf(stderr, "Warning: Could not find the second node name for %s,\n .probe %s will be ignored\n", instname2, wltmp->wl_word); tfree(instname2); tfree(nodename1); continue; } /* nodenames may be numbers or characters, we always need the numbers */ node1 = get_terminal_number(instname1, nodename1); if (eq(node1, "0")) { fprintf(stderr, "Warning: Node %s is not available for device %s,\n .probe %s will be ignored\n", node1, instname1, wltmp->wl_word); continue; } node2 = get_terminal_number(instname2, nodename2); if (eq(node2, "0")) { fprintf(stderr, "Warning: Node %s is not available for device %s,\n .probe %s will be ignored\n", node1, instname2, wltmp->wl_word); continue; } /* nodes are numbered 1, 2, 3, ... */ nodenum1 = (int)strtol(node1, &ptr, 10); nodenum2 = (int)strtol(node2, &ptr, 10); if (nodenum1 > numnodes1) { fprintf(stderr, "Warning: There are only %d nodes available for %s,\n .probe %s will be ignored!\n", numnodes1, instname1, wltmp->wl_word); continue; } if (nodenum2 > numnodes2) { fprintf(stderr, "Warning: There are only %d nodes available for %s,\n .probe %s will be ignored!\n", numnodes2, instname2, wltmp->wl_word); continue; } if (nodenum1 == nodenum2 && eq(instname1, instname2)) { fprintf(stderr, "Warning: Duplicate node numbers and instances,\n .probe %s will be ignored!\n", wltmp->wl_word); continue; } /* if node1 is the 0 node*/ if (nodenum1 == 0) { strnode1 = copy("0"); } else { /* skip instance and leading nodes not wanted */ for (i = 0; i < nodenum1; i++) { thisline = nexttok(thisline); if (*thisline == '\0') { fprintf(stderr, "Warning: node number %d not available for instance %s, ignored!\n", nodenum1, instname1); err = TRUE; break; } } if (err) continue; strnode1 = gettok(&thisline); } /* if node2 is the 0 node*/ if (nodenum2 == 0) { strnode2 = copy("0"); } else { /* skip instance and leading nodes not wanted */ for (i = 0; i < nodenum2; i++) { thisline2 = nexttok(thisline2); if (*thisline2 == '\0') { fprintf(stderr, "Warning: node number %d not available for instance %s, ignored!\n", nodenum2, instname2); err = TRUE; break; } } if (err) continue; strnode2 = gettok(&thisline2); } /* preserve the 0 node */ if (*node1 == '0') { nodename1 = copy("0"); } else { if (*node1 != '\0' && atoi(node1) == 0) { char* nn = get_terminal_number(instname1, node1); tfree(node1); node1 = copy(nn); } nodename1 = get_terminal_name(instname1, node1, instances); } /* preserve the 0 node */ if (*node2 == '0') { nodename2 = copy("0"); } else { if (*node2 != '\0' && atoi(node2) == 0) { char* nn = get_terminal_number(instname2, node2); tfree(node2); node2 = copy(nn); } nodename2 = get_terminal_name(instname2, node2, instances); } char *newline = tprintf("Ediff%d_%s_%s vd_%s:%s_%s:%s 0 %s %s 1", ee, instname1, instname2, instname1, nodename1, instname2, nodename2, strnode1, strnode2); char* nodesaves = tprintf("vd_%s:%s_%s:%s", instname1, nodename1, instname2, nodename2); allsaves = wl_cons(nodesaves, allsaves); tmpcard1 = insert_new_line(tmpcard1, newline, 0, 0); tfree(strnode1); tfree(strnode2); tfree(nodename1); tfree(nodename2); } else { /* vd(M4:1:3) */ int nodenum1, nodenum2, i; char* ptr, * node1, * node2, * strnode1, * strnode2; bool err = FALSE; char* thisline2 = thisline; tmpstr2 = tmpstr; nodename1 = gettok_char(&tmpstr2, ':', FALSE, FALSE); if (!nodename1) { fprintf(stderr, "Warning: Could not find the first node name for %s,\n .probe %s will be ignored\n", instname1, wltmp->wl_word); tfree(instname1); continue; } tmpstr2++; nodename2 = gettok_char(&tmpstr2, ')', FALSE, FALSE); if (!nodename1 || !nodename2) { fprintf(stderr, "Warning: Could not find the second node name for %s,\n .probe %s will be ignored\n", instname1, wltmp->wl_word); tfree(instname1); tfree(nodename1); continue; } /* nodenames may be numbers or characters, we always need the numbers */ node1 = get_terminal_number(instname1, nodename1); node2 = get_terminal_number(instname1, nodename2); if (eq(node1, "0") && eq(node2, "0")) { fprintf(stderr, "Warning: Either first or second node have to be non-zero,\n .probe %s will be ignored\n", wltmp->wl_word); continue; } /* nodes are numbered 1, 2, 3, ... */ nodenum1 = (int)strtol(node1, &ptr, 10); nodenum2 = (int)strtol(node2, &ptr, 10); if (nodenum1 > numnodes1) { fprintf(stderr, "Warning: There are only %d nodes available for %s,\n .probe %s will be ignored!\n", numnodes1, instname1, wltmp->wl_word); continue; } if (nodenum2 > numnodes1) { fprintf(stderr, "Warning: There are only %d nodes available for %s,\n .probe %s will be ignored!\n", numnodes1, instname1, wltmp->wl_word); continue; } if (nodenum1 == nodenum2) { fprintf(stderr, "Warning: Duplicate node numbers,\n .probe %s will be ignored!\n", wltmp->wl_word); continue; } /* if node1 is the 0 node*/ if (nodenum1 == 0) { strnode1 = copy("0"); } else { /* skip instance and leading nodes not wanted */ for (i = 0; i < nodenum1; i++) { thisline2 = nexttok(thisline2); if (*thisline2 == '\0') { fprintf(stderr, "Warning: node number %d not available for instance %s, ignored!\n", nodenum1, instname1); err = TRUE; break; } } if (err) continue; strnode1 = gettok(&thisline2); } thisline2 = thisline; /* if node2 is the 0 node*/ if (nodenum2 == 0) { strnode2 = copy("0"); } else { /* skip instance and leading nodes not wanted */ for (i = 0; i < nodenum2; i++) { thisline2 = nexttok(thisline2); if (*thisline2 == '\0') { fprintf(stderr, "Warning: node number %d not available for instance %s, ignored!\n", nodenum2, instname1); err = TRUE; break; } } if (err) continue; strnode2 = gettok(&thisline2); } /* preserve the 0 node */ if (*node1 == '0') { nodename1 = copy("0"); } else { if (*node1 != '\0' && atoi(node1) == 0) { char* nn = get_terminal_number(instname1, node1); tfree(node1); node1 = copy(nn); } nodename1 = get_terminal_name(instname1, node1, instances); } /* preserve the 0 node */ if (*node2 == '0') { nodename2 = copy("0"); } else { if (*node2 != '\0' && atoi(node2) == 0) { char* nn = get_terminal_number(instname1, node2); tfree(node2); node2 = copy(nn); } nodename2 = get_terminal_name(instname1, node2, instances); } char* newline = tprintf("Ediff%d_%s vd_%s:%s:%s 0 %s %s 1", ee, instname1, instname1, nodename1, nodename2, strnode1, strnode2); char* nodesaves = tprintf("vd_%s:%s:%s", instname1, nodename1, nodename2); allsaves = wl_cons(nodesaves, allsaves); tmpcard1 = insert_new_line(tmpcard1, newline, 0, 0); tfree(strnode1); tfree(strnode2); tfree(nodename1); tfree(nodename2); } } } /* No .probe parameter 'all' (has been treated already), but dedicated current probes requested */ else if (!haveall && ciprefix("i(", tmpstr)) { char* instname, * node1 = NULL, *nodename1; struct card* tmpcard; int numnodes; tmpstr += 2; /* Replace a : by , to enable i(mn1:s) equivalent to i(mn1,s) */ char* co = strchr(tmpstr, ':'); if (co) { *co = ','; } instname = gettok_noparens(&tmpstr); tmpcard = nghash_find(instances, instname); if (!tmpcard) { fprintf(stderr, "Warning: Could not find the instance line for %s,\n .probe %s will be ignored\n", instname, wltmp->wl_word); continue; } char* thisline = tmpcard->line; numnodes = get_number_terminals(thisline); /* skip ',' */ if (*tmpstr == ',') tmpstr++; /* read the input for node1: either a number or a (device dependent) name */ node1 = gettok_noparens(&tmpstr); if (*node1 != '\0' && atoi(node1) == 0) { char *nn = get_terminal_number(instname, node1); if (eq(nn, "0")) { fprintf(stderr, "Warning: Node %s is not available for device %s,\n .probe %s will be ignored\n", node1, instname, wltmp->wl_word); tfree(node1); continue; } tfree(node1); node1 = copy(nn); } if (node1 && *node1 == '\0') { node1 = NULL; nodename1 = copy("nn"); } else nodename1 = get_terminal_name(instname, node1, instances); /* i(R3): add voltage source always to second node */ if (!node1 && numnodes == 2) { char* newline, *strnode2, *nodename2; /* skip instance */ thisline = nexttok(thisline); /* skip first node */ thisline = nexttok(thisline); char* begstr = copy_substring(tmpcard->line, thisline); strnode2 = gettok(&thisline); nodename2 = get_terminal_name(instname, "2", instances); char* newnode = tprintf("int_%s_%s_2", strnode2, instname); char* vline = tprintf("vcurr_%s:%s_%s %s %s 0", instname, nodename2, strnode2, newnode, strnode2); newline = tprintf("%s %s %s", begstr, newnode, thisline); char* nodesaves = tprintf("%s#branch", instname); allsaves = wl_cons(nodesaves, allsaves); tfree(tmpcard->line); tmpcard->line = newline; tmpcard = insert_new_line(tmpcard, vline, 0, 0); tfree(strnode2); tfree(newnode); tfree(begstr); tfree(nodename1); tfree(nodename2); } else if (!node1 && numnodes > 2) { fprintf(stderr, "Warning: Node info is missing,\n .probe %s will be ignored\n", wltmp->wl_word); tfree(nodename1); continue; } /* i(X1, 2): add voltage source to user defined node */ else if (node1 && *node1 != '\0') { char* newline, * ptr; int nodenum; int i; bool err = FALSE; /* nodes are numbered 1, 2, 3, ... */ nodenum = (int)strtol(node1, &ptr, 10); if (nodenum > numnodes) { fprintf(stderr, "Warning: There are only %d nodes available for %s,\n .probe %s will be ignored\n", numnodes, instname, wltmp->wl_word); continue; } /* skip instance and leading nodes not wanted */ for (i = 0; i < nodenum; i++) { thisline = nexttok(thisline); if (*thisline == '\0') { fprintf(stderr, "Warning: node number %d not available for instance %s!\n", nodenum, instname); err = TRUE; break; } } if (err) continue; char* begstr = copy_substring(tmpcard->line, thisline); char* strnode1 = gettok(&thisline); char* newnode = tprintf("int_%s_%s_%d", strnode1, instname, nodenum); newline = tprintf("%s %s %s", begstr, newnode, thisline); char* vline = tprintf("vcurr_%s:%s:%s_%s %s %s 0", instname, nodename1, node1, strnode1, newnode, strnode1); tfree(tmpcard->line); tmpcard->line = newline; tmpcard = insert_new_line(tmpcard, vline, 0, 0); /* special treatment for xlines: keep the x if next char is a number */ if (*instname == 'x' && !isdigit_c(instname[1])) { char* nodesaves = tprintf("%s:%s#branch", instname + 1, nodename1); allsaves = wl_cons(nodesaves, allsaves); } else { char* nodesaves = tprintf("%s:%s#branch", instname, nodename1); allsaves = wl_cons(nodesaves, allsaves); } tfree(begstr); tfree(strnode1); tfree(newnode); tfree(nodename1); } } else if (!haveall) { fprintf(stderr, "Warning: unknown .probe parameter %s,\n .probe %s will be ignored!\n", tmpstr, wltmp->wl_word); continue; } } if (allsaves) { allsaves = wl_cons(copy(".save"), allsaves); char* newline = wl_flatten(allsaves); wl_free(allsaves); allsaves = NULL; card = deck->nextcard; card = insert_new_line(card, newline, 0, 0); } } nghash_free(instances, NULL, NULL); } /* enter the element (instance) line and the node number (as string), get the node name, if defined (e.g. a for anode, c for cathode of a diode). If not (yet) defined, return "nx" (x is the node number) or "nn" */ static char *get_terminal_name(char* element, char *numberstr, NGHASHPTR instances) { switch (*element) { case 'r': case 'c': case 'l': case 'k': case 'f': case 'h': case 'b': case 'v': case 'i': return tprintf("n%s", numberstr); break; case 'd': switch (*numberstr) { case 'a': case '1': return copy("a"); break; case 'c': case 'k': case '2': return copy("c"); break; default: return copy("nn"); break; } break; case 'j': case 'z': switch (*numberstr) { case 'd': case '1': return copy("d"); break; case 'g': case '2': return copy("g"); break; case 's': case '3': return copy("s"); break; default: return copy("nn"); break; } case 'm': switch (*numberstr) { case 'd': case '1': return copy("d"); break; case 'g': case '2': return copy("g"); break; case 's': case '3': return copy("s"); break; case 'b': case '4': return copy("b_tj"); break; case '5': return copy("tc"); break; case '6': return copy("n6"); break; case '7': return copy("n7"); break; default: return copy("nn"); break; } case 'q': switch (*numberstr) { case 'c': case '1': return copy("c"); break; case 'b': case '2': return copy("b"); break; case 'e': case '3': return copy("e"); break; case 's': case '4': return copy("s"); break; case '5': return copy("t"); break; default: return copy("nn"); break; } case 'x': /* This should be the names of the corresponding subcircuit: Get the subckt name from the x line Search for the corresponding .subckt line Find the numberstr node name of the .subckt */ { int i; char* subcktname, * ptr, * xcardsubsline = NULL, * subsnodestr; struct card* xcard = nghash_find(instances, element); char* thisline = xcard->line; int numnodes = get_number_terminals(thisline); int nodenumber = (int)strtol(numberstr, &ptr, 10); /*Get the subckt name from the x line*/ for (i = 0; i <= numnodes; i++) thisline = nexttok(thisline); subcktname = gettok(&thisline); /*Search for the corresponding .subckt line*/ struct card_assoc* allsubs = xcard->level->subckts; while (allsubs) { xcardsubsline = allsubs->line->line; if (cieq(subcktname, allsubs->name)) break; allsubs = allsubs->next; } /*Find the numberstr node name of the .subckt*/ for (i = 1; i < nodenumber + 2; i++) { xcardsubsline = nexttok(xcardsubsline); } subsnodestr = gettok(&xcardsubsline); tfree(subcktname); return subsnodestr; break; } /* the following are not (yet) supported */ case 'u': case 'w': case 't': case 'o': case 'g': case 'e': case 's': case 'y': case 'p': return tprintf("n%s", numberstr); break; default: return copy("nn"); break; } } /* enter the element (instance) line and the node name, if defined (e.g. a for anode, c for cathode of a diode) return the node number. If there is no regular node name, return "0". */ static char* get_terminal_number(char* element, char* namestr) { switch (*element) { case 'r': case 'c': case 'l': case 'k': case 'f': case 'h': case 'b': case 'v': case 'i': return "0"; break; case 'd': switch (*namestr) { case 'a': case '1': return "1"; break; case 'c': case 'k': case '2': return "2"; break; default: return "0"; break; } break; case 'j': case 'z': switch (*namestr) { case 'd': case '1': return "1"; break; case 'g': case '2': return "2"; break; case 's': case '3': return "3"; break; default: return "0"; break; } case 'm': switch (*namestr) { case 'd': case '1': return "1"; break; case 'g': case '2': return "2"; break; case 's': case '3': return "3"; break; case 'b': case '4': return "4"; break; case 't': switch (namestr[1]) { case 'j': return "4"; break; case 'c': return "5"; break; default: return "0"; } case '5': return "5"; break; case '6': return "6"; break; case '7': return "7"; break; default: return "0"; break; } case 'q': switch (*namestr) { case 'c': case '1': return "1"; break; case 'b': case '2': return "2"; break; case 'e': case '3': return "3"; break; case 's': case '4': return "4"; break; case 't': return "5"; break; default: return "nn"; break; } /* the following are not (yet) supported */ case 'x': if (isdigit_c(*namestr)) return namestr; else return "0"; break; case 'u': case 'w': // return 3; // break; case 't': case 'o': case 'g': case 'e': case 's': case 'y': // return 4; if (isdigit_c(*namestr)) return namestr; else return "0"; break; case 'p': if (isdigit_c(*namestr)) return namestr; else return "0"; break; default: return "0"; break; } } /* get new .save names from V instances from instance table. Called from inp.c*/ void modprobenames(INPtables* tab) { GENinstance* GENinst; for (GENinst = tab->defVmod->GENinstances; GENinst; GENinst = GENinst->GENnextInstance) { char* name = GENinst->GENname; /* Do not inlude the x in the new name, XU1 -> U1 */ if (prefix("vcurr_x", name) && !isdigit_c(name[7])) { /* copy from char no. 7 to (and excluding) second colon */ char* endname = strchr(name, ':'); endname = strchr(endname + 1, ':'); char* newname = copy_substring(name + 7, endname); memcpy(name, newname, strlen(newname) + 1); tfree(newname); } else if (prefix("vcurr_", name)) { /* copy from char no. 6 to (and excluding) second colon */ char* endname = strchr(name, ':'); char* endname2 = strchr(endname + 1, ':'); /* two-terminal device, one colon, copy all from char no. 6 to (and excluding) colon */ if (!endname2) { char* newname = copy_substring(name + 6, endname); memcpy(name, newname, strlen(newname) + 1); tfree(newname); } /* copy from char no. 6 to (and excluding) second colon */ else { char* newname = copy_substring(name + 6, endname2); memcpy(name, newname, strlen(newname) + 1); tfree(newname); } } } } tmp_ns50wwy/src/frontend/rawfile.h0000644000175000017500000000021414163340332017356 0ustar carstencarsten/************* * Header file for rawfile.c * 1999 E. Rouat ************/ #ifndef ngspice_RAWFILE_H #define ngspice_RAWFILE_H #endif tmp_ns50wwy/src/frontend/define.h0000644000175000017500000000031614163340332017162 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 tmp_ns50wwy/src/frontend/arg.h0000644000175000017500000000113714163340332016503 0ustar carstencarsten/************* * Header file for arg.c * 1999 E. Rouat ************/ #ifndef ngspice_ARG_H #define ngspice_ARG_H char *prompt(FILE *fp); wordlist *process(wordlist *wlist); void arg_print(const wordlist *wl, const struct comm *command); void arg_plot(const wordlist *wl, const struct comm *command); void arg_load(const wordlist *wl, const struct comm *command); void arg_let(const wordlist *wl, const struct comm *command); void arg_set(const wordlist *wl, const struct comm *command); void arg_display(const wordlist *wl, const struct comm *command); void outmenuprompt(const char *string); #endif tmp_ns50wwy/src/frontend/com_gnuplot.c0000644000175000017500000000237214163340332020255 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); } tmp_ns50wwy/src/frontend/hpgl.h0000644000175000017500000000076114163340332016666 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 tmp_ns50wwy/src/frontend/evaluate.h0000644000175000017500000000245214163340332017541 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 tmp_ns50wwy/src/frontend/nutinp.h0000644000175000017500000000025114163340332017243 0ustar carstencarsten/************* * Header file for nutinp.c * 1999 E. Rouat ************/ #ifndef ngspice_NUTINP_H #define ngspice_NUTINP_H void nutinp_source(char *file); #endif tmp_ns50wwy/src/frontend/get_resident_set_size.c0000644000175000017500000001100214163340332022276 0ustar carstencarsten/* * Author: David Robert Nadeau * Site: http://NadeauSoftware.com/ * License: Creative Commons Attribution 3.0 Unported License * http://creativecommons.org/licenses/by/3.0/deed.en_US * Modified: Holger Vogt, 2019 */ #include "ngspice/ngspice.h" #include "resource.h" #if defined(_WIN32) #undef BOOLEAN #include #include #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) #include #include #if defined(__APPLE__) && defined(__MACH__) #include #elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) #include #include #elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) #include #endif #else #error "Cannot define getPeakRSS( ) or getCurrentRSS( ) for an unknown OS." #endif /** * Returns the peak (maximum so far) resident set size (physical * memory use) measured in bytes, or zero if the value cannot be * determined on this OS. */ unsigned long long getPeakRSS(void) { #if defined(HAVE__PROC_MEMINFO) /* Linux ---------------------------------------------------- */ unsigned long long rss = 0L; FILE* fp = NULL; if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL ) return (unsigned long long) 0L; /* Can't open? */ if ( fscanf( fp, "%llu", &rss ) != 1 ) { fclose( fp ); return 0L; /* Can't read? */ } fclose( fp ); return rss * (unsigned long long) sysconf(_SC_PAGESIZE); #elif defined(HAVE_GETRUSAGE) /* BSD, Linux, and OSX -------------------------------------- * not (yet) available with CYGWIN */ struct rusage rusage; getrusage(RUSAGE_SELF, &rusage); #if defined(__APPLE__) && defined(__MACH__) return (unsigned long long) rusage.ru_maxrss; #else return (unsigned long long) (rusage.ru_maxrss * 1024L); #endif #elif defined(_WIN32) /* Windows -------------------------------------------------- */ PROCESS_MEMORY_COUNTERS info; GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); return (unsigned long long) info.PeakWorkingSetSize; #elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) /* AIX and Solaris ------------------------------------------ */ struct psinfo psinfo; int fd = -1; if ( (fd = open( "/proc/self/psinfo", O_RDONLY )) == -1 ) return 0L; /* Can't open? */ if ( read( fd, &psinfo, sizeof(psinfo) ) != sizeof(psinfo) ) { close( fd ); return 0L; /* Can't read? */ } close( fd ); return (unsigned long long) (psinfo.pr_rssize * 1024L); #else /* Unknown OS ----------------------------------------------- */ return 0L; /* Unsupported. */ #endif } /** * Returns the current resident set size (physical memory use) measured * in bytes, or zero if the value cannot be determined on this OS. */ unsigned long long getCurrentRSS(void) { #if defined(_WIN32) /* Windows -------------------------------------------------- */ PROCESS_MEMORY_COUNTERS info; GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); return (unsigned long long) info.WorkingSetSize; #elif defined(__APPLE__) && defined(__MACH__) /* OSX ------------------------------------------------------ */ struct mach_task_basic_info info; mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; if ( task_info( mach_task_self( ), MACH_TASK_BASIC_INFO, (task_info_t)&info, &infoCount ) != KERN_SUCCESS ) return 0L; /* Can't access? */ return (unsigned long long) info.resident_size; //#elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) #elif defined(HAVE__PROC_MEMINFO) /* Linux ---------------------------------------------------- */ unsigned long long rss = 0L; FILE* fp = NULL; if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL ) return (unsigned long long) 0L; /* Can't open? */ if ( fscanf( fp, "%*s%llu", &rss ) != 1 ) { fclose( fp ); return 0L; /* Can't read? */ } fclose( fp ); return rss * (unsigned long long) sysconf(_SC_PAGESIZE); #else /* AIX, BSD, Solaris, and Unknown OS ------------------------ */ return (unsigned long long) 0L; /* Unsupported. */ #endif } tmp_ns50wwy/src/frontend/com_ahelp.h0000644000175000017500000000014014163340332017652 0ustar carstencarsten#ifndef ngspice_COM_AHELP_H #define ngspice_COM_AHELP_H void com_ahelp(wordlist *wl); #endif tmp_ns50wwy/src/frontend/circuits.h0000644000175000017500000000032514163340332017555 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 tmp_ns50wwy/src/frontend/miscvars.c0000644000175000017500000000424214163340332017554 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 }; tmp_ns50wwy/src/frontend/com_dl.c0000644000175000017500000000140514163340332017160 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 tmp_ns50wwy/src/frontend/parse-bison-y.h0000644000175000017500000000103114163340332020413 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 tmp_ns50wwy/src/frontend/options.h0000644000175000017500000000021314163340332017417 0ustar carstencarsten/************* * Header file for options.c * 1999 E. Rouat ************/ #ifndef ngspice_OPTIONS_H #define ngspice_OPTIONS_H #endif tmp_ns50wwy/src/frontend/runcoms.h0000644000175000017500000000116114163340332017415 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 tmp_ns50wwy/src/frontend/interp.c0000644000175000017500000000341414163340332017226 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) { if (!isreal(ov)) { fprintf(cp_err, "Warning: vector %s is a complex vector - " "complex vectors cannot be interpolated\n", ov->v_name); return; } if (ov->v_length == 1) { fprintf(cp_err, "Warning: %s is a scalar - " "interpolation is not possible\n", ov->v_name); return; } if (ov->v_length < oldscale->v_length) { fprintf(cp_err, "Warning: %s only contains %d points - " "interpolation is not performed unless there are " "at least as many points as the scale vector (%d)\n", ov->v_name, ov->v_length, oldscale->v_length); return; } /* Allocate the vector to receive the linearized data */ struct dvec * const v = dvec_alloc(copy(ov->v_name), ov->v_type, ov->v_flags | VF_PERMANENT, newlen, NULL); /* Do interpolation and then add the vector to the current plot. If * interpolation fails, the vector must be freed. */ if (!ft_interpolate(ov->v_realdata, v->v_realdata, oldscale->v_realdata, oldscale->v_length, newscale, newlen, 1)) { fprintf(cp_err, "Error: can't interpolate %s\n", ov->v_name); dvec_free(v); return; } vec_new(v); } /* end of function lincopy */ tmp_ns50wwy/src/frontend/rawfile.c0000644000175000017500000007174614163340332017373 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" #include "ngspice/compatmode.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 with the 'write' command. We write everything in the plot pointed to. Writing a raw file in batch mode is handled by fileInit_pass1() and fileInit_pass2() in outitf.c */ 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; } /* - 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); } /* --------------------------------------------------------------------*/ 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) { /* write i(name) instaed of name#branch */ if (v->v_type == SV_CURRENT) { branch = NULL; /* get name only*/ if ((branch = strstr(v->v_name, "#branch")) != NULL) { *branch = '\0'; } /* If the branch name is a number, the vector is already called i(name) */ if (ciprefix("i(", v->v_name)) fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name, ft_typenames(v->v_type)); else fprintf(fp, "\t%d\ti(%s)\t%s", i++, v->v_name, ft_typenames(v->v_type)); /* restore name#branch */ if (branch != NULL) *branch = '#'; } /* write v(name)*/ else if (v->v_type == SV_VOLTAGE) { /* If the node name is a number, the vector is already called v(name) */ if (ciprefix("v(", v->v_name) || newcompat.eg) /* FIXME: newcompat.eg should be removed if EAGLE is updated */ fprintf(fp, "\t%d\t%s\t%s", i++, v->v_name, ft_typenames(v->v_type)); else fprintf(fp, "\t%d\tv(%s)\t%s", i++, v->v_name, ft_typenames(v->v_type)); } /* write 'name' only for all other vector types */ 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); } /* end of function raw_write */ /* 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; curpl->pl_xdim2d = -1; curpl->pl_ydim2d = -1; 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) { if (fgets(buf, BSIZE_SP, fp) == (char *) NULL) { fprintf(cp_err, "Error: unable to read line\n"); plots = NULL; break; } 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 { if (fgets(buf, BSIZE_SP, fp) == (char *) NULL) { fprintf(cp_err, "Error: unable to read variable line\n"); break; } 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 ((numdims == 2) && (flags & VF_REAL) && eq(curpl->pl_name, "Device Cross Section")) { if ((dims[0] > 1) && (dims[1] > 1) && (npoints == dims[0] * dims[1])) { curpl->pl_xdim2d = dims[0]; curpl->pl_ydim2d = dims[1]; } } 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. */ if (fscanf(fp, " %d", &j) != 1) { fprintf(cp_err, "Error: unable to read point count\n"); break; } 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); } } } /* end of loop */ 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); } tmp_ns50wwy/src/frontend/get_avail_mem_size.c0000644000175000017500000001060314163340332021546 0ustar carstencarsten/* * Author: Holger Vogt * License: 3-clause BSD License * */ #include "ngspice/ngspice.h" #include "resource.h" #if defined(_WIN32) #undef BOOLEAN #include #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) #include #include #include #if defined(BSD) && defined(HAVE_SYS_SYSCTL_H) #include #endif #if defined(__APPLE__) && defined(__MACH__) #import #import #endif #else #error "Unable to define getMemorySize( ) for an unknown OS." #endif /** * Returns the size of available memory (RAM) in bytes. */ unsigned long long getAvailableMemorySize(void) { #if defined(HAVE__PROC_MEMINFO) /* Cygwin , Linux--------------------------------- */ /* Search for string "MemFree" */ 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 0L; } bytes_read = fread(buffer, 1, sizeof(buffer), fp); fclose(fp); if (bytes_read == 0 || bytes_read == sizeof(buffer)) return 0L; buffer[bytes_read] = '\0'; match = strstr(buffer, "MemFree"); if (match == NULL) /* not found */ return 0L; sscanf(match, "MemFree: %llu", &mem_got); return mem_got * 1024L; #elif defined(_WIN32) /* Windows. ------------------------------------------------- */ MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx( &status ); return status.ullAvailPhys; #elif defined(__APPLE__) && defined(__MACH__) mach_port_t host_port; mach_msg_type_number_t host_size; vm_size_t pagesize; host_port = mach_host_self(); host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); host_page_size(host_port, &pagesize); vm_statistics_data_t vm_stat; if (host_statistics(host_port, HOST_VM_INFO, (host_info_t) &vm_stat, &host_size) != KERN_SUCCESS) { fprintf(stderr, "Failed to fetch vm statistics"); } /* Stats in bytes */ /* natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize; */ return (unsigned long long)(vm_stat.free_count * pagesize); // natural_t mem_total = mem_used + mem_free; #elif defined(__unix__) || defined(__unix) || defined(unix) /* Linux/UNIX variants. ------------------------------------------- */ /* Prefer sysctl() over sysconf() except sysctl() HW_REALMEM and HW_PHYSMEM */ #if defined(CTL_HW) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM64)) && defined(HAVE_SYS_SYSCTL_H) int mib[2]; mib[0] = CTL_HW; #if defined(HW_MEMSIZE) mib[1] = HW_MEMSIZE; /* OSX. --------------------- */ #elif defined(HW_PHYSMEM64) mib[1] = HW_PHYSMEM64; /* NetBSD, OpenBSD. --------- */ #endif int64_t size = 0; /* 64-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (size_t)size; return 0L; /* Failed? */ #elif defined(_SC_AIX_REALMEM) /* AIX. ----------------------------------------------------- */ return (size_t)sysconf( _SC_AIX_REALMEM ) * (size_t)1024L; #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) /* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */ return (size_t)sysconf( _SC_PHYS_PAGES ) * (size_t)sysconf( _SC_PAGESIZE ); #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) /* Legacy. -------------------------------------------------- */ return (size_t)sysconf( _SC_PHYS_PAGES ) * (size_t)sysconf( _SC_PAGE_SIZE ); #elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM)) && defined(HAVE_SYS_SYSCTL_H) /* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */ int mib[2]; mib[0] = CTL_HW; #if defined(HW_REALMEM) mib[1] = HW_REALMEM; /* FreeBSD. ----------------- */ #elif defined(HW_PYSMEM) mib[1] = HW_PHYSMEM; /* Others. ------------------ */ #endif unsigned int size = 0; /* 32-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (size_t)size; return 0L; /* Failed? */ #endif /* sysctl and sysconf variants */ #else return 0L; /* Unknown OS. */ #endif } tmp_ns50wwy/src/frontend/init.c0000644000175000017500000000417314163340332016673 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 "../spicelib/analysis/com_optran.h" #include "init.h" #include "variable.h" 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) */ { 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(); /*set a variable oscompiled containing the OS at compile time [0], Other [1], MINGW for MS Windows [2], Cygwin for MS Windows [3], FreeBSD [4], OpenBSD [5], Solaris [6], Linux [7], macOS [8], Visual Studio for MS Windows The variable may be used in a .control section to perform OS specific actions (setting fonts etc.). */ int itmp; #if OS_COMPILED == 1 itmp = 1; #elif OS_COMPILED == 2 itmp = 2; #elif OS_COMPILED == 3 itmp = 3; #elif OS_COMPILED == 4 itmp = 4; #elif OS_COMPILED == 5 itmp = 5; #elif OS_COMPILED == 6 itmp = 6; #elif OS_COMPILED == 7 itmp = 7; #else itmp = 0; #endif /* not using configure.ac */ #ifdef _MSC_VER itmp = 8; #endif cp_vset("oscompiled", CP_NUM, &itmp); /* To make optran the standard, call com_optran here. May be overridden by entry in spinit or .spiceinit or a local call in .control. */ { wordlist* wl_optran; /* the default optran parameters: 1 1 1 100n 10u 0 */ char* sbuf[7]; sbuf[0] = "1"; sbuf[1] = "1"; sbuf[2] = "1"; sbuf[3] = "100n"; sbuf[4] = "10u"; sbuf[5] = "0"; sbuf[6] = NULL; wl_optran = wl_build((const char* const*)sbuf); com_optran(wl_optran); wl_free(wl_optran); } } tmp_ns50wwy/src/frontend/control.c0000644000175000017500000007362414163340332017417 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 = ";"; /* character that separates commands */ 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 has 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 }; /* This function returns the (first) structure wit the label s */ static struct control *findlabel(const 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; txfree(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; } 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" " (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; 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 */ { int j; for (j = 1; j < i; j++) buf[j] = '>'; /* Add space and terminate */ buf[j] = ' '; buf[j + 1] = '\0'; } return buf; } /* end of function get_alt_prompt */ /* 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; #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(TRUE); 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"); wl_free(wlist); 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 val; 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; if (ft_numparse(&s, FALSE, &val) > 0) { /* Can be converted to int */ if (val < 0) { fprintf(cp_err, "Error: can't repeat a negative number of times\n"); val = 0.0; } cend[stackp]->co_numtimes = (int) val; } 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"); wl_free(wlist); continue; } 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 not in a block. */ 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 { int 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. */ } /* end of unconditional loop */ } /* end of function cp_evloop */ /* This blows away the control structures... */ void cp_resetcontrol(bool warn) { if (warn) { fprintf(cp_err, "Warning: clearing control structures\n"); if (cend[stackp] && cend[stackp]->co_parent) fprintf(cp_err, "Warning: EOF before block terminated\n"); } /* free the control structures */ cp_free_control(); 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; } tmp_ns50wwy/src/frontend/com_echo.h0000644000175000017500000000027114163340332017504 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 tmp_ns50wwy/src/frontend/wdisp/0000755000175000017500000000000014163340332016705 5ustar carstencarstentmp_ns50wwy/src/frontend/wdisp/Makefile.am0000644000175000017500000000053714163340332020746 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 \ wincolor.c \ ftegraf.h AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend/wdisp AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/frontend/wdisp/winprint.h0000644000175000017500000000137714163340332020740 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, bool isgrid); 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 tmp_ns50wwy/src/frontend/wdisp/wincolor.c0000644000175000017500000001556314163340332020717 0ustar carstencarsten/* Copyright: Holger Vogt, 2020 */ /* Three Clause BSD */ /* Universal color table and retrival */ #include "ngspice/ngspice.h" #ifdef HAS_WINGUI #include "ngspice/cpextern.h" #include "ngspice/hash.h" #include "ngspice/macros.h" #undef BOOLEAN #include #include "ngspice/wincolornames.h" #include "ngspice/graph.h" static NGHASHPTR color_p; /* color hash table */ static COLORREF get_wincolor(char* name, int nocolor); void wincolor_init_hash(COLORREF *ColorTable, int noc) { int i; char buf[BSIZE_SP], colorstring[BSIZE_SP]; int nocolor = NUMELEMS(ctable); color_p = nghash_init(nocolor); nghash_unique(color_p, FALSE); for (i = 0; i < nocolor; i++) { strtolower(ctable[i].name); ctable[i].rgbc = RGB(ctable[i].R, ctable[i].G, ctable[i].B); nghash_insert(color_p, ctable[i].name, &(ctable[i].rgbc)); } for (i = 0; i < noc; i++) { (void) sprintf(buf, "color%d", i); if (!cp_getvar(buf, CP_STRING, colorstring, sizeof(colorstring))) (void) strcpy(colorstring, stdcolornames[i]); COLORREF* val = (COLORREF*)nghash_find(color_p, colorstring); if(val) ColorTable[i] = *val; else ColorTable[i] = 0; } } /* evaluate rgb:0/FF/F0 rgb:0/F/0 rgbd:295/0/128 */ static COLORREF get_wincolor_rgb(char *costr) { char *tmpstr; if (ciprefix("rgb:", costr)) { char *t1, *t2, *t3; tmpstr = costr + 4; if (tmpstr) { t1 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t2 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t3 = copy(tmpstr); if (t1 && t2 && t3) { int c1, c2, c3; c1 = (int) strtol(t1, NULL, 16); c2 = (int) strtol(t2, NULL, 16); c3 = (int) strtol(t3, NULL, 16); tfree(t1); tfree(t2); tfree(t3); return RGB(c1, c2, c3); } } } else if (ciprefix("rgbd:", costr)) { char *t1, *t2, *t3; tmpstr = costr + 5; if (tmpstr) { t1 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t2 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t3 = copy(tmpstr); if (t1 && t2 && t3) { int c1, c2, c3; c1 = (int) strtol(t1, NULL, 10); c2 = (int) strtol(t2, NULL, 10); c3 = (int) strtol(t3, NULL, 10); tfree(t1); tfree(t2); tfree(t3); return RGB(c1, c2, c3); } } } fprintf(stderr, "Error: Cannot detect color in string %s, setting Web Green\n", costr); return RGB(0, 128, 0); } /* ColorTable[0]: background, ColorTable[1]: grid, text */ void wincolor_init(COLORREF* ColorTable, int noc) { int i; static bool bgisblack = TRUE; char buf[BSIZE_SP], colorstring[BSIZE_SP]; int nocolor = NUMELEMS(ctable); for (i = 0; i < nocolor; i++) { strtolower(ctable[i].name); ctable[i].rgbc = RGB(ctable[i].R, ctable[i].G, ctable[i].B); } i = 0; while(i < noc) { /* when color0 is set to white and color1 is not given, set ColorTable[2] to black */ (void)sprintf(buf, "color%d", i); if (!cp_getvar(buf, CP_STRING, colorstring, sizeof(colorstring))) { if (i == 1) { /* switch the grid and text color depending on background */ int tcolor = GetRValue(ColorTable[0]) + (int)(1.5 * GetGValue(ColorTable[0])) + GetBValue(ColorTable[0]); if (tcolor > 360) { ColorTable[1] = RGB(0, 0, 0); i++; bgisblack = FALSE; continue; } else { ColorTable[1] = RGB(255, 255, 255); i++; bgisblack = TRUE; continue; } } /* old code: beginning with 12 the colors are repeated */ else if (!bgisblack && (i == 12)) (void)strcpy(colorstring, "black"); else (void)strcpy(colorstring, stdcolornames[i]); } else if (ciprefix("rgb", colorstring)){ ColorTable[i] = get_wincolor_rgb(colorstring); i++; continue; } ColorTable[i] = get_wincolor(colorstring, nocolor); i++; } } void wincolor_graph(COLORREF* ColorTable, int noc, GRAPH *graph) { int i; for (i = 0; i < noc; i++) { graph->colorarray[i] = ColorTable[i]; } } void wincolor_redo(COLORREF* ColorTable, int noc) { int i = 0; static bool bgisblack = TRUE; char buf[BSIZE_SP], colorstring[BSIZE_SP]; int nocolor = NUMELEMS(ctable); while (i < noc) { /* when color0 is set to white and color1 is not given, set text and grid color as ColorTable[1] to black, when color0 is any other color, select black or white text and grid color according to a weighted value derived from color0. This selection is a compromise based on visibility.*/ (void)sprintf(buf, "color%d", i); if (!cp_getvar(buf, CP_STRING, colorstring, sizeof(colorstring))) { if (i == 1) { /* switch the grid and text color depending on background */ int tcolor = GetRValue(ColorTable[0]) + (int)(1.5 * GetGValue(ColorTable[0])) + GetBValue(ColorTable[0]); if (tcolor > 360) { ColorTable[1] = RGB(0, 0, 0); i++; bgisblack = FALSE; continue; } else { ColorTable[1] = RGB(255, 255, 255); i++; bgisblack = TRUE; continue; } } /* old code: beginning with 12 the colors are repeated */ else if (!bgisblack && (i == 12)) (void)strcpy(colorstring, "black"); else (void)strcpy(colorstring, stdcolornames[i]); } else if (ciprefix("rgb", colorstring)) { ColorTable[i] = get_wincolor_rgb(colorstring); i++; continue; } ColorTable[i] = get_wincolor(colorstring, nocolor); i++; } } COLORREF *get_wincolor_hash(char *name) { return nghash_find(color_p, name); } static COLORREF get_wincolor(char *name, int nocolor) { int i; for (i = 0; i < nocolor; i++) { if (ciprefix(name, ctable[i].name)) { return ctable[i].rgbc; } } fprintf(stderr, "Warning: Color %s is not available\n", name); fprintf(stderr, " Color 'green' is returned instead!\n"); return RGB(0, 255, 0); } #endif tmp_ns50wwy/src/frontend/wdisp/ftegraf.h0000644000175000017500000000047314163340332020500 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 tmp_ns50wwy/src/frontend/wdisp/wincolor.h0000644000175000017500000000000014163340332020700 0ustar carstencarstentmp_ns50wwy/src/frontend/wdisp/windisp.c0000644000175000017500000010775414163340332020544 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 * Holger Vogt 09.02.20 */ #include "ngspice/ngspice.h" #ifdef HAS_WINGUI #include "ngspice/graph.h" #include "ngspice/ftedev.h" #include "ngspice/ftedbgra.h" #include "ngspice/fteext.h" #include "ngspice/stringskip.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 HcpyPlotPS(HWND hwnd); static LRESULT HcpyPlotPSBW(HWND hwnd); static LRESULT HcpyPlotSVG(HWND hwnd); static LRESULT HcpyPlotSVGBW(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); extern void wincolor_graph(COLORREF* ColorTable, int noc, GRAPH* graph); extern void UpdateMainText(void); /* defines */ #define RAD_TO_DEG (180.0 / M_PI) #ifndef M_LN10 #define M_LN10 2.30258509299404568402 #endif #define DEF_FONTW "Arial" #define DEFW_FONTW L"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 wchar_t * WindowNameW = L"Spice Plot"; /* window name */ static WNDCLASSW TheWndClassW; /* 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_PS 0xEFD0 /* System Menue: hardcopy PS color*/ #define ID_HARDCOPY_PS_BW 0xEFB0 /* System Menue: hardcopy PS b&w*/ #define ID_HARDCOPY_SVG 0xEFA0 /* System Menue: hardcopy SVG color*/ #define ID_HARDCOPY_SVG_BW 0xEF00 /* System Menue: hardcopy SVG 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_PS = "Postscript file, color"; static char *STR_HARDCOPY_PS_BW = "Postscript file, b&w"; static char *STR_HARDCOPY_SVG = "SVG file, color"; static char *STR_HARDCOPY_SVG_BW = "SVG file, b&w"; static wchar_t * STRW_DRUCKEN = L"Printer..."; /* System menue strings */ static wchar_t * STRW_DRUCKEINR = L"Printer setup..."; static wchar_t * STRW_HARDCOPY = L"Postscript file, color"; static wchar_t * STRW_HARDCOPY_BW = L"Postscript file, b&w"; static wchar_t * STRW_HARDCOPY_SVG = L"SVG file, color"; static wchar_t * STRW_HARDCOPY_SVG_BW = L"SVG 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 */ static int gridlinewidth = 0; /* linewidth of grid */ extern void wincolor_init(COLORREF *ColorTable, int noc); extern void wincolor_redo(COLORREF *ColorTable, int noc); /****************************************************************************** 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 facename[32]; #ifdef EXT_ASC LOGFONT lf; #else LOGFONTW lfw; #endif /* Initialization of display descriptor */ dispdev->width = GetSystemMetrics(SM_CXSCREEN); dispdev->height = GetSystemMetrics(SM_CYSCREEN); dispdev->numlinestyles = 5; /* see implications in WinPrint! */ dispdev->numcolors = NumWinColors; /* only for the first time: */ if (!IsRegistered) { wincolor_init(ColorTable, NumWinColors); #ifdef EXT_ASC /* 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; #else /* register window class */ TheWndClassW.lpszClassName = WindowNameW; TheWndClassW.hInstance = hInst; TheWndClassW.lpfnWndProc = PlotWindowProc; TheWndClassW.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; TheWndClassW.lpszMenuName = NULL; TheWndClassW.hCursor = LoadCursorW(NULL, MAKEINTRESOURCEW(32512) /*IDC_ARROW*/); if (isblack) TheWndClassW.hbrBackground = GetStockObject(BLACK_BRUSH); else TheWndClassW.hbrBackground = GetStockObject(WHITE_BRUSH); TheWndClassW.hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(2)); TheWndClassW.cbClsExtra = 0; TheWndClassW.cbWndExtra = sizeof(GRAPH *); if (!RegisterClassW(&TheWndClassW)) return 1; #endif IsRegistered = 1; } else wincolor_redo(ColorTable, NumWinColors); #ifdef EXT_ASC // lf.lfHeight = 18; lf.lfWidth = 0; lf.lfEscapement = 0; lf.lfOrientation = 0; 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, strlen(lf.lfFaceName))) { (void)lstrcpy(lf.lfFaceName, DEF_FONTW); } if (!cp_getvar("wfont_size", CP_NUM, &(lf.lfHeight), 0)) { lf.lfHeight = 18; } PlotFont = CreateFontIndirect(&lf); #else // lfw.lfHeight = 18; lfw.lfWidth = 0; lfw.lfEscapement = 0; lfw.lfOrientation = 0; lfw.lfWeight = 500; lfw.lfItalic = 0; lfw.lfUnderline = 0; lfw.lfStrikeOut = 0; lfw.lfCharSet = 0; lfw.lfOutPrecision = 0; lfw.lfClipPrecision = 0; lfw.lfQuality = 0; lfw.lfPitchAndFamily = 0; if (!cp_getvar("wfont", CP_STRING, facename, sizeof(facename))) { (void)lstrcpyW(lfw.lfFaceName, DEFW_FONTW); } else { wchar_t wface[32]; swprintf(wface, 32, L"%S", facename); (void)lstrcpyW(lfw.lfFaceName, wface); } if (!cp_getvar("wfont_size", CP_NUM, &(lfw.lfHeight), 0)) { lfw.lfHeight = 18; } PlotFont = CreateFontIndirectW(&lfw); #endif /* ready */ return 0; } /* get pointer to graph */ /* (attach to window) */ static GRAPH *pGraph(HWND hwnd) { #ifdef EXT_ASC return (GRAPH *) GetWindowLongPtr(hwnd, 0); #else return (GRAPH *) GetWindowLongPtrW( hwnd, 0); #endif } /* 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 HcpyPlotPS(HWND hwnd) { int i = 1; GRAPH* tmpgr = currentgraph; currentgraph = pGraph(hwnd); cp_vset("hcopydevtype", CP_STRING, "postscript"); /* If not set, the color will be b&w, i = 1 is white background */ cp_vset("hcopypscolor", CP_NUM, &i); com_hardcopy(NULL); currentgraph = tmpgr; /* update the text in the main window */ UpdateMainText(); SetFocus(swString); return 0; } /* postscript hardcopy from a plot window */ /* called by SystemMenue / SVG hardcopy */ static LRESULT HcpyPlotSVG(HWND hwnd) { GRAPH* tmpgr = currentgraph; currentgraph = pGraph(hwnd); cp_vset("hcopydevtype", CP_STRING, "svg"); com_hardcopy(NULL); currentgraph = tmpgr; /* update the text in the main window */ UpdateMainText(); SetFocus(swString); return 0; } static LRESULT HcpyPlotPSBW(HWND hwnd) { cp_vset("hcopydevtype", CP_STRING, "postscript"); return HcpyPlotBW(hwnd); } static LRESULT HcpyPlotSVGBW(HWND hwnd) { cp_vset("hcopydevtype", CP_STRING, "svg"); return HcpyPlotBW(hwnd); } static LRESULT HcpyPlotBW(HWND hwnd) { NG_IGNORE(hwnd); unsigned int colorid; char colorN[16], colorstring[30], tmpcolor[16][30]; /* save current colors, set color0 to white and alls others to black */ for (colorid = 0; colorid < 16; ++colorid) { sprintf(colorN, "color%d", colorid); if (cp_getvar(colorN, CP_STRING, colorstring, sizeof(colorstring))) { strcpy(tmpcolor[colorid], colorstring); } else { strcpy(tmpcolor[colorid], "empty"); } if (colorid == 0) cp_vset(colorN, CP_STRING, "white"); else cp_vset(colorN, CP_STRING, "black"); } /* The plot file creation */ com_hardcopy(NULL); /* reset colorN to the previous values */ for (colorid = 0; colorid < 16; ++colorid) { sprintf(colorN, "color%d", colorid); if (strcmp(tmpcolor[colorid], "empty") == 0) { cp_remvar(colorN); } else { cp_vset(colorN, CP_STRING, tmpcolor[colorid]); } } 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; } /* check if background color is dark enough. Threshold is empirical by looking at color tables */ static bool get_black(GRAPH* graph) { int tcolor = GetRValue(graph->colorarray[0]) + (int)(1.5 * GetGValue(graph->colorarray[0])) + GetBValue(graph->colorarray[0]); if (tcolor > 360) { return FALSE; } else return TRUE; } /* 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_PS: return HcpyPlotPS(hwnd); case ID_HARDCOPY_PS_BW: return HcpyPlotPSBW(hwnd); case ID_HARDCOPY_SVG: return HcpyPlotSVG(hwnd); case ID_HARDCOPY_SVG_BW: return HcpyPlotSVGBW(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); GRAPH* gr = pGraph(hwnd); isblack = get_black(gr); if (isblack) { prevmix = SetROP2(hdc, R2_XORPEN); } else { prevmix = SetROP2(hdc, R2_NOTXORPEN); } /* Create white dashed pen */ NewPen = CreatePen(LType(12), 0, gr->colorarray[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); GRAPH* gr = pGraph(hwnd); isblack = get_black(gr); if (isblack) prevmix = SetROP2(hdc, R2_XORPEN); else prevmix = SetROP2(hdc, R2_NOTXORPEN); /* Create white (black) dashed pen */ NewPen = CreatePen(LType(12), 0, gr->colorarray[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)); } } UpdateMainText(); 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 sgraphid %d\n", buf2, gr->commandline, fx0, fxe, fy0, fye, gr->graphid); } else { (void) sprintf(buf, "%s xlimit %e %e ylimit %e %e sgraphid %d\n", gr->commandline, fx0, fxe, fy0, fye, gr->graphid); } (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: #ifdef EXT_ASC return DefWindowProc(hwnd, uMsg, wParam, lParam); #else return DefWindowProcW( hwnd, uMsg, wParam, lParam); #endif } } /****************************************************************************** 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; #ifdef EXT_ASC TEXTMETRIC tm; #else TEXTMETRICW tmw; #endif tpWindowData wd; HMENU sysmenu; GRAPH* pgraph = NULL; /* test the parameters */ if (!graph) { return 1; } /* initialize if not yet done */ if (WIN_Init() != 0) { externalerror("Can't initialize GDI."); return 1; } /* get the colors into graph struct */ wincolor_graph(ColorTable, NumWinColors, graph); /* If we had a previous graph, e.g. after zooming, we have to set the background color already here, because background is set below */ if (graph->mgraphid > 0) { pgraph = FindGraph(graph->mgraphid); graph->colorarray[0] = pgraph->colorarray[0]; } /* allocate device dependency info */ wd = calloc(1, sizeof(tWindowData)); if (!wd) { return 1; } graph->devdep = wd; graph->n_byte_devdep = sizeof(tWindowData); /* Create the window */ i = GetSystemMetrics(SM_CYSCREEN) / 3; #ifdef EXT_ASC window = CreateWindow(WindowName, graph->plotname, WS_OVERLAPPEDWINDOW, 0, 0, WinLineWidth, i * 2 - 22, NULL, NULL, hInst, NULL); #else /* UTF-8 support */ const int n_byte_wide = (int) strlen(graph->plotname) + 1; wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); const int n_byte_wide2 = (int) strlen(WindowName) + 1; wchar_t * const wtext2 = TMALLOC(wchar_t, n_byte_wide2); /* translate UTF-8 to UTF-16 */ MultiByteToWideChar(CP_UTF8, 0, graph->plotname, -1, wtext, n_byte_wide); MultiByteToWideChar(CP_UTF8, 0, WindowName, -1, wtext2, n_byte_wide2); /* CreateWindowW requires NULL-terminated wtext */ window = CreateWindowW(wtext2, wtext, WS_OVERLAPPEDWINDOW, 0, 0, WinLineWidth, i * 2 - 22, NULL, NULL, hInst, NULL); txfree(wtext); txfree(wtext2); #endif if (!window) return 1; SetClassLongPtr(window, GCLP_HBRBACKGROUND, (LONG_PTR)GetStockObject(DC_BRUSH)); /* get the DC */ dc = GetDC(window); wd->hDC = dc; /* set the background color */ SelectObject(dc, GetStockObject(DC_BRUSH)); SetDCBrushColor(dc, graph->colorarray[0]); wd->wnd = window; SetWindowLongPtr(window, 0, (LONG_PTR)graph); /* show window */ ShowWindow(window, SW_SHOWNORMAL); /* get the mask */ GetClientRect(window, &(wd->Area)); /* set the Color Index */ wd->ColorIndex = 0; /* still no flag */ wd->PaintFlag = 0; wd->FirstFlag = 1; /* modify system menu */ 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_PS, STR_HARDCOPY_PS); // AppendMenu(sysmenu, MF_STRING, ID_HARDCOPY_PS_BW, STR_HARDCOPY_PS_BW); AppendMenu(sysmenu, MF_STRING, ID_HARDCOPY_SVG, STR_HARDCOPY_SVG); // AppendMenu(sysmenu, MF_STRING, ID_HARDCOPY_SVG_BW, STR_HARDCOPY_SVG_BW); /* set default parameters of DC */ SetBkColor(dc, graph->colorarray[0]); SetBkMode(dc, TRANSPARENT ); /* set font */ SelectObject(dc, PlotFont); /* query the font parameters */ #ifdef EXT_ASC if (GetTextMetrics(dc, &tm)) { graph->fontheight = tm.tmHeight; graph->fontwidth = tm.tmAveCharWidth; } #else if (GetTextMetricsW(dc, &tmw)) { graph->fontheight = tmw.tmHeight; graph->fontwidth = tmw.tmAveCharWidth + 1; /*FIXME relationship between height and width for various fonts*/ } #endif /* 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; /* get linewidth information from .spiceinit or .control section */ if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = 0; if (linewidth < 0) linewidth = 0; if (pgraph) graph->graphwidth = pgraph->graphwidth; else graph->graphwidth = linewidth; /* get linewidth information from .spiceinit or .control section */ if (!cp_getvar("xgridwidth", CP_NUM, &gridlinewidth, 0)) gridlinewidth = 0; if (gridlinewidth < 0) gridlinewidth = 0; if (pgraph) graph->gridwidth = pgraph->gridwidth; else graph->gridwidth = gridlinewidth; /* 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, bool isgrid) { 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); if (isgrid) NewPen = CreatePen(LType(wd->ColorIndex), currentgraph->gridwidth, currentgraph->colorarray[wd->ColorIndex]); else NewPen = CreatePen(LType(wd->ColorIndex), currentgraph->graphwidth, currentgraph->colorarray[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, currentgraph->colorarray[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(const char *text, int x, int y, int angle) { tpWindowData wd; HFONT hfont; #ifdef EXT_ASC LOGFONT lf; #else LOGFONTW lfw; #endif if (!currentgraph) return 0; wd = pWindowData(currentgraph); if (!wd) return 0; #ifdef EXT_ASC 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 = 18; //lf.lfHeight = (int) (1.3 * currentgraph->fontheight); hfont = CreateFontIndirect (&lf); #else char facename[32]; lfw.lfHeight = (int)(1.1 * currentgraph->fontheight); lfw.lfWidth = 0; lfw.lfEscapement = angle * 10; lfw.lfOrientation = angle * 10; lfw.lfWeight = 500; lfw.lfItalic = FALSE; lfw.lfUnderline = 0; lfw.lfStrikeOut = 0; lfw.lfCharSet = DEFAULT_CHARSET; lfw.lfOutPrecision = 0; lfw.lfClipPrecision = 0; lfw.lfQuality = 0; lfw.lfPitchAndFamily = 0; /* set up fonts */ if (!cp_getvar("wfont", CP_STRING, facename, sizeof(facename) - 1)) { (void)lstrcpyW(lfw.lfFaceName, DEFW_FONTW); } else { /* Read a font name (see https://docs.microsoft.com/en-us/typography/fonts/windows_10_font_list) Set lfw if Bold or Italic is found, remove both from facename, remove trailing spaces */ wchar_t wface[32]; char* tmpstr = strstr(facename, "Bold"); if (tmpstr) { lfw.lfWeight = 700; memcpy(tmpstr, " ", 4); } char* tmpstr2 = strstr(facename, "Italic"); if (tmpstr2) { lfw.lfItalic = TRUE; memcpy(tmpstr2, " ", 6); } /* remove trailing spaces */ if (tmpstr || tmpstr2) { char* const f_end = skip_back_ws(facename + strlen(facename), facename); *f_end = '\0'; } swprintf(wface, 32, L"%S", facename); (void)lstrcpyW(lfw.lfFaceName, wface); } if (!cp_getvar("wfont_size", CP_NUM, &(lfw.lfHeight), 0)) { lfw.lfHeight = 18; } else { currentgraph->fontheight = lfw.lfHeight; currentgraph->fontwidth = (int)(lfw.lfHeight*0.52); } hfont = CreateFontIndirectW(&lfw); #endif SelectObject(wd->hDC, hfont); SetTextColor(wd->hDC, currentgraph->colorarray[wd->ColorIndex]); #ifdef EXT_ASC TextOut(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, text, (int)strlen(text)); #else const int n_byte_wide = (int) strlen(text); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); /* wtext needs not to be NULL-terminated */ MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide); TextOutW(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, wtext, n_byte_wide); txfree(wtext); #endif DeleteObject(SelectObject(wd->hDC, hfont)); 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->viewportxoff) * (lmax - lmin) / graph->viewport.height + lmin) * M_LN10); } else { *fy = ((graph->absolute.height - y) - graph->viewportyoff) * graph->aspectratioy + graph->datawindow.ymin; } } #endif /* HAS_WINGUI */ tmp_ns50wwy/src/frontend/wdisp/windisp.h0000644000175000017500000000221614163340332020534 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 tmp_ns50wwy/src/frontend/wdisp/winprint.c0000644000175000017500000003332214163340332020726 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); /* wait until no events */ extern void wincolor_init(COLORREF* ColorTable, int noc); /* lokale Variablen */ static HFONT PlotFont = NULL; static HFONT OldFont = NULL; #define NumLines 7 /* number of LineStyles */ static int LineTable[NumLines]; /* LineStyle memory */ static HDC PrinterDC = NULL; /* Device Context */ #define NumPrintColors 23 /* number of pre-defined colors */ static COLORREF ColorTable[NumPrintColors]; /* color memory */ static int PrinterWidth = 1000; /* paper width */ static int PrinterHeight = 1000; /* paper height */ static int xoffset; /* offset from left boundary */ static int yoffset; /* offset from top */ /****************************************************************************** printer initialization ******************************************************************************/ 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 */ wincolor_init(ColorTable, NumPrintColors); /* if grid/text color is white, change to black */ if (ColorTable[1] == RGB(255, 255, 255)) ColorTable[1] = 0; ColorTable[0] = RGB(255, 255, 255); /* 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 = (int)(tm.tmAveCharWidth * 1.2); } /* 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 = (int)(PrinterWidth * .9); graph->absolute.height = (int)(PrinterHeight * .9); xoffset = (int)(PrinterWidth * .05); yoffset = (int)(PrinterHeight * -.05); /* 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); #ifdef EXT_ASC TextOut(PrinterDC, PrinterWidth - graph->fontwidth, -1*yoffset, graph->plotname, (int)strlen(graph->plotname)); #else /* wtext needs not to be NULL-terminated */ const int n_byte_wide = (int) strlen(graph->plotname); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); MultiByteToWideChar(CP_UTF8, 0, graph->plotname, -1, wtext, n_byte_wide); TextOutW(PrinterDC, PrinterWidth - graph->fontwidth -xoffset, -1*yoffset, wtext, n_byte_wide); txfree(wtext); #endif 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, bool isgrid) { NG_IGNORE(isgrid); x1 = x1 + xoffset; x2 = x2 + xoffset; y1 = y1 + yoffset; y2 = y2 + yoffset; tpPrintData pd; HPEN OldPen; HPEN NewPen; int ColIndex; if (!currentgraph) return 0; pd = pPrintData(currentgraph); if (!pd) return 0; /* Farben/Dicke */ ColIndex = pd->ColorIndex; MoveToEx(PrinterDC, x1, PrinterHeight - y1, NULL); if (isgrid) NewPen = CreatePen( LineTable[pd->LineIndex], 0, ColorTable[ColIndex] ); else NewPen = CreatePen( LineTable[pd->LineIndex], 10, 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; x0 = x0 + xoffset; y0 = y0 + yoffset; ColIndex = pd->ColorIndex; 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], 10, 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; x = x + xoffset; y = y + yoffset; ColIndex = pd->ColorIndex; SetTextColor( PrinterDC, ColorTable[ColIndex]); #ifdef EXT_ASC TextOut(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, text, (int)strlen(text)); #else /* wtext needs not to be NULL-terminated */ const int n_byte_wide = (int) strlen(text); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide); TextOutW(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, wtext, n_byte_wide); txfree(wtext); #endif 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 */ tmp_ns50wwy/src/frontend/trannoise/0000755000175000017500000000000014163340332017561 5ustar carstencarstentmp_ns50wwy/src/frontend/trannoise/Makefile.am0000644000175000017500000000037214163340332021617 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 tmp_ns50wwy/src/frontend/trannoise/wallace.c0000644000175000017500000003454414163340332021347 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); } 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)); /* 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 tmp_ns50wwy/src/frontend/trannoise/1-f-code.c0000644000175000017500000001420514163340332021222 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 txfree(hfa); txfree(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; txfree(this->oneof); txfree(this); } tmp_ns50wwy/src/frontend/trannoise/FastNorm3.c0000644000175000017500000006736714163340332021564 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 tmp_ns50wwy/src/frontend/nutinp.c0000644000175000017500000002017114163340332017241 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 - 1); 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 */ } tmp_ns50wwy/src/frontend/breakp2.c0000644000175000017500000001071214163340332017252 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 "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, *dbcheck; 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); */ } /* Don't save a nodename more than once */ if (db_type == DB_SAVE) { for (dbcheck = dbs; dbcheck; dbcheck = dbcheck->db_next) { if (dbcheck->db_type == DB_SAVE && eq(dbcheck->db_nodename1, db_nodename1)) { tfree(db_nodename1); goto loopend; } } } 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; loopend:; } } /* 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; } tmp_ns50wwy/src/frontend/quote.c0000644000175000017500000000237514163340332017067 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" /* Print a word */ void cp_printword(char *string, FILE *fp) { char *s; if (string) for (s = string; *s; s++) (void) putc((*s), fp); } /* 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 */ tmp_ns50wwy/src/frontend/testcommands.c0000644000175000017500000000061214163340332020423 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; } tmp_ns50wwy/src/frontend/circuits.c0000644000175000017500000000122714163340332017552 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; } tmp_ns50wwy/src/frontend/numparam/0000755000175000017500000000000014163340332017377 5ustar carstencarstentmp_ns50wwy/src/frontend/numparam/Makefile.am0000644000175000017500000000052514163340332021435 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 tmp_ns50wwy/src/frontend/numparam/xpressn.c0000644000175000017500000012012514163340332021246 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 char* sort_idlist(char *list); 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 (newcompat.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 */ 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) { /* build a qualified name */ DS_CREATE(param_name, 100); NGHASH_FIRST(&iter); for (entry = (entry_t *) nghash_enumerateRE(htable_p, &iter); entry; entry = (entry_t *) nghash_enumerateRE(htable_p, &iter)) { ds_clear(¶m_name); if (ds_cat_printf(¶m_name, "%s.%s", inst_name, entry->symbol) != DS_E_OK) { controlled_exit(-1); } nupa_add_inst_param(ds_get_buf(¶m_name), entry->vl); dico_free_entry(entry); } nghash_free(htable_p, NULL, NULL); ds_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, const 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 && ((unsigned char) (*s) > ' ')) s++; while (*s && ((unsigned char) (*s) <= ' ')) s++; /* skip blank */ s_end = s; while (*s_end && ((unsigned char) (*s_end) > ' ')) s_end++; if (s_end > s) { DS_CREATE(ustr, 200); /* temp user string */ pscopy(&ustr, s, s_end); err = nupa_define(dico, ds_get_buf(&ustr), ' ', NUPA_SUBCKT, 0.0, w, NULL); ds_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); entry_t *entry; /* symbol table entry */ DS_CREATE(ustr, 200); /* u= subckt name is last token in string s */ pscopy(&ustr, name_b, name_e); entry = entrynb(dico, ds_get_buf(&ustr)); ds_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) && ((unsigned char) (*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 ((unsigned char) 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; const char *s_orig = s; DS_CREATE(tstr, 200); for (i = 0; i <= nprece; i++) { accu[i] = 0.0; oper[i] = ' '; } /* trim trailing whitespace */ while ((s_end > s) && ((unsigned char) (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 { ds_clear(&tstr); pscopy(&tstr, s, s_next); u = fetchnumentry(dico, ds_get_buf(&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; ds_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(DSTRINGPTR qstr_p, double value) { char buf[ACT_CHARACTS + 1]; if (snprintf(buf, sizeof(buf), "% 23.15e ", 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, DSTRINGPTR qstr_p, const char *t, const char * const t_end) { bool err = 0; double u; ds_clear(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, DSTRINGPTR ustr_p) /* insert u in string s in place of the next placeholder number */ { const char *u = ds_get_buf(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; DS_CREATE(qstr, 200); /* temp result dynamic string */ 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) { ds_clear(&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: ds_free(&qstr); return err; } static const char * getword(const char *s, 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++; ds_clear(tstr_p); pscopy(tstr_p, word, s); return s; } static char * getexpress(nupa_type *type, 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) && ((unsigned char)(* s) <= ' ')) s++; /*white space ? */ if (*s == '"') { /* string constant */ s++; p = s; while ((p < s_end - 1) && (*p != '"')) p++; do p++; while ((p < s_end) && ((unsigned char)(*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 */ DS_CREATE(tstr, 200); /* temporary dstrings */ DS_CREATE(ustr, 200); while ((p < s_end) && ((unsigned char) (*p) <= ' ')) p++; if (*p == '.') /* skip any dot keyword */ while ((unsigned char) (*p) > ' ') p++; while (p < s_end) { p = getword(p, &tstr); t_p = ds_get_buf(&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 = ds_get_buf(&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, ds_get_buf(&tstr), mode /* was ' ' */ , dtype, rval, wval, NULL); if (error) break; if ((p < s_end) && (p[-1] != ';')) { error = message(dico, " ; sign expected.\n"); break; } } ds_free(&tstr); ds_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; bool err = 0; DS_CREATE(subname, 200); DS_CREATE(tstr, 200); DS_CREATE(ustr, 200); DS_CREATE(vstr, 200); DS_CREATE(idlist, 200); /***** first, analyze the subckt definition line */ n = 0; /* number of parameters if any */ scopys(&tstr, s); const char *j2 = strstr(ds_get_buf(&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(ds_get_buf(&tstr), "params:"); if (i2) { const char* optr, * jptr; /* search identifier to the left of '=' assignments */ for (optr = i2 + 7; (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 = ds_get_buf(&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, ds_get_buf(&subname)); if (!next_p) break; jp = next_p; } if (jp) { jp += ds_get_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; ds_clear(&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 ((unsigned char) (*kp) > ' ') message(dico, "Subckt call, symbol %c not understood\n", *kp); } char * const u_p = ds_get_buf(&ustr); if (*u_p) { char * const idlist_p = ds_get_buf(&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, ds_get_buf(&idlist)); /* ;} else { debugwarn(dico, idlist) */ } /* sort the idlist, so that plain numerical entries like nf=2 move to the front */ char* sortedlist = sort_idlist(ds_get_buf(&idlist)); err = nupa_assignment(dico, sortedlist, 'N'); ds_free(&subname); ds_free(&tstr); ds_free(&ustr); ds_free(&vstr); ds_free(&idlist); tfree(sortedlist); 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" }; /* get the instance line list, sort numerical entries (eg. nf=1) to the front */ static char* sort_idlist(char* list) { wordlist* wl = NULL, *wle = NULL; bool start = TRUE; char* cut_list = list, *ret; while (*cut_list != '\0') { int error; char* token = gettok_char(&cut_list, ';', TRUE, FALSE); char* eqstr = strchr(token, '='); eqstr++; INPevaluate(&eqstr, &error, 1); /* num entry, prepend word */ if (error == 0 && *eqstr == '\0') { wle = wl_cons(token, wle); if (start) wl = wle; start = FALSE; } /* expression, append word */ else { wl_append_word(&wl, &wl, token); if (start) wle = wl; start = FALSE; } } ret = wl_flatten(wle); wl_free(wle); return ret; } tmp_ns50wwy/src/frontend/numparam/spicenum.c0000644000175000017500000005102214163340332021366 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(DSTRINGPTR dstr_p, bool incontrol) { /* if s starts with one of some markers, strip leading space */ const char *markers = incontrol ? "*.&+#$" : "*.&+#$" "xX"; char *s = ds_get_buf(dstr_p); int i = 0; while (s[i] && ((unsigned char)s[i] <= ' ')) i++; if ((i > 0) && s[i] && strchr(markers, s[i])) pscopy(dstr_p, s + i, NULL); } static int stripbraces(DSTRINGPTR dstr_p) /* puts the funny placeholders. returns the number of {...} substitutions */ { int n = 0; char *s = ds_get_buf(dstr_p); char *p, *brace; DS_CREATE(tstr, 200); 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 ((unsigned char)brace[-1] > ' ') cadd(&tstr, ' '); cadd(&tstr, ' '); { char buf[25+1]; sprintf(buf, "numparm__________%08lx", ++placeholder); sadd(&tstr, buf); } cadd(&tstr, ' '); if ((unsigned char)(* j_ptr) >= ' ') cadd(&tstr, ' '); int ilen = (int) ds_get_length(&tstr); sadd(&tstr, j_ptr); scopyd(dstr_p, &tstr); s = ds_get_buf(dstr_p); p = s + ilen; } dynsubst = placeholder; ds_free(&tstr); return n; } static void findsubname(dico_t *dico, 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 = ds_get_buf(dstr_p); char *p = s + ds_get_length(dstr_p); DS_CREATE(name, 200); /* extract a 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 (newcompat.ps) for (t = p; alfanumps(*t); t++) ; else for (t = p; alfanum(*t); t++) ; ds_clear(&name); pscopy(&name, p, t); entry = entrynb(dico, ds_get_buf(&name)); if (entry && (entry->tp == NUPA_SUBCKT)) { (void) ds_set_length(dstr_p, (size_t) (p_end - s)); ds_free(&name); return; } } } ds_free(&name); } static char transform(dico_t *dico, 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 = ds_get_buf(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) { ds_set_length(dstr_p, (size_t) (params - s)); } 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(const 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; DS_CREATE(u, 200); 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(ds_get_buf(&u)); if (!t) { fputs("Fatal: String malloc crash in nupa_copy()\n", stderr); controlled_exit(EXIT_FAILURE); } ds_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]; } tmp_ns50wwy/src/frontend/numparam/general.h0000644000175000017500000000107714163340332021172 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" void pscopy(DSTRINGPTR s, const char *str, const char *stop); void scopyd(DSTRINGPTR dst, const DSTRINGPTR src); void scopys(DSTRINGPTR a, const char *b); void sadd(DSTRINGPTR s, const char *t); void cadd(DSTRINGPTR s, char c); bool alfa(char c); bool alfanum(char c); bool alfanumps(char c); int yes_or_no(void); tmp_ns50wwy/src/frontend/numparam/numpaif.h0000644000175000017500000000162114163340332021207 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(const 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 tmp_ns50wwy/src/frontend/numparam/mystring.c0000644000175000017500000000774314163340332021432 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(DSTRINGPTR dstr_p, const char *t) { if (ds_cat_str(dstr_p, t) != DS_E_OK) { controlled_exit(-1); } } /* ----------------------------------------------------------------- * Function: add character c to dynamic string dstr_p. * ----------------------------------------------------------------- */ void cadd(DSTRINGPTR dstr_p, char c) { if (ds_cat_char(dstr_p, c) != DS_E_OK) { controlled_exit(-1); } } /* ----------------------------------------------------------------- * Create copy of the dynamic string. Dynamic strings are always NULL * terminated. * ----------------------------------------------------------------- */ void scopyd(DSTRINGPTR dst, const DSTRINGPTR src) /* returns success flag */ { ds_clear(dst); if (ds_cat_ds(dst, src) != DS_E_OK) { controlled_exit(-1); } } /* ----------------------------------------------------------------- * Create copy of the string in the dynamic string. Dynamic strings * are always NULL terminated. * ----------------------------------------------------------------- */ void scopys(DSTRINGPTR s, const char *t) /* returns success flag */ { ds_clear(s); if (ds_cat_str(s, t) != DS_E_OK) { controlled_exit(-1); } } /* Copy until stop char (exclusive) or end of string if none given */ void pscopy(DSTRINGPTR dstr_p, const char *t, const char *stop) { if (!stop) { /* locate end of string if no stop char given */ stop = strchr(t, '\0'); } ds_clear(dstr_p); if (ds_cat_mem(dstr_p, t, (size_t) (stop - t)) != DS_E_OK) { controlled_exit(-1); } return; } /* end of function pscopy */ bool alfa(char c) { return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || c == '_' || c == '[' || c == ']' || ((c) & 0200); } 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 == '-'; } tmp_ns50wwy/src/frontend/numparam/numparam.h0000644000175000017500000000457714163340332021405 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 *, const 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 *); tmp_ns50wwy/src/frontend/numparam/readme.txt0000644000175000017500000006761314163340332021412 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 tmp_ns50wwy/src/frontend/misccoms.c0000644000175000017500000002272414163340332017547 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Wayne A. Christopher, U. C. Berkeley CAD Group **********/ #include "../misc/ivars.h" #include "circuits.h" #include "com_alias.h" #include "define.h" #include "display.h" #include "ftehelp.h" #include "misccoms.h" #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "ngspice/dvec.h" #include "ngspice/iferrmsg.h" #include "ngspice/hlpdefs.h" #include "plotting/graf.h" #include "plotting/plotit.h" #include "postcoms.h" #include "runcoms2.h" #include "variable.h" #include "com_unset.h" #ifndef SHARED_MODULE #ifdef HAVE_GNUREADLINE #include #include extern char history_file[]; #endif #ifdef HAVE_BSDEDITLINE #include extern char history_file[]; #endif #endif #ifdef SHARED_MODULE extern void rem_controls(void); extern void destroy_wallace(void); extern void sh_delete_myvec(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"); destroy_wallace(); } rem_controls(); /* Destroy CKT when quit. */ if (!ft_nutmeg) { while(ft_curckt) com_remcirc(NULL); } cp_destroy_keywords(); destroy_ivars(); #else /* remove plotting parameters */ pl_rempar(); while (ft_curckt) com_remcirc(NULL); #endif tfree(errMsg); byemesg(); #ifdef SHARED_MODULE destroy_const_plot(); spice_destroy_devices(); unset_all(); cp_resetcontrol(FALSE); sh_delete_myvec(); /* 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); if (system(buf) == -1) { fprintf(cp_err, "Bug report could not be sent: \"%s\" failed.\n", 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" "** Copyright 2001-2020, The ngspice team.\n" "** %s\n", ft_sim->simulator, ft_sim->version, ft_sim->description, Spice_Manual); if (*Spice_Notice != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (*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 != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (*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 != '\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" "** Copyright 2001-2020, The ngspice team.\n" "** %s\n", ft_sim->simulator, ft_sim->version, ft_sim->description, Spice_Manual); if (*Spice_Notice != '\0') fprintf(cp_out, "** %s\n", Spice_Notice); if (*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) { #ifndef SHARED_MODULE #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 #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')); } tmp_ns50wwy/src/frontend/cpitf.h0000644000175000017500000000020514163340332017032 0ustar carstencarsten/************* * Header file for cpitf.c * 1999 E. Rouat ************/ #ifndef ngspice_CPITF_H #define ngspice_CPITF_H #endif tmp_ns50wwy/src/frontend/terminal.h0000644000175000017500000000031714163340332017544 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 tmp_ns50wwy/src/frontend/com_wr_ic.h0000644000175000017500000000032214163340332017666 0ustar carstencarsten/* ngspice file Copyright Holger Vogt 2021 License: BSD 3-clause */ /* Print the current node status to a file with format .ic V(node) = value */ extern void com_wric(wordlist* wl); tmp_ns50wwy/src/frontend/com_option.c0000644000175000017500000000754214163340332020101 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 || !ft_curckt->ci_ckt) { 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("cshunt = %g\n", circuit->CKTcshunt); 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); } tmp_ns50wwy/src/frontend/inpcom.c0000644000175000017500000122460214163340332017217 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() */ /* Note: Must include shlwapi.h before ngspice header defining BOOL due * to conflict */ #ifdef _WIN32 #include /* for definition of PathIsRelativeA() */ #pragma comment(lib, "Shlwapi.lib") #endif #include "ngspice/ngspice.h" #include "ngspice/compatmode.h" #include "ngspice/cpdefs.h" #include "ngspice/dstring.h" #include "ngspice/dvec.h" #include "ngspice/ftedefs.h" #include "ngspice/fteext.h" #include "ngspice/fteinp.h" #include "numparam/general.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); /* 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); 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, const 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); 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 int 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(const char *name, const char *dir); static char *search_plain_identifier(char *str, const char *identifier); struct nscope *inp_add_levels(struct card *deck); static struct card_assoc *find_subckt(struct nscope *scope, const char *name); void inp_rem_levels(struct nscope *root); 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 void print_compat_mode(void); static void set_compat_mode(void); 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); static void inp_repair_dc_ps(struct card* oldcard); static void inp_get_w_l_x(struct card* oldcard); static char* eval_m(char* line, char* tline); static char* eval_tc(char* line, char* tline); static void rem_double_braces(struct card* card); extern void inp_probe(struct card* card); #ifndef EXT_ASC static void utf8_syntax_check(struct card *deck); #endif struct card* insert_new_line( struct card* card, char* line, int linenum, int linenum_orig); struct inp_read_t { struct card *cc; int line_number; }; struct inp_read_t inp_read( FILE *fp, int call_depth, const char *dir_name, bool comfile, bool intfile); #ifdef XSPICE static int inp_poly_2g6_compat(struct card* deck); #else static void inp_poly_err(struct card *deck); #endif #ifdef CIDER static char *keep_case_of_cider_param(char *buffer) { int numq = 0, keep_case = 0; char *s = 0; /* Retain the case of strings enclosed in double quotes for output rootfile and doping infile params within Cider .model statements. Also for the ic.file filename param in an element instantiation statement. No nested double quotes. */ for (s = buffer; *s && (*s != '\n'); s++) { if (*s == '\"') { numq++; } } if (numq == 2) { /* One pair of double quotes */ for (s = buffer; *s && (*s != '\n'); s++) { if (*s == '\"') { keep_case = (keep_case == 0 ? 1 : 0); } if (!keep_case) { *s = tolower_c(*s); } } } else { for (s = buffer; *s && (*s != '\n'); s++) { *s = tolower_c(*s); } } return s; } static int is_comment_or_blank(char *buffer) { /* Assume line buffers have initial whitespace removed */ switch (buffer[0]) { case '*': case '$': case '#': case '\n': case '\0': return 1; default: return 0; } } static int turn_off_case_retention(char *buffer) { if (!buffer) { return 1; } if (buffer[0] == '.') { if (ciprefix(".model", buffer)) { return 0; } else { return 1; } } else if (is_comment_or_blank(buffer)) { return 0; } else if (buffer[0] == '+') { return 0; } else { return 1; } } static char *make_lower_case_copy(char *inbuf) { char *s = NULL; char *rets = NULL; size_t lenb = 0; if (!inbuf) { return NULL; } lenb = strlen(inbuf); if (lenb < 1) { return NULL; } rets = dup_string(inbuf, lenb); if (!rets) { return NULL; } for (s = rets; *s; s++) { *s = tolower_c(*s); } return rets; } static int ignore_line(char *buf) { /* Can the line in buf be ignored for ic.file checking? Expect to examine only diode, mos, bipolar instance lines. If the ic.file param is on a continuation line, it will be missed. This should be rare. */ if (!buf) { return 1; } if (buf[0] == '.') { return 1; } if (is_comment_or_blank(buf)) { return 1; } /* Interpreter d.., q.., m.. */ switch (buf[0]) { case 'D': case 'd': if (ciprefix("dc", buf) || ciprefix("dowhile", buf) || ciprefix("define", buf) || ciprefix("deftype", buf) || ciprefix("delete", buf) || ciprefix("destroy", buf) || ciprefix("devhelp", buf) || ciprefix("diff", buf) || ciprefix("display", buf) ) { return 1; } else { return 0; } break; case 'M': case 'm': if (ciprefix("mc_source", buf) || ciprefix("meas", buf) || ciprefix("mdump", buf) || ciprefix("mrdump", buf) ) { return 1; } else { return 0; } break; case 'Q': case 'q': if (ciprefix("quit", buf)) { return 1; } else { return 0; } break; default: break; } return 1; } static int line_contains_icfile(char *buf) { /* Find "ic.file" in a lower cased copy of buf. */ char str[] = "ic.file"; char *s = NULL; if (ignore_line(buf)) { return 0; } /* make_lower_case_copy checks its input string */ s = make_lower_case_copy(buf); if (!s) { return 0; } if (strstr(s, str)) { tfree(s); return 1; } else { tfree(s); return 0; } } static int is_cider_model(char *buf) { /* Expect numos, numd, nbjt to be on the same line as the .model. Otherwise it will be missed if on a continuation line. This should be rare. */ char *s; if (!ciprefix(".model", buf)) { return 0; } s = make_lower_case_copy(buf); if (!s) return 0; if (strstr(s, "numos") || strstr(s, "numd") || strstr(s, "nbjt")) { tfree(s); return 1; } else { tfree(s); return 0; } } #endif /* insert a new card, just behind the given card */ 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(const char *y, const 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(_WIN32) 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); } txfree(yy); txfree(y_resolved); return lib; } /* end of function read_a_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); } #ifndef _MSC_VER /* concatenate 2 strings, with space if spa == TRUE, return malloced string (replacement for tprintf, which is not efficient enough when reading PDKs under Linux) */ static char *cat2strings(char *s1, char *s2, bool spa) { if (s2 == NULL || *s2 == '\0') { return copy(s1); } else if (s1 == NULL || *s1 == '\0') { return copy(s2); } size_t lges = strlen(s1) + strlen(s2) + 2; char *nextstr; char *strsum = TMALLOC(char, lges); if (spa) { nextstr = memccpy(strsum, s1, '\0', lges); *(nextstr - 1) = ' '; nextstr = memccpy(nextstr, s2, '\0', lges); } else { nextstr = (char*)memccpy(strsum, s1, '\0', lges) - 1; nextstr = (char*)memccpy(nextstr, s2, '\0', lges) - 1; *nextstr = '\0'; } return strsum; } #endif /* 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. When reading a PDK, the following may be called more than 1e6 times. */ #if defined (_MSC_VER) /* vsnprintf (used by tprintf) in Windows is efficient, VS2019 arb. referencevalue 7, cat2strings() yields ref. speed value 12 only, CYGWIN is 12 in both cases, MINGW is 36. */ buffer = tprintf("%s %s", prev->line, s + 1); #else /* vsnprintf in Linux is very inefficient, ref. value 24 cat2strings() is efficient with ref. speed value 6, MINGW is 12 */ buffer = cat2strings(prev->line, s + 1, TRUE); #endif /* 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: - LTSPICE, HSPICE, Spice3, PSPICE, KiCad, Spectre */ struct compat newcompat; static void set_compat_mode(void) { char behaviour[80]; newcompat.hs = FALSE; newcompat.ps = FALSE; newcompat.lt = FALSE; newcompat.ki = FALSE; newcompat.a = FALSE; newcompat.spe = FALSE; newcompat.isset = FALSE; newcompat.s3 = FALSE; newcompat.mc = FALSE; if (cp_getvar("ngbehavior", CP_STRING, behaviour, sizeof(behaviour))) { if (strstr(behaviour, "hs")) newcompat.isset = newcompat.hs = TRUE; /*HSPICE*/ if (strstr(behaviour, "ps")) newcompat.isset = newcompat.ps = TRUE; /*PSPICE*/ if (strstr(behaviour, "lt")) newcompat.isset = newcompat.lt = TRUE; /*LTSPICE*/ if (strstr(behaviour, "ki")) newcompat.isset = newcompat.ki = TRUE; /*KiCad*/ if (strstr(behaviour, "a")) newcompat.isset = newcompat.a = TRUE; /*complete netlist, used in conjuntion with other mode*/ if (strstr(behaviour, "ll")) newcompat.isset = newcompat.ll = TRUE; /*all (currently not used)*/ if (strstr(behaviour, "s3")) newcompat.isset = newcompat.s3 = TRUE; /*spice3 only*/ if (strstr(behaviour, "eg")) newcompat.isset = newcompat.eg = TRUE; /*EAGLE*/ if (strstr(behaviour, "spe")) { newcompat.isset = newcompat.spe = TRUE; /*Spectre*/ newcompat.ps = newcompat.lt = newcompat.ki = newcompat.eg = FALSE; } if (strstr(behaviour, "mc")) { newcompat.isset = FALSE; newcompat.mc = TRUE; /*make check*/ } } if (newcompat.hs && newcompat.ps) { fprintf(stderr, "Warning: hs and ps compatibility are mutually exclusive, switch to ps!\n"); newcompat.hs = FALSE; } /* reset everything for 'make check' */ if (newcompat.mc) newcompat.eg = newcompat.hs = newcompat.spe = newcompat.ps = newcompat.ll = newcompat.lt = newcompat.ki = newcompat.a = FALSE; } /* Print the compatibility flags */ static void print_compat_mode(void) { if (newcompat.mc) /* make check */ return; if (newcompat.isset) { fprintf(stdout, "\n"); fprintf(stdout, "Compatibility modes selected:"); if (newcompat.hs) fprintf(stdout, " hs"); if (newcompat.ps) fprintf(stdout, " ps"); if (newcompat.lt) fprintf(stdout, " lt"); if (newcompat.ki) fprintf(stdout, " ki"); if (newcompat.ll) fprintf(stdout, " ll"); if (newcompat.s3) fprintf(stdout, " s3"); if (newcompat.eg) fprintf(stdout, " eg"); if (newcompat.spe) fprintf(stdout, " spe"); if (newcompat.a) fprintf(stdout, " a"); fprintf(stdout, "\n\n"); } else { fprintf(stdout, "\n"); fprintf(stdout, "No compatibility mode selected!\n\n"); } } /* We check x lines for nf=, w= and l= and fill in their values. To be used when expanding subcircuits with binned model cards. In subckt.c, function doit(), lines 621ff. the unsused models are filtered out. 'nf' given on an x line (subcircuit invocation) is aknowledged. The option 'wnflag', if set to 0 in .spiceinit, will set 'nf' to 1 and thus suppress its usage. In inp.c, function rem_unused_mos_models, another trial to removing unused MOS models is given, this time on the expanded m lines and its models.*/ void inp_get_w_l_x(struct card* card) { int wnflag; if (!cp_getvar("wnflag", CP_NUM, &wnflag, 0)) { if (newcompat.spe || newcompat.hs) wnflag = 1; else wnflag = 0; } for (; card; card = card->nextcard) { char* curr_line = card->line; int skip_control = 0; char* w = NULL, * l = NULL, * nf = NULL; card->w = card->l = 0; card->nf = 1.; /* 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; } /* only subcircuit invocations */ if (*curr_line != 'x' || (!newcompat.hs && !newcompat.spe)) { continue; } w = strstr(curr_line, " w="); if (w) { int err; w = w + 3; card->w = (float)INPevaluate(&w, &err, 0); if(err) { card->w = 0; continue; } } else { card->w = card->l = 0; continue; } l = strstr(curr_line, " l="); if (l) { int err; l = l + 3; card->l = (float)INPevaluate(&l, &err, 0); if(err) { card->l = 0; continue; } } else { card->w = card->l = 0; continue; } nf = strstr(curr_line, " nf="); if (nf) { int err; nf = nf + 4; card->nf = (float)INPevaluate(&nf, &err, 0); if (err) { card->w = card->l = 0; card->nf = 1.; continue; } } else { continue; } } } /*------------------------------------------------------------------------- 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, const char *dir_name, bool comfile, bool intfile, bool *expr_w_temper_p) { struct card *cc; struct inp_read_t rv; num_libraries = 0; /* set the members of the compatibility structure */ set_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; print_compat_mode(); delete_libs(); #ifndef EXT_ASC utf8_syntax_check(working); #endif /* some syntax checks, including title line */ inp_check_syntax(cc); if (newcompat.lt && newcompat.a) ltspice_compat_a(working); if (newcompat.ps && newcompat.a) pspice_compat_a(working); struct nscope *root = inp_add_levels(working); inp_probe(working); inp_fix_for_numparam(subckt_w_params, working); inp_remove_excess_ws(working); if(inp_vdmos_model(working)) { line_free_x(cc, TRUE); inp_rem_levels(root); return NULL; } /* don't remove unused model if we have an .if clause, because we cannot yet decide here which model we finally will need. There is another trial using these functions in inpc, when the netlist is expanded and flattened.*/ 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); // tprint(working); /* Special handling for large PDKs: We need to know W and L of transistor subcircuits by checking their x invocation */ inp_get_w_l_x(working); 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); #ifdef XSPICE if (inp_poly_2g6_compat(working)) { inp_rem_levels(root); line_free_x(cc, TRUE); return NULL; } #else inp_poly_err(working); #endif /* a preliminary fix: if ps is enabled, .dc TEMP -15 75 5 will have been modified to .dc (TEMPER) -15 75 5. So we repair it here. */ if (newcompat.ps) { inp_repair_dc_ps(working); } bool expr_w_temper = FALSE; if (!newcompat.s3) { /* 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, const 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; #ifdef CIDER static int in_cider_model = 0; #endif /* 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 (newcompat.lt || newcompat.ps) { /* 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 (newcompat.lt && !newcompat.a) newcard = ltspice_compat(newcard); if (newcompat.ps && !newcompat.a) 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 last line */ end->linenum_orig = line_number_inc++; /* SJB - renumber the last line */ } /* Fix the buffer up a bit. */ (void) memcpy(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; #ifdef CIDER if (ciprefix(".model", buffer)) { in_cider_model = is_cider_model(buffer); #ifdef TRACE printf("Found .model Cider model is %s\n", (in_cider_model ? "ON" : "OFF")); #endif } if (in_cider_model && turn_off_case_retention(buffer)) { in_cider_model = 0; #ifdef TRACE printf("Cider model is OFF\n"); #endif } #endif 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); } } #ifdef CIDER else if (in_cider_model && !is_comment_or_blank(buffer) && (ciprefix(".model", buffer) || buffer[0] == '+')) { s = keep_case_of_cider_param(buffer); } else if (line_contains_icfile(buffer)) { s = keep_case_of_cider_param(buffer); } #endif /* 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("cd ", 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 buffer while keeping the sourcepath variable contents */ if (ciprefix("set", buffer)) { 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++) ; } else { fprintf(stderr, "Warning: no closing parens found in 'set sourcepath' statement\n"); } } } if (!*s) { // fprintf(cp_err, "Warning: premature EOF\n"); } *s = '\0'; /* Zap the newline. */ if ((s - 1) >= buffer && s[- 1] == '\r') { /* Zap 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 (!newcompat.lt && !newcompat.ps && !newcompat.s3) { /* 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; } /* Returns true if path is an absolute path and false if it is a * relative path. No check is done for the existance of the path. */ inline static bool is_absolute_pathname(const char *path) { #ifdef _WIN32 return !PathIsRelativeA(path); #else return path[0] == DIR_TERM; #endif } /* end of funciton is_absolute_pathname */ #if 0 static bool is_plain_filename(const char *p) { #if defined(_WIN32) return !strchr(p, DIR_TERM) && !strchr(p, DIR_TERM_LINUX); #else return !strchr(p, DIR_TERM); #endif } #endif FILE *inp_pathopen(const char *name, const char *mode) { char * const path = inp_pathresolve(name); if (path) { FILE *fp = fopen(path, mode); txfree(path); return fp; } return (FILE *) NULL; } /* end of function inp_pathopen */ /* for MultiByteToWideChar */ #if defined(__MINGW32__) || defined(_MSC_VER) #ifndef EXT_ASC #undef BOOLEAN #include #endif #endif /*-------------------------------------------------------------------------* 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) { struct variable *v; struct stat st; #if defined(_WIN32) /* 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) { DS_CREATE(ds, 100); if (ds_cat_str(&ds, name) != 0) { fprintf(stderr, "Unable to copy string while resolving path"); controlled_exit(EXIT_FAILURE); } char *const buf = ds_get_buf(&ds); buf[0] = buf[1]; buf[1] = ':'; char * const resolved_path = inp_pathresolve(buf); ds_free(&ds); return resolved_path; } #endif /* just try it */ if (stat(name, &st) == 0) return copy(name); #if !defined(EXT_ASC) && (defined(__MINGW32__) || defined(_MSC_VER)) wchar_t wname[BSIZE_SP]; if (MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, 2 * (int)strlen(name) + 1) == 0) { fprintf(stderr, "UTF-8 to UTF-16 conversion failed with 0x%x\n", GetLastError()); fprintf(stderr, "%s could not be converted\n", name); return NULL; } if (_waccess(wname, 0) == 0) return copy(name); #endif /* 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 (char *) NULL; } { DS_CREATE(ds, 100); for (; v; v = v->va_next) { int rc_ds; ds_clear(&ds); /* empty buffer */ switch (v->va_type) { case CP_STRING: rc_ds = ds_cat_printf(&ds, "%s%s%s", v->va_string, DIR_PATHSEP, name); break; case CP_NUM: rc_ds = ds_cat_printf(&ds, "%d%s%s", v->va_num, DIR_PATHSEP, name); break; case CP_REAL: /* This is foolish */ rc_ds = ds_cat_printf(&ds, "%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); } if (rc_ds != 0) { /* unable to build string */ (void) fprintf(cp_err, "Unable to build path name in inp_pathresolve"); controlled_exit(EXIT_FAILURE); } /* Test if the file is found */ { const char * const buf = ds_get_buf(&ds); if (stat(buf, &st) == 0) { char * const buf_cpy = dup_string( buf, ds_get_length(&ds)); ds_free(&ds); return buf_cpy; } /* Else contiue with next attempt */ } } /* end of loop over linked variables */ ds_free(&ds); } /* end of block trying to find a valid name */ return (char *) NULL; } /* end of function inp_pathresolve */ static char *inp_pathresolve_at(const char *name, const char *dir) { /* 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 * const y = cp_tildexpand(name); if (y) { char * const r = inp_pathresolve(y); txfree(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 */ { DS_CREATE(ds, 100); if (ds_cat_printf(&ds, ".%c%s", DIR_TERM, name) != 0) { (void) fprintf(cp_err, "Unable to build \".\" path name in inp_pathresolve_at"); controlled_exit(EXIT_FAILURE); } char * const r = inp_pathresolve(ds_get_buf(&ds)); ds_free(&ds); if (r != (char *) NULL) { return r; } } { DS_CREATE(ds, 100); int rc_ds = 0; rc_ds |= ds_cat_str(&ds, dir); /* copy the dir name */ const size_t n = ds_get_length(&ds); /* end of copied dir name */ /* Append a directory separator if not present already */ const char ch_last = n > 0 ? dir[n - 1] : '\0'; if (ch_last != DIR_TERM #ifdef _WIN32 && ch_last != DIR_TERM_LINUX #endif ) { rc_ds |= ds_cat_char(&ds, DIR_TERM); } rc_ds |= ds_cat_str(&ds, name); /* append the file name */ if (rc_ds != 0) { (void) fprintf(cp_err, "Unable to build \"dir\" path name " "in inp_pathresolve_at"); controlled_exit(EXIT_FAILURE); } char * const r = inp_pathresolve(ds_get_buf(&ds)); ds_free(&ds); return r; } } /* end of function inp_pathresolve_at */ /*-------------------------------------------------------------------------* * 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++; } /* Remove the extra white spaces just introduced */ card->line = inp_remove_ws(card->line); } } 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(char *s, const char* line) { char *st; double testval; int error = 0; char* evalrc; /*token contains a '=' */ if (strchr(s, '=')) return FALSE; /* first characters not allowed in model name (including '\0')*/ if (strchr("{*^@\\\'", s[0])) return FALSE; /* RKM: r100 4k7 are valid numbers for resistors, so not valid model names. */ if (newcompat.lt && *line == 'r') { evalrc = s; INPevaluateRKM_R(&evalrc, &error, 0); if (*evalrc == '\0' && !error) return FALSE; } if (newcompat.lt && *line == 'c') { evalrc = s; INPevaluateRKM_C(&evalrc, &error, 0); if (*evalrc == '\0' && !error) return FALSE; } /* first character of model name is character from alphabet */ if (isalpha_c(s[0])) return TRUE; /* 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 */ if (*st == '\0' || isspace_c(*st)) { return FALSE; } /* 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_c(*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_c(*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 /* see line 2452 */ 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, line)) 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 */ 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; /* no models embedded in these lines */ if (*line == '.') continue; 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, line)) 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 = '*'; /* make line a comment */ } #if 0 /* comment out any unused models */ for (card = start_card; card; card = card->nextcard) { char* line = card->line; if (*line == '*') continue; 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 characters with '_', however if non-printable character is the only character in a line, replace it by '*'. If there is a XSPICE code model .model line with file input, keep quotes and case for the file path. *-------------------------------------------------------------------------*/ 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) { #ifdef XSPICE /* special treatment of code model file input */ char* tmpstr = NULL; bool keepquotes = ciprefix(".model", string); if (keepquotes){ tmpstr = strstr(string, "file="); keepquotes = keepquotes && tmpstr; } #endif while (*string) { #ifdef XSPICE /* exclude file name inside of quotes from getting lower case, keep quotes to enable spaces in file path */ if (keepquotes && string == tmpstr) { string = string + 6; // past first quote while (*string && *string != '"') string++; if (*string) string++; // past second quote if (*string == '\0') break; } #endif if (*string == '"') { *string++ = ' '; while (*string && *string != '"') string++; if (*string == '\0') continue; /* needed if string is "something ! */ if (*string == '"') *string = ' '; } if (*string && !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 == '$') && !newcompat.ps) { /* 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 (!newcompat.hs && !newcompat.s3) 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, const 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, const 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; if (newcompat.hs) { /* if there is already an m=xx in the instance line, multiply it with the new m */ char* mult = strstr(curr_line, " m="); if (mult) { char* beg = copy_substring(curr_line, mult); mult = mult + 3; char* multval = gettok(&mult); /* replace { } or ' ' by ( ) to avoid double braces */ if (*multval == '{' || *multval == '\'') { *multval = '('; } char* tmpstr = strchr(multval, '}'); if (tmpstr) { *tmpstr = ')'; } tmpstr = strchr(multval, '\''); if (tmpstr) { *tmpstr = ')'; } new_str = tprintf("%s m={m*%s} %s", beg, multval, mult); tfree(beg); tfree(multval); } else { new_str = tprintf("%s m={m}", curr_line); } } else { 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; /* If we have '.model mymod mdname(params)', don't treat this as a function, but skip '.model mymod mdname' and only then start searching for functions. */ if (ciprefix(".model", search_ptr)){ search_ptr = nexttok(search_ptr); search_ptr = nexttok(search_ptr); char *end; findtok_noparen(&search_ptr, &search_ptr, &end); } // 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; } 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': return 2; break; case 'd': i = 0; /* find the first token with "off" or "=" in the line*/ while ((i < 10) && (*c != '\0')) { char *inst = gettok_instance(&c); strncpy(nam_buf, inst, sizeof(nam_buf) - 1); txfree(inst); if (strstr(nam_buf, "off") || strstr(nam_buf, "thermal") || strchr(nam_buf, '=')) break; i++; } return i - 2; break; case 'x': i = 0; /* find the first token with "params:" or "=" in the line*/ while ((i < 100) && (*c != '\0')) { char *inst = gettok_instance(&c); strncpy(nam_buf, inst, sizeof(nam_buf) - 1); txfree(inst); if (strstr(nam_buf, "params") || strchr(nam_buf, '=')) break; i++; } return i - 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; char* cc, * ccfree; cc = copy(c); /* required to make m= 1 a single token m=1 */ ccfree = cc = inp_remove_ws(cc); /* find the first token with "off" or "=" in the line*/ while ((i < 20) && (*cc != '\0')) { char* inst = gettok_instance(&cc); strncpy(nam_buf, inst, sizeof(nam_buf) - 1); txfree(inst); if (strstr(nam_buf, "off") || strchr(nam_buf, '=') || strstr(nam_buf, "tnodeout") || strstr(nam_buf, "thermal")) break; i++; } tfree(ccfree); 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 */ { char* cc, * ccfree; i = j = 0; cc = copy(c); /* required to make m= 1 a single token m=1 */ ccfree = cc = inp_remove_ws(cc); while ((i < 12) && (*cc != '\0')) { char* comma; name[i] = gettok_instance(&cc); 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++; } tfree(ccfree); 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) || before == ',' || (str <= str_begin)) { char after = str[strlen(identifier)]; if (is_arith_char(after) || isspace_c(after) || after == '\0' || after == ',') 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; } /* return a string that consists of tc1 and tc2 evaluated or having a rhs for numparam expansion {...}. The retun string has to be freed by the caller after its usage. */ static char* eval_tc(char* line, char *tline) { double tc1, tc2; char *str_ptr, *tc1_ptr, *tc2_ptr, *tc1_str = NULL, *tc2_str = NULL; char* cut_line = line; str_ptr = strstr(cut_line, "tc1="); if (str_ptr) { /* We need to have 'tc1=something */ if (str_ptr[4]) { tc1_ptr = str_ptr + 4; int error = 0; tc1 = INPevaluate(&tc1_ptr, &error, 1); /*We have a value and create the tc1 string */ if (error == 0) { tc1_str = tprintf("tc1=%15.8e", tc1); } else if (error == 1 && *tc1_ptr == '{' && tc1_ptr + 1 && *(tc1_ptr + 1) != '}') { char* bra = gettok_char(&tc1_ptr, '}', TRUE, TRUE); if (bra) { tc1_str = tprintf("tc1=%s", bra); tfree(bra); } else { fprintf(stderr, "Warning: Cannot copy tc1 in line\n %s\n ignored\n", tline); tc1_str = copy(" "); } } else { fprintf(stderr, "Warning: Cannot copy tc1 in line\n %s\n ignored\n", tline); tc1_str = copy(" "); } } } else { tc1_str = copy(" "); } cut_line = line; str_ptr = strstr(cut_line, "tc2="); if (str_ptr) { /* We need to have 'tc2=something */ if (str_ptr[4]) { tc2_ptr = str_ptr + 4; int error = 0; tc2 = INPevaluate(&tc2_ptr, &error, 1); /*We have a value and create the tc2 string */ if (error == 0) { tc2_str = tprintf("tc2=%15.8e", tc2); } else if (error == 1 && *tc2_ptr == '{' && tc2_ptr + 1 && *(tc2_ptr + 1) != '}') { char* bra = gettok_char(&tc2_ptr, '}', TRUE, TRUE); if (bra) { tc2_str = tprintf("tc2=%s", bra); tfree(bra); } else { fprintf(stderr, "Warning: Cannot copy tc2 in line\n %s\n ignored\n", tline); tc2_str = copy(" "); } } else { fprintf(stderr, "Warning: Cannot copy tc2 in line\n %s\n ignored\n", tline); tc2_str = copy(" "); } } } else { tc2_str = copy(" "); } char* ret_str = tprintf("%s %s", tc1_str, tc2_str); tfree(tc1_str); tfree(tc2_str); return ret_str; } /* return a string that consists of m evaluated or having a rhs for numparam expansion {...}. The retun string has to be freed by the caller after its usage. */ static char* eval_m(char* line, char* tline) { double m; char* str_ptr, * m_ptr, * m_str = NULL; char* cut_line = line; str_ptr = strstr(cut_line, "m="); if (str_ptr) { /* We need to have 'm=something */ if (str_ptr[2]) { m_ptr = str_ptr + 2; int error = 0; m = INPevaluate(&m_ptr, &error, 1); /*We have a value and create the tc1 string */ if (error == 0) { m_str = tprintf("m=%15.8e", m); } else if (error == 1 && *m_ptr == '{' && m_ptr + 1 && *(m_ptr + 1) != '}') { char* bra = gettok_char(&m_ptr, '}', TRUE, TRUE); if (bra) { m_str = tprintf("m=%s", bra); tfree(bra); } else { fprintf(stderr, "Warning: Cannot copy m in line\n %s\n ignored\n", tline); m_str = copy(" "); } } else { fprintf(stderr, "Warning: Cannot copy m in line\n %s\n ignored\n", tline); m_str = copy(" "); } } } else { m_str = copy(" "); } return m_str; } /* ps compatibility: Exxx n1 n2 TABLE {0.45*v(1)} = (-1, -0.5) (-0.5, 0) (0, 2) (0.5, 2) (1, 1) --> exxx n1 n2 exxx_int1 0 1 bexxx exxx_int2 0 v= 4.5000000000e-01 * v(1) aexxx %v(exxx_int2) %v(exxx_int1) xfer_exxx .model xfer_exxx pwl(x_array=[-1 -0.5 0 0.5 1 ] y_array=[-0.5 0 2 2 1 ] input_domain=0.1 fraction=TRUE) gd16 16 1 table {v(16,1)} ((-100,-100e-15)(0,0)(1m,1u)(2m,1m)) --> gd16 16 1 gd16_int1 0 1 bgd16 gd16_int2 0 v= v(16,1) agd16 %v(gd16_int2) %v(gd16_int1) xfer_gd16 .model xfer_gd16 pwl(x_array=[-100 0 1m 2m ] y_array=[-100e-15 0 1u 1m ] input_domain=0.1 fraction=TRUE) */ /* 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 n2 n1 1 Cxxx n-aux 0 1 Bxxx n1 n2 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; 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++ = ' '; memcpy(str_ptr, " vol=", 5); } /* Exxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) --> Exxx n1 n2 Exxx_int1 0 1 BExxx Exxx_int2 0 v = expression aExxx %v(Exxx_int2) %v(Exxx_int1) xfer_Exxx .model xfer_Exxx pwl(x_array=[x0 x1 x2] y_array=[y0 y1 y2] input_domain=0.1 fraction=TRUE) */ if ((str_ptr = search_plain_identifier(curr_line, "table")) != NULL) { char *expression, *firstno, *secondno; DS_CREATE(dxar, 200); DS_CREATE(dyar, 200); 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 = ' '; /* E51 50 51 E51_int1 0 1 BE51 e51_int2 0 v = V(40,41) ae51 %v(e51_int2) %v(e51_int1) xfer_e51 .model xfer_e51 pwl(x_array=[-10 0 1m 2m 3m] + y_array=[-1n 0 1m 1 100] + input_domain=0.1 fraction=TRUE) */ ckt_array[1] = tprintf("b%s %s_int2 0 v = %s", title_tok, title_tok, expression); ckt_array[2] = tprintf( "a%s %%v(%s_int2) %%v(%s_int1) xfer_%s", title_tok, title_tok, title_tok, title_tok); /* (x0, y0) (x1, y1) (x2, y2) to x0 x1 x2, y0 y1 y2 */ int ipairs = 0; char* pair_line = cut_line; while (*cut_line != '\0') { firstno = gettok_node(&cut_line); secondno = gettok_node(&cut_line); if ((!firstno && secondno) || (firstno && !secondno)) { fprintf(stderr, "Error: Missing token in %s\n", curr_line); break; } else if (!firstno && !secondno) continue; sadd(&dxar, firstno); cadd(&dxar, ' '); sadd(&dyar, secondno); cadd(&dyar, ' '); tfree(firstno); tfree(secondno); ipairs++; } /* There is a strange usage of the TABLE function: A single pair (x0, y0) will return a constant voltage y0 */ if (ipairs == 1) { tfree(ckt_array[1]); tfree(ckt_array[2]); firstno = gettok_node(&pair_line); tfree(firstno); secondno = gettok_node(&pair_line); ckt_array[1] = tprintf("v%s %s_int1 0 %s", title_tok, title_tok, secondno); tfree(secondno); // comment out current variable e line *(card->line) = '*'; // insert new lines immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); } else { ckt_array[3] = tprintf( ".model xfer_%s pwl(x_array=[%s] y_array=[%s] " "input_domain=0.1 fraction=TRUE limit=TRUE)", title_tok, ds_get_buf(&dxar), ds_get_buf(&dyar)); // comment out current variable e line *(card->line) = '*'; // insert new lines immediately after current line for (i = 0; i < 4; i++) card = insert_new_line(card, ckt_array[i], 0, 0); } tfree(expression); tfree(title_tok); tfree(node1); tfree(node2); ds_free(&dxar); ds_free(&dyar); } } /* 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++ = ' '; memcpy(str_ptr, " cur=", 5); } /* Gxxx n1 n2 TABLE {expression} = (x0, y0) (x1, y1) (x2, y2) --> Gxxx n1 n2 Gxxx_int1 0 1 BGxxx Gxxx_int2 0 v = expression aGxxx %v(Gxxx_int2) %v(Gxxx_int1) xfer_Gxxx .model xfer_Gxxx pwl(x_array=[x0 x1 x2] y_array=[y0 y1 y2] input_domain=0.1 fraction=TRUE) */ if ((str_ptr = search_plain_identifier(curr_line, "table")) != NULL) { char *expression, *firstno, *secondno; char *m_ptr, *m_token; DS_CREATE(dxar, 200); DS_CREATE(dyar, 200); cut_line = curr_line; /* title and nodes */ title_tok = gettok(&cut_line); /* the title in the a instance should not contain %, [, nor ] replace it by '_' */ char* stok = copy(title_tok); char* ntok = stok; while (*ntok != '\0') { if (*ntok == '[' || *ntok == ']' || *ntok == '%') *ntok = '_'; ntok++; } 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, stok, 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); 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 = ' '; /* GD51 50 51 gd51_int1 0 1 BGD51 gd51_int2 0 v = V(50,51) agd51 %v(gd51_int2) %v(gd51_int1) xfer_gd51 .model xfer_gd51 pwl(x_array=[-10 0 1m 2m 3m] + y_array=[-1n 0 1m 1 100] + input_domain=0.1 fraction=TRUE) */ ckt_array[1] = tprintf("b%s %s_int2 0 v = %s", title_tok, stok, expression); ckt_array[2] = tprintf("a%s %%v(%s_int2) %%v(%s_int1) xfer_%s", stok, stok, stok, stok); /* (x0, y0) (x1, y1) (x2, y2) to x0 x1 x2, y0 y1 y2 */ int ipairs = 0; char* pair_line = cut_line; while (*cut_line != '\0') { firstno = gettok_node(&cut_line); secondno = gettok_node(&cut_line); if ((!firstno && secondno) || (firstno && !secondno)) { fprintf(stderr, "Error: Missing token in %s\n", curr_line); break; } else if (!firstno && !secondno) continue; sadd(&dxar, firstno); cadd(&dxar, ' '); sadd(&dyar, secondno); cadd(&dyar, ' '); tfree(firstno); tfree(secondno); ipairs++; } /* There is a strange usage of the TABLE function: A single pair (x0, y0) will return a constant current y0 */ if (ipairs == 1) { tfree(ckt_array[1]); tfree(ckt_array[2]); firstno = gettok_node(&pair_line); tfree(firstno); secondno = gettok_node(&pair_line); ckt_array[1] = tprintf("v%s %s_int1 0 %s", title_tok, stok, secondno); tfree(secondno); // comment out current variable e line *(card->line) = '*'; // insert new lines immediately after current line for (i = 0; i < 2; i++) card = insert_new_line(card, ckt_array[i], 0, 0); } else { ckt_array[3] = tprintf(".model xfer_%s pwl(x_array=[%s] y_array=[%s] " "input_domain=0.1 fraction=TRUE limit=TRUE)", stok, ds_get_buf(&dxar), ds_get_buf(&dyar)); // comment out current variable g line *(card->line) = '*'; // insert new lines immediately after current line for (i = 0; i < 4; i++) card = insert_new_line(card, ckt_array[i], 0, 0); } tfree(expression); tfree(title_tok); tfree(stok); tfree(node1); tfree(node2); tfree(m_token); ds_free(&dxar); ds_free(&dyar); } /* 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); /* evauate tc1 and tc2 */ char* tcrstr = eval_tc(cut_line, card->line); /* evauate m */ char* mstr = eval_m(cut_line, card->line); /* 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; /* tc1, tc2, and m are enabled */ xline = tprintf("b%s %s %s i = v(%s, %s)/(%s) %s %s reciproctc=1 reciprocm=0", title_tok, node1, node2, node1, node2, equation, tcrstr, mstr); 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 %s", title_tok, title_tok, tcrstr); x4line = tprintf("v%s_3 %s_3 0 0", title_tok, title_tok); } tfree(tcrstr); tfree(mstr); // 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 n2 n1 1 Cxxx n-aux 0 1 Bxxx n1 n2 I = i(Exxx) * equation or Cxxx n1 n2 Q = {equation} --> Gxxx n1 n2 n-aux 0 1 Lxxx n-aux 0 1 Bxxx 0 n-aux I = 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) - for charge formula transformation in any case */ if ((!strstr(curr_line, "q=")) && (!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); /* evauate tc1 and tc2 */ char* tcrstr = eval_tc(cut_line, card->line); if (strstr(curr_line, "c=")) { /* capacitance formulation */ // Exxx n-aux 0 n2 n1 1 ckt_array[0] = tprintf("e%s %s_int1 0 %s %s 1", title_tok, title_tok, node2, node1); // Cxxx n-aux 0 1 ckt_array[1] = tprintf("c%s %s_int1 0 1", title_tok, title_tok); // Bxxx n1 n2 I = i(Exxx) * equation ckt_array[2] = tprintf("b%s %s %s i = i(e%s) * (%s) " "%s reciproctc=1", title_tok, node1, node2, title_tok, equation, tcrstr); } else { /* charge formulation */ // Gxxx n1 n2 n-aux 0 1 ckt_array[0] = tprintf("g%s %s %s %s_int1 0 1", title_tok, node1, node2, title_tok); // Lxxx n-aux 0 1 ckt_array[1] = tprintf("l%s %s_int1 0 1", title_tok, title_tok); // Bxxx 0 n-aux I = equation ckt_array[2] = tprintf("b%s 0 %s_int1 i = (%s) " "%s reciproctc=1", title_tok, title_tok, equation, tcrstr); } tfree(tcrstr); // 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); /* evauate tc1 and tc2 */ char* tcrstr = eval_tc(cut_line, card->line); // 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 ckt_array[2] = tprintf("b%s %s %s v = v(%s_int2) * (%s) " "%s reciproctc=0", title_tok, node2, node1, title_tok, equation, tcrstr); tfree(tcrstr); // 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, *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); } /* prepare to skip parsing in numparam with expressions */ 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(/* NOT CONST */ char *expr) { char *s; wordlist *wl = NULL, *wlist = NULL; /* Scan the expression and replace all '{' and '}' with ' '. As soon as we encounter a tc1=, tc2=, or m=, stop it. */ for (s = expr; *s && !(ciprefix("tc1=", s) || ciprefix("tc2=", s) || ciprefix("m=", 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); } /* no parens {} around instance parameters temp and dtemp (on left hand side) */ else if ((*s == '=') && (cieq(buf, "dtemp") || cieq(buf, "temp"))) { wl->wl_word = copy(buf); } /* as soon as we encounter tc1= or tc2= (temp coeffs.) or m= (multiplier), the expression is done */ else if ((*s == '=') && (cieq(buf, "tc1") || cieq(buf, "tc2") || cieq(buf, "reciproctc") || cieq(buf, "m") || cieq(buf, "reciprocm"))) { wl->wl_word = tprintf("%s%s", buf, s); break; } 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)) { /* we may find single ' or double " quotes */ char thisquote = *s; char *t = ++s; while (*t && !(*t == thisquote)) 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; /* Start replacing identifier by func only after the first '=' or '{' */ char* estr1 = strchr(curr_line, '='); char* estr2 = strchr(curr_line, '{'); char* estr; if (!estr1 && !estr2) return str; if (estr1 && estr2) estr = (estr1 < estr2) ? estr1 : estr2; else if (estr1) estr = estr1; else estr = estr2; for (p = estr; (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. These may be model names or control voltages. See bug 384 or Skywater issue 327 */ if (strchr("fhmouydqjzsw", *curr_line)) 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] == '=' || s[-1] == ',') && (isspace_c(*rest) || *rest == '\0' || *rest == ',' || *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); } } } /* Now check if we have nested {..{ }...}, which is not accepted by numparam code. Replace the inner { } by ( ) */ char* cut_line = c->line; cut_line = strchr(cut_line, '{'); if (cut_line) { int level = 1; cut_line++; while (*cut_line != '\0') { if (*cut_line == '{') { level++; if (level > 1) *cut_line = '('; } else if (*cut_line == '}') { if (level > 1) *cut_line = ')'; level--; } cut_line++; } } } } /* 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 int inp_vdmos_model(struct card *deck) { #define MODNUMBERS 2048 struct card *card; struct card *vmodels[MODNUMBERS]; /* list of pointers to vdmos model cards */ int j = 0; vmodels[0] = NULL; 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, copy("vdmosp (")); } else { wl_append_word(NULL, &wl, copy("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); else tfree(token); if (*cut_line == ')') { wl_append_word(NULL, &wl, copy(")")); break; } } new_line = wl_flatten(wlb); tfree(card->line); card->line = new_line; wl_free(wlb); /* add model card pointer to list */ vmodels[j] = card; j++; if (j == MODNUMBERS) { vmodels[j - 1] = NULL; break; } vmodels[j] = NULL; } } /* we don't have vdmos models, so return */ if (vmodels[0] == NULL) return 0; if (j == MODNUMBERS) fprintf(cp_err, "Warning: Syntax check for VDMOS instances is limited to %d .model cards\n", MODNUMBERS); for (card = deck; card; card = card->nextcard) { /* we have a VDMOS instance line with 'thermal' flag and thus need exactly 5 nodes */ int i; char *curr_line = card->line; if (curr_line[0] == 'm' && strstr(curr_line, "thermal")) { /* move to model name */ for (i = 0; i < 6; i++) curr_line = nexttok(curr_line); if (!curr_line || !*curr_line) { fprintf(cp_err, "Error: We need exactly 5 nodes\n" " drain, gate, source, tjunction, tcase\n" " in VDMOS instance line with thermal model\n" " %s\n", card->line); fprintf(stderr, "No circuit loaded!\n"); return 1; } /* next token is the model name of instance */ char* instmodname = gettok(&curr_line); i = 0; while (vmodels[i]) { char* mod = vmodels[i]->line; mod = nexttok(mod); /* skip .model */ if (ciprefix(instmodname, mod)) { tfree(instmodname); return 0; } i++; } fprintf(cp_err, "Error: We need exactly 5 nodes\n" " drain, gate, source, tjunction, tcase\n" " in VDMOS instance line with thermal model\n" " %s\n", card->line); fprintf(stderr, "No circuit loaded!\n"); tfree(instmodname); return 1; } } return 0; } /* 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) { /* %i( may be part of the node definition in a XSPICE instance, so skip it here */ if (*v == 'a' && s[-1] == '%') { s++; continue; } /* '{' if at beginning of expression, '=' possible in B-line */ else 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 and G source TABLE function by a B source pwl * (used by ST OpAmps and comparators of Infineon models). * 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' || *cut_line == 'g') { char *valp = search_plain_identifier(cut_line, "value"); char *valp2 = search_plain_identifier(cut_line, "cur"); if (valp || (valp2 && *cut_line == 'g')) { 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, g 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; } /* Process any .distribution cards for PSPICE's Monte-Carlo feature. * A .distribution card defines a probability distribution by a PWL * density function. This could be rewritten as a function that * returns a random value following that distribution. * For now, just comment it away. */ static void do_distribution(struct card *oldcard) { while (oldcard) { char *line = oldcard->line; if (line && ciprefix(".distribution", line)) *line = '*'; oldcard = oldcard->nextcard; } } /* Do the .model replacement required by ako (a kind of) * PSPICE does not support nested .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)) { if ((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; } 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; } /* Check for double '{', replace the inner '{', '}' by '(', ')' in .subckt or .model (which both may stem from external sources) */ static void rem_double_braces(struct card* newcard) { struct card* card; int slevel = 0; for (card = newcard; card; card = card->nextcard) { char* cut_line = card->line; if (ciprefix(".subckt", cut_line)) slevel++; else if (ciprefix(".ends", cut_line)) slevel--; if (ciprefix(".model", cut_line) || slevel > 0) { cut_line = strchr(cut_line, '{'); if (cut_line) { int level = 1; cut_line++; while (*cut_line != '\0') { if (*cut_line == '{') { level++; if (level > 1) *cut_line = '('; } else if (*cut_line == '}') { if (level > 1) *cut_line = ')'; level--; } cut_line++; } } } } } /**** 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 vswitch part S 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 vswitch part S_ST S1 D S DG GND S_ST .MODEL S_ST VSWITCH(VT = { 1.5 } VH = { 0.3 } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * by the classical voltage controlled ngspice switch S1 D S DG GND SWN .MODEL S_ST SW(VT = { 1.5 } VH = { 0.3 } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) switch parameter td is not yet supported * 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 * in subcircuit .subckt and X lines with 'params:' statement replace comma separator by space. Do nothing if comma is inside of {}. * in .model, if double curly braces {{}}, replace the inner by {()} */ 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); } /* Process .distribution cards. */ do_distribution(oldcard); /* replace TABLE function in E source */ replace_table(oldcard); /* remove double braces */ rem_double_braces(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 */ /* LIMIT( Output Expression, Limit1, Limit2) Output will stay between the two limits given. */ new_str = copy(".func limit(x, a, b) { ternary_fcn(a > b, max(min(x, a), b), max(min(x, b), a)) }"); nextcard = insert_new_line(nextcard, new_str, 4, 0); new_str = copy(".func pwr(x, a) { pow(x, a) }"); nextcard = insert_new_line(nextcard, new_str, 5, 0); new_str = copy(".func pwrs(x, a) { sgn(x) * pow(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); /* params: replace comma separator by space. Do nothing if you are inside of { }. */ char* parastr = strstr(cut_line, "params:"); int brace = 0; if (parastr) { parastr += 8; while (*parastr) { if (*parastr == '{') brace++; else if (*parastr == '}') brace--; if (brace == 0 && *parastr == ',') *parastr = ' '; parastr++; } } } } /* .model xxx NMOS/PMOS level=6 --> level = 8, version=3.2.4 .model xxx NMOS/PMOS level=7 --> level = 8, version=3.2.4 .model xxx NMOS/PMOS level=5 --> level = 44 .model xxx NMOS/PMOS level=8 --> level = 14, version=4.5.0 .model xxx NPN/PNP level=2 --> level = 6 .model xxx LPNP level=n --> level = 1 subs=-1 Remove any Monte - Carlo variation parameters from .model cards.*/ for (card = newcard; card; card = card->nextcard) { char* cut_line = card->line; if (ciprefix(".model", cut_line)) { char* modname, *modtype, *curr_line; int i; char *cut_del = curr_line = cut_line = inp_remove_ws(copy(cut_line)); cut_line = nexttok(cut_line); /* skip .model */ modname = gettok(&cut_line); /* save model name */ modtype = gettok_noparens(&cut_line); /* save model type */ if (cieq(modtype, "NMOS") || cieq(modtype, "PMOS")) { char* lv = strstr(cut_line, "level="); if (lv) { int ll; lv = lv + 6; char* ntok = gettok(&lv); ll = atoi(ntok); switch (ll) { case 5: { /* EKV 2.6 in the adms branch */ char* newline = tprintf(".model %s %s level=44 %s", modname, modtype, lv); tfree(card->line); card->line = curr_line = newline; } break; case 6: case 7: { /* BSIM3 version 3.2.4 */ char* newline = tprintf(".model %s %s level=8 version=3.2.4 %s", modname, modtype, lv); tfree(card->line); card->line = curr_line = newline; } break; case 8: { /* BSIM4 version 4.5.0 */ char* newline = tprintf(".model %s %s level=14 version=4.5.0 %s", modname, modtype, lv); tfree(card->line); card->line = curr_line = newline; } break; default: break; } tfree(ntok); } } else if (cieq(modtype, "NPN") || cieq(modtype, "PNP")) { char* lv = strstr(cut_line, "level="); if (lv) { int ll; lv = lv + 6; char* ntok = gettok(&lv); ll = atoi(ntok); switch (ll) { case 2: { /* MEXTRAM 504.12.1 in the adms branch */ char* newline = tprintf(".model %s %s level=6 %s", modname, modtype, lv); tfree(card->line); card->line = curr_line = newline; } break; default: break; } tfree(ntok); } } else if (cieq(modtype, "LPNP")) { /* lateral PNP enabled */ char* newline = tprintf(".model %s PNP level=1 subs=-1 %s", modname, cut_line); tfree(card->line); card->line = curr_line = newline; } tfree(modname); tfree(modtype); /* Remove any Monte-Carlo variation parameters. They qualify * a previous parameter, so there must be at least 3 tokens. * There are two keywords "dev" (different values for each device), * and "lot" (all devices of this model share a value). * The keyword may be optionally followed by '/' and * a probability distribution name, then there must be '=' and * a value, then an optional '%' indicating relative rather than * absolute variation. Allow muliple lot and dev on a single .model line. */ bool remdevlot = FALSE; cut_line = curr_line; for (i = 0; i < 3; i++) cut_line = nexttok(cut_line); while (cut_line) { if (!strncmp(cut_line, "dev=", 4) || !strncmp(cut_line, "lot=", 4)) { while (*cut_line && !isspace_c(*cut_line)) { *cut_line++ = ' '; } remdevlot = TRUE; cut_line = skip_ws(cut_line); continue; } cut_line = nexttok(cut_line); } if (remdevlot) { tfree(card->line); card->line = curr_line; } else tfree(cut_del); } // if .model } // for loop through all cards /* x ... params: p1=val1, p2=val2 replace comma separator by space. Do nothing if you are inside of { }. */ for (card = newcard; card; card = card->nextcard) { char* cut_line = card->line; if (ciprefix("x", cut_line)) { char* parastr = strstr(cut_line, "params:"); int brace = 0; if (parastr) { parastr += 8; while (*parastr) { if (*parastr == '{') brace++; else if (*parastr == '}') brace--; if (brace == 0 && *parastr == ',') *parastr = ' '; parastr++; } } } } /* 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 || *ntok == '\0') { fprintf(stderr, "Error: Missing token in line %d:\n%s\n", card->linenum, cut_line); fprintf(stderr, " Please correct the input file\n"); if (ft_stricterror) controlled_exit(1); else continue; } 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 && , | with || , *# 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; if (*cut_line == '\0') 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, "|"); } } /* We may have '~' in path names or A devices */ char *firsttok = nexttok(card->line); /* skip over whitespaces */ if (ciprefix(".inc", firsttok) || ciprefix(".lib", firsttok) || ciprefix("A", firsttok)) continue; if ((t = strstr(card->line, "~")) != NULL) { while (t) { *t = '!'; t = strstr(t, "~"); } } } /* 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') { /* According to PSPICE Reference Guide the fourth (substrate) node has to be put into [] if it is not just a number */ 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 || *cut_line == '\0') { fprintf(stderr, "Line no. %d, %s, missing tokens\n", card->linenum_orig, card->line); if (ft_stricterror) controlled_exit(1); else 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_c(*cut_line)) if (!isdigit_c(*cut_line++)) is_node4 = FALSE; // already model name if (is_node4) { cut_line = nexttok(cut_line); // model name } } if (cut_line && *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 && *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 || *cut_line == '\0') { fprintf(stderr, "Line no. %d, %s, missing tokens\n", card->linenum_orig, card->line); if (ft_stricterror) controlled_exit(1); else continue; } cut_line = nexttok(cut_line); // model name if (cut_line && *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; } } } /* if vswitch part s, 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) * * if vswitch part s_st, don't replace instance, only model * replace * S1 D S DG GND S_ST * .MODEL S_ST VSWITCH(VT = { 1.5 } VH = { 0.s } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * by the classical voltage controlled ngspice switch * S1 D S DG GND S_ST * .MODEL S_ST SW(VT = { 1.5 } VH = { 0.s } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * vswitch delay parameter td is not yet supported * simple hierachy, as nested subcircuits are not allowed in PSPICE */ /* first scan: find the vswitch models, transform them and put the S models 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 *modname; str = card->line = inp_remove_ws(card->line); str = nexttok(str); /* throw away '.model' */ INPgetNetTok(&str, &modname, 0); /* model name */ if (!ciprefix("vswitch", str)) { tfree(modname); continue; } str = nexttok_noparens(str); /* throw away 'vswitch' */ /* S_ST switch (parameters ron, roff, vt, vh) * we have to find 0 to 4 parameters, identified by 'vh=' etc. * Parameters not found have to be replaced by their default values. */ if (strstr(str, "vt=") || strstr(str, "vh=")) { char* newstr; char* lstr = copy(str); char* partstr = strstr(lstr, "ron="); if (!partstr) { newstr = tprintf("%s %s", "ron=1.0", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "roff="); if (!partstr) { newstr = tprintf("%s %s", "roff=1.0e12", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "vt="); if (!partstr) { newstr = tprintf("%s %s", "vt=0", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "vh="); if (!partstr) { newstr = tprintf("%s %s", "vh=0", lstr); //default value tfree(lstr); lstr = newstr; } tfree(card->line); if (lstr[strlen(lstr) - 1] == ')') card->line = tprintf(".model %s sw ( %s", modname, lstr); else card->line = tprintf(".model %s sw %s", modname, lstr); tfree(lstr); tfree(modname); } /* S vswitch (parameters ron, roff, von, voff) */ /* We have to find 0 to 4 parameters, identified by 'von=' etc. and * replace them by the pswitch code model parameters * replace VON by cntl_on, VOFF by cntl_off, RON by r_on, and ROFF by r_off. * Parameters not found have to be replaced by their default values. */ else if (strstr(str, "von=") || strstr(str, "voff=")) { char* newstr, *begstr; char* lstr = copy(str); /* ron */ char* partstr = strstr(lstr, "ron="); if (!partstr) { newstr = tprintf("%s %s", "r_on=1.0", lstr); //default value } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s r_on%s", begstr, partstr + 3); tfree(begstr); } tfree(lstr); lstr = newstr; /* roff */ partstr = strstr(lstr, "roff="); if (!partstr) { newstr = tprintf("%s %s", "r_off=1.0e6", lstr); //default value } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s r_off%s", begstr, partstr + 4); tfree(begstr); } tfree(lstr); lstr = newstr; /* von */ partstr = strstr(lstr, "von="); if (!partstr) { newstr = tprintf("%s %s", "cntl_on=1", lstr); //default value tfree(lstr); lstr = newstr; } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s cntl_on%s", begstr, partstr + 3); tfree(begstr); } tfree(lstr); lstr = newstr; /* voff */ partstr = strstr(lstr, "voff="); if (!partstr) { newstr = tprintf("%s %s", "cntl_off=0", lstr); //default value tfree(lstr); lstr = newstr; } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s cntl_off%s", begstr, partstr + 4); tfree(begstr); } tfree(lstr); lstr = newstr; tfree(card->line); if (lstr[strlen(lstr) - 1] == ')') card->line = tprintf(".model a%s pswitch( log=TRUE %s", modname, lstr); else card->line = tprintf(".model a%s pswitch(%s log=TRUE)", modname, lstr); tfree(lstr); /* add to list, to change vswitch instance to code model line */ if (nesting > 0) modelsfound = insert_new_model( modelsfound, modname, subcktline->line); else modelsfound = insert_new_model(modelsfound, modname, "top"); tfree(modname); } else { fprintf(stderr, "Error: Bad switch model in line %s\n", card->line); } } } /* no need to continue if no vswitch is found */ if (!modelsfound) goto iswi; /* 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 %%gd(%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 %%gd(%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); modelsfound = NULL; iswi:; /* if iswitch part s, replace * W1 D S VC SWN * .MODEL SWN ISWITCH ( ION = {0.55} IOFF = {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) * * if iswitch part s_st (short transition), don't replace instance, but only model * replace * W1 D S VC S_ST * .MODEL S_ST ISWITCH(IT = { 1.5 } IH = { 0.2 } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * by the classical current controlled ngspice switch * W1 D S DG GND S_ST * .MODEL S_ST CSW(IT = { 1.5 } IH = { 0.2 } RON = { 1 / (2 * M*(W / LE)*(KPN / 2) * 10) } ROFF = { 1G }) * iswitch delay parameter td is not yet supported * simple hierachy, as nested subcircuits are not allowed in PSPICE */ /* first scan: find the iswitch 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, "iswitch")) { char* modname; card->line = str = inp_remove_ws(card->line); str = nexttok(str); /* throw away '.model' */ INPgetNetTok(&str, &modname, 0); /* model name */ if (!ciprefix("iswitch", str)) { tfree(modname); continue; } str = nexttok_noparens(str); /* throw away 'iswitch' */ /* S_ST switch (parameters ron, roff, it, ih) * we have to find 0 to 4 parameters, identified by 'ih=' etc. * Parameters not found have to be replaced by their default values. */ if (strstr(str, "it=") || strstr(str, "ih=")) { char* newstr; char* lstr = copy(str); char* partstr = strstr(lstr, "ron="); if (!partstr) { newstr = tprintf("%s %s", "ron=1.0", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "roff="); if (!partstr) { newstr = tprintf("%s %s", "roff=1.0e12", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "it="); if (!partstr) { newstr = tprintf("%s %s", "it=0", lstr); //default value tfree(lstr); lstr = newstr; } partstr = strstr(lstr, "ih="); if (!partstr) { newstr = tprintf("%s %s", "ih=0", lstr); //default value tfree(lstr); lstr = newstr; } tfree(card->line); if (lstr[strlen(lstr) - 1] == ')') card->line = tprintf(".model %s csw ( %s", modname, lstr); else card->line = tprintf(".model %s csw %s", modname, lstr); tfree(lstr); tfree(modname); } /* S vswitch (parameters ron, roff, ion, ioff) */ /* We have to find 0 to 4 parameters, identified by 'ion=' etc. and * replace them by the pswitch code model parameters * replace VON by cntl_on, VOFF by cntl_off, RON by r_on, and ROFF by r_off. * Parameters not found have to be replaced by their default values. */ else if (strstr(str, "ion=") || strstr(str, "ioff=")) { char* newstr, * begstr; char* lstr = copy(str); /* ron */ char* partstr = strstr(lstr, "ron="); if (!partstr) { newstr = tprintf("%s %s", "r_on=1.0", lstr); //default value } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s r_on%s", begstr, partstr + 3); } tfree(lstr); lstr = newstr; /* roff */ partstr = strstr(lstr, "roff="); if (!partstr) { newstr = tprintf("%s %s", "r_off=1.0e6", lstr); //default value } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s r_off%s", begstr, partstr + 4); } tfree(lstr); lstr = newstr; /* von */ partstr = strstr(lstr, "ion="); if (!partstr) { newstr = tprintf("%s %s", "cntl_on=1", lstr); //default value tfree(lstr); lstr = newstr; } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s cntl_on%s", begstr, partstr + 3); } tfree(lstr); lstr = newstr; /* voff */ partstr = strstr(lstr, "ioff="); if (!partstr) { newstr = tprintf("%s %s", "cntl_off=0", lstr); //default value tfree(lstr); lstr = newstr; } else { begstr = copy_substring(lstr, partstr); newstr = tprintf("%s cntl_off%s", begstr, partstr + 4); } tfree(lstr); lstr = newstr; tfree(card->line); if (lstr[strlen(lstr) - 1] == ')') card->line = tprintf(".model a%s aswitch( log=TRUE limit=TRUE %s", modname, lstr); else card->line = tprintf(".model a%s aswitch(%s log=TRUE limit=TRUE)", modname, lstr); tfree(lstr); /* add to list, to change vswitch instance to code model line */ if (nesting > 0) modelsfound = insert_new_model( modelsfound, modname, subcktline->line); else modelsfound = insert_new_model(modelsfound, modname, "top"); tfree(modname); } else { fprintf(stderr, "Error: Bad switch model in line %s\n", card->line); } } } #if(0) /* 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 iswitch 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 iswitch 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 /* iswitch defined without parens */ modpar[3] = copy(equalptr[3]); /* check if we have parameters IT and IH */ for (i = 0; i < 4; i++) { if (ciprefix("ih", modpar[i])) have_ih = TRUE; if (ciprefix("it", modpar[i])) have_it = TRUE; } if (have_ih && have_it) { /* replace iswitch by csw */ char* vs = strstr(card->line, "iswitch"); memmove(vs, " csw", 7); } else { /* replace ION by cntl_on, IOFF by cntl_off, RON by r_on, and * ROFF by r_off */ tfree(card->line); rep_spar(modpar); card->line = tprintf( /* FIXME: a new switch derived from pswitch with vnam input is due */ ".model a%s aswitch(%s %s %s %s log=TRUE limit=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); } } #endif /* no need to continue if no iswitch is found */ if (!modelsfound) return newcard; /* second scan: find the switch instances s calling an iswitch 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("w", cut_line)) { /* check for the model name */ int i; char* stoks[5]; for (i = 0; i < 5; i++) stoks[i] = gettok_node(&cut_line); /* rewrite w line and replace it if a model is found */ if ((nesting > 0) && find_a_model(modelsfound, stoks[4], subcktline->line)) { tfree(card->line); card->line = tprintf("a%s %%vnam(%s) %%gd(%s %s) a%s", stoks[0], stoks[3], stoks[1], stoks[2], stoks[4]); } /* if model is not within same subcircuit, search at top level */ else if (find_a_model(modelsfound, stoks[4], "top")) { tfree(card->line); card->line = tprintf("a%s %%vnam(%s) %%gd(%s %s) a%s", stoks[0], stoks[3], stoks[1], stoks[2], stoks[4]); } for (i = 0; i < 5; 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) * Remove '.backanno' */ static struct card *ltspice_compat(struct card *oldcard) { struct card *card, *newcard, *nextcard; struct vsmodels *modelsfound = NULL; int skip_control = 0; /* remove double braces only if not yet done in pspice_compat() */ if (!newcompat.ps) rem_double_braces(oldcard); /* 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; /* remove .backanno, replace 'noiseless' by 'moisy=0' */ for (card = nextcard; card; card = card->nextcard) { char* cut_line = card->line; if (ciprefix(".backanno", cut_line)) { *cut_line = '*'; } else if (*cut_line == 'r') { char* noi = strstr(cut_line, "noiseless"); /* only if 'noiseless' is an unconnected token */ if (noi && isspace_c(noi[-1]) && (isspace_c(noi[9]) || !isprint_c(noi[9]))) { memcpy(noi, "noisy=0 ", 9); } } } /* 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 (*cut_line == '*' || *cut_line == '\0') continue; else if (ciprefix(".subckt", cut_line)) { subcktline = card; nesting++; } else if (ciprefix(".ends", cut_line)) nesting--; else 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; if (*cut_line == '\0') 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, check_ch = 0, ii; bool mwarn = FALSE; char* subs[10]; /* store subckt lines */ int ends = 0; /* store .ends line numbers */ /* prevent 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 (ii = 0; ii < 10; ii++) subs[ii] = NULL; for (card = deck; card; card = card->nextcard) { char *cut_line = card->line; if (*cut_line == '*' || *cut_line == '\0') continue; // check for unusable leading characters and change them to '*' if (strchr("=[]?()&%$\"!:,\f;", *cut_line)) { if (ft_stricterror) { fprintf(stderr, "Error: '%c' is not allowed as first character in line %s.\n", *cut_line, cut_line); controlled_exit(EXIT_BAD); } else { if (!check_ch) { fprintf(stderr, "Warning: Unusual leading characters like '%c' or others out of '= [] ? () & %% $\"!:,;\\f'\n", *cut_line); fprintf(stderr, " in netlist or included files, will be replaced with '*'.\n"); fprintf(stderr, " Check line no %d: %s\n\n", card->linenum_orig, cut_line); check_ch = 1; /* just one warning */ } *cut_line = '*'; } } // 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)) { // warn if m=xx on .subckt line if (newcompat.hs && !mwarn) { if (strstr(cut_line, " m=") || strstr(cut_line, " m =")) { fprintf(stderr, "Warning: m=xx on .subckt line will override multiplier m hierarchy!\n\n"); mwarn = TRUE; } } // 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"); if (check_subs < 10) subs[check_subs] = cut_line; else fprintf(stderr, "Warning: .subckt nesting larger than 10, check may not catch all errors\n"); check_subs++; continue; } else if (ciprefix(".ends", cut_line)) { check_subs--; if (check_subs >= 0 && check_subs < 10) subs[check_subs] = NULL; else if (ends == 0) /* store first occurence */ ends = card->linenum_orig; 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; } /* check for missing ac in voltage or current source */ if (check_control == 0 && strchr("VvIi", *cut_line)) { int err = 0; char* acline = search_plain_identifier(cut_line, "ac"); if (acline == NULL) continue; /* skip ac */ char* nacline = acline + 2; /* skip white spaces */ nacline = skip_ws(nacline); /* if no numberr token, go to */ if (*nacline == '\0') err = 1; else { /* skip potential = , found by make check */ if (*nacline == '=') nacline++; char* nnacline = nacline; /* get first token after ac */ char* numtok = gettok_node(&nnacline); char* numtokfree = numtok; /* check if token is a valid number */ INPevaluate(&numtok, &err, 0); tfree(numtokfree); } /* if no number, replace 'ac' by 'ac 1 0' */ if (err){ char *begstr = copy_substring(cut_line, acline); char* newline = tprintf("%s ac ( 1 0 ) %s", begstr, nacline); tfree(begstr); tfree(card->line); card->line = newline; } 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"); if (ends > 0) fprintf(cp_err, "Check .ends in line number %d\n", ends); else fprintf(cp_err, "Check line %s\n", subs[0]); 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; if (*curr_line == '*' || *curr_line == '\0') continue; /* 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++; } } start = strstr(curr_line, "icrating="); if (start) { end = nexttok(start); if (*end == '\0') *start = '\0'; else while (start < end) { *start = ' '; start++; } } start = strstr(curr_line, "vceo="); 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 */ 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 */ 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; } 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' or 'R2 node1 node2 4k7' */ if (is_a_modelname(elem_model_name, curr_line)) { 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' from line\n " "%s\n", elem_model_name, curr_line); } } tfree(elem_model_name); } } // disable unused .model lines, and free the models assoc lists rem_unused_xxx(root); } /* Markus Kuhn -- 2005-03-30 * License: Modified BSD (see http://www.cl.cam.ac.uk/~mgk25/short-license.html) * The utf8_check() function scans the '\0'-terminated string starting * at s. It returns a pointer to the first byte of the first malformed * or overlong UTF-8 sequence found, or NULL if the string contains * only correct UTF-8. It also spots UTF-8 sequences that could cause * trouble if converted to UTF-16, namely surrogate characters * (U+D800..U+DFFF) and non-Unicode positions (U+FFFE..U+FFFF). * In addition we check for some ngspice-specific characters like µ etc.*/ #ifndef EXT_ASC static unsigned char* utf8_check(unsigned char *s) { while (*s) { if (*s < 0x80) /* 0xxxxxxx */ s++; else if (*s == 0xb5) { /* translate ansi micro µ to u */ *s = 'u'; s++; } else if (s[0] == 0xc2 && s[1] == 0xb5) { /* translate utf-8 micro µ to u */ s[0] = 'u'; /* remove second byte */ unsigned char *y = s + 1; unsigned char *z = s + 2; while (*z) { *y++ = *z++; } *y = '\0'; s++; } else if ((s[0] & 0xe0) == 0xc0) { /* 110XXXXx 10xxxxxx */ if ((s[1] & 0xc0) != 0x80 || (s[0] & 0xfe) == 0xc0) /* overlong? */ return s; else s += 2; } else if ((s[0] & 0xf0) == 0xe0) { /* 1110XXXX 10Xxxxxx 10xxxxxx */ if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || (s[0] == 0xe0 && (s[1] & 0xe0) == 0x80) || /* overlong? */ (s[0] == 0xed && (s[1] & 0xe0) == 0xa0) || /* surrogate? */ (s[0] == 0xef && s[1] == 0xbf && (s[2] & 0xfe) == 0xbe)) /* U+FFFE or U+FFFF? */ return s; else s += 3; } else if ((s[0] & 0xf8) == 0xf0) { /* 11110XXX 10XXxxxx 10xxxxxx 10xxxxxx */ if ((s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || (s[3] & 0xc0) != 0x80 || (s[0] == 0xf0 && (s[1] & 0xf0) == 0x80) || /* overlong? */ (s[0] == 0xf4 && s[1] > 0x8f) || s[0] > 0xf4) /* > U+10FFFF? */ return s; else s += 4; } else return s; } return NULL; } /* Scan through input deck and check for utf-8 syntax errors */ static void utf8_syntax_check(struct card *deck) { struct card *card; unsigned char *s; for (card = deck; card; card = card->nextcard) { char *curr_line = card->line; if (*curr_line == '*') continue; s = utf8_check((unsigned char*)curr_line); if (s) { fprintf(stderr, "Error: UTF-8 syntax error in line %d at %s\n", card->linenum_orig, s); controlled_exit(1); } } } #endif /* if .dc (TEMPER) -15 75 5 if found, replace it by .dc TEMP -15 75 5. */ static void inp_repair_dc_ps(struct card* deck) { struct card* card; for (card = deck; card; card = card->nextcard) { char* curr_line = card->line; if (ciprefix(".dc", curr_line)) { char* tempstr = strstr(curr_line, "(temper)"); if (tempstr) { memcpy(tempstr, "temp ", 8); } } } } #ifdef XSPICE /* spice2g6 allows to omit the poly(n) statement, if the polynomial is one-dimensional (n==1). For compatibility with the XSPIXE code, we have to add poly(1) appropriately. */ static int inp_poly_2g6_compat(struct card* deck) { struct card* card; int skip_control = 0; for (card = deck; card; card = card->nextcard) { char* curr_line = card->line; char* thisline = curr_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 (*thisline) { case 'h': case 'g': case 'e': case 'f': curr_line = nexttok_noparens(curr_line); curr_line = nexttok_noparens(curr_line); curr_line = nexttok_noparens(curr_line); if (!curr_line) { fprintf(stderr, "Error: bad syntax of line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); return 1; } /* exclude all of the following fourth tokens */ if (ciprefix("poly", curr_line)) continue; if (ciprefix("value", curr_line)) continue; if (ciprefix("vol", curr_line)) continue; if (ciprefix("table", curr_line)) continue; if (ciprefix("laplace", curr_line)) continue; if (ciprefix("cur", curr_line)) continue; /* the next four are HSPICE specific */ if (ciprefix("vccs", curr_line)) continue; if (ciprefix("vcvs", curr_line)) continue; if (ciprefix("ccvs", curr_line)) continue; if (ciprefix("cccs", curr_line)) continue; break; default: continue; } /* go beyond the usual nodes and sources */ switch (*thisline) { case 'g': case 'e': curr_line = nexttok_noparens(curr_line); curr_line = nexttok_noparens(curr_line); if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); return 1; } /* The next token may be a simple text token or an expression enclosed in brackets */ if (*curr_line == '{') { char* tmptok = gettok_char(&curr_line, '}', TRUE, TRUE); tfree(tmptok); } else curr_line = nexttok(curr_line); if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); return 1; } if (*curr_line == '\0') continue; break; case 'f': case 'h': curr_line = nexttok(curr_line); if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); return 1; } /* The next token may be a simple text token or an expression enclosed in brackets */ if (*curr_line == '{') { char* tmptok = gettok_char(&curr_line, '}', TRUE, TRUE); tfree(tmptok); } else curr_line = nexttok(curr_line); if (!curr_line) { fprintf(stderr, "Error: not enough parameters in line\n %s\n", thisline); fprintf(stderr, "No circuit loaded!\n"); return 1; } if (*curr_line == '\0') continue; break; } /* finish if these end tokens are found */ if (ciprefix("ic=", curr_line)) { continue; } if (ciprefix("m=", curr_line)) { continue; } /* this now seems to be a spice2g6 poly one-dimensional source */ /* insert poly(1) as the fourth token */ curr_line = nexttok(thisline); curr_line = nexttok(curr_line); curr_line = nexttok(curr_line); char *endofline = copy(curr_line); *curr_line = '\0'; char* newline = tprintf("%s poly(1) %s", thisline, endofline); tfree(card->line); card->line = newline; tfree(endofline); } return 0; } #endif tmp_ns50wwy/src/frontend/runcoms2.h0000644000175000017500000000035114163340332017477 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 tmp_ns50wwy/src/frontend/parse.c0000644000175000017500000006701114163340332017042 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 "numparam/general.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 */ static bool is_all_digits(char* tstr) { while (*tstr != '\0') { if (!isdigit_c(*tstr)) return FALSE; tstr++; } return TRUE; } static bool has_arith_char(char* tstr) { while (*tstr != '\0') { if (is_arith_char(*tstr)) return TRUE; tstr++; } return FALSE; } /* writing, printing or plotting will fail when the node name starts with a number or math character, even when enclosed in V() like V(2p). So automatically place "" around, like V("2p"). Returns the parse tree. Multiple v() may occur in a row. Remove "" again after the tree is set up. */ struct pnode* ft_getpnames_quotes(wordlist* wl, bool check) { struct pnode* names = NULL, * tmpnode = NULL; char* sz = wl_flatten(wl); if ((strstr(sz, "v(") || strstr(sz, "V(") || strstr(sz, "i(") || strstr(sz, "I(")) && !cp_getvar("noquotesinoutput", CP_BOOL, NULL, 0)) { char* tmpstr; char* nsz = tmpstr = stripWhiteSpacesInsideParens(sz); DS_CREATE(ds1, 100); /* the new name string*/ /* put double quotes around tokens which start with number chars or include a math char */ while (*tmpstr != '\0') { /*check if we have v(something) at the beginning, after arithchar, after space, or after dot. Skip V(" because it is already quoted. */ if ((tmpstr[0] == 'v' || tmpstr[0] == 'V') && tmpstr[1] == '(' && tmpstr[2] != '\"' && (nsz == tmpstr || isspace_c(tmpstr[-1]) || is_arith_char(tmpstr[-1]) || tmpstr[-1] == '.')) { char* tmpstr2, * partoken2 = NULL; tmpstr += 2; /* get the complete zzz of v(zzz) */ char* tpartoken = tmpstr2 = gettok_char(&tmpstr, ')', FALSE, FALSE); /* check if this is v(zzz) or v(xx,yy) */ char* partoken1 = gettok_char(&tpartoken, ',', FALSE, FALSE); sadd(&ds1, "v("); if (partoken1) { /* we have a xx and yy */ partoken2 = copy(tpartoken + 1); bool hac1 = has_arith_char(partoken1); bool hac2 = has_arith_char(partoken2); if (is_all_digits(partoken1)) { sadd(&ds1, partoken1); } else if (isdigit_c(*partoken1) || hac1) { cadd(&ds1, '\"'); sadd(&ds1, partoken1); cadd(&ds1, '\"'); } else sadd(&ds1, partoken1); cadd(&ds1, ','); if (is_all_digits(partoken2)) { sadd(&ds1, partoken2); } else if (isdigit_c(*partoken2) || hac2) { cadd(&ds1, '\"'); sadd(&ds1, partoken2); cadd(&ds1, '\"'); } else sadd(&ds1, partoken2); } else { bool hac = has_arith_char(tmpstr2); if (is_all_digits(tmpstr2)) { sadd(&ds1, tmpstr2); } else if (isdigit_c(*tmpstr2) || hac) { cadd(&ds1, '\"'); sadd(&ds1, tmpstr2); cadd(&ds1, '\"'); } else sadd(&ds1, tmpstr2); } tfree(tmpstr2); tfree(partoken1); tfree(partoken2); } else if ((tmpstr[0] == 'i' || tmpstr[0] == 'I') && tmpstr[1] == '(' && tmpstr[2] != '\"' && (nsz == tmpstr || isspace_c(tmpstr[-1]) || is_arith_char(tmpstr[-1]) || tmpstr[-1] == '.')) { char* tmpstr2, *tmpstr3; tmpstr3 = tmpstr; tmpstr += 2; /* get the complete zzz of i(zzz) */ tmpstr2 = gettok_char(&tmpstr, ')', FALSE, FALSE); /* missing final ) ?*/ if (!tmpstr2) { fprintf(stderr, "Error: closing ) is missing in %s,\n ignored\n", tmpstr3); tmpstr = ++tmpstr3; continue; } /* check if this is i(zzz) or v(xx,yy) */ sadd(&ds1, "i("); bool hac = has_arith_char(tmpstr2); if (is_all_digits(tmpstr2)) { sadd(&ds1, tmpstr2); } else if (isdigit_c(*tmpstr2) || hac) { cadd(&ds1, '\"'); sadd(&ds1, tmpstr2); cadd(&ds1, '\"'); } else sadd(&ds1, tmpstr2); tfree(tmpstr2); } cadd(&ds1, *tmpstr); tmpstr++; } char* newline = ds_get_buf(&ds1); names = ft_getpnames_from_string(newline, check); ds_free(&ds1); tfree(nsz); /* restore the old node name after parsing */ for (tmpnode = names; tmpnode; tmpnode = tmpnode->pn_next) { if (strstr(tmpnode->pn_name, "v(\"") || strstr(tmpnode->pn_name, "i(\"")) { char newstr[100]; char* tmp = tmpnode->pn_name; int ii = 0; // copy to newstr without double quotes while (*tmp && ii < 99) { if (*(tmp) == '\"') { tmp++; continue; } newstr[ii] = *(tmp++); ii++; } newstr[ii] = '\0'; tfree(tmpnode->pn_name); tmpnode->pn_name = copy(newstr); } } } else { names = ft_getpnames_from_string(sz, check); } tfree(sz); return names; } /* 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: zero length 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 }, { "conj", cx_conj }, { "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 }, { "integ", (cx_function_t*) cx_integ }, { "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; } /* end of function PP_mkbnode */ /* 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; } /* end of function PP_mkunode */ /* 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) { /* not found yet */ /* Give the user-defined functions a try. */ q = ft_substdef(func, arg); if (q) { /* found */ /* remove only the old comma operator pnode, no longer used */ if (arg->pn_op && arg->pn_op->op_num == PT_OP_COMMA) { free_pnode(arg); } 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, "\nError: no such function as %s,\n", func); fprintf(cp_err, " or %s is not available.\n", buf); return (struct pnode *) 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 (struct pnode *) 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; } /* end of function PP_mkfnode */ /* 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 <= INT_MAX ? 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); } /* end of function PP_mknnode */ /* 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; } /* end of function PP_mksnode */ 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; } /* end of function alloc_pnode */ /* 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 through the 'tree', we only free nodes 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 probably 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_use == 1 && t->pn_value && !(t->pn_value->v_flags & VF_PERMANENT)) { vec_free(t->pn_value); /* patch by Stefan Jones */ } txfree(t); } } /* end of function free_pnode_x */ 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); } /* end of function db_print_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); } /* end of function db_print_op */ 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); } /* end of function db_print_dvec */ 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"); } /* end of function db_print_pnode */ 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 } /* end of function db_print_pnode_tree */ 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 "< >" */ size_t 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 val; if (ft_numparse(&s, FALSE, &val) >= 0 && (!s || *s != ':')) { sbuf = s; lvalp->num = val; 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] * vthing#branch * i(vthing) */ for (; *sbuf && !strchr(specials, *sbuf); sbuf++) if (*sbuf == '@') { atsign = 1; } else if (!atsign && *sbuf == '[') { break; } else if (*sbuf == ']') { if (atsign) { sbuf++; } break; } /* keep the identifier i(vss) as a single token, even as dc1.i(vss) */ else if (prefix("i(v", sbuf)) { if (get_r_paren(&sbuf) == 1) { fprintf(stderr, "Error: missing ')' in token\n %s\n", start); break; } sbuf--; } lvalp->str = copy_substring(start, sbuf); lexer_return(TOK_STR, 0); } } } /* end of switch over characters */ 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; } /* end of function PPlex */ tmp_ns50wwy/src/frontend/com_cdump.h0000644000175000017500000000033114163340332017673 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 tmp_ns50wwy/src/frontend/com_chdir.c0000644000175000017500000000301514163340332017651 0ustar carstencarsten/************* * com_chdir.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #ifdef HAVE_PWD_H #include #endif #include "com_chdir.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 } tmp_ns50wwy/src/frontend/com_set.c0000644000175000017500000001005214163340332017352 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "variable.h" #include "com_set.h" static wordlist* readifile(wordlist*); /* The set command. * * Syntax is set [var [= val] ...] * * var is the name of the variable to be defined. Quoting allows special * characters such as = to be included as part of the name. * val may be a string, an int, a float, a bool, or a list of the form * ( elt1 ... ). * * With no var value, all variables that are currently defined are printed * Without the "= val" portion, the variable becomes a Boolean set to true. * Lists must have spaces both after the leading '(' and before the * trailing ')'. Individual elements may be of any type. * Quoted expressions are taken to be strings in all cases and quoting a * grouping character ("(" or ")") suppresses its special properties. * Further, words "(" and ")" within a list are ordinary words. * * This function may alter the input wordlist, but on return its resources * can be freed in the normal manner. */ void com_set(wordlist *wl) { /* Handle case of printing defined variables */ if (wl == (wordlist *) NULL) { cp_vprint(); return; } /* Handle special case input redirection. The file contents is * converted to a list that can be handled by cp_setparse(). */ { const wordlist * const ww = wl->wl_next; if (ww && eq(ww->wl_word, "<")) { wl = readifile(wl); } } struct variable *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); struct variable * const oldvar = vars; vars = vars->va_next; /* Free allocations associated with the current variable */ txfree(oldvar->va_name); if (oldvar->va_type == CP_STRING){ txfree(oldvar->va_string); /* copied in cp_vset */ } /* don't free oldvar->va_list! This structure is used furthermore! */ txfree(oldvar); } } /* end of function com_set */ /* read a file from cp_in, add the tokens to a wordlist and create an input for a string list like set ccc = ( 3 5 7 ). Comment lines in input file (starting with '*') are ignored. */ static wordlist* readifile(wordlist* win) { /* max file size */ char intoken[4096]; /* save start address */ wordlist* tw = win; char *tmpstr; /* delete wordlist from '<' on */ wl_free(win->wl_next); wl_append_word(&win, &win, copy("=")); wl_append_word(&win, &win, copy("(")); /* read a line. If it starts with '*', ignore it */ while (fgets(intoken, sizeof intoken, cp_in) != NULL) { if (intoken[0] == '*') { /* skip comment lines */ continue; } char *instr = intoken; /* get all tokens, ignoring '\n' and add to string list */ while ((tmpstr = gettok(&instr)) != NULL) { wl_append_word(&win, &win, tmpstr); } } wl_append_word(&win, &win, copy(")")); /* close and reset cp_in (was opened in streams.c:84) */ cp_ioreset(); return tw; #if 0 size_t retval = fread(intoken, 1, 4096, cp_in); intoken[retval] = '\0'; char* delstr; char* instr = delstr = copy(intoken); /* get all tokens, ignoring '\n' and add to string list */ while ((tmpstr = gettok(&instr)) != NULL) { wl_append_word(&win, &win, tmpstr); } tfree(delstr); wl_append_word(&win, &win, copy(")")); /* close and reset cp_in (was opened in streams.c:84) */ cp_ioreset(); return tw; #endif } tmp_ns50wwy/src/frontend/inp.h0000644000175000017500000000044014163340332016514 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 tmp_ns50wwy/src/frontend/mw_coms.h0000644000175000017500000000025614163340332017377 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 tmp_ns50wwy/src/frontend/com_dump.c0000644000175000017500000000070614163340332017531 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); } tmp_ns50wwy/src/frontend/com_setscale.h0000644000175000017500000000021014163340332020362 0ustar carstencarsten#ifndef ngspice_COM_SETSCALE_H #define ngspice_COM_SETSCALE_H #include "ngspice/wordlist.h" void com_setscale(wordlist *wl); #endif tmp_ns50wwy/src/frontend/misccoms.h0000644000175000017500000000034714163340332017551 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 tmp_ns50wwy/src/frontend/miscvars.h0000644000175000017500000000021714163340332017557 0ustar carstencarsten/************* * Header file for miscvars.c * 1999 E. Rouat ************/ #ifndef ngspice_MISCVARS_H #define ngspice_MISCVARS_H #endif tmp_ns50wwy/src/frontend/plotting/0000755000175000017500000000000014163340332017417 5ustar carstencarstentmp_ns50wwy/src/frontend/plotting/agraf.c0000644000175000017500000002415514163340332020652 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); txfree(field); txfree(line1); txfree(line2); if (!novalue) txfree(values); } tmp_ns50wwy/src/frontend/plotting/x11.c0000644000175000017500000012727314163340332020210 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 # 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 HAVE_LIBXFT #include #endif # 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[3]; XFontStruct *font; GC gc; /* graphics context for graphs */ GC gridgc; /* graphics context for grid, linewidth may differ */ int lastx, lasty; /* used in X_DrawLine */ int lastlinestyle; /* used in X_DrawLine */ Pixel colors[NUMCOLORS]; char txtcolor[32]; char bgcolor[32]; char fname[BSIZE_SP]; int fsize; /* use with xft */ #ifdef HAVE_LIBXFT XftFont *font0; XftFont *font90; XftDraw* draw; XftColor color; Colormap cmap; #endif } 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 int xfont_size; static char fontname[BSIZE_SP]; /* 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); #ifdef HAVE_LIBXFT static int Xget_str_length(const char *text, int* wlen, int* wheight, XftFont* gfont, char* name, int fsize); static int X11_DefineXft(GRAPH *graph); #endif //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 hardcopySVG(Widget w, XtPointer client_data, XtPointer call_data); static void killwin(Widget w, XtPointer client_data, XtPointer call_data); int X11_GetLenStr(GRAPH* gr, char* instring); 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; 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"; */ /* initialze internationalization (i18n) */ XtSetLanguageProc(NULL, NULL, NULL); /* initialize X toolkit */ toplevel = XtInitialize("ngspice", "Nutmeg", NULL, 0, &argc, argv); setlocale(LC_NUMERIC, "C"); display = XtDisplay(toplevel); X11_Open = 1; 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]; } /* initialize color selection for grid/text, background and graphs. Input is by setting the variables color0 (background), color1 (grid/text) and color%id with %id from2 to 19. color%id may be set to color name string or rgb:0/FF/F0 rgb:0/F/0 rgbd:295/0/128 */ static void initcolors(GRAPH *graph) { int i; bool gridgiven = TRUE; 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; /* Silence incorrect compiler warning about possibly not being init */ XColor bgcolor = {0}; char buf[BSIZE_SP], colorstring[32]; int xmaxcolors = NUMCOLORS; /* note: can we get rid of this? */ if (numdispplanes == 1) { /* black and white */ xmaxcolors = 2; graph->colorarray[0] = DEVDEP(graph).view->core.background_pixel; if (graph->colorarray[0] == WhitePixel(display, DefaultScreen(display))) graph->colorarray[1] = BlackPixel(display, DefaultScreen(display)); else graph->colorarray[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(i == 1) gridgiven = FALSE; } /* colorstring by integer numbers between 0 and 255 */ else if (ciprefix("rgbd:", colorstring)) { char *t1, *t2, *t3, *tmpstr; tmpstr = colorstring + 5; if (tmpstr) { t1 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t2 = gettok_char(&tmpstr, '/', FALSE, FALSE); tmpstr++; t3 = copy(tmpstr); if (t1 && t2 && t3) { double c1, c2, c3; c1 = (double) strtol(t1, NULL, 10) / 255.; c2 = (double) strtol(t2, NULL, 10) / 255.; c3 = (double) strtol(t3, NULL, 10) / 255.; c1 = fmax(0., fmin(c1, 1.)); c2 = fmax(0., fmin(c2, 1.)); c3 = fmax(0., fmin(c3, 1.)); tfree(t1); tfree(t2); tfree(t3); sprintf(colorstring, "RGBi:%.3f/%.3f/%.3f", c1, c2, c3); } else { fprintf(cp_err, "Error: Could not evaluate color%d", i); continue; } } } if (!XAllocNamedColor(display, DefaultColormap(display, DefaultScreen(display)), colorstring, &visualcolor, &exactcolor)) { (void) sprintf(ErrorMessage, "can't get color %s\n", colorstring); externalerror(ErrorMessage); graph->colorarray[i] = i ? BlackPixel(display, DefaultScreen(display)) : WhitePixel(display, DefaultScreen(display)); continue; } if (i == 0) { bgcolor = visualcolor; strncpy(DEVDEP(graph).bgcolor, colorstring, 32); } if ((!gridgiven) && (i == 1)) { /* select grid color according to background color. Empirical selection using the color depth of the background */ /* switch the grid and text color depending on background */ int tcolor = (int) bgcolor.red + (int) (1.5 * bgcolor.green) + (int) bgcolor.blue; if (tcolor > 92160) { graph->colorarray[1] = BlackPixel(display, DefaultScreen(display)); strncpy(DEVDEP(graph).txtcolor, "black", 32); } else { graph->colorarray[1] = WhitePixel(display, DefaultScreen(display)); strncpy(DEVDEP(graph).txtcolor, "white", 32); } } else { graph->colorarray[i] = visualcolor.pixel; if (i == 1) strncpy(DEVDEP(graph).txtcolor, colorstring, 32); } } } for (i = xmaxcolors; i < NUMCOLORS; i++) { graph->colorarray[i] = graph->colorarray[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 */ #ifndef HAVE_LIBXFT XWarpPointer(display, None, DEVDEP(graph).window, 0, 0, 0, 0, keyev->x + XTextWidth(DEVDEP(graph).font, text, nbytes), keyev->y); #else int wl, wh; int ret = Xget_str_length(text, &wl, &wh, NULL, DEVDEP(graph).fname, DEVDEP(graph).fsize); /* int ret = Xget_str_length("ABCD", &wl, &wh, NULL, DEVDEP(graph).fname, DEVDEP(graph).fsize); if (ret == 1) ret = Xget_str_length("我能åžä¸‹", &wl, &wh, NULL, DEVDEP(graph).fname, DEVDEP(graph).fsize);*/ if (ret == 1) { fprintf(cp_err, "Error: Could not establish a font for %s\n", DEVDEP(graph).fname); } else { XWarpPointer(display, None, DEVDEP(graph).window, 0, 0, 0, 0, keyev->x + (int)(1.2 * wl), keyev->y); } #endif 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) { #ifndef HAVE_LIBXFT char *p, *q; int trys; #endif Cursor cursor; XSetWindowAttributes w_attrs; XGCValues gcvalues; XGCValues gridgcvalues; GRAPH *pgraph = NULL; 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 } }; static Arg viewargs[] = { { XtNresizable, (XtArgVal) TRUE }, { XtNwidth, (XtArgVal) 600 }, { XtNheight, (XtArgVal) 500 }, { XtNright, (XtArgVal) XtChainRight } }; graph->devdep = TMALLOC(X11devdep, 1); graph->n_byte_devdep = sizeof(X11devdep); /* set up new shell */ DEVDEP(graph).shell = XtCreateApplicationShell ("shell", topLevelShellWidgetClass, NULL, 0); XtVaSetValues(DEVDEP(graph).shell, XtNtitleEncoding, XInternAtom(display, "UTF8_STRING", False), NULL); 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, "PostScript"); 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); XtSetArg(buttonargs[0], XtNlabel, "SVG"); DEVDEP(graph).buttons[2] = XtCreateManagedWidget( "SVG", commandWidgetClass, DEVDEP(graph).buttonbox, buttonargs, 1); XtAddCallback(DEVDEP(graph).buttons[2], XtNcallback, hardcopySVG, graph); /* set up fonts */ if (!cp_getvar("xfont", CP_STRING, fontname, sizeof(fontname))) (void) strcpy(fontname, DEF_FONT); strncpy(DEVDEP(graph).fname, fontname, BSIZE_SP); #ifndef HAVE_LIBXFT 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; } #endif /* font size */ if (!cp_getvar("xfont_size", CP_NUM, &xfont_size, 0)) xfont_size = 16; #ifndef HAVE_LIBXFT 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; #else int wl, wh; int ret = Xget_str_length("ABCD", &wl, &wh, NULL, fontname, xfont_size); if (ret == 1) ret = Xget_str_length("我能åžä¸‹", &wl, &wh, NULL, fontname, xfont_size); if (ret == 1) { fprintf(cp_err, "Error: Could not establish a font for %s\n", fontname); return 1; } graph->fontwidth = (int)(wl / 4); graph->fontheight = wh; DEVDEP(graph).fsize = xfont_size; #endif 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); int linewidth, gridlinewidth; /* If we had a previous graph, e.g. after zooming, we have to set the background color already here, because background is set below */ if (graph->mgraphid > 0) { pgraph = FindGraph(graph->mgraphid); } /* get linewidth information from .spiceinit or .control section */ if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = MW_LINEWIDTH; if (linewidth < 0) linewidth = MW_LINEWIDTH; if (pgraph) gcvalues.line_width = graph->graphwidth = pgraph->graphwidth; else gcvalues.line_width = graph->graphwidth = linewidth; /* get linewidth information from .spiceinit or .control section */ if (!cp_getvar("xgridwidth", CP_NUM, &gridlinewidth, 0)) gridlinewidth = MW_LINEWIDTH; if (gridlinewidth < 0) gridlinewidth = MW_LINEWIDTH; if (pgraph) gridgcvalues.line_width = graph->gridwidth = pgraph->gridwidth; else gridgcvalues.line_width = graph->gridwidth = gridlinewidth; gridgcvalues.cap_style = gcvalues.cap_style = CapNotLast; gridgcvalues.function = gcvalues.function = GXcopy; #ifndef HAVE_LIBXFT gridgcvalues.font = gcvalues.font = DEVDEP(graph).font->fid; DEVDEP(graph).gc = XCreateGC(display, DEVDEP(graph).window, GCFont | GCLineWidth | GCCapStyle | GCFunction, &gcvalues); DEVDEP(graph).gridgc = XCreateGC(display, DEVDEP(graph).window, GCFont | GCLineWidth | GCCapStyle | GCFunction, &gridgcvalues); #else DEVDEP(graph).gc = XCreateGC(display, DEVDEP(graph).window, GCLineWidth | GCCapStyle | GCFunction, &gcvalues); DEVDEP(graph).gridgc = XCreateGC(display, DEVDEP(graph).window, GCLineWidth | GCCapStyle | GCFunction, &gridgcvalues); #endif /* 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); /* we have a 'mother' graph and want to get its colors */ int i; if(pgraph) { for(i = 0; i < 25; i++) graph->colorarray[i] = pgraph->colorarray[i]; } XSetWindowBackground(display, DEVDEP(graph).window, graph->colorarray[0]); /* set up cursor */ cursor = XCreateFontCursor(display, XC_left_ptr); XDefineCursor(display, DEVDEP(graph).window, cursor); #ifdef HAVE_LIBXFT X11_DefineXft(graph); #endif /* 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, bool isgrid) { if (DEVDEP(currentgraph).isopen) { if (isgrid) { XDrawLine(display, DEVDEP(currentgraph).window, DEVDEP(currentgraph).gridgc, x1, currentgraph->absolute.height - y1, x2, currentgraph->absolute.height - y2); } else { 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(const 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. */ #ifndef HAVE_LIBXFT if (DEVDEP(currentgraph).isopen) { if (angle != 0) { if (ft_ngdebug) fprintf(stderr, "\nWarning: No Xft: angles other than 0 are not supported\n"); angle = 0; } 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 */ #else /* Draw text */ if (angle == 0) { XftDrawStringUtf8( DEVDEP(currentgraph).draw, &DEVDEP(currentgraph).color, DEVDEP(currentgraph).font0, x, currentgraph->absolute.height - y, (FcChar8*)text, (int)strlen(text)); } else if (angle == 90) { int wlen=0, wheight; /* calculate and add offset, if ylabel with angle 90° */ Xget_str_length(text, &wlen, &wheight, DEVDEP(currentgraph).font90, NULL, 0); XftDrawStringUtf8( DEVDEP(currentgraph).draw, &DEVDEP(currentgraph).color, DEVDEP(currentgraph).font90, x + (int)(1.5 * wlen), currentgraph->absolute.height - y + (int)(0.5 * wheight), (FcChar8*)text, (int)strlen(text)); } else fprintf(stderr, " Xft: angles other than 0 or 90 are not supported in ngspice\n"); #endif return 0; } #ifdef HAVE_LIBXFT int X11_DefineXft(GRAPH *graph) { /* font selection with rotation */ XftPattern *new_pat = XftPatternCreate(); // the pattern we will use for rotating XftPatternAddString(new_pat, XFT_FAMILY, DEVDEP(graph).fname); XftPatternAddDouble (new_pat, XFT_PIXEL_SIZE, (double)DEVDEP(graph).fsize); XftResult rot_result; XftPattern *rot_pat = XftFontMatch(display, 0, new_pat, &rot_result); /* do not destroy!*/ DEVDEP(graph).font0 = XftFontOpenPattern(display, rot_pat); if(DEVDEP(graph).font0 == NULL) { fprintf(stderr, "Can't load font pattern %s\n", DEVDEP(graph).fname); } /* for angle 90 deg */ XftMatrix m; XftMatrixInit(&m); int angle = 90; XftMatrixRotate(&m,cos(M_PI*angle/180.),sin(M_PI*angle/180.)); XftPatternAddMatrix (new_pat, XFT_MATRIX,&m); XftPattern *rot_pat2 = XftFontMatch(display, 0, new_pat, &rot_result); /* do not destroy!*/ DEVDEP(graph).font90 = XftFontOpenPattern(display, rot_pat2); XftPatternDestroy(new_pat); Colormap cmap = DefaultColormap(display, 0); XftColor color; XRenderColor rcolor; XColor xxcolor; /* pixel -> XColor -> XftColor */ xxcolor.pixel = graph->colorarray[1]; XQueryColor(display, cmap, &xxcolor); rcolor.alpha = 65535; rcolor.red = xxcolor.red; rcolor.green = xxcolor.green; rcolor.blue = xxcolor.blue; XftColorAllocValue(display, DefaultVisual(display, 0), cmap, &rcolor, &color); DEVDEP(graph).color = color; DEVDEP(graph).cmap = cmap; DEVDEP(graph).draw = XftDrawCreate( display, DEVDEP(graph).window, DefaultVisual(display, 0), cmap ); return 0; } #endif 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); XChangeGC(display, DEVDEP(currentgraph).gridgc, GCLineStyle, &values); currentgraph->linestyle = linestyleid; XSetDashes(display, DEVDEP(currentgraph).gc, 0, xlinestyles[linestyleid], 4); XSetDashes(display, DEVDEP(currentgraph).gridgc, 0, xlinestyles[linestyleid], 4); } return 0; } int X11_SetColor(int colorid) { currentgraph->currentcolor = colorid; XSetForeground(display, DEVDEP(currentgraph).gc, currentgraph->colorarray[colorid]); XSetForeground(display, DEVDEP(currentgraph).gridgc, currentgraph->colorarray[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) - 1); buf2[sizeof buf2 - 1] = '\0'; 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 sgraphid %d; setplot $curplot\n", buf2, graph->commandline, fx0, fx1, fy0, fy1, graph->graphid); } else { /* set the foreground and background colors to the "calling" window's colors */ (void) sprintf(buf, "%s xlimit %e %e ylimit %e %e sgraphid %d\n", graph->commandline, fx0, fx1, fy0, fy1, graph->graphid); } /* 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); int i = 1; cp_vset("hcopydevtype", CP_STRING, "postscript"); /* If not set, the color will be b&w, i = 1 is white background */ cp_vset("hcopypscolor", CP_NUM, &i); /* com_hardcopy() -> gr_resize() -> setcolor() during 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 hardcopySVG(Widget w, XtPointer client_data, XtPointer call_data) { NG_IGNORE(call_data); NG_IGNORE(w); lasthardcopy = (GRAPH*)client_data; cp_vset("hcopydevtype", CP_STRING, "svg"); 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() too much - try Xt...() first */ XtUnmapWidget(DEVDEP(graph).shell); XtDestroyWidget(DEVDEP(graph).shell); #ifndef HAVE_LIBXFT XFreeFont(display, DEVDEP(graph).font); #endif XFreeGC(display, DEVDEP(graph).gc); XFreeGC(display, DEVDEP(graph).gridgc); #ifdef HAVE_LIBXFT XftFontClose( display, DEVDEP(graph).font0); XftFontClose( display, DEVDEP(graph).font90); XftDrawDestroy(DEVDEP(graph).draw); XftColorFree(display, DefaultVisual(display, 0), DEVDEP(graph).cmap, &DEVDEP(graph).color); #endif } if (graph == currentgraph) currentgraph = NULL; DestroyGraph(graph->graphid); } /* end of function RemoveWindow */ /* 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, FALSE); } } #ifdef HAVE_LIBXFT /* After font selection for XftTextExtentsUtf8 * to measure character string length. * Same as rotation below, but 0° angle */ static int Xget_str_length(const char *text, int* wlen, int* wheight, XftFont* gfont, char* foname, int fsize) { XGlyphInfo extents; XftFont* hfont = NULL; /* if font name and font size are given */ if (gfont == NULL) { XftPattern *ext_pat = XftPatternCreate(); // the pattern we will use for rotating XftPatternAddString(ext_pat, XFT_FAMILY, foname); XftPatternAddDouble(ext_pat, XFT_PIXEL_SIZE, (double)fsize); XftResult ext_result; XftPattern *font_pat = XftFontMatch(display, 0, ext_pat, &ext_result); hfont = gfont = XftFontOpenPattern(display, font_pat); XftPatternDestroy(ext_pat); } if(gfont) XftTextExtentsUtf8( display, gfont, (XftChar8 *)text, (int)strlen(text), &extents ); else { return 1; } if(hfont) XftFontClose( display,hfont); /* size of the string */ *wlen = extents.width; *wheight = extents.height; return 0; } /* get the length of an utf-8 string in pixels */ int X11_GetLenStr(GRAPH *gr, char* instring) { int wl=0, wh; Xget_str_length(instring, &wl, &wh, NULL, DEVDEP(gr).fname, DEVDEP(gr).fsize); return wl; } #endif #else int x11_dummy_symbol; /* otherwise, some linkers get upset */ #endif /* X_DISPLAY_MISSING */ tmp_ns50wwy/src/frontend/plotting/agraf.h0000644000175000017500000000064414163340332020654 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 tmp_ns50wwy/src/frontend/plotting/plot5.c0000644000175000017500000001040314163340332020624 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) { perror((char *) graph->devdep); free(graph->devdep); graph->devdep = NULL; graph->n_byte_devdep = 0; 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; graph->n_byte_devdep = 0; 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, bool isgrid) { NG_IGNORE(isgrid); 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(const 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; } tmp_ns50wwy/src/frontend/plotting/Makefile.am0000644000175000017500000000103014163340332021445 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 endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include -I$(top_srcdir)/src/frontend @X_CFLAGS@ AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/frontend/plotting/pvec.c0000644000175000017500000000423114163340332020520 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); size_t icopy = BSIZE_SP - 1; size_t len = (size_t)snprintf(buf2, icopy, ", dims = [%s]", buf3); if (len > icopy) { fprintf(stderr, "Warning: Potential buffer overflow while setting a vector dimension"); } strcat(buf, buf2); } if (d->v_plot->pl_scale == d) strcat(buf, " [default scale]\n"); else strcat(buf, "\n"); out_send(buf); } tmp_ns50wwy/src/frontend/plotting/plotit.c0000644000175000017500000011747014163340332021110 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/dstring.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 "ngspice/compatmode.h" #include #include "plotit.h" #include "points.h" #include "agraf.h" #include "gnuplot.h" #include "graf.h" static bool sameflag; /* All these things are static so that "samep" will work. They are outside of plotit() to allow deleting */ static double *xcompress = NULL, *xindices = NULL; static double *xlim = NULL, *ylim = NULL; static double *xdelta = NULL, *ydelta = NULL; static char *xlabel = NULL, *ylabel = NULL, *title = NULL; #ifdef TCL_MODULE #include "ngspice/tclspice.h" #endif static struct dvec *vec_self(struct dvec *v); static struct dvec *vec_scale(struct dvec *v); static void find_axis_limits(double *lim, bool oneval, bool f_real, struct dvec *vecs, struct dvec *(*p_get_axis_dvec)(struct dvec *dvec), double *lims); /* Remove the malloced parameters upon ngspice quit. These are set to NULL * to allow the function to be used at any time and safely called more than * one time. */ void pl_rempar(void) { tfree(xcompress); tfree(xindices); tfree(xlim); tfree(ylim); tfree(xdelta); tfree(ydelta); tfree(xlabel); tfree(ylabel); } /* This routine gets parameters from the command line, which are of * the form "name number ..." It returns a pointer to the parameter * values. * * Parameters * wl: Wordlist prefixed with dummy node from which the parameter value or * values is to be extracted. On return, the nodes corresponding to the * name of the parameter and the following value nodes are removed. * name: Name of parameter * number: number of values for the parameter * * Return values * Allocated list of values extracted from the wordlist * * Remarks * The dummy node at the front of wl guarantees that removing the nodes * for this parameter will not change the first node of the wordlist. */ static double *getlims(wordlist *wl, const char *name, int number) { wordlist *wk; int n; if (number < 1) { /* Parameter takes no argument */ return (double *) NULL; } /* Locate parameter name in the wordlist */ wordlist * const beg = wl_find(name, wl->wl_next); if (!beg) { /* not foumd */ return (double *) NULL; } wk = beg->wl_next; /* Start of values for parameter */ double * const d = TMALLOC(double, number); /* alloc for returned vals */ for (n = 0; n < number; n++) { /* loop over values */ char *ss; if (!wk) { fprintf(cp_err, "Syntax error: not enough parameters for \"%s\".\n", name); txfree(d); return (double *) NULL; } ss = wk->wl_word; if (ft_numparse(&ss, FALSE, d + n) < 0) { /* put val in d[n] */ fprintf(cp_err, "Syntax error: bad parameters for \"%s\".\n", name); txfree(d); return (double *) NULL; } wk = wk->wl_next; } /* end of loop over numbers */ wl_delete_slice(beg, wk); /* remove param name and its value nodes */ return d; } /* end of function getlims */ /* Extend a data vector to length by replicating the last element, or * truncate it if it is too long. If the vector is empty, it is * extended with NAN */ static void xtend(struct dvec *v, int length) { int i; if (v->v_length == length) { /* no change required */ return; } if (v->v_length > length) { /* too long */ dvec_trunc(v, length); return; } /* Else must be extended */ i = v->v_length; dvec_realloc(v, length, NULL); if (isreal(v)) { double d = NAN; if (i > 0) { /* At least one value */ d = v->v_realdata[i - 1]; } while (i < length) { /* Fill new elements at end */ v->v_realdata[i++] = d; } } else { ngcomplex_t c = {NAN, NAN}; if (i > 0) { /* At least one value */ c = v->v_compdata[i - 1]; } while (i < length) { /* Fill new elements at end */ v->v_compdata[i++] = c; } } } /* end of function xtend */ /* Collapse every *xcomp elements into one, and use only the elements * between xind[0] and xind[1]. Decimate would be a better description * than compress */ static void compress(struct dvec *d, double *xcomp, double *xind) { if (xind) { int newlen; const int ilo = (int) xind[0]; const int 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) { const int cfac = (int) *xcomp; if ((cfac > 1) && (cfac < d->v_length)) { int i, j; const int n = d->v_length; for (i = 0, j = 0; j < n; i++, j += cfac) { if (isreal(d)) { d->v_realdata[i] = d->v_realdata[j]; } else { d->v_compdata[i] = d->v_compdata[j]; } } dvec_trunc(d, i); } } } /* end of function compress */ /* Check for and remove a one-word keyword (without an argument). */ static bool getflag(wordlist *wl, const char *name) { wl = wl_find(name, wl->wl_next); if (!wl) { return FALSE; } wl_delete_slice(wl, wl->wl_next); return TRUE; } /* end of function getflag */ /* Return a copy of the value of parameter and deletes the keyword and * value nodes in the wordlist. The search for the keyword begins after * the node wl. (This behavior is due to a dummy node being added * to the front of the wordlist.) * * Parameters * wl: wordlist to process * sz_keyword: keyword to locate * * Return values * NULL: The keyword was not found or its value was missing * allocation consisting of the value node as a string. * * Example * wl= "a" <-> "xlabel" <-> "voltage" <-> "b" * sz_keyword = "xlabel" * On return, * wl= "a" <-> "b" * return value = "voltage" */ static char *getword(wordlist *wl, const char *sz_keyword) { wordlist *kw = wl_find(sz_keyword, wl->wl_next); if (kw == (wordlist *) NULL) { /* not found */ return (char *) NULL; } wordlist *value = kw->wl_next; /* value follows keyword */ if (value == (wordlist *) NULL) { /* no value for keyword */ fprintf(cp_err, "Syntax error: missing value for plot keyword \"%s\".\n", sz_keyword); return (char *) NULL; } char *sz_ret = copy(value->wl_word); /* save value */ wl_delete_slice(kw, value->wl_next); /* remove kw and val nodes */ return sz_ret; } /* end of funtion getword */ /* The common routine for all plotting commands. This does hardcopy * and graphics plotting. * * Parameters * wl: plotting command * hcopy: File used for plotting * devname: "Device" for plotting, e.g. Gnuplot */ bool plotit(wordlist *wl, const char *hcopy, const char *devname) { if (!wl) { /* no wordlist -> cannot plot */ return FALSE; } static double *xprevgraph = NULL; int prevgraph = 0; static bool nointerp = FALSE; static bool kicad = FALSE; static bool plain = FALSE; static GRIDTYPE gtype = GRID_LIN; static PLOTTYPE ptype = PLOT_LIN; bool gfound = FALSE, pfound = FALSE, oneval = FALSE, contour2d = FALSE; double ylims[2], xlims[2]; struct pnode *pn, *names = NULL; struct dvec *d = NULL, *vecs = NULL, *lv = NULL, *lastvs = NULL; char *xn; int i, xt; wordlist *wwl; char *nxlabel = NULL, *nylabel = NULL, *ntitle = NULL; double tstep, tstart, tstop, ttime; /* Save start of vectors on entry for cleaning up junk left behind * by ft_getpnames_quotes() */ struct dvec *dv_head_orig = plot_cur ? plot_cur->pl_dvecs : (struct dvec *) NULL; /* Dstring for building plot command */ DS_CREATE(ds_cline, 200); int rc_ds = 0; /* return code from dstring operations */ /* return value, error by default */ bool rtn = FALSE; /* Create a copy of the input wordlist with a dummy node at the * beginning of the list. The dummy node is used to ensure that * the keyword and value nodes and the labels and title nodes * that are removed are not at the beginning of the list. * As a result, the head of the list remains unchanged while * the undesired nodes are being removed. */ wl = wl_cons(NULL, wl_copy(wl)); /* First get the command line, without the limits. Wii be used for zoomed windows. Besides returning the values, which are not wanted here, the getlims calls remove the nodes for the keyword and its value from wwl. */ wwl = wl_copy(wl); txfree(getlims(wwl, "xl", 2)); txfree(getlims(wwl, "xlimit", 2)); txfree(getlims(wwl, "yl", 2)); txfree(getlims(wwl, "ylimit", 2)); /* Save title, xlabel and ylabel for use later and remove the * corresponding nodes from the wordlist */ nxlabel = getword(wwl, "xlabel"); nylabel = getword(wwl, "ylabel"); ntitle = getword(wwl, "title"); /* remove sgraphid */ txfree(getlims(wwl, "sgraphid", 1)); /* Build the plot command. This construction had been done with wordlists * and reversing, and flattening, but it is clearer as well as much more * efficient to use a dstring. */ char *flatstr = wl_flatten(wwl->wl_next); rc_ds |= ds_cat_printf(&ds_cline, "plot %s", flatstr); wl_free(wwl); tfree(flatstr); /* Add title, xlabel or ylabel, if available, with quotes ''. */ if (nxlabel) { rc_ds |= ds_cat_printf(&ds_cline, " xlabel '%s'", nxlabel); tfree(nxlabel); } if (nylabel) { rc_ds |= ds_cat_printf(&ds_cline, " ylabel '%s'", nylabel); tfree(nylabel); } if (ntitle) { rc_ds |= ds_cat_printf(&ds_cline, " title '%s'", ntitle); tfree(ntitle); } if (rc_ds != 0) { fprintf(cp_err, "Unable to build plot command line.\n"); goto quit1; } /* See if contours for 2D Cider data can be plotted with gnuplot */ contour2d = getflag(wl, "xycontour"); /* Now extract all the parameters. */ sameflag = getflag(wl, "samep"); if (!sameflag || !xlim) { txfree(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) { txfree(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) { txfree(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) { txfree(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) { txfree(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) { txfree(ydelta); ydelta = getlims(wl, "ydelta", 1); if (!ydelta) { ydelta = getlims(wl, "ydel", 1); } } else { txfree(getlims(wl, "ydelta", 1)); txfree(getlims(wl, "ydel", 1)); } if (!sameflag || !xprevgraph) { xprevgraph = getlims(wl, "sgraphid", 1); if(xprevgraph) prevgraph = (int)(*xprevgraph); } else { txfree(getlims(wl, "sgraphid", 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. " "\"lingrid\" is ignored.\n"); } else { gtype = GRID_LIN; gfound = TRUE; } } if (getflag(wl, "loglog")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"loglog\" is ignored.\n"); } else { gtype = GRID_LOGLOG; gfound = TRUE; } } if (getflag(wl, "nogrid")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"nogrid\" is ignored.\n"); } else { gtype = GRID_NONE; gfound = TRUE; } } if (getflag(wl, "linear")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"linear\" is ignored.\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. " "\"xlog\" is ignored.\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. " "\"xlog\" is ignored.\n"); } } else { gtype = GRID_YLOG; gfound = TRUE; } } if (getflag(wl, "polar")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"polar\" is ignored.\n"); } else { gtype = GRID_POLAR; gfound = TRUE; } } if (getflag(wl, "smith")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"smith\" is ignored.\n"); } else { gtype = GRID_SMITH; gfound = TRUE; } } if (getflag(wl, "smithgrid")) { if (gfound) { fprintf(cp_err, "Warning: too many grid types given. " "\"smithgrid\" is ignored.\n"); } else { gtype = GRID_SMITHGRID; gfound = TRUE; } } if (!sameflag && !gfound) { char buf[BSIZE_SP]; 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: unknown grid type \"%s\" is ignored. " "The grid type will default to linear.\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. " "\"linplot\" is ignored.\n"); } else { ptype = PLOT_LIN; pfound = TRUE; } } if (getflag(wl, "retraceplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given. " "\"retraceplot\" is ignored.\n"); } else { ptype = PLOT_RETLIN; pfound = TRUE; } } if (getflag(wl, "combplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given. " "\"combplot\" is ignored.\n"); } else { ptype = PLOT_COMB; pfound = TRUE; } } if (getflag(wl, "pointplot")) { if (pfound) { fprintf(cp_err, "Warning: too many plot types given. " "\"pointplot\" is ignored.\n"); } else { ptype = PLOT_POINT; pfound = TRUE; } } if (!sameflag && !pfound) { char buf[BSIZE_SP]; if (cp_getvar("plotstyle", CP_STRING, buf, sizeof(buf))) { if (eq(buf, "linplot")) { ptype = PLOT_LIN; } else if (eq(buf, "retraceplot")) { ptype = PLOT_RETLIN; } 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\" is ignored. " "The plot type will default to linear.\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 (!sameflag) { kicad = getflag(wl, "kicad"); } else if (getflag(wl, "kicad")) { kicad = TRUE; } if (!sameflag) { plain = getflag(wl, "plainplot"); } else if (getflag(wl, "plainplot")) { plain = TRUE; } plain = plain | cp_getvar("plainplot", CP_BOOL, NULL, 0); if (!wl->wl_next) { fprintf(cp_err, "Error: no vectors given\n"); goto quit1; } /* if plain is set, we skip all function parsing and just plot the vectors by name. vc1 vs vc2 is also not supported. Thus we may plot vecs with node names containing + - / etc. Note: Evaluating the wordlist starting at wl->wl_next since the first node is a dummy node.*/ if(plain) { wordlist* wli; for (wli = wl->wl_next; wli; wli = wli->wl_next) { d = vec_get(wli->wl_word); if (!d) { fprintf(stderr, "Error during 'plot': vector %s not found\n", wli->wl_word); goto quit; } if (vecs) lv->v_link2 = d; else vecs = d; for (lv = d; lv->v_link2; lv = lv->v_link2) ; } } else { /* kicad will generate vector names containing '/'. If compatibilty flag 'ki' is set in .spiceinit or plot line flag 'kicad' is set, we will place " around this vector name. Division in the plot command will then work only if spaces are around ' / '.*/ if (kicad || newcompat.ki) { wordlist* wlk; for (wlk = wl->wl_next; wlk; wlk = wlk->wl_next) { char* wlkword = strchr(wlk->wl_word, '/'); if (wlkword) { /* already " around token */ if (*(wlk->wl_word) == '"') continue; /* just '/' */ if (*(wlkword + 1) == '\0') continue; else { char* newword = tprintf("\"%s\"", wlk->wl_word); tfree(wlk->wl_word); wlk->wl_word = newword; } } } } /* 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_quotes() 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... * * Note: Evaluating the wordlist starting at wl->wl_next since the first * node is a dummy node. */ names = ft_getpnames_quotes(wl->wl_next, FALSE); if (names == (struct pnode*)NULL) { goto quit1; } /* Now evaluate the names. */ for (pn = names, lv = NULL; pn; pn = pn->pn_next) { struct dvec* pn_value = pn->pn_value; /* Test for a vs b construct */ if (pn_value && (pn_value->v_length == 0) && eq(pn_value->v_name, "vs")) { struct dvec* dv; if (!lv) { /* e.g. "plot vs b" */ fprintf(cp_err, "Error: misplaced vs arg\n"); goto quit; } if ((pn = pn->pn_next) == NULL) { /* "plot a vs" */ 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 { /* An explicit scale vector is not given ("plot a") */ struct dvec* const 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; } } /* end of loop evaluating the names */ d->v_link2 = NULL; /* terminate list */ } /* if not plain */ /* 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: zero length 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) { /* Link the family of vectors that is created through the v_link2 link. * Note that vec_mkfamily links all of the vector that are created * through v_link2 also, so the family of vectors can be added to * the plot list by stepping to the end and linking to the next * vector */ if (d->v_numdims > 1) { /* multi-dim vector */ if (lv) { lv->v_link2 = vec_mkfamily(d); } else { vecs = lv = vec_mkfamily(d); } /* Step to end of the family of vectors */ while (lv->v_link2) { lv = lv->v_link2; } /* And link last vector in family to next vector to plot */ lv->v_link2 = d->v_link2; d = lv; } else { /* Ordinary 1-dim vector, so set prev vector to this one in * preparation for next increment in loop */ lv = d; } } /* end of loop over vectors being plotted */ /* 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 a vector contains a single point, copy the point so that there are * as many copies as the scale vector has elements. */ for (d = vecs; d; d = d->v_link2) { if (d->v_length == 1) { /* single value */ xtend(d, d->v_scale->v_length); } } /* Now patch up each vector with the compression (decimation) and * the strchr 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) { struct dvec **prevvp = &vecs; /* Loop over vectors being plotted */ for (d = vecs; d; d = d->v_link2) { if (d->v_flags & VF_PERMANENT) { struct dvec * const 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); const int n_elem = d->v_length; int j; for (j = 0; j < n_elem; j++) { const double r = d->v_realdata[j]; d->v_realdata[j] = (r - 1) / (r + 1); } } else { ngcomplex_t * const v0 = d->v_compdata; const int n_elem = d->v_length; int j; for (j = 0; j < n_elem; j++) { ngcomplex_t * const p_cur = v0 + j; (void) SMITH_tfm(realpart(*p_cur), imagpart(*p_cur), &realpart(*p_cur), &imagpart(*p_cur)); } /* end of loop over elements in vector */ } /* complex data */ } /* end of loop over vectors being plotted */ } /* end of case of Smith grid */ /* Figure out the proper x-axis and y-axis limits. */ find_axis_limits(ylim, oneval, FALSE, vecs, &vec_self, ylims); find_axis_limits(xlim, oneval, TRUE, vecs, &vec_scale, xlims); 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); } /* 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; } } const int y_type = (int) (d ? SV_NOTYPE : vecs->v_type); if (devname && eq(devname, "gnuplot")) { /* Interface to Gnuplot Plot Program */ ft_gnuplot(xlims, ylims, xdelta ? *xdelta : 0.0, ydelta ? *ydelta : 0.0, 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, contour2d); 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 /* Find the number of vectors being plotted */ 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; 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, plot_cur->pl_typename, ds_get_buf(&ds_cline), prevgraph)) { 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; /* Indicate success */ quit: ds_free(&ds_cline); /* free dstring resources, if any */ free_pnode(names); FREE(title); FREE(xlabel); FREE(ylabel); quit1: /* Free any vectors left behing while parsing the plot arguments. These * are vectors created by ft_evaluate() */ if (plot_cur != (struct plot *) NULL) { struct dvec *dv = plot_cur->pl_dvecs; while(dv != dv_head_orig) { struct dvec *dv_next = dv->v_next; vec_free(dv); dv = dv_next; } } wl_free(wl); return rtn; } /* end of function plotit */ /* Return itself */ static struct dvec *vec_self(struct dvec *v) { return v; } /* Return scale vector */ static struct dvec *vec_scale(struct dvec *v) { return v->v_scale; } /* This function finds the range limits for an x-axis or y-axis. * * Parameters * lim: Existing limits * oneval: Flag that there is no scale vector * f_real: Flag that the real component of a complex value should be used * when finding the range if true and the imaginary part if false * vecs: Vectors being used to determine the range. It is related to athe * oneval flag in that it determines * p_get_axis_dvec: Address of function used to get range information * from a vector. It should be either the address of vec_self to use * the vector itself (for y range with scale value) or the address of * vec_scale for its scale vector (for x range of scale). * lims: Address of an array of 2 double values to receive the limits. **/ static void find_axis_limits(double lim[2], bool oneval, bool f_real, struct dvec *vecs, struct dvec *(*p_get_axis_dvec)(struct dvec *dvec), double lims[2]) { if (lim != (double *) NULL) { lims[0] = lim[0]; lims[1] = lim[1]; } else if (oneval) { struct dvec *d; lims[0] = HUGE; lims[1] = -lims[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 */ const double * const dd = ft_minmax(d, f_real); if (lims[0] > dd[0]) { lims[0] = dd[0]; } if (lims[1] < dd[1]) { lims[1] = dd[1]; } } } else { /* have scale vector */ struct dvec *d; lims[0] = HUGE; lims[1] = -lims[0]; for (d = vecs; d; d = d->v_link2) { const double * const dd = ft_minmax((*p_get_axis_dvec)(d), TRUE); if (lims[0] > dd[0]) { lims[0] = dd[0]; } if (lims[1] < dd[1]) { lims[1] = dd[1]; } } for (d = vecs; d; d = d->v_link2) { struct dvec *d2 = (*p_get_axis_dvec)(d); short v_flags = d2->v_flags; if (v_flags & VF_MINGIVEN) { double v_minsignal = d2->v_minsignal; if (lims[0] < v_minsignal) { lims[0] = v_minsignal; } } if (v_flags & VF_MAXGIVEN) { double v_maxsignal = d2->v_maxsignal; if (lims[1] > v_maxsignal) { lims[1] = v_maxsignal; } } } /* end of loop over vectors being plotted */ } /* end of case of vector with scale vector */ /* Do some coercion of the limits to make them reasonable. */ if ((lims[0] == 0.0) && (lims[1] == 0.0)) { lims[0] = -1.0; lims[1] = 1.0; } if (lims[0] > lims[1]) { SWAP(double, lims[0], lims[1]); } if (AlmostEqualUlps(lims[0], lims[1], 10)) { lims[0] *= (lims[0] > 0) ? 0.9 : 1.1; lims[1] *= (lims[1] > 0) ? 1.1 : 0.9; } } /* end of function find_axis_limits */ tmp_ns50wwy/src/frontend/plotting/pvec.h0000644000175000017500000000015514163340332020526 0ustar carstencarsten#ifndef ngspice_PVEC_H #define ngspice_PVEC_H #include "ngspice/dvec.h" void pvec(struct dvec *d); #endif tmp_ns50wwy/src/frontend/plotting/clip.c0000644000175000017500000001332014163340332020511 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); } tmp_ns50wwy/src/frontend/plotting/plotcurv.c0000644000175000017500000002476614163340332021460 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; /* 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)) { /* We have to take care of non-monotonic x-axis values. If they occur, plotting is suppressed, except for mono is set to FALSE by flag 'retraceplot' in command 'plot'. Then everything is plotted. */ bool mono = (currentgraph->plottype != PLOT_RETLIN); int 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); */ } } tmp_ns50wwy/src/frontend/plotting/plotting.c0000644000175000017500000000065314163340332021427 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, 0, 0 }; struct plot *plot_cur = &constantplot; struct plot *plot_list = &constantplot; int plotl_changed; /* TRUE after a load */ int plot_num = 1; tmp_ns50wwy/src/frontend/plotting/x11.h0000644000175000017500000000127714163340332020210 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 tmp_ns50wwy/src/frontend/plotting/graphdb.c0000644000175000017500000002375114163340332021202 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 */ static inline void setgraph(GRAPH *pgraph, int id) { pgraph->graphid = id; pgraph->degree = 1; pgraph->linestyle = -1; } /* end of function setgraph */ /* Creates a new graph. Returns NULL on error */ GRAPH *NewGraph(void) { LISTGRAPH *list; const int BucketId = RunningId % NUMGBUCKETS; /* allocate memory for graph via LISTGRAPH */ if ((list = TMALLOC(LISTGRAPH, 1)) == NULL) { internalerror("can't allocate a listgraph"); return (GRAPH *) NULL; } GRAPH * const pgraph = &list->graph; setgraph(pgraph, RunningId); GBUCKET *p_bucket = GBucket + BucketId; /* Add to the appropriate bucket at the front of the linked list */ if (!p_bucket->list) { /* no list yet */ p_bucket->list = list; } else { /* insert at front of current list */ list->next = p_bucket->list; p_bucket->list = list; } RunningId++; return pgraph; } /* end of function NewGraph */ /* Given graph id, return graph */ GRAPH *FindGraph(int id) { LISTGRAPH *list; /* Step through list of graphs until found or list ends */ for (list = GBucket[id % NUMGBUCKETS].list; list && list->graph.graphid != id; list = list->next) { ; } if (list) { /* found */ return &list->graph; } else { return (GRAPH *) NULL; } } /* end of function FindGraph */ GRAPH *CopyGraph(GRAPH *graph) { GRAPH *ret; struct dveclist *link = NULL, *newlink = NULL; if (!graph) { return NULL; } ret = NewGraph(); { const int id = ret->graphid; /* save ID of the new graph */ memcpy(ret, graph, sizeof(GRAPH)); /* copy graph info (inc. ID) */ ret->graphid = id; /* restore ID */ } /* copy keyed */ { struct _keyed *k; for (ret->keyed = NULL, k = graph->keyed; k; k = k->next) { SaveText(ret, k->text, k->x, k->y); } } /* copy dvecs or reuse if "borrowed" already */ { struct dveclist *new_plotdata = (struct dveclist *) NULL; for (link = graph->plotdata; link; link = link->next) { if (link->f_own_vector) { struct dvec * const old_vector = link->vector; struct dvec * const new_vector = vec_copy(old_vector); /* vec_copy doesn't set v_color or v_linestyle */ new_vector->v_color = old_vector->v_color; new_vector->v_linestyle = old_vector->v_linestyle; new_vector->v_flags |= VF_PERMANENT; newlink = TMALLOC(struct dveclist, 1); newlink->next = new_plotdata; newlink->f_own_vector = TRUE; newlink->vector = new_vector; /* If the link owns the vector, it also owns its scale * vector, if present */ struct dvec *old_scale = old_vector->v_scale; if (old_scale != (struct dvec *) NULL) { new_plotdata = newlink; /* put in front */ struct dvec * const new_scale = vec_copy(old_scale); new_scale->v_flags |= VF_PERMANENT; newlink->vector->v_scale = new_scale; } } else { newlink->vector = link->vector; newlink->f_own_vector = FALSE; } new_plotdata = newlink; /* put in front */ } ret->plotdata = new_plotdata; /* give vector list to plot */ } /* end of block copying or reusing dvecs */ ret->commandline = copy(graph->commandline); ret->plotname = copy(graph->plotname); { const char * const lbl = graph->grid.xlabel; if (lbl) { ret->grid.xlabel = copy(lbl); } } { const char * const lbl = graph->grid.ylabel; if (lbl) { ret->grid.ylabel = copy(lbl); } } /* Copy devdep information and size if present */ { const void * const p = graph->devdep; if (p != NULL) { const size_t n = ret->n_byte_devdep = graph->n_byte_devdep; void * const dst = ret->devdep = tmalloc(n); (void) memcpy(dst, graph->devdep, n); } } return ret; } /* end of function CopyGraph */ int DestroyGraph(int id) { /* Locate hash bucket for this graph */ const int index = id % NUMGBUCKETS; LISTGRAPH *list = GBucket[index].list; /* Pointer before current one. Allows fixing list when the current * node is deleted. Init to NULL to indicate that at head of list */ LISTGRAPH *lastlist = (LISTGRAPH *) NULL; /* Step through graphs in the bucket until the one with id is found */ while (list) { if (list->graph.graphid == id) { /* found it */ struct _keyed *k, *nextk; struct dbcomm *db; /* 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 to remove the current node */ if (lastlist) { /* not at front */ lastlist->next = list->next; } else { /* at front */ GBucket[index].list = list->next; } /* Run through and de-allocate dynamically allocated keyed list */ k = list->graph.keyed; while (k) { nextk = k->next; txfree(k->text); txfree(k); k = nextk; } /* Free vectors owned by this graph and free the list */ { struct dveclist *d = list->graph.plotdata; struct dveclist *nextd; while (d != (struct dveclist *) NULL) { nextd = d->next; if (d->f_own_vector) { /* list responsible for freeing this vector */ if (d->vector->v_scale) { dvec_free(d->vector->v_scale); } dvec_free(d->vector); } txfree(d); d = nextd; } } txfree(list->graph.commandline); txfree(list->graph.plotname); txfree(list->graph.grid.xlabel); txfree(list->graph.grid.ylabel); /* If device-dependent space was allocated, free it. */ { void * const p = list->graph.devdep; if (p) { txfree(p); } } txfree(list); return 1; } /* end of case that graph ID was found */ lastlist = list; /* update previous node */ list = list->next; /* step to next node */ } /* end of loop over graphs in the current bucket */ /* The graph with ID id was not found */ internalerror("tried to destroy non-existent graph"); return 0; } /* end of function DestroyGraph */ /* Free up all dynamically allocated data structures */ void FreeGraphs(void) { /* Iterate over all hash buckets */ GBUCKET *gbucket; for (gbucket = GBucket; gbucket < &GBucket[NUMGBUCKETS]; gbucket++) { LISTGRAPH * list = gbucket->list; /* linked list of graphs here */ while (list) { /* Free each until end of list */ LISTGRAPH *deadl = list; list = list->next; txfree(deadl); } } } /* end of functdion FreeGraphs */ /* This function sets global varial currentgraph based on graphid */ void SetGraphContext(int graphid) { currentgraph = FindGraph(graphid); } /* end of function SetGraphContext */ /* Stack of graph objects implemented as a linked list */ typedef struct gcstack { GRAPH *pgraph; struct gcstack *next; } GCSTACK; static GCSTACK *gcstacktop; /* top of the stack of graphs */ /* 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 previous value at 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; } /* end of function PushGraphContext */ void PopGraphContext(void) { currentgraph = gcstacktop->pgraph; /* pop from stack, making current */ GCSTACK *dead = gcstacktop; /* remove from stack */ gcstacktop = gcstacktop->next; txfree(dead); /* free allocation */ } /* end of function PopGraphContext */ tmp_ns50wwy/src/frontend/plotting/plot5.h0000644000175000017500000000103214163340332020627 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 tmp_ns50wwy/src/frontend/plotting/plotting.h0000644000175000017500000000017314163340332021431 0ustar carstencarsten#ifndef ngspice_PLOTTING_H #define ngspice_PLOTTING_H #include "ngspice/plot.h" extern struct plot constantplot; #endif tmp_ns50wwy/src/frontend/plotting/ChangeLog0000644000175000017500000000053614163340332021175 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. tmp_ns50wwy/src/frontend/plotting/gnuplot.h0000644000175000017500000000117314163340332021262 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, double xdel, double del, const char *filename, const char *title, const char *xlabel, const char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs, bool xycontour); void ft_writesimple(double *xlims, double *ylims, const char *filename, const char *title, const char *xlabel, const char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs); #endif tmp_ns50wwy/src/frontend/plotting/clip.h0000644000175000017500000000020214163340332020511 0ustar carstencarsten/************* * Header file for clip.c * 1999 E. Rouat ************/ #ifndef ngspice_CLIP_H #define ngspice_CLIP_H #endif tmp_ns50wwy/src/frontend/plotting/graphdb.h0000644000175000017500000000043714163340332021203 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 tmp_ns50wwy/src/frontend/plotting/graf.c0000644000175000017500000010447614163340332020516 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/ftedbgra.h" #include "ngspice/ftedev.h" #include "ngspice/graph.h" #include "ngspice/grid.h" #include "ngspice/sim.h" #include "ngspice/stringskip.h" #include "breakp2.h" #include "display.h" #include "graf.h" #include "graphdb.h" #include "runcoms.h" #include "terminal.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. */ const char *xname, const char *plotname, /* What to label things. */ const 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. */ const char *xlabel, const char *ylabel, /* Labels for axes. */ int xtype, int ytype, /* The types of the data graphed. */ const char *pname, const char *commandline, /* For xi_zoomdata() */ int prevgraph) /* plot id, if started from a previous plot*/ { GRAPH *graph; wordlist *wl; NG_IGNORE(nplots); if ((graph = NewGraph()) == (GRAPH *) 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 = copy(hcopy); graph->n_byte_devdep = strlen(hcopy) + 1; } 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("ticchar", CP_STRING, graph->ticchar, 1)) { strcpy(graph->ticchar, "X"); } if (cp_getvar("ticlist", CP_LIST, ticlist, 0)) { wl = vareval("ticlist"); ticlist = wl_flatten(wl); graph->ticdata = readtics(ticlist); } else { graph->ticdata = NULL; } cp_getvar("nolegend", CP_BOOL, &(graph->nolegend), 0); cp_getvar("nounits", CP_BOOL, &(graph->nounits), 0); 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)"; } graph->plotname = tprintf("%s: %s", pname, plotname); /* restore background color from previous graph, e.g. for zooming, it will be used in NewViewport(graph) */ if (prevgraph > 0) { graph->mgraphid = prevgraph; } else { graph->mgraphid = 0; } /* 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); } /* restore data from previous graph, e.g. for zooming */ if (prevgraph > 0) { int i; GRAPH* pgraph = FindGraph(prevgraph); /* transmit colors */ for (i = 0; i < 25; i++) { graph->colorarray[i] = pgraph->colorarray[i]; } strcpy(graph->ticchar, pgraph->ticchar); graph->ticdata = pgraph->ticdata; graph->ticmarks = pgraph->ticmarks; graph->nolegend = pgraph->nolegend; } /* 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 = copy(xlabel); } else { graph->grid.xlabel = copy(xname); } if (ylabel) { graph->grid.ylabel = copy(ylabel); } else { graph->grid.ylabel = (char *) NULL; } } else { if (xlabel) { graph->grid.xlabel = copy(xlabel); } else { graph->grid.xlabel = copy("real"); } if (ylabel) { graph->grid.ylabel = copy(ylabel); } else { graph->grid.ylabel = copy("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_RETLIN: /* 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, FALSE); if ((tics = currentgraph->ticdata) != NULL) { for (; *tics < HUGE; tics++) if (*tics == (double) np) { DevDrawText(currentgraph->ticchar, (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2), 0); break; } } else if ((currentgraph->ticmarks >0) && (np > 0) && (np % currentgraph->ticmarks == 0)) { /* Draw an 'x' */ DevDrawText(currentgraph->ticchar, (int) (tox - currentgraph->fontwidth / 2), (int) (toy - currentgraph->fontheight / 2), 0); } break; case PLOT_COMB: DatatoScreen(currentgraph, 0.0, currentgraph->datawindow.ymin, &dummy, &ymin); DevDrawLine(tox, ymin, tox, toy, FALSE); 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; /* Either reuse input vector or copy depnding on copyvec */ 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; link->f_own_vector = TRUE; } else { link->vector = dv; link->f_own_vector = FALSE; } currentgraph->plotdata = link; /* Copy the scale vector, add it to the vector as v_scale * and use the copy instead of the original scale vector if requested */ { struct dvec * const custom_scale = dv->v_scale; if (custom_scale != (struct dvec*) NULL) { if (copyvec) { currentgraph->plotdata->vector->v_scale = vec_copy(dv->v_scale); currentgraph->plotdata->vector->v_scale->v_flags |= VF_PERMANENT; } } } /* Put the legend entry on the screen. */ if (!currentgraph->nolegend) drawlegend(currentgraph, cur.plotno++, dv); } /* Start one plot of a graph */ void gr_start(struct dvec *dv) { gr_start_internal(dv, TRUE); } /* end of function gr_start */ /* 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) { const int x = (plotno % 2) ? graph->viewportxoff : (graph->viewport.width / 2); const int x_base = x + graph->viewport.width / 20; const int y = graph->absolute.height - graph->fontheight - ((plotno + 2) / 2) * (graph->fontheight); const int i = y + graph->fontheight / 2 + 1; SetColor(dv->v_color); if (graph->plottype == PLOT_POINT) { char buf[16]; (void) sprintf(buf, "%c : ", dv->v_linestyle); DevDrawText(buf, x_base - 3 * graph->fontwidth, y, 0); } else { SetLinestyle(dv->v_linestyle); DevDrawLine(x, i, x + graph->viewport.width / 20, i, FALSE); } 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 */ if (!graph->nolegend) 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. This step * is essentially the initializaiton for the graph. * * 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 ?? * It would be better to associate a color with an instance using a * vector than the vector itself, for which color is something artificial. */ static int iplot(struct plot *pl, int id) { int len = pl->pl_scale->v_length; if (ft_grdb) { fprintf(cp_err, "Entering iplot, len = %d\n", len); } /* Do simple check for exit first */ if (len < IPOINTMIN) { /* Nothing yet */ return 0; } struct dvec *v, *xs = pl->pl_scale; double *lims, dy; double start, stop, step; 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]; int n_vec_plot = 0; /* Exit if nothing is being plotted */ for (v = pl->pl_dvecs; v; v = v->v_next) { if (v->v_flags & VF_PLOT) { ++n_vec_plot; } } if (n_vec_plot == 0) { return 0; } if (len == IPOINTMIN || !id) { /* Do initialization */ 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) && ((int) 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, n_vec_plot, 0.0, 0.0, GRID_LIN, PLOT_LIN, xs->v_name, yl, xs->v_type, yt, plot_cur->pl_typename, commandline, 0); 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); } tmp_ns50wwy/src/frontend/plotting/plotcurv.h0000644000175000017500000000021614163340332021445 0ustar carstencarsten/************* * Header file for plotcurv.c * 1999 E. Rouat ************/ #ifndef ngspice_PLOTCURV_H #define ngspice_PLOTCURV_H #endif tmp_ns50wwy/src/frontend/plotting/gnuplot.c0000644000175000017500000005670614163340332021271 0ustar carstencarsten/********** * 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 #include #define GP_MAXVECTORS 64 static void quote_gnuplot_string(FILE *stream, char *s) { fputc('"', stream); for (; *s; s++) /* NOTE: The FALLTHROUGH comment is used to suppress a GCC warning * when flag -Wimplicit-fallthrough is present */ switch (*s) { case '\n': fputs("\\n", stream); break; case '"': case '\\': fputc('\\', stream); /* FALLTHROUGH */ default: fputc(*s, stream); } fputc('"', stream); } static double **dmatrix(int nrow, int ncol) { double **d; int i; if (nrow < 2 && ncol < 2) { /* Who could want a 1x1 matrix? */ return NULL; } d = TMALLOC(double *, nrow); for (i = 0; i < nrow; i++) { d[i] = TMALLOC(double, ncol); } return d; } static void dmatrix_free(double **d, int nrow, int ncol) { int i; (void) ncol; if (d && nrow > 1) { for (i = 0; i < nrow; i++) { tfree(d[i]); } tfree(d); } } static bool has_contour_data(struct dvec *vecs) { struct plot *curpl = NULL; struct dvec *v = NULL, *xvec = NULL, *yvec = NULL; int xdim, ydim, i, npoints; bool len_mismatch = FALSE, wrong_type = FALSE; if (!vecs) { return FALSE; } curpl = vecs->v_plot; if (!curpl) { return FALSE; } xdim = curpl->pl_xdim2d; ydim = curpl->pl_ydim2d; if (xdim < 2 || ydim < 2) { return FALSE; } for (v = vecs, i = 0; v; v = v->v_link2) { i++; } if (i > 1) { printf("Specify only one expr for an xycontour plot:"); for (v = vecs; v; v = v->v_link2) { printf(" '%s'", v->v_name); } printf("\n"); return FALSE; } else if (i < 1) { return FALSE; } if (!(vecs->v_flags & VF_REAL)) { wrong_type = TRUE; } npoints = xdim * ydim; if (vecs->v_length != npoints) { len_mismatch = TRUE; } #ifdef VERBOSE_GNUPLOT printf("curpl vecs:"); for (v = curpl->pl_dvecs; v; v = v->v_next) { printf(" '%s'", v->v_name); } printf("\n"); printf("vecs: "); for (v = vecs; v; v = v->v_next) { printf(" '%s'", v->v_name); } printf("\n"); #endif for (v = vecs; v; v = v->v_next) { /* Find the x and y vectors from the last part of the list. Passing by the the plotarg expr parsing elements at the front. */ if (!(v->v_flags & VF_REAL)) { /* Only real types allowed */ wrong_type = TRUE; } if (v->v_length != npoints) { /* Assume length 1 is a constant number */ if (v->v_length != 1) { len_mismatch = TRUE; } } if (eq(v->v_name, "y")) { yvec = v; continue; } if (eq(v->v_name, "x")) { xvec = v; } } if (len_mismatch) { printf("Vector lengths mismatch, ignoring xycontour\n"); } if (wrong_type) { printf("Non-real expr or constant, ignoring xycontour\n"); } if (!xvec || !yvec || len_mismatch || wrong_type) { return FALSE; } return TRUE; } /* Precondition: has_contour_data was called and returned TRUE */ static int write_contour_data(FILE *filed, struct dvec *vecs) { struct plot *curpl = NULL; struct dvec *v = NULL, *xvec = NULL, *yvec = NULL; int xdim, ydim, i, j, npoints, idx; double *ycol; double **zmat; if (!filed || !vecs) { return 1; } curpl = vecs->v_plot; if (!curpl) { return 1; } xdim = curpl->pl_xdim2d; ydim = curpl->pl_ydim2d; if (xdim < 2 || ydim < 2) { return 1; } npoints = xdim * ydim; for (v = vecs; v; v = v->v_next) { /* Use the x and y vectors from the last part of the list. */ if (eq(v->v_name, "y")) { yvec = v; continue; } if (eq(v->v_name, "x")) { xvec = v; } } if (!xvec || !yvec) { return 1; } /* First output row has the x vector values */ fprintf(filed, "%d", xdim); for (i = 0, j = 0; i < xdim; j += ydim) { if (j >= xvec->v_length) { return 1; } fprintf(filed, " %e", 1.0e6 * xvec->v_realdata[j]); i++; } fprintf(filed, "\n"); ycol = TMALLOC(double, ydim); for (i = 0; i < ydim; i++) { ycol[i] = 1.0e6 * yvec->v_realdata[i]; } zmat = dmatrix(ydim, xdim); idx = 0; for (i = 0; i < xdim; i++) { for (j = 0; j < ydim; j++) { zmat[j][i] = vecs->v_realdata[idx]; idx++; } } if (idx != npoints) { tfree(ycol); dmatrix_free(zmat, ydim, xdim); return 1; } /* Subsequent output rows have a y vector value and the z matrix values corresponding to that y vector. There is a z matrix value for each x vector column. */ for (i = 0; i < ydim; i++) { fprintf(filed, "%e", ycol[i]); for (j = 0; j < xdim; j++) { fprintf(filed, " %e", zmat[i][j]); } fprintf(filed, "\n"); } tfree(ycol); dmatrix_free(zmat, ydim, xdim); return 0; } void ft_gnuplot(double *xlims, double *ylims, double xdel, double ydel, const char *filename, const char *title, const char *xlabel, const char *ylabel, GRIDTYPE gridtype, PLOTTYPE plottype, struct dvec *vecs, bool xycontour) { FILE *file, *file_data; struct dvec *v, *scale = NULL; double xval, yval, prev_xval, extrange; int i, dir, numVecs, linewidth, gridlinewidth, err, terminal_type; bool xlog, ylog, nogrid, markers, nolegend, contours = FALSE; char buf[BSIZE_SP], pointstyle[BSIZE_SP], *text, plotstyle[BSIZE_SP], terminal[BSIZE_SP]; char filename_data[128]; char filename_plt[128]; char *vtypename = NULL; #ifdef SHARED_MODULE char* llocale = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC, "C"); #endif 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; } if (xycontour) { contours = has_contour_data(vecs); } 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; } else if (cieq(terminal,"png/quit")) { terminal_type = 3; } else if (cieq(terminal, "eps")) { terminal_type = 4; } else if (cieq(terminal, "eps/quit")) { terminal_type = 5; } else if (cieq(terminal, "xterm")) { terminal_type = 6; } } /* get linewidth for plotting the graph from .spiceinit */ if (!cp_getvar("xbrushwidth", CP_NUM, &linewidth, 0)) linewidth = 1; if (linewidth < 1) linewidth = 1; /* get linewidth for grid from .spiceinit */ if (!cp_getvar("xgridwidth", CP_NUM, &gridlinewidth, 0)) gridlinewidth = 1; if (gridlinewidth < 1) gridlinewidth = 1; if (!cp_getvar("pointstyle", CP_STRING, pointstyle, sizeof(pointstyle))) { markers = FALSE; } else { if (cieq(pointstyle,"markers")) markers = TRUE; else markers = FALSE; } if (!cp_getvar("nolegend", CP_BOOL, NULL, 0)) { nolegend = FALSE; } else { nolegend = TRUE; } /* 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) && !defined(__CYGWIN__) fprintf(file, "set terminal X11 noenhanced\n"); #elif defined(__CYGWIN__) #ifndef EXT_ASC fprintf(file, "set encoding utf8\n"); #endif #else #ifndef EXT_ASC fprintf(file, "set encoding utf8\n"); #endif fprintf(file, "set termoption noenhanced\n"); #endif if (contours) { fprintf(file, "set view map\n"); fprintf(file, "set contour\n"); fprintf(file, "unset surface\n"); fprintf(file, "set cntrparam levels 20\n"); fprintf(file, "set xlabel 'X microns'\n"); fprintf(file, "set ylabel 'Y microns'\n"); fprintf(file, "set key outside right\n"); fprintf(file, "set title '%s - %s", vecs->v_plot->pl_title, vecs->v_name); vtypename = ft_typabbrev(vecs->v_type); if (vtypename) { fprintf(file, " %s'\n", vtypename); } else { fprintf(file, "'\n"); } } else { 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 (gridlinewidth > 1) fprintf(file, "set grid lw %d \n" , gridlinewidth); 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); } if (xdel > 0.) fprintf(file, "set xtics %e\n", xdel); else fprintf(file, "#set xtics 1\n"); fprintf(file, "#set x2tics 1\n"); if (ydel > 0.) fprintf(file, "set ytics %e\n", ydel); else fprintf(file, "#set ytics 1\n"); fprintf(file, "#set y2tics 1\n"); if (gridlinewidth > 1) fprintf(file, "set border lw %d\n", gridlinewidth); if(nolegend) fprintf(file, "set key off\n"); 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; } if (contours) { if ((terminal_type != 3) && (terminal_type != 5)) { fprintf(file, "splot '%s' nonuniform matrix using 1:2:3 with lines lw 2 " "title ' '\n", filename_data); } } else { 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 (contours) { if ((terminal_type == 3) || (terminal_type == 5)) { fprintf(file, "splot '%s' nonuniform matrix using 1:2:3 with lines lw 2 " "title ' '\n", filename_data); fprintf(file, "exit\n"); } } else { 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); if (contours) { if (write_contour_data(file_data, vecs) != 0) { fprintf(stderr, "Error when writing contour data file\n"); (void) fclose(file_data); return; } } else { /* Write out the data and setup arrays */ bool mono = (plottype != PLOT_RETLIN); 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 if (terminal_type == 6) { (void) sprintf(buf, "xterm -e gnuplot %s - &", filename_plt); } else { (void) sprintf(buf, "gnuplot -persist %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); } } #ifdef SHARED_MODULE /* go back to what it was before */ setlocale(LC_NUMERIC, llocale); #endif } /* 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, const char *filename, const char *title, const char *xlabel, const 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); } tmp_ns50wwy/src/frontend/plotting/grid.c0000644000175000017500000016272114163340332020521 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 #if defined(_MSC_VER) || defined(__MINGW32__) #undef BOOLEAN #include #endif #ifdef HAS_WINGUI 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 */ #endif #ifndef X_DISPLAY_MISSING extern int X11_GetLenStr(GRAPH *gr, char* instring); #endif #define RAD_TO_DEG (180.0 / M_PI) #define RELPOSXUNIT 0.6 /* old position of the UNIT label */ typedef enum { x_axis, y_axis } Axis; static int unitshift; /* shift of unit label if x label is too large */ 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]; } void gr_redrawgrid(GRAPH *graph) { SetColor(1); SetLinestyle(1); /* draw labels */ if (graph->grid.xlabel) { #if defined(EXT_ASC) || (!defined HAS_WINGUI && defined X_DISPLAY_MISSING) DevDrawText(graph->grid.xlabel, (int)(graph->absolute.width * 0.35), graph->fontheight, 0); #else if (eq(dispdev->name, "postscript")) { DevDrawText(graph->grid.xlabel, (int)(graph->absolute.width * 0.35), graph->fontheight, 0); } else if (eq(dispdev->name, "svg")) { DevDrawText(graph->grid.xlabel, (int)(graph->absolute.width * 0.35), graph->fontheight, 0); } else { #ifndef X_DISPLAY_MISSING /* x axis centered to graphics on X11 */ /* utf-8: figure out the real length of the x label */ int wlen = 0, i = 0; while (graph->grid.xlabel[i]) { if ((graph->grid.xlabel[i] & 0xc0) != 0x80) wlen++; i++; } #ifdef HAVE_LIBXFT /* string lenth in pixels */ int strsize = X11_GetLenStr(graph, graph->grid.xlabel); DevDrawText(graph->grid.xlabel, (int)((graph->absolute.width - strsize) / 2), graph->fontheight, 0); /* fix the position of the UNIT label */ if (RELPOSXUNIT * graph->absolute.width < ((graph->absolute.width + strsize) / 2 + graph->fontwidth)) unitshift = (int)((graph->absolute.width + strsize) / 2 - RELPOSXUNIT * graph->absolute.width) + graph->fontwidth; else unitshift = 0; /* reset for next plot window */ #else DevDrawText(graph->grid.xlabel, (int) (graph->absolute.width * 0.35), graph->fontheight, 0); unitshift = 0; #endif } #endif #ifdef HAS_WINGUI /* x axis centered to graphics on Windows */ /* utf-8: figure out the real length of the x label */ const int n_byte_wide = 2 * (int) strlen(graph->grid.xlabel) + 1; wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); int wlen = MultiByteToWideChar(CP_UTF8, 0, graph->grid.xlabel, -1, wtext, n_byte_wide); if (wlen == 0) { fprintf(stderr, "UTF-8 to wide char conversion failed with 0x%x\n", GetLastError()); fprintf(stderr, "%s could not be converted\n", graph->grid.xlabel); } else { SIZE sz; TEXTMETRICW tmw; tpWindowData wd = graph->devdep; GetTextMetricsW(wd->hDC, &tmw); GetTextExtentPoint32W(wd->hDC, wtext, wlen, &sz); DevDrawText(graph->grid.xlabel, (int)((graph->absolute.width - sz.cx + tmw.tmOverhang) / 2), graph->fontheight, 0); /* fix the position of the UNIT label */ if (RELPOSXUNIT * graph->absolute.width < (graph->absolute.width + sz.cx + tmw.tmOverhang) / 2 + graph->fontwidth) unitshift = (int)((graph->absolute.width + sz.cx + tmw.tmOverhang) / 2 - RELPOSXUNIT * graph->absolute.width) + graph->fontwidth; else unitshift = 0; /* reset for next plot window */ } txfree(wtext); } #endif #endif // EXT_ASC } /* y axis: vertical text, centered to graph */ 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")) { 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); } #if !defined(_MSC_VER ) && !defined(__MINGW32__) /* svg for non-Windows */ else if (eq(dispdev->name, "svg")) { DevDrawText(graph->grid.ylabel, 2 * 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 /* Windows and UTF-8: check for string length (in pixels), place vertical text centered in y with respect to grid */ else if (eq(dispdev->name, "svg")) { /* utf-8: figure out the real length of the y label */ const int n_byte_wide = 2 * (int)strlen(graph->grid.ylabel) + 1; wchar_t* const wtext = TMALLOC(wchar_t, n_byte_wide); int wlen = MultiByteToWideChar(CP_UTF8, 0, graph->grid.ylabel, -1, wtext, n_byte_wide); if (wlen == 0) { fprintf(stderr, "UTF-8 to wide char conversion failed with 0x%x\n", GetLastError()); fprintf(stderr, "%s could not be converted\n", graph->grid.ylabel); } else { int textlen = graph->fontwidth * wlen; DevDrawText(graph->grid.ylabel, (int)(2 * graph->fontwidth), //vertical text, midpoint in y is aligned midpoint of text string (graph->absolute.height - (int)(1.2 * textlen)) / 2, 90); } txfree(wtext); } #endif #ifdef EXT_ASC else if (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 #ifdef HAS_WINGUI /* Windows and UTF-8: check for string length (in pixels), place vertical text centered in y with respect to grid */ else if (eq(dispdev->name, "Windows")) { /* utf-8: figure out the real length of the y label */ const int n_byte_wide = 2 * (int) strlen(graph->grid.ylabel) + 1; wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); int wlen = MultiByteToWideChar(CP_UTF8, 0, graph->grid.ylabel, -1, wtext, n_byte_wide); if (wlen == 0) { fprintf(stderr, "UTF-8 to wide char conversion failed with 0x%x\n", GetLastError()); fprintf(stderr, "%s could not be converted\n", graph->grid.ylabel); } else { SIZE sz; TEXTMETRICW tmw; tpWindowData wd = graph->devdep; GetTextMetricsW(wd->hDC, &tmw); GetTextExtentPoint32W(wd->hDC, wtext, wlen, &sz); // printf("length: %d, deviation: %d\n", sz.cx, sz.cx - graph->fontwidth*wlen); DevDrawText(graph->grid.ylabel, graph->fontwidth, /*vertical text, midpoint in y is aligned midpoint of text string */ (graph->absolute.height - (int)(1.2*sz.cx + tmw.tmOverhang)) / 2, 90); } txfree(wtext); } #endif #endif else /* others */ DevDrawText(graph->grid.ylabel, #if !defined(X_DISPLAY_MISSING) && defined(HAVE_LIBXFT) /* new x11 with xft and utf-8 * calculate and add offsets in fcn X11_Text in X11.c */ 0, #else graph->fontwidth, #endif /*vertical text, y is midpoint of graph height */ graph->absolute.height / 2, 90); } } /* draw postscript title */ if (graph->plotname && (eq(dispdev->name, "postscript") || eq(dispdev->name, "svg"))) 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 += (int)(1.6 * 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 += (int)(1.6 * 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'; } if ((s = ft_typabbrev(type)) != NULL) (void) strncat(buf, s, sizeof(buf) - strlen(buf) - 1); else (void) strncat(buf, " ", 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, TRUE); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + i, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + i, TRUE); } 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 - 2 - 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 (!graph->nounits) { if (axis == x_axis) DevDrawText(units, (int)(graph->absolute.width * RELPOSXUNIT + unitshift), 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; /* don't subtract font height from right border of grid */ if (graph->grid.ylabel) max += (int)(1.6 * graph->fontheight); } else { /* add height of the vertical text to offset*/ if (graph->grid.ylabel) graph->viewportxoff += (int)(1.6 * graph->fontheight); 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 = " "; 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, TRUE); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + i, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + i, TRUE); } 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, TRUE); else DevDrawLine(graph->viewportxoff, graph->viewportyoff + m, graph->viewport.width + graph->viewportxoff, graph->viewportyoff + m, TRUE); } } SetLinestyle(0); } } if (!graph->nounits) { if (axis == x_axis) DevDrawText(units, (int)(graph->absolute.width * RELPOSXUNIT + unitshift), +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, TRUE); /* 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, TRUE); /* 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, TRUE); 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); } tmp_ns50wwy/src/frontend/plotting/plotit.h0000644000175000017500000000022314163340332021100 0ustar carstencarsten#ifndef ngspice_PLOTIT_H #define ngspice_PLOTIT_H bool plotit(wordlist *wl, const char *hcopy, const char *devname); void pl_rempar(void); #endif tmp_ns50wwy/src/frontend/plotting/graf.h0000644000175000017500000000216514163340332020513 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, const char *xname, const char *plotname, const char *hcopy, int nplots, double xdelta, double ydelta, GRIDTYPE gridtype, PLOTTYPE plottype, const char *xlabel, const char *ylabel, /* Labels for axes. */ int xtype, int ytype, const char *pname, const char *commandline, int prevgraph); 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 tmp_ns50wwy/src/frontend/com_unset.c0000644000175000017500000000145014163340332017717 0ustar carstencarsten/************* * com_unset.c ************/ #include "ngspice/ngspice.h" #include "ngspice/macros.h" #include "ngspice/bool.h" #include "com_unset.h" #include "variable.h" /* clear variables (by name or all) */ 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; } } /* clear all variables (called from com_quit) */ void unset_all(void){ struct variable *var, *nv; for (var = variables; var; var = nv) { nv = var->va_next; cp_remvar(var->va_name); } } tmp_ns50wwy/src/frontend/newcoms.h0000644000175000017500000000025314163340332017403 0ustar carstencarsten/************* * Header file for newcoms.c * 1999 E. Rouat ************/ #ifndef ngspice_NEWCOMS_H #define ngspice_NEWCOMS_H void com_reshape(wordlist *wl); #endif tmp_ns50wwy/src/frontend/inp.c0000644000175000017500000026046714163340332016530 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" #include "ngspice/compatmode.h" #define line_free(line, flag) \ do { \ line_free_x(line, flag); \ line = NULL; \ } while(0) 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); void create_circbyline(char *line, bool reset, bool lastline); static bool doedit(char *filename); static void dotifeval(struct card *deck); static void eval_agauss(struct card *deck, char *fcn); static wordlist *inp_savecurrents(struct card *deck, struct card *options, wordlist *wl, wordlist *controls); void line_free_x(struct card *deck, bool recurse); static void recifeval(struct card *pdeck); static char *upper(register char *string); static void rem_unused_mos_models(struct card* deck); extern void com_optran(wordlist * wl); //void inp_source_recent(void); //void inp_mc_free(void); //void inp_remove_recent(void); static bool mc_reload = FALSE; void eval_opt(struct card *deck); extern bool ft_batchmode; /* from inpcom.c */ extern struct nscope* inp_add_levels(struct card *deck); extern void inp_rem_levels(struct nscope* root); extern void comment_out_unused_subckt_models(struct card *deck); extern void inp_rem_unused_models(struct nscope *root, struct card *deck); extern void modprobenames(INPtables * tab); #ifdef SHARED_MODULE extern void exec_controls(wordlist *controls); #endif /* display the source file name in the source window */ #ifdef HAS_WINGUI extern void SetSource(char *Name); #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] [runable] */ 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; case 'r': case 'R': expand = TRUE; type = LS_RUNABLE; 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 && type != LS_RUNABLE) 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[LBSIZE_SP]; if (string) { if (strlen(string) > LBSIZE_SP - 1) fprintf(stderr, "Warning: output of command 'listing' will be truncated\n"); strncpy(buf, string, LBSIZE_SP - 1); buf[LBSIZE_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 || type == LS_RUNABLE) { 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 != '*') && (type == LS_LOGICAL)) { Xprintf(file, "%6d : %s\n", here->linenum, upper(here->line)); if (here->error) Xprintf(file, "%s\n", here->error); } else if ((*here->line != '*') && (type == LS_RUNABLE)) { Xprintf(file, "%s\n", upper(here->line)); if (here->error) Xprintf(file, "%s\n", here->error); } i++; } if (extras) { deck = extras; extras = NULL; goto top1; } if (type == LS_LOGICAL) Xprintf(file, "%6d : .end\n", i); else if (type == LS_RUNABLE) Xprintf(file, ".end\n"); } 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. Check for .option cshunt=val and set a global variable Input is the option deck (already sorted for .option) */ void eval_opt(struct card* deck) { struct card* card; bool has_seed = FALSE; bool has_cshunt = FALSE; for (card = deck; card; card = card->nextcard) { char* line = card->line; 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 - 1600000000); 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); } begtok = strstr(line, "cshunt="); if (begtok) begtok = &begtok[7]; /*skip cshunt=*/ if (begtok) { int err = 0; if (has_cshunt) fprintf(cp_err, "Warning: Multiple '.option cshunt=val' found!\n"); /* option cshunt=val*/ double sr = INPevaluate(&begtok, &err, 0); if (sr <= 0 || err) fprintf(cp_err, "Warning: Cannot convert 'option cshunt=%s' to capacitor value, skipped!\n", begtok); else { cp_vset("cshunt_value", CP_REAL, &sr); has_cshunt = TRUE; } } } } /* 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. */ int 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 + 1], *s, *t, *temperature = NULL; 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, loadTime = 0., 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); /* 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, e.g. after calling ngspice without parameters, just close fp and return to caller */ if (!deck) { if (!intfile && fp) fclose(fp); return 0; } /* 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. Exceptions are .option with params. */ options = inp_getopts(deck); /* Check for .option seed=[val|random] and set the random number generator. Check for .option cshunt=val and set a global variable cshunt_value */ eval_opt(options); /* 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) { /* 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") || add .save only after subcircuit expansion */ 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); } /* 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 endTime = seconds(); loadTime = endTime - startTime; startTime = endTime; /*This is for the globel param setting only */ /* replace agauss(x,y,z) in each b-line by suitable value, one for all */ bool statlocal = cp_getvar("statlocal", CP_BOOL, NULL, 0); if (!statlocal) { static char *statfcn[] = {"agauss", "gauss", "aunif", "unif", "limit"}; int ii; for (ii = 0; ii < 5; ii++) eval_agauss(deck, statfcn[ii]); } /* If we have large PDK deck, search for scale option and set the variable 'scale'*/ if (newcompat.hs || newcompat.spe) { struct card* scan; double dscale = 1; /* from options in a script */ for (scan = com_options; scan; scan = scan->nextcard) { char* tmpscale = strstr(scan->line, "scale="); if (tmpscale) { int err; tmpscale = tmpscale + 6; dscale = INPevaluate(&tmpscale, &err, 1); if (err == 0) { cp_vset("scale", CP_REAL, &dscale); printf("option SCALE: Scale is set to %g for instance and model parameters\n", dscale); } else fprintf(stderr, "\nError: Could not set 'scale' variable\n"); } tmpscale = strstr(scan->line, "scalm="); if (tmpscale) { int err; tmpscale = tmpscale + 6; dscale = INPevaluate(&tmpscale, &err, 1); if (err == 0) { cp_vset("scalm", CP_REAL, &dscale); fprintf(stderr, "Warning: option SCALM is not supported.\n"); } else fprintf(stderr, "\nError: Could not set 'scalm' variable\n"); } } /* from .options (will override the previous settings) */ for (scan = options; scan; scan = scan->nextcard) { char* tmpscale = strstr(scan->line, "scale="); if (tmpscale) { int err; tmpscale = tmpscale + 6; dscale = INPevaluate(&tmpscale, &err, 1); if (err == 0) { cp_vset("scale", CP_REAL, &dscale); printf("option SCALE: Scale is set to %g for instance and model parameters\n", dscale); } else fprintf(stderr, "\nError: Could not set 'scale' variable\n"); } tmpscale = strstr(scan->line, "scalm="); if (tmpscale) { int err; tmpscale = tmpscale + 6; dscale = INPevaluate(&tmpscale, &err, 1); if (err == 0) { cp_vset("scalm", CP_REAL, &dscale); fprintf(stderr, "Warning: option SCALM is not supported\n"); } else fprintf(stderr, "\nError: Could not set 'scalm' variable\n"); } } } /* 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 1; } /* Scan the deck again, now also adding .save commands to wl_first */ for (dd = deck->nextcard; dd; dd = dd->nextcard) { char* curr_line = dd->line; if (ciprefix(".save", curr_line)) { wl_append_word(&wl_first, &end, copy(dd->line)); *curr_line = '*'; } } /* 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)*/ if (statlocal) { 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); /* Circuit is flat, all numbers expanded. So again try to remove unused MOS models. All binning models are still here when w or l have been determined by an expression. */ if (newcompat.hs || newcompat.spe) rem_unused_mos_models(deck->nextcard); /* now load deck into ft_curckt -- the current circuit. */ if(inp_dodeck(deck, tt, wl_first, FALSE, options, filename) != 0) return 1; 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; } 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; } /* get temp from deck */ if (ciprefix(".temp", dd->line)) { s = skip_ws(dd->line + 5); if (temperature) { txfree(temperature); } temperature = copy(s); *(dd->line) = '*'; } 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"); } /* Remove comment lines if (newcompat.hs || newcompat.spe) { struct card *prev, *fcard, *tmpdeck; prev = deck; tmpdeck = deck->nextcard; for (fcard = tmpdeck; fcard; fcard = fcard->nextcard) { if (*(prev->nextcard->line) == '*') { struct card* tmpcard = fcard->nextcard; line_free_x(prev->nextcard, FALSE); fcard = prev->nextcard = tmpcard; } prev = fcard; } }*/ /* 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); /* statistics for preparing the deck */ endTime = seconds(); if (ft_curckt) { ft_curckt->FTEstats->FTESTATnetLoadTime = loadTime; ft_curckt->FTEstats->FTESTATnetPrepTime = seconds() - startTime; } /* 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); return 0; } /* 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). *-----------------------------------------------------------------*/ int 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; INPtables *tab = NULL; struct variable *eev = NULL; bool noparse; 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); /* Read the options, create variables and store them in ftcurckt->ci_vars */ if (!noparse) { char* s; bool ii; wordlist* wl; 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: break; case CP_STRING: break; default: { fprintf(stderr, "ERROR: wrong format in option %s!\n", eev->va_name); fprintf(stderr, " Aborting...\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; /* if .probe, rename the current measurement node vcurr_ */ if (cp_getvar("probe_is_given", CP_BOOL, NULL, 0)) { modprobenames(tab); } } 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; return 1; } 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 && 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); /* load the optran data, if provided by .spiceinit or spinit. Return immediately, if optran is not selected.*/ com_optran(NULL); 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 return 0; } 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); if (fgets(buf, BSIZE_SP, stdin) == (char *) NULL || 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"; } } int len = snprintf(buf, BSIZE_SP - 1, "%s %s", editor, filename); if (len > BSIZE_SP - 1) fprintf(stderr, "Error: the filename is probably tuncated\n"); 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; if (wl == NULL) return; 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); fprintf(cp_err, " Simulation interrupted due to error!\n\n"); cp_interactive = TRUE; /* If we cannot open the temporary file, stop all further command execution */ #ifdef SHARED_MODULE controlled_exit(1); #else cp_evloop(NULL); #endif } while (wl) { if ((tp = inp_pathopen(wl->wl_word, "r")) == NULL) { fprintf(cp_err, "Command 'source' failed:\n"); perror(wl->wl_word); fprintf(cp_err, " Simulation interrupted due to error!\n\n"); fclose(fp); cp_interactive = TRUE; unlink(tempfile); /* If we cannot source the file, stop all further command execution */ #ifdef SHARED_MODULE controlled_exit(1); #else cp_evloop(NULL); #endif } 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) { fprintf(cp_err, "Command 'source' failed:\n"); perror(wl->wl_word); fprintf(cp_err, " Simulation interrupted due to error!\n\n"); cp_interactive = TRUE; /* If we cannot source the file, stop all further command execution */ #ifdef SHARED_MODULE controlled_exit(1); #else cp_evloop(NULL); #endif 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 { #ifdef HAS_WINGUI /* set the source window */ SetSource(wl->wl_word); #endif /* Save path name for use in XSPICE fopen_with_path() */ if (Infile_Path) tfree(Infile_Path); Infile_Path = ngdirname(firstfile); if (inp_spsource(fp, FALSE, tempfile ? NULL : wl->wl_word, FALSE) != 0) { fprintf(stderr, " Simulation interrupted due to error!\n\n"); } } cp_interactive = inter; if (tempfile) unlink(tempfile); } void inp_source(const char *file) { /* This wordlist is special in that nothing in it should be freed -- * the file name word is "borrowed" from the argument to file and * the wordlist is allocated on the stack. */ static struct wordlist wl = { NULL, NULL, NULL }; wl.wl_word = (char *) 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': case 'k': 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 whenever * a new deck is started. Last line of the array has to get the string ".end" */ char **circarray; void create_circbyline(char *line, bool reset, bool lastline) { static unsigned int linec = 0; static unsigned int n_elem_alloc = 0; if (reset) { linec = 0; n_elem_alloc = 0; tfree(circarray); } /* Ensure up to 2 cards can be added */ if (n_elem_alloc < linec + 2) { n_elem_alloc = n_elem_alloc == 0 ? 256 : 2 * n_elem_alloc; circarray = TREALLOC(char *, circarray, n_elem_alloc); } /* Remove any leading whitespace by shifting */ char *p_src = skip_ws(line); if (p_src != line) { char *p_dst = line; char ch_cur; do { ch_cur = *p_dst++ = *p_src++; } while (ch_cur != '\0'); } if (ft_ngdebug) { if (linec == 0) fprintf(stdout, "**** circbyline: circuit netlist sent to shared ngspice ****\n"); fprintf(stdout, "%d %s\n", linec, line); } circarray[linec++] = line; /* add card to deck */ /* If the card added ended the deck, send it for processing and * free the deck. The card allocations themselves will be freed * elsewhere */ if (ciprefix(".end", line) && (line[4] == '\0' || isspace_c(line[4]))) { circarray[linec] = NULL; /* termiante the deck */ inp_spsource((FILE *) NULL, FALSE, NULL, TRUE); /* process */ tfree(circarray); /* set to empty */ linec = 0; n_elem_alloc = 0; } /* If the .end statement is missing */ else if (lastline) { fprintf(stderr, "Error: .end statement is missing in netlist!\n"); } } /* end of function create_circbyline */ /* 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, FALSE, FALSE); } /* 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); } /* Step through the nodes of the linked list at circ->modtlist */ 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); } } /* end of funtion inp_evaluate_temper */ /* * 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); } } } struct mlist { struct card* mod; struct card* prevmod; struct card* prevcard; char* mname; float wmin; float wmax; float lmin; float lmax; struct mlist* nextm; bool used; bool checked; }; /* Finally get rid of unused MOS models */ static void rem_unused_mos_models(struct card* deck) { struct card *tmpc, *tmppc = NULL; struct mlist* modellist = NULL, *tmplist; double scale; if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; /* the old way to remove unused models */ struct nscope* root = inp_add_levels(deck); comment_out_unused_subckt_models(deck); inp_rem_unused_models(root, deck); inp_rem_levels(root); /* remove unused binning models */ for (tmpc = deck; tmpc; tmppc = tmpc, tmpc = tmpc->nextcard) { char* curr_line; char* nline = curr_line = tmpc->line; if (ciprefix(".model", nline)) { float fwmin, fwmax, flmin, flmax; char* wmin = strstr(curr_line, " wmin="); if (wmin) { int err; wmin = wmin + 6; wmin = skip_ws(wmin); fwmin = (float)INPevaluate(&wmin, &err, 0); if (err) { continue; } } else { continue; } char* wmax = strstr(curr_line, " wmax="); if (wmax) { int err; wmax = wmax + 6; wmax = skip_ws(wmax); fwmax = (float)INPevaluate(&wmax, &err, 0); if (err) { continue; } } else { continue; } char* lmin = strstr(curr_line, " lmin="); if (lmin) { int err; lmin = lmin + 6; lmin = skip_ws(lmin); flmin = (float)INPevaluate(&lmin, &err, 0); if (err) { continue; } } else { continue; } char* lmax = strstr(curr_line, " lmax="); if (lmax) { int err; lmax = lmax + 6; lmax = skip_ws(lmax); flmax = (float)INPevaluate(&lmax, &err, 0); if (err) { continue; } } else { continue; } nline = nexttok(nline); char* modname = gettok(&nline); struct mlist* newm = TMALLOC(struct mlist, 1); newm->mname = modname; newm->mod = tmpc; newm->prevmod = tmppc; newm->wmin = newm->wmax = newm->lmin = newm->lmax = 0.; newm->nextm = NULL; newm->used = FALSE; newm->checked = FALSE; newm->lmax = flmax; newm->lmin = flmin; newm->wmax = fwmax; newm->wmin = fwmin; if (!modellist) { modellist = newm; } else { struct mlist* tmpl = modellist; modellist = newm; modellist->nextm = tmpl; } modellist->prevcard = tmppc; } } for (tmpc = deck; tmpc; tmpc = tmpc->nextcard) { char* curr_line = tmpc->line; /* We only look for MOS devices and extract W, L, nf, and wnflag */ if (*curr_line == 'm') { float w = 0., l = 0., nf = 1., wnf = 1.; int wnflag = 0; char* wstr = strstr(curr_line, " w="); if (wstr) { int err; wstr = wstr + 3; wstr = skip_ws(wstr); w = (float)INPevaluate(&wstr, &err, 0); if (err) { continue; } } char* lstr = strstr(curr_line, " l="); if (lstr) { int err; lstr = lstr + 3; lstr = skip_ws(lstr); l = (float)INPevaluate(&lstr, &err, 0); if (err) { continue; } } char* nfstr = strstr(curr_line, " nf="); if (nfstr) { int err; nfstr = nfstr + 4; nfstr = skip_ws(nfstr); nf = (float)INPevaluate(&nfstr, &err, 0); if (err) { continue; } } char* wnstr = strstr(curr_line, " wnflag="); if (wnstr) { int err; wnstr = wnstr + 8; wnstr = skip_ws(wnstr); wnf = (float)INPevaluate(&wnstr, &err, 0); if (err) { continue; } } if (!cp_getvar("wnflag", CP_NUM, &wnflag, 0)) { if (newcompat.spe || newcompat.hs) wnflag = 1; else wnflag = 0; } nf = (float)wnflag * wnf > 0.5f ? nf : 1.f; w = w / nf; /* what is the device's model name? */ char* mname = nexttok(curr_line); int nonodes = 4; /* FIXME: this is a hack! How to really detect the number of nodes? */ int jj; for (jj = 0; jj < nonodes; jj++) { mname = nexttok(mname); } mname = gettok(&mname); /* We now check all models */ for (tmplist = modellist; tmplist; tmplist = tmplist->nextm) { if (strstr(tmplist->mname, mname)) { float ls = l * (float)scale; float ws = w * (float)scale; if (tmplist->lmin <= ls && tmplist->lmax >= ls && tmplist->wmin <= ws && tmplist->wmax >= ws) tmplist->used = TRUE; else tmplist->checked = TRUE; } else { tmplist->checked = TRUE; } } tfree(mname); } } /* Delete the models that have been checked, but are unused */ for (tmplist = modellist; tmplist; tmplist = tmplist->nextm) { if (tmplist->checked && !tmplist->used) { if (tmplist->prevcard == NULL) { struct card* tmpcard = tmplist->mod; tmplist->mod = tmplist->mod->nextcard; line_free_x(tmpcard, FALSE); } else { struct card* tmpcard = tmplist->prevcard; tmpcard->nextcard = tmplist->mod->nextcard; line_free_x(tmplist->mod, FALSE); } } } /* Remove modellist */ while (modellist) { struct mlist* tlist = modellist->nextm; tfree(modellist->mname); tfree(modellist); modellist = tlist; } } tmp_ns50wwy/src/frontend/com_shift.c0000644000175000017500000000202514163340332017675 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; } tmp_ns50wwy/src/frontend/ChangeLog0000644000175000017500000003357114163340332017342 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 tmp_ns50wwy/src/frontend/spec.c0000644000175000017500000002071414163340332016661 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 (ft_numparse(&s, FALSE, &startf) < 0 || startf < 0.0) { fprintf(cp_err, "Error: bad start freq %s\n", wl->wl_word); goto done; } wl = wl->wl_next; s = wl->wl_word; if (ft_numparse(&s, FALSE, &stopf) < 0 || stopf <= startf) { fprintf(cp_err, "Error: bad stop freq %s\n", wl->wl_word); goto done; } wl = wl->wl_next; s = wl->wl_word; if (ft_numparse(&s, FALSE, &stepf) < 0 || stepf > stopf - startf) { fprintf(cp_err, "Error: bad step freq %s\n", wl->wl_word); goto done; } 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_quotes(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); } tmp_ns50wwy/src/frontend/com_compose.h0000644000175000017500000000020614163340332020231 0ustar carstencarsten #ifndef ngspice_COM_COMPOSE_H #define ngspice_COM_COMPOSE_H #include "ngspice/wordlist.h" void com_compose(wordlist *wl); #endif tmp_ns50wwy/src/frontend/typesdef.c0000644000175000017500000003104714163340332017553 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, 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 vector type as '%s'\n", type); fprintf(cp_err, " Command 'settype %s %s ...' is ignored\n\n", type, wl->wl_next->wl_word); return; } for (wl = wl->wl_next; wl; wl = wl->wl_next) { const char* vecname = wl->wl_word; if (*vecname == '@' && ft_curckt && !ft_curckt->ci_runonce) { fprintf(cp_err, "Warning: Vector %s is available only after the simulation has been run!\n", vecname); fprintf(cp_err, " Command 'settype %s %s' is ignored\n\n", type, vecname); continue; } struct dvec *v = vec_get(vecname); if (!v) { fprintf(cp_err, "Warning: no such vector %s.\n", vecname); fprintf(cp_err, " Command 'settype %s %s' is ignored\n\n", type, vecname); } else for (; v; v = v->v_link2) if (v->v_flags & VF_PERMANENT) v->v_type = typenum; } } tmp_ns50wwy/src/frontend/runcoms2.c0000644000175000017500000001604114163340332017475 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" #if defined(XSPICE) && (defined(SIMULATOR) || defined(SHARED_MODULE)) #include "ngspice/evtproto.h" #endif 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 (ft_curckt == NULL) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } com_remcirc(NULL); inp_source_recent(); } /* 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; NG_IGNORE(wl); if (ft_curckt == NULL) { fprintf(cp_err, "Error: there is no circuit loaded.\n"); return; } /* 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 defined(XSPICE) && (defined(SIMULATOR) || defined(SHARED_MODULE)) /* remove event queues, if XSPICE and not nutmeg */ if (ft_curckt->ci_ckt) EVTunsetup(ft_curckt->ci_ckt); #endif 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); } } tmp_ns50wwy/src/frontend/com_plot.h0000644000175000017500000000022414163340332017542 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 tmp_ns50wwy/src/frontend/points.c0000644000175000017500000000474314163340332017247 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; } tmp_ns50wwy/src/frontend/svg.c0000644000175000017500000003512314163340332016526 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Copyright 2020 Giles Atkinson Original author (postsc.c): 1988 Jeffrey M. Hsu **********/ /* SVG driver. */ #include "ngspice/ngspice.h" #include "ngspice/graph.h" #include "ngspice/ftedbgra.h" #include "ngspice/ftedev.h" #include "ngspice/fteext.h" #include "svg.h" #include "plotting/graphdb.h" #include "variable.h" /* String and int options, if changed, change SVGxxxxx macros below. */ #define SVG_WIDTH 0 #define SVG_HEIGHT 1 #define SVG_FONT_SIZE 2 #define SVG_FONT_WIDTH 3 #define SVG_USE_COLOR 4 /* 0 = no 1 = yes 2 = yes, with dashes */ #define SVG_STROKE_WIDTH 5 #define SVG_GRID_WIDTH 6 #define NUM_INTS 7 #define SVG_BACKGROUND 0 #define SVG_FONT_FAMILY 1 #define SVG_FONT 2 #define NUM_STRINGS 3 static struct { int ints[NUM_INTS]; char *strings[NUM_STRINGS]; } Cfg = {{1024, 768, 16, 0, 1, 2, 0}, {NULL,}}; /* Macros to examine configuration options. */ #define SVGwidth (Cfg.ints[SVG_WIDTH]) #define SVGheight (Cfg.ints[SVG_HEIGHT]) #define SVGfont_size (Cfg.ints[SVG_FONT_SIZE]) #define SVGfont_width (Cfg.ints[SVG_FONT_WIDTH]) #define SVGuse_color (Cfg.ints[SVG_USE_COLOR]) #define SVGstroke_width (Cfg.ints[SVG_STROKE_WIDTH]) #define SVGgrid_width (Cfg.ints[SVG_GRID_WIDTH]) #define SVGbackground (Cfg.strings[SVG_BACKGROUND]) #define SVGfont_family (Cfg.strings[SVG_FONT_FAMILY]) #define SVGfont (Cfg.strings[SVG_FONT]) /* svg_intopts are: "svgwidth", "svgheight", "svgfont-size", "svgfont-width", "svguse-color", "svgstroke-width", "svggrid-width" svg_stropts are: "svgbackground", "svgfont-family", "svgfont" */ typedef struct { int lastx, lasty; int inpath; int linelen; bool isgrid; } SVGdevdep; #define DEVDEP_P(g) ((SVGdevdep *)(g)->devdep) /* Values for DEVDEP_P(g)->inpath. */ #define NOPATH 0 #define PATH 1 #define LINE 2 #define CHECK_PATH \ if (ddp->inpath == NOPATH || ddp->linelen > 240) startpath(ddp) static void closepath(SVGdevdep *ddp), startpath(SVGdevdep *ddp); static void startpath_width(SVGdevdep *ddp, int width); /* Values for 'stroke-dasharray'. */ static char *linestyles[] = { NULL, /* Solid */ "1,2", /* Dotted */ "7,7", /* Long dashes */ "3,3", /* Short dashes */ "7,2,2,2", /* Long/dot dashes */ "3,2,1,2", /* Short/dot dashes */ "8,3,2,3", "14,2", "3,5,1,5" /* Short/dot, longp dashes */ }; static FILE *plotfile; static int screenflag = 0; static int hcopygraphid; const char *svgcolors[] = {"black", "white", "red", "blue", "#FFA500", /*4: orange */ "green", "#FFC0C5", /*6: pink */ "#A52A2A", /*7: brown */ "#F0E68C", /*8: khaki */ "#DDA0DD", /*9: plum */ "#DA70D6", /*10: orchid */ "#EE82EE", /*11: violet */ "#B03060", /*12: maroon */ "#40E0D0", /*13: turqoise */ "#A0522D", /*14: sienna */ "#FF7F50", /*15: coral */ "cyan", "magenta", "#666", /*18: gray for smith grid */ "#949494", /*19: gray for smith grid */ "#888"}; /*20: gray for normal grid */ static char** colors; /* Set scale, color and size of the plot */ int SVG_Init(void) { char colorN[16], colorstring[30], strbuf[512]; unsigned int colorid, i; struct variable *vb, *va; bool intopts_isset = FALSE, stropts_isset = FALSE; unsigned int numberofcolors = NUMELEMS(svgcolors); /* set intopts and stropts as basic data */ if (cp_getvar("svg_intopts", CP_LIST, &va, 0)) { i = 0; while (i < NUM_INTS && va) { Cfg.ints[i++] = va->va_num; va = va->va_next; } intopts_isset = TRUE; } if (cp_getvar("svg_stropts", CP_LIST, &vb, 0)) { i = 0; while (i < NUM_STRINGS && vb) { tfree(Cfg.strings[i]); Cfg.strings[i++] = strdup(vb->va_string); vb = vb->va_next; } stropts_isset = TRUE; } /* plot size */ cp_getvar("hcopywidth", CP_NUM, &SVGwidth, 0); dispdev->width = SVGwidth; cp_getvar("hcopyheight", CP_NUM, &SVGheight, 0); dispdev->height = SVGheight; /* get linewidth information from spinit */ if (!cp_getvar("xbrushwidth", CP_NUM, &Cfg.ints[SVG_STROKE_WIDTH], 0)) Cfg.ints[SVG_STROKE_WIDTH] = 0; if (Cfg.ints[SVG_STROKE_WIDTH] < 0) Cfg.ints[SVG_STROKE_WIDTH] = 0; /* get linewidth for grid from spinit */ if (!cp_getvar("xgridwidth", CP_NUM, &Cfg.ints[SVG_GRID_WIDTH], 0)) Cfg.ints[SVG_GRID_WIDTH] = Cfg.ints[SVG_STROKE_WIDTH]; if (Cfg.ints[SVG_GRID_WIDTH] < 0) Cfg.ints[SVG_GRID_WIDTH] = 0; if (cp_getvar("hcopyfont", CP_STRING, &strbuf, sizeof(strbuf))) { tfree(Cfg.strings[SVG_FONT]); Cfg.strings[SVG_FONT] = strdup(strbuf); } else if (!stropts_isset) { tfree(Cfg.strings[SVG_FONT]); Cfg.strings[SVG_FONT] = strdup("Helvetica"); } if (cp_getvar("hcopyfontfamily", CP_STRING, &strbuf, sizeof(strbuf))) { tfree(Cfg.strings[SVG_FONT_FAMILY]); Cfg.strings[SVG_FONT_FAMILY] = strdup(strbuf); } else if (!stropts_isset){ tfree(Cfg.strings[SVG_FONT_FAMILY]); Cfg.strings[SVG_FONT_FAMILY] = strdup("Helvetica"); } cp_getvar("hcopyfontsize", CP_NUM, &Cfg.ints[SVG_FONT_SIZE], 0); colors = TMALLOC(char*, numberofcolors); /* Look for colour overrides: HTML/X11 #xxxxxx style. */ for (colorid = 0; colorid < numberofcolors; ++colorid) { sprintf(colorN, "color%d", colorid); if (cp_getvar(colorN, CP_STRING, colorstring, sizeof(colorstring))) { colors[colorid] = strdup(colorstring); if (colorid == 0) { tfree(Cfg.strings[SVG_BACKGROUND]); Cfg.strings[SVG_BACKGROUND] = strdup(colors[0]); } } else { colors[colorid] = strdup(svgcolors[colorid]); } } /* Get other options. */ if (SVGgrid_width == 0) SVGgrid_width = (2 * SVGstroke_width) / 3; if (SVGuse_color == 0) { /* Black and white. */ dispdev->numcolors = 2; } else { dispdev->numcolors = NUMELEMS(svgcolors); } if (SVGuse_color == 1) { /* Suppress dashes in favour of color. */ dispdev->numlinestyles = 2; } else { dispdev->numlinestyles = NUMELEMS(linestyles); } dispdev->minx = 0; dispdev->miny = 0; return 0; } /* Plot and fill bounding box */ int SVG_NewViewport(GRAPH *graph) { SVGdevdep *ddp; hcopygraphid = graph->graphid; if (graph->absolute.width) { /* hardcopying from the screen */ screenflag = 1; } graph->absolute.width = dispdev->width; graph->absolute.height = dispdev->height; if (SVGfont_width) graph->fontwidth = SVGfont_width; else graph->fontwidth = (2 * SVGfont_size) / 3; // Ugly! graph->fontheight = SVGfont_size; /* Start file off. * devdep initially contains name of output file. */ if ((plotfile = fopen((char*)graph->devdep, "w")) == NULL) { perror((char*)graph->devdep); graph->devdep = NULL; return 1; } fputs("\n", plotfile); fputs("\n", plotfile); fputs("width, dispdev->height); /* Style paths. */ fputs(" style=\"fill: none;", plotfile); if (SVGstroke_width > 0) { fprintf(plotfile, " stroke-width: %d;", SVGstroke_width); } /* Style text. */ if (SVGfont_family) { fprintf(plotfile, " font-family: %s;\n", SVGfont_family); } if (SVGfont) { fprintf(plotfile, " font: %s;\n", SVGfont_family); } fputs("\">\n\n\n\n", plotfile); /* Fill background. */ fprintf(plotfile, "\n", graph->absolute.width, graph->absolute.height, SVGbackground ? SVGbackground : "black"); /* Allocate and initialise per-graph data. */ tfree(graph->devdep); graph->devdep = TMALLOC(SVGdevdep, 1); ddp = DEVDEP_P(graph); ddp->lastx = ddp->lasty = -1; return 0; } int SVG_Close(void) { /* Test for activity in case SVG_Close is called as part of an abort, * without having reached SVG_NewViewport */ size_t i; if (plotfile) { closepath(DEVDEP_P(currentgraph)); fprintf(plotfile, "\n"); fclose(plotfile); plotfile = NULL; } if (colors) { for (i = 0; i < NUMELEMS(svgcolors); i++) tfree(colors[i]); tfree(colors); } for (i = 0; i < NUM_STRINGS; i++) tfree(Cfg.strings[i]); /* 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 SVG_Clear(void) { /* do nothing */ return 0; } int SVG_DrawLine(int x1, int y1, int x2, int y2, bool isgrid) { SVGdevdep *ddp; if (x1 == x2 && y1 == y2) return 0; ddp = DEVDEP_P(currentgraph); if (isgrid != ddp->isgrid) { closepath(ddp); ddp->isgrid = isgrid; } if (isgrid && ddp->inpath == NOPATH) startpath_width(ddp, SVGgrid_width); CHECK_PATH; if (x1 == ddp->lastx && y1 == ddp->lasty) { putc((ddp->inpath == LINE) ? ' ' : 'l', plotfile); ++ddp->linelen; } else { ddp->linelen += fprintf(plotfile, "M%d %dl", x1, dispdev->height - y1); } ddp->linelen += fprintf(plotfile, "%d %d", x2 - x1, y1 - y2); ddp->lastx = x2; ddp->lasty = y2; ddp->inpath = LINE; return 0; } int SVG_Arc(int x0, int y0, int r, double theta, double delta_theta) { double x1, y1, x2, y2, left; SVGdevdep *ddp; /* SVG will not draw full circles, so do them in pieces. */ if (delta_theta < 0.0) { theta += delta_theta; delta_theta = -delta_theta; } if (delta_theta > M_PI) { left = delta_theta - M_PI; if (left > M_PI) left = M_PI; delta_theta = M_PI; } else { left = 0.0; } ddp = DEVDEP_P(currentgraph); CHECK_PATH; x1 = (double) x0 + r * cos(theta); y1 = (double) y0 + r * sin(theta); x2 = (double) x0 + r * cos(theta + delta_theta); y2 = (double) y0 + r * sin(theta + delta_theta); ddp->linelen += fprintf(plotfile, "M%f %fA%d %d 0 0 0 %f %f", x1, dispdev->height - y1, r, r, x2, dispdev->height - y2); if (left != 0.0) { x2 = (double) x0 + r * cos(theta + M_PI + left); y2 = (double) y0 + r * sin(theta + M_PI + left); ddp->linelen += fprintf(plotfile, " %d %d 0 0 0 %f %f", r, r, x2, dispdev->height - y2); } ddp->lastx = -1; ddp->lasty = -1; ddp->inpath = PATH; return 0; } int SVG_Text(const char *text, int x, int y, int angle) { SVGdevdep *ddp; ddp = DEVDEP_P(currentgraph); if (ddp->inpath != NOPATH) closepath(ddp); y = dispdev->height - y; fputs("\n%s\n\n", colors[currentgraph->currentcolor], SVGfont_size, x, y, text); return 0; } /* SVG_DefineColor() and SVG_DefineLinestyle() are never used. */ int SVG_SetLinestyle(int linestyleid) { /* special case: get it when SVG_Text restores a -1 linestyle */ if (linestyleid == -1) { currentgraph->linestyle = -1; return 0; } if (SVGuse_color == 1 && linestyleid > 1) { /* Caller ignores dispdev->numlinestyles. Keep quiet, * but allow dotted grid. */ currentgraph->linestyle = 0; return 0; } if (linestyleid < 0 || linestyleid > dispdev->numlinestyles) { internalerror("bad linestyleid inside SVG_SetLinestyle"); fprintf(cp_err, "linestyleid is: %d\n", linestyleid); return 1; } if (linestyleid != currentgraph->linestyle) { closepath(DEVDEP_P(currentgraph)); currentgraph->linestyle = linestyleid; } return 0; } int SVG_SetColor(int colorid) { if (colorid < 0 || colorid > (int)NUMELEMS(svgcolors)) { internalerror("bad colorid inside SVG_SelectColor"); return 1; } if (colorid != currentgraph->currentcolor) { closepath(DEVDEP_P(currentgraph)); currentgraph->currentcolor = colorid; } return 0; } int SVG_Update(void) { fflush(plotfile); return 0; } int SVG_Finalize(void) { fputs("\"/>\n", plotfile); return 0; } /**************** PRIVATE FUNCTIONS OF SVG FRONTEND ***************************/ /* Start a new path. */ static void startpath_width(SVGdevdep *ddp, int width) { if (ddp->inpath != NOPATH) closepath(ddp); ddp->linelen = 3 + fprintf(plotfile, "currentcolor]); if (width) { ddp->linelen += fprintf(plotfile, "stroke-width=\"%d\" ", width); } /* Kludgy, but allow dash style 1 (the grid) when suppressing dashes. */ if (SVGuse_color != 1 || currentgraph->linestyle == 1) { ddp->linelen += fprintf(plotfile, "stroke-dasharray=\"%s\" ", linestyles[currentgraph->linestyle]); } fputs("d=\"", plotfile); ddp->inpath = PATH; } static void startpath(SVGdevdep *ddp) { startpath_width(ddp, 0); } static void closepath(SVGdevdep *ddp) { if (ddp->inpath != NOPATH) { fputs("\"/>\n", plotfile); ddp->inpath = NOPATH; } ddp->lastx = -1; ddp->lasty = -1; } tmp_ns50wwy/src/frontend/define.c0000644000175000017500000002656514163340332017173 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); } tmp_ns50wwy/src/frontend/terminal.c0000644000175000017500000001527114163340332017544 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 #ifdef HAVE_TERMCAP #include #include #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 */ tmp_ns50wwy/src/frontend/completion.h0000644000175000017500000000127614163340332020107 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 tmp_ns50wwy/src/frontend/vectors.c0000644000175000017500000012120414163340332017410 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" static struct dvec *findvec_all(struct plot *pl); static struct dvec *findvec_allv(struct plot *pl); static struct dvec *findvec_alli(struct plot *pl); static struct dvec *findvec_ally(struct plot *pl); static struct dvec *find_permanent_vector_by_name( NGHASHPTR pl_lookup_table, char *name); static enum ALL_TYPE_ENUM get_all_type(const char *word); static bool plot_prefix(const char *pre, const char *str); #ifdef XSPICE extern int EVTswitch_plot(CKTcircuit* ckt, const char* plottypename); struct dvec *EVTfindvec(char *node); #endif static void vec_rebuild_lookup_table(struct plot *pl) { if (pl->pl_lookup_table) { /* existing table */ nghash_empty(pl->pl_lookup_table, NULL, NULL); } else { /* new table */ int cnt = 0; /* count entries */ struct dvec *d; /* dynamic vector */ for (d = pl->pl_dvecs; d; d = d->v_next) { /* get # vec */ cnt++; } pl->pl_lookup_table = nghash_init(cnt); /* allow multiple entries */ nghash_unique(pl->pl_lookup_table, FALSE); } { /* Access lookup table directly for speed */ NGHASHPTR lookup_p = pl->pl_lookup_table; DS_CREATE(dbuf, 200); /* make dynamic buffer */ struct dvec *d; /* dynamic vector */ for (d = pl->pl_dvecs; d; d = d->v_next) { ds_clear(&dbuf); if (ds_cat_str_case(&dbuf, d->v_name, ds_case_lower) != DS_E_OK) { controlled_exit(-1); } char * const lower_name = ds_get_buf(&dbuf); nghash_insert(lookup_p, lower_name, d); /* add lower-cased name */ } /* end of loop over vectors */ ds_free(&dbuf); } pl->pl_lookup_valid = TRUE; /* now lookup table valid */ } /* end of function vec_rebuild_lookup_table */ enum ALL_TYPE_ENUM { ALL_TYPE_NONE, ALL_TYPE_ALL, ALL_TYPE_ALLV, ALL_TYPE_ALLI, ALL_TYPE_ALLY }; /* Efficient identification of "all", "allv", "alli", "ally", and anything * else */ static enum ALL_TYPE_ENUM get_all_type(const char *word) { /* Check for start of "all" */ if (tolower(word[0] != 'a')) { return ALL_TYPE_NONE; } if (tolower(word[1] != 'l')) { return ALL_TYPE_NONE; } if (tolower(word[2] != 'l')) { return ALL_TYPE_NONE; } /* It may be some type of all */ switch (tolower(word[3])) { case '\0': return ALL_TYPE_ALL; case 'v': if (word[4] == '\0') { return ALL_TYPE_ALLV; } else { return ALL_TYPE_NONE; } case 'i': if (word[4] == '\0') { return ALL_TYPE_ALLI; } else { return ALL_TYPE_NONE; } case 'y': if (word[4] == '\0') { return ALL_TYPE_ALLY; } else { return ALL_TYPE_NONE; } default: return ALL_TYPE_NONE; } /* end of swith over char after "all" */ } /* end of function get_all_type */ /* 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) { /* If no plot, cannot find */ if (pl == NULL) { return NULL; } /* Identify and handle special cases all, allv, alli, ally */ switch (get_all_type(word)) { case ALL_TYPE_ALL: return findvec_all(pl); case ALL_TYPE_ALLV: return findvec_allv(pl); case ALL_TYPE_ALLI: return findvec_alli(pl); case ALL_TYPE_ALLY: return findvec_ally(pl); default: /* case ALL_TYPE_NOT_ALL -- not some type of ALL */ break; } /* The find is not for one of the "all" cases */ if (!pl->pl_lookup_valid) { /* Table lookup not valid, so rebuild to make valid */ vec_rebuild_lookup_table(pl); } DS_CREATE(dbuf, 200); /* make dynamic buffer */ if (ds_cat_str_case(&dbuf, word, ds_case_lower) != DS_E_OK) { controlled_exit(-1); } char * const lower_name = ds_get_buf(&dbuf); NGHASHPTR pl_lookup_table = pl->pl_lookup_table; struct dvec *d = find_permanent_vector_by_name(pl_lookup_table, lower_name); /* If the vector was not using the lowercased name, try finding it as * v(lowercased name) */ if (!d) { ds_clear(&dbuf); bool f_ok = ds_cat_str(&dbuf, "v(") == DS_E_OK; f_ok &= ds_cat_str_case(&dbuf, word, ds_case_lower) == DS_E_OK; f_ok &= ds_cat_char(&dbuf, ')') == DS_E_OK; if (!f_ok) { controlled_exit(-1); } char * const node_name = ds_get_buf(&dbuf); d = find_permanent_vector_by_name(pl_lookup_table, node_name); } ds_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; } /* end of function findvec */ /* Macro taking a function name and vector filter as arguments that * generates the function that applies the filter */ #define FINDVEC_ALL_GEN(fun_name, filter)\ static struct dvec *fun_name(struct plot *pl)\ {\ struct dvec *d, *newv = NULL, *end = NULL, *v;\ for (d = pl->pl_dvecs; d; d = d->v_next) {\ if (filter) {\ 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;\ }\ } /* end of loop over vectors in plot */\ \ return newv;\ } /* end of function */ /* Generate the functions for each filter */ FINDVEC_ALL_GEN(findvec_all, d->v_flags & VF_PERMANENT) FINDVEC_ALL_GEN(findvec_allv, (d->v_flags & VF_PERMANENT) && (d->v_type == SV_VOLTAGE)) FINDVEC_ALL_GEN(findvec_alli, (d->v_flags & VF_PERMANENT) && (d->v_type == SV_CURRENT)) FINDVEC_ALL_GEN(findvec_ally, (d->v_flags & VF_PERMANENT) && (!cieq(d->v_name, pl->pl_scale->v_name))) /* Find a permanent vector with the given name */ static struct dvec *find_permanent_vector_by_name( NGHASHPTR pl_lookup_table, char *name) { struct dvec *d; /* Find the first vector with the given name and then find others * until one having the VF_PERMANENT flag set is found. */ for (d = nghash_find(pl_lookup_table, name); d; d = nghash_find_again(pl_lookup_table, name)) { if (d->v_flags & VF_PERMANENT) { /* A "permanent" vector was found with the name, so done */ return d; } } /* end of loop over vectors in the plot having this name */ /* try again, this time without quotes around the name */ char *nname = cp_unquote(name); for (d = nghash_find(pl_lookup_table, nname); d; d = nghash_find_again(pl_lookup_table, nname)) { if (d->v_flags & VF_PERMANENT) { /* A "permanent" vector was found with the name, so done */ tfree(nname); return d; } } /* end of loop over vectors in the plot having this name */ tfree(nname); return (struct dvec *) NULL; /* not found */ } /* end of function find_permanent_vector_by_name */ /* 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 = findvec(word, plot); if (d != (struct dvec *) NULL) { return d; } /* Forms I(node) and i(node) are converted to node#branch; * forms x(node), x != i, x != I, and x != '(' are converted to node */ if (word[0] != '\0' && word[0] != '(') { /* 1 or more char, not '(' */ if (word[1] == '(') { /* x(, x != '(' */ const char * const p_last_close_paren = strrchr(word + 2, ')'); if (p_last_close_paren != (char *) NULL && p_last_close_paren - word > (ptrdiff_t) 2 && p_last_close_paren[1] == '\0') { /* Of form x(node). Create node string. */ DS_CREATE(ds, 100); const char * const node_start = word + 2; bool ds_ok = ds_cat_mem(&ds, node_start, (size_t) (p_last_close_paren - node_start)) == DS_E_OK; /* If i(node) or I(node), append #branch */ if (tolower(word[0]) == (int) 'i') { /* i(node) or I(node) */ ds_ok &= ds_cat_mem(&ds, "#branch", 7) == DS_E_OK; } if (!ds_ok) { /* Dstring error (allocation failure) */ (void) fprintf(cp_err, "Unable to build vector name.\n"); } else { /* name built OK */ d = findvec(ds_get_buf(&ds), plot); } /* end of case of vector name built OK */ ds_free(&ds); } /* end of case of x(node) */ } /* end of case of x( */ } /* end of case of non-empty string and not leading '(' */ return d; } /* end of function vec_fromplot */ /* 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; /* Count the number of nodes in the list */ i = 0; for (nv = vv->va_vlist; nv; nv = nv->va_next) { i++; } dvec_realloc(d, i, NULL); /* Resize to # nodes */ /* Step through the list again, setting values this time */ 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; case CP_BOOL: fprintf(stdout, "%s=%d\n", nv->va_name, nv->va_bool); break; default: { fprintf(stderr, "ERROR: enumeration value `CP_LIST' not handled in vec_get\nIgnoring...\n"); break; } } 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(TRUE); cp_interactive = inter; } /* Create a copy of a vector. The vector is not "permananent" */ struct dvec *vec_copy(struct dvec *v) { struct dvec *nv; if (!v) { return (struct dvec *) NULL; } /* Make a copy with the VF_PERMANENT bit cleared in v_flags */ nv = dvec_alloc(copy(v->v_name), v->v_type, v->v_flags & ~VF_PERMANENT, v->v_length, NULL); /* Copy the data to the new vector */ if (isreal(v)) { (void) memcpy(nv->v_realdata, v->v_realdata, sizeof(double) * (size_t) v->v_length); } else { (void) 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; /* Copy defined dimensions */ (void) memcpy(nv->v_dims, v->v_dims, (size_t) v->v_numdims * sizeof *v->v_dims); nv->v_plot = v->v_plot; nv->v_next = NULL; nv->v_link2 = NULL; nv->v_scale = v->v_scale; return nv; } /* end of function vec_copy */ /* 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) { /* Do not free if NULL or name is NULL. The second possibility is a * special case */ if ((v == NULL) || (v->v_name == NULL)) { return; } struct plot * const 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 at head of list of vectors in the plot, make the next one * the new head of the list */ if (pl->pl_dvecs == v) { pl->pl_dvecs = v->v_next; } else { /* Not at head of list so must locate and fix links */ struct dvec *lv = pl->pl_dvecs; if (lv) { /* the plot has at least one vector */ for ( ; lv->v_next; lv = lv->v_next) { if (lv->v_next == v) { /* found prev vector */ break; } } } /* If found in the list, link prev vector to next one */ if (lv && lv->v_next) { lv->v_next = v->v_next; } else { (void) fprintf(cp_err, "vec_free: Internal Error: %s not in plot\n", v->v_name); } } /* end of case that vector being freed is not at head of list */ if (pl->pl_scale == v) { if (pl->pl_dvecs) { pl->pl_scale = pl->pl_dvecs; /* Random one... */ } else { pl->pl_scale = NULL; } } } /* end of case that have a plot */ dvec_free(v); } /* end of function vec_free_x */ /* This function returns TRUE if every element of v and every element of * every vector linked to v through v_link2 is zero and FALSE otherwise. */ bool vec_iszero(const struct dvec *v) { for (; v; v = v->v_link2) { /* step through linked vectors */ if (isreal(v)) { /* current vector is real */ const int n = v->v_length; int i; for (i = 0; i < n; i++) { if (v->v_realdata[i] != 0.0) { return FALSE; } } } else { /* current vector is complex */ const int n = v->v_length; int i; for (i = 0; i < n; i++) { if (realpart(v->v_compdata[i]) != 0.0) { return FALSE; } if (imagpart(v->v_compdata[i]) != 0.0) { return FALSE; } } } } return TRUE; /* every value tested was 0.0 */ } /* end of function vec_iszero */ /* 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(const 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 (struct plot *) NULL; } /* end of function get_plot */ /* 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(const 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; #ifdef XSPICE if (ft_curckt) { EVTswitch_plot(ft_curckt->ci_ckt, plot_cur->pl_typename); } #endif } else { fprintf(cp_err, "Warning: No previous plot is available. " "Plot remains unchanged (%s).\n", plot_cur->pl_typename); } return; } else if (cieq(name, "next")) { /* Step through the list, which has plots in reverse order */ 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) { /* found */ plot_cur = prev_pl; #ifdef XSPICE if (ft_curckt) { EVTswitch_plot(ft_curckt->ci_ckt, plot_cur->pl_typename); } #endif } else { /* no next plot */ fprintf(cp_err, "Warning: No next plot is available. " "Plot remains unchanged (%s).\n", plot_cur->pl_typename); } 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); } */ #ifdef XSPICE /* XSPICE event data are linked to the current circuit. It must not be removed when manipulating the data by any command. */ if (ft_curckt) { EVTswitch_plot(ft_curckt->ci_ckt, name); } #endif plot_cur = pl; } /* end of function plot_setcur */ /* 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". */ static bool plot_prefix(const char *pre, const char *str) { if (!*pre) { /* prefix is empty string */ return TRUE; /* Define "" to be prefix */ } while (*pre && *str) { if (*pre != *str) { /* stop at first mismatch */ break; } pre++; str++; } if (*pre || (*str && isdigit_c(pre[-1]))) return (FALSE); else return (TRUE); } struct dvec* copycut(struct dvec* v, struct dvec* newscalevec, int istart, int istop) { struct dvec* nv; int i; int len = istop - istart; if (!v) { return (struct dvec*)NULL; } /* Make a copy with the VF_PERMANENT bit cleared in v_flags */ nv = dvec_alloc(copy(v->v_name), v->v_type, v->v_flags,// & ~VF_PERMANENT, len, NULL); /* Copy the data to the new vector */ if (isreal(v)) { for (i = 0; i < len; i++) { nv->v_realdata[i] = v->v_realdata[istart + i]; } } else { for (i = 0; i < len; i++) { nv->v_compdata[i] = v->v_compdata[istart + i]; } } 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; /* Copy defined dimensions */ (void)memcpy(nv->v_dims, v->v_dims, (size_t)v->v_numdims * sizeof * v->v_dims); nv->v_plot = newscalevec->v_plot; nv->v_next = NULL; nv->v_link2 = NULL; return nv; } /* end of function copycut */ tmp_ns50wwy/src/frontend/diff.h0000644000175000017500000000027614163340332016645 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 tmp_ns50wwy/src/frontend/arg.c0000644000175000017500000000514614163340332016502 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(const char *string, const struct wordlist *wl, const struct comm *command); static int countargs(const wordlist *wl); /* 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; } static int countargs(const wordlist *wl) { int number = 0; const 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(const wordlist *wl, const struct comm *command) { common("which variable", wl, command); } void arg_plot(const wordlist *wl, const struct comm *command) { common("which variable", wl, command); } void arg_load(const wordlist *wl_in, const struct comm *command) { /* just call com_load */ wordlist * const wl = wl_copy(wl_in); command->co_func(wl); wl_free(wl); } void arg_let(const wordlist *wl, const struct comm *command) { common("which vector", wl, command); } void arg_set(const wordlist *wl, const struct comm *command) { common("which variable", wl, command); } void arg_display(const wordlist *wl, const struct comm *command) { NG_IGNORE(wl); NG_IGNORE(command); /* just return; display does the right thing */ } /* a common prompt routine */ static void common(const char *string, const struct wordlist *wl, const 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); } } /* end of function common */ void outmenuprompt(const char *string) { fprintf(cp_out, "%s: ", string); fflush(cp_out); return; } tmp_ns50wwy/src/frontend/inventory.c0000644000175000017500000000221514163340332017760 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 || !ft_curckt->ci_ckt) { 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("\nCircuit Inventory\n\n"); for (k = 0; k < ft_sim->numDevices; k++) if (ft_sim->devices[k] && devList[k].instNum > 0) out_printf("%s: %d\n", ft_sim->devices[k]->name, devList[k].instNum); out_send("\n"); } tmp_ns50wwy/src/frontend/com_ghelp.h0000644000175000017500000000014114163340332017661 0ustar carstencarsten#ifndef ngspice_COM_GHELP_H #define ngspice_COM_GHELP_H void com_ghelp(wordlist *wl); #endif tmp_ns50wwy/src/frontend/inpcom.h0000644000175000017500000000020714163340332017214 0ustar carstencarsten/************* * Header file for inpcom.c * 1999 E. Rouat ************/ #ifndef ngspice_INPCOM_H #define ngspice_INPCOM_H #endif tmp_ns50wwy/src/frontend/measure.c0000644000175000017500000004024314163340332017367 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; if (wl_index == NULL) { line_in = wl_flatten(wl); fprintf(stderr, "\nError: meas failed due to missing token in \n meas %s \n\n", line_in); tfree(line_in); return; } 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); } tmp_ns50wwy/src/frontend/com_state.c0000644000175000017500000000144114163340332017701 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"); } tmp_ns50wwy/src/frontend/variable.c0000644000175000017500000010413414163340332017513 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 "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; static void update_option_variables(const char *sz_var_name, struct variable *p_v); 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 = copy(var->va_string); break; case CP_LIST: /* The tricky case. */ for (vt = var->va_vlist; vt; vt = vt->va_next) { w = cp_varwl(vt); /* recursive call */ 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); } /* end of function cp_varwl */ /* Set a variable. */ void cp_vset(const char *varname, enum cp_types type, const 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 { /* The variable only exists in TRUE state */ 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; } /* Update variables controlling options */ update_option_variables(copyvarname, v); 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); } /* end of function cp_vset */ /* Process special variables: noglob, nonomatch, history, * noclobber, echo, prompt, ignoreeof, cpdebug, and no_histsubst * by setting the values of associated option variables. * * Parmeters * sz_var_name: Name of variable * p_v: Variable if it is being added or NULL if being removed. */ static void update_option_variables(const char *sz_var_name, struct variable *p_v) { static const unsigned char p_ch0['p' - 'a' + 1] = { ['n' - 'a'] = 1, /* noglob, nonomatch, noclobber, no_histsubst */ ['h' - 'a'] = 2, /* history */ ['e' - 'a'] = 3, /* echo */ ['p' - 'a'] = 4, /* prompt, program */ ['i' - 'a'] = 5, /* ignoreeof */ ['c' - 'a'] = 6 /* cpdebug */ }; unsigned int index0 = (unsigned int) sz_var_name[0] - 'a'; /* Check if first char of is in range of interest. * Note that if < 0, as unsigned, it will be very large so this * single compare checks both < 'a' and > 'p' */ if (index0 >= sizeof p_ch0) { return; } unsigned int id0 = (unsigned int) p_ch0[index0]; if (id0 == 0) { /* not of interest */ return; } /* Flag that bool values should be set is based on if the * variable is being added (via a set) or removed */ const bool f_set = p_v != (struct variable *) NULL; switch (id0) { case 1: /* noglob, nonomatch, noclobber, no_histsubst */ if (sz_var_name[1] != 'o') { return; } { bool *p_var; const char *sz_rest = sz_var_name + 2; if (eq(sz_rest, "glob")) { p_var = &cp_noglob; } else if (eq(sz_rest, "nomatch")) { p_var = &cp_nonomatch; } else if (eq(sz_rest, "clobber")) { p_var = &cp_noclobber; } else if (eq(sz_rest, "_histsubst")) { p_var = &cp_no_histsubst; } else { /* not a variable of interest */ return; } *p_var = f_set; } return; case 2: /* history */ if (eq(sz_var_name + 1, "istory")) { if (f_set) { int n = -1; enum cp_types type = p_v->va_type; if (type == CP_NUM) { n = p_v->va_num; } else if (type == CP_REAL) { n = (int) round(p_v->va_real); } if (n >= 0) { cp_maxhistlength = n; } } /* Note that 'unset history' doesn't do anything here... Causes * trouble... */ } return; case 3: /* echo */ if (eq(sz_var_name + 1, "cho")) { cp_echo = f_set; } return; case 4: /* prompt, program */ if (sz_var_name[1] != 'r') { return; } if (sz_var_name[2] != 'o') { return; } const char *sz_rest = sz_var_name + 3; if (eq(sz_rest, "mpt")) { /* prompt */ if (f_set && p_v->va_type == CP_STRING) { cp_promptstring = p_v->va_string; } else { /* Use a default string since prompt is not a string or the * previous prompt string was freed */ cp_promptstring = "-> "; } return; } if (eq(sz_rest, "gram")) { /* program */ if (f_set && p_v->va_type == CP_STRING) { cp_program = p_v->va_string; } else { /* Use a default string since program is not a string or the * previous program string was freed */ cp_program = ""; } return; } return; /* not of interest */ case 5: if (eq(sz_var_name + 1, "gnoreeof")) { /* ignoreeof */ cp_ignoreeof = f_set; } return; case 6: if (eq(sz_var_name + 1, "pdebug")) { /* cpdebug */ cp_debug = f_set; #ifndef CPDEBUG if (cp_debug) { fprintf(cp_err, "Warning: program not compiled " "with cshpar debug messages\n"); } #endif } } /* end of switch over index for first char */ } /* end of function update_option_variables */ /* 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; struct variable *listv = NULL, *vv, *lv = NULL; struct variable *vars = NULL; /* Step through the list of words. Words may be various combinations of * the information needed to set a variable. For example, to set x to * the value 3, the data could be supplied as one word x=3, two words * x= 3 or x =3 or three words x = 3. Additionally words may be quoted * or unquoted. Each iteration through the loop handles one variable */ 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(name, TRUE, vars); name = (char *) NULL; /* Given to variable vars */ continue; } if (wl && eq(wl->wl_word, "=")) { /* name= */ 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 == '=')) { /* name=val */ val = wl->wl_word + 1; wl = wl->wl_next; } else if ((s = strchr(name, '=')) != NULL) { /* name=value or name=value */ 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); /* Test for a list variable */ 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... */ int 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 { double dbl_val; switch (ft_numparse(&ss, FALSE, &dbl_val)) { case 0: /* CP_REAL */ vv = var_alloc_real(NULL, dbl_val, NULL); break; case +1: /* CP_NUM */ vv = var_alloc_num(NULL, (int) dbl_val, NULL); break; default: /* CP_STRING */ 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; } /* Add list variable to linked list of variables. */ 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 { double dbl_val; switch (ft_numparse(&ss, FALSE, &dbl_val)) { case 0: /* CP_REAL */ vars = var_alloc_real(name, dbl_val, vars); break; case +1: /* CP_NUM */ vars = var_alloc_num(name, (int) dbl_val, vars); break; default: /* CP_STRING */ vars = var_alloc_string(name, copy(val), vars); } } name = (char *) NULL; /* name given to variable via var_alloc_* */ tfree(copyval); /*DG: must free ss any way to avoid cp_unquote memory leak */ } if (name) { tfree(name); } return vars; } /* end of function cp_setparse */ /* 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) txfree(v->va_name); if (v->va_type == CP_LIST) free_struct_variable(v->va_vlist); if (v->va_type == CP_STRING) txfree(v->va_string); txfree(v); v = next_v; } } /* end of function free_struct_variable */ 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); } /* Update options that depend on variables */ update_option_variables(varname, (struct variable *) NULL); 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); } /* end of function cp_remvar */ /* 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); if (strlen(s) > rsize) { fprintf(stderr, "Warning: string length for variable %s is limited to %zu chars\n", v->va_name, rsize); /* limit the string length */ s[rsize] = '\0'; } 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 "$-_<#?@.()[]&" /* This function determines the first character after a variable name and * returns its address. * * Parameter * t: Address of the variable name whose end is to be found. This is the * address of the first character following the leading $ * * Return value * Address of the first character after the variable name. */ 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; } /* end of function span_var_expr */ /* 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) { /* wordlist ends after wl */ return wlist; } wl = next; i = 0; } } /* end of loop over parts of wordlist node */ } /* end of loop over words in wordlist */ return wlist; } /* end of function cp_variablesubst */ /* Evaluate a variable. */ wordlist *vareval(/* NOT const */ 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()! */ if ((s = strchr(string, '[')) != NULL) { *s = '\0'; range = s + 1; } switch (*string) { case '$': wl = wl_cons(tprintf("%d", getpid()), NULL); txfree(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(""); txfree(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); txfree(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); txfree(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); txfree(oldstring); free_struct_variable(vfree); return wl; case '\0': wl = wl_cons(copy("$"), NULL); txfree(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); txfree(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); txfree(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); } /* end of case of range given for variable */ txfree(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); } /* end of function cp_vprint */ struct variable *var_alloc(char *name, struct variable *next) { struct variable * const 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; } tmp_ns50wwy/src/frontend/com_gnuplot.h0000644000175000017500000000021114163340332020250 0ustar carstencarsten#ifndef ngspice_COM_GNUPLOT_H #define ngspice_COM_GNUPLOT_H void com_gnuplot(wordlist *wl); void com_write_simple(wordlist *wl); #endif tmp_ns50wwy/src/frontend/nutmegif.h0000644000175000017500000000021614163340332017545 0ustar carstencarsten/************* * Header file for nutmegif.c * 1999 E. Rouat ************/ #ifndef ngspice_NUTMEGIF_H #define ngspice_NUTMEGIF_H #endif tmp_ns50wwy/src/frontend/com_state.h0000644000175000017500000000014014163340332017701 0ustar carstencarsten#ifndef ngspice_COM_STATE_H #define ngspice_COM_STATE_H void com_state(wordlist *wl); #endif tmp_ns50wwy/src/frontend/com_shift.h0000644000175000017500000000023314163340332017701 0ustar carstencarsten/************* * Header file for com_shift.c ************/ #ifndef ngspice_COM_SHIFT_H #define ngspice_COM_SHIFT_H void com_shift(wordlist *wl); #endif tmp_ns50wwy/src/frontend/spiceif.c0000644000175000017500000015030114163340332017345 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; /* Parse the .model lines. Enter the model into the global model table modtab. */ modtab = NULL; INPpas1(ckt, deck->nextcard, *tab); /* store the new model table in the current circuit */ ft_curckt->ci_modtab = modtab; /* Scan through the instance lines and parse the circuit. */ INPpas2(ckt, deck->nextcard, *tab, ft_curckt->ci_defTask); /* If option cshunt is given, add capacitors to each voltage node */ INPpas4(ckt, *tab); /* Fill in .NODESET and .IC data. * nodeset/ic of non-existent nodes is rejected. */ 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; } if (fread(&tmpI, sizeof(int), 1, file) != 1) { (void) fprintf(cp_err, "Unable to read spice version from snapshot.\n"); fclose(file); return; } 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); if (fread(my_ckt, sizeof(CKTcircuit), 1, file) != 1) { (void) fprintf(cp_err, "Unable to read spice circuit from snapshot.\n"); fclose(file); return; } #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(CKTcshunt); _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; \ if (fread(&__i, sizeof(int), 1, file) == 1 && __i > 0) { \ if (name) { \ txfree(name); \ } \ name = (type *) tmalloc((size_t) __i); \ if (fread(name, 1, (size_t) __i, file) != (size_t) __i) { \ (void) fprintf(cp_err, \ "Unable to read vector " #name "\n"); \ break; \ } \ } \ else { \ fprintf(cp_err, "size for vector " #name " is 0\n"); \ } \ if ((_size) != -1 && __i != \ (int) (_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; } tmp_ns50wwy/src/frontend/control.h0000644000175000017500000000310414163340332017406 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 tmp_ns50wwy/src/frontend/com_strcmp.h0000644000175000017500000000014314163340332020074 0ustar carstencarsten#ifndef ngspice_COM_STRCMP_H #define ngspice_COM_STRCMP_H void com_strcmp(wordlist *wl); #endif tmp_ns50wwy/src/frontend/diff.c0000644000175000017500000002573514163340332016647 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/dstring.h" #include "ngspice/dvec.h" #include "ngspice/ftedefs.h" #include "ngspice/hash.h" #include "ngspice/ngspice.h" #include "ngspice/sim.h" #include "diff.h" #include "variable.h" static bool nameeq(const char *n1, const char *n2); static char *canonical_name(const char *name, DSTRINGPTR dbuf_p, bool make_i_name_lower); static char * canonical_name(const char *name, DSTRINGPTR dbuf_p, bool make_i_name_lower) { ds_clear(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 ')' */ ds_case_t case_type = make_i_name_lower ? ds_case_lower : ds_case_as_is; bool f_ok = ds_cat_mem_case(dbuf_p, p_start, n, case_type) == DS_E_OK; f_ok &= ds_cat_mem(dbuf_p, sz_branch, sizeof sz_branch / sizeof *sz_branch - 1) == DS_E_OK; if (!f_ok) { controlled_exit(-1); } return ds_get_buf(dbuf_p); } /* Convert a name starting with a digit, such as a numbered node to * something like v(33) */ if (isdigit_c(*name)) { bool f_ok = ds_cat_mem(dbuf_p, "v(", 2) == DS_E_OK; f_ok &= ds_cat_str(dbuf_p, name) == DS_E_OK; f_ok &= ds_cat_char(dbuf_p, ')') == DS_E_OK; if (!f_ok) { controlled_exit(-1); } return ds_get_buf(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. */ if (ds_cat_str(dbuf_p, name) != DS_E_OK) { controlled_exit(-1); } return ds_get_buf(dbuf_p); } /* 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; } /* Init the dynamic string buffers to build canonical names */ DS_CREATE(ds1, 100); DS_CREATE(ds2, 100); /* Compare canonical names */ const BOOL rc = (BOOL) cieq(canonical_name(n1, &ds1, FALSE), canonical_name(n2, &ds2, FALSE)); /* Free the dynamic string buffers */ ds_free(&ds1); ds_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 */ 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; DS_CREATE(ibuf, 100); /* used to build canonical name */ 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; } } } ds_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); } } } } } } tmp_ns50wwy/src/frontend/parse.h0000644000175000017500000000066014163340332017044 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 tmp_ns50wwy/src/frontend/dvec.c0000644000175000017500000000672114163340332016652 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/dvec.h" struct dvec *dvec_alloc(/* NOT const -- assigned to char */ char *name, int type, short flags, int length, void *storage) { struct dvec * const 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; rv->v_numdims = 1; /* Assume 1 D */ rv->v_dims[0] = 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; return rv; } /* end of function dvec_alloc */ /* Resize dvec to length if storage is NULL orr replace * its existing allocation with storage if not */ 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; } /* end of function dvec_realloc */ 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; } /* end of function dvec_extend */ void dvec_trunc(struct dvec *v, int length) { /* Ensure valid */ if (v->v_alloc_length <= length) { v->v_length = length; } } /* end of function dvec_trunc */ void dvec_free(struct dvec *v) { /* Check for freed vector */ if (v == (struct dvec *) NULL) { return; } /* Free the various allocations */ if (v->v_name) { txfree(v->v_name); } if (v->v_realdata) { txfree(v->v_realdata); } else if (v->v_compdata) { /* if data real, not complex */ txfree(v->v_compdata); } txfree(v); } /* end of function dvec_free */ tmp_ns50wwy/src/frontend/hcomp.h0000644000175000017500000000014314163340332017034 0ustar carstencarsten#ifndef ngspice_HCOMP_H #define ngspice_HCOMP_H int hcomp(const void *a, const void *b); #endif tmp_ns50wwy/src/frontend/gens.h0000644000175000017500000000055114163340332016665 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 tmp_ns50wwy/src/frontend/com_strcmp.c0000644000175000017500000000073014163340332020071 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/wordlist.h" #include "com_strcmp.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); } tmp_ns50wwy/src/frontend/README0000644000175000017500000000040314163340332016434 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. tmp_ns50wwy/src/frontend/com_display.h0000644000175000017500000000020414163340332020227 0ustar carstencarsten#ifndef ngspice_COM_DISPLAY_H #define ngspice_COM_DISPLAY_H #include "ngspice/wordlist.h" void com_display(wordlist *wl); #endif tmp_ns50wwy/src/frontend/quote.h0000644000175000017500000000020614163340332017063 0ustar carstencarsten/************* * Header file for quote.c * 1999 E. Rouat ************/ #ifndef ngspice_QUOTE_H #define ngspice_QUOTE_H #endif tmp_ns50wwy/src/frontend/error.c0000644000175000017500000000372614163340332017064 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); extern void UpdateMainText(void); #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) { UpdateMainText(); /* get any remaining error messages into main text window */ 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); } tmp_ns50wwy/src/frontend/subckt.h0000644000175000017500000000051114163340332017220 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); struct card *inp_deckcopy_ln(struct card *deck); #endif tmp_ns50wwy/src/frontend/dimens.c0000644000175000017500000002562014163340332017207 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 = (int) 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 = (int) n_dim; return (int) (p - p0) + 1; case '\0': /* end of string ended scan */ *p_n_dim = (int) 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 = (unsigned int) (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 */ tmp_ns50wwy/src/frontend/com_dump.h0000644000175000017500000000013414163340332017531 0ustar carstencarsten#ifndef ngspice_COM_DUMP_H #define ngspice_COM_DUMP_H void com_dump(wordlist *wl); #endif tmp_ns50wwy/src/frontend/com_let.h0000644000175000017500000000017014163340332017350 0ustar carstencarsten#ifndef ngspice_COM_LET_H #define ngspice_COM_LET_H #include "ngspice/wordlist.h" void com_let(wordlist *wl); #endif tmp_ns50wwy/src/frontend/signal_handler.h0000644000175000017500000000071614163340332020706 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 code); RETSIGTYPE sigstop(void); RETSIGTYPE sigcont(void); RETSIGTYPE sigill(void); RETSIGTYPE sigbus(void); RETSIGTYPE sigsegv(void); RETSIGTYPE sigsegvsh(void); RETSIGTYPE sig_sys(void); extern JMP_BUF jbuf; extern void ft_sigintr_cleanup(void); #endif tmp_ns50wwy/src/frontend/postcoms.c0000644000175000017500000007726414163340332017612 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 "variable.h" #include "parser/complete.h" /* va: throwaway */ #include "plotting/plotting.h" #include "ngspice/compatmode.h" #include "ngspice/dstring.h" #include "numparam/general.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 is_scale_vec_of_current_plot(const char *v_name) { if (!plot_cur) { /* no current plot */ return FALSE; } const struct dvec * const pl_scale = plot_cur->pl_scale; if (!pl_scale) { /* no scale vector */ return FALSE; } /* Test if this vector's name matches the scale vector's name */ return cieq(v_name, pl_scale->v_name); } /* end of function is_scale_vec_of_current_plot */ /* Remove vectors in the wordlist from the current plot */ void com_unlet(wordlist *wl) { for ( ; wl != (wordlist *) NULL; wl = wl->wl_next) { /* Don't delete the scale vector of the current plot */ const char * const vector_name = wl->wl_word; if (is_scale_vec_of_current_plot(vector_name)) { /* If it is the scale vector of the current plot, print a * warning. Note that if it is true, the scale vector name must * exist, so no part of plot_cur->pl_scale->v_name can be null. */ fprintf(cp_err, "\nWarning: Scale vector '%s' of the current plot " "cannot be deleted!\n" "Command 'unlet %s' is ignored.\n\n", plot_cur->pl_scale->v_name, vector_name); } else { vec_remove(vector_name); } } /* end of loop over vectors to delete */ } /* end of function com_unlet */ /* Remove zero length vectors from the current plot */ void com_remzerovec(wordlist* wl) { NG_IGNORE(wl); struct dvec* ov; for (ov = plot_cur->pl_dvecs; ov; ov = ov->v_next) { if (ov->v_length == 0) { ov->v_flags &= ~VF_PERMANENT; /* Remove from the keyword list. */ cp_remkword(CT_VECTOR, ov->v_name); } } /* end of loop over vectors to delete */ } /* end of function com_remzerovec */ /* 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_quotes(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 into a ngspice raw file with 'write filename expr'. * If vectors (expr) from various plots are selected, they are written * out as seperate plots. In any case, we have to be sure to write out * the scales for everything we write. If expr is omitted, all vectors * of the current plot are written. */ 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 = NULL; bool ascii = AsciiRawFile; bool scalefound, appendwrite, plainwrite = FALSE; 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); plainwrite = cp_getvar("plainwrite", CP_BOOL, NULL, 0); /* If variable plainwrite is set, we do not expand equations, serve v vs vs etc. We offer plain writing of the vectors. This enables node names containing +, -, / etc. */ if (!plainwrite) { if (wl) names = ft_getpnames_quotes(wl, TRUE); else names = ft_getpnames_quotes(&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) ; } } else { wordlist* wli; if (!wl) wl = &all; for (wli = wl; wli; wli = wli->wl_next) { d = vec_get(wli->wl_word); if (!d) { fprintf(stderr, "Error during 'write': vector %s not found\n", wli->wl_word); 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... */ txfree(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... */ } raw_write(file, &newplot, appendwrite, !ascii); 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((const char * const *) 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; /* For each vector named in the wordlist, perform the transform to * it and the vectors associated with it through v_link2 */ for ( ; wl != (wordlist *) NULL; wl = wl->wl_next) { s = cp_unquote(wl->wl_word); d = vec_get(s); tfree(s); /*DG: Avoid Memory Leak */ if (d == NULL) { /* Print error message, but continue with other vectors */ fprintf(cp_err, "Error: no such vector as %s.\n", wl->wl_word); } else { /* Transpose the named vector and vectors tied to it * through v_link2 */ while (d) { vec_transpose(d); d = d->v_link2; } } } /* end of loop over words in wordlist */ } /* end of function com_transpose */ /* 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; newvec = wl->wl_word; wl = wl->wl_next; s = wl->wl_word; { double val; if (ft_numparse(&s, FALSE, &val) <= 0) { fprintf(cp_err, "Error: bad index value %s\n", wl->wl_word); return; } if ((ind = (int) val) < 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), (int) (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); } /* Free resources associated with "plot" datasets. The wordlist contains * the names of the plots to delete or the word "all" to delete all but the * default "const" plot, which cannot be deleted, even by name. If there are * no names given, the current plot is deleted */ void com_destroy(wordlist *wl) { /* If no name given, delete the current output data */ if (!wl) { DelPlotWindows(plot_cur); killplot(plot_cur); } else if (eq(wl->wl_word, "all")) { /* "all" -> all plots deleted */ struct plot *pl, *npl = NULL; 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 { /* list of plots by name */ while (wl) { struct plot *pl; 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; } } } /* end of function com_destroy */ static void killplot(struct plot *pl) { if (eq(pl->pl_typename, "const")) { fprintf(cp_err, "Error: can't destroy the constant plot\n"); return; } /* pl_dvecs, pl_scale */ { struct dvec *v; struct dvec *nv; 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) { /* First in list */ plot_list = pl->pl_next; if (pl == plot_cur) { plot_cur = plot_list; } } else { /* inside list */ struct plot *op; 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"); return; } 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); } txfree(pl->pl_title); txfree(pl->pl_name); txfree(pl->pl_typename); wl_free(pl->pl_commands); txfree(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); } txfree(pl); /* va: also tfree pl itself (memory leak) */ } /* delete the const plot (called from com_quit) */ 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); } /* delete the hash table entry for the const plot */ if (pl->pl_lookup_table) { nghash_free(pl->pl_lookup_table, NULL, NULL); } 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); } tmp_ns50wwy/src/frontend/parse-bison.y0000644000175000017500000001234714163340332020202 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 *); static char *keepline; %} %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; keepline = *line; }; %% /* */ 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); char *tmpstr = strstr(keepline, *line); int len = (int)strlen(keepline); fprintf (stderr, "%s: %s in line segment\n %s\nnear\n %*s\n", __func__, s, keepline, len, tmpstr); } tmp_ns50wwy/src/frontend/com_asciiplot.h0000644000175000017500000000015414163340332020555 0ustar carstencarsten#ifndef ngspice_COM_ASCIIPLOT_H #define ngspice_COM_ASCIIPLOT_H void com_asciiplot(wordlist *wl); #endif tmp_ns50wwy/src/frontend/fourier.h0000644000175000017500000000033314163340332017402 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 tmp_ns50wwy/src/frontend/subckt.c0000644000175000017500000022103614163340332017222 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 "ngspice/compatmode.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); extern int get_number_terminals(char* c); #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 double scale; if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; 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) { // tprint(sss->su_def); struct card *su_deck = inp_deckcopy(sss->su_def); /* If we have modern PDKs, we have to reduce the amount of memory required. We try to reduce the models to the one really used. Otherwise su_deck is full of unused binning models.*/ if ((newcompat.hs || newcompat.spe) && c->w > 0 && c->l > 0) { /* extract wmin, wmax, lmin, lmax */ struct card* new_deck = su_deck; struct card* prev = NULL; while (su_deck) { if (!ciprefix(".model", su_deck->line)) { prev = su_deck; su_deck = su_deck->nextcard; continue; } char* curr_line = su_deck->line; float fwmin, fwmax, flmin, flmax; char *wmin = strstr(curr_line, " wmin="); if (wmin) { int err; wmin = wmin + 6; fwmin = (float)INPevaluate(&wmin, &err, 0); if (err) { prev = su_deck; su_deck = su_deck->nextcard; continue; } } else { prev = su_deck; su_deck = su_deck->nextcard; continue; } char *wmax = strstr(curr_line, " wmax="); if (wmax) { int err; wmax = wmax + 6; fwmax = (float)INPevaluate(&wmax, &err, 0); if (err) { prev = su_deck; su_deck = su_deck->nextcard; continue; } } else { prev = su_deck; su_deck = su_deck->nextcard; continue; } char* lmin = strstr(curr_line, " lmin="); if (lmin) { int err; lmin = lmin + 6; flmin = (float)INPevaluate(&lmin, &err, 0); if (err) { prev = su_deck; su_deck = su_deck->nextcard; continue; } } else { prev = su_deck; su_deck = su_deck->nextcard; continue; } char* lmax = strstr(curr_line, " lmax="); if (lmax) { int err; lmax = lmax + 6; flmax = (float)INPevaluate(&lmax, &err, 0); if (err) { prev = su_deck; su_deck = su_deck->nextcard; continue; } } else { prev = su_deck; su_deck = su_deck->nextcard; continue; } float csl = (float)scale * c->l; /* scale by nf */ float csw = (float)scale * c->w / c->nf; /*fprintf(stdout, "Debug: nf = %f\n", c->nf);*/ if (csl >= flmin && csl < flmax && csw >= fwmin && csw < fwmax) { /* use the current .model card */ prev = su_deck; su_deck = su_deck->nextcard; continue; } else { struct card* tmpcard = su_deck->nextcard; line_free_x(prev->nextcard, FALSE); su_deck = prev->nextcard = tmpcard; } } su_deck = new_deck; } if (!su_deck) { fprintf(stderr, "\nError: Could not find a model for device %s in subcircuit %s\n", scname, sss->su_name); controlled_exit(1); } 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->w = deck->w; d->l = deck->l; d->nf = deck->nf; 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) { /* First card already found */ /* d is the card at the end of the deck */ d = d->nextcard = TMALLOC(struct card, 1); } else { /* This is the first card */ nd = d = TMALLOC(struct card, 1); } d->w = deck->w; d->l = deck->l; d->nf = deck->nf; 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) == '*') { /* skip comments */ deck = deck->nextcard; } } /* end of loop over cards in the source deck */ return nd; } /* end of function inp_deckcopy_oc */ /* * Copy a deck, without the ->actualLine lines, without comment lines, and * without .control section(s). * Keep the line numbers. */ struct card* inp_deckcopy_ln(struct card* deck) { struct card* d = NULL, * nd = NULL; int skip_control = 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; } else if (*(deck->line) == '*') { deck = deck->nextcard; continue; } if (nd) { /* First card already found */ /* d is the card at the end of the deck */ d = d->nextcard = TMALLOC(struct card, 1); } else { /* This is the first card */ nd = d = TMALLOC(struct card, 1); } d->w = deck->w; d->l = deck->l; d->nf = deck->nf; d->linenum_orig = deck->linenum_orig; d->linenum = deck->linenum; d->line = copy(deck->line); if (deck->error) { d->error = copy(deck->error); } d->actualLine = NULL; deck = deck->nextcard; } /* end of loop over cards in the source deck */ return nd; } /* end of function inp_deckcopy_ln */ /*------------------------------------------------------------------- * 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) { bool got_vnam = FALSE; 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(".save", s)) { while ((paren_ptr = strchr(s, '(')) != NULL) { bool curr = FALSE; char* comma_ptr = NULL; if (ciprefix(" i(", paren_ptr - 2)) curr = TRUE; name = paren_ptr + 1; if ((paren_ptr = strchr(name, ')')) == NULL) { fprintf(cp_err, "Error: missing closing ')' for .save statement %s\n", c->line); goto quit; } comma_ptr = strchr(s, ','); bxx_put_substring(&buffer, s, name); /* i(Vxx) */ if (curr) { translate_inst_name(&buffer, scname, name, paren_ptr); s = paren_ptr; } /* V(a,b) */ else if (comma_ptr && comma_ptr < paren_ptr) { translate_node_name(&buffer, scname, name, comma_ptr); bxx_putc(&buffer, ','); name = comma_ptr + 1; translate_node_name(&buffer, scname, name, paren_ptr); s = paren_ptr; } /* V(a) */ else { translate_node_name(&buffer, scname, name, paren_ptr); s = paren_ptr; } } bxx_put_cstring(&buffer, s); /* rest of line */ break; } else 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; /* vname requires instance translation of token following */ if (eq(name, "vnam")) got_vnam = TRUE; next_name = MIFgettok(&s); bxx_put_cstring(&buffer, name); break; default: if (got_vnam) { /* after %vnam an instance name is following */ translate_inst_name(&buffer, scname, name, NULL); got_vnam = FALSE; } else { /* 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, ' '); /* FIXME anothet hack: if no models found for m devices, set number of nodes to 4 */ if (!modnames && *(c->line) == 'm') nnodes = get_number_terminals(c->line); else 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 model names equal node names, this code will fail! */ if ((c == 'm') || (c == 'p') || (c == 'q') || (c == 'd')) { /* IF this is a mos, cpl, bjt or diode */ 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_node(&t); /* this can be either a model name or a node name. */ if (name == NULL) { name = copy(""); /* allow 'tfree' */ } else { for (;;) { wlsub = wl_find(name, orig_modnames); if (wlsub) { 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; 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; /* 3-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); if (!name) { break; } 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_node(&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 { for (;;) { wlsub = wl_find(name, orig_modnames); if (wlsub) { 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 (3); 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); } } tmp_ns50wwy/src/frontend/where.h0000644000175000017500000000024314163340332017041 0ustar carstencarsten/************* * Header file for where.c * 1999 E. Rouat ************/ #ifndef ngspice_WHERE_H #define ngspice_WHERE_H void com_where(wordlist *wl); #endif tmp_ns50wwy/src/frontend/resource.c0000644000175000017500000004260614163340332017562 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. * * Time information is acquired here. * Memory information is obtained in functions get_... for * a large variety of current operating systems. */ #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/ftedefs.h" #include "circuits.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 #ifdef __APPLE__ #include #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 */ 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); struct sys_mem mem_t, mem_t_act; struct proc_mem mem_ng, mem_ng_act; #endif #if defined(HAVE_WIN32) && defined(SHARED_MODULE) && defined(__MINGW32__) static int get_sysmem(struct sys_mem *memall); #endif void init_rlimits(void) { ft_ckspace(); } 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 95% of total available then a warning message is sent to the error stream (cp_err) */ void ft_ckspace(void) { #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; #else const unsigned long long freemem = getAvailableMemorySize(); const unsigned long long usage = getCurrentRSS(); if (freemem == 0 || usage == 0) { /* error obtaining data */ return; } const unsigned long long avail = usage + freemem; if ((double) usage > (double) avail * 0.95) { (void) fprintf(cp_err, "Warning - approaching max data size: " "current size = "); fprintmem(cp_err, usage); (void) fprintf(cp_err, ", limit = "); fprintmem(cp_err, avail); (void) fprintf(cp_err, "\n"); } #endif } /* end of function ft_chkspace */ /* 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")) { unsigned long long mem = getMemorySize(); fprintf(cp_out, "Total DRAM available = "); fprintmem(cp_out, mem); fprintf(cp_out, ".\n"); mem = getAvailableMemorySize(); fprintf(cp_out, "DRAM currently available = "); fprintmem(cp_out, mem); fprintf(cp_out, ".\n"); mem = getPeakRSS(); fprintf(cp_out, "Maximum ngspice program size = "); fprintmem(cp_out, mem); fprintf(cp_out, ".\n"); mem = getCurrentRSS(); fprintf(cp_out, "Current ngspice program size = "); fprintmem(cp_out, mem); fprintf(cp_out, ".\n"); #if defined(HAVE__PROC_MEMINFO) get_procm(&mem_ng_act); // fprintf(cp_out, "Resident set size = "); // fprintmem(cp_out, mem_ng_act.resident); // fprintf(cp_out, ".\n"); 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 */ 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); /* too 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; } #if defined(HAVE_WIN32) && defined(SHARED_MODULE) && defined(__MINGW32__) 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; } #endif #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 tmp_ns50wwy/src/frontend/streams.h0000644000175000017500000000031314163340332017403 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 tmp_ns50wwy/src/frontend/spiceif.h0000644000175000017500000000111614163340332017351 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 tmp_ns50wwy/src/frontend/display.c0000644000175000017500000002761114163340332017377 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" #include "svg.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_Finalize_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_Finalize_t*) nop, (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_Finalize_t*) nop, (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_Finalize_t*) nop, (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_Finalize_t*) nop, (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_Finalize_t*) nop, (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, PS_Finalize, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, { "svg", 0, 0, 1000, 1000, 0, 0, SVG_Init, SVG_NewViewport, SVG_Close, SVG_Clear, SVG_DrawLine, SVG_Arc, SVG_Text, (disp_fn_DefineColor_t*)nodev, (disp_fn_DefineLinestyle_t*)nodev, SVG_SetLinestyle, SVG_SetColor, SVG_Update, SVG_Finalize, (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_Finalize_t*) nop, (disp_fn_Track_t *) nodev, (disp_fn_MakeMenu_t *) nodev, (disp_fn_MakeDialog_t *) nodev, (disp_fn_Input_t *) nodev, gen_DatatoScreen, }, { "PrinterOnly", 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_Finalize_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, bool isgrid) { dispdev->DrawLine (x1, y1, x2, y2, isgrid); } void DevDrawArc(int x0, int y0, int radius, double theta, double delta_theta) { dispdev->DrawArc (x0, y0, radius, theta, delta_theta); } void DevDrawText(const 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(); } void DevFinalize(void) { if (dispdev) dispdev->Finalize(); } /* 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); } tmp_ns50wwy/src/frontend/com_setscale.c0000644000175000017500000000166314163340332020372 0ustar carstencarsten#include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/dvec.h" #include "com_setscale.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"); } } tmp_ns50wwy/src/frontend/svg.h0000644000175000017500000000100714163340332016525 0ustar carstencarsten/* Header file for SVG.c */ #ifndef ngspice_SVG_H #define ngspice_SVG_H disp_fn_Init_t SVG_Init; disp_fn_NewViewport_t SVG_NewViewport; disp_fn_Close_t SVG_Close; disp_fn_Clear_t SVG_Clear; disp_fn_DrawLine_t SVG_DrawLine; disp_fn_Arc_t SVG_Arc; disp_fn_Text_t SVG_Text; disp_fn_SetLinestyle_t SVG_SetLinestyle; disp_fn_SetColor_t SVG_SetColor; disp_fn_Update_t SVG_Update; disp_fn_Finalize_t SVG_Finalize; #endif tmp_ns50wwy/src/frontend/com_compose.c0000644000175000017500000005236514163340332020241 0ustar carstencarsten/* The 'compose' command. This is a more powerful and convenient form * of the 'let' command. */ #include /* log10 */ #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 "com_compose.h" #include "completion.h" /* 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; double 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) { char *s, *var, *val; 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 (ft_numparse(&val, FALSE, &start) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "stop")) { stopgiven = TRUE; if (ft_numparse(&val, FALSE, &stop) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "step")) { stepgiven = TRUE; if (ft_numparse(&val, FALSE, &step) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "center")) { centergiven = TRUE; if (ft_numparse(&val, FALSE, ¢er) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "span")) { spangiven = TRUE; if (ft_numparse(&val, FALSE, &span) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "mean")) { meangiven = TRUE; if (ft_numparse(&val, FALSE, &mean) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "sd")) { sdgiven = TRUE; if (ft_numparse(&val, FALSE, &sd) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "lin")) { lingiven = TRUE; if (ft_numparse(&val, FALSE, &lin) < 0) { fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } } else if (cieq(var, "log")) { double dbl_val; loggiven = TRUE; if (ft_numparse(&val, FALSE, &dbl_val) <= 0) { /* Cannot convert value to int */ fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } log = (int) dbl_val; } else if (cieq(var, "dec")) { double dbl_val; decgiven = TRUE; if (ft_numparse(&val, FALSE, &dbl_val) <= 0) { /* Cannot convert value to int */ fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } dec = (int) dbl_val; } else if (cieq(var, "oct")) { double dbl_val; octgiven = TRUE; if (ft_numparse(&val, FALSE, &dbl_val) <= 0) { /* Cannot convert value to integer */ fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } oct = (int) dbl_val; } else if (cieq(var, "gauss")) { double dbl_val; gaussgiven = TRUE; if (ft_numparse(&val, FALSE, &dbl_val) <= 0) { /* Cannot convert value to int */ fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } gauss = (int) dbl_val; } else if (cieq(var, "unif")) { double dbl_val; unifgiven = TRUE; if (ft_numparse(&val, FALSE, &dbl_val)<= 0) { /* cannot convert to int */ fprintf(cp_err, "Error: compose -> bad parm %s = %s\n", var, val); goto done; } unif = (int) dbl_val; } 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); txfree(resname); } /* end of function com_compose */ tmp_ns50wwy/src/frontend/shyu.c0000644000175000017500000003102014163340332016707 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); } tmp_ns50wwy/src/frontend/interp.h0000644000175000017500000000033414163340332017231 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 tmp_ns50wwy/src/frontend/com_history.c0000644000175000017500000003426114163340332020270 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 } tmp_ns50wwy/src/frontend/ftehelp.h0000644000175000017500000000064214163340332017361 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 tmp_ns50wwy/src/frontend/com_alias.h0000644000175000017500000000035514163340332017662 0ustar carstencarsten/************* * Header file for com_alias.c * 1999 E. Rouat ************/ #ifndef ngspice_COM_ALIAS_H #define ngspice_COM_ALIAS_H #include "ngspice/wordlist.h" void com_alias(wordlist *wl); void com_unalias(wordlist *wl); #endif tmp_ns50wwy/src/frontend/gens.c0000644000175000017500000001742514163340332016670 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; } tmp_ns50wwy/src/frontend/com_unset.h0000644000175000017500000000032014163340332017717 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); void unset_all(void); #endif tmp_ns50wwy/src/frontend/dimens.h0000644000175000017500000000105014163340332017203 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 tmp_ns50wwy/src/frontend/help/0000755000175000017500000000000014163340332016507 5ustar carstencarstentmp_ns50wwy/src/frontend/help/readhelp.c0000644000175000017500000002374114163340332020446 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 void hlp_topic_free(topic *p_topic); 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 *tl; size_t num = 0, i; for (tl = *tlp; tl; tl = tl->next) { num++; } if (!num) { /* nothing to sort */ return; } toplink ** const 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; txfree(vec); } topic * hlp_read(fplace *place) { int xrc = 0; 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) { xrc = -1; goto EXITPOINT; } top->place = copy_fplace(place); /* get the title */ if (!place->fp) { place->fp = hlp_fopen(place->filename); } if (!place->fp) { xrc = -1; goto EXITPOINT; } fseek(place->fp, place->fpos, SEEK_SET); /* skip subject */ if (fgets(buf, BSIZE_SP, place->fp) == (char *) NULL) { fprintf(stderr, "missing subject\n"); xrc = -1; goto EXITPOINT; } if (fgets(buf, BSIZE_SP, place->fp) == (char *) NULL) { fprintf(stderr, "missing title\n"); xrc = -1; goto EXITPOINT; } for (s = buf; *s && (*s != '\n'); s++) { ; } *s = '\0'; if ((int) (s - buf) < 7) { fprintf(stderr, "invalid title\n"); xrc = -1; goto EXITPOINT; } 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; EXITPOINT: if (xrc != 0) { /* free resources if error */ hlp_topic_free(top); top = (topic *) NULL; } return top; } /* end of function hlp_read */ /* *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); if (fgets(buf, BSIZE_SP, place->fp) == (char *) NULL) { (void) fprintf(stderr, "Missing subject"); return (char *) NULL; } for (s = buf; *s && (*s != '\n'); s++) ; *s = '\0'; if ((int) (s - buf) < 9) { (void) fprintf(stderr, "Invalid subject"); return (char *) NULL; } return copy(buf + 9); /* don't copy "SUBJECT: " */ } static void tlfree(toplink *tl) { toplink *nt = NULL; while (tl) { txfree(tl->description); txfree(tl->place->filename); txfree(tl->place); /* Don't free the button stuff... */ nt = tl->next; txfree(tl); tl = nt; } } void hlp_free(void) { topic *top, *nt; for (top = alltopics; top; top = nt) { nt = top->readlink; hlp_topic_free(top); } alltopics = NULL; } /* end of function hlp_free */ static void hlp_topic_free(topic *p_topic) { txfree(p_topic->title); txfree(p_topic->place); wl_free(p_topic->text); tlfree(p_topic->subtopics); tlfree(p_topic->seealso); txfree(p_topic); } /* end of function hlp_topic_free */ 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); } tmp_ns50wwy/src/frontend/help/Makefile.am0000644000175000017500000000054314163340332020545 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 tmp_ns50wwy/src/frontend/help/xdisplay.c0000644000175000017500000000171714163340332020516 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); } tmp_ns50wwy/src/frontend/help/textdisp.c0000644000175000017500000001120114163340332020512 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); } tmp_ns50wwy/src/frontend/help/ChangeLog0000644000175000017500000000156614163340332020271 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 tmp_ns50wwy/src/frontend/help/x11disp.c0000644000175000017500000002422114163340332020145 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 */ tmp_ns50wwy/src/frontend/help/provide.c0000644000175000017500000000714614163340332020333 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; } tmp_ns50wwy/src/frontend/help/help.c0000644000175000017500000000733214163340332017610 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(const 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); } tmp_ns50wwy/src/frontend/display.h0000644000175000017500000000212414163340332017374 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, bool isgrid); void DevDrawArc(int x0, int y0, int radius, double theta, double delta_theta); void DevDrawText(const 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 DevFinalize(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 tmp_ns50wwy/src/frontend/com_hardcopy.c0000644000175000017500000002025014163340332020371 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 = NULL; size_t n_byte_fname; /* size of fname in bytes, including null */ 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; static int n; if (!cp_getvar("hcopydev", CP_STRING, device, sizeof(device))) *device = '\0'; if (!cp_getvar("hcopydevtype", CP_STRING, buf, sizeof(buf))) { devtype = "postscript"; } else { devtype = buf; } if (wl) { hc_button = 0; fname = copy(wl->wl_word); n_byte_fname = (strlen(fname) + 1) * sizeof *fname; wl = wl->wl_next; } else { hc_button = 1; fname = smktemp2("hc", n); n++; tempf = TRUE; n_byte_fname = (strlen(fname) + 1) * sizeof *fname; if (!strcmp(devtype, "svg")) { fname = trealloc(fname, n_byte_fname + 4); (void)memcpy(fname + n_byte_fname - 1, ".svg", 5); n_byte_fname += 4; } else if (!strcmp(devtype, "postscript")) { fname = trealloc(fname, n_byte_fname + 3); (void)memcpy(fname + n_byte_fname - 1, ".ps", 4); n_byte_fname += 3; } } /* enable screen plot selection for these display types */ foundit = 0; #ifdef HAS_WINGUI if (!wl && hc_button) { char *psfname; GRAPH *tempgraph; /* initialze PS by calling PS_Init() */ if (DevSwitch(devtype)) return; if (currentgraph) tempgraph = CopyGraph(currentgraph); else { fprintf(stderr, "No parameters for hardcopy command, not previous plot:\n"); fprintf(stderr, " Command hardcopy cannot be executed\n\n"); DevSwitch(NULL); return; } if (!strcmp(devtype, "svg")) { /* change .tmp to .svg */ psfname = strchr(fname, '.'); if (psfname) { psfname[1] = 's'; psfname[2] = 'v'; psfname[3] = 'g'; psfname[4] = '\0'; } else { fname = trealloc(fname, n_byte_fname + 4); (void)memcpy(fname + n_byte_fname - 1, ".svg", 5); n_byte_fname += 4; } } else { /* change .tmp to .ps */ psfname = strchr(fname, '.'); if (psfname) { psfname[1] = 'p'; psfname[2] = 's'; psfname[3] = '\0'; } else { fname = trealloc(fname, n_byte_fname + 3); (void)memcpy(fname + n_byte_fname - 1, ".ps", 4); n_byte_fname += 3; } } tempgraph->devdep = copy(fname); tempgraph->n_byte_devdep = n_byte_fname; if (NewViewport(tempgraph)) { DevSwitch(NULL); return; } gr_resize(tempgraph); /* use DevFinalize to add final statement in file, "/> or "stroke"*/ DevFinalize(); 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 = copy(fname); tempgraph->n_byte_devdep = n_byte_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 && cp_getvar("interactive", CP_BOOL, NULL, 0)) { 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); if (system(buf) == -1) { fprintf(cp_out, "Printing %s on the %s printer failed.\n", fname, device); } else { fprintf(cp_out, "Printing %s on the %s printer OK.\n", fname, device); 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); if (system(buf) == -1) { fprintf(cp_out, "Printing %s on the %s printer failed.\n", fname, device); } else { fprintf(cp_out, "Printing %s on the %s printer OK.\n", fname, device); 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, "svg")) { fprintf(cp_out, "\nThe file \"%s\" has the Scalable Vector Graphics format.\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); } tfree(fname); /* restore previous graphics context by retrieving the previous currentgraph */ PopGraphContext(); } /* end of function com_hardcopy */ tmp_ns50wwy/src/frontend/streams.c0000644000175000017500000001323414163340332017404 0ustar carstencarsten/************* * streams.c ************/ #include #include #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "variable.h" #include "terminal.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(const 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; FILE *fp; w = wl->wl_next; /* Don't consider empty commands. */ while (w) { char *fname; if (*w->wl_word == cp_lt && w->wl_word[1] == '\0') { 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 && w->wl_word[1] == '\0') { fprintf(cp_err, "Error: `<<' redirection is not implemented.\n"); goto error; } if (!w) { fprintf(cp_err, "Error: missing name for input.\n"); return (wordlist *) 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"); if (!fp) { perror(fname); tfree(fname); goto error; } tfree(fname); cp_in = fp; /* special case for set command: keep i/o information (handled in com_set.c) */ wordlist* bw = beg->wl_prev->wl_prev; if (!(bw && cieq(bw->wl_word, "set"))) { wl_delete_slice(beg, w); } } else if (*w->wl_word == cp_gt && w->wl_word[1] == '\0') { 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 && w->wl_word[1] == '\0') { append++; w = w->wl_next; } if (w && *w->wl_word == cp_amp) { if (goterror++) { fprintf(cp_err, "Error: ambiguous error redirect.\n"); return (wordlist *) NULL; } w = w->wl_next; } if (!w) { fprintf(cp_err, "Error: missing name for output.\n"); return (wordlist *) 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+"); if (!fp) { tfree(fname); perror(fname); goto error; } tfree(fname); cp_out = fp; if (goterror) { cp_err = fp; } out_isatty = FALSE; wl_delete_slice(beg, w); } else { w = w->wl_next; } } /* end of loop over arguments */ return wl; error: wl_free(wl); /* FIXME, Ouch !! */ return (wordlist *) NULL; } /* end of function cp_redirect */ /* 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; } /* end of function cp_ioreset */ /* Do this only right before an exec, since we lose the old std*'s. */ void fixdescriptors(void) { bool dup2_fail = FALSE; if (cp_in != stdin) { dup2_fail |= dup2(fileno(cp_in), fileno(stdin)) == -1; } if (cp_out != stdout) { dup2_fail |= dup2(fileno(cp_out), fileno(stdout)) == -1; } if (cp_err != stderr) { dup2_fail |= dup2(fileno(cp_err), fileno(stderr)) == -1; } /* Warn if there was some failure */ if (dup2_fail) { (void) fprintf(cp_err, "I/O descriptor failure: %s.\n", strerror(errno)); } } /* end of function fixdescriptors */ tmp_ns50wwy/src/frontend/breakp.c0000644000175000017500000004132114163340332017170 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; static bool interpolated = FALSE; /* 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; } /* Check to see if we have to consider interpolated data. */ if (cp_getvar("interp", CP_BOOL, NULL, 0)) { interpolated = TRUE; fprintf(cp_out, "Note: Stop condition has to fit the interpolated time data!\n\n"); } else interpolated = FALSE; struct dbcomm *thisone = NULL; struct dbcomm *d = NULL; char *s, buf[64]; int i; 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((const char * const *) 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; { double val; if (ft_numparse(&s, FALSE, &val) >= 0) { 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; { double val; if (ft_numparse(&s, FALSE, &val) >= 0) { d->db_value2 = val; } else { d->db_nodename2 = copy(wl->wl_word); } } wl = wl->wl_next; } else { goto bad; } } /* end of case of word "when" */ } /* end of loop over wordlist */ 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"); } /* end of funtion com_stop */ /* 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; static double laststoptime = 0.; 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 (v1->v_length == 0) 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])); /* option interp: no new time step since last stop */ } else if (interpolated && AlmostEqualUlps(d1, laststoptime, 3)){ d2 = 0.; } else { d2 = d->db_value2; } switch (d->db_op) { case DBC_EQU: { bool hit = AlmostEqualUlps(d1, d2, 3) ? TRUE : FALSE; /* option interp: save the last stop time */ if (interpolated && hit) laststoptime = d1; return hit; } // 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); } } } tmp_ns50wwy/src/frontend/com_help.h0000644000175000017500000000013614163340332017516 0ustar carstencarsten#ifndef ngspice_COM_HELP_H #define ngspice_COM_HELP_H void com_help(wordlist *wl); #endif tmp_ns50wwy/src/frontend/linear.c0000644000175000017500000002004714163340332017200 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); } } } /* Cut out part of tran vectors from cut-tstart to cut-tstop and copy these into a new plot. A new scale vector 'time' will be there as well. Vectors that are shorter than the new scale vector will not be copied. */ void com_cutout(wordlist* wl) { double tstart, tstop; struct plot* new, * old; struct dvec* newtime, * v, *nv; struct dvec* oldtime; struct dvec* sta, *sto; int len, i, istart, istop; 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; } int length = plot_cur->pl_scale->v_length; if (length < 1) { fprintf(cp_err, "Error: no data in vector\n"); return; } /* if this plot contains special vectors cut-tstart or cut-tstop, use these */ sta = vec_fromplot("cut-tstart", plot_cur); if (sta) { tstart = sta->v_realdata[0]; for (istart = 0; istart < length - 1; istart++) { if (plot_cur->pl_scale->v_realdata[istart] > tstart) { // istart--; break; } } } else { tstart = plot_cur->pl_scale->v_realdata[0]; istart = 0; } sto = vec_fromplot("cut-tstop", plot_cur); if (sto) { tstop = sto->v_realdata[0]; for (istop = 0; istop < length - 1; istop++) { if (plot_cur->pl_scale->v_realdata[istop] > tstop) break; } } else { tstop = plot_cur->pl_scale->v_realdata[length - 1]; istop = length - 1; } /* finally check if tstart, tstop, istart and istop are reasonable */ if (((tstop - tstart) <= 0.0) || ((istop - istart) <= 0)) { fprintf(cp_err, "Error: bad parameters -- start = %G, stop = %G\n", tstart, tstop); return; } /* create a new plot */ old = plot_cur; oldtime = old->pl_scale; new = plot_alloc("transient"); if (!sta && !sto) new->pl_name = tprintf("%s (copy)", old->pl_name); else new->pl_name = tprintf("%s (cut out)", 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; /* copy a new scale vector (time) */ len = istop - istart; newtime = dvec_alloc(copy(oldtime->v_name), oldtime->v_type, oldtime->v_flags | VF_PERMANENT, len, NULL); newtime->v_plot = new; for (i = 0; i < len; i++) newtime->v_realdata[i] = oldtime->v_realdata[istart + i]; new->pl_scale = new->pl_dvecs = newtime; /* copy the vectors from tstart to tstop */ 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; } nv = copycut(v, newtime, istart, istop); vec_new(nv); wl = wl->wl_next; } } else { for (v = old->pl_dvecs; v; v = v->v_next) { if (v == old->pl_scale) continue; /* Don't copy vectors that are too short */ if (v->v_length < istop) continue; nv = copycut(v, newtime, istart, istop); vec_new(nv); } } } tmp_ns50wwy/src/frontend/points.h0000644000175000017500000000037014163340332017244 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 tmp_ns50wwy/src/frontend/com_rehash.c0000644000175000017500000000100114163340332020023 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"); } tmp_ns50wwy/src/frontend/com_rehash.h0000644000175000017500000000027514163340332020044 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 tmp_ns50wwy/src/frontend/fourier.c0000644000175000017500000002565014163340332017406 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 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 (ft_numparse(&s, FALSE, &fundfreq) < 0 || fundfreq <= 0.0) { fprintf(cp_err, "Error: bad fundamental freq %s\n", wl->wl_word); return 1; } 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_quotes(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); } tmp_ns50wwy/src/frontend/com_plot.c0000644000175000017500000000055214163340332017541 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 tmp_ns50wwy/src/frontend/typesdef.h0000644000175000017500000000031314163340332017550 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 tmp_ns50wwy/src/frontend/shyu.h0000644000175000017500000000020214163340332016712 0ustar carstencarsten/************* * Header file for shyu.c * 1999 E. Rouat ************/ #ifndef ngspice_SHYU_H #define ngspice_SHYU_H #endif tmp_ns50wwy/src/frontend/com_sysinfo.c0000644000175000017500000010076014163340332020257 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" #ifdef _WIN32 #undef BOOLEAN #include #include #endif #include #include #include #include #include "ngspice/dstring.h" /* system info */ typedef struct TSI { char *cpuModelName; char *osName; unsigned int numPhysicalProcessors; unsigned int numLogicalProcessors; } TesSystemInfo; /* Struture with info about system */ static TesSystemInfo system_info; /* 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 void fprintmem(FILE *stream, unsigned long long memory); static void free_static_system_info(void); static int get_sysmem(struct sys_memory *memall); static void set_static_system_info(void); #ifdef _WIN32 static inline void get_logical_processor_count(void); static void get_os_info(void); static void get_physical_processor_count(void); static void get_processor_name(void); #endif /* Print the available system info */ void com_sysinfo(wordlist *wl) { NG_IGNORE(wl); /* Invariant system data such as OS name */ { /* Flag that have at least some system info */ bool f_have_system_info = FALSE; static bool f_first_call = TRUE; if (f_first_call) { /* Obtain the system info when this function is called the * first time */ set_static_system_info(); /* Free the allocations on exit. Not really necessary since they * will be cleaned up then, but it may be useful when checking for * memory leaks */ if (atexit(&free_static_system_info) != 0) { fprintf(cp_err, "Unable to set handler to clean up system info.\n"); } /* Mark that first-call init is done. Note that since the calls to * set_static_system_info() and atexit define sequence points, the * flag will not be set until after they complete, so the code is * safe for reentrant calls. */ f_first_call = FALSE; } if (system_info.osName != (char *) NULL) { fprintf(cp_out, "\nOS: %s\n", system_info.osName); f_have_system_info = TRUE; } if (system_info.cpuModelName != (char *) NULL) { fprintf(cp_out, "CPU: %s\n", system_info.cpuModelName); f_have_system_info = TRUE; } if (system_info.numPhysicalProcessors > 0) { fprintf(cp_out, "Physical processors: %u, ", system_info.numPhysicalProcessors); f_have_system_info = TRUE; } if (system_info.numLogicalProcessors > 0) { fprintf(cp_out, "Logical processors: %u\n", system_info.numLogicalProcessors); f_have_system_info = TRUE; } /* Print something if no system info available */ if (!f_have_system_info) { fprintf(cp_err, "No system info available!\n"); } } /* end of block getting invariant system info */ /* Get memory information */ { struct sys_memory mem_t_act; if (get_sysmem(&mem_t_act) == 0) { /* 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"); } else { fprintf(cp_err, "Memory info is unavailable! \n"); } } return; } /* end of function com_sysinfo */ /* This function frees the buffers used to store system allocation strings */ static void free_static_system_info(void) { tfree(system_info.cpuModelName); tfree(system_info.osName); } /* end of fuction free_system_info */ /* 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); } } /* end of funtion fprintmem */ /*** Get processor and memory information as appropriate for the system ***/ #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 -1; } bytes_read = fread(buffer, 1, sizeof(buffer), fp); fclose(fp); if (bytes_read == 0 || bytes_read == sizeof(buffer)) return -1; buffer[bytes_read] = '\0'; /* Search for string "MemTotal" */ match = strstr(buffer, "MemTotal"); if (match == NULL) /* not found */ return -1; 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 -1; 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 -1; 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 -1; sscanf(match, "SwapFree: %ld", &mem_got); memall->swap_f = mem_got*1024; /* 1MB = 1024KB */ return 0; } /* Return length of first line in a string */ static inline 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 int searchInSet(const int *set, unsigned size, int match) { unsigned index; for (index = 0; index < size; index++) if (match == set[index]) return 1; return 0; } /* Get system information */ static void set_static_system_info(void) { FILE *file; /* Init to all information unailable */ system_info.cpuModelName = (char *) NULL; system_info.osName = (char *) NULL; system_info.numLogicalProcessors = system_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; } } system_info.osName = TMALLOC(char, size + 1); rewind(file); if (fread(system_info.osName, sizeof(char), size, file) != size) { (void) fprintf(cp_err, "Unable to read \"/proc/version\".\n"); fclose(file); tfree(system_info.osName); return; } fclose(file); system_info.osName[size] = '\0'; } /* 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); if (fread(inStr, sizeof(char), size, file) != size) { (void) fprintf(cp_err, "Unable to read \"/proc/cpuinfo\".\n"); fclose(file); txfree(inStr); return; } 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; system_info.cpuModelName = TMALLOC(char, numToEOL+1); memcpy(system_info.cpuModelName, modelPtr+2, numToEOL); system_info.cpuModelName[numToEOL] = '\0'; } } } } { const char *matchStrProc = "processor"; const char *matchStrPhys = "physical id"; char *strPtr = inStr; unsigned numProcs = 0; int *physIDs; /* get number of logical processors */ while ((strPtr = strstr(strPtr, matchStrProc)) != NULL) { // numProcs++; strPtr += strlen(matchStrProc); if (isblank_c(*strPtr)) numProcs++; } system_info.numLogicalProcessors = numProcs; physIDs = TMALLOC(int, 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) { int 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 { break; } } else { break; } } system_info.numPhysicalProcessors = numProcs; tfree(physIDs); } /* another test to get number of logical processors * if (system_info.numLogicalProcessors == 0) { * char *token; * char *cpustr = copy(inStr); * while (cpustr && !*cpustr) * if (cieq(gettok(&cpustr), "processor")) { * gettok(&cpustr); * token = gettok(&cpustr); * } * * system_info.numLogicalProcessors = atoi(token) + 1; * tfree(cpustr); * } */ txfree(inStr); fclose(file); } /* end of case that file was opened OK */ return; } /* end of function set_static_system_info */ #elif defined(__APPLE__) && defined(__MACH__) /* Get memory information */ static int get_sysmem(struct sys_memory *memall) { fprintf(stderr, "System memory info is not available\n"); return -1; } /* Get system information */ static void set_static_system_info(void) { } #elif defined(_WIN32) /* Get memory information */ static int get_sysmem(struct sys_memory *memall) { MEMORYSTATUSEX ms; ms.dwLength = sizeof(MEMORYSTATUSEX); if (GlobalMemoryStatusEx(&ms) == FALSE) { return -1; } memall->size_m = ms.ullTotalPhys; memall->free_m = ms.ullAvailPhys; memall->swap_t = ms.ullTotalPageFile; memall->swap_f = ms.ullAvailPageFile; return 0; } /* end of function get_sysmem */ /* This function gets system information about the version of Windows and * the number processors available, and save this information in the static * TesSystemInfo structure. If an item cannot be obtained, it is set to * 0/NULL. This allows callers to check for valid data since neither of these * values are valid */ static void set_static_system_info(void) { get_processor_name(); /* name of processor */ get_os_info(); /* name of OS with build and service pack, if any */ get_logical_processor_count(); /* Get number of logical cores */ get_physical_processor_count(); /* # hardware components */ return; } /* end of function set_static_system_info */ /* Copy data at HKLM/sz_subkey/sz_val_name to an allocated buffer that is * 1 byte longer and always null-termianted, possibly with 2 nulls * * Parameters * sz_subkey: Subkey string * sz_val_name: Name of value to get * p_ds: Address of dstring to receive data * * Return codes * 0: Data obtained OK * -1: Data not obtained. */ static int registry_value_to_ds(const char *sz_subkey, const char *sz_val_name, DSTRING *p_ds) { int xrc = 0; DWORD n_byte_data = 0; HKEY hk; bool f_key_open = FALSE; /* Opwn the key with the processor details */ { DWORD rc; if ((rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE, sz_subkey, 0, KEY_READ, &hk)) != ERROR_SUCCESS) { fprintf(cp_err, "Unable to open key for registry data \"%s\". " "System code = %lu\n", sz_subkey, rc); xrc = -1; goto EXITPOINT; } } f_key_open = TRUE; /* Get size of the name string. Strings in the registry need not be * null-terminated, but if they are, the null is included in the * size. */ { DWORD rc; if ((rc = RegQueryValueExA(hk, sz_val_name, 0, 0, NULL, &n_byte_data)) != ERROR_SUCCESS) { fprintf(cp_err, "Unable to get the size of value for \"%s\". " "System code = %lu\n", sz_val_name, rc); xrc = -1; goto EXITPOINT; } } /* Ensure dstring buffer is large enough for the data + 1 byte to add * a null to the end */ { size_t n_byte_reserve = (size_t) n_byte_data + 1; if (ds_reserve(p_ds, n_byte_reserve) != 0) { (void) fprintf(cp_err, "Unable to reserve a buffer of %u bytes for data.\n", n_byte_reserve); xrc = -1; goto EXITPOINT; } } /* Retrieve the value using the dstring buffer to receive it */ { DWORD rc; char *p_buf = ds_get_buf(p_ds); if ((rc = RegQueryValueExA(hk, sz_val_name, 0, 0, (LPBYTE) p_buf, &n_byte_data)) != ERROR_SUCCESS) { (void) fprintf(cp_err, "Unable to get the value for \"%s\". " "System code = %lu\n", sz_val_name, rc); xrc = -1; goto EXITPOINT; } } /* Set the dstring length */ (void) ds_set_length(p_ds, n_byte_data); EXITPOINT: /* Indicate error if failure */ if (xrc != 0) { ds_clear(p_ds); } if (f_key_open) { /* close key if opened */ RegCloseKey(hk); } return xrc; } /* end of function registry_value_to_ds */ /* Gets the name of the processor from the registry and sets field * cpuModelName in system_info. On failure, the field is set to NULL */ static void get_processor_name(void) { DS_CREATE(ds, 200); system_info.cpuModelName = NULL; /* init in case of failure */ if (registry_value_to_ds( "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", "ProcessorNameString", &ds) != 0) { (void) fprintf(cp_err, "Unable to get processor name data from the registry.\n"); return; } /* Step past any leading blanks and copy name to cpuModelName */ { const char *proc_name = ds_get_buf(&ds); while (*proc_name == ' ') { ++proc_name; } /* end of loop finding first non-blank of processor name */ /* Make a copy of the string at cpuModelName field of system_info */ system_info.cpuModelName = copy(proc_name); } ds_free(&ds); /* Free resources */ return; } /* end of function get_processor_name */ /* This function gets the release details to distinguish between * 2016 and 2019 servers. If necessary, it can be extended to return * codes for other servers in the future. * * See * https://techcommunity.microsoft.com/t5/Windows-Server-Insiders/Windows-Server-2019-version-info/m-p/234472 * * Return codes * -1: Failure * +1: 2016 server * +2: 2019 server (probably) * * Remarks * Calling this function alone is not sufficient to identify a server. * Rather it should be called given that a server OS is present to identify * the serer version. */ static int get_server_id(void) { DS_CREATE(ds, 25); if (registry_value_to_ds( "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ReleaseId", &ds) != 0) { (void) fprintf(cp_err, "Unable to get release ID data from the registry.\n"); return -1; } int id_code = -1; /* Set to failure until found */ /* Convert the release ID to a number */ { char *p_end; errno = 0; const char *p_buf = ds_get_buf(&ds); unsigned long id_val = strtoul(p_buf, &p_end, 10); if (errno || *p_end != '\0') { fprintf(cp_err, "Unable to convert \"%s\" to a release ID number.\n", p_buf); goto EXITPOINT; } if (id_val == 1607ul) { /* code for 2016 server */ id_code = 1; } else if (id_code > 1607ul) { /* Probably 2019 server */ id_code = 2; } /* Else unknown ID */ } EXITPOINT: ds_free(&ds); /* Free resources */ return id_code; } /* end of function get_server_id */ /* This function creates a name of the form ' ' , * allocates a buffer for it, and stores it in system_info.osNname. On * failure an error is reported and the string is set to NULL. * * Remarks * Getting the version has been complicated greatly in later versions of * Windows. A good discussion of the issue can be found at * https://stackoverflow.com/questions/47581146/getting-os-build-version-from-win32-api-c * * First, the function GetVersionEx() has been deprecated, so the * straightforward call to retrieve the version is not the recommended * approach any longer and will output a message to this effect during * compilation. Also, it may be removed at some later time. Even if it is * called, since Windows 8.0, the value returned depends not on the version * of the OS, but the manifested version of the calling program. * * As an alternative function RtlGetVersion() always returns version info * the same version as GetVersionEx() prior to Windows 8.1, and it * is not deprecated. Unfortunately, the simple solution is made less * simple because the header providing a prototype for RtlGetVersion() * is part of the Windows DDK and the function is not directly exposed * by ntdll.lib. Also, the DDK only works with UTF-16, so the name string * must be converted. * * The following link has a table showing how to determine the all operating * systems from Windows 2000 through Windows 10/Windows Server 2016. * https://web.archive.org/web/20190501082653/https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_osversioninfoexa * * OS ver Other OSV=OSVERSIONINFOEX * Windows Server 2016 10.0 OSV.wProductType != VER_NT_WORKSTATION * Windows 10 10.0 OSV.wProductType == VER_NT_WORKSTATION * Windows Server 2008 6.0 OSV.wProductType != VER_NT_WORKSTATION * Windows Vista 6.0 OSV.wProductType == VER_NT_WORKSTATION * Windows Server 2008 R2 6.1 OSV.wProductType != VER_NT_WORKSTATION * Windows 7 6.1 OSV.wProductType == VER_NT_WORKSTATION * Windows Server 2012 6.2 OSV.wProductType != VER_NT_WORKSTATION * Windows 8 6.2 OSV.wProductType == VER_NT_WORKSTATION * Windows Server 2012 R2 6.3 OSV.wProductType != VER_NT_WORKSTATION * Windows 8.1 6.3 OSV.wProductType == VER_NT_WORKSTATION * Windows 2000 5.0 Not applicable * Windows XP 5.1 Not applicable * Windows Home Server 5.2 OSV.wSuiteMask & VER_SUITE_WH_SERVER * Windows XP Professional * x64 Edition 5.2 (OSV.wProductType == VER_NT_WORKSTATION) && * (SYSTEM_INFO.wProcessorArchitecture == * PROESSOR_ARCHITECTURE_AMD64) * Windows Server 2003 5.2 GetSystemMetrics(SM_SERVERR2) == 0 * Windows Server 2003 R2 5.2 GetSystemMetrics(SM_SERVERR2) != 0 * Information on distinguishing between Windows Server 2016 and 2019 does * not appear to have been provided as of early 2019: * https://stackoverflow.com/questions/53393150/c-how-to-detect-windows-server-2019 * Hopefully this issue will be resolved in the future. */ static void get_os_info(void) { OSVERSIONINFOEXW ver_info; /* the name of the OS. Init to prevent compiler warning */ const char *sz_os_name = NULL; /* Load library containing RtlGetVersion() */ HMODULE lib = LoadLibraryExW(L"ntdll.dll", NULL, 0); if (lib == (HMODULE) NULL) { /* Not loaded OK */ (void) fprintf(cp_err, "Unable to load ntdll.dll. " "System code = %lu\n", (unsigned long) GetLastError()); system_info.osName = (char *) NULL; return; } /* Locate RtlGetVersion() */ FARPROC p_get_ver = GetProcAddress(lib, "RtlGetVersion"); if (p_get_ver == (FARPROC) NULL) { /* Did not get function addr OK */ (void) fprintf(cp_err, "Unable to locate function RtlGetVersion. " "System code = %lu\n", (unsigned long) GetLastError()); system_info.osName = (char *) NULL; return; } /* Get version info. RtlGetVersion cannot fail. */ ver_info.dwOSVersionInfoSize = sizeof(ver_info); (void) ((DWORD (WINAPI *)(OSVERSIONINFOEXW *)) p_get_ver)( &ver_info); switch (ver_info.dwMajorVersion) { case 10: { static const char OS_srvr[] = "Windows Server 2016/2019/other"; static const char OS_10[] = "Windows 10"; static const char OS_2016[] = "Windows Server 2016"; static const char OS_2019[] = "Windows Server 2019"; static const char * const p_str[] = { OS_srvr, OS_10, OS_2016, OS_2019 }; if (ver_info.dwMinorVersion != 0) { /* only know 10.0 */ system_info.osName = (char *) NULL; return; } sz_os_name = p_str[ver_info.wProductType == VER_NT_WORKSTATION ? 1 : get_server_id() + 1]; break; } case 6: { static const char OS_2008[] = "Windows Server 2008"; static const char OS_vista[] = "Windows Vista"; static const char OS_2008R2[] = "Windows Server 2008 R2"; static const char OS_7[] = "Windows 7"; static const char OS_2012[] = "Windows Server 2012"; static const char OS_8[] = "Windows 8"; static const char OS_2012R2[] = "Windows Server 2012 R2"; static const char OS_8_1[] = "Windows 8.1"; static const char * const p_str[] = { OS_2008, OS_vista, OS_2008R2, OS_7, OS_2012, OS_8, OS_2012R2, OS_8_1 }; if (ver_info.dwMinorVersion > 3) { /* know 6.0 through 6.3 */ (void) fprintf(cp_err, "Unknown Windows version 6.%lu. ", (unsigned long) ver_info.dwMinorVersion); system_info.osName = (char *) NULL; return; } sz_os_name = p_str[2 * ver_info.dwMinorVersion + ver_info.wProductType == VER_NT_WORKSTATION]; break; } case 5: { /* an assortment of other conditions must be checked */ switch (ver_info.dwMinorVersion) { /* filter by minor verson */ case 0: { static const char OS_2k[] = "Windows 2000"; sz_os_name = OS_2k; break; } case 1: { static const char OS_xp[] = "Windows XP"; sz_os_name = OS_xp; break; } case 2: if (ver_info.wSuiteMask & VER_SUITE_WH_SERVER) { static const char OS_home_server[] = "Windows Home Server"; sz_os_name = OS_home_server; } else if (ver_info.wProductType == VER_NT_WORKSTATION) { SYSTEM_INFO si; GetSystemInfo(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) { static const char OS_xp64[] = "Windows XP Professional x64 Edition"; sz_os_name = OS_xp64; } } else { /* Server 2003 or 2003 R2 */ static const char OS_2003R2[] = "Windows Server 2003 R2"; static const char OS_2003[] = "Windows Server 2003"; static const char * const p_str[] = {OS_2003R2, OS_2003}; sz_os_name = p_str[!GetSystemMetrics(SM_SERVERR2)]; } break; default: (void) fprintf(cp_err, "Unknown Windows version 5.%lu. ", (unsigned long) ver_info.dwMinorVersion); system_info.osName = (char *) NULL; return; } /* end of switch over minor version for major version 5 */ break; } case 4: switch (ver_info.dwMinorVersion) { case 0: { static const char OS_95[] = "Windows 95"; static const char OS_nt4[] = "Windows NT 4.0"; static const char * const p_str[] = {OS_95, OS_nt4}; sz_os_name = p_str[ver_info.wProductType == VER_NT_WORKSTATION]; } case 10: { static const char OS_98[] = "Windows 98"; sz_os_name = OS_98; break; } case 90: { static const char OS_me[] = "Windows ME"; sz_os_name = OS_me; break; } default: (void) fprintf(cp_err, "Unknown Windows version 4.%lu. ", (unsigned long) ver_info.dwMinorVersion); system_info.osName = (char *) NULL; return; } /* end of switch over minor version for major version 4 */ default: (void) fprintf(cp_err, "Unknown Windows version %lu.%lu. ", (unsigned long) ver_info.dwMajorVersion, (unsigned long) ver_info.dwMinorVersion); system_info.osName = (char *) NULL; return; }/* end of switch over major version */ /* Have the base version name. Now must add service pack, if any */ if (ver_info.wServicePackMajor == 0) { /* no service pack */ system_info.osName = tprintf("%s, Build %lu", sz_os_name, (unsigned long) ver_info.dwBuildNumber); } else if (ver_info.wServicePackMinor == 0) { /* major # only */ system_info.osName = tprintf("%s, Build %lu, Service Pack %u", sz_os_name, (unsigned long) ver_info.dwBuildNumber, (unsigned) ver_info.wServicePackMajor); } else { /* service pack has major and minor versions */ system_info.osName = tprintf("%s, Build %lu, Service Pack %u.%u", sz_os_name, (unsigned long) ver_info.dwBuildNumber, (unsigned) ver_info.wServicePackMajor, (unsigned) ver_info.wServicePackMinor); } return; } /* end of function get_os_info */ /* This function sets the number of processors field in system_info */ static inline void get_logical_processor_count(void) { SYSTEM_INFO si; GetSystemInfo(&si); system_info.numLogicalProcessors = si.dwNumberOfProcessors; } /* end of function get_logical_processor_count */ /* This funtion sets the field storing the number of physical processors * in system_info */ typedef BOOL (WINAPI *glp_t)(LOGICAL_PROCESSOR_RELATIONSHIP, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, PDWORD); static void get_physical_processor_count(void) { DWORD n_byte_buf = 0; system_info.numPhysicalProcessors = 0; /* Init to 0 until found */ /* Get a handle to the DLL with the required function. Since the * functdion GetModuleHandleW() is in kernel32.dll, it is safe to * assume that kernel32.dll is already loaded. Not using * LoadLibraryExW() simplifies error handling. */ HMODULE lib = GetModuleHandleW(L"kernel32.dll"); if (lib == (HMODULE) NULL) { /* Handle not obtained */ (void) fprintf(cp_err, "Unable to obtain a handle to kernel32.dll. " "System code = %lu\n", (unsigned long) GetLastError()); return; } /* Locate GetLogicalProcessorInformationEx(). It must be * dynamically loaded since it is only present in * Windows 7/Server 2008 R2 and later OS versions */ FARPROC p_glp = GetProcAddress(lib, "GetLogicalProcessorInformationEx"); if (p_glp == (FARPROC) NULL) { /* Did not get function addr OK */ (void) fprintf(cp_err, "Unable to locate function " "GetLogicalProcessorInformationEx. " "System code = %lu\n", (unsigned long) GetLastError()); return; } /* Find requried size. Should return FALSE/ERROR_INSUFFICIENT_BUFFER if * working properly */ if (((glp_t) (*p_glp))(RelationProcessorPackage, NULL, &n_byte_buf) != 0) { fprintf(cp_err, "Unexpected error getting logical processor buffer size.\n"); return; } { DWORD rc; if ((rc = GetLastError()) != ERROR_INSUFFICIENT_BUFFER) { fprintf(cp_err, "Unable to get the logical processor bufer size. " "System code = %lu.\n", (unsigned long) rc); return; } } /* Allocate buffer to get the info */ SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX * const buf = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)TMALLOC(char, n_byte_buf); if (buf == (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *) NULL) { fprintf(cp_err, "Unable to allocate a buffer of %lu bytes " "for logical processor information.\n", n_byte_buf); return; } /* Try again with a buffer and the size obtained before */ { DWORD rc; if ((rc = ((glp_t) (*p_glp))(RelationProcessorPackage, buf, &n_byte_buf)) == 0) { fprintf(cp_err, "Unable to get the logical processor info. " "System code = %lu.\n", (unsigned long) rc); return; } } /* Count the number of processor packages */ { SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX * p_buf_cur = buf; SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX * const p_buf_end = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *) ((char *) buf + n_byte_buf); unsigned int n_processor_package = 0; for ( ; p_buf_cur < p_buf_end; p_buf_cur = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *) ((char *) p_buf_cur + p_buf_cur->Size)) { ++n_processor_package; } system_info.numPhysicalProcessors = n_processor_package; } return; } /* end of function get_physical_processor_count */ #else /* no Windows OS, no proc info file system */ static int get_sysmem(struct sys_memory *memall) { return -1; // Return N/A } void set_static_system_info(void) { /* Set to no data available */ system_info.osName = (char *) NULL; system_info.cpuModelName = (char *) NULL; system_info.numPhysicalProcessors = 0; system_info.numLogicalProcessors = 0; return; } /* end of function set_static_system_info */ #endif tmp_ns50wwy/src/frontend/com_xgraph.c0000644000175000017500000000130314163340332020047 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 } tmp_ns50wwy/src/frontend/com_dl.h0000644000175000017500000000024414163340332017165 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 tmp_ns50wwy/src/frontend/init.h0000644000175000017500000000007014163340332016670 0ustar carstencarsten#ifndef ngspice_INIT_H #define ngspice_INIT_H #endif tmp_ns50wwy/src/frontend/outitf.c0000644000175000017500000014614414163340332017247 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); extern int EVTsetup_plot(CKTcircuit* ckt, char* plotname); 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 int 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, startclock; 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; } /* generate a vector of real time information */ else if (ft_ngdebug && refName && eq(refName, "time") && eq(saves[i].name, "speedcheck")) { addDataDesc(run, "speedcheck", IF_REAL, 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); } /* generate a vector of real time information */ if (ft_ngdebug && refName && eq(refName, "time")) { addDataDesc(run, "speedcheck", IF_REAL, numNames, 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; #ifdef XSPICE /* set the current plot name into the event job */ if (run->runPlot->pl_typename) EVTsetup_plot(run->circuit, run->runPlot->pl_typename); #endif } } /* 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 startclock = clock(); 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 (ft_ngdebug && d->type == IF_REAL && eq(d->name, "speedcheck")) { /* current time */ clock_t cl = clock(); double tt = ((double)cl - (double)startclock) / CLOCKS_PER_SEC; plotAddRealValue(d, tt); } else 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/plot in transient analysis */ if (interpolated && run->circuit->CKTcurJob->JOBtype == 4) { if (run->writeOut) { /* To file */ InterpFileAdd(run, refValue, valuePtr); } else { /* To plot */ 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 (real) 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 (ft_ngdebug && run->data[i].type == IF_REAL && eq(run->data[i].name, "speedcheck")) { /* current time */ clock_t cl = clock(); double tt = ((double)cl - (double)startclock) / CLOCKS_PER_SEC; fileAddRealValue(run->fp, run->binary, tt); } else 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; } /* end of function OUTpData */ int OUTwReference(runDesc*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. Write a raw file in batch mode (-b and -r flags). Writing a raw file in interactive or control mode is handled by raw_write() in rawfile.c */ 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, "speedcheck")) 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 (cieq(name, "i-sweep")) type = SV_CURRENT; 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 ((ft_curckt->ci_ckt->CKTmode & MODETRAN) && len == 0 && points > 0) { /* number of timesteps plus some overhead */ return points + 100; } /* transient and pss if original estimate is exceeded */ else if ((ft_curckt->ci_ckt->CKTmode & MODETRAN) && 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; } /* op */ else if (ft_curckt->ci_ckt->CKTmode & MODEDCOP) { /* op with length 1 */ return 1; } /* 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); } tmp_ns50wwy/src/frontend/hpgl.c0000644000175000017500000001630514163340332016662 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); free(graph->devdep); graph->devdep = NULL; graph->n_byte_devdep = 0; 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); graph->n_byte_devdep = sizeof(GLdevdep); } 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, bool isgrid) { NG_IGNORE(isgrid); /* 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(const char *text, int x, int y, int angle) { NG_IGNORE(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; } int GL_SetColor(int colorid) { fprintf(plotfile, "SP %d;", colorid); return 0; } int GL_Update(void) { fflush(plotfile); return 0; } tmp_ns50wwy/src/frontend/evaluate.c0000644000175000017500000006472314163340332017545 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) { if (node && node->pn_name) { fprintf(stderr, " in term: %s\n\n", node->pn_name); } 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") || eq(func->fu_name, "integ")) { 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); /* try to figure out the v_type, depending on the function */ if (eq(func->fu_name, "cph") || eq(func->fu_name, "ph")) t->v_type = SV_PHASE; else if (eq(func->fu_name, "db")) t->v_type = SV_DB; 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); } } tmp_ns50wwy/src/frontend/parser/0000755000175000017500000000000014163340332017053 5ustar carstencarstentmp_ns50wwy/src/frontend/parser/backq.h0000644000175000017500000000020414163340332020301 0ustar carstencarsten/************* * Header file for backq.c * 1999 E. Rouat ************/ #ifndef ngspice_BACKQ_H #define ngspice_BACKQ_H #endif tmp_ns50wwy/src/frontend/parser/Makefile.am0000644000175000017500000000071514163340332021112 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 tmp_ns50wwy/src/frontend/parser/lexical.c0000644000175000017500000003117014163340332020642 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/defines.h" #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" /** Constants related to characters that form their own words. ** These expressions will be resolved at compile time */ #define ID_SOLO_CHAR 1 /* Identifier for special chars */ /* Largest of the special chars */ #define MAX_SOLO_CHAR1 ('<' > '>' ? '<' : '>') #define MAX_SOLO_CHAR2 (MAX_SOLO_CHAR1 > ';' ? MAX_SOLO_CHAR1 : ';') #define MAX_SOLO_CHAR (MAX_SOLO_CHAR2 > '&' ? MAX_SOLO_CHAR2 : '&') /* Smallest of the special chars */ #define MIN_SOLO_CHAR1 ('<' < '>' ? '<' : '>') #define MIN_SOLO_CHAR2 (MIN_SOLO_CHAR1 < ';' ? MIN_SOLO_CHAR1 : ';') #define MIN_SOLO_CHAR (MIN_SOLO_CHAR2 < '&' ? MIN_SOLO_CHAR2 : '&') /* Largest index of solo char array */ #define MAX_INDEX_SOLO_CHAR (MAX_SOLO_CHAR - MIN_SOLO_CHAR) 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 '\' or '^', add following character to linebuf */ if ((c == '\\' && DIR_TERM != '\\') || (c == '\026') /* ^V */ ) { c = cp_readchar(&string, cp_inp_cur); push(&linebuf, 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)) { ; } prompt(); 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, 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, 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: /* $< is a special case where the '<' is not treated * as a character forming its own word */ ldefault: { /* Lookup table for "solo" chars forming their own word */ static const char id_solo_chars[MAX_INDEX_SOLO_CHAR + 1] = { ['<' - MIN_SOLO_CHAR] = ID_SOLO_CHAR, ['>' - MIN_SOLO_CHAR] = ID_SOLO_CHAR, [';' - MIN_SOLO_CHAR] = ID_SOLO_CHAR, ['&' - MIN_SOLO_CHAR] = ID_SOLO_CHAR }; /* Find index into solo chars table */ const unsigned int index_char = (unsigned int) c - (unsigned int) MIN_SOLO_CHAR; /* Flag that the current character c is a solo character */ const bool f_solo_char = index_char <= MAX_INDEX_SOLO_CHAR && id_solo_chars[index_char]; bool f_is_dollar_lt = FALSE; if (f_solo_char && buf.i > 0) { /* The current char is a character forming its own word, * unless it is "$<" */ if (c == '<' && buf.s[buf.i - 1] == '$') { /* is "$<" */ f_is_dollar_lt = TRUE; /* set flag that "$<" found */ } else { /* not "$<", so terminate current word and start * another one */ newword; } } push(&buf, c); /* Add the current char to the current word */ if (f_solo_char && !f_is_dollar_lt) { /* Split into a new word if this char forms its own word */ newword; } } /* end of ldefault block */ } /* end of switch over character value */ } /* end of loop over characters */ 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) { /* NOTE: The FALLTHROUGH comment is used to suppress a GCC warning * when flag -Wimplicit-fallthrough is present */ switch (*s) { case '!': fprintf(cp_out, "%d", cp_event); break; case '\\': if (s[1]) (void) putc((*++s), cp_out); /* FALLTHROUGH */ default: (void) putc((*s), cp_out); } s++; } (void) fflush(cp_out); } tmp_ns50wwy/src/frontend/parser/numparse.h0000644000175000017500000000021514163340332021054 0ustar carstencarsten/************* * Header file for numparse.c * 1999 E. Rouat ************/ #ifndef ngspice_NUMPARSE_H #define ngspice_NUMPARSE_H #endif tmp_ns50wwy/src/frontend/parser/input.h0000644000175000017500000000023314163340332020361 0ustar carstencarsten/************* * Header file for input.c * 1999 E. Rouat ************/ #ifndef ngspice_INPUT_H #define ngspice_INPUT_H int input(FILE *fp); #endif tmp_ns50wwy/src/frontend/parser/complete.h0000644000175000017500000000175514163340332021044 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 tmp_ns50wwy/src/frontend/parser/lexical.h0000644000175000017500000000024114163340332020642 0ustar carstencarsten/************* * Header file for lexical.c * 1999 E. Rouat ************/ #ifndef ngspice_LEXICAL_H #define ngspice_LEXICAL_H int input(FILE *fp); #endif tmp_ns50wwy/src/frontend/parser/glob.h0000644000175000017500000000020114163340332020140 0ustar carstencarsten/************* * Header file for glob.c * 1999 E. Rouat ************/ #ifndef ngspice_GLOB_H #define ngspice_GLOB_H #endif tmp_ns50wwy/src/frontend/parser/ChangeLog0000644000175000017500000000743114163340332020632 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 tmp_ns50wwy/src/frontend/parser/input.c0000644000175000017500000000221514163340332020356 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)); } tmp_ns50wwy/src/frontend/parser/glob.c0000644000175000017500000006130214163340332020144 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 #include "ngspice/ngspice.h" #include "ngspice/cpdefs.h" #include "ngspice/wordlist.h" #include "../misc/tilde.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 #define OPT_WLL_COPY_ALL 1 /* This structure is a "long-form" of the wordlist structure. The inital * wordlist structure fields have the same meanings as in a standalone * wordlist structure, except that the allocations for p_escape and * p_after are separate from the one for wl_word. This structure is useful * when a wordlist must undergo many modifications to its words, as when * globbing is being expanded */ typedef struct wordlist_l { struct wordlist wl; size_t n_char_word; /* length of word excluding null */ size_t n_elem_word_alloc; /* Allocated size of word array */ } wordlist_l; static void wl_modify_word(wordlist *wl_node, unsigned int n_input, const size_t *p_n_char_word, char **pp_worde); static wordlist *wll_to_wl(const wordlist_l *wll); static wordlist_l *wll_append(wordlist_l *wl_dst, wordlist_l *wl_to_append); static void wll_append_to_node(wordlist_l *dst, const wordlist_l *to_append); static wordlist_l *wll_cons( size_t n_elem_word_alloc, size_t n_char_word, const char *p_word, unsigned int opt, wordlist_l *tail); static void wll_free(wordlist_l *wll); static wordlist *wll_node_to_wl_node(const wordlist_l *wll); char cp_comma = ','; char cp_ocurl = '{'; char cp_ccurl = '}'; char cp_til = '~'; static wordlist_l *brac1(size_t offset_ocurl1, const char *p_str_cur); static wordlist_l *brac2(const char *string, size_t *p_n_char_processed); static wordlist *bracexpand(const wordlist *w_exp); static inline void merge_home_with_rest(wordlist *wl_node, size_t n_char_home, const char *sz_home, size_t n_char_skip); static inline void strip_1st_char(wordlist *wl_node); static void tilde_expand_word(wordlist *wl_node); /* 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... * * Globbing of arbitrary levels of brace nesting and tilde expansion to the * name of a "HOME" directory are supported. ?*[] are not */ wordlist *cp_doglob(wordlist *wlist) { /* Expand {a,b,c} */ { wordlist *wl = wlist; while (wl != (wordlist *) NULL) { wordlist *w = bracexpand(wl); if (!w) { wl_free(wlist); return (wordlist *) NULL; } /* Replace the node that was just expanded, wl, with the * expansion w (if different) and continue after that */ if (wl != w) { wordlist *wl_next = wl->wl_next; (void) wl_splice(wl, w); /* Update head of list if the replacement * changed it */ if (wlist == wl) { wlist = w; } /* Continue after the spliced nodes since * they are already fully expanded */ wl = wl_next; } else { /* same node, so just step to the next node */ wl = wl->wl_next; } } /* end of loop over words in wordlist */ } /* end of block expanding braces */ /* Do tilde expansion on each word. */ { wordlist *wl; for (wl = wlist; wl; wl = wl->wl_next) { if (*wl->wl_word == cp_til) { tilde_expand_word(wl); } } /* end of loop over words in wordlist */ } /* end of block expanding braces */ return wlist; } /* end of function cp_doglob */ static wordlist *bracexpand(const wordlist *w_exp) { const char * const wl_word = w_exp->wl_word; /* If no string, nothing to expand */ if (wl_word == (char *) NULL) { return (wordlist *) NULL; } /* Find first opening brace. If none, the string expands to itself as * a wordlist */ size_t offset_ocurl = ~(size_t) 0; /* flag for not found */ /* Loop until find opening brace or end of string */ { const char *p_cur = wl_word; char ch_cur; for ( ; (ch_cur = *p_cur) != '\0'; p_cur++) { if (ch_cur == cp_ocurl) { offset_ocurl = (size_t) (p_cur - wl_word); break; } } } /* Test for '{' and glob if there is one */ if (offset_ocurl != ~(size_t) 0) { /* Found a brace, so glob */ wordlist_l *wll_glob = brac1(offset_ocurl, wl_word); wordlist *wl_glob = wll_to_wl(wll_glob); wll_free(wll_glob); return wl_glob; } /* Unescaped '{' not found, so return the input node */ return (wordlist *) w_exp; } /* end of function bracexpand */ /* Given a string, returns a wordlist of all the {} expansions. This function * calls cp_brac2() with braced expressions and is called recursively by * cp_brac2(). * * Parameters * offset_ocurl1: Offset from p_str where the first opening brace occurs * or the offset to the terminating null of p_str (length of the * string) if it contains no opening brace. */ static wordlist_l *brac1(size_t offset_ocurl1, const char *p_str) { wordlist_l *words; const char *s; /* Create the inital entry in the list using all of the characters * before the first '{' */ { const size_t n_byte_alloc = BSIZE_SP + 1; words = wll_cons(n_byte_alloc, offset_ocurl1, p_str, OPT_WLL_COPY_ALL, (wordlist_l *) NULL); } /* Step through string. In each iteration one {} group and the ungrouped * characters following that group, if any are processed */ for (s = p_str + offset_ocurl1; *s != '\0'; ) { { /* Process braced expression */ size_t n_char_processed; /* Process braced list using brac2() */ wordlist_l *nwl = brac2(s, &n_char_processed); if (nwl == (wordlist_l *) NULL) { /* brac2() already printed an error message */ wll_free(words); return (wordlist_l *) NULL; } /* New wordlist to replace existing words. Note * the number of nodes is * #(existing list) X #(brac2() list). Each of * the brac2() words is appended to each of the * existing words to form the new wordlist */ wordlist_l *newwl = (wordlist_l *) NULL; /* For each word in the existing word list (words) */ wordlist_l *wl; /* loop iterator */ for (wl = words; wl; wl = (wordlist_l *) wl->wl.wl_next) { /* For each word in the word list from brac2() */ wordlist_l *w; /* loop iterator */ for (w = nwl; w; w = (wordlist_l *) w->wl.wl_next) { wordlist_l *nw = wll_cons( BSIZE_SP + 1, 0, (char *) NULL, OPT_WLL_COPY_ALL, (wordlist_l *) NULL); wll_append_to_node(nw, wl); wll_append_to_node(nw, w); newwl = wll_append(newwl, nw); } /* end of loop over words from brac2() */ } /* end of loop over words */ wll_free(words); wll_free(nwl); words = newwl; s += n_char_processed; /* skip braced list */ } /* end of processing of braced expression */ { /* Apend all chars after {} expression until the next * '{' or the end of the word to each word in the wordlist */ const char * const p_start = s; char ch_cur; for ( ; (ch_cur = *s) != cp_ocurl; s++) { if (ch_cur == '\0') { break; } } const size_t n_char_append = (size_t) (s - p_start); if (n_char_append > 0) { wordlist_l *wl; for (wl = words; wl; wl = (wordlist_l *) wl->wl.wl_next) { const size_t n_char_total = wl->n_char_word + n_char_append; const size_t n_elem_needed = n_char_total + 1; if (wl->n_elem_word_alloc < n_elem_needed) { const size_t n_elem_alloc = 2 * n_elem_needed; wl->wl.wl_word = TREALLOC(char, wl->wl.wl_word, n_elem_alloc); wl->n_elem_word_alloc = n_elem_alloc; } char *p_dst = wl->wl.wl_word + wl->n_char_word; (void) memcpy(p_dst, p_start, n_char_append); p_dst += n_char_append; *p_dst = '\0'; wl->n_char_word = n_char_total; } } } /* end of characters after braced expression */ } /* end of loop over braced expressions + following chars in string */ return words; } /* end of function brac1 */ /* Given a string starting with a {, return a wordlist of the expansions * for the text until the matching }. A vaild input string must have both * an opening brace and a closing brace. If an error occurs, NULL is * returned. On a successful return, *p_n_char_processed will contain the * number of characters processed by brac2 up to and including the closing * outermost brace */ static wordlist_l *brac2(const char *string, size_t *p_n_char_processed) { wordlist_l *wlist = (wordlist_l *) NULL; char buf_fixed[BSIZE_SP]; /* default work buffer */ char *buf = buf_fixed; /* actual work buffer */ bool eflag = FALSE; /* end-of-processing flag */ /* Required buffer size. Note that 1st char of string is not copied, * so strlen(string) includes the length of the null at the end */ const size_t n_elem_needed = strlen(string); /* Allocate and use a larger buffer if required */ if (n_elem_needed > BSIZE_SP) { /* will not fit in stack buffer */ buf = TMALLOC(char, n_elem_needed); } string++; /* Get past the first open brace... */ (void) strcpy(buf, string); /* make a copy of string */ char *buf_cur = buf; /* current position in buffer */ /* Each iteration of the outer loop processes one comma-separated * expression of the top-level brace-enclosed list */ for ( ; ; ) { int nb = 0; /* number of braces **inside 1st brace** */ size_t offset_ocurl1 = SIZE_MAX; /* Offset to 1st '{' */ /* Start processing at start of next top-level term */ char *s = buf_cur; /* Scan the string until the next comma at the top level is found, * the closing brace at the top level is found or the string ends * with a missing brace. If another term is found, it is processed * as a null-terminated string by calling brac1() */ for ( ; ; ) { const char ch_cur = *s; if (ch_cur == cp_ccurl) { /* closing brace found */ if (nb == 0) { /* A closing brace found without any internal opening * braces, so this one is the outermost brace */ eflag = TRUE; /* done -- set end flag */ break; } /* Else closing brace of internal level */ nb--; } else if (ch_cur == cp_ocurl) { /* another brace level started */ if (nb++ == 0) { /* Inc count. If 1st '{', save offset */ offset_ocurl1 = (size_t) (s - buf_cur); } } else if ((ch_cur == cp_comma) && (nb == 0)) { /* Comma found outside of any internal braced * expression */ break; } /* Check if reached end of string. If so, the closing * brace was not present. */ if (ch_cur == '\0') { fprintf(cp_err, "Error: missing }.\n"); if (buf != buf_fixed) { /* free allocation if made */ txfree(buf); } if (wlist != (wordlist_l *) NULL) { wll_free(wlist); } return (wordlist_l *) NULL; } s++; /* process next char */ } /* end of loop finding end of braces */ /* The above loop exits without returning from the function if either * a comma at the top level or the closing top level brace is reached. * Variable s points to this location. By setting it to null, a string * is created for one of the comma-separated expressions at the top * level */ *s = '\0'; /* Process the top-level expression found and append to the * wordlist being built */ { wordlist_l *nwl = brac1( offset_ocurl1 == SIZE_MAX ? (size_t) (s - buf_cur) : offset_ocurl1, buf_cur); wlist = wll_append(wlist, nwl); } /* Check for competion of processing */ if (eflag) { /* done -- normal function exit */ if (buf != buf_fixed) { /* free allocation if made */ txfree(buf); } /* When the loop is exited, s is at a brace or comma, which * is also considered to be processed. Hence +2 not +1. */ *p_n_char_processed = (size_t) (s - buf + 2); return wlist; } buf_cur = s + 1; /* go to next term after comma */ } /* end of loop over top-level comma-separated expressions */ } /* end of function brac2 */ /* Expand tildes. */ char *cp_tildexpand(const char *string) { /* Attempt to do the tilde expansion */ char * const result = tildexpand(string); if (!result) { /* expansion failed */ if (cp_nonomatch) { /* If set, should return the original string */ return copy(string); } /* Else should return NULL to indiciate failure */ return (char *) NULL; } return result; /* successful expansion returned */ } /* end of function cp_tildexpand */ /* This function expands the leading ~ of wl_node. */ static void tilde_expand_word(wordlist *wl_node) { char *word = wl_node->wl_word; char *p_char_cur = ++word; char ch = *p_char_cur; if (ch == '\0' || ch == DIR_TERM) { char *sz_home; const int n_char_home = get_local_home(0, &sz_home); if (n_char_home < 0) { /* expansion failed */ /* Strip the ~ and return the rest */ strip_1st_char(wl_node); return; } merge_home_with_rest(wl_node, (size_t) n_char_home, sz_home, 1); return; } #ifdef HAVE_PWD_H /* ~bob -- Get name of user and find home for that user */ { char * const usr_start = wl_node->wl_word + 1; char *usr_end = usr_start; char c; while ((c = *usr_end) != '\0' && c != DIR_TERM) { ++usr_end; } const size_t n_char_usr = (size_t) (usr_end - usr_start); const size_t n_byte_usr = n_char_usr + 1; const char c_orig = c; /* save char to be overwritten by '\0' */ *usr_end = '\0'; char *sz_home; const int n_char_home = get_usr_home(usr_start, 0, &sz_home); *usr_end = c_orig; /* restore char overwritten by '\0' */ if (n_char_home < 0) { strip_1st_char(wl_node); return; /* Strip the ~ and return the rest */ } merge_home_with_rest(wl_node, (size_t) n_char_home, sz_home, n_byte_usr); return; } #else /* ~bob is meaningless. Strip the ~ and return the rest */ strip_1st_char(wl_node); return; #endif } /* end of function tilde_expand_word */ /* Strip the 1st char. Equivalent to merging an empty HOME string with the * chars after the 1st char. Assumes string is at least 1 char long * excluding trailing NULL */ static inline void strip_1st_char(wordlist *wl_node) { merge_home_with_rest(wl_node, 0, (char *) NULL, 1); return; } /* end of function strip_1st_char */ /* This function modifies the wordlist node to consist of + * rest of string after n_char_skip. It is assumed that the string * is at least n_char_skip characters long excluding the trailing null */ static inline void merge_home_with_rest(wordlist *wl_node, size_t n_char_home, const char *sz_home, size_t n_char_skip) { size_t p_n_char_word[2]; p_n_char_word[0] = n_char_home; p_n_char_word[1] = strlen(wl_node->wl_word) - n_char_skip; char *pp_word[2]; pp_word[0] = (char *) sz_home; pp_word[1] = wl_node->wl_word + n_char_skip; wl_modify_word(wl_node, 2u, p_n_char_word, pp_word); return; } /* end of function merge_home_with_rest */ /*** Long-form wordlist functions ***/ /* This function converts long-form wordlist wll to a standard wordlist. * The input long-form list is not modified. */ static wordlist *wll_to_wl(const wordlist_l *wll) { /* Handle degnerate case of NULL input */ if (wll == (wordlist_l *) NULL) { return (wordlist *) NULL; } /* There is at least one node in the long-form wordlist. */ /* Convert it to a standard wordlist node, which is the node to * return */ wordlist * const wl_start = wll_node_to_wl_node(wll); wordlist * wl_dst_prev = wl_start; wl_start->wl_prev = (wordlist *) NULL; /* Continue adding nodes */ for (wll = (wordlist_l *) wll->wl.wl_next ; wll != (wordlist_l *) NULL; wll = (wordlist_l *) wll->wl.wl_next) { /* Convert a single long-form node to a standard for node */ wordlist *wl_dst_cur = wll_node_to_wl_node(wll); wl_dst_prev->wl_next = wl_dst_cur; wl_dst_cur->wl_prev = wl_dst_prev; wl_dst_prev = wl_dst_cur; } /* end of loop over nodes in input long-form wordlist */ /* Terminate the list of words */ wl_dst_prev->wl_next = (wordlist *) NULL; return wl_start; } /* end of function wll_to_wl */ /* This function creates word data for a standard list from word data of * a long-form list. Both structures must be allocated on input, and the * long-form data is not change */ static wordlist *wll_node_to_wl_node(const wordlist_l *wll) { /* Allocate node being returned */ wordlist * const wl_dst = TMALLOC(wordlist, 1); /* Find required size of allocation and save lengths of arrays */ const size_t n_char_word = wll->n_char_word; const size_t n_byte_alloc = n_char_word + 1; /* Allocate buffer */ char * p_dst_cur = wl_dst->wl_word = TMALLOC(char, n_byte_alloc); /* Word data */ wl_dst->wl_word = p_dst_cur; (void) memcpy(p_dst_cur, wll->wl.wl_word, n_char_word); p_dst_cur += n_char_word; *p_dst_cur++ = '\0'; return wl_dst; } /* end of function wll_node_to_wl_node */ /* Free a long-form wordlist */ void wll_free(wordlist_l *wll) { while (wll != (wordlist_l *) NULL) { wordlist_l * const next = (wordlist_l *) wll->wl.wl_next; void *p; if ((p = (void *) wll->wl.wl_word) != NULL) { txfree(p); } txfree(wll); wll = next; } /* end of loop over wordlist nodes */ } /* end of function wll_free */ /* This function prepends a wordlist_l node to the existing list. * * Parameters * n_char_word: Length of word, excluding trailing NULL * p_word: Address of word, or NULL if none. A null terminiation is * not required if the word will be duplicated. * opt: OPT_WLL_COPY_ALL -- create copy instead of resuing word allocation * tail: Address of wordlist having this word prepended. May be null. * * Return value * New wordlist node which is the start of the list */ wordlist_l *wll_cons( size_t n_elem_word_alloc, size_t n_char_word, const char *p_word, unsigned int opt, wordlist_l *tail) { /* Create a new node and link with the existing wordlist */ wordlist_l *w = TMALLOC(wordlist_l, 1); w->wl.wl_next = (wordlist *) tail; w->wl.wl_prev = (wordlist *) NULL; w->n_char_word = n_char_word; w->n_elem_word_alloc = n_elem_word_alloc; if (opt & OPT_WLL_COPY_ALL) { char *p_dst = w->wl.wl_word = TMALLOC(char, n_elem_word_alloc); (void) memcpy(p_dst, p_word, n_char_word); p_dst += n_char_word; *p_dst = '\0'; } else { w->wl.wl_word = (char *) p_word; } /* Link to front of rest of nodes, if present */ if (tail) { /* The new word goes in the front */ tail->wl.wl_prev = (wordlist *) w; } return w; } /* end of function wl_cons */ /* This function appends wl_to_append to the end of wl_dst and returns the * start of the combined wordlist */ static wordlist_l *wll_append(wordlist_l *wl_dst, wordlist_l *wl_to_append) { /* Handle degenerate cases where both of the input wordlists * are not non-NULL */ if (wl_dst == (wordlist_l *) NULL) { return wl_to_append; } if (wl_to_append == (wordlist_l *) NULL) { return wl_dst; } /* Locate last node of wl_dst */ { wordlist_l *wl; for (wl = wl_dst; wl->wl.wl_next; wl = (wordlist_l *) wl->wl.wl_next) { ; } /* Link nwl to end */ wl->wl.wl_next = (wordlist *) wl_to_append; wl_to_append->wl.wl_prev = (wordlist *) wl; } return wl_dst; /* Return combined wordlist */ } /* end of function wll_append */ /* This function appends word data, of the wordlist_l node "to_append" to * the existing values at wordlist_l node "dst". */ void wll_append_to_node(wordlist_l *dst, const wordlist_l *to_append) { /* Get sizes */ const size_t n_old = dst->n_char_word; const size_t n_new = to_append->n_char_word; const size_t n_total = n_old + n_new; const size_t n_elem_needed = n_total + 1; /* Resize if needed */ if (dst->n_elem_word_alloc < n_elem_needed) { const size_t n_elem_alloc = 2 * n_elem_needed; dst->wl.wl_word = TREALLOC( char, dst->wl.wl_word, n_elem_alloc); dst->n_elem_word_alloc = n_elem_alloc; } /* Do append */ { char *p_dst = dst->wl.wl_word + n_old; char * const p_src = to_append->wl.wl_word; (void) memcpy(p_dst, p_src, n_new); p_dst += n_new; *p_dst = '\0'; } dst->n_char_word = n_total; } /* end of function wll_append_to_node */ /* This function modifies word data in a word list node by building a new word * from the arrays supplied. These arrays may contain pieces of the word * being modified, with overlap and duplication of intervals allowed. Null * terminiations are not required on the input data. * * Parameters * wl_node: wordlist node being modified. Cannot be NULL. * n_input: Number of inputs * p_n_char_word: Array of length n_input of lengths of input strings, excluding trailing nulls * pp_word: Array of pointers to input character data. An entry may be NULL * iff the corrseponding value of p_n_char_word is 0. */ static void wl_modify_word(wordlist *wl_node, unsigned int n_input, const size_t *p_n_char_word, char **pp_word) { /* Find the number of chars of word data */ size_t n_char_word_new = 0; { /* have array */ /* Accumulate count of chars */ const size_t *p_n_char_word_cur = p_n_char_word; const size_t * const p_n_char_word_end = p_n_char_word + n_input; for ( ; p_n_char_word_cur != p_n_char_word_end; ++p_n_char_word_cur) { n_char_word_new += *p_n_char_word_cur; } } /* New allocation */ char *p_word_new; /* Process the segments. */ { /* no escapes */ /* + 1 for null after word */ const size_t n_byte_alloc = n_char_word_new + 1; /* New allocation */ p_word_new = TMALLOC(char, n_byte_alloc); /* New word. Build from input pieces */ { const size_t *p_n_char_word_cur = p_n_char_word; const size_t * const p_n_char_word_end = p_n_char_word + n_input; char **pp_word_cur = pp_word; char *p_dst = p_word_new; for ( ; p_n_char_word_cur < p_n_char_word_end; ++p_n_char_word_cur, ++pp_word_cur) { const size_t n_char_word_cur = *p_n_char_word_cur; (void) memcpy(p_dst, *pp_word_cur, n_char_word_cur); p_dst += n_char_word_cur; } *p_dst = '\0'; } } /* Free old and assign new */ txfree(wl_node->wl_word); wl_node->wl_word = p_word_new; } /* end of function wl_modify_word */ tmp_ns50wwy/src/frontend/parser/unixcom.c0000644000175000017500000001340114163340332020700 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 tmp_ns50wwy/src/frontend/parser/numparse.c0000644000175000017500000001561514163340332021061 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 #include #include #include "ngspice/ngspice.h" #include "ngspice/bool.h" #include "ngspice/ftedefs.h" #include "numparse.h" bool ft_strictnumparse = FALSE; static int get_decimal_number(const char **p_str, double *p_val); /* 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 -1. * 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 '_'. * * Return codes * +1: String represented an integer number that was converted to a double * but which can be stored as an int without loss of data * 0: String represented a non-integer number that was converted to a double * that may not be expressed as an integer. * -1: Conversion failure */ int ft_numparse(char **p_str, bool whole, double *p_val) { double mant; double expo; const char *p_cur = *p_str; /* position in string */ /* Parse the mantissa (or decimal number if no exponent) */ if (get_decimal_number(&p_cur, &mant) < 0) { return -1; } /* Now look for the scale factor or the exponent (can't have both). */ switch (*p_cur) { case 'e': case 'E': /* Parse another number. Note that a decimal number such as 1.23 * is allowed as the exponent */ ++p_cur; if (get_decimal_number(&p_cur, &expo) < 0) { expo = 0.0; --p_cur; /* The "E" was not part of the number */ } break; case 't': case 'T': expo = 12.0; ++p_cur; break; case 'g': case 'G': expo = 9.0; ++p_cur; break; case 'k': case 'K': expo = 3.0; ++p_cur; break; case 'u': case 'U': expo = -6.0; ++p_cur; break; case 'n': case 'N': expo = -9.0; ++p_cur; break; case 'p': case 'P': expo = -12.0; ++p_cur; break; case 'f': case 'F': expo = -15.0; ++p_cur; break; case 'm': case 'M': { char ch_cur; /* Can be either m, mil, or meg. */ if (((ch_cur = p_cur[1]) == 'e' || ch_cur == 'E') && (((ch_cur = p_cur[2]) == 'g') || ch_cur == 'G')) { expo = 6.0; p_cur += 3; } else if (((ch_cur = p_cur[1]) == 'i' || ch_cur == 'I') && (((ch_cur = p_cur[2]) == 'l') || ch_cur == 'L')) { expo = -6.0; mant *= 25.4; p_cur += 3; } else { /* plain m for milli */ expo = -3.0; ++p_cur; } break; } default: expo = 0.0; } /* p_cur is now pointing to the fist char after the number */ { /* If whole is true, it must be the end of the string */ const char ch_cur = *p_cur; if (whole && ch_cur != '\0') { return -1; } /* If ft_strictnumparse is true, the first character after the * string representing the number, if any, must be '_' */ if (ft_strictnumparse && ch_cur != '\0' && ch_cur != '_') { return -1; } } /* Remove the alpha and '_' characters after the number */ for ( ; ; ++p_cur) { const char ch_cur = *p_cur; if (!isalpha(ch_cur) && ch_cur != '_') { break; } } /* Return results */ { /* Value of number. Ternary operator used to prevent avoidable * calls to pow(). */ const double val = *p_val = mant * (expo == 0.0 ? 1.0 : pow(10.0, expo)); *p_str = (char *) p_cur; /* updated location in string */ if (ft_parsedb) { /* diagnostics for parsing the number */ fprintf(cp_err, "numparse: got %e, left = \"%s\"\n", val, p_cur); } /* Test if the number can be represented as an intger */ return (double) (int) val == val; } } /* end of function ft_numparse */ /* This function converts the string form of a decimal number at *p_str to * its value and returns it in *p_val. The location in *p_str is advanced * to the first character after the number if the conversion is OK and * is unchanged otherwise. * * Return codes * -1: Conversion failure. *p_val is unchanged * 0: Conversion OK. The string was not the representation of an integer * +1: Conversion OK. The string was an integer */ static int get_decimal_number(const char **p_str, double *p_val) { double sign = 1.0; /* default sign multiplier if missing is 1.0 */ const char *p_cur = *p_str; char ch_cur = *p_cur; /* 1st char */ bool f_is_integer = TRUE; /* assume integer */ /* Test for a sign */ if (ch_cur == '+') { /* Advance position in string. Sign unchanged */ ch_cur = *++p_cur; } else if (ch_cur == '-') { /* Advance position in string. Sign = -1 */ ch_cur = *++p_cur; sign = -1.0; } /* Ensure string either starts with a digit or a decimal point followed * by a digit */ if ((!isdigit(ch_cur) && ch_cur != '.') || ((ch_cur == '.') && !isdigit_c(p_cur[1]))) { return -1; } /* Parse and compute the number. Assuming 0-9 digits are contiguous and * increasing in char representation (true for ASCII and EBCDIC) */ double val = 0.0; for ( ; ; p_cur++) { const unsigned int digit = (unsigned int) *p_cur - (unsigned int) '0'; if (digit > 9) { /* not digit */ break; } val = val * 10.0 + (double) digit; } /* Handle fraction, if any */ if (*p_cur == '.') { const char *p0 = ++p_cur; /* start of fraction */ double numerator = 0.0; /* Not an integer expression (even if no fraction after the '.') */ f_is_integer = FALSE; /* Add the fractional part of the number */ for ( ; ; p_cur++) { const unsigned int digit = (unsigned int) *p_cur - (unsigned int) '0'; if (digit > 9) { /* not digit */ /* Add fractional part to intergral part from earlier */ val += numerator * pow(10, (double) (p0 - p_cur)); break; } numerator = numerator * 10.0 + (double) digit; } } /* end of case of fraction */ /* Return the value and update the position in the string */ *p_val = sign * val; *p_str = p_cur; return (int) f_is_integer; } /* end of function get_decimal_number */ tmp_ns50wwy/src/frontend/parser/std.c0000644000175000017500000000132314163340332020010 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 int compar(const void* a, const void* b); int compar(const void* a, const void* b) { NG_IGNORE(a); NG_IGNORE(b); return 0; } void qsort(void* base, size_t num, size_t size, int (*compar)(const void* a, const void* b)) { NG_IGNORE(base); NG_IGNORE(num); NG_IGNORE(size); NG_IGNORE(compar); } #endif #endif tmp_ns50wwy/src/frontend/parser/unixcom.h0000644000175000017500000000021214163340332020701 0ustar carstencarsten/************* * Header file for unixcom.c * 1999 E. Rouat ************/ #ifndef ngspice_UNIXCOM_H #define ngspice_UNIXCOM_H #endif tmp_ns50wwy/src/frontend/parser/complete.c0000644000175000017500000004443614163340332021042 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)); 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; if(cp_nocc) return; 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(cp_nocc) return; 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); } tmp_ns50wwy/src/frontend/parser/cshpar.c0000644000175000017500000000535514163340332020507 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 bool cp_no_histsubst = FALSE; /* perform history substitution by default */ /* 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); /* Test for valid wordlist */ if (!wlist) { return (wordlist *) NULL; } if (!wlist->wl_word) { wl_free(wlist); return (wordlist *) NULL; } if (!string) { /* cp_lexer read user data */ cp_event++; } pwlist(wlist, "Initial parse"); /* Do history substitution (!1, etc.) if enabled */ if (!cp_no_histsubst) { wlist = cp_histsubst(wlist); /* Test for valid wordlist */ if (!wlist) { return (wordlist *) NULL; } if (!wlist->wl_word) { wl_free(wlist); return (wordlist *) NULL; } pwlist(wlist, "After history substitution"); if (cp_didhsubst) { wl_print(wlist, stdout); putc('\n', stdout); } } /* end of case that history substitutions are allowed */ /* 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; } /* end of function cp_parse */ 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"); } tmp_ns50wwy/src/frontend/parser/backq.c0000644000175000017500000000514114163340332020301 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 } tmp_ns50wwy/src/frontend/parser/cshpar.h0000644000175000017500000000020714163340332020503 0ustar carstencarsten/************* * Header file for cshpar.c * 1999 E. Rouat ************/ #ifndef ngspice_CSHPAR_H #define ngspice_CSHPAR_H #endif tmp_ns50wwy/src/frontend/com_let.c0000644000175000017500000007373414163340332017363 0ustar carstencarsten#include #include #include "ngspice/bool.h" #include "ngspice/cpextern.h" #include "ngspice/dvec.h" #include "ngspice/fteext.h" #include "ngspice/ngspice.h" #include "ngspice/stringskip.h" #include "com_display.h" #include "com_let.h" #include "completion.h" /* Range of index values, such as 2:3 */ typedef struct index_range { int low; int high; } index_range_t; static void copy_vector_data(struct dvec *vec_dst, const struct dvec *vec_src); static void copy_vector_data_with_stride(struct dvec *vec_dst, const struct dvec *vec_src, int n_dst_index, const index_range_t *p_dst_index); static int find_indices(char *s, const struct dvec *vec_dst, index_range_t *p_index); static int get_index_values(char *s, int n_elem_this_dim, index_range_t *p_range); int get_one_index_value(const char *s, int *p_index); /* let = * let = if variable 'plainlet' is set * let [] = * = ... * * = | : * = "," | "] [" * = standard ngspice expression */ void com_let(wordlist *wl) { char *p, *s; index_range_t p_dst_index[MAXDIMS]; int n_dst_index; struct pnode *names = (struct pnode *) NULL; struct dvec *vec_src = (struct dvec *) NULL; char *rhs; /* Start of index NULL is a flag for no index */ char *p_index_start = (char *) NULL; /* let with no arguments is equivalent to display */ if (!wl) { com_display(NULL); return; } p = wl_flatten(wl); /* Everything after let -> string */ /* Separate vector name from RHS of assignment */ n_dst_index = 0; if ((rhs = strchr(p, '=')) == (char *) NULL) { fprintf(cp_err, "Error: bad let syntax\n"); txfree(p); return; } *rhs++ = '\0'; /* Handle indexing. At start, p = LHS; rhs = RHS. If index is found * p = leftmost part of orig p up to first '['. So p always * becomes the vector name, possibly with some spaces at the end. */ if ((s = strchr(p, '[')) != NULL) { /* This null makes the dest vector name a null-terminated string */ *s = '\0'; p_index_start = s + 1; } /* "Remove" any spaces at the end of the vector name at p by stepping * from the end of the word to the first charatcter that is not * whitespace and then overwriting the next character (which will be * the original NULL if there was no whitespace) with a NULL. */ { char *q; for (q = p + strlen(p) - 1; *q <= ' ' && p <= q; q--) { ; } *++q = '\0'; } /* Sanity check */ if (eq(p, "all") || strchr(p, '@') || *p == '\0' || isdigit_c(*p)) { fprintf(cp_err, "Error: bad variable name \"%s\"\n", p); goto quit; } /* Locate the vector being assigned values. If NULL, the vector * does not exist */ struct dvec *vec_dst = vec_get(p); if (vec_dst != (struct dvec *) NULL) { /* Fix-up dimension count and limit. Sometimes these are * not set properly. If not set, give the vector 1 dimension and * ensure the right length */ if (vec_dst->v_numdims < 1) { vec_dst->v_numdims = 1; } if (vec_dst->v_numdims == 1) { vec_dst->v_dims[0] = vec_dst->v_length; } } /* If the vector was indexed, find the indices */ if (p_index_start != (char *) NULL) { /* Test for an attempt to index an undefined vector */ if (vec_dst == (struct dvec *) NULL) { fprintf(cp_err, "When creating a new vector, it cannot be indexed.\n"); goto quit; } if (find_indices(p_index_start, vec_dst, p_dst_index) != 0) { txfree(p); return; } n_dst_index = vec_dst->v_numdims; } /* end of case that an indexing bracket '[' was found */ /* Evaluate rhs */ /* Just copy a vector. rhs has to be a valid existing vector name May be used to copy vectors with forbidden characters in their names into a vector with a valid name.*/ if (cp_getvar("plainlet", CP_BOOL, NULL, 0)) { vec_src = vec_get(rhs); if (vec_src == (struct dvec *) NULL) { fprintf(cp_err, "Error: Can't evaluate \"%s\"\n", rhs); goto quit; } } /* evaluate the rhs expression as usual, math characters may not be used in vec names, the expression parser then will complain about a syntax error */ else { if ((names = ft_getpnames_from_string( rhs, TRUE)) == (struct pnode*)NULL) { fprintf(cp_err, "Error: RHS \"%s\" invalid\n", rhs); goto quit; } if ((vec_src = ft_evaluate(names)) == (struct dvec*)NULL) { fprintf(cp_err, "Error: Can't evaluate \"%s\"\n", rhs); goto quit; } } if (vec_src->v_link2) { fprintf(cp_err, "Warning: extra wildcard values ignored\n"); } /* Fix-up dimension count and limit. Sometimes these are * not set properly. If not set, give the vector 1 dimension and ensure * the right length */ if (vec_src->v_numdims < 1) { vec_src->v_numdims = 1; } if (vec_src->v_numdims == 1) { vec_src->v_dims[0] = vec_src->v_length; } if (vec_dst == (struct dvec *) NULL) { /* p is not an existing vector. So make a new one equal to vec_src * in all ways, except enforce that it is a permanent vector. */ vec_dst = dvec_alloc(copy(p), vec_src->v_type, vec_src->v_flags | VF_PERMANENT, vec_src->v_length, NULL); copy_vector_data(vec_dst, vec_src); vec_new(vec_dst); /* Add tp current plot */ cp_addkword(CT_VECTOR, vec_dst->v_name); } /* end of case of new vector */ else { /* Existing vector.*/ if (n_dst_index == 0) { /* Not indexed, so make equal to source vector as if it * was a new vector, except reuse the allocation if it * is the same type (real/complex) and the allocation size * is sufficient but not too large (>2X) . */ if (isreal(vec_dst) == isreal(vec_src) && vec_dst->v_alloc_length >= vec_src->v_length && vec_dst->v_alloc_length <= 2 * vec_src->v_length) { vec_dst->v_length = vec_src->v_length; copy_vector_data(vec_dst, vec_src); } else { /* Something not OK, so free and allocate again */ int n_elem_alloc = vec_src->v_alloc_length; if (isreal(vec_dst)) { tfree(vec_dst->v_realdata); } else { /* complex */ tfree(vec_dst->v_compdata); } if (isreal(vec_src)) { vec_dst->v_realdata = TMALLOC(double, n_elem_alloc); } else { /* complex source */ vec_dst->v_compdata = TMALLOC(ngcomplex_t, n_elem_alloc); } /* Make the destination vector the right data type. A few * extra () added to keep some compilers from warning. */ vec_dst->v_flags = (short int) ( ((int) vec_dst->v_flags & ~(VF_REAL | VF_COMPLEX)) | ((int) vec_src->v_flags & (VF_REAL | VF_COMPLEX))); vec_dst->v_alloc_length = vec_src->v_alloc_length; vec_dst->v_length = vec_src->v_length; copy_vector_data(vec_dst, vec_src); } } /* Else indexed. In this case, the source data must fit the indexed * range */ else { { int n_dst_elem = 1; int i; for (i = 0; i < n_dst_index; ++i) { index_range_t *p_range_cur = p_dst_index + i; n_dst_elem *= p_range_cur->high - p_range_cur->low + 1; } /* Check # elem required vs available */ if (n_dst_elem != vec_src->v_length) { const int v_length = vec_src->v_length; const bool f_1 = v_length == 1; (void) fprintf(cp_err, "Data for an index vector must " "fit exactly. The indexed range required %d " "element%s to fill it, but there %s %d " "element%s supplied.\n", n_dst_elem, n_dst_elem == 1 ? "" : "s", f_1 ? "was" : "were", v_length, f_1 ? "" : "s"); goto quit; } } /* Real source data can be put into a complex destination, * but the other way around is not possible */ if (isreal(vec_dst) && iscomplex(vec_src)) { (void) fprintf(cp_err, "Complex data cannot be used " "to fill an array of real data.\n"); goto quit; } /* OK to copy, so copy */ copy_vector_data_with_stride(vec_dst, vec_src, n_dst_index, p_dst_index); } /* end of indexed vector */ } /* end of existing vector */ vec_dst->v_minsignal = 0.0; /* How do these get reset ??? */ vec_dst->v_maxsignal = 0.0; vec_dst->v_scale = vec_src->v_scale; quit: /* va: garbage collection for vec_src, if ft_evaluate() created a * new vector while evaluating pnode `names' */ if (names != (struct pnode *) NULL) { if (!names->pn_value && vec_src) { vec_free(vec_src); } /* frees also vec_src, if pnode `names' is simple value */ free_pnode(names); } txfree(p); } /* end of function com_let */ /* Process indexing portion of a let command. On entry, s is the address * of the first byte after the first opening index bracket */ static int find_indices(char *s, const struct dvec *vec_dst, index_range_t *p_index) { const int v_numdims_dst = vec_dst->v_numdims; const int * const v_dims_dst = vec_dst->v_dims; int dim_cur = 0; /* current dimension being set */ /* Can be either comma-separated or individual dimensions */ if (strchr(s, ',') != 0) { /* has commas */ char *p_end; while ((p_end = strchr(s, ',')) != (char *) NULL) { *p_end = '\0'; if (dim_cur == v_numdims_dst) { (void) fprintf(cp_err, "Too many dimensions given.\n"); return -1; } if (get_index_values(s, v_dims_dst[dim_cur], p_index + dim_cur) != 0) { (void) fprintf(cp_err, "Dimension ranges " "for dimension %d could not be found.\n", dim_cur + 1); return -1; } ++dim_cur; s = p_end + 1; /* after (former) comma */ } /* end of loop over comma-separated indices */ /* Must be one more index ending with a bracket */ if ((p_end = strchr(s, ']')) == (char *) NULL) { (void) fprintf(cp_err, "Final dimension was not found.\n"); return -1; } *p_end = '\0'; if (dim_cur == v_numdims_dst) { (void) fprintf(cp_err, "Final dimension exceeded maximum number.\n"); return -1; } if (get_index_values(s, v_dims_dst[dim_cur], p_index + dim_cur) != 0) { (void) fprintf(cp_err, "Dimension ranges " "for last dimension (%d) could not be found.\n", dim_cur + 1); return -1; } ++dim_cur; s = p_end + 1; /* Only white space is allowed after closing brace */ if (*(s = skip_ws(s)) != '\0') { (void) fprintf(cp_err, "Invalid text was found " "after dimension data for vector: \"%s\".\n", s); return -1; } } /* end of case x[ , , ] */ else { /* x[][][] */ char *p_end; while ((p_end = strchr(s, ']')) != (char *) NULL) { *p_end = '\0'; if (dim_cur == v_numdims_dst) { (void) fprintf(cp_err, "Too many dimensions given. " "Only %d are present.\n", v_numdims_dst); return -1; } if (get_index_values(s, v_dims_dst[dim_cur], p_index + dim_cur) != 0) { (void) fprintf(cp_err, "Dimension ranges " "for dimension %d could not be found.\n", dim_cur + 1); return -1; } ++dim_cur; s = p_end + 1; /* after (former) ']' */ if (*(s = skip_ws(s)) == '\0') { /* reached end */ break; } /* Not end of expression, so must be '[' */ if (*s != '[') { (void) fprintf(cp_err, "Dimension bracket '[' " "for dimension %d could not be found.\n", dim_cur + 1); return -1; } s++; /* past '[' */ } /* end of loop over individual bracketed entries */ if (dim_cur == 0) { /* Did not find a single ']' in the string */ (void) fprintf(cp_err, "The ']' for dimension 1 " "could not be found.\n"); return -1; } } /* end of case x[][][][] */ /* Finalize dimensions. There must be the same number or one less than * the number of dimensions of the vector. For the special case of one * less, the final dimension is set to the full range of the last * dimension. Note that checks for too many dimensions have already * been performed while the index information was found. */ if (dim_cur != v_numdims_dst) { /* special case or error */ if (dim_cur == v_numdims_dst - 1) { /* special case */ index_range_t * const p_index_last = p_index + dim_cur; p_index_last->low = 0; p_index_last->high = vec_dst->v_dims[dim_cur] - 1; } else { (void) fprintf(cp_err, "Error: Only %d dimensions " "were supplied, but %d are needed. The last dimension " "may be omitted, in which case it will default to the " "full range of that dimension.\n", dim_cur, v_numdims_dst); } } return 0; } /* end of function find_indices */ /* Convert expresion expr -> low and high ranges equal or * expression expr1 : epr2 -> low = expr1 and high = expr2. * Values are tested to ensure they are positive and that the low * value does not exceed the high value. * * If expr1 is whitespace or empty, it defaults to 0. For high, the * largest possible values is used. */ static int get_index_values(char *s, int n_elem_this_dim, index_range_t *p_range) { char *p_colon; if ((p_colon = strchr(s, ':')) == (char *) NULL) { /* One expression */ if (get_one_index_value(s, &p_range->low) != 0) { (void) fprintf(cp_err, "Error getting index.\n"); return -1; } p_range->high = p_range->low; } else { /* l:h. If l defaults to 0 and h to dim size - 1 */ *p_colon = '\0'; { const int rc = get_one_index_value(s, &p_range->low); if (rc != 0) { if (rc < 0) { /* error */ (void) fprintf(cp_err, "Error getting low range.\n"); return -1; } /* +1 -> Else use default */ p_range->low = 0; } } s = p_colon + 1; /* past (former) colon */ { const int rc = get_one_index_value(s, &p_range->high); if (rc != 0) { if (rc < 0) { /* error */ (void) fprintf(cp_err, "Error getting high range.\n"); return -1; } /* +1 -> Else use default */ p_range->high = n_elem_this_dim - 1; } } /* Ensure ranges given were valid */ if (p_range->low > p_range->high) { (void) fprintf(cp_err, "Error: low range (%d) is greater " "than high range (%d).\n", p_range->low, p_range->high); return -1; } if (p_range->high >= n_elem_this_dim) { (void) fprintf(cp_err, "Error: high range (%d) exceeds " "the maximum value (%d).\n", p_range->high, n_elem_this_dim - 1); return -1; } } return 0; } /* end of function get_index_values */ /* Get an index value * * Return codes * +1: String empty or all whitespace * 0: Normal * -1: Error */ int get_one_index_value(const char *s, int *p_index) { /* Test for a string of whitespace */ if (*(s = skip_ws(s)) == '\0') { return +1; } /* Parse the expression */ struct pnode * const names = ft_getpnames_from_string(s, TRUE); if (names == (struct pnode *) NULL) { (void) fprintf(cp_err, "Unable to parse index expression.\n"); return -1; } /* Evaluate the parsing */ struct dvec * const t = ft_evaluate(names); if (t == (struct dvec *) NULL) { (void) fprintf(cp_err, "Unable to evaluate index expression.\n"); free_pnode_x(names); return -1; } int xrc = 0; if (t->v_link2 || t->v_length != 1 || !t->v_realdata) { fprintf(cp_err, "Index expression is not a real scalar.\n"); xrc = -1; } else { const int index = (int) floor(t->v_realdata[0] + 0.5); if (index < 0) { printf("Negative index (%d) is not allowed.\n", index); xrc = -1; } else { /* index found ok */ *p_index = index; } } /* Free resources */ if (names->pn_value != (struct dvec *) NULL) { /* allocated value given to t */ vec_free_x(t); } free_pnode_x(names); return xrc; } /* end of function get_one_index_value */ /* Copy vector data and its metadata */ static void copy_vector_data(struct dvec *vec_dst, const struct dvec *vec_src) { const size_t length = (size_t) vec_src->v_length; int n_dim = vec_dst->v_numdims = vec_src->v_numdims; (void) memcpy(vec_dst->v_dims, vec_src->v_dims, (size_t) n_dim * sizeof(int)); if (isreal(vec_src)) { (void) memcpy(vec_dst->v_realdata, vec_src->v_realdata, length * sizeof(double)); } else { (void) memcpy(vec_dst->v_compdata, vec_src->v_compdata, length * sizeof(ngcomplex_t)); } } /* end of function copy_vector_data */ /* Copy vector data and its metadata using stride info */ static void copy_vector_data_with_stride(struct dvec *vec_dst, const struct dvec *vec_src, int n_dim, const index_range_t *p_range) { /* Offsets and related expressions at different levels of indexing * given in elements * * Example * Dimensions: 4 * Dimension extents: 10 X 8 X 100 X 5 * Selected ranges: 2:5 X 3:4 X 20:30 X 3:4 * Strides: 4000, 500, 5, 1 * Min offsets: 8000, 1500, 100, 3 -- offset to 1st * element of range * Cur cum offsets: 8000, 9500, 9600, 9603 (initial) * Cur index: 2, 3, 20, X (initial) * * Note that the strides are built from the highest dimension, * which always has stride 1, backwards. */ int p_stride_level[MAXDIMS]; /* Stride changing index by 1 at each level */ int p_offset_level_min[MAXDIMS]; /* Offset to 1st elem at level */ /* Current cumulative offset at each level. A -1 index is created * to handle the case of a single dimension more uniformly */ int p_offset_level_cum_full[MAXDIMS + 1]; int *p_offset_level_cum = p_offset_level_cum_full + 1; int p_index_cur[MAXDIMS]; /* Current range value at each level */ { const int index_max = n_dim - 1; p_stride_level[index_max] = 1; int *p_dim_ext = vec_dst->v_dims; int i; for (i = n_dim - 2; i >= 0; --i) { const int i1 = i + 1; p_stride_level[i] = p_stride_level[i1] * p_dim_ext[i1]; } } /* Initialize the minimum offsets, cumulative current offsets, and * current index based on ranges and strides */ { const int low_cur = p_index_cur[0] = p_range[0].low; p_offset_level_cum[0] = p_offset_level_min[0] = low_cur * p_stride_level[0]; } { int i; for (i = 1; i < n_dim; ++i) { const int low_cur = p_index_cur[i] = p_range[i].low; p_offset_level_cum[i] = p_offset_level_cum[i - 1] + (p_offset_level_min[i] = low_cur * p_stride_level[i]); } } /* There are three cases to consider: * 1) real dst <- real src * 2) complex dst <- complex src * 3) complex dst <- real src * * The first two can copy blocks at the highest dimesion and the can * be combined by generalizing to the data size (sizeof(double) or * sizeof(ngcomplex_t)) and offset of the data array. The third one * must be assigned element by element with 0's given to the imaginary * part of the data. */ if (isreal(vec_src) && iscomplex(vec_dst)) { /* complex dst <- real src */ int n_elem_topdim; /* # elements copied in top (stride 1) dimension */ ngcomplex_t *p_vec_data_dst = vec_dst->v_compdata; /* Location of data in dvec struct */ double *p_vec_data_src = vec_src->v_realdata; /* Location of data in dvec struct */ { const int index_max = n_dim - 1; const index_range_t * const p_range_max = p_range + index_max; n_elem_topdim = p_range_max->high - p_range_max->low + 1; } /* Copy all data. Each loop iteration copies all of the elements * at the highest dimension (which are contiguous). On entry to * the loop, the arrays are initialized so that the first element * can be copied, and they are updated in each iteration to * process the next element. Note that if this function is called, * there will always be at least one element to copy, so it * is always safe to copy then check for the end of data. */ { const int n_cpy = n_dim - 1; /* index where copying done */ const double *p_vec_data_src_end = p_vec_data_src + vec_src->v_length; /* end of copying */ for ( ; ; ) { /* Copy the data currently being located by the cumulative * offset and the source location */ { ngcomplex_t *p_dst_cur = p_vec_data_dst + p_offset_level_cum[n_cpy]; ngcomplex_t *p_dst_end = p_dst_cur + n_elem_topdim; for ( ; p_dst_cur < p_dst_end; ++p_dst_cur, ++p_vec_data_src) { p_dst_cur->cx_real = *p_vec_data_src; p_dst_cur->cx_imag = 0.0; } } /* Test for end of source data and exit if reached */ if (p_vec_data_src == p_vec_data_src_end) { break; /* Copy is complete */ } /* Move to the next destination location. Since the loop * was not exited yet, it must exist */ { int level_cur = n_cpy; /* Move back to the first dimension that is not at its * last element */ while (p_index_cur[level_cur] == p_range[level_cur].high) { --level_cur; } /* Now at the first dimension level that is not full. * Increment here and reset the highe ones to their * minimum values to "count up." */ ++p_index_cur[level_cur]; p_offset_level_cum[level_cur] += p_stride_level[level_cur]; for (++level_cur; level_cur <= n_cpy; ++level_cur) { p_index_cur[level_cur] = p_range[level_cur].low; p_offset_level_cum[level_cur] = p_offset_level_cum[level_cur - 1] + p_offset_level_min[level_cur]; } } /* end of block updating destination */ } /* end of loop copying from source to destination */ } /* end of block */ } /* end of case both real or complex */ else { /* Both real or complex (complex src and real dst not allowed) */ int n_byte_elem; /* Size of element */ int n_elem_topdim; /* # elements copied in top (stride 1) dimension */ int n_byte_topdim; /* contiguous bytes */ void *p_vec_data_dst; /* Location of data in dvec struct */ void *p_vec_data_src; /* Location of data in dvec struct */ { const int index_max = n_dim - 1; const index_range_t * const p_range_max = p_range + index_max; n_elem_topdim = p_range_max->high - p_range_max->low + 1; } if (isreal(vec_src)) { /* Both real */ n_byte_elem = (int) sizeof(double); n_byte_topdim = n_elem_topdim * (int) sizeof(double); p_vec_data_dst = vec_dst->v_realdata; p_vec_data_src = vec_src->v_realdata; } else { n_byte_elem = (int) sizeof(ngcomplex_t); n_byte_topdim = n_elem_topdim * (int) sizeof(ngcomplex_t); p_vec_data_dst = vec_dst->v_compdata; p_vec_data_src = vec_src->v_compdata; } /* Add the offset of the top dimension to all of the lower ones * since it will always be added when copying */ { int i; const int n_max = n_dim - 1; int offset_top = p_range[n_max].low; p_offset_level_cum[-1] = offset_top; for (i = 0; i < n_max; ++i) { p_offset_level_cum[i] += offset_top; } } /* Because the copies are being done in terms of bytes rather * than complex data elements or real data elements, convert * the strides and offsets from elements to bytes */ { p_offset_level_cum[-1] *= n_byte_elem; int i; const int n_max = n_dim - 1; for (i = 0; i < n_max; i++) { p_stride_level[i] *= n_byte_elem; p_offset_level_min[i] *= n_byte_elem; p_offset_level_cum[i] *= n_byte_elem; } } /* Copy all data. Each loop iteration copies all of the elements * at the highest dimension (which are contiguous). On entry to * the loop, the arrays are initialized so that the first element * can be copied, and they are updated in each iteration to * process the next element. Note that if this function is called, * there will always be at least one element to copy, so it * is always safe to copy then check for the end of data. */ { const int n_cpy = n_dim - 2; /* index where copying done */ const void *p_vec_data_src_end = (char *) p_vec_data_src + (size_t) (vec_src->v_length * n_byte_elem); /* end of copying */ for ( ; ; ) { /* Copy the data currently being located by the cumulative * offset and the source location */ (void) memcpy( (char *) p_vec_data_dst + p_offset_level_cum[n_cpy], p_vec_data_src, (size_t) n_byte_topdim); /* Move to the next source data and exit the loop if * the end is reached. * NOTE: EXITING BEFORE UPDATING THE DESTINATION WILL * PREVENT OVERRUNNING BUFFERS */ if ((p_vec_data_src = (char *) p_vec_data_src + n_byte_topdim) == p_vec_data_src_end) { break; /* Copy is complete */ } /* Move to the next destination location. Since the loop * was not exited yet, it must exist */ { int level_cur = n_cpy; /* Move back to the first dimension that is not at its * last element */ while (p_index_cur[level_cur] == p_range[level_cur].high) { --level_cur; } /* Now at the first dimension level that is not full. * Increment here and reset the highe ones to their * minimum values to "count up." */ ++p_index_cur[level_cur]; p_offset_level_cum[level_cur] += p_stride_level[level_cur]; for (++level_cur; level_cur <= n_cpy; ++level_cur) { p_index_cur[level_cur] = p_range[level_cur].low; p_offset_level_cum[level_cur] = p_offset_level_cum[level_cur - 1] + p_offset_level_min[level_cur]; } } /* end of block updating destination */ } /* end of loop copying from source to destination */ } /* end of block */ } /* end of case both real or complex */ } /* end of function copy_vector_data_with_stride */ tmp_ns50wwy/src/frontend/com_display.c0000644000175000017500000000416314163340332020232 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 "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); } tmp_ns50wwy/src/frontend/com_measure2.c0000644000175000017500000020151714163340332020312 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; static void measure_errMessage(const char *mName, const char *mFunction, const char *trigTarg, const char *errMsg, int chk_only); /** 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(const char *mName, const char *mFunction, const char *trigTarg, const 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 int 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 MEASUREMENT_FAILURE; } if (has_d2 && (d2 == NULL)) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec2); return MEASUREMENT_FAILURE; } if (dScale == NULL) { fprintf(cp_err, "Error: no scale vector.\n"); return MEASUREMENT_FAILURE; } 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 MEASUREMENT_OK; } 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 MEASUREMENT_OK; } 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 MEASUREMENT_OK; } 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 MEASUREMENT_OK; } 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; return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * Function: process an AT measurement statement which has been * parsed into a measurement structure. We make sure to interpolate * the value when appropriate. * ----------------------------------------------------------------- */ static int 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; if (meas->m_vec == NULL) { fprintf(stderr, "Error: Syntax error in meas line, missing vector\n"); return MEASUREMENT_FAILURE; } 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 MEASUREMENT_FAILURE; } if (dScale == NULL) { fprintf(cp_err, "Error: no such vector time, frequency or dc.\n"); return MEASUREMENT_FAILURE; } /* ----------------------------------------------------------------- * 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 MEASUREMENT_OK; } else if (dc_check && (i > 0) && (psvalue >= at) && (svalue <= at)) { meas->m_measured = pvalue + (at - psvalue) * (value - pvalue) / (svalue - psvalue); return MEASUREMENT_OK; } psvalue = svalue; pvalue = value; } meas->m_measured = NAN; return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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 int 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; if (meas->m_vec == NULL) { fprintf(cp_err, "Syntax error in meas line\n"); return MEASUREMENT_FAILURE; } d = vec_get(meas->m_vec); if (d == NULL) { fprintf(cp_err, "Error: no such vector as %s.\n", meas->m_vec); return MEASUREMENT_FAILURE; } /* ----------------------------------------------------------------- * 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 MEASUREMENT_FAILURE; } if (dScale == NULL) { fprintf(cp_err, "Error: no such vector as time, frquency or v-sweep.\n"); return MEASUREMENT_FAILURE; } 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"); return MEASUREMENT_FAILURE; } } 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"); return MEASUREMENT_FAILURE; } } } 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"); return MEASUREMENT_FAILURE; } return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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 int 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 MEASUREMENT_FAILURE; } 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 MEASUREMENT_FAILURE; } if (xScale == NULL) { fprintf(cp_err, "Error: no such vector as time.\n"); return MEASUREMENT_FAILURE; } /* 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); return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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 */ char* ptr; long num; if (varname == NULL) return TRUE; /* If varname is a simple number, don't use this as a name of a vetor, but as a number */ num = strtol(varname, &ptr, 10); if (*ptr == '\0') return FALSE; 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 = NULL, *pValue; double 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. equal sign missing ?\n"); return MEASUREMENT_FAILURE; } } if (strcasecmp(pValue, "LAST") == 0) { engVal1 = MEASURE_LAST_TRANSITION; } else { if (ft_numparse(&pValue, FALSE, &engVal1) < 0) { sprintf(errbuf, "bad syntax, cannot evaluate right hand side of %s=%s\n", pName, pValue); return MEASUREMENT_FAILURE; } } 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 MEASUREMENT_FAILURE; } pCnt ++; wl = wl->wl_next; } if (pCnt == 0) { if (pName) sprintf(errbuf, "bad syntax of %s\n", pName); else sprintf(errbuf, "bad syntax of\n"); return MEASUREMENT_FAILURE; } // valid vector if (measure_valid_vector(meas->m_vec) == 0) { sprintf(errbuf, "no such vector as '%s'\n", meas->m_vec); return MEASUREMENT_FAILURE; } // 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 MEASUREMENT_FAILURE; } /* 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 MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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; 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) { char *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) { char * const pName = strtok(p, "="); char * const pVal = strtok(NULL, "="); if (pVal == NULL) { sprintf(errbuf, "bad syntax of WHEN\n"); return MEASUREMENT_FAILURE; } if (strcasecmp(pName, "AT") == 0) { if (ft_numparse((char **) &pVal, FALSE, &meas->m_at) < 0) { sprintf(errbuf, "bad syntax of WHEN\n"); return MEASUREMENT_FAILURE; } } else { sprintf(errbuf, "bad syntax of WHEN\n"); return MEASUREMENT_FAILURE; } } else { if (measure_parse_stdParams(meas, wl, NULL, errbuf) == MEASUREMENT_FAILURE) return MEASUREMENT_FAILURE; } wl = wl->wl_next; pCnt ++; } return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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 MEASUREMENT_FAILURE; } 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) == MEASUREMENT_FAILURE) return MEASUREMENT_FAILURE; break; } wl = wl->wl_next; pCnt ++; } return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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) == MEASUREMENT_FAILURE) return MEASUREMENT_FAILURE; } else { if (measure_parse_stdParams(meas, words, wlTarg, errbuf) == MEASUREMENT_FAILURE) return MEASUREMENT_FAILURE; break; } words = words->wl_next; pcnt ++; } if (pcnt == 0) { sprintf(errbuf, "bad syntax of '%s'\n", trigTarg); return MEASUREMENT_FAILURE; } // valid vector if (measure_valid_vector(meas->m_vec) == 0) { sprintf(errbuf, "no such vector as '%s'\n", meas->m_vec); return MEASUREMENT_FAILURE; } return MEASUREMENT_OK; } /* ----------------------------------------------------------------- * 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); } tfree(mName); tfree(mAnalysis); 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"); tfree(mName); tfree(mAnalysis); 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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; } if(measure_at(meas, measFind->m_measured) == MEASUREMENT_FAILURE){ goto err_ret2; } meas->m_at = measFind->m_measured; } else { if (measure_at(meas, meas->m_at) == MEASUREMENT_FAILURE) { goto err_ret2; } } 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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) == MEASUREMENT_FAILURE) { 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; } tmp_ns50wwy/src/frontend/com_ghelp.c0000644000175000017500000000642514163340332017667 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/ */ #define BASE_HELP_URL "http://ngspice.sourceforge.net/docs" void com_ghelp(wordlist *wl) { #if defined(HAS_WINGUI) || defined(_MSC_VER) || defined(__MINGW32__) ||\ defined(X_DISPLAY_MISSING) || defined(NOINTHELP) com_help(wl); /* After brief help from com_help, add info on the web links to the * the PDF and HTML versions of the manual */ (void) out_printf("For further details please see the latest official " "ngspice manual in PDF format at\n" " " BASE_HELP_URL "/ngspice-manual.pdf\n" "or in HTML format at\n" " " BASE_HELP_URL "/ngspice-html-manual/manual.html\n\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 } tmp_ns50wwy/src/frontend/com_fft.h0000644000175000017500000000030114163340332017337 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 tmp_ns50wwy/src/frontend/com_fft.c0000644000175000017500000003302014163340332017336 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_quotes(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; { double val; if (ft_numparse(&s, FALSE, &val) <= 0 || val < 1.0) { fprintf(cp_out, "Number of averaged data points: 1\n"); smooth = 1; } else { smooth = (int) val; } } 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_quotes(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); } tmp_ns50wwy/src/frontend/com_asciiplot.c0000644000175000017500000000032414163340332020547 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"); } tmp_ns50wwy/src/frontend/device.h0000644000175000017500000000126214163340332017170 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 tmp_ns50wwy/src/frontend/cpitf.c0000644000175000017500000003473214163340332017041 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)); 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 end of s, r is the actual position in buf */ int ii; for (r = buf, ii = 0; *s; r++, s++, ii++) { *r = *s; if (ii > 500) { fprintf(stderr, "Warning: spinit path is too long.\n"); break; } } 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); /* parse the condition */ names = ft_getpnames_quotes(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 */ tmp_ns50wwy/src/frontend/com_echo.c0000644000175000017500000000136514163340332017504 0ustar carstencarsten/************* * com_echo.c ************/ #include "ngspice/ngspice.h" #include "ngspice/wordlist.h" #include "ngspice/bool.h" #include "com_echo.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); } tmp_ns50wwy/src/frontend/where.c0000644000175000017500000000176714163340332017050 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"); } */ } tmp_ns50wwy/src/frontend/dotcards.h0000644000175000017500000000025214163340332017532 0ustar carstencarsten/************* * Header file for dotcards.c * 1999 E. Rouat ************/ #ifndef ngspice_DOTCARDS_H #define ngspice_DOTCARDS_H wordlist *gettoks(char *s); #endif tmp_ns50wwy/src/frontend/newcoms.c0000644000175000017500000001356114163340332017404 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" /* * 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); } tmp_ns50wwy/src/frontend/get_phys_mem_size.c0000644000175000017500000000757314163340332021451 0ustar carstencarsten/* * Author: David Robert Nadeau * Site: http://NadeauSoftware.com/ * License: Creative Commons Attribution 3.0 Unported License * http://creativecommons.org/licenses/by/3.0/deed.en_US * Modified: Holger Vogt, 2019 */ #include "ngspice/ngspice.h" #include "resource.h" #if defined(_WIN32) #undef BOOLEAN #include #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) #include #include #include #if defined(BSD) && defined(HAVE_SYS_SYSCTL_H) #include #endif #else #error "Unable to define getMemorySize( ) for an unknown OS." #endif /** * Returns the size of physical memory (RAM) in bytes. */ unsigned long long getMemorySize(void) { #if defined(HAVE__PROC_MEMINFO) /* Cygwin , Linux--------------------------------- */ 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); return mem_got * 1024L; #elif defined(_WIN32) /* Windows. ------------------------------------------------- */ /* Use new 64-bit MEMORYSTATUSEX, not old 32-bit MEMORYSTATUS */ MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx( &status ); return (unsigned long long) status.ullTotalPhys; #elif defined(__unix__) || defined(__unix) || defined(unix) || \ (defined(__APPLE__) && defined(__MACH__)) /* UNIX variants. ------------------------------------------- */ /* Prefer sysctl() over sysconf() except sysctl() HW_REALMEM and HW_PHYSMEM */ #if defined(CTL_HW) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM64)) int mib[2]; mib[0] = CTL_HW; #if defined(HW_MEMSIZE) mib[1] = HW_MEMSIZE; /* OSX. --------------------- */ #elif defined(HW_PHYSMEM64) mib[1] = HW_PHYSMEM64; /* NetBSD, OpenBSD. --------- */ #endif int64_t size = 0; /* 64-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (unsigned long long) size; return 0L; /* Failed? */ #elif defined(_SC_AIX_REALMEM) /* AIX. ----------------------------------------------------- */ return (unsigned long long) sysconf(_SC_AIX_REALMEM) * (size_t) 1024L; #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) /* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */ return (unsigned long long) sysconf(_SC_PHYS_PAGES) * (unsigned long long) sysconf(_SC_PAGESIZE); #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) /* Legacy. -------------------------------------------------- */ return (unsigned long long) sysconf(_SC_PHYS_PAGES) * (unsigned long long) sysconf(_SC_PAGE_SIZE); #elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM)) && defined(HAVE_SYS_SYSCTL_H) /* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */ int mib[2]; mib[0] = CTL_HW; #if defined(HW_REALMEM) mib[1] = HW_REALMEM; /* FreeBSD. ----------------- */ #elif defined(HW_PYSMEM) mib[1] = HW_PHYSMEM; /* Others. ------------------ */ #endif unsigned long long size = 0; /* 32-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (unsigned long long) size; return 0L; /* Failed? */ #endif /* sysctl and sysconf variants */ #else return 0L; /* Unknown OS. */ #endif } tmp_ns50wwy/src/frontend/postcoms.h0000644000175000017500000000075314163340332017604 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 com_remzerovec(wordlist* wl); void destroy_const_plot(void); #endif tmp_ns50wwy/src/devload0000644000175000017500000000054314163340332015303 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 tmp_ns50wwy/src/tclspice.map0000644000175000017500000000007014163340332016242 0ustar carstencarstenTCLSPICE_0.2 { global: Spice_Init; local: *; }; tmp_ns50wwy/src/ngsconvert.c0000644000175000017500000003205414163340332016300 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 "ngspice/compatmode.h" #include "frontend/display.h" #include "../misc/mktemp.h" #include FILE *cp_in = NULL; FILE *cp_out = NULL; FILE *cp_err = NULL; FILE *cp_curin = NULL; FILE *cp_curout = NULL; FILE *cp_curerr = NULL; 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; int cp_maxhistlength = 0; bool cp_no_histsubst = FALSE; struct compat newcompat; 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; } #define TMALLOC(t, n) (t*) tmalloc(sizeof(t) * (size_t)(n)) #define TREALLOC(t, p, n) (t*) trealloc(p, sizeof(t) * (size_t)(n)) char * smktemp(char *id) { if (!id) id = "sp"; const char* const home = getenv("HOME"); if (home) { return tprintf("%s/"TEMPFORMAT, home, id, getpid()); } const char* const usr = getenv("USERPROFILE"); if (usr) { return tprintf("%s\\"TEMPFORMAT, usr, id, getpid()); } return tprintf(TEMPFORMAT, id, getpid()); } int inchar(FILE *fp) { #if !defined(__MINGW32__) 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; #elif return getc(fp); #endif } int input(FILE *fp) { REQUEST request; RESPONSE response; request.option = char_option; request.fp = fp; Input(&request, &response); return (inchar(fp)); } 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 (strdup(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 = strdup(buf); tfread(buf, 1, 16, fp); buf[16] = '\0'; pl->pl_date = strdup(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 = strdup(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 = strdup(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; 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 = strdup(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 = strdup(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 strdup("error"); } void out_printf(char *fmt, ...) { NG_IGNORE(fmt); } void out_send(char *string) { NG_IGNORE(string); } struct variable * cp_enqvar(const 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); } wordlist * cp_doalias(wordlist *wlist) {NG_IGNORE(wlist); return NULL;} void controlled_exit(int no){exit(no);} int disptype; tmp_ns50wwy/src/hist_info.c0000644000175000017500000007722314163340332016101 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 */ tmp_ns50wwy/src/winmain.h0000644000175000017500000000532014163340332015553 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); tmp_ns50wwy/src/ChangeLog0000644000175000017500000001347114163340332015520 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 tmp_ns50wwy/src/ngnutmeg.c0000644000175000017500000000432214163340332015731 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 tmp_ns50wwy/src/makeidx.c0000644000175000017500000000310014163340332015520 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); } tmp_ns50wwy/src/misc/0000755000175000017500000000000014163340332014673 5ustar carstencarstentmp_ns50wwy/src/misc/printnum.h0000644000175000017500000000040214163340332016714 0ustar carstencarsten/************* * Header file for printnum.c * 1999 E. Rouat ************/ #ifndef ngspice_PRINTNUM_H #define ngspice_PRINTNUM_H #include "ngspice/dstring.h" void printnum(char *buf, double num); int printnum_ds(DSTRING *p_dstring, double num); #endif tmp_ns50wwy/src/misc/tilde.h0000644000175000017500000000052414163340332016146 0ustar carstencarsten/************* * Header file for tilde.c * 1999 E. Rouat ************/ #ifndef ngspice_TILDE_H #define ngspice_TILDE_H char * tildexpand(const char *string); int get_local_home(size_t n_byte_buf, char **p_buf); #ifdef HAVE_PWD_H int get_usr_home(const char *usr, size_t n_byte_buf, char **p_buf); #endif #endif /* include guard */ tmp_ns50wwy/src/misc/string.c0000644000175000017500000011546014163340332016354 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* * String functions */ #include #include #include "ngspice/ngspice.h" #include "ngspice/stringutil.h" #include "ngspice/stringskip.h" #include "ngspice/dstring.h" /* Instantiations of string functions */ extern inline char *copy(const char *str); extern inline char *copy_substring(const char *str, const char *end); extern inline int scannum(const char *str); extern inline int substring(const char *sub, const char *str); static size_t get_kr_msb_factor(size_t n); static size_t kr_hash(size_t n, const char *p); static inline const char *next_substr( size_t n_char_pattern, const char *p_pattern, const char **pp_string, const char * const p_last, const size_t msb_factor, const size_t h_pattern, size_t *p_h_string); static bool can_overlap(size_t n_char_pattern, const char * const p_pattern); /* This function returns true if the string s begins with the * string p and false otherwise. */ int prefix(const char *p, const char *s) { while (*p && (*p == *s)) p++, s++; return *p == '\0'; } /* end of function prefix */ /* This function returns 1 if string begins with prefix and 0 otherwise. * Neither the prefix nor string needs a null termination. */ int prefix_n(size_t n_char_prefix, const char *prefix, size_t n_char_string, const char *string) { /*Test that string is long enough */ if (n_char_prefix > n_char_string) { return 0; } return memcmp(prefix, string, n_char_prefix) == 0; } /* end of function prefix_n */ /* This function allocates a buffer and copies the specified number of * characters from the input string into the buffer followed by a * terminating null. * * Paramters * str: String to copy * n_char: Number of characters to copy * * Return values * NULL: Allocation failure * otherwise: The initialized string. */ char *dup_string(const char *str, size_t n_char) { char *p = TMALLOC(char, n_char + 1); if (p != NULL) { (void) memcpy(p, str, n_char + 1); p[n_char] = '\0'; } return p; } /* end of function dup_string */ char *tvprintf(const char *fmt, va_list args) { char buf[1024]; char *p = buf; int size = sizeof(buf); int nchars; for (;;) { va_list ap; va_copy(ap, args); nchars = vsnprintf(p, (size_t) size, fmt, ap); va_end(ap); /* This case was previously handled by doubling the size of * the buffer for "compatibility to old implementations." * However, vsnprintf is defined in both C99 and SUSv2 from 1997. * There is a slight difference which does not affect this * usage, but both return negative values (possibly -1) on an * encoding error, which would lead to an infinte loop (until * memory was exhausted) with the old behavior */ if (nchars < 0) { controlled_exit(-1); } if (nchars < size) { /* String formatted OK */ break; } /* 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 */ /* 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) ? dup_string(p, (size_t) nchars) : 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 */ /* 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'; } /* end of function appendc */ /* Returns the unsigned number at *p_str or 0 if there is none. *p_str * points to the first character after the number that was read, so * it is possible to distingish between the value 0 and a missing number * by testing if the string has been advanced. */ int scannum_adv(char **p_str) { const char *str = *p_str; int i = 0; while (isdigit_c(*str)) { i = i * 10 + *(str++) - '0'; } *p_str = (char *) str; /* locate end of number */ return i; } /* end of function scannum_adv */ /* This function returns the integer at the current string location. * The string does not need to be null-terminated. * * Parameters * str: String containing the integer to return at the beginning * n: Number of characters in the string * p_value: Address where the integer is returned * * Return values * -1: No integer present * -2: Overflow * >0: Number of characters in the integer */ int get_int_n(const char *str, size_t n, int *p_value) { if (n == 0) { /* no string */ return -1; } unsigned int value = 0; const char *p_cur = str; const char * const p_end = str + n; bool f_neg; if (*p_cur == '-') { /* Check for leading negative sign */ f_neg = 1; ++p_cur; } else { f_neg = 0; } /* Iterate over chars until end or char that is not numeric */ for ( ; p_cur != p_end; ++p_cur) { char ch_cur = *str; if (!isdigit(ch_cur)) { /* Test for exit due to non-numeric char */ break; } /* Compute new value and check for overflow. */ const unsigned int value_new = 10 * value + (unsigned int) (ch_cur - '0'); if (value_new < value) { return -2; } value = value_new; } /* end of loop over digits */ /* Test for at least one digit */ if (p_cur == str + f_neg) { return -1; /* no digit */ } /* Test for overflow. * If negative, can be 1 greater (-2**n vs 2**n -1) */ if (value - (unsigned int) f_neg > (unsigned int) INT_MAX) { return -2; } /* Take negative if negative sign present. (This operation works * correctly if value == INT_MIN since -INT_MIN == INT_MIN */ *p_value = f_neg ? -(int) value : (int) value; return (int) (p_cur - str); /* number of chars in the number */ } /* end of function get_int_n */ /* 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'; } /* end of function cieq */ /* Case-insensitive string compare fore equialty with explicit length * given. Neither character array needs to be null terminated. By not * including the trailing null in the count, it can be used to check * for a prefix. This function is useful for avoiding string copies * to temporary buffers and the potential for buffer overruns that * can occur when using temporary buffers without checking lengths. */ int cieqn(const char *p, const char *s, size_t n) { size_t i; for (i = 0; i < n; ++i) { if (tolower_c(p[i]) != tolower_c(s[i])) { return FALSE; } } return TRUE; /* all chars matched */ } /* end of function cineq */ /* 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; } /* end of function ciprefix */ void strtolower(char *str) { if (!str) { return; } for (; *str; str++) { *str = tolower_c(*str); } } /* end of function strtolower */ void strtoupper(char *str) { if (!str) { return; } for (; *str; str++) { *str = toupper_c(*str); } } /* end of function strtoupper */ #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; } /* end of function cinprefix */ /* * 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; } /*-------------------------------------------------------------------------* * 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 gettok_noparens version. * It acts like gettok, except that it treats parens and commas like * whitespace. *-------------------------------------------------------------------------*/ char* nexttok_noparens(const char* s) { if (!s) return NULL; s = skip_ws(s); if (!*s) return NULL; for (; *s && !isspace_c(*s); s++) if (*s == '(') break; else if (*s == ')') break; else if (*s == ',') break; while (isspace_c(*s) || *s == ',' || *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 */ /* findtok_noparen() does the string scanning for gettok_noparens() but * does not allocate a token. Hence it is useful when a copy of the token * is not required */ void findtok_noparen(char **p_str, char **p_token, char **p_token_end) { char *str = *p_str; str = skip_ws(str); if (!*str) { *p_str = str; *p_token = (char *) NULL; return; } *p_token = str; /* Token starts after whitespace */ { char c; while ((c = *str) != '\0' && !isspace_c(c) && (c != '(') && (c != ')') && (c != ',') ) { str++; } } *p_token_end = str; str = skip_ws(str); *p_str = str; } /* end of function findtok_noparen */ /*-------------------------------------------------------------------------* * 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 *token, *token_e; findtok_noparen(s, &token, &token_e); if (token == (char *) NULL) { return (char *) NULL; /* return NULL if we come to end of line */ } return copy_substring(token, token_e); } /* end of function gettok_noparens */ /*-------------------------------------------------------------------------* * 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 space, 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, 1 if no left paren is found, -1 if left paren is the last character. * It is called from 'translate' (subckt.c). *-------------------------------------------------------------------------*/ int get_l_paren(char **s) { while (**s && (**s != '(')) (*s)++; if (!**s) return 1; (*s)++; if (**s == '\0') return -1; return 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, 1 if no right paren is found, and -1 if right paren is te last * character. It is called from 'translate' (subckt.c). *-------------------------------------------------------------------------*/ int get_r_paren(char **s) { while (**s && (**s != ')')) (*s)++; if (!**s) return 1; (*s)++; if (**s == '\0') return -1; return 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; } /* end of funtion model_name_match */ /* This function returns 1 if pattern is a substring anywhere in str and * 0 otherwise. A null pattern is considered a mismatch. * * Uses Karp-Rabin substring matching with base=256 and modulus=1009 */ int substring_n(size_t n_char_pattern, const char *p_pattern, size_t n_char_string, const char *p_string) { /* Test for a pattern to match */ if (n_char_pattern == 0) { return 0; } /* Test for a string of sufficient length */ if (n_char_pattern > n_char_string) { return 0; } /* Factor for rolling hash computation */ const size_t msb_factor = get_kr_msb_factor(n_char_pattern); const size_t h_pattern = kr_hash(n_char_pattern, p_pattern); size_t h_string = kr_hash(n_char_pattern, p_string); /* Compare at beginning. If hashes match, do full compare */ if (h_pattern == h_string && memcmp(p_pattern, p_string, n_char_pattern) == 0) { return 1; /* match at start */ } /* Compare at each possible starting point in the string */ const char *p_last = p_string + (n_char_string - n_char_pattern - 1); return next_substr(n_char_pattern, p_pattern, &p_string, p_last, msb_factor, h_pattern, &h_string) == (char *) NULL ? 0 : 1; } /* end of function substring_n */ /* This function initializes a scan for substring matches */ void substring_match_init(size_t n_char_pattern, const char *p_pattern, size_t n_char_string, const char *p_string, bool f_overlap, struct substring_match_info *p_scan_state) { /* Save input info into structure. Note that the strings are not * copied, so they must remain allocated and unaltered while the * search is in progress. */ p_scan_state->n_char_pattern = n_char_pattern; p_scan_state->p_pattern = p_pattern; p_scan_state->n_char_string = n_char_string; p_scan_state->p_string = p_string; /*** Calculate intermediate data ***/ /* Test for a pattern to match */ if (n_char_pattern == 0) { p_scan_state->f_done = TRUE; } /* Test for a string of sufficient length */ else if (n_char_pattern > n_char_string) { p_scan_state->f_done = TRUE; } else { p_scan_state->f_done = FALSE; /* Look for overlaps only if possible */ p_scan_state->f_overlap= f_overlap ? !can_overlap(n_char_pattern, p_pattern) : FALSE; p_scan_state->n_char_pattern_1 = n_char_pattern - 1; p_scan_state->msb_factor = get_kr_msb_factor(n_char_pattern); p_scan_state->h_pattern = kr_hash(n_char_pattern, p_pattern); p_scan_state->h_string = kr_hash(n_char_pattern, p_string); p_scan_state->p_last = p_string + (n_char_string - n_char_pattern - 1); } return; } /* end of function substring_match_init */ /* This function finds the next substring match * * Parameter * p_scan_state: Address of struct substring_match_info initialized by * substring_match_init() * * Return value * NULL if there is no match or the address of the next match otherwise */ char *substring_match_next(struct substring_match_info *p_scan_state) { /* First test if there are no more possible matches */ if (p_scan_state->f_done) { return (char *) NULL; } /* Find next match, if any */ const char * const p_match = next_substr( p_scan_state->n_char_pattern, p_scan_state->p_pattern, &p_scan_state->p_string, p_scan_state->p_last, p_scan_state->msb_factor,p_scan_state->h_pattern, &p_scan_state->h_string); /* Update done status if changed */ if (p_match == (char *) NULL) { p_scan_state->f_done = TRUE; } else { if (!p_scan_state->f_overlap) { p_scan_state->p_string += p_scan_state->n_char_pattern_1; /* end of match */ p_scan_state->h_string = p_scan_state->h_pattern; } } return (char *) p_match; /* Return result */ } /* end of function substring_match_next */ #ifdef COMPILE_UNUSED_FUNCTIONS /* This funtion returns the locations of optionally non-overlapping substring * matches. For example, in the string aaaaa, aa is found in non-overlapping * locations at 0-based offsets 0 and 2 ahd with overlapping allowed atr * offsets 0, 1, 2, and 3 */ size_t get_substring_matches(size_t n_char_pattern, const char *p_pattern, size_t n_char_string, const char *p_string, size_t n_elem_buf, char *p_match_buf, bool f_overlap) { /* Test for a pattern to match */ if (n_char_pattern == 0) { return 0; } /* Test for a string of sufficient length */ if (n_char_pattern > n_char_string) { return 0; } /* Handle 0-sized buffer */ if (n_elem_buf == 0) { return 0; } /* Factor for rolling hash computation */ const size_t msb_factor = get_kr_msb_factor(n_char_pattern); const size_t h_pattern = kr_hash(n_char_pattern, p_pattern); size_t h_string = kr_hash(n_char_pattern, p_string); /* Compare at beginning. If hashes match, do full compare */ if (h_pattern == h_string && memcmp(p_pattern, p_string, n_char_pattern) == 0) { return 1; /* match at start */ } /* Compare at each possible starting point in the string */ const char *p_last = p_string + (n_char_string - n_char_pattern - 1); const size_t n_char_pattern_1 = n_char_pattern - 1; char **pp_match_buf_cur = &p_match_buf; char * const * const pp_match_buf_end = pp_match_buf_cur + n_elem_buf; /* Look for overlaps only if possible */ f_overlap = f_overlap ? !can_overlap(n_char_pattern, p_pattern) : FALSE; for ( ; pp_match_buf_cur < pp_match_buf_end; pp_match_buf_cur++) { const char *p_match = next_substr(n_char_pattern, p_pattern, &p_string, p_last, msb_factor, h_pattern, &h_string); if (p_match == (char *) NULL) { /* if no match, done */ return (int) (pp_match_buf_cur - &p_match_buf); } /* Save result */ *pp_match_buf_cur = (char *) p_match; /* If overlapping is not allowed, contniue search after the match. * Note that in this case, the string hash is the pattern hash. */ if (!f_overlap) { p_string += n_char_pattern_1; /* end of match */ h_string = h_pattern; } } /* end of loop over string */ return n_elem_buf; /* full buffer */ } /* end of funtion get_substring_matches */ #endif /* COMPILE_UNUSED_FUNCTIONS */ /* This function determines if a pattern can allow overlapping matches. * For example, the pattern "starts" would have overlapped matches in the * string "startstarts". * * Remarks * While not directly related to this function, there is only a binary yes/no * interest regarding overlap rather than an offset into the the string where * such overlap may occur. That is because the hash value is being computed * incremetally, so the only time when there is substantial computational * savings in this approach is when the hash value is known, as it would be * at the end of a match (since the hash of the pattern is knonw.) */ static bool can_overlap(size_t n_char_pattern, const char * const p_pattern) { if (n_char_pattern < 2) { /* does not matter */ return TRUE; } /* Find the last occurrance of the first character */ const char * const p_end = p_pattern + n_char_pattern; const char *p_cur = p_end - 1; const char ch_first = *p_pattern; for ( ; p_cur > p_pattern; --p_cur) { if (*p_cur == ch_first) { break; } } /* end of loop finding the first char */ /* Test for no duplicate */ if (p_cur == p_pattern) { /* not found */ return FALSE; /* no duplicate so cannot overlap */ } /* Now must match from this char onward to overlap */ const char *p_src = p_pattern; for ( ; p_cur != p_end; ++p_cur, ++p_src) { if (*p_cur != *p_src) { /* comparing 'b' to 'd' in "abcad" * for example */ return FALSE; /* Mismatch, so not an overlap */ } } /* end of loop finding the first char */ return TRUE; /* Matched to end of word */ } /* end of function can_overlap */ /* Prime number of Karp-Rabin hashing. Tradeoff between number of hash * collisions and number of times modulus must be taken. */ #define KR_MODULUS 1009 /* Compute (256^(n-1))%KR_MODULUS */ static size_t get_kr_msb_factor(size_t n) { size_t i; size_t factor = 1; const size_t n_itr = n - 1; for (i = 0; i < n_itr; ++i) { size_t factor_new = (factor << 8); if (factor_new < factor) { /* overflow */ factor %= KR_MODULUS; /* take modulus */ factor <<= 8; /* and recompute */ } } /* end of loop building factor */ /* Return the factor after final modulus if necessary */ if (factor >= KR_MODULUS) { factor %= KR_MODULUS; } return factor; } /* end of function get_kr_msb_factor */ /* Compute KR hash assuming n >= 1 */ static size_t kr_hash(size_t n, const char *p) { const char * const p_end = p + n; size_t hash = *(unsigned char *) p; for (p++; p < p_end; p++) { unsigned char ch = *(unsigned char *) p; size_t hash_new = (hash << 8) + ch; if (hash_new < hash) { /* overflow */ hash %= KR_MODULUS; /* take modulus */ hash = (hash << 8) + ch; /* and recompute */ } else { /* no overflow, so no need for modulus yet */ hash = hash_new; } } /* end of loop hasing chars */ /* Do final modulus if necessary */ if (hash >= KR_MODULUS) { hash %= KR_MODULUS; } return hash; } /* end of function kr_hash */ /* This function locates the next substring match. It is intended to be called * as part of the scanning of a string for a substring * * Parameters * n_char_pattern: Length of pattern to find * p_pattern: Pattern to find. Need not be null-terminated * pp_string: Address containing the current location in the string. Updated * if a match is found. * p_last: Address of last possible location of a match * msb_factor: Constant related to hash update * h_pattern: Computed hash of pattern * p_h_string: Address containing the current hash value of the location * in the string being considered. It is updated in the function. * * Return value * NULL if no substring, or the address of the substring if one exists. */ static inline const char *next_substr( size_t n_char_pattern, const char *p_pattern, const char **pp_string, const char * const p_last, const size_t msb_factor, const size_t h_pattern, size_t *p_h_string) { const char *p_string = *pp_string; size_t h_string = *p_h_string; for ( ; ; ) { /* Update hash for next starting point at p_string + 1 */ if ((h_string = (((h_string - (unsigned char) p_string[0] * msb_factor) << 8) + (size_t) p_string[n_char_pattern]) % KR_MODULUS) > KR_MODULUS) { /* negative value when signed */ h_string += KR_MODULUS; } ++p_string; /* step to next starting point */ /* Compare at current starting point. If hashes match, * do full compare */ if (h_pattern == h_string && memcmp(p_pattern, p_string, n_char_pattern) == 0) { *pp_string = p_string; /* Update string location */ *p_h_string = h_string; /* and hash for another call */ return p_string; /* match here */ } /* Exit with no match if at last starting point */ if (p_string == p_last) { return (char *) NULL; /* no match found */ } } /* end of loop over starting points in string */ } /* end of function next_substr */ /* This function returns TRUE if '\0' is among the n characters at p and * FALSE otherwise. */ static inline bool have_null(size_t n, const char *p) { /* Scan backwards to make the common case of using a null termination * of a string for the null char be faster */ const char *p_cur = p + n - 1; for ( ; p_cur >= p; --p_cur) { /* Locate '\0' among the chars */ if (*p_cur == '\0') { /* found */ return TRUE; } } return FALSE; } /* end of function have_null */ /* This function "finds a needle in a haystack" aka the first occurrence of * any character of needle in haystack. NULL is returned if none is found. * haystack must be terminated with '\0'. * * Remarks * p_needle does not need to be null terminated. In fact, a null can be * included among the characters to be located so that this funtion will * locate the end of haystack if none of the other characters is found and * would guarantee that the returned value is not NULL. * * The case of a '\0' included among the chars to locate is treated as a * special case for improved efficiency. * * For a sufficiently large haystack, further gains in performance can be * achieved by analyzing the characteristics of the needle values and * developing comparisons based on bit values or range values. As a * trivial example, for the needle string "01234567", instead of 8 * comparisons for the 8 values, 2 comparisons can be used by comparing * against >= 0 and against <= 7. Without a large enough haystack, the * computational time required for the analysis would not be recovered. */ char *find_first_of(const char *haystack, unsigned int n_needle, const char *p_needle) { /* Hanldle case of nothing to find */ if (n_needle == 0) { return (char *) NULL; } const char * const p_needle_end = p_needle + n_needle; if (have_null(n_needle, p_needle)) { /* searching for '\0' */ for ( ; ; ++haystack) { /* iterate over straws in haystack */ const char straw = *haystack; const char *p_needle_cur = p_needle; for ( ; p_needle_cur != p_needle_end; ++p_needle_cur) { const char needle = *p_needle_cur; if (straw == needle) { /* found needle */ return (char *) haystack; } } /* end of loop over needles */ } /* end of loop over straws in haystack */ } /* end of case that '\0' among items being located */ /* Else '\0' is not among the items being located */ for ( ; ; ++haystack) { /* iterate over straws in haystack */ const char straw = *haystack; const char *p_needle_cur = p_needle; for ( ; p_needle_cur != p_needle_end; ++p_needle_cur) { const char needle = *p_needle_cur; if (straw == needle) { /* found needle */ return (char *) haystack; } } /* end of loop over needles */ if (straw == '\0') { /* entire haystack searched */ return (char *) NULL; } } /* end of loop over straws in haystack */ } /* end of function find_first_of */ /* This function returns TRUE if the string has any of the characters * '"', '\'' or '\\' */ bool has_escape_or_quote(size_t n, const char *str) { const char *str_end = str + n; for ( ; str != str_end; ++str) { const char ch_cur = *str; if (ch_cur == '"' || ch_cur == '\'' || ch_cur == '\\') { return TRUE; } } /* end of loop over chars in string */ return FALSE; } /* end of function may_have_eq */ tmp_ns50wwy/src/misc/Makefile.am0000644000175000017500000000134514163340332016732 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 tmp_ns50wwy/src/misc/dup2.h0000644000175000017500000000026614163340332015722 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 tmp_ns50wwy/src/misc/printnum.c0000644000175000017500000000222514163340332016714 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 #include "ngspice/ngspice.h" #include "printnum.h" int cp_numdgt = -1; static inline int get_num_width(double num) { int n; if (cp_numdgt > 1) { n = cp_numdgt; } else { n = 6; } if (num < 0.0 && n > 1) { n--; } return n; } /* end of function get_num_width */ /* This funtion writes num to buf. It can cause buffer overruns. The size of * buf is unknown, so cp_numdgt can be large enough to cause sprintf() * to write past the end of the array. */ void printnum(char *buf, double num) { int n = get_num_width(num); (void) sprintf(buf, "%.*e", n, num); } /* end of function printnum */ int printnum_ds(DSTRING *p_ds, double num) { const int n = get_num_width(num); return ds_cat_printf(p_ds, "%.*e", n, num); } /* end of function printnum_ds */ tmp_ns50wwy/src/misc/misc_time.c0000644000175000017500000000454014163340332017013 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 */ } tmp_ns50wwy/src/misc/alloc.c0000644000175000017500000000777114163340332016145 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. **********/ /* for SIZE_MAX */ #include /* 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 } /* end of function txfree */ #if 0 /* This function returns the product of a and b if it does not overflow. * * Return codes * 0: No overflow * 1: overflow */ static inline int product_overflow(size_t a, size_t b, size_t *p_n) { /* Some overflow conditions: * a == SIZE_MAX and b > 1 * a > 1 and b == SIZE_MAX * a * b < a * a * b < b */ if ((a == SIZE_MAX && b > 1) || (a > 1 && b == SIZE_MAX)) { return +1; } const size_t n = a * b; if (n < a || n < b) { return +1; } *p_n = n; return 0; } /* end of function product_overflow */ /* Print error related to allocating a product that cannot fit in a * size_t and exit. This function does not return. */ static void overflow_error(size_t num, size_t size) { (void) fprintf(stderr, "Cannot allocate %zu X %zu bytes: " "Product exceeds largest size_t = %zu.\n", num, size, SIZE_MAX); #if defined HAS_WINGUI || defined SHARED_MODULE controlled_exit(EXIT_FAILURE); #else exit(EXIT_FAILURE); #endif } /* end of function overflow_error */ #endif #endif /* #ifndef HAVE_LIBGC */ tmp_ns50wwy/src/misc/mktemp.c0000644000175000017500000000230414163340332016333 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 #ifndef TEMPFORMAT2 #define TEMPFORMAT "temp%s%d_%d" #endif char * smktemp(char *id) { if (!id) id = "sp"; const char* const home = getenv("HOME"); if (home) { return tprintf("%s"TEMPFORMAT, home, id, getpid()); } const char* const usr = getenv("USERPROFILE"); if (usr) { return tprintf("%s\\"TEMPFORMAT, usr, id, getpid()); } return tprintf(TEMPFORMAT, id, getpid()); } char* smktemp2(char* id, int n) { if (!id) id = "sp"; const char* const home = getenv("HOME"); if (home) { return tprintf("%s"TEMPFORMAT2, home, id, getpid(), n); } const char* const usr = getenv("USERPROFILE"); if (usr) { return tprintf("%s\\"TEMPFORMAT2, usr, id, getpid(), n); } return tprintf(TEMPFORMAT2, id, getpid(), n); } tmp_ns50wwy/src/misc/hash.c0000644000175000017500000010771014163340332015770 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() */ /* different return value: NGHASH_FUNC_PTR always returns NULL. This function returns the pointer, if _not_ successful, otherwise NULL */ void * nghash_delete_special(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(user_key); /* didn't find anything to 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() */ tmp_ns50wwy/src/misc/alloc.h0000644000175000017500000000040614163340332016136 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 tmp_ns50wwy/src/misc/getopt_bsd.h0000644000175000017500000000556214163340332017206 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__ */ tmp_ns50wwy/src/misc/misc_time.h0000644000175000017500000000047014163340332017016 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 tmp_ns50wwy/src/misc/dstring.c0000644000175000017500000004120414163340332016512 0ustar carstencarsten/* ----------------------------------------------------------------- FILE: dstring.c DESCRIPTION:This file contains the routines for manipulating dynamic strings. Copyright 2020 The ngspice team 3 - Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) Author: Jim Monte ----------------------------------------------------------------- */ #include #include #include #include #include #include #include "ngspice/dstring.h" static int ds_reserve_internal(DSTRING *p_ds, size_t n_byte_alloc_opt, size_t n_byte_alloc_min); /* Instantiations of dstring functions */ extern inline int ds_cat_str(DSTRING *p_ds, const char *sz); extern inline int ds_cat_char(DSTRING *p_ds, char c); extern inline int ds_cat_ds(DSTRING *p_ds_dst, const DSTRING *p_ds_src); extern inline int ds_cat_mem(DSTRING *p_ds, const char *p_src, size_t n_char); extern inline int ds_set_length(DSTRING *p_ds, size_t length); extern inline void ds_clear(DSTRING *p_ds); extern inline char *ds_free_move(DSTRING *p_ds, unsigned int opt); extern inline char *ds_get_buf(DSTRING *p_ds); extern inline size_t ds_get_length(const DSTRING *p_ds); extern inline size_t ds_get_buf_size(const DSTRING *p_ds); /* This function initalizes a dstring using *p_buf as the initial backing * * Parameters * p_buf: Inital buffer backing the dstring * length_string: Length of string in the initial buffer * n_byte_data: Length of initial buffer. Must be at least 1 * type_buffer: Type of buffer providing initial backing * * Return codes * DS_E_OK: Init OK * DS_E_INVALID: n_byte_data = 0 length_string too long, * or unknown buffer type */ int ds_init(DSTRING *p_ds, char *p_buf, size_t length_string, size_t n_byte_buf, ds_buf_type_t type_buffer) { /* Validate buffer size */ if (n_byte_buf == 0) { return DS_E_INVALID; } /* Set current buffer */ p_ds->p_buf = p_buf; /* Set size of current string >= rather than > because this function * adds a terminating null */ if (length_string >= n_byte_buf) { return DS_E_INVALID; } p_ds->n_byte_alloc = n_byte_buf; p_ds->length = length_string; p_ds->p_buf[length_string] = '\0'; /* Set stack buffer */ if (type_buffer == ds_buf_type_stack) { p_ds->p_stack_buf = p_buf; p_ds->n_byte_stack_buf = n_byte_buf; } else if (type_buffer == ds_buf_type_heap) { p_ds->p_stack_buf = (char *) NULL; p_ds->n_byte_stack_buf = 0; } else { /* unknown buffer type */ return DS_E_INVALID; } return DS_E_OK; } /* end of function ds_init */ /* This function frees all memory used by the dstring. After calling this * function, the dstring should not be used again. */ void ds_free(DSTRING *p_ds) { if (p_ds->p_buf != p_ds->p_stack_buf) { txfree((void *) p_ds->p_buf); } } /* end of function ds_free */ /* Concatenate string */ int ds_cat_str_case(DSTRING *p_ds, const char *sz, ds_case_t case_type) { return ds_cat_mem_case(p_ds, sz, strlen(sz), case_type); } /* end of function ds_cat_str_case */ /* Concatenate character */ int ds_cat_char_case(DSTRING *p_ds, char c, ds_case_t case_type) { return ds_cat_mem_case(p_ds, &c, 1, case_type); } /* end of function ds_cat_char_case */ /* Concatenate another dstring */ int ds_cat_ds_case(DSTRING *p_ds_dst, const DSTRING *p_ds_src, ds_case_t case_type) { return ds_cat_mem_case(p_ds_dst, p_ds_src->p_buf, p_ds_src->length, case_type); } /* end of function ds_cat_ds_case */ /* General concatenation of a memory buffer. A terminating null is added. */ int ds_cat_mem_case(DSTRING *p_ds, const char *p_src, size_t n_char, ds_case_t type_case) { /* Resize buffer if necessary. Double required size, if available, * to reduce the number of allocations */ const size_t length_new = p_ds->length + n_char; const size_t n_byte_needed = length_new + 1; if (n_byte_needed > p_ds->n_byte_alloc) { if (ds_reserve_internal(p_ds, 2 * n_byte_needed, n_byte_needed) == DS_E_NO_MEMORY) { return DS_E_NO_MEMORY; } } /* For "as-is" can simply memcpy */ if (type_case == ds_case_as_is) { char *p_dst = p_ds->p_buf + p_ds->length; (void) memcpy(p_dst, p_src, n_char); p_dst += n_char; *p_dst = '\0'; p_ds->length = length_new; return DS_E_OK; } /* For lowercasing, work char by char */ if (type_case == ds_case_lower) { char *p_dst = p_ds->p_buf + p_ds->length; char *p_dst_end = p_dst + n_char; for ( ; p_dst < p_dst_end; p_dst++, p_src++) { *p_dst = (char) tolower(*p_src); } *p_dst_end = '\0'; p_ds->length = length_new; return DS_E_OK; } /* Uppercasing done like lowercasing. Note that it would be possible to * use a function pointer and select either tolower() or toupper() based * on type_case, but doing so may degrade performance by inhibiting * inlining. */ if (type_case == ds_case_upper) { char *p_dst = p_ds->p_buf + p_ds->length; char *p_dst_end = p_dst + n_char; for ( ; p_dst < p_dst_end; p_dst++, p_src++) { *p_dst = (char) toupper(*p_src); } *p_dst_end = '\0'; p_ds->length = length_new; return DS_E_OK; } return DS_E_INVALID; /* unknown case type */ } /* end of function ds_cat_mem_case */ /* Ensure minimum internal buffer size */ int ds_reserve(DSTRING *p_ds, size_t n_byte_alloc) { /* Return if buffer already large enough */ if (p_ds->n_byte_alloc >= n_byte_alloc) { return DS_E_OK; } return ds_reserve_internal(p_ds, n_byte_alloc, 0); } /* end of function ds_reserve */ /* This function resizes the buffer for the string and handles freeing * the original alloction, if necessary. It is assumed that the requested * size or sizes are larger than the current size. * * Parameters * p_ds: Dstring pointer * n_byte_alloc_opt: Optimal alloction amount * n_byte_alloc_min: Absolute minimum allocation amount or 0 if no * smaller amount can be allocated * * Return codes * DS_E_OK: At least the minimum allocation was performed * DS_E_NO_MEMORY: Unable to resize the buffer */ static int ds_reserve_internal(DSTRING *p_ds, size_t n_byte_alloc_opt, size_t n_byte_alloc_min) { size_t n_byte_alloc = n_byte_alloc_opt; /* Allocate. First try (larger) optimal size, and gradually fall back * to min size if that fails and one was provided. */ char * p_buf_new; if (n_byte_alloc_min == 0) { n_byte_alloc_min = n_byte_alloc_opt; } for ( ; ; ) { if ((p_buf_new = (char *) malloc(n_byte_alloc)) != (char *) NULL) { break; /* Allocated OK */ } if (n_byte_alloc == n_byte_alloc_min) { /* min alloc failed */ return DS_E_NO_MEMORY; } if ((n_byte_alloc /= 2) < n_byte_alloc_min) { /* last try */ n_byte_alloc = n_byte_alloc_min; } } /* end of loop trying smaller allocations */ /* Copy to the new buffer */ (void) memcpy(p_buf_new, p_ds->p_buf, p_ds->length + 1); /* If there already was a dynamic allocation, free it */ if (p_ds->p_buf != p_ds->p_stack_buf) { txfree((void *) p_ds->p_buf); } /* Assign new active buffer and its size */ p_ds->p_buf = p_buf_new; p_ds->n_byte_alloc = n_byte_alloc; return DS_E_OK; } /* end of function ds_reserve_nocheck */ /* Concatenate the result of a printf-style format * * Return codes as for ds_cat_vprintf */ int ds_cat_printf(DSTRING *p_ds, const char *sz_fmt, ...) { va_list p_arg; va_start(p_arg, sz_fmt); const int xrc = ds_cat_vprintf(p_ds, sz_fmt, p_arg); va_end(p_arg); return xrc; } /* end of function ds_cat_printf */ /* Concatenate the result of a printf-style format using va_list * * Return codes * DS_E_OK: Formatted OK * DS_E_NO_MEMORY: Unable to allocate memory to resize buffer * DS_E_INVALID: Invalid formatter / data */ int ds_cat_vprintf(DSTRING *p_ds, const char *sz_fmt, va_list p_arg) { /* Make a copy of the argument list in case need to format more than * once */ va_list p_arg2; va_copy(p_arg2, p_arg); const size_t n_byte_free = p_ds->n_byte_alloc - p_ds->length; char * const p_dst = p_ds->p_buf + p_ds->length; const int rc = vsnprintf(p_dst, n_byte_free, sz_fmt, p_arg); if (rc < 0) { /* Check for formatting error */ return DS_E_INVALID; } /* Else check for buffer large enough and set length if it is */ if ((size_t) rc < n_byte_free) { p_ds->length += (size_t) rc; return DS_E_OK; } /* Else buffer too small, so resize and format again */ { /* Double required size to avoid excessive allocations +1 for * null, which is not included in the count returned by snprintf */ const size_t n_byte_alloc_min = p_ds->length + (size_t) rc + (size_t) 1; if (ds_reserve_internal(p_ds, 2 * n_byte_alloc_min, n_byte_alloc_min) == DS_E_NO_MEMORY) { /* vsnprintf may have written bytes to the buffer. * Ensure that dstring in a consistent state by writing * a null at the length of the string */ p_ds->p_buf[p_ds->length] = '\0'; return DS_E_NO_MEMORY; } const size_t n_byte_free2 = p_ds->n_byte_alloc - p_ds->length; char * const p_dst2 = p_ds->p_buf + p_ds->length; const int rc2 = vsnprintf(p_dst2, n_byte_free2, sz_fmt, p_arg2); if (rc2 < 0) { /* Check for formatting error */ /* vsnprintf may have written bytes to the buffer. * Ensure that dstring in a consistent state by writing * a null at the length of the string */ p_ds->p_buf[p_ds->length] = '\0'; return DS_E_INVALID; } /* Else update length. No need to check buffer size since it was * sized to fit the string. */ p_ds->length += (size_t) rc2; return DS_E_OK; } } /* end of function ds_cat_vprintf */ /* Reallocate/free to eliminate unused buffer space. * * Return codes * DS_E_OK: Compacted OK * DS_E_NO_MEMORY: Compaction failed, but dstring still valid */ int ds_compact(DSTRING *p_ds) { const size_t n_byte_alloc_min = p_ds->length + 1; /* If the string is in the stack buffer, there is nothing to do */ if (p_ds->p_stack_buf == p_ds->p_buf) { return DS_E_OK; } /* Else if the string will fit in the stack buffer, copy it there and * free the allocation. */ if (p_ds->n_byte_stack_buf >= n_byte_alloc_min) { (void) memcpy(p_ds->p_stack_buf, p_ds->p_buf, n_byte_alloc_min); txfree((void *) p_ds->p_buf); p_ds->p_buf = p_ds->p_stack_buf; p_ds->n_byte_alloc = p_ds->n_byte_stack_buf; return DS_E_OK; } /* Else if the heap buffer is the minimum size, there is nothng to do */ if (n_byte_alloc_min == p_ds->n_byte_alloc) { return DS_E_OK; } /* Else realloc the heap buffer */ { void *p = TREALLOC(char, p_ds->p_buf, n_byte_alloc_min); if (p == NULL) { return DS_E_NO_MEMORY; } p_ds->p_buf = (char *) p; p_ds->n_byte_alloc = n_byte_alloc_min; return DS_E_OK; } } /* end of function ds_compact */ #ifdef DSTRING_UNIT_TEST #if defined (_WIN32) && !defined(CONSOLE) #include "ngspice/wstdio.h" #endif static void ds_print_info(DSTRING *p_ds, FILE *fp, const char *sz_id); static int ds_test_from_macro(FILE *fp); static int ds_test_from_stack(FILE *fp); static int ds_test_from_heap(FILE *fp); static int ds_test1(DSTRING *p_ds, FILE *fp); int ds_test(FILE *fp) { if (ds_test_from_macro(fp) != 0) { /* create from macro and run test */ return -1; } if (ds_test_from_stack(fp) != 0) { /* create from stack */ return -1; } if (ds_test_from_heap(fp) != 0) { /* create from heap */ return -1; } return 0; } /* end of function ds_test */ /* Run tests from a macro-created dstring */ static int ds_test_from_macro(FILE *fp) { DS_CREATE(ds, 10); (void) fprintf(fp, "Macro initialization\n"); return ds_test1(&ds, fp); } /* end of function ds_test_from_macro */ /* Run tests from a manually created stack-backed dstring */ static int ds_test_from_stack(FILE *fp) { static char p_buf[30] = "Hello World"; DSTRING ds; (void) fprintf(fp, "Stack initialization\n"); (void) ds_init(&ds, p_buf, 11, sizeof p_buf, ds_buf_type_stack); return ds_test1(&ds, fp); } /* end of function ds_test_from_stack */ /* Run tests from a heap-backed dstring */ static int ds_test_from_heap(FILE *fp) { char *p_buf = (char *) malloc(25); if (p_buf == (char *) NULL) { return -1; } (void) memcpy(p_buf, "Heap", 4); DSTRING ds; (void) ds_init(&ds, p_buf, 4, 25, ds_buf_type_heap); (void) fprintf(fp, "Heap initialization\n"); return ds_test1(&ds, fp); } /* end of function ds_test_from_heap */ static int ds_test1(DSTRING *p_ds, FILE *fp) { /* Print info on entry */ ds_print_info(p_ds, fp, "On entry to ds_test1\n"); int i; for (i = 0; i < 10; i++) { if (ds_cat_str(p_ds, "Abc") != 0) { (void) fprintf(fp, "Unable to cat string %d.\n", i); return -1; } if (ds_cat_str_case(p_ds, "Abc", ds_case_as_is) != 0) { (void) fprintf(fp, "Unable to cat string as-is %d.\n", i); return -1; } if (ds_cat_str_case(p_ds, "Abc", ds_case_upper) != 0) { (void) fprintf(fp, "Unable to cat string upper %d.\n", i); return -1; } if (ds_cat_str_case(p_ds, "Abc", ds_case_lower) != 0) { (void) fprintf(fp, "Unable to cat string lower %d.\n", i); return -1; } if (ds_cat_char(p_ds, 'z') != 0) { (void) fprintf(fp, "Unable to cat char %d.\n", i); return -1; } if (ds_cat_char_case(p_ds, 'z', ds_case_as_is) != 0) { (void) fprintf(fp, "Unable to cat char as-is %d.\n", i); return -1; } if (ds_cat_char_case(p_ds, 'z', ds_case_upper) != 0) { (void) fprintf(fp, "Unable to cat char upper %d.\n", i); return -1; } if (ds_cat_char_case(p_ds, 'Z', ds_case_lower) != 0) { (void) fprintf(fp, "Unable to cat char lower %d.\n", i); return -1; } if (ds_cat_mem(p_ds, "Zyxw", 4) != 0) { (void) fprintf(fp, "Unable to cat string %d.\n", i); return -1; } if (ds_cat_mem_case(p_ds, "Zyxw", 4, ds_case_as_is) != 0) { (void) fprintf(fp, "Unable to cat string as-is %d.\n", i); return -1; } if (ds_cat_mem_case(p_ds, "Zyxw", 4, ds_case_upper) != 0) { (void) fprintf(fp, "Unable to cat string upper %d.\n", i); return -1; } if (ds_cat_mem_case(p_ds, "Zyxw", 4, ds_case_lower) != 0) { (void) fprintf(fp, "Unable to cat string lower %d.\n", i); return -1; } if (ds_cat_printf(p_ds, "--- And finally a formatted %s (%d)", "string", i) != 0) { (void) fprintf(fp, "Unable to cat formatted string %d.\n", i); return -1; } /* Print info after cats */ ds_print_info(p_ds, fp, "After appending strings"); /* Truncate the string */ if (ds_set_length(p_ds, i * (size_t) 10) != 0) { (void) fprintf(fp, "Unable to set size %d.\n", i); return -1; } /* Print info after truncation */ ds_print_info(p_ds, fp, "After setting length"); /* Compact the string */ if (ds_compact(p_ds) != 0) { (void) fprintf(fp, "Unable to compact %d.\n", i); return -1; } /* Print info after compaction */ ds_print_info(p_ds, fp, "After compacting the string"); } /* end of loop over tests */ ds_free(p_ds); /* free buffer if allocated */ return 0; } /* end of funtion ds_test */ /* Print some info about the DSTRING */ static void ds_print_info(DSTRING *p_ds, FILE *fp, const char *sz_id) { (void) fprintf(fp, "%s: length = %zu; " "allocated buffer size = %zu; value = \"%s\"; " "address of active buffer = %p; " "address of stack buffer = %p; " "size of stack buffer = %zu\n", sz_id, ds_get_length(p_ds), ds_get_buf_size(p_ds), ds_get_buf(p_ds), ds_get_buf(p_ds), p_ds->p_stack_buf, p_ds->n_byte_stack_buf); } /* end of function ds_print_info */ #endif /* DSTRING_UNIT_TEST */ tmp_ns50wwy/src/misc/getopt_long_bsd.c0000644000175000017500000004077114163340332020221 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 */ tmp_ns50wwy/src/misc/ChangeLog0000644000175000017500000000350614163340332016451 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 tmp_ns50wwy/src/misc/util.h0000644000175000017500000000043114163340332016017 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 tmp_ns50wwy/src/misc/dup2.c0000644000175000017500000000044214163340332015711 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 tmp_ns50wwy/src/misc/ivars.h0000644000175000017500000000026214163340332016170 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 tmp_ns50wwy/src/misc/util.c0000644000175000017500000001654114163340332016023 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__) /* This function returns the path portion of name or "." if it is NULL. * The returned string is a new allocation that must be freed by the * caller */ char *ngdirname(const char *name) { /* If name not given, return "." */ if (name == (char *) NULL) { return dup_string(".", 1); } /* Offset to start of path name after any drive letter present */ const int start = (((name[0] >= 'a' && name[0] <= 'z') || (name[0] >= 'A' && name[0] <= 'Z')) && name[1] == ':') ? 2 : 0; /* Find last dir separator, if any, and return the input directory up to * that separator or including it if it is the 1st char after any drive *specification. */ { const char *p0 = name + start; /* 1st char past drive */ const char *p; for (p = p0 + strlen(name + start) - 1; p >= p0; --p) { const char ch_cur = *p; if (ch_cur == '/' || ch_cur == '\\') { /* at last dir sep */ /* Stop copy at last dir sep or right after if * it is the first char after any drive spec. * In the second case return "[drive]" */ const char * const end = p + (p == p0); return copy_substring(name, end); } } } /* No directory separator found so return "[drive]." */ { char * const ret = TMALLOC(char, 2 + start); char *p = ret; if (start) { /* Add drive letter if found */ *p++ = name[0]; *p++ = name[1]; } *p++ = '.'; *p = '\0'; return ret; } } /* end of function ngdirname */ #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 /* Replacement for fopen, when using wide chars (utf-16) */ #ifndef EXT_ASC #if defined(__MINGW32__) || defined(_MSC_VER) #undef BOOLEAN #include FILE * newfopen(const char *fn, const char* md) { FILE* fp; if (fn == NULL) return NULL; wchar_t wfn[BSIZE_SP]; wchar_t wmd[16]; MultiByteToWideChar(CP_UTF8, 0, md, -1, wmd, 15); if (MultiByteToWideChar(CP_UTF8, 0, fn, -1, wfn, BSIZE_SP - 1) == 0) { fprintf(stderr, "UTF-8 to UTF-16 conversion failed with 0x%x\n", GetLastError()); fprintf(stderr, "%s could not be converted\n", fn); return NULL; } fp = _wfopen(wfn, wmd); /* If wide char fails, at least fopen may try the potentially ANSI encoded special characters like á */ #undef fopen if (fp == NULL) fp = fopen(fn, md); #define fopen newfopen return fp; } #endif #endif tmp_ns50wwy/src/misc/wlist.c0000644000175000017500000002251614163340332016207 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((*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 */ tmp_ns50wwy/src/misc/ivars.c0000644000175000017500000000753514163340332016175 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); } tmp_ns50wwy/src/misc/mktemp.h0000644000175000017500000000030314163340332016335 0ustar carstencarsten/************* * Header file for mktemp.c * 1999 E. Rouat ************/ #ifndef ngspice_MKTEMP_H #define ngspice_MKTEMP_H char * smktemp(char *id); char * smktemp2(char *id, int n); #endif tmp_ns50wwy/src/misc/tilde.c0000644000175000017500000001524214163340332016144 0ustar carstencarsten/********** Copyright 1991 Regents of the University of California. All rights reserved. Modified: 2002 R. Oktas, **********/ #include "ngspice/defines.h" #include "ngspice/ngspice.h" #include "ngspice/stringskip.h" #include "tilde.h" #ifdef HAVE_PWD_H #include #endif #ifdef _WIN32 #undef BOOLEAN #include /* win32 functions */ #include "shlobj.h" /* SHGetFolderPath */ #endif static inline int copy_home_to_buf(size_t n_byte_dst, char **p_dst, const char *src); /* 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(const char *string) { /* If no string passed, return NULL */ if (!string) { return NULL; } string = skip_ws(string); /* step past leading whitespace */ /* If the string does not begin with a tilde, there is no ~ to expand */ if (*string != '~') { return copy(string); } ++string; /* step past tilde */ /* Test for home of current user */ if (*string == '\0' || *string == DIR_TERM) { char *sz_home; const int n_char_home = get_local_home(0, &sz_home); if (n_char_home < 0) { return copy(string); /* Strip the ~ and return the rest */ } const size_t n_char_rest = strlen(string); sz_home = TREALLOC(char, sz_home, (size_t) n_char_home + n_char_rest + 1); strcpy(sz_home + n_char_home, string); return sz_home; } #ifdef HAVE_PWD_H /* ~bob -- Get name of user and find home for that user */ { char buf_fixed[100]; char *buf = buf_fixed; const char * const usr_start = string; char c; while ((c = *string) && c != '/') { string++; } const char * const usr_end = string; const size_t n_char_usr = (size_t) (usr_end - usr_start); const size_t n_byte_usr = n_char_usr + 1; if (n_byte_usr > sizeof buf_fixed) { buf = TMALLOC(char, n_byte_usr); } (void) memcpy(buf, usr_start, n_char_usr); buf[n_char_usr] = '\0'; char *sz_home; const int n_char_home = get_usr_home(buf, 0, &sz_home); if (buf != buf_fixed) { /* free allocated buffer for user name */ txfree(buf); } if (n_char_home < 0) { return copy(usr_start); /* Strip the ~ and return the rest */ } const size_t n_char_rest = strlen(string); sz_home = TREALLOC(char, sz_home, (size_t) n_char_home + n_char_rest + 1); strcpy(sz_home + n_char_home, string); return sz_home; } #else /* ~abc is meaningless */ return copy(string); /* Again strip ~ and return rest */ #endif } /* end of function tildexpand */ /* Get value of "HOME" for the current user and copy to *p_buf if * the value is less than n_byte_buf characters long. Otherwise * allocate a buffer of the minimum required size. * * Return values * >0: Number of characters copied to *p_buf, excluding the trailing null * -1: A value for HOME could not be obtained. * * Remarks: * This function does not free any allocation at *p_buf, allowing a * fixed buffer to be passed to it. */ int get_local_home(size_t n_byte_buf, char **p_buf) { char *sz_home = (char *) NULL; #ifdef _WIN32 char buf_sh_path[MAX_PATH]; #endif do { /* First thing to try is an environment variable HOME */ if ((sz_home = getenv("HOME")) != (char *) NULL) { break; } #if defined(_WIN32) /* If Windows, try an env var USERPROFILE next */ if ((sz_home = getenv("USERPROFILE")) != (char *) NULL) { break; } /* For Windows, the folder path CSIDL_PERSONAL is tried next */ if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, buf_sh_path))) { sz_home = buf_sh_path; break; } #elif defined(HAVE_PWD_H) /* _WIN32 and HAVE_PWD_H are mutually exclusive */ /* Get home information for the current user */ { struct passwd *pw; pw = getpwuid(getuid()); if (pw) { sz_home = pw->pw_dir; } } #endif } while (0); if (sz_home == (char *) NULL) { /* did not find a HOME value */ return -1; } /* Copy home value to buffer */ return copy_home_to_buf(n_byte_buf, p_buf, sz_home); } /* end of function get_local_home */ #ifdef HAVE_PWD_H /* Get value of "HOME" for usr and copy to *p_buf if * the value is less than n_byte_buf characters long. Otherwise * allocate a buffer of the minimum required size. * * Return values * >0: Number of characters copied to *pp_buf, excluding the trailing null * -1: A value for HOME could not be obtained. * * Remarks: * This function does not free any allocation at *p_buf, allowing a * fixed buffer to be passed to it. */ int get_usr_home(const char *usr, size_t n_byte_buf, char **p_buf) { struct passwd * const pw = getpwnam(usr); if (pw) { /* Copy home value to buffer */ return copy_home_to_buf(n_byte_buf, p_buf, pw->pw_dir); } return -1; } /* end of function get_usr_home */ #endif /* HAVE_PWD_H */ /* This function copies home value src to the buffer at *p_dst, allocating * a larger buffer if required. * * Parameters * n_byte_dst: Size of supplied destination buffer * p_dst: Address containing address of supplied buffer on input. May be * given the address of a larger buffer allocation if the input buffer * is too small. * src: Address of HOME value * * Return values * number of characters copied excluding terminating null * * Remarks: * This function does not free any allocation at *p_dst, allowing a * fixed buffer to be passed to it. */ static inline int copy_home_to_buf(size_t n_byte_dst, char **p_dst, const char *src) { const size_t n_char_src = strlen(src); /* Size of HOME value */ const size_t n_byte_src = n_char_src + 1; /* Allocate dst if input buffer too small */ if (n_byte_src > n_byte_dst) { /* too big */ *p_dst = TMALLOC(char, n_byte_src); } (void) memcpy(*p_dst, src, n_byte_src); return (int) n_char_src; } /* end of function copy_home_to_buf */ tmp_ns50wwy/src/tclspinit.in0000644000175000017500000000102614163340332016300 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 tmp_ns50wwy/src/ngmultidec.c0000644000175000017500000002444714163340332016252 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; } tmp_ns50wwy/src/setplot0000644000175000017500000000176714163340332015370 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 tmp_ns50wwy/src/spicelib/0000755000175000017500000000000014163340332015532 5ustar carstencarstentmp_ns50wwy/src/spicelib/Makefile.am0000644000175000017500000000027014163340332017565 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 tmp_ns50wwy/src/spicelib/analysis/0000755000175000017500000000000014163340332017355 5ustar carstencarstentmp_ns50wwy/src/spicelib/analysis/cktsetap.c0000644000175000017500000000123014163340332021333 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) ); } tmp_ns50wwy/src/spicelib/analysis/acsetp.c0000644000175000017500000000462014163340332021002 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 }; tmp_ns50wwy/src/spicelib/analysis/dcop.c0000644000175000017500000000776514163340332020465 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); 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); } tmp_ns50wwy/src/spicelib/analysis/tfaskq.c0000644000175000017500000000077314163340332021021 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); } tmp_ns50wwy/src/spicelib/analysis/cktlnkeq.c0000644000175000017500000000174014163340332021337 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); } tmp_ns50wwy/src/spicelib/analysis/cktnodn.c0000644000175000017500000000114414163340332021161 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"); } tmp_ns50wwy/src/spicelib/analysis/cktsens.c0000644000175000017500000004357514163340332021211 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; } tmp_ns50wwy/src/spicelib/analysis/optran.c0000644000175000017500000006332314163340332021033 0ustar carstencarsten/********** Copyright 2019 Holger Vogt All rights reserved. Author: 2019 Holger Vogt Modified BSD license **********/ /* subroutine to generate OP by TRANSIENT analysis */ #include #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" #include "com_optran.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 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 int OPclrBreak(CKTcircuit* ckt); int OPsetBreak(CKTcircuit* ckt, double time); static double *opbreaks; static int OPbreakSize; static double opfinaltime = 1e-6; static double opstepsize = 1e-8; static double opramptime = 0.; static bool nooptran = TRUE; /* command to set the 6 optran flags CKTnoOpIter (default 0, set by 'option noopiter') CKTnumGminSteps CKTnumSrcSteps opstepsize opfinaltime opramptime A typical command may be optran 0 0 0 50u 10m 0 (no initial iteration, no gmin stepping, no source stepping, stepsize for optran 50 us, optran run until 10 ms, no supply ramping. If com_optran is given in .spiceinit, the circuit is not yet loaded. So we firstly fill the static vars opstepsize, opfinaltime, and opramptime. Later from inp.c we call com_optran again and set the data in ft_curckt->ci_defTask. */ void com_optran(wordlist* wl) { wordlist* wltmp = wl; char* stpstr; int err; int optrancom; static bool dataset = FALSE; static bool getdata = FALSE; static bool opiter = TRUE; static int ngminsteps = 1; static int nsrcsteps = 1; /* current circuit */ if (ft_curckt && dataset && wl == NULL) { /* called from inp.c */ ft_curckt->ci_defTask->TSKnoOpIter = (opiter != 0); ft_curckt->ci_defTask->TSKnumGminSteps = ngminsteps; ft_curckt->ci_defTask->TSKnumSrcSteps = nsrcsteps; getdata = FALSE; /* allow more calls to 'optran' */ return; } else if (!ft_curckt && !dataset && wl == NULL) { fprintf(stderr, "Error: syntax error with command 'optran'!\n"); fprintf(stderr, " Command ingnored\n"); return; } else if (ft_curckt && !dataset && wl == NULL) { /* no optran wanted */ return; } else if (!ft_curckt && !dataset) { /* called from .spiceinit */ getdata = TRUE; } int saved = errno; errno = 0; nooptran = FALSE; /* wordlist with 6 parameters */ optrancom = (int)strtol(wltmp->wl_word, &stpstr, 10); if ((errno == ERANGE) || (*stpstr != '\0')) goto bugquit; if (optrancom == 0) { if (getdata) { opiter = TRUE; } else { ft_curckt->ci_defTask->TSKnoOpIter = 1; } } else { if (getdata) { opiter = FALSE; } else { ft_curckt->ci_defTask->TSKnoOpIter = 0; } } wltmp = wltmp->wl_next; optrancom = (int)strtol(wltmp->wl_word, &stpstr, 10); if ((errno == ERANGE) || (*stpstr != '\0')) goto bugquit; if (getdata) { ngminsteps = optrancom; } else { ft_curckt->ci_defTask->TSKnumGminSteps = optrancom; } wltmp = wltmp->wl_next; optrancom = (int)strtol(wltmp->wl_word, &stpstr, 10); if ((errno == ERANGE) || (*stpstr != '\0')) goto bugquit; if (getdata) { nsrcsteps = optrancom; } else { ft_curckt->ci_defTask->TSKnumSrcSteps = optrancom; } wltmp = wltmp->wl_next; stpstr = wltmp->wl_word; opstepsize = INPevaluate(&stpstr, &err, 1); if (err || (*stpstr != '\0')) goto bugquit; wltmp = wltmp->wl_next; stpstr = wltmp->wl_word; opfinaltime = INPevaluate(&stpstr, &err, 1); if (err || (*stpstr != '\0')) goto bugquit; wltmp = wltmp->wl_next; stpstr = wltmp->wl_word; opramptime = INPevaluate(&stpstr, &err, 1); if (err || (*stpstr != '\0')) goto bugquit; if (opstepsize > opfinaltime) { fprintf(stderr, "Error: Step size larger than final time.\n"); goto bugquit; } if (opstepsize > opfinaltime/50.) { fprintf(stderr, "Warning: Step size potentially too small.\n"); } if (opramptime > opfinaltime) { fprintf(stderr, "Error: Ramp time larger than final time.\n"); goto bugquit; } /* optran deselected by setting opstepsize to 0 */ if (opstepsize == 0) nooptran = TRUE; dataset = TRUE; if (errno == 0) errno = saved; return; bugquit: fprintf(stderr, "Error in command 'optran'\n"); } int OPclrBreak(CKTcircuit *ckt) { double *tmp; int j; NG_IGNORE(ckt); if (OPbreakSize > 2) { tmp = TMALLOC(double, OPbreakSize - 1); if (tmp == NULL) return (E_NOMEM); for (j = 1; j < OPbreakSize; j++) { tmp[j - 1] = opbreaks[j]; } FREE(opbreaks); OPbreakSize--; opbreaks = tmp; } else { opbreaks[0] = opbreaks[1]; opbreaks[1] = opfinaltime; } return (OK); } int OPsetBreak(CKTcircuit *ckt, double time) { double *tmp; int i, j; for (i = 0; i < OPbreakSize; i++) { if (opbreaks[i] > time) { /* passed */ if ((opbreaks[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 opbreaks[i] = time; return (OK); } if (i > 0 && time - opbreaks[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, OPbreakSize + 1); if (tmp == NULL) return (E_NOMEM); for (j = 0; j < i; j++) { tmp[j] = opbreaks[j]; } tmp[i] = time; #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e added\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif for (j = i; j < OPbreakSize; j++) { tmp[j + 1] = opbreaks[j]; } FREE(opbreaks); OPbreakSize++; opbreaks = tmp; return (OK); } } /* never found it - beyond end of time - extend out idea of time */ if (time - opbreaks[OPbreakSize - 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 */ opbreaks = TREALLOC(double, opbreaks, OPbreakSize + 1); OPbreakSize++; opbreaks[OPbreakSize - 1] = time; #ifdef TRACE_BREAKPOINT printf("[t:%e] \t %e added at end\n", ckt->CKTtime, time); CKTbreakDump(ckt); #endif return (OK); } /* Do a simple transient simulation, starting with time 0 until opfinaltime. No output vectors are generated, actual times and breakpoints are kept local. When returning, the matrix is left in its current state. Thus this algorithm creates an operating point to start other simulations. The code is derived from dctran.c by removing all un-needed parts.*/ int OPtran(CKTcircuit *ckt, int oldconverged) { int i; double olddelta; double delta; double newdelta; double *temp; double optime = 0; int converged; int firsttime; int error; double maxstepsize = 0.0, prevmaxstepsize = 0.0, prevstepsize=0.; int ltra_num; #if defined SHARED_MODULE int redostep; #endif /* if optran command has not been given (in .spiceinit or in .control section), we don' use optran */ if (nooptran) return oldconverged; /* ACAN *acjob = (ACAN *) ckt->CKTcurJob; TRANan *trjob = (TRANan *) ckt->CKTcurJob; NOISEAN *nojob = (NOISEAN *) ckt->CKTcurJob; */ if(optime == 0) { // int type = ckt->CKTcurJob->JOBtype; SPfrontEnd->IFerrorf(ERR_INFO, "Transient op started"); if (opramptime > 0) { CKTnode* n; ckt->CKTsrcFact = 0.; SPfrontEnd->IFerrorf(ERR_INFO, "Ramptime enabled"); 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 */ converged = NIiter(ckt, ckt->CKTdcTrcvMaxIter); } #if 0 /* Set the final time */ /* If we are in transient simulation */ if (type == 4 && ckt->CKTstep > 0.) opfinaltime = 100. * ckt->CKTstep; /* We are in AC mode */ else if (type == 1 && acjob->ACstartFreq > 0) { opfinaltime = 0.1 / acjob->ACstartFreq; ckt->CKTstep = opfinaltime / 1000.; } /* Noise analysis */ else if (type == 8 && nojob->NstartFreq > 0) { opfinaltime = 0.1 / nojob->NstartFreq; ckt->CKTstep = opfinaltime / 1000.; } #else prevmaxstepsize = ckt->CKTmaxStep; prevstepsize = ckt->CKTstep; ckt->CKTmaxStep = ckt->CKTstep = opstepsize; #endif delta=MIN(opfinaltime/100,ckt->CKTstep)/10; /* 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( opfinaltime / maxstepsize ); ltra_num = CKTtypelook("LTRA"); if (ltra_num >= 0 && ckt->CKThead[ltra_num] != NULL) ckt->CKTtimePoints = TMALLOC(double, ckt->CKTtimeListSize); /* end LTRA code addition */ opbreaks = TMALLOC(double, 2); if(opbreaks == NULL) return(E_NOMEM); opbreaks[0] = 0; opbreaks[1] = opfinaltime; OPbreakSize = 2; #ifdef SHARED_MODULE add_bkpt(); #endif firsttime = 1; #ifdef XSPICE /* 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->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 = opfinaltime/50; 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)); } else { /* saj As traninit resets CKTmode */ ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITPRED; if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; firsttime=0; 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( (opfinaltime - optime) / 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] = optime; } /* end LTRA code addition */ error = CKTaccept(ckt); /* check if current breakpoint is outdated; if so, clear */ if (optime > opbreaks[0]) OPclrBreak(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 */ ckt->CKTbreak = 0; /* XXX Error will cause single process to bail. */ if(error) { tfree(opbreaks); return(error); } #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, optime); /* gtri - end - wbk - Update event queues/data for accepted timepoint */ #endif /* We are finished */ if(AlmostEqualUlps( optime, opfinaltime, 100 ) ) { tfree(opbreaks); SPfrontEnd->IFerrorf(ERR_INFO, "Transient op finished successfully"); ckt->CKTmaxStep = prevmaxstepsize; ckt->CKTstep = prevstepsize; return(OK); } resume: #ifdef HAS_PROGREP if (optime == 0.) SetAnalyse( "optran init", 0); else SetAnalyse( "optran", (int)((optime * 1000.) / opfinaltime + 0.5)); #endif ckt->CKTdelta = MIN(ckt->CKTdelta,ckt->CKTmaxStep); #ifdef XSPICE /* gtri - begin - wbk - Cut integration order if first timepoint after breakpoint */ /* if(optime == g_mif_info.breakpoint.last) */ if ( AlmostEqualUlps( optime, 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 ((optime == opbreaks[0]) || (opbreaks[0] - */ if ( AlmostEqualUlps( optime, opbreaks[0], 100 ) || opbreaks[0] - optime <= 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; ckt->CKTdelta = MIN(ckt->CKTdelta, .1 * MIN(ckt->CKTsaveDelta, opbreaks[1] - opbreaks[0])); if(firsttime) { /* set a breakpoint to reduce ringing of current in devices */ if (ckt->CKTmode & MODEUIC) OPsetBreak(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(optime + ckt->CKTdelta >= opbreaks[0]) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = opbreaks[0] - optime; ckt->CKTbreak = 1; /* why? the current pt. is not a bkpt. */ } #endif /* !XSPICE */ #ifdef XSPICE /* gtri - begin - wbk - Add Breakpoint stuff */ if(optime + 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 - optime; g_mif_info.breakpoint.last = optime + 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",opbreaks[0], optime, ckt->CKTminBreak); #endif if(AlmostEqualUlps(opbreaks[0], optime, 100) || opbreaks[0] <= optime + ckt->CKTminBreak) { #ifdef STEPDEBUG printf("throwing out permanent breakpoint times <= current time (brk pt: %g)\n",opbreaks[0]); printf(" ckt_time: %g ckt_min_break: %g\n",optime, ckt->CKTminBreak); #endif OPclrBreak(ckt); } else { break; } } /* Force the breakpoint if appropriate */ if(optime + ckt->CKTdelta > opbreaks[0]) { ckt->CKTbreak = 1; ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = opbreaks[0] - optime; } /* 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(&optime, &ckt->CKTdelta, 0, opfinaltime, 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((optime == 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)) <= (optime + 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(opbreaks[0] < g_mif_info.breakpoint.current) if(opbreaks[0] > optime + ckt->CKTminBreak) g_mif_info.breakpoint.current = opbreaks[0]; if(g_mif_info.breakpoint.current < optime + ckt->CKTdelta) { /* Breakpoint must be > last accepted timepoint */ /* and >= current event time */ if(g_mif_info.breakpoint.current > optime + ckt->CKTminBreak && g_mif_info.breakpoint.current >= g_mif_info.circuit.evt_step) { ckt->CKTsaveDelta = ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - optime; g_mif_info.breakpoint.last = optime + ckt->CKTdelta; } } } /* end while next event time <= next analog time */ } /* end if there are event instances */ /* gtri - end - wbk - Do event solution */ #else #ifdef SHARED_MODULE /* Either directly go to next time step, or modify ckt->CKTdelta depending on synchronization requirements. sharedsync() returns 0. */ sharedsync(&optime, &ckt->CKTdelta, 0, opfinaltime, 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; for (;;) { #if defined SHARED_MODULE redostep = 1; #endif olddelta=ckt->CKTdelta; /* time abort? */ optime += ckt->CKTdelta; /* supply ramping, when opramptime > 0 */ if (opramptime > 0) ckt->CKTsrcFact = MIN(1., optime / opramptime); ckt->CKTdeltaOld[0]=ckt->CKTdelta; NIcomCof(ckt); #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 = optime; } /* 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 = optime; EVTcall_hybrids(ckt); } /* gtri - end - wbk - Call all hybrids */ #endif 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) { tfree(opbreaks); return(converged); } if(converged != 0) { #ifndef SHARED_MODULE optime = optime -ckt->CKTdelta; #else redostep = 1; #endif ckt->CKTdelta = ckt->CKTdelta/8; 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 < optime) { ckt->CKTsaveDelta = ckt->CKTdelta; optime -= ckt->CKTdelta; ckt->CKTdelta = g_mif_info.breakpoint.current - optime; g_mif_info.breakpoint.last = optime + 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; #if !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) { tfree(opbreaks); 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) { tfree(opbreaks); return(error); } if (newdelta <= 1.05 * ckt->CKTdelta) { ckt->CKTorder = 1; } } /* time point OK - 630 */ ckt->CKTdelta = newdelta; #if !defined SHARED_MODULE /* go to 650 - trapezoidal */ goto nextTime; #else redostep = 0; goto chkStep; #endif } else { #ifndef SHARED_MODULE optime = optime -ckt->CKTdelta; ckt->CKTstat->STATrejected ++; #else redostep = 1; #endif ckt->CKTdelta = newdelta; } } if (ckt->CKTdelta <= ckt->CKTdelmin) { if (olddelta > ckt->CKTdelmin) { ckt->CKTdelta = ckt->CKTdelmin; } else { errMsg = CKTtrouble(ckt, "Timestep too small"); tfree(opbreaks); return(E_TIMESTEP); } } #ifdef XSPICE /* gtri - begin - wbk - Do event backup */ if(ckt->evt->counts.num_insts > 0) EVTbackup(ckt, optime + ckt->CKTdelta); /* gtri - end - wbk - Do event backup */ #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(&optime, &ckt->CKTdelta, olddelta, opfinaltime, ckt->CKTdelmin, redostep, &ckt->CKTstat->STATrejected, 1) == 0) goto nextTime; #endif } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/analysis/cktgrnd.c0000644000175000017500000000211614163340332021155 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); } tmp_ns50wwy/src/spicelib/analysis/dctaskq.c0000644000175000017500000000106614163340332021156 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); } tmp_ns50wwy/src/spicelib/analysis/cktdest.c0000644000175000017500000000542314163340332021166 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; if (!ckt) return (E_NOTFOUND); #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; /* LTRA code addition */ if (ckt->CKTtimePoints != NULL) FREE(ckt->CKTtimePoints); 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); } tmp_ns50wwy/src/spicelib/analysis/tfsetp.c0000644000175000017500000000330114163340332021023 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 }; tmp_ns50wwy/src/spicelib/analysis/dctran.c0000644000175000017500000010077714163340332021010 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); fprintf(stdout,"\n"); fflush(stdout); } else if (ckt->CKTmode & MODEUIC && !ft_ngdebug) { fprintf(stdout,"Using transient initial conditions\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) { SPfrontEnd->OUTendPlot(job->TRANplot); 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->CKTmode&MODEUIC && ckt->CKTtime > 0 && ckt->CKTtime >= ckt->CKTinitTime) || (!(ckt->CKTmode&MODEUIC) && 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-convergence\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 */ } tmp_ns50wwy/src/spicelib/analysis/cktaskaq.c0000644000175000017500000000123214163340332021321 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)); } tmp_ns50wwy/src/spicelib/analysis/pssinit.c0000644000175000017500000000175214163340332021217 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; } tmp_ns50wwy/src/spicelib/analysis/Makefile.am0000644000175000017500000000330414163340332021411 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 \ optran.c \ com_optran.h \ 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 tmp_ns50wwy/src/spicelib/analysis/cktmapn.c0000644000175000017500000000227414163340332021163 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); } tmp_ns50wwy/src/spicelib/analysis/cktpzset.c0000644000175000017500000000411214163340332021366 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; } tmp_ns50wwy/src/spicelib/analysis/cktsetbk.c0000644000175000017500000000553114163340332021337 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(ckt->CKTbreaks && 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); } tmp_ns50wwy/src/spicelib/analysis/cktbkdum.c0000644000175000017500000000074214163340332021330 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]); } } tmp_ns50wwy/src/spicelib/analysis/cktmcrt.c0000644000175000017500000000221014163340332021163 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); } tmp_ns50wwy/src/spicelib/analysis/pzan.c0000644000175000017500000001240614163340332020474 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); } tmp_ns50wwy/src/spicelib/analysis/pzsetp.c0000644000175000017500000000423214163340332021047 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 }; tmp_ns50wwy/src/spicelib/analysis/cktncdump.c0000644000175000017500000000226114163340332021512 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"); } tmp_ns50wwy/src/spicelib/analysis/cktfndm.c0000644000175000017500000000061314163340332021147 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); } tmp_ns50wwy/src/spicelib/analysis/ckttroub.c0000644000175000017500000000500114163340332021352 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 "res/resdefs.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, rcode; 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"); rcode = CKTtypelook("Resistor"); 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 if (cv->TRCVvType[i] == TEMP_CODE) { /* temp sweep, if optran fails) */ sprintf(msg_p, " %s = %g: ", cv->TRCVvName[i], ckt->CKTtemp - CONSTCtoK); } else if (cv->TRCVvType[i] == rcode) { sprintf(msg_p, " %s = %g: ", cv->TRCVvName[i], ((RESinstance*)(cv->TRCVvElt[i]))->RESresist); } 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; } tmp_ns50wwy/src/spicelib/analysis/analysis.h0000644000175000017500000000107714163340332021356 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 tmp_ns50wwy/src/spicelib/analysis/dctsetp.c0000644000175000017500000000633314163340332021174 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 }; tmp_ns50wwy/src/spicelib/analysis/acan.c0000644000175000017500000003254114163340332020430 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); txfree(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); } tmp_ns50wwy/src/spicelib/analysis/cktftask.c0000644000175000017500000000101514163340332021330 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); } tmp_ns50wwy/src/spicelib/analysis/ninteg.c0000644000175000017500000000255414163340332021013 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)); } } } tmp_ns50wwy/src/spicelib/analysis/cktpname.c0000644000175000017500000000145514163340332021330 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; } tmp_ns50wwy/src/spicelib/analysis/ckti2nod.c0000644000175000017500000000213114163340332021233 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; } } tmp_ns50wwy/src/spicelib/analysis/cktacdum.c0000644000175000017500000000177614163340332021327 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); } tmp_ns50wwy/src/spicelib/analysis/nsetparm.c0000644000175000017500000000474414163340332021363 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 }; tmp_ns50wwy/src/spicelib/analysis/psssetp.c0000644000175000017500000000413014163340332021220 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 }; tmp_ns50wwy/src/spicelib/analysis/cktpzstr.c0000644000175000017500000006466214163340332021423 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; } tmp_ns50wwy/src/spicelib/analysis/com_optran.h0000644000175000017500000000014214163340332021664 0ustar carstencarsten#ifndef ngspice_COM_OPTRAN_H #define ngspice_COM_OPTRAN_H void com_optran(wordlist *wl); #endif tmp_ns50wwy/src/spicelib/analysis/cktdelt.c0000644000175000017500000000111314163340332021147 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); } tmp_ns50wwy/src/spicelib/analysis/sensaskq.c0000644000175000017500000000170614163340332021355 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); } tmp_ns50wwy/src/spicelib/analysis/cktdltn.c0000644000175000017500000000230014163340332021157 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; } tmp_ns50wwy/src/spicelib/analysis/cktsetup.c0000644000175000017500000001147314163340332021371 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; } tmp_ns50wwy/src/spicelib/analysis/dctrcurv.c0000644000175000017500000004454514163340332021371 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 (cieq(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, "DC Transfer Function: Voltage source, current source, or " "resistor named \"%s\" is not in the 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 - job->TRCVvStart[job->TRCVnestLevel]) * 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); } tmp_ns50wwy/src/spicelib/analysis/cktacct.c0000644000175000017500000000653414163340332021145 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); } tmp_ns50wwy/src/spicelib/analysis/cktterr.c0000644000175000017500000000364414163340332021206 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; } tmp_ns50wwy/src/spicelib/analysis/cktasknq.c0000644000175000017500000000151614163340332021343 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); } tmp_ns50wwy/src/spicelib/analysis/tranaskq.c0000644000175000017500000000173414163340332021352 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); } tmp_ns50wwy/src/spicelib/analysis/cktmknod.c0000644000175000017500000000122714163340332021335 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); } tmp_ns50wwy/src/spicelib/analysis/ckttrunc.c0000644000175000017500000001263014163340332021360 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 */ } tmp_ns50wwy/src/spicelib/analysis/dsetparm.c0000644000175000017500000000407014163340332021341 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 }; tmp_ns50wwy/src/spicelib/analysis/ChangeLog0000644000175000017500000000611314163340332021130 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. tmp_ns50wwy/src/spicelib/analysis/analysis.c0000644000175000017500000000213114163340332021341 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; } tmp_ns50wwy/src/spicelib/analysis/noisean.c0000644000175000017500000002721614163340332021165 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); } tmp_ns50wwy/src/spicelib/analysis/traninit.c0000644000175000017500000000235414163340332021355 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; } tmp_ns50wwy/src/spicelib/analysis/transetp.c0000644000175000017500000000416014163340332021362 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 }; tmp_ns50wwy/src/spicelib/analysis/cktpmnam.c0000644000175000017500000000271314163340332021336 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); } tmp_ns50wwy/src/spicelib/analysis/tfanal.c0000644000175000017500000001202114163340332020762 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); } tmp_ns50wwy/src/spicelib/analysis/cktsgen.c0000644000175000017500000001230614163340332021161 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 tmp_ns50wwy/src/spicelib/analysis/cktmkcur.c0000644000175000017500000000167614163340332021356 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); } tmp_ns50wwy/src/spicelib/analysis/cktic.c0000644000175000017500000000266414163340332020626 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->CKTrhsOld[node->number] = 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->CKTrhsOld[node->number] = 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); } tmp_ns50wwy/src/spicelib/analysis/cktnewan.c0000644000175000017500000000201614163340332021332 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); } tmp_ns50wwy/src/spicelib/analysis/cktmkvol.c0000644000175000017500000000165114163340332021356 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); } tmp_ns50wwy/src/spicelib/analysis/cktpzld.c0000644000175000017500000000231314163340332021173 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); } tmp_ns50wwy/src/spicelib/analysis/cktfnode.c0000644000175000017500000000120614163340332021315 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); } tmp_ns50wwy/src/spicelib/analysis/cktload.c0000644000175000017500000001340614163340332021146 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; } tmp_ns50wwy/src/spicelib/analysis/cktnum2n.c0000644000175000017500000000112514163340332021261 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); } tmp_ns50wwy/src/spicelib/analysis/cktfbran.c0000644000175000017500000000135214163340332021314 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); } tmp_ns50wwy/src/spicelib/analysis/cktnames.c0000644000175000017500000000163314163340332021331 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); } tmp_ns50wwy/src/spicelib/analysis/dcpss.c0000644000175000017500000016533514163340332020652 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); 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-convergence\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); } tmp_ns50wwy/src/spicelib/analysis/naskq.c0000644000175000017500000000267314163340332020646 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); } tmp_ns50wwy/src/spicelib/analysis/cktsetnp.c0000644000175000017500000000155114163340332021356 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); } tmp_ns50wwy/src/spicelib/analysis/cktneweq.c0000644000175000017500000000142614163340332021345 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); } tmp_ns50wwy/src/spicelib/analysis/cktop.c0000644000175000017500000004715614163340332020656 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" #include "ngspice/cpextern.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 new_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) { /* only the old gmin */ if (cp_getvar("dyngmin", CP_BOOL, NULL, 0)) { converged = dynamic_gmin(ckt, firstmode, continuemode, iterlim); } /* first the old gmin, then the new gmin */ else { converged = dynamic_gmin(ckt, firstmode, continuemode, iterlim); if(converged != 0) { converged = new_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); if (converged == 0) /* If gmin-stepping worked... move out */ return converged; } /* If command 'optran' is not given, the function returns immediately with the previous 'converged' */ converged = OPtran(ckt, converged); #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 spice3 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, "spice3 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, "spice3 gmin stepping failed"); } return converged; } /* just step the real gmin found in every device model */ static int new_gmin(CKTcircuit* ckt, long int firstmode, long int continuemode, int iterlim) { double OldGmin, gtarget, factor, startgmin; int converged; int NumNodes, iters, i; double* OldRhsOld, * OldCKTstate0; CKTnode* n; ckt->CKTmode = firstmode; SPfrontEnd->IFerrorf(ERR_INFO, "Starting true 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; startgmin = ckt->CKTgmin; factor = ckt->CKTgminFactor; OldGmin = 1e-2; /*ckt->CKTdiagGmin = */ckt->CKTgmin = OldGmin / factor; gtarget = MAX(startgmin, ckt->CKTgshunt); for (;;) { fprintf(stderr, "Trying gmin = %12.4E ", ckt->CKTgmin); 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->CKTgmin <= 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->CKTgmin; if (ckt->CKTgmin < factor * gtarget) { factor = ckt->CKTgmin / gtarget; /*ckt->CKTdiagGmin = */ckt->CKTgmin = gtarget; } else { /*ckt->CKTdiagGmin = */ckt->CKTgmin /= 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 = */ckt->CKTgmin = 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->CKTgmin = MAX(startgmin, 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, "True gmin stepping failed"); } else { SPfrontEnd->IFerrorf(ERR_INFO, "True gmin stepping completed"); #ifdef XSPICE /* gtri - wbk - add convergence problem reporting flags */ ckt->enh->conv_debug.last_NIiter_call = MIF_FALSE; #endif } 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; double gminstart = ckt->CKTgmin; 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->CKTgmin < 1e-3){ ckt->CKTdiagGmin = ckt->CKTgmin *= 10; fprintf(stderr, "gmin raised to %8.4e\n", ckt->CKTgmin); }*/ 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)); ckt->CKTdiagGmin = ckt->CKTgmin = gminstart; 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; } tmp_ns50wwy/src/spicelib/analysis/dcoaskq.c0000644000175000017500000000073714163340332021155 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); } tmp_ns50wwy/src/spicelib/analysis/cktdump.c0000644000175000017500000000456614163340332021203 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 */ tmp_ns50wwy/src/spicelib/analysis/cktsopt.c0000644000175000017500000003225614163340332021220 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; case OPT_CSHUNT: task->TSKcshunt = 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 { "cshunt", OPT_CSHUNT, IF_SET|IF_REAL, "Shunt capacitor from analog nodes to ground" }, { "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 }; tmp_ns50wwy/src/spicelib/analysis/dkerproc.c0000644000175000017500000000216614163340332021337 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); } tmp_ns50wwy/src/spicelib/analysis/cktnoise.c0000644000175000017500000001014714163340332021343 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); } tmp_ns50wwy/src/spicelib/analysis/nevalsrc.c0000644000175000017500000001143714163340332021344 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; } } tmp_ns50wwy/src/spicelib/analysis/acaskq.c0000644000175000017500000000230614163340332020765 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); } tmp_ns50wwy/src/spicelib/analysis/distoan.c0000644000175000017500000004370414163340332021172 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); } tmp_ns50wwy/src/spicelib/analysis/cktntask.c0000644000175000017500000001164314163340332021350 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; tsk->TSKcshunt = def->TSKcshunt; /* 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->TSKcshunt = -1; 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); } tmp_ns50wwy/src/spicelib/analysis/cktmpar.c0000644000175000017500000000133614163340332021165 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); } } tmp_ns50wwy/src/spicelib/analysis/cktdisto.c0000644000175000017500000001001514163340332021342 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; /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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 */ /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/analysis/cktclrbk.c0000644000175000017500000000151614163340332021323 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); } tmp_ns50wwy/src/spicelib/analysis/cktparam.c0000644000175000017500000000132214163340332021321 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); } } tmp_ns50wwy/src/spicelib/analysis/cktfnda.c0000644000175000017500000000150414163340332021133 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); } tmp_ns50wwy/src/spicelib/analysis/cktnewn.c0000644000175000017500000000250714163340332021176 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); } tmp_ns50wwy/src/spicelib/analysis/ckttyplk.c0000644000175000017500000000114414163340332021366 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); } tmp_ns50wwy/src/spicelib/analysis/pzaskq.c0000644000175000017500000000321114163340332021027 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); } tmp_ns50wwy/src/spicelib/analysis/ckttemp.c0000644000175000017500000000153714163340332021176 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); } tmp_ns50wwy/src/spicelib/analysis/cktdltm.c0000644000175000017500000000226214163340332021165 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); } tmp_ns50wwy/src/spicelib/analysis/cktdojob.c0000644000175000017500000001570114163340332021324 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->CKTcshunt = task->TSKcshunt; 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); } tmp_ns50wwy/src/spicelib/analysis/daskq.c0000644000175000017500000000236314163340332020630 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); } tmp_ns50wwy/src/spicelib/analysis/cktdlti.c0000644000175000017500000000075014163340332021161 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); } tmp_ns50wwy/src/spicelib/analysis/dloadfns.c0000644000175000017500000005037114163340332021321 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) */ } tmp_ns50wwy/src/spicelib/analysis/cktmask.c0000644000175000017500000000125414163340332021160 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); } tmp_ns50wwy/src/spicelib/analysis/cluster.c0000644000175000017500000002377014163340332021213 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 tmp_ns50wwy/src/spicelib/analysis/pssaskq.c0000644000175000017500000000217614163340332021214 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); } tmp_ns50wwy/src/spicelib/analysis/dcosetp.c0000644000175000017500000000134714163340332021167 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 }; tmp_ns50wwy/src/spicelib/analysis/senssetp.c0000644000175000017500000000532614163340332021373 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 }; tmp_ns50wwy/src/spicelib/ChangeLog0000644000175000017500000000124114163340332017302 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. tmp_ns50wwy/src/spicelib/README0000644000175000017500000000012314163340332016406 0ustar carstencarstenThe Spice Library. It takes a circuit description and builds a simulator from it. tmp_ns50wwy/src/spicelib/devices/0000755000175000017500000000000014163340332017154 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/nbjt/0000755000175000017500000000000014163340332020111 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/nbjt/nbjtinit.c0000644000175000017500000000316614163340332022104 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; } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtdel.c0000644000175000017500000000106414163340332021700 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; } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjttrun.c0000644000175000017500000000255214163340332022127 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/Makefile.am0000644000175000017500000000071414163340332022147 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 tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtitf.h0000644000175000017500000000027214163340332021723 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 tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtdump.c0000644000175000017500000001171114163340332022101 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; BOOLEAN writeAscii = TRUE; 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); writeAscii = compareFiletypeVar("ascii"); fpState = fopen(fileName, (writeAscii ? "w" : "wb")); if (!fpState) { perror(fileName); } else { NBJTputHeader(fpState, ckt, inst); ONEprnSolution(fpState, inst->NBJTpDevice, model->NBJToutputs, writeAscii, "nbjt"); 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); } } } } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtinit.h0000644000175000017500000000037014163340332022103 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 tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtext.h0000644000175000017500000000160414163340332021741 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 */ tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtload.c0000644000175000017500000004036314163340332022060 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=0, ie=0; double iceq, ieeq; double ichat = 0.0, iehat = 0.0; double delVce, delVbe; double vce, vbe /*, vbc*/; double dIeDVce=0, dIeDVbe=0; double dIcDVce=0, dIcDVbe=0; 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtdefs.h0000644000175000017500000001257014163340332022066 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 */ tmp_ns50wwy/src/spicelib/devices/nbjt/nbjttemp.c0000644000175000017500000001142114163340332022077 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=0, indexBC=0; /* 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjt.c0000644000175000017500000000504314163340332021214 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); tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtask.c0000644000175000017500000001352014163340332021712 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 */ } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtacld.c0000644000175000017500000000716214163340332022044 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtmpar.c0000644000175000017500000000133114163340332022070 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtset.c0000644000175000017500000001720714163340332021735 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtparm.c0000644000175000017500000000211214163340332022066 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); } tmp_ns50wwy/src/spicelib/devices/nbjt/nbjtpzld.c0000644000175000017500000000627114163340332022112 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); } tmp_ns50wwy/src/spicelib/devices/mos9/0000755000175000017500000000000014163340332020043 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mos9/mos9ext.h0000644000175000017500000000236314163340332021630 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*); tmp_ns50wwy/src/spicelib/devices/mos9/mos9sprt.c0000644000175000017500000000401614163340332022010 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"); } } } } tmp_ns50wwy/src/spicelib/devices/mos9/mos9sacl.c0000644000175000017500000007436314163340332021756 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9sld.c0000644000175000017500000006445114163340332021613 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); } tmp_ns50wwy/src/spicelib/devices/mos9/Makefile.am0000644000175000017500000000112214163340332022073 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 tmp_ns50wwy/src/spicelib/devices/mos9/mos9defs.h0000644000175000017500000004563314163340332021760 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*/ tmp_ns50wwy/src/spicelib/devices/mos9/mos9trun.c0000644000175000017500000000140314163340332022005 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9noi.c0000644000175000017500000001323414163340332021607 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9conv.c0000644000175000017500000000640314163340332021767 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9load.c0000644000175000017500000014575214163340332021754 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9del.c0000644000175000017500000000062414163340332021565 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; } tmp_ns50wwy/src/spicelib/devices/mos9/mos9acld.c0000644000175000017500000001112014163340332021715 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9.c0000644000175000017500000002343214163340332021102 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); tmp_ns50wwy/src/spicelib/devices/mos9/mos9set.c0000644000175000017500000002270714163340332021622 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; } tmp_ns50wwy/src/spicelib/devices/mos9/mos9mask.c0000644000175000017500000001215714163340332021760 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 */ } tmp_ns50wwy/src/spicelib/devices/mos9/mos9par.c0000644000175000017500000000712714163340332021610 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->MOS9icVBS = *(value->v.vec.rVec+2); here->MOS9icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->MOS9icVGS = *(value->v.vec.rVec+1); here->MOS9icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9temp.c0000644000175000017500000003560314163340332021773 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9supd.c0000644000175000017500000001562014163340332021776 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9mpar.c0000644000175000017500000001517214163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9dist.c0000644000175000017500000007724214163340332021776 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9dset.c0000644000175000017500000010062014163340332021755 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9sset.c0000644000175000017500000000263614163340332022004 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9ask.c0000644000175000017500000004064614163340332021607 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 */ } tmp_ns50wwy/src/spicelib/devices/mos9/mos9init.c0000644000175000017500000000323614163340332021766 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; } tmp_ns50wwy/src/spicelib/devices/mos9/mos9init.h0000644000175000017500000000037014163340332021767 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 tmp_ns50wwy/src/spicelib/devices/mos9/mos9ic.c0000644000175000017500000000247414163340332021421 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9pzld.c0000644000175000017500000001242114163340332021770 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); } tmp_ns50wwy/src/spicelib/devices/mos9/mos9itf.h0000644000175000017500000000026114163340332021605 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 tmp_ns50wwy/src/spicelib/devices/hfet1/0000755000175000017500000000000014163340332020163 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hfet1/hfetparam.c0000644000175000017500000000410314163340332022274 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->HFETAicVGS = *(value->v.vec.rVec+1); here->HFETAicVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetinit.c0000644000175000017500000000315714163340332022147 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; } tmp_ns50wwy/src/spicelib/devices/hfet1/Makefile.am0000644000175000017500000000071714163340332022224 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 tmp_ns50wwy/src/spicelib/devices/hfet1/hfetmask.c0000644000175000017500000001667014163340332022143 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 */ } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetpzl.c0000644000175000017500000001276514163340332022016 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetdefs.h0000644000175000017500000003030414163340332022124 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*/ tmp_ns50wwy/src/spicelib/devices/hfet1/hfet.c0000644000175000017500000001446314163340332021265 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); tmp_ns50wwy/src/spicelib/devices/hfet1/hfetitf.h0000644000175000017500000000011614163340332021763 0ustar carstencarsten#ifndef DEV_HFETA #define DEV_HFETA SPICEdev *get_hfeta_info(void); #endif tmp_ns50wwy/src/spicelib/devices/hfet1/hfetload.c0000644000175000017500000007334214163340332022126 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfettemp.c0000644000175000017500000000630214163340332022144 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetext.h0000644000175000017500000000133214163340332022002 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*); tmp_ns50wwy/src/spicelib/devices/hfet1/hfetacl.c0000644000175000017500000001113714163340332021740 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetsetup.c0000644000175000017500000003454614163340332022352 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; } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetgetic.c0000644000175000017500000000207714163340332022277 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetinit.h0000644000175000017500000000040214163340332022142 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 tmp_ns50wwy/src/spicelib/devices/hfet1/hfetmpar.c0000644000175000017500000002214514163340332022141 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); } tmp_ns50wwy/src/spicelib/devices/hfet1/hfetask.c0000644000175000017500000001237714163340332021766 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 */ } tmp_ns50wwy/src/spicelib/devices/hfet1/hfettrunc.c0000644000175000017500000000121014163340332022323 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); } tmp_ns50wwy/src/spicelib/devices/vccs/0000755000175000017500000000000014163340332020112 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/vccs/Makefile.am0000644000175000017500000000065614163340332022155 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 tmp_ns50wwy/src/spicelib/devices/vccs/vccsinit.c0000644000175000017500000000312314163340332022077 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; } tmp_ns50wwy/src/spicelib/devices/vccs/vccsask.c0000644000175000017500000001223014163340332021711 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 */ } tmp_ns50wwy/src/spicelib/devices/vccs/vccs.c0000644000175000017500000000350414163340332021216 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); tmp_ns50wwy/src/spicelib/devices/vccs/vccsinit.h0000644000175000017500000000030214163340332022100 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 tmp_ns50wwy/src/spicelib/devices/vccs/vccspar.c0000644000175000017500000000171614163340332021724 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccssld.c0000644000175000017500000000236214163340332021722 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccsitf.h0000644000175000017500000000026714163340332021731 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 tmp_ns50wwy/src/spicelib/devices/vccs/vccssprt.c0000644000175000017500000000267014163340332022132 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); } } } tmp_ns50wwy/src/spicelib/devices/vccs/vccsset.c0000644000175000017500000000266414163340332021740 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccsdefs.h0000644000175000017500000000571614163340332022074 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*/ tmp_ns50wwy/src/spicelib/devices/vccs/vccspzld.c0000644000175000017500000000221414163340332022105 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccssacl.c0000644000175000017500000000317114163340332022061 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccsext.h0000644000175000017500000000113614163340332021743 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*); tmp_ns50wwy/src/spicelib/devices/vccs/vccssset.c0000644000175000017500000000165514163340332022122 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); } tmp_ns50wwy/src/spicelib/devices/vccs/vccsload.c0000644000175000017500000000211514163340332022053 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); } tmp_ns50wwy/src/spicelib/devices/cktcrte.c0000644000175000017500000000325614163340332020765 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/0000755000175000017500000000000014163340332020705 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2set.c0000644000175000017500000030520714163340332023003 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2mask.c0000644000175000017500000017706014163340332023147 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 */ } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2init.c0000644000175000017500000000332614163340332023150 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hisimhv2.h0000644000175000017500000000730114163340332022610 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2ld_info_eval.h0000644000175000017500000002141414163340332024631 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2temp.c0000644000175000017500000005001214163340332023144 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/Makefile.am0000644000175000017500000000152214163340332022741 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 tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2pzld.c0000644000175000017500000004737214163340332023167 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2eval_dep.h0000644000175000017500000030413414163340332023772 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2eval_dio.c0000644000175000017500000005176414163340332024000 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 ) ; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2noi.c0000644000175000017500000002263414163340332022775 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2acld.c0000644000175000017500000004136014163340332023110 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2ld.c0000644000175000017500000037333514163340332022616 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2eval.c0000644000175000017500000070547014163340332023145 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2evalenv.h0000644000175000017500000001064714163340332023656 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2soachk.c0000644000175000017500000003627514163340332023466 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2getic.c0000644000175000017500000000651014163340332023276 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2mpar.c0000644000175000017500000025025214163340332023146 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2itf.h0000644000175000017500000000465714163340332023004 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 tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2eval_qover.h0000644000175000017500000006452614163340332024366 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2temp_eval_rdri.h0000644000175000017500000000762614163340332025215 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2eval_rdrift.c0000644000175000017500000005477714163340332024526 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 ) ; } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2temp_eval.h0000644000175000017500000004115314163340332024166 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2par.c0000644000175000017500000001720514163340332022770 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->HSMHV2_icVBS = *(value->v.vec.rVec + 2); here->HSMHV2_icVBS_Given = TRUE; /* FALLTHROUGH */ case 2: here->HSMHV2_icVGS = *(value->v.vec.rVec + 1); here->HSMHV2_icVGS_Given = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2temp_eval_dio.h0000644000175000017500000002230514163340332025017 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2.c0000644000175000017500000020065614163340332022271 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); tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2ask.c0000644000175000017500000004004614163340332022763 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 */ } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2trunc.c0000644000175000017500000000665114163340332023344 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2cvtest.c0000644000175000017500000003337014163340332023517 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2def.h0000644000175000017500000033433014163340332022752 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*/ tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2ext.h0000644000175000017500000000314514163340332023011 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 *); tmp_ns50wwy/src/spicelib/devices/hisimhv2/hsmhv2init.h0000644000175000017500000000041414163340332023150 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 tmp_ns50wwy/src/spicelib/devices/cktbindnode.c0000644000175000017500000000143414163340332021606 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; } } tmp_ns50wwy/src/spicelib/devices/Makefile.am0000644000175000017500000000304314163340332021210 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 \ hicum2 \ 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 \ hicum2 \ 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 tmp_ns50wwy/src/spicelib/devices/dev.h0000644000175000017500000000051114163340332020100 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(const char *); int DEVflag(int type); #endif #ifdef DEVLIB void load_alldevs(void); int load_dev(char *name); #endif #endif tmp_ns50wwy/src/spicelib/devices/mos2/0000755000175000017500000000000014163340332020034 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mos2/mos2sacl.c0000644000175000017500000007411014163340332021726 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2temp.c0000644000175000017500000003506514163340332021757 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2ext.h0000644000175000017500000000236314163340332021612 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*); tmp_ns50wwy/src/spicelib/devices/mos2/Makefile.am0000644000175000017500000000112114163340332022063 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 tmp_ns50wwy/src/spicelib/devices/mos2/mos2noi.c0000644000175000017500000001314114163340332021566 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2init.c0000644000175000017500000000326214163340332021747 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; } tmp_ns50wwy/src/spicelib/devices/mos2/mos2mpar.c0000644000175000017500000001433314163340332021744 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2ic.c0000644000175000017500000000244314163340332021377 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2conv.c0000644000175000017500000000634114163340332021752 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2sprt.c0000644000175000017500000000402514163340332021772 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"); } } } } tmp_ns50wwy/src/spicelib/devices/mos2/mos2dist.c0000644000175000017500000007716514163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2par.c0000644000175000017500000000741714163340332021574 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->MOS2icVBS = *(value->v.vec.rVec+2); here->MOS2icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->MOS2icVGS = *(value->v.vec.rVec+1); here->MOS2icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2defs.h0000644000175000017500000004475714163340332021750 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*/ tmp_ns50wwy/src/spicelib/devices/mos2/mos2sset.c0000644000175000017500000000261014163340332021756 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2sld.c0000644000175000017500000006424114163340332021572 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2.c0000644000175000017500000002267414163340332021073 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); tmp_ns50wwy/src/spicelib/devices/mos2/mos2acld.c0000644000175000017500000001040314163340332021702 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2ask.c0000644000175000017500000004023214163340332021560 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 */ } tmp_ns50wwy/src/spicelib/devices/mos2/mos2del.c0000644000175000017500000000057314163340332021552 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; } tmp_ns50wwy/src/spicelib/devices/mos2/mos2mask.c0000644000175000017500000001040414163340332021733 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2pzld.c0000644000175000017500000001204614163340332021755 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2dset.c0000644000175000017500000013555414163340332021755 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; /*remove compiler warnings */ d_cdrain.value = 0.0; d_cdrain.d1_p = 0.0; d_cdrain.d1_q = 0.0; d_cdrain.d1_r = 0.0; d_cdrain.d2_p2 = 0.0; d_cdrain.d2_q2 = 0.0; d_cdrain.d2_r2 = 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_r3 = 0.0; d_cdrain.d3_p2q = 0.0; d_cdrain.d3_p2r = 0.0; d_cdrain.d3_pq2 = 0.0; d_cdrain.d3_q2r = 0.0; d_cdrain.d3_pr2 = 0.0; d_cdrain.d3_qr2 = 0.0; d_cdrain.d3_pqr = 0.0; /* 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 arg1; double sarg1; 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 = 0.0; double bodys = 0.0; 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) { sarg1 = sqrt(phiMinVbs); SqrtDeriv(&d_sarg, &d_phiMinVbs); dsrgdb = -0.5/sarg1; InvDeriv(&d_dsrgdb,&d_sarg); TimesDeriv(&d_dsrgdb,&d_dsrgdb,-0.5); } else { sphi = sqrt(here->MOS2tPhi); /*const*/ sphi3 = here->MOS2tPhi*sphi; /*const*/ sarg1 = 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*sarg1*sarg1/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*sarg1; 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*sarg1; 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*sarg1) + 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 = sarg1*sarg1*sarg1; 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 { arg1 = 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); arg1 = 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*arg1; 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*sarg1)*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*sarg1); 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2set.c0000644000175000017500000002123314163340332021575 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; } tmp_ns50wwy/src/spicelib/devices/mos2/mos2itf.h0000644000175000017500000000026014163340332021566 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 tmp_ns50wwy/src/spicelib/devices/mos2/mos2init.h0000644000175000017500000000037014163340332021751 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 tmp_ns50wwy/src/spicelib/devices/mos2/mos2trun.c0000644000175000017500000000134514163340332021774 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2supd.c0000644000175000017500000001566414163340332021770 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); } tmp_ns50wwy/src/spicelib/devices/mos2/mos2load.c0000644000175000017500000015527414163340332021736 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 arg1; double sarg1; 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 = 0.0; 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) { sarg1 = sqrt(phiMinVbs); dsrgdb = -0.5/sarg1; d2sdb2 = 0.5*dsrgdb/phiMinVbs; } else { sphi = sqrt(here->MOS2tPhi); sphi3 = here->MOS2tPhi*sphi; sarg1 = sphi/(1.0+0.5*lvbs/here->MOS2tPhi); tmp = sarg1/sphi3; dsrgdb = -0.5*sarg1*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*sarg1; /* * 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*sarg1; 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*sarg1)+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 = sarg1*sarg1*sarg1; /* XXX constant per model */ sbiarg = sqrt(here->MOS2tBulkPot); gammad = gamasd; dgdvbs = dgddvb; body = barg*barg*barg-sarg3; gdbdv = 2.0*gammad*(barg*barg*dbrgdb-sarg1*sarg1*dsrgdb); dodvbs = -factor+dgdvbs*sarg1+gammad*dsrgdb; if (model->MOS2fastSurfaceStateDensity == 0.0) goto line400; if (OxideCap == 0.0) goto line410; dxndvb = 2.0*dgdvbs*dsrgdb+gammad*d2sdb2+dgddb2*sarg1; dodvbs = dodvbs+vt*dxndvb; dxndvd = dgdvds*dsrgdb; dodvds = dgdvds*sarg1+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 { arg1 = sqrt(1.0+4.0*argv/gammd2); vdsat = (vgsx-vbin)/eta+gammd2*(1.0-arg1)/2.0; vdsat = MAX(vdsat,0.0); dsdvgs = (1.0-1.0/arg1)/eta; dsdvbs = (gammad*(1.0-arg1)+2.0*argv/(gammad*arg1))/ eta*dgdvbs+1.0/arg1+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-sarg1*sarg1*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); arg1 = sqrt(argv+sargv); xlfact = model->MOS2xd/(EffectiveLength*lvds); xlamda = xlfact*arg1; 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*sarg1)*exp(argg* (lvgs-von)); goto line1050; } here->MOS2gds = beta1*(lvgs-vbin-gammad*sarg1); 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); arg1 = cdrain*(dudvgs/ufact-dldvgs/clfact); here->MOS2gm = arg1+beta1*lvds; arg1 = cdrain*(dudvds/ufact-dldvds/clfact); here->MOS2gds = arg1+beta1*(lvgs-vbin-eta* lvds-gammad*barg-dgdvds*body/1.5); arg1 = cdrain*(dudvbs/ufact-dldvbs/clfact); here->MOS2gmbs = arg1-beta1*(gdbdv+dgdvbs*body/1.5-factor*lvds); } else { /* * saturation region */ cdrain = beta1*((lvgs-vbin-eta* vdsat/2.0)*vdsat-gammad*bodys/1.5); arg1 = cdrain*(dudvgs/ufact-dldvgs/clfact); here->MOS2gm = arg1+beta1*vdsat+beta1*(lvgs- vbin-eta*vdsat-gammad*bsarg)*dsdvgs; here->MOS2gds = -cdrain*dldvds/clfact-beta1*dgdvds*bodys/1.5; arg1 = cdrain*(dudvbs/ufact-dldvbs/clfact); here->MOS2gmbs = arg1-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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/0000755000175000017500000000000014163340332020524 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32acld.c0000644000175000017500000003627114163340332022364 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/B3TERMS_OF_USE0000644000175000017500000000247514163340332022636 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. tmp_ns50wwy/src/spicelib/devices/bsim3v32/Makefile.am0000644000175000017500000000113714163340332022562 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 tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32getic.c0000644000175000017500000000257514163340332022554 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32cvtest.c0000644000175000017500000001034214163340332022760 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32noi.c0000644000175000017500000005273614163340332022252 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32set.c0000644000175000017500000013602514163340332022252 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32soachk.c0000644000175000017500000003660014163340332022725 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32pzld.c0000644000175000017500000004036314163340332022427 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32ask.c0000644000175000017500000002027614163340332022235 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v32/bsim3v32init.c0000644000175000017500000000342614163340332023131 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32trunc.c0000644000175000017500000000251714163340332022610 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32mpar.c0000644000175000017500000017312114163340332022414 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.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32par.c0000644000175000017500000001003614163340332022232 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM3v32icVBS = *(value->v.vec.rVec+2); here->BSIM3v32icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM3v32icVGS = *(value->v.vec.rVec+1); here->BSIM3v32icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM3v32icVDS = *(value->v.vec.rVec); here->BSIM3v32icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32ld.c0000644000175000017500000045137114163340332022062 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 tmp_ns50wwy/src/spicelib/devices/bsim3v32/bsim3v32ext.h0000644000175000017500000000275514163340332022777 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 *); tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32.c0000644000175000017500000010627714163340332021544 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); tmp_ns50wwy/src/spicelib/devices/bsim3v32/bsim3v32init.h0000644000175000017500000000044014163340332023127 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 tmp_ns50wwy/src/spicelib/devices/bsim3v32/bsim3v32itf.h0000644000175000017500000000043114163340332022746 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 tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32temp.c0000644000175000017500000014760014163340332022425 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32mask.c0000644000175000017500000013146714163340332022417 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32mdel.c0000644000175000017500000000152714163340332022376 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v32/b3v32check.c0000644000175000017500000003524714163340332022540 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 * Modified by Dietmar Warning, 12/21/2020. **********/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM3.2 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file b3v32check.log and print the data into the file. */ int BSIM3v32checkModel (BSIM3v32model *model, BSIM3v32instance *here, CKTcircuit *ckt) { struct bsim3v32SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; NG_IGNORE(ckt); pParam = here->pParam; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 3.2 model %s\n", model->BSIM3v32modName); 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))) { 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"); wl_append_word(&wl, &wl, tprintf("Warning: This model supports BSIM3v3.2, BSIM3v3.2.2, BSIM3v3.2.3, BSIM3v3.2.4\n")); wl_append_word(&wl, &wl, tprintf("You specified a wrong version number. Working now with BSIM3v3.2.4.\n")); } if (pParam->BSIM3v32nlx < -pParam->BSIM3v32leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3v32nlx)); Fatal_Flag = 1; } if (model->BSIM3v32tox <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Tox = %g is not positive.\n", model->BSIM3v32tox)); Fatal_Flag = 1; } if (model->BSIM3v32toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM3v32toxm)); Fatal_Flag = 1; } if (pParam->BSIM3v32npeak <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nch = %g is not positive.\n", pParam->BSIM3v32npeak)); Fatal_Flag = 1; } if (pParam->BSIM3v32nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM3v32nsub)); Fatal_Flag = 1; } if (pParam->BSIM3v32ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g is not positive.\n", pParam->BSIM3v32ngate)); Fatal_Flag = 1; } if (pParam->BSIM3v32ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g is too high.\n", pParam->BSIM3v32ngate)); Fatal_Flag = 1; } if (pParam->BSIM3v32xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3v32xj)); Fatal_Flag = 1; } if (pParam->BSIM3v32dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3v32dvt1)); Fatal_Flag = 1; } if (pParam->BSIM3v32dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3v32dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM3v32w0 == -pParam->BSIM3v32weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM3v32dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3v32dsub)); Fatal_Flag = 1; } if (pParam->BSIM3v32b1 == -pParam->BSIM3v32weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM3v32u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3v32u0temp)); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->BSIM3v32delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3v32delta)); Fatal_Flag = 1; } if (pParam->BSIM3v32vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3v32vsattemp)); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->BSIM3v32pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3v32pclm)); Fatal_Flag = 1; } if (pParam->BSIM3v32drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM3v32drout)); Fatal_Flag = 1; } if (pParam->BSIM3v32pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pd = %g is less than W.\n", here->BSIM3v32drainPerimeter)); } if (here->BSIM3v32sourcePerimeter < pParam->BSIM3v32weff) { wl_append_word(&wl, &wl, tprintf("Warning: Ps = %g is less than W.\n", here->BSIM3v32sourcePerimeter)); } } } if ((model->BSIM3v32calcacm > 0) && (model->BSIM3v32acmMod != 12)) { wl_append_word(&wl, &wl, tprintf("Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3v32calcacm)); model->BSIM3v32calcacm = 0; } if (pParam->BSIM3v32noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM3v32noff)); } if (pParam->BSIM3v32noff > 4.0) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too large.\n", pParam->BSIM3v32noff)); } if (pParam->BSIM3v32voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3v32voffcv)); } if (pParam->BSIM3v32voffcv > 0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3v32voffcv)); } if (model->BSIM3v32ijth < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3v32ijth)); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM3v32clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM3v32clc)); Fatal_Flag = 1; } if (pParam->BSIM3v32moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM3v32moin)); } if (pParam->BSIM3v32moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM3v32moin)); } if(model->BSIM3v32capMod ==3) { if (pParam->BSIM3v32acde < 0.4) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM3v32acde)); } if (pParam->BSIM3v32acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM3v32acde)); } } if (model->BSIM3v32paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM3v32leff <= 5.0e-8) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g may be too small.\n", pParam->BSIM3v32leff)); } if (pParam->BSIM3v32leffCV <= 5.0e-8) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3v32leffCV)); } if (pParam->BSIM3v32weff <= 1.0e-7) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g may be too small.\n", pParam->BSIM3v32weff)); } if (pParam->BSIM3v32weffCV <= 1.0e-7) { wl_append_word(&wl, &wl, tprintf("Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3v32weffCV)); } /* Check threshold voltage parameters */ if (pParam->BSIM3v32nlx < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nlx = %g is negative.\n", pParam->BSIM3v32nlx)); } if (model->BSIM3v32tox < 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Tox = %g is less than 10A.\n", model->BSIM3v32tox)); } if (pParam->BSIM3v32npeak <= 1.0e15) { wl_append_word(&wl, &wl, tprintf("Warning: Nch = %g may be too small.\n", pParam->BSIM3v32npeak)); } else if (pParam->BSIM3v32npeak >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nch = %g may be too large.\n", pParam->BSIM3v32npeak)); } if (pParam->BSIM3v32nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM3v32nsub)); } else if (pParam->BSIM3v32nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM3v32nsub)); } if ((pParam->BSIM3v32ngate > 0.0) && (pParam->BSIM3v32ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3v32ngate)); } if (pParam->BSIM3v32dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3v32dvt0)); } if (fabs(1.0e-6 / (pParam->BSIM3v32w0 + pParam->BSIM3v32weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM3v32nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3v32nfactor)); } if (pParam->BSIM3v32cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3v32cdsc)); } if (pParam->BSIM3v32cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3v32cdscd)); } /* Check DIBL parameters */ if (pParam->BSIM3v32eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3v32eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->BSIM3v32b1 + pParam->BSIM3v32weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM3v32a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3v32a2)); pParam->BSIM3v32a2 = 0.01; } else if (pParam->BSIM3v32a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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)) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3v32vsattemp)); } if (pParam->BSIM3v32pdibl1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3v32pdibl1)); } if (pParam->BSIM3v32pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3v32pdibl2)); } /* Check overlap capacitance parameters */ if (model->BSIM3v32cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3v32cgdo)); model->BSIM3v32cgdo = 0.0; } if (model->BSIM3v32cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3v32cgso)); model->BSIM3v32cgso = 0.0; } if (model->BSIM3v32cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3v32cgbo)); model->BSIM3v32cgbo = 0.0; } } if (wlstart->wl_next) { if ((fplog = fopen("b3v32check.log", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlstart); return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim3v32/bsim3v32def.h0000644000175000017500000016633014163340332022735 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4v5/0000755000175000017500000000000014163340332020445 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5soachk.c0000644000175000017500000003647114163340332022575 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5temp.c0000644000175000017500000030401614163340332022263 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, "detected during BSIM4v5.5.0 parameter checking for \n model %s of device instance %s\n", model->BSIM4v5modName, here->BSIM4v5name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5trunc.c0000644000175000017500000000320014163340332022440 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5ask.c0000644000175000017500000003263314163340332022077 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4v5/bsim4v5def.h0000644000175000017500000032334614163340332022601 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4v5/Makefile.am0000644000175000017500000000112414163340332022477 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 tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5mdel.c0000644000175000017500000000151514163340332022235 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5set.c0000644000175000017500000025601314163340332022114 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5noi.c0000644000175000017500000006541414163340332022111 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5par.c0000644000175000017500000001525414163340332022103 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM4v5icVBS = *(value->v.vec.rVec+2); here->BSIM4v5icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM4v5icVGS = *(value->v.vec.rVec+1); here->BSIM4v5icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM4v5icVDS = *(value->v.vec.rVec); here->BSIM4v5icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5ld.c0000644000175000017500000064531514163340332021727 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5pzld.c0000644000175000017500000010412614163340332022267 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5acld.c0000644000175000017500000007060414163340332022224 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5cvtest.c0000644000175000017500000002177014163340332022631 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5mask.c0000644000175000017500000023604714163340332022261 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5mpar.c0000644000175000017500000033265314163340332022265 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.000001e24) mod->BSIM4v5nsd *= 1.0e-6; break; case BSIM4v5_MOD_NGATE: mod->BSIM4v5ngate = value->rValue; mod->BSIM4v5ngateGiven = TRUE; if (mod->BSIM4v5ngate > 1.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5geo.c0000644000175000017500000003055214163340332022071 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v5/bsim4v5init.c0000644000175000017500000000335514163340332022774 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v5/bsim4v5init.h0000644000175000017500000000042614163340332022775 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 tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5getic.c0000644000175000017500000000250414163340332022406 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5check.c0000644000175000017500000007033614163340332022400 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. * Modified by Holger Vogt, 12/21/2020. **********/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM4.5 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file bsim4v5.out and print the data into the file. */ int BSIM4v5checkModel( BSIM4v5model *model, BSIM4v5instance *here, CKTcircuit *ckt) { struct bsim4v5SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); static char modname[BSIZE_SP]; size_t mlen = strlen(model->BSIM4v5modName); if (mlen < BSIZE_SP) { /* Check the model named model->BSIM4v5modName only once, because BSIM4v5checkModel() is called for each instance. */ if (!strncmp(modname, model->BSIM4v5modName, mlen)) return(0); strcpy(modname, model->BSIM4v5modName); } pParam = here->pParam; wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 4.5 model %s\n", model->BSIM4v5modName); if ((strcmp(model->BSIM4v5version, "4.5.0")) && (strncmp(model->BSIM4v5version, "4.50", 4)) && (strncmp(model->BSIM4v5version, "4.5", 3)) && (strcmp(model->BSIM4v5version, "4.4.0")) && (strncmp(model->BSIM4v5version, "4.40", 4)) && (strncmp(model->BSIM4v5version, "4.4", 3)) && (strcmp(model->BSIM4v5version, "4.3.0")) && (strncmp(model->BSIM4v5version, "4.30", 4)) && (strncmp(model->BSIM4v5version, "4.3", 3)) && (strcmp(model->BSIM4v5version, "4.2.0")) && (strncmp(model->BSIM4v5version, "4.20", 4)) && (strncmp(model->BSIM4v5version, "4.2", 3)) && (strcmp(model->BSIM4v5version, "4.1.0")) && (strncmp(model->BSIM4v5version, "4.10", 4)) && (strncmp(model->BSIM4v5version, "4.1", 3)) && (strcmp(model->BSIM4v5version, "4.0.0")) && (strncmp(model->BSIM4v5version, "4.00", 4)) && (strncmp(model->BSIM4v5version, "4.0", 3))) { printf("Warning: This model supports BSIM4 versions 4.0, 4.1, 4.2, 4.3, 4.4, 4.5\n"); printf("You specified a wrong version number. Working now with BSIM4v5\n"); wl_append_word(&wl, &wl, tprintf("Warning: This model supports BSIM4 versions 4.0, 4.1, 4.2, 4.3, 4.4, 4.5\n")); wl_append_word(&wl, &wl, tprintf("You specified a wrong version number. Working now with BSIM4v5.\n")); } if ((here->BSIM4v5rgateMod == 2) || (here->BSIM4v5rgateMod == 3)) { if ((here->BSIM4v5trnqsMod == 1) || (here->BSIM4v5acnqsMod == 1)) { wl_append_word(&wl, &wl, tprintf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n")); } } if (model->BSIM4v5toxe <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v5toxe)); Fatal_Flag = 1; } if (model->BSIM4v5toxp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v5toxp)); Fatal_Flag = 1; } if (model->BSIM4v5toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v5toxm)); Fatal_Flag = 1; } if (model->BSIM4v5toxref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v5toxref)); Fatal_Flag = 1; } if (pParam->BSIM4v5lpe0 < -pParam->BSIM4v5leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v5lpe0)); Fatal_Flag = 1; } if (model->BSIM4v5lintnoi > pParam->BSIM4v5leff / 2) { wl_append_word(&wl, &wl, tprintf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v5lintnoi)); Fatal_Flag = 1; } if (pParam->BSIM4v5lpeb < -pParam->BSIM4v5leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v5lpeb)); Fatal_Flag = 1; } if (pParam->BSIM4v5ndep <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v5ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v5phi <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v5phi)); wl_append_word(&wl, &wl, tprintf(" Phin = %g Ndep = %g \n", pParam->BSIM4v5phin, pParam->BSIM4v5ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v5nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v5nsub)); Fatal_Flag = 1; } if (pParam->BSIM4v5ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v5ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v5ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v5ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v5xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v5xj)); Fatal_Flag = 1; } if (pParam->BSIM4v5dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v5dvt1)); Fatal_Flag = 1; } if (pParam->BSIM4v5dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v5dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM4v5w0 == -pParam->BSIM4v5weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM4v5dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v5dsub)); Fatal_Flag = 1; } if (pParam->BSIM4v5b1 == -pParam->BSIM4v5weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (here->BSIM4v5u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v5u0temp)); Fatal_Flag = 1; } if (pParam->BSIM4v5delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v5delta)); Fatal_Flag = 1; } if (here->BSIM4v5vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v5vsattemp)); Fatal_Flag = 1; } if (pParam->BSIM4v5pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v5pclm)); Fatal_Flag = 1; } if (pParam->BSIM4v5drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v5drout)); Fatal_Flag = 1; } if (here->BSIM4v5m <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: multiplier = %g is not positive.\n", here->BSIM4v5m)); Fatal_Flag = 1; } if (here->BSIM4v5nf < 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Fatal: SAref = %g is not positive.\n", model->BSIM4v5saref)); Fatal_Flag = 1; } if (model->BSIM4v5sbref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: SBref = %g is not positive.\n", model->BSIM4v5sbref)); Fatal_Flag = 1; } } if ((here->BSIM4v5l + model->BSIM4v5xl) <= model->BSIM4v5xgl) { wl_append_word(&wl, &wl, tprintf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n")); Fatal_Flag = 1; } if (here->BSIM4v5ngcon < 1.0) { wl_append_word(&wl, &wl, tprintf("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; wl_append_word(&wl, &wl, tprintf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n")); } if (model->BSIM4v5gbmin < 1.0e-20) { wl_append_word(&wl, &wl, tprintf("Warning: Gbmin = %g is too small.\n", model->BSIM4v5gbmin)); } /* Check saturation parameters */ if (pParam->BSIM4v5fprout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v5fprout)); Fatal_Flag = 1; } if (pParam->BSIM4v5pdits < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v5pdits)); Fatal_Flag = 1; } if (model->BSIM4v5pditsl < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pditsl = %g is negative.\n", model->BSIM4v5pditsl)); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v5igbMod) { if (pParam->BSIM4v5nigbinv <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v5nigbinv)); Fatal_Flag = 1; } if (pParam->BSIM4v5nigbacc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v5nigbacc)); Fatal_Flag = 1; } } if (model->BSIM4v5igcMod) { if (pParam->BSIM4v5nigc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v5nigc)); Fatal_Flag = 1; } if (pParam->BSIM4v5poxedge <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v5poxedge)); Fatal_Flag = 1; } if (pParam->BSIM4v5pigcd <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v5pigcd)); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v5clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v5clc)); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v5ckappas < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v5ckappas)); pParam->BSIM4v5ckappas = 0.02; } if (pParam->BSIM4v5ckappad < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v5ckappad)); pParam->BSIM4v5ckappad = 0.02; } if (model->BSIM4v5vtss < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtss = %g is negative.\n", model->BSIM4v5vtss)); Fatal_Flag = 1; } if (model->BSIM4v5vtsd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v5vtsd)); Fatal_Flag = 1; } if (model->BSIM4v5vtssws < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v5vtssws)); Fatal_Flag = 1; } if (model->BSIM4v5vtsswd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v5vtsswd)); Fatal_Flag = 1; } if (model->BSIM4v5vtsswgs < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v5vtsswgs)); Fatal_Flag = 1; } if (model->BSIM4v5vtsswgd < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v5leff)); } if (pParam->BSIM4v5leffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v5leffCV)); } if (pParam->BSIM4v5weff <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v5weff)); } if (pParam->BSIM4v5weffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v5toxe)); } if (model->BSIM4v5toxp < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v5toxp)); } if (model->BSIM4v5toxm < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v5toxm)); } if (pParam->BSIM4v5ndep <= 1.0e12) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v5ndep)); } else if (pParam->BSIM4v5ndep >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v5ndep)); } if (pParam->BSIM4v5nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v5nsub)); } else if (pParam->BSIM4v5nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v5nsub)); } if ((pParam->BSIM4v5ngate > 0.0) && (pParam->BSIM4v5ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v5ngate)); } if (pParam->BSIM4v5dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v5dvt0)); } if (fabs(1.0e-8 / (pParam->BSIM4v5w0 + pParam->BSIM4v5weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM4v5nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v5nfactor)); } if (pParam->BSIM4v5cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v5cdsc)); } if (pParam->BSIM4v5cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v5cdscd)); } /* Check DIBL parameters */ if (here->BSIM4v5eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", here->BSIM4v5eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v5b1 + pParam->BSIM4v5weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM4v5a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v5a2)); pParam->BSIM4v5a2 = 0.01; } else if (pParam->BSIM4v5a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v5prwg)); pParam->BSIM4v5prwg = 0.0; } if (pParam->BSIM4v5rdsw < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v5rdsw)); pParam->BSIM4v5rdsw = 0.0; pParam->BSIM4v5rds0 = 0.0; } if (pParam->BSIM4v5rds0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rds0)); pParam->BSIM4v5rds0 = 0.0; } if (pParam->BSIM4v5rdswmin < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v5rdswmin)); pParam->BSIM4v5rdswmin = 0.0; } if (pParam->BSIM4v5pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v5pscbe2)); } if (pParam->BSIM4v5vsattemp < 1.0e3) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v5lambda)); } } if ((model->BSIM4v5vtlGiven) && (pParam->BSIM4v5vtl > 0.0)) { if (pParam->BSIM4v5vtl < 6.0e4) { wl_append_word(&wl, &wl, tprintf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v5vtl)); } if (pParam->BSIM4v5xn < 3.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v5pdibl1)); } } if (pParam->BSIM4v5pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: LODK2 = %g is not positive.\n", model->BSIM4v5lodk2)); } if (model->BSIM4v5lodeta0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: LODETA0 = %g is not positive.\n", model->BSIM4v5lodeta0)); } } /* Check gate resistance parameters */ if (here->BSIM4v5rgateMod == 1) { if (model->BSIM4v5rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 1.\n")); } else if (here->BSIM4v5rgateMod == 2) { if (model->BSIM4v5rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg <= 0.0 for rgateMod = 2.\n")); else if (pParam->BSIM4v5xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n")); } if (here->BSIM4v5rgateMod == 3) { if (model->BSIM4v5rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 3.\n")); else if (pParam->BSIM4v5xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 should be positive for rgateMod = 3.\n")); } /* Check capacitance parameters */ if (pParam->BSIM4v5noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM4v5noff)); } if (pParam->BSIM4v5voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v5voffcv)); } if (pParam->BSIM4v5moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM4v5moin)); } if (pParam->BSIM4v5moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM4v5moin)); } if (model->BSIM4v5capMod == 2) { if (pParam->BSIM4v5acde < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM4v5acde)); } if (pParam->BSIM4v5acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM4v5acde)); } } /* Check overlap capacitance parameters */ if (model->BSIM4v5cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v5cgdo)); model->BSIM4v5cgdo = 0.0; } if (model->BSIM4v5cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v5cgso)); model->BSIM4v5cgso = 0.0; } if (model->BSIM4v5cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v5cgbo)); model->BSIM4v5cgbo = 0.0; } if (model->BSIM4v5tnoiMod == 1) { if (model->BSIM4v5tnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v5tnoia)); model->BSIM4v5tnoia = 0.0; } if (model->BSIM4v5tnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v5tnoib)); model->BSIM4v5tnoib = 0.0; } if (model->BSIM4v5rnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v5rnoia)); model->BSIM4v5rnoia = 0.0; } if (model->BSIM4v5rnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v5rnoib)); model->BSIM4v5rnoib = 0.0; } } if (model->BSIM4v5SjctEmissionCoeff < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njs = %g is negative.\n", model->BSIM4v5SjctEmissionCoeff)); } if (model->BSIM4v5DjctEmissionCoeff < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njd = %g is negative.\n", model->BSIM4v5DjctEmissionCoeff)); } if (model->BSIM4v5njtstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v5njtstemp, ckt->CKTtemp)); } if (model->BSIM4v5njtsswtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswtemp, ckt->CKTtemp)); } if (model->BSIM4v5njtsswgtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v5njtsswgtemp, ckt->CKTtemp)); } if (model->BSIM4v5ntnoi < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v5ntnoi)); model->BSIM4v5ntnoi = 0.0; } /* diode model */ if (model->BSIM4v5SbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctBotGradingCoeff)); model->BSIM4v5SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v5SbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctSideGradingCoeff)); model->BSIM4v5SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v5SbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v5SbulkJctGateSideGradingCoeff)); model->BSIM4v5SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctBotGradingCoeff)); model->BSIM4v5DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v5DbulkJctSideGradingCoeff)); model->BSIM4v5DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v5DbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v5scref)); model->BSIM4v5scref = 1e-6; } if (here->BSIM4v5sca < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v5sca)); here->BSIM4v5sca = 0.0; } if (here->BSIM4v5scb < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v5scb)); here->BSIM4v5scb = 0.0; } if (here->BSIM4v5scc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v5scc)); here->BSIM4v5scc = 0.0; } if (here->BSIM4v5sc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v5sc)); here->BSIM4v5sc = 0.0; } } wordlist* wlfree = wlstart; if (wlstart->wl_next) { if ((fplog = fopen("bsim4v5.out", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlfree); return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim4v5/bsim4v5itf.h0000644000175000017500000000037714163340332022621 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 tmp_ns50wwy/src/spicelib/devices/bsim4v5/b4v5.c0000644000175000017500000020077214163340332021401 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); tmp_ns50wwy/src/spicelib/devices/bsim4v5/B4TERMS_OF_USE0000644000175000017500000000255214163340332022554 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 tmp_ns50wwy/src/spicelib/devices/bsim4v5/bsim4v5ext.h0000644000175000017500000000260614163340332022634 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 *); tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/0000755000175000017500000000000014163340332021355 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/Makefile.am0000644000175000017500000000113214163340332023406 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdcvtest.c0000644000175000017500000000612514163340332024307 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdpar.c0000644000175000017500000001102414163340332023553 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 5: here->B3SOIFDicVPS = *(value->v.vec.rVec+4); here->B3SOIFDicVPSGiven = TRUE; /* FALLTHROUGH */ case 4: here->B3SOIFDicVES = *(value->v.vec.rVec+3); here->B3SOIFDicVESGiven = TRUE; /* FALLTHROUGH */ case 3: here->B3SOIFDicVBS = *(value->v.vec.rVec+2); here->B3SOIFDicVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->B3SOIFDicVGS = *(value->v.vec.rVec+1); here->B3SOIFDicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->B3SOIFDicVDS = *(value->v.vec.rVec); here->B3SOIFDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdmpar.c0000644000175000017500000016053714163340332023746 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdtrunc.c0000644000175000017500000000237614163340332024136 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/BsimTerms_use0000644000175000017500000000247314163340332024067 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. tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdtemp.c0000644000175000017500000012712514163340332023750 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdinit.h0000644000175000017500000000042314163340332023742 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdacld.c0000644000175000017500000004344714163340332023712 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c0000644000175000017500000000330414163340332023736 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifddef.h0000644000175000017500000017144514163340332023552 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdgetic.c0000644000175000017500000000310714163340332024067 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifd.c0000644000175000017500000007667514163340332023077 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); tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdask.c0000644000175000017500000002001214163340332023544 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdext.h0000644000175000017500000000246014163340332023602 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*); tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdcheck.c0000644000175000017500000004272214163340332024057 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c0000644000175000017500000002755614163340332023577 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdset.c0000644000175000017500000017014214163340332023573 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifditf.h0000644000175000017500000000040014163340332023554 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdmask.c0000644000175000017500000012105414163340332023731 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdld.c0000644000175000017500000041646614163340332023413 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) { 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_fd/b3soifdpzld.c0000644000175000017500000001424514163340332023752 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); } tmp_ns50wwy/src/spicelib/devices/mes/0000755000175000017500000000000014163340332017740 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mes/mesdefs.h0000644000175000017500000001715614163340332021551 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*/ tmp_ns50wwy/src/spicelib/devices/mes/mestemp.c0000644000175000017500000000276414163340332021567 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesnoise.c0000644000175000017500000001303014163340332021723 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); } tmp_ns50wwy/src/spicelib/devices/mes/Makefile.am0000644000175000017500000000074614163340332022003 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 tmp_ns50wwy/src/spicelib/devices/mes/mesask.c0000644000175000017500000001110214163340332021362 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 */ } tmp_ns50wwy/src/spicelib/devices/mes/mes.c0000644000175000017500000000715114163340332020674 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); tmp_ns50wwy/src/spicelib/devices/mes/mesmpar.c0000644000175000017500000000504114163340332021550 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); } tmp_ns50wwy/src/spicelib/devices/mes/mestrunc.c0000644000175000017500000000124014163340332021741 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesgetic.c0000644000175000017500000000211314163340332021701 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesacl.c0000644000175000017500000000527114163340332021355 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); } tmp_ns50wwy/src/spicelib/devices/mes/messetup.c0000644000175000017500000001376014163340332021760 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; } tmp_ns50wwy/src/spicelib/devices/mes/mesext.h0000644000175000017500000000163714163340332021425 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*); tmp_ns50wwy/src/spicelib/devices/mes/mesmask.c0000644000175000017500000000446514163340332021555 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 */ } tmp_ns50wwy/src/spicelib/devices/mes/mesparam.c0000644000175000017500000000324314163340332021713 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->MESicVGS = *(value->v.vec.rVec+1); here->MESicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->MESicVDS = *(value->v.vec.rVec); here->MESicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/mes/mesinit.c0000644000175000017500000000310614163340332021554 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; } tmp_ns50wwy/src/spicelib/devices/mes/mesdisto.c0000644000175000017500000006652614163340332021752 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesdset.c0000644000175000017500000002757314163340332021566 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesload.c0000644000175000017500000004703014163340332021534 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); } tmp_ns50wwy/src/spicelib/devices/mes/mespzld.c0000644000175000017500000000633614163340332021572 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); } tmp_ns50wwy/src/spicelib/devices/mes/mesinit.h0000644000175000017500000000035614163340332021565 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 tmp_ns50wwy/src/spicelib/devices/mes/mesitf.h0000644000175000017500000000025514163340332021402 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 tmp_ns50wwy/src/spicelib/devices/bsimsoi/0000755000175000017500000000000014163340332020621 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soigetic.c0000644000175000017500000000405614163340332023026 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soidef.h0000644000175000017500000040640114163340332022476 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*/ tmp_ns50wwy/src/spicelib/devices/bsimsoi/Makefile.am0000644000175000017500000000160314163340332022655 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 tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soitrunc.c0000644000175000017500000000316114163340332023062 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soinoi.c0000644000175000017500000007752414163340332022532 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiacld.c0000644000175000017500000010010614163340332022627 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soicvtest.c0000644000175000017500000000721314163340332023241 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/BsimTerms_use0000644000175000017500000000245114163340332023327 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. tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soicheck.c0000644000175000017500000012510114163340332023003 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiask.c0000644000175000017500000002745514163340332022521 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 */ } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soitemp.c0000644000175000017500000025530214163340332022702 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiitf.h0000644000175000017500000000072214163340332022516 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 tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiinit.c0000644000175000017500000000323014163340332022667 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; } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soimpar.c0000644000175000017500000040263314163340332022675 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soimask.c0000644000175000017500000027373214163340332022677 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 */ } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiext.h0000644000175000017500000000304514163340332022535 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 *); tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soipar.c0000644000175000017500000001743714163340332022524 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiinit.h0000644000175000017500000000037714163340332022705 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 tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soild.c0000644000175000017500000205404514163340332022337 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; #ifndef NOBYPASS line755: #endif 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) { 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 tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soi.c0000644000175000017500000023122614163340332022013 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); tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soipzld.c0000644000175000017500000001462214163340332022704 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); } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soisoachk.c0000644000175000017500000003612314163340332023203 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; } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soiset.c0000644000175000017500000033417514163340332022536 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; } tmp_ns50wwy/src/spicelib/devices/bsimsoi/b4soimdel.c0000644000175000017500000000166014163340332022652 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; } tmp_ns50wwy/src/spicelib/devices/urc/0000755000175000017500000000000014163340332017745 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/urc/Makefile.am0000644000175000017500000000055614163340332022007 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 tmp_ns50wwy/src/spicelib/devices/urc/urcinit.c0000644000175000017500000000303414163340332021566 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; } tmp_ns50wwy/src/spicelib/devices/urc/urcmpar.c0000644000175000017500000000262314163340332021565 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); } tmp_ns50wwy/src/spicelib/devices/urc/urcdefs.h0000644000175000017500000000514614163340332021557 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*/ tmp_ns50wwy/src/spicelib/devices/urc/urc.c0000644000175000017500000000257014163340332020706 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); tmp_ns50wwy/src/spicelib/devices/urc/urcext.h0000644000175000017500000000077614163340332021442 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 tmp_ns50wwy/src/spicelib/devices/urc/urcparam.c0000644000175000017500000000141714163340332021726 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); } tmp_ns50wwy/src/spicelib/devices/urc/urcinit.h0000644000175000017500000000035614163340332021577 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 tmp_ns50wwy/src/spicelib/devices/urc/urcask.c0000644000175000017500000000230114163340332021375 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 */ } tmp_ns50wwy/src/spicelib/devices/urc/urcsetup.c0000644000175000017500000002670714163340332021777 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; } tmp_ns50wwy/src/spicelib/devices/urc/urcitf.h0000644000175000017500000000026414163340332021414 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 tmp_ns50wwy/src/spicelib/devices/urc/urcmask.c0000644000175000017500000000236014163340332021557 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 */ } tmp_ns50wwy/src/spicelib/devices/numd2/0000755000175000017500000000000014163340332020201 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/numd2/numd2ext.h0000644000175000017500000000163514163340332022125 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 */ tmp_ns50wwy/src/spicelib/devices/numd2/numd2itf.h0000644000175000017500000000027314163340332022104 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 tmp_ns50wwy/src/spicelib/devices/numd2/Makefile.am0000644000175000017500000000072214163340332022236 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 tmp_ns50wwy/src/spicelib/devices/numd2/nud2parm.c0000644000175000017500000000215614163340332022101 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); } tmp_ns50wwy/src/spicelib/devices/numd2/numd2init.h0000644000175000017500000000040214163340332022257 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 tmp_ns50wwy/src/spicelib/devices/numd2/nud2trun.c0000644000175000017500000000257714163340332022141 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2.c0000644000175000017500000000425714163340332021225 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); tmp_ns50wwy/src/spicelib/devices/numd2/numd2init.c0000644000175000017500000000320614163340332022257 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; } tmp_ns50wwy/src/spicelib/devices/numd2/nud2del.c0000644000175000017500000000077514163340332021713 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; } tmp_ns50wwy/src/spicelib/devices/numd2/nud2acld.c0000644000175000017500000000472514163340332022051 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2dump.c0000644000175000017500000001052314163340332022104 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; BOOLEAN writeAscii = TRUE; 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); writeAscii = compareFiletypeVar("ascii"); fpState = fopen(fileName, (writeAscii ? "w" : "wb")); if (!fpState) { perror(fileName); } else { NUMD2putHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NUMD2pDevice, model->NUMD2outputs, writeAscii, "numd2"); 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); } } } } tmp_ns50wwy/src/spicelib/devices/numd2/nud2load.c0000644000175000017500000003031614163340332022060 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=0.; double idhat = 0.0; double ideq; double gd=0.; 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2mpar.c0000644000175000017500000000134114163340332022074 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2set.c0000644000175000017500000002035214163340332021733 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); } tmp_ns50wwy/src/spicelib/devices/numd2/numd2def.h0000644000175000017500000001100714163340332022055 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 */ tmp_ns50wwy/src/spicelib/devices/numd2/nud2temp.c0000644000175000017500000000706114163340332022107 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2pzld.c0000644000175000017500000000400514163340332022106 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); } tmp_ns50wwy/src/spicelib/devices/numd2/nud2ask.c0000644000175000017500000000607614163340332021725 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; return (OK); 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3/0000755000175000017500000000000014163340332020171 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3/bsim3init.h0000644000175000017500000000040214163340332022237 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 tmp_ns50wwy/src/spicelib/devices/bsim3/bsim3def.h0000644000175000017500000015403614163340332022047 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3/b3ask.c0000644000175000017500000001726314163340332021351 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3/b3ld.c0000644000175000017500000040734414163340332021175 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 tmp_ns50wwy/src/spicelib/devices/bsim3/bsim3init.c0000644000175000017500000000326514163340332022244 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; } tmp_ns50wwy/src/spicelib/devices/bsim3/B3TERMS_OF_USE0000644000175000017500000000247514163340332022303 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. tmp_ns50wwy/src/spicelib/devices/bsim3/Makefile.am0000644000175000017500000000103414163340332022223 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 tmp_ns50wwy/src/spicelib/devices/bsim3/b3set.c0000644000175000017500000012621714163340332021366 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; } tmp_ns50wwy/src/spicelib/devices/bsim3/b3temp.c0000644000175000017500000013211614163340332021533 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3acld.c0000644000175000017500000004170614163340332021475 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3check.c0000644000175000017500000003375714163340332021656 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. * Modified by Dietmar Warning, 12/21/2020. **********/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM3.3 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file b3v33check.log and print the data into the file. */ int BSIM3checkModel (BSIM3model *model, BSIM3instance *here, CKTcircuit *ckt) { struct bsim3SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; NG_IGNORE(ckt); pParam = here->pParam; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 3.3 model %s\n", model->BSIM3modName); if ((strncmp(model->BSIM3version, "3.3.0", 5)) && (strncmp(model->BSIM3version, "3.30", 4)) && (strncmp(model->BSIM3version, "3.3", 3))) { printf("Warning: This model is BSIM3v3.3.0; you specified a wrong version number.\n"); wl_append_word(&wl, &wl, tprintf("Warning: This model is BSIM3v3.3.0; you specified a wrong version number.\n")); } if (pParam->BSIM3nlx < -pParam->BSIM3leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Nlx = %g is less than -Leff.\n", pParam->BSIM3nlx)); Fatal_Flag = 1; } if (model->BSIM3tox <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Tox = %g is not positive.\n", model->BSIM3tox)); Fatal_Flag = 1; } if (model->BSIM3toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM3toxm)); Fatal_Flag = 1; } if (model->BSIM3lintnoi > pParam->BSIM3leff/2) { wl_append_word(&wl, &wl, tprintf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM3lintnoi)); Fatal_Flag = 1; } if (pParam->BSIM3npeak <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nch = %g is not positive.\n", pParam->BSIM3npeak)); Fatal_Flag = 1; } if (pParam->BSIM3nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM3nsub)); Fatal_Flag = 1; } if (pParam->BSIM3ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g is not positive.\n", pParam->BSIM3ngate)); Fatal_Flag = 1; } if (pParam->BSIM3ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g is too high.\n", pParam->BSIM3ngate)); Fatal_Flag = 1; } if (pParam->BSIM3xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM3xj)); Fatal_Flag = 1; } if (pParam->BSIM3dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM3dvt1)); Fatal_Flag = 1; } if (pParam->BSIM3dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM3dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM3w0 == -pParam->BSIM3weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM3dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM3dsub)); Fatal_Flag = 1; } if (pParam->BSIM3b1 == -pParam->BSIM3weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM3u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", pParam->BSIM3u0temp)); Fatal_Flag = 1; } /* Check delta parameter */ if (pParam->BSIM3delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM3delta)); Fatal_Flag = 1; } if (pParam->BSIM3vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", pParam->BSIM3vsattemp)); Fatal_Flag = 1; } /* Check Rout parameters */ if (pParam->BSIM3pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM3pclm)); Fatal_Flag = 1; } if (pParam->BSIM3drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM3drout)); Fatal_Flag = 1; } if (pParam->BSIM3pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pd = %g is less than W.\n", here->BSIM3drainPerimeter)); } if (here->BSIM3sourcePerimeter < pParam->BSIM3weff) { wl_append_word(&wl, &wl, tprintf("Warning: Ps = %g is less than W.\n", here->BSIM3sourcePerimeter)); } } } if ((model->BSIM3calcacm > 0) && (model->BSIM3acmMod != 12)) { wl_append_word(&wl, &wl, tprintf("Warning: CALCACM = %d is wrong. Set back to 0.\n", model->BSIM3calcacm)); model->BSIM3calcacm = 0; } if (pParam->BSIM3noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM3noff)); } if (pParam->BSIM3noff > 4.0) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too large.\n", pParam->BSIM3noff)); } if (pParam->BSIM3voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM3voffcv)); } if (pParam->BSIM3voffcv > 0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too large.\n", pParam->BSIM3voffcv)); } if (model->BSIM3ijth < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ijth = %g cannot be negative.\n", model->BSIM3ijth)); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM3clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM3clc)); Fatal_Flag = 1; } if (pParam->BSIM3moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM3moin)); } if (pParam->BSIM3moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM3moin)); } if(model->BSIM3capMod ==3) { if (pParam->BSIM3acde < 0.4) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM3acde)); } if (pParam->BSIM3acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM3acde)); } } if (model->BSIM3paramChk ==1) { /* Check L and W parameters */ if (pParam->BSIM3leff <= 5.0e-8) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g may be too small.\n", pParam->BSIM3leff)); } if (pParam->BSIM3leffCV <= 5.0e-8) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g may be too small.\n", pParam->BSIM3leffCV)); } if (pParam->BSIM3weff <= 1.0e-7) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g may be too small.\n", pParam->BSIM3weff)); } if (pParam->BSIM3weffCV <= 1.0e-7) { wl_append_word(&wl, &wl, tprintf("Warning: Weff for CV = %g may be too small.\n", pParam->BSIM3weffCV)); } /* Check threshold voltage parameters */ if (pParam->BSIM3nlx < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nlx = %g is negative.\n", pParam->BSIM3nlx)); } if (model->BSIM3tox < 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Tox = %g is less than 10A.\n", model->BSIM3tox)); } if (pParam->BSIM3npeak <= 1.0e15) { wl_append_word(&wl, &wl, tprintf("Warning: Nch = %g may be too small.\n", pParam->BSIM3npeak)); } else if (pParam->BSIM3npeak >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nch = %g may be too large.\n", pParam->BSIM3npeak)); } if (pParam->BSIM3nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM3nsub)); } else if (pParam->BSIM3nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM3nsub)); } if ((pParam->BSIM3ngate > 0.0) && (pParam->BSIM3ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM3ngate)); } if (pParam->BSIM3dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM3dvt0)); } if (fabs(1.0e-6 / (pParam->BSIM3w0 + pParam->BSIM3weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM3nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM3nfactor)); } if (pParam->BSIM3cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM3cdsc)); } if (pParam->BSIM3cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM3cdscd)); } /* Check DIBL parameters */ if (pParam->BSIM3eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", pParam->BSIM3eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-6 / (pParam->BSIM3b1 + pParam->BSIM3weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM3a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM3a2)); pParam->BSIM3a2 = 0.01; } else if (pParam->BSIM3a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM3rdsw)); pParam->BSIM3rdsw = 0.0; pParam->BSIM3rds0 = 0.0; } else if ((pParam->BSIM3rds0 > 0.0) && (pParam->BSIM3rds0 < 0.001)) { wl_append_word(&wl, &wl, tprintf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", pParam->BSIM3rds0)); pParam->BSIM3rds0 = 0.0; } if (pParam->BSIM3vsattemp < 1.0e3) { wl_append_word(&wl, &wl, tprintf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->BSIM3vsattemp)); } if (pParam->BSIM3pdibl1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM3pdibl1)); } if (pParam->BSIM3pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl2 = %g is negative.\n", pParam->BSIM3pdibl2)); } /* Check overlap capacitance parameters */ if (model->BSIM3cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM3cgdo)); model->BSIM3cgdo = 0.0; } if (model->BSIM3cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM3cgso)); model->BSIM3cgso = 0.0; } if (model->BSIM3cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM3cgbo)); model->BSIM3cgbo = 0.0; } } if (wlstart->wl_next) { if ((fplog = fopen("b3v33check.log", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlstart); return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3mdel.c0000644000175000017500000000152614163340332021507 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; } tmp_ns50wwy/src/spicelib/devices/bsim3/b3mpar.c0000644000175000017500000016642214163340332021534 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.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3trunc.c0000644000175000017500000000236714163340332021725 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3soachk.c0000644000175000017500000003612414163340332022040 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; } tmp_ns50wwy/src/spicelib/devices/bsim3/ChangeLog0000644000175000017500000000012414163340332021740 0ustar carstencarsten1999-09-06 Arno Peters * b3ld.c: Removed unused variable. tmp_ns50wwy/src/spicelib/devices/bsim3/b3noi.c0000644000175000017500000002762214163340332021360 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/bsim3itf.h0000644000175000017500000000036314163340332022064 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 tmp_ns50wwy/src/spicelib/devices/bsim3/bsim3ext.h0000644000175000017500000000263614163340332022107 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 *); tmp_ns50wwy/src/spicelib/devices/bsim3/b3getic.c0000644000175000017500000000232614163340332021660 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3.c0000644000175000017500000010335414163340332020647 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); tmp_ns50wwy/src/spicelib/devices/bsim3/b3cvtest.c0000644000175000017500000000703714163340332022101 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3pzld.c0000644000175000017500000003434114163340332021540 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); } tmp_ns50wwy/src/spicelib/devices/bsim3/b3mask.c0000644000175000017500000012717414163340332021531 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3/b3par.c0000644000175000017500000000767714163340332021365 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM3icVBS = *(value->v.vec.rVec+2); here->BSIM3icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM3icVGS = *(value->v.vec.rVec+1); here->BSIM3icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM3icVDS = *(value->v.vec.rVec); here->BSIM3icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/limit.c0000644000175000017500000001321314163340332020436 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 ); } } } } tmp_ns50wwy/src/spicelib/devices/cktask.c0000644000175000017500000000174614163340332020610 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); FREE(errMsg); controlled_exit(EXIT_BAD); } if (error && ft_ngdebug) { printf("\nWarning: %s\n", errMsg); } if (errMsg) FREE(errMsg); return(error); } tmp_ns50wwy/src/spicelib/devices/ltra/0000755000175000017500000000000014163340332020116 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/ltra/ltrainit.h0000644000175000017500000000037014163340332022115 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 tmp_ns50wwy/src/spicelib/devices/ltra/ltraext.h0000644000175000017500000000436014163340332021755 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); extern int LTRAdevDelete(GENinstance*); extern int LTRAmDelete(GENmodel*); tmp_ns50wwy/src/spicelib/devices/ltra/ltraset.c0000644000175000017500000002045514163340332021746 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; } int LTRAdevDelete(GENinstance* inst) { LTRAinstance* here = (LTRAinstance*)inst; if (here->LTRAv1) tfree(here->LTRAv1); if (here->LTRAi1) tfree(here->LTRAi1); if (here->LTRAv2) tfree(here->LTRAv2); if (here->LTRAi2) tfree(here->LTRAi2); return OK; } int LTRAmDelete(GENmodel* gen_model) { LTRAmodel* model = (LTRAmodel*)gen_model; if (model->LTRAh1dashCoeffs) tfree(model->LTRAh1dashCoeffs); if (model->LTRAh2Coeffs) tfree(model->LTRAh2Coeffs); if (model->LTRAh3dashCoeffs) tfree(model->LTRAh3dashCoeffs); return OK; } tmp_ns50wwy/src/spicelib/devices/ltra/Makefile.am0000644000175000017500000000071314163340332022153 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 tmp_ns50wwy/src/spicelib/devices/ltra/ltramask.c0000644000175000017500000000507214163340332022104 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltrapar.c0000644000175000017500000000252714163340332021735 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); /* FALLTHROUGH */ case 3: here->LTRAinitVolt2 = *(value->v.vec.rVec + 2); /* FALLTHROUGH */ case 2: here->LTRAinitCur1 = *(value->v.vec.rVec + 1); /* FALLTHROUGH */ case 1: here->LTRAinitVolt1 = *(value->v.vec.rVec); break; default: return (E_BADPARM); } break; default: return (E_BADPARM); } return (OK); } tmp_ns50wwy/src/spicelib/devices/ltra/ltrainit.c0000644000175000017500000000314214163340332022110 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 = LTRAmDelete, .DEVdelete = LTRAdevDelete, .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; } tmp_ns50wwy/src/spicelib/devices/ltra/ltratemp.c0000644000175000017500000001120414163340332022110 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltradefs.h0000644000175000017500000002360214163340332022076 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*/ tmp_ns50wwy/src/spicelib/devices/ltra/ltratrun.c0000644000175000017500000001347314163340332022145 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltrampar.c0000644000175000017500000000550014163340332022104 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltramisc.c0000644000175000017500000014545014163340332022111 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); } */ tmp_ns50wwy/src/spicelib/devices/ltra/ltraload.c0000644000175000017500000005451514163340332022076 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=0.0, lf3=0.0; 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; } /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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)); /* FALLTHROUGH */ 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 */ /* FALLTHROUGH */ 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); } /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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 */ /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltraitf.h0000644000175000017500000000032514163340332021734 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 tmp_ns50wwy/src/spicelib/devices/ltra/ltraacld.c0000644000175000017500000001052214163340332022050 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); } tmp_ns50wwy/src/spicelib/devices/ltra/ltra.c0000644000175000017500000000556414163340332021236 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); tmp_ns50wwy/src/spicelib/devices/ltra/ltraask.c0000644000175000017500000000435714163340332021734 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 */ } tmp_ns50wwy/src/spicelib/devices/ltra/ltraacct.c0000644000175000017500000002476414163340332022074 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); } tmp_ns50wwy/src/spicelib/devices/bjt/0000755000175000017500000000000014163340332017733 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bjt/bjtsoachk.c0000644000175000017500000001255014163340332022052 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 */ double pd; double ic, ib; /* actual bjt currents */ int maxwarns; static int warns_vbe = 0, warns_vbc = 0, warns_vce = 0; static int warns_pd = 0, warns_ic = 0, warns_ib = 0; if (!ckt) { warns_vbe = 0; warns_vbc = 0; warns_vce = 0; warns_pd = 0; warns_ic = 0; warns_ib = 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++; } ic = fabs(*(ckt->CKTstate0 + here->BJTcc)); if (ic > fabs(model->BJTicMax)) if (warns_ic < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Ic=%.4g A at Vce=%.4g V has exceeded Ic_max=%.4g A\n", ic, vce, model->BJTicMax); warns_ic++; } ib = fabs(*(ckt->CKTstate0 + here->BJTcb)); if (ib > fabs(model->BJTibMax)) if (warns_ib < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Ib=%.4g A at Vbe=%.4g V has exceeded Ib_max=%.4g A\n", ib, vbe, model->BJTibMax); warns_ib++; } if (warns_pd < maxwarns) { pd = fabs(*(ckt->CKTstate0 + here->BJTcc) * (*(ckt->CKTrhsOld + here->BJTcolNode) - *(ckt->CKTrhsOld + here->BJTemitNode)) ); pd += fabs(*(ckt->CKTstate0 + here->BJTcb) * (*(ckt->CKTrhsOld + here->BJTbaseNode) - *(ckt->CKTrhsOld + here->BJTemitNode)) ); pd += fabs(*(ckt->CKTstate0 + here->BJTcdsub) * (*(ckt->CKTrhsOld + here->BJTsubstConNode) - *(ckt->CKTrhsOld + here->BJTsubstNode)) ); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { pd += *(ckt->CKTstate0 + here->BJTcqsub) * fabs(*(ckt->CKTrhsOld + here->BJTsubstConNode) - *(ckt->CKTrhsOld + here->BJTsubstNode)); } pd *= here->BJTm; /* derating without self-heating, external temp and model tnom given */ if (model->BJTrth0Given && model->BJTpdMaxGiven && model->BJTtnomGiven) { double pd_max; if (here->BJTtemp < model->BJTtnom) pd_max = model->BJTpdMax; else { pd_max = model->BJTpdMax - (here->BJTtemp - model->BJTtnom) / model->BJTrth0; pd_max = (pd_max > 0) ? pd_max : 0.; } if (pd > pd_max) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W has exceeded Pd_max=%.4g W\n at Vce=%.4g V, Ib=%.4g A, Ic=%.4g A, and Te=%.4g C\n", pow, pd_max, vce, ib, ic, here->BJTtemp - CONSTCtoK); warns_pd++; } } /* no derating */ else { if (pd > model->BJTpdMax) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W has exceeded Pd_max=%.4g W\n at Vce=%.4g V, Ib=%.4g A, and Ic=%.4g A\n", pd, model->BJTpdMax, vce, ib, ic); warns_pd++; } } } } } return OK; } tmp_ns50wwy/src/spicelib/devices/bjt/bjtsprt.c0000644000175000017500000000277114163340332021576 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); } } } tmp_ns50wwy/src/spicelib/devices/bjt/Makefile.am0000644000175000017500000000113714163340332021771 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 tmp_ns50wwy/src/spicelib/devices/bjt/bjtacld.c0000644000175000017500000001331114163340332021501 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; double Irci_Vrci, Irci_Vbci, Irci_Vbcx, xcbcx; for( ; model != NULL; model = BJTnextModel(model)) { for( here = BJTinstances(model); here!= NULL; here = BJTnextInstance(here)) { m = here->BJTm; gcpr=here->BJTtcollectorConduct; gepr=here->BJTtemitterConduct; gpi= *(ckt->CKTstate0 + here->BJTgpi); gmu= *(ckt->CKTstate0 + here->BJTgmu); gm= *(ckt->CKTstate0 + here->BJTgm); go= *(ckt->CKTstate0 + here->BJTgo); Irci_Vrci = *(ckt->CKTstate0 + here->BJTirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->BJTirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->BJTirci_Vbcx); 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; xcbcx= *(ckt->CKTstate0 + here->BJTcqbcx) * ckt->CKTomega; *(here->BJTcolColPtr) += m * (gcpr); *(here->BJTbaseBasePtr) += m * (gx); *(here->BJTbaseBasePtr + 1) += m * (xcbx); *(here->BJTemitEmitPtr) += m * (gepr); *(here->BJTcolPrimeColPrimePtr) += m * (gmu+go); *(here->BJTcollCXcollCXPtr) += m * (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->BJTcollCollCXPtr) += m * (-gcpr); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-gepr); *(here->BJTcollCXCollPtr) += 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); if (model->BJTintCollResistGiven) { *(here->BJTcollCXcollCXPtr) += m * Irci_Vrci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vrci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vbci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbcx; *(here->BJTcollCXcollCXPtr) += m * -Irci_Vbcx; *(here->BJTcolPrimeCollCXPtr) += m * -Irci_Vrci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vrci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vbci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbcx; *(here->BJTcolPrimeCollCXPtr) += m * Irci_Vbcx; *(here->BJTbasePrimeBasePrimePtr + 1) += m * xcbcx; *(here->BJTcollCXcollCXPtr + 1) += m * xcbcx; *(here->BJTbasePrimeCollCXPtr + 1) += m * -xcbcx; *(here->BJTcollCXBasePrimePtr + 1) += m * -xcbcx; } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtdisto.c0000644000175000017500000012356414163340332021734 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtitf.h0000644000175000017500000000026514163340332021371 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 tmp_ns50wwy/src/spicelib/devices/bjt/bjtdefs.h0000644000175000017500000006623314163340332021537 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 BJTcollCXNode; /* number of internal collector 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 BJTBEtSatCur; /* temperature adjusted saturation current */ double BJTBCtSatCur; /* 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 BJTtintCollResist; /* temperature adjusted QS RO */ double BJTtepiSatVoltage; /* temperature adjusted QS VO */ double BJTtepiDoping; /* temperature adjusted QS GAMMA */ double *BJTcollCollCXPtr; /* pointer to sparse matrix at * (collector,collector cx) */ double *BJTbaseBasePrimePtr; /* pointer to sparse matrix at * (base,base prime) */ double *BJTemitEmitPrimePtr; /* pointer to sparse matrix at * (emitter,emitter prime) */ double *BJTcollCXCollPtr; /* pointer to sparse matrix at * (collector cx,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) */ double *BJTcollCXcollCXPtr; /* pointer to sparse matrix at * (collector cx,collector cx) */ double *BJTcollCXBasePrimePtr; /* pointer to sparse matrix at * (collector cx,base prime) */ double *BJTbasePrimeCollCXPtr; /* pointer to sparse matrix at * (base prime,collector cx) */ double *BJTcolPrimeCollCXPtr; /* pointer to sparse matrix at * (collector prime,collector cx) */ double *BJTcollCXColPrimePtr; /* pointer to sparse matrix at * (collector cx,base prime) */ 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 BJTcapbcx; 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 BJTvbcx BJTstate+2 #define BJTvrci BJTstate+3 #define BJTcc BJTstate+4 #define BJTcb BJTstate+5 #define BJTgpi BJTstate+6 #define BJTgmu BJTstate+7 #define BJTgm BJTstate+8 #define BJTgo BJTstate+9 #define BJTqbe BJTstate+10 #define BJTcqbe BJTstate+11 #define BJTqbc BJTstate+12 #define BJTcqbc BJTstate+13 #define BJTqsub BJTstate+14 #define BJTcqsub BJTstate+15 #define BJTqbx BJTstate+16 #define BJTcqbx BJTstate+17 #define BJTgx BJTstate+18 #define BJTcexbc BJTstate+19 #define BJTgeqcb BJTstate+20 #define BJTgcsub BJTstate+21 #define BJTgeqbx BJTstate+22 #define BJTvsub BJTstate+23 #define BJTcdsub BJTstate+24 #define BJTgdsub BJTstate+25 #define BJTirci BJTstate+26 #define BJTirci_Vrci BJTstate+27 #define BJTirci_Vbci BJTstate+28 #define BJTirci_Vbcx BJTstate+29 #define BJTqbcx BJTstate+30 #define BJTcqbcx BJTstate+31 #define BJTgbcx BJTstate+32 #define BJTnumStates 33 #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 BJTBEsatCur; double BJTBCsatCur; double BJTbetaF; /* input - don't use */ double BJTemissionCoeffF; double BJTearlyVoltF; double BJTrollOffF; double BJTleakBEcurrent; /* input - don't use */ double BJTleakBEemissionCoeff; double BJTbetaR; /* input - don't use */ double BJTemissionCoeffR; double BJTearlyVoltR; double BJTrollOffR; double BJTleakBCcurrent; /* input - don't use */ 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; double BJTintCollResist; double BJTepiSatVoltage; double BJTepiDoping; double BJTepiCharge; 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 BJTtiss1; double BJTtiss2; int BJTquasimod; double BJTenergyGapQS; double BJTtempExpRCI; double BJTtempExpVO; double BJTvbeMax; /* maximum voltage over B-E junction */ double BJTvbcMax; /* maximum voltage over B-C junction */ double BJTvceMax; /* maximum voltage over C-E branch */ double BJTicMax; /* maximum collector current */ double BJTibMax; /* maximum base current */ double BJTpdMax; /* maximum device power dissipation */ double BJTteMax; /* maximum device temperature */ double BJTrth0; /* thermal resistance juntion to ambient */ unsigned BJTsubsGiven : 1; unsigned BJTtnomGiven : 1; unsigned BJTsatCurGiven : 1; unsigned BJTBEsatCurGiven : 1; unsigned BJTBCsatCurGiven : 1; unsigned BJTbetaFGiven : 1; unsigned BJTemissionCoeffFGiven : 1; unsigned BJTearlyVoltFGiven : 1; unsigned BJTrollOffFGiven : 1; unsigned BJTleakBEcurrentGiven : 1; unsigned BJTleakBEemissionCoeffGiven : 1; unsigned BJTbetaRGiven : 1; unsigned BJTemissionCoeffRGiven : 1; unsigned BJTearlyVoltRGiven : 1; unsigned BJTrollOffRGiven : 1; unsigned BJTleakBCcurrentGiven : 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 BJTintCollResistGiven : 1; unsigned BJTepiSatVoltageGiven : 1; unsigned BJTepiDopingGiven : 1; unsigned BJTepiChargeGiven : 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 BJTtiss1Given : 1; unsigned BJTtiss2Given : 1; unsigned BJTquasimodGiven : 1; unsigned BJTenergyGapQSGiven : 1; unsigned BJTtempExpRCIGiven : 1; unsigned BJTtempExpVOGiven : 1; unsigned BJTvbeMaxGiven : 1; unsigned BJTvbcMaxGiven : 1; unsigned BJTvceMaxGiven : 1; unsigned BJTpdMaxGiven : 1; unsigned BJTicMaxGiven : 1; unsigned BJTibMaxGiven : 1; unsigned BJTteMaxGiven : 1; unsigned BJTrth0Given : 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_IBE, BJT_MOD_IBC, BJT_MOD_BF, BJT_MOD_NF, BJT_MOD_VAF, BJT_MOD_IKF, BJT_MOD_ISE, BJT_MOD_NE, BJT_MOD_BR, BJT_MOD_NR, BJT_MOD_VAR, BJT_MOD_IKR, BJT_MOD_ISC, 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_RCO, BJT_MOD_VO, BJT_MOD_GAMMA, BJT_MOD_QCO, 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_TISS1, BJT_MOD_TISS2, BJT_MOD_QUASIMOD, BJT_MOD_EGQS, BJT_MOD_XRCI, BJT_MOD_XD, BJT_MOD_VBE_MAX, BJT_MOD_VBC_MAX, BJT_MOD_VCE_MAX, BJT_MOD_PD_MAX, BJT_MOD_IC_MAX, BJT_MOD_IB_MAX, BJT_MOD_TE_MAX, BJT_MOD_RTH0, }; /* device questions */ enum { BJT_QUEST_FT = 211, BJT_QUEST_COLNODE, BJT_QUEST_BASENODE, BJT_QUEST_EMITNODE, BJT_QUEST_SUBSTNODE, BJT_QUEST_COLLCXNODE, 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*/ tmp_ns50wwy/src/spicelib/devices/bjt/bjttrunc.c0000644000175000017500000000165114163340332021735 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); if (model->BJTintCollResistGiven) { CKTterr(here->BJTqbcx,ckt,timeStep); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtinit.c0000644000175000017500000000300614163340332021541 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; } tmp_ns50wwy/src/spicelib/devices/bjt/bjtpzld.c0000644000175000017500000001500514163340332021551 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; double Irci_Vrci, Irci_Vbci, Irci_Vbcx, xcbcx; for( ; model != NULL; model = BJTnextModel(model)) { for( here = BJTinstances(model); here!= NULL; here = BJTnextInstance(here)) { m = here->BJTm; gcpr=here->BJTtcollectorConduct; gepr=here->BJTtemitterConduct; gpi= *(ckt->CKTstate0 + here->BJTgpi); gmu= *(ckt->CKTstate0 + here->BJTgmu); gm= *(ckt->CKTstate0 + here->BJTgm); go= *(ckt->CKTstate0 + here->BJTgo); Irci_Vrci = *(ckt->CKTstate0 + here->BJTirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->BJTirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->BJTirci_Vbcx); 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); xcbcx= *(ckt->CKTstate0 + here->BJTcqbcx); *(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) + (xcmu+xcbx) * (s->real)); *(here->BJTcolPrimeColPrimePtr + 1) += m * ((xcmu+xcbx) * (s->imag)); *(here->BJTcollCXcollCXPtr) += m * (gcpr); *(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->BJTcollCollCXPtr) += m * (-gcpr); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-gepr); *(here->BJTcollCXCollPtr) += 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)); if (model->BJTintCollResistGiven) { *(here->BJTcollCXcollCXPtr) += m * Irci_Vrci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vrci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vbci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbcx; *(here->BJTcollCXcollCXPtr) += m * -Irci_Vbcx; *(here->BJTcolPrimeCollCXPtr) += m * -Irci_Vrci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vrci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vbci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbcx; *(here->BJTcolPrimeCollCXPtr) += m * Irci_Vbcx; *(here->BJTbasePrimeBasePrimePtr) += m * xcbcx * (s->real); *(here->BJTbasePrimeBasePrimePtr + 1) += m * xcbcx * (s->imag); *(here->BJTcollCXcollCXPtr) += m * xcbcx * (s->real); *(here->BJTcollCXcollCXPtr + 1) += m * xcbcx * (s->imag); *(here->BJTbasePrimeCollCXPtr) += m * -xcbcx * (s->real); *(here->BJTbasePrimeCollCXPtr + 1) += m * -xcbcx * (s->imag); *(here->BJTcollCXBasePrimePtr) += m * -xcbcx * (s->real); *(here->BJTcollCXBasePrimePtr + 1) += m * -xcbcx * (s->imag); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtext.h0000644000175000017500000000250014163340332021401 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*, CKTcircuit*); extern int BJTsoaCheck(CKTcircuit *, GENmodel *); #endif tmp_ns50wwy/src/spicelib/devices/bjt/bjtsetup.c0000644000175000017500000004653014163340332021747 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->BJTBEsatCurGiven) { /* temp update will decide of IS usage */ model->BJTBEsatCur = 0.0; } if(!model->BJTBCsatCurGiven) { /* temp update will decide of IS usage */ model->BJTBCsatCur = 0.0; } if(!model->BJTbetaFGiven) { model->BJTbetaF = 100; } if(!model->BJTemissionCoeffFGiven) { model->BJTemissionCoeffF = 1; } if(!model->BJTleakBEcurrentGiven) { model->BJTleakBEcurrent = 0; } else { if(model->BJTleakBEcurrent > 1e-04) { model->BJTleakBEcurrent = model->BJTsatCur * model->BJTleakBEcurrent; } } if(!model->BJTleakBCcurrentGiven) { model->BJTleakBCcurrent = 0; } else { if(model->BJTleakBCcurrent > 1e-04) { model->BJTleakBCcurrent = model->BJTsatCur * model->BJTleakBCcurrent; } } 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->BJTintCollResistGiven) ||(model->BJTintCollResist<0.01)) { model->BJTintCollResist = 0.01; } if(!model->BJTepiSatVoltageGiven) { model->BJTepiSatVoltage = 10.0; } if(!model->BJTepiDopingGiven) { model->BJTepiDoping = 1.0e-11; } if(!model->BJTepiChargeGiven) { model->BJTepiCharge = 0.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->BJTtiss1Given) { model->BJTtiss1 = 0.0; } if(!model->BJTtiss2Given) { model->BJTtiss2 = 0.0; } if(!model->BJTquasimodGiven) { model->BJTquasimod = 0; } if(!model->BJTenergyGapQSGiven) { model->BJTenergyGapQS = 1.206; } if(!model->BJTtempExpRCIGiven) { if (model->BJTtype == NPN) model->BJTtempExpRCI = 2.42; else model->BJTtempExpRCI = 2.2; } if(!model->BJTtempExpVOGiven) { if (model->BJTtype == NPN) model->BJTtempExpVO = 0.87; else model->BJTtempExpVO = 0.52; } if(!model->BJTvbeMaxGiven) { model->BJTvbeMax = 1e99; } if(!model->BJTvbcMaxGiven) { model->BJTvbcMax = 1e99; } if(!model->BJTvceMaxGiven) { model->BJTvceMax = 1e99; } if(!model->BJTicMaxGiven) { model->BJTicMax = 1e99; } if(!model->BJTibMaxGiven) { model->BJTibMax = 1e99; } if(!model->BJTpdMaxGiven) { model->BJTpdMax = 1e99; } if(!model->BJTteMaxGiven) { model->BJTteMax = 1e99; } /* 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->BJTcollCXNode = here->BJTcolNode; } else if(here->BJTcollCXNode == 0) { error = CKTmkVolt(ckt, &tmp, here->BJTname, "collCX"); if(error) return(error); here->BJTcollCXNode = tmp->number; } if(!model->BJTintCollResistGiven) { here->BJTcolPrimeNode = here->BJTcollCXNode; } 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(BJTcollCollCXPtr,BJTcolNode,BJTcollCXNode); TSTALLOC(BJTbaseBasePrimePtr,BJTbaseNode,BJTbasePrimeNode); TSTALLOC(BJTemitEmitPrimePtr,BJTemitNode,BJTemitPrimeNode); TSTALLOC(BJTcollCXCollPtr,BJTcollCXNode,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); TSTALLOC(BJTcollCXcollCXPtr,BJTcollCXNode,BJTcollCXNode); if(model->BJTintCollResistGiven) { TSTALLOC(BJTcollCXBasePrimePtr,BJTcollCXNode,BJTbasePrimeNode); TSTALLOC(BJTbasePrimeCollCXPtr,BJTbasePrimeNode,BJTcollCXNode); TSTALLOC(BJTcolPrimeCollCXPtr,BJTcolPrimeNode,BJTcollCXNode); TSTALLOC(BJTcollCXColPrimePtr,BJTcollCXNode,BJTcolPrimeNode); } } } 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->BJTcollCXNode) CKTdltNNum(ckt, here->BJTcolPrimeNode); here->BJTcolPrimeNode = 0; if (here->BJTcollCXNode > 0 && here->BJTcollCXNode != here->BJTcolNode) CKTdltNNum(ckt, here->BJTcollCXNode); here->BJTcollCXNode = 0; } } return OK; } tmp_ns50wwy/src/spicelib/devices/bjt/bjtsload.c0000644000175000017500000002642614163340332021713 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); 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtinit.h0000644000175000017500000000035614163340332021553 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 tmp_ns50wwy/src/spicelib/devices/bjt/bjtask.c0000644000175000017500000003055014163340332021360 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; 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_COLLCXNODE: value->iValue = here->BJTcollCXNode; 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){ int itmp; 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 */ } tmp_ns50wwy/src/spicelib/devices/bjt/ChangeLog0000644000175000017500000000041714163340332021507 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. tmp_ns50wwy/src/spicelib/devices/bjt/bjtdset.h0000644000175000017500000000006114163340332021540 0ustar carstencarsten#ifndef __BJTDSET_H #define __BJTDSET_H #endif tmp_ns50wwy/src/spicelib/devices/bjt/bjtdset.c0000644000175000017500000005574614163340332021557 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 csatbe, csatbc; 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 */ csatbe=here->BJTBEtSatCur * here->BJTm; csatbc=here->BJTBCtSatCur * here->BJTm; rbpr=here->BJTtminBaseResist/here->BJTm; rbpi=here->BJTtbaseResist/here->BJTm-rbpr; oik=here->BJTtinvRollOffF/here->BJTm; c2=here->BJTtBEleakCur * here->BJTm; vte=here->BJTtleakBEemissionCoeff*vt; oikr=here->BJTtinvRollOffR/here->BJTm; c4=here->BJTtBCleakCur * here->BJTm; vtc=here->BJTtleakBCemissionCoeff*vt; xjrb=here->BJTtbaseCurrentHalfResist * 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=csatbe*(evbe-1)+ckt->CKTgmin*vbe; gbe=csatbe*evbe/vtn+ckt->CKTgmin; gbe2 = csatbe*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 = -csatbe/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=csatbc*(evbc-1)+ckt->CKTgmin*vbc; gbc=csatbc*evbc/vtn+ckt->CKTgmin; gbc2=csatbc*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 = -csatbc/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; czbc=ctot*cdis; czbx=ctot-czbc; pc=here->BJTtBCpot; xmc=here->BJTtjunctionExpBC; fcpe=here->BJTtDepCap; czcs=here->BJTtSubcap * here->BJTm; ps=model->BJTpotentialSubstrate; xms=model->BJTexponentialSubstrate; xtf=model->BJTtransitTimeBiasCoeffF; ovtf=model->BJTtransitTimeVBCFactor; xjtf=here->BJTttransitTimeHighCurrentF * 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtmpar.c0000644000175000017500000004205214163340332021541 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_IBE: mods->BJTBEsatCur = value->rValue; mods->BJTBEsatCurGiven = TRUE; break; case BJT_MOD_IBC: mods->BJTBCsatCur = value->rValue; mods->BJTBCsatCurGiven = 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_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_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_RCO: mods->BJTintCollResist = value->rValue; mods->BJTintCollResistGiven = TRUE; break; case BJT_MOD_VO: mods->BJTepiSatVoltage = value->rValue; mods->BJTepiSatVoltageGiven = TRUE; break; case BJT_MOD_GAMMA: mods->BJTepiDoping = value->rValue; mods->BJTepiDopingGiven = TRUE; break; case BJT_MOD_QCO: mods->BJTepiCharge = value->rValue; mods->BJTepiChargeGiven = 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_TISS1: mods->BJTtiss1 = value->rValue; mods->BJTtiss1Given = TRUE; break; case BJT_MOD_TISS2: mods->BJTtiss2 = value->rValue; mods->BJTtiss2Given = TRUE; break; case BJT_MOD_QUASIMOD: mods->BJTquasimod = value->iValue; mods->BJTquasimodGiven = TRUE; break; case BJT_MOD_EGQS: mods->BJTenergyGapQS = value->rValue; mods->BJTenergyGapQSGiven = TRUE; break; case BJT_MOD_XRCI: mods->BJTtempExpRCI = value->rValue; mods->BJTtempExpRCIGiven = TRUE; break; case BJT_MOD_XD: mods->BJTtempExpVO = value->rValue; mods->BJTtempExpVOGiven = 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; case BJT_MOD_IC_MAX: mods->BJTicMax = value->rValue; mods->BJTicMaxGiven = TRUE; break; case BJT_MOD_IB_MAX: mods->BJTibMax = value->rValue; mods->BJTibMaxGiven = TRUE; break; case BJT_MOD_PD_MAX: mods->BJTpdMax = value->rValue; mods->BJTpdMaxGiven = TRUE; break; case BJT_MOD_TE_MAX: mods->BJTteMax = value->rValue; mods->BJTteMaxGiven = TRUE; break; case BJT_MOD_RTH0: mods->BJTrth0 = value->rValue; mods->BJTrth0Given = TRUE; break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtdel.c0000644000175000017500000000073514163340332021350 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; } tmp_ns50wwy/src/spicelib/devices/bjt/bjtload.c0000644000175000017500000012127014163340332021521 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 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 ctot; double czbc; double czbcf2; double czbe; double czbef2; double czbx; double czbxf2; double czsub; double delvbc; double delvbcx; 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 geq; double geqbx; double geqcb; double gex; double gm; double gmu; double go; double gpi; double gx; double ovtf; double pc; double pe; double ps; double q1; double q2; double qb; double rbpi; double sarg; double sqarg; double temp; double tf; double tr; double vbc; double vbcx; 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 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; double vrci=0.0, delvrci; double Irci=0.0, Irci_Vrci=0.0, Irci_Vbci=0.0, Irci_Vbcx=0.0; double Qbci=0.0, Qbci_Vbci=0.0, Qbcx, Qbcx_Vbcx=0.0, gbcx, cbcx; int ttype; /* loop through all the models */ for( ; model != NULL; model = BJTnextModel(model)) { ttype = model->BJTtype*model->BJTsubs; /* 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; geqbx=0; geqcb=0; gbcx=0; cbcx=0; /* * dc model paramters */ rbpi=here->BJTtbaseResist-here->BJTtminBaseResist; vte=here->BJTtleakBEemissionCoeff*vt; vtc=here->BJTtleakBCemissionCoeff*vt; 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); vbcx = *(ckt->CKTstate1 + here->BJTvbcx); vrci = *(ckt->CKTstate1 + here->BJTvrci); vbx=model->BJTtype*( *(ckt->CKTrhsOp+here->BJTbaseNode)- *(ckt->CKTrhsOp+here->BJTcolPrimeNode)); vsub=ttype*( *(ckt->CKTrhsOp+here->BJTsubstNode)- *(ckt->CKTrhsOp+here->BJTsubstConNode)); } else{ vbe = *(ckt->CKTstate0 + here->BJTvbe); vbc = *(ckt->CKTstate0 + here->BJTvbc); vbcx = *(ckt->CKTstate0 + here->BJTvbcx); vrci = *(ckt->CKTstate0 + here->BJTvrci); if((ckt->CKTsenInfo->SENmode == DCSEN)|| (ckt->CKTsenInfo->SENmode == TRANSEN)){ vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=ttype*( *(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=ttype*( *(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); vbcx= *(ckt->CKTstate0 + here->BJTvbcx); vrci = *(ckt->CKTstate0 + here->BJTvrci); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=ttype*( *(ckt->CKTrhsOld+here->BJTsubstNode)- *(ckt->CKTrhsOld+here->BJTsubstConNode)); } else if(ckt->CKTmode & MODEINITTRAN) { vbe = *(ckt->CKTstate1 + here->BJTvbe); vbc = *(ckt->CKTstate1 + here->BJTvbc); vbcx = *(ckt->CKTstate1 + here->BJTvbcx); vrci = *(ckt->CKTstate1 + here->BJTvrci); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=ttype*( *(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=vbcx=vbe-vce; vbx=vbc; vsub=0; vrci=0.0; } else if((ckt->CKTmode & MODEINITJCT) && (here->BJToff==0)) { vbe=here->BJTtVcrit; vbc=vbcx=0; /* ERROR: need to initialize VSUB, VBX here */ vsub=vbx=0; vrci=0.0; } else if((ckt->CKTmode & MODEINITJCT) || ( (ckt->CKTmode & MODEINITFIX) && (here->BJToff!=0))) { vbe=0; vbc=vbcx=0; /* ERROR: need to initialize VSUB, VBX here */ vsub=vbx=0; vrci=0.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->BJTvbcx) = *(ckt->CKTstate1 + here->BJTvbcx); vbcx = (1+xfact)**(ckt->CKTstate1 + here->BJTvbcx)- xfact* *(ckt->CKTstate2 + here->BJTvbcx); *(ckt->CKTstate0 + here->BJTvrci) = *(ckt->CKTstate1 + here->BJTvrci); vrci = (1+xfact) * *(ckt->CKTstate1 + here->BJTvrci)- xfact * *(ckt->CKTstate2 + here->BJTvrci); *(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); *(ckt->CKTstate0 + here->BJTirci) = *(ckt->CKTstate1 + here->BJTirci); *(ckt->CKTstate0 + here->BJTirci_Vrci) = *(ckt->CKTstate1 + here->BJTirci_Vrci); *(ckt->CKTstate0 + here->BJTirci_Vbci) = *(ckt->CKTstate1 + here->BJTirci_Vbci); *(ckt->CKTstate0 + here->BJTirci_Vbcx) = *(ckt->CKTstate1 + here->BJTirci_Vbcx); } 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)); vbcx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTcollCXNode)); vrci=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTcollCXNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); #ifndef PREDICTOR } #endif /* PREDICTOR */ delvbe=vbe- *(ckt->CKTstate0 + here->BJTvbe); delvbc=vbc- *(ckt->CKTstate0 + here->BJTvbc); delvbcx=vbcx- *(ckt->CKTstate0 + here->BJTvbcx); delvrci = vrci - *(ckt->CKTstate0 + here->BJTvrci); vbx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbaseNode)- *(ckt->CKTrhsOld+here->BJTcolPrimeNode)); vsub=ttype*( *(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(delvbcx) < ckt->CKTreltol*MAX(fabs(vbcx), fabs(*(ckt->CKTstate0 + here->BJTvbcx)))+ ckt->CKTvoltTol) ) if( (fabs(delvrci) < ckt->CKTreltol*MAX(fabs(vrci), fabs(*(ckt->CKTstate0 + here->BJTvrci)))+ 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); vbcx = *(ckt->CKTstate0 + here->BJTvbcx); vrci = *(ckt->CKTstate0 + here->BJTvrci); 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); Irci = *(ckt->CKTstate0 + here->BJTirci); Irci_Vrci = *(ckt->CKTstate0 + here->BJTirci_Vrci); Irci_Vbci = *(ckt->CKTstate0 + here->BJTirci_Vbci); Irci_Vbcx = *(ckt->CKTstate0 + here->BJTirci_Vbcx); gbcx = *(ckt->CKTstate0 + here->BJTgbcx); cbcx = *(ckt->CKTstate0 + here->BJTcqbcx); 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; if (model->BJTsubSatCurGiven) { vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt, here->BJTtSubVcrit,&ichk1); } else { vsub = DEVpnjlim(vsub,*(ckt->CKTstate0 + here->BJTvsub),vt, 50,&ichk1); } if (ichk1 == 1) icheck=1; vrci = vbc - vbcx; /* in case vbc was limited */ } /* * determine dc current and derivitives */ next1: vtn=vt*here->BJTtemissionCoeffF; if(vbe >= -3*vtn){ evbe=exp(vbe/vtn); cbe=here->BJTBEtSatCur*(evbe-1); gbe=here->BJTBEtSatCur*evbe/vtn; } else { arg=3*vtn/(vbe*CONSTe); arg = arg * arg * arg; cbe = -here->BJTBEtSatCur*(1+arg); gbe = here->BJTBEtSatCur*3*arg/vbe; } if (here->BJTtBEleakCur == 0) { cben=0; gben=0; } else { if(vbe >= -3*vte){ evben=exp(vbe/vte); cben=here->BJTtBEleakCur*(evben-1); gben=here->BJTtBEleakCur*evben/vte; } else { arg=3*vte/(vbe*CONSTe); arg = arg * arg * arg; cben = -here->BJTtBEleakCur*(1+arg); gben = here->BJTtBEleakCur*3*arg/vbe; } } gben+=ckt->CKTgmin; cben+=ckt->CKTgmin*vbe; vtn=vt*here->BJTtemissionCoeffR; if(vbc >= -3*vtn) { evbc=exp(vbc/vtn); cbc=here->BJTBCtSatCur*(evbc-1); gbc=here->BJTBCtSatCur*evbc/vtn; } else { arg=3*vtn/(vbc*CONSTe); arg = arg * arg * arg; cbc = -here->BJTBCtSatCur*(1+arg); gbc = here->BJTBCtSatCur*3*arg/vbc; } if (here->BJTtBCleakCur == 0) { cbcn=0; gbcn=0; } else { if(vbc >= -3*vtc) { evbcn=exp(vbc/vtc); cbcn=here->BJTtBCleakCur*(evbcn-1); gbcn=here->BJTtBCleakCur*evbcn/vtc; } else { arg=3*vtc/(vbc*CONSTe); arg = arg * arg * arg; cbcn = -here->BJTtBCleakCur*(1+arg); gbcn = here->BJTtBCleakCur*3*arg/vbc; } } gbcn+=ckt->CKTgmin; cbcn+=ckt->CKTgmin*vbc; if (model->BJTsubSatCurGiven) { vts=vt*here->BJTtemissionCoeffS; if(vsub <= -3*vts) { arg=3*vts/(vsub*CONSTe); arg = arg * arg * arg; gdsub = here->BJTtSubSatCur*3*arg/vsub+ckt->CKTgmin; cdsub = -here->BJTtSubSatCur*(1+arg)+ckt->CKTgmin*vsub; } else { evsub = exp(MIN(MAX_EXP_ARG,vsub/vts)); gdsub = here->BJTtSubSatCur*evsub/vts + ckt->CKTgmin; cdsub = here->BJTtSubSatCur*(evsub-1) + ckt->CKTgmin*vsub; } } else { gdsub = ckt->CKTgmin; cdsub = ckt->CKTgmin*vsub; } /* * Kull's Quasi-Saturation model */ if (model->BJTintCollResistGiven) { if (vrci > 0.) { double Kbci,Kbci_Vbci,Kbcx,Kbcx_Vbcx; double rKp1,rKp1_Vbci,rKp1_Vbcx,xvar1,xvar1_Vbci,xvar1_Vbcx; double Vcorr,Vcorr_Vbci,Vcorr_Vbcx,Iohm,Iohm_Vrci,Iohm_Vbci,Iohm_Vbcx; double quot,quot_Vrci; Kbci = sqrt(1+here->BJTtepiDoping*exp(vbc/vt)); Kbci_Vbci = here->BJTtepiDoping*exp(vbc/vt)/(2*vt*Kbci); Kbcx = sqrt(1+here->BJTtepiDoping*exp(vbcx/vt)); Kbcx_Vbcx = here->BJTtepiDoping*exp(vbcx/vt)/(2*vt*Kbcx); rKp1 = (1+Kbci)/(1+Kbcx); rKp1_Vbci = Kbci_Vbci/(1+Kbci); rKp1_Vbcx = -(1+Kbci)*Kbcx_Vbcx/((Kbcx+1)*(Kbcx+1)); xvar1 = log(rKp1); xvar1_Vbci = rKp1_Vbci/rKp1; xvar1_Vbcx = rKp1_Vbcx/rKp1; Vcorr = vt*(Kbci - Kbcx - xvar1); Vcorr_Vbci = vt*(Kbci_Vbci - xvar1_Vbci); Vcorr_Vbcx = vt*(-Kbcx_Vbcx - xvar1_Vbcx); Iohm = (vrci+Vcorr)/here->BJTtintCollResist; Iohm_Vrci = 1/here->BJTtintCollResist; Iohm_Vbci = Vcorr_Vbci/here->BJTtintCollResist; Iohm_Vbcx = Vcorr_Vbcx/here->BJTtintCollResist; quot = 1+fabs(vrci)/here->BJTtepiSatVoltage; quot_Vrci = vrci/(here->BJTtepiSatVoltage*fabs(vrci)); Irci = Iohm/quot + ckt->CKTgmin*vrci; Irci_Vrci = Iohm_Vrci/quot-Iohm*quot_Vrci/(quot*quot) + ckt->CKTgmin; Irci_Vbci = Iohm_Vbci/quot; Irci_Vbcx = Iohm_Vbcx/quot; Qbci = model->BJTepiCharge*Kbci; Qbci_Vbci = model->BJTepiCharge*Kbci_Vbci; Qbcx = model->BJTepiCharge*Kbcx; Qbcx_Vbcx = model->BJTepiCharge*Kbcx_Vbcx; *(ckt->CKTstate0 + here->BJTqbcx) = Qbcx; here->BJTcapbcx = Qbcx_Vbcx; } else { Irci = vrci/here->BJTtintCollResist + ckt->CKTgmin*vrci; Irci_Vrci = 1/here->BJTtintCollResist + ckt->CKTgmin; Irci_Vbci = 0.0; Irci_Vbcx = 0.0; Qbci = 0.0; Qbci_Vbci = 0.0; Qbcx = 0.0; Qbcx_Vbcx = 0.0; *(ckt->CKTstate0 + here->BJTqbcx) = Qbcx; here->BJTcapbcx = Qbcx_Vbcx; } } /* * determine base charge terms */ q1=1/(1-here->BJTtinvEarlyVoltF*vbc-here->BJTtinvEarlyVoltR*vbe); if(here->BJTtinvRollOffF == 0 && here->BJTtinvRollOffR == 0) { qb=q1; dqbdve=q1*qb*here->BJTtinvEarlyVoltR; dqbdvc=q1*qb*here->BJTtinvEarlyVoltF; } else { q2=here->BJTtinvRollOffF*cbe+here->BJTtinvRollOffR*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+here->BJTtinvRollOffF*gbe/sqarg); dqbdvc=q1*(qb*here->BJTtinvEarlyVoltF+here->BJTtinvRollOffR*gbc/sqarg); } else { dqbdve=q1*(qb*here->BJTtinvEarlyVoltR+here->BJTtinvRollOffF*gbe*2*sqarg*model->BJTnkf/arg); dqbdvc=q1*(qb*here->BJTtinvEarlyVoltF+here->BJTtinvRollOffR*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) && model->BJTexcessPhaseFactor != 0) { arg1=ckt->CKTdelta/model->BJTexcessPhaseFactor; 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=here->BJTtminBaseResist+rbpi/qb; if(here->BJTtbaseCurrentHalfResist != 0) { arg1=MAX(cb/here->BJTtbaseCurrentHalfResist,1e-9); arg2=(-1+sqrt(1+14.59025*arg1))/2.4317/sqrt(arg1); arg1=tan(arg2); gx=here->BJTtminBaseResist+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; pe=here->BJTtBEpot; xme=here->BJTtjunctionExpBE; cdis=model->BJTbaseFractionBCcap; ctot=here->BJTtBCcap; czbc=ctot*cdis; czbx=ctot-czbc; pc=here->BJTtBCpot; xmc=here->BJTtjunctionExpBC; fcpe=here->BJTtDepCap; czsub=here->BJTtSubcap; ps=here->BJTtSubpot; xms=here->BJTtjunctionExpSub; xtf=model->BJTtransitTimeBiasCoeffF; ovtf=model->BJTtransitTimeVBCFactor; xjtf=here->BJTttransitTimeHighCurrentF; 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; if (model->BJTintCollResistGiven) { *(ckt->CKTstate0 + here->BJTqbc) += Qbci; here->BJTcapbc += Qbci_Vbci; capbc += Qbci_Vbci; } 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; *(ckt->CKTstate0 + here->BJTcqbcx) = Qbcx_Vbcx; 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->BJTirci_Vrci) = Irci_Vrci; *(ckt->CKTstate0 + here->BJTirci_Vbci) = Irci_Vbci; *(ckt->CKTstate0 + here->BJTirci_Vbcx) = Irci_Vbcx; *(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) ; *(ckt->CKTstate1 + here->BJTqbcx) = *(ckt->CKTstate0 + here->BJTqbcx) ; } 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 (model->BJTintCollResistGiven) { error = NIintegrate(ckt,&geq,&ceq,Qbcx_Vbcx,here->BJTqbcx); if(error) return(error); gbcx = geq; cbcx = *(ckt->CKTstate0 + here->BJTcqbcx); } if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->BJTcqbe) = *(ckt->CKTstate0 + here->BJTcqbe); *(ckt->CKTstate1 + here->BJTcqbc) = *(ckt->CKTstate0 + here->BJTcqbc); *(ckt->CKTstate1 + here->BJTcqbcx) = *(ckt->CKTstate0 + here->BJTcqbcx); } } } 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->BJTvbcx) = vbcx; *(ckt->CKTstate0 + here->BJTvrci) = vrci; *(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; *(ckt->CKTstate0 + here->BJTirci) = Irci; *(ckt->CKTstate0 + here->BJTirci_Vrci) = Irci_Vrci; *(ckt->CKTstate0 + here->BJTirci_Vbci) = Irci_Vbci; *(ckt->CKTstate0 + here->BJTirci_Vbcx) = Irci_Vbcx; /* 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=ttype * (*(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 * (here->BJTtcollectorConduct); *(here->BJTbaseBasePtr) += m * (gx+geqbx); *(here->BJTemitEmitPtr) += m * (here->BJTtemitterConduct); *(here->BJTcolPrimeColPrimePtr) += m * (gmu+go+geqbx); *(here->BJTcollCXcollCXPtr) += m * (here->BJTtcollectorConduct); *(here->BJTsubstConSubstConPtr) += m * (geqsub); *(here->BJTbasePrimeBasePrimePtr) += m * (gx +gpi+gmu+geqcb); *(here->BJTemitPrimeEmitPrimePtr) += m * (gpi+here->BJTtemitterConduct+gm+go); *(here->BJTcollCollCXPtr) += m * (-here->BJTtcollectorConduct); *(here->BJTbaseBasePrimePtr) += m * (-gx); *(here->BJTemitEmitPrimePtr) += m * (-here->BJTtemitterConduct); *(here->BJTcollCXCollPtr) += m * (-here->BJTtcollectorConduct); *(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 * (-here->BJTtemitterConduct); *(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); /* c Stamp element: Irci */ if (model->BJTintCollResistGiven) { double rhs_current = model->BJTtype * m * (Irci - Irci_Vrci*vrci - Irci_Vbci*vbc - Irci_Vbcx*vbcx); *(ckt->CKTrhs + here->BJTcollCXNode) += -rhs_current; *(here->BJTcollCXcollCXPtr) += m * Irci_Vrci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vrci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbci; *(here->BJTcollCXColPrimePtr) += m * -Irci_Vbci; *(here->BJTcollCXBasePrimePtr) += m * Irci_Vbcx; *(here->BJTcollCXcollCXPtr) += m * -Irci_Vbcx; *(ckt->CKTrhs + here->BJTcolPrimeNode) += rhs_current; *(here->BJTcolPrimeCollCXPtr) += m * -Irci_Vrci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vrci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbci; *(here->BJTcolPrimeColPrimePtr) += m * Irci_Vbci; *(here->BJTcolPrimeBasePrimePtr) += m * -Irci_Vbcx; *(here->BJTcolPrimeCollCXPtr) += m * Irci_Vbcx; *(ckt->CKTrhs + here->BJTbasePrimeNode) += m * -cbcx; *(ckt->CKTrhs + here->BJTcollCXNode) += m * cbcx; *(here->BJTbasePrimeBasePrimePtr) += m * gbcx; *(here->BJTcollCXcollCXPtr) += m * gbcx; *(here->BJTbasePrimeCollCXPtr) += m * -gbcx; *(here->BJTcollCXBasePrimePtr) += m * -gbcx; } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtparam.c0000644000175000017500000000461214163340332021702 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 : /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->BJTicVCE = *(value->v.vec.rVec+1); here->BJTicVCEGiven = TRUE; /* FALLTHROUGH */ case 1: here->BJTicVBE = *(value->v.vec.rVec); here->BJTicVBEGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtnoise.c0000644000175000017500000001374514163340332021726 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->BJTcollCXNode,inst->BJTcolNode, inst->BJTtcollectorConduct * 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-> 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtconv.c0000644000175000017500000000527614163340332021556 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 vbcx; double delvbe; double delvbc; double delvbcx; 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)); vbcx=model->BJTtype*( *(ckt->CKTrhsOld+here->BJTbasePrimeNode)- *(ckt->CKTrhsOld+here->BJTcollCXNode)); delvbe=vbe- *(ckt->CKTstate0 + here->BJTvbe); delvbc=vbc- *(ckt->CKTstate0 + here->BJTvbc); delvbcx=vbcx- *(ckt->CKTstate0 + here->BJTvbcx); 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtgetic.c0000644000175000017500000000225714163340332021700 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtsupd.c0000644000175000017500000001344214163340332021556 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtsacl.c0000644000175000017500000006614314163340332021533 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; gepr = here->BJTtemitterConduct; 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; gepr=here->BJTtemitterConduct; 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjttemp.c0000644000175000017500000003674114163340332021557 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->BJTminBaseResistGiven) { model->BJTminBaseResist = model->BJTbaseResist; } 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)); here->BJTtinvRollOffF /= here->BJTarea; } 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)); here->BJTtinvRollOffR /= here->BJTarea; } else { here->BJTtinvRollOffR = 0; } if(model->BJTcollectorResistGiven && model->BJTcollectorResist != 0) { here->BJTtcollectorConduct = 1/(model->BJTcollectorResist * (1+model->BJTtrc1*dt+model->BJTtrc2*dt*dt)); here->BJTtcollectorConduct *= here->BJTarea; } else { here->BJTtcollectorConduct = 0; } if(model->BJTemitterResistGiven && model->BJTemitterResist != 0) { here->BJTtemitterConduct = 1/(model->BJTemitterResist * (1+model->BJTtre1*dt+model->BJTtre2*dt*dt)); here->BJTtemitterConduct *= here->BJTarea; } else { here->BJTtemitterConduct = 0; } here->BJTtbaseResist = model->BJTbaseResist * (1+model->BJTtrb1*dt+model->BJTtrb2*dt*dt); here->BJTtbaseResist /= here->BJTarea; here->BJTtminBaseResist = model->BJTminBaseResist*(1+model->BJTtrm1*dt+model->BJTtrm2*dt*dt); here->BJTtminBaseResist /= here->BJTarea; here->BJTtbaseCurrentHalfResist = model->BJTbaseCurrentHalfResist * (1+model->BJTtirb1*dt+model->BJTtirb2*dt*dt); here->BJTtbaseCurrentHalfResist *= here->BJTarea; 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->BJTttransitTimeHighCurrentF *= here->BJTarea; 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 = here->BJTarea * model->BJTsatCur * factor; if ((model->BJTBEsatCurGiven) && (model->BJTBCsatCurGiven)) { factor = exp(factlog / model->BJTemissionCoeffF); here->BJTBEtSatCur = here->BJTarea * model->BJTBEsatCur * factor; } else { here->BJTBEtSatCur = here->BJTtSatCur; } if ((model->BJTBEsatCurGiven) && (model->BJTBCsatCurGiven)) { factor = exp(factlog / model->BJTemissionCoeffR); here->BJTBCtSatCur = model->BJTBCsatCur * factor; } else { here->BJTBCtSatCur = here->BJTtSatCur; } if (model->BJTsubSatCurGiven) here->BJTtSubSatCur = model->BJTsubSatCur * factor; } else if (model->BJTtlev == 3) { here->BJTtSatCur = here->BJTarea * pow(model->BJTsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt)); if ((model->BJTBEsatCurGiven) && (model->BJTBCsatCurGiven)) { here->BJTBEtSatCur = here->BJTarea * pow(model->BJTBEsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt)); } else { here->BJTBEtSatCur = here->BJTtSatCur; } if ((model->BJTBEsatCurGiven) && (model->BJTBCsatCurGiven)) { here->BJTBCtSatCur = pow(model->BJTBCsatCur,(1+model->BJTtis1*dt+model->BJTtis2*dt*dt)); } else { here->BJTBCtSatCur = here->BJTtSatCur; } if (model->BJTsubSatCurGiven) here->BJTtSubSatCur = pow(model->BJTsubSatCur,(1+model->BJTtiss1*dt+model->BJTtiss2*dt*dt)); } if (model->BJTsubs == VERTICAL) { here->BJTBCtSatCur *= here->BJTareab; } else { here->BJTBCtSatCur *= here->BJTareac; } if (model->BJTsubSatCurGiven) { if ((model->BJTBEsatCurGiven) && (model->BJTBCsatCurGiven)) { if (model->BJTsubs == VERTICAL) { here->BJTtSubSatCur *= here->BJTareac; } else { here->BJTtSubSatCur *= here->BJTareab; } } else { here->BJTtSubSatCur *= here->BJTarea; } } if (model->BJTintCollResistGiven) { if (model->BJTquasimod == 1) { double rT=here->BJTtemp/model->BJTtnom; here->BJTtintCollResist=model->BJTintCollResist*pow(rT,model->BJTtempExpRCI); here->BJTtepiSatVoltage=model->BJTepiSatVoltage*pow(rT,model->BJTtempExpVO); double xvar1=pow(rT,model->BJTtempExpIS); double xvar2=-model->BJTenergyGapQS*(1.0-rT)/vt; double xvar3=exp(xvar2); here->BJTtepiDoping=model->BJTepiDoping*xvar1*xvar3; } else { here->BJTtintCollResist=model->BJTintCollResist; here->BJTtepiSatVoltage=model->BJTepiSatVoltage; here->BJTtepiDoping=model->BJTepiDoping; } } 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 = here->BJTarea * model->BJTleakBEcurrent * exp(factlog/model->BJTleakBEemissionCoeff)/bfactor; here->BJTtBCleakCur = model->BJTleakBCcurrent * exp(factlog/model->BJTleakBCemissionCoeff)/bfactor; } else if (model->BJTtlev == 3) { here->BJTtBEleakCur = here->BJTarea * 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->BJTsubs == VERTICAL) { here->BJTtBCleakCur *= here->BJTareab; } else { here->BJTtBCleakCur *= here->BJTareac; } 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; } here->BJTtBEcap *= here->BJTarea; 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->BJTsubs == VERTICAL) here->BJTtBCcap *= here->BJTareab; else here->BJTtBCcap *= here->BJTareac; 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; } if (model->BJTsubs == VERTICAL) here->BJTtSubcap *= here->BJTareac; else here->BJTtSubcap *= here->BJTareab; 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)); if (model->BJTsubSatCurGiven) here->BJTtSubVcrit = vt * log(vt / (CONSTroot2*here->BJTtSubSatCur)); 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtsset.c0000644000175000017500000000234014163340332021554 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); } tmp_ns50wwy/src/spicelib/devices/bjt/bjtmask.c0000644000175000017500000003325314163340332021540 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_IBE: value->rValue = here->BJTBEsatCur; return(OK); case BJT_MOD_IBC: value->rValue = here->BJTBCsatCur; 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_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_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_RCO: value->rValue = here->BJTintCollResist; return(OK); case BJT_MOD_VO: value->rValue = here->BJTepiSatVoltage; return(OK); case BJT_MOD_GAMMA: value->rValue = here->BJTepiDoping; return(OK); case BJT_MOD_QCO: value->rValue = here->BJTepiCharge; 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_TISS1: value->rValue = here->BJTtiss1; return(OK); case BJT_MOD_TISS2: value->rValue = here->BJTtiss2; return(OK); case BJT_MOD_QUASIMOD: value->iValue = here->BJTquasimod; return(OK); case BJT_MOD_EGQS: value->rValue = here->BJTenergyGapQS; return(OK); case BJT_MOD_XRCI: value->rValue = here->BJTtempExpRCI; return(OK); case BJT_MOD_XD: value->rValue = here->BJTtempExpVO; 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); case BJT_MOD_IC_MAX: value->rValue = here->BJTicMax; return(OK); case BJT_MOD_IB_MAX: value->rValue = here->BJTibMax; return(OK); case BJT_MOD_PD_MAX: value->rValue = here->BJTpdMax; return(OK); case BJT_MOD_RTH0: value->rValue = here->BJTrth0; return(OK); case BJT_MOD_TE_MAX: value->rValue = here->BJTteMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/bjt/bjt.c0000644000175000017500000003606414163340332020667 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 */ #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("ibe", BJT_MOD_IBE, IF_REAL, "Base-Emitter saturation Current"), IOP("ibc", BJT_MOD_IBC, IF_REAL, "Base-Collector 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"), IOPR("c2", BJT_MOD_ISE, IF_REAL, "B-E leakage saturation current alias"), 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"), IOPR("c4", BJT_MOD_ISC, IF_REAL, "B-C leakage saturation current alias"), 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("rco", BJT_MOD_RCO, IF_REAL, "Intrinsic coll. resistance"), IOP("vo", BJT_MOD_VO, IF_REAL, "Epi drift saturation voltage"), IOP("gamma", BJT_MOD_GAMMA, IF_REAL, "Epi doping parameter"), IOP("qco", BJT_MOD_QCO, IF_REAL, "Epi Charge parameter"), 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"), IOPR("trb", 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"), IOPR("trc", 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"), IOPR("tre", 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"), IOPR("nk", BJT_MOD_NKF, IF_REAL, "NK 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("tiss1", BJT_MOD_TISS1, IF_REAL, "ISS 1. temperature coefficient"), IOP("tiss2", BJT_MOD_TISS2, IF_REAL, "ISS 2. temperature coefficient"), IOP("quasimod", BJT_MOD_QUASIMOD, IF_INTEGER, "Temperature equation selector"), IOP("vg", BJT_MOD_EGQS, IF_REAL, "Energy gap for QS temp. dependency"), IOP("cn", BJT_MOD_XRCI, IF_REAL, "Temperature exponent of RCI"), IOP("d", BJT_MOD_XD, IF_REAL, "Temperature exponent of VO"), 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"), IOP("pd_max", BJT_MOD_PD_MAX, IF_REAL, "maximum device power dissipation"), IOP("ic_max", BJT_MOD_IC_MAX, IF_REAL, "maximum collector current"), IOP("ib_max", BJT_MOD_IB_MAX, IF_REAL, "maximum base current"), IOP("te_max", BJT_MOD_TE_MAX, IF_REAL, "maximum temperature"), IOP("rth0", BJT_MOD_RTH0, IF_REAL, "thermal resistance juntion to ambient"), }; 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); tmp_ns50wwy/src/spicelib/devices/cccs/0000755000175000017500000000000014163340332020067 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/cccs/cccssprt.c0000644000175000017500000000276214163340332022066 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); } } } tmp_ns50wwy/src/spicelib/devices/cccs/cccs.c0000644000175000017500000000321414163340332021146 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); tmp_ns50wwy/src/spicelib/devices/cccs/Makefile.am0000644000175000017500000000065614163340332022132 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 tmp_ns50wwy/src/spicelib/devices/cccs/cccsext.h0000644000175000017500000000114014163340332021670 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*); tmp_ns50wwy/src/spicelib/devices/cccs/cccssld.c0000644000175000017500000000225114163340332021651 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccspzld.c0000644000175000017500000000202514163340332022037 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccspar.c0000644000175000017500000000205114163340332021647 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccsask.c0000644000175000017500000001161214163340332021646 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 */ } tmp_ns50wwy/src/spicelib/devices/cccs/cccssset.c0000644000175000017500000000164214163340332022050 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccsinit.h0000644000175000017500000000030214163340332022032 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 tmp_ns50wwy/src/spicelib/devices/cccs/cccsitf.h0000644000175000017500000000026014163340332021654 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 tmp_ns50wwy/src/spicelib/devices/cccs/cccssacl.c0000644000175000017500000000275714163340332022024 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccsload.c0000644000175000017500000000172614163340332022014 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccsdefs.h0000644000175000017500000000464014163340332022021 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*/ tmp_ns50wwy/src/spicelib/devices/cccs/cccsset.c0000644000175000017500000000310314163340332021657 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); } tmp_ns50wwy/src/spicelib/devices/cccs/cccsinit.c0000644000175000017500000000312314163340332022031 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; } tmp_ns50wwy/src/spicelib/devices/mos3/0000755000175000017500000000000014163340332020035 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mos3/mos3init.c0000644000175000017500000000326214163340332021751 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; } tmp_ns50wwy/src/spicelib/devices/mos3/Makefile.am0000644000175000017500000000112114163340332022064 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 tmp_ns50wwy/src/spicelib/devices/mos3/mos3pzld.c0000644000175000017500000001235714163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3conv.c0000644000175000017500000000635114163340332021755 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3ask.c0000644000175000017500000004100114163340332021555 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 */ } tmp_ns50wwy/src/spicelib/devices/mos3/mos3ext.h0000644000175000017500000000236414163340332021615 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*); tmp_ns50wwy/src/spicelib/devices/mos3/mos3sacl.c0000644000175000017500000007436114163340332021740 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3del.c0000644000175000017500000000057314163340332021554 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; } tmp_ns50wwy/src/spicelib/devices/mos3/mos3sset.c0000644000175000017500000000260514163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3ic.c0000644000175000017500000000245314163340332021402 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3load.c0000644000175000017500000012012214163340332021720 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3init.h0000644000175000017500000000037014163340332021753 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 tmp_ns50wwy/src/spicelib/devices/mos3/mos3set.c0000644000175000017500000002270114163340332021600 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; } tmp_ns50wwy/src/spicelib/devices/mos3/mos3defs.h0000644000175000017500000004564114163340332021743 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*/ tmp_ns50wwy/src/spicelib/devices/mos3/mos3dist.c0000644000175000017500000007716014163340332021761 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3dset.c0000644000175000017500000010056414163340332021750 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3mask.c0000644000175000017500000001216614163340332021744 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 */ } tmp_ns50wwy/src/spicelib/devices/mos3/mos3supd.c0000644000175000017500000001556714163340332021774 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3noi.c0000644000175000017500000001316714163340332021600 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3acld.c0000644000175000017500000001113414163340332021706 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3.c0000644000175000017500000002342214163340332021065 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); tmp_ns50wwy/src/spicelib/devices/mos3/mos3mpar.c0000644000175000017500000001516614163340332021753 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3par.c0000644000175000017500000000740214163340332021570 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->MOS3icVBS = *(value->v.vec.rVec+2); here->MOS3icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->MOS3icVGS = *(value->v.vec.rVec+1); here->MOS3icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3itf.h0000644000175000017500000000026014163340332021570 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 tmp_ns50wwy/src/spicelib/devices/mos3/mos3sld.c0000644000175000017500000006445114163340332021577 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3temp.c0000644000175000017500000003554014163340332021757 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); } tmp_ns50wwy/src/spicelib/devices/mos3/mos3sprt.c0000644000175000017500000000401114163340332021767 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"); } } } } tmp_ns50wwy/src/spicelib/devices/mos3/mos3trun.c0000644000175000017500000000134514163340332021776 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); } tmp_ns50wwy/src/spicelib/devices/cktinit.c0000644000175000017500000000774514163340332021002 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; } tmp_ns50wwy/src/spicelib/devices/nbjt2/0000755000175000017500000000000014163340332020173 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/nbjt2/nbjt2def.h0000644000175000017500000001344614163340332022052 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 */ tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2dump.c0000644000175000017500000001204314163340332022072 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; BOOLEAN writeAscii = TRUE; 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); writeAscii = compareFiletypeVar("ascii"); fpState = fopen(fileName, (writeAscii ? "w" : "wb")); if (!fpState) { perror(fileName); } else { NBJT2putHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NBJT2pDevice, model->NBJT2outputs, writeAscii, "nbjt2"); 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); } } } } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2init.c0000644000175000017500000000322214163340332022067 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; } tmp_ns50wwy/src/spicelib/devices/nbjt2/Makefile.am0000644000175000017500000000072014163340332022226 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 tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2acld.c0000644000175000017500000000747214163340332022042 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbjt2itf.h0000644000175000017500000000027314163340332022070 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 tmp_ns50wwy/src/spicelib/devices/nbjt2/nbjt2ext.h0000644000175000017500000000163414163340332022110 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 */ tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2.c0000644000175000017500000000520714163340332021210 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); tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2init.h0000644000175000017500000000040214163340332022071 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 tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2pzld.c0000644000175000017500000000541514163340332022103 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2trun.c0000644000175000017500000000273514163340332022124 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2mpar.c0000644000175000017500000000133714163340332022070 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2set.c0000644000175000017500000002111614163340332021721 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2temp.c0000644000175000017500000000706614163340332022103 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2ask.c0000644000175000017500000001401314163340332021702 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 */ } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2del.c0000644000175000017500000000114614163340332021673 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; } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2parm.c0000644000175000017500000000230314163340332022062 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); } tmp_ns50wwy/src/spicelib/devices/nbjt2/nbt2load.c0000644000175000017500000004061314163340332022050 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 = 0.0, ie = 0.0; double iceq, ieeq; double ichat = 0.0, iehat = 0.0; double delVce, delVbe; double vce, vbe; double dIeDVce = 0.0, dIeDVbe = 0.0; double dIcDVce = 0.0, dIcDVbe = 0.0; 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/0000755000175000017500000000000014163340332020437 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0set.c0000644000175000017500000010573214163340332022101 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v0/Makefile.am0000644000175000017500000000077514163340332022504 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 tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0mpar.c0000644000175000017500000014603614163340332022247 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0ask.c0000644000175000017500000001642314163340332022062 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0getic.c0000644000175000017500000000215114163340332022370 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/bsim3v0def.h0000644000175000017500000014143514163340332022562 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3v0/bsim3v0init.c0000644000175000017500000000334114163340332022753 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0mask.c0000644000175000017500000011247114163340332022237 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0trunc.c0000644000175000017500000000220014163340332022423 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0acld.c0000644000175000017500000001570114163340332022205 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0temp.c0000644000175000017500000010317114163340332022246 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0cvtest.c0000644000175000017500000000572114163340332022613 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0noi.c0000644000175000017500000002517214163340332022072 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/bsim3v0init.h0000644000175000017500000000042614163340332022761 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 tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0pzld.c0000644000175000017500000001374114163340332022255 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0ld.c0000644000175000017500000022557214163340332021712 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/bsim3v0itf.h0000644000175000017500000000037414163340332022602 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 tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0.c0000644000175000017500000006744414163340332021374 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); tmp_ns50wwy/src/spicelib/devices/bsim3v0/b3v0par.c0000644000175000017500000000657014163340332022070 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM3v0icVBS = *(value->v.vec.rVec+2); here->BSIM3v0icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM3v0icVGS = *(value->v.vec.rVec+1); here->BSIM3v0icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM3v0icVDS = *(value->v.vec.rVec); here->BSIM3v0icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3v0/bsim3v0ext.h0000644000175000017500000000245414163340332022621 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 *); tmp_ns50wwy/src/spicelib/devices/ccvs/0000755000175000017500000000000014163340332020112 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/ccvs/ccvsask.c0000644000175000017500000001147314163340332021721 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 */ } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsitf.h0000644000175000017500000000026014163340332021722 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 tmp_ns50wwy/src/spicelib/devices/ccvs/Makefile.am0000644000175000017500000000067414163340332022155 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 tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsdefs.h0000644000175000017500000000546514163340332022075 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*/ tmp_ns50wwy/src/spicelib/devices/ccvs/ccvspar.c0000644000175000017500000000153114163340332021717 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsext.h0000644000175000017500000000130114163340332021735 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*); tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsinit.c0000644000175000017500000000314714163340332022105 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; } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvssprt.c0000644000175000017500000000312014163340332022121 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); } } } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvspzld.c0000644000175000017500000000222614163340332022110 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsload.c0000644000175000017500000000212714163340332022056 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvssset.c0000644000175000017500000000161614163340332022117 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvssld.c0000644000175000017500000000205314163340332021717 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvs.c0000644000175000017500000000306714163340332021222 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); tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsinit.h0000644000175000017500000000030214163340332022100 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 tmp_ns50wwy/src/spicelib/devices/ccvs/ccvssacl.c0000644000175000017500000000234214163340332022060 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); } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsset.c0000644000175000017500000000511014163340332021725 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; } tmp_ns50wwy/src/spicelib/devices/ccvs/ccvsfbr.c0000644000175000017500000000171414163340332021711 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/0000755000175000017500000000000014163340332020447 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7mdel.c0000644000175000017500000000177514163340332022251 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7mpar.c0000644000175000017500000040554714163340332022274 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.000001e24) mod->BSIM4v7nsd *= 1.0e-6; break; case BSIM4v7_MOD_NGATE: mod->BSIM4v7ngate = value->rValue; mod->BSIM4v7ngateGiven = TRUE; if (mod->BSIM4v7ngate > 1.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/bsim4v7init.c0000644000175000017500000000335514163340332023000 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v7/Makefile.am0000644000175000017500000000113214163340332022500 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 tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7par.c0000644000175000017500000001606514163340332022110 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_WNFLAG: here->BSIM4v7wnflag = value->iValue; here->BSIM4v7wnflagGiven = 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM4v7icVBS = *(value->v.vec.rVec+2); here->BSIM4v7icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM4v7icVGS = *(value->v.vec.rVec+1); here->BSIM4v7icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM4v7icVDS = *(value->v.vec.rVec); here->BSIM4v7icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7trunc.c0000644000175000017500000000342614163340332022456 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7ask.c0000644000175000017500000003337114163340332022103 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_WNFLAG: value->iValue = here->BSIM4v7wnflag; 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7geo.c0000644000175000017500000003054314163340332022075 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7check.c0000644000175000017500000007334214163340332022404 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 * Modified by Holger Vogt, 12/27/2020. **********/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM4.7 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file bsim4v7.out and print the data into the file. */ int BSIM4v7checkModel( BSIM4v7model *model, BSIM4v7instance *here, CKTcircuit *ckt) { struct bsim4SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; pParam = here->pParam; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 4.7 model %s\n", model->BSIM4v7modName); if ((here->BSIM4v7rgateMod == 2) || (here->BSIM4v7rgateMod == 3)) { if ((here->BSIM4v7trnqsMod == 1) || (here->BSIM4v7acnqsMod == 1)) { wl_append_word(&wl, &wl, tprintf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n")); } } if (model->BSIM4v7toxe <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v7toxe)); Fatal_Flag = 1; } if (model->BSIM4v7toxp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v7toxp)); Fatal_Flag = 1; } if (model->BSIM4v7eot <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: EOT = %g is not positive.\n", model->BSIM4v7eot)); Fatal_Flag = 1; } if (model->BSIM4v7epsrgate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v7epsrgate)); Fatal_Flag = 1; } if (model->BSIM4v7epsrsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v7epsrsub)); Fatal_Flag = 1; } if (model->BSIM4v7easub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4v7easub)); Fatal_Flag = 1; } if (model->BSIM4v7ni0sub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4v7ni0sub)); Fatal_Flag = 1; } if (model->BSIM4v7toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v7toxm)); Fatal_Flag = 1; } if (model->BSIM4v7toxref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v7toxref)); Fatal_Flag = 1; } if (pParam->BSIM4v7lpe0 < -pParam->BSIM4v7leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v7lpe0)); Fatal_Flag = 1; } if (model->BSIM4v7lintnoi > pParam->BSIM4v7leff / 2) { wl_append_word(&wl, &wl, tprintf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v7lintnoi)); Fatal_Flag = 1; } if (pParam->BSIM4v7lpeb < -pParam->BSIM4v7leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v7lpeb)); Fatal_Flag = 1; } if (pParam->BSIM4v7ndep <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v7ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v7phi <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v7phi)); wl_append_word(&wl, &wl, tprintf(" Phin = %g Ndep = %g \n", pParam->BSIM4v7phin, pParam->BSIM4v7ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v7nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v7nsub)); Fatal_Flag = 1; } if (pParam->BSIM4v7ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v7ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v7ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v7ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v7xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v7xj)); Fatal_Flag = 1; } if (pParam->BSIM4v7dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v7dvt1)); Fatal_Flag = 1; } if (pParam->BSIM4v7dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v7dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM4v7w0 == -pParam->BSIM4v7weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM4v7dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v7dsub)); Fatal_Flag = 1; } if (pParam->BSIM4v7b1 == -pParam->BSIM4v7weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (here->BSIM4v7u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v7u0temp)); Fatal_Flag = 1; } if (pParam->BSIM4v7delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v7delta)); Fatal_Flag = 1; } if (here->BSIM4v7vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v7vsattemp)); Fatal_Flag = 1; } if (pParam->BSIM4v7pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v7pclm)); Fatal_Flag = 1; } if (pParam->BSIM4v7drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v7drout)); Fatal_Flag = 1; } if (here->BSIM4v7m <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: multiplier = %g is not positive.\n", here->BSIM4v7m)); Fatal_Flag = 1; } if (here->BSIM4v7nf < 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Fatal: SAref = %g is not positive.\n", model->BSIM4v7saref)); Fatal_Flag = 1; } if (model->BSIM4v7sbref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: SBref = %g is not positive.\n", model->BSIM4v7sbref)); Fatal_Flag = 1; } } if ((here->BSIM4v7l + model->BSIM4v7xl) <= model->BSIM4v7xgl) { wl_append_word(&wl, &wl, tprintf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n")); Fatal_Flag = 1; } if (here->BSIM4v7ngcon < 1.0) { wl_append_word(&wl, &wl, tprintf("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; wl_append_word(&wl, &wl, tprintf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n")); } if (model->BSIM4v7gbmin < 1.0e-20) { wl_append_word(&wl, &wl, tprintf("Warning: Gbmin = %g is too small.\n", model->BSIM4v7gbmin)); } /* Check saturation parameters */ if (pParam->BSIM4v7fprout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v7fprout)); Fatal_Flag = 1; } if (pParam->BSIM4v7pdits < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v7pdits)); Fatal_Flag = 1; } if (model->BSIM4v7pditsl < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pditsl = %g is negative.\n", model->BSIM4v7pditsl)); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v7igbMod) { if (pParam->BSIM4v7nigbinv <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v7nigbinv)); Fatal_Flag = 1; } if (pParam->BSIM4v7nigbacc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v7nigbacc)); Fatal_Flag = 1; } } if (model->BSIM4v7igcMod) { if (pParam->BSIM4v7nigc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v7nigc)); Fatal_Flag = 1; } if (pParam->BSIM4v7poxedge <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v7poxedge)); Fatal_Flag = 1; } if (pParam->BSIM4v7pigcd <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v7pigcd)); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v7clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v7clc)); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v7ckappas < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v7ckappas)); pParam->BSIM4v7ckappas = 0.02; } if (pParam->BSIM4v7ckappad < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v7ckappad)); pParam->BSIM4v7ckappad = 0.02; } if (model->BSIM4v7vtss < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtss = %g is negative.\n", model->BSIM4v7vtss)); Fatal_Flag = 1; } if (model->BSIM4v7vtsd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v7vtsd)); Fatal_Flag = 1; } if (model->BSIM4v7vtssws < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v7vtssws)); Fatal_Flag = 1; } if (model->BSIM4v7vtsswd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v7vtsswd)); Fatal_Flag = 1; } if (model->BSIM4v7vtsswgs < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v7vtsswgs)); Fatal_Flag = 1; } if (model->BSIM4v7vtsswgd < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v7leff)); } if (pParam->BSIM4v7leffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v7leffCV)); } if (pParam->BSIM4v7weff <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v7weff)); } if (pParam->BSIM4v7weffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v7toxe)); } if (model->BSIM4v7toxp < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v7toxp)); } if (model->BSIM4v7toxm < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v7toxm)); } if (pParam->BSIM4v7ndep <= 1.0e12) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v7ndep)); } else if (pParam->BSIM4v7ndep >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v7ndep)); } if (pParam->BSIM4v7nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v7nsub)); } else if (pParam->BSIM4v7nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v7nsub)); } if ((pParam->BSIM4v7ngate > 0.0) && (pParam->BSIM4v7ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v7ngate)); } if (pParam->BSIM4v7dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v7dvt0)); } if (fabs(1.0e-8 / (pParam->BSIM4v7w0 + pParam->BSIM4v7weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM4v7nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v7nfactor)); } if (pParam->BSIM4v7cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v7cdsc)); } if (pParam->BSIM4v7cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v7cdscd)); } /* Check DIBL parameters */ if (here->BSIM4v7eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", here->BSIM4v7eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v7b1 + pParam->BSIM4v7weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM4v7a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v7a2)); pParam->BSIM4v7a2 = 0.01; } else if (pParam->BSIM4v7a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v7prwg)); pParam->BSIM4v7prwg = 0.0; } if (pParam->BSIM4v7rdsw < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v7rdsw)); pParam->BSIM4v7rdsw = 0.0; pParam->BSIM4v7rds0 = 0.0; } if (pParam->BSIM4v7rds0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rds0)); pParam->BSIM4v7rds0 = 0.0; } if (pParam->BSIM4v7rdswmin < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v7rdswmin)); pParam->BSIM4v7rdswmin = 0.0; } if (pParam->BSIM4v7pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v7pscbe2)); } if (pParam->BSIM4v7vsattemp < 1.0e3) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v7lambda)); } } if ((model->BSIM4v7vtlGiven) && (pParam->BSIM4v7vtl > 0.0)) { if (pParam->BSIM4v7vtl < 6.0e4) { wl_append_word(&wl, &wl, tprintf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v7vtl)); } if (pParam->BSIM4v7xn < 3.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v7pdibl1)); } } if (pParam->BSIM4v7pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: LODK2 = %g is not positive.\n", model->BSIM4v7lodk2)); } if (model->BSIM4v7lodeta0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: LODETA0 = %g is not positive.\n", model->BSIM4v7lodeta0)); } } /* Check gate resistance parameters */ if (here->BSIM4v7rgateMod == 1) { if (model->BSIM4v7rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 1.\n")); } else if (here->BSIM4v7rgateMod == 2) { if (model->BSIM4v7rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg <= 0.0 for rgateMod = 2.\n")); else if (pParam->BSIM4v7xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n")); } if (here->BSIM4v7rgateMod == 3) { if (model->BSIM4v7rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 3.\n")); else if (pParam->BSIM4v7xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 should be positive for rgateMod = 3.\n")); } /* Check capacitance parameters */ if (pParam->BSIM4v7noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM4v7noff)); } if (pParam->BSIM4v7voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v7voffcv)); } if (pParam->BSIM4v7moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM4v7moin)); } if (pParam->BSIM4v7moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM4v7moin)); } if (model->BSIM4v7capMod == 2) { if (pParam->BSIM4v7acde < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM4v7acde)); } if (pParam->BSIM4v7acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM4v7acde)); } } /* Check overlap capacitance parameters */ if (model->BSIM4v7cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v7cgdo)); model->BSIM4v7cgdo = 0.0; } if (model->BSIM4v7cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v7cgso)); model->BSIM4v7cgso = 0.0; } if (model->BSIM4v7cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v7tnoia)); model->BSIM4v7tnoia = 0.0; } if (model->BSIM4v7tnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v7tnoib)); model->BSIM4v7tnoib = 0.0; } if (model->BSIM4v7rnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v7rnoia)); model->BSIM4v7rnoia = 0.0; } if (model->BSIM4v7rnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4v7tnoic)); model->BSIM4v7tnoic = 0.0; } if (model->BSIM4v7rnoic < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Njs = %g is less than 0.7.\n", model->BSIM4v7SjctEmissionCoeff)); } if (model->BSIM4v7DjctEmissionCoeff < 0.1) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Njd = %g is less than 0.7.\n", model->BSIM4v7DjctEmissionCoeff)); } if (model->BSIM4v7njtsstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v7njtsstemp, ckt->CKTtemp)); } if (model->BSIM4v7njtsswstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswstemp, ckt->CKTtemp)); } if (model->BSIM4v7njtsswgstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgstemp, ckt->CKTtemp)); } if (model->BSIM4v7njtsdGiven && model->BSIM4v7njtsdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsdtemp, ckt->CKTtemp)); } if (model->BSIM4v7njtsswdGiven && model->BSIM4v7njtsswdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswdtemp, ckt->CKTtemp)); } if (model->BSIM4v7njtsswgdGiven && model->BSIM4v7njtsswgdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v7njtsswgdtemp, ckt->CKTtemp)); } if (model->BSIM4v7ntnoi < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v7ntnoi)); model->BSIM4v7ntnoi = 0.0; } /* diode model */ if (model->BSIM4v7SbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctBotGradingCoeff)); model->BSIM4v7SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v7SbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctSideGradingCoeff)); model->BSIM4v7SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v7SbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v7SbulkJctGateSideGradingCoeff)); model->BSIM4v7SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctBotGradingCoeff)); model->BSIM4v7DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v7DbulkJctSideGradingCoeff)); model->BSIM4v7DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v7DbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v7scref)); model->BSIM4v7scref = 1e-6; } if (here->BSIM4v7sca < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v7sca)); here->BSIM4v7sca = 0.0; } if (here->BSIM4v7scb < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v7scb)); here->BSIM4v7scb = 0.0; } if (here->BSIM4v7scc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v7scc)); here->BSIM4v7scc = 0.0; } if (here->BSIM4v7sc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v7sc)); here->BSIM4v7sc = 0.0; } } if (wlstart->wl_next) { if ((fplog = fopen("bsim4v7.out", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlstart); if ((strcmp(model->BSIM4v7version, "4.7.0")) && (strncmp(model->BSIM4v7version, "4.70", 4)) && (strncmp(model->BSIM4v7version, "4.7", 3))) { printf("Warning: This model is BSIM4.7.0; you specified a wrong version number '%s'.\n", model->BSIM4v7version); } return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7.c0000644000175000017500000023041114163340332021376 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( "wnflag", BSIM4v7_WNFLAG, IF_INTEGER, "W/NF device flag for bin selection"), 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); tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7getic.c0000644000175000017500000000300714163340332022411 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7cvtest.c0000644000175000017500000002253614163340332022636 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/bsim4v7itf.h0000644000175000017500000000037714163340332022625 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 tmp_ns50wwy/src/spicelib/devices/bsim4v7/bsim4v7def.h0000644000175000017500000037104714163340332022606 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; int BSIM4v7wnflag; 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 BSIM4v7wnflagGiven :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 #define BSIM4v7_WNFLAG 40 /* 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7pzld.c0000644000175000017500000011003614163340332022270 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7temp.c0000644000175000017500000036717414163340332022305 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, "detected during BSIM4.7.0 parameter checking for \n model %s of device instance %s\n", model->BSIM4v7modName, here->BSIM4v7name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7soachk.c0000644000175000017500000003647114163340332022601 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7mask.c0000644000175000017500000027646414163340332022274 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7ld.c0000644000175000017500000073353314163340332021733 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 tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7set.c0000644000175000017500000032674514163340332022132 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7acld.c0000644000175000017500000007200214163340332022222 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/bsim4v7init.h0000644000175000017500000000042614163340332023001 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 tmp_ns50wwy/src/spicelib/devices/bsim4v7/B4TERMS_OF_USE0000644000175000017500000000254414163340332022557 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 tmp_ns50wwy/src/spicelib/devices/bsim4v7/b4v7noi.c0000644000175000017500000010251214163340332022104 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v7/bsim4v7ext.h0000644000175000017500000000260614163340332022640 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 *); tmp_ns50wwy/src/spicelib/devices/sw/0000755000175000017500000000000014163340332017605 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/sw/swask.c0000644000175000017500000000376114163340332021110 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; } } tmp_ns50wwy/src/spicelib/devices/sw/swload.c0000644000175000017500000001475514163340332021256 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; } tmp_ns50wwy/src/spicelib/devices/sw/swsetup.c0000644000175000017500000000345614163340332021473 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)) == NULL) \ 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; } tmp_ns50wwy/src/spicelib/devices/sw/swtrunc.c0000644000175000017500000000337614163340332021467 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; } tmp_ns50wwy/src/spicelib/devices/sw/Makefile.am0000644000175000017500000000065014163340332021642 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 tmp_ns50wwy/src/spicelib/devices/sw/swmask.c0000644000175000017500000000220214163340332021252 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; } } tmp_ns50wwy/src/spicelib/devices/sw/swinit.h0000644000175000017500000000034114163340332021271 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 tmp_ns50wwy/src/spicelib/devices/sw/swacload.c0000644000175000017500000000170214163340332021546 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; } tmp_ns50wwy/src/spicelib/devices/sw/swinit.c0000644000175000017500000000307514163340332021273 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; } tmp_ns50wwy/src/spicelib/devices/sw/sw.c0000644000175000017500000000317114163340332020404 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); tmp_ns50wwy/src/spicelib/devices/sw/swnoise.c0000644000175000017500000001050414163340332021440 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; } tmp_ns50wwy/src/spicelib/devices/sw/swpzload.c0000644000175000017500000000200014163340332021604 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; } tmp_ns50wwy/src/spicelib/devices/sw/swmparam.c0000644000175000017500000000254214163340332021603 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; } tmp_ns50wwy/src/spicelib/devices/sw/switf.h0000644000175000017500000000026114163340332021111 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 tmp_ns50wwy/src/spicelib/devices/sw/swext.h0000644000175000017500000000136214163340332021132 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 *); tmp_ns50wwy/src/spicelib/devices/sw/swparam.c0000644000175000017500000000130314163340332021420 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; } tmp_ns50wwy/src/spicelib/devices/sw/swdefs.h0000644000175000017500000000661314163340332021257 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 tmp_ns50wwy/src/spicelib/devices/numd/0000755000175000017500000000000014163340332020117 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/numd/numdset.c0000644000175000017500000001565414163340332021755 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); } tmp_ns50wwy/src/spicelib/devices/numd/numddel.c0000644000175000017500000000071414163340332021715 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; } tmp_ns50wwy/src/spicelib/devices/numd/numddefs.h0000644000175000017500000001030114163340332022070 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 */ tmp_ns50wwy/src/spicelib/devices/numd/Makefile.am0000644000175000017500000000071314163340332022154 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 tmp_ns50wwy/src/spicelib/devices/numd/numditf.h0000644000175000017500000000027014163340332021735 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 tmp_ns50wwy/src/spicelib/devices/numd/numdparm.c0000644000175000017500000000176614163340332022120 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); } tmp_ns50wwy/src/spicelib/devices/numd/numdload.c0000644000175000017500000002750614163340332022100 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 = 0.0; double ideq; double idhat = 0.0; double delVd; double vd; /* current diode voltage */ double gd = 0.0; 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); } tmp_ns50wwy/src/spicelib/devices/numd/numdext.h0000644000175000017500000000161414163340332021756 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 */ tmp_ns50wwy/src/spicelib/devices/numd/numdask.c0000644000175000017500000000572714163340332021740 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 */ } tmp_ns50wwy/src/spicelib/devices/numd/numdtemp.c0000644000175000017500000000707214163340332022122 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); } tmp_ns50wwy/src/spicelib/devices/numd/numd.c0000644000175000017500000000370014163340332021226 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_STRING, "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); tmp_ns50wwy/src/spicelib/devices/numd/numdmpar.c0000644000175000017500000000133614163340332022111 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); } tmp_ns50wwy/src/spicelib/devices/numd/numdacld.c0000644000175000017500000000441114163340332022052 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); } tmp_ns50wwy/src/spicelib/devices/numd/numdpzld.c0000644000175000017500000000347314163340332022127 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); } tmp_ns50wwy/src/spicelib/devices/numd/numdinit.c0000644000175000017500000000315114163340332022112 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; } tmp_ns50wwy/src/spicelib/devices/numd/numdinit.h0000644000175000017500000000037014163340332022117 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 tmp_ns50wwy/src/spicelib/devices/numd/numddump.c0000644000175000017500000001040214163340332022111 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; BOOLEAN writeAscii = TRUE; 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); writeAscii = compareFiletypeVar("ascii"); fpState = fopen(fileName, (writeAscii ? "w" : "wb")); if (!fpState) { perror(fileName); } else { NUMDputHeader(fpState, ckt, inst); ONEprnSolution(fpState, inst->NUMDpDevice, model->NUMDoutputs, writeAscii, "numd"); 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); } } } } tmp_ns50wwy/src/spicelib/devices/numd/numdtrun.c0000644000175000017500000000241414163340332022140 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); } tmp_ns50wwy/src/spicelib/devices/cpl/0000755000175000017500000000000014163340332017732 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/cpl/Makefile.am0000644000175000017500000000070614163340332021771 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 \ cplhash.c \ cplhash.h \ cplmdel.c \ cpldelete.c \ cplinit.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/spicelib/devices/cpl/cpldelete.c0000644000175000017500000000056714163340332022047 0ustar carstencarsten/********** Copyright 2021 The ngspice team All rights reserved. Author: 2021 Holger Vogt 3-clause BSD license **********/ #include "ngspice/ngspice.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "cplhash.h" int CPLDelete(GENinstance *gen_inst) { NG_IGNORE(gen_inst); mem_delete(); return OK; } tmp_ns50wwy/src/spicelib/devices/cpl/cplparam.c0000644000175000017500000000165114163340332021700 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); } tmp_ns50wwy/src/spicelib/devices/cpl/cplsetup.c0000644000175000017500000013660614163340332021751 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" #include "cplhash.h" #define VECTOR_ALLOC(type, vec, n) { \ vec = TMALLOC(type *, n); \ memsaved(vec); \ } #define MATRIX_ALLOC(type, mat, m, j) { \ int k; \ mat = TMALLOC(type **, m); \ memsaved(mat); \ for (k = 0; k < m; k++) { \ VECTOR_ALLOC(type, mat[k], j); \ } \ } #define VECTOR_FREE(vec) { \ memdeleted(vec); \ tfree(vec); \ } #define MATRIX_FREE(mat, m, j) { \ int k; \ for (k = 0; k < m; k++) { \ memdeleted(mat[k]); \ tfree(mat[k]); \ } \ memdeleted(mat); \ tfree(mat); \ } #define CPLTFREE(ptr) { \ memdeleted(ptr); \ tfree(ptr); \ } #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); /* hash table for local gc */ mem_init(); /* 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); memsaved(here->CPLposNodes); here->CPLnegNodes = TMALLOC(int, noL); memsaved(here->CPLnegNodes); here->CPLibr1 = TMALLOC(int, noL); memsaved(here->CPLibr1); here->CPLibr2 = TMALLOC(int, noL); memsaved(here->CPLibr2); 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); memsaved(branchname); if (!here->CPLibr1Given) { for (m = 0; m < here->dimension; m++) { branchname[m] = TMALLOC(char, MAX_STRING); memsaved(branchname[m]); sprintf(branchname[m], "branch1_%d", m); error = CKTmkCur(ckt, &tmp, here->CPLname, branchname[m]); if (error) return (error); here->CPLibr1[m] = tmp->number; CPLTFREE(branchname[m]); } here->CPLibr1Given = 1; } CPLTFREE(branchname); branchname = TMALLOC(char*, here->dimension); memsaved(branchname); if (!here->CPLibr2Given) { for (m = 0; m < here->dimension; m++) { branchname[m] = TMALLOC(char, MAX_STRING); memsaved(branchname[m]); sprintf(branchname[m], "branch2_%d", m); error = CKTmkCur(ckt, &tmp, here->CPLname, branchname[m]); if (error) return (error); here->CPLibr2[m] = tmp->number; CPLTFREE(branchname[m]); } here->CPLibr2Given = 1; } CPLTFREE(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; } } CPLTFREE(here->CPLposNodes); CPLTFREE(here->CPLnegNodes); CPLTFREE(here->CPLibr1); CPLTFREE(here->CPLibr2); /* reset switches */ here->CPLdcGiven = 0; here->CPLibr1Given = 0; here->CPLibr2Given = 0; } } mem_delete(); ndn_btree = NULL; 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); memsaved(c); c2 = TMALLOC(CPLine, 1); memsaved(c2); 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); memsaved(ec); 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); memsaved(er); er->link = nd->rlptr; nd->rlptr = er; er->rl = lines[i] = TMALLOC(RLINE, 1); memsaved(er->rl); er->rl->in_node = nd; c->dc1[i] = c->dc2[i] = 0.0; } for (i = 0; i < noL; i++) { ec = TMALLOC(ECPLine, 1); memsaved(ec); 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); memsaved(er); 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); memsaved(c->h1t[i][j]); 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); memsaved(c->h2t[i][j][k]); 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); memsaved(c->h3t[i][j][k]); 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); memsaved(errMsg); 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)); memsaved(SiSv_1[i][j]); } for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { Sip[i][j] = (double*)calloc((size_t)(deg_o + 1), sizeof(double)); memsaved(Sip[i][j]); } 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)); memsaved(Si_1p[i][j]); } 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)); memsaved(Sv_1p[i][j]); } for (i = 0; i < dim; i++) { W[i] = (double*)calloc(MAX_DEG, sizeof(double)); memsaved(W[i]); } } /*** ***/ /**************************************************************** match Create a polynomial matching given data points ****************************************************************/ static double* vector(int nl, int nh) { double* v = TMALLOC(double, nh - nl + 1); memsaved(v); 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; CPLTFREE(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_in[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_in[i][j], frequency, A_in[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)); memsaved(p); 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_in[MAX_DIM][MAX_DIM], double* D1[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)); memsaved(p); mult_p(B[i][j], D1[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)); memsaved(p); mult_p(A_in[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++) CPLTFREE(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_in) { 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_in / 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); memsaved(p); 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); memsaved(n); 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); memsaved(e); 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; CPLTFREE(row); row = tmp_row; } } /**************************************************************** rotate() rotation of the Jacobi's method ****************************************************************/ static int rotate(int dim_in, 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_in; j++) T[j] = ZY[p][j]; for (j = 0; j < p; j++) T[j] = ZY[j][p]; for (j = p + 1; j < dim_in; 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_in; 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_in; j++) { T[j] = Sv[j][p]; R[j] = Sv[j][q]; } for (j = 0; j < dim_in; j++) { Sv[j][p] = T[j] * co - R[j] * si; Sv[j][q] = T[j] * si + R[j] * co; } } return(1); } tmp_ns50wwy/src/spicelib/devices/cpl/cplmdel.c0000644000175000017500000000067314163340332021524 0ustar carstencarsten/********** Copyright 2021 The ngspice team All rights reserved. Author: 2021 Holger Vogt 3-clause BSD license **********/ #include "ngspice/ngspice.h" #include "cpldefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int CPLmDelete(GENmodel *gen_model) { CPLmodel *model = (CPLmodel *)gen_model; FREE(model->Rm); FREE(model->Lm); FREE(model->Gm); FREE(model->Cm); return OK; } tmp_ns50wwy/src/spicelib/devices/cpl/cplmpar.c0000644000175000017500000000305514163340332021537 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" #include "cplhash.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) { 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); } tmp_ns50wwy/src/spicelib/devices/cpl/cplinit.h0000644000175000017500000000035614163340332021551 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 tmp_ns50wwy/src/spicelib/devices/cpl/cplext.h0000644000175000017500000000114714163340332021405 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*); extern int CPLmDelete(GENmodel*); extern int CPLDelete(GENinstance*); tmp_ns50wwy/src/spicelib/devices/cpl/cplitf.h0000644000175000017500000000010714163340332021362 0ustar carstencarsten#ifndef DEV_CPL #define DEV_CPL SPICEdev *get_cpl_info(void); #endif tmp_ns50wwy/src/spicelib/devices/cpl/cplask.c0000644000175000017500000000206114163340332021352 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); } } tmp_ns50wwy/src/spicelib/devices/cpl/cplload.c0000644000175000017500000005765114163340332021532 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" #include "cplhash.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) { fprintf(stderr, "\nError in CPL %s: Forbidden combination of model parameters!\n", here->gen.GENname); controlled_exit(1); } 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]; if (!tms) { fprintf(stderr, "\nError in CPL %s: Forbidden combination of model parameters!\n", here->gen.GENname); controlled_exit(1); } 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) { fprintf(stderr, "\nError in CPL %s: Forbidden combination of model parameters!\n", here->gen.GENname); controlled_exit(1); } 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) { TMS *nptr = new->h1t[i][j] = TMALLOC(TMS, 1); memsaved(nptr); } 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) { TMS *nptr = new->h2t[i][j][l] = TMALLOC(TMS, 1); memsaved(nptr); } 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) { TMS* nptr = new->h3t[i][j][l] = TMALLOC(TMS, 1); memsaved(nptr); } 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 { VI_list* nptr = TMALLOC(VI_list, 1); memsaved(nptr); return(nptr); } } 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 *ratio1; double f; VI_list *vi; TMS *tms; int noL; h *= 0.5e-12; ratio1 = cp->ratio; vi = cp->vi_tail; noL = cp->noL; for (k = 0; k < noL; k++) /* mode */ if (ratio1[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 * ratio1[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 * ratio1[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 * ratio1[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 * ratio1[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); } tmp_ns50wwy/src/spicelib/devices/cpl/cpl.c0000644000175000017500000000257214163340332020662 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); tmp_ns50wwy/src/spicelib/devices/cpl/cplinit.c0000644000175000017500000000270414163340332021543 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 = CPLmDelete, .DEVdelete = CPLDelete, .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; } tmp_ns50wwy/src/spicelib/devices/cpl/cplmask.c0000644000175000017500000000243114163340332021530 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 */ } tmp_ns50wwy/src/spicelib/devices/cpl/cplhash.h0000644000175000017500000000043414163340332021526 0ustar carstencarsten/********** Copyright 2021 The ngspice team All rights reserved. Author: 2021 Holger Vogt 3-clause BSD license **********/ /* cplhash.c */ extern void mem_init(void); extern void mem_delete(void); extern int memsaved(void *ptr); extern void memdeleted(const void *ptr); tmp_ns50wwy/src/spicelib/devices/cpl/cpldefs.h0000644000175000017500000000445214163340332021530 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*/ tmp_ns50wwy/src/spicelib/devices/cpl/cplhash.c0000644000175000017500000001015214163340332021517 0ustar carstencarsten/********** Copyright 2021 The ngspice team All rights reserved. Author: 2021 Holger Vogt 3-clause BSD license **********/ /* This is a test file including a local garbage collector and removal. It might be especially useful, because cpl transmission lines have several memory leaks during runtime in difficult to control process sequence.. At initialization in CPLsetup() mem_init() is called setting up a hash table to store memory addresses. Each time TMALLOC is called, the resulting address is stored. Each time tfree() is called, the address is removed. For realloc(), the old address is deleted, the new one is stored, if there is a change in the address. Upon exiting the program, mem_delete() is called, deleting all memory at addresses still in the hash table, then the hash table itself is removed. CPLunsetup() calls mem_delete(). */ #include "ngspice/ngspice.h" #include "ngspice/iferrmsg.h" #include "ngspice/hash.h" #include "ngspice/fteext.h" #include "cpldefs.h" // #define DB_FULL /* uncomment for debugging output, all addresses to files */ #ifdef DB_FULL #define DB #else #define DB /* uncomment for printing some debugging output */ #endif void mem_init(void); void mem_delete(void); int memsaved(void *ptr); void memdeleted(const void *ptr); void my_free_func(void* data); void my_key_free(void* key); int gc_is_on = 0; /* add some debugging printout */ #ifdef DB static int mem_in = 0, mem_out = 0, mem_freed = 0; #endif #ifdef DB_FULL static FILE *alloclog, *freelog, *finallog; #endif NGHASHPTR memory_table; /* initialize hash table to store allocated mem addresses */ void mem_init(void) { gc_is_on = 0; memory_table = nghash_init_pointer(1024); gc_is_on = 1; #ifdef DB_FULL alloclog = fopen("alloc_log.txt", "wt"); freelog = fopen("free_log.txt", "wt"); finallog = fopen("final_log.txt", "wt"); #endif } /* add to counter and hash table if memory is allocated */ int memsaved(void *ptr) { if (gc_is_on) { gc_is_on = 0; if (nghash_insert(memory_table, ptr, NULL) == NULL) { #ifdef DB mem_in++; #ifdef DB_FULL fprintf(alloclog, "0x%p\n", ptr); #endif #endif } else fprintf(stderr, "Warning: CPL GC Could not insert item into hashtable at 0x%p\n", ptr); gc_is_on = 1; } return OK; } /* add to counter and remove from hash table if memory is deleted */ void memdeleted(const void *ptr) { if (gc_is_on) { gc_is_on = 0; if (nghash_delete_special(memory_table, (void*)ptr) == NULL) { #ifdef DB mem_out++; #ifdef DB_FULL fprintf(freelog, "0x%p\n", ptr); #endif } else if (ft_ngdebug) fprintf(stderr, "Warning: CPL GC Could not delete item from hashtable at 0x%p\n", ptr); #else } #endif gc_is_on = 1; } } /* helper functions */ void my_free_func(void *data) { if (data) free(data); } void my_key_free(void * key) { if (key) { free(key); key = NULL; #ifdef DB mem_freed++; #endif } } /* free hash table, all entries and then the table itself */ void mem_delete(void) { #ifdef DB char buf[128]; printf("CPL GC memory allocated %d times, freed %d times\n", mem_in, mem_out); printf("CPL GC size of hash table to be freed: %d entries.\n", nghash_get_size(memory_table)); #ifdef DB_FULL void *data, *key; data = nghash_enumeratek(memory_table, &key, TRUE); for (void *hkey = key; hkey;) { fprintf(finallog, "0x%p\n", hkey); data = nghash_enumeratek(memory_table, &hkey, FALSE); } fclose(alloclog); fclose(freelog); fclose(finallog); #endif #endif gc_is_on = 0; nghash_free(memory_table, NULL, my_key_free); #ifdef DB /* printf via sh_printf will need some info from variables that have been deleted already, therefore we use fputs */ sprintf(buf, "CPL GC number of addresses freed: %d entries.\n", mem_freed); fputs(buf, stdout); #endif pool_vi = NULL; mem_freed = mem_in = mem_out = 0; } tmp_ns50wwy/src/spicelib/devices/adms/0000755000175000017500000000000014163340332020100 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/hicum0/0000755000175000017500000000000014163340332021265 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/hicum0/admsva/0000755000175000017500000000000014163340332022540 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/hicum0/admsva/hicum0.va0000644000175000017500000015005014163340332024256 0ustar carstencarsten/* ****************************************************************************** **************** COPYRIGHT NOTICE(Originator: Michael Schroter)*************** ****************************************************************************** The terms under which the HICUM/L0 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 */ // HICUM Level_0 Version_1.32: A Verilog-A description // (A simplified version of HICUM Level2 model for BJT) // ## It is modified after the first version of HICUM/L0 code ## // Minor code related changes // 01/11: Corrected SPICE name for AHQ and ZETAIQF. Implemented a gmin between nodes CI and EI. // qj is now limited to positive values to improve convergence a negative bias. // Resolved a convergence issue for cc at calculation of voltage dependence of t0. // 01/09: Introduction of temporary dc capacitance variable CJE_DC to call the procedure with // the AC and DC parameter set and assign an AC and DC result to its output variables // 01/09: Ranges of ZE & ZEDC have been modified to a new range (0:1) from the old range (0:1] // 12/08: gmin declaration by L. Lemaitre. // 12/08: rth has been used instead of rth_t (dynamic variable) in the corresponding if statement // 12/08: Macro `QJMODF has been used to compute AC as well as DC charge with corresponding AC and DC variables respectively // 11/08: Conditional statement for calculating normalized minority charge to avoid overflow at TFH=0 // 11/08: Range of AHQ has been modified to a new range [-0.9:10] from the old range [0:10] // 03/08: Quick Fix: Default value of TFH has been changed from infinity to zero and modification has been done to // 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. // ********************************************************************************** //***************************************************** //***************************************************** // 08/04:(Modification by Cornelia Thiele) // New expression for the normalized hole charge qpt and the model parameter AHQ is inserted // The reverse Early-Effect VER is reintroduced // A temperature dependent modeling of IQF using the model parameter ZETAIQF is included //***************************************************** //***************************************************** // 11/08: Modification done at TUD // 3 more parameters VDEDC, ZEDC, AJEDC have been introduced for DC depletion charge // Flag FIQF has been introduced to introduce voltage dependence in the base related critical current // ZETARTH has been introduced for temperature dependent thermal resistance //***************************************************** //***************************************************** //***************************************************** // 01/2011: Modification done at TUD // Third order polynomial is solved for transfer current. Can be turned on by IT_MOD=1. // Added voltage dependent Reverse Early voltage. Parameter aver describes voltage dependence. // Parameters ZETAVER, ZETAVGBE, VGBE describes temperature dependence of VER and IQF. // Added temperature dependence for IQFH and TFH, ALIQFH and KIQFH is used to model a second order temperature model. // Parameter TEF_TEMP=0 turns temperature dependence for TEF0 off. //***************************************************** //***************************************************** //***************************************************** // 11/2012: Modification done at TUD // 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. // // This code contains Operating Point Information to turn-on this section please use the compiler flag CALC_OP. //***************************************************** /* ***************************************************** ******************************************************** 12/2015: Modification done at TUD and released as version 1.32 * Removal of some unrequired variables. * Changed the type selection (npn or pnp) accordingly to HICUM/L2 - supply a single type parameter (+1 -> npn, -1 -> pnp) - remove the npn and pnp parameter * Parasitic PNP transistor now also takes the device type into account * Usage of rth instead of rth_t for power calculation - compatible with node collapsing statement ******************************************************** */ //Default simulator: Spectre `define PGIVEN(p) $param_given(p) `ifdef insideADMS `define P(p) (*p*) `define INITIAL_MODEL @(initial_model) `else `define P(p) `define INITIAL_MODEL `endif //Spectre `include "constants.h" `include "discipline.h" // Comment this line, if calculation of operating point values should be omitted `define CALC_OP // Comment this line, if calculation of noise analysis should be omitted //`define CALC_NOISE `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.00 `define MIN_R 0.001 //`define GMIN 1.0e-12 //`define GMIN $simparam("gmin") //suggested by L.L `define GMIN $simparam("gmin",1e-12) //suggested by L.L `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.00;\ 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); // 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 `define qpt_mod(qpt_mod,qlow)\ o3 = 1.0/3;\ p2_a = -2*qj_2;\ if (iqf == `INF && iqfh == `INF) begin\ p2_b = 0;\ end else begin\ p2_b = -(qlow);\ end\ p2_c = -itfi*itfi/ick*tfh_t/iqfh_t;\ tmp = p2_a*p2_a;\ p2_p = p2_b-tmp*o3;\ p2_q = 2*p2_a*tmp/27-p2_a*p2_b*o3+p2_c;\ p2_D = p2_q*p2_q*0.25+p2_p*p2_p*p2_p/27;\ if (abs(p2_D) < 1e-10) begin\ q_p3 = 3*p2_q/p2_p-p2_a*o3;\ end else if (p2_D > 0) begin\ tmp2 = -p2_q*0.5;\ tmp3 = sqrt(p2_D);\ tmp = tmp2+tmp3;\ if (tmp > 0) begin\ p2_u = exp(o3*ln(tmp));\ end else begin\ p2_u = -exp(o3*ln(-tmp));\ end\ tmp = tmp2-tmp3;\ if (tmp > 0) begin\ p2_v = exp(o3*ln(tmp));\ end else begin\ p2_v = -exp(o3*ln(-tmp));\ end\ q_p3 = (p2_u+p2_v)-p2_a*o3;\ end else begin\ tmp = -p2_q*0.5*sqrt(-27.0/(p2_p*p2_p*p2_p));\ tmp2 = tmp*tmp;\ if (tmp >= 0) begin\ tmp = `M_PI/2-atan(sqrt(tmp2/(1-tmp2)));\ end else begin\ tmp = `M_PI/2+atan(sqrt(tmp2/(1-tmp2)));\ end\ tmp = sqrt(-4*p2_p*o3)*cos(o3*tmp)-p2_a*o3;\ q_p3 = tmp;\ end\ qpt_mod = q_p3; 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"); electrical xf1,xf2; electrical xf; //RC nw //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; //Phase network for ITF branch (xf1 ) br_bxf1; branch (xf1 ) br_cxf1; branch (xf2 ) br_bxf2; branch (xf2 ) br_cxf2; //Phase network for QF branch (xf ) br_bxf; //for RC nw branch (xf ) br_cxf; //for RC nw // // 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 integer it_mod = 0 from [0:1] `P(spice:name="it_mod" info="Flag for using third order solution for transfer current"); 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 ver = `INF from (0:inf) `P(spice:name="ver" info="reverse Early voltage (normalization volt.)" unit="V" default:value="infinity"); parameter real aver = 0.0 from [0:100] `P(spice:name="aver" info="bias dependence for reverse Early voltage"); 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 fiqf = 0.0 from [0:1] `P(spice:name="fiqf" info="flag for turning on base related critical current" default:value="zero"); 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"); parameter real ahq = 0.0 from [-0.9:inf) `P(spice:name="ahq" info="Smoothing factor for the d.c. injection width"); // 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"); parameter real vdedc = 0.9 from (0:10] `P(spice:name="vdedc" info="BE charge built-in voltage for d.c. transfer current" unit="V"); parameter real zedc = 0.5 from (0:2) `P(spice:name="zedc" info="charge BE exponent factor for d.c. transfer current"); parameter real ajedc = 2.5 from [1:inf) `P(spice:name="ajedc" info="BE capacitance ratio Ratio maximum to zero-bias value for d.c. transfer current"); // 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:20] `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"); //Non-quasi-static Effect parameter real alqf = 0.167 from (0:1] `P(spice:name="alqf" info="Factor for additional delay time of minority charge"); parameter real alit = 0.333 from (0:1] `P(spice:name="alit" info="Factor for additional delay time of transfer current"); parameter integer flnqs = 0 from [0:1] `P(spice:name="flnqs" info="Flag for turning on and off of vertical NQS effect"); // Temperature dependance 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 zetaiqf = 0.0 `P(spice:name="zetaiqf" info="TC of iqf"); 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"); parameter real zetarth = 0.0 `P(spice:name="zetarth" info="Exponent factor for temperature dependent thermal resistance" test:value="0.0"); parameter integer tef_temp = 1 `P(spice:name="tef_temp" info="Flag for turning temperature dependence of tef0 on and off"); parameter real zetaver = -1.0 `P(spice:name="zetaver" info="TC of Reverse Early voltage"); parameter real zetavgbe = 1.0 `P(spice:name="zetavgbe" info="TC of AVER"); parameter real dvgbe = 0.0 `P(spice:name="dvgbe" info="Bandgap difference between base and BE-junction"); parameter real aliqfh = 0.0 `P(spice:name="aliqfh" info="Frist-order TC of iqfh" unit="1/K"); parameter real kiqfh = 0.0 `P(spice:name="kiqfh" info="Second-order TC of iqfh" unit="1/K^2"); // 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 = 1 from [0:1] `P(info="model type flag for pnp" ); parameter integer type=(npn==0 ? (pnp==0 ? 0 : 1) : (pnp==0 ? -1 : 0)); //Circuit simulator specific parameters parameter real tnom = 27.0 `P(spice:name="tnom" info="Temperature for which parameters are valid" unit="C"); parameter real dtemp = 0.0 `P(spice:name="dtemp" type="instance" info="Temperature change for particular transistor" unit="K"); // Declaration of the variables: begin integer HICUMtype; // QCJMOD real zr,vp; real cmax,cr,ve; real ee1,ez,ezr,vdj1,vdj2,ex1,vr,vj1,vj2,vj4; real qj1,qj2,qj3; //cjtfun *** tnom,VT,mg,vt0, removed: BA real vdj0,vdjt; // temperature and drift real VT,Tamb,Tdev,TnomK,dT,qtt0,ln_qtt0; real vde_t,vdci_t,vdcx_t,vds_t,vdedc_t; real is_t,ires_t,ibes_t,ibcs_t,iqf_t; real itss_t,iscs_t,cje0_t,cjci0_t,cjcx0_t, cje0_dc_t, cje0_dc; 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,ajedc_t; // bc charge and cap real qjci `P(ask="yes" info="B-C internal junction charge" unit="C"); real qjcx,qjcii,cjcii,qjcxi,qjci_int; //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 vf,x,y; // transfer and internal base current real cc,qj_2,qj; real tf0,ickf,ickr,itfi,itri,qm, qml, qmh; real qpt,itf,itr, qpt_l, qpt_h, denom_iqf; real b_q; real it `P(ask="yes" info="Transfer Current" unit="A"); real it_wop; real ibe,ire,ibi; // be diffusion charge real qf,qf0,dqfh,dqef; real dtef,dtfh,tf,ick; real vc,vceff,s3,w,wdc,a,tww, aa, a1, a2; // 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; real rth_t; // new for temperature dependence real mg,zetabci,zetasct,zetatef,avs; real 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 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 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; real aver_t,vjh,vj_z,h_vbe,ver_t,iqfh_t,tfh_t,ahq_t; real p2_a,p2_b,p2_c,p2_p,p2_q,p2_D,p2_u,p2_v,q_p3; real tmp,tmp2,tmp3,o3,diff_q; //NQS real Ixf1,Ixf2,Qxf1,Qxf2,Vxf1,Vxf2,Itxf,Qdeix; real Vxf, Ixf, Qxf,fact; real gmin; // For .OP pt calculation `ifdef CALC_OP (* desc="Base terminal current", units="A" multiplicity="multiply" *) real IB; (* desc="Collector terminal current", units="A" multiplicity="multiply" *) real IC; (* desc="Substrate current", units="A" multiplicity="multiply" *) real ISUB; (* desc="Avalanche current", units="A" multiplicity="multiply" *) real IAVL; (* desc="External BE voltage", units="V" multiplicity="divide" *) real VBE; (* desc="External BC voltage", units="V" multiplicity="divide" *) real VBC; (* desc="External CE voltage", units="V" multiplicity="divide" *) real VCE; (* desc="External SC voltage", units="V" multiplicity="divide" *) real VSC; (* desc="Common emitter forward current gain" multiplicity="none" *) real BETADC; (* desc="Internal transconductance", units="S" multiplicity="multiply" *) real GMi; (* desc="Internal input resistance", units="Ohm" multiplicity="divide" *) real RPIi; (* desc="Internal feedback resistance", units="Ohm" multiplicity="divide" *) real RMUi; (* desc="Internal Output resistance", units="Ohm" multiplicity="divide" *) real ROi; (* desc="Total BE capacitance", units="F" multiplicity="multiply" *) real CPIi; (* desc="Total internal BC capacitance", units="F" multiplicity="multiply" *) real CMUi; (* desc="Total external BC capacitance", units="F" multiplicity="multiply" *) real CBCX; (* desc="CS junction capacitance", units="F" multiplicity="multiply" *) real CCS; (* desc="Internal base resistance", units="Ohm" multiplicity="divide" *) real RBi; (* desc="Total base resistance", units="Ohm" multiplicity="divide" *) real RB; (* desc="External (saturated) collector series resistance", units="Ohm" multiplicity="divide" *) real RCXop; (* desc="Emitter series resistance", units="Ohm" multiplicity="divide" *) real REop; (* desc="Small signal current gain" multiplicity="none" *) real BETAAC; (* desc="Total forward transit time", units="s" multiplicity="none" *) real TF; (* desc="Transit frequency", units="Hz" multiplicity="none" *) real FT; `endif //Declaration of the variables: end // //======================== calculation of the transistor =================== // analog begin gmin = `GMIN; `INITIAL_MODEL // Model Initialization begin if (`PGIVEN(npn)) begin HICUMtype = `NPN; end else if (`PGIVEN(pnp)) begin HICUMtype = `PNP; end else begin HICUMtype = (`PGIVEN(type)) ? type : `NPN; end end // assign voltages with regard to transistor type 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 // TnomK = tnom+273.15; Tamb = $temperature; Tdev = Tamb+dtemp+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*TnomK /`P_Q; VT = `P_K*Tdev /`P_Q; dT = Tdev-TnomK; qtt0 = Tdev/TnomK; ln_qtt0 = ln(qtt0); avs = alvs*TnomK; 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) // `TMPHICJ(cje0,vde,zedc,vgbe,cje0_t,vdedc_t) cje0_dc = cje0; `TMPHICJ(cje0_dc,vdedc,zedc,vgbe,cje0_dc_t,vdedc_t) //introducing DC capacitance aje_t = aje*vde_t/vde; ajedc_t = ajedc*vdedc_t/vdedc; `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) iqf_t = iqf*exp(zetaiqf*ln_qtt0-dvgbe/VT*(qtt0-1)); 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; if (tef_temp == 1) begin tef0_t = tef0*exp(zetatef*ln_qtt0-dvg/VT*(qtt0-1)); end else begin tef0_t = tef0; end 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); //Temperature dependence of Thermal resistance if (zetarth!=0) begin rth_t = rth*exp(zetarth*ln(Tdev/TnomK)); end else begin rth_t=rth; end aver_t = aver*exp(zetaver*ln_qtt0); ver_t = ver/exp(dvgbe/VT*(exp(zetavgbe*ln_qtt0)-1)); iqfh_t = iqfh*(1+aliqfh*dT+kiqfh*dT*dT); tfh_t = tfh*(1+aliqfh*dT+kiqfh*dT*dT)*exp((vgb-vge)/VT*(qtt0-1)); ahq_t = ahq; // // 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.0) 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 else 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 `HICJQ(Vbici,cjci0_t_ii,vdci_t,zci,vptci,qjci) qjci_int = qjci; // int BC charge without normalization 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_dc_t,vde_t,ze,aje_t,qjei) // cjei = ddx(qjei,V(bi)); // 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); // Normalized BC cap and charge if (cjcii > 0.0 && cjci0_t_ii > 0.0) begin cc = cjci0_t_ii/cjcii; qjci = qjci/cjci0_t_ii; end else begin cc = 1.0; qjci = 0; end //cc = cjci0_t_ii/cjcii; //qjci = qjci/cjci0_t_ii; `QJMODF(Vbiei,cje0_dc_t,vdedc_t,zedc,ajedc_t,qjei) if (aver == 0.0) begin h_vbe = 1; end else begin vjh = (vdedc_t-Vbiei)/(2.0*VT); vjh = vdedc_t-2.0*VT*(vjh+sqrt(vjh*vjh+1.921812))*0.5; vjh = (vjh-VT)/VT; vjh = VT*(1.0+(vjh+sqrt(vjh*vjh+1.921812))*0.5); vj_z = (1.0-exp(zedc*ln(1.0-vjh/vdedc_t)))*aver_t; h_vbe = (exp(vj_z)-1.0)/vj_z; end qje = h_vbe*qjei/cje0_dc_t; qj = (1+qjci/vef+qje/ver_t); b_q = 20*qj-1; qj_2=0.025*(1+(b_q +sqrt(b_q*b_q+1.921812))/2); // Minority charge transit time tf0 = t0_t+dt0h*(cc-1)+tbvl*(1/cc-1); //Determination of base realted critical current if (fiqf==1)begin denom_iqf = fiqf*((tf0/t0_t)-1); ickf = iqf_t/(1+denom_iqf); end else begin ickf = iqf_t; end 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 at low currents (w=0) and high currents (w=1) if (tfh!=0)begin qml = itfi/ickf+itri/ickr+exp((0.6666)*ln(itfi*(itfi/ick)*((tfh_t)/iqfh_t))); qmh = itfi/ickf+itri/ickr+itfi/iqfh_t+exp((0.6666)*ln(itfi*(itfi/ick)*((tfh_t)/iqfh_t))); end else begin qml = itfi/ickf+itri/ickr; qmh = itfi/ickf+itri/ickr+itfi/iqfh_t; end qpt_l= qj_2+sqrt((qj_2)*(qj_2)+qml); qpt_h= qj_2+sqrt((qj_2)*(qj_2)+qmh); // Calculation of the injection width diff_q = qmh-qml; if (abs(diff_q)>1e-8) begin a1= 1-ick/(1+ahq_t)/itfi*qpt_l; a2= 1+ick/(1+ahq_t)/itfi*(qpt_h-qpt_l); aa= a1/a2; wdc= (sqrt(aa*aa+0.01)+aa)/(1+sqrt(1+0.01)); end else begin wdc = 0; end // Normalized minority charge if (it_mod == 0) begin if (tfh!=0) begin qm = itfi/ickf+itri/ickr+itfi/iqfh_t*wdc*wdc+exp((0.6666)*ln(itfi*(itfi/ick)*((tfh_t)/iqfh_t))); end else begin qm = itfi/ickf+itri/ickr+itfi/iqfh_t*wdc*wdc; end // Normalized total hole charge qpt = qj_2+sqrt((qj_2)*(qj_2)+qm); end else begin `qpt_mod(qpt,itfi/ickf+itri/ickr+itfi/iqfh_t*wdc*wdc) end if (qpt<=1e-20) begin qpt=1e-20; end itf = itfi/qpt; itr = itri/qpt; // Transfer current 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 // `QJMODF(Vbiei,cje0_t,vde_t,ze,aje_t,qjei) // Computation of AC charge for base resistance calculation qje = qjei/cje0_t; // Base resistance if (rbi0_t > 0.0) begin : HICRBI // Conductivity modulation with hyperbolic smoothing 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; //rbi= rbi0_t*(1+0.2)/(0.2+qpt); // 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 //rbi= rbi0_t; 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 pterm = 0; 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 >= `MIN_R) begin pterm = pterm + Veie*Veie/re_t; end if (rcx >= `MIN_R) begin pterm = pterm + Vcic*Vcic/rcx_t; end end Itxf = itf; Qdeix = qf; // Excess Phase calculation if (flnqs != 0 && tf != 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); fact = t0/tf; Ixf = (Vxf - qf)*fact; Qxf = alqf*Vxf*t0; Qdeix = Vxf; end else begin Ixf1 = V(br_bxf1); Ixf2 = V(br_bxf2); Qxf1 = 0; Qxf2 = 0; Ixf = V(br_bxf); Qxf = 0; end // // Compute branch sources // Ibici = ijbc - iavl; Qbci = cbcpar*Vbci; Qbe = cbepar*Vbe; Qbici = qjcii+qr; //Qbiei = qjei+qf; Qbiei = qjei+Qdeix; 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_wop = HICUMtype*it; // 'it' without excess phase it = HICUMtype*(Itxf-itr); // 'it' with excess phase iavl = HICUMtype*iavl; // // Define branch sources // I(br_biei) <+ gmin*V(br_biei); I(br_bici) <+ gmin*V(br_bici); I(br_ciei) <+ gmin*V(br_ciei); I(br_bs) <+ HICUMtype*HSI_Tsu; I(br_sci) <+ ijsc + 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; //`P(spectre:gmin="add"); end else begin I(br_eie_i) <+ Veie/`MIN_R; //`P(spectre:gmin="add"); end if (rcx >= `MIN_R) begin I(br_cic_i) <+ Vcic/rcx_t; //`P(spectre:gmin="add"); end else begin I(br_cic_i) <+ Vcic/`MIN_R; //`P(spectre:gmin="add"); end if (rbi0 >= `MIN_R || rbx >= `MIN_R) begin I(br_bbi_i) <+ Vbbi/rb + gmin*Vbbi; //`P(spectre:gmin="add"); end else begin I(br_bbi_i) <+ Vbbi/`MIN_R; //`P(spectre:gmin="add"); end I(br_bici) <+ Ibici; //`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; //`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"); //I(br_ciei) <+ Itxf; // 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_t-pterm; //`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_t-pterm ; //`P(spectre:gmin="add"); // I(br_sht) <+ ddt(cth*Vrth); // //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; I(br_cxf) <+ ddt(Qxf); `ifdef CALC_NOISE // 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, "rb thermal"); end if (rcx >= `MIN_R) begin I(br_cic_i) <+ white_noise(fourkt/rcx_t, "rcx thermal"); end if (re >= `MIN_R) begin I(br_eie_i) <+ white_noise(fourkt/re_t, "re thermal"); end // Shot noise twoq = 2.0 * `P_Q; I(br_biei) <+ white_noise(twoq*ijbe, "ijbe shot"); I(br_ciei) <+ white_noise(twoq*it, "it shot"); // Flicker noise flicker_Pwr = kf*pow(ijbe,af); I(br_biei) <+ flicker_noise(flicker_Pwr,1.0, "ib flicker"); `endif `ifdef CALC_OP // if (analysis("static")) begin : OP_calculation begin : OP_calculation real oRPIi, oRMUi, oROi, gAVL; real Cdei, Cdci, Cjei, Cjci, Cjcx, CBC; real R_tot; // IB = I(); // IC = I(); // ISUB = I(); IB = ibe; IC = it; ISUB = ijsc; IAVL = iavl; VBE = V(b,e); VBC = V(b,c); VCE = V(c,e); VSC = V(s,c); // GMi = ddx(it_wop,V(bi)); GMi = ddx(it,V(bi)); oRPIi = ddx(ijbe,V(bi)); RPIi = 1.0/(oRPIi+1e-12); oRMUi = -1*ddx(Ibici,V(ci)); RMUi = 1.0/(oRMUi+1e-12); gAVL = HICUMtype*ddx(iavl,V(ci)); oROi = ddx(it_wop,V(ci)); ROi = 1.0/(oROi+gAVL+1e-12); Cdei = -1*HICUMtype*ddx(qf,V(ei)); Cjei = ddx(qjei,V(bi)); CPIi = Cjei + Cdei + cbepar; Cdci = -1*HICUMtype*ddx(qr,V(ci)); Cjci = ddx(qjci_int,V(bi)); CMUi = Cjci + Cdci; Cjcx = -1*ddx(qjcxi,V(ci)); CBCX = Cjcx + cbcpar ; CCS = ddx(qjs,V(s)); RBi = rbi; RB = rb; RCXop = rcx_t; REop = re_t; BETADC = IC/IB; BETAAC = GMi*RPIi; R_tot = RCXop + REop + ((RB+REop)/BETAAC); TF = tf; CBC = CMUi+CBCX; FT = GMi/(2*`M_PI*(CPIi+CBC+(R_tot*CBC*GMi))); end `endif end // analog endmodule tmp_ns50wwy/src/spicelib/devices/adms/r2_cmc/0000755000175000017500000000000014163340332021245 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/r2_cmc/admsva/0000755000175000017500000000000014163340332022520 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/r2_cmc/admsva/cmcModels.inc0000644000175000017500000003266314163340332025133 0ustar carstencarsten // // This file is the top-level declaration for the following CMC Verilog-A models: // // r2_cmc CMC 2-terminal resistor model // r2_et_cmc CMC 2-terminal resistor model with self-heating // // // Physical constants and other generally useful numbers // `include "discipline.h" `define TABS_NIST2004 2.73150000e+02 // (NIST2004) 0C in K `define QQ_NIST2004 1.60217653e-19 // (NIST2004) mag. of electronic charge (C) `define KB_NIST2004 1.38065050e-23 // (NIST2004) Boltzmann constant (J/K) `define oneThird 3.3333333333333333e-01 // // Clipping macros, these smoothly limit to lower, upper, or both lower and upper // limits. Rather than using a sqrt or log-exp form, which affects values // everywhere, these use a conditional form that is continuous in function // and derivative. If a value is not clipped then no exp() evaluation occurs. // Smooth limiting is preferable to hard limiting (although latter can still // be useful for enforcing parameter limits) for bias dependent quantities // as derivatives do not become zero or have discontinuities. // `define CLIPL0p1(XCLIP,X,LOWER) \ if (X<(LOWER+0.1)) \ XCLIP = LOWER+0.1*exp(10.0*(X-LOWER)-1.0); \ else \ XCLIP = X; `define CLIPU0p1(XCLIP,X,UPPER) \ if (X>(UPPER-0.1)) \ XCLIP = UPPER-0.1*exp(10.0*(UPPER-X)-1.0); \ else \ XCLIP = X; `define CLIPB0p1(XCLIP,X,LOWER,UPPER) \ if (X<(LOWER+0.1)) \ XCLIP = LOWER+0.1*exp(10.0*(X-LOWER)-1.0); \ else if (X>(UPPER-0.1)) \ XCLIP = UPPER-0.1*exp(10.0*(UPPER-X)-1.0); \ else \ XCLIP = X; `define CLIPL1p0(XCLIP,X,LOWER) \ if (X<(LOWER+1.0)) \ XCLIP = LOWER+exp(X-LOWER-1.0); \ else \ XCLIP = X; `define CLIPU1p0(XCLIP,X,UPPER) \ if (X>(UPPER-1.0)) \ XCLIP = UPPER-exp(UPPER-X-1.0); \ else \ XCLIP = X; `define CLIPB1p0(XCLIP,X,LOWER,UPPER) \ if (X<(LOWER+1.0)) \ XCLIP = LOWER+exp(X-LOWER-1.0); \ else if (X>(UPPER-1.0)) \ XCLIP = UPPER-exp(UPPER-X-1.0); \ else \ XCLIP = X; `ifdef insideADMS `ifdef notInsideADMS `undef notInsideADMS `endif `else `define notInsideADMS `endif `ifdef __VAMS_COMPACT_MODELING__ `ifdef not__VAMS_COMPACT_MODELING__ `undef not__VAMS_COMPACT_MODELING__ `endif `else `define not__VAMS_COMPACT_MODELING__ `endif // // Conditional definitions of macros so that the code will work with // Verilog-A 2.1 and 2.2, and ADMS. The "des" description argument is intended to // be a short description, the "inf" information argument is intended to be // a detailed description (e.g. for display as part of on-line help). // // MPR model parameter real // MPI model parameter integer // IPR instance parameter real // IPI instance parameter integer // IPM instance parameter mFactor (multiplicity, implicit for LRM2.2) // OPP operating point parameter, includes units and description for printing // // There are some issues with passing range directives with some compilers, // so for each parameter declaration there are 5 versions: // cc closed lower bound, closed upper bound // co closed lower bound, open upper bound // oc open lower bound, closed upper bound // oo open lower bound, open upper bound // nb no bounds // //`ifdef __VAMS_COMPACT_MODELING__ `define ALIAS(alias,parameter) aliasparam alias = parameter; `define ERROR(str) \ begin \ $strobe(str); \ $finish(1); \ end `define WARNING(str) $strobe(str); `define OPP(nam,uni,des) (*units=uni desc=des*) real nam; `define MPRcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr]; `define MPRco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr); `define MPRoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr]; `define MPRoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr); `define MPRnb(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def; `define MPIcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr]; `define MPIco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr); `define MPIoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr]; `define MPIoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr); `define MPInb(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def; `define IPRcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr]; `define IPRco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr); `define IPRoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr]; `define IPRoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr); `define IPRnb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def; `define IPIcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr]; `define IPIco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr); `define IPIoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr]; `define IPIoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr); `define IPInb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def; `define IPM parameter real m=1 from(0:inf); `define TESTGIVEN(parameter) $param_given(parameter) `define GIVEN(parameter,variable,true,false) \ begin \ if ($param_given(parameter)) \ variable = true; \ else \ variable = false; \ end // `define SCALE \ // begin \ // if ($param_given(scale)) \ // scaleFac = scale; \ // else \ // scaleFac = $simparam("scale",1.0); \ // end // `define SHRINKL \ // begin \ // if ($param_given(shrink)) \ // shrinkL = 1.0-0.01*shrink; \ // else \ // shrinkL = 1.0-0.01*$simparam("shrink",0.0); \ // end // `define RTHRESH \ // begin \ // if ($param_given(rthresh)) \ // rthrR2 = rthresh; \ // else \ // rthrR2 = $simparam("rthresh",1.0e-03); \ // end //`else // not__VAMS_COMPACT_MODELING__ // `define ALIAS(alias,parameter) // `ifdef insideADMS // `define ERROR(str) \ // begin \ // $strobe(str); \ // $finish(1); \ // end // `define WARNING(str) $strobe(str); // `define OPP(nam,uni,des) real nam (*units=uni desc=des ask="yes"*); // `define MPRcc(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr] (*units=uni ask="yes" info=des*); // `define MPRco(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr) (*units=uni ask="yes" info=des*); // `define MPRoc(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr] (*units=uni ask="yes" info=des*); // `define MPRoo(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr) (*units=uni ask="yes" info=des*); // `define MPRnb(nam,def,uni, des) parameter real nam=def (*units=uni ask="yes" info=des*); // `define MPIcc(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr] (*units=uni ask="yes" info=des*); // `define MPIco(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr) (*units=uni ask="yes" info=des*); // `define MPIoc(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr] (*units=uni ask="yes" info=des*); // `define MPIoo(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr) (*units=uni ask="yes" info=des*); // `define MPInb(nam,def,uni, des) parameter integer nam=def (*units=uni ask="yes" info=des*); // `define IPRcc(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr] (*units=uni type="instance" ask="yes" info=des*); // `define IPRco(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr) (*units=uni type="instance" ask="yes" info=des*); // `define IPRoc(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr] (*units=uni type="instance" ask="yes" info=des*); // `define IPRoo(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr) (*units=uni type="instance" ask="yes" info=des*); // `define IPRnb(nam,def,uni, des) parameter real nam=def (*units=uni type="instance" ask="yes" info=des*); // `define IPIcc(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr] (*units=uni type="instance" ask="yes" info=des*); // `define IPIco(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr) (*units=uni type="instance" ask="yes" info=des*); // `define IPIoc(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr] (*units=uni type="instance" ask="yes" info=des*); // `define IPIoo(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr) (*units=uni type="instance" ask="yes" info=des*); // `define IPInb(nam,def,uni, des) parameter integer nam=def (*units=uni type="instance" ask="yes" info=des*); // `define IPM parameter real m=1 from(0:inf) (*units="" type="instance" ask="yes" info="multiplicity factor"*); // `define TESTGIVEN(parameter) $given(parameter) // `define GIVEN(parameter,variable,true,false) \ // begin \ // if ($given(parameter)) \ // variable = true; \ // else \ // variable = false; \ // end // `define SCALE \ // begin \ // if ($given(scale)) \ // scaleFac = scale; \ // else \ // scaleFac = $scale; \ // end // `define SHRINKL \ // begin \ // if ($given(shrink)) \ // shrinkL = 1.0-0.01*shrink; \ // else \ // shrinkL = $shrinkl("m"); \ // end // `define RTHRESH rthrR2 = rthresh; // `else // notInsideADMS // `define ERROR(str) \ // begin \ // $strobe(str); \ // $finish(1); \ // end // `define WARNING(str) $strobe(str); // `define OPP(nam,uni,des) real nam; // `define MPRcc(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr]; // `define MPRco(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr); // `define MPRoc(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr]; // `define MPRoo(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr); // `define MPRnb(nam,def,uni, des) parameter real nam=def; // `define MPIcc(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr]; // `define MPIco(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr); // `define MPIoc(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr]; // `define MPIoo(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr); // `define MPInb(nam,def,uni, des) parameter integer nam=def; // `define IPRcc(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr]; // `define IPRco(nam,def,uni,lwr,upr,des) parameter real nam=def from[lwr:upr); // `define IPRoc(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr]; // `define IPRoo(nam,def,uni,lwr,upr,des) parameter real nam=def from(lwr:upr); // `define IPRnb(nam,def,uni, des) parameter real nam=def; // `define IPIcc(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr]; // `define IPIco(nam,def,uni,lwr,upr,des) parameter integer nam=def from[lwr:upr); // `define IPIoc(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr]; // `define IPIoo(nam,def,uni,lwr,upr,des) parameter integer nam=def from(lwr:upr); // `define IPInb(nam,def,uni, des) parameter integer nam=def; // `define IPM parameter real m=1 from(0:inf); // `define TESTGIVEN(parameter) 1 // `define GIVEN(parameter,variable,true,false) variable = true; `define SCALE scaleFac = scale; `define SHRINKL shrinkL = 1.0-0.01*shrink; `define RTHRESH rthrR2 = rthresh; // `endif //`endif tmp_ns50wwy/src/spicelib/devices/adms/r2_cmc/admsva/r2_cmc.va0000644000175000017500000011416214163340332024222 0ustar carstencarsten`include "cmcModels.inc" // // Set up two versions of the model (which is defined in the // file r2_cmc_core.va), an isothermal model and an electrothermal model. // //`define electroThermal `define LEVEL 1002 `define GFORM // if GFORM is defined an I=V*g formulation is used, else a V=I*r formulation is used `define VERSION 1.0 `define REVISION 0.0 // // r2[_et]_cmc: Compact Model Council (CMC) 2-terminal Resistor Model // // This is the 2-terminal resistor model developed by the resistor // subcommittee of the CMC. The goal was to have a standard 2-terminal // resistor model with standard parameter names and a standard, // numerically well behaved nonlinearity model. // // The nonlinearity model is that proposed by Agere Systems // (from Kausar Banoo, Kumud Singhal, and Hermann Gummel). // // A self-heating (electro-thermal) version is included via conditionals. // It is anticipated that this will be provided as a separate // form of the model (r2_et_cmc where "et" means electro-thermal) // and the local temperature rise terminal will be made available // optionally, this has been requested for resistors in power // technologies. The non-self-heating form, r2_cmc, is expected to // be available as a new level model (the level number assigned // depending on what level models are already available within // a simulator, the value of 2 used here is an example). // // // Version 1.0 // Revision 0.0 // Date 2005 Nov 12 // Comments Model as approved at Oct 2005 CMC meeting // - notes from Agere systems added to documentation // // Version 1.0 // Revision 0.0_preview3 // Date 2005 Oct 08 // Comments Updates based on second round of comments // - electrothermal model name changed to r2_et_cmc so the // _cmc tag would be at the end // - top-level calling structure changed to make addition // of other models more structured, and have all information // directly relevant to r2[_et]_cmc in this file // - LEVEL and other parameters moved to this file rather than // the top-level file for the same reason, and LEVEL was // set to the value 1002 // - single line if statements have begin ... end added for safety // and consistency of style // - linear TC added for flicker noise coefficient // - notes and documentation added that // tc1, tc2, c1, c2, isnoisy // should be both instance and model parameters // - tc1e and tc2e (the effective temperature coefficients of resistance) // were updated to include a width dependence and to // have a length dependence that varies with c1 and c2 // - added an instance parameter switch sw_et to enable the self-heating // model to be turned off // - added min and max parameters for length and width, and if // a drawn geometry is outside these limits then a warning is issued // - handling of tmin and tmax changed: // specific clipping limits added (used for self-heating) // warnings added if ambient temperature is outside the limits // clipping of temperature to limits changed to be smooth // - temperature coefficient of resistance clamped smoothly // rather than having a hard limit // // Version 1.0 // Revision 0.0_preview2 // Date 2005 Sep 02 // Comments Updates based on first round of comments // - changed name to r2_cmc from cmc_r2 // - fixed up improperly defined variables // - modified some names for consistency with documentation // - set up a top-level file that up both // isoThermal and electroThermal versions are defined // - set switch to resistance form to be done based on // resistance at tnom, so the form does not change // during a temperature sweep // - fixed errors in LRM2.2 code // // Version 1.0 // Revision 0.0_preview1 // Date 2005 Jul 01 // Comments Initial code for review by CMC resistor subcommittee // // // Instance parameters are: // m multiplicity factor (number in parallel, implicit for LRM2.2) // w design width of resistor body // l design length of resistor body // r resistance (per segment, total resistance is r/m) // c1 contact at terminal 1: 0=no 1=yes // c2 contact at terminal 2: 0=no 1=yes // trise local temperature delta to ambient (before self-heating) // isnoisy switch for noise: 0=no 1=yes // // // The c1 and c2 parameters control the addition of "end" effects // to the model. If these are both zero ("no contact") then no end // effects are added. If only one is non-zero 1/2 the end effects are // added. If both are non-zero full end effects are added. This // is to facilitate the implementation of multi-section models in a // subckt. c1=c2=0 for all internal sections, c1=0,c2=1 for the // "left" end segment, c1=1,c2=0 for the "right" end segment. // // The basic nonlinearity is: // // R=R0*(1-p2-p3+p2*sqrt(1+(q2*E)**2)+p3*cbrt(1+(q3*abs(E))**3)) // // where cbrt() is the cube root operation. The use // of abs(E) leads to a singularity in higher order derivatives, // but because of the power of the term it does not show up // until the 4th derivative of the current. // // For q3*abs(E) somewhat greater than 1, the p3,q3 term // leads a resistance factor of (1+p3*(q3*abs(E)-1)) so p3*q3 // is in essence a first order field coefficient of // resistance. // For q2*E somewhat less than 1, the p2,q2 term leads to a // resistance factor (1+0.5*p2*(q2*E)**2) so 0.5*p2*q2**2 is in essence // a second order field coefficient of resistance. // The bias dependent nonlinearity is done via field rather than voltage, // to get reasonable scaling with length. // // There is no explicit handling of end resistances, they are assumed // to be accounted for by xl. If there is a difference between the TC's // of the end resistance compared to the body resistance, it can be shown that // TC_overall=TC_body+Rend*(TC_end-TC_body)/(rsh*(L+xl)) // therefore a 1/length term is included for the TCs to allow this effect // to be modeled. // // Some Verilog-A compilers have difficulties handling the contrib type // switch based on resistance value. Conditional switches have been // put in this code to handle this for now. Comment out the `define GFORM // line at the top to switch to the resistance form. // // // Usage with model: // instanceId (n1 n2) modelName l=L w=W [trise=TRISE] [m] // model modelName r[esistor] // + level=assignedLevelForR2_CmcModel // + param=value // OR (for simulators that use model names rather than levels) // model modelName r2_cmc // + param=value // (NOTE: specify any two of w,l,r and the other will be calculated). // // Usage without model: // instanceId (n1 n2) r[esistor] r=value [trise=TRISE] [m] // // If this model is used with only r specified, then the geometry is taken // to be w/l=1um/1um and these values are used for 1/f noise calculation. // Note that this then means the 1/f noise is not geometry dependent, // which is incorrect. For proper modeling of 1/f noise you // should use the form where two of w,l,r are specified as instance parameters. // // The following parameters should be treated as model or instance parameters, // with instance parameter specification over-riding model parameter specification: // tc1 // tc2 // c1 // c2 // isnoisy // There is no construct in Verilog-A for denoting this, but this should be // implemented as such within a simulator. // // // Verilog-A Notes: // // 1. It is expected that, to be able to handle small- and zero-value resistances, // the model implementation will transform from an I=G*V form for higher resistance // values to a V=I*R form for lower resistance values. The switch should be based // on zero-bias resistance, not voltage (and, for the self-heating version temperature) // dependent resistance, to avoid changing the model formulation during simulation. // The "G" or "R" formulation should be determined once at set-up and kept from then on. // The current and voltage calculations are separated from noise calculations, // to partition code for implementation efficiency. This causes errors with some // Verilog-A compilers, as they think the contribution type can switch between // various parts of the code. Therefore the switch is done using the macro `GFORM, // and commented equivalent Verilog-A code is included, to indicate the intent. // // 2. There is no way to implement the LRM2.2 $param_given() function in // LRM2.1 code, the concept is not part of the language. Therefore the // model ONLY works with w,l specified as instance parameters when run // in an LRM2.1 compliant compiler. Also, although the "m" parameter is // known for LRM2.2, it apparently still needs to be declared explicity // as a model parameter. // // 3. When testing with the R form of the model, there are some differences in // simulation results w.r.t. the G form of the model, which was used to generate // the reference test results. These appear to be from slight differences in convergence. // // Apologies for the nested conditionals. It makes the code hard to read, but is // needed as there are different possible forms (isothermal, electrothermal; // conductance form, resistance form) as well as different syntax for different // language versions. // // There is no `ifndef XXX in Verilog-A, the "notXXX" macros are defined for convenience. // `ifdef electroThermal `ifdef notElectroThermal `undef notElectroThermal `endif `else `define notElectroThermal `endif `ifdef electroThermal module r2_et_cmc(n1,n2); `else module r2_cmc(n1,n2); `endif //`ifdef insideADMS // (* // info="r2_cmc two-terminal resistor model" // version="`VERSION" // revision="`REVISION" // spice:prefix="r" // spice:level="`LEVEL" // *) //`endif //; // // Node definitions (if the self-heating modeling is selected, the // local temperature rise node is internal, and not external) // inout n1,n2; electrical n1; electrical n2; `ifdef electroThermal electrical dt; `endif // // Branch definitions // branch (n1,n2) b_r; // resistance branch (n1,n2) b_n; // separate definition for noise, which is always a current contribution `ifdef electroThermal branch (dt) b_rth; // thermal resistance branch (dt) b_ith; // thermal generation, 2nd definition is to fool floating node detection in some compilers `endif // // Instance parameters // `IPM `IPRco( w , 1.0e-06,"m" , 0.0, inf, "design width of resistor body") `IPRco( l , 1.0e-06,"m" , 0.0, inf, "design length of resistor body") `IPRco( r , 100.0 ,"Ohm" , 0.0, inf, "resistance (per segment, total resistance is r/m)") `IPIcc( c1 , 1 ,"" , 0, 1, "contact at terminal 1: 0=no 1=yes") `IPIcc( c2 , 1 ,"" , 0, 1, "contact at terminal 2: 0=no 1=yes") `IPRnb( trise , 0.0 ,"degC" , "local temperature delta to ambient (before self-heating)") `IPIcc( isnoisy , 1 ,"" , 0, 1, "switch for noise: 0=no and 1=yes") `ifdef electroThermal `IPIcc( sw_et , 1 ,"" , 0, 1, "switch for turning off self-heating: 0=exclude and 1=include") `endif // // Special model parameters, some may be simulator global parameters // `MPRnb( version , `VERSION ,"" , "model version") `MPRnb( revision, `REVISION,"" , "model revision (subversion)") `MPRoc( scale , 1.0 ,"" , 0.0, 1.0, "scale factor for instance geometries") `MPRco( shrink , 0.0 ,"%" , 0.0, 100.0, "shrink percentage for instance geometries") `MPRcc( tmin ,-100.0 ,"degC" ,-250.0, 27.0, "minimum ambient temperature") `MPRcc( tmax , 500.0 ,"degC" , 27.0,1000.0, "maximum ambient temperature") `MPRoo( rthresh , 1.0e-03,"Ohm" , 0.0, inf, "threshold to switch to resistance form") // // Model parameters // `MPRnb( level , `LEVEL ,"" , "model level") `MPRcc( tnom , 27.0 ,"degC" ,-250.0,1000.0, "nominal (reference) temperature") `MPRoo( rsh , 100.0 ,"Ohm/sq" , 0.0, inf, "sheet resistance") `MPRco( lmin , 0.0 ,"um" , 0.0, inf, "minimum allowed drawn length") `MPRoo( lmax , 9.9e09 ,"um" , 0.0, inf, "maximum allowed drawn length") `MPRco( wmin , 0.0 ,"um" , 0.0, inf, "minimum allowed drawn width") `MPRoo( wmax , 9.9e09 ,"um" , 0.0, inf, "maximum allowed drawn width") `MPRnb( xw , 0.0 ,"um" , "width offset (total)") `MPRnb( xl , 0.0 ,"um" , "length offset (total)") `MPRnb( dxle , 0.0 ,"um" , "length delta for field calculation") `MPIcc( sw_efgeo, 0 ,"" , 0, 1, "switch for electric field geometry calculation: 0=design and 1=effective") `MPRco( q3 , 0.0 ,"um/V" , 0.0, inf, "1/field at which the linear field coefficient activates") `MPRco( p3 , 0.0 ,"" , 0.0, 1.0, "linear field coefficient factor: EC1=p3*q3") `MPRco( q2 , 0.0 ,"um/V" , 0.0, inf, "1/field at which the quadratic field coefficient activates") `MPRco( p2 , 0.0 ,"" , 0.0,1.0-p3, "quadratic field coefficient factor: EC2=0.5*p2*q2^2") `MPRco( kfn , 0.0 ,"" , 0.0, inf, "flicker noise coefficient (unit depends on afn)") `MPRoo( afn , 2.0 ,"" , 0.0, inf, "flicker noise current exponent") `MPRoo( bfn , 1.0 ,"" , 0.0, inf, "flicker noise 1/f exponent") `MPIcc( sw_fngeo, 0 ,"" , 0, 1, "switch for flicker noise geometry calculation: 0=design and 1=effective") `MPRoo( jmax , 100.0 ,"A/um" , 0.0, inf, "maximum current density") `MPRcc( tminclip,-100.0 ,"degC" ,-250.0, 27.0, "clip minimum temperature") `MPRcc( tmaxclip, 500.0 ,"degC" , 27.0,1000.0, "clip maximum temperature") `MPRnb( tc1 , 0.0 ,"/K" , "resistance linear TC") `MPRnb( tc2 , 0.0 ,"/K^2" , "resistance quadratic TC") `MPRnb( tc1l , 0.0 ,"um/K" , "resistance linear TC length coefficient") `MPRnb( tc2l , 0.0 ,"um/K^2" , "resistance quadratic TC length coefficient") `MPRnb( tc1w , 0.0 ,"um/K" , "resistance linear TC width coefficient") `MPRnb( tc2w , 0.0 ,"um/K^2" , "resistance quadratic TC width coefficient") `MPRnb( tc1kfn , 0.0 ,"" , "flicker noise coefficient linear TC") `ifdef electroThermal `MPRoo( gth0 , 1.0e+06,"W/K" , 0.0, inf, "thermal conductance fixed component") `MPRco( gthp , 0.0 ,"W/K/um" , 0.0, inf, "thermal conductance perimeter component") `MPRco( gtha , 0.0 ,"W/K/um^2" , 0.0, inf, "thermal conductance area component") `MPRco( cth0 , 0.0 ,"s*W/K" , 0.0, inf, "thermal capacitance fixed component") `MPRco( cthp , 0.0 ,"s*W/K/um" , 0.0, inf, "thermal capacitance perimeter component") `MPRco( ctha , 0.0 ,"s*W/K/um^2", 0.0, inf, "thermal capacitance area component") `endif // // Supported aliases for parameters // `ALIAS(dtemp,trise) `ALIAS(dta,trise) // // These variables will be displayed as part of operating point information. // `OPP( v_OP ,"V" ,"voltage across resistor") `OPP( i_OP ,"A" ,"current through resistor") `OPP( power_OP ,"W" ,"dissipated power") `OPP( leff ,"um" ,"effective electrical length in um") `OPP( weff ,"um" ,"effective electrical width in um") `OPP( r0_OP ,"Ohm" ,"zero-bias resistance (per segment)") `OPP( r_dc_OP ,"Ohm" ,"DC resistance (including bias dependence and m)") `OPP( r_ac_OP ,"Ohm" ,"AC resistance (including bias dependence and m)") `ifdef electroThermal `OPP( rth ,"K/W" ,"thermal resistance") `OPP( cth ,"s*W/K","thermal capacitance") `OPP( dt_et ,"K" ,"self-heating temperature rise") `endif `ifdef notInsideADMS analog begin : analogBlock `endif real i, v, power, r0, weff_um, leff_um, r_dc, r_ac; real tiniK,tdevK,scaleFac,shrinkL,delt,tcr,xleff; real lFactor,l_um,w_um,l_umForE,g0,r0_t,g0_t,kfn_t; real sqrf,cbrf,tdevC,wn,fn,rthrR2; real rFactor,vin,E,q2E,q3E,tc1e,tc2e; integer GFORM; `ifdef __VAMS_COMPACT_MODELING__ `ifdef GFORM real g_ac; `else real drfdv; `endif `else real drfdv,g_ac; `endif `ifdef electroThermal real gth,Vrth,Ith,Irth,Qcth,p_um,a_um2,dg0dt,tmp1; `endif // // Code independent of bias or instance parameters // `ifdef insideADMS analog begin @(initial_instance) begin `else begin : initializeModel `endif if (level!=`LEVEL) begin `ERROR("ERROR: r2 model called with incorrect level parameter") end `SCALE `SHRINKL `RTHRESH lFactor = shrinkL*scaleFac*1.0e6; // conversion factor from instance l to um tiniK = `TABS_NIST2004+tnom; tdevC = $temperature+trise-`TABS_NIST2004; // device temperature if (tdevCtmax) begin `WARNING("WARNING: ambient temperature is higher than allowed maximum"); end `ifdef notElectroThermal `CLIPB1p0(tdevC,tdevC,tminclip,tmaxclip); tdevK = tdevC+`TABS_NIST2004; delt = tdevK-tiniK; // temperature w.r.t. tnom kfn_t = (1+delt*tc1kfn)*kfn; if (kfn_t<0.0) begin kfn_t = 0.0; end `endif // end // initializeModel // // Code independent of bias but dependent on instance parameters // //`ifdef insideADMS // @(initial_instance) begin //`else // begin : initializeInstance //`endif if (c1&&c2) begin xleff = xl; // contacted at both ends, use full xl end else if (c1||c2) begin xleff = xl*0.5; // contacted at one end, include 1/2 of xl effect end else begin xleff = 0.0; // not contacted end // // For geometric processing, the order of importance is taken to be // w,l,r. The evaluation of whether a V contrib should be used, for // low resistance, rather than the usual I contrib, is based on // calculations at nominal temperature and zero bias, and so will // not cause a formulation switch with bias. The cases where // conductance or resistance are zero is handled. // if (`TESTGIVEN(l)&&`TESTGIVEN(r)&&!`TESTGIVEN(w)) begin // // If l and r are specified, but w is not, then calculate w // (if w is also specified, this over-rides the specified r) // if (r==0.0||l==0.0) begin l_um = 0.0; leff_um = 0.0; w_um = w*lFactor; weff_um = w_um+xw; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 0.0; g0 = 1.0e99; // cannot set to inf end else begin l_um = l*lFactor; leff_um = l_um+xleff; if (leff_um<0.0) begin `ERROR("ERROR: calculated effective r2_cmc resistor length is < 0.0") end if (leff_um>0.0) begin weff_um = (rsh/r)*leff_um; w_um = weff_um-xw; if (w_um<=0.0) begin `ERROR("ERROR: calculated design r2_cmc resistor width is <= 0.0") end r0 = r; g0 = 1.0/r0; end else begin w_um = w*lFactor; weff_um = w_um+xw; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 0.0; g0 = 1.0e99; // cannot set to inf end end end else if (`TESTGIVEN(r)&&!`TESTGIVEN(l)) begin // // If r is specified, but l is not, calculate l based on either // a specified or the default w (it does not matter which), // this also handles the case of usage without a .model card // if (r==0.0) begin l_um = 0.0; leff_um = 0.0; w_um = w*lFactor; weff_um = w_um+xw; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 0.0; g0 = 1.0e99; // cannot set to inf end else if (w==0.0) begin w_um = 0.0; weff_um = 0.0; l_um = l*lFactor; leff_um = l_um+xleff; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 1.0e99; // cannot set to inf g0 = 0.0; end else begin w_um = w*lFactor; weff_um = w_um+xw; if (weff_um<0.0) begin `ERROR("ERROR: calculated effective r2_cmc resistor width is < 0.0") end if (weff_um>0.0) begin leff_um = (r/rsh)*weff_um; l_um = leff_um-xleff; if (l_um<=0.0) begin `ERROR("ERROR: calculated design r2_cmc resistor length is <= 0.0") end r0 = r; g0 = 1.0/r0; end else begin l_um = l*lFactor; leff_um = l_um+xleff; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 1.0e99; // cannot set to inf g0 = 0.0; end end end else begin // // For all other cases, r is calculated as a function of // geometry, either specified or default. Either l and w // are both specified, in which case they over-ride // specification of r, or else r is not specified. // if (w==0.0) begin w_um = 0.0; weff_um = 0.0; l_um = l*lFactor; leff_um = l_um+xleff; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 1.0e99; // cannot set to inf g0 = 0.0; end else if (l==0.0) begin l_um = 0.0; leff_um = 0.0; w_um = w*lFactor; weff_um = w_um+xw; // this could be negative, but has no effect so is not flagged as `ERROR r0 = 0.0; g0 = 1.0e99; // cannot set to inf end else begin w_um = w*lFactor; weff_um = w_um+xw; if (weff_um<0.0) begin `ERROR("ERROR: calculated effective r2_cmc resistor width is < 0.0") end l_um = l*lFactor; leff_um = l_um+xleff; if (weff_um>0.0) begin if (leff_um<0.0) begin `ERROR("ERROR: calculated effective r2_cmc resistor length is < 0.0") end if (leff_um>0.0) begin r0 = rsh*(leff_um/weff_um); g0 = 1.0/r0; end else begin r0 = 0.0; g0 = 1.0e99; // cannot set to inf end end else begin r0 = 1.0e99; // cannot set to inf, also don't need to check if(leff_um>0.0) for this case g0 = 0.0; end end end if (l_umlmax) begin `WARNING("WARNING: drawn length is greater than allowed maximum"); end if (w_umwmax) begin `WARNING("WARNING: drawn width is greater than allowed maximum"); end if (sw_efgeo) begin l_umForE = leff_um+dxle; end else begin l_umForE = l_um+dxle; end if (l_umForE<=0.0&&r0>0.0&&(p2>0.0||p3>0.0)) begin `ERROR("ERROR: calculated effective r2_cmc resistor length for E calculation is < 0.0") end tc1e = tc1; tc2e = tc2; if (leff_um>0.0) begin if (c1&&c2) begin tc1e = tc1e+tc1l/leff_um; tc2e = tc2e+tc2l/leff_um; end else if (c1||c2) begin tc1e = tc1e+0.5*tc1l/leff_um; tc2e = tc2e+0.5*tc2l/leff_um; end end if (weff_um>0.0) begin tc1e = tc1e+tc1w/weff_um; tc2e = tc2e+tc2w/weff_um; end `ifdef __VAMS_COMPACT_MODELING__ if (r0>(rthrR2/$mfactor)) begin `else if (r0>(rthrR2/m)) begin `endif GFORM = 1; end else begin GFORM = 0; end `ifdef electroThermal if (c1&&c2) begin p_um = 2.0*(l_um+w_um); end else if (c1||c2) begin p_um = 2.0*l_um+w_um; end else begin p_um = 2.0*l_um; end a_um2 = l_um*w_um; gth = gth0+gthp*p_um+gtha*a_um2; cth = cth0+cthp*p_um+ctha*a_um2; `else // notElectroThermal tcr = (1+delt*(tc1e+delt*tc2e)); `CLIPL0p1(tcr,tcr,0.01) r0_t = r0*tcr; g0_t = g0/tcr; `endif end // initialInstance // // DC bias dependent quantities // // Note that for the resistance form the expression for v(i) // is implicit in v because of the voltage dependence of conductance. // For efficiency the nonlinearity is not computed if the // field coefficients are zero. // begin : evaluateStatic `ifdef electroThermal Vrth = sw_et*V(b_rth); tdevC = tdevC+Vrth; `CLIPB1p0(tdevC,tdevC,tminclip,tmaxclip); tdevK = tdevC+`TABS_NIST2004; delt = tdevK-tiniK; // temperature w.r.t. tnom tcr = (1+delt*(tc1e+delt*tc2e)); `CLIPL0p1(tcr,tcr,0.01) r0_t = r0*tcr; g0_t = g0/tcr; kfn_t = (1+delt*tc1kfn)*kfn; if (kfn_t<0.0) begin kfn_t = 0.0; end `endif vin = V(b_r); if (r0>0.0&&(p2>0.0||p3>0.0)) begin E = vin/l_umForE; q2E = q2*E; sqrf = sqrt(1.0+q2E*q2E); q3E = q3*abs(E); cbrf = pow((1.0+q3E*q3E*q3E),`oneThird); rFactor = 1.0-p2-p3+p2*sqrf+p3*cbrf; end else rFactor = 1.0; r_dc = r0_t*rFactor; `ifdef GFORM // if (GFORM) begin v = vin; i = v/r_dc; `else // end else begin // RFORM `ifdef __VAMS_COMPACT_MODELING__ i = I(b_r); `else i = I(b_r)/m; // need per-segment value `endif v = i*r_dc; `endif // end `ifdef electroThermal Ith = -v*i; // power generation, negative as it flows from dt to 0 Irth = Vrth*gth; `endif if (weff_um>0.0) begin if (abs(i/weff_um)>jmax) begin `WARNING("WARNING: current density is greater than specified by jmax"); end end end // evaluateStatic begin : evaluateDynamic `ifdef electroThermal Qcth = Vrth*cth; `endif end // evaluateDynamic begin : loadStatic `ifdef GFORM // if (GFORM) begin `ifdef __VAMS_COMPACT_MODELING__ I(b_r) <+ i; `else I(b_r) <+ i*m; `endif `else // end else begin // RFORM V(b_r) <+ v; `endif // end `ifdef electroThermal `ifdef __VAMS_COMPACT_MODELING__ I(b_rth) <+ Irth; I(b_ith) <+ Ith; `else I(b_rth) <+ Irth*m; I(b_ith) <+ Ith*m; `endif `endif end // loadStatic begin : loadDynamic `ifdef electroThermal `ifdef __VAMS_COMPACT_MODELING__ I(b_rth) <+ ddt(Qcth); `else I(b_rth) <+ ddt(Qcth*m); `endif `endif end // loadDynamic // // Noise contributions // `ifdef insideADMS @(noise) begin `else begin : noise `endif if (isnoisy&&r0>0.0&&g0>0.0) begin wn = 4.0*`KB_NIST2004*tdevK*g0_t/rFactor; if (sw_fngeo&&leff_um>0.0&&weff_um>0.0) begin fn = kfn_t*pow(abs(i/weff_um),afn)*weff_um/leff_um; end else if (l_um>0.0&&w_um>0.0) begin fn = kfn_t*pow(abs(i/w_um),afn)*w_um/l_um; end else begin fn = 0.0; end end else begin wn = 0.0; fn = 0.0; end `ifdef not__VAMS_COMPACT_MODELING__ wn = wn*m; fn = fn*m; `endif I(b_n) <+ white_noise(wn,"white noise"); I(b_n) <+ flicker_noise(fn,bfn,"1/f noise"); end // noise // // Useful quantities to display for OP and other purposes // // LRM2.2 allows use of ddx() which means explicit, hand-coded // calculation of derivatives is not required. However for the // electroThermal model the derivatives need to be calculated // as the total derivative is required for display, not just // the partial with respect to terminal voltages or branch // currents (which is all that is available from ddx()). // // For: i=v*g0_t/rf(v) (where rf is a short-hand for rFactor) // g_ac=di_dv=g0_t/rf-g0_t*v*drf_dv/rf^2=(g0_t-i*drf_dv)/rf // // For: v=i*r0_t*rf(v) // r_ac=dv_di=r0_t*rf+i*r0_t*drf_dv*dv_di=ddx(v,I(b_r))+(v*drf_dv/rf)*r_ac // therefore // r_ac=ddx(v,I(b_r))/(1-v*drf_dv/rf) // // For the electroThermal conductance form model: // i=v*g0(t)/rf(v) // g0(t)=g0/tcr=g0/(1+delt*(tc1e+delt*tc2e)) // delt=i*v/gth // therefore // ddelt_dv=i/gth+(v/gth)*di_dv // dg0_dt=ddx(g0_t,V(dt))=g0(t)*(tc1e+2*delt*tc2e)/tcr // di_dv=ddx(i,V(n1))+(v/rf)*dg0_dt*di_dv // g_ac=(ddx(i,V(n1))+i*v*dg0_dt/(gth*rf))/(1-v*v*dg0_dt/(gth*rf)) // which is what is implemented below. // // For the electroThermal resistance form model: // v=i*r0(t)*rf(v) // r0(t)=r0*tcr=r0*(1+delt*(tc1e+delt*tc2e)) // delt=i*v/gth // therefore // ddelt_i=v/gth+(i/gth)*dv_di // dr0_dt=ddx(r0_t,V(dt))=r0*(tc1e+2*delt*tc2e) // dv_di=ddx(v,I(b_r))+i*r0*drf_dv*dv_di+i*rf*dr0_dt*ddelt_di // r_ac=(ddx(v,I(b_r))+v*i*rf*dr0_dt/gth)/(1-v*drf_dv/rf-i*i*rf*dr0_dt/gth) // which is what is implemented below. // begin : postProcess power = i*v; if (r0>0.0&&g0>0.0) begin r_dc = r0_t*rFactor; `ifdef __VAMS_COMPACT_MODELING__ `ifdef GFORM // if (GFORM) begin g_ac = ddx(i,V(n1)); `ifdef electroThermal dg0dt = ddx(g0_t,V(dt)); tmp1 = v*dg0dt/(gth*rFactor); if ((1.0-v*tmp1)!=0.0) begin g_ac = (g_ac+i*tmp1)/(1.0-v*tmp1); // denominator is zero in thermal runaway, cannot happen if tcr>0 end else begin g_ac = 1.0e99; end `endif if (g_ac!=0.0) begin r_ac = 1.0/g_ac; end else begin r_ac = 1.0e99; end `else // end else begin // RFORM drfdv = ddx(rFactor,V(n1)); `ifdef electroThermal dg0dt = 1.0/ddx(r0_t,V(dt)); tmp1 = i*rFactor/(dg0dt*gth); if ((1.0-v*drfdv/rFactor-i*tmp1)!=0.0) begin r_ac = (ddx(v,I(b_r))+v*tmp1)/(1.0-v*drfdv/rFactor-i*tmp1); end else begin r_ac = 1.0e99; end `else // notElectroThermal r_ac = ddx(v,I(b_r))/(1.0-v*drfdv/rFactor); `endif `endif // end `else // not__VAMS_COMPACT_MODELING__ if ((p2>0.0||p3>0.0)) begin if (vin>=0.0) drfdv = (p2*q2*q2E/sqrf+p3*q3*q3E*q3E/(cbrf*cbrf))/l_umForE; else drfdv = (p2*q2*q2E/sqrf-p3*q3*q3E*q3E/(cbrf*cbrf))/l_umForE; g_ac = (g0_t-i*drfdv)/rFactor; end else g_ac = 1.0/r_dc; `ifdef electroThermal dg0dt = -g0_t*(tc1e+2.0*delt*tc2e)/tcr; tmp1 = v*dg0dt/(gth*rFactor); if ((1.0-v*tmp1)!=0.0) begin g_ac = (g_ac+i*tmp1)/(1.0-v*tmp1); // denominator is zero in thermal runaway, cannot happen if tcr>0 end else begin g_ac = 1.0e99; end `endif if (g_ac!=0.0) begin r_ac = 1.0/g_ac; end else begin r_ac = 1.0e99; end `endif end else begin r_dc = r0; // this is 1.0e99 if g0==0.0, cannot set to inf r_ac = r0; // this is 1.0e99 if g0==0.0, cannot set to inf end `ifdef __VAMS_COMPACT_MODELING__ // i = $mfactor*i; // power = $mfactor*power; // r_dc = r_dc/$mfactor; // r_ac = r_ac/$mfactor; i = 1*i; power = 1*power; r_dc = r_dc/1; r_ac = r_ac/1; `else // not__VAMS_COMPACT_MODELING__ i = m*i; power = m*power; r_dc = r_dc/m; r_ac = r_ac/m; `endif `ifdef electroThermal dt_et = Vrth; `ifdef __VAMS_COMPACT_MODELING__ // rth = 1.0/(gth*$mfactor); // cth = cth*$mfactor; rth = 1.0/(gth*1); cth = cth*1; `else // not__VAMS_COMPACT_MODELING__ rth = 1.0/(gth*m); cth = cth*m; `endif `endif power_OP = power; v_OP = v; i_OP = i; r0_OP = r0; weff = weff_um; leff = leff_um; r_dc_OP = r_dc; r_ac_OP = r_ac; end // postProcess end // analog endmodule tmp_ns50wwy/src/spicelib/devices/adms/bsimbulk/0000755000175000017500000000000014163340332021710 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/bsimbulk/admsva/0000755000175000017500000000000014163340332023163 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/bsimbulk/admsva/bsimbulk.va0000644000175000017500000105570714163340332025342 0ustar carstencarsten// **************************************************************************** // * BSIM-BULK 106.2.0 released by Chetan Gupta on 6/30/2017 * // * BSIM Bulk MOSFET Model Equations (Verilog-A) * // **************************************************************************** // **************************************************************************** // * Copyright 2017 Regents of the University of California * // * All rights reserved. * // * * // * Project director: Prof. Chenming Hu * // * * // * Current developers: Chetan Gupta (Ph.D. student, IIT Kanpur) * // * Prof. Yogesh Chauhan (IIT Kanpur) * // * Dr. Harshit Agarwal (Postdoc, UC Berkeley) * // * Dr. Huan-Lin Chang (Postdoc, UC Berkeley) * // * Dr. Pragya Kushwaha (Postdoc, UC Berkeley) * // * Juan Duarte (Ph.D. student, UC Berkeley) * // * Yen-Kai Lin (Ph.D. student, UC Berkeley) * // **************************************************************************** // **************************************************************************** // * 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 _________Jun. 30, 2017__________ * // * * // * By: ____University of California, Berkeley___ * // * ____Chenming Hu__________________________ * // * ____Professor in Graduate School ________ * // **************************************************************************** `include "constants.vams" `include "disciplines.vams" // Disable strobe for improved performance speed // To Use DISABLE_STROBE, Activate it here. Used Only at GEOMOD and RGEOMOD // `define DISABLE_STROBE `ifdef DISABLE_STROBE `define STROBE(X) `define STROBE2(X,Y) `else `define STROBE(X) $strobe(X) `define STROBE2(X,Y) $strobe(X,Y) `endif // Junction capacitance macro between S/D and bulk `define JunCap(Czbx, Vbx_jct, PBX_t, MJX, czbx_p1, czbx_p2, Qbxj) \ if (Czbx > 0.0) begin \ T1 = Vbx_jct / PBX_t; \ if (T1 < 0.9) begin \ arg = 1.0 - T1; \ if (MJX == 0.5) begin \ sarg = 1.0 / sqrt(arg); \ end else begin \ sarg = lexp(-MJX * lln(arg)); \ end \ Qbxj = PBX_t * Czbx * (1.0 - arg * sarg) / (1.0 - MJX); \ end else begin \ T2 = czbx_p1 * (T1 - 1.0) * (5.0 * MJX * (T1 - 1.0) + (1.0 + MJX)); \ Qbxj = PBX_t * Czbx * (T2 + czbx_p2); \ end \ end else begin \ Qbxj = 0.0; \ end \ // Normalized pinch-off voltage including PD `define PO_psip(vg_vfb, gamma, DPD, phif, psip) \ T1 = 1.0 + DPD; \ vgfbPD = vg_vfb / T1; \ gammaPD = gamma / T1; \ T1 = 0.5 * vgfbPD - 3.0 * (1.0 + gammaPD / `M_SQRT2); \ T2 = T1 + sqrt(T1 * T1 + 6.0 * vgfbPD); \ if (vgfbPD < 0.0) begin \ T3 = (vgfbPD - T2) / gammaPD; \ psip = -lln(1.0 - T2 + T3 * T3); \ end else begin \ T3 = lexp(-T2); \ T1 = 0.5 * gammaPD; \ T2 = sqrt(vgfbPD - 1.0 + T3 + T1 * T1) - T1; \ psip = T2 * T2 + 1.0 - T3; \ end \ // Normalized charge-voltage relationship `define BSIM_q(psip, phib, vch, gam, q) \ T8 = 0.5 * (psip + 1.0 + sqrt((psip - 1.0) * (psip - 1.0) + 0.25 * 2.0 * 2.0)); \ sqrtpsip = sqrt(T8); \ T9 = 1.0 + gam / (2.0 * sqrtpsip); \ T0 = (1.0 + (gam / (2.0 * sqrtpsip))) / gam; \ T1 = psip - 2.0 * phib - vch; \ T2 = T1 - lln(4.0 * T0 * sqrtpsip); \ T8 = 0.5 * (T2 - 0.201491 - sqrt(T2 * (T2 + 0.402982) + 2.446562)); \ sqrtpsisa = sqrtpsip; \ if (T8 <= -68.0) begin \ T4 = -100.0; \ T5 = 20.0; \ if (T8 < T4 - 0.5 * T5) \ T3 = lexp(T4); \ else begin \ if (T8 > T4 + 0.5 * T5) \ T3 = lexp(T8); \ else begin \ T2 = (T8 - T4) / T5; \ T6 = T2 * T2; \ T3 = lexp(T4 + T5 * ((5.0 / 64.0) + 0.5 * T2 + T6 * ((15.0 / 16.0) - T6 * (1.25 - T6)))); \ end \ end \ q = T3 * (1.0 + T1 - T8 - lln(2.0 * T0 * (T3 * 2.0 * T0 + 2.0 * sqrtpsisa))); \ end else begin \ T3 = lexp(T8); \ sqrtpsisainv = 1.0 / sqrtpsisa; \ T4 = 2.0 * T3 + lln(T3 * 2.0 * T0 * (T3 * 2.0 * T0 + 2.0 * sqrtpsisa)) - T1; \ T5 = 2.0 + (1.0 / T3) + (T0 + sqrtpsisainv) / (T0 * T3 + sqrtpsisa); \ T3 = T3 - T4 / T5; \ T4 = 2.0 * T3 + lln(T3 * 2.0 * T0 * (T3 * 2.0 * T0 + 2.0 * sqrtpsisa)) - T1; \ T5 = 2.0 + (1.0 / T3) + (T0 + sqrtpsisainv) / (T0 * T3 + sqrtpsisa); \ T6 = ((T0 + sqrtpsisainv) / (T0 * T3 + sqrtpsisa)) * ((T0 + sqrtpsisainv) / (T0 * T3 + sqrtpsisa)); \ T7 = -((1.0 / T3) * (1.0 / T3)) - (1.0 / (sqrtpsisa * sqrtpsisa * sqrtpsisa * (T0 * T3 + sqrtpsisa))) - T6; \ q = T3 - (T4 / T5) * (1.0 + T4 * T7 / (2.0 * T5 * T5)); \ end \ // Smoothing function for (max of x, x0 with deltax) `define Smooth(x, x0, deltax, xsmooth) \ xsmooth = 0.5 * (x + x0 + sqrt((x - x0) * (x - x0) + 0.25 * deltax * deltax)); \ // Smoothing function for (max of x, x0 with deltax) `define Smooth1(x, x0, deltax, xsmooth) \ xsmooth = 0.5 * (x + x0 + sqrt((x - x0) * (x - x0) + 0.25 * deltax * deltax)) - 0.25 * deltax; \ // Smoothing function for (min of x, x0 with deltax) `define Smooth2(x, x0, deltax, xsmooth) \ xsmooth = 0.5 * (x + x0 - sqrt((x - x0) * (x - x0) + 0.25 * deltax * deltax)) + 0.25 * deltax; \ // Smoothing function for (min of x, x0 with deltax) `define Min1(x, x0, deltax, xsmooth) \ xsmooth = 0.5 * (x + x0 - sqrt((x - x0) * (x - x0) + 0.25 * deltax * deltax)); \ // These macros represent the subroutines to process the geometry dependent // parasitics for BSIM-BULK, which calculates Ps, Pd, As, Ad, and Rs and Rd // for multi-fingers and various GEO and RGEO options. // Define GEOMOD and RGEOMOD in the modelcard `define BSIMBULKNumFingerDiff(nf, minSD, nuIntD, nuEndD, nuIntS, nuEndS) \ if ((nf % 2) != 0) begin \ nuEndD = 1.0; \ nuEndS = 1.0; \ nuIntD = 2.0 * max((nf - 1.0) / 2.0, 0.0); \ nuIntS = nuIntD; \ end else begin \ if (minSD == 1) begin \ nuEndD = 2.0; \ nuIntD = 2.0 * max((nf / 2.0 - 1.0), 0.0); \ nuEndS = 0.0; \ nuIntS = nf; \ end else begin \ nuEndD = 0.0; \ nuIntD = nf; \ nuEndS = 2.0; \ nuIntS = 2.0 * max((nf / 2.0 - 1.0), 0.0); \ end \ end `define BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEnd, rgeo, SRCFLAG, Rend) \ if (SRCFLAG == 1) begin \ case (rgeo) \ 1, 2, 5: begin \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end else begin \ Rend = Rsh * DMCG / (Weffcj * nuEnd); \ end \ end \ 3, 4, 6: begin \ if ((DMCG + DMCI) == 0.0) begin \ `STROBE("(DMCG + DMCI) can not be equal to zero"); \ end \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end else begin \ Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); \ end \ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified RGEO = %d not matched (BSIMBULKRdsEndIso), Rend is set to zero.", rgeo); \ Rend = 0.0; \ end \ endcase \ end else begin \ case (rgeo) \ 1, 3, 7: begin \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end else begin \ Rend = Rsh * DMCG / (Weffcj * nuEnd); \ end \ end \ 2, 4, 8: begin \ if ((DMCG + DMCI) == 0.0) begin \ `STROBE("(DMCG + DMCI) can not be equal to zero"); \ end \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end \ else begin \ Rend = Rsh * Weffcj / (3.0 * nuEnd * (DMCG + DMCI)); \ end \ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified RGEO=%d not matched (BSIMBULKRdsEndIso type 2), Rend is set to zero.", rgeo); \ Rend = 0.0; \ end \ endcase \ end `define BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEnd, rgeo, SRCFLAG, Rend) \ begin \ if (SRCFLAG == 1) begin \ case (rgeo) \ 1, 2, 5: begin \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end else begin \ Rend = Rsh * DMCG / (Weffcj * nuEnd); \ end \ end \ 3, 4, 6: begin \ if (DMCG == 0.0) begin \ `STROBE("DMCG can not be equal to zero"); \ end \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end \ else begin \ Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); \ end \ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified RGEO = %d not matched (BSIMBULKRdsEndSha), Rend is set to zero.", rgeo); \ Rend = 0.0; \ end \ endcase \ end else begin \ case (rgeo) \ 1, 3, 7: begin \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end else begin \ Rend = Rsh * DMCG / (Weffcj * nuEnd); \ end \ end \ 2, 4, 8: begin \ if (DMCG == 0.0) begin \ `STROBE("DMCG can not be equal to zero"); \ end \ if (nuEnd == 0.0) begin \ Rend = 0.0; \ end \ else begin \ Rend = Rsh * Weffcj / (6.0 * nuEnd * DMCG); \ end \ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified RGEO=%d not matched (BSIMBULKRdsEndSha \ type 2), Rend is set to zero.", rgeo); \ Rend = 0.0; \ end \ endcase \ end \ end `define BSIMBULKRdseffGeo(nf, geo, rgeo, minSD, Weffcj, Rsh, DMCG, DMCI, DMDG, SRCFLAG, Rtot) \ begin \ if (geo < 9) begin \ `BSIMBULKNumFingerDiff(nf, minSD, nuIntD, nuEndD, nuIntS, nuEndS) \ if (SRCFLAG == 1) begin \ if (nuIntS == 0.0) begin \ Rint = 0.0; \ end else begin \ Rint = Rsh * DMCG / ( Weffcj * nuIntS); \ end \ end \ else begin \ if (nuIntD == 0.0) begin \ Rint = 0.0; \ end else begin \ Rint = Rsh * DMCG / ( Weffcj * nuIntD); \ end \ end \ end \ case (geo) \ 0: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ end \ 1: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ end \ 2: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ end \ 3: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ end \ 4: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ Rend = Rsh * DMDG / Weffcj; \ end \ end \ 5: begin \ if (SRCFLAG == 1) begin \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndS, \ rgeo, 1, Rend) \ end else begin \ if (nuEndD==0) begin\ Rend = 0;\ end else begin \ Rend = Rsh * DMDG / (Weffcj * nuEndD); \ end \ end\ end \ 6: begin \ if (SRCFLAG == 1) begin \ Rend = Rsh * DMDG / Weffcj; \ end else begin \ `BSIMBULKRdsEndIso(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ end \ 7:begin \ if (SRCFLAG == 1) begin \ if (nuEndS == 0) begin \ Rend = 0; \ end else begin \ Rend = Rsh * DMDG / (Weffcj * nuEndS); \ end \ end else \ `BSIMBULKRdsEndSha(Weffcj, Rsh, DMCG, DMCI, DMDG, nuEndD, \ rgeo, 0, Rend) \ end \ 8: begin \ Rend = Rsh * DMDG / Weffcj; \ end \ 9: begin /* all wide contacts assumed for geo = 9 and 10 */\ if (SRCFLAG == 1) begin \ Rend = 0.5 * Rsh * DMCG / Weffcj; \ if (nf == 2.0) begin \ Rint = 0.0; \ end else begin \ Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); \ end \ end \ else begin \ Rend = 0.0; \ Rint = Rsh * DMCG / (Weffcj * nf); \ end \ end \ 10: begin \ if (SRCFLAG == 1) begin \ Rend = 0.0; \ Rint = Rsh * DMCG / (Weffcj * nf); \ end \ else begin \ Rend = 0.5 * Rsh * DMCG / Weffcj; \ if (nf == 2.0) begin \ Rint = 0.0; \ end else begin \ Rint = Rsh * DMCG / (Weffcj * (nf - 2.0)); \ end \ end \ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified GEO=%d not matched (BSIMBULKRdseffGeo), Rint is set to zero.", geo); \ Rint = 0.0; \ end \ endcase \ if (Rint <= 0.0) begin \ Rtot = Rend; \ end else if (Rend <= 0.0) begin \ Rtot = Rint; \ end else begin \ Rtot = Rint * Rend / (Rint + Rend); \ end \ if (Rtot==0.0) begin \ `STROBE("Warning: (instance BSIMBULK) Zero resistance returned from RdseffGeo"); \ end \ end // Effective PS, PD, AS, AD calculation, Ref: BSIM4 `define BSIMBULKPAeffGeo(nf, geo, minSD,Weffcj, DMCG, DMCI, DMDG, Ps, Pd, As, Ad) \ begin if (geo < 9) \ `BSIMBULKNumFingerDiff(nf, minSD, nuIntD, nuEndD, nuIntS, nuEndS) \ T0 = DMCG + DMCI;\ T1 = DMCG + DMCG;\ T2y = DMDG + DMDG;\ PSiso = T0 + T0 + Weffcj;\ PDiso = T0 + T0 + Weffcj;\ PSsha = T1;\ PDsha = T1;\ PSmer = T2y;\ PDmer = T2y;\ ASiso = T0 * Weffcj;\ ADiso = T0 * Weffcj;\ ASsha = DMCG * Weffcj;\ ADsha = DMCG * Weffcj;\ ASmer = DMDG * Weffcj; \ ADmer = DMDG * Weffcj; \ case (geo) \ 0: begin \ Ps = nuEndS * PSiso + nuIntS * PSsha;\ Pd = nuEndD * PDiso + nuIntD * PDsha;\ As = nuEndS * ASiso + nuIntS * ASsha;\ Ad = nuEndD * ADiso + nuIntD * ADsha;\ end \ 1: begin \ Ps = nuEndS * PSiso + nuIntS * PSsha;\ Pd = (nuEndD + nuIntD) * PDsha;\ As = nuEndS * ASiso + nuIntS * ASsha;\ Ad = (nuEndD + nuIntD) * ADsha;\ end \ 2: begin \ Ps = (nuEndS + nuIntS) * PSsha;\ Pd = nuEndD * PDiso + nuIntD * PDsha;\ As = (nuEndS + nuIntS) * ASsha;\ Ad = nuEndD * ADiso + nuIntD * ADsha;\ end \ 3: begin \ Ps = (nuEndS + nuIntS) * PSsha;\ Pd = (nuEndD + nuIntD) * PDsha;\ As = (nuEndS + nuIntS) * ASsha;\ Ad = (nuEndD + nuIntD) * ADsha;\ end \ 4: begin \ Ps = nuEndS * PSiso + nuIntS * PSsha;\ Pd = nuEndD * PDmer + nuIntD * PDsha;\ As = nuEndS * ASiso + nuIntS * ASsha;\ Ad = nuEndD * ADmer + nuIntD * ADsha;\ end \ 5: begin \ Ps = (nuEndS + nuIntS) * PSsha;\ Pd = nuEndD * PDmer + nuIntD * PDsha;\ As = (nuEndS + nuIntS) * ASsha;\ Ad = nuEndD * ADmer + nuIntD * ADsha;\ end \ 6: begin \ Ps = nuEndS * PSmer + nuIntS * PSsha;\ Pd = nuEndD * PDiso + nuIntD * PDsha;\ As = nuEndS * ASmer + nuIntS * ASsha;\ Ad = nuEndD * ADiso + nuIntD * ADsha;\ end \ 7: begin \ Ps = nuEndS * PSmer + nuIntS * PSsha;\ Pd = (nuEndD + nuIntD) * PDsha;\ As = nuEndS * ASmer + nuIntS * ASsha;\ Ad = (nuEndD + nuIntD) * ADsha;\ end \ 8: begin \ Ps = nuEndS * PSmer + nuIntS * PSsha;\ Pd = nuEndD * PDmer + nuIntD * PDsha;\ As = nuEndS * ASmer + nuIntS * ASsha;\ Ad = nuEndD * ADmer + nuIntD * ADsha;\ end \ 9: begin \ Ps = PSiso + (nf - 1.0) * PSsha;\ Pd = nf * PDsha;\ As = ASiso + (nf - 1.0) * ASsha;\ Ad = nf * ADsha;\ end \ 10: begin \ Ps = nf * PSsha;\ Pd = PDiso + (nf - 1.0) * PDsha;\ As = nf * ASsha;\ Ad = ADiso + (nf - 1.0) * ADsha;\ end \ default: begin \ `STROBE2("Warning: (instance BSIMBULK) Specified GEO=%d not matched (BSIMBULKPAeffGeo \ ), PS,PD,AS,AD set to zero.", geo); \ Ps = 0;\ Pd = 0;\ As = 0;\ Ad = 0;\ end \ endcase \ end \ // Numerical Constants `define EXPL_THRESHOLD 80.0 `define MAX_EXPL 5.540622384e34 `define MIN_EXPL 1.804851387e-35 `define N_MINLOG 1.0e-38 `define DELTA_1 0.02 `define Oneby3 0.33333333333333333 `define REFTEMP 300.15 // 27 degrees C // Physical Constants `define ntype 1 `define ptype -1 `define q 1.60219e-19 `define EPS0 8.85418e-12 `define KboQ 8.617087e-5 // Joule/degree // Macros for the model/instance parameters // // MPRxx model parameter real // MPIxx model parameter integer // IPRxx instance parameter real // IPIxx instance parameter integer // || // cc closed lower bound, closed upper bound // oo open lower bound, open upper bound // co closed lower bound, open upper bound // oc open lower bound, closed upper bound // cz closed lower bound=0, open upper bound=inf // oz open lower bound=0, open upper bound=inf // nb no bounds // ex no bounds with exclude // sw switch(integer only, values 0=false and 1=true) // ty switch(integer only, values -1=p-type and +1=n-type) // // IPM instance parameter mFactor(multiplicity, implicit for LRM 2.2) // OPP operating point parameter, includes units and description for printing `define OPP(nam,uni,des) (* units=uni, desc=des *) real nam; `define OPM(nam,uni,des) (* units=uni, desc=des, multiplicity="multiply" *) real nam; `define OPD(nam,uni,des) (* units=uni, desc=des, multiplicity="divide" *) real nam; `define MPRnb(nam,def,uni, des) (* units=uni, desc=des *) parameter real nam=def; `define MPRex(nam,def,uni,exc, des) (* units=uni, desc=des *) parameter real nam=def exclude exc; `define MPRcc(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter real nam=def from[lwr:upr]; `define MPRoo(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter real nam=def from(lwr:upr); `define MPRco(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter real nam=def from[lwr:upr); `define MPRoc(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter real nam=def from(lwr:upr]; `define MPRcz(nam,def,uni, des) (* units=uni, desc=des *) parameter real nam=def from[ 0:inf); `define MPRoz(nam,def,uni, des) (* units=uni, desc=des *) parameter real nam=def from( 0:inf); `define MPInb(nam,def,uni, des) (* units=uni, desc=des *) parameter integer nam=def; `define MPIex(nam,def,uni,exc, des) (* units=uni, desc=des *) parameter integer nam=def exclude exc; `define MPIcc(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter integer nam=def from[lwr:upr]; `define MPIoo(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter integer nam=def from(lwr:upr); `define MPIco(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter integer nam=def from[lwr:upr); `define MPIoc(nam,def,uni,lwr,upr,des) (* units=uni, desc=des *) parameter integer nam=def from(lwr:upr]; `define MPIcz(nam,def,uni, des) (* units=uni, desc=des *) parameter integer nam=def from[ 0:inf); `define MPIoz(nam,def,uni, des) (* units=uni, desc=des *) parameter integer nam=def from( 0:inf); `define MPIsw(nam,def,uni, des) (* units=uni, desc=des *) parameter integer nam=def from[ 0: 1]; `define MPIty(nam,def,uni, des) (* units=uni, desc=des *) parameter integer nam=def from[ -1: 1] exclude 0; `define IPRnb(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter real nam=def; `define IPRex(nam,def,uni,exc, des) (* units=uni, type = "instance", desc=des *) parameter real nam=def exclude exc; `define IPRcc(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from[lwr:upr]; `define IPRoo(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from(lwr:upr); `define IPRco(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from[lwr:upr); `define IPRoc(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from(lwr:upr]; `define IPRcz(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from[ 0:inf); `define IPRoz(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter real nam=def from( 0:inf); `define IPInb(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def; `define IPIex(nam,def,uni,exc, des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def exclude exc; `define IPIcc(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from[lwr:upr]; `define IPIoo(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from(lwr:upr); `define IPIco(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from[lwr:upr); `define IPIoc(nam,def,uni,lwr,upr,des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from(lwr:upr]; `define IPIcz(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from[ 0:inf); `define IPIoz(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def from( 0:inf); `define BPRco(nam, def, uni, lwr, upr, des) (* units = uni, type = "instance", desc = des *) parameter real nam = def from[lwr : upr); `define BPRoz(nam, def, uni, des) (* units = uni, type = "instance", desc = des *) parameter real nam = def from(0.0 : inf); `define BPRcz(nam, def, uni, des) (* units = uni, type = "instance", desc = des *) parameter real nam = def from[0.0 : inf); `define BPIcc(nam, def, uni, lwr, upr, des) (* units = uni, type = "instance", desc = des *) parameter integer nam = def from[lwr : upr]; `define BPInb(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter integer nam=def; `define BPRnb(nam,def,uni, des) (* units=uni, type = "instance", desc=des *) parameter real nam=def; module bsimbulk(d, g, s, b, t); inout d, g, s, b, t; electrical d, g, s, b, di, si, gi, gm, bi, sbulk, dbulk; thermal t; // Extra internal nodes and branches (TNOIMOD=1) for correlated drain and gate noise electrical N1, N2; branch (N1) NI; branch (N1) NR; branch (N1) NC; // Clamped exponential function analog function real lexp; input x; real x; begin if (x > `EXPL_THRESHOLD) begin lexp = `MAX_EXPL * (1.0 + x - `EXPL_THRESHOLD); end else if (x < -`EXPL_THRESHOLD) begin lexp = `MIN_EXPL; end else begin lexp = exp(x); end end endfunction // Clamped log function analog function real lln; input x; real x; begin lln = ln(max(x, `N_MINLOG)); end endfunction // Hyperbolic smoothing function analog function real hypsmooth; input x, c; real x, c; begin hypsmooth = 0.5 * (x + sqrt(x * x + 4.0 * c * c)); end endfunction // Pure instance parameters `IPRoz( L ,1.0e-5 ,"m" ,"Length" ) `IPRoz( W ,1.0e-5 ,"m" ,"Total width including fingers" ) `IPIco( NF ,1 ,"" ,1 ,inf ,"Number of fingers" ) `IPRcz( NRS ,1.0 ,"" ,"Number of squares in source" ) `IPRcz( NRD ,1.0 ,"" ,"Number of squares in drain" ) `IPRnb( VFBSDOFF ,0.0 ,"V" ,"Flat-band Voltage Offset Parameter" ) `IPIcc( MINZ ,0 ,"" ,0 ,1 ,"Minimize either D or S" ) `IPRnb( XGW ,0.0 ,"m" ,"Distance from gate contact centre to dev edge" ) `IPIcc( NGCON ,1 ,"" ,1 ,2 ,"Number of gate contacts" ) `IPIcc( RGATEMOD ,0 ,"" ,0 ,3 ,"Gate resistance model selector" ) `IPIcc( RBODYMOD ,0 ,"" ,0 ,2 ,"Distributed body R model" ) `IPIcc( GEOMOD ,0 ,"" ,0 ,10 ,"Geometry-dependent parasitics model" ) `IPIcc( RGEOMOD ,0 ,"" ,0 ,8 ,"Geometry-dependent source/drain resistance, 0: RSH-based, 1: Holistic" ) `IPIcc( EDGEFET ,0 ,"" ,0 ,1 ,"0: Edge FET Model Off, 1: Edge FET Model ON" ) `IPIcc( SSLMOD ,0 ,"" ,0 ,1 ,"Sub-Surface Leakage Drain Current, 0: Turn off 1: Turn on" ) `IPRcz( RBPB ,50.0 ,"ohm" ,"Resistance between bNodePrime and bNode" ) `IPRcz( RBPD ,50.0 ,"ohm" ,"Resistance between bNodePrime and bNode " ) `IPRcz( RBPS ,50.0 ,"ohm" ,"Resistance between bNodePrime and sbNode " ) `IPRcz( RBDB ,50.0 ,"ohm" ,"Resistance between bNode and dbNode " ) `IPRcz( RBSB ,50.0 ,"ohm" ,"Resistance between bNode and sbNode" ) `IPRnb( SA ,0.0 ,"m" ,"Distance between OD edge from Poly from one side" ) `IPRnb( SB ,0.0 ,"m" ,"Distance between OD edge from Poly from other side" ) `IPRnb( SD ,0.0 ,"m" ,"Distance between neighbouring fingers" ) `IPRoo( SCA ,0.0 ,"" ,-inf ,inf ,"Integral of the first distribution function for scattered well dopant" ) `IPRoo( SCB ,0.0 ,"" ,-inf ,inf ,"Integral of second distribution function for scattered well dopant" ) `IPRoo( SCC ,0.0 ,"" ,-inf ,inf ,"Integral of third distribution function for scattered well dopant" ) `IPRoo( SC ,0.0 ,"m" ,-inf ,inf ,"Distance to a single well edge if <=0.0, turn off WPE" ) `IPRcz( AS ,0.0 ,"m^2" ,"Source to Substrate Junction Area" ) `IPRcz( AD ,0.0 ,"m^2" ,"Drain to Substrate Junction Area" ) `IPRcz( PS ,0.0 ,"m" ,"Source to Substrate Junction Perimeter" ) `IPRcz( PD ,0.0 ,"m" ,"Drain to Substrate Junction Perimeter" ) // Both model and instance parameters `BPRnb( DTEMP ,0.0 ,"K" ,"Offset of Device Temperature" ) `BPRnb( MULU0 ,1.0 ,"m^2/(V*s)" ,"Multiplication factor for low field mobility" ) `BPRnb( DELVTO ,0.0 ,"V" ,"Zero bias threshold voltage variation" ) `BPRcz( IDS0MULT ,1.0 ,"" ,"Variability in drain current for miscellaneous reasons" ) // Pure model parameters `MPIty( TYPE ,`ntype ,"" ,"ntype=1, ptype=-1" ) `MPIcc( CVMOD ,0 ,"" ,0 ,1 ,"0: Consistent IV-CV, 1: Different IV-CV" ) `MPIcc( COVMOD ,0 ,"" ,0 ,1 ,"0: Use Bias-independent Overlap Capacitances, 1: Use Bias-dependent Overlap Capacitances" ) `MPIcc( RDSMOD ,0 ,"" ,0 ,2 ,"0: Internal bias dependent and external bias independent s/d resistance model, 1: External s/d resistance model, 2: Internal s/d resistance model" ) `MPIcc( WPEMOD ,0 ,"" ,0 ,1 ,"Model flag" ) `MPIcc( ASYMMOD ,0 ,"" ,0 ,1 ,"0: Asymmetry Model turned off - forward mode parameters used, 1: Asymmetry Model turned on" ) `MPIcc( GIDLMOD ,0 ,"" ,0 ,1 ,"0: Turn off GIDL Current, 1: Turn on GIDL Current" ) `MPIcc( IGCMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igc, Igs and Igd, 1: Turn on Igc, Igs and Igd" ) `MPIcc( IGBMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igb, 1: Turn on Igb" ) `MPIcc( TNOIMOD ,0 ,"" ,0 ,1 ,"Thermal noise model selector" ) `MPIcc( SHMOD ,0 ,"" ,0 ,1 ,"0 : Self heating model OFF, 1 : Self heating model ON" ) `MPIcc( MOBSCALE ,0 ,"" ,0 ,1 ,"Mobility scaling model, 0: Old Model, 1: New Model" ) // Device parameters `MPRoz( LLONG ,10u ,"m" ,"L of extracted Long channel device" ) `MPRoz( LMLT ,1.0 ,"" ,"Length Shrinking Parameter" ) `MPRoz( WMLT ,1.0 ,"" ,"Width Shrinking Parameter" ) `MPRnb( XL ,0.0 ,"m" ,"L offset for channel length due to mask/etch effect" ) `MPRoz( WWIDE ,10u ,"m" ,"W of extracted Wide channel device" ) `MPRnb( XW ,0.0 ,"m" ,"W offset for channel width due to mask/etch effect" ) `MPRnb( LINT ,0.0 ,"m" ,"Delta L for IV" ) `MPRnb( LL ,0.0 ,"m^(1+LLN)" ,"Length reduction parameter" ) `MPRnb( LW ,0.0 ,"m^(1+LWN)" ,"Length reduction parameter" ) `MPRnb( LWL ,0.0 ,"m^(1+LLN+LWN)" ,"Length reduction parameter" ) `MPRnb( LLN ,1.0 ,"" ,"Length reduction parameter" ) `MPRnb( LWN ,1.0 ,"" ,"Length reduction parameter" ) `MPRnb( WINT ,0.0 ,"m" ,"Delta W for IV" ) `MPRnb( WL ,0.0 ,"m^(1+WLN)" ,"Width reduction parameter" ) `MPRnb( WW ,0.0 ,"m^(1+WWN)" ,"Width reduction parameter" ) `MPRnb( WWL ,0.0 ,"m^(1+WWN+WLN)" ,"Width reduction parameter" ) `MPRnb( WLN ,1.0 ,"" ,"Width reduction parameter" ) `MPRnb( WWN ,1.0 ,"" ,"Width reduction parameter" ) `MPRnb( DLC ,0.0 ,"m" ,"Delta L for CV" ) `MPRnb( LLC ,0.0 ,"m^(1+LLN)" ,"Length reduction parameter" ) `MPRnb( LWC ,0.0 ,"m^(1+LWN)" ,"Length reduction parameter" ) `MPRnb( LWLC ,0.0 ,"m^(1+LWN+LLN)" ,"Length reduction parameter" ) `MPRnb( DWC ,0.0 ,"m" ,"Delta W for CV" ) `MPRnb( WLC ,0.0 ,"m^(1+WLN)" ,"Width reduction parameter" ) `MPRnb( WWC ,0.0 ,"m^(1+WWN)" ,"Width reduction parameter" ) `MPRnb( WWLC ,0.0 ,"m^(1+WWN+WLN)" ,"Width reduction parameter" ) `MPRoo( TOXE ,3.0e-9 ,"m" ,0 ,inf ,"Effective gate dielectric thickness relative to SiO2" ) `MPRoo( TOXP ,TOXE ,"m" ,0 ,inf ,"Physical gate dielectric thickness. If not given, TOXP is calculated from TOXE and DTOX" ) `MPRnb( DTOX ,0.0 ,"m" ,"Difference between effective dielectric thickness" ) `MPRnb( NDEP ,1e24 ,"1/m^3" ,"Channel Doping Concentration for IV" ) `MPRnb( NDEPL1 ,0.0 ,"m" ,"Length dependence coefficient of NDEP" ) `MPRoz( NDEPLEXP1 ,1.0 ,"" ,"Length dependence exponent coefficient of NDEP" ) `MPRnb( NDEPL2 ,0.0 ,"m" ,"Length dependence of NDEP - For Short Channel Devices" ) `MPRoz( NDEPLEXP2 ,2.0 ,"" ,"Length dependence exponent coefficient of NDEP" ) `MPRnb( NDEPW ,0.0 ,"m" ,"Width dependence coefficient of NDEP" ) `MPRoz( NDEPWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of NDEP" ) `MPRnb( NDEPWL ,0.0 ,"m^2" ,"Width-Length dependence coefficient of NDEP" ) `MPRoz( NDEPWLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of NDEP" ) `MPRnb( LNDEP ,0.0 ,"1/m^2" ,"Length dependence of NDEP" ) `MPRnb( WNDEP ,0.0 ,"1/m^2" ,"Width dependence of NDEP" ) `MPRnb( PNDEP ,0.0 ,"1/m" ,"Area dependence of NDEP " ) `MPRnb( NDEPCV ,NDEP ,"1/m^3" ,"Channel Doping Concentration for CV" ) `MPRnb( NDEPCVL1 ,NDEPL1 ,"m" ,"Length dependence coefficient of NDEPCV" ) `MPRoz( NDEPCVLEXP1 ,NDEPLEXP1 ,"" ,"Length dependence exponent coefficient of NDEPCV" ) `MPRnb( NDEPCVL2 ,NDEPL2 ,"m" ,"Length dependence coefficient of NDEPCV - For Short Channel Devices" ) `MPRoz( NDEPCVLEXP2 ,NDEPLEXP2 ,"" ,"Length dependence exponent coefficient of NDEPCV" ) `MPRnb( NDEPCVW ,NDEPW ,"m" ,"Width dependence coefficient of NDEPCV" ) `MPRoz( NDEPCVWEXP ,NDEPWEXP ,"" ,"Width dependence exponent coefficient of NDEPCV" ) `MPRnb( NDEPCVWL ,NDEPWL ,"m^2" ,"Width-Length dependence coefficient of NDEPCV" ) `MPRoz( NDEPCVWLEXP ,NDEPWLEXP ,"" ,"Width-Length dependence exponent coefficient of NDEPCV" ) `MPRnb( LNDEPCV ,LNDEP ,"1/m^2" ,"Length dependence of NDEP for CV" ) `MPRnb( WNDEPCV ,WNDEP ,"1/m^2" ,"Width dependence of NDEP for CV" ) `MPRnb( PNDEPCV ,PNDEP ,"1/m" ,"Area dependence of NDEP for CV" ) `MPRnb( NGATE ,5e25 ,"1/m^3" ,"Gate Doping Concentration" ) `MPRnb( LNGATE ,0.0 ,"1/m^2" ,"Length dependence of NGATE" ) `MPRnb( WNGATE ,0.0 ,"1/m^2" ,"Width dependence of NGATE" ) `MPRnb( PNGATE ,0.0 ,"1/m" ,"Area dependence of NGATE" ) `MPRnb( EASUB ,4.05 ,"eV" ,"Electron affinity of substrate" ) `MPRoz( NI0SUB ,1.1e16 ,"1/m^3" ,"Intrinsic carrier concentration of the substrate at 300.15K" ) `MPRoo( BG0SUB ,1.17 ,"eV" ,0 ,inf ,"Band gap of substrate at 300.15K" ) `MPRoo( EPSRSUB ,11.9 ,"" ,0 ,inf ,"Relative dielectric constant of the channel material" ) `MPRoo( EPSROX ,3.9 ,"" ,0 ,inf ,"Relative dielectric constant of the gate dielectric" ) `MPRnb( XJ ,1.5e-7 ,"m" ,"S/D junction depth" ) `MPRnb( LXJ ,0.0 ,"m^2" ,"Length dependence of XJ " ) `MPRnb( WXJ ,0.0 ,"m^2" ,"Width dependence of XJ" ) `MPRnb( PXJ ,0.0 ,"m^3" ,"Area dependence of XJ" ) `MPRnb( VFB ,-0.5 ,"V" ,"Flat band voltage " ) `MPRnb( LVFB ,0.0 ,"V*m" ,"Length dependence of VFB" ) `MPRnb( WVFB ,0.0 ,"V*m" ,"Width dependence of VFB" ) `MPRnb( PVFB ,0.0 ,"V*m^2" ,"Area dependence of VFB" ) `MPRnb( VFBCV ,VFB ,"V" ,"Flat band voltage for CV" ) `MPRnb( LVFBCV ,LVFB ,"V*m" ,"Length dependence of VFBCV" ) `MPRnb( WVFBCV ,WVFB ,"V*m" ,"Width dependence of VFBCV" ) `MPRnb( PVFBCV ,PVFB ,"V*m^2" ,"Area dependence of VFBCV" ) `MPRnb( VFBCVL ,0.0 ,"m" ,"Length dependence coefficient of VFBCV" ) `MPRoz( VFBCVLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of VFBCV" ) `MPRnb( VFBCVW ,0.0 ,"m" ,"Width dependence coefficient of VFBCV" ) `MPRoz( VFBCVWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of VFBCV" ) `MPRnb( VFBCVWL ,0.0 ,"m^2" ,"Width-Length dependence coefficient of VFBCV" ) `MPRoz( VFBCVWLEXP ,1.0 ,"" ,"Width-Length dependence coefficient of VFBCV" ) // Diode parameters `MPIcc( PERMOD ,1 ,"" ,0 ,1 ,"Whether PS/PD (when given) include gate-edge perimeter" ) `MPRnb( DWJ ,DWC ,"m" ,"delta W for S/D junctions" ) // Short channel effects `MPRnb( NSD ,1e26 ,"1/m^3" ,"S/D Doping Concentration" ) `MPRnb( LNSD ,0.0 ,"1/m^2" ,"Length dependence of NSD" ) `MPRnb( WNSD ,0.0 ,"1/m^2" ,"Width dependence of NSD" ) `MPRnb( PNSD ,0.0 ,"1/m" ,"Area dependence of NSD" ) `MPRnb( DVTP0 ,0.0 ,"m" ,"DITS" ) `MPRnb( LDVTP0 ,0 ,"m^2" ,"Length dependence of DVTP0" ) `MPRnb( WDVTP0 ,0 ,"m^2" ,"Width dependence of DVTP0" ) `MPRnb( PDVTP0 ,0 ,"m^3" ,"Area dependence of DVTP0" ) `MPRnb( DVTP1 ,0.0 ,"1/V" ,"DITS" ) `MPRnb( LDVTP1 ,0 ,"m/V" ,"Length dependence of DVTP1" ) `MPRnb( WDVTP1 ,0 ,"m/V" ,"Width dependence of DVTP1" ) `MPRnb( PDVTP1 ,0 ,"m^2/V" ,"Area dependence of DVTP1" ) `MPRnb( DVTP2 ,0.0 ,"m*V" ,"DITS" ) `MPRnb( LDVTP2 ,0 ,"m^2/V" ,"Length dependence of DVTP2" ) `MPRnb( WDVTP2 ,0 ,"m^2/V" ,"Width dependence of DVTP2" ) `MPRnb( PDVTP2 ,0 ,"m^3/V" ,"Area dependence of DVTP2" ) `MPRnb( DVTP3 ,0.0 ,"" ,"DITS" ) `MPRnb( LDVTP3 ,0 ,"m" ,"Length dependence of DVTP3" ) `MPRnb( WDVTP3 ,0 ,"m" ,"Width dependence of DVTP3" ) `MPRnb( PDVTP3 ,0 ,"m^2" ,"Area dependence of DVTP3" ) `MPRnb( DVTP4 ,0.0 ,"1/V" ,"DITS" ) `MPRnb( LDVTP4 ,0 ,"m/V" ,"Length dependence of DVTP4" ) `MPRnb( WDVTP4 ,0 ,"m/V" ,"Width dependence of DVTP4" ) `MPRnb( PDVTP4 ,0 ,"m^2/V" ,"Area dependence of DVTP4" ) `MPRnb( DVTP5 ,0.0 ,"V" ,"DITS" ) `MPRnb( LDVTP5 ,0 ,"m*V" ,"Length dependence of DVTP5" ) `MPRnb( WDVTP5 ,0 ,"m*V" ,"Width dependence of DVTP5" ) `MPRnb( PDVTP5 ,0 ,"m^2*V" ,"Area dependence of DVTP5" ) `MPRnb( PHIN ,0.045 ,"V" ,"Non-uniform vertical doping effect on surface potential" ) `MPRnb( LPHIN ,0.0 ,"m*V" ,"Length dependence of PHIN" ) `MPRnb( WPHIN ,0.0 ,"m*V" ,"Width dependence of PHIN" ) `MPRnb( PPHIN ,0.0 ,"m^2*V" ,"Area dependence of PHIN" ) `MPRnb( ETA0 ,0.08 ,"" ,"DIBL coefficient" ) `MPRnb( LETA0 ,0.0 ,"m" ,"Length dependence of ETA0" ) `MPRnb( WETA0 ,0.0 ,"m" ,"Width dependence of ETA0" ) `MPRnb( PETA0 ,0.0 ,"m^2" ,"Area dependence of ETA0" ) `MPRnb( ETA0R ,ETA0 ,"" ,"DIBL coefficient" ) `MPRnb( LETA0R ,LETA0 ,"m" ,"Length dependence of ETA0R" ) `MPRnb( WETA0R ,WETA0 ,"m" ,"Width dependence of ETA0R" ) `MPRnb( PETA0R ,PETA0 ,"m^2" ,"Area dependence of ETA0R" ) `MPRnb( DSUB ,1.0 ,"" ,"Length scaling exponent for DIBL" ) `MPRnb( ETAB ,-0.07 ,"1/V" ,"Body bias coefficient for sub-threshold DIBL effect" ) `MPRoz( ETABEXP ,1.0 ,"" ,"Exponent coefficient of ETAB" ) `MPRnb( LETAB ,0.0 ,"m/V" ,"Length dependence of ETAB" ) `MPRnb( WETAB ,0.0 ,"m/V" ,"Width dependence of ETAB" ) `MPRnb( PETAB ,0.0 ,"m^2/V" ,"Area dependence of ETAB" ) `MPRnb( K1 ,0.0 ,"V^0.5" ,"First-order body-bias Vth shift due to Vertical Non-uniform doping" ) `MPRnb( K1L ,0.0 ,"" ,"length dependence coefficient of K1" ) `MPRoz( K1LEXP ,1.0 ,"" ,"Length dependence exponent coefficient of K1" ) `MPRnb( K1W ,0.0 ,"" ,"Width dependence coefficient of K1" ) `MPRoz( K1WEXP ,1.0 ,"" ,"Width dependence exponent coefficient of K1" ) `MPRnb( K1WL ,0.0 ,"" ,"Width-Length dependence coefficient of K1" ) `MPRoz( K1WLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of K1" ) `MPRnb( LK1 ,0.0 ,"m*V^0.5" ,"Length dependence of K1" ) `MPRnb( WK1 ,0.0 ,"m*V^0.5" ,"Width dependence of K1" ) `MPRnb( PK1 ,0.0 ,"m^2*V^0.5" ,"Area dependence of K1" ) `MPRnb( K2 ,0.0 ,"V" ,"Vth shift due to Vertical Non-uniform doping" ) `MPRnb( K2L ,0.0 ,"m^K2LEXP" ,"Length dependence coefficient of K2" ) `MPRoz( K2LEXP ,1.0 ,"" ,"Length dependence exponent coefficient of K2" ) `MPRnb( K2W ,0.0 ,"m^K2WEXP" ,"Width dependence coefficient of K2" ) `MPRoz( K2WEXP ,1.0 ,"" ,"Width dependence exponent coefficient of K2" ) `MPRnb( K2WL ,0.0 ,"m^(2*K2WLEXP)" ,"Width-Length dependence coefficient of K2" ) `MPRoz( K2WLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of K2" ) `MPRnb( LK2 ,0.0 ,"m" ,"Length dependence of K2" ) `MPRnb( WK2 ,0.0 ,"m" ,"Width dependence of K2" ) `MPRnb( PK2 ,0.0 ,"m^2" ,"Area dependence of K2" ) // Quantum mechanical effects `MPRcz( ADOS ,0.0 ,"" ,"Quantum mechanical effect pre-factor cum switch in inversion" ) `MPRcz( BDOS ,1.0 ,"" ,"Charge centroid parameter - slope of CV curve under QME in inversion" ) `MPRoz( QM0 ,1.0e-3 ,"" ,"Charge centroid parameter - starting point for QME in inversion" ) `MPRcz( ETAQM ,0.54 ,"" ,"Bulk charge coefficient for charge centroid in inversion" ) // Sub-threshold swing factor `MPRnb( CIT ,0.0 ,"F/m^2" ,"Parameter for interface trap" ) `MPRnb( LCIT ,0.0 ,"F/m" ,"Length dependence of CIT" ) `MPRnb( WCIT ,0.0 ,"F/m" ,"Width dependence of CIT" ) `MPRnb( PCIT ,0.0 ,"F" ,"Area dependence of CIT" ) `MPRnb( NFACTOR ,0.0 ,"" ,"Sub-threshold slope factor" ) `MPRnb( NFACTORL ,0.0 ,"m^NFACTORLEXP" ,"Length dependence coefficient of NFACTOR" ) `MPRoz( NFACTORLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of NFACTOR" ) `MPRnb( NFACTORW ,0.0 ,"m^NFACTORWEXP" ,"Width dependence coefficient of NFACTOR" ) `MPRoz( NFACTORWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of NFACTOR" ) `MPRnb( NFACTORWL ,0.0 ,"m^(2*NFACTORWLEXP)" ,"Width-Length dependence coefficient of NFACTOR" ) `MPRoz( NFACTORWLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of NFACTOR" ) `MPRnb( LNFACTOR ,0.0 ,"m" ,"Length dependence of NFACTOR" ) `MPRnb( WNFACTOR ,0.0 ,"m" ,"Width dependence of NFACTOR" ) `MPRnb( PNFACTOR ,0.0 ,"m^2" ,"Area dependence of NFACTOR" ) `MPRnb( CDSCD ,1e-9 ,"F/m^2/V" ,"Drain-bias sensitivity of sub-threshold slope" ) `MPRnb( CDSCDL ,0.0 ,"m^CDSCDLEXP" ,"Length dependence coefficient of CDSCD" ) `MPRoz( CDSCDLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of CDSCD" ) `MPRnb( LCDSCD ,0.0 ,"F/m/V" ,"Length dependence of CDSCD" ) `MPRnb( WCDSCD ,0.0 ,"F/m/V" ,"Width dependence of CDSCD" ) `MPRnb( PCDSCD ,0.0 ,"F/V" ,"Area dependence of CDSCD" ) `MPRnb( CDSCDR ,CDSCD ,"F/m^2/V" ,"Drain-bias sensitivity of sub-threshold slope" ) `MPRnb( CDSCDLR ,CDSCDL ,"m^CDSCDLEXP" ,"Length dependence coefficient of CDSCD" ) `MPRnb( LCDSCDR ,LCDSCD ,"F/m/V" ,"Length dependence of CDSCDR" ) `MPRnb( WCDSCDR ,WCDSCD ,"F/m/V" ,"Width dependence of CDSCDR" ) `MPRnb( PCDSCDR ,PCDSCD ,"F/V" ,"Area dependence of CDSCDR" ) `MPRnb( CDSCB ,0.0 ,"F/m^2/V" ,"Body-bias sensitivity of sub-threshold slope" ) `MPRnb( CDSCBL ,0.0 ,"m^CDSCBLEXP" ,"Length dependence coefficient of CDSCB" ) `MPRoz( CDSCBLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of CDSCB" ) `MPRnb( LCDSCB ,0.0 ,"F/m/V" ,"Length dependence of CDSCB" ) `MPRnb( WCDSCB ,0.0 ,"F/m/V" ,"Width dependence of CDSCB" ) `MPRnb( PCDSCB ,0.0 ,"F/V" ,"Area dependence of CDSCB" ) // Drain saturation voltage `MPRnb( VSAT ,1e5 ,"m/s" ,"Saturation Velocity" ) `MPRnb( LVSAT ,0.0 ,"m^2/s" ,"Length dependence of VSAT" ) `MPRnb( WVSAT ,0.0 ,"m^2/s" ,"Width dependence of VSAT" ) `MPRnb( PVSAT ,0.0 ,"m^3/s" ,"Area dependence of VSAT" ) `MPRnb( VSATL ,0.0 ,"m^VSATLEXP" ,"Length dependence coefficient of of VSAT" ) `MPRoz( VSATLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of VSAT" ) `MPRnb( VSATW ,0.0 ,"m^VSATWEXP" ,"Width dependence coefficient of of VSAT" ) `MPRoz( VSATWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of of VSAT" ) `MPRnb( VSATWL ,0.0 ,"m^(2*VSATWLEXP)" ,"Width-Length dependence coefficient of of VSAT" ) `MPRoz( VSATWLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of of VSAT" ) `MPRnb( VSATR ,VSAT ,"m/s" ,"Saturation Velocity" ) `MPRnb( LVSATR ,LVSAT ,"m^2/s" ,"Length dependence of VSATR" ) `MPRnb( WVSATR ,WVSAT ,"m^2/s" ,"Width dependence of VSATR" ) `MPRnb( PVSATR ,PVSAT ,"m^3/s" ,"Area dependence of VSATR" ) `MPRnb( DELTA ,0.125 ,"" ,"Smoothing function factor for Vdsat" ) `MPRnb( LDELTA ,0.0 ,"m" ,"Length dependence of DELTA" ) `MPRnb( WDELTA ,0.0 ,"m" ,"Width dependence of DELTA" ) `MPRnb( PDELTA ,0.0 ,"m^2" ,"Area dependence of DELTA" ) `MPRnb( DELTAL ,0.0 ,"m^DELTALEXP" ,"Length dependence coefficient of DELTA" ) `MPRoz( DELTALEXP ,1.0 ,"" ,"Length dependence exponent coefficient of DELTA" ) `MPRnb( VSATCV ,VSAT ,"m/s" ,"VSAT parameter for CV" ) `MPRnb( LVSATCV ,LVSAT ,"m^2/s" ,"Length dependence of VSATCV" ) `MPRnb( WVSATCV ,WVSAT ,"m^2/s" ,"Width dependence of VSATCV" ) `MPRnb( PVSATCV ,PVSAT ,"m^3/s" ,"Area dependence of VSATCV" ) `MPRnb( VSATCVL ,VSATL ,"m^VSATCVLEXP" ,"Length dependence coefficient of VSATCV" ) `MPRoz( VSATCVLEXP ,VSATLEXP ,"" ,"Length dependence exponent coefficient of VSATCV" ) `MPRnb( VSATCVW ,VSATW ,"m^VSATCVWEXP" ,"Width dependence coefficient of VSATCV" ) `MPRoz( VSATCVWEXP ,VSATWEXP ,"" ,"Width dependence exponent coefficient of VSATCV" ) `MPRnb( VSATCVWL ,VSATWL ,"m^(2*VSATCVWLEXP)" ,"Width-Length dependence coefficient of VSATCV" ) `MPRoz( VSATCVWLEXP ,VSATWLEXP ,"" ,"Width-Length dependence exponent coefficient of VSATCV" ) // Mobility degradation `MPRoo( UP1 ,0.0 ,"" ,-inf ,inf ,"Mobility channel length coefficient" ) `MPRex( LP1 ,1.0e-8 ,"m" ,0.0 ,"Mobility channel length exponential coefficient" ) `MPRoo( UP2 ,0.0 ,"" ,-inf ,inf ,"Mobility channel length coefficient" ) `MPRex( LP2 ,1.0e-8 ,"m" ,0.0 ,"Mobility channel length exponential coefficient" ) `MPRnb( U0 ,67.0e-3 ,"m^2/V/s" ,"Low Field mobility." ) `MPRnb( U0L ,0.0 ,"m^U0LEXP" ,"Length dependence coefficient of U0L" ) `MPRoz( U0LEXP ,1.0 ,"" ,"Length dependence exponent coefficient of U0L" ) `MPRnb( LU0 ,0.0 ,"m^3/V/s" ,"Length dependence of U0" ) `MPRnb( WU0 ,0.0 ,"m^3/V/s" ,"Width dependence of U0" ) `MPRnb( PU0 ,0.0 ,"m^4/V/s" ,"Area dependence of U0" ) `MPRnb( U0R ,U0 ,"m2/V/s" ,"Reverse-mode Low Field mobility." ) `MPRnb( LU0R ,LU0 ,"m^3/V/s" ,"Length dependence of U0R" ) `MPRnb( WU0R ,WU0 ,"m^3/V/s" ,"Width dependence of U0R" ) `MPRnb( PU0R ,PU0 ,"m^4/V/s" ,"Area dependence of U0R" ) `MPRnb( ETAMOB ,1.0 ,"" ,"Effective field parameter (should be kept close to 1)" ) `MPRnb( UA ,0.001 ,"(m/V)^EU" ,"Mobility reduction coefficient" ) `MPRnb( UAL ,0.0 ,"m^UALEXP" ,"Length dependence coefficient of UA" ) `MPRoz( UALEXP ,1.0 ,"" ,"Length dependence exponent coefficient of UA" ) `MPRnb( UAW ,0.0 ,"m^UAWEXP" ,"Width dependence coefficient of UA" ) `MPRoz( UAWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of UA" ) `MPRnb( UAWL ,0.0 ,"m^UAWLEXP" ,"Width-Length dependence coefficient of UA" ) `MPRoz( UAWLEXP ,1.0 ,"" ,"Width-Length dependence coefficient of UA" ) `MPRnb( LUA ,0.0 ,"m*(m/V)^EU" ,"Length dependence of UA" ) `MPRnb( WUA ,0.0 ,"m*(m/V)^EU" ,"Width dependence of UA" ) `MPRnb( PUA ,0.0 ,"m^2*(m/V)^EU" ,"Area dependence of UA" ) `MPRnb( UAR ,UA ,"(m/V)^EU" ,"Reverse-mode Mobility reduction coefficient" ) `MPRnb( LUAR ,LUA ,"m*(m/V)^EU" ,"Length dependence of UAR" ) `MPRnb( WUAR ,WUA ,"m*(m/V)^EU" ,"Width dependence of UAR" ) `MPRnb( PUAR ,PUA ,"m^2*(m/V)^EU" ,"Area dependence of UAR" ) `MPRnb( EU ,1.5 ,"" ,"Mobility reduction exponent" ) `MPRnb( LEU ,0.0 ,"m" ,"Length dependence of EU" ) `MPRnb( WEU ,0.0 ,"m" ,"Width dependence of EU" ) `MPRnb( PEU ,0.0 ,"m^2" ,"Area dependence of EU" ) `MPRnb( EUL ,0.0 ,"m^EULEXP" ,"Length dependence coefficient of EU" ) `MPRoz( EULEXP ,1.0 ,"" ,"Length dependence exponent coefficient of EU" ) `MPRnb( EUW ,0.0 ,"m^EUWEXP" ,"Width dependence coefficient of EU" ) `MPRoz( EUWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of EU" ) `MPRnb( EUWL ,0.0 ,"m^EUWLEXP" ,"Width-Length dependence coefficient of EU" ) `MPRoz( EUWLEXP ,1.0 ,"" ,"Width-Length dependence coefficient of EU" ) `MPRnb( UD ,0.001 ,"" ,"Coulomb scattering parameter" ) `MPRnb( UDL ,0.0 ,"m^UDLEXP" ,"Length dependence coefficient of UD" ) `MPRoz( UDLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of UD" ) `MPRnb( LUD ,0.0 ,"m" ,"Length dependence of UD" ) `MPRnb( WUD ,0.0 ,"m" ,"Width dependence of UD" ) `MPRnb( PUD ,0.0 ,"m^2" ,"Area dependence of UD" ) `MPRnb( UDR ,UD ,"" ,"Reverse-mode Coulomb scattering parameter" ) `MPRnb( LUDR ,LUD ,"m" ,"Length dependence of UDR" ) `MPRnb( WUDR ,WUD ,"m" ,"Width dependence of UDR" ) `MPRnb( PUDR ,PUD ,"m^2" ,"Area dependence of UDR" ) `MPRnb( UCS ,2.0 ,"" ,"Coulomb scattering parameter" ) `MPRnb( LUCS ,0.0 ,"m" ,"Length dependence of UCS" ) `MPRnb( WUCS ,0.0 ,"m" ,"Width dependence of UCS" ) `MPRnb( PUCS ,0.0 ,"m^2" ,"Area dependence of UCS" ) `MPRnb( UCSR ,UCS ,"" ,"Reverse-mode Coulomb scattering parameter" ) `MPRnb( LUCSR ,LUCS ,"m" ,"Length dependence of UCSR" ) `MPRnb( WUCSR ,WUCS ,"m" ,"Width dependence of UCSR" ) `MPRnb( PUCSR ,PUCS ,"m^2" ,"Area dependence of UCSR" ) `MPRnb( UC ,0.0 ,"(m/V)^EU/V" ,"Mobility reduction with body bias" ) `MPRnb( UCL ,0.0 ,"m^UCLEXP" ,"Length dependence coefficient of UC" ) `MPRoz( UCLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of UC" ) `MPRnb( UCW ,0.0 ,"m^UCWEXP" ,"Width dependence coefficient of UC" ) `MPRoz( UCWEXP ,1.0 ,"" ,"Width dependence exponent coefficient of UC" ) `MPRnb( UCWL ,0.0 ,"m^(2*UCWLEXP)" ,"Width-Length dependence coefficient of UC" ) `MPRoz( UCWLEXP ,1.0 ,"" ,"Width-Length dependence exponent coefficient of UC" ) `MPRnb( LUC ,0.0 ,"m*(m/V)^EU/V" ,"Length dependence of UC" ) `MPRnb( WUC ,0.0 ,"m*(m/V)^EU/V" ,"Width dependence of UC" ) `MPRnb( PUC ,0.0 ,"m^2*(m/V)^EU/V" ,"Area dependence of UC" ) `MPRnb( UCR ,UC ,"(m/V)^EU/V" ,"Reverse-mode Mobility reduction with body bias" ) `MPRnb( LUCR ,LUC ,"m*(m/V)^EU/V" ,"Length dependence of UCR" ) `MPRnb( WUCR ,WUC ,"m*(m/V)^EU/V" ,"Width dependence of UCR" ) `MPRnb( PUCR ,PUC ,"m^2*(m/V)^EU/V" ,"Area dependence of UCR" ) // Channel length modulation `MPRnb( PCLM ,0.0 ,"" ,"CLM pre-factor" ) `MPRnb( PCLML ,0.0 ,"m^PCLMLEXP" ,"Length dependence coefficient of PCLM" ) `MPRoz( PCLMLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of PCLM" ) `MPRnb( LPCLM ,0.0 ,"m" ,"Length dependence of PCLM" ) `MPRnb( WPCLM ,0.0 ,"m" ,"Width dependence of PCLM" ) `MPRnb( PPCLM ,0.0 ,"m^2" ,"Area dependence of PCLM" ) `MPRnb( PCLMR ,PCLM ,"" ,"Reverse-mode CLM pre-factor" ) `MPRnb( LPCLMR ,LPCLM ,"m" ,"Length dependence of PCLMR" ) `MPRnb( WPCLMR ,WPCLM ,"m" ,"Width dependence of PCLMR" ) `MPRnb( PPCLMR ,PPCLM ,"m^2" ,"Area dependence of PCLMR" ) `MPRnb( PCLMG ,0.0 ,"V" ,"CLM pre-factor gate voltage dependence" ) `MPRnb( PCLMCV ,PCLM ,"" ,"CLM parameter for CV" ) `MPRnb( PCLMCVL ,PCLML ,"m^PCLMLEXP" ,"Length dependence coefficient of PCLMCV" ) `MPRoz( PCLMCVLEXP ,PCLMLEXP ,"" ,"Length dependence exponent coefficient of PCLMCV" ) `MPRnb( LPCLMCV ,LPCLM ,"m" ,"Length dependence of PCLMCV" ) `MPRnb( WPCLMCV ,WPCLM ,"m" ,"Width dependence of PCLMCV" ) `MPRnb( PPCLMCV ,PPCLM ,"m^2" ,"Area dependence of PCLMCV" ) `MPRnb( PSCBE1 ,4.24e8 ,"V/m" ,"Substrate current body-effect coefficient" ) `MPRnb( LPSCBE1 ,0.0 ,"V" ,"Length dependence of PSCBE1" ) `MPRnb( WPSCBE1 ,0.0 ,"V" ,"Width dependence of PSCBE1" ) `MPRnb( PPSCBE1 ,0.0 ,"V*m" ,"Area dependence of PSCBE1" ) `MPRnb( PSCBE2 ,1.0e-8 ,"m/V" ,"Substrate current body-effect coefficient" ) `MPRnb( LPSCBE2 ,0.0 ,"m^2/V" ,"Length dependence of PSCBE2" ) `MPRnb( WPSCBE2 ,0.0 ,"m^2/V" ,"Width dependence of PSCBE2" ) `MPRnb( PPSCBE2 ,0.0 ,"m^3/V" ,"Area dependence of PSCBE2" ) `MPRnb( PDITS ,0.0 ,"1/V" ,"Coefficient for drain-induced Vth shift" ) `MPRnb( LPDITS ,0.0 ,"m/V" ,"Length dependence of PDITS" ) `MPRnb( WPDITS ,0.0 ,"m/V" ,"Width dependence of PDITS" ) `MPRnb( PPDITS ,0.0 ,"m^2/V" ,"Area dependence of PDITS" ) `MPRcz( PDITSL ,0.0 ,"1/m" ,"L dependence of drain-induced Vth shift" ) `MPRnb( PDITSD ,0.0 ,"1/V" ,"Vds dependence of drain-induced Vth shift" ) `MPRnb( LPDITSD ,0.0 ,"m/V" ,"Length dependence of PDITSD" ) `MPRnb( WPDITSD ,0.0 ,"m/V" ,"Width dependence of PDITSD" ) `MPRnb( PPDITSD ,0.0 ,"m^2/V" ,"Area dependence of PDITSD" ) // S/D series resistance `MPRcz( RSH ,0.0 ,"ohm/square" ,"Source-drain sheet resistance" ) `MPRnb( PRWG ,1.0 ,"1/V" ,"Gate bias dependence of S/D extension resistance" ) `MPRnb( LPRWG ,0.0 ,"m/V" ,"Length dependence of PRWG" ) `MPRnb( WPRWG ,0.0 ,"m/V" ,"Width dependence of PRWG" ) `MPRnb( PPRWG ,0.0 ,"m^2/V" ,"Area dependence of PRWG" ) `MPRnb( PRWB ,0.0 ,"1/V" ,"Body bias dependence of resistance" ) `MPRnb( LPRWB ,0.0 ,"m/V" ,"Length dependence of PRWB" ) `MPRnb( WPRWB ,0.0 ,"m/V" ,"Width dependence of PRWB" ) `MPRnb( PPRWB ,0.0 ,"m^2/V" ,"Area dependence of PRWB" ) `MPRnb( PRWBL ,0.0 ,"m^PRWBLEXP" ,"Length dependence coefficient of PPRWB" ) `MPRoz( PRWBLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of PPRWB" ) `MPRnb( WR ,1.0 ,"" ,"W dependence parameter of S/D extension resistance" ) `MPRnb( LWR ,0.0 ,"m" ,"Length dependence of WR" ) `MPRnb( WWR ,0.0 ,"m" ,"Width dependence of WR" ) `MPRnb( PWR ,0.0 ,"m^2" ,"Area dependence of WR" ) `MPRnb( RSWMIN ,0.0 ,"ohm*m^WR" ,"Source Resistance per unit width at high Vgs (RDSMOD=1)" ) `MPRnb( LRSWMIN ,0.0 ,"ohm*m^(2*WR)" ,"Length dependence of RSWMIN" ) `MPRnb( WRSWMIN ,0.0 ,"ohm*m^(2*WR)" ,"Width dependence of RSWMIN" ) `MPRnb( PRSWMIN ,0.0 ,"ohm*m^(3*WR)" ,"Area dependence of RSWMIN" ) `MPRnb( RSW ,10.0 ,"ohm*m^WR" ,"Zero bias Source Resistance (RDSMOD=1)" ) `MPRnb( LRSW ,0.0 ,"ohm*m^(2*WR)" ,"Length dependence of RSW" ) `MPRnb( WRSW ,0.0 ,"ohm*m^(2*WR)" ,"Width dependence of RSW" ) `MPRnb( PRSW ,0.0 ,"ohm*m^(3*WR)" ,"Area dependence of RSW" ) `MPRnb( RSWL ,0.0 ,"m^RSWLEXP" ,"Geometrical scaling of RSW (RDSMOD=1)" ) `MPRoz( RSWLEXP ,1.0 ,"" ,"Geometrical scaling of RSW (RDSMOD=1)" ) `MPRnb( RDWMIN ,RSWMIN ,"ohm*m^WR" ,"Drain Resistance per unit width at high Vgs (RDSMOD=1)" ) `MPRnb( LRDWMIN ,LRSWMIN ,"ohm*m^(2*WR)" ,"Length dependence of RDWMIN" ) `MPRnb( WRDWMIN ,WRSWMIN ,"ohm*m^(2*WR)" ,"Width dependence of RDWMIN" ) `MPRnb( PRDWMIN ,PRSWMIN ,"ohm*m^(3*WR)" ,"Area dependence of RDWMIN" ) `MPRnb( RDW ,RSW ,"ohm*m^WR" ,"zero bias Drain Resistance (RDSMOD=1)" ) `MPRnb( LRDW ,LRSW ,"ohm*m^(2*WR)" ,"Length dependence of RDW" ) `MPRnb( WRDW ,WRSW ,"ohm*m^(2*WR)" ,"Width dependence of RDW" ) `MPRnb( PRDW ,PRSW ,"ohm*m^(3*WR)" ,"Area dependence of RDW" ) `MPRnb( RDWL ,RSWL ,"m^RDWLEXP" ,"Geometrical scaling of RDW (RDSMOD=1)" ) `MPRoz( RDWLEXP ,RSWLEXP ,"" ,"Geometrical scaling of RDW (RDSMOD=1)" ) `MPRnb( RDSWMIN ,0.0 ,"ohm*m^WR" ,"S/D Resistance per unit width at high Vgs (RDSMOD=0 and RDSMOD=2)" ) `MPRnb( LRDSWMIN ,0.0 ,"ohm*m^(2*WR)" ,"Length dependence of RDSWMIN " ) `MPRnb( WRDSWMIN ,0.0 ,"ohm*m^(2*WR)" ,"Width dependence of RDSWMIN " ) `MPRnb( PRDSWMIN ,0.0 ,"ohm*m^(3*WR)" ,"Area dependence of RDSWMIN " ) `MPRnb( RDSW ,20.0 ,"ohm*um^WR" ,"Zero bias Resistance (RDSMOD=0 and RDSMOD=2)" ) `MPRnb( RDSWL ,0.0 ,"m^RDSWLEXP" ,"Geometrical scaling of RDSW (RDSMOD=0 and RDSMOD=2)" ) `MPRoz( RDSWLEXP ,1.0 ,"" ,"Geometrical scaling of RDSW (RDSMOD=0 and RDSMOD=2)" ) `MPRnb( LRDSW ,0.0 ,"ohm*m^(2*WR)" ,"Length dependence of RDSW" ) `MPRnb( WRDSW ,0.0 ,"ohm*m^(2*WR)" ,"Width dependence of RDSW" ) `MPRnb( PRDSW ,0.0 ,"ohm*m^(3*WR)" ,"Area dependence of RDSW " ) // Velocity saturation `MPRnb( PSAT ,1.0 ,"" ,"Gmsat variation with gate bias" ) `MPRnb( LPSAT ,0.0 ,"m" ,"Length dependence of PSAT" ) `MPRnb( WPSAT ,0.0 ,"m" ,"Width dependence of PSAT" ) `MPRnb( PPSAT ,0.0 ,"m^2" ,"Area dependence of PSAT" ) `MPRnb( PSATL ,0.0 ,"m^PSATLEXP" ,"Length dependence coefficient of PSATL" ) `MPRoz( PSATLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of PSATLEXP" ) `MPRnb( PSATB ,0.0 ,"1/V" ,"Body bias effect on Idsat" ) `MPRnb( PSATR ,PSAT ,"" ,"Reverse-mode Gmsat variation with gate bias" ) `MPRnb( LPSATR ,LPSAT ,"m" ,"Length dependence of PSATR" ) `MPRnb( WPSATR ,WPSAT ,"m" ,"Width dependence of PSATR" ) `MPRnb( PPSATR ,PPSAT ,"m^2" ,"Area dependence of PSATR" ) `MPRnb( LPSATB ,0.0 ,"m/V" ,"Length dependence of PSATB" ) `MPRnb( WPSATB ,0.0 ,"m/V" ,"Width dependence of PSATB" ) `MPRnb( PPSATB ,0.0 ,"m^2/V" ,"Area dependence of PSATB" ) `MPRoz( PSATX ,1.0 ,"" ,"Fine tuning of PTWG effect" ) `MPRnb( PTWG ,0.0 ,"" ,"Idsat variation with gate bias" ) `MPRnb( LPTWG ,0.0 ,"m" ,"Length dependence of PTWG" ) `MPRnb( WPTWG ,0.0 ,"m" ,"Width dependence of PTWG" ) `MPRnb( PPTWG ,0.0 ,"m^2" ,"Area dependence of PTWG" ) `MPRnb( PTWGL ,0.0 ,"m^PTWGLEXP" ,"Length dependence coefficient of PTWG" ) `MPRoz( PTWGLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of PTWG" ) `MPRnb( PTWGR ,PTWG ,"" ,"Reverse-mode Idsat variation with gate bias" ) `MPRnb( LPTWGR ,LPTWG ,"m" ,"Length dependence of PTWGR" ) `MPRnb( WPTWGR ,WPTWG ,"m" ,"Width dependence of PTWGR" ) `MPRnb( PPTWGR ,PPTWG ,"m^2" ,"Area dependence of PTWGR" ) `MPRnb( PTWGLR ,PTWGL ,"m^PTWGLEXPR" ,"Length dependence coefficient of PTWG" ) `MPRoz( PTWGLEXPR ,PTWGLEXP ,"" ,"Length dependence exponent coefficient of PTWG" ) // Velocity non-saturation effect `MPRnb( A1 ,0.0 ,"1/V^2" ,"Non-saturation effect parameter for strong inversion region" ) `MPRnb( LA1 ,0.0 ,"m/V^2" ,"Length dependence of A1" ) `MPRnb( WA1 ,0.0 ,"m/V^2" ,"Width dependence of A1" ) `MPRnb( PA1 ,0.0 ,"m^2/V^2" ,"Area dependence of A1" ) `MPRnb( A11 ,0.0 ,"" ,"Temperature dependence of A1" ) `MPRnb( LA11 ,0.0 ,"m" ,"Length dependence of A11" ) `MPRnb( WA11 ,0.0 ,"m" ,"Width dependence of A11" ) `MPRnb( PA11 ,0.0 ,"m^2" ,"Area dependence of A11" ) `MPRnb( A2 ,0.0 ,"1/V" ,"Non-saturation effect parameter for moderate inversion region" ) `MPRnb( LA2 ,0.0 ,"m/V" ,"Length dependence of A2" ) `MPRnb( WA2 ,0.0 ,"m/V" ,"Width dependence of A2" ) `MPRnb( PA2 ,0.0 ,"m^2/V" ,"Area dependence of A2" ) `MPRnb( A21 ,0.0 ,"" ,"Temperature dependence of A2" ) `MPRnb( LA21 ,0.0 ,"m" ,"Length dependence of A21" ) `MPRnb( WA21 ,0.0 ,"m" ,"Width dependence of A21" ) `MPRnb( PA21 ,0.0 ,"m^2" ,"Area dependence of A21" ) // Output conductance `MPRnb( PDIBLC ,0.0 ,"" ,"Parameter for DIBL effect on Rout" ) `MPRnb( PDIBLCL ,0.0 ,"m^PDIBLCLEXP" ,"Length dependence coefficient of PDIBLC" ) `MPRoz( PDIBLCLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of PDIBLC" ) `MPRnb( LPDIBLC ,0.0 ,"m" ,"Length dependence of PDIBLC" ) `MPRnb( WPDIBLC ,0.0 ,"m" ,"Width dependence of PDIBLC" ) `MPRnb( PPDIBLC ,0.0 ,"m^2" ,"Area dependence of PDIBLC" ) `MPRnb( PDIBLCR ,PDIBLC ,"" ,"Reverse-mode Parameter for DIBL effect on Rout" ) `MPRnb( PDIBLCLR ,PDIBLCL ,"m^PDIBLCLEXPR" ,"Length dependence coefficient of PDIBLC" ) `MPRoz( PDIBLCLEXPR ,PDIBLCLEXP ,"" ,"Length dependence exponent coefficient of PDIBLC" ) `MPRnb( LPDIBLCR ,LPDIBLC ,"m" ,"Length dependence of PDIBLCR" ) `MPRnb( WPDIBLCR ,WPDIBLC ,"m" ,"Width dependence of PDIBLCR" ) `MPRnb( PPDIBLCR ,PPDIBLC ,"m^2" ,"Area dependence of PDIBLCR" ) `MPRnb( PDIBLCB ,0.0 ,"1/V" ,"Parameter for DIBL effect on Rout" ) `MPRnb( LPDIBLCB ,0.0 ,"m/V" ,"Length dependence of PDIBLCB" ) `MPRnb( WPDIBLCB ,0.0 ,"m/V" ,"Width dependence of PDIBLCB" ) `MPRnb( PPDIBLCB ,0.0 ,"m^2/V" ,"Area dependence of PDIBLCB" ) `MPRnb( PVAG ,1.0 ,"" ,"Vg dependence of early voltage" ) `MPRnb( LPVAG ,0.0 ,"m" ,"Length dependence of PVAG" ) `MPRnb( WPVAG ,0.0 ,"m" ,"Width dependence of PVAG" ) `MPRnb( PPVAG ,0.0 ,"m^2" ,"Area dependence of PVAG" ) `MPRnb( FPROUT ,0.0 ,"V/m^0.5" ,"gds degradation factor due to pocket implant." ) `MPRnb( FPROUTL ,0.0 ,"m^FPROUTLEXP" ,"Length dependence coefficient of FPROUT" ) `MPRoz( FPROUTLEXP ,1.0 ,"" ,"Length dependence exponent coefficient of FPROUT" ) `MPRnb( LFPROUT ,0.0 ,"V*m^0.5" ,"Length dependence of FPROUT" ) `MPRnb( WFPROUT ,0.0 ,"V*m^0.5" ,"Width dependence of FPROUT" ) `MPRnb( PFPROUT ,0.0 ,"V*m^1.5" ,"Area dependence of FPROUT" ) // Impact ionization current `MPRnb( ALPHA0 ,0.0 ,"m/V" ,"First parameter of Iii" ) `MPRnb( ALPHA0L ,0.0 ,"m^ALPHA0LEXP" ,"Length dependence coefficient of ALPHA0" ) `MPRoz( ALPHA0LEXP ,1.0 ,"" ,"Length dependence exponent coefficient of ALPHA0" ) `MPRnb( LALPHA0 ,0.0 ,"m^2/V" ,"Length dependence of ALPHA0" ) `MPRnb( WALPHA0 ,0.0 ,"m^2/V" ,"Width dependence of ALPHA0" ) `MPRnb( PALPHA0 ,0.0 ,"m^3/V" ,"Area dependence of ALPHA0" ) `MPRnb( BETA0 ,0.0 ,"1/V" ,"Vds dependent parameter of Iii" ) `MPRnb( LBETA0 ,0.0 ,"m/V" ,"Length dependence of BETA0" ) `MPRnb( WBETA0 ,0.0 ,"m/V" ,"Width dependence of BETA0" ) `MPRnb( PBETA0 ,0.0 ,"m^2/V" ,"Area dependence of BETA0" ) // Gate dielectric tunnelling current model parameters `MPRnb( AIGBACC ,1.36e-2 ,"(F*s^2/g)^0.5/m" ,"Parameter for Igb" ) `MPRnb( BIGBACC ,1.71e-3 ,"(F*s^2/g)^0.5/m/V" ,"Parameter for Igb" ) `MPRnb( CIGBACC ,0.075 ,"1/V" ,"Parameter for Igb" ) `MPRnb( NIGBACC ,1.0 ,"" ,"Parameter for Igbacc slope" ) `MPRnb( AIGBINV ,1.11e-2 ,"(F*s^2/g)^0.5/m" ,"Parameter for Igb" ) `MPRnb( BIGBINV ,9.49e-4 ,"(F*s^2/g)^0.5/m/V" ,"Parameter for Igb" ) `MPRnb( CIGBINV ,0.006 ,"1/V" ,"Parameter for Igb" ) `MPRnb( EIGBINV ,1.1 ,"V" ,"Parameter for the Si band-gap for Igbinv" ) `MPRnb( NIGBINV ,3.0 ,"" ,"Parameter for Igbinv slope" ) `MPRnb( AIGC ,((TYPE == `ntype) ? 1.36e-2 : 9.8e-3) ,"(F*s^2/g)^0.5/m" ,"Parameter for Igc" ) `MPRnb( BIGC ,((TYPE == `ntype) ? 1.71e-3 : 7.59e-4) ,"(F*s^2/g)^0.5/m/V" ,"Parameter for Igc" ) `MPRnb( CIGC ,((TYPE == `ntype) ? 0.075 : 0.03) ,"1/V" ,"Parameter for Igc" ) `MPRnb( AIGS ,((TYPE == `ntype) ? 1.36e-2 : 9.8e-3) ,"(F*s^2/g)^0.5/m" ,"Parameter for Igs d" ) `MPRnb( BIGS ,((TYPE == `ntype) ? 1.71e-3 : 7.59e-4) ,"(F*s^2/g)^0.5/m/V" ,"Parameter for Igs d" ) `MPRnb( CIGS ,((TYPE == `ntype) ? 0.075 : 0.03) ,"1/V" ,"Parameter for Igs d" ) `MPRnb( AIGD ,((TYPE == `ntype) ? 1.36e-2 : 9.8e-3) ,"(F*s^2/g)^0.5/m" ,"Parameter for Igs d" ) `MPRnb( BIGD ,((TYPE == `ntype) ? 1.71e-3 : 7.59e-4) ,"(F*s^2/g)^0.5/m/V" ,"Parameter for Igs d" ) `MPRnb( CIGD ,((TYPE == `ntype) ? 0.075 : 0.03) ,"1/V" ,"Parameter for Igs d" ) `MPRnb( DLCIG ,LINT ,"m" ,"Delta L for Ig model" ) `MPRnb( DLCIGD ,DLCIG ,"m" ,"Delta L for Ig model" ) `MPRnb( POXEDGE ,1.0 ,"" ,"Factor for the gate edge Tox" ) `MPRnb( NTOX ,1.0 ,"" ,"Exponent for Tox ratio" ) `MPRoz( TOXREF ,3.0e-9 ,"m" ,"Target tox value" ) `MPRcc( PIGCD ,1.0 ,"" ,-50 ,50 ,"Igc, S/D partition parameter" ) `MPRnb( AIGCL ,0.0 ,"m" ,"Length dependence coefficient of AIGC" ) `MPRnb( AIGCW ,0.0 ,"m" ,"Width dependence coefficient of AIGC" ) `MPRnb( AIGSL ,0.0 ,"m" ,"Length dependence coefficient of AIGS" ) `MPRnb( AIGSW ,0.0 ,"m" ,"Width dependence coefficient of AIGS" ) `MPRnb( AIGDL ,0.0 ,"m" ,"Length dependence coefficient of AIGD" ) `MPRnb( AIGDW ,0.0 ,"m" ,"Width dependence coefficient of AIGD" ) `MPRnb( PIGCDL ,0.0 ,"m" ,"Length dependence coefficient of PIGCD" ) `MPRnb( LAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"Length dependence of AIGBINV" ) `MPRnb( WAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"Width dependence of AIGBINV" ) `MPRnb( PAIGBINV ,0.0 ,"m*(F*s^2/g)^0.5" ,"Area dependence of AIGBINV" ) `MPRnb( LBIGBINV ,0.0 ,"(F*s^2/g)^0.5/V" ,"Length dependence of BIGBINV" ) `MPRnb( WBIGBINV ,0.0 ,"(F*s^2/g)^0.5/V" ,"Width dependence of BIGBINV" ) `MPRnb( PBIGBINV ,0.0 ,"m*(F*s^2/g)^0.5/V" ,"Area dependence of BIGBINV" ) `MPRnb( LCIGBINV ,0.0 ,"m/V" ,"Length dependence of CIGBINV" ) `MPRnb( WCIGBINV ,0.0 ,"m/V" ,"Width dependence of CIGBINV" ) `MPRnb( PCIGBINV ,0.0 ,"m^2/V" ,"Area dependence of CIGBINV" ) `MPRnb( LEIGBINV ,0.0 ,"m*V" ,"Length dependence of EIGBINV" ) `MPRnb( WEIGBINV ,0.0 ,"m*V" ,"Width dependence of EIGBINV" ) `MPRnb( PEIGBINV ,0.0 ,"m^2*V" ,"Area dependence of EIGBINV" ) `MPRnb( LNIGBINV ,0.0 ,"m" ,"Length dependence of NIGBINV" ) `MPRnb( WNIGBINV ,0.0 ,"m" ,"Width dependence of NIGBINV" ) `MPRnb( PNIGBINV ,0.0 ,"m^2" ,"Area dependence of NIGBINV" ) `MPRnb( LAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"Length dependence of AIGBACC" ) `MPRnb( WAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"Width dependence of AIGBACC" ) `MPRnb( PAIGBACC ,0.0 ,"m*(F*s^2/g)^0.5" ,"Area dependence of AIGBACC" ) `MPRnb( LBIGBACC ,0.0 ,"(F*s^2/g)^0.5/V" ,"Length dependence of BIGBACC" ) `MPRnb( WBIGBACC ,0.0 ,"(F*s^2/g)^0.5/V" ,"Width dependence of BIGBACC" ) `MPRnb( PBIGBACC ,0.0 ,"m*(F*s^2/g)^0.5/V" ,"Area dependence of BIGBACC" ) `MPRnb( LCIGBACC ,0.0 ,"m/V" ,"Length dependence of CIGBACC" ) `MPRnb( WCIGBACC ,0.0 ,"m/V" ,"Width dependence of CIGBACC" ) `MPRnb( PCIGBACC ,0.0 ,"m^2/V" ,"Area dependence of CIGBACC" ) `MPRnb( LNIGBACC ,0.0 ,"m" ,"Length dependence of NIGBACC" ) `MPRnb( WNIGBACC ,0.0 ,"m" ,"Width dependence of NIGBACC" ) `MPRnb( PNIGBACC ,0.0 ,"m^2" ,"Area dependence of NIGBACC" ) `MPRnb( LAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"Length dependence of AIGC" ) `MPRnb( WAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"Width dependence of AIGC" ) `MPRnb( PAIGC ,0.0 ,"m*(F*s^2/g)^0.5" ,"Area dependence of AIGC" ) `MPRnb( LBIGC ,0.0 ,"(F*s^2/g)^0.5/V" ,"Length dependence of BIGC" ) `MPRnb( WBIGC ,0.0 ,"(F*s^2/g)^0.5/V" ,"Width dependence of BIGC" ) `MPRnb( PBIGC ,0.0 ,"m*(F*s^2/g)^0.5/V" ,"Area dependence of BIGC" ) `MPRnb( LCIGC ,0.0 ,"m/V" ,"Length dependence of CIGC" ) `MPRnb( WCIGC ,0.0 ,"m/V" ,"Width dependence of CIGC" ) `MPRnb( PCIGC ,0.0 ,"m^2/V" ,"Area dependence of CIGC" ) `MPRnb( LAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"Length dependence of AIGS" ) `MPRnb( WAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"Width dependence of AIGS" ) `MPRnb( PAIGS ,0.0 ,"m*(F*s^2/g)^0.5" ,"Area dependence of AIGS" ) `MPRnb( LBIGS ,0.0 ,"(F*s^2/g)^0.5/V" ,"Length dependence of BIGS" ) `MPRnb( WBIGS ,0.0 ,"(F*s^2/g)^0.5/V" ,"Width dependence of BIGS" ) `MPRnb( PBIGS ,0.0 ,"m*(F*s^2/g)^0.5/V" ,"Area dependence of BIGS" ) `MPRnb( LCIGS ,0.0 ,"m/V" ,"Length dependence of CIGS" ) `MPRnb( WCIGS ,0.0 ,"m/V" ,"Width dependence of CIGS" ) `MPRnb( PCIGS ,0.0 ,"m^2/V" ,"Area dependence of CIGS" ) `MPRnb( LAIGD ,0.0 ,"(F*s^2/g)^0.5" ,"Length dependence of AIGD" ) `MPRnb( WAIGD ,0.0 ,"(F*s^2/g)^0.5" ,"Width dependence of AIGD" ) `MPRnb( PAIGD ,0.0 ,"m*(F*s^2/g)^0.5" ,"Area dependence of AIGD" ) `MPRnb( LBIGD ,0.0 ,"(F*s^2/g)^0.5/V" ,"Length dependence of BIGD" ) `MPRnb( WBIGD ,0.0 ,"(F*s^2/g)^0.5/V" ,"Width dependence of BIGD" ) `MPRnb( PBIGD ,0.0 ,"m*(F*s^2/g)^0.5/V" ,"Area dependence of BIGD" ) `MPRnb( LCIGD ,0.0 ,"m/V" ,"Length dependence of CIGD" ) `MPRnb( WCIGD ,0.0 ,"m/V" ,"Width dependence of CIGD" ) `MPRnb( PCIGD ,0.0 ,"m^2/V" ,"Area dependence of CIGD" ) `MPRnb( LPOXEDGE ,0.0 ,"m" ,"Length dependence of POXEDGE" ) `MPRnb( WPOXEDGE ,0.0 ,"m" ,"Width dependence of POXEDGE" ) `MPRnb( PPOXEDGE ,0.0 ,"m^2" ,"Area dependence of POXEDGE" ) `MPRnb( LDLCIG ,0.0 ,"m^2" ,"Length dependence of DLCIG" ) `MPRnb( WDLCIG ,0.0 ,"m^2" ,"Width dependence of DLCIG" ) `MPRnb( PDLCIG ,0.0 ,"m^3" ,"Area dependence of DLCIG" ) `MPRnb( LDLCIGD ,0.0 ,"m^2" ,"Length dependence of DLCIGD" ) `MPRnb( WDLCIGD ,0.0 ,"m^2" ,"Width dependence of DLCIGD" ) `MPRnb( PDLCIGD ,0.0 ,"m^3" ,"Area dependence of DLCIGD" ) `MPRnb( LNTOX ,0.0 ,"m" ,"Length dependence of NTOX" ) `MPRnb( WNTOX ,0.0 ,"m" ,"Width dependence of NTOX" ) `MPRnb( PNTOX ,0.0 ,"m^2" ,"Area dependence of NTOX" ) // GIDL and GISL currents `MPRnb( AGIDL ,0.0 ,"V/m" ,"Pre-exponential coefficient for GIDL" ) `MPRnb( AGIDLL ,0.0 ,"m" ,"Length dependence coefficient of AGIDL" ) `MPRnb( AGIDLW ,0.0 ,"m" ,"Width dependence coefficient of AGIDL" ) `MPRnb( LAGIDL ,0.0 ,"m^2" ,"Length dependence of AGIDL" ) `MPRnb( WAGIDL ,0.0 ,"m^2" ,"Width dependence of AGIDL" ) `MPRnb( PAGIDL ,0.0 ,"m^3" ,"Area dependence of AGIDL" ) `MPRnb( BGIDL ,2.3e9 ,"V/m" ,"Exponential coefficient for GIDL" ) `MPRnb( LBGIDL ,0.0 ,"V" ,"Length dependence of BGIDL" ) `MPRnb( WBGIDL ,0.0 ,"V" ,"Width dependence of BGIDL" ) `MPRnb( PBGIDL ,0.0 ,"V*m" ,"Area dependence of BGIDL" ) `MPRnb( CGIDL ,0.5 ,"V/m" ,"Exponential coefficient for GIDL" ) `MPRnb( LCGIDL ,0.0 ,"V" ,"Length dependence of CGIDL" ) `MPRnb( WCGIDL ,0.0 ,"V" ,"Width dependence of CGIDL" ) `MPRnb( PCGIDL ,0.0 ,"V*m" ,"Area dependence of CGIDL" ) `MPRnb( EGIDL ,0.8 ,"V" ,"Band bending parameter for GIDL" ) `MPRnb( LEGIDL ,0.0 ,"V*m" ,"Length dependence of EGIDL" ) `MPRnb( WEGIDL ,0.0 ,"V*m" ,"Width dependence of EGIDL" ) `MPRnb( PEGIDL ,0.0 ,"V*m^2" ,"Area dependence of EGIDL" ) `MPRnb( AGISL ,AGIDL ,"V/m" ,"Pre-exponential coefficient for GISL" ) `MPRnb( AGISLL ,AGIDLL ,"m" ,"Length dependence coefficient of AGISL" ) `MPRnb( AGISLW ,AGIDLW ,"m" ,"Width dependence coefficient of AGISL" ) `MPRnb( LAGISL ,LAGIDL ,"m^2" ,"Length dependence of AGISL" ) `MPRnb( WAGISL ,WAGIDL ,"m^2" ,"Width dependence of AGISL" ) `MPRnb( PAGISL ,PAGIDL ,"m^3" ,"Area dependence of AGISL" ) `MPRnb( BGISL ,BGIDL ,"V/m" ,"Exponential coefficient for GISL" ) `MPRnb( LBGISL ,LBGIDL ,"V" ,"Length dependence of BGISL" ) `MPRnb( WBGISL ,WBGIDL ,"V" ,"Width dependence of BGISL" ) `MPRnb( PBGISL ,PBGIDL ,"V*m" ,"Area dependence of BGISL" ) `MPRnb( CGISL ,CGIDL ,"V/m" ,"Exponential coefficient for GISL" ) `MPRnb( LCGISL ,LCGIDL ,"V" ,"Length dependence of CGISL" ) `MPRnb( WCGISL ,WCGIDL ,"V" ,"Width dependence of CGISL" ) `MPRnb( PCGISL ,PCGIDL ,"V*m" ,"Area dependence of CGISL" ) `MPRnb( EGISL ,EGIDL ,"V" ,"Band bending parameter for GISL" ) `MPRnb( LEGISL ,LEGIDL ,"V*m" ,"Length dependence of EGISL" ) `MPRnb( WEGISL ,WEGIDL ,"V*m" ,"Width dependence of EGISL" ) `MPRnb( PEGISL ,PEGIDL ,"V*m^2" ,"Area dependence of EGISL" ) // Overlap capacitance and fringing capacitance `MPRnb( CF ,0.0 ,"F/m" ,"Outer Fringe capacitance" ) `MPRnb( LCF ,0.0 ,"F" ,"Length dependence of CF" ) `MPRnb( WCF ,0.0 ,"F" ,"Width dependence of CF" ) `MPRnb( PCF ,0.0 ,"F*m" ,"Area dependence of CF" ) `MPRco( CFRCOEFF ,1.0 ,"F/m" ,1.0 ,inf ,"Coefficient for Outer Fringe capacitance" ) `MPRnb( CGSO ,0.0 ,"F/m" ,"Gate - Source overlap capacitance" ) `MPRnb( CGDO ,0.0 ,"F/m" ,"Gate - Drain overlap capacitance" ) `MPRnb( CGBO ,0.0 ,"F/m" ,"Gate - Body overlap capacitance" ) `MPRnb( CGSL ,0.0 ,"F/m" ,"Overlap capacitance between gate and lightly-doped source region" ) `MPRnb( LCGSL ,0.0 ,"" ,"Length dependence of CGSL" ) `MPRnb( WCGSL ,0.0 ,"" ,"Width dependence of CGSL" ) `MPRnb( PCGSL ,0.0 ,"" ,"Area dependence of CGSL" ) `MPRnb( CGDL ,0.0 ,"F/m" ,"Overlap capacitance between gate and lightly-doped drain region" ) `MPRnb( LCGDL ,0.0 ,"F" ,"Length dependence of CGDL" ) `MPRnb( WCGDL ,0.0 ,"F" ,"Width dependence of CGDL" ) `MPRnb( PCGDL ,0.0 ,"F*m" ,"Area dependence of CGDL" ) `MPRnb( CKAPPAS ,0.6 ,"V" ,"Coefficient of bias-dependent overlap capacitance for the source side" ) `MPRnb( LCKAPPAS ,0.0 ,"m*V" ,"Length dependence of CKAPPAS" ) `MPRnb( WCKAPPAS ,0.0 ,"m*V" ,"Width dependence of CKAPPAS" ) `MPRnb( PCKAPPAS ,0.0 ,"m^2*V" ,"Area dependence of CKAPPAS" ) `MPRnb( CKAPPAD ,0.6 ,"V" ,"Coefficient of bias-dependent overlap capacitance for the drain side" ) `MPRnb( LCKAPPAD ,0.0 ,"m*V" ,"Length dependence of CKAPPAD" ) `MPRnb( WCKAPPAD ,0.0 ,"m*V" ,"Width dependence of CKAPPAD" ) `MPRnb( PCKAPPAD ,0.0 ,"m^2*V" ,"Area dependence of CKAPPAD" ) // Layout-dependent parasitics model parameters (resistance only) `MPRnb( DMCG ,0.0 ,"m" ,"Distance of Mid-Contact to Gate edge" ) `MPRnb( DMCI ,DMCG ,"m" ,"Distance of Mid-Contact to Isolation" ) `MPRnb( DMDG ,0.0 ,"m" ,"Distance of Mid-Diffusion to Gate edge" ) `MPRnb( DMCGT ,0.0 ,"m" ,"Distance of Mid-Contact to Gate edge in Test" ) `MPRoo( XGL ,0.0 ,"m" ,-inf ,L*LMLT+XL ,"Variation in Ldrawn" ) `MPRcz( RSHG ,0.1 ,"ohm" ,"Gate sheet resistance" ) // Junction capacitance `MPRnb( CJS ,5.0e-4 ,"F/m^2" ,"Unit area source-side junction capacitance at zero bias" ) `MPRnb( CJD ,CJS ,"F/m^2" ,"Unit area drain-side junction capacitance at zero bias" ) `MPRnb( CJSWS ,5.0e-10 ,"F/m" ,"Unit length source-side side-wall junction capacitance at zero bias" ) `MPRnb( CJSWD ,CJSWS ,"F/m" ,"Unit length drain-side side-wall junction capacitance at zero bias" ) `MPRnb( CJSWGS ,0.0 ,"F/m" ,"Unit length source-side gate side-wall junction capacitance at zero bias" ) `MPRnb( CJSWGD ,CJSWGS ,"F/m" ,"Unit length drain-side gate side-wall junction capacitance at zero bias" ) `MPRnb( PBS ,1.0 ,"V" ,"Source-side bulk junction built-in potential" ) `MPRnb( PBD ,PBS ,"V" ,"Drain-side bulk junction built-in potential" ) `MPRnb( PBSWS ,1.0 ,"V" ,"Built-in potential for Source-side side-wall junction capacitance" ) `MPRnb( PBSWD ,PBSWS ,"V" ,"Built-in potential for Drain-side side-wall junction capacitance" ) `MPRnb( PBSWGS ,PBSWS ,"V" ,"Built-in potential for Source-side gate side-wall junction capacitance" ) `MPRnb( PBSWGD ,PBSWGS ,"V" ,"Built-in potential for Drain-side gate side-wall junction capacitance" ) `MPRnb( MJS ,0.5 ,"" ,"Source bottom junction capacitance grading coefficient" ) `MPRnb( MJD ,MJS ,"" ,"Drain bottom junction capacitance grading coefficient" ) `MPRnb( MJSWS ,0.33 ,"" ,"Source side-wall junction capacitance grading coefficient" ) `MPRnb( MJSWD ,MJSWS ,"" ,"Drain side-wall junction capacitance grading coefficient" ) `MPRnb( MJSWGS ,MJSWS ,"" ,"Source-side gate side-wall junction capacitance grading coefficient" ) `MPRnb( MJSWGD ,MJSWGS ,"" ,"Drain-side gate side-wall junction capacitance grading coefficient" ) // Junction current `MPRnb( JSS ,1.0e-4 ,"A/m^2" ,"Bottom source junction reverse saturation current density" ) `MPRnb( JSD ,JSS ,"A/m^2" ,"Bottom drain junction reverse saturation current density" ) `MPRnb( JSWS ,0.0 ,"A/m" ,"Unit length reverse saturation current for side-wall source junction" ) `MPRnb( JSWD ,JSWS ,"A/m" ,"Unit length reverse saturation current for side-wall drain junction" ) `MPRnb( JSWGS ,0.0 ,"A/m" ,"Unit length reverse saturation current for gate-edge side-wall source junction" ) `MPRnb( JSWGD ,JSWGS ,"A/m" ,"Unit length reverse saturation current for gate-edge side-wall drain junction" ) `MPRoz( NJS ,1.0 ,"" ,"Source junction emission coefficient" ) `MPRoz( NJD ,NJS ,"" ,"Drain junction emission coefficient" ) `MPRnb( IJTHSFWD ,0.1 ,"A" ,"Forward source diode breakdown limiting current" ) `MPRnb( IJTHDFWD ,IJTHSFWD ,"A" ,"Forward drain diode breakdown limiting current" ) `MPRnb( IJTHSREV ,0.1 ,"A" ,"Reverse source diode breakdown limiting current" ) `MPRnb( IJTHDREV ,IJTHSREV ,"A" ,"Reverse drain diode breakdown limiting current" ) `MPRnb( BVS ,10.0 ,"V" ,"Source diode breakdown voltage" ) `MPRnb( BVD ,BVS ,"V" ,"Drain diode breakdown voltage" ) `MPRoz( XJBVS ,1.0 ,"" ,"Fitting parameter for source diode breakdown current" ) `MPRoz( XJBVD ,XJBVS ,"" ,"Fitting parameter for drain diode breakdown current" ) // Tunneling component of junction current `MPRnb( JTSS ,0.0 ,"A/m" ,"Bottom source junction trap-assisted saturation current density" ) `MPRnb( JTSD ,JTSS ,"A/m" ,"Bottom drain junction trap-assisted saturation current density" ) `MPRnb( JTSSWS ,0.0 ,"A/m^2" ,"Unit length trap-assisted saturation current for side-wall source junction" ) `MPRnb( JTSSWD ,JTSSWS ,"A/m^2" ,"Unit length trap-assisted saturation current for side-wall drain junction" ) `MPRnb( JTSSWGS ,0.0 ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge side-wall source junction" ) `MPRnb( JTSSWGD ,JTSSWGS ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge side-wall drain junction" ) `MPRcz( JTWEFF ,0.0 ,"" ,"Trap assisted tunnelling current width dependence" ) `MPRnb( NJTS ,20.0 ,"" ,"Non-ideality factor for JTSS" ) `MPRnb( NJTSD ,NJTS ,"" ,"Non-ideality factor for JTSD" ) `MPRnb( NJTSSW ,20.0 ,"" ,"Non-ideality factor for JTSSWS" ) `MPRnb( NJTSSWD ,NJTSSW ,"" ,"Non-ideality factor for JTSSWD" ) `MPRnb( NJTSSWG ,20.0 ,"" ,"Non-ideality factor for JTSSWGS" ) `MPRnb( NJTSSWGD ,NJTSSWG ,"" ,"Non-ideality factor for JTSSWGD" ) `MPRnb( VTSS ,10.0 ,"V" ,"Bottom source junction trap-assisted current voltage dependent parameter" ) `MPRnb( VTSD ,VTSS ,"V" ,"Bottom drain junction trap-assisted current voltage dependent parameter" ) `MPRnb( VTSSWS ,10.0 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for side-wall source junction" ) `MPRnb( VTSSWD ,VTSSWS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for side-wall drain junction" ) `MPRnb( VTSSWGS ,10.0 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge side-wall source junction" ) `MPRnb( VTSSWGD ,VTSSWGS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge side-wall drain junction" ) // High-speed/RF model parameters `MPRnb( XRCRG1 ,12.0 ,"" ,"1st fitting parameter the bias-dependent Rg " ) `MPRnb( XRCRG2 ,1.0 ,"" ,"2nd fitting parameter the bias-dependent Rg " ) `MPRcz( GBMIN ,1.0e-12 ,"mho" ,"Minimum body conductance" ) `MPRoz( RBPS0 ,50.0 ,"ohm" ,"Scaling pre-factor for RBPS" ) `MPRcz( RBPSL ,0.0 ,"" ,"Length Scaling parameter for RBPS" ) `MPRcz( RBPSW ,0.0 ,"" ,"Width Scaling parameter for RBPS" ) `MPRcz( RBPSNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBPS" ) `MPRoz( RBPD0 ,50.0 ,"ohm" ,"Scaling pre-factor for RBPD" ) `MPRcz( RBPDL ,0.0 ,"" ,"Length Scaling parameter for RBPD" ) `MPRcz( RBPDW ,0.0 ,"" ,"Width Scaling parameter for RBPD" ) `MPRcz( RBPDNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBPD" ) `MPRoz( RBPBX0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBPBX" ) `MPRcz( RBPBXL ,0.0 ,"" ,"Length Scaling parameter for RBPBX" ) `MPRcz( RBPBXW ,0.0 ,"" ,"Width Scaling parameter for RBPBX" ) `MPRcz( RBPBXNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBPBX" ) `MPRoz( RBPBY0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBPBY" ) `MPRcz( RBPBYL ,0.0 ,"" ,"Length Scaling parameter for RBPBY" ) `MPRcz( RBPBYW ,0.0 ,"" ,"Width Scaling parameter for RBPBY" ) `MPRcz( RBPBYNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBPBY" ) `MPRoz( RBSBX0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBSBX" ) `MPRoz( RBSBY0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBSBY" ) `MPRoz( RBDBX0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBDBX" ) `MPRoz( RBDBY0 ,100.0 ,"ohm" ,"Scaling pre-factor for RBDBY" ) `MPRcz( RBSDBXL ,0.0 ,"" ,"Length Scaling parameter for RBSBX and RBDBX" ) `MPRcz( RBSDBXW ,0.0 ,"" ,"Width Scaling parameter for RBSBX and RBDBX" ) `MPRcz( RBSDBXNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBSBX and RBDBX" ) `MPRcz( RBSDBYL ,0.0 ,"" ,"Length Scaling parameter for RBSBY and RBDBY" ) `MPRcz( RBSDBYW ,0.0 ,"" ,"Width Scaling parameter for RBSBY and RBDBY" ) `MPRcz( RBSDBYNF ,0.0 ,"" ,"Number of fingers Scaling parameter for RBSBY and RBDBY" ) // Flicker noise `MPRoc( EF ,1.0 ,"" ,0 ,2 ,"Flicker Noise frequency exponent" ) `MPRnb( EM ,4.1e7 ,"V/m" ,"Saturation Field" ) `MPRnb( NOIA ,6.250e+40 ,"s^(1-EF)/(eV)^1/m^3" ,"Flicker noise parameter A" ) `MPRnb( NOIB ,3.125e+25 ,"s^(1-EF)/(eV)^1/m" ,"Flicker noise parameter B" ) `MPRnb( NOIC ,8.750e+8 ,"s^(1-EF)*m/(eV)^1" ,"Flicker noise parameter C" ) `MPRnb( LINTNOI ,0.0 ,"m" ,"Length Reduction Parameter Offset" ) // Thermal noise `MPRcz( NTNOI ,1.0 ,"" ,"Noise factor for short-channel devices for TNOIMOD=0 only" ) `MPRnb( RNOIA ,0.577 ,"" ,"TNOIMOD = 1" ) `MPRnb( RNOIB ,0.5164 ,"" ,"TNOIMOD = 1" ) `MPRnb( RNOIC ,0.395 ,"" ,"TNOIMOD = 1" ) `MPRoo( TNOIA ,0.0 ,"" ,-inf ,inf ,"TNOIMOD = 1" ) `MPRoo( TNOIB ,0.0 ,"" ,-inf ,inf ,"TNOIMOD = 1" ) `MPRoo( TNOIC ,0.0 ,"" ,-inf ,inf ,"Correlation coefficient" ) // Binning parameters `MPIcc( BINUNIT ,1 ,"" ,0 ,1 ,"Unit of L and W for Binning, 1 : micro-meter, 0 : default" ) `MPRnb( DLBIN ,0.0 ,"" ,"Length reduction parameter for binning" ) `MPRnb( DWBIN ,0.0 ,"" ,"Width reduction parameter for binning" ) // Temperature dependence parameters `MPRnb( TNOM ,27.0 ,"degC" ,"Temperature at which the model was extracted" ) `MPRnb( TBGASUB ,4.73e-4 ,"eV/K" ,"Band-gap Temperature Coefficient" ) `MPRnb( TBGBSUB ,636.0 ,"K" ,"Band-gap Temperature Coefficient" ) `MPRnb( TNFACTOR ,0.0 ,"" ,"Temperature exponent for NFACTOR" ) `MPRnb( UTE ,-1.5 ,"" ,"Mobility temperature exponent" ) `MPRnb( LUTE ,0.0 ,"m" ,"Length dependence of UTE" ) `MPRnb( WUTE ,0.0 ,"m" ,"Width dependence of UTE" ) `MPRnb( PUTE ,0.0 ,"m^2" ,"Area dependence of UTE" ) `MPRnb( UTEL ,0.0 ,"m" ,"Length Scaling parameter for UTE" ) `MPRnb( UA1 ,1.0e-3 ,"m/V" ,"Temperature coefficient for UA" ) `MPRnb( LUA1 ,0.0 ,"m^2/V" ,"Length dependence of UA1" ) `MPRnb( WUA1 ,0.0 ,"m^2/V" ,"Width dependence of UA1" ) `MPRnb( PUA1 ,0.0 ,"m^3/V" ,"Area dependence of UA1" ) `MPRnb( UA1L ,0.0 ,"m" ,"Length Scaling parameter for UA1" ) `MPRnb( UC1 ,0.056e-9 ,"1/K" ,"Temperature coefficient for UC" ) `MPRnb( LUC1 ,0.0 ,"m/K" ,"Length dependence of UC1" ) `MPRnb( WUC1 ,0.0 ,"m/K" ,"Width dependence of UC1" ) `MPRnb( PUC1 ,0.0 ,"m^2/K" ,"Area dependence of UC1" ) `MPRnb( UD1 ,0.0 ,"1/m^2" ,"Temperature coefficient for UD" ) `MPRnb( LUD1 ,0.0 ,"1/m" ,"Length dependence of UD1" ) `MPRnb( WUD1 ,0.0 ,"1/m" ,"Width dependence of UD1" ) `MPRnb( PUD1 ,0.0 ,"" ,"Area dependence of UD1" ) `MPRnb( UD1L ,0.0 ,"m" ,"Length Scaling parameter for UD1" ) `MPRnb( UCSTE ,-4.775e-3 ,"" ,"Temperature coefficient for UCS" ) `MPRnb( LUCSTE ,0.0 ,"m" ,"Length dependence of UCSTE" ) `MPRnb( WUCSTE ,0.0 ,"m" ,"Width dependence of UCSTE" ) `MPRnb( PUCSTE ,0.0 ,"m^2" ,"Area dependence of UCSTE" ) `MPRnb( TETA0 ,0.0 ,"" ,"Temperature coefficient for ETA0" ) `MPRnb( PRT ,0.0 ,"" ,"Temperature coefficient for resistance" ) `MPRnb( LPRT ,0.0 ,"m" ,"Length dependence of PRT" ) `MPRnb( WPRT ,0.0 ,"m" ,"Width dependence of PRT" ) `MPRnb( PPRT ,0.0 ,"m^2" ,"Area dependence of PRT" ) `MPRnb( AT ,-1.56e-3 ,"m/s" ,"Temperature coefficient for saturation velocity" ) `MPRnb( LAT ,0.0 ,"m^2/s" ,"Length dependence of AT" ) `MPRnb( WAT ,0.0 ,"m^2/s" ,"Width dependence of AT" ) `MPRnb( PAT ,0.0 ,"m^3/s" ,"Area dependence of AT" ) `MPRnb( ATL ,0.0 ,"m" ,"Length Scaling parameter for AT" ) `MPRnb( TDELTA ,0.0 ,"1/K" ,"Temperature coefficient for DELTA" ) `MPRnb( PTWGT ,0.0 ,"1/K" ,"Temperature coefficient for PTWG" ) `MPRnb( LPTWGT ,0.0 ,"m/K" ,"Length dependence of PTWGT" ) `MPRnb( WPTWGT ,0.0 ,"m/K" ,"Width dependence of PTWGT" ) `MPRnb( PPTWGT ,0.0 ,"m^2/K" ,"Area dependence of PTWGT" ) `MPRnb( PTWGTL ,0.0 ,"m" ,"Length Scaling parameter for PTWGT" ) `MPRnb( KT1 ,-0.11 ,"V" ,"Temperature coefficient for Vth" ) `MPRoz( KT1EXP ,1.0 ,"" ,"Temperature coefficient for Vth" ) `MPRnb( KT1L ,0.0 ,"V*m" ,"Temperature coefficient for Vth" ) `MPRnb( LKT1 ,0.0 ,"V*m" ,"Length dependence of KT1" ) `MPRnb( WKT1 ,0.0 ,"V*m" ,"Width dependence of KT1" ) `MPRnb( PKT1 ,0.0 ,"V*m^2" ,"Area dependence of KT1" ) `MPRnb( KT2 ,0.022 ,"" ,"Temperature coefficient for Vth" ) `MPRnb( LKT2 ,0.0 ,"m" ,"Length dependence of KT2" ) `MPRnb( WKT2 ,0.0 ,"m" ,"Width dependence of KT2" ) `MPRnb( PKT2 ,0.0 ,"m^2" ,"Area dependence of KT2" ) `MPRnb( IIT ,0.0 ,"" ,"Temperature coefficient for BETA0" ) `MPRnb( LIIT ,0.0 ,"m" ,"Length dependence of IIT" ) `MPRnb( WIIT ,0.0 ,"m" ,"Width dependence of IIT" ) `MPRnb( PIIT ,0.0 ,"m^2" ,"Area dependence of IIT" ) `MPRnb( IGT ,2.5 ,"" ,"Gate Current Temperature Dependence" ) `MPRnb( LIGT ,0.0 ,"m" ,"Length dependence of IGT" ) `MPRnb( WIGT ,0.0 ,"m" ,"Width dependence of IGT" ) `MPRnb( PIGT ,0.0 ,"m^2" ,"Area dependence of IGT" ) `MPRnb( TGIDL ,0.0 ,"1/K" ,"Temperature coefficient for GIDL/GISL" ) `MPRnb( LTGIDL ,0.0 ,"m/K" ,"Length dependence of TGIDL" ) `MPRnb( WTGIDL ,0.0 ,"m/K" ,"Width dependence of TGIDL" ) `MPRnb( PTGIDL ,0.0 ,"m^2/K" ,"Area dependence of TGIDL" ) `MPRnb( TCJ ,0.0 ,"1/K" ,"Temperature coefficient for CJS/CJD" ) `MPRnb( TCJSW ,0.0 ,"1/K" ,"Temperature coefficient for CJSWS/CJSWD" ) `MPRnb( TCJSWG ,0.0 ,"1/K" ,"Temperature coefficient for CJSWGS/CJSWGD" ) `MPRnb( TPB ,0.0 ,"V/K" ,"Temperature coefficient for PBS/PBD" ) `MPRnb( TPBSW ,0.0 ,"V/K" ,"Temperature coefficient for PBSWS/PBSWD" ) `MPRnb( TPBSWG ,0.0 ,"V/K" ,"Temperature coefficient for PBSWGS/PBSWGD" ) `MPRnb( XTIS ,3.0 ,"" ,"Source junction current temperature exponent" ) `MPRnb( XTID ,XTIS ,"" ,"Drain junction current temperature exponent" ) `MPRnb( XTSS ,0.02 ,"" ,"Power dependence of JTSS on temperature" ) `MPRnb( XTSD ,XTSS ,"" ,"Power dependence of JTSD on temperature" ) `MPRnb( XTSSWS ,0.02 ,"" ,"Power dependence of JTSSWS on temperature" ) `MPRnb( XTSSWD ,XTSSWS ,"" ,"Power dependence of JTSSWD on temperature" ) `MPRnb( XTSSWGS ,0.02 ,"" ,"Power dependence of JTSSWGS on temperature" ) `MPRnb( XTSSWGD ,XTSSWGS ,"" ,"Power dependence of JTSSWGD on temperature" ) `MPRnb( TNJTS ,0.0 ,"" ,"Temperature coefficient for NJTS" ) `MPRnb( TNJTSD ,TNJTS ,"" ,"Temperature coefficient for NJTSD" ) `MPRnb( TNJTSSW ,0.0 ,"" ,"Temperature coefficient for NJTSSW" ) `MPRnb( TNJTSSWD ,TNJTSSW ,"" ,"Temperature coefficient for NJTSSWD" ) `MPRnb( TNJTSSWG ,0.0 ,"" ,"Temperature coefficient for NJTSSWG" ) `MPRnb( TNJTSSWGD ,TNJTSSWG ,"" ,"Temperature coefficient for NJTSSWGD" ) // Self heating parameters `MPRco( RTH0 ,0.0 ,"m*K/W" ,0 ,inf ,"Thermal resistance" ) `MPRco( CTH0 ,1.0E-05 ,"s*W/(m*K)" ,0 ,inf ,"Thermal capacitance" ) `MPRnb( WTH0 ,0.0 ,"m" ,"Width dependence coefficient for Rth and Cth" ) // Stress related parameters `MPRoz( SAREF ,1.0e-6 ,"m" ,"Reference distance between OD edge from Poly from one side" ) `MPRoz( SBREF ,1.0e-6 ,"m" ,"Reference distance between OD edge from Poly from other side" ) `MPRcz( WLOD ,0.0 ,"m" ,"Width Parameter for Stress Effect" ) `MPRnb( KU0 ,0.0 ,"m" ,"Mobility degradation/enhancement Parameter for Stress Effect" ) `MPRnb( KVSAT ,0.0 ,"m" ,"Saturation Velocity degradation/enhancement Parameter for Stress Effect" ) `MPRnb( TKU0 ,0.0 ,"" ,"Temperature Coefficient for KU0" ) `MPRnb( LKU0 ,0.0 ,"m^LLODKU0" ,"Length Dependence of KU0" ) `MPRnb( WKU0 ,0.0 ,"m^WLODKU0" ,"Width Dependence of KU0" ) `MPRnb( PKU0 ,0.0 ,"m^(LLODKU0+WLODKU0)" ,"Cross Term Dependence of KU0" ) `MPRnb( LLODKU0 ,0.0 ,"" ,"Length Parameter for U0 stress effect" ) `MPRnb( WLODKU0 ,0.0 ,"" ,"Width Parameter for U0 stress effect" ) `MPRnb( KVTH0 ,0.0 ,"V*m" ,"Threshold Shift parameter for stress effect" ) `MPRnb( LKVTH0 ,0.0 ,"m^LLODKU0" ,"Length dependence of KVTH0" ) `MPRnb( WKVTH0 ,0.0 ,"m^WLODKU0" ,"Width dependence of KVTH0" ) `MPRnb( PKVTH0 ,0.0 ,"m^(LLODKU0+WLODKU0)" ,"Cross-term dependence of KVTH0" ) `MPRnb( LLODVTH ,0.0 ,"" ,"Length Parameter for Vth stress effect" ) `MPRnb( WLODVTH ,0.0 ,"" ,"Width Parameter for Vth stress effect" ) `MPRnb( STK2 ,0.0 ,"m" ,"K2 shift factor related to Vth change" ) `MPRnb( LODK2 ,0.0 ,"" ,"K2 shift modification factor for stress effect" ) `MPRnb( STETA0 ,0.0 ,"m" ,"ETA0 shift related to Vth0 change" ) `MPRnb( LODETA0 ,0.0 ,"" ,"ETA0 modification factor for stress effect" ) // Well proximity parameters `MPRnb( WEB ,0.0 ,"" ,"Coefficient for SCB (>0.0)" ) `MPRnb( WEC ,0.0 ,"" ,"Coefficient for SCC (>0.0)" ) `MPRnb( KVTH0WE ,0.0 ,"" ,"Threshold shift factor for well proximity effect" ) `MPRnb( LKVTH0WE ,0.0 ,"m" ,"Length dependence of KVTH0WE" ) `MPRnb( WKVTH0WE ,0.0 ,"m" ,"Width dependence of KVTH0WE" ) `MPRnb( PKVTH0WE ,0.0 ,"m^2" ,"Area dependence of KVTH0WE" ) `MPRnb( K2WE ,0.0 ,"" ,"K2 shift factor for well proximity effect" ) `MPRnb( LK2WE ,0.0 ,"m" ,"Length dependence of K2WE" ) `MPRnb( WK2WE ,0.0 ,"m" ,"Width dependence of K2WE" ) `MPRnb( PK2WE ,0.0 ,"m^2" ,"Area dependence of K2WE" ) `MPRnb( KU0WE ,0.0 ,"" ,"Mobility degradation factor for well proximity effect" ) `MPRnb( LKU0WE ,0.0 ,"m" ,"Length dependence of KU0WE" ) `MPRnb( WKU0WE ,0.0 ,"m" ,"Width dependence of KU0WE" ) `MPRnb( PKU0WE ,0.0 ,"m^2" ,"Area dependence of KU0WE" ) `MPRoo( SCREF ,1.0e-6 ,"m" ,0 ,inf ,"Reference distance to calculate SCA,SCB and SCC (<0)" ) // Sub-surface leakage drain current `MPRnb( SSL0 ,4.0e2 ,"A/m" ,"Temperature- and doping-independent parameter for sub-surface leakage drain current") `MPRnb( SSL1 ,3.36e8 ,"1/m" ,"Temperature- and doping-independent parameter for gate length for sub-surface leakage drain current") `MPRnb( SSL2 ,0.185 ,"" ,"Fitting parameter for sub-surface leakage drain current: barrier height") `MPRnb( SSL3 ,0.3 ,"V" ,"Fitting parameter for sub-surface leakage drain current: gate voltage effect") `MPRnb( SSL4 ,1.4 ,"1/V" ,"Fitting parameter for sub-surface leakage drain current: gate voltage effect") `MPRnb( SSLEXP1 ,0.490 ,"" ,"Fitting exponent for ssl doping effect") `MPRnb( SSLEXP2 ,1.42 ,"" ,"Fitting exponent for ssl temperature") // Vdsx smoothing `MPRco( AVDSX ,20 ,"" ,5 ,100 ,"Smoothing parameter in Vdsx in Vbsx" ) // STI edge FET device parameters `MPRco( WEDGE ,10.0e-9 ,"m" ,1.0e-9 ,inf ,"Edge FET Width" ) `MPRoo( DGAMMAEDGE ,0.0 ,"" ,-inf ,inf ,"Different in body-bias coefficient between Edge-FET and Main-FET" ) `MPRoo( DGAMMAEDGEL ,0.0 ,"" ,-inf ,inf ,"L dependence parameter for DGAMMA" ) `MPRoo( DGAMMAEDGELEXP ,1.0 ,"" ,-inf ,inf ,"Exponent of L dependence parameter for DGAMMA" ) `MPRoo( DVTEDGE ,0.0 ,"" ,-inf ,inf ,"Vth shift for Edge FET" ) `MPRnb( NFACTOREDGE ,NFACTOR ,"" ,"NFACTOR for Edge FET" ) `MPRnb( LNFACTOREDGE ,LNFACTOR ,"m" ,"Length dependence of NFACTOREDGE" ) `MPRnb( WNFACTOREDGE ,WNFACTOR ,"m" ,"Width dependence of NFACTOREDGE" ) `MPRnb( PNFACTOREDGE ,PNFACTOR ,"m^2" ,"Area dependence of NFACTOREDGE" ) `MPRnb( CITEDGE ,CIT ,"F/m^2" ,"CIT for Edge FET" ) `MPRnb( LCITEDGE ,LCIT ,"F/m" ,"Length dependence of CITEDGE" ) `MPRnb( WCITEDGE ,WCIT ,"F/m" ,"Width dependence of CITEDGE" ) `MPRnb( PCITEDGE ,PCIT ,"F" ,"Area dependence of CITEDGE" ) `MPRnb( CDSCDEDGE ,CDSCD ,"F/m^2/V" ,"CDSCD for edge FET" ) `MPRnb( LCDSCDEDGE ,LCDSCD ,"F/m/V" ,"Length dependence of CDSCDEDGE" ) `MPRnb( WCDSCDEDGE ,WCDSCD ,"F/m/V" ,"Width dependence of CDSCDEDGE" ) `MPRnb( PCDSCDEDGE ,PCDSCD ,"F/V" ,"Area dependence of CDSCDEDGE" ) `MPRnb( CDSCBEDGE ,CDSCB ,"F/m^2/V" ,"CDSCB for edge FET" ) `MPRnb( LCDSCBEDGE ,LCDSCB ,"F/m/V" ,"Length dependence of CDSCBEDGE" ) `MPRnb( WCDSCBEDGE ,WCDSCB ,"F/m/V" ,"Width dependence of CDSCBEDGE" ) `MPRnb( PCDSCBEDGE ,PCDSCB ,"F/V" ,"Area dependence of CDSCBEDGE" ) `MPRnb( ETA0EDGE ,ETA0 ,"" ,"DIBL parameter for edge FET" ) `MPRnb( LETA0EDGE ,LETA0 ,"m" ,"Length dependence of ETA0EDGE" ) `MPRnb( WETA0EDGE ,WETA0 ,"m" ,"Width dependence of ETA0EDGE" ) `MPRnb( PETA0EDGE ,PETA0 ,"m^2" ,"Area dependence of ETA0EDGE" ) `MPRnb( ETABEDGE ,ETAB ,"1/V" ,"ETAB for edge FET" ) `MPRnb( LETABEDGE ,LETAB ,"m/V" ,"Length dependence of ETABEDGE" ) `MPRnb( WETABEDGE ,WETAB ,"m/V" ,"Width dependence of ETABEDGE" ) `MPRnb( PETABEDGE ,PETAB ,"m^2/V" ,"Area dependence of ETABEDGE" ) `MPRnb( KT1EDGE ,KT1 ,"V" ,"Temperature dependence parameter of threshold voltage for edge FET" ) `MPRnb( LKT1EDGE ,LKT1 ,"V*m" ,"Length dependence of KT1EDGE" ) `MPRnb( WKT1EDGE ,WKT1 ,"V*m" ,"Width dependence of KT1EDGE" ) `MPRnb( PKT1EDGE ,PKT1 ,"V*m^2" ,"Area dependence of KT1EDGE" ) `MPRnb( KT1LEDGE ,KT1L ,"V*m" ,"Temperature dependence parameter of threshold voltage for edge FET" ) `MPRnb( LKT1LEDGE ,0.0 ,"V*m^2" ,"Length dependence of KT1LEDGE" ) `MPRnb( WKT1LEDGE ,0.0 ,"V*m^2" ,"Width dependence of KT1LEDGE" ) `MPRnb( PKT1LEDGE ,0.0 ,"V*m^3" ,"Area dependence of KT1LEDGE" ) `MPRnb( KT2EDGE ,KT2 ,"" ,"Temperature dependence parameter of threshold voltage for edge FET" ) `MPRnb( LKT2EDGE ,LKT2 ,"m" ,"Length dependence of KT2EDGE" ) `MPRnb( WKT2EDGE ,WKT2 ,"m" ,"Width dependence of KT2EDGE" ) `MPRnb( PKT2EDGE ,PKT2 ,"m^2" ,"Area dependence of KT2EDGE" ) `MPRnb( KT1EXPEDGE ,KT1EXP ,"" ,"Temperature dependence parameter of threshold voltage for edge device" ) `MPRnb( LKT1EXPEDGE ,0.0 ,"m" ,"Length dependence of KT1EXPEDGE" ) `MPRnb( WKT1EXPEDGE ,0.0 ,"m" ,"Width dependence of KT1EXPEDGE" ) `MPRnb( PKT1EXPEDGE ,0.0 ,"m^2" ,"Area dependence of KT1EXPEDGE" ) `MPRnb( TNFACTOREDGE ,TNFACTOR ,"" ,"Temperature dependence parameter of sub-threshold slope factor for edge" ) `MPRnb( LTNFACTOREDGE ,0.0 ,"m" ,"Length dependence of TNFACTOREDGE" ) `MPRnb( WTNFACTOREDGE ,0.0 ,"m" ,"Width dependence of TNFACTOREDGE" ) `MPRnb( PTNFACTOREDGE ,0.0 ,"m^2" ,"Area dependence of TNFACTOREDGE" ) `MPRnb( TETA0EDGE ,TETA0 ,"" ,"Temperature dependence parameter of DIBL parameter for edge FET" ) `MPRnb( LTETA0EDGE ,0.0 ,"m" ,"Length dependence of TETA0EDGE" ) `MPRnb( WTETA0EDGE ,0.0 ,"m" ,"Width dependence of TETA0EDGE" ) `MPRnb( PTETA0EDGE ,0.0 ,"m^2" ,"Area dependence of TETA0EDGE" ) `MPRnb( DVT0EDGE ,2.2 ,"" ,"First coefficient of SCE effect on Vth for Edge FET" ) `MPRnb( DVT1EDGE ,0.53 ,"" ,"Second coefficient of SCE effect on Vth for Edge FET" ) `MPRnb( DVT2EDGE ,0.0 ,"1/V" ,"Body-bias coefficient for SCE effect for Edge FET" ) `MPRnb( K2EDGE ,K2 ,"V" ,"Vth shift due to Vertical Non-uniform doping" ) `MPRnb( LK2EDGE ,LK2 ,"m" ,"Length dependence of K2EDGE" ) `MPRnb( WK2EDGE ,WK2 ,"m" ,"Width dependence of K2EDGE" ) `MPRnb( PK2EDGE ,PK2 ,"m^2" ,"Area dependence of K2EDGE" ) `MPRnb( KVTH0EDGE ,KVTH0 ,"V*m" ,"Threshold Shift parameter for stress effect" ) `MPRnb( LKVTH0EDGE ,LKVTH0 ,"m^LLODKU0" ,"Length dependence of KVTH0EDGE" ) `MPRnb( WKVTH0EDGE ,WKVTH0 ,"m^WLODKU0" ,"Width dependence of KVTH0EDGE" ) `MPRnb( PKVTH0EDGE ,PKVTH0 ,"m^(LLODKU0+WLODKU0)" ,"Area dependence of KVTH0EDGE" ) `MPRnb( STK2EDGE ,STK2 ,"m" ,"K2 shift factor related to Vth change" ) `MPRnb( LSTK2EDGE ,0.0 ,"m^2" ,"Length dependence of STK2EDGE" ) `MPRnb( WSTK2EDGE ,0.0 ,"m^2" ,"Width dependence of STK2EDGE" ) `MPRnb( PSTK2EDGE ,0.0 ,"m^3" ,"Area dependence of STK2EDGE" ) `MPRnb( STETA0EDGE ,STETA0 ,"m" ,"ETA0 shift related to Vth0 change" ) `MPRnb( LSTETA0EDGE ,0.0 ,"m^2" ,"Length dependence of STETA0EDGE" ) `MPRnb( WSTETA0EDGE ,0.0 ,"m^2" ,"Width dependence of STETA0EDGE" ) `MPRnb( PSTETA0EDGE ,0.0 ,"m^3" ,"Area dependence of STETA0EDGE" ) `MPIcc( IGCLAMP ,1 ,"" ,0 ,1 ,"Model flag" ) `MPRoz( LP ,10u ,"m" ,"Length scaling parameter for thermal noise" ) `MPRnb( RNOIK ,0.0 ,"" ,"Exponential coefficient for enhanced correlated thermal noise" ) `MPRoo( TNOIK ,0.0 ,"1/m" ,-inf ,inf ,"Empirical parameter for Leff trend of Sid at low Ids" ) `MPRcz( TNOIK2 ,0.1 ,"1/m" ,"Empirical parameter for sensitivity of RNOIK" ) `MPRnb( K0 ,0.0 ,"" ,"Non-saturation effect parameter for strong inversion region" ) `MPRnb( LK0 ,0.0 ,"m" ,"Length dependence of " ) `MPRnb( WK0 ,0.0 ,"m" ,"Width dependence of " ) `MPRnb( PK0 ,0.0 ,"m^2" ,"Area dependence of " ) `MPRnb( K01 ,0.0 ,"1/K" ,"Temperature coefficient for K0" ) `MPRnb( LK01 ,0.0 ,"m/K" ,"Length dependence of K0" ) `MPRnb( WK01 ,0.0 ,"m/K" ,"Width dependence of K0" ) `MPRnb( PK01 ,0.0 ,"m^2/K" ,"Area dependence of K0" ) `MPRnb( M0 ,1.0 ,"" ,"offset of non-saturation effect parameter for strong inversion region" ) `MPRnb( LM0 ,0.0 ,"m" ,"Length dependence of " ) `MPRnb( WM0 ,0.0 ,"m" ,"Width dependence of " ) `MPRnb( PM0 ,0.0 ,"m^2" ,"Area dependence of " ) `MPRnb( M01 ,0.0 ,"1/K" ,"Temperature coefficient for M0" ) `MPRnb( LM01 ,0.0 ,"m/K" ,"Length dependence of M0" ) `MPRnb( WM01 ,0.0 ,"m/K" ,"Width dependence of M0" ) `MPRnb( PM01 ,0.0 ,"m^2/K" ,"Area dependence of M0" ) `MPIcc( FNOIMOD ,0 ,"" ,0 ,1 ,"Flicker noise model selector" ) `MPRoo( LH ,30n ,"m" ,0 ,L ,"Length of Halo transistor" ) `MPRnb( NOIA2 ,NOIA ,"s^(1-EF)/(eV)^1/m^3" ,"Flicker noise parameter A for Halo" ) `MPRoz( HNDEP ,NDEP ,"1/m^3" ,"Halo Doping Concentration for IV" ) // Common variables real PSiso, PDiso, PSsha, PDsha, PSmer, PDmer, ASiso, ADiso, ASsha, ADsha, ASmer, ADmer; real T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12; real T0y, T1y, T2y, T3y; real Tb; real epssi, epsox, ni, Weff, Leff, Weff1, Leff1, Wact, Lact, Weffcj, Eg, Eg0, Weff_SH; real dLIV, dWIV, dLB, dWB, dLCV, dWCV, dWJ, Cox, epsratio; real Vdb_noswap, Vsb_noswap, Vgs_noswap, Vgd_noswap, Vds_noswap; real sigvds, vfb, vgfb, vgfbCV, Vbsx, Vfbsdr; real Vg, vg, Vd, Vs, vs, Vds, Vdsx, Vgs_eff, Vgd_eff; real Vth_shift; real qia, qba, qiaCV, qbaCV, qbs, qbd, qb, dps, phib, phib_n; real nq, psip, psiavg, psipclamp, sqrtpsisa, sqrtpsisainv, sqrtpsip; real Cdep, Lnew, L_mult, Wnew, W_mult; real wf, wr; // Short channel effects real n, Fp, nVt, inv_nVt, Vt, inv_Vt; real PhistVbs, sqrtPhistVbs, Xdep, cdsc; real T1DEP; real dVth_ldop, DVTP0_i, DVTP1_i, DVTP2_i, DVTP3_i, DVTP4_i, DVTP5_i; real dVth_VNUD, dVth_dibl, dvth_temp; real gam, inv_gam, Phist, sqrtPhist, litl; // Drain saturation voltage real qis, qdsat, Eeffs, Dmobs, Esat, EsatL, Vdsat, LambdaC_by2, LambdaC; real Vdseff, Vdssat, VdssatCV, vdeff, vdsat, qdeff, vdsatcv, VdsatCV; real ln_T1_T2; real A1_i, A11_i, A1_t, A2_i, A21_i, A2_t, Nsat; // Mobility degradation real EeffFactor, Eeffm, ueff, eta_mu, Dmob, Dtot; // Velocity saturation real zsat, Dvsat, Dptwg, PSAT_i, PSATR_i, PSAT_a; // Output conductance real diffVds, VaDITS, VaSCBE, Vasat; real DIBLfactor, PVAGfactor, VaDIBL, Vgst2Vtm, Moc, MdL, Mscbe; // Impact ionization and GIDL real Iii, igidl, igisl; // I-V variables integer devsign; real ids; // C-V variables real Qb, Qs, Qd1, Qd2, Qd, Qi, QBi, QSi, QDi, QGi, WLCOXVtinv; real qs, qbeff, dqgeff; real DPD, vgfbPD, gammaPD, gamg2; real MdL_2, inv_MdL, inv_MdL_2, MdL_less_1; real sis, sid, vgpqm, Temps, Tempd, DQSD, DQSD2, invgamg2; real Vgsov, Vgdov, Qovb, Qovg, Qovs, Qovd, Cgsof, Cgdof; real XDCinv, Coxeffinv, BSIMBULKTOXP; real Vgd_ov_noswap, Vgs_ov_noswap; // S/D series resistance real WeffWRFactor, DMCGeff, DMDGeff, DMCIeff; real RSourceGeo, RDrainGeo, Rsource, Rdrain, Rdss, Rdsi, Dr; // S/D junction area and perimeter real temp_ASeff, temp_ADeff, temp_PSeff, temp_PDeff; real ASeff, ADeff; // Gate resistances real Grgeltd, Gcrg, idsovvds; // Body resistance real Lnl, Lnw, Lnnf, Bodymode, Rbpbx, Rbpby, Rbsbx, Rbsby, Rbdbx, Rbdby; real Rbdb, Rbsb, Rbpb, Rbps, Rbpd; real Grbsb, Grbdb, Grbpb, Grbps, Grbpd; // Gate current real Voxm, Voxminv, Voxmacc, Vdseffx; real Vaux_Igbinv, Vaux_Igbacc, igbinv, igbacc, igb; real igcs, igcd, igc0, T1_exp; real igs, igd, igs_mult, igd_mult; real Aechvb, Bechvb, AechvbEdge, BechvbEdge, ToxRatio, ToxRatioEdge; // Junction current and capacitance real PSeff, PDeff; real Ibs, Ibd, Vbs_jct, Vbd_jct, arg, sarg; real Czbs, czbs_p1, czbs_p2, Czbssw, czbssw_p1, czbssw_p2, Czbsswg, czbsswg_p1, czbsswg_p2; real Czbd, czbd_p1, czbd_p2, Czbdsw, czbdsw_p1, czbdsw_p2, Czbdswg, czbdswg_p1, czbdswg_p2; real Qbsj, Qbsj1, Qbsj2, Qbsj3; real Qbdj, Qbdj1, Qbdj2, Qbdj3; real Isbs, Isbd, Nvtms, Nvtmd; real SslpRev, IVjsmRev, VjsmRev, SslpFwd, IVjsmFwd, VjsmFwd, XExpBVS; real DslpRev, IVjdmRev, VjdmRev, DslpFwd, IVjdmFwd, VjdmFwd, XExpBVD; // Flicker noise real LINTNOI_i; real Esatnoi, Leffnoi, Leffnoisq, DelClm; real N0, Nl, Nstar, Ssi, Swi, FNPowerAt1Hz; // Thermal noise real gspr, gdpr; real Gtnoi, sidn, Nt; real mig, migid, mid, Lvsat, Vtn; real cm_igid, sqid, sqig, ctnoi, betanoisq, thetanoisq, betaLowId; // Temperature effects real delTemp1; real DevTemp, Tnom, Vtm, Vtm0; real TRatio, delTemp; real U0_t, U0R_t, UA_t, UAR_t, UC_t, UCR_t, UD_t, UDR_t, UCS_t, UCSR_t, rdstemp, VSAT_t, VSATR_t, VSATCV_t; real DELTA_t, PTWG_t, PTWGR_t, BETA0_t, BGIDL_t, BGISL_t; real igtemp; real ETA0_t, ETA0R_t, NFACTOR_t; //Diode temperature effects real CJS_t, CJSWS_t, CJSWGD_t, CJD_t, CJSWD_t, CJSWGS_t; real PBS_t, PBSWS_t, PBSWGS_t, PBD_t, PBSWD_t, PBSWGD_t; real JSS_t, JSWS_t, JSWGS_t, JSD_t, JSWD_t, JSWGD_t; real JTSS_t, JTSD_t, JTSSWS_t, JTSSWD_t, JTSSWGS_t, JTSSWGD_t; real NJTS_t, NJTSD_t, NJTSSW_t, NJTSSWD_t, NJTSSWG_t, NJTSSWGD_t; // Binning real PSATB_i; real KT1_i, KT2_i; real W_by_NF; real L_LLN, W_LWN, LW_LLN_LWN, L_LLN1, W_LWN1, LW_LLN_LWN1; real L_WLN, W_WWN, LW_WLN_WWN, L_WLN1, W_WWN1, LW_WLN_WWN1; real Inv_L, Inv_W, Inv_WL, Inv_Lact, Inv_Wact, Inv_Llong, Inv_Wwide; real BIN_L, BIN_W, BIN_WL; real NGATE_i, NSD_i, NDEP_i, VFB_i; real CIT_i, CDSCD_i, CDSCDR_i, CDSCD_a, CDSCB_i, NFACTOR_i; real PHIN_i, ETA0_i, ETA0R_i, ETA0_a, ETAB_i, K2_i, K1_i; real DELTA_i; real U0_i, U0R_i, U0_a, VSAT_i, VSATR_i, VSAT_a, VSATCV_i, UA_i, UAR_i, UA_a, EU_i, UD_i, UDR_i, UD_a, UCS_i, UCSR_i, UCS_a, UC_i, UCR_i, UC_a; real PDIBLC_i, PDIBLCR_i, PDIBLC_a, PDIBLCB_i, PSCBE1_i, PSCBE2_i, PDITS_i, PDITSD_i, FPROUT_i; real PRWG_i, WR_i, RDWMIN_i, RSWMIN_i, RDW_i, RSW_i, RDSW_i, RDSWMIN_i; real PTWG_i, PTWGR_i, PTWG_a, PVAG_i, XJ_i; real PCLM_i, PCLMR_i, PCLM_a, PCLMCV_i, PRWB_i; real CF_i, CGSL_i, CGDL_i, CKAPPAS_i, CKAPPAD_i; real VFBCV_i, NDEPCV_i; real ALPHA0_i, BETA0_i; real AGIDL_i, BGIDL_i, CGIDL_i, EGIDL_i; real AGISL_i, BGISL_i, CGISL_i, EGISL_i; real UTE_i, UA1_i, UC1_i, UD1_i, UCSTE_i, PRT_i, AT_i, PTWGT_i, IIT_i, TGIDL_i; real KVTH0WE_i, K2WE_i, KU0WE_i; real AIGBINV_i, BIGBINV_i, CIGBINV_i, EIGBINV_i, NIGBINV_i; real AIGBACC_i, BIGBACC_i, CIGBACC_i, NIGBACC_i; real AIGC_i, BIGC_i, CIGC_i; real AIGS_i, BIGS_i, CIGS_i, AIGD_i, BIGD_i, CIGD_i, POXEDGE_i, PIGCD_i; real DLCIG_i, DLCIGD_i, NTOX_i; real IGT_i; real K0_i, M0_i; real K01_i, M01_i; real K0_t, M0_t; real Mnud; real NFACTOREDGE_i, CITEDGE_i, CDSCDEDGE_i, CDSCBEDGE_i, ETA0EDGE_i, ETABEDGE_i, KT1EDGE_i, KT1LEDGE_i, KT2EDGE_i, KT1EXPEDGE_i, TNFACTOREDGE_i, TETA0EDGE_i, K2EDGE_i, KVTH0EDGE_i, STK2EDGE_i, STETA0EDGE_i; // Stress effect real W_tmp_stress, tmp1_stress, kstress_u0, tmp1_stress_vth, kstress_vth0, ku0_temp; real Inv_sa, Inv_sb, Inv_saref, Inv_sbref, Inv_odref, rho_ref, Inv_od,rho; real mu0_mult, vsat_mult, vth0_stress, k2_stress, eta_stress; integer i; // Well Proximity effect real vth0_well, k2_well, mu_well, Wdrn, local_sca, local_scb, local_scc; // Edge FET Model Variables real ids_edge, ETA0EDGE_t, NFACTOREDGE_t, Vbi, theta_sce_edge, dvth_dibl, dvth_sce, litl_edge, DGAMMAEDGE_i, vdsatedge, Vdsatedge, Vdssate; real vth0_stress_EDGE, k2_stress_EDGE, eta_stress_EDGE, K2_EDGE,ETA0_EDGE; // The following are used by the macro definitions (GEOMOD and RGEOMOD) real nuIntD, nuEndD, nuIntS, nuEndS; real Rint, Rend; // Sub-surface punchthrough real Issl, SSL0_NT, SSL1_NT, PHIB_SSL; // VTH variables real q_vth, psip_th; // 1/f Noise model for Halo real vgfbh, gam_h, phib_h, psiph, qsh, nq_h, U0_i_h, i1, qdh, i2, qsch; real Np2, beta_ch, beta_h, gds_h, gds_ch, gm_ch, R_ch, R_h, Ssi_ch; real Swi_ch, FNPowerAt1Hz_ch, FNPowerAt1Hz_h; real T0a, T0b, T0c, T0d, T0e, Swi_h, t_tot, CF_ch, CF_h, LeffnoiH; // Self Heating real gth, cth; real Ggate, Gnoise; // OPERATING POINT VARIABLES `OPM( QBI, "C", "Intrinsic body charge") `OPM( QSI, "C", "Intrinsic source charge") `OPM( QDI, "C", "Intrinsic drain charge") `OPM( QGI, "C", "Intrinsic gate charge") `OPM( CGGI, "F", "Intrinsic g-g MOSFET capacitance") `OPM( CGBI, "F", "Intrinsic g-b MOSFET capacitance") `OPM( CGSI, "F", "Intrinsic g-s MOSFET capacitance") `OPM( CGDI, "F", "Intrinsic g-d MOSFET capacitance") `OPM( CSGI, "F", "Intrinsic s-g MOSFET capacitance") `OPM( CSBI, "F", "Intrinsic s-b MOSFET capacitance") `OPM( CSSI, "F", "Intrinsic s-s MOSFET capacitance") `OPM( CSDI, "F", "Intrinsic s-d MOSFET capacitance") `OPM( CDGI, "F", "Intrinsic d-g MOSFET capacitance") `OPM( CDBI, "F", "Intrinsic d-b MOSFET capacitance") `OPM( CDSI, "F", "Intrinsic d-s MOSFET capacitance") `OPM( CDDI, "F", "Intrinsic d-d MOSFET capacitance") `OPM( CBGI, "F", "Intrinsic b-g MOSFET capacitance") `OPM( CBBI, "F", "Intrinsic b-b MOSFET capacitance") `OPM( CBSI, "F", "Intrinsic b-s MOSFET capacitance") `OPM( CBDI, "F", "Intrinsic b-d MOSFET capacitance") `OPM( QB, "C", "Body charge") `OPM( QS, "C", "Source charge") `OPM( QD, "C", "Drain charge") `OPM( QG, "C", "Gate charge") `OPM( CGG, "F", "g-g MOSFET capacitance") `OPM( CGB, "F", "g-b MOSFET capacitance") `OPM( CGS, "F", "g-s MOSFET capacitance") `OPM( CGD, "F", "g-d MOSFET capacitance") `OPM( CSG, "F", "s-g MOSFET capacitance") `OPM( CSB, "F", "s-b MOSFET capacitance") `OPM( CSS, "F", "s-s MOSFET capacitance") `OPM( CSD, "F", "s-d MOSFET capacitance") `OPM( CDG, "F", "d-g MOSFET capacitance") `OPM( CDB, "F", "d-b MOSFET capacitance") `OPM( CDS, "F", "d-s MOSFET capacitance") `OPM( CDD, "F", "d-d MOSFET capacitance") `OPM( CBG, "F", "b-g MOSFET capacitance") `OPM( CBB, "F", "b-b MOSFET capacitance") `OPM( CBS, "F", "b-s MOSFET capacitance") `OPM( CBD, "F", "b-d MOSFET capacitance") `OPM( ISUB, "A", "Substrate current") `OPM( IGIDL, "A", "") `OPM( IGISL, "A", "") `OPM( IGS, "A", "") `OPM( IGD, "A", "") `OPM( IGCS, "A", "") `OPM( IGCD, "A", "") `OPM( IGB, "A", "") `OPM( CGSEXT, "F", "") `OPM( CGDEXT, "F", "") `OPM( CGBOV, "F", "Front gate charge") `OPM( CAPBS, "F", "") `OPM( CAPBD, "F", "") `OPP( WEFF, "m", "") `OPP( LEFF, "m", "") `OPP( WEFFCV, "m", "") `OPP( LEFFCV, "m", "") `OPM( IDS, "A", "Drain-source current") `OPM( IDEFF, "A", "Effective drain current") `OPM( ISEFF, "A", "Effective source current") `OPM( IGEFF, "A", "Effective gate current") `OPM( IBS, "A", "") `OPM( IBD, "A", "") `OPP( VDS, "V", "Drain to source voltage") `OPP( VGS, "V", "Gate to source voltage") `OPP( VBS, "V", "Body to source voltage") `OPP( VDSAT, "V", "") `OPM( GM, "mho", "") `OPM( GMBS, "mho", "") `OPM( GDS, "mho", "") `OPP( T_TOTAL_K, "K", "") `OPP( T_TOTAL_C, "degC", "") `OPP( T_DELTA_SH, "K", "") `OPP( VTH, "V", "Threshold voltage") analog begin // Variable initialization to prevent hidden states CDSCDR_i = 0.0; ETA0R_i = 0.0; ETA0R_t = 0.0; L_LLN1 = 0.0; L_WLN1 = 0.0; PCLMR_i = 0.0; PDIBLCR_i = 0.0; PSATR_i = 0.0; PTWGR_i = 0.0; PTWGR_t = 0.0; U0R_i = 0.0; U0R_t = 0.0; UAR_i = 0.0; UAR_t = 0.0; UCR_i = 0.0; UCR_t = 0.0; UCSR_i = 0.0; UCSR_t = 0.0; UDR_i = 0.0; UDR_t = 0.0; UD_a = 0.0; VSATR_i = 0.0; VSATR_t = 0.0; W_LWN1 = 0.0; W_WWN1 = 0.0; local_sca = 0.0; local_scb = 0.0; local_scc = 0.0; Inv_sa = 0.0; Inv_sb = 0.0; vth0_stress_EDGE = 0.0; k2_stress_EDGE = 0.0; eta_stress = 0.0; K2_EDGE = 0.0; ETA0_EDGE = 0.0; eta_stress_EDGE = 0.0; local_sca = 0.0; local_scb = 0.0; local_scc = 0.0; K0_i = 0.0; M0_i = 0.0; K01_i = 0.0; M01_i = 0.0; K0_t = 0.0; M0_t = 0.0; CITEDGE_i = 0.0; CDSCDEDGE_i = 0.0; CDSCBEDGE_i = 0.0; ETA0EDGE_i = 0.0; ETABEDGE_i = 0.0; KT1EDGE_i = 0.0; KT1LEDGE_i = 0.0; KT2EDGE_i = 0.0; KT1EXPEDGE_i = 0.0; TNFACTOREDGE_i = 0.0; TETA0EDGE_i = 0.0; K2EDGE_i = 0.0; KVTH0EDGE_i = 0.0; STK2EDGE_i = 0.0; STETA0EDGE_i = 0.0; // Bias independent calculations if (TYPE == `ntype) begin devsign = 1; end else begin devsign = -1; end // Constants epssi = EPSRSUB * `EPS0; epsox = EPSROX * `EPS0; Cox = EPSROX * `EPS0 / TOXE; epsratio = EPSRSUB / EPSROX; // Physical Oxide Thickness if (!$param_given(TOXP)) begin BSIMBULKTOXP = (TOXE * EPSROX / 3.9) - DTOX; end else begin BSIMBULKTOXP = TOXP; end L_mult = L * LMLT; W_mult = W * WMLT; Lnew = L_mult + XL; if (Lnew <= 0.0) begin $strobe("Fatal: Ldrawn * LMLT + XL = %e for BSIMBULK is non-positive", Lnew); $finish(0); end W_by_NF = W_mult / NF; Wnew = W_by_NF + XW; if (Wnew <= 0.0) begin $strobe("Fatal: W / NF * WMLT + XW = %e for BSIMBULK is non-positive", Wnew); $finish(0); end // Leff and Weff for I-V L_LLN = pow(Lnew, -LLN); W_LWN = pow(Wnew, -LWN); LW_LLN_LWN = L_LLN * W_LWN; dLIV = LINT + LL * L_LLN + LW * W_LWN + LWL * LW_LLN_LWN; L_WLN = pow(Lnew, -WLN); W_WWN = pow(Wnew, -WWN); LW_WLN_WWN = L_WLN * W_WWN; dWIV = WINT + WL * L_WLN + WW * W_WWN + WWL * LW_WLN_WWN; Leff = Lnew - 2.0 * dLIV; if (Leff <= 0.0) begin $strobe("Fatal: Effective channel length = %e for BSIMBULK is non-positive", Leff); $finish(0); end else if (Leff <= 1.0e-9) begin $strobe("Warning: Effective channel length = %e for BSIMBULK is <= 1.0e-9. Recommended Leff >= 1e-8", Leff); end Weff = Wnew - 2.0 * dWIV; if (Weff <= 0.0) begin $strobe("Fatal: Effective channel Width = %e for BSIMBULK is non-positive", Weff); $finish(0); end else if (Weff <= 1.0e-9) begin $strobe("Warning: Effective channel width = %e for BSIMBULK is <= 1.0e-9. Recommended Weff >= 1e-8", Weff); end // Leff and Weff for C-V dLCV = DLC + LLC * L_LLN + LWC * W_LWN + LWLC * LW_LLN_LWN; dWCV = DWC + WLC * L_WLN + WWC * W_WWN + WWLC * LW_WLN_WWN; Lact = Lnew - 2.0 * dLCV; if (Lact <= 0.0) begin $strobe("Fatal: Effective channel length for CV = %e for BSIMBULK is non-positive", Lact); $finish(0); end else if (Lact <= 1.0e-9) begin $strobe("Warning: Effective channel length for CV = %e for BSIMBULK is <= 1.0e-9. Recommended Lact >= 1e-8", Lact); end Wact = Wnew - 2.0 * dWCV; if (Wact <= 0.0) begin $strobe("Fatal: Effective channel width for CV = %e for BSIMBULK is non-positive", Wact); $finish(0); end else if (Wact <= 1.0e-9) begin $strobe("Warning: Effective channel width for CV = %e for BSIMBULK is <= 1.0e-9. Recommended Wact >= 1e-8", Wact); end // Weffcj for Diode, GIDL etc. dWJ = DWJ + WLC / pow(Lnew, WLN) + WWC / pow(Wnew, WWN) + WWLC / pow(Lnew, WLN) / pow(Wnew, WWN); Weffcj = Wnew - 2.0 * dWJ; if (Weffcj <= 0.0) begin $strobe("Fatal: Effective channel width for S/D junctions = %e for BSIMBULK is non-positive", Weffcj); $finish(0); end Inv_L = 1.0e-6 / Leff; Inv_W = 1.0e-6 / Weff; Inv_Lact = 1.0e-6 / Lact; Inv_Wact = 1.0e-6 / Wact; Inv_Llong = 1.0e-6 / LLONG; Inv_Wwide = 1.0e-6 / WWIDE; Inv_WL = Inv_L * Inv_W; // Effective length and width for binning L_LLN1 = L_LLN; L_WLN1 = L_WLN; if (DLBIN != 0.0) begin if (DLBIN <= -Lnew) begin $strobe("Fatal: DLBIN for BSIMBULK = %e is <= -Ldrawn * LMLT", DLBIN); $finish(0); end else begin L_LLN1 = pow(Lnew + DLBIN, -LLN); L_WLN1 = pow(Lnew + DLBIN, -WLN); end end W_LWN1 = W_LWN; W_WWN1 = W_WWN; if (DWBIN != 0.0) begin if (DWBIN <= -Wnew) begin $strobe("Fatal: DWBIN for BSIMBULK = %e is <= -Wdrawn * WMLT", DWBIN); $finish(0); end else begin W_LWN1 = pow(Wnew + DWBIN, -LWN); W_WWN1 = pow(Wnew + DWBIN, -WWN); end end LW_LLN_LWN1 = L_LLN1 * W_LWN1; dLB = LINT + LL * L_LLN1 + LW * W_LWN1 + LWL * LW_LLN_LWN1; LW_WLN_WWN1 = L_WLN1 * W_WWN1; dWB = WINT + WL * L_WLN1 + WW * W_WWN1 + WWL * LW_WLN_WWN1; Leff1 = Lnew - 2.0 * dLB + DLBIN; if (Leff1 <= 0.0) begin $strobe("Fatal: Effective channel length for binning = %e for BSIMBULK is non-positive", Leff1); $finish(0); end Weff1 = Wnew - 2.0 * dWB + DWBIN; if (Weff1 <= 0.0) begin $strobe("Fatal: Effective channel width for binning = %e for BSIMBULK is non-positive", Weff1); $finish(0); end if (BINUNIT == 1) begin BIN_L = 1.0e-6 / Leff1; BIN_W = 1.0e-6 / Weff1; end else begin BIN_L = 1.0 / Leff1; BIN_W = 1.0 / Weff1; end BIN_WL = BIN_L * BIN_W; VFB_i = VFB + BIN_L * LVFB + BIN_W * WVFB + BIN_WL * PVFB; VFBCV_i = VFBCV + BIN_L * LVFBCV + BIN_W * WVFBCV + BIN_WL * PVFBCV; NSD_i = NSD + BIN_L * LNSD + BIN_W * WNSD + BIN_WL * PNSD; NDEP_i = NDEP + BIN_L * LNDEP + BIN_W * WNDEP + BIN_WL * PNDEP; NDEPCV_i = NDEPCV + BIN_L * LNDEPCV + BIN_W * WNDEPCV + BIN_WL * PNDEPCV; NGATE_i = NGATE + BIN_L * LNGATE + BIN_W * WNGATE + BIN_WL * PNGATE; CIT_i = CIT + BIN_L * LCIT + BIN_W * WCIT + BIN_WL * PCIT; NFACTOR_i = NFACTOR + BIN_L * LNFACTOR + BIN_W * WNFACTOR + BIN_WL * PNFACTOR; CDSCD_i = CDSCD + BIN_L * LCDSCD + BIN_W * WCDSCD + BIN_WL * PCDSCD; CDSCB_i = CDSCB + BIN_L * LCDSCB + BIN_W * WCDSCB + BIN_WL * PCDSCB; DVTP0_i = DVTP0 + BIN_L * LDVTP0 + BIN_W * WDVTP0 + BIN_WL * PDVTP0; DVTP1_i = DVTP1 + BIN_L * LDVTP1 + BIN_W * WDVTP1 + BIN_WL * PDVTP1; DVTP2_i = DVTP2 + BIN_L * LDVTP2 + BIN_W * WDVTP2 + BIN_WL * PDVTP2; DVTP3_i = DVTP3 + BIN_L * LDVTP3 + BIN_W * WDVTP3 + BIN_WL * PDVTP3; DVTP4_i = DVTP4 + BIN_L * LDVTP4 + BIN_W * WDVTP4 + BIN_WL * PDVTP4; DVTP5_i = DVTP5 + BIN_L * LDVTP5 + BIN_W * WDVTP5 + BIN_WL * PDVTP5; K2_i = K2 + BIN_L * LK2 + BIN_W * WK2 + BIN_WL * PK2; K1_i = K1 + BIN_L * LK1 + BIN_W * WK1 + BIN_WL * PK1; XJ_i = XJ + BIN_L * LXJ + BIN_W * WXJ + BIN_WL * PXJ; PHIN_i = PHIN + BIN_L * LPHIN + BIN_W * WPHIN + BIN_WL * PPHIN; ETA0_i = ETA0 + BIN_L * LETA0 + BIN_W * WETA0 + BIN_WL * PETA0; ETAB_i = ETAB + BIN_L * LETAB + BIN_W * WETAB + BIN_WL * PETAB; DELTA_i = DELTA + BIN_L * LDELTA + BIN_W * WDELTA + BIN_WL * PDELTA; U0_i = U0 + BIN_L * LU0 + BIN_W * WU0 + BIN_WL * PU0; UA_i = UA + BIN_L * LUA + BIN_W * WUA + BIN_WL * PUA; UD_i = UD + BIN_L * LUD + BIN_W * WUD + BIN_WL * PUD; EU_i = EU + BIN_L * LEU + BIN_W * WEU + BIN_WL * PEU; UCS_i = UCS + BIN_L * LUCS + BIN_W * WUCS + BIN_WL * PUCS; UC_i = UC + BIN_L * LUC + BIN_W * WUC + BIN_WL * PUC; PCLM_i = PCLM + BIN_L * LPCLM + BIN_W * WPCLM + BIN_WL * PPCLM; PCLMCV_i = PCLMCV + BIN_L * LPCLMCV + BIN_W * WPCLMCV + BIN_WL * PPCLMCV; RSW_i = RSW + BIN_L * LRSW + BIN_W * WRSW + BIN_WL * PRSW; RDW_i = RDW + BIN_L * LRDW + BIN_W * WRDW + BIN_WL * PRDW; PRWG_i = PRWG + BIN_L * LPRWG + BIN_W * WPRWG + BIN_WL * PPRWG; PRWB_i = PRWB + BIN_L * LPRWB + BIN_W * WPRWB + BIN_WL * PPRWB; WR_i = WR + BIN_L * LWR + BIN_W * WWR + BIN_WL * PWR; RSWMIN_i = RSWMIN + BIN_L * LRSWMIN + BIN_W * WRSWMIN + BIN_WL * PRSWMIN; RDWMIN_i = RDWMIN + BIN_L * LRDWMIN + BIN_W * WRDWMIN + BIN_WL * PRDWMIN; RDSW_i = RDSW + BIN_L * LRDSW + BIN_W * WRDSW + BIN_WL * PRDSW; RDSWMIN_i = RDSWMIN + BIN_L * LRDSWMIN + BIN_W * WRDSWMIN + BIN_WL * PRDSWMIN; PTWG_i = PTWG + BIN_L * LPTWG + BIN_W * WPTWG + BIN_WL * PPTWG; PDIBLC_i = PDIBLC + BIN_L * LPDIBLC + BIN_W * WPDIBLC + BIN_WL * PPDIBLC; PDIBLCB_i = PDIBLCB + BIN_L * LPDIBLCB + BIN_W * WPDIBLCB + BIN_WL * PPDIBLCB; PSCBE1_i = PSCBE1 + BIN_L * LPSCBE1 + BIN_W * WPSCBE1 + BIN_WL * PPSCBE1; PSCBE2_i = PSCBE2 + BIN_L * LPSCBE2 + BIN_W * WPSCBE2 + BIN_WL * PPSCBE2; PDITS_i = PDITS + BIN_L * LPDITS + BIN_W * WPDITS + BIN_WL * PPDITS; PDITSD_i = PDITSD + BIN_L * LPDITSD + BIN_W * WPDITSD + BIN_WL * PPDITSD; FPROUT_i = FPROUT + BIN_L * LFPROUT + BIN_W * WFPROUT + BIN_WL * PFPROUT; PVAG_i = PVAG + BIN_L * LPVAG + BIN_W * WPVAG + BIN_WL * PPVAG; VSAT_i = VSAT + BIN_L * LVSAT + BIN_W * WVSAT + BIN_WL * PVSAT; PSAT_i = PSAT + BIN_L * LPSAT + BIN_W * WPSAT + BIN_WL * PPSAT; VSATCV_i = VSATCV + BIN_L * LVSATCV + BIN_W * WVSATCV + BIN_WL * PVSATCV; CF_i = CF + BIN_L * LCF + BIN_W * WCF + BIN_WL * PCF; CGSL_i = CGSL + BIN_L * LCGSL + BIN_W * WCGSL + BIN_WL * PCGSL; CGDL_i = CGDL + BIN_L * LCGDL + BIN_W * WCGDL + BIN_WL * PCGDL; CKAPPAS_i = CKAPPAS + BIN_L * LCKAPPAS + BIN_W * WCKAPPAS + BIN_WL * PCKAPPAS; CKAPPAD_i = CKAPPAD + BIN_L * LCKAPPAD + BIN_W * WCKAPPAD + BIN_WL * PCKAPPAD; ALPHA0_i = ALPHA0 + BIN_L * LALPHA0 + BIN_W * WALPHA0 + BIN_WL * PALPHA0; BETA0_i = BETA0 + BIN_L * LBETA0 + BIN_W * WBETA0 + BIN_WL * PBETA0; KVTH0WE_i = KVTH0WE + BIN_L * LKVTH0WE + BIN_W * WKVTH0WE + BIN_WL * PKVTH0WE; K2WE_i = K2WE + BIN_L * LK2WE + BIN_W * WK2WE + BIN_WL * PK2WE; KU0WE_i = KU0WE + BIN_L * LKU0WE + BIN_W * WKU0WE + BIN_WL * PKU0WE; AGIDL_i = AGIDL + BIN_L * LAGIDL + BIN_W * WAGIDL + BIN_WL * PAGIDL; BGIDL_i = BGIDL + BIN_L * LBGIDL + BIN_W * WBGIDL + BIN_WL * PBGIDL; CGIDL_i = CGIDL + BIN_L * LCGIDL + BIN_W * WCGIDL + BIN_WL * PCGIDL; EGIDL_i = EGIDL + BIN_L * LEGIDL + BIN_W * WEGIDL + BIN_WL * PEGIDL; AGISL_i = AGISL + BIN_L * LAGISL + BIN_W * WAGISL + BIN_WL * PAGISL; BGISL_i = BGISL + BIN_L * LBGISL + BIN_W * WBGISL + BIN_WL * PBGISL; CGISL_i = CGISL + BIN_L * LCGISL + BIN_W * WCGISL + BIN_WL * PCGISL; EGISL_i = EGISL + BIN_L * LEGISL + BIN_W * WEGISL + BIN_WL * PEGISL; UTE_i = UTE + BIN_L * LUTE + BIN_W * WUTE + BIN_WL * PUTE; UA1_i = UA1 + BIN_L * LUA1 + BIN_W * WUA1 + BIN_WL * PUA1; UC1_i = UC1 + BIN_L * LUC1 + BIN_W * WUC1 + BIN_WL * PUC1; UD1_i = UD1 + BIN_L * LUD1 + BIN_W * WUD1 + BIN_WL * PUD1; UCSTE_i = UCSTE + BIN_L * LUCSTE + BIN_W * WUCSTE + BIN_WL * PUCSTE; PRT_i = PRT + BIN_L * LPRT + BIN_W * WPRT + BIN_WL * PPRT; AT_i = AT + BIN_L * LAT + BIN_W * WAT + BIN_WL * PAT; PTWGT_i = PTWGT + BIN_L * LPTWGT + BIN_W * WPTWGT + BIN_WL * PPTWGT; IIT_i = IIT + BIN_L * LIIT + BIN_W * WIIT + BIN_WL * PIIT; TGIDL_i = TGIDL + BIN_L * LTGIDL + BIN_W * WTGIDL + BIN_WL * PTGIDL; IGT_i = IGT + BIN_L * LIGT + BIN_W * WIGT + BIN_WL * PIGT; AIGBINV_i = AIGBINV + BIN_L * LAIGBINV + BIN_W * WAIGBINV + BIN_WL * PAIGBINV; BIGBINV_i = BIGBINV + BIN_L * LBIGBINV + BIN_W * WBIGBINV + BIN_WL * PBIGBINV; CIGBINV_i = CIGBINV + BIN_L * LCIGBINV + BIN_W * WCIGBINV + BIN_WL * PCIGBINV; EIGBINV_i = EIGBINV + BIN_L * LEIGBINV + BIN_W * WEIGBINV + BIN_WL * PEIGBINV; NIGBINV_i = NIGBINV + BIN_L * LNIGBINV + BIN_W * WNIGBINV + BIN_WL * PNIGBINV; AIGBACC_i = AIGBACC + BIN_L * LAIGBACC + BIN_W * WAIGBACC + BIN_WL * PAIGBACC; BIGBACC_i = BIGBACC + BIN_L * LBIGBACC + BIN_W * WBIGBACC + BIN_WL * PBIGBACC; CIGBACC_i = CIGBACC + BIN_L * LCIGBACC + BIN_W * WCIGBACC + BIN_WL * PCIGBACC; NIGBACC_i = NIGBACC + BIN_L * LNIGBACC + BIN_W * WNIGBACC + BIN_WL * PNIGBACC; AIGC_i = AIGC + BIN_L * LAIGC + BIN_W * WAIGC + BIN_WL * PAIGC; BIGC_i = BIGC + BIN_L * LBIGC + BIN_W * WBIGC + BIN_WL * PBIGC; CIGC_i = CIGC + BIN_L * LCIGC + BIN_W * WCIGC + BIN_WL * PCIGC; AIGS_i = AIGS + BIN_L * LAIGS + BIN_W * WAIGS + BIN_WL * PAIGS; BIGS_i = BIGS + BIN_L * LBIGS + BIN_W * WBIGS + BIN_WL * PBIGS; CIGS_i = CIGS + BIN_L * LCIGS + BIN_W * WCIGS + BIN_WL * PCIGS; AIGD_i = AIGD + BIN_L * LAIGD + BIN_W * WAIGD + BIN_WL * PAIGD; BIGD_i = BIGD + BIN_L * LBIGD + BIN_W * WBIGD + BIN_WL * PBIGD; CIGD_i = CIGD + BIN_L * LCIGD + BIN_W * WCIGD + BIN_WL * PCIGD; POXEDGE_i = POXEDGE + BIN_L * LPOXEDGE + BIN_W * WPOXEDGE + BIN_WL * PPOXEDGE; DLCIG_i = DLCIG + BIN_L * LDLCIG + BIN_W * WDLCIG + BIN_WL * PDLCIG; DLCIGD_i = DLCIGD + BIN_L * LDLCIGD + BIN_W * WDLCIGD + BIN_WL * PDLCIGD; NTOX_i = NTOX + BIN_L * LNTOX + BIN_W * WNTOX + BIN_WL * PNTOX; KT1_i = KT1 + BIN_L * LKT1 + BIN_W * WKT1 + BIN_WL * PKT1; KT2_i = KT2 + BIN_L * LKT2 + BIN_W * WKT2 + BIN_WL * PKT2; PSATB_i = PSATB + BIN_L * LPSATB + BIN_W * WPSATB + BIN_WL * PPSATB; A1_i = A1 + BIN_L * LA1 + BIN_W * WA1 + BIN_WL * PA1; A11_i = A11 + BIN_L * LA11 + BIN_W * WA11 + BIN_WL * PA11; A2_i = A2 + BIN_L * LA2 + BIN_W * WA2 + BIN_WL * PA2; A21_i = A21 + BIN_L * LA21 + BIN_W * WA21 + BIN_WL * PA21; K0_i = K0 + BIN_L * LK0 + BIN_W * WK0 + BIN_WL * PK0; M0_i = M0 + BIN_L * LM0 + BIN_W * WM0 + BIN_WL * PM0; K01_i = K01 + BIN_L * LK01 + BIN_W * WK01 + BIN_WL * PK01; M01_i = M01 + BIN_L * LM01 + BIN_W * WM01 + BIN_WL * PM01; NFACTOREDGE_i = NFACTOREDGE + BIN_L * LNFACTOREDGE + BIN_W * WNFACTOREDGE + BIN_WL * PNFACTOREDGE; CITEDGE_i = CITEDGE + BIN_L * LCITEDGE + BIN_W * WCITEDGE + BIN_WL * PCITEDGE; CDSCDEDGE_i = CDSCDEDGE + BIN_L * LCDSCDEDGE + BIN_W * WCDSCDEDGE + BIN_WL * PCDSCDEDGE; CDSCBEDGE_i = CDSCBEDGE + BIN_L * LCDSCBEDGE + BIN_W * WCDSCBEDGE + BIN_WL * PCDSCBEDGE; ETA0EDGE_i = ETA0EDGE + BIN_L * LETA0EDGE + BIN_W * WETA0EDGE + BIN_WL * PETA0EDGE; ETABEDGE_i = ETABEDGE + BIN_L * LETABEDGE + BIN_W * WETABEDGE + BIN_WL * PETABEDGE; KT1EDGE_i = KT1EDGE + BIN_L * LKT1EDGE + BIN_W * WKT1EDGE + BIN_WL * PKT1EDGE; KT1LEDGE_i = KT1LEDGE + BIN_L * LKT1LEDGE + BIN_W * WKT1LEDGE + BIN_WL * PKT1LEDGE; KT2EDGE_i = KT2EDGE + BIN_L * LKT2EDGE + BIN_W * WKT2EDGE + BIN_WL * PKT2EDGE; KT1EXPEDGE_i = KT1EXPEDGE + BIN_L * LKT1EXPEDGE + BIN_W * WKT1EXPEDGE + BIN_WL * PKT1EXPEDGE; TNFACTOREDGE_i = TNFACTOREDGE + BIN_L * LTNFACTOREDGE + BIN_W * WTNFACTOREDGE + BIN_WL * PTNFACTOREDGE; TETA0EDGE_i = TETA0EDGE + BIN_L * LTETA0EDGE + BIN_W * WTETA0EDGE + BIN_WL * PTETA0EDGE; K2EDGE_i = K2EDGE + BIN_L * LK2EDGE + BIN_W * WK2EDGE + BIN_WL * PK2EDGE; KVTH0EDGE_i = KVTH0EDGE + BIN_L * LKVTH0EDGE + BIN_W * WKVTH0EDGE + BIN_WL * PKVTH0EDGE; STK2EDGE_i = STK2EDGE + BIN_L * LSTK2EDGE + BIN_W * WSTK2EDGE + BIN_WL * PSTK2EDGE; STETA0EDGE_i = STETA0EDGE + BIN_L * LSTETA0EDGE + BIN_W * WSTETA0EDGE + BIN_WL * PSTETA0EDGE; if (ASYMMOD != 0) begin CDSCDR_i = CDSCDR + BIN_L * LCDSCDR + BIN_W * WCDSCDR + BIN_WL * PCDSCDR; ETA0R_i = ETA0R + BIN_L * LETA0R + BIN_W * WETA0R + BIN_WL * PETA0R; U0R_i = U0R + BIN_L * LU0R + BIN_W * WU0R + BIN_WL * PU0R; UAR_i = UAR + BIN_L * LUAR + BIN_W * WUAR + BIN_WL * PUAR; UDR_i = UDR + BIN_L * LUDR + BIN_W * WUDR + BIN_WL * PUDR; UCSR_i = UCSR + BIN_L * LUCSR + BIN_W * WUCSR + BIN_WL * PUCSR; UCR_i = UCR + BIN_L * LUCR + BIN_W * WUCR + BIN_WL * PUCR; PCLMR_i = PCLMR + BIN_L * LPCLMR + BIN_W * WPCLMR + BIN_WL * PPCLMR; PDIBLCR_i = PDIBLCR + BIN_L * LPDIBLCR + BIN_W * WPDIBLCR + BIN_WL * PPDIBLCR; VSATR_i = VSATR + BIN_L * LVSATR + BIN_W * WVSATR + BIN_WL * PVSATR; PSATR_i = PSATR + BIN_L * LPSATR + BIN_W * WPSATR + BIN_WL * PPSATR; PTWGR_i = PTWGR + BIN_L * LPTWGR + BIN_W * WPTWGR + BIN_WL * PPTWGR; end // Geometrical scaling T0y = NDEPL1 * max(pow(Inv_L, NDEPLEXP1) - pow(Inv_Llong, NDEPLEXP1), 0.0) + NDEPL2 * max(pow(Inv_L, NDEPLEXP2) - pow(Inv_Llong, NDEPLEXP2), 0.0); T1y = NDEPW * max(pow(Inv_W, NDEPWEXP) - pow(Inv_Wwide, NDEPWEXP), 0.0) + NDEPWL * pow(Inv_W * Inv_L, NDEPWLEXP); NDEP_i = NDEP_i * (1.0 + T0y + T1y); T0y = NFACTORL * max( pow(Inv_L, NFACTORLEXP) - pow(Inv_Llong, NFACTORLEXP), 0.0); T1y = NFACTORW * max( pow(Inv_W, NFACTORWEXP) - pow(Inv_Wwide, NFACTORWEXP), 0.0) + NFACTORWL * pow(Inv_WL, NFACTORWLEXP); NFACTOR_i = NFACTOR_i * (1.0 + T0y + T1y); T0y = (1.0 + CDSCDL * max(pow(Inv_L, CDSCDLEXP) - pow(Inv_Llong, CDSCDLEXP), 0.0)); CDSCD_i = CDSCD_i * T0y; if (ASYMMOD != 0) begin CDSCDR_i = CDSCDR_i * T0y; end CDSCB_i = CDSCB_i * (1.0 + CDSCBL * max(pow(Inv_L, CDSCBLEXP) - pow(Inv_Llong, CDSCBLEXP), 0.0)); U0_i = MULU0 * U0_i; if (MOBSCALE != 1) begin if (U0LEXP > 0.0) begin U0_i = U0_i * (1.0 - U0L * max(pow(Inv_L, U0LEXP) - pow(Inv_Llong, U0LEXP), 0.0)); if (ASYMMOD != 0) begin U0R_i = U0R_i * (1.0 - U0L * max(pow(Inv_L, U0LEXP) - pow(Inv_Llong, U0LEXP), 0.0)); end end else begin U0_i = U0_i * (1.0 - U0L); if (ASYMMOD != 0) begin U0R_i = U0R_i * (1.0 - U0L); end end end else begin U0_i = U0_i * (1.0 - (UP1 * lexp(-Leff / LP1)) - (UP2 * lexp(-Leff / LP2))); if (ASYMMOD != 0) begin U0R_i = U0R_i * (1.0 - (UP1 * lexp(-Leff / LP1)) - (UP2 * lexp(-Leff / LP2))); end end T0y = UAL * max(pow(Inv_L, UALEXP) - pow(Inv_Llong, UALEXP), 0.0); T1y = UAW * max(pow(Inv_W, UAWEXP) - pow(Inv_Wwide, UAWEXP), 0.0) + UAWL * pow(Inv_WL, UAWLEXP); UA_i = UA_i * (1.0 + T0y + T1y); if (ASYMMOD != 0) begin UAR_i = UAR_i * (1.0 + T0y + T1y); end T0y = EUL * max(pow(Inv_L, EULEXP) - pow(Inv_Llong, EULEXP), 0.0); T1y = EUW * max(pow(Inv_W, EUWEXP) - pow(Inv_Wwide, EUWEXP), 0.0) + EUWL * pow(Inv_WL, EUWLEXP); EU_i = EU_i * (1.0 + T0y + T1y); T0y = 1.0 + UDL * max(pow(Inv_L, UDLEXP) - pow(Inv_Llong, UDLEXP), 0.0); UD_i = UD_i * T0y; if (ASYMMOD != 0) begin UDR_i = UDR_i * T0y; end T0y = UCL * max(pow(Inv_L, UCLEXP) - pow(Inv_Llong, UCLEXP), 0.0); T1y = UCW * max(pow(Inv_W, UCWEXP) - pow(Inv_Wwide, UCWEXP), 0.0) + UCWL * pow(Inv_WL, UCWLEXP); UC_i = UC_i * (1.0 + T0y + T1y); if (ASYMMOD != 0) begin UCR_i = UCR_i * (1.0 + T0y + T1y); end T0y = max(pow(Inv_L, DSUB) - pow(Inv_Llong, DSUB), 0.0); ETA0_i = ETA0_i * T0y; if (ASYMMOD != 0) begin ETA0R_i = ETA0R_i * T0y; end ETAB_i = ETAB_i * max(pow(Inv_L, ETABEXP) - pow(Inv_Llong, ETABEXP), 0.0); T0y = 1.0 + PDIBLCL * max(pow(Inv_L, PDIBLCLEXP) - pow(Inv_Llong, PDIBLCLEXP), 0.0); PDIBLC_i = PDIBLC_i * T0y; if (ASYMMOD != 0) begin PDIBLCR_i = PDIBLCR_i * T0y; end T0y = DELTA_i * (1.0 + DELTAL * max(pow(Inv_L, DELTALEXP) - pow(Inv_Llong, DELTALEXP), 0.0)); DELTA_i = min(T0y, 0.5); FPROUT_i = FPROUT_i * (1.0 + FPROUTL * max(pow(Inv_L, FPROUTLEXP) - pow(Inv_Llong, FPROUTLEXP), 0.0)); T0y = (1.0 + PCLML * max(pow(Inv_L, PCLMLEXP) - pow(Inv_Llong, PCLMLEXP), 0.0)); PCLM_i = PCLM_i * T0y; PCLM_i = max(PCLM_i, 0.0); if (ASYMMOD != 0) begin PCLMR_i = PCLMR_i * T0y; PCLMR_i = max(PCLMR_i, 0.0); end T0y = VSATL * max(pow(Inv_L, VSATLEXP) - pow(Inv_Llong, VSATLEXP), 0.0); T1y = VSATW * max(pow(Inv_W, VSATWEXP) - pow(Inv_Wwide, VSATWEXP), 0.0) + VSATWL * pow(Inv_WL, VSATWLEXP); VSAT_i = VSAT_i * (1.0 + T0y + T1y); if (ASYMMOD != 0) begin VSATR_i = VSATR_i * (1.0 + T0y + T1y); end PSAT_i = max(PSAT_i * (1.0 + PSATL * max(pow(Inv_L, PSATLEXP) - pow(Inv_Llong, PSATLEXP), 0.0)), 0.25); if (ASYMMOD != 0) begin PSATR_i = max(PSATR_i * (1.0 + PSATL * max(pow(Inv_L, PSATLEXP) - pow(Inv_Llong, PSATLEXP), 0.0)), 0.25); end T0y = (1.0 + PTWGL * max(pow(Inv_L, PTWGLEXP) - pow(Inv_Llong, PTWGLEXP), 0.0)); PTWG_i = PTWG_i * T0y; if (ASYMMOD != 0) begin PTWGR_i = PTWGR_i * T0y; end ALPHA0_i = ALPHA0_i * (1.0 + ALPHA0L * max(pow(Inv_L, ALPHA0LEXP) - pow(Inv_Llong, ALPHA0LEXP), 0.0)); AGIDL_i = AGIDL_i * (1.0 + AGIDLL * Inv_L + AGIDLW * Inv_W); AGISL_i = AGISL_i * (1.0 + AGISLL * Inv_L + AGISLW * Inv_W); AIGC_i = AIGC_i * (1.0 + AIGCL * Inv_L + AIGCW * Inv_W); AIGS_i = AIGS_i * (1.0 + AIGSL * Inv_L + AIGSW * Inv_W); AIGD_i = AIGD_i * (1.0 + AIGDL * Inv_L + AIGDW * Inv_W); PIGCD_i = PIGCD * (1.0 + PIGCDL * Inv_L); T0y = NDEPCVL1 * max(pow(Inv_Lact, NDEPCVLEXP1) - pow(Inv_Llong, NDEPCVLEXP1), 0.0) + NDEPCVL2 * max( pow(Inv_Lact, NDEPCVLEXP2) - pow(Inv_Llong, NDEPCVLEXP2), 0.0); T1y = NDEPCVW * max(pow(Inv_Wact, NDEPCVWEXP) - pow(Inv_Wwide, NDEPCVWEXP), 0.0) + NDEPCVWL * pow(Inv_Wact * Inv_Lact, NDEPCVWLEXP); NDEPCV_i = NDEPCV_i * (1.0 + T0y + T1y); T0y = VFBCVL * max(pow(Inv_Lact, VFBCVLEXP) - pow(Inv_Llong, VFBCVLEXP), 0.0); T1y = VFBCVW * max(pow(Inv_Wact, VFBCVWEXP) - pow(Inv_Wwide, VFBCVWEXP), 0.0) + VFBCVWL * pow(Inv_WL, VFBCVWLEXP); VFBCV_i = VFBCV_i * (1.0 + T0y + T1y); T0y = VSATCVL * max(pow(Inv_Lact, VSATCVLEXP) - pow(Inv_Llong, VSATCVLEXP), 0.0); T1y = VSATCVW * max(pow(Inv_W, VSATCVWEXP) - pow(Inv_Wwide, VSATCVWEXP), 0.0) + VSATCVWL * pow(Inv_WL, VSATCVWLEXP); VSATCV_i = VSATCV_i * (1.0 + T0y + T1y); PCLMCV_i = PCLMCV_i * (1.0 + PCLMCVL * max(pow(Inv_Lact, PCLMCVLEXP) - pow(Inv_Llong, PCLMCVLEXP), 0.0)); PCLMCV_i = max(PCLMCV_i, 0.0); T0y = K1L * max(pow(Inv_L, K1LEXP) - pow(Inv_Llong, K1LEXP), 0.0); T1y = K1W * max(pow(Inv_W, K1WEXP) - pow(Inv_Wwide, K1WEXP), 0.0) + K1WL * pow(Inv_WL, K1WLEXP); K1_i = K1_i * (1.0 + T0y + T1y); T0y = K2L * max(pow(Inv_L, K2LEXP) - pow(Inv_Llong, K2LEXP), 0.0); T1y = K2W * max(pow(Inv_W, K2WEXP) - pow(Inv_Wwide, K2WEXP), 0.0) + K2WL * pow(Inv_WL, K2WLEXP); K2_i = K2_i * (1.0 + T0y + T1y); PRWB_i = PRWB_i * (1.0 + PRWBL * max( pow(Inv_L, PRWBLEXP) - pow(Inv_Llong, PRWBLEXP), 0)); // Global scaling parameters for temperature UTE_i = UTE_i * (1.0 + Inv_L * UTEL); UA1_i = UA1_i * (1.0 + Inv_L * UA1L); UD1_i = UD1_i * (1.0 + Inv_L * UD1L); AT_i = AT_i * (1.0 + Inv_L * ATL); PTWGT_i = PTWGT_i * (1.0 + Inv_L * PTWGTL); if ($port_connected(t) == 0) begin if (SHMOD == 0 || RTH0 == 0.0) begin Temp(t) <+ 0.0; end else begin $strobe("5 terminal Module, while 't' node is not connected, SH is activated."); end end if (RDSMOD == 1) begin RSW_i = RSW_i * (1.0 + RSWL * max(pow(Inv_L, RSWLEXP) - pow(Inv_Llong, RSWLEXP), 0.0)); RDW_i = RDW_i * (1.0 + RDWL * max(pow(Inv_L, RDWLEXP) - pow(Inv_Llong, RDWLEXP), 0.0)); end else begin RDSW_i = RDSW_i * (1.0 + RDSWL * max(pow(Inv_L, RDSWLEXP) - pow(Inv_Llong, RDSWLEXP), 0.0)); end // Parameter checking if (UCS_i < 1.0) begin UCS_i = 1.0; end else if (UCS_i > 2.0) begin UCS_i = 2.0; end if (ASYMMOD != 0) begin if (UCSR_i < 1.0) begin UCSR_i = 1.0; end else if (UCSR_i > 2.0) begin UCSR_i = 2.0; end end if (CGIDL_i < 0.0) begin $strobe("Fatal: CGIDL_i = %e is negative.", CGIDL_i); $finish(0); end if (CGISL_i < 0.0) begin $strobe("Fatal: CGISL_i = %e is negative.", CGISL_i); $finish(0); end if (CKAPPAD_i <= 0.0) begin $strobe("Fatal: CKAPPAD_i = %e is non-positive.", CKAPPAD_i); $finish(0); end if (CKAPPAS_i <= 0.0) begin $strobe("Fatal: CKAPPAS_i = %e is non-positive.", CKAPPAS_i); $finish(0); end if (PDITS_i < 0.0) begin $strobe("Fatal: PDITS_i = %e is negative.", PDITS_i); $finish(0); end if (CIT_i < 0.0) begin $strobe("Fatal: CIT_i = %e is negative.", CIT_i); $finish(0); end if (NFACTOR_i < 0.0) begin $strobe("Fatal: NFACTOR_i = %e is negative.", NFACTOR_i); $finish(0); end if (K1_i < 0.0) begin $strobe("Fatal: K1_i = %e is negative.", K1_i); $finish(0); end if (NSD_i <= 0.0) begin $strobe("Fatal: NSD_i = %e is non-positive.", NSD_i); $finish(0); end if (NDEP_i <= 0.0) begin $strobe("Fatal: NDEP_i = %e is non-positive.", NDEP_i); $finish(0); end if (NDEPCV_i <= 0.0) begin $strobe("Fatal: NDEPCV_i = %e is non-positive.", NDEPCV_i); $finish(0); end if (IGBMOD != 0) begin if (NIGBINV_i <= 0.0) begin $strobe("Fatal: NIGBINV_i = %e is non-positive.", NIGBINV_i); $finish(0); end if (NIGBACC_i <= 0.0) begin $strobe("Fatal: NIGBACC_i = %e is non-positive.", NIGBACC_i); $finish(0); end end if (IGCMOD != 0) begin if (POXEDGE_i <= 0.0) begin $strobe("Fatal: POXEDGE_i = %e is non-positive.", POXEDGE_i); $finish(0); end end if (CDSCD_i < 0.0) begin $strobe("Fatal: CDSCD_i = %e is negative.", CDSCD_i); $finish(0); end if (ASYMMOD != 0) begin if (CDSCDR_i < 0.0) begin $strobe("Fatal: CDSCDR_i = %e is negative.", CDSCDR_i); $finish(0); end end if (DLCIG_i < 0.0) begin $strobe("Warning: DLCIG = %e is negative, setting it to 0.", DLCIG_i); DLCIG_i = 0.0; end if (DLCIGD_i < 0.0) begin $strobe("Warning: DLCIGD = %e is negative, setting it to 0.", DLCIGD_i); DLCIGD_i = 0.0; end if (M0_i < 0.0) begin $strobe("Warning: M0_i = %e is negative, setting it to 0.", M0_i); M0_i = 0.0; end // Initialize variables used in geometry macros nuEndD = 0.0; nuEndS = 0.0; nuIntD = 0.0; nuIntS = 0.0; Rend = 0.0; Rint = 0.0; // Process drain series resistance DMCGeff = DMCG - DMCGT; DMCIeff = DMCI; DMDGeff = DMDG - DMCGT; // Processing S/D resistance and conductance below if($param_given(NRS)) begin RSourceGeo = RSH * NRS; end else if (RGEOMOD > 0 && RSH > 0.0) begin `BSIMBULKRdseffGeo(NF, GEOMOD, RGEOMOD, MINZ, Weff, RSH, DMCGeff, DMCIeff, DMDGeff, 1, RSourceGeo) end else begin RSourceGeo = 0.0; end if ($param_given(NRD)) begin RDrainGeo = RSH * NRD; end else if (RGEOMOD > 0 && RSH > 0.0) begin `BSIMBULKRdseffGeo(NF, GEOMOD, RGEOMOD, MINZ, Weff, RSH, DMCGeff, DMCIeff, DMDGeff, 0, RDrainGeo) end else begin RDrainGeo = 0.0; end // Clamping of source/drain resistances if (RSourceGeo <= 1.0e-3) begin RSourceGeo = 1.0e-3; end if (RDrainGeo <= 1.0e-3) begin RDrainGeo = 1.0e-3; end if (RDSMOD == 1) begin if (RSWMIN_i <= 0.0) begin RSWMIN_i = 0.0; end if (RDWMIN_i <= 0.0) begin RDWMIN_i = 0.0; end if (RSW_i <= 0.0) begin RSW_i = 0.0; end if (RDW_i <= 0.0) begin RDW_i = 0.0; end end else begin if (RDSWMIN_i <= 0.0) begin RDSWMIN_i = 0.0; end if (RDSW_i <= 0.0) begin RDSW_i = 0.0; end end // Body resistance network Grbsb = 0.0; Grbdb = 0.0; Grbpb = 0.0; Grbps = 0.0; Grbpd = 0.0; if (RBODYMOD != 0) begin Lnl = lln(Leff * 1.0e6); Lnw = lln(Weff * 1.0e6); Lnnf = lln(NF); Bodymode = 5; Rbpb = RBPB; Rbpd = RBPD; Rbps = RBPS; Rbdb = RBDB; Rbsb = RBSB; if (!$param_given(RBPS0) || !$param_given(RBPD0)) begin Bodymode = 1; end else if (!$param_given(RBSBX0) && !$param_given(RBSBY0) || !$param_given(RBDBX0) && !$param_given(RBDBY0)) begin Bodymode = 3; end if (RBODYMOD == 2) begin if (Bodymode == 5) begin Rbsbx = RBSBX0 * lexp(RBSDBXL * Lnl + RBSDBXW * Lnw + RBSDBXNF * Lnnf); Rbsby = RBSBY0 * lexp(RBSDBYL * Lnl + RBSDBYW * Lnw + RBSDBYNF * Lnnf); Rbsb = Rbsbx * Rbsby / (Rbsbx + Rbsby); Rbdbx = RBDBX0 * lexp(RBSDBXL * Lnl + RBSDBXW * Lnw + RBSDBXNF * Lnnf); Rbdby = RBDBY0 * lexp(RBSDBYL * Lnl + RBSDBYW * Lnw + RBSDBYNF * Lnnf); Rbdb = Rbdbx * Rbdby / (Rbdbx + Rbdby); end if (Bodymode == 3 || Bodymode == 5) begin Rbps = RBPS0 * lexp(RBPSL * Lnl + RBPSW * Lnw + RBPSNF * Lnnf); Rbpd = RBPD0 * lexp(RBPDL * Lnl + RBPDW * Lnw + RBPDNF * Lnnf); end Rbpbx = RBPBX0 * lexp(RBPBXL * Lnl + RBPBXW * Lnw + RBPBXNF * Lnnf); Rbpby = RBPBY0 * lexp(RBPBYL * Lnl + RBPBYW * Lnw + RBPBYNF * Lnnf); Rbpb = Rbpbx * Rbpby / (Rbpbx + Rbpby); end if (RBODYMOD == 1 || (RBODYMOD == 2 && Bodymode == 5)) begin if (Rbdb < 1.0e-3) begin Grbdb = 1.0e3; // in mho end else begin Grbdb = GBMIN + 1.0 / Rbdb; end if (Rbpb < 1.0e-3) begin Grbpb = 1.0e3; end else begin Grbpb = GBMIN + 1.0 / Rbpb; end if (Rbps < 1.0e-3) begin Grbps = 1.0e3; end else begin Grbps = GBMIN + 1.0 / Rbps; end if (Rbsb < 1.0e-3) begin Grbsb = 1.0e3; end else begin Grbsb = GBMIN + 1.0 / Rbsb; end if (Rbpd < 1.0e-3) begin Grbpd = 1.0e3; end else begin Grbpd = GBMIN + 1.0 / Rbpd; end end else if (RBODYMOD == 2 && Bodymode == 3) begin Grbdb = GBMIN; Grbsb = GBMIN; if (Rbpb < 1.0e-3) begin Grbpb = 1.0e3; end else begin Grbpb = GBMIN + 1.0 / Rbpb; end if (Rbps < 1.0e-3) begin Grbps = 1.0e3; end else begin Grbps = GBMIN + 1.0 / Rbps; end if (Rbpd < 1.0e-3) begin Grbpd = 1.0e3; end else begin Grbpd = GBMIN + 1.0 / Rbpd; end end else if (RBODYMOD == 2 && Bodymode == 1) begin Grbdb = GBMIN; Grbsb = GBMIN; Grbps = 1.0e3; Grbpd = 1.0e3; if (Rbpb < 1.0e-3) begin Grbpb = 1.0e3; end else begin Grbpb = GBMIN + 1.0 / Rbpb; end end end // Gate process resistance Grgeltd = RSHG * (XGW + Weffcj / 3.0 / NGCON) / (NGCON * NF * (Lnew - XGL)); if (Grgeltd > 0.0) begin Grgeltd = 1.0 / Grgeltd; end else begin Grgeltd = 1.0e3; if (RGATEMOD != 0) begin `STROBE("Warning: (instance BSIMBULK) The gate conductance reset to 1.0e3 mho."); end end T0y = TOXE * TOXE; T1y = TOXE * POXEDGE_i; T2y = T1y * T1y; ToxRatio = lexp(NTOX_i * lln(TOXREF / TOXE)) / T0y; ToxRatioEdge = lexp(NTOX_i * lln(TOXREF / T1y)) / T2y; Aechvb = (TYPE == `ntype) ? 4.97232e-7 : 3.42537e-7; Bechvb = (TYPE == `ntype) ? 7.45669e11 : 1.16645e12; AechvbEdge = Aechvb * Weff * ToxRatioEdge; BechvbEdge = -Bechvb * TOXE * POXEDGE_i; Aechvb = Aechvb * (Weff * Leff * ToxRatio); Bechvb = -Bechvb * TOXE; Weff_SH = WTH0 + Weff; // Parameters for self-heating if((SHMOD != 0) && (RTH0 > 0.0) && (Weff_SH > 0.0)) begin gth = Weff_SH * NF / RTH0; cth = CTH0 * Weff_SH * NF; end else begin // set gth to some value to prevent a singular G matrix gth = 1.0; cth = 0.0; end // Temperature Dependent Calculations Begin Here if (TNOM <= -`P_CELSIUS0) begin T0 = `REFTEMP - `P_CELSIUS0; $strobe("Warning: TNOM = %e C <= %e C. Setting TNOM to %e C.", TNOM, -`P_CELSIUS0, T0); Tnom = `REFTEMP; end else begin Tnom = TNOM + `P_CELSIUS0; end DevTemp = $temperature + DTEMP; // Calculate temperature dependent values for self-heating effect if ((SHMOD != 0) && (RTH0 > 0.0) && (Weff_SH > 0.0)) begin delTemp1 = Temp(t); end else begin delTemp1 = 0.0; end DevTemp = delTemp1 + DevTemp; T_DELTA_SH = Temp(t); T_TOTAL_K = DevTemp; T_TOTAL_C = DevTemp - `P_CELSIUS0; Vt = `KboQ * DevTemp; inv_Vt = 1.0 / Vt; TRatio = DevTemp / Tnom; delTemp = DevTemp - Tnom; Vtm = `KboQ * DevTemp; Vtm0 = `KboQ * Tnom; Eg = BG0SUB - TBGASUB * DevTemp * DevTemp / (DevTemp + TBGBSUB); Eg0 = BG0SUB - TBGASUB * Tnom * Tnom / (Tnom + TBGBSUB); T1 = (DevTemp / Tnom) * sqrt(DevTemp / Tnom); ni = NI0SUB * T1 * lexp(Eg / (2.0 * Vtm0) - Eg / (2.0 * Vtm)); if ((SHMOD != 0) && (RTH0 > 0.0) && (Weff_SH > 0.0)) begin T0 = lln(NDEP_i / ni); phib = sqrt(T0 * T0 + 1.0e-6); end else begin phib = lln(NDEP_i / ni); end if ((SHMOD != 0) && (RTH0 > 0.0) && (Weff_SH > 0.0)) begin T0 = lln(NDEP_i * NSD_i / (ni * ni)); Vbi = sqrt(T0 * T0 + 1.0e-6); end else begin Vbi = lln(NDEP_i * NSD_i / (ni * ni)); end if (NGATE_i > 0.0) begin Vfbsdr = -devsign * Vt * lln(NGATE_i / NSD_i) + VFBSDOFF; end else begin Vfbsdr = 0.0; end // Short channel effects Phist = max(0.4 + Vt * phib + PHIN_i, 0.4); sqrtPhist = sqrt(Phist); T1DEP = sqrt(2.0 * epssi / (`q * NDEP_i)); litl = sqrt((epssi / epsox) * TOXE * XJ_i); NFACTOR_t = NFACTOR_i * hypsmooth((1.0 + TNFACTOR * (TRatio - 1.0)), 1e-3); ETA0_t = ETA0_i * (1.0 + TETA0 * (TRatio - 1.0)); if (ASYMMOD != 0) begin ETA0R_t = ETA0R_i * (1.0 + TETA0 * (TRatio - 1.0)); end // Mobility degradation eta_mu = (TYPE != `ntype) ? (`Oneby3 * ETAMOB) : (0.5 * ETAMOB); U0_t = U0_i * pow(TRatio, UTE_i); UA_t = UA_i * hypsmooth(1.0 + UA1_i * delTemp - 1.0e-6, 1.0e-3); UC_t = UC_i * hypsmooth(1.0 + UC1_i * delTemp - 1.0e-6, 1.0e-3); UD_t = UD_i * pow(TRatio, UD1_i); UCS_t = UCS_i * pow(TRatio, UCSTE_i); if (ASYMMOD != 0) begin U0R_t = U0R_i * pow(TRatio, UTE_i); UAR_t = UAR_i * hypsmooth(1.0 + UA1_i * delTemp - 1.0e-6, 1.0e-3); UCR_t = UCR_i * hypsmooth(1.0 + UC1_i * delTemp - 1.0e-6, 1.0e-3); UDR_t = UDR_i * pow(TRatio, UD1_i); UCSR_t = UCSR_i * pow(TRatio, UCSTE_i); end rdstemp = pow(TRatio, PRT_i); VSAT_t = VSAT_i * pow(TRatio, -AT_i); if (VSAT_t < 100.0) begin $strobe("Warning: VSAT(%f) = %e is less than 100, setting it to 100.", DevTemp, VSAT_t); VSAT_t = 100.0; end if (ASYMMOD != 0) begin VSATR_t = VSATR_i * pow(TRatio, -AT_i); if (VSATR_t < 100.0) begin $strobe("Warning: VSATR(%f) = %e is less than 100, setting it to 100.", DevTemp, VSATR_t); VSATR_t = 100.0; end end VSATCV_t = VSATCV_i * pow(TRatio, -AT_i); if (VSATCV_t < 100.0) begin $strobe("Warning: VSATCV(%f) = %e is less than 100, setting it to 100.", DevTemp, VSATCV_t); VSATCV_t = 100.0; end DELTA_t = 1.0 / ( hypsmooth((1.0 / DELTA_i) * (1.0 + TDELTA * delTemp) - 2.0 , 1.0e-3) + 2.0); PTWG_t = PTWG_i * hypsmooth(1.0 - PTWGT_i * delTemp - 1.0e-6, 1.0e-3); if (ASYMMOD != 0) begin PTWGR_t = PTWGR_i * hypsmooth(1.0 - PTWGT_i * delTemp - 1.0e-6, 1.0e-3); end A1_t = A1_i * hypsmooth(1.0 + A11_i * delTemp - 1.0e-6, 1.0e-3); A2_t = A2_i * hypsmooth(1.0 + A21_i * delTemp - 1.0e-6, 1.0e-3); BETA0_t = BETA0_i * pow(TRatio, IIT_i); BGIDL_t = BGIDL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); BGISL_t = BGISL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); igtemp = lexp(IGT_i * lln(TRatio)); K0_t = K0_i * hypsmooth(1.0 + K01_i * delTemp - 1.0e-6, 1.0e-3); M0_t = M0_i * hypsmooth(1.0 + M01_i * delTemp - 1.0e-6, 1.0e-3); // Diode Model temperature Code Start CJS_t = CJS * hypsmooth(1.0 + TCJ * delTemp - 1.0e-6, 1.0e-3); CJD_t = CJD * hypsmooth(1.0 + TCJ * delTemp - 1.0e-6, 1.0e-3); CJSWS_t = CJSWS * hypsmooth(1.0 + TCJSW * delTemp - 1.0e-6, 1.0e-3); CJSWD_t = CJSWD * hypsmooth(1.0 + TCJSW * delTemp - 1.0e-6, 1.0e-3); CJSWGS_t = CJSWGS * hypsmooth(1.0 + TCJSWG * delTemp - 1.0e-6, 1.0e-3); CJSWGD_t = CJSWGD * hypsmooth(1.0 + TCJSWG * delTemp - 1.0e-6, 1.0e-3); PBS_t = hypsmooth(PBS - TPB * delTemp - 0.01, 1.0e-3) + 0.01; PBD_t = hypsmooth(PBD - TPB * delTemp - 0.01, 1.0e-3) + 0.01; PBSWS_t = hypsmooth(PBSWS - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; PBSWD_t = hypsmooth(PBSWD - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; PBSWGS_t = hypsmooth(PBSWGS - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; PBSWGD_t = hypsmooth(PBSWGD - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; T0 = Eg0 / Vtm0 - Eg / Vtm; T1 = lln(TRatio); T3 = lexp((T0 + XTIS * T1) / NJS); JSS_t = JSS * T3; JSWS_t = JSWS * T3; JSWGS_t = JSWGS * T3; T3 = lexp((T0 + XTID * T1) / NJD); JSD_t = JSD * T3; JSWD_t = JSWD * T3; JSWGD_t = JSWGD * T3; JTSS_t = JTSS * lexp(Eg0 * XTSS * (TRatio - 1.0) / Vtm); JTSSWS_t = JTSSWS * lexp(Eg0 * XTSSWS * (TRatio - 1.0) / Vtm); JTSSWGS_t = JTSSWGS * (sqrt(JTWEFF / Weffcj) + 1.0) * lexp(Eg0 * XTSSWGS * (TRatio - 1) / Vtm); JTSD_t = JTSD * lexp(Eg0 * XTSD * (TRatio - 1.0) / Vtm); JTSSWD_t = JTSSWD * lexp(Eg0 * XTSSWD * (TRatio - 1.0) / Vtm); JTSSWGD_t = JTSSWGD * (sqrt(JTWEFF / Weffcj) + 1.0) * lexp(Eg0 * XTSSWGD * (TRatio - 1) / Vtm); // All NJT*'s smoothed to 0.01 to prevent divide by zero / negative values NJTS_t = hypsmooth(NJTS * (1.0 + TNJTS * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSW_t = hypsmooth(NJTSSW * (1.0 + TNJTSSW * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWG_t = hypsmooth(NJTSSWG * (1.0 + TNJTSSWG * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; NJTSD_t = hypsmooth(NJTSD * (1.0 + TNJTSD * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWD_t = hypsmooth(NJTSSWD * (1.0 + TNJTSSWD * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWGD_t = hypsmooth(NJTSSWGD * (1.0 + TNJTSSWGD * (TRatio - 1.0)) - 0.01, 1.0e-3) + 0.01; // Effective Source/Drain junction area and perimeter `BSIMBULKPAeffGeo(NF, GEOMOD, MINZ, Weffcj, DMCGeff, DMCIeff, DMDGeff, temp_PSeff, temp_PDeff, temp_ASeff, temp_ADeff) if ($param_given(AS)) begin ASeff = AS * WMLT * LMLT; end else begin ASeff = temp_ASeff; end if (ASeff < 0.0) begin $strobe("Warning: (instance BSIMBULK) ASeff = %e is negative, set to zero.", ASeff); ASeff = 0.0; end if ($param_given(AD)) begin ADeff = AD * WMLT * LMLT; end else begin ADeff = temp_ADeff; end if (ADeff < 0.0) begin $strobe("Warning: (instance BSIMBULK) ADeff = %e is negative, set to zero.", ADeff); ADeff = 0.0; end if ($param_given(PS)) begin if (PERMOD == 0) begin // PS does not include gate-edge perimeter PSeff = PS * WMLT; end else begin // PS includes gate-edge perimeter PSeff = max(PS * WMLT - Weffcj * NF, 0.0); end end else begin PSeff = temp_PSeff; if (PSeff < 0.0) begin $strobe("Warning: (instance BSIMBULK) PSeff = %e is negative.Set to 0.0", PSeff); PSeff = 0.0; end end if ($param_given(PD)) begin if (PERMOD == 0) begin // PD does not include gate-edge perimeter PDeff = PD * WMLT; end else begin // PD includes gate-edge perimeter PDeff = max(PD * WMLT - Weffcj * NF, 0.0); end end else begin PDeff = temp_PDeff; if (PDeff < 0.0) begin $strobe("Warning: (instance BSIMBULK) PDeff = %e is negative.Set to 0.0", PDeff); PDeff = 0.0; end end Isbs = ASeff * JSS_t + PSeff * JSWS_t + Weffcj * NF * JSWGS_t; if (Isbs > 0.0) begin Nvtms = Vtm * NJS; XExpBVS = lexp(-BVS / Nvtms) * XJBVS; T2 = max(IJTHSFWD / Isbs, 10.0); Tb = 1.0 + T2 - XExpBVS; VjsmFwd = Nvtms * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVS))); T0 = lexp(VjsmFwd / Nvtms); IVjsmFwd = Isbs * (T0 - XExpBVS / T0 + XExpBVS - 1.0); SslpFwd = Isbs * (T0 + XExpBVS / T0) / Nvtms; T2 = hypsmooth(IJTHSREV / Isbs - 10.0, 1.0e-3) + 10.0; VjsmRev = -BVS - Nvtms * lln((T2 - 1.0) / XJBVS); T1 = XJBVS * lexp(-(BVS + VjsmRev) / Nvtms); IVjsmRev = Isbs * (1.0 + T1); SslpRev = -Isbs * T1 / Nvtms; end else begin Nvtms = 0.0; XExpBVS = 0.0; VjsmFwd = 0.0; IVjsmFwd = 0.0; SslpFwd = 0.0; VjsmRev = 0.0; IVjsmRev = 0.0; SslpRev = 0.0; end // Drain-side junction current Isbd = ADeff * JSD_t + PDeff * JSWD_t + Weffcj * NF * JSWGD_t; if (Isbd > 0.0) begin Nvtmd = Vtm * NJD; XExpBVD = lexp(-BVD / Nvtmd) * XJBVD; T2 = max(IJTHDFWD / Isbd, 10.0); Tb = 1.0 + T2 - XExpBVD; VjdmFwd = Nvtmd * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVD))); T0 = lexp(VjdmFwd / Nvtmd); IVjdmFwd = Isbd * (T0 - XExpBVD / T0 + XExpBVD - 1.0); DslpFwd = Isbd * (T0 + XExpBVD / T0) / Nvtmd; T2 = hypsmooth(IJTHDREV / Isbd - 10.0, 1.0e-3) + 10.0; VjdmRev = -BVD - Nvtmd * lln((T2 - 1.0) / XJBVD); T1 = XJBVD * lexp(-(BVD + VjdmRev) / Nvtmd); IVjdmRev = Isbd * (1.0 + T1); DslpRev = -Isbd * T1 / Nvtmd; end else begin Nvtmd = 0.0; XExpBVD = 0.0; VjdmFwd = 0.0; IVjdmFwd = 0.0; DslpFwd = 0.0; VjdmRev = 0.0; IVjdmRev = 0.0; DslpRev = 0.0; end // STI stress equations if((SA > 0.0) && (SB > 0.0) && ((NF == 1.0) || ((NF > 1.0) && (SD > 0.0)))) begin T0 = pow(Lnew, LLODKU0); W_tmp_stress = Wnew + WLOD; T1 = pow(W_tmp_stress, WLODKU0); tmp1_stress = LKU0 / T0 + WKU0 / T1 + PKU0 / (T0 * T1); kstress_u0 = 1.0 + tmp1_stress; T0 = pow(Lnew, LLODVTH); T1 = pow(W_tmp_stress, WLODVTH); tmp1_stress_vth = LKVTH0 / T0 + WKVTH0 / T1 + PKVTH0 / (T0 * T1); kstress_vth0 = 1.0 + tmp1_stress_vth; T0 = TRatio - 1.0; ku0_temp = kstress_u0 * (1.0 + TKU0 * T0) + 1.0e-9; i = 0; while (i < NF) begin T0 = 1.0 / NF / (SA + 0.5 * L_mult + i * (SD + L_mult)); T1 = 1.0 / NF / (SB + 0.5 * L_mult + i * (SD + L_mult)); Inv_sa = Inv_sa + T0; Inv_sb = Inv_sb + T1; i = i + 1; end Inv_saref = 1.0 / (SAREF + 0.5 * L_mult); Inv_sbref = 1.0 / (SBREF + 0.5 * L_mult); Inv_odref = Inv_saref + Inv_sbref; rho_ref = (KU0 / ku0_temp) * Inv_odref; Inv_od = Inv_sa + Inv_sb; rho = (KU0 / ku0_temp) * Inv_od; mu0_mult = (1.0 + rho) / (1.0 + rho_ref); vsat_mult = (1.0 + rho * KVSAT) / (1.0 + rho_ref * KVSAT); vth0_stress = (KVTH0 / kstress_vth0) * (Inv_od - Inv_odref); k2_stress = (STK2 / pow(kstress_vth0, LODK2)) * (Inv_od - Inv_odref); eta_stress = (STETA0 / pow(kstress_vth0, LODETA0)) * (Inv_od - Inv_odref); U0_t = U0_t * mu0_mult; VSAT_t = VSAT_t * vsat_mult; K2_i = K2_i + k2_stress; ETA0_t = ETA0_t + eta_stress; if (EDGEFET == 1) begin vth0_stress_EDGE = (KVTH0EDGE_i / kstress_vth0) * (Inv_od - Inv_odref); k2_stress_EDGE = (STK2EDGE_i / pow(kstress_vth0, LODK2)) * (Inv_od - Inv_odref); eta_stress_EDGE = (STETA0EDGE_i / pow(kstress_vth0, LODETA0)) * (Inv_od - Inv_odref); end K2_EDGE = K2EDGE_i + k2_stress_EDGE; ETA0_EDGE = ETA0EDGE_i + eta_stress_EDGE; end else begin vth0_stress = 0.0; vth0_stress_EDGE = 0.0; end // Well proximity effect if (WPEMOD == 1) begin Wdrn = W / NF; local_sca = SCA; local_scb = SCB; local_scc = SCC; if (!$param_given(SCA) && !$param_given(SCB) && !$param_given(SCC)) begin if($param_given(SC) && SC > 0.0) begin T1 = SC + Wdrn; T2 = 1.0 / SCREF; local_sca = SCREF * SCREF / (SC * T1); local_scb = ((0.1 * SC + 0.01 * SCREF) * lexp(-10.0 * SC * T2) - (0.1 * T1 + 0.01 * SCREF) * lexp(-10.0 * T1 * T2)) / Wdrn; local_scc = ((0.05 * SC + 0.0025 * SCREF) * lexp(-20.0 * SC * T2) - (0.05 * T1 + 0.0025 * SCREF) * lexp(-20.0 * T1 * T2)) / Wdrn; end else begin `STROBE("Warning: (Instance BSIMBULK) No WPE as none of SCA, SCB, SCC, SC is given and/or SC not positive."); end end end vth0_well = KVTH0WE_i * (local_sca + WEB * local_scb + WEC * local_scc); k2_well = K2WE_i * (local_sca + WEB * local_scb + WEC * local_scc); mu_well = 1.0 + KU0WE_i * (local_sca + WEB * local_scb + WEC * local_scc); U0_t = U0_t * mu_well; K2_i = K2_i + k2_well; // Load Terminal Voltages Vg = devsign * V(gi, bi); Vd = devsign * V(di, bi); Vs = devsign * V(si, bi); Vds = Vd - Vs; Vds_noswap = Vds; Vsb_noswap = Vs; Vdb_noswap = Vd; Vbs_jct = devsign * V(sbulk, si); Vbd_jct = devsign * V(dbulk, di); Vgd_noswap = Vg - Vd; Vgs_noswap = Vg - Vs; Vgd_ov_noswap = devsign * V(gm, di); Vgs_ov_noswap = devsign * V(gm, si); // Terminal voltage conditioning // Source-drain interchange sigvds = 1.0; if (Vds < 0.0) begin sigvds = -1.0; Vd = devsign * V(si, bi); Vs = devsign * V(di, bi); end Vds = Vd - Vs; T0 = AVDSX * Vds; if (T0 > `EXPL_THRESHOLD) begin T1 = T0; end else begin T1 = ln(1.0 + exp(T0)); end Vdsx = ((2.0/AVDSX) * T1) - Vds - ((2.0/AVDSX) * ln(2.0)); Vbsx = -(Vs + 0.5 * (Vds - Vdsx)); // Asymmetry model T0 = tanh(0.6 * Vds_noswap / Vtm); wf = 0.5 + 0.5 * T0; wr = 1.0 - wf; if (ASYMMOD != 0) begin CDSCD_a = CDSCDR_i * wr + CDSCD_i * wf; ETA0_a = ETA0R_t * wr + ETA0_t * wf; PDIBLC_a = PDIBLCR_i * wr + PDIBLC_i * wf; PCLM_a = PCLMR_i * wr + PCLM_i * wf; PSAT_a = PSATR_i * wr + PSAT_i * wf; VSAT_a = VSATR_t * wr + VSAT_t * wf; PTWG_a = PTWGR_t * wr + PTWG_t * wf; U0_a = U0R_t * wr + U0_t * wf; UA_a = UAR_t * wr + UA_t * wf; UC_a = UCR_t * wr + UC_t * wf; UD_a = UDR_t * wr + UD_t * wf; UCS_a = UCSR_t * wr + UCS_t * wf; end else begin CDSCD_a = CDSCD_i; ETA0_a = ETA0_t; PDIBLC_a = PDIBLC_i; PCLM_a = PCLM_i; PSAT_a = PSAT_i; VSAT_a = VSAT_t; PTWG_a = PTWG_t; U0_a = U0_t; UA_a = UA_t; UC_a = UC_t; UD_a = UD_t; UCS_a = UCS_t; end // SCE, DIBL, SS degradation effects, Ref: BSIM4 Model `Smooth(Phist - Vbsx, 0.05, 0.1, PhistVbs) sqrtPhistVbs = sqrt(PhistVbs); Xdep = T1DEP * sqrtPhistVbs; Cdep = epssi / Xdep; cdsc = CIT_i + NFACTOR_t + CDSCD_a * Vdsx - CDSCB_i * Vbsx; T1 = 1.0 + cdsc/Cox; `Smooth(T1, 1, 0.05, n) nVt = n * Vt; inv_nVt = 1.0 / nVt; // Vth Shift for DIBL dVth_dibl = -(ETA0_a + ETAB_i * Vbsx) * Vdsx; // Vth shift with temperature dvth_temp = (KT1_i + KT1L / Leff + KT2_i * Vbsx) * (pow(TRatio, KT1EXP) - 1.0); `Smooth2(dVth_dibl, 0.0, 5.0e-5, dVth_dibl) // Vth Correction for Pocket Implant if (DVTP0_i > 0.0) begin T0 = -DVTP1_i * Vdsx; if (T0 < -`EXPL_THRESHOLD) begin T2 = `MIN_EXPL; end else begin T2 = lexp(T0); end T3 = Leff + DVTP0_i * (1.0 + T2); dVth_ldop = -nVt * lln(Leff / T3); end else begin dVth_ldop = 0.0; end T4 = DVTP5_i + DVTP2_i / pow(Leff, DVTP3_i); dVth_ldop = dVth_ldop - T4 * tanh(DVTP4_i * Vdsx); // Normalization of terminal and flatband voltage by nVt VFB_i = VFB_i + DELVTO; vg = Vg * inv_nVt; vs = Vs * inv_nVt; vfb = VFB_i * inv_nVt; // Compute dVth_VNUD with "first-order" and "second-order" body-bias effect dVth_VNUD = K1_i * (sqrtPhistVbs - sqrtPhist) - K2_i * Vbsx; Vth_shift = dVth_dibl + dVth_ldop + dVth_VNUD - dvth_temp + vth0_stress + vth0_well; vgfb = vg - vfb - Vth_shift * inv_nVt; // Threshold voltage for operating point information gam = sqrt(2.0 * `q * epssi * NDEP_i * inv_Vt) / Cox; q_vth = 0.5; T0 = hypsmooth((2.0 * phib + Vs * inv_Vt), 1.0e-3); nq = 1.0 + gam / (2.0 * sqrt(T0)); psip_th = hypsmooth((Vs * inv_Vt + 2.0 * phib + lln(q_vth) + 2.0 * q_vth + lln(2.0 * nq / gam * (2.0 * q_vth * nq / gam + 2.0 * sqrt(T0)))), 1.0e-3); VTH = devsign * (VFB_i + (psip_th - Vs * inv_Vt) * Vt + Vt * gam * sqrt(psip_th) + Vth_shift); // Normalized body factor gam = sqrt(2.0 * `q * epssi * NDEP_i * inv_nVt) / Cox; inv_gam = 1.0 / gam; // psip: pinch-off voltage phib_n = phib / n; `PO_psip(vgfb, gam, 0, phib_n, psip) // normalized inversion charge at source end of channel `BSIM_q(psip, phib_n, vs, gam, qs) // average charge-surf. pot. slope, Ref: Charge-based MOS Transistor Modeling by C. Enz & E. Vittoz `Smooth(psip, 1.0, 2.0, psipclamp) sqrtpsip = sqrt(psipclamp); // source side surf pot. psiavg = psip - 2.0 * qs; `Smooth(psiavg, 1.0, 2.0, T0) nq = 1.0 + gam / (sqrtpsip + sqrt(T0)); // Drain Saturation Voltage EeffFactor = 1.0e-8 / (epsratio * TOXE); T0 = nVt * (vgfb - psip - 2.0 * qs * (nq - 1.0)); `Smooth(T0, 0, 0.1, qbs) // Source side qi and qb for Vdsat- normalized to Cox qis = 2.0 * nq * nVt * qs; Eeffs = EeffFactor * (qbs + eta_mu * qis); // Ref: BSIM4 Model mobility model T2 = pow(0.5 * (1.0 + (qis / qbs)), UCS_a); T3 = (UA_a + UC_a * Vbsx) * pow(Eeffs, EU_i) + UD_a / T2; T4 = 1.0 + T3; `Smooth(T4, 1.0, 0.0015, Dmobs) WeffWRFactor = 1.0 / (pow(Weff * 1.0e6, WR_i) * NF); if (RDSMOD == 1) begin Rdss = 0.0; end else begin T0 = 1.0 + PRWG_i * qis; T1 = PRWB_i * (sqrtPhistVbs - sqrtPhist); T2 = 1.0 / T0 + T1; T3 = T2 + sqrt(T2 * T2 + 0.01); Rdss = (RDSWMIN_i + RDSW_i * T3) * WeffWRFactor * NF * rdstemp; if (RDSMOD == 2) begin Rdss = (RSourceGeo + (RDSWMIN_i + RDSW_i * T3) * WeffWRFactor * NF + RDrainGeo) * rdstemp; end end T0 = pow(Dmobs, 1.0 / PSAT_a); if (PSATB_i < 0.0) begin T1 = 1.0 / (1.0 + PSATB_i * Vbsx); end else begin T1 = 1.0 - PSATB_i * Vbsx; end T2 = 10.0 * PSATX * qs * T1 / (10.0 * PSATX + qs * T1); if (PTWG_a < 0.0) begin LambdaC = 2.0 * ((U0_a / T0) * nVt / (VSAT_a * Leff)) * (1.0 / (1.0 - PTWG_a * T2)); end else begin LambdaC = 2.0 * ((U0_a / T0) * nVt / (VSAT_a * Leff)) * (1.0 + PTWG_a * T2); end // qdsat for external Rds if (Rdss == 0) begin // Accurate qdsat derived from consistent I-V T0 = 0.5 * LambdaC * (qs * qs + qs) / (1.0 + 0.5 * LambdaC * (1.0 + qs)); T1 = 2.0 * LambdaC * (qs - T0); T2 = sqrt(1.0 + T1 * T1); ln_T1_T2 = asinh(T1); if (T1 != 0.0) begin T3 = T2 + (1.0 / T1) * ln_T1_T2; end else begin T3 = T2 + (1.0 / T2); end T4 = T0 * T3 - LambdaC * ((qs * qs + qs) - (T0 * T0 + T0)); if (T1 != 0.0) begin T5 = -2.0 * LambdaC * (T1 * T2 - ln_T1_T2) / (T1 * T1); end else begin T5 = -2.0 * LambdaC * (T1/T2) * (T1/T2) *(T1/T2); end T6 = T0 * T5 + T3 + LambdaC * (2.0 * T0 + 1.0); T0 = T0 - (T4 / T6); T1 = 2.0 * LambdaC * (qs - T0); T2 = sqrt(1.0 + T1 * T1); ln_T1_T2 = asinh(T1); if (T1 != 0.0) begin T3 = T2 + (1.0 / T1) * ln_T1_T2; end else begin T3 = T2 + (1.0 / T2); end T4 = T0 * T3 - LambdaC * ((qs * qs + qs) - (T0 * T0 + T0)); if (T1 != 0.0) begin T5 = -2.0 * LambdaC * (T1 * T2 - ln_T1_T2) / (T1 * T1); end else begin T5 = (T1 / T2) * (T1 / T2) * (T1 / T2); end T6 = T0 * T5 + T3 + LambdaC * (2.0 * T0 + 1.0); qdsat = T0 - (T4/T6); // qdsat for internal Rds, Ref: BSIM4 Model end else begin // Accurate qdsat derived from consistent I-V T11 = Weff * 2.0 * nq * Cox * nVt * VSAT_a; T12 = T11 * LambdaC * Rdss / (2.0 * nVt); T0 = 0.5 * LambdaC * (qs * qs + qs) / (1.0 + 0.5 * LambdaC * (1.0 + qs)); T1 = 2.0 * LambdaC * (qs - T0); T2 = sqrt(1.0 + T1 * T1); ln_T1_T2 = asinh(T1); if (T1 != 0.0) begin T3 = T2 + (1.0 / T1) * ln_T1_T2; end else begin T3 = T2 + (1.0 / T2); end T4 = T0 * T3 + T12 * T0 * (qs + T0 + 1.0) - LambdaC * ((qs * qs + qs) - (T0 * T0 + T0)); if (T1 != 0.0) begin T5 = -2.0 * LambdaC * (T1 * T2 - ln_T1_T2) / (T1 * T1); end else begin T5 = -2.0 * LambdaC * (T1 / T2) * (T1 / T2) * (T1 / T2); end T6 = T0 * T5 + T3 + T12 * (qs + 2.0 * T0 + 1.0) + LambdaC * (2.0 * T0 + 1.0); T0 = T0 - T4 / T6; T1 = 2.0 * LambdaC * (qs - T0); T2 = sqrt(1.0 + T1 * T1); ln_T1_T2 = asinh(T1); if (T1 != 0) begin T3 = T2 + (1.0 / T1) * ln_T1_T2; end else begin T3 = T2 + (1.0 / T2); end T4 = T0 * T3 + T12 * T0 * (qs + T0 + 1.0) - LambdaC * ((qs * qs + qs) - (T0 * T0 + T0)); if (T1 != 0.0) begin T5 = -2.0 * LambdaC * (T1 * T2 - ln_T1_T2) / (T1 * T1); end else begin T5 = -2.0 * LambdaC * (T1 / T2) * (T1 / T2) * (T1 / T2); end T6 = T0 * T5 + T3 + T12 * (qs + 2.0 * T0 + 1.0) + LambdaC * (2.0 * T0 + 1.0); qdsat = T0 - T4 / T6; end vdsat = psip - 2.0 * phib_n - (2.0 * qdsat + lln((qdsat * 2.0 * nq * inv_gam) * ((qdsat * 2.0 * nq * inv_gam) + (gam / (nq - 1.0))))); Vdsat = vdsat * nVt; // normalized charge qdeff at drain end of channel // Vdssat clamped to avoid negative values during transient simulation `Smooth(Vdsat - Vs, 0.0, 1.0e-3, Vdssat) T7 = pow(Vds / Vdssat , 1.0 / DELTA_t); T8 = pow(1.0 + T7, -DELTA_t); Vdseff = Vds * T8; vdeff = (Vdseff + Vs) * inv_nVt; `BSIM_q(psip, phib_n, vdeff, gam, qdeff) // Reevaluation of nq to include qdeff psiavg = psip - qs - qdeff -1.0; `Smooth(psiavg, 1.0, 2.0, T0) T2 = sqrt(T0); nq = 1.0 + gam / (sqrtpsip + T2); // Inversion and bulk charge DQSD2 = (qs - qdeff) * (qs - qdeff); T0 = 1.0 / (1.0 + qs + qdeff); T1 = DQSD2 * T0; Qb = vgfb - psip - (nq - 1.0) * (qs + qdeff + `Oneby3 * T1); T2 = `Oneby3 * nq; T3 = T1 * T0; Qs = T2 * (2.0 * qs + qdeff + 0.5 * (1.0 + 0.8 * qs + 1.2 * qdeff) * T3); Qd = T2 * (qs + 2.0 * qdeff + 0.5 * (1.0 + 1.2 * qs + 0.8 * qdeff) * T3); // Mobility degradation, Ref: BSIM4 // Average charges (qba and qia) - normalized to Cox `Smooth(nVt * Qb, 0, 0.1, qba) qia = nVt * (Qs + Qd); Eeffm = EeffFactor * (qba + eta_mu * qia); T2 = pow(0.5 * (1.0 + (qia / qba)), UCS_a); T3 = (UA_a + UC_a * Vbsx) * pow(Eeffm, EU_i) + UD_a / T2; T4 = 1.0 + T3; `Smooth(T4, 1.0, 0.0015, Dmob) // Output conductance Esat = 2.0 * VSAT_a / (U0_a / Dmob); EsatL = Esat * Leff; if (PVAG_i > 0.0) begin PVAGfactor = 1.0 + PVAG_i * qia / EsatL; end else begin PVAGfactor = 1.0 / (1.0 - PVAG_i * qia / EsatL); end // Output conductance due to DIBL, Ref: BSIM4 DIBLfactor = PDIBLC_a; diffVds = Vds - Vdseff; Vgst2Vtm = qia + 2.0 * nVt; if (DIBLfactor > 0.0) begin T3 = Vgst2Vtm / (Vdssat + Vgst2Vtm); T4 = hypsmooth((1.0 + PDIBLCB_i * Vbsx), 1.0e-3); T5 = 1.0 / T4; VaDIBL = Vgst2Vtm / DIBLfactor * T3 * PVAGfactor * T5; Moc = 1.0 + diffVds / VaDIBL; end else begin Moc = 1.0; end // Degradation factor due to pocket implant, Ref: BSIM4 Model if (FPROUT_i <= 0.0) begin Fp = 1.0; end else begin T9 = FPROUT_i * sqrt(Leff) / Vgst2Vtm; Fp = 1.0 / (1.0 + T9); end // Channel length modulation, Ref: BSIM4 Model Vasat = Vdssat + EsatL; if (PCLM_a != 0.0) begin if (PCLMG < 0.0) begin T1 = PCLM_a / (1.0 - PCLMG * qia / EsatL) / Fp; end else begin T1 = PCLM_a * (1.0 + PCLMG * qia / EsatL) / Fp; end MdL = 1.0 + T1 * lln(1.0 + diffVds / T1 / Vasat); end else begin MdL = 1.0; end Moc = Moc * MdL; // Calculate Va_DITS, Ref: BSIM4 T1 = lexp(PDITSD_i * Vds); if (PDITS_i > 0.0) begin T2 = 1.0 + PDITSL * Leff; VaDITS = (1.0 + T2 * T1) / PDITS_i; VaDITS = VaDITS * Fp; end else begin VaDITS = `MAX_EXPL; end T4 = diffVds / VaDITS; T0 = 1.0 + T4; Moc = Moc * T0; // Calculate Vascbe, Ref: BSIM4 Model if (PSCBE2_i > 0.0) begin if (diffVds > PSCBE1_i * litl / `EXPL_THRESHOLD) begin T0 = PSCBE1_i * litl / diffVds; VaSCBE = Leff * lexp(T0) / PSCBE2_i; end else begin VaSCBE = `MAX_EXPL * Leff/PSCBE2_i; end end else begin VaSCBE = `MAX_EXPL; end Mscbe = 1.0 + (diffVds / VaSCBE); Moc = Moc * Mscbe; // Velocity saturation T0 = pow(Dmob, 1.0 / PSAT_a); if (PSATB_i < 0.0) begin T1 = 1.0 / (1.0 + PSATB_i * Vbsx); end else begin T1 = 1.0 - PSATB_i * Vbsx; end T2 = 10.0 * PSATX * qia * T1 / (10.0 * PSATX + qia * T1); if (PTWG_a < 0.0) begin LambdaC = 2.0 * ((U0_a / T0) * nVt / (VSAT_a * Leff)) * (1.0 / (1.0 - PTWG_a * T2)); end else begin LambdaC = 2.0 * ((U0_a / T0) * nVt / (VSAT_a * Leff)) * (1.0 + PTWG_a * T2); end T1 = 2.0 * LambdaC * (qs - qdeff); T2 = sqrt(1.0 + T1 * T1); if (T1 != 0.0) begin Dvsat = 0.5 * (T2 + (1.0 / T1) * asinh(T1)); end else begin Dvsat = 0.5 * (T2 + (1.0 / T2)); end Dptwg = Dvsat; // S/D Series Resistance, Ref: BSIM4 Rsource = 0.0; Rdrain = 0.0; if (RDSMOD == 1) begin Rdsi = 0.0; Dr = 1.0; // Rs (Source side resistance for all fingers) T2 = Vgs_noswap - Vfbsdr; T3 = sqrt(T2 * T2 + 0.01); Vgs_eff = 0.5 * (T2 + T3); T5 = 1.0 + PRWG_i * Vgs_eff; T6 = (1.0 / T5) + PRWB_i * Vsb_noswap; T4 = 0.5 * (T6 + sqrt(T6 * T6 + 0.01)); Rsource = rdstemp * (RSourceGeo + (RSWMIN_i + RSW_i * T4) * WeffWRFactor); // Rd (Drain side resistance for all fingers) T2 = Vgd_noswap - Vfbsdr; T3 = sqrt(T2 * T2 + 0.01); Vgd_eff = 0.5 * (T2 + T3); T5 = 1.0 + PRWG_i * Vgd_eff; T6 = (1.0 / T5) + PRWB_i * Vdb_noswap; T4 = 0.5 * (T6 + sqrt(T6 * T6 + 0.01)); Rdrain = rdstemp * (RDrainGeo + (RDWMIN_i + RDW_i * T4) * WeffWRFactor); end else begin // Ref: (1) BSIM4 Model (2) "Operation and Modeling of the MOS Transistor" by Yannis Tsividis T0 = 1.0 + PRWG_i * qia; T1 = PRWB_i * (sqrtPhistVbs - sqrtPhist); T2 = 1.0 / T0 + T1; T3 = 0.5 * (T2 + sqrt(T2 * T2 + 0.01)); Rdsi = rdstemp * (RDSWMIN_i + RDSW_i * T3) * WeffWRFactor * NF; Rdrain = RDrainGeo; Rsource = RSourceGeo; Dr = 1.0 + U0_a /(Dvsat * Dmob) * Cox * Weff / Leff * qia * Rdsi; if (RDSMOD == 2) begin Rdsi = rdstemp * (RSourceGeo + (RDSWMIN_i + RDSW_i * T3) * WeffWRFactor * NF + RDrainGeo); Rdrain = 0.0; Rsource = 0.0; Dr = 1.0 + U0_a /(Dvsat * Dmob) * Cox * Weff / Leff * qia * Rdsi; end end // Non-saturation effect T0 = A1_t + A2_t / (qia + 2.0 * n * Vtm); DQSD = qs - qdeff; T1 = T0 * DQSD * DQSD; T2 = T1 + 1.0 - 0.001; T3 = -1.0 + 0.5 * (T2 + sqrt(T2 * T2 + 0.004)); Nsat = 0.5 * (1.0 + sqrt(1.0 + T3)); // MNUD model to enhance Id-Vd fitting flexibility T0 = (qs + qdeff); T1 = (qs - qdeff); T2 = T1 / (T0 + M0_t); T3 = K0_t * T2 * T2; Mnud = 1.0 + T3; Dtot = Dmob * Dvsat * Dr; // Effective mobility including mobility degradation ueff = U0_a / Dtot; // I-V ids = 2.0 * NF * nq * ueff * Weff / Leff * Cox * nVt * nVt * ((qs - qdeff) * (1.0 + qs + qdeff)) * Moc / Nsat * Mnud; ids = ids * IDS0MULT; Gcrg = 0.0; if (RGATEMOD > 1) begin idsovvds = ueff * Weff / Leff * Cox * qia; T9 = XRCRG2 * Vt; T0 = T9 * ueff * Weff / Leff * Cox; Gcrg = XRCRG1 * NF * (T0 + idsovvds); if (RGATEMOD == 2) begin T11 = Grgeltd + Gcrg; Gcrg = Grgeltd * Gcrg / T11; end end // Impact ionization current, Ref: BSIM4 if ((ALPHA0_i <= 0.0) || (BETA0_t <= 0.0)) begin Iii = 0.0; end else if (diffVds > BETA0_t / `EXPL_THRESHOLD) begin T1 = -BETA0_t / diffVds; Iii = ALPHA0_i * diffVds * ids * lexp(T1) / Mscbe; end else begin Iii = ALPHA0_i * diffVds * ids * `MIN_EXPL / Mscbe; end ISUB = Iii * devsign; // Gate Current, Ref: BSIM4 Model igbinv = 0.0; igbacc = 0.0; igb = 0.0; igcs = 0.0; igcd = 0.0; igs = 0.0; igd = 0.0; if ((IGCMOD != 0) || (IGBMOD != 0)) begin Voxm = nVt * (vgfb - psip + qs + qdeff); T1 = sqrt(Voxm * Voxm + 1.0e-4); Voxmacc = 0.5 * (-Voxm + T1); Voxminv = 0.5 * (Voxm + T1); // Igbinv if (IGBMOD != 0) begin T1 = Voxmacc / NIGBACC_i / Vt; Vaux_Igbacc = NIGBACC_i * Vt * lln(1.0 + lexp(-T1)); T2 = AIGBACC_i - BIGBACC_i * Voxmacc; T3 = 1.0 + CIGBACC_i * Voxmacc; T4 = -7.45669e11 * TOXE * T2 * T3; T5 = lexp(T4); T6 = 4.97232e-7; igbacc = NF * Weff * Leff * T6 * ToxRatio * Vg * Vaux_Igbacc * T5; igbacc = igbacc * igtemp; T1 = (Voxminv - EIGBINV_i) / NIGBINV_i / Vt; Vaux_Igbinv = NIGBINV_i * Vt * lln(1.0 + lexp(T1)); T2 = AIGBINV_i - BIGBINV_i * Voxminv; T3 = 1.0 + CIGBINV_i * Voxminv; T4 = -9.82222e11 * TOXE * T2 * T3; T5 = lexp (T4); T6 = 3.75956e-7; igbinv = NF * Weff * Leff * T6 * ToxRatio * Vg * Vaux_Igbinv * T5; igbinv = igbinv * igtemp; igb = igbacc + igbinv; end if (IGCMOD != 0) begin // Igcinv T1 = AIGC_i - BIGC_i * Voxminv; T2 = 1.0 + CIGC_i * Voxminv; T3 = Bechvb * T1 * T2; T4 = nq * nVt * (qs + qdeff) * lexp(T3); igc0 = NF * Aechvb * T4 * (Vg + 0.5 * Vdsx - 0.5 * (Vs + Vd)) * igtemp; // Gate-current partitioning Vdseffx = sqrt(Vdseff * Vdseff + 0.01) - 0.1; T1 = PIGCD_i * Vdseffx; T1_exp = lexp(-T1); T3 = T1 + T1_exp -1.0 + 1.0e-4; T4 = 1.0 - (T1 + 1.0) * T1_exp + 1.0e-4; T5 = T1 * T1 + 2.0e-4; if (sigvds > 0) begin igcd = igc0 * T4 / T5; igcs = igc0 * T3 / T5; end else begin igcs = igc0 * T4 / T5; igcd = igc0 * T3 / T5; end // Igs T2 = Vgs_noswap - Vfbsdr; Vgs_eff = sqrt(T2 * T2 + 1.0e-4); if (IGCLAMP == 1) begin T1 = hypsmooth((AIGS_i - BIGS_i * Vgs_eff), 1.0e-6); if (CIGS_i < 0.01) begin CIGS_i = 0.01; end end else begin T1 = AIGS_i - BIGS_i * Vgs_eff; end T2 = 1.0 + CIGS_i * Vgs_eff; T3 = BechvbEdge * T1 * T2; T4 = lexp(T3); igs_mult = igtemp * NF * AechvbEdge * DLCIG_i; igs = igs_mult * Vgs_noswap * Vgs_eff * T4; // Igd T2 = Vgd_noswap - Vfbsdr; Vgd_eff = sqrt(T2 * T2 + 1.0e-4); if (IGCLAMP == 1) begin T1 = hypsmooth((AIGD_i - BIGD_i * Vgd_eff), 1.0e-6); if (CIGD_i < 0.01) begin CIGD_i = 0.01; end end else begin T1 = AIGD_i - BIGD_i * Vgd_eff; end T2 = 1.0 + CIGD_i * Vgd_eff; T3 = BechvbEdge * T1 * T2; T4 = lexp(T3); igd_mult = igtemp * NF * AechvbEdge * DLCIGD_i; igd = igd_mult * Vgd_noswap * Vgd_eff * T4; end end IGS = devsign * igs; IGD = devsign * igd; IGB = devsign * igb; IGCS = devsign * igcs; IGCD = devsign * igcd; // GIDL and GISL Currents , Ref: BSIM4 Model igisl = 0.0; igidl = 0.0; if (GIDLMOD != 0) begin T0 = epsratio * TOXE; // GIDL if ((AGIDL_i <= 0.0) || (BGIDL_t <= 0.0) || (CGIDL_i < 0.0)) begin T6 = 0.0; end else begin T1 = (-Vgd_noswap - EGIDL_i + Vfbsdr) / T0; T1 = hypsmooth(T1, 1.0e-2); T2 = BGIDL_t / (T1 + 1.0e-3); if (CGIDL_i != 0.0) begin T3 = Vdb_noswap * Vdb_noswap * Vdb_noswap; T4 = CGIDL_i + abs(T3) + 1.0e-4; T5 = hypsmooth(T3 / T4, 1.0e-6) - 1.0e-6; end else begin T5 = 1.0; end T6 = AGIDL_i * Weff * T1 * lexp(-T2) * T5; end igidl = T6; // GISL if ((AGISL_i <= 0.0) || (BGISL_t <= 0.0) || (CGISL_i < 0.0)) begin T6 = 0.0; end else begin T1 = (-Vgs_noswap - EGISL_i + Vfbsdr) / T0; T1 = hypsmooth(T1, 1.0e-2); T2 = BGISL_t / (T1 + 1.0e-3); if (CGISL_i != 0.0) begin T3 = Vsb_noswap * Vsb_noswap * Vsb_noswap; T4 = CGISL_i + abs(T3) + 1.0e-4; T5 = hypsmooth(T3 / T4, 1.0e-6) - 1.0e-6; end else begin T5 = 1.0; end T6 = AGISL_i * Weff * T1 * lexp(-T2) * T5; end igisl = T6; end IGIDL = devsign * NF * igidl; IGISL = devsign * NF * igisl; // Junction current and capacitances // Source-side junction current if (Isbs > 0.0) begin if (Vbs_jct < VjsmRev) begin T0 = Vbs_jct / Nvtms; T1 = lexp(T0) - 1.0; T2 = IVjsmRev + SslpRev * (Vbs_jct - VjsmRev); Ibs = T1 * T2; end else if (Vbs_jct <= VjsmFwd) begin T0 = Vbs_jct / Nvtms; T1 = (BVS + Vbs_jct) / Nvtms; T2 = lexp(-T1); Ibs = Isbs * (lexp(T0) + XExpBVS - 1.0 - XJBVS * T2); end else begin Ibs = IVjsmFwd + SslpFwd * (Vbs_jct - VjsmFwd); end end else begin Ibs = 0.0; end //Source-side junction tunneling current if (JTSS_t > 0.0) begin if ((VTSS - Vbs_jct) < (VTSS * 1.0e-3)) begin T0 = -Vbs_jct / Vtm0 / NJTS_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibs = Ibs - ASeff * JTSS_t * T1; end else begin T0 = -Vbs_jct / Vtm0 / NJTS_t; T1 = lexp(T0 * VTSS / (VTSS - Vbs_jct)) - 1.0; Ibs = Ibs - ASeff * JTSS_t * T1; end end if (JTSSWS_t > 0.0) begin if ((VTSSWS - Vbs_jct) < (VTSSWS * 1.0e-3)) begin T0 = -Vbs_jct / Vtm0 / NJTSSW_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibs = Ibs - PSeff * JTSSWS_t * T1; end else begin T0 = -Vbs_jct / Vtm0 / NJTSSW_t; T1 = lexp(T0 * VTSSWS / (VTSSWS - Vbs_jct)) - 1.0; Ibs = Ibs - PSeff * JTSSWS_t * T1; end end if (JTSSWGS_t > 0.0) begin if((VTSSWGS - Vbs_jct) < (VTSSWGS * 1.0e-3)) begin T0 = -Vbs_jct / Vtm0 / NJTSSWG_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibs = Ibs - Weffcj * NF * JTSSWGS_t * T1; end else begin T0 = -Vbs_jct / Vtm0 / NJTSSWG_t; T1 = lexp(T0 * VTSSWGS / (VTSSWGS - Vbs_jct)) - 1.0; Ibs = Ibs - Weffcj * NF * JTSSWGS_t * T1; end end // Drain-side Junction Current if (Isbd > 0.0) begin if (Vbd_jct < VjdmRev) begin T0 = Vbd_jct / Nvtmd; T1 = lexp(T0) - 1.0; T2 = IVjdmRev + DslpRev * (Vbd_jct - VjdmRev); Ibd = T1 * T2; end else if (Vbd_jct <= VjdmFwd) begin T0 = Vbd_jct / Nvtmd; T1 = (BVD + Vbd_jct) / Nvtmd; T2 = lexp(-T1); Ibd = Isbd * (lexp(T0) + XExpBVD - 1.0 - XJBVD * T2); end else begin Ibd = IVjdmFwd + DslpFwd * (Vbd_jct - VjdmFwd); end end else begin Ibd = 0.0; end // Drain-side junction tunneling current if (JTSD_t > 0.0) begin if ((VTSD - Vbd_jct) < (VTSD * 1.0e-3)) begin T0 = -Vbd_jct / Vtm0 / NJTSD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibd = Ibd - ADeff * JTSD_t * T1; end else begin T0 = -Vbd_jct / Vtm0 / NJTSD_t; T1 = lexp(T0 * VTSD/ (VTSD - Vbd_jct)) - 1.0; Ibd = Ibd - ADeff * JTSD_t * T1; end end if (JTSSWD_t > 0.0) begin if ((VTSSWD - Vbd_jct) < (VTSSWD * 1.0e-3)) begin T0 = -Vbd_jct / Vtm0 / NJTSSWD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibd = Ibd - PDeff * JTSSWD_t * T1; end else begin T0 = -Vbd_jct / Vtm0 / NJTSSWD_t; T1 = lexp(T0 * VTSSWD / (VTSSWD - Vbd_jct)) - 1.0; Ibd = Ibd - PDeff * JTSSWD_t * T1; end end if (JTSSWGD_t > 0.0) begin if ((VTSSWGD - Vbd_jct) < (VTSSWGD * 1.0e-3)) begin T0 = -Vbd_jct / Vtm0 / NJTSSWGD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ibd = Ibd - Weffcj * NF * JTSSWGD_t * T1; end else begin T0 = -Vbd_jct / Vtm0 / NJTSSWGD_t; T1 = lexp(T0 * VTSSWGD / (VTSSWGD - Vbd_jct)) - 1.0; Ibd = Ibd - Weffcj * NF * JTSSWGD_t * T1; end end // Junction capacitance (no swapping) // Source Bulk Junction Czbs = CJS_t * ASeff; Czbssw = CJSWS_t * PSeff; Czbsswg = CJSWGS_t * Weffcj * NF; czbs_p1 = pow(0.1, -MJS); czbs_p2 = 1.0 / (1.0 - MJS) * (1.0 - 0.05 * MJS * (1.0 + MJS) * czbs_p1); czbssw_p1 = pow(0.1, -MJSWS); czbssw_p2 = 1.0 / (1.0 - MJSWS) * (1.0 - 0.05 * MJSWS * (1.0 + MJSWS) * czbssw_p1); czbsswg_p1 = pow(0.1, -MJSWGS); czbsswg_p2 = 1.0 / (1.0 - MJSWGS) * (1.0 - 0.05 * MJSWGS * (1.0 + MJSWGS) * czbsswg_p1); `JunCap(Czbs, Vbs_jct, PBS_t, MJS, czbs_p1, czbs_p2, Qbsj1) `JunCap(Czbssw, Vbs_jct, PBSWS_t, MJSWS, czbssw_p1, czbssw_p2, Qbsj2) `JunCap(Czbsswg, Vbs_jct, PBSWGS_t, MJSWGS, czbsswg_p1, czbsswg_p2, Qbsj3) Qbsj = Qbsj1 + Qbsj2 + Qbsj3; // Drain Bulk Junction Czbd = CJD_t * ADeff; Czbdsw = CJSWD_t * PDeff; Czbdswg = CJSWGD_t * Weffcj * NF; czbd_p1 = pow(0.1, -MJD); czbd_p2 = 1.0 / (1.0 - MJD) * (1.0 - 0.05 * MJD * (1.0 + MJD) * czbd_p1); czbdsw_p1 = pow(0.1, -MJSWD); czbdsw_p2 = 1.0 / (1.0 - MJSWD) * (1.0 - 0.05 * MJSWD * (1.0 + MJSWD) * czbdsw_p1); czbdswg_p1 = pow(0.1, -MJSWGD); czbdswg_p2 = 1.0 / (1.0 - MJSWGD) * (1.0 - 0.05 * MJSWGD * (1.0 + MJSWGD) * czbdswg_p1); `JunCap(Czbd, Vbd_jct, PBD_t, MJD, czbd_p1, czbd_p2, Qbdj1) `JunCap(Czbdsw, Vbd_jct, PBSWD_t, MJSWD, czbdsw_p1, czbdsw_p2, Qbdj2) `JunCap(Czbdswg, Vbd_jct, PBSWGD_t, MJSWGD, czbdswg_p1, czbdswg_p2, Qbdj3) Qbdj = Qbdj1 + Qbdj2 + Qbdj3; // Sub-Surface Leakage Drain Current if (SSLMOD != 0) begin T1 = pow(NDEP_i / 1.0e23, SSLEXP1); T2 = pow(300.0 / DevTemp, SSLEXP2); SSL0_NT = SSL0 * lexp(-T1 * T2); SSL1_NT = SSL1 * T2 * T1; PHIB_SSL = SSL3 * tanh(lexp(devsign * SSL4 * (V(g, b) - VTH))); Issl = sigvds * NF * Weff * SSL0_NT * lexp(-SSL1_NT * Leff) * lexp(PHIB_SSL / Vt) * (lexp(SSL2 * Vdsx / Vt) - 1.0); I(di, si) <+ Issl; end // Harshit's New Flicker Noise Model, Ref : H. Agarwal et. al., IEEE JEDS,Vol. 3, Issue 4, April 2015. Nt = 4.0 * Vt * `q; Esatnoi = 2.0 * VSAT_a / ueff; if (EM <= 0.0) begin DelClm = 0.0; end else begin T0 = (diffVds / litl + EM) / Esatnoi; DelClm = litl * lln(T0); if (DelClm < 0.0) begin DelClm = 0.0; end end Nstar = Vt / `q * (Cox + Cdep + CIT_i); Nl = 2.0 * nq * Cox * Vt * qdeff / `q; T0a = `q * `q * `q * Vt * abs(ids) * ueff; T0b = `q * Vt * ids * ids; T0c = NOIA + NOIB * Nl + NOIC * Nl * Nl; T0d = (Nl + Nstar) * (Nl + Nstar); T0e = NOIA * `q * Vt; if (FNOIMOD == 1) begin if (LINTNOI >= (Leff - LH) / 2.0) begin $strobe("Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0.", LINTNOI); LINTNOI_i = 0.0; end else begin LINTNOI_i = LINTNOI; end LeffnoiH = Leff; if (Leff < LH) begin LeffnoiH = LH; end vgfbh = (Vg - VFB_i) / Vt; gam_h = sqrt(2.0 * `q * epssi * HNDEP / Vt) / Cox; phib_h = ln(HNDEP / ni); // Pinch-Off potential for halo region `PO_psip(vgfbh, gam_h, 0, phib_h, psiph) // normalized inversion charge at source end of halo MOSFET `BSIM_q(psiph, phib_h, vs, gam_h, qsh) nq_h = 1.0 + gam_h / (2.0 * sqrt(psiph)); // Setting mobility of Halo region equal to the mobility of the channel. In general, U0H 0.0) begin FNPowerAt1Hz_ch = (Ssi_ch * Swi_ch) / T7; end else begin FNPowerAt1Hz_ch = 0.0; end end else begin FNPowerAt1Hz_ch = 0.0; end // Halo transistor LNS T8 = NOIA2 * `q * Vt; T9 = Weff * NF * LH * 1.0e10 * Nstar * Nstar; Swi_h = T8 / T9 * ids * ids; T10 = Swi_h; if (T10 > 0.0) begin FNPowerAt1Hz_h = Swi_h; end else begin FNPowerAt1Hz_h = 0.0; end // Overall noise FNPowerAt1Hz = FNPowerAt1Hz_ch * CF_ch + FNPowerAt1Hz_h * CF_h; I(di, si) <+ flicker_noise(FNPowerAt1Hz, EF, "1overf"); end else begin //Parameter checking if (LINTNOI >= Leff/2.0) begin $strobe("Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0.", LINTNOI); LINTNOI_i = 0.0; end else begin LINTNOI_i = LINTNOI; end if (NOIA > 0 || NOIB > 0 || NOIC > 0) begin Leffnoi = Leff - 2.0 * LINTNOI_i; Leffnoisq = Leffnoi * Leffnoi; T0 = 1.0e10 * Cox * Leffnoisq; N0 = 2.0 * nq * Cox * Vt * qs / `q; T1 = NOIA * lln((N0 + Nstar) / (Nl + Nstar)); T2 = NOIB * (N0 - Nl); T3 = 0.5 * NOIC * (N0 * N0 - Nl * Nl); T4 = 1.0e10 * Leffnoisq * Weff * NF; Ssi = T0a / T0 * (T1 + T2 + T3) + T0b / T4 * DelClm * T0c / T0d; T5 = Weff * NF * Leffnoi * 1.0e10 * Nstar * Nstar; Swi = T0e / T5 * ids * ids; T6 = Swi + Ssi; if (T6 > 0.0) begin FNPowerAt1Hz = (Ssi * Swi) / T6; end else begin FNPowerAt1Hz = 0.0; end end else begin FNPowerAt1Hz = 0.0; end I(di, si) <+ flicker_noise(FNPowerAt1Hz, EF, "1overf"); end T0 = qia / Esatnoi / Leff; T1 = T0 * T0; T3 = RNOIA * (1.0 + TNOIA * Leff * T1); T4 = RNOIB * (1.0 + TNOIB * Leff * T1); T5 = RNOIK * (1.0 + TNOIK * Leff * T1); ctnoi = RNOIC * (1.0 + TNOIC * Leff * T1); betanoisq = 3.0 * T3 * T3; betanoisq = (betanoisq - 1.0) * exp(-Leff / LP) + 1.0; betaLowId = T5 * T5; thetanoisq = T4 * T4; cm_igid = 0.0; case (TNOIMOD) 0: begin QSi = -NF * Weff * Leff * Cox * Vt * Qs; QDi = -NF * Weff * Leff * Cox * Vt * Qd; T0 = ueff * abs(QSi + QDi); T1 = T0 * Rdsi + Leff * Leff; Gtnoi = (T0 / T1) * NTNOI; sidn = Nt * Gtnoi; I(di, si) <+ white_noise(sidn, "id"); V(N1) <+ 0.0; end 1: begin Vtn = 2.0 * nq * nVt; T0 = ueff * Dptwg * Moc * Cox * Vtn; T1 = 0.5 * (qs + qdeff); T3 = T1 + 0.5; T4 = T3 * T3; T5 = T4 * T3; T6 = qs - qdeff; T7 = T6 * T6; T8 = T7 * T6; T9 = (6.0 * T1 + 0.5) * T7; Lvsat = Leff * Dptwg; T10 = Lvsat / Leff; T12 = 1.0 + (betaLowId * (Vdseff / Vdssat) / (TNOIK2 + qia)); T12 = ((T12 - 1.0) * exp(-Leff / LP)) + 1.0; `Smooth(T12, 0, 1.0e-1, T12) mid = T0 * NF * Weff / Lvsat * (T1 * T12 + T7 * betanoisq / (12.0 * T3)); mig = Lvsat * T10 * T10 * (T1 / T4 - T9 / (60.0 * T4 * T4) + T7 * T7 / (144.0 * T4 * T5)) * 15.0 / 4.0 * thetanoisq / (NF * Weff * 12.0 * T0); migid = T10 * (T6 / (12.0 * T3) - T8 / (144.0 * T5)) * ctnoi / 0.395; sqid = sqrt(Nt * mid); if (mig == 0.0) begin sqig = 0.0; cm_igid = 0.0; end else begin sqig = sqrt(Nt / mig); if (sqid == 0.0) begin cm_igid = 0.0; end else begin cm_igid = migid * sqig / sqid; end end I(N2) <+ white_noise(cm_igid, "corl"); I(NI) <+ white_noise(sqig * sqig * (1.0 - cm_igid), "corl"); I(NI) <+ -sqig * V(N2); I(NC) <+ ddt(mig * Cox * Weff * NF * Leff * V(NC)); I(di, si) <+ white_noise(sqid * sqid * (1.0 - cm_igid), "id"); I(di, si) <+ sqid * V(N2); I(gi, si) <+ ddt(0.5 * ((1.0 + sigvds) * mig * Cox * Weff * NF * Leff * V(NC))); I(gi, di) <+ ddt(0.5 * ((1.0 - sigvds) * mig * Cox * Weff * NF * Leff * V(NC))); end endcase I(N2) <+ V(N2); I(NR) <+ V(NR); // Gate current shot noise if (IGCMOD != 0) begin I(gi, si) <+ white_noise(2.0 * `q * abs(igcs + igs), "igs"); I(gi, di) <+ white_noise(2.0 * `q * abs(igcd + igd), "igd"); end if (IGBMOD != 0) begin I(gi, bi) <+ white_noise(2.0 * `q * abs(igb), "igb"); end // C-V model vgfbCV = vgfb; gamg2 = (2.0 * `q * epssi * NGATE_i) / (Cox * Cox * Vt); invgamg2 = (NGATE_i > 0.0) ? (1.0 / gamg2) : 0.0; if (CVMOD == 1) begin VFBCV_i = VFBCV_i + DELVTO; vg = Vg * inv_Vt; vs = Vs * inv_Vt; vfb = VFBCV_i * inv_Vt; vgfbCV = vg - vfb; phib = lln(NDEPCV_i / ni); // Normalized body factor gam = sqrt(2.0 * `q * epssi * NDEPCV_i * inv_Vt) / Cox; inv_gam = 1.0 / gam; gamg2 = (2.0 * `q * epssi * NGATE_i) / (Cox * Cox * Vt); invgamg2 = (NGATE_i > 0.0) ? (1.0 / gamg2) : 0.0; DPD = (NGATE_i > 0.0) ? (NDEPCV_i / NGATE_i) : 0.0; // psip: pinch-off voltage `PO_psip(vgfbCV, gam, DPD, phib, psip) // normalized inversion charge at source end of channel `BSIM_q(psip, phib, vs, gam, qs) `Smooth(psip, 1.0, 2.0, psipclamp) sqrtpsip = sqrt(psipclamp); // source side surf pot. psiavg = psip - 2.0 * qs; `Smooth(psiavg, 1.0, 2.0, T0) nq = 1.0 + gam / (sqrtpsip + sqrt(T0)); // Drain Saturation Voltage T0 = Vt * (vgfbCV - psip - 2.0 * qs * (nq - 1.0)); `Smooth(T0, 0, 0.1, qbs) // Source side qi and qb for Vdsat- normalized to Cox qis = 2.0 * nq * Vt * qs; Eeffs = EeffFactor * (qbs + eta_mu * qis); // in the unit of MV/cm // Ref: BSIM4 Model mobility model T3 = (UA_a + UC_a * Vbsx) * pow(Eeffs, EU_i); T4 = 1.0 + T3; `Smooth(T4, 1.0, 0.0015, Dmobs) LambdaC_by2 = (U0_a / Dmobs) * Vt / (VSATCV_t * Lact); qdsat = LambdaC_by2 * (qs * qs + qs) / (1.0 + LambdaC_by2 * (1.0 + qs)); vdsatcv = psip - 2.0 * phib - (2.0 * qdsat + lln((qdsat * 2.0 * nq * inv_gam) * ((qdsat * 2.0 * nq * inv_gam) + (gam / (nq - 1.0))))); VdsatCV = vdsatcv * Vt; // Normalized charge qdeff at drain end of channel `Smooth(VdsatCV - Vs, 0.0, 1e-3, VdssatCV) T7 = pow(Vds / VdssatCV , 1.0 / DELTA_t); T8 = pow(1.0 + T7, -DELTA_t); Vdseff = Vds * T8; vdeff = (Vdseff + Vs) * inv_Vt; `BSIM_q(psip, phib, vdeff, gam, qdeff) // Reevaluation of nq to include qdeff needed for gummel symmetry psiavg = psip - qs - qdeff - 1.0; `Smooth(psiavg, 1.0, 2.0, T0) T2 = sqrt(T0); T3 = 1.0 + DPD + gam / (sqrtpsip + T2); T4 = 0.5 + DPD * T2 * inv_gam; T5 = sqrt(T4 * T4 + T3 * (qs + qdeff) * invgamg2); nq = T3 / (T4 + T5); // CV Expressions including Velocity Saturation and CLM // Velocity Saturation for CV T0 = Vt * (vgfbCV - psip - 2.0 * qs * (nq - 1.0)); `Smooth(T0, 0, 0.1, qbs) T1 = Vt * (vgfbCV - psip - 2.0 * qdeff * (nq - 1.0)); `Smooth(T1, 0, 0.1, qbd) qb = 0.5 * (qbs + qbd); qia = nq * Vt * (qs + qdeff); Eeffm = EeffFactor * (qb + eta_mu * qia); T3 = (UA_a + UC_a * Vbsx) * pow(Eeffm, EU_i); T4 = 1.0 + T3; `Smooth(T4, 1.0, 0.0015, Dmob) LambdaC = 2.0 * (U0_a / Dmob) * Vt / (VSATCV_t * Lact); dps = qs - qdeff; T1 = 2.0 * (LambdaC * dps) * (LambdaC * dps); zsat = sqrt(1.0 + T1); Dvsat = 0.5 * (1.0 + zsat); // CLM for CV Esat = 2.0 * VSATCV_t / (U0_a / Dmob); EsatL = Esat * Lact; Vasat = VdssatCV + EsatL; diffVds = Vds - Vdseff; end if (PCLMCV_i != 0.0) begin MdL = 1.0 + PCLMCV_i * lln(1.0 + diffVds / PCLMCV_i / Vasat); end else begin MdL = 1.0; end MdL_2 = MdL * MdL; inv_MdL = 1.0 / MdL; inv_MdL_2 = 1.0 / MdL_2; MdL_less_1 = MdL - 1.0; vgpqm = vgfbCV - psip; DQSD = (qs - qdeff); DQSD2 = (qs - qdeff) * (qs - qdeff); sis = vgpqm + 2.0 * qs; sid = vgpqm + 2.0 * qdeff; `Smooth(sis, 0.0, 0.5, T1) `Smooth(sid, 0.0, 0.5, T2) Temps = sqrt(0.25 + T1 * invgamg2); Tempd = sqrt(0.25 + T2 * invgamg2); T1 = sis / (1.0 + 2.0 * Temps); T2 = sid / (1.0 + 2.0 * Tempd); T3 = Temps + Tempd; T4 = `Oneby3 * (DQSD2 / (T3 * T3 * T3)); T5 = (Dvsat * inv_MdL) / (1.0 + qs + qdeff); T6 = 0.8 * (T3 * T3 + Temps * Tempd) * T5; T7 = T6 + (2.0 * invgamg2); T8 = `Oneby3 * DQSD2 * T5; dqgeff = sid * (2.0 * Tempd - 1.0) / (2.0 * Tempd + 1.0); qbeff = vgpqm - 2.0 * (nq - 1.0) * qdeff + dqgeff; Qb = inv_MdL * (T1 + T2 + (T4 * T7 - nq * (qs + qdeff + T8))) + MdL_less_1 * qbeff; T9 = qs + qdeff; T10 = DQSD2 * T5 * T5; Qi = nq * inv_MdL * (T9 + `Oneby3 * DQSD2 * T5) + 2.0 * nq * MdL_less_1 * qdeff; Qd1 = nq * inv_MdL_2 * (0.5 * T9 - (DQSD / 6.0) * (1.0 - DQSD * T5 - 0.2 * T10)); Qd2 = nq * (MdL - inv_MdL) * qdeff; Qd = Qd1 + Qd2; Qs = Qi - Qd; // Quantum Mechanical Effect `Smooth(Vt*Qb, 0, 0.1, qbaCV) qiaCV = Vt *( Qs + Qd); T0 = (qiaCV + ETAQM * qbaCV) / QM0; T1 = 1.0 + pow(T0, 0.7 * BDOS); XDCinv = ADOS * 1.9e-9 / T1; Coxeffinv = 3.9 * `EPS0 / (BSIMBULKTOXP * 3.9 / EPSROX + XDCinv / epsratio); QBi = -NF * Wact * Lact * (`EPS0 * EPSROX / BSIMBULKTOXP) * Vt * Qb; WLCOXVtinv = NF * Wact * Lact * Coxeffinv * Vt; QSi = -WLCOXVtinv * Qs; QDi = -WLCOXVtinv * Qd; QGi = -(QBi + QSi + QDi); // Outer fringing capacitance if (!$param_given(CF)) begin CF_i = 2.0 * EPSROX * `EPS0 / `M_PI * lln(CFRCOEFF * (1.0 + 0.4e-6 / TOXE)); end Cgsof = CGSO + CF_i; Cgdof = CGDO + CF_i; // Overlap capacitance if (COVMOD == 0) begin Qovs = -Wact * NF * Cgsof * Vgs_ov_noswap; Qovd = -Wact * NF * Cgdof * Vgd_ov_noswap; end else begin T0 = sqrt((Vgs_ov_noswap - Vfbsdr + `DELTA_1) * (Vgs_ov_noswap -Vfbsdr + `DELTA_1) + 4.0 * `DELTA_1); Vgsov = 0.5 * (Vgs_ov_noswap - Vfbsdr + `DELTA_1 - T0); T1 = sqrt(1.0 - 4.0 * Vgsov / CKAPPAS_i); Qovs = -Wact * NF * (Cgsof * Vgs_ov_noswap + CGSL_i * (Vgs_ov_noswap -Vfbsdr - Vgsov - 0.5 * CKAPPAS_i * (-1.0 + T1))); T0 = sqrt((Vgd_ov_noswap - Vfbsdr + `DELTA_1) * (Vgd_ov_noswap - Vfbsdr + `DELTA_1) + 4.0 * `DELTA_1); Vgdov = 0.5 * (Vgd_ov_noswap - Vfbsdr + `DELTA_1 - T0); T2 = sqrt(1.0 - 4.0 * Vgdov / CKAPPAD_i); Qovd = -Wact * NF * (Cgdof * Vgd_ov_noswap + CGDL_i * (Vgd_ov_noswap - Vfbsdr - Vgdov - 0.5 * CKAPPAD_i * (-1.0 + T2))); end Qovb = -devsign * NF * Lact * CGBO * V(gm, bi); Qovg = -(Qovs + Qovd + Qovb); // Edge FET model if (EDGEFET == 1) begin NFACTOREDGE_t = NFACTOREDGE_i * hypsmooth((1.0 + TNFACTOREDGE_i * (TRatio - 1.0)), 1e-3); ETA0EDGE_t = ETA0_EDGE * (1.0 + TETA0EDGE_i * (TRatio - 1.0)); cdsc = CITEDGE_i + NFACTOREDGE_t + CDSCDEDGE_i * Vdsx - CDSCBEDGE_i * Vbsx; T1 = 1.0 + cdsc/Cox; `Smooth(T1, 1.0, 0.05, n) nVt = n * Vt; inv_nVt = 1.0 / nVt; vg = Vg * inv_nVt; vs = Vs * inv_nVt; vfb = VFB_i * inv_nVt; dvth_dibl = -(ETA0EDGE_t + ETABEDGE_i * Vbsx) * Vdsx; dvth_temp = (KT1EDGE_i + KT1LEDGE_i / Leff + KT2EDGE_i * Vbsx) * (pow(TRatio, KT1EXPEDGE_i) - 1.0); litl_edge = litl * (1.0 + DVT2EDGE * Vbsx); T0 = DVT1EDGE * Leff / litl_edge; if (T0 < 40.0) begin theta_sce_edge = 0.5 * DVT0EDGE / (cosh(T0) - 1.0); end else begin theta_sce_edge = DVT0EDGE * lexp(-T0); end dvth_sce = theta_sce_edge * (Vbi - Phist); Vth_shift = dvth_dibl - dvth_temp + dvth_sce + DVTEDGE + vth0_stress_EDGE - K2_EDGE * Vbsx; vgfb = vg - vfb - Vth_shift * inv_nVt; // Normalized body factor DGAMMAEDGE_i = DGAMMAEDGE * (1.0 + DGAMMAEDGEL * pow(Leff, -DGAMMAEDGELEXP)); gam = sqrt(2.0 * `q * epssi * NDEP_i * inv_nVt) / Cox; gam = gam * (1.0 + DGAMMAEDGE_i); inv_gam = 1.0 / gam; phib_n = phib / n; `PO_psip(vgfb, gam, 0, phib_n, psip) `BSIM_q(psip, phib_n, vs, gam, qs) // Approximate Pinch Off voltage vdsatedge = 2.0 * nVt * qs + 2.0 * nVt; Vdsatedge = vdsatedge; Vdsatedge = Vdsatedge + Vs; // Vdssat clamped to avoid negative values during transient simulation `Smooth(Vdsatedge - Vs, 0.0, 1.0e-3, Vdssate) T7 = pow(Vds / Vdssate , 1.0 / DELTA_t); T8 = pow(1.0 + T7, -DELTA_t); Vdseff = Vds * T8; vdeff = (Vdseff + Vs) * inv_nVt; `BSIM_q(psip, phib_n, vdeff, gam, qdeff) // Nq calculation for Edge FET `Smooth(psip, 1.0, 2.0, psipclamp) sqrtpsip = sqrt(psipclamp); psiavg = psip - qs - qdeff -1.0; `Smooth(psiavg, 1.0, 2.0, T0) T2 = sqrt(T0); nq = 1.0 + gam / (sqrtpsip + T2); ids_edge = 2.0 * NF * nq * ueff * WEDGE / Leff * Cox * nVt * nVt *((qs - qdeff)*(1.0 + qs + qdeff)) *Moc; ids = ids_edge + ids; end // Edge FET Parasitic Device Drain Current Model Ends // Charge expressions including fringing and overlap capacitance QB = devsign * (QBi + Qovb + Qbsj + Qbdj); if (sigvds > 0) begin QSI = devsign * QSi; QDI = devsign * QDi; QS = devsign * (QSi + Qovs - Qbsj); QD = devsign * (QDi + Qovd - Qbdj); end else begin QSI = devsign * QDi; QDI = devsign * QSi; QS = devsign * (QDi + Qovs - Qbsj); QD = devsign * (QSi + Qovd - Qbdj); end QG = devsign * (QGi + Qovg); // Output // Intrinsic Charges QBI = devsign * QBi; QGI = devsign * QGi; // QSI and QDI are defined above // Intrinsic Capacitances CGSI = -ddx(QGI,V(si)); CGDI = -ddx(QGI,V(di)); CGBI = -ddx(QGI,V(bi)); CGGI = ddx(QGI,V(gi)); CSSI = ddx(QSI,V(si)); CSDI = -ddx(QSI,V(di)); CSBI = -ddx(QSI,V(bi)); CSGI = -ddx(QSI,V(gi)); CDSI = -ddx(QDI,V(si)); CDDI = ddx(QDI,V(di)); CDBI = -ddx(QDI,V(bi)); CDGI = -ddx(QDI,V(gi)); CBSI = -ddx(QBI,V(si)); CBDI = -ddx(QBI,V(di)); CBBI = ddx(QBI,V(bi)); CBGI = -ddx(QBI,V(gi)); // Total Capacitances CGS = -ddx(QG, V(si)); CGD = -ddx(QG, V(di)); CGB = -ddx(QG, V(bi)); CGG = CGGI + ddx(devsign * Qovg, V(gm)); CSS = ddx(QS, V(si)); CSD = -ddx(QS, V(di)); CSB = CSBI - ddx((QS - QSI), V(sbulk)); CSG = CSGI - ddx((QS - QSI), V(gm)); CDS = -ddx(QD, V(si)); CDD = ddx(QD, V(di)); CDB = CDBI - ddx((QD - QDI), V(dbulk)); CDG = CDGI - ddx((QD - QDI), V(gm)); CBS = -ddx(QB, V(si)); CBD = -ddx(QB, V(di)); CBB = CBBI + ddx(QB, V(sbulk)) + ddx(QB, V(dbulk)) + ddx((devsign * Qovb), V(bi)); CBG = -ddx(QB, V(gi)) - ddx((devsign * Qovb), V(gm)); // Total extrinsic capacitance CGSEXT = -devsign * ddx(Qovg, V(si)); // Gate-Source Overlap + outer fringing CGDEXT = -devsign * ddx(Qovg, V(di)); // Gate-Drain Overlap + outer fringing CGBOV = -devsign * ddx(Qovg, V(bi)); // Gate-Body Overlap // Total Source/Drain Junction Capacitances CAPBS = -devsign * ddx(Qbsj, V(si)); CAPBD = -devsign * ddx(Qbdj, V(di)); // W & L WEFF = Weff; // Effective width for IV LEFF = Leff; // Effective length for IV WEFFCV = Wact; // Effective width for CV LEFFCV = Lact; // Effective length for CV // Currents and derivatives if (sigvds > 0) begin IDS = devsign * ids; // Intrinsic drain to source current IDEFF = IDS - (IGD + IGCD) + ISUB + IGIDL; // Total drain current ISEFF = -IDS - (IGS + IGCS) + IGISL; // Total source current end else begin IDS = -devsign * ids; // Intrinsic drain to source current IDEFF = IDS - (IGD + IGCD) + IGIDL; // Total drain current ISEFF = -IDS - (IGS + IGCS) + ISUB + IGISL; // Total source current end IGEFF = IGB + IGS + IGCS + IGD + IGCD;//Total gate tunneling current IBS = -devsign * Ibs; // Source junction current IBD = -devsign * Ibd; // Source junction current VDS = V(di, si); // Drain-Source Voltage VGS = V(gi, si); VBS = -V(si, bi); // Source-body Voltage VDSAT = Vdssat; // Drain-Source saturation Voltage GM = ddx(IDS, V(gi)); // Transconductance GMBS = ddx(IDS, V(bi)); // Body transconductance GDS = ddx(IDS, V(di)); // Output conductance // Loading variables I(gi, bi) <+ ddt(QGI); I(si, bi) <+ ddt(QSI); I(di, bi) <+ ddt(QDI); I(gm, si) <+ ddt(-devsign * Qovs); I(gm, di) <+ ddt(-devsign * Qovd); I(gm, bi) <+ ddt(-devsign * Qovb); // Drain to source current I(di, si) <+ devsign * sigvds * ids; if (IGBMOD != 0) begin I(gi, bi) <+ IGB; end if (IGCMOD != 0) begin I(gi, si) <+ (IGS + IGCS); I(gi, di) <+ (IGD + IGCD); end if (sigvds > 0) begin I(di, bi) <+ ISUB + IGIDL; I(si, bi) <+ IGISL; end else begin I(di, bi) <+ IGIDL; I(si, bi) <+ ISUB + IGISL; end // External S/D Resistance if (RDSMOD != 2) begin gdpr = 1.0 / Rdrain; // Note: gdpr considers all fingers gspr = 1.0 / Rsource; // Note: gspr considers all fingers I(d, di) <+ V(d, di) * gdpr; I(s, si) <+ V(s, si) * gspr; I(d, di) <+ white_noise(Nt * gdpr, "rd"); I(s, si) <+ white_noise(Nt * gspr, "rs"); end else begin V(d, di) <+ 0.0; V(s, si) <+ 0.0; end if (RGATEMOD == 0) begin V(g, gm) <+ 0.0; end else begin: rgate if (RGATEMOD == 2) begin Ggate = Gcrg; Gnoise = Gcrg * Gcrg / Grgeltd; end else begin Ggate = Grgeltd; Gnoise = Grgeltd; end I(g, gm) <+ V(g, gm) * Ggate; I(g, gm) <+ white_noise(Nt * Gnoise, "rg"); end if (RGATEMOD == 3) begin I(gm, gi) <+ V(gm, gi) * Gcrg; end else begin V(gm, gi) <+ 0; end if ((SHMOD != 0) && (RTH0 > 0.0)) begin if (RDSMOD != 2) begin Pwr(t) <+ -(devsign * sigvds * ids * V(di, si) + V(d,di) * V(d,di) / Rdrain + V(s,si) * V(s,si) / Rsource) + delTemp1 * gth; end else begin Pwr(t) <+ -(devsign * sigvds * ids * V(di, si)) + delTemp1 * gth; end Pwr(t) <+ ddt(delTemp1 * cth); end else begin Temp(t) <+ 0.0; end if (RBODYMOD != 0) begin I(bi, sbulk) <+ V(bi, sbulk) * Grbps; I(b, sbulk) <+ V(b, sbulk) * Grbsb; I(b, bi) <+ V(b, bi) * Grbpb; I(b, dbulk) <+ V(b, dbulk) * Grbdb; I(bi, dbulk) <+ V(bi, dbulk) * Grbpd; I(sbulk, bi) <+ white_noise(Nt * Grbps, "rbps"); I(sbulk, b) <+ white_noise(Nt * Grbsb, "rbsb"); I(b, bi) <+ white_noise(Nt * Grbpb, "rbpb"); I(dbulk, bi) <+ white_noise(Nt * Grbpd, "rbpd"); I(dbulk, b) <+ white_noise(Nt * Grbdb, "rbdb"); end else begin V(b, sbulk) <+ 0.0; V(b, bi) <+ 0.0; V(b, dbulk) <+ 0.0; end // Diode Current and Capacitance if (RBODYMOD != 0) begin I(sbulk, si) <+ devsign * Ibs; I(dbulk, di) <+ devsign * Ibd; I(sbulk, si) <+ devsign * ddt(Qbsj); I(dbulk, di) <+ devsign * ddt(Qbdj); end else begin I(bi, si) <+ devsign * Ibs; I(bi, di) <+ devsign * Ibd; I(bi, si) <+ devsign * ddt(Qbsj); I(bi, di) <+ devsign * ddt(Qbdj); end end endmodule tmp_ns50wwy/src/spicelib/devices/adms/psp103/0000755000175000017500000000000014163340332021126 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/0000755000175000017500000000000014163340332022401 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/releasenotesPSP103p7.txt0000644000175000017500000002355414163340332026722 0ustar carstencarsten ====================================================================================== ====================================================================================== Silicon Integration Initiative (Si2) Compact Model Coalition In-Code Statement Software is distributed as is, completely without warranty or service support. The Commissariat a l'energie atomique et aux energies alternatives (CEA), NXP Semiconductors, and Delft University of Technology, along with their employees are not liable for the condition or performance of the software. NXP Semiconductors, Delft University of Technology, and CEA own the copyright and grant users a perpetual, irrevocable, worldwide, non-exclusive, royalty-free license with respect to the software as set forth below. NXP Semiconductors, Delft University of Technology, and CEA hereby disclaim all implied warranties. NXP Semiconductors, Delft University of Technology, and CEA 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 the NXP Semiconductors, Delft University of Technology, and CEA-developed code itself but may charge for additions, extensions, or support. 2. In any product based on the software, the users agree to acknowledge NXP Semiconductors, Delft University of Technology, and CEA that developed the software. This acknowledgement 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. CMC In-Code Statement Revision: 103.7.0 (PSP), 04/29/2019 200.6.0 (JUNCAP),04/29/2019 ====================================================================================== ====================================================================================== Authors: G.D.J. Smit, A.J. Scholten, and D.B.M. Klaassen (NXP Semiconductors) O. Rozeau, S. Martinie, T. Poiroux, J.C. Barbé (CEA-Leti) Former contributers: G. Gildenblat, W. Yao, Z. Zhu, X. Li and W. Wu (Arizona State University) R. van Langevelde (Philips Research) R. van der Toorn (Delft University of Technology) The most recent version of the model code, the documentation, and contact information can be found on: http://www.cea.fr/cea-tech/leti/pspsupport ====================================================================================== ====================================================================================== This package consists of the following files: - releasenotesPSP103.txt This file - psp103.va Main file for PSP model - psp103t.va Main file for PSP model with self heating - psp103_nqs.va Main file for PSP model with NQS-effects - juncap200.va Main file for JUNCAP2 stand-alone model - Common103_macrodefs.include Common macro definitions - PSP103_macrodefs.include Macro definitions for PSP - PSP103_module.include Actual model code for intrinsic MOS model - PSP103_parlist.include Model parameter list for PSP model - PSP103_scaling.include Geometry scaling equations for PSP model - PSP103_nqs_macrodefs.include Macro definitions for PSP-NQS - PSP103_InitNQS.include PSP-NQS initialization code - PSP103_ChargesNQS.include Calculation of NQS-charge contributions - JUNCAP200_macrodefs.include Macro definitions for JUNCAP2 model - JUNCAP200_parlist.include JUNCAP2 parameter list - JUNCAP200_varlist.include JUNCAP2 variable declarations - JUNCAP200_InitModel.include JUNCAP2 model initialization code ====================================================================================== ====================================================================================== Usage ----- Depending which model one wants to use, one should compile one of the four .va-files (psp103.va, psp103t.va, psp103_nqs.va, and juncap200.va). The module names are "PSP103VA", "PSP103TVA", and "PSPNQS103VA" (for QS, self heating, and NQS, respectively), and "JUNCAP200" for the JUNCAP2-model. ====================================================================================== ====================================================================================== Release notes vA-code of PSP 103.7.0 (April 2019) --------------------------------------------------------- Changes include - More efficient calculations of Vdsp and Vdspedge - Additional parameters for overlaps gate leakage currents - Charge partitioning: new switch parameter SWQPART to modify the charge partitioning between the drain and the source - Additional parameters for charge model decoupling to improve CV description - Minor modification on code files organization - PSP103_macrodefs.include: - Addition of variable declarations in SPcalcLocalVarDecl macro: line 280 - Calculation of THESATAC_T: line 390 - Includes SPCalculation.include file as a new macro called "SPCalculation" - PSP103_parlist.include: - New file including PSP103_binpars.include and model parameter declaration from PSP103_module.include - Addition of new parameters SWQSAT, SWQPART, CFAC, THESATAC, AXAC, ALPAC, GC2OV, GC3OV, CFACL, CFACLEXP, CFACW, THESATACO, THESATACL, THESATACLEXP, THESATACW, THESATACLW, AXACO, AXACL, ALPACL, ALPACLEXP, ALPACW, GC2OVO, GC3OVO, POCFAC, PLCFAC, PWCFAC, PLWCFAC, POTHESATAC, PLTHESATAC, PWTHESATAC, PLWTHESATAC, POAXAC, PLAXAC, PWAXAC, PLWAXAC, POGC2OV, POGC3OV, KVSATAC - PSP103_scaling.include: - New file including PSP103_binning.include and geometry scaling equations from PSP103_module.include - Addition of new internal local parameters, associated scaling rules and clipped variables: CFAC_p, THESATAC_p, AXAC_p, ALPAC_p, GC2OV_p, GC3OV_p, CFAC_i, THESATAC_i, AXAC_i, ALPAC_i, GC2OV_i, GC3OV_i - Introduction of mechanical stress effect on THESATAC_p and CFAC_p. Minor modifications of the stress model using the internal variable temp00. - PSP103_module.include: - New OP-output variables: lp_cfac, lp_thesatac, lp_axac, lp_alpac, lp_gc2ov, lp_gc3ov: lines 399, 423, 428, 430, 446, 447, 2128, 2152, 2157, 2159, 2175, 2176. - New max clipping value of SWIGATE_i: line 542 - New variables SWQSAT_i, SWQPART_i: lines 150, 550 and 551 - Calculation of internal global-binning parameters for the charge model: lines 619 to 651 - Calculation of GCQOV variable for overlap gate leakage currents: lines 237, 782 to 788 - New variable declaration for charge model THESATAC_T: lines 225 and 1040 - Vgb is now calculated in line 1089 - Modifications for overlaps leakage currents GC2_i, GC3_i and GCQ are replaced by GC2OV_i, GC3OV_i and GCQOV: lines 1209 to 1246 - New calculation of Vdspedge: line 1344 - Calculation of cfloc, thesatloc, axloc and alploc: lines 1136 to 1139, lines 1403 to 1406 and lines 1418 to 1421 - Modification of the condition "SWDELVTAC_i != 0" ("else" case was cancelled): lines 1408 to 1415 - Addition of the condition "SWQSAT_i != 0" for Q-model decoupling in saturation: lines 1417 to 1422 - Addition of the condition "SWQPART_i == 1.0" for charge partitioning and calculation of the new charge partitioning: lines 1484 to 1490 - PSP103_SPCalculation.include: cancelled file - PSP103_binpars.include: cancelled file - PSP103_binning.include: cancelled file PSP 103.7.0 is backwards compatible with the previous version, PSP 103.6.0 ====================================================================================== ====================================================================================== Release notes vA-code of JUNCAP 200.6.0 (April 2019) --------------------------------------------------------- Change includes: - Bug fix on juncap express model (induced by negative values of MFOR2 and ISATFOR2 variables) - Addition of 2 multiplier factors for current IFACTOR and charge CFACTOR - JUNCAP200_parlist.include: - Declaration of 2 new model parameters IFACTOR and CFACTOR: lines 36 and 37 - JUNCAP200_varlist1.include: cancelled file - JUNCAP200_varlist2.include: cancelled file - JUNCAP200_varlist.include: - New file including JUNCAP200_varlist1.include and JUNCAP200_varlist2.include - JUNCAP200_macrodefs.include: - Definition of 2 new constants IFACTOR_cliplow and CFACTOR_cliplow: lines 57 and 58 - Addition of CFACTOR in the calculation of Qjprime: line 221 - Addition of IFACTOR in the calculation of Ijprime: line 276 - Modification of condition for calculation of MFOR2 and ISATFOR2 variables to avoid a bug on juncap express model. - JUNCAP200_InitModel.include: - Addition of cliiped variables IFACTOR_i and CFACTOR_i: lines 36 and 37 - juncap200.va: - Included new file for variable declarations: line 81 JUNCAP 200.6.0 is backwards compatible with the previous version, JUNCAP 200.5.0 ===================================================================================== ====================================================================================== The authors want to thank Laurent Lemaitre and Colin McAndrew (Freescale) for their help with ADMS and the implementation of the model code. Geoffrey Coram (Analog Devices) is acknowledged for input concerning the Verilog-A implementation of the model. tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/Common103_macrodefs.include0000644000175000017500000002323114163340332027446 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: Common103_macrodefs.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // ////////////////////////////////////////////////////////////// // // General macros and constants for compact va-models // ////////////////////////////////////////////////////////////// // Clipping functions `define CLIP_LOW(val,min) ((val)>(min)?(val):(min)) `define CLIP_HIGH(val,max) ((val)<(max)?(val):(max)) `define CLIP_BOTH(val,min,max) ((val)>(min)?((val)<(max)?(val):(max)):(min)) `ifdef insideADMS `define INITIAL_MODEL @(initial_model) `define INITIAL_INSTANCE @(initial_instance) `define from(lower,upper) from [lower:upper] `else `define INITIAL_MODEL `define INITIAL_INSTANCE `define from(lower,upper) `endif // Min/Max functions `define MAX(x,y) ((x)>(y)?(x):(y)) `define MIN(x,y) ((x)<(y)?(x):(y)) // Mathematical constants `define PI 3.1415926535897931 `define SQRTPI 1.77245385090551603 // Physical constants `define KELVINCONVERSION 273.15 `define KBOL 1.3806505E-23 `define QELE 1.6021918E-19 `define HBAR 1.05457168E-34 `define MELE 9.1093826E-31 `define EPSO 8.8541878176E-12 `define EPSRSI 11.8 // Other constants `define oneThird 3.3333333333333333e-01 `define twoThirds 6.6666666666666667e-01 // Constants needed in safe exponential function (called "expl") `define se 4.6051701859880916e+02 `define se05 2.3025850929940458e+02 `define ke 1.0e-200 `define ke05 1.0e-100 `define keinv 1.0e200 `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 for very low values (exp_low), // very high values (exp_high), or both (expl) `define expl(x, res) \ if (abs(x) < `se05) begin\ res = exp(x); \ end else begin \ if ((x) < 0.0) begin\ res = `ke05 / `P3(-`se05 - (x)); \ end else begin\ res = `ke05inv * `P3((x) - `se05); \ end \ end `define expl_low(x, res) \ if ((x) > -`se05) begin\ res = exp(x); \ end else begin\ res = `ke05 / `P3(-`se05 - (x)); \ end `define expl_high(x, res) \ if ((x) < `se05) begin\ res = exp(x); \ end else begin \ res = `ke05inv * `P3((x) - `se05); \ end // Exchange function `define swap(a, b) \ temp = a; \ a = b; \ b = temp; // Parameter definition macros: "des" description argument is intended to // be a short description, the "inf" information argument is intended to be // a detailed description (e.g. for display as part of on-line help). // // MPR model parameter real // MPI model parameter integer // IPR instance parameter real // IPI instance parameter integer // OPP operating point parameter, includes units and description for printing // OPM operating point parameter, scales with $mfactor // OPD operating point parameter, scales with 1/$mfactor // // Instance parameters have the attribute *type="instance"* and note that // compilers treat these as both instance and model parameters, with a // specified instance value taking precedence over a specified model card value. // // There are some issues with passing range directives with some compilers, // so for each parameter declaration there are multiple versions: // cc closed lower bound, closed upper bound // co closed lower bound, open upper bound // cz closed lower bound of zero (no upper bound) // oc open lower bound, closed upper bound // oo open lower bound, open upper bound // oz open lower bound of zero (no upper bound) // nb no bounds // sw switch (integer only, values 0=false and >0=true) // ty switch (integer only, values -1=n-type and +1=p-type) // `define ALIAS(alias,paramName) aliasparam alias = paramName; `define OPP(nam,uni,des) (*units=uni, desc=des*) real nam; `define OPM(nam,uni,des) (*units=uni, multiplicity="multiply", desc=des*) real nam; `define OPD(nam,uni,des) (*units=uni, multiplicity="divide", desc=des*) real nam; `define MPRcc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from[lwr:upr]; `define MPRco(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from[lwr:upr); `define MPRcz(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def from[ 0:inf); `define MPRoc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from(lwr:upr]; `define MPRoo(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter real nam=def from(lwr:upr); `define MPRoz(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def from( 0:inf); `define MPRnb(nam,def,uni, des) (*units=uni , desc=des*) parameter real nam=def; `define MPIcc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from[lwr:upr]; `define MPIco(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from[lwr:upr); `define MPIcz(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ 0:inf); `define MPIoc(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from(lwr:upr]; `define MPIoo(nam,def,uni,lwr,upr,des) (*units=uni , desc=des*) parameter integer nam=def from(lwr:upr); `define MPIoz(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from( 0:inf); `define MPInb(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def; `define MPIsw(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ 0:inf); `define MPIty(nam,def,uni, des) (*units=uni , desc=des*) parameter integer nam=def from[ -1: 1] exclude 0; `define IPRcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr]; `define IPRco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr); `define IPRcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[ 0:inf); `define IPRoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr]; `define IPRoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr); `define IPRoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from( 0:inf); `define IPRnb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def; `define IPIcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr]; `define IPIco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr); `define IPIcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf); `define IPIoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr]; `define IPIoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr); `define IPIoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from( 0:inf); `define IPInb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def; `define IPIsw(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf); tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_ChargesNQS.include0000644000175000017500000003762014163340332026662 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_ChargesNQS.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // -------------------------------------------------------------------------------------------------------------- // Calculate NQS-charge contributions // -------------------------------------------------------------------------------------------------------------- Qp1 = vnorm * V(SPLINE1); Qp2 = vnorm * V(SPLINE2); Qp3 = vnorm * V(SPLINE3); Qp4 = vnorm * V(SPLINE4); Qp5 = vnorm * V(SPLINE5); Qp6 = vnorm * V(SPLINE6); Qp7 = vnorm * V(SPLINE7); Qp8 = vnorm * V(SPLINE8); Qp9 = vnorm * V(SPLINE9); Tnorm = 0.0; if (SWNQS_i != 0) begin // Dimension and mobility information is included in Tnorm Tnorm = MUNQS_i * phit1 * BET_i / (COX_qm * Gmob_dL_ac); thesat2 = thesat1_ac * thesat1_ac * phit1 * phit1; if (SWNQS_i == 1) begin dQy = QpN - Qp0; d2Qy = 6.0 * (Qp0 + QpN) - 12.0 * Qp1; end else if (SWNQS_i == 2) begin dQy = (-7.0 * Qp0 - 3.0 * Qp1 + 12.0 * Qp2 - 2.0 * QpN) / 5.0; d2Qy = -18.0 / 5.0 * (-4.0 * Qp0 + 9.0 * Qp1 - 6.0 * Qp2 + QpN); end else if (SWNQS_i == 3) begin dQy = (-13.0 * Qp0 - 6.0 * Qp1 + 24.0 * Qp2 - 6.0 * Qp3 + QpN) / 7.0; d2Qy = (180.0 * Qp0 - 408.0 * Qp1 + 288.0 * Qp2 - 72.0 * Qp3 + 12.0 * QpN) / 7.0; end else if (SWNQS_i == 5) begin dQy = (-181.0 * Qp0 - 84.0 * Qp1 + 24.0 * Qp4 - 6.0 * Qp5 - 90.0 * Qp3 + QpN + 336.0 * Qp2) / 65.0; d2Qy = (432.0 * Qp4 - 108.0 * Qp5 - 1620.0 * Qp3 + 18.0 * QpN + 3762.0 * Qp0 - 8532.0 * Qp1 + 6048.0 * Qp2) / 65.0; end else if (SWNQS_i == 9) begin dQy = (1680.0 * Qp6 + 23400.0 * Qp4 + 5.0 * QpN - 87330.0 * Qp3 + 120.0 * Qp8 - 450.0 * Qp7 - 81480.0 * Qp1 + 325920.0 * Qp2 -175565.0 * Qp0 - 30.0 * Qp9) / 37829.0 - 30.0 / 181.0 * Qp5; d2Qy = (-13500.0 * Qp7 + 702000.0 * Qp4 - 2619900 * Qp3 - 13793100.0 * Qp1 + 9777600.0 * Qp2 + 6081750.0 * Qp0 + 150.0 * QpN + 3600.0 * Qp8 - 900.0 * Qp9 + 50400.0 * Qp6) / 37829.0 - 900.0 / 181.0 * Qp5; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp1, xg_ac, dQy, d2Qy, fk1) end else begin thesat2 = 0.0; end if (SWNQS_i >= 2) begin if (SWNQS_i == 2) begin dQy = (2.0 * Qp0 - 12.0 * Qp1 + 3.0 * Qp2 + 7.0 * QpN) / 5.0; d2Qy = -18.0 / 5.0 * (-4.0 * QpN + 9.0 * Qp2 - 6.0 * Qp1 + Qp0); end else if (SWNQS_i == 3) begin dQy = 0.5 * Qp0 - 3.0 * Qp1 + 3.0 * Qp3 - 0.5 * QpN; d2Qy = (-48.0 * Qp0 + 288.0 * Qp1 - 480.0 * Qp2 + 288.0 * Qp3 - 48.0 * QpN) / 7.0; end else if (SWNQS_i == 5) begin dQy = (-291.0 * Qp1 - 6.0 * Qp2 - 84.0 * Qp4 + 21.0 * Qp5) / 65.0 + (630.0 * Qp3 - 7.0 * QpN + 97.0 * Qp0) / 130.0; d2Qy = (-1728.0 * Qp4 + 432.0 * Qp5 + 6480.0 * Qp3 - 72.0 * QpN - 1008.0 * Qp0 + 6048.0 * Qp1 - 10152.0 * Qp2) / 65.0; end else if (SWNQS_i == 9) begin dQy = (-5880.0 * Qp6 - 81900.0 * Qp4 + 305655.0 * Qp3 - 420.0 * Qp8 + 105.0 * Qp9 - 282255.0 * Qp1 + 1575.0 * Qp7 - 5850.0 * Qp2) / 37829.0 + 105.0 / 181.0 * Qp5 + (94085.0 * Qp0 - 35.0 * QpN) / 75658.0; d2Qy = (9777600.0 * Qp1 + 54000.0 * Qp7 - 2808000.0 * Qp4 + 10479600.0 * Qp3 - 16413000.0 * Qp2 - 1629600.0 * Qp0 - 600.0 * QpN - 14400.0 * Qp8 + 3600.0 * Qp9 - 201600.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp2, xg_ac, dQy, d2Qy, fk2) end if (SWNQS_i >= 3) begin if (SWNQS_i == 3) begin dQy = (13.0 * QpN + 6.0 * Qp3 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 7.0; d2Qy = (180.0 * QpN - 408.0 * Qp3 + 288.0 * Qp2 - 72.0 * Qp1 + 12.0 * Qp0) / 7.0; end else if (SWNQS_i == 5) begin dQy = (QpN - 6.0 * Qp5 + 24.0 * Qp4 - 24.0 * Qp2 + 6.0 * Qp1 - Qp0) / 5.0; d2Qy = (1296.0 * (Qp4 + Qp2) - 324.0 * (Qp5 + Qp1) - 2052.0 * Qp3 + 54.0 * (QpN + Qp0)) / 13.0; end else if (SWNQS_i == 9) begin dQy = (21840.0 * Qp6 + 304200.0 * Qp4 + 65.0 * QpN - 420.0 * Qp3 + 1560.0 * Qp8 - 12605.0 * Qp0 - 390.0 * Qp9 + 75630.0 * Qp1 - 5850.0 * Qp7 - 302520.0 * Qp2) / 37829.0 - 390.0 / 181.0 * Qp5; d2Qy = (-2619900.0 * Qp1 - 202500.0 * Qp7 + 10530000.0 * Qp4 - 16601100.0 * Qp3 + 10479600.0 * Qp2 + 436650.0 * Qp0 + 2250.0 * QpN + 54000.0 * Qp8 - 13500.0 * Qp9 + 756000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp3, xg_ac, dQy, d2Qy, fk3) end if (SWNQS_i >= 4) begin if (SWNQS_i == 5) begin dQy = (-630.0 * Qp3 + 12.0 * Qp4 + 582.0 * Qp5 - 97.0 * QpN + 7.0 * Qp0 - 42.0 * Qp1 + 168.0 * Qp2) / 130.0; d2Qy = (-10152.0 * Qp4 + 6048.0 * Qp5 + 6480.0 * Qp3 - 1008.0 * QpN - 72.0 * Qp0 + 432.0 * Qp1 - 1728.0 * Qp2) / 65.0; end else if (SWNQS_i == 9) begin dQy = (-81480.0 * Qp6 - 30.0 * Qp4 - 303975.0 * Qp3 - 5820.0 * Qp8 + 1455.0 * Qp9 - 20265.0 * Qp1 + 21825.0 * Qp7 + 81060.0 * Qp2) / 37829.0 - 485.0 / 75658.0 * QpN + 1455.0 * Qp5 / 181.0 + 6755.0 * Qp0 / 75658.0; d2Qy = (702000.0 * Qp1 + 756000.0 * Qp7 - 16614600.0 * Qp4 + 10530000.0 * Qp3 - 2808000.0 * Qp2 - 117000.0 * Qp0 - 8400.0 * QpN - 201600.0 * Qp8 + 50400.0 * Qp9 - 2822400.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp4, xg_ac, dQy, d2Qy, fk4) end if (SWNQS_i >= 5) begin if (SWNQS_i == 5) begin dQy = (-336.0 * Qp4 + 84.0 * Qp5 + 90.0 * Qp3 + 181.0 * QpN - Qp0 + 6.0 * Qp1 - 24.0 * Qp2) / 65.0; d2Qy = (18.0 * Qp0 + 3762.0 * QpN + 6048.0 * Qp4 + 432.0 * Qp2 - 1620.0 * Qp3 - 108.0 * Qp1 - 8532.0 * Qp5) / 65.0; end else if (SWNQS_i == 9) begin dQy = (1680.0 * (Qp6 - Qp4) + 5.0 * (QpN - Qp0) + 450.0 * (Qp3 - Qp7) + 120.0 * (Qp8 - Qp2) - 30.0 * (Qp9 - Qp1)) / 209.0; d2Qy = (-900.0 * (Qp1 + Qp9) - 13500.0 * (Qp7 + Qp3) - 79500.0 * Qp5 + 50400.0 * (Qp4 + Qp6) + 3600.0 * (Qp2 + Qp8) + 150.0 * (Qp0 + QpN)) / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp5, xg_ac, dQy, d2Qy, fk5) end if (SWNQS_i >= 6) begin if (SWNQS_i == 9) begin dQy = (30.0 * Qp6 + 81480.0 * Qp4 - 21825.0 * Qp3 - 81060.0 * Qp8 + 20265.0 * Qp9 - 1455.0 * Qp1 + 303975.0 * Qp7 + 5820.0 * Qp2) / 37829.0 -(6755.0 * QpN - 485.0 * Qp0) / 75658.0 - 1455.0 / 181.0 * Qp5; d2Qy = (50400.0 * Qp1 + 10530000.0 * Qp7 - 2822400.0 * Qp4 + 756000.0 * Qp3 - 201600.0 * Qp2 - 8400.0 * Qp0 - 117000.0 * QpN - 2808000.0 * Qp8 + 702000.0 * Qp9 - 16614600.0 * Qp6) / 37829.0 + 50400.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp6, xg_ac, dQy, d2Qy, fk6) end if (SWNQS_i >= 7) begin if (SWNQS_i == 9) begin dQy = (-304200.0 * Qp6 - 21840.0 * Qp4 + 12605.0 * QpN + 5850.0 * Qp3 + 302520.0 * Qp8 - 65.0 * Qp0 - 75630.0 * Qp9 + 390.0 * Qp1 + 420.0 * Qp7 - 1560.0 * Qp2) / 37829.0 + 390.0 / 181.0 * Qp5; d2Qy = (-13500.0 * Qp1 - 16601100.0 * Qp7 + 756000.0 * Qp4 - 202500.0 * Qp3 + 54000.0 * Qp2 + 2250.0 * Qp0 + 436650.0 * QpN + 10479600.0 * Qp8 - 2619900.0 * Qp9 + 10530000.0 * Qp6) / 37829.0 - 13500.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp7, xg_ac, dQy, d2Qy, fk7) end if (SWNQS_i >= 8) begin if (SWNQS_i == 9) begin dQy = (81900.0 * Qp6 + 5880.0 * Qp4 - 1575.0 * Qp3 + 5850.0 * Qp8 + 282255.0 * Qp9 - 105.0 * Qp1 - 305655.0 * Qp7 + 420.0 * Qp2) / 37829.0 + (35.0 * Qp0 - 94085.0 * QpN) / 75658.0 - 105.0 / 181.0 * Qp5; d2Qy = (3600.0 * Qp1 + 10479600.0 * Qp7 - 201600.0 * Qp4 + 54000.0 * Qp3 - 14400.0 * Qp2 - 600.0 * Qp0 - 1629600.0 * QpN - 16413000.0 * Qp8 + 9777600.0 * Qp9 - 2808000.0 * Qp6) / 37829.0 + 3600.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp8, xg_ac, dQy, d2Qy, fk8) end if (SWNQS_i >= 9) begin if (SWNQS_i == 9) begin dQy = (-23400.0 * Qp6 - 1680.0 * Qp4 + 175565.0 * QpN + 450.0 * Qp3 - 325920.0 * Qp8 - 5.0 * Qp0 + 81480.0 * Qp9 + 30.0 * Qp1 + 87330.0 * Qp7 - 120.0 * Qp2) / 37829.0 + 30.0 * Qp5 / 181.0; d2Qy = (-900.0 * Qp1 - 2619900.0 * Qp7 + 50400.0 * Qp4 - 13500.0 * Qp3 + 3600.0 * Qp2 + 150.0 * Qp0 + 6081750.0 * QpN + 9777600.0 * Qp8 - 13793100.0 * Qp9 + 702000.0 * Qp6) / 37829.0 - 900.0 * Qp5 / 181.0; end else begin dQy = 0.0; d2Qy = 0.0; end `fq(Qp9, xg_ac, dQy, d2Qy, fk9) end //-------------------------------------------------------------------- // Terminal charges for NQS QS_NQS = 0.0; QD_NQS = 0.0; QG_NQS = 0.0; if (SWNQS_i != 0) begin if (SWNQS_i == 1) begin QS_NQS = (17.0 * Qp0 + 30.0 * Qp1 + QpN) / 96.0; QD_NQS = (Qp0 + 30.0 * Qp1 + 17.0 * QpN) / 96.0; `QiToPhi(Qp1,xg_ac, temp1) QG_NQS = xg_ac - (x_sp + 4.0 * temp1 + x_dp) * `oneSixth; end else if (SWNQS_i == 2) begin QS_NQS = (11.0 * Qp0 + 24.0 * Qp1 + 9.0 * Qp2 + QpN) / 90.0; QD_NQS = (11.0 * QpN + 24.0 * Qp2 + 9.0 * Qp1 + Qp0) / 90.0; `QiToPhi(Qp1, xg_ac, temp1) `QiToPhi(Qp2, xg_ac, temp2) QG_NQS = xg_ac - (x_sp + 3.0 * (temp1 + temp2) + x_dp) * 0.125; end else if (SWNQS_i == 3) begin QS_NQS = (251.0 * Qp0 + 594.0 * Qp1 + 312.0 * Qp2 + 174.0 * Qp3 + 13.0 * QpN) / 2688.0; QD_NQS = (251.0 * QpN + 594.0 * Qp3 + 312.0 * Qp2 + 174.0 * Qp1 + 13.0 * Qp0) / 2688.0; `QiToPhi(Qp1, xg_ac, temp1) `QiToPhi(Qp2, xg_ac, temp2) `QiToPhi(Qp3, xg_ac, temp3) QG_NQS = xg_ac - (x_sp + 4.0 * temp1 + 2.0 * temp2 + 4.0 * temp3 + x_dp) / 12.0; end else if (SWNQS_i == 5) begin QS_NQS = (1187.0 * Qp0 + 43.0 * QpN) / 18720.0 + (503.0 * Qp1 + 172.0 * Qp4 + 87.0 * Qp5 + 265.0 * Qp3 + 328.0 * Qp2) / 3120.0; QD_NQS = (1187.0 * QpN + 43.0 * Qp0) / 18720.0 + (503.0 * Qp5 + 172.0 * Qp2 + 87.0 * Qp1 + 265.0 * Qp3 + 328.0 * Qp4) / 3120.0; `QiToPhi(Qp1, xg_ac, temp1) `QiToPhi(Qp2, xg_ac, temp2) `QiToPhi(Qp3, xg_ac, temp3) `QiToPhi(Qp4, xg_ac, temp4) `QiToPhi(Qp5, xg_ac, temp5) QG_NQS = xg_ac - (x_sp + 4.0 * (temp1 + temp3 + temp5) + 2.0 * (temp2 + temp4) + x_dp) / 18.0; end else if (SWNQS_i == 9) begin QS_NQS = (75653.0 * Qp8 + 225999.0 * Qp4) / 3782900.0 + (151321.0 * Qp9 + 454023.0 * Qp7 + 1073767.0 * Qp3 + 1564569.0 * Qp1) / 15131600.0 + 75623.0 * Qp6 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp2 / 945725.0 + (3504517.0 * Qp0 + 75653.0 * QpN) / 90789600.0; QD_NQS = (75653.0 * Qp2 + 225999.0 * Qp6) / 3782900.0 + (151321.0 * Qp1 + 454023.0 * Qp3 + 1073767.0 * Qp7 + 1564569.0 * Qp9) / 15131600.0 + 75623.0 * Qp4 / 1891450.0 + 145.0 * Qp5 / 2896.0 + 72263.0 * Qp8 / 945725.0 + (3504517.0 * QpN + 75653.0 * Qp0) / 90789600.0; `QiToPhi(Qp1, xg_ac, temp1) `QiToPhi(Qp2, xg_ac, temp2) `QiToPhi(Qp3, xg_ac, temp3) `QiToPhi(Qp4, xg_ac, temp4) `QiToPhi(Qp5, xg_ac, temp5) `QiToPhi(Qp6, xg_ac, temp6) `QiToPhi(Qp7, xg_ac, temp7) `QiToPhi(Qp8, xg_ac, temp8) `QiToPhi(Qp9, xg_ac, temp9) QG_NQS = xg_ac - (x_sp + 4.0 * (temp1 + temp3 + temp5 + temp7 + temp9) + 2.0 * (temp2 + temp4 + temp6 + temp8) + x_dp) / 30.0; end QG_NQS = pd * QG_NQS; if (sigVds > 0) begin Qs = COX_qm * phit1 * QS_NQS; Qd = COX_qm * phit1 * QD_NQS; end else begin Qs = COX_qm * phit1 * QD_NQS; Qd = COX_qm * phit1 * QS_NQS; end Qg = COX_qm * phit1 * QG_NQS; Qb = -Qg - Qs - Qd; end // Update internal nodes V(RES1) <+ vnorm_inv * I(RES1) * r_nqs; V(SPLINE1) <+ vnorm_inv * idt(-Tnorm * fk1, Qp1_0); V(RES2) <+ vnorm_inv * I(RES2) * r_nqs; V(SPLINE2) <+ vnorm_inv * idt(-Tnorm * fk2, Qp2_0); V(RES3) <+ vnorm_inv * I(RES3) * r_nqs; V(SPLINE3) <+ vnorm_inv * idt(-Tnorm * fk3, Qp3_0); V(RES4) <+ vnorm_inv * I(RES4) * r_nqs; V(SPLINE4) <+ vnorm_inv * idt(-Tnorm * fk4, Qp4_0); V(RES5) <+ vnorm_inv * I(RES5) * r_nqs; V(SPLINE5) <+ vnorm_inv * idt(-Tnorm * fk5, Qp5_0); V(RES6) <+ vnorm_inv * I(RES6) * r_nqs; V(SPLINE6) <+ vnorm_inv * idt(-Tnorm * fk6, Qp6_0); V(RES7) <+ vnorm_inv * I(RES7) * r_nqs; V(SPLINE7) <+ vnorm_inv * idt(-Tnorm * fk7, Qp7_0); V(RES8) <+ vnorm_inv * I(RES8) * r_nqs; V(SPLINE8) <+ vnorm_inv * idt(-Tnorm * fk8, Qp8_0); V(RES9) <+ vnorm_inv * I(RES9) * r_nqs; V(SPLINE9) <+ vnorm_inv * idt(-Tnorm * fk9, Qp9_0); tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_parlist.include0000644000175000017500000027542714163340332026413 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_parlist.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // -------------------------------------------------------------------------------------------------------------- // Special model parameters and switch parameters // -------------------------------------------------------------------------------------------------------------- // Special model parameters, some are also simulator global variables `MPInb(LEVEL ,103 ,"" ,"Model level") `MPIty(TYPE ,1 ,"" ,"Channel type parameter, +1=NMOS -1=PMOS") `MPIty(nmos ,1 ,"" ,"MOS channel type") `MPIty(pmos ,1 ,"" ,"MOS channel type") `MPRco(TR ,21.0 ,"degC" ,-273.0 ,inf ,"nominal (reference) temperature") // Switch parameters that turn models or effects on or off `MPIcc(SWGEO ,1 ,"" ,0 ,2 ,"Flag for geometrical model, 0=local, 1=global, 2=binning") `MPIcc(SWIGATE ,0 ,"" ,0 ,2 ,"Flag for gate current: 0=off, 1=on, 2=on+overlaps-parameters") `MPIcc(SWIMPACT ,0 ,"" ,0 ,1 ,"Flag for impact ionization current, 0=turn off II") `MPIcc(SWGIDL ,0 ,"" ,0 ,1 ,"Flag for GIDL current, 0=turn off IGIDL") `MPIcc(SWJUNCAP ,0 ,"" ,0 ,3 ,"Flag for juncap, 0=turn off juncap") `MPIcc(SWJUNASYM ,0 ,"" ,0 ,1 ,"Flag for asymmetric junctions; 0=symmetric, 1=asymmetric") `MPIcc(SWNUD ,0 ,"" ,0 ,2 ,"Flag for NUD-effect; 0=off, 1=on, 2=on+CV-correction") `MPIcc(SWEDGE ,0 ,"" ,0 ,1 ,"Flag for drain current of edge transistors; 0=off, 1=on") `MPIcc(SWDELVTAC ,0 ,"" ,0 ,1 ,"Flag for separate capacitance calculation; 0=off, 1=on") `MPIcc(SWQSAT ,0 ,"" ,0 ,1 ,"Flag for separate capacitance calculation in saturation only: 0=off, 1=on") `MPIcc(SWQPART ,0 ,"" ,0 ,1 ,"Flag for drain/source charge partitioning; 0=linear distribution, 1=source") `MPIcc(SWIGN ,1 ,"" ,0 ,1 ,"Flag for induced gate noise; 0=off, 1=on") `ifdef NQSmodel `MPIcc(SWNQS ,0 ,"" ,0 ,9 ,"Flag for NQS, 0=off, 1, 2, 3, 5, or 9=number of collocation points") `endif // NQSmodel `MPRcz(QMC ,1.0 ,"" ,"Quantum-mechanical correction factor") // -------------------------------------------------------------------------------------------------------------- // PSP local model parameters // -------------------------------------------------------------------------------------------------------------- // Process parameters `MPRnb(VFB ,-1.0 ,"V" ,"Flat band voltage at TR") `MPRnb(STVFB ,5.0e-4 ,"V/K" ,"Temperature dependence of VFB") `MPRnb(ST2VFB ,0.0 ,"K^-1" ,"Quadratic temperature dependence of VFB") `MPRco(TOX ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Gate oxide thickness") `MPRco(EPSROX ,3.9 ,"" ,1.0 ,inf ,"Relative permittivity of gate dielectric") `MPRcc(NEFF ,5.0e23 ,"m^-3" ,1.0e20 ,1.0e26 ,"Effective substrate doping") `MPRcz(FACNEFFAC ,1.0 ,"" ,"Pre-factor for effective substrate doping in separate charge calculation") `MPRco(GFACNUD ,1.0 ,"" ,0.01 ,inf ,"Body-factor change due to NUD-effect") `MPRcz(VSBNUD ,0.0 ,"V" ,"Lower Vsb value for NUD-effect") `MPRco(DVSBNUD ,1.0 ,"V" ,0.1 ,inf ,"Vsb-range for NUD-effect") `MPRnb(VNSUB ,0.0 ,"V" ,"Effective doping bias-dependence parameter") `MPRco(NSLP ,0.05 ,"V" ,1.0e-3 ,inf ,"Effective doping bias-dependence parameter") `MPRcc(DNSUB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Effective doping bias-dependence parameter") `MPRnb(DPHIB ,0.0 ,"V" ,"Offset parameter for PHIB") `MPRnb(DELVTAC ,0.0 ,"V" ,"Offset parameter for PHIB in separate charge calculation") `MPRcz(NP ,1.0e26 ,"m^-3" ,"Gate poly-silicon doping") `MPRco(TOXOV ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness") `MPRco(TOXOVD ,2.0e-09 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness for drain side") `MPRcc(NOV ,5.0e25 ,"m^-3" ,1.0e23 ,1.0e27 ,"Effective doping of overlap region") `MPRcc(NOVD ,5.0e25 ,"m^-3" ,1.0e23 ,1.0e27 ,"Effective doping of overlap region for drain side") // Interface states parameters: PSP 103.6 `MPRcz(CT ,0.0 ,"" ,"Interface states factor") `MPRcz(CTG ,0.0 ,"" ,"Gate voltage dependence of interface states factor") `MPRnb(CTB ,0.0 ,"" ,"Bulk voltage dependence of interface states factor") `MPRnb(STCT ,1.0 ,"" ,"Geometry-independent temperature dependence of CT") // DIBL parameters `MPRcz(CF ,0.0 ,"" ,"DIBL-parameter") `MPRcz(CFAC ,0.0 ,"" ,"DIBL-parameter of charge model when SWQSAT=1") `MPRcz(CFD ,0.0 ,"V^-1" ,"Drain voltage dependence of CF") `MPRcc(CFB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Back bias dependence of CF") // Subthreshold slope parameters of short channel transistor `MPRcz(PSCE ,0.0 ,"" ,"Subthreshold slope coefficient for short channel transistor") `MPRcc(PSCEB ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel transistor") `MPRcz(PSCED ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel transistor") // Mobility parameters `MPRcz(BETN ,7.0e-2 ,"m^2/V/s" ,"Channel aspect ratio times zero-field mobility") `MPRnb(STBET ,1.0 ,"" ,"Temperature dependence of BETN") `MPRcz(MUE ,0.5 ,"m/V" ,"Mobility reduction coefficient at TR") `MPRnb(STMUE ,0.0 ,"" ,"Temperature dependence of MUE") `MPRcz(THEMU ,1.5 ,"" ,"Mobility reduction exponent at TR") `MPRnb(STTHEMU ,1.5 ,"" ,"Temperature dependence of THEMU") `MPRcz(CS ,0.0 ,"" ,"Coulomb scattering parameter at TR") `MPRnb(STCS ,0.0 ,"" ,"Temperature dependence of CS") `MPRcz(THECS ,2.0 ,"" ,"Coulomb scattering exponent at TR") `MPRnb(STTHECS ,0.0 ,"" ,"Temperature dependence of THECS") `MPRcz(XCOR ,0.0 ,"V^-1" ,"Non-universality factor") `MPRnb(STXCOR ,0.0 ,"" ,"Temperature dependence of XCOR") `MPRcz(FETA ,1.0 ,"" ,"Effective field parameter") // Series-resistance parameters (for resistance modeling as part of intrinsic mobility reduction) `MPRcz(RS ,30.0 ,"Ohm" ,"Series resistance at TR") `MPRnb(STRS ,1.0 ,"" ,"Temperature dependence of RS") `MPRcc(RSB ,0.0 ,"V^-1" ,-0.5 ,1.0 ,"Back-bias dependence of series resistance") `MPRco(RSG ,0.0 ,"V^-1" ,-0.5 ,inf ,"Gate-bias dependence of series resistance") // Velocity saturation parameters `MPRcz(THESAT ,1.0 ,"V^-1" ,"Velocity saturation parameter at TR") `MPRcz(THESATAC ,1.0 ,"V^-1" ,"Velocity saturation parameter at TR of charge model when SWQSAT=1") `MPRnb(STTHESAT ,1.0 ,"" ,"Temperature dependence of THESAT") `MPRcc(THESATB ,0.0 ,"V^-1" ,-0.5 ,1.0 ,"Back-bias dependence of velocity saturation") `MPRco(THESATG ,0.0 ,"V^-1" ,-0.5 ,inf ,"Gate-bias dependence of velocity saturation") // Saturation voltage parameters `MPRco(AX ,3.0 ,"" ,2.0 ,inf ,"Linear/saturation transition factor") `MPRco(AXAC ,3.0 ,"" ,2.0 ,inf ,"Linear/saturation transition factor of charge model when SWQSAT=1") // Channel length modulation (CLM) parameters `MPRcz(ALP ,0.01 ,"" ,"CLM pre-factor") `MPRcz(ALPAC ,0.01 ,"" ,"CLM pre-factor of charge model when SWQSAT=1") `MPRcz(ALP1 ,0.0 ,"V" ,"CLM enhancement factor above threshold") `MPRcz(ALP2 ,0.0 ,"V^-1" ,"CLM enhancement factor below threshold") `MPRco(VP ,0.05 ,"V" ,1.0e-10 ,inf ,"CLM logarithm dependence factor") // Impact ionization (II) parameters `MPRcz(A1 ,1.0 ,"" ,"Impact-ionization pre-factor") `MPRcz(A2 ,10.0 ,"V" ,"Impact-ionization exponent at TR") `MPRnb(STA2 ,0.0 ,"V" ,"Temperature dependence of A2") `MPRcz(A3 ,1.0 ,"" ,"Saturation-voltage dependence of impact-ionization") `MPRcz(A4 ,0.0 ,"V^-0.5" ,"Back-bias dependence of impact-ionization") // Gate current parameters `MPRcc(GCO ,0.0 ,"" ,-10.0 ,10.0 ,"Gate tunnelling energy adjustment") `MPRcz(IGINV ,0.0 ,"A" ,"Gate channel current pre-factor") `MPRcz(IGOV ,0.0 ,"A" ,"Gate overlap current pre-factor") `MPRcz(IGOVD ,0.0 ,"A" ,"Gate overlap current pre-factor for drain side") `MPRnb(STIG ,2.0 ,"" ,"Temperature dependence of IGINV and IGOV") `MPRcc(GC2 ,0.375 ,"" ,0.0 ,10.0 ,"Gate current slope factor") `MPRcc(GC3 ,0.063 ,"" ,-2.0 ,2.0 ,"Gate current curvature factor") `MPRcc(GC2OV ,0.375 ,"" ,0.0 ,10.0 ,"Gate overlap current slope factor, used only when SWIGATE=2") `MPRcc(GC3OV ,0.063 ,"" ,-2.0 ,2.0 ,"Gate overlap current curvature factor, used only when SWIGATE=2") `MPRco(CHIB ,3.1 ,"V" ,1.0 ,inf ,"Tunnelling barrier height") // Gate Induced Drain/Source Leakage (GIDL) parameters `MPRcz(AGIDL ,0.0 ,"A/V^3" ,"GIDL pre-factor") `MPRcz(AGIDLD ,0.0 ,"A/V^3" ,"GIDL pre-factor for drain side") `MPRcz(BGIDL ,41.0 ,"V" ,"GIDL probability factor at TR") `MPRcz(BGIDLD ,41.0 ,"V" ,"GIDL probability factor at TR for drain side") `MPRnb(STBGIDL ,0.0 ,"V/K" ,"Temperature dependence of BGIDL") `MPRnb(STBGIDLD ,0.0 ,"V/K" ,"Temperature dependence of BGIDL for drain side") `MPRnb(CGIDL ,0.0 ,"" ,"Back-bias dependence of GIDL") `MPRnb(CGIDLD ,0.0 ,"" ,"Back-bias dependence of GIDL for drain side") // Charge model parameters `MPRcz(COX ,1.0e-14 ,"F" ,"Oxide capacitance for intrinsic channel") `MPRcz(CGOV ,1.0e-15 ,"F" ,"Oxide capacitance for gate-drain/source overlap") `MPRcz(CGOVD ,1.0e-15 ,"F" ,"Oxide capacitance for gate-drain overlap") `MPRcz(CGBOV ,0.0 ,"F" ,"Oxide capacitance for gate-bulk overlap") `MPRcz(CFR ,0.0 ,"F" ,"Outer fringe capacitance") `MPRcz(CFRD ,0.0 ,"F" ,"Outer fringe capacitance for drain side") // Noise parameters `MPRcz(FNT ,1.0 ,"" ,"Thermal noise coefficient") `MPRcz(FNTEXC ,0.0 ,"" ,"Excess noise coefficient") `MPRcz(NFA ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise") `MPRcz(NFB ,3.0e07 ,"V^-1/m^2" ,"Second coefficient of flicker noise") `MPRcz(NFC ,0.0 ,"V^-1" ,"Third coefficient of flicker noise") `MPRcz(EF ,1.0 ,"" ,"Flicker noise frequency exponent") // Edge transistor parameters: PSP 103.4 `MPRnb(VFBEDGE ,-1.0 ,"V" ,"Flat band voltage of edge transistors at TR") `MPRnb(STVFBEDGE ,5.0e-4 ,"V/K" ,"Temperature dependence of VFBEDGE") `MPRnb(DPHIBEDGE ,0.0 ,"V" ,"Offset parameter for PHIB of edge transistors") `MPRcc(NEFFEDGE ,5.0e23 ,"m^-3" ,1.0e20 ,1.0e26 ,"Effective substrate doping of edge transistors") `MPRcz(CTEDGE ,0.0 ,"" ,"Interface states factor of edge transistors") `MPRcz(BETNEDGE ,5.0e-4 ,"m^2/V/s" ,"Channel aspect ratio times zero-field mobility of edge transistor") `MPRnb(STBETEDGE ,1.0 ,"" ,"Temperature dependence of BETNEDGE") `MPRcz(PSCEEDGE ,0.0 ,"" ,"Subthreshold slope coefficient for short channel edge transistors") `MPRcc(PSCEBEDGE ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors") `MPRcz(PSCEDEDGE ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors") `MPRcz(CFEDGE ,0.0 ,"" ,"DIBL parameter of edge transistors") `MPRcz(CFDEDGE ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of DIBL-parameter of edge transistors") `MPRcc(CFBEDGE ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of DIBL-parameter of edge transistors") `MPRcz(FNTEDGE ,1.0 ,"" ,"Thermal noise coefficient of edge transistors") `MPRcz(NFAEDGE ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise of edge transistors") `MPRcz(NFBEDGE ,3.0e07 ,"V^-1/m^2" ,"Second coefficient of flicker noise of edge transistors") `MPRcz(NFCEDGE ,0.0 ,"V^-1" ,"Third coefficient of flicker noise of edge transistors") `MPRcz(EFEDGE ,1.0 ,"" ,"Flicker noise frequency exponent of edge transistors") // NQS parameters `ifdef NQSmodel `MPRcz(MUNQS ,1.0 ,"" ,"Relative mobility for NQS modelling") `endif // NQSmodel // Parasitic resistance parameters `MPRcz(RG ,0.0 ,"Ohm" ,"Gate resistance") `MPRcz(RSE ,0.0 ,"Ohm" ,"External source resistance") `MPRcz(RDE ,0.0 ,"Ohm" ,"External drain resistance") `MPRcz(RBULK ,0.0 ,"Ohm" ,"Bulk resistance between node BP and BI") `MPRcz(RWELL ,0.0 ,"Ohm" ,"Well resistance between node BI and B") `MPRcz(RJUNS ,0.0 ,"Ohm" ,"Source-side bulk resistance between node BI and BS") `MPRcz(RJUND ,0.0 ,"Ohm" ,"Drain-side bulk resistance between node BI and BD") // Self heating effect parameters `ifdef SelfHeating `MPRcz(RTH ,0.0 ,"K/W" ,"Thermal resistance") `MPRcz(CTH ,0.0 ,"J/K" ,"Thermal capacitance") `MPRnb(STRTH ,0.0 ,"" ,"Temperature sensitivity of RTH") `endif // SelfHeating // -------------------------------------------------------------------------------------------------------------- // PSP global model parameters // -------------------------------------------------------------------------------------------------------------- // Process Parameters `MPRnb(LVARO ,0.0 ,"m" ,"Geom. independent difference between actual and programmed gate length") `MPRnb(LVARL ,0.0 ,"" ,"Length dependence of LVAR") `MPRnb(LVARW ,0.0 ,"" ,"Width dependence of LVAR") `MPRnb(LAP ,0.0 ,"m" ,"Effective channel length reduction per side") `MPRnb(WVARO ,0.0 ,"m" ,"Geom. independent difference between actual and programmed field-oxide opening") `MPRnb(WVARL ,0.0 ,"" ,"Length dependence of WVAR") `MPRnb(WVARW ,0.0 ,"" ,"Width dependence of WVAR") `MPRnb(WOT ,0.0 ,"m" ,"Effective channel width reduction per side") `MPRnb(DLQ ,0.0 ,"m" ,"Effective channel length reduction for CV") `MPRnb(DWQ ,0.0 ,"m" ,"Effective channel width reduction for CV") `MPRnb(VFBO ,-1.0 ,"V" ,"Geometry-independent flat-band voltage at TR") `MPRnb(VFBL ,0.0 ,"V" ,"Length dependence of flat-band voltage") `MPRnb(VFBW ,0.0 ,"V" ,"Width dependence of flat-band voltage") `MPRnb(VFBLW ,0.0 ,"V" ,"Area dependence of flat-band voltage") `MPRnb(STVFBO ,5.0e-4 ,"V/K" ,"Geometry-independent temperature dependence of VFB") `MPRnb(STVFBL ,0.0 ,"V/K" ,"Length dependence of temperature dependence of VFB") `MPRnb(STVFBW ,0.0 ,"V/K" ,"Width dependence of temperature dependence of VFB") `MPRnb(STVFBLW ,0.0 ,"V/K" ,"Area dependence of temperature dependence of VFB") `MPRnb(ST2VFBO ,0.0 ,"K^-1" ,"Quadratic temperature dependence of VFB") `MPRco(TOXO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Gate oxide thickness") `MPRco(EPSROXO ,3.9 ,"" ,1.0 ,inf ,"Relative permittivity of gate dielectric") `MPRco(NSUBO ,3.0e23 ,"m^-3" ,1.0e20 ,inf ,"Geometry independent substrate doping") `MPRnb(NSUBW ,0.0 ,"" ,"Width dependence of background doping NSUBO due to segregation") `MPRco(WSEG ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of segregation of background doping NSUBO") `MPRcz(NPCK ,1.0e24 ,"m^-3" ,"Pocket doping level") `MPRnb(NPCKW ,0.0 ,"" ,"Width dependence of pocket doping NPCK due to segregation") `MPRco(WSEGP ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of segregation of pocket doping NPCK") `MPRco(LPCK ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Char. length of lateral doping profile") `MPRnb(LPCKW ,0.0 ,"" ,"Width dependence of char. length of lateral doping profile") `MPRnb(FOL1 ,0.0 ,"" ,"First length dependence coefficient for short channel body effect") `MPRnb(FOL2 ,0.0 ,"" ,"Second length dependence coefficient for short channel body effect") `MPRnb(FACNEFFACO ,1.0 ,"" ,"Geom. independent pre-factor for effective substrate doping in separate charge calculation") `MPRnb(FACNEFFACL ,0.0 ,"" ,"Length dependence of FACNEFFAC") `MPRnb(FACNEFFACW ,0.0 ,"" ,"Width dependence of FACNEFFAC") `MPRnb(FACNEFFACLW ,0.0 ,"" ,"Area dependence of FACNEFFAC") `MPRnb(GFACNUDO ,1.0 ,"" ,"Geom. independent body-factor change due to NUD-effect") `MPRnb(GFACNUDL ,0.0 ,"" ,"Length dependence of GFACNUD") `MPRnb(GFACNUDLEXP ,1.0 ,"" ,"Exponent for length dependence of GFACNUD") `MPRnb(GFACNUDW ,0.0 ,"" ,"Width dependence of GFACNUD") `MPRnb(GFACNUDLW ,0.0 ,"" ,"Area dependence of GFACNUD") `MPRnb(VSBNUDO ,0.0 ,"V" ,"Lower Vsb value for NUD-effect") `MPRnb(DVSBNUDO ,1.0 ,"V" ,"Vsb range for NUD-effect") `MPRnb(VNSUBO ,0.0 ,"V" ,"Effective doping bias-dependence parameter") `MPRnb(NSLPO ,0.05 ,"V" ,"Effective doping bias-dependence parameter") `MPRnb(DNSUBO ,0.0 ,"V^-1" ,"Effective doping bias-dependence parameter") `MPRnb(DPHIBO ,0.0 ,"V" ,"Geometry independent offset of PHIB") `MPRnb(DPHIBL ,0.0 ,"V" ,"Length dependence offset of PHIB") `MPRnb(DPHIBLEXP ,1.0 ,"" ,"Exponent for length dependence of offset of PHIB") `MPRnb(DPHIBW ,0.0 ,"V" ,"Width dependence of offset of PHIB") `MPRnb(DPHIBLW ,0.0 ,"V" ,"Area dependence of offset of PHIB") `MPRnb(DELVTACO ,0.0 ,"V" ,"Geom. independent offset parameter for PHIB in separate charge calculation") `MPRnb(DELVTACL ,0.0 ,"V" ,"Length dependence of DELVTAC") `MPRnb(DELVTACLEXP ,1.0 ,"" ,"Exponent for length dependence of offset of DELVTAC") `MPRnb(DELVTACW ,0.0 ,"V" ,"Width dependence of DELVTAC") `MPRnb(DELVTACLW ,0.0 ,"V" ,"Area dependence of DELVTAC") `MPRnb(NPO ,1.0e26 ,"m^-3" ,"Geometry-independent gate poly-silicon doping") `MPRnb(NPL ,0.0 ,"" ,"Length dependence of gate poly-silicon doping") `MPRco(TOXOVO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness") `MPRco(TOXOVDO ,2.0e-9 ,"m" ,1.0e-10 ,inf ,"Overlap oxide thickness for drain side") `MPRcz(LOV ,0.0 ,"m" ,"Overlap length for gate/drain and gate/source overlap capacitance") `MPRcz(LOVD ,0.0 ,"m" ,"Overlap length for gate/drain overlap capacitance") `MPRnb(NOVO ,5.0e25 ,"m^-3" ,"Effective doping of overlap region") `MPRnb(NOVDO ,5.0e25 ,"m^-3" ,"Effective doping of overlap region for drain side") // Interface states parameters: PSP 103.6 `MPRnb(CTO ,0.0 ,"" ,"Geometry-independent interface states factor") `MPRnb(CTL ,0.0 ,"" ,"Length dependence of interface states factor") `MPRnb(CTLEXP ,1.0 ,"" ,"Exponent for length dependence of interface states factor") `MPRnb(CTW ,0.0 ,"" ,"Width dependence of interface states factor") `MPRnb(CTLW ,0.0 ,"" ,"Area dependence of interface states factor") `MPRcz(CTGO ,0.0 ,"" ,"Gate voltage dependence of interface states factor") `MPRnb(CTBO ,0.0 ,"" ,"Bulk voltage dependence of interface states factor") `MPRnb(STCTO ,1.0 ,"" ,"Geometry-independent temperature dependence of CT") // DIBL Parameters `MPRnb(CFL ,0.0 ,"" ,"Length dependence of DIBL-parameter") `MPRnb(CFLEXP ,2.0 ,"" ,"Exponent for length dependence of CF") `MPRnb(CFW ,0.0 ,"" ,"Width dependence of CF") `MPRnb(CFACL ,0.0 ,"" ,"Length dependence of DIBL-parameter of charge model when SWQSAT=1") `MPRnb(CFACLEXP ,2.0 ,"" ,"Exponent for length dependence of CF") `MPRnb(CFACW ,0.0 ,"" ,"Width dependence of CF") `MPRcz(CFDO ,0.0 ,"V^-1" ,"Drain voltage dependence of CF") `MPRnb(CFBO ,0.0 ,"V^-1" ,"Back-bias dependence of CF") // Subthreshold slope parameters of short channel transistor `MPRnb(PSCEL ,0.0 ,"" ,"Length dependence of subthreshold slope coefficient for short channel transistor") `MPRnb(PSCELEXP ,2.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel transistor") `MPRnb(PSCEW ,0.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel transistor") `MPRcc(PSCEBO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel transistor") `MPRcz(PSCEDO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel transistor") // Mobility Parameters `MPRcz(UO ,5.0e-2 ,"m^2/V/s" ,"Zero-field mobility at TR") `MPRnb(FBET1 ,0.0 ,"" ,"Relative mobility decrease due to first lateral profile") `MPRnb(FBET1W ,0.0 ,"" ,"Width dependence of relative mobility decrease due to first lateral profile") `MPRco(LP1 ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Mobility-related characteristic length of first lateral profile") `MPRnb(LP1W ,0.0 ,"" ,"Width dependence of mobility-related characteristic length of first lateral profile") `MPRnb(FBET2 ,0.0 ,"" ,"Relative mobility decrease due to second lateral profile") `MPRco(LP2 ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Mobility-related characteristic length of second lateral profile") `MPRnb(BETW1 ,0.0 ,"" ,"First higher-order width scaling coefficient of BETN") `MPRnb(BETW2 ,0.0 ,"" ,"Second higher-order width scaling coefficient of BETN") `MPRco(WBET ,1.0e-9 ,"m" ,1.0e-10 ,inf ,"Characteristic width for width scaling of BETN") `MPRnb(STBETO ,1.0 ,"" ,"Geometry independent temperature dependence of BETN") `MPRnb(STBETL ,0.0 ,"" ,"Length dependence of temperature dependence of BETN") `MPRnb(STBETW ,0.0 ,"" ,"Width dependence of temperature dependence of BETN") `MPRnb(STBETLW ,0.0 ,"" ,"Area dependence of temperature dependence of BETN") `MPRnb(MUEO ,0.5 ,"m/V" ,"Geometry independent mobility reduction coefficient at TR") `MPRnb(MUEW ,0.0 ,"" ,"Width dependence of mobility reduction coefficient at TR") `MPRnb(STMUEO ,0.0 ,"" ,"Temperature dependence of MUE") `MPRnb(THEMUO ,1.5 ,"" ,"Mobility reduction exponent at TR") `MPRnb(STTHEMUO ,1.5 ,"" ,"Temperature dependence of THEMU") `MPRnb(CSO ,0.0 ,"" ,"Geometry independent coulomb scattering parameter at TR") `MPRnb(CSL ,0.0 ,"" ,"Length dependence of CS") `MPRnb(CSLEXP ,1.0 ,"" ,"Exponent for length dependence of CS") `MPRnb(CSW ,0.0 ,"" ,"Width dependence of CS") `MPRnb(CSLW ,0.0 ,"" ,"Area dependence of CS") `MPRnb(STCSO ,0.0 ,"" ,"Temperature dependence of CS") `MPRcz(THECSO ,2.0 ,"" ,"Coulomb scattering exponent at TR") `MPRnb(STTHECSO ,0.0 ,"" ,"Temperature dependence of THECS") `MPRnb(XCORO ,0.0 ,"V^-1" ,"Geometry independent non-universality parameter") `MPRnb(XCORL ,0.0 ,"" ,"Length dependence of non-universality parameter") `MPRnb(XCORW ,0.0 ,"" ,"Width dependence of non-universality parameter") `MPRnb(XCORLW ,0.0 ,"" ,"Area dependence of non-universality parameter") `MPRnb(STXCORO ,0.0 ,"" ,"Temperature dependence of XCOR") `MPRnb(FETAO ,1.0 ,"" ,"Effective field parameter") // Series Resistance `MPRnb(RSW1 ,50.0 ,"Ohm" ,"Source/drain series resistance for 1 um wide channel at TR") `MPRnb(RSW2 ,0.0 ,"" ,"Higher-order width scaling of RS") `MPRnb(STRSO ,1.0 ,"" ,"Temperature dependence of RS") `MPRnb(RSBO ,0.0 ,"V^-1" ,"Back-bias dependence of series resistance") `MPRnb(RSGO ,0.0 ,"V^-1" ,"Gate-bias dependence of series resistance") // Velocity Saturation `MPRnb(THESATO ,0.0 ,"V^-1" ,"Geometry independent velocity saturation parameter at TR") `MPRnb(THESATL ,0.05 ,"V^-1" ,"Length dependence of THESAT") `MPRnb(THESATLEXP ,1.0 ,"" ,"Exponent for length dependence of THESAT") `MPRnb(THESATW ,0.0 ,"" ,"Width dependence of THESAT") `MPRnb(THESATLW ,0.0 ,"" ,"Area dependence of THESAT") `MPRnb(THESATACO ,0.0 ,"V^-1" ,"Geometry independent velocity saturation parameter at TR of charge model when SWQSAT=1") `MPRnb(THESATACL ,0.05 ,"V^-1" ,"Length dependence of THESATAC") `MPRnb(THESATACLEXP ,1.0 ,"" ,"Exponent for length dependence of THESATAC") `MPRnb(THESATACW ,0.0 ,"" ,"Width dependence of THESATAC") `MPRnb(THESATACLW ,0.0 ,"" ,"Area dependence of THESATAC") `MPRnb(STTHESATO ,1.0 ,"" ,"Geometry independent temperature dependence of THESAT") `MPRnb(STTHESATL ,0.0 ,"" ,"Length dependence of temperature dependence of THESAT") `MPRnb(STTHESATW ,0.0 ,"" ,"Width dependence of temperature dependence of THESAT") `MPRnb(STTHESATLW ,0.0 ,"" ,"Area dependence of temperature dependence of THESAT") `MPRnb(THESATBO ,0.0 ,"V^-1" ,"Back-bias dependence of velocity saturation") `MPRnb(THESATGO ,0.0 ,"V^-1" ,"Gate-bias dependence of velocity saturation") // Saturation Voltage `MPRnb(AXO ,18.0 ,"" ,"Geometry independent linear/saturation transition factor") `MPRcz(AXL ,0.4 ,"" ,"Length dependence of AX") `MPRnb(AXACO ,18.0 ,"" ,"Geometry independent linear/saturation transition factor of charge model when SWQSAT=1") `MPRcz(AXACL ,0.4 ,"" ,"Length dependence of AXAC") // Channel Length Modulation `MPRnb(ALPL ,5.0e-4 ,"" ,"Length dependence of ALP") `MPRnb(ALPLEXP ,1.0 ,"" ,"Exponent for length dependence of ALP") `MPRnb(ALPW ,0.0 ,"" ,"Width dependence of ALP") `MPRnb(ALPACL ,5.0e-4 ,"" ,"Length dependence of ALPAC") `MPRnb(ALPACLEXP ,1.0 ,"" ,"Exponent for length dependence of ALPAC") `MPRnb(ALPACW ,0.0 ,"" ,"Width dependence of ALPAC") `MPRnb(ALP1L1 ,0.0 ,"V" ,"Length dependence of CLM enhancement factor above threshold") `MPRnb(ALP1LEXP ,0.5 ,"" ,"Exponent for length dependence of ALP1") `MPRcz(ALP1L2 ,0.0 ,"" ,"Second_order length dependence of ALP1") `MPRnb(ALP1W ,0.0 ,"" ,"Width dependence of ALP1") `MPRnb(ALP2L1 ,0.0 ,"V^-1" ,"Length dependence of CLM enhancement factor below threshold") `MPRnb(ALP2LEXP ,0.5 ,"" ,"Exponent for length dependence of ALP2") `MPRcz(ALP2L2 ,0.0 ,"" ,"Second_order length dependence of ALP2") `MPRnb(ALP2W ,0.0 ,"" ,"Width dependence of ALP2") `MPRnb(VPO ,0.05 ,"V" ,"CLM logarithmic dependence parameter") // Weak-avalanche parameters `MPRnb(A1O ,1.0 ,"" ,"Geometry independent impact-ionization pre-factor") `MPRnb(A1L ,0.0 ,"" ,"Length dependence of A1") `MPRnb(A1W ,0.0 ,"" ,"Width dependence of A1") `MPRnb(A2O ,10.0 ,"V" ,"Impact-ionization exponent at TR") `MPRnb(STA2O ,0.0 ,"V" ,"Temperature dependence of A2") `MPRnb(A3O ,1.0 ,"" ,"Geometry independent saturation-voltage dependence of II") `MPRnb(A3L ,0.0 ,"" ,"Length dependence of A3") `MPRnb(A3W ,0.0 ,"" ,"Width dependence of A3") `MPRnb(A4O ,0.0 ,"V^-0.5" ,"Geometry independent back-bias dependence of II") `MPRnb(A4L ,0.0 ,"" ,"Length dependence of A4") `MPRnb(A4W ,0.0 ,"" ,"Width dependence of A4") // Gate current parameters `MPRnb(GCOO ,0.0 ,"" ,"Gate tunnelling energy adjustment") `MPRnb(IGINVLW ,0.0 ,"A" ,"Gate channel current pre-factor for 1 um^2 channel area") `MPRnb(IGOVW ,0.0 ,"A" ,"Gate overlap current pre-factor for 1 um wide channel") `MPRnb(IGOVDW ,0.0 ,"A" ,"Gate overlap current pre-factor for 1 um wide channel for drain side") `MPRnb(STIGO ,2.0 ,"" ,"Temperature dependence of IGINV and IGOV") `MPRnb(GC2O ,0.375 ,"" ,"Gate current slope factor") `MPRnb(GC3O ,0.063 ,"" ,"Gate current curvature factor") `MPRnb(GC2OVO ,0.375 ,"" ,"Gate overlap current slope factor, used only when SWIGATE=2") `MPRnb(GC3OVO ,0.063 ,"" ,"Gate overlap current curvature factor, used only when SWIGATE=2") `MPRnb(CHIBO ,3.1 ,"V" ,"Tunnelling barrier height") // Gate-induced drain leakage parameters `MPRnb(AGIDLW ,0.0 ,"A/V^3" ,"Width dependence of GIDL pre-factor") `MPRnb(AGIDLDW ,0.0 ,"A/V^3" ,"Width dependence of GIDL pre-factor for drain side") `MPRnb(BGIDLO ,41.0 ,"V" ,"GIDL probability factor at TR") `MPRnb(BGIDLDO ,41.0 ,"V" ,"GIDL probability factor at TR for drain side") `MPRnb(STBGIDLO ,0.0 ,"V/K" ,"Temperature dependence of BGIDL") `MPRnb(STBGIDLDO ,0.0 ,"V/K" ,"Temperature dependence of BGIDL for drain side") `MPRnb(CGIDLO ,0.0 ,"" ,"Back-bias dependence of GIDL") `MPRnb(CGIDLDO ,0.0 ,"" ,"Back-bias dependence of GIDL for drain side") // Charge Model Parameters `MPRnb(CGBOVL ,0.0 ,"F" ,"Oxide capacitance for gate-bulk overlap for 1 um long channel") `MPRnb(CFRW ,0.0 ,"F" ,"Outer fringe capacitance for 1 um wide channel") `MPRnb(CFRDW ,0.0 ,"F" ,"Outer fringe capacitance for 1 um wide channel for drain side") // Noise Model Parameters `MPRnb(FNTO ,1.0 ,"" ,"Thermal noise coefficient") `MPRcz(FNTEXCL ,0.0 ,"" ,"Length dependence coefficient of excess noise") `MPRnb(NFALW ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise for 1 um^2 channel area") `MPRnb(NFBLW ,3.0e7 ,"V^-1/m^2" ,"Second coefficient of flicker noise for 1 um^2 channel area") `MPRnb(NFCLW ,0.0 ,"V^-1" ,"Third coefficient of flicker noise for 1 um^2 channel area") `MPRnb(EFO ,1.0 ,"" ,"Flicker noise frequency exponent") `MPRnb(LINTNOI ,0.0 ,"m" ,"Length offset for flicker noise") `MPRnb(ALPNOI ,2.0 ,"" ,"Exponent for length offset for flicker noise") // Edge transistor parameters: PSP 103.4 `MPRcz(WEDGE ,1.0e-8 ,"m" ,"Electrical width of edge transistor per side") `MPRcz(WEDGEW ,0.0 ,"" ,"Width dependence of edge WEDGE") `MPRnb(VFBEDGEO ,-1.0 ,"V" ,"Geometry-independent flat-band voltage of edge transistors at TR") `MPRnb(STVFBEDGEO ,5.0e-4 ,"V/K" ,"Geometry-independent temperature dependence of VFBEDGE") `MPRnb(STVFBEDGEL ,0.0 ,"V/K" ,"Length dependence of temperature dependence of VFBEDGE") `MPRnb(STVFBEDGEW ,0.0 ,"V/K" ,"Width dependence of temperature dependence of VFBEDGE") `MPRnb(STVFBEDGELW ,0.0 ,"V/K" ,"Area dependence of temperature dependence of VFBEDGE") `MPRnb(DPHIBEDGEO ,0.0 ,"V" ,"Geometry independent of edge transistor PHIB offset") `MPRnb(DPHIBEDGEL ,0.0 ,"V" ,"Length dependence of edge transistor PHIB offset") `MPRnb(DPHIBEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of edge transistor PHIB offset") `MPRnb(DPHIBEDGEW ,0.0 ,"V" ,"Width dependence of edge transistor PHIB offset") `MPRnb(DPHIBEDGELW ,0.0 ,"V" ,"Area dependence of edge transistor PHIB offset") `MPRco(NSUBEDGEO ,5.0e23 ,"m^-3" ,1.0e20 ,inf ,"Geometry independent substrate doping of edge transistors") `MPRnb(NSUBEDGEL ,0.0 ,"" ,"Length dependence of edge transistor substrate doping") `MPRnb(NSUBEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of edge transistor substrate doping") `MPRnb(NSUBEDGEW ,0.0 ,"" ,"Width dependence of edge transistor substrate doping") `MPRnb(NSUBEDGELW ,0.0 ,"" ,"Area dependence of edge transistor substrate doping") `MPRnb(CTEDGEO ,0.0 ,"" ,"Geometry-independent interface states factor of edge transistors") `MPRnb(CTEDGEL ,0.0 ,"" ,"Length dependence of interface states factor of edge transistors") `MPRnb(CTEDGELEXP ,1.0 ,"" ,"Exponent for length dependence of interface states factor of edge transistors") `MPRnb(FBETEDGE ,0.0 ,"" ,"Length dependence of edge transistor mobility") `MPRco(LPEDGE ,1.0e-8 ,"m" ,1.0e-10 ,inf ,"Exponent for length dependence of edge transistor mobility") `MPRnb(BETEDGEW ,0.0 ,"" ,"Width scaling coefficient of edge transistor mobility") `MPRnb(STBETEDGEO ,1.0 ,"" ,"Geometry independent temperature dependence of BETNEDGE") `MPRnb(STBETEDGEL ,0.0 ,"" ,"Length dependence of temperature dependence of BETNEDGE") `MPRnb(STBETEDGEW ,0.0 ,"" ,"Width dependence of temperature dependence of BETNEDGE") `MPRnb(STBETEDGELW ,0.0 ,"" ,"Area dependence of temperature dependence of BETNEDGE") `MPRnb(PSCEEDGEL ,0.0 ,"" ,"Length dependence of subthreshold slope coefficient for short channel edge transistors") `MPRnb(PSCEEDGELEXP ,2.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel edge transistors") `MPRnb(PSCEEDGEW ,0.0 ,"" ,"Exponent for length dependence of subthreshold slope coefficient for short channel edge transistor") `MPRcc(PSCEBEDGEO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors") `MPRcz(PSCEDEDGEO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of subthreshold slope coefficient for short channel edge transistors") `MPRnb(CFEDGEL ,0.0 ,"" ,"Length dependence of DIBL-parameter of edge transistors") `MPRnb(CFEDGELEXP ,2.0 ,"" ,"Exponent for length dependence of DIBL-parameter of edge transistors") `MPRnb(CFEDGEW ,0.0 ,"" ,"Width dependence of DIBL-parameter of edge transistors") `MPRcz(CFDEDGEO ,0.0 ,"V^-1" ,"Drain voltage dependence parameter of DIBL-parameter of edge transistors") `MPRcc(CFBEDGEO ,0.0 ,"V^-1" ,0.0 ,1.0 ,"Bulk voltage dependence parameter of DIBL-parameter of edge transistors") `MPRnb(FNTEDGEO ,1.0 ,"" ,"Thermal noise coefficient") `MPRnb(NFAEDGELW ,8.0e22 ,"V^-1/m^4" ,"First coefficient of flicker noise for 1 um^2 channel area") `MPRnb(NFBEDGELW ,3.0e7 ,"V^-1/m^2" ,"Second coefficient of flicker noise for 1 um^2 channel area") `MPRnb(NFCEDGELW ,0.0 ,"V^-1" ,"Third coefficient of flicker noise for 1 um^2 channel area") `MPRnb(EFEDGEO ,1.0 ,"" ,"Flicker noise frequency exponent") // Well proximity effect Parameters `MPRnb(KVTHOWEO ,0.0 ,"" ,"Geometrical independent threshold shift parameter") `MPRnb(KVTHOWEL ,0.0 ,"" ,"Length dependent threshold shift parameter") `MPRnb(KVTHOWEW ,0.0 ,"" ,"Width dependent threshold shift parameter") `MPRnb(KVTHOWELW ,0.0 ,"" ,"Area dependent threshold shift parameter") `MPRnb(KUOWEO ,0.0 ,"" ,"Geometrical independent mobility degradation factor") `MPRnb(KUOWEL ,0.0 ,"" ,"Length dependent mobility degradation factor") `MPRnb(KUOWEW ,0.0 ,"" ,"Width dependent mobility degradation factor") `MPRnb(KUOWELW ,0.0 ,"" ,"Area dependent mobility degradation factor") // -------------------------------------------------------------------------------------------------------------- // PSP global model parameters (binning) // -------------------------------------------------------------------------------------------------------------- // Process parameters `MPRnb(POVFB ,-1.0 ,"V" ,"Coefficient for the geometry independent part of VFB") `MPRnb(PLVFB ,0.0 ,"V" ,"Coefficient for the length dependence of VFB") `MPRnb(PWVFB ,0.0 ,"V" ,"Coefficient for the width dependence of VFB") `MPRnb(PLWVFB ,0.0 ,"V" ,"Coefficient for the length times width dependence of VFB") `MPRnb(POSTVFB ,5.0e-4 ,"V/K" ,"Coefficient for the geometry independent part of STVFB") `MPRnb(PLSTVFB ,0.0 ,"V/K" ,"Coefficient for the length dependence of STVFB") `MPRnb(PWSTVFB ,0.0 ,"V/K" ,"Coefficient for the width dependence of STVFB") `MPRnb(PLWSTVFB ,0.0 ,"V/K" ,"Coefficient for the length times width dependence of STVFB") `MPRnb(POST2VFB ,0.0 ,"K^-1" ,"Coefficient for the geometry independent part of ST2VFB") `MPRnb(POTOX ,2.0e-9 ,"m" ,"Coefficient for the geometry independent part of TOX") `MPRnb(POEPSROX ,3.9 ,"" ,"Coefficient for the geometry independent part of EPSOX") `MPRnb(PONEFF ,5.0e23 ,"m^-3" ,"Coefficient for the geometry independent part of NEFF") `MPRnb(PLNEFF ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NEFF") `MPRnb(PWNEFF ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NEFF") `MPRnb(PLWNEFF ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NEFF") `MPRnb(POFACNEFFAC ,1.0 ,"" ,"Coefficient for the geometry independent part of FACNEFFAC") `MPRnb(PLFACNEFFAC ,0.0 ,"" ,"Coefficient for the length dependence of FACNEFFAC") `MPRnb(PWFACNEFFAC ,0.0 ,"" ,"Coefficient for the width dependence of FACNEFFAC") `MPRnb(PLWFACNEFFAC ,0.0 ,"" ,"Coefficient for the length times width dependence of FACNEFFAC") `MPRnb(POGFACNUD ,1.0 ,"" ,"Coefficient for the geometry independent part of GFACNUD") `MPRnb(PLGFACNUD ,0.0 ,"" ,"Coefficient for the length dependence of GFACNUD") `MPRnb(PWGFACNUD ,0.0 ,"" ,"Coefficient for the width dependence of GFACNUD") `MPRnb(PLWGFACNUD ,0.0 ,"" ,"Coefficient for the length times width dependence of GFACNUD") `MPRnb(POVSBNUD ,0.0 ,"V" ,"Coefficient for the geometry independent part of VSBNUD") `MPRnb(PODVSBNUD ,1.0 ,"V" ,"Coefficient for the geometry independent part of DVSBNUD") `MPRnb(POVNSUB ,0.0 ,"V" ,"Coefficient for the geometry independent part of VNSUB") `MPRnb(PONSLP ,0.05 ,"V" ,"Coefficient for the geometry independent part of NSLP") `MPRnb(PODNSUB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of DNSUB") `MPRnb(PODPHIB ,0.0 ,"V" ,"Coefficient for the geometry independent part of DPHIB") `MPRnb(PLDPHIB ,0.0 ,"V" ,"Coefficient for the length dependence of DPHIB") `MPRnb(PWDPHIB ,0.0 ,"V" ,"Coefficient for the width dependence of DPHIB") `MPRnb(PLWDPHIB ,0.0 ,"V" ,"Coefficient for the length times width dependence of DPHIB") `MPRnb(PODELVTAC ,0.0 ,"V" ,"Coefficient for the geometry independent part of DELVTAC") `MPRnb(PLDELVTAC ,0.0 ,"V" ,"Coefficient for the length dependence of DELVTAC") `MPRnb(PWDELVTAC ,0.0 ,"V" ,"Coefficient for the width dependence of DELVTAC") `MPRnb(PLWDELVTAC ,0.0 ,"V" ,"Coefficient for the length times width dependence of DELVTAC") `MPRnb(PONP ,1.0e26 ,"m^-3" ,"Coefficient for the geometry independent part of NP") `MPRnb(PLNP ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NP") `MPRnb(PWNP ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NP") `MPRnb(PLWNP ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NP") `MPRnb(POTOXOV ,2.0e-09 ,"m" ,"Coefficient for the geometry independent part of TOXOV") `MPRnb(POTOXOVD ,2.0e-09 ,"m" ,"Coefficient for the geometry independent part of TOXOV for drain side") `MPRnb(PONOV ,5.0e25 ,"m^-3" ,"Coefficient for the geometry independent part of NOV") `MPRnb(PLNOV ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NOV") `MPRnb(PWNOV ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NOV") `MPRnb(PLWNOV ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NOV") `MPRnb(PONOVD ,5.0e25 ,"m^-3" ,"Coefficient for the geometry independent part of NOV for drain side") `MPRnb(PLNOVD ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NOV for drain side") `MPRnb(PWNOVD ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NOV for drain side") `MPRnb(PLWNOVD ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NOV for drain side") // Interface states parameters `MPRnb(POCT ,0.0 ,"" ,"Coefficient for the geometry independent part of CT") `MPRnb(PLCT ,0.0 ,"" ,"Coefficient for the length dependence of CT") `MPRnb(PWCT ,0.0 ,"" ,"Coefficient for the width dependence of CT") `MPRnb(PLWCT ,0.0 ,"" ,"Coefficient for the length times width dependence of CT") `MPRnb(POCTG ,0.0 ,"" ,"Coefficient for the geometry independent part of CTG") `MPRnb(POCTB ,0.0 ,"" ,"Coefficient for the geometry independent part of CTB") `MPRnb(POSTCT ,1.0 ,"" ,"Coefficient for the geometry independent part of STCT") // DIBL parameters `MPRnb(POCF ,0.0 ,"" ,"Coefficient for the geometry independent part of CF") `MPRnb(PLCF ,0.0 ,"" ,"Coefficient for the length dependence of CF") `MPRnb(PWCF ,0.0 ,"" ,"Coefficient for the width dependence of CF") `MPRnb(PLWCF ,0.0 ,"" ,"Coefficient for the length times width dependence of CF") `MPRnb(POCFAC ,0.0 ,"" ,"Coefficient for the geometry independent part of CFAC") `MPRnb(PLCFAC ,0.0 ,"" ,"Coefficient for the length dependence of CFAC") `MPRnb(PWCFAC ,0.0 ,"" ,"Coefficient for the width dependence of CFAC") `MPRnb(PLWCFAC ,0.0 ,"" ,"Coefficient for the length times width dependence of CFAC") `MPRnb(POCFD ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFD") `MPRnb(POCFB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFB") // Subthreshold slope parameters of short channel transistor `MPRnb(POPSCE ,0.0 ,"" ,"Coefficient for the geometry independent part of PSCE") `MPRnb(PLPSCE ,0.0 ,"" ,"Coefficient for the length dependence of PSCE") `MPRnb(PWPSCE ,0.0 ,"" ,"Coefficient for the width dependence of PSCE") `MPRnb(PLWPSCE ,0.0 ,"" ,"Coefficient for the length times width dependence of PSCE") `MPRnb(POPSCEB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEB") `MPRnb(POPSCED ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCED") // Mobility parameters `MPRnb(POBETN ,7.0e-2 ,"m^2/V/s" ,"Coefficient for the geometry independent part of BETN") `MPRnb(PLBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the length dependence of BETN") `MPRnb(PWBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the width dependence of BETN") `MPRnb(PLWBETN ,0.0 ,"m^2/V/s" ,"Coefficient for the length times width dependence of BETN") `MPRnb(POSTBET ,1.0 ,"" ,"Coefficient for the geometry independent part of STBET") `MPRnb(PLSTBET ,0.0 ,"" ,"Coefficient for the length dependence of STBET") `MPRnb(PWSTBET ,0.0 ,"" ,"Coefficient for the width dependence of STBET") `MPRnb(PLWSTBET ,0.0 ,"" ,"Coefficient for the length times width dependence of STBET") `MPRnb(POMUE ,0.5 ,"m/V" ,"Coefficient for the geometry independent part of MUE") `MPRnb(PLMUE ,0.0 ,"m/V" ,"Coefficient for the length dependence of MUE") `MPRnb(PWMUE ,0.0 ,"m/V" ,"Coefficient for the width dependence of MUE") `MPRnb(PLWMUE ,0.0 ,"m/V" ,"Coefficient for the length times width dependence of MUE") `MPRnb(POSTMUE ,0.0 ,"" ,"Coefficient for the geometry independent part of STMUE") `MPRnb(POTHEMU ,1.5 ,"" ,"Coefficient for the geometry independent part of THEMU") `MPRnb(POSTTHEMU ,1.5 ,"" ,"Coefficient for the geometry independent part of STTHEMU") `MPRnb(POCS ,0.0 ,"" ,"Coefficient for the geometry independent part of CS") `MPRnb(PLCS ,0.0 ,"" ,"Coefficient for the length dependence of CS") `MPRnb(PWCS ,0.0 ,"" ,"Coefficient for the width dependence of CS") `MPRnb(PLWCS ,0.0 ,"" ,"Coefficient for the length times width dependence of CS") `MPRnb(POSTCS ,0.0 ,"" ,"Coefficient for the geometry independent part of STCS") `MPRnb(POTHECS ,2.0 ,"" ,"Coefficient for the geometry independent part of THECS") `MPRnb(POSTTHECS ,0.0 ,"" ,"Coefficient for the geometry independent part of STHTECS") `MPRnb(POXCOR ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of XCOR") `MPRnb(PLXCOR ,0.0 ,"V^-1" ,"Coefficient for the length dependence of XCOR") `MPRnb(PWXCOR ,0.0 ,"V^-1" ,"Coefficient for the width dependence of XCOR") `MPRnb(PLWXCOR ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of XCOR") `MPRnb(POSTXCOR ,0.0 ,"" ,"Coefficient for the geometry independent part of STXCOR") `MPRnb(POFETA ,1.0 ,"" ,"Coefficient for the geometry independent part of FETA") // Series resistance parameters `MPRnb(PORS ,30.0 ,"Ohm" ,"Coefficient for the geometry independent part of RS") `MPRnb(PLRS ,0.0 ,"Ohm" ,"Coefficient for the length dependence of RS") `MPRnb(PWRS ,0.0 ,"Ohm" ,"Coefficient for the width dependence of RS") `MPRnb(PLWRS ,0.0 ,"Ohm" ,"Coefficient for the length times width dependence of RS") `MPRnb(POSTRS ,1.0 ,"" ,"Coefficient for the geometry independent part of STRS") `MPRnb(PORSB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of RSB") `MPRnb(PORSG ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of RSG") // Velocity saturation parameters `MPRnb(POTHESAT ,1.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESAT") `MPRnb(PLTHESAT ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESAT") `MPRnb(PWTHESAT ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESAT") `MPRnb(PLWTHESAT ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESAT") `MPRnb(POTHESATAC ,1.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATAC") `MPRnb(PLTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATAC") `MPRnb(PWTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATAC") `MPRnb(PLWTHESATAC ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATAC") `MPRnb(POSTTHESAT ,1.0 ,"" ,"Coefficient for the geometry independent part of STTHESAT") `MPRnb(PLSTTHESAT ,0.0 ,"" ,"Coefficient for the length dependence of STTHESAT") `MPRnb(PWSTTHESAT ,0.0 ,"" ,"Coefficient for the width dependence of STTHESAT") `MPRnb(PLWSTTHESAT ,0.0 ,"" ,"Coefficient for the length times width dependence of STTHESAT") `MPRnb(POTHESATB ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATB") `MPRnb(PLTHESATB ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATB") `MPRnb(PWTHESATB ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATB") `MPRnb(PLWTHESATB ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATB") `MPRnb(POTHESATG ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of THESATG") `MPRnb(PLTHESATG ,0.0 ,"V^-1" ,"Coefficient for the length dependence of THESATG") `MPRnb(PWTHESATG ,0.0 ,"V^-1" ,"Coefficient for the width dependence of THESATG") `MPRnb(PLWTHESATG ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of THESATG") // Saturation voltage parameters `MPRnb(POAX ,3.0 ,"" ,"Coefficient for the geometry independent part of AX") `MPRnb(PLAX ,0.0 ,"" ,"Coefficient for the length dependence of AX") `MPRnb(PWAX ,0.0 ,"" ,"Coefficient for the width dependence of AX") `MPRnb(PLWAX ,0.0 ,"" ,"Coefficient for the length times width dependence of AX") `MPRnb(POAXAC ,3.0 ,"" ,"Coefficient for the geometry independent part of AXAC") `MPRnb(PLAXAC ,0.0 ,"" ,"Coefficient for the length dependence of AXAC") `MPRnb(PWAXAC ,0.0 ,"" ,"Coefficient for the width dependence of AXAC") `MPRnb(PLWAXAC ,0.0 ,"" ,"Coefficient for the length times width dependence of AXAC") // Channel length modulation (CLM) parameters `MPRnb(POALP ,1.0e-2 ,"" ,"Coefficient for the geometry independent part of ALP") `MPRnb(PLALP ,0.0 ,"" ,"Coefficient for the length dependence of ALP") `MPRnb(PWALP ,0.0 ,"" ,"Coefficient for the width dependence of ALP") `MPRnb(PLWALP ,0.0 ,"" ,"Coefficient for the length times width dependence of ALP") `MPRnb(POALPAC ,1.0e-2 ,"" ,"Coefficient for the geometry independent part of ALPAC") `MPRnb(PLALPAC ,0.0 ,"" ,"Coefficient for the length dependence of ALPAC") `MPRnb(PWALPAC ,0.0 ,"" ,"Coefficient for the width dependence of ALPAC") `MPRnb(PLWALPAC ,0.0 ,"" ,"Coefficient for the length times width dependence of ALPAC") `MPRnb(POALP1 ,0.0 ,"V" ,"Coefficient for the geometry independent part of ALP1") `MPRnb(PLALP1 ,0.0 ,"V" ,"Coefficient for the length dependence of ALP1") `MPRnb(PWALP1 ,0.0 ,"V" ,"Coefficient for the width dependence of ALP1") `MPRnb(PLWALP1 ,0.0 ,"V" ,"Coefficient for the length times width dependence of ALP1") `MPRnb(POALP2 ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of ALP2") `MPRnb(PLALP2 ,0.0 ,"V^-1" ,"Coefficient for the length dependence of ALP2") `MPRnb(PWALP2 ,0.0 ,"V^-1" ,"Coefficient for the width dependence of ALP2") `MPRnb(PLWALP2 ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of ALP2") `MPRnb(POVP ,0.05 ,"V" ,"Coefficient for the geometry independent part of VP") // Impact ionization parameters `MPRnb(POA1 ,1.0 ,"" ,"Coefficient for the geometry independent part of A1") `MPRnb(PLA1 ,0.0 ,"" ,"Coefficient for the length dependence of A1") `MPRnb(PWA1 ,0.0 ,"" ,"Coefficient for the width dependence of A1") `MPRnb(PLWA1 ,0.0 ,"" ,"Coefficient for the length times width dependence of A1") `MPRnb(POA2 ,10.0 ,"V" ,"Coefficient for the geometry independent part of A2") `MPRnb(POSTA2 ,0.0 ,"V" ,"Coefficient for the geometry independent part of STA2") `MPRnb(POA3 ,1.0 ,"" ,"Coefficient for the geometry independent part of A3") `MPRnb(PLA3 ,0.0 ,"" ,"Coefficient for the length dependence of A3") `MPRnb(PWA3 ,0.0 ,"" ,"Coefficient for the width dependence of A3") `MPRnb(PLWA3 ,0.0 ,"" ,"Coefficient for the length times width dependence of A3") `MPRnb(POA4 ,0.0 ,"V^-0.5" ,"Coefficient for the geometry independent part of A4") `MPRnb(PLA4 ,0.0 ,"V^-0.5" ,"Coefficient for the length dependence of A4") `MPRnb(PWA4 ,0.0 ,"V^-0.5" ,"Coefficient for the width dependence of A4") `MPRnb(PLWA4 ,0.0 ,"V^-0.5" ,"Coefficient for the length times width dependence of A4") `MPRnb(POGCO ,0.0 ,"" ,"Coefficient for the geometry independent part of GCO") // Gate current parameters `MPRnb(POIGINV ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGINV") `MPRnb(PLIGINV ,0.0 ,"A" ,"Coefficient for the length dependence of IGINV") `MPRnb(PWIGINV ,0.0 ,"A" ,"Coefficient for the width dependence of IGINV") `MPRnb(PLWIGINV ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGINV") `MPRnb(POIGOV ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGOV") `MPRnb(PLIGOV ,0.0 ,"A" ,"Coefficient for the length dependence of IGOV") `MPRnb(PWIGOV ,0.0 ,"A" ,"Coefficient for the width dependence of IGOV") `MPRnb(PLWIGOV ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGOV") `MPRnb(POIGOVD ,0.0 ,"A" ,"Coefficient for the geometry independent part of IGOV for drain side") `MPRnb(PLIGOVD ,0.0 ,"A" ,"Coefficient for the length dependence of IGOV for drain side") `MPRnb(PWIGOVD ,0.0 ,"A" ,"Coefficient for the width dependence of IGOV for drain side") `MPRnb(PLWIGOVD ,0.0 ,"A" ,"Coefficient for the length times width dependence of IGOV for drain side") `MPRnb(POSTIG ,2.0 ,"" ,"Coefficient for the geometry independent part of STIG") `MPRnb(POGC2 ,0.375 ,"" ,"Coefficient for the geometry independent part of GC2") `MPRnb(POGC3 ,0.063 ,"" ,"Coefficient for the geometry independent part of GC3") `MPRnb(POGC2OV ,0.375 ,"" ,"Coefficient for the geometry independent part of GC2OV, used only when SWIGATE=2") `MPRnb(POGC3OV ,0.063 ,"" ,"Coefficient for the geometry independent part of GC3OV, used only when SWIGATE=2") `MPRnb(POCHIB ,3.1 ,"V" ,"Coefficient for the geometry independent part of CHIB") // Gate-induced drain leakage (GIDL) parameters `MPRnb(POAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the geometry independent part of AGIDL") `MPRnb(PLAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the length dependence of AGIDL") `MPRnb(PWAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the width dependence of AGIDL") `MPRnb(PLWAGIDL ,0.0 ,"A/V^3" ,"Coefficient for the length times width dependence of AGIDL") `MPRnb(POAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the geometry independent part of AGIDL for drain side") `MPRnb(PLAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the length dependence of AGIDL for drain side") `MPRnb(PWAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the width dependence of AGIDL for drain side") `MPRnb(PLWAGIDLD ,0.0 ,"A/V^3" ,"Coefficient for the length times width dependence of AGIDL for drain side") `MPRnb(POBGIDL ,41.0 ,"V" ,"Coefficient for the geometry independent part of BGIDL") `MPRnb(POBGIDLD ,41.0 ,"V" ,"Coefficient for the geometry independent part of BGIDL for drain side") `MPRnb(POSTBGIDL ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STBGIDL") `MPRnb(POSTBGIDLD ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STBGIDL for drain side") `MPRnb(POCGIDL ,0.0 ,"" ,"Coefficient for the geometry independent part of CGIDL") `MPRnb(POCGIDLD ,0.0 ,"" ,"Coefficient for the geometry independent part of CGIDL for drain side") // Charge model parameters `MPRnb(POCOX ,1.0e-14 ,"F" ,"Coefficient for the geometry independent part of COX") `MPRnb(PLCOX ,0.0 ,"F" ,"Coefficient for the length dependence of COX") `MPRnb(PWCOX ,0.0 ,"F" ,"Coefficient for the width dependence of COX") `MPRnb(PLWCOX ,0.0 ,"F" ,"Coefficient for the length times width dependence of COX") `MPRnb(POCGOV ,1.0e-15 ,"F" ,"Coefficient for the geometry independent part of CGOV") `MPRnb(PLCGOV ,0.0 ,"F" ,"Coefficient for the length dependence of CGOV") `MPRnb(PWCGOV ,0.0 ,"F" ,"Coefficient for the width dependence of CGOV") `MPRnb(PLWCGOV ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGOV") `MPRnb(POCGOVD ,1.0e-15 ,"F" ,"Coefficient for the geometry independent part of CGOV for drain side") `MPRnb(PLCGOVD ,0.0 ,"F" ,"Coefficient for the length dependence of CGOV for drain side") `MPRnb(PWCGOVD ,0.0 ,"F" ,"Coefficient for the width dependence of CGOV for drain side") `MPRnb(PLWCGOVD ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGOV for drain side") `MPRnb(POCGBOV ,0.0 ,"F" ,"Coefficient for the geometry independent part of CGBOV") `MPRnb(PLCGBOV ,0.0 ,"F" ,"Coefficient for the length dependence of CGBOV") `MPRnb(PWCGBOV ,0.0 ,"F" ,"Coefficient for the width dependence of CGBOV") `MPRnb(PLWCGBOV ,0.0 ,"F" ,"Coefficient for the length times width dependence of CGBOV") `MPRnb(POCFR ,0.0 ,"F" ,"Coefficient for the geometry independent part of CFR") `MPRnb(PLCFR ,0.0 ,"F" ,"Coefficient for the length dependence of CFR") `MPRnb(PWCFR ,0.0 ,"F" ,"Coefficient for the width dependence of CFR") `MPRnb(PLWCFR ,0.0 ,"F" ,"Coefficient for the length times width dependence of CFR") `MPRnb(POCFRD ,0.0 ,"F" ,"Coefficient for the geometry independent part of CFR for drain side") `MPRnb(PLCFRD ,0.0 ,"F" ,"Coefficient for the length dependence of CFR for drain side") `MPRnb(PWCFRD ,0.0 ,"F" ,"Coefficient for the width dependence of CFR for drain side") `MPRnb(PLWCFRD ,0.0 ,"F" ,"Coefficient for the length times width dependence of CFR for drain side") // Noise model parameters `MPRnb(POFNT ,1.0 ,"" ,"Coefficient for the geometry independent part of FNT") `MPRnb(POFNTEXC ,0.0 ,"" ,"Coefficient for the geometry independent part of FNTEXC") `MPRnb(PLFNTEXC ,0.0 ,"" ,"Coefficient for the length dependence of FNTEXC") `MPRnb(PWFNTEXC ,0.0 ,"" ,"Coefficient for the width dependence of FNTEXC") `MPRnb(PLWFNTEXC ,0.0 ,"" ,"Coefficient for the length times width dependence of FNTEXC") `MPRnb(PONFA ,8.0e22 ,"V^-1/m^4" ,"Coefficient for the geometry independent part of NFA") `MPRnb(PLNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the length dependence of NFA") `MPRnb(PWNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the width dependence of NFA") `MPRnb(PLWNFA ,0.0 ,"V^-1/m^4" ,"Coefficient for the length times width dependence of NFA") `MPRnb(PONFB ,3.0e7 ,"V^-1/m^2" ,"Coefficient for the geometry independent part of NFB") `MPRnb(PLNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the length dependence of NFB") `MPRnb(PWNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the width dependence of NFB") `MPRnb(PLWNFB ,0.0 ,"V^-1/m^2" ,"Coefficient for the length times width dependence of NFB") `MPRnb(PONFC ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of NFC") `MPRnb(PLNFC ,0.0 ,"V^-1" ,"Coefficient for the length dependence of NFC") `MPRnb(PWNFC ,0.0 ,"V^-1" ,"Coefficient for the width dependence of NFC") `MPRnb(PLWNFC ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of NFC") `MPRnb(POEF ,1.0 ,"" ,"Coefficient for the flicker noise frequency exponent") // Edge transistor parameters: PSP 103.4 `MPRnb(POVFBEDGE ,-1.0 ,"V" ,"Coefficient for the geometry independent part of VFBEDGE") `MPRnb(POSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the geometry independent part of STVFBEDGE") `MPRnb(PLSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the length dependence of STVFBEDGE") `MPRnb(PWSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the width dependence of STVFBEDGE") `MPRnb(PLWSTVFBEDGE ,0.0 ,"V/K" ,"Coefficient for the length times width dependence of STVFBEDGE") `MPRnb(PODPHIBEDGE ,0.0 ,"V" ,"Coefficient for the geometry independent part of DPHIBEDGE") `MPRnb(PLDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the length dependence of DPHIBEDGE") `MPRnb(PWDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the width dependence of DPHIBEDGE") `MPRnb(PLWDPHIBEDGE ,0.0 ,"V" ,"Coefficient for the length times width dependence of DPHIBEDGE") `MPRnb(PONEFFEDGE ,5.0e23 ,"m^-3" ,"Coefficient for the geometry independent part of NEFFEDGE") `MPRnb(PLNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the length dependence of NEFFEDGE") `MPRnb(PWNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the width dependence of NEFFEDGE") `MPRnb(PLWNEFFEDGE ,0.0 ,"m^-3" ,"Coefficient for the length times width dependence of NEFFEDGE") `MPRnb(POCTEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of CTEDGE") `MPRnb(PLCTEDGE ,0.0 ,"" ,"Coefficient for the length dependence of CTEDGE") `MPRnb(PWCTEDGE ,0.0 ,"" ,"Coefficient for the width dependence of CTEDGE") `MPRnb(PLWCTEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of CTEDGE") `MPRnb(POBETNEDGE ,5.0e-4 ,"m^2/V/s" ,"Coefficient for the geometry independent part of BETNEDGE") `MPRnb(PLBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the length dependence of BETNEDGE") `MPRnb(PWBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the width dependence of BETNEDGE") `MPRnb(PLWBETNEDGE ,0.0 ,"m^2/V/s" ,"Coefficient for the length times width dependence of BETNEDGE") `MPRnb(POSTBETEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of STBETEDGE") `MPRnb(PLSTBETEDGE ,0.0 ,"" ,"Coefficient for the length dependence of STBETEDGE") `MPRnb(PWSTBETEDGE ,0.0 ,"" ,"Coefficient for the width dependence of STBETEDGE") `MPRnb(PLWSTBETEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of STBETEDGE") `MPRnb(POPSCEEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of PSCEEDGE") `MPRnb(PLPSCEEDGE ,0.0 ,"" ,"Coefficient for the length dependence of PSCEEDGE") `MPRnb(PWPSCEEDGE ,0.0 ,"" ,"Coefficient for the width dependence of PSCEEDGE") `MPRnb(PLWPSCEEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of PSCEEDGE") `MPRnb(POPSCEBEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEBEDGE") `MPRnb(POPSCEDEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of PSCEDEDGE") `MPRnb(POCFEDGE ,0.0 ,"" ,"Coefficient for the geometry independent part of CFEDGE") `MPRnb(PLCFEDGE ,0.0 ,"" ,"Coefficient for the length dependence of CFEDGE") `MPRnb(PWCFEDGE ,0.0 ,"" ,"Coefficient for the width dependence of CFEDGE") `MPRnb(PLWCFEDGE ,0.0 ,"" ,"Coefficient for the length times width dependence of CFEDGE") `MPRnb(POCFDEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFDEDGE") `MPRnb(POCFBEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of CFBEDGE") `MPRnb(POFNTEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of FNTEDGE") `MPRnb(PONFAEDGE ,8.0e22 ,"V^-1/m^4" ,"Coefficient for the geometry independent part of NFAEDGE") `MPRnb(PLNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the length dependence of NFAEDGE") `MPRnb(PWNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the width dependence of NFAEDGE") `MPRnb(PLWNFAEDGE ,0.0 ,"V^-1/m^4" ,"Coefficient for the length times width dependence of NFAEDGE") `MPRnb(PONFBEDGE ,3.0e7 ,"V^-1/m^2" ,"Coefficient for the geometry independent part of NFBEDGE") `MPRnb(PLNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the length dependence of NFBEDGE") `MPRnb(PWNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the width dependence of NFBEDGE") `MPRnb(PLWNFBEDGE ,0.0 ,"V^-1/m^2" ,"Coefficient for the length times width dependence of NFBEDGE") `MPRnb(PONFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the geometry independent part of NFCEDGE") `MPRnb(PLNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the length dependence of NFCEDGE") `MPRnb(PWNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the width dependence of NFCEDGE") `MPRnb(PLWNFCEDGE ,0.0 ,"V^-1" ,"Coefficient for the length times width dependence of NFCEDGE") `MPRnb(POEFEDGE ,1.0 ,"" ,"Coefficient for the geometry independent part of EFEDGE") // Well proximity effect parameters `MPRnb(POKVTHOWE ,0.0 ,"" ,"Coefficient for the geometry independent part of KVTHOWE") `MPRnb(PLKVTHOWE ,0.0 ,"" ,"Coefficient for the length dependence part of KVTHOWE") `MPRnb(PWKVTHOWE ,0.0 ,"" ,"Coefficient for the width dependence part of KVTHOWE") `MPRnb(PLWKVTHOWE ,0.0 ,"" ,"Coefficient for the length times width dependence part of KVTHOWE") `MPRnb(POKUOWE ,0.0 ,"" ,"Coefficient for the geometry independent part of KUOWE") `MPRnb(PLKUOWE ,0.0 ,"" ,"Coefficient for the length dependence part of KUOWE") `MPRnb(PWKUOWE ,0.0 ,"" ,"Coefficient for the width dependence part of KUOWE") `MPRnb(PLWKUOWE ,0.0 ,"" ,"Coefficient for the length times width dependence part of KUOWE") // `Dummy' parameters for binning-set labeling `MPRnb(LMIN ,0 ,"m" ,"Dummy parameter to label binning set") `MPRnb(LMAX ,1.0 ,"m" ,"Dummy parameter to label binning set") `MPRnb(WMIN ,0.0 ,"m" ,"Dummy parameter to label binning set") `MPRnb(WMAX ,1.0 ,"m" ,"Dummy parameter to label binning set") // -------------------------------------------------------------------------------------------------------------- // Parameters that occur in both global and binning model // -------------------------------------------------------------------------------------------------------------- // NQS parameters `ifdef NQSmodel `MPRnb(MUNQSO ,1.0 ,"" ,"Relative mobility for NQS modelling") `endif // NQSmodel // Parasitic resistance parameters `MPRnb(RGO ,0.0 ,"Ohm" ,"Gate resistance") `MPRcz(RINT ,0.0 ,"Ohm m^2" ,"Contact resistance between silicide and ploy") `MPRcz(RVPOLY ,0.0 ,"Ohm m^2" ,"Vertical poly resistance") `MPRcz(RSHG ,0.0 ,"Ohm/sq" ,"Gate electrode diffusion sheet resistance") `MPRnb(DLSIL ,0.0 ,"m" ,"Silicide extension over the physical gate length") `MPRnb(RSH ,0.0 ,"Ohm/sq" ,"Sheet resistance of source diffusion") `MPRnb(RSHD ,0.0 ,"Ohm/sq" ,"Sheet resistance of drain diffusion") `MPRnb(RBULKO ,0.0 ,"Ohm" ,"Bulk resistance between node BP and BI") `MPRnb(RWELLO ,0.0 ,"Ohm" ,"Well resistance between node BI and B") `MPRnb(RJUNSO ,0.0 ,"Ohm" ,"Source-side bulk resistance between node BI and BS") `MPRnb(RJUNDO ,0.0 ,"Ohm" ,"Drain-side bulk resistance between node BI and BD") // Self heating effect parameters `ifdef SelfHeating `MPRnb(RTHO ,0.0 ,"K/W" ,"Geometry independent part of thermal resistance") `MPRnb(RTHW1 ,0.0 ,"K/W" ,"Width dependence of thermal resistance") `MPRnb(RTHW2 ,0.0 ,"" ,"Offset in width dependence of thermal resistance") `MPRnb(RTHLW ,0.0 ,"" ,"Length-correction to width dependence of thermal resistance") `MPRnb(CTHO ,0.0 ,"J/K" ,"Geometry independent part of thermal capacitance") `MPRnb(CTHW1 ,0.0 ,"J/K" ,"Width dependence of thermal capacitance") `MPRnb(CTHW2 ,0.0 ,"" ,"Offset in width dependence of thermal capacitance") `MPRnb(CTHLW ,0.0 ,"" ,"Length-correction to width dependence of thermal capacitance") `MPRnb(STRTHO ,0.0 ,"" ,"Temperature sensitivity of RTH") `endif // SelfHeating // Stress Model Parameters `MPRcc(SAREF ,1.0e-6 ,"m" ,1.0e-9 ,inf ,"Reference distance between OD-edge and poly from one side") `MPRcc(SBREF ,1.0e-6 ,"m" ,1.0e-9 ,inf ,"Reference distance between OD-edge and poly from other side") `MPRnb(WLOD ,0.0 ,"m" ,"Width parameter") `MPRnb(KUO ,0.0 ,"m" ,"Mobility degradation/enhancement coefficient") `MPRcc(KVSAT ,0.0 ,"m" ,-1.0 ,1.0 ,"Saturation velocity degradation/enhancement coefficient") `MPRcc(KVSATAC ,0.0 ,"m" ,-1.0 ,1.0 ,"Saturation velocity degradation/enhancement coefficient of charge model when SWQSAT=1") `MPRnb(TKUO ,0.0 ,"" ,"Temperature dependence of KUO") `MPRnb(LKUO ,0.0 ,"m^LLODKUO" ,"Length dependence of KUO") `MPRnb(WKUO ,0.0 ,"m^WLODKUO" ,"Width dependence of KUO") `MPRnb(PKUO ,0.0 ,"m^(LLODKUO+WLODKUO)" ,"Cross-term dependence of KUO") `MPRcz(LLODKUO ,0.0 ,"" ,"Length parameter for UO stress effect") `MPRcz(WLODKUO ,0.0 ,"" ,"Width parameter for UO stress effect") `MPRnb(KVTHO ,0.0 ,"Vm" ,"Threshold shift parameter") `MPRnb(LKVTHO ,0.0 ,"m^LLODVTH" ,"Length dependence of KVTHO") `MPRnb(WKVTHO ,0.0 ,"m^WLODVTH" ,"Width dependence of KVTHO") `MPRnb(PKVTHO ,0.0 ,"m^(LLODVTH+WLODVTH)" ,"Cross-term dependence of KVTHO") `MPRcz(LLODVTH ,0.0 ,"" ,"Length parameter for VTH-stress effect") `MPRcz(WLODVTH ,0.0 ,"" ,"Width parameter for VTH-stress effect") `MPRnb(STETAO ,0.0 ,"m" ,"Eta0 shift factor related to VTHO change") `MPRcz(LODETAO ,1.0 ,"" ,"Eta0 shift modification factor for stress effect") // Well proximity effect Parameters `MPRcz(SCREF ,1.0e-6 ,"m" ,"Distance between OD-edge and well edge of a reference device") `MPRnb(WEB ,0.0 ,"" ,"Coefficient for SCB") `MPRnb(WEC ,0.0 ,"" ,"Coefficient for SCC") // -------------------------------------------------------------------------------------------------------------- // Other Parameters // -------------------------------------------------------------------------------------------------------------- `MPRnb(DTA ,0.0 ,"K" ,"Temperature offset w.r.t. ambient temperature") tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_scaling.include0000644000175000017500000007406014163340332026343 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_scaling.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // Transistor geometry iL = `LEN / L_i; iW = `WEN / W_i; delLPS = LVARO * (1.0 + LVARL * iL) * (1.0 + LVARW * iW); delWOD = WVARO * (1.0 + WVARL * iL) * (1.0 + WVARW * iW); if (SWGEO_i == 2) begin delLPS = LVARO * (1.0 + LVARL * iL); delWOD = WVARO * (1.0 + WVARW * iW); end LE = `CLIP_LOW(L_i + delLPS - 2.0 * LAP, 1.0e-9); WE = `CLIP_LOW(W_i + delWOD - 2.0 * WOT, 1.0e-9); LEcv = `CLIP_LOW(L_i + delLPS - 2.0 * LAP + DLQ, 1.0e-9); WEcv = `CLIP_LOW(W_i + delWOD - 2.0 * WOT + DWQ, 1.0e-9); Lcv = `CLIP_LOW(L_i + delLPS + DLQ, 1.0e-9); Wcv = `CLIP_LOW(W_i + delWOD + DWQ, 1.0e-9); iLE = `LEN / LE; iWE = `WEN / WE; // Geometry for multi-finger devices L_f = `CLIP_LOW(L_i + delLPS, 1.0e-9); L_slif = `CLIP_LOW(L_f + DLSIL, 1.0e-9); W_f = `CLIP_LOW(W_i + delWOD, 1.0e-9); XGWE = `CLIP_LOW(XGW_i - 0.5 * delWOD, 1.0e-9); // Local model parameters VFB_p = VFB; STVFB_p = STVFB; ST2VFB_p = ST2VFB; TOX_p = TOX; EPSROX_p = EPSROX; NEFF_p = NEFF; FACNEFFAC_p = FACNEFFAC; GFACNUD_p = GFACNUD; VSBNUD_p = VSBNUD; DVSBNUD_p = DVSBNUD; VNSUB_p = VNSUB; NSLP_p = NSLP; DNSUB_p = DNSUB; DPHIB_p = DPHIB; DELVTAC_p = DELVTAC; NP_p = NP; TOXOV_p = TOXOV; TOXOVD_p = TOXOVD; NOV_p = NOV; NOVD_p = NOVD; CT_p = CT; CTG_p = CTG; CTB_p = CTB; STCT_p = STCT; PSCE_p = PSCE; PSCED_p = PSCED; PSCEB_p = PSCEB; CF_p = CF; `DefACparam(CFAC_p, CF, CFAC) CFD_p = CFD; CFB_p = CFB; BETN_p = BETN; STBET_p = STBET; MUE_p = MUE; STMUE_p = STMUE; THEMU_p = THEMU; STTHEMU_p = STTHEMU; CS_p = CS; STCS_p = STCS; THECS_p = THECS; STTHECS_p = STTHECS; XCOR_p = XCOR; STXCOR_p = STXCOR; FETA_p = FETA; RS_p = RS; STRS_p = STRS; RSB_p = RSB; RSG_p = RSG; THESAT_p = THESAT; `DefACparam(THESATAC_p, THESAT, THESATAC) STTHESAT_p = STTHESAT; THESATB_p = THESATB; THESATG_p = THESATG; AX_p = AX; `DefACparam(AXAC_p, AX, AXAC) ALP_p = ALP; `DefACparam(ALPAC_p, ALP, ALPAC) ALP1_p = ALP1; ALP2_p = ALP2; VP_p = VP; A1_p = A1; A2_p = A2; STA2_p = STA2; A3_p = A3; A4_p = A4; GCO_p = GCO; IGINV_p = IGINV; IGOV_p = IGOV; IGOVD_p = IGOVD; STIG_p = STIG; GC2_p = GC2; GC3_p = GC3; GC2OV_p = GC2OV; GC3OV_p = GC3OV; CHIB_p = CHIB; AGIDL_p = AGIDL; AGIDLD_p = AGIDLD; BGIDL_p = BGIDL; BGIDLD_p = BGIDLD; STBGIDL_p = STBGIDL; STBGIDLD_p = STBGIDLD; CGIDL_p = CGIDL; CGIDLD_p = CGIDLD; COX_p = COX; CGOV_p = CGOV; CGOVD_p = CGOVD; CGBOV_p = CGBOV; CFR_p = CFR; CFRD_p = CFRD; FNT_p = FNT; FNTEXC_p = FNTEXC; NFA_p = NFA; NFB_p = NFB; NFC_p = NFC; EF_p = EF; VFBEDGE_p = VFBEDGE; STVFBEDGE_p = STVFBEDGE; DPHIBEDGE_p = DPHIBEDGE; NEFFEDGE_p = NEFFEDGE; CTEDGE_p = CTEDGE; BETNEDGE_p = BETNEDGE; STBETEDGE_p = STBETEDGE; PSCEEDGE_p = PSCEEDGE; PSCEBEDGE_p = PSCEBEDGE; PSCEDEDGE_p = PSCEDEDGE; CFEDGE_p = CFEDGE; CFDEDGE_p = CFDEDGE; CFBEDGE_p = CFBEDGE; FNTEDGE_p = FNTEDGE; NFAEDGE_p = NFAEDGE; NFBEDGE_p = NFBEDGE; NFCEDGE_p = NFCEDGE; EFEDGE_p = EFEDGE; RG_p = RG; RSE_p = RSE; RDE_p = RDE; RWELL_p = RWELL; RBULK_p = RBULK; RJUNS_p = RJUNS; RJUND_p = RJUND; `ifdef SelfHeating RTH_p = RTH; CTH_p = CTH; STRTH_p = STRTH; `endif // SelfHeating `ifdef NQSmodel MUNQS_p = MUNQS; `endif // NQSmodel // Geometry scaling with physical scaling rules if (SWGEO_i == 1) begin // Process parameters VFB_p = VFBO + VFBL * iLE + VFBW * iWE + VFBLW * iLE * iWE; STVFB_p = STVFBO + STVFBL * iLE + STVFBW * iWE + STVFBLW * iLE * iWE; ST2VFB_p = ST2VFBO; TOX_p = TOXO; EPSROX_p = EPSROXO; NSUB0e = NSUBO_i * `MAX(( 1.0 + NSUBW * iWE * ln( 1.0 + WE / WSEG_i )), 1.0e-03); NPCKe = NPCK_i * `MAX(( 1.0 + NPCKW * iWE * ln( 1.0 + WE / WSEGP_i )), 1.0e-03); LPCKe = LPCK_i * `MAX(( 1.0 + LPCKW * iWE * ln( 1.0 + WE / WSEGP_i )), 1.0e-03); if (LE > (2.0 * LPCKe)) begin AA = 7.5e10; BB = sqrt(NSUB0e + 0.5 * NPCKe) - sqrt(NSUB0e); NSUB = sqrt(NSUB0e) + AA * ln(1.0 + 2.0 * LPCKe / LE * (exp(BB / AA) - 1.0)); NSUB = NSUB * NSUB; end else begin if (LE >= LPCKe) begin NSUB = NSUB0e + NPCKe * LPCKe / LE; end else begin // LE < LPCK NSUB = NSUB0e + NPCKe * (2.0 - LE / LPCKe); end end NEFF_p = NSUB * (1.0 - FOL1 * iLE - FOL2 * iLE * iLE); FACNEFFAC_p = FACNEFFACO + FACNEFFACL * iLE + FACNEFFACW * iWE + FACNEFFACLW * iLE * iWE; GFACNUD_p = GFACNUDO + GFACNUDL * pow(iLE, GFACNUDLEXP) + GFACNUDW * iWE + GFACNUDLW * iLE * iWE; VSBNUD_p = VSBNUDO; DVSBNUD_p = DVSBNUDO; VNSUB_p = VNSUBO; NSLP_p = NSLPO; DNSUB_p = DNSUBO; DPHIB_p = DPHIBO + DPHIBL * pow(iLE, DPHIBLEXP) + DPHIBW * iWE + DPHIBLW * iLE * iWE; DELVTAC_p = DELVTACO + DELVTACL * pow(iLE, DELVTACLEXP) + DELVTACW * iWE + DELVTACLW * iLE * iWE; NP_p = NPO * `MAX(1.0e-6, (1.0 + NPL * iLE)); TOXOV_p = TOXOVO; TOXOVD_p = TOXOVDO; NOV_p = NOVO; NOVD_p = NOVDO; // Interface states parameters CT_p = (CTO + CTL * pow(iLE, CTLEXP)) * (1.0 + CTW * iWE) * (1.0 + CTLW * iLE * iWE); CTG_p = CTGO; CTB_p = CTBO; STCT_p = STCTO; // DIBL parameters CF_p = CFL * pow(iLE, CFLEXP) * (1.0 + CFW * iWE); CFAC_p = CFACL_i * pow(iLE, CFACLEXP_i) * (1.0 + CFACW_i * iWE); CFD_p = CFDO; CFB_p = CFBO; // Subthreshold slope parameters of short channel transistor PSCE_p = PSCEL * pow(iLE, PSCELEXP) * (1.0 + PSCEW * iWE); PSCED_p = PSCEDO; PSCEB_p = PSCEBO; // Mobility parameters FBET1e = FBET1 * (1.0 + FBET1W * iWE); LP1e = LP1_i * `MAX(1.0 + LP1W * iWE, 1.0e-03); GPE = 1.0 + FBET1e * LP1e / LE * (1.0 - exp(-LE / LP1e)) + FBET2 * LP2_i / LE * (1.0 - exp(-LE / LP2_i)); GPE = `MAX(GPE, 1.0e-15); GWE = 1.0 + BETW1 * iWE + BETW2 * iWE * ln(1.0 + WE / WBET_i); BETN_p = UO * WE / (GPE * LE) * GWE; STBET_p = STBETO + STBETL * iLE + STBETW * iWE + STBETLW * iLE * iWE; MUE_p = MUEO * (1.0 + MUEW * iWE); STMUE_p = STMUEO; THEMU_p = THEMUO; STTHEMU_p = STTHEMUO; CS_p = (CSO + CSL * pow(iLE, CSLEXP)) * (1.0 + CSW * iWE) * (1.0 + CSLW * iLE * iWE); STCS_p = STCSO; THECS_p = THECSO; STTHECS_p = STTHECSO; XCOR_p = XCORO * (1.0 + XCORL * iLE) * (1.0 + XCORW * iWE) * (1.0 + XCORLW * iLE * iWE); STXCOR_p = STXCORO; FETA_p = FETAO; // Series resistance RS_p = RSW1 * iWE * (1.0 + RSW2 * iWE); STRS_p = STRSO; RSB_p = RSBO; RSG_p = RSGO; // Velocity saturation THESAT_p = (THESATO + THESATL * GWE / GPE * pow(iLE, THESATLEXP)) * (1.0 + THESATW * iWE) * (1.0 + THESATLW * iLE * iWE); THESATAC_p = (THESATACO_i + THESATACL_i * GWE / GPE * pow(iLE, THESATACLEXP_i)) * (1.0 + THESATACW_i * iWE) * (1.0 + THESATACLW_i * iLE * iWE); STTHESAT_p = STTHESATO + STTHESATL * iLE + STTHESATW * iWE + STTHESATLW * iLE * iWE; THESATB_p = THESATBO; THESATG_p = THESATGO; // Saturation voltage AX_p = AXO / (1.0 + AXL_i * iLE); AXAC_p = AXACO_i / (1.0 + AXACL_i * iLE); // Channel length modulation ALP_p = ALPL * pow(iLE, ALPLEXP) * (1.0 + ALPW * iWE); ALPAC_p = ALPACL_i * pow(iLE, ALPACLEXP_i) * (1.0 + ALPACW_i * iWE); tmpx = pow(iLE, ALP1LEXP); ALP1_p = ALP1L1 * tmpx * (1.0 + ALP1W * iWE) / (1.0 + ALP1L2_i * iLE * tmpx); tmpx = pow(iLE, ALP2LEXP); ALP2_p = ALP2L1 * tmpx * (1.0 + ALP2W * iWE) / (1.0 + ALP2L2_i * iLE * tmpx); VP_p = VPO; // Impact ionization A1_p = A1O * (1.0 + A1L * iLE) * (1.0 + A1W * iWE); A2_p = A2O; STA2_p = STA2O; A3_p = A3O * (1.0 + A3L * iLE) * (1.0 + A3W * iWE); A4_p = A4O * (1.0 + A4L * iLE) * (1.0 + A4W * iWE); // Gate current GCO_p = GCOO; IGINV_p = IGINVLW / (iWE * iLE); IGOV_p = IGOVW * LOV_i / (`LEN * iWE); IGOVD_p = IGOVDW * LOVD_i / (`LEN * iWE); STIG_p = STIGO; GC2_p = GC2O; GC3_p = GC3O; GC2OV_p = GC2OVO; GC3OV_p = GC3OVO; CHIB_p = CHIBO; // GIDL AGIDL_p = AGIDLW * LOV_i / (`LEN * iWE); AGIDLD_p = AGIDLDW * LOVD_i / (`LEN * iWE); BGIDL_p = BGIDLO; BGIDLD_p = BGIDLDO; STBGIDL_p = STBGIDLO; STBGIDLD_p = STBGIDLDO; CGIDL_p = CGIDLO; CGIDLD_p = CGIDLDO; // Charge model parameters COX_p = `EPSO * EPSROXO_i * WEcv * LEcv / TOXO_i; CGOV_p = `EPSO * EPSROXO_i * WEcv * LOV_i / TOXOVO_i; CGOVD_p = `EPSO * EPSROXO_i * WEcv * LOVD_i / TOXOVDO_i; CGBOV_p = CGBOVL * Lcv / `LEN; CFR_p = CFRW * Wcv / `WEN; CFRD_p = CFRDW * Wcv / `WEN; // Noise model parameters temp0 = 1.0 - 2.0 * LINTNOI * iLE / `LEN; Lnoi = `MAX(temp0, 1.0e-3); Lred = 1.0 / pow(Lnoi, ALPNOI); FNT_p = FNTO; FNTEXC_p = FNTEXCL * BETN_p * BETN_p * iWE * iWE; NFA_p = Lred * iWE * iLE * NFALW; NFB_p = Lred * iWE * iLE * NFBLW; NFC_p = Lred * iWE * iLE * NFCLW; EF_p = EFO; // Edge transistors: PSP 103.4 WE_edge = 2.0 * WEDGE + WEDGEW * WE; iWE_edge = `WEN / WE_edge; VFBEDGE_p = VFBEDGEO; STVFBEDGE_p = STVFBEDGEO + STVFBEDGEL * iLE + STVFBEDGEW * iWE + STVFBEDGELW * iLE * iWE; DPHIBEDGE_p = DPHIBEDGEO + DPHIBEDGEL * pow(iLE, DPHIBEDGELEXP) + DPHIBEDGEW * iWE + DPHIBEDGELW * iLE * iWE; NEFFEDGE_p = NSUBEDGEO_i * (1.0 + NSUBEDGEL * pow(iLE, NSUBEDGELEXP)) * ( 1.0 + NSUBEDGEW * iWE) * ( 1.0 + NSUBEDGELW * iLE * iWE); CTEDGE_p = CTEDGEO + CTEDGEL * pow(iLE, CTEDGELEXP); GPE_edge = 1.0 + FBETEDGE * LPEDGE_i / LE * (1.0 - exp(-LE / LPEDGE_i)); GPE_edge = `MAX(GPE_edge, 1.0e-15); BETNEDGE_p = UO * WE_edge / (GPE_edge * LE) * (1.0 + BETEDGEW * iWE); STBETEDGE_p = STBETEDGEO + STBETEDGEL * iLE + STBETEDGEW * iWE + STBETEDGELW * iLE * iWE; PSCEEDGE_p = PSCEEDGEL * pow(iLE, PSCEEDGELEXP) * (1.0 + PSCEEDGEW * iWE); PSCEBEDGE_p = PSCEBEDGEO; PSCEDEDGE_p = PSCEDEDGEO; CFEDGE_p = CFEDGEL * pow(iLE, CFEDGELEXP) * (1.0 + CFEDGEW * iWE); CFDEDGE_p = CFDEDGEO; CFBEDGE_p = CFBEDGEO; FNTEDGE_p = FNTEDGEO; NFAEDGE_p = iWE_edge * iLE * NFAEDGELW; NFBEDGE_p = iWE_edge * iLE * NFBEDGELW; NFCEDGE_p = iWE_edge * iLE * NFCEDGELW; EFEDGE_p = EFEDGEO; end // Well proximity effect parameters KVTHOWE = KVTHOWEO + KVTHOWEL * iLE + KVTHOWEW * iWE + KVTHOWELW * iLE * iWE; KUOWE = KUOWEO + KUOWEL * iLE + KUOWEW * iWE + KUOWELW * iLE * iWE; // Geometry scaling with binning scaling rules if (SWGEO_i == 2) begin // auxiliary variables iLEWE = iLE * iWE; iiLE = LE / `LEN; iiWE = WE / `WEN; iiLEWE = iiLE * iiWE; iiiLEWE = iiWE / iiLE; // auxiliary variables for COX only iiLEcv = LEcv / `LEN; iiWEcv = WEcv / `WEN; iiLEWEcv = iiLEcv * iiWEcv; // auxiliary variables for CGOV only iLEcv = `LEN / LEcv; iiiLEWEcv = iiWEcv / iiLEcv; // auxiliary variables for CGBOV only iiLcv = Lcv / `LEN; iiWcv = Wcv / `WEN; iiLWcv = iiLcv * iiWcv; // auxiliary variables for CFR only iLcv = `LEN / Lcv; iiiLWcv = iiWcv / iiLcv; // Process parameters VFB_p = POVFB + iLE * PLVFB + iWE * PWVFB + iLEWE * PLWVFB; STVFB_p = POSTVFB + iLE * PLSTVFB + iWE * PWSTVFB + iLEWE * PLWSTVFB; ST2VFB_p = POST2VFB; TOX_p = POTOX; EPSROX_p = POEPSROX; NEFF_p = PONEFF + iLE * PLNEFF + iWE * PWNEFF + iLEWE * PLWNEFF; FACNEFFAC_p = POFACNEFFAC + iLE * PLFACNEFFAC + iWE * PWFACNEFFAC + iLEWE * PLWFACNEFFAC; GFACNUD_p = POGFACNUD + PLGFACNUD * iLE + PWGFACNUD * iWE + PLWGFACNUD * iLE * iWE; VSBNUD_p = POVSBNUD; DVSBNUD_p = PODVSBNUD; VNSUB_p = POVNSUB; NSLP_p = PONSLP; DNSUB_p = PODNSUB; DPHIB_p = PODPHIB + iLE * PLDPHIB + iWE * PWDPHIB + iLEWE * PLWDPHIB; DELVTAC_p = PODELVTAC + iLE * PLDELVTAC + iWE * PWDELVTAC + iLEWE * PLWDELVTAC; NP_p = PONP + iLE * PLNP + iWE * PWNP + iLEWE * PLWNP; TOXOV_p = POTOXOV; TOXOVD_p = POTOXOVD; NOV_p = PONOV + iLE * PLNOV + iWE * PWNOV + iLEWE * PLWNOV; NOVD_p = PONOVD + iLE * PLNOVD + iWE * PWNOVD + iLEWE * PLWNOVD; // Interface states parameters CT_p = POCT + iLE * PLCT + iWE * PWCT + iLEWE * PLWCT; CTG_p = POCTG; CTB_p = POCTB; STCT_p = POSTCT; // DIBL parameters CF_p = POCF + iLE * PLCF + iWE * PWCF + iLEWE * PLWCF; CFAC_p = POCFAC_i + iLE * PLCFAC_i + iWE * PWCFAC_i + iLEWE * PLWCFAC_i; CFD_p = POCFD; CFB_p = POCFB; // Subthreshold slope parameters of short channel transistor PSCE_p = POPSCE + iLE * PLPSCE + iWE * PWPSCE + iLEWE * PLWPSCE; PSCEB_p = POPSCEB; PSCED_p = POPSCED; // Mobility parameters BETN_p = iiWE * iLE * (POBETN + iLE * PLBETN + iWE * PWBETN + iLEWE * PLWBETN); STBET_p = POSTBET + iLE * PLSTBET + iWE * PWSTBET + iLEWE * PLWSTBET; MUE_p = POMUE + iLE * PLMUE + iWE * PWMUE + iLEWE * PLWMUE; STMUE_p = POSTMUE; THEMU_p = POTHEMU; STTHEMU_p = POSTTHEMU; CS_p = POCS + iLE * PLCS + iWE * PWCS + iLEWE * PLWCS; STCS_p = POSTCS; THECS_p = POTHECS; STTHECS_p = POSTTHECS; XCOR_p = POXCOR + iLE * PLXCOR + iWE * PWXCOR + iLEWE * PLWXCOR; STXCOR_p = POSTXCOR; FETA_p = POFETA; // Series resistance parameters RS_p = PORS + iLE * PLRS + iWE * PWRS + iLEWE * PLWRS; STRS_p = POSTRS; RSB_p = PORSB; RSG_p = PORSG; // Velocity saturation parameters THESAT_p = POTHESAT + iLE * PLTHESAT + iWE * PWTHESAT + iLEWE * PLWTHESAT; THESATAC_p = POTHESATAC_i + iLE * PLTHESATAC_i + iWE * PWTHESATAC_i + iLEWE * PLWTHESATAC_i; STTHESAT_p = POSTTHESAT + iLE * PLSTTHESAT + iWE * PWSTTHESAT + iLEWE * PLWSTTHESAT; THESATB_p = POTHESATB + iLE * PLTHESATB + iWE * PWTHESATB + iLEWE * PLWTHESATB; THESATG_p = POTHESATG + iLE * PLTHESATG + iWE * PWTHESATG + iLEWE * PLWTHESATG; // Saturation voltage parameters AX_p = POAX + iLE * PLAX + iWE * PWAX + iLEWE * PLWAX; AXAC_p = POAXAC_i + iLE * PLAXAC_i + iWE * PWAXAC_i + iLEWE * PLWAXAC_i; // Channel length modulation (CLM) parameters ALP_p = POALP + iLE * PLALP + iWE * PWALP + iLEWE * PLWALP; ALPAC_p = POALPAC_i + iLE * PLALPAC_i + iWE * PWALPAC_i + iLEWE * PLWALPAC_i; ALP1_p = POALP1 + iLE * PLALP1 + iWE * PWALP1 + iLEWE * PLWALP1; ALP2_p = POALP2 + iLE * PLALP2 + iWE * PWALP2 + iLEWE * PLWALP2; VP_p = POVP; // Impact ionization parameters A1_p = POA1 + iLE * PLA1 + iWE * PWA1 + iLEWE * PLWA1; A2_p = POA2; STA2_p = POSTA2; A3_p = POA3 + iLE * PLA3 + iWE * PWA3 + iLEWE * PLWA3; A4_p = POA4 + iLE * PLA4 + iWE * PWA4 + iLEWE * PLWA4; GCO_p = POGCO; // Gate current parameters IGINV_p = POIGINV + iiLE * PLIGINV + iiWE * PWIGINV + iiLEWE * PLWIGINV; IGOV_p = POIGOV + iLE * PLIGOV + iiWE * PWIGOV + iiiLEWE * PLWIGOV; IGOVD_p = POIGOVD + iLE * PLIGOVD + iiWE * PWIGOVD + iiiLEWE * PLWIGOVD; STIG_p = POSTIG; GC2_p = POGC2; GC3_p = POGC3; GC2OV_p = POGC2OV; GC3OV_p = POGC3OV; CHIB_p = POCHIB; // Gate-induced drain leakage (GIDL) parameters AGIDL_p = POAGIDL + iLE * PLAGIDL + iiWE * PWAGIDL + iiiLEWE * PLWAGIDL; AGIDLD_p = POAGIDLD + iLE * PLAGIDLD + iiWE * PWAGIDLD + iiiLEWE * PLWAGIDLD; BGIDL_p = POBGIDL; BGIDLD_p = POBGIDLD; STBGIDL_p = POSTBGIDL; STBGIDLD_p = POSTBGIDLD; CGIDL_p = POCGIDL; CGIDLD_p = POCGIDLD; // Charge model parameters COX_p = POCOX + iiLEcv * PLCOX + iiWEcv * PWCOX + iiLEWEcv * PLWCOX; CGOV_p = POCGOV + iLEcv * PLCGOV + iiWEcv * PWCGOV + iiiLEWEcv * PLWCGOV; CGOVD_p = POCGOVD + iLEcv * PLCGOVD + iiWEcv * PWCGOVD + iiiLEWEcv * PLWCGOVD; CGBOV_p = POCGBOV + iiLcv * PLCGBOV + iiWcv * PWCGBOV + iiLWcv * PLWCGBOV; CFR_p = POCFR + iLcv * PLCFR + iiWcv * PWCFR + iiiLWcv * PLWCFR; CFRD_p = POCFRD + iLcv * PLCFRD + iiWcv * PWCFRD + iiiLWcv * PLWCFRD; // Noise model parameters FNT_p = POFNT; FNTEXC_p = iLE * iLE * (POFNTEXC + iLE * PLFNTEXC + iWE * PWFNTEXC + iLEWE * PLWFNTEXC); NFA_p = PONFA + iLE * PLNFA + iWE * PWNFA + iLEWE * PLWNFA; NFB_p = PONFB + iLE * PLNFB + iWE * PWNFB + iLEWE * PLWNFB; NFC_p = PONFC + iLE * PLNFC + iWE * PWNFC + iLEWE * PLWNFC; EF_p = POEF; // Edge transistor: PSP 103.4 VFBEDGE_p = POVFBEDGE; STVFBEDGE_p = POSTVFBEDGE + iLE * PLSTVFBEDGE + iWE * PWSTVFBEDGE + iLEWE * PLWSTVFBEDGE; DPHIBEDGE_p = PODPHIBEDGE + iLE * PLDPHIBEDGE + iWE * PWDPHIBEDGE + iLEWE * PLWDPHIBEDGE; NEFFEDGE_p = PONEFFEDGE + iLE * PLNEFFEDGE + iWE * PWNEFFEDGE + iLEWE * PLWNEFFEDGE; CTEDGE_p = POCTEDGE + iLE * PLCTEDGE + iWE * PWCTEDGE + iLEWE * PLWCTEDGE; BETNEDGE_p = iLE * (POBETNEDGE + iLE * PLBETNEDGE + iWE * PWBETNEDGE + iLEWE * PLWBETNEDGE); STBETEDGE_p = POSTBETEDGE + iLE * PLSTBETEDGE + iWE * PWSTBETEDGE + iLEWE * PLWSTBETEDGE; PSCEEDGE_p = POPSCEEDGE + iLE * PLPSCEEDGE + iWE * PWPSCEEDGE + iLEWE * PLWPSCEEDGE; PSCEBEDGE_p = POPSCEBEDGE; PSCEDEDGE_p = POPSCEDEDGE; CFEDGE_p = POCFEDGE + iLE * PLCFEDGE + iWE * PWCFEDGE + iLEWE * PLWCFEDGE; CFDEDGE_p = POCFDEDGE; CFBEDGE_p = POCFBEDGE; FNTEDGE_p = POFNTEDGE; NFAEDGE_p = PONFAEDGE + iLE * PLNFAEDGE + iWE * PWNFAEDGE + iLEWE * PLWNFAEDGE; NFBEDGE_p = PONFBEDGE + iLE * PLNFBEDGE + iWE * PWNFBEDGE + iLEWE * PLWNFBEDGE; NFCEDGE_p = PONFCEDGE + iLE * PLNFCEDGE + iWE * PWNFCEDGE + iLEWE * PLWNFCEDGE; EFEDGE_p = POEFEDGE; // Well proximity effect parameters KVTHOWE = POKVTHOWE + iLE * PLKVTHOWE + iWE * PWKVTHOWE + iLEWE * PLWKVTHOWE; KUOWE = POKUOWE + iLE * PLKUOWE + iWE * PWKUOWE + iLEWE * PLWKUOWE; end // Parasitic resistance parameters if ((SWGEO_i == 1) || (SWGEO_i == 2)) begin RG_p = RSHG_i * (`oneThird * W_f / NGCON_i + XGWE) / (NGCON_i * L_slif) + (RINT_i + RVPOLY_i) / (W_f * L_f) + NF_i * RGO; if (SWJUNASYM == 0) begin RSHD_i = RSH_i; end RSE_p = NRS * RSH_i; RDE_p = NRD * RSHD_i; RWELL_p = NF_i * RWELLO; RBULK_p = NF_i * RBULKO; RJUNS_p = NF_i * RJUNSO; RJUND_p = NF_i * RJUNDO; // Self heating effect parameters `ifdef SelfHeating deltaRth = RTHW2 + WE / `WEN * (1.0 + RTHLW * LE / `LEN); deltaRth = `MAX(deltaRth, 1.0e-6); RTH_p = RTHO + RTHW1 / deltaRth; CTH_p = CTHO + CTHW1 * (CTHW2 + WE / `WEN * (1.0 + CTHLW * LE / `LEN)); STRTH_p = STRTHO; `endif // SelfHeating // NQS parameters `ifdef NQSmodel MUNQS_p = MUNQSO; `endif // NQSmodel // Mechanical stress model tmpa = 0.0; tmpb = 0.0; loop = 0.0; if ((SA_i > 0.0) && (SB_i > 0.0) && ((NF_i == 1.0) || ((NF_i > 1.0) && (SD_i > 0.0)))) begin while (loop < (NF_i - 0.5)) begin tmpa = tmpa + 1.0 / (SA_i + 0.5 * L_i + loop * (SD_i + L_i)); tmpb = tmpb + 1.0 / (SB_i + 0.5 * L_i + loop * (SD_i + L_i)); loop = loop + 1.0; end Invsa = tmpa * invNF; Invsb = tmpb * invNF; Invsaref = 1.0 / (SAREF_i + 0.5 * L_i); Invsbref = 1.0 / (SBREF_i + 0.5 * L_i); Lx = `MAX(L_i + delLPS, 1.0e-9); Wx = `MAX(W_i + delWOD + WLOD, 1.0e-9); templ = 1.0 / pow(Lx, LLODKUO_i); tempw = 1.0 / pow(Wx, WLODKUO_i); Kstressu0 = (1.0 + LKUO * templ + WKUO * tempw + PKUO * templ * tempw) * (1.0 + TKUO * (rTa - 1.0)); rhobeta = KUO * (Invsa + Invsb) / Kstressu0; rhobetaref = KUO * (Invsaref + Invsbref) / Kstressu0; templ = 1.0 / pow(Lx, LLODVTH_i); tempw = 1.0 / pow(Wx, WLODVTH_i); Kstressvth0 = 1.0 + LKVTHO * templ + WKVTHO * tempw + PKVTHO * templ * tempw; temp0 = Invsa + Invsb - Invsaref - Invsbref; // Parameter adaptations temp00 = (1.0 + rhobeta) / (1.0 + rhobetaref); BETN_p = BETN_p * temp00; THESAT_p = THESAT_p * temp00 * (1.0 + KVSAT_i * rhobetaref) / (1.0 + KVSAT_i * rhobeta); THESATAC_p = THESATAC_p * temp00 * (1.0 + KVSATAC_i * rhobetaref) / (1.0 + KVSATAC_i * rhobeta); BETNEDGE_p = BETNEDGE_p * temp00; temp00 = KVTHO * temp0 / Kstressvth0; VFB_p = VFB_p + temp00; VFBEDGE_p = VFBEDGE_p + temp00; temp00 = STETAO * temp0 / pow(Kstressvth0, LODETAO_i); CF_p = CF_p + temp00; CFAC_p = CFAC_p + temp00; CFEDGE_p = CFEDGE_p + temp00; end // Well proximity effect equations if ((SCA_i > 0.0) || (SCB_i > 0.0) || (SCC_i > 0.0) || (SC_i > 0.0)) begin if ((SCA_i == 0.0) && (SCB_i == 0.0) && (SCC_i == 0.0)) begin temp0 = SC_i + W_i; temp00 = 1.0 / SCREF_i; SCA_i = SCREF_i * SCREF_i / (SC_i * temp0); SCB_i = ((0.1 * SC_i + 0.01 * SCREF_i) * exp(-10.0 * SC_i * temp00) - (0.1 * temp0 + 0.01 * SCREF_i) * exp(-10.0 * temp0 * temp00)) / W_i; SCC_i = ((0.05 * SC_i + 0.0025 * SCREF_i) * exp(-20.0 * SC_i * temp00) - (0.05 * temp0 + 0.0025 * SCREF_i) * exp(-20.0 * temp0 * temp00)) / W_i; end // Parameter adaptations temp0 = SCA_i + WEB_i * SCB_i + WEC_i * SCC_i; VFB_p = VFB_p + KVTHOWE * temp0; BETN_p = BETN_p * (1.0 + KUOWE * temp0); VFBEDGE_p = VFBEDGE_p + KVTHOWE * temp0; BETNEDGE_p = BETNEDGE_p * (1.0 + KUOWE * temp0); end end // Internal parameters (including temperature scaling) // Clipping of the local model parameters VFB_i = VFB_p; STVFB_i = STVFB_p; ST2VFB_i = ST2VFB_p; TOX_i = `CLIP_LOW(TOX_p, 1.0e-10); EPSROX_i = `CLIP_LOW(EPSROX_p, 1.0); NEFF_i = `CLIP_BOTH(NEFF_p, 1.0e20, 1.0e26); FACNEFFAC_i = `CLIP_LOW(FACNEFFAC_p, 0.0); GFACNUD_i = `CLIP_LOW(GFACNUD_p, 0.01); VSBNUD_i = `CLIP_LOW(VSBNUD_p, 0.0); DVSBNUD_i = `CLIP_LOW(DVSBNUD_p, 0.1); VNSUB_i = VNSUB_p; NSLP_i = `CLIP_LOW(NSLP_p, 1.0e-3); DNSUB_i = `CLIP_BOTH(DNSUB_p, 0.0, 1.0); DPHIB_i = DPHIB_p; DELVTAC_i = DELVTAC_p; NP_i = `CLIP_LOW(NP_p, 0.0); TOXOV_i = `CLIP_LOW(TOXOV_p, 1.0e-10); TOXOVD_i = `CLIP_LOW(TOXOVD_p, 1.0e-10); NOV_i = `CLIP_BOTH(NOV_p, 1.0e23, 1.0e27); NOVD_i = `CLIP_BOTH(NOVD_p, 1.0e23, 1.0e27); CT_i = `CLIP_LOW(CT_p, 0.0); CTG_i = `CLIP_LOW(CTG_p, 0.0); CTB_i = CTB_p; STCT_i = STCT_p; CF_i = `CLIP_LOW(CF_p, 0.0); CFAC_i = `CLIP_LOW(CFAC_p, 0.0); CFD_i = `CLIP_LOW(CFD_p, 0.0); CFB_i = `CLIP_BOTH(CFB_p, 0.0, 1.0); PSCE_i = `CLIP_LOW(PSCE_p, 0.0); PSCEB_i = `CLIP_BOTH(PSCEB_p, 0.0, 1.0); PSCED_i = `CLIP_LOW(PSCED_p, 0.0); BETN_i = `CLIP_LOW(BETN_p, 0.0); STBET_i = STBET_p; MUE_i = `CLIP_LOW(MUE_p, 0.0); STMUE_i = STMUE_p; THEMU_i = `CLIP_LOW(THEMU_p, 0.0); STTHEMU_i = STTHEMU_p; CS_i = `CLIP_LOW(CS_p, 0.0); STCS_i = STCS_p; THECS_i = `CLIP_LOW(THECS_p, 0.0); STTHECS_i = STTHECS_p; XCOR_i = `CLIP_LOW(XCOR_p, 0.0); STXCOR_i = STXCOR_p; FETA_i = `CLIP_LOW(FETA_p, 0.0); RS_i = `CLIP_LOW(RS_p, 0.0); STRS_i = STRS_p; RSB_i = `CLIP_BOTH(RSB_p, -0.5, 1.0); RSG_i = `CLIP_LOW(RSG_p, -0.5); THESAT_i = `CLIP_LOW(THESAT_p, 0.0); THESATAC_i = `CLIP_LOW(THESATAC_p, 0.0); STTHESAT_i = STTHESAT_p; THESATB_i = `CLIP_BOTH(THESATB_p, -0.5, 1.0); THESATG_i = `CLIP_LOW(THESATG_p, -0.5); AX_i = `CLIP_LOW(AX_p, 2.0); AXAC_i = `CLIP_LOW(AXAC_p, 2.0); ALP_i = `CLIP_LOW(ALP_p, 0.0); ALPAC_i = `CLIP_LOW(ALPAC_p, 0.0); ALP1_i = `CLIP_LOW(ALP1_p, 0.0); ALP2_i = `CLIP_LOW(ALP2_p, 0.0); VP_i = `CLIP_LOW(VP_p, 1.0e-10); A1_i = `CLIP_LOW(A1_p, 0.0); A2_i = `CLIP_LOW(A2_p, 0.0); STA2_i = STA2_p; A3_i = `CLIP_LOW(A3_p, 0.0); A4_i = `CLIP_LOW(A4_p, 0.0); GCO_i = `CLIP_BOTH(GCO_p, -10.0, 10.0); IGINV_i = `CLIP_LOW(IGINV_p, 0.0); IGOV_i = `CLIP_LOW(IGOV_p, 0.0); IGOVD_i = `CLIP_LOW(IGOVD_p, 0.0); STIG_i = STIG_p; GC2_i = `CLIP_BOTH(GC2_p, 0.0, 10.0); GC3_i = `CLIP_BOTH(GC3_p, -10.0, 10.0); GC2OV_i = GC2_i; GC3OV_i = GC3_i; if (SWIGATE_i == 2) begin GC2OV_i = `CLIP_BOTH(GC2OV_p, 0.0, 10.0); GC3OV_i = `CLIP_BOTH(GC3OV_p, -10.0, 10.0); end CHIB_i = `CLIP_LOW(CHIB_p, 1.0); AGIDL_i = `CLIP_LOW(AGIDL_p, 0.0); AGIDLD_i = `CLIP_LOW(AGIDLD_p, 0.0); BGIDL_i = `CLIP_LOW(BGIDL_p, 0.0); BGIDLD_i = `CLIP_LOW(BGIDLD_p, 0.0); STBGIDL_i = STBGIDL_p; STBGIDLD_i = STBGIDLD_p; CGIDL_i = CGIDL_p; CGIDLD_i = CGIDLD_p; COX_i = `CLIP_LOW(COX_p, 0.0); CGOV_i = `CLIP_LOW(CGOV_p, 0.0); CGOVD_i = `CLIP_LOW(CGOVD_p, 0.0); CGBOV_i = `CLIP_LOW(CGBOV_p, 0.0); CFR_i = `CLIP_LOW(CFR_p, 0.0); CFRD_i = `CLIP_LOW(CFRD_p, 0.0); FNT_i = `CLIP_LOW(FNT_p, 0.0); FNTEXC_i = `CLIP_LOW(FNTEXC_p, 0.0); NFA_i = `CLIP_LOW(NFA_p, 0.0); NFB_i = `CLIP_LOW(NFB_p, 0.0); NFC_i = `CLIP_LOW(NFC_p, 0.0); EF_i = `CLIP_LOW(EF_p, 0.0); VFBEDGE_i = VFBEDGE_p; STVFBEDGE_i = STVFBEDGE_p; DPHIBEDGE_i = DPHIBEDGE_p; NEFFEDGE_i = `CLIP_BOTH(NEFFEDGE_p, 1.0e20, 1.0e26); CTEDGE_i = `CLIP_LOW(CTEDGE_p, 0.0); BETNEDGE_i = `CLIP_LOW(BETNEDGE_p, 0.0); STBETEDGE_i = STBETEDGE_p; PSCEEDGE_i = `CLIP_LOW(PSCEEDGE_p, 0.0); PSCEBEDGE_i = `CLIP_BOTH(PSCEBEDGE_p, 0.0, 1.0); PSCEDEDGE_i = `CLIP_LOW(PSCEDEDGE_p, 0.0); CFEDGE_i = `CLIP_LOW(CFEDGE_p, 0.0); CFDEDGE_i = `CLIP_LOW(CFDEDGE_p, 0.0); CFBEDGE_i = `CLIP_BOTH(CFBEDGE_p, 0.0, 1.0); FNTEDGE_i = `CLIP_LOW(FNTEDGE_p, 0.0); NFAEDGE_i = `CLIP_LOW(NFAEDGE_p, 0.0); NFBEDGE_i = `CLIP_LOW(NFBEDGE_p, 0.0); NFCEDGE_i = `CLIP_LOW(NFCEDGE_p, 0.0); EFEDGE_i = `CLIP_LOW(EFEDGE_p, 0.0); RG_i = `CLIP_LOW(RG_p, 0.0); RSE_i = `CLIP_LOW(RSE_p, 0.0); RDE_i = `CLIP_LOW(RDE_p, 0.0); RBULK_i = `CLIP_LOW(RBULK_p, 0.0); RJUNS_i = `CLIP_LOW(RJUNS_p, 0.0); RJUND_i = `CLIP_LOW(RJUND_p, 0.0); RWELL_i = `CLIP_LOW(RWELL_p, 0.0); `ifdef SelfHeating RTH_i = `CLIP_LOW(RTH_p, 1.0e-4); CTH_i = `CLIP_LOW(CTH_p, 0.0); STRTH_i = STRTH_p; `endif // SelfHeating MULT_i = `CLIP_LOW(MULT * NF_i, 0.0); // Note: NF_i is set to 1 for local model FACTUO_i = `CLIP_LOW(FACTUO, 0.0); DELVTO_i = DELVTO; FACTUOEDGE_i = `CLIP_LOW(FACTUOEDGE, 0.0); DELVTOEDGE_i = DELVTOEDGE; `ifdef NQSmodel MUNQS_i = `CLIP_LOW(MUNQS_p, 0.0); `endif // NQSmodel // Ignore drain-side values in case of symmetric junctions if (SWJUNASYM_i == 0) begin TOXOVD_i = TOXOV_i; NOVD_i = NOV_i; AGIDLD_i = AGIDL_i; BGIDLD_i = BGIDL_i; STBGIDLD_i = STBGIDL_i; CGIDLD_i = CGIDL_i; IGOVD_i = IGOV_i; CGOVD_i = CGOV_i; CFRD_i = CFR_i; end tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/JUNCAP200_parlist.include0000644000175000017500000005763714163340332026730 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: JUNCAP200_parlist.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 200.6.0, April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // -------------------------------------------------------------------------------------------------------------- // JUNCAP2 - Reduced parameter list // -------------------------------------------------------------------------------------------------------------- `MPRco(IMAX ,1000.0 ,"A" ,`IMAX_cliplow ,inf ,"Maximum current up to which forward current behaves exponentially") `MPRco(TRJ ,21.0 ,"degC" ,`TRJ_cliplow ,inf ,"Reference temperature") `MPRcc(FREV ,1.0e3 ,"" ,`FREV_cliplow ,`FREV_cliphigh ,"Coefficient for reverse breakdown current limitation") `IPRcz(IFACTOR ,1.0 ,"" ,"Multiplier for current") `IPRcz(CFACTOR ,1.0 ,"" ,"Multiplier for depletion capacitance") // Parameters for source-bulk junction `ifdef JUNCAP_StandAlone `MPRco(CJORBOT ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component") `MPRco(CJORSTI ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component") `MPRco(CJORGAT ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component") `MPRco(VBIRBOT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component") `MPRco(VBIRSTI ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component") `MPRco(VBIRGAT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component") `MPRcc(PBOT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component") `MPRcc(PSTI ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component") `MPRcc(PGAT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component") `MPRnb(PHIGBOT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component") `MPRnb(PHIGSTI ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component") `MPRnb(PHIGGAT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component") `MPRco(IDSATRBOT ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component") `MPRco(IDSATRSTI ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component") `MPRco(IDSATRGAT ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component") `MPRco(CSRHBOT ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component") `MPRco(CSRHSTI ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component") `MPRco(CSRHGAT ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component") `MPRco(XJUNSTI ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component") `MPRco(XJUNGAT ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component") `MPRco(CTATBOT ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component") `MPRco(CTATSTI ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component") `MPRco(CTATGAT ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component") `MPRco(MEFFTATBOT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component") `MPRco(MEFFTATSTI ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component") `MPRco(MEFFTATGAT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component") `MPRco(CBBTBOT ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component") `MPRco(CBBTSTI ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component") `MPRco(CBBTGAT ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component") `MPRnb(FBBTRBOT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component") `MPRnb(FBBTRSTI ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component") `MPRnb(FBBTRGAT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component") `MPRnb(STFBBTBOT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component") `MPRnb(STFBBTSTI ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component") `MPRnb(STFBBTGAT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component") `MPRco(VBRBOT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component") `MPRco(VBRSTI ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component") `MPRco(VBRGAT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component") `MPRco(PBRBOT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component") `MPRco(PBRSTI ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component") `MPRco(PBRGAT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component") `else // JUNCAP_StandAlone `MPRco(CJORBOT ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component for source-bulk junction") `MPRco(CJORSTI ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component for source-bulk junction") `MPRco(CJORGAT ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component for source-bulk junction") `MPRco(VBIRBOT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component for source-bulk junction") `MPRco(VBIRSTI ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component for source-bulk junction") `MPRco(VBIRGAT ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component for source-bulk junction") `MPRcc(PBOT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component for source-bulk junction") `MPRcc(PSTI ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component for source-bulk junction") `MPRcc(PGAT ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component for source-bulk junction") `MPRnb(PHIGBOT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component for source-bulk junction") `MPRnb(PHIGSTI ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component for source-bulk junction") `MPRnb(PHIGGAT ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component for source-bulk junction") `MPRco(IDSATRBOT ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component for source-bulk junction") `MPRco(IDSATRSTI ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component for source-bulk junction") `MPRco(IDSATRGAT ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component for source-bulk junction") `MPRco(CSRHBOT ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component for source-bulk junction") `MPRco(CSRHSTI ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component for source-bulk junction") `MPRco(CSRHGAT ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component for source-bulk junction") `MPRco(XJUNSTI ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component for source-bulk junction") `MPRco(XJUNGAT ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component for source-bulk junction") `MPRco(CTATBOT ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component for source-bulk junction") `MPRco(CTATSTI ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component for source-bulk junction") `MPRco(CTATGAT ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component for source-bulk junction") `MPRco(MEFFTATBOT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component for source-bulk junction") `MPRco(MEFFTATSTI ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for source-bulk junction") `MPRco(MEFFTATGAT ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for source-bulk junction") `MPRco(CBBTBOT ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component for source-bulk junction") `MPRco(CBBTSTI ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component for source-bulk junction") `MPRco(CBBTGAT ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component for source-bulk junction") `MPRnb(FBBTRBOT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component for source-bulk junction") `MPRnb(FBBTRSTI ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for source-bulk junction") `MPRnb(FBBTRGAT ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for source-bulk junction") `MPRnb(STFBBTBOT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component for source-bulk junction") `MPRnb(STFBBTSTI ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component for source-bulk junction") `MPRnb(STFBBTGAT ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component for source-bulk junction") `MPRco(VBRBOT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component for source-bulk junction") `MPRco(VBRSTI ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component for source-bulk junction") `MPRco(VBRGAT ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component for source-bulk junction") `MPRco(PBRBOT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component for source-bulk junction") `MPRco(PBRSTI ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component for source-bulk junction") `MPRco(PBRGAT ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component for source-bulk junction") `endif // JUNCAP_StandAlone // Parameters for drain-bulk junction `ifdef JUNCAP_StandAlone // do nothing `else // JUNCAP_StandAlone `MPRco(CJORBOTD ,1.0e-3 ,"Fm^-2" ,`CJORBOT_cliplow ,inf ,"Zero-bias capacitance per unit-of-area of bottom component for drain-bulk junction") `MPRco(CJORSTID ,1.0e-9 ,"Fm^-1" ,`CJORSTI_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of STI-edge component for drain-bulk junction") `MPRco(CJORGATD ,1.0e-9 ,"Fm^-1" ,`CJORGAT_cliplow ,inf ,"Zero-bias capacitance per unit-of-length of gate-edge component for drain-bulk junction") `MPRco(VBIRBOTD ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of bottom component for drain-bulk junction") `MPRco(VBIRSTID ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of STI-edge component for drain-bulk junction") `MPRco(VBIRGATD ,1.0 ,"V" ,`VBIR_cliplow ,inf ,"Built-in voltage at the reference temperature of gate-edge component for drain-bulk junction") `MPRcc(PBOTD ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of bottom component for drain-bulk junction") `MPRcc(PSTID ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of STI-edge component for drain-bulk junction") `MPRcc(PGATD ,0.5 ,"" ,`P_cliplow ,`P_cliphigh ,"Grading coefficient of gate-edge component for drain-bulk junction") `MPRnb(PHIGBOTD ,1.16 ,"V" ,"Zero-temperature bandgap voltage of bottom component for drain-bulk junction") `MPRnb(PHIGSTID ,1.16 ,"V" ,"Zero-temperature bandgap voltage of STI-edge component for drain-bulk junction") `MPRnb(PHIGGATD ,1.16 ,"V" ,"Zero-temperature bandgap voltage of gate-edge component for drain-bulk junction") `MPRco(IDSATRBOTD ,1.0e-12 ,"Am^-2" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of bottom component for drain-bulk junction") `MPRco(IDSATRSTID ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of STI-edge component for drain-bulk junction") `MPRco(IDSATRGATD ,1.0e-18 ,"Am^-1" ,`IDSATR_cliplow ,inf ,"Saturation current density at the reference temperature of gate-edge component for drain-bulk junction") `MPRco(CSRHBOTD ,1.0e2 ,"Am^-3" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of bottom component for drain-bulk junction") `MPRco(CSRHSTID ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of STI-edge component for drain-bulk junction") `MPRco(CSRHGATD ,1.0e-4 ,"Am^-2" ,`CSRH_cliplow ,inf ,"Shockley-Read-Hall prefactor of gate-edge component for drain-bulk junction") `MPRco(XJUNSTID ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of STI-edge component for drain-bulk junction") `MPRco(XJUNGATD ,1.0e-7 ,"m" ,`XJUN_cliplow ,inf ,"Junction depth of gate-edge component for drain-bulk junction") `MPRco(CTATBOTD ,1.0e2 ,"Am^-3" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of bottom component for drain-bulk junction") `MPRco(CTATSTID ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of STI-edge component for drain-bulk junction") `MPRco(CTATGATD ,1.0e-4 ,"Am^-2" ,`CTAT_cliplow ,inf ,"Trap-assisted tunneling prefactor of gate-edge component for drain-bulk junction") `MPRco(MEFFTATBOTD ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of bottom component for drain-bulk junction") `MPRco(MEFFTATSTID ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of STI-edge component for drain-bulk junction") `MPRco(MEFFTATGATD ,0.25 ,"" ,`MEFFTAT_cliplow ,inf ,"Effective mass (in units of m0) for trap-assisted tunneling of gate-edge component for drain-bulk junction") `MPRco(CBBTBOTD ,1.0e-12 ,"AV^-3" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of bottom component for drain-bulk junction") `MPRco(CBBTSTID ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of STI-edge component for drain-bulk junction") `MPRco(CBBTGATD ,1.0e-18 ,"AV^-3m" ,`CBBT_cliplow ,inf ,"Band-to-band tunneling prefactor of gate-edge component for drain-bulk junction") `MPRnb(FBBTRBOTD ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of bottom component for drain-bulk junction") `MPRnb(FBBTRSTID ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of STI-edge component for drain-bulk junction") `MPRnb(FBBTRGATD ,1.0e9 ,"Vm^-1" ,"Normalization field at the reference temperature for band-to-band tunneling of gate-edge component for drain-bulk junction") `MPRnb(STFBBTBOTD ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of bottom component for drain-bulk junction") `MPRnb(STFBBTSTID ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of STI-edge component for drain-bulk junction") `MPRnb(STFBBTGATD ,-1.0e-3 ,"K^-1" ,"Temperature scaling parameter for band-to-band tunneling of gate-edge component for drain-bulk junction") `MPRco(VBRBOTD ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of bottom component for drain-bulk junction") `MPRco(VBRSTID ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of STI-edge component for drain-bulk junction") `MPRco(VBRGATD ,10.0 ,"V" ,`VBR_cliplow ,inf ,"Breakdown voltage of gate-edge component for drain-bulk junction") `MPRco(PBRBOTD ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of bottom component for drain-bulk junction") `MPRco(PBRSTID ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of STI-edge component for drain-bulk junction") `MPRco(PBRGATD ,4.0 ,"V" ,`PBR_cliplow ,inf ,"Breakdown onset tuning parameter of gate-edge component for drain-bulk junction") `endif // JUNCAP_StandAlone // JUNCAP2-express parameters `MPRcc(SWJUNEXP ,0.0 ,"" ,0.0 ,1.0 ,"Flag for JUNCAP-express; 0=full model, 1=express model") `ifdef JUNCAP_StandAlone `MPRco(VJUNREF ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum junction voltage; usually about 2*VSUP") `MPRco(FJUNQ ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which junction capacitance components are considered negligible") `else // JUNCAP_StandAlone `MPRco(VJUNREF ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum source-bulk junction voltage; usually about 2*VSUP") `MPRco(FJUNQ ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which source-bulk junction capacitance components are considered negligible") `MPRco(VJUNREFD ,2.5 ,"V" ,`VJUNREF_cliplow ,inf ,"Typical maximum drain-bulk junction voltage; usually about 2*VSUP") `MPRco(FJUNQD ,0.03 ,"" ,`FJUNQ_cliplow ,inf ,"Fraction below which drain-bulk junction capacitance components are considered negligible") `endif // JUNCAP_StandAlone tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/JUNCAP200_varlist.include0000644000175000017500000001467514163340332026731 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: JUNCAP200_varlist.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 200.6.0, April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // declaration of clipped parameters real TRJ_i, IMAX_i, FREV_i, IFACTOR_i, CFACTOR_i; real CJORBOT_i, CJORSTI_i, CJORGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i; real PBOT_i, PSTI_i, PGAT_i, PHIGBOT_i, PHIGSTI_i, PHIGGAT_i; real IDSATRBOT_i, IDSATRSTI_i, IDSATRGAT_i, XJUNSTI_i, XJUNGAT_i; real CSRHBOT_i, CSRHSTI_i, CSRHGAT_i, CTATBOT_i, CTATSTI_i, CTATGAT_i; real MEFFTATBOT_i, MEFFTATSTI_i, MEFFTATGAT_i; real CBBTBOT_i, CBBTSTI_i, CBBTGAT_i, FBBTRBOT_i, FBBTRSTI_i, FBBTRGAT_i; real STFBBTBOT_i, STFBBTSTI_i, STFBBTGAT_i; real VBRBOT_i, VBRSTI_i, VBRGAT_i, PBRBOT_i, PBRSTI_i, PBRGAT_i; real SWJUNEXP_i, VJUNREF_i, FJUNQ_i; // declaration of variables calculated outside macro "juncapfunction", voltage-independent part real tkr, tkd, auxt, KBOL_over_QELE, phitr, phitrinv, phitd, phitdinv; real perfc, berfc, cerfc; real deltaphigr, deltaphigd, pmax; real phigrbot, phigrsti, phigrgat, phigdbot, phigdsti, phigdgat; real ftdbot, ftdsti, ftdgat, idsatbot, idsatsti, idsatgat; real ubibot, ubisti, ubigat, vbibot, vbisti, vbigat; real vbibot2, vbisti2, vbigat2, pbot2, psti2, pgat2, vbibot2r, vbisti2r, vbigat2r; real vbiinvbot, vbiinvsti, vbiinvgat; real one_minus_PBOT, one_minus_PSTI, one_minus_PGAT; real one_over_one_minus_PBOT, one_over_one_minus_PSTI, one_over_one_minus_PGAT; real cjobot, cjosti, cjogat; real qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat; real wdepnulrbot, wdepnulrsti, wdepnulrgat, wdepnulrinvbot, wdepnulrinvsti, wdepnulrinvgat; real VBIRBOTinv, VBIRSTIinv, VBIRGATinv; real deltaEbot, deltaEsti, deltaEgat, atatbot, atatsti, atatgat; real btatpartbot, btatpartsti, btatpartgat; real fbbtbot, fbbtsti, fbbtgat; real alphaav, fstopbot, fstopsti, fstopgat, VBRinvbot, VBRinvsti, VBRinvgat; real slopebot, slopesti, slopegat; real vmaxbot, vmaxsti, vmaxgat; // JUNCAP-Express variables real I1, I2, I3, I4, I5; real I1_cor, I2_cor, I3_cor, I4_cor, I5_cor; real V1, V2, V3, V4, V5; real alphaje, m0_rev, mcor_rev; real tt0, tt1, tt2, tm0, tm1; real FRACNA, FRACNB, FRACI; real zfrac; real ijunfor1, ijunfor2, ijunrev; `ifdef JUNCAP_StandAlone // do nothing `else // JUNCAP_StandAlone real CJORBOTD_i, CJORSTID_i, CJORGATD_i, VBIRBOTD_i, VBIRSTID_i, VBIRGATD_i; real PBOTD_i, PSTID_i, PGATD_i, PHIGBOTD_i, PHIGSTID_i, PHIGGATD_i; real IDSATRBOTD_i, IDSATRSTID_i, IDSATRGATD_i, XJUNSTID_i, XJUNGATD_i; real CSRHBOTD_i, CSRHSTID_i, CSRHGATD_i, CTATBOTD_i, CTATSTID_i, CTATGATD_i; real MEFFTATBOTD_i, MEFFTATSTID_i, MEFFTATGATD_i; real CBBTBOTD_i, CBBTSTID_i, CBBTGATD_i, FBBTRBOTD_i, FBBTRSTID_i, FBBTRGATD_i; real STFBBTBOTD_i, STFBBTSTID_i, STFBBTGATD_i; real VBRBOTD_i, VBRSTID_i, VBRGATD_i, PBRBOTD_i, PBRSTID_i, PBRGATD_i; real VJUNREFD_i, FJUNQD_i; real phigrbot_d, phigrsti_d, phigrgat_d, phigdbot_d, phigdsti_d, phigdgat_d; real ftdbot_d, ftdsti_d, ftdgat_d, idsatbot_d, idsatsti_d, idsatgat_d; real ubibot_d, ubisti_d, ubigat_d, vbibot_d, vbisti_d, vbigat_d; real vbiinvbot_d, vbiinvsti_d, vbiinvgat_d; real one_minus_PBOT_d, one_minus_PSTI_d, one_minus_PGAT_d; real one_over_one_minus_PBOT_d, one_over_one_minus_PSTI_d, one_over_one_minus_PGAT_d; real cjobot_d, cjosti_d, cjogat_d; real qprefbot_d, qprefsti_d, qprefgat_d, qpref2bot_d, qpref2sti_d, qpref2gat_d; real wdepnulrbot_d, wdepnulrsti_d, wdepnulrgat_d, wdepnulrinvbot_d, wdepnulrinvsti_d, wdepnulrinvgat_d; real VBIRBOTinv_d, VBIRSTIinv_d, VBIRGATinv_d; real deltaEbot_d, deltaEsti_d, deltaEgat_d, atatbot_d, atatsti_d, atatgat_d; real btatpartbot_d, btatpartsti_d, btatpartgat_d; real fbbtbot_d, fbbtsti_d, fbbtgat_d; real fstopbot_d, fstopsti_d, fstopgat_d, VBRinvbot_d, VBRinvsti_d, VBRinvgat_d; real slopebot_d, slopesti_d, slopegat_d; `endif // JUNCAP_StandAlone //`LocalGlobalVars //================================================================ // Variables that are different for source and drain side junction // and have a scope larger than a single macro-call //================================================================ `ifdef JUNCAP_StandAlone real AB_i, LS_i, LG_i; real zflagbot, zflagsti, zflaggat; real VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim; // JUNCAP-express variables real xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr; // JUNCAP2-express intermediate parameters real ISATFOR1, MFOR1, ISATFOR2, MFOR2, ISATREV, MREV, m0flag; `else // JUNCAP_StandAlone real ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, AS_i, PS_i; real zflagbot_s, zflagsti_s, zflaggat_s; real VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s; // JUNCAP-express variables real xhighf1_s, expxhf1_s, xhighf2_s, expxhf2_s, xhighr_s, expxhr_s, m0flag_s; // JUNCAP2-express intermediate parameters real ISATFOR1_s, MFOR1_s, ISATFOR2_s, MFOR2_s, ISATREV_s, MREV_s; real ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, AD_i, PD_i; real zflagbot_d, zflagsti_d, zflaggat_d; real VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d; // JUNCAP-express variables real xhighf1_d, expxhf1_d, xhighf2_d, expxhf2_d, xhighr_d, expxhr_d, m0flag_d; // JUNCAP2-express intermediate parameters real ISATFOR1_d, MFOR1_d, ISATFOR2_d, MFOR2_d, ISATREV_d, MREV_d; `endif // JUNCAP_StandAlone tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_InitNQS.include0000644000175000017500000001500714163340332026204 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_InitNQS.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // ///////////////////////////////////////////////////////////////////////////// // // Computing initial (dc) values for internal nodes. // This code is independent of internal-node voltages // ///////////////////////////////////////////////////////////////////////////// Qp1_0 = 0.0; Qp2_0 = 0.0; Qp3_0 = 0.0; Qp4_0 = 0.0; Qp5_0 = 0.0; Qp6_0 = 0.0; Qp7_0 = 0.0; Qp8_0 = 0.0; Qp9_0 = 0.0; fk1 = 0.0; fk2 = 0.0; fk3 = 0.0; fk4 = 0.0; fk5 = 0.0; fk6 = 0.0; fk7 = 0.0; fk8 = 0.0; fk9 = 0.0; if (SWNQS_i != 0) begin dQis = 0.0; dQy = 0.0; dfQi = 0.0; fQi = 0.0; d2Qy = 0.0; Qp1 = 0.0; Qp2 = 0.0; Qp3 = 0.0; Qp4 = 0.0; Qp5 = 0.0; Qp6 = 0.0; Qp7 = 0.0; Qp8 = 0.0; Qp9 = 0.0; phi_p1 = 0.0; phi_p2 = 0.0; phi_p3 = 0.0; phi_p4 = 0.0; phi_p5 = 0.0; phi_p6 = 0.0; phi_p7 = 0.0; phi_p8 = 0.0; phi_p9 = 0.0; // Setting initial values for charge along the channel // from interpolated DC-solution if (xg_ac > 0) begin if (SWNQS_i == 1) begin phi_p1 = `Phiy(0.5); `PhiToQb(phi_p1,Qb_tmp) Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp; end else if (SWNQS_i == 2) begin phi_p1 = `Phiy(`oneThird); `PhiToQb(phi_p1,Qb_tmp) Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp; phi_p2 = `Phiy(`twoThirds); `PhiToQb(phi_p2,Qb_tmp) Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp; if (sigVds < 0) begin `swap(Qp1_0, Qp2_0) end end else if (SWNQS_i == 3) begin phi_p1 = `Phiy(0.25); `PhiToQb(phi_p1,Qb_tmp) Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp; phi_p2 = `Phiy(0.5); `PhiToQb(phi_p2,Qb_tmp) Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp; phi_p3 = `Phiy(0.75); `PhiToQb(phi_p3,Qb_tmp) Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp; if (sigVds < 0) begin `swap(Qp1_0, Qp3_0) end end else if (SWNQS_i == 5) begin phi_p1 = `Phiy(`oneSixth); `PhiToQb(phi_p1,Qb_tmp) Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp; phi_p2 = `Phiy(`oneThird); `PhiToQb(phi_p2,Qb_tmp) Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp; phi_p3 = `Phiy(0.5); `PhiToQb(phi_p3,Qb_tmp) Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp; phi_p4 = `Phiy(`twoThirds); `PhiToQb(phi_p4,Qb_tmp) Qp4_0 = -pd * (xg_ac - phi_p4) - Qb_tmp; phi_p5 = `Phiy(0.8333333333333333); `PhiToQb(phi_p5,Qb_tmp) Qp5_0 = -pd * (xg_ac - phi_p5) - Qb_tmp; if (sigVds < 0) begin `swap(Qp1_0, Qp5_0) `swap(Qp2_0, Qp4_0) end end else if (SWNQS_i == 9) begin phi_p1 = `Phiy(0.1); `PhiToQb(phi_p1,Qb_tmp) Qp1_0 = -pd * (xg_ac - phi_p1) - Qb_tmp; phi_p2 = `Phiy(0.2); `PhiToQb(phi_p2,Qb_tmp) Qp2_0 = -pd * (xg_ac - phi_p2) - Qb_tmp; phi_p3 = `Phiy(0.3); `PhiToQb(phi_p3,Qb_tmp) Qp3_0 = -pd * (xg_ac - phi_p3) - Qb_tmp; phi_p4 = `Phiy(0.4); `PhiToQb(phi_p4,Qb_tmp) Qp4_0 = -pd * (xg_ac - phi_p4) - Qb_tmp; phi_p5 = `Phiy(0.5); `PhiToQb(phi_p5,Qb_tmp) Qp5_0 = -pd * (xg_ac - phi_p5) - Qb_tmp; phi_p6 = `Phiy(0.6); `PhiToQb(phi_p6,Qb_tmp) Qp6_0 = -pd * (xg_ac - phi_p6) - Qb_tmp; phi_p7 = `Phiy(0.7); `PhiToQb(phi_p7,Qb_tmp) Qp7_0 = -pd * (xg_ac - phi_p7) - Qb_tmp; phi_p8 = `Phiy(0.8); `PhiToQb(phi_p8,Qb_tmp) Qp8_0 = -pd * (xg_ac - phi_p8) - Qb_tmp; phi_p9 = `Phiy(0.9); `PhiToQb(phi_p9,Qb_tmp) Qp9_0 = -pd * (xg_ac - phi_p9) - Qb_tmp; if (sigVds < 0) begin `swap(Qp1_0, Qp9_0) `swap(Qp2_0, Qp8_0) `swap(Qp3_0, Qp7_0) `swap(Qp4_0, Qp6_0) end end end // (x_g >0) end // (SWNQS_i != 0) x_sp = 0.0; x_dp = 0.0; Qp0 = 0.0; QpN = 0.0; if (SWNQS_i != 0.0) begin x_sp = x_m_ac - sigVds * 0.5 * dps_ac * inv_phit1; x_dp = x_m_ac + sigVds * 0.5 * dps_ac * inv_phit1; Qp0 = 0.0; QpN = 0.0; if (x_sp > 0) begin `PhiToQb(x_sp, QbSIGN) Qp0 = -pd * (xg_ac - x_sp) - QbSIGN; end if (x_dp > 0) begin `PhiToQb(x_dp, QbSIGN) QpN = -pd * (xg_ac - x_dp) - QbSIGN; end end tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/JUNCAP200_macrodefs.include0000644000175000017500000006756214163340332027213 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: JUNCAP200_macrodefs.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 200.6.0, April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // /////////////////////////////////////////// // // Macros and constants used in JUNCAP2 // /////////////////////////////////////////// // Other constants `define MINTEMP -2.5e2 `define vbilow 5.0e-2 `define a 2.0 `define epsch 0.1 `define dvbi 5.0e-2 `define epsav 1.0e-6 `define vbrmax 1.0e3 `define vmaxlarge 1.0e8 `define aerfc 0.29214664 `define twothirds 0.666666666666667 // Clipping values `define levelnumber 2.0e2 `define AB_cliplow 0.0 `define LS_cliplow 0.0 `define LG_cliplow 0.0 `define MULT_cliplow 0.0 `define TRJ_cliplow `MINTEMP `define IMAX_cliplow 1.0e-12 `define FREV_cliplow 1.0e1 `define FREV_cliphigh 1.0e10 `define IFACTOR_cliplow 0.0 `define CFACTOR_cliplow 0.0 `define CJORBOT_cliplow 1.0e-12 `define CJORSTI_cliplow 1.0e-18 `define CJORGAT_cliplow 1.0e-18 `define VBIR_cliplow `vbilow `define P_cliplow 5.0e-2 `define P_cliphigh 0.95 `define IDSATR_cliplow 0.0 `define CSRH_cliplow 0.0 `define XJUN_cliplow 1.0e-9 `define CTAT_cliplow 0.0 `define MEFFTAT_cliplow 1.0e-2 `define CBBT_cliplow 0.0 `define VBR_cliplow 0.1 `define PBR_cliplow 0.1 `define VJUNREF_cliplow 0.5 `define FJUNQ_cliplow 0.0 ///////////////////////////////////////////////////////////////////////////// // // Macro definitions. // // Note that because at present locally scoped variables // can only be in named blocks, the intermediate variables // used in the macros below must be explicitly declared // as variables. // ///////////////////////////////////////////////////////////////////////////// // Variable declarations of variables that need to be *local* in juncap-express initialization //`define LocalGlobalVars \ // /* declaration of variables needed in macro "calcerfcexpmtat" */ \ // real ysq, terfc, erfcpos; \ // \ // /* declaration of variables needed in hypfunction 5 */ \ // real h1, h2, h2d, h3, h4, h5; \ // \ // /* declaration of variables calculated outside macro "juncapfunction", voltage-dependent part */ \ // real idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav; \ // \ // /* declaration of variables used within macro "juncapfunction" */ \ // real tmp, id; \ // real isrh, vbi_minus_vjsrh, wsrhstep, dwsrh, wsrh, wdep, asrh; \ // real itat, btat, twoatatoverthreebtat, umaxbeforelimiting, umax, sqrtumax, umaxpoweronepointfive; \ // real wgamma, wtat, ktat, ltat, mtat, xerfc, erfctimesexpmtat, gammamax; \ // real ibbt, Fmaxr; \ // real fbreakdown; // Instance parameter dependent initialization `define JuncapInitInstance(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, vbibot, vbisti, vbigat, PBOT_i, PSTI_i, PGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \ if (idsatbot * AB_i > 0.0) begin \ vmaxbot = phitd * ln(IMAX_i / (idsatbot * AB_i) + 1.0); \ end else begin \ vmaxbot = `vmaxlarge; \ end \ if (idsatsti * LS_i > 0.0) begin \ vmaxsti = phitd * ln(IMAX_i / (idsatsti * LS_i) + 1.0); \ end else begin \ vmaxsti = `vmaxlarge; \ end \ if (idsatgat * LG_i > 0.0) begin \ vmaxgat = phitd * ln(IMAX_i / (idsatgat * LG_i) + 1.0); \ end else begin \ vmaxgat = `vmaxlarge; \ end \ VMAX = min(min(vmaxbot, vmaxsti), vmaxgat); \ `expl(VMAX * phitdinv, exp_VMAX_over_phitd) \ \ /* determination of minimum value of the relevant built-in voltages */ \ /* and determination of limiting value of conditioned voltage for BBT calculation */ \ vbibot2 = vbibot; \ vbisti2 = vbisti; \ vbigat2 = vbigat; \ pbot2 = PBOT_i; \ psti2 = PSTI_i; \ pgat2 = PGAT_i; \ vbibot2r = VBIRBOT_i; \ vbisti2r = VBIRSTI_i; \ vbigat2r = VBIRGAT_i; \ if (AB_i == 0.0) begin \ vbibot2 = vbisti + vbigat; \ pbot2 = 0.9 * min(PSTI_i, PGAT_i); \ vbibot2r = VBIRSTI_i + VBIRGAT_i; \ end \ if (LS_i == 0.0) begin \ vbisti2 = vbibot + vbigat; \ psti2 = 0.9 * min(PBOT_i, PGAT_i); \ vbisti2r = VBIRBOT_i + VBIRGAT_i; \ end \ if (LG_i == 0.0) begin \ vbigat2 = vbibot + vbisti; \ pgat2 = 0.9 * min(PBOT_i, PSTI_i); \ vbigat2r = VBIRBOT_i + VBIRSTI_i; \ end \ vbimin = min(min(vbibot2, vbisti2), vbigat2); \ vch = vbimin * `epsch; \ pmax = max(max(pbot2, psti2), pgat2); \ vfmin = vbimin * (1.0 - (pow(`a, (-1.0 / (pmax))))); \ vbbtlim = min(min(vbibot2r, vbisti2r), vbigat2r) - `dvbi; // Special power-functions `define mypower(x,power,result) \ if (power == 0.5) begin \ result = sqrt(x); \ end else begin \ result = pow(x, power); \ end `define mypower2(x,power,result) \ if (power == -1.0) begin \ result = 1.0 / (x); \ end else begin \ result = pow(x, power); \ end `define mypower3(x,power,result) \ if (power == 4.0) begin \ result = (x) * (x) * (x) * (x); \ end else begin \ result = pow(abs(x), power); \ end // Smoothing functions `define hypfunction2(x,x0,eps,hyp2) \ hyp2 = 0.5 * ((x) + (x0) - sqrt(((x) - (x0)) * ((x) - (x0)) + 4.0 * (eps) * (eps))); `define hypfunction5(x,x0,eps,hyp5) \ h1 = 4.0 * (eps) * (eps); \ h2 = (eps) / (x0); \ h2d = (x) + (eps) * h2; \ h3 = (x0) + h2d; \ h4 = (x0) - h2d; \ h5 = sqrt(h4 * h4 + h1); \ hyp5 = 2.0 * ((x) * (x0) / (h3 + h5)); // A special function used to calculate TAT-currents, // including an approximation of the erfc-function `define calcerfcexpmtat(y,m,result) \ ysq = y * y; \ if (y > 0.0) begin \ terfc = 1.0 / (1.0 + perfc * y); \ end else begin \ terfc = 1.0 / (1.0 - perfc * y); \ end \ `expl_low(-ysq + m, tmp) \ erfcpos = (`aerfc * terfc + berfc * (terfc * terfc) + cerfc * (terfc * terfc * terfc)) * tmp; \ if (y > 0.0) begin \ result = erfcpos; \ end else begin\ `expl_low(m, tmp) \ result = 2.0 * tmp - erfcpos; \ end // This is the main function of the JUNCAP2-model. It returns the current and charge // for a single diode `define juncapfunction(VAK,qpref,qpref2,vbiinv,one_minus_P,idsat,CSRH,CTAT,vbi,wdepnulr,VBIRinv,P,ftd,btatpart,atat,one_over_one_minus_P,CBBT,VBIR,wdepnulrinv,fbbt,VBR,VBRinv,PBR,fstop,slope,Ijprime,Qjprime) \ `mypower((1.0 - vj * vbiinv), one_minus_P, tmp) \ Qjprime = CFACTOR_i * (qpref * (1.0 - tmp) + qpref2 * (VAK - vj)); \ id = idsat * idmult; \ if ((CSRH == 0.0) && (CTAT == 0.0)) begin \ isrh = 0.0; \ end else begin \ vbi_minus_vjsrh = vbi-vjsrh; \ wsrhstep = 1.0 - sqrt(1.0 - two_psistar / vbi_minus_vjsrh); \ if (P == 0.5) begin \ dwsrh = 0.0; \ end else begin \ dwsrh = ((wsrhstep * wsrhstep * ln(wsrhstep) / (1.0 - wsrhstep)) + wsrhstep) * (1.0 - 2.0 * P); \ end \ wsrh = wsrhstep + dwsrh; \ `mypower(vbi_minus_vjsrh * VBIRinv, P, tmp) \ wdep = wdepnulr * tmp; \ asrh = ftd * ((zinv - 1.0) * wdep); \ isrh = CSRH * (asrh * wsrh); \ end \ if (CTAT == 0.0) begin \ itat = 0.0; \ end else begin \ btat = btatpart * ((wdep * one_minus_P) / vbi_minus_vjsrh); \ twoatatoverthreebtat = (`twothirds * atat) / btat; \ umaxbeforelimiting = twoatatoverthreebtat * twoatatoverthreebtat; \ umax = sqrt(umaxbeforelimiting * umaxbeforelimiting / (umaxbeforelimiting * umaxbeforelimiting + 1.0)); \ sqrtumax = sqrt(abs(umax)); \ umaxpoweronepointfive = umax * sqrtumax; \ `mypower2((1.0 + btat * umaxpoweronepointfive), (-P * one_over_one_minus_P), wgamma) \ wtat = wsrh * wgamma / (wsrh + wgamma); \ ktat = sqrt(0.375 * (btat / sqrtumax)); \ ltat = 2.0 * (twoatatoverthreebtat * sqrtumax) - umax; \ mtat = atat * twoatatoverthreebtat * sqrtumax - atat * umax + 0.5 * (btat * umaxpoweronepointfive); \ xerfc = (ltat - 1.0) * ktat; \ `calcerfcexpmtat(xerfc, mtat, erfctimesexpmtat) \ gammamax = `SQRTPI * 0.5 * (atat * erfctimesexpmtat / ktat); \ itat = CTAT * (asrh * gammamax * wtat); \ end \ if (CBBT == 0.0) begin \ ibbt = 0.0; \ end else begin \ `mypower(((VBIR - vbbt) * VBIRinv), P, tmp) \ Fmaxr = one_over_one_minus_P * ((VBIR - vbbt) * wdepnulrinv / tmp); \ `expl(-fbbt / Fmaxr, tmp) \ ibbt = CBBT * (VAK * Fmaxr * Fmaxr * tmp); \ end \ if (VBR > `vbrmax) begin \ fbreakdown = 1.0; \ end else begin \ if (vav > -alphaav * VBR) begin \ `mypower3(vav * VBRinv, PBR, tmp) \ fbreakdown = 1.0 / (1.0 - tmp); \ end else begin \ fbreakdown = fstop + (vav + alphaav * VBR) * slope; \ end \ end \ Ijprime = IFACTOR_i * (id + isrh + itat + ibbt) * fbreakdown; // The following code is written as a macro because the naming of the instance parameters is // different for JUNCAP2 stand-alone and JUNCAP2-in-PSP: AB, LS, LG for JUNCAP2 stand-alone, // ABSOURCE, LSSOURCE, LGSOURCE for source junction in PSP and ABDRAIN, LSDRAIN, LGDRAIN for // drain junction in PSP `define juncapcommon(V, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ vbbt = 0.0; \ two_psistar = 0.0; \ if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \ `hypfunction5(V, vfmin, vch, vj) \ if (V < VMAX) begin \ `expl(0.5 * (V * phitdinv), zinv) \ idmult = zinv * zinv; \ end else begin \ idmult = (1.0 + (V - VMAX) * phitdinv) * exp_VMAX_over_phitd; \ zinv = sqrt(idmult); \ end \ idmult = idmult - 1.0; \ z = 1.0 / zinv; \ if (V > 0.0) begin \ two_psistar = 2.0 * (phitd * ln(2.0 + z + sqrt((z + 1.0) * (z + 3.0)))); \ end else begin \ two_psistar = -V + 2.0 * (phitd * ln(2.0 * zinv + 1.0 + sqrt((1.0 + zinv) * (1.0 + 3.0 * zinv)))); \ end \ vjlim = vbimin - two_psistar; \ `hypfunction2(V, vjlim, phitd, vjsrh) \ `hypfunction2(V, vbbtlim, phitr, vbbt) \ `hypfunction2(V, 0.0, `epsav, vav) \ end \ if ((AB_i) == 0.0) begin \ ijunbot = 0.0; \ qjunbot = 0.0; \ end else begin \ `juncapfunction(V, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, ijunbot, qjunbot) \ end \ if ((LS_i) == 0.0) begin \ ijunsti = 0.0; \ qjunsti = 0.0; \ end else begin \ `juncapfunction(V, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, ijunsti, qjunsti) \ end \ if ((LG_i) == 0.0) begin \ ijungat = 0.0; \ qjungat = 0.0; \ end else begin \ `juncapfunction(V, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, ijungat, qjungat) \ end //============================================================================================================ // JUNCAP-express // // The macros below are used in the express-version of JUNCAP2 //============================================================================================================ `define relerr 1.0e-3 `define P1(x) ((x) + 1.0) `define expll(x, xlow, expxlow, xhigh, expxhigh) \ ((x) < (xlow)) ? (expxlow) / `P1((xlow) - (x)) : (((x) > (xhigh)) ? (expxhigh) * `P1((x) - (xhigh)) : exp(x)) // The "JuncapExpressInit"-macro below is split into three parts, as some verilog-A compilers cannot handle // macros beyond a certain size. Moreover, it is useful to limit the list of input and output variables. // Part 1 `define JuncapExpressInit1(AB_i, LS_i, LG_i, VJUNREF_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \ FRACNA = 0.4; \ FRACNB = 0.65; \ FRACI = 0.8; \ /* Sample voltages */ \ V1 = -FRACNA * VJUNREF_i; \ V2 = -FRACNB * VJUNREF_i; \ V3 = -FRACI * VJUNREF_i; \ V4 = 0.1; \ V5 = 0.2; \ /* evaluate full JUNCAP-model at five voltages */ \ `juncapcommon(V1, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ I1 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \ `juncapcommon(V2, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ I2 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \ `juncapcommon(V3, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ I3 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; // Part 2 `define JuncapExpressInit2(AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim) \ /* forward currents */ \ `juncapcommon(V4, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ I4 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; \ `juncapcommon(V5, AB_i, LS_i, LG_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX, exp_VMAX_over_phitd, vbimin, vch, vfmin, vbbtlim, ijunbot, qjunbot, ijunsti, qjunsti, ijungat, qjungat) \ I5 = AB_i * ijunbot + LS_i * ijunsti + LG_i * ijungat; // Part 3 `define JuncapExpressInit3(AB_i, LS_i, LG_i, idsatbot, idsatsti, idsatgat, ISATFOR1, MFOR1, ISATFOR2, MFOR2, ISATREV, MREV, m0flag) \ /* compute internal parameters from these five (I,V)-values */ \ ISATFOR1 = AB_i * idsatbot + LS_i * idsatsti + LG_i * idsatgat; \ I4_cor = I4 - ISATFOR1 * (exp(V4 * phitdinv * MFOR1) - 1.0); \ I5_cor = I5 - ISATFOR1 * (exp(V5 * phitdinv * MFOR1) - 1.0); \ if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \ if ((I4 > 0.0) && (I5 > 0.0)) begin \ if ((((I4_cor / I4) > `relerr) || ((I5_cor / I5) > `relerr)) && (I4_cor > 0.0) && (I5_cor > 0.0) && (I5_cor > I4_cor)) begin \ alphaje = I4_cor / I5_cor; \ MFOR2 = phitd * ln(alphaje) / (V4 - V5); \ ISATFOR2 = I4_cor / (exp(V4 * phitdinv * MFOR2) - 1.0); \ end \ end \ I1_cor = I1 - ISATFOR1 * (exp(V1 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V1 * phitdinv * MFOR2) - 1.0); \ I2_cor = I2 - ISATFOR1 * (exp(V2 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V2 * phitdinv * MFOR2) - 1.0); \ I3_cor = I3 - ISATFOR1 * (exp(V3 * phitdinv * MFOR1) - 1.0) - ISATFOR2 * (exp(V3 * phitdinv * MFOR2) - 1.0); \ if ((I1 < 0.0) && (I2 < 0.0) && (I3 < 0.0)) begin \ if ((((I1_cor / I1) > `relerr) || ((I2_cor / I2) > `relerr) || ((I3_cor / I3) > `relerr)) \ && (I1_cor < 0.0) && (I2_cor < 0.0) && (I3_cor < 0.0)) begin \ alphaje = I1_cor / I2_cor; \ m0_rev = -phitd * ln(alphaje) / (V1 - V2); /* zeroth order approximation */ \ tt0 = V2 / (V2 - V1); \ tt1 = phitd * (alphaje - 1.0) * (pow(alphaje, tt0) - 1.0); \ tt0 = V1 / (V1 - V2); \ tt2 = pow(alphaje, tt0) * (V2 - V1) + alphaje * V1 - V2; \ mcor_rev = tt1 / tt2; /* first order Newton correction */ \ MREV = m0_rev + mcor_rev; \ if (abs(V3 * phitdinv * MREV) < 1.0e-6) begin \ /* Taylor approximation needed */ \ /* Note: ISATREV and MREV have different meaning in this situation!! */ \ m0flag = 1.0; \ ISATREV = I3_cor * (1.0 / V3 + 0.5 * phitdinv * MREV); \ MREV = -0.5 * I3_cor * MREV * phitdinv / V3; \ end else begin \ m0flag = 0.0; \ ISATREV = -I3_cor / (exp(-V3 * phitdinv * MREV) - 1.0); \ end \ end \ end \ end // Part 4 `define JuncapExpressInit4(AB_i, LS_i, LG_i, FJUNQ_i, cjobot, cjosti, cjogat, zflagbot, zflagsti, zflaggat) \ /* charge model initialization */ \ zfrac = FJUNQ_i * (AB_i * cjobot + LS_i * cjosti + LG_i * cjogat); \ if ((AB_i * cjobot) <= zfrac) begin \ zflagbot = 0.0; \ end \ if ((LS_i * cjosti) <= zfrac) begin \ zflagsti = 0.0; \ end \ if ((LG_i * cjogat) <= zfrac) begin \ zflaggat = 0.0; \ end // Part 5 `define JuncapExpressInit5(AB_i, LS_i, LG_i, ISATFOR1, ISATFOR2, ISATREV, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr) \ /* calculate limits beyond which exponentials are linearly extrapolated */ \ if ( !( ((AB_i) == 0.0) && ((LS_i) == 0.0) && ((LG_i) == 0.0) ) ) begin \ xhighf1 = ln(0.5 * IMAX_i / (ISATFOR1 + 1.0e-21)); \ xhighf2 = ln(0.5 * IMAX_i / (ISATFOR2 + 1.0e-21)); \ xhighr = ln(0.5 * IMAX_i / (abs(ISATREV) + 1.0e-21)); \ end \ xhighf1 = min(xhighf1, `se05); \ expxhf1 = exp(xhighf1); \ xhighf2 = min(xhighf2, `se05); \ expxhf2 = exp(xhighf2); \ xhighr = min(xhighr, `se05); \ expxhr = exp(xhighr); `define JuncapExpressCurrent(V, MFOR1, ISATFOR1, MFOR2, ISATFOR2, MREV, ISATREV, m0flag, xhighf1, expxhf1, xhighf2, expxhf2, xhighr, expxhr, ijun) \ tm0 = V * phitdinv * MFOR1; \ tm1 = `expll(tm0, -`se05, `ke05, xhighf1, expxhf1); \ ijunfor1 = ISATFOR1 * (tm1 - 1.0); \ tm0 = V * phitdinv * MFOR2; \ tm1 = `expll(tm0, -`se05, `ke05, xhighf2, expxhf2); \ ijunfor2 = ISATFOR2 * (tm1 - 1.0); \ ijunrev = 0.0; \ if (m0flag > 0.0) begin \ ijunrev = V * (ISATREV + V * MREV); \ end else begin \ tm0 = -V * phitdinv * MREV; \ tm1 = `expll(tm0, -`se05, `ke05, xhighr, expxhr); \ ijunrev = -ISATREV * (tm1 - 1.0); \ end \ ijun = ijunfor1 + ijunfor2 + ijunrev; `define JuncapExpressCharge(V, AB_i, LS_i, LG_i, qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat, vbiinvbot, vbiinvsti, vbiinvgat, one_minus_PBOT, one_minus_PSTI, one_minus_PGAT, vfmin, vch, zflagbot, zflagsti, zflaggat, qjunbot, qjunsti, qjungat) \ tmpv = 0.0; \ vjv = 0.0; \ `hypfunction5(V, vfmin, vch, vjv) \ if (zflagbot > 0.5) begin \ `mypower((1.0 - vjv * vbiinvbot), one_minus_PBOT, tmpv) \ qjunbot = qprefbot * (1.0 - tmpv) + qpref2bot * (V - vjv); \ end \ if (zflagsti > 0.5) begin \ `mypower((1.0 - vjv * vbiinvsti), one_minus_PSTI, tmpv) \ qjunsti = qprefsti * (1.0 - tmpv) + qpref2sti * (V - vjv); \ end \ if (zflaggat > 0.5) begin \ `mypower((1.0 - vjv * vbiinvgat), one_minus_PGAT, tmpv) \ qjungat = qprefgat * (1.0 - tmpv) + qpref2gat * (V - vjv); \ end tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_macrodefs.include0000644000175000017500000010630214163340332026661 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_macrodefs.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // ///////////////////////////////////////////// // // Macros and constants used in PSP // ///////////////////////////////////////////// // Explicit Gmin `define GMIN $simparam("gmin",1e-15) `define PGIVEN(p) $param_given(p) `define PMOS -1 `define NMOS +1 // Some functions `define MINA(x,y,a) 0.5*((x)+(y)-sqrt(((x)-(y))*((x)-(y))+(a))) `define MAXA(x,y,a) 0.5*((x)+(y)+sqrt(((x)-(y))*((x)-(y))+(a))) `define MNE(x,y,a,mne) \ tme1 = 4.0 - (a); \ tme2 = (x) + (y); \ mne = 2.0 / tme1 * (tme2 - sqrt(tme2 * tme2 - tme1 * (x) * (y))); `define MXE(x,y,a,mxe) \ tme1 = 4.0 - (a); \ tme2 = (x) + (y); \ mxe = 2.0 / tme1 * (tme2 + sqrt(tme2 * tme2 - tme1 * (x) * (y))); // Physical constants `define QMN 5.951993 `define QMP 7.448711 // Other constants (PSP-mos) `define DELTA1 0.02 `define invSqrt2 7.0710678118654746e-01 `define oneSixth 1.6666666666666667e-01 `define LEN 1.0e-6 `define WEN 1.0e-6 ///////////////////////////////////////////////////////////////////////////// // // Macro definitions. // // Note that because at present locally scoped variables // can only be in named blocks, the intermediate variables // used in the macros below must be explicitly declared // as variables in the main code. // ///////////////////////////////////////////////////////////////////////////// // Function for parameter definition in the case of separate calculation of charge model in saturation // -------------------------------------------------------------------------------------------------------------- `define DefACparam(param_i,param_dc,param_ac) \ param_i = (param_dc); \ if ($param_given(param_ac) == 1) \ param_i = (param_ac); // sigma function used in surface potential and other calculations // -------------------------------------------------------------------------------------------------------------- // Note: one call uses expressions for arguments so parentheses around the arguments in the expressions are necessary `define sigma(a,c,tau,eta,y) \ nu = (a) + (c); \ mutau = nu * nu + (tau) * (0.5 * ((c) * (c)) - (a)); \ y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a))); // modified version of sigma function, which takes 4 arguments // -------------------------------------------------------------------------------------------------------------- `define sigma2(a,b,c,tau,eta,y) \ nu = (a) + (c); \ mutau = (nu) * (nu) + (tau) * (0.5 * ((c) * (c)) - (a) * (b)); \ y = (eta) + (a) * nu * (tau) / (mutau + (nu / mutau) * (tau) * (tau) * (c) * ((c) * (c) * `oneThird - (a) * (b))); // sp_s function: surface potential calculation // -------------------------------------------------------------------------------------------------------------- `define sp_s(sp,xg,xn,delta) \ if (abs(xg) <= margin) begin \ SP_S_temp1 = inv_xi * inv_xi * `oneSixth * `invSqrt2; \ sp = xg * inv_xi * (1.0 + xg * (1.0 - (delta)) * Gf * SP_S_temp1); \ end else begin \ if (xg < -margin) begin \ SP_S_yg = -xg; \ SP_S_ysub = 1.25 * (SP_S_yg * inv_xi); \ SP_S_eta = 0.5 * (SP_S_ysub + 10 - sqrt((SP_S_ysub - 6.0) * (SP_S_ysub - 6.0) + 64.0)); \ SP_S_temp = SP_S_yg - SP_S_eta; \ SP_S_a = SP_S_temp * SP_S_temp + Gf2*(SP_S_eta + 1.0);\ SP_S_c = 2.0 * SP_S_temp - Gf2; \ SP_S_tau = -SP_S_eta + ln(SP_S_a * inv_Gf2); \ `sigma(SP_S_a, SP_S_c, SP_S_tau, SP_S_eta, SP_S_y0) \ `expl_high(SP_S_y0, SP_S_delta0) \ SP_S_delta1 = 1.0 / SP_S_delta0; \ SP_S_temp = 1.0 / (2.0 + SP_S_y0 * SP_S_y0); \ SP_S_xi0 = SP_S_y0 * SP_S_y0 * SP_S_temp; \ SP_S_xi1 = 4.0 * (SP_S_y0 * SP_S_temp * SP_S_temp); \ SP_S_xi2 = (8.0 * SP_S_temp - 12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \ SP_S_temp = SP_S_yg - SP_S_y0; \ SP_S_temp1 = (delta) * SP_S_delta1; \ SP_S_pC = 2.0 * SP_S_temp + Gf2 * (SP_S_delta0 - 1.0 - SP_S_temp1 + (delta) * (1.0 - SP_S_xi1)); \ SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta0 - SP_S_y0 - 1.0 + SP_S_temp1 + (delta) * (SP_S_y0 - 1.0 - SP_S_xi0)); \ SP_S_temp = 2.0 - Gf2 * (SP_S_delta0 + SP_S_temp1 - (delta) * SP_S_xi2); \ SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \ sp = -SP_S_y0 - 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp))); \ end else begin \ SP_xg1 = 1.0 / (1.25 + Gf * 7.324648775608221e-001); \ SP_S_A_fac= (xi * 1.25 * SP_xg1 - 1.0) * SP_xg1; \ SP_S_xbar = xg * inv_xi * (1.0 + SP_S_A_fac * xg); \ `expl_low(-SP_S_xbar, SP_S_temp) \ SP_S_w = 1.0 - SP_S_temp; \ SP_S_x1 = xg + Gf2 * 0.5 - Gf * sqrt(xg + Gf2 * 0.25 - SP_S_w); \ SP_S_bx = (xn) + 3.0; \ SP_S_eta = `MINA(SP_S_x1, SP_S_bx, 5.0) - 0.5 * (SP_S_bx - sqrt(SP_S_bx * SP_S_bx + 5.0)); \ SP_S_temp = xg - SP_S_eta; \ SP_S_temp1= exp(-SP_S_eta); \ SP_S_temp2= 1.0 / (2.0 + SP_S_eta * SP_S_eta); \ SP_S_xi0 = SP_S_eta * SP_S_eta * SP_S_temp2; \ SP_S_xi1 = 4.0 * (SP_S_eta * SP_S_temp2 * SP_S_temp2); \ SP_S_xi2 = (8.0 * SP_S_temp2 - 12.0 * SP_S_xi0) * SP_S_temp2 * SP_S_temp2; \ SP_S_a = max(1.0e-40, SP_S_temp * SP_S_temp - Gf2 * (SP_S_temp1 + SP_S_eta - 1.0 - (delta) * (SP_S_eta + 1.0 + SP_S_xi0))); \ SP_S_b = 1.0 - 0.5 * (Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2)); \ SP_S_c = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_temp1 - (delta) * (1.0 + SP_S_xi1)); \ SP_S_tau = (xn) - SP_S_eta + ln(SP_S_a / Gf2); \ `sigma2(SP_S_a, SP_S_b, SP_S_c, SP_S_tau, SP_S_eta, SP_S_x0) \ if (SP_S_x0 < `se05) begin \ SP_S_delta0 = exp(SP_S_x0); \ SP_S_delta1 = 1.0 / SP_S_delta0; \ SP_S_delta0 = (delta) * SP_S_delta0; \ end else begin \ if (SP_S_x0 > (xn) - `se05) begin \ SP_S_delta0 = exp(SP_S_x0 - (xn)); \ SP_S_delta1 = (delta) / SP_S_delta0; \ end else begin \ SP_S_delta0 = `ke05 / `P3((xn) - SP_S_x0 - `se05); \ SP_S_delta1 = `ke05 / `P3(SP_S_x0 - `se05); \ end \ end \ SP_S_temp = 1.0 / (2.0 + SP_S_x0 * SP_S_x0); \ SP_S_xi0 = SP_S_x0 * SP_S_x0 * SP_S_temp; \ SP_S_xi1 = 4.0 * (SP_S_x0 * SP_S_temp * SP_S_temp); \ SP_S_xi2 = (8.0 * SP_S_temp - 12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \ SP_S_temp = xg - SP_S_x0; \ SP_S_pC = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_delta1 + SP_S_delta0 - (delta) * (1.0 + SP_S_xi1)); \ SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta1 + SP_S_x0 - 1.0 + SP_S_delta0 - (delta) * (SP_S_x0 + 1.0 + SP_S_xi0)); \ SP_S_temp = 2.0 - Gf2 * (SP_S_delta1 + SP_S_delta0 - (delta) * SP_S_xi2); \ SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \ sp = SP_S_x0 + 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp))); \ end \ end // sp_s_d function: surface potential calculation at drain (subset of function sp_s) // -------------------------------------------------------------------------------------------------------------- `define sp_s_d(sp,xg,xn,delta) \ if (abs(xg) <= margin) begin \ SP_S_temp1 = inv_xi * inv_xi * `oneSixth * `invSqrt2; \ sp = xg * inv_xi * (1.0 + xg * (1.0 - (delta)) * Gf * SP_S_temp1); \ end else begin \ SP_S_bx = (xn) + 3; \ SP_S_eta = `MINA(SP_S_x1, SP_S_bx, 5.0) - 0.5 * (SP_S_bx - sqrt(SP_S_bx * SP_S_bx + 5.0)); \ SP_S_temp = xg - SP_S_eta; \ SP_S_temp1= exp(-SP_S_eta); \ SP_S_temp2= 1.0 / (2.0 + SP_S_eta * SP_S_eta); \ SP_S_xi0 = SP_S_eta * SP_S_eta * SP_S_temp2; \ SP_S_xi1 = 4.0 * (SP_S_eta * SP_S_temp2 * SP_S_temp2); \ SP_S_xi2 = (8.0 * SP_S_temp2 - 12.0 * SP_S_xi0) * SP_S_temp2 * SP_S_temp2; \ SP_S_a = max(1.0e-40, SP_S_temp * SP_S_temp - Gf2 * (SP_S_temp1 + SP_S_eta - 1.0 - (delta) * (SP_S_eta + 1.0 + SP_S_xi0))); \ SP_S_b = 1.0 - 0.5 * (Gf2 * (SP_S_temp1 - (delta) * SP_S_xi2)); \ SP_S_c = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_temp1 - (delta) * (1.0 + SP_S_xi1)); \ SP_S_tau = (xn) - SP_S_eta + ln(SP_S_a / Gf2); \ `sigma2(SP_S_a, SP_S_b, SP_S_c, SP_S_tau, SP_S_eta, SP_S_x0) \ if (SP_S_x0 < `se05) begin \ SP_S_delta0 = exp(SP_S_x0); \ SP_S_delta1 = 1.0 / SP_S_delta0; \ SP_S_delta0 = (delta) * SP_S_delta0; \ end else begin \ if (SP_S_x0 > (xn) - `se05) begin \ SP_S_delta0 = exp(SP_S_x0 - (xn)); \ SP_S_delta1 = (delta) / SP_S_delta0; \ end else begin \ SP_S_delta0 = `ke05 / `P3((xn) - SP_S_x0 - `se05); \ SP_S_delta1 = `ke05 / `P3(SP_S_x0 - `se05); \ end \ end \ SP_S_temp = 1.0 / (2.0 + SP_S_x0 * SP_S_x0); \ SP_S_xi0 = SP_S_x0 * SP_S_x0 * SP_S_temp; \ SP_S_xi1 = 4.0 * (SP_S_x0 * SP_S_temp * SP_S_temp); \ SP_S_xi2 = (8.0 * SP_S_temp-12.0 * SP_S_xi0) * SP_S_temp * SP_S_temp; \ SP_S_temp = xg - SP_S_x0; \ SP_S_pC = 2.0 * SP_S_temp + Gf2 * (1.0 - SP_S_delta1 + SP_S_delta0 - (delta) * (1.0 + SP_S_xi1)); \ SP_S_qC = SP_S_temp * SP_S_temp - Gf2 * (SP_S_delta1 + SP_S_x0 - 1.0 + SP_S_delta0 - (delta) * (SP_S_x0 + 1.0 + SP_S_xi0)); \ SP_S_temp = 2.0 - Gf2*(SP_S_delta1+SP_S_delta0-(delta)*SP_S_xi2); \ SP_S_temp = SP_S_pC * SP_S_pC - 2.0 * (SP_S_qC * SP_S_temp); \ sp = SP_S_x0 + 2.0 * (SP_S_qC / (SP_S_pC + sqrt(SP_S_temp)));\ end // sp_ovInit function: surface potential calculation for the overlap regions initialization // -------------------------------------------------------------------------------------------------------------- `define sp_ovInit(GOV, GOV2, SP_OV_eps2, SP_OV_a, SP_OV_delta1) \ inv_GOV = 1.0 / GOV; \ SP_OV_eps = 3.1 * GOV + 8.5; \ SP_OV_eps2 = SP_OV_eps * SP_OV_eps; \ SP_OV_delta = 0.5 * SP_OV_eps; \ if (inv_GOV < 0.06) begin \ SP_OV_a = 64.0 * inv_GOV; \ end else begin \ if (inv_GOV <= 0.45) begin \ SP_OV_a = 22.0 * inv_GOV + 3.0; \ end else begin \ if (inv_GOV <= 1.6) begin \ SP_OV_a = -7.2 * inv_GOV + 15.5; \ end else begin \ SP_OV_a = GOV; \ end \ end \ end \ SP_OV_delta1 = SP_OV_delta + GOV2 * 0.5 - GOV * sqrt(SP_OV_delta + GOV2 * 0.25 + SP_OV_a); // qi_edge charge calculation for the edge transistor // -------------------------------------------------------------------------------------------------------------- `define qi_edge(qieff_edge,xg_edge,xn_edge) \ Q_EDGE_xsth = xbedge + xn_edge; \ Q_EDGE_xth0 = Q_EDGE_xsth + Gfedge * sqrt(Q_EDGE_xsth); \ Q_EDGE_xth = Q_EDGE_xth0 + dxthedge; \ Q_EDGE_n = 1.0 + Gfedge / (2.0 * sqrt(Q_EDGE_xsth)); \ Q_EDGE_n_inv = 1.0 / Q_EDGE_n; \ Q_EDGE_xgt = xg_edge - Q_EDGE_xth; \ if (Q_EDGE_xgt > -12.0) begin \ Q_EDGE_xgt0 = Q_EDGE_xgt + lnGfedge2 - 1.0; \ Q_EDGE_xgt0e = 0.5 * (Q_EDGE_xgt0 + sqrt(Q_EDGE_xgt0 * Q_EDGE_xgt0 + 10.0)); \ Q_EDGE_qi0si = Q_EDGE_xgt - Q_EDGE_n * ln(Q_EDGE_xgt0e) + lnGfedge2; \ Q_EDGE_qi0 = 0.5 * (Q_EDGE_qi0si + sqrt(Q_EDGE_qi0si * Q_EDGE_qi0si + 2.0)); \ `expl_high((Q_EDGE_xgt - Q_EDGE_qi0), Q_EDGE_exp_x) \ Q_EDGE_d0 = Gfedge2 * Q_EDGE_exp_x; \ Q_EDGE_d0p = pow(Q_EDGE_d0, Q_EDGE_n_inv); \ Q_EDGE_sqerr = Q_EDGE_n * Q_EDGE_n + (2.0 * (Q_EDGE_qi0 + Q_EDGE_n) - Q_EDGE_d0p) * Q_EDGE_d0p; \ Q_EDGE_errq = Q_EDGE_n * ((sqrt(Q_EDGE_sqerr) - Q_EDGE_n) / Q_EDGE_d0p - 1.0); \ qieff_edge = Q_EDGE_qi0 - Q_EDGE_errq; \ end else begin \ `expl_low((Q_EDGE_n_inv * (Q_EDGE_xgt + lnGfedge2)), qieff_edge) \ end // CollapsableR macro: used for parasitic resistances // -------------------------------------------------------------------------------------------------------------- // Note: if R=0, the Verilog-A compiler should recognize that the corresponding nodes can be collapsed `define CollapsableR(G, R, SN, N1, N2, Rname) \ if ((R) > 0.0) begin \ I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \ /* line below can be removed if compiler issue occurs */ \ I(N1, N2) <+ white_noise(MULT_i * SN, Rname); \ end else begin \ V(N1, N2) <+ 0.0; \ end //ngspice-adms: can't node collapse `define NonCollapsableR(G, R, SN, N1, N2, Rname) \ I(N1, N2) <+ MULT_i * (G) * V(N1, N2); \ I(N1, N2) <+ white_noise(MULT_i * SN, Rname); // Local variable declaration (used in SPcalc_dc/SPcalc_ac sections, PSP103_SPCalculation.include and SP macro) // -------------------------------------------------------------------------------------------------------------- //`define SPcalcLocalVarDecl \ // real phib, G_0, Vsbstar, cfloc, thesatloc, axloc, alploc; \ // real Vsbx, xg, Dnsub, Gf, Gf2, inv_Gf2, xi, inv_xi, Ux, xn_s, delta_ns, margin, x_s, delta_1s, xi0s, xi1s; \ // real xi2s, Es, Ds, Ps, Rxcor, xgs, qis, qbs, rhob, GR, Eeffm, Mutmp, Gmob, xitsb, wsat, thesat1, phi_inf; \ // real ysat, za, Phi_0, asat, Phi_2, Phi_0_2, Phi0_Phi2, Phi_sat, Vdse, Udse, xn_d, k_ds, delta_nd, x_d, x_ds; \ // real pC, qC, dps, xi0d, Ed, Dd, x_m, Em, D_bar, Dm, Pm, xgm, eta_p, sqm, alpha, d0, x_pm, p_pd, q_pd, xi_pd; \ // real u_pd, km, km0, qim, qim1, qbm, qeff, qeff1, s1, dL, GdL, Gmob_dL, zsat, Gvsat, Gvsatinv, Voxm, alpha1, H; \ // real SP_S_temp, SP_S_temp1, SP_S_temp2; \ // real SP_S_yg, SP_S_ysub, SP_S_eta, SP_S_a, SP_S_c, SP_S_tau, SP_S_y0, SP_S_delta0, SP_S_delta1, SP_S_xi0; \ // real SP_S_xi1, SP_S_xi2, SP_S_pC, SP_S_qC, SP_xg1, SP_S_A_fac, SP_S_xbar, SP_S_w, SP_S_x1, SP_S_bx, SP_S_b; \ // real SP_S_x0; // TempInitialize macro: initialize the temperature dependent variables // -------------------------------------------------------------------------------------------------------------- `define TempInitialize \ TKD_sq = TKD * TKD; \ delT = TKD - TKR; \ rTn = TKR / TKD; \ ln_rTn = ln(rTn); \ phit = TKD * `KBOL / `QELE; \ inv_phit = 1.0 / phit; \ Eg = 1.179 - 9.025e-5 * TKD - 3.05e-7 * TKD_sq; \ phibFac = (1.045 + 4.5e-4 * TKD) * (0.523 + 1.4e-3 * TKD - 1.48e-6 * TKD_sq) * TKD_sq / 9.0E4; \ phibFac = `MAX(phibFac, 1.0E-3); \ \ /* parameter for white noise of parasitic resistances */ \ nt0 = 4.0 * `KBOL * TKD; // TempScaling macro: calculation of temperature dependent variables // -------------------------------------------------------------------------------------------------------------- `define TempScaling \ phib_dc = Eg + DPHIB_i + 2.0 * phit * ln(NEFF_i * pow(phibFac, -0.75) * 4.0e-26); \ phib_dc = `MAX(phib_dc, 5.0E-2); \ G_0_dc = sqrt(2.0 * `QELE * NEFF_i * EPSSI * inv_phit) / CoxPrime; \ \ /* Poly-silicon depletion */ \ kp = 0.0; \ np = 0.0; \ if (NP_i > 0.0) begin \ arg2max = 8.0e7 / tox_sq; \ np = `MAX(NP_i, arg2max); \ np = `MAX(5.0e24, np); \ kp = 2.0 * CoxPrime * CoxPrime * phit / (`QELE * np * EPSSI); \ end \ \ /* QM corrections */ \ qlim2 = 100.0 * phit * phit; \ if (QMC_i > 0.0) begin \ qb0 = sqrt(phit * G_0_dc * G_0_dc * phib_dc); \ dphibq = 0.75 * qq * pow(qb0, `twoThirds); \ phib_dc = phib_dc + dphibq; \ G_0_dc = G_0_dc * (1.0 + 2.0 * `twoThirds * dphibq / qb0); \ end \ sqrt_phib_dc = sqrt(phib_dc); \ phix_dc = 0.95 * phib_dc; \ aphi_dc = 0.0025 * phib_dc * phib_dc; \ bphi_dc = aphi_dc; \ phix2 = 0.5 * sqrt(bphi_dc); \ phix1_dc = `MINA(phix_dc - phix2, 0.0, aphi_dc); \ alpha_b = 0.5 * (phib_dc + Eg); \ us1 = sqrt(VSBNUD_i + phib_dc) - sqrt_phib_dc; \ us21 = sqrt(VSBNUD_i + DVSBNUD_i + phib_dc) - sqrt_phib_dc - us1; \ \ /* Additional variables for separate surface potential calculation for CV */ \ phib_ac = Eg + DPHIB_i + DELVTAC_i + 2.0 * phit * ln(NEFFAC_i * pow(phibFac, -0.75) * 4.0e-26); \ phib_ac = `MAX(phib_ac, 5.0E-2); \ G_0_ac = sqrt(2.0 * `QELE * NEFFAC_i * EPSSI * inv_phit) / CoxPrime; \ \ if (QMC_i > 0.0) begin \ qb0 = sqrt(phit * G_0_ac * G_0_ac * phib_ac); \ dphibq = 0.75 * qq * pow(qb0, `twoThirds); \ phib_ac = phib_ac + dphibq; \ G_0_ac = G_0_ac * (1.0 + 2.0 * `twoThirds * dphibq / qb0); \ end \ \ phix_ac = 0.95 * phib_ac; \ aphi_ac = 0.0025 * phib_ac * phib_ac; \ bphi_ac = aphi_ac; \ phix2 = 0.5 * sqrt(bphi_ac); \ phix1_ac = `MINA(phix_ac - phix2, 0.0, aphi_ac); \ \ /* Temperature scaling of parameters*/ \ VFB_T = VFB_i + STVFB_i * delT * (1.0 + ST2VFB_i * delT)+ DELVTO_i; \ \ /* Interface states parameters*/ \ tf_ct = exp(STCT_i * ln_rTn); \ CT_T = CT_i * tf_ct; \ CTG_T = CTG_i / rTn; \ \ /* Mobility parameters */ \ tf_bet = exp(STBET_i * ln_rTn); \ BETN_T = BETN_i * tf_bet; \ BET_i = FACTUO_i * BETN_T * CoxPrime; \ THEMU_T = THEMU_i * exp(STTHEMU_i * ln_rTn); \ tf_mue = exp(STMUE_i * ln_rTn); \ MUE_T = MUE_i * tf_mue; \ THECS_T = THECS_i * exp(STTHECS_i * ln_rTn); \ tf_cs = exp(STCS_i * ln_rTn); \ CS_T = CS_i * tf_cs; \ tf_xcor = exp(STXCOR_i * ln_rTn); \ XCOR_T = XCOR_i * tf_xcor; \ \ /* Series resistance */ \ tf_ther = exp(STRS_i * ln_rTn); \ RS_T = RS_i * tf_ther; \ THER_i = 2.0 * BET_i * RS_T; \ \ /* Velocity saturation */ \ tf_thesat = exp(STTHESAT_i * ln_rTn); \ THESAT_T = THESAT_i * tf_thesat; \ THESATAC_T = THESATAC_i * tf_thesat; \ \ /* Impact ionization */ \ A2_T = A2_i * exp(-STA2_i * ln_rTn); \ \ /* Noise */ \ nt = FNT_i * 4.0 * `KBOL * TKD; \ Sfl_prefac = phit * phit * BET_i / Cox_over_q; \ \ /* Edge transistor */ \ if ((SWEDGE_i != 0.0) && (BETNEDGE_i > 0.0)) begin \ VFBEDGE_T = VFBEDGE_i + STVFBEDGE_i * delT + DELVTOEDGE_i; \ tf_betedge = exp(STBETEDGE_i * ln_rTn); \ BETNEDGE_T = BETNEDGE_i * tf_betedge; \ BETEDGE_i = FACTUOEDGE_i * BETNEDGE_T * CoxPrime; \ phit0edge = phit * (1.0 + CTEDGE_i * rTn); \ phibedge = Eg + DPHIBEDGE_i + 2.0 * phit0edge * ln(NEFFEDGE_i * pow(phibFac, -0.75) * 4.0e-26); \ phibedge = `MAX(phibedge, 5.0E-2); \ Gfedge = sqrt(2.0 * `QELE * NEFFEDGE_i * EPSSI * inv_phit) / CoxPrime; \ Gfedge2 = Gfedge * Gfedge; \ lnGfedge2 = ln(Gfedge2); \ phixedge = 0.95 * phibedge; \ aphiedge = 0.0025 * phibedge * phibedge; \ bphiedge = aphiedge; \ phix2edge = 0.5 * sqrt(bphiedge); \ phix1edge = `MINA(phixedge - phix2edge, 0.0, aphiedge); \ Sfl_prefac_edge = phit * phit * BETEDGE_i / Cox_over_q; \ ntedge = FNTEDGE_i * 4.0 * `KBOL * TKD; \ end else begin \ VFBEDGE_T = 0.0; \ tf_betedge = 1.0; \ BETNEDGE_T = 0.0; \ BETEDGE_i = 0.0; \ phit0edge = phit; \ phibedge = 0.0; \ Gfedge = 1.0; \ Gfedge2 = 1.0; \ lnGfedge2 = 0.0; \ phixedge = 0.0; \ aphiedge = 0.0; \ bphiedge = 0.0; \ phix2edge = 0.0; \ phix1edge = 0.0; \ Sfl_prefac_edge = 0.0; \ ntedge = 1.0; \ end // Model's core for currents and charges calculation (initially into PSP103_SPCalculation.include) // -------------------------------------------------------------------------------------------------------------- `define SPCalculation \ \ /* Initialisation of some variables */ \ alpha = 0.0; \ GdL = 1.0; \ dL = 0.0; \ qbm = 0.0; \ dps = 0.0; \ qim = 0.0; \ qim1 = 0.0; \ H = 1.0; \ s1 = 0.0; \ eta_p = 1.0; \ Gvsat = 1.0; \ Gvsatinv = 1.0; \ SP_S_x1 = 0.0; \ x_s = 0.0; \ sqm = 0.0; \ xitsb = 0.0; \ rhob = 0.0; \ Gmob = 1.0; \ Gmob_dL = 1.0; \ Udse = 0.0; \ thesat1 = 0.0; \ xgm = 0.0; \ \ /* Bias definition */ \ Vgb1 = Vgs + Vsbstar - VFB_T; \ Vsbx = Vsbstar + 0.5 * (Vds - Vdsx); \ Vdsp = 2.0 * Vdsx / (1.0 + sqrt(1.0 + CFD_i * Vdsx)); \ delVg = cfloc * Vdsp * (1.0 + CFB_i * Vsbx); \ dphit1 = PSCE_i * (1.0 + PSCED_i * Vdsx) * (1.0 + PSCEB_i * Vsbx); \ Vgb1 = Vgb1 + delVg; \ \ /* Bias dependent body factor */ \ if (DNSUB_i > 0.0) begin \ Dnsub = DNSUB_i * `MAXA(0.0, Vgs + Vsb - VNSUB_i, NSLP_i); \ Gf = G_0 * sqrt(1.0 + Dnsub); \ end else begin \ Gf = G_0; \ end \ Gf2 = Gf * Gf; \ inv_Gf2 = 1.0 / Gf2; \ \ /* Bias dependence of interface states */ \ dCTG = 1.0; \ if (CTG_i > 0.0) begin \ xgct = 2.0 * Vgb1 * inv_phit; \ temp1 = Gf2 + xgct; \ temp2 = `MAXA((temp1 + xgct), 0.0, 5.0); \ xsct0 = 0.5 * (temp1 - Gf * sqrt(temp2)); \ xbct = phib * inv_phit; \ xsbstar = Vsbx * inv_phit; \ temp1 = xbct + xsbstar + 2.0; \ xsct = `MINA(xsct0, temp1, 5.0); \ temp2 = CTG_T * (xsct - (1.0 + CTB_i) * (0.5 * xbct + xsbstar)); \ `expl_low(temp2, dCTG) \ end \ ct_fact = 1.0 + CT_T * dCTG; \ phit1 = phit * ct_fact * (1.0 + dphit1); \ inv_phit1 = 1.0 / phit1; \ xg = Vgb1 * inv_phit1; \ \ /* Surface potential at source side */ \ xi = 1.0 + Gf * `invSqrt2; \ inv_xi = 1.0 / xi; \ Ux = Vsbstar * inv_phit1; \ xn_s = phib * inv_phit1 + Ux; \ if (xn_s < `se) \ delta_ns = exp(-xn_s); \ else \ delta_ns = `ke / `P3(xn_s - `se); \ margin = 1.0e-5 * xi; \ \ `sp_s(x_s, xg, xn_s, delta_ns) \ x_d = x_s; \ x_m = x_s; \ x_ds = 0.0; \ \ /* Core PSP current calculation */ \ Vdsat_lim = 3.912023005 * phit1; \ if (xg <= 0.0) begin \ qis = 0.0; \ xgm = xg - x_s; \ Voxm = xgm * phit1; \ qeff1 = Voxm; \ Vdsat = Vdsat_lim; \ Vdse = Vds; \ end else begin /* (xg > 0) */ \ delta_1s = 0.0; \ temp = 1.0 / (2.0 + x_s * x_s); \ xi0s = x_s * x_s * temp; \ xi1s = 4.0 * (x_s * temp * temp); \ xi2s = (8.0 * temp - 12.0 * xi0s) * temp * temp; \ if (x_s < `se05) begin \ delta_1s = exp(x_s); \ Es = 1.0 / delta_1s; \ delta_1s = delta_ns * delta_1s; \ end else if (x_s > (xn_s - `se05)) begin \ delta_1s = exp(x_s - xn_s); \ Es = delta_ns / delta_1s; \ end else begin \ delta_1s = `ke05 / `P3(xn_s - x_s - `se05); \ Es = `ke05 / `P3(x_s - `se05); \ end \ Ds = delta_1s - delta_ns * (x_s + 1.0 + xi0s); \ if (x_s < 1.0e-5) begin \ Ps = 0.5 * (x_s * x_s * (1.0 - `oneThird * (x_s * (1.0 - 0.25 * x_s)))); \ Ds = `oneSixth * (delta_ns * x_s * x_s * x_s * (1.0 + 1.75 * x_s)); \ temp = sqrt(1.0 - `oneThird * (x_s * (1.0 - 0.25 * x_s))); \ sqm = `invSqrt2 * (x_s * temp); \ alpha = 1.0 + Gf * `invSqrt2 * (1.0 - 0.5 * x_s + `oneSixth * (x_s * x_s)) / temp; \ end else begin \ Ps = x_s - 1.0 + Es; \ sqm = sqrt(Ps); \ alpha = 1.0 + 0.5 * (Gf * (1.0 - Es) / sqm); \ end \ Em = Es; \ Ed = Em; \ Dm = Ds; \ Dd = Dm; \ \ /* Drain saturation voltage */ \ Rxcor = (1.0 + 0.2 * XCOR_T * Vsbx) / (1.0 + XCOR_T * Vsbx); \ if (Ds > `ke05) begin \ xgs = Gf * sqrt(Ps + Ds); \ qis = Gf2 * Ds * phit1 / (xgs + Gf * sqm); \ qbs = sqm * Gf * phit1; \ if (RSB_i < 0.0) begin \ rhob = 1.0 / (1.0 - RSB_i * Vsbx); \ end else begin \ rhob = 1.0 + RSB_i * Vsbx; \ end \ if (RSG_i < 0.0) begin \ temp = 1.0 - RSG_i * qis; \ end else begin \ temp = 1.0 / (1.0 + RSG_i * qis); \ end \ GR = THER_i * (rhob * temp * qis); \ Eeffm = E_eff0 * (qbs + eta_mu * qis); \ temp1 = ln(Ps / (Ps + Ds + 1.0e-14)); \ Mutmp = pow(Eeffm * MUE_T, THEMU_T) + CS_T * exp(0.5 * THECS_T * temp1); \ Gmob = (1.0 + Mutmp + GR) * Rxcor; \ if (THESATB_i < 0.0) begin \ xitsb = 1.0 / (1.0 - THESATB_i * Vsbx); \ end else begin \ xitsb = 1.0 + THESATB_i * Vsbx; \ end \ temp2 = qis * xitsb; \ wsat = 100.0 * (temp2 / (100.0 + temp2)); \ if (THESATG_i < 0.0) begin \ temp = 1.0 / (1.0 - THESATG_i * wsat); \ end else begin \ temp = 1.0 + THESATG_i * wsat; \ end \ thesat1 = thesatloc * (temp / Gmob); \ phi_inf = qis / alpha + phit1; \ ysat = thesat1 * phi_inf * `invSqrt2; \ if (CHNL_TYPE==`PMOS) begin \ ysat = ysat / sqrt(1.0 + ysat); \ end \ za = 2.0 / (1.0 + sqrt(1.0 + 4.0 * ysat)); \ temp1 = za * ysat; \ Phi_0 = phi_inf * za * (1.0 + 0.86 * (temp1 * (1.0 - temp1 * za) / (1.0 + 4.0 * (temp1 * temp1 * za)))); \ asat = xgs + 0.5 * Gf2; \ Phi_2 = 0.98 * (Gf2 * Ds * phit1 / (asat + sqrt(asat * asat - Gf2 * Ds * 0.98))); \ Phi_0_2 = Phi_0 + Phi_2; \ Phi0_Phi2 = 2.0 * (Phi_0 * Phi_2); \ Phi_sat = Phi0_Phi2 / (Phi_0_2 + sqrt(Phi_0_2 * Phi_0_2 - 1.98 * Phi0_Phi2)); \ Vdsat = Phi_sat - phit1 * ln(1.0 + Phi_sat * (Phi_sat - 2.0 * asat * phit1) * inv_Gf2 / (phit1 * phit1 * Ds)); \ end else begin \ Vdsat = Vdsat_lim; \ end \ temp = pow(Vds / Vdsat, axloc); \ temp1 = -1.0 / axloc; \ Vdse = Vds * pow(1.0 + temp, temp1); \ \ /* Surface potential at drain side */ \ Udse = Vdse * inv_phit1; \ xn_d = xn_s + Udse; \ if (Udse < `se) begin \ k_ds = exp(-Udse); \ end else begin \ k_ds = `ke / `P3(Udse - `se); \ end \ delta_nd = delta_ns * k_ds; \ \ `sp_s_d(x_d, xg, xn_d, delta_nd) \ x_ds = x_d - x_s; \ \ /* Approximations for extremely small x_ds: capacitance calculation */ \ if (x_ds < 1.0e-10) begin \ pC = 2.0 * (xg - x_s) + Gf2 * (1.0 - Es + delta_1s * k_ds - delta_nd * (1.0 + xi1s)); \ qC = Gf2 * (1.0 - k_ds) * Ds; \ temp = 2.0 - Gf2 * (Es + delta_1s * k_ds - delta_nd * xi2s); \ temp = pC * pC - 2.0 * (temp * qC); \ x_ds = 2.0 * (qC / (pC + sqrt(temp))); \ x_d = x_s + x_ds; \ end \ dps = x_ds * phit1; \ \ xi0d = x_d * x_d / (2.0 + x_d * x_d); \ if (x_d < `se05) begin \ Ed = exp(-x_d); \ if (x_d < 1.0e-5) begin \ Dd = `oneSixth * delta_nd * x_d * x_d * x_d * (1.0 + 1.75 * x_d); \ end else begin \ Dd = delta_nd * (1.0 / Ed - x_d - 1.0 - xi0d); \ end \ end else begin \ if (x_d > (xn_d - `se05)) begin \ temp = exp(x_d - xn_d); \ Ed = delta_nd / temp; \ Dd = temp - delta_nd * (x_d + 1.0 + xi0d); \ end else begin \ Ed = `ke05 / `P3(x_d - `se05); \ temp = `ke05 / `P3(xn_d - x_d - `se05); \ Dd = temp - delta_nd * (x_d + 1.0 + xi0d); \ end \ end \ \ /* Mid-point surface potential */ \ x_m = 0.5 * (x_s + x_d); \ Em = 0.0; \ temp = Ed * Es; \ if (temp > 0.0) begin \ Em = sqrt(temp); \ end \ D_bar = 0.5 * (Ds + Dd); \ Dm = D_bar + 0.125 * (x_ds * x_ds * (Em - 2.0 * inv_Gf2)); \ \ if (x_m < 1.0e-5) begin \ Pm = 0.5 * (x_m * x_m * (1.0 - `oneThird * (x_m * (1.0 - 0.25 * x_m)))); \ xgm = Gf * sqrt(Dm + Pm); \ \ /* Polysilicon depletion */ \ if (kp > 0.0) begin \ eta_p = 1.0 / sqrt(1.0 + kp * xgm); \ end /* (kp > 0.0) */ \ temp = sqrt(1.0 - `oneThird * (x_m * (1.0 - 0.25 * x_m))); \ sqm = `invSqrt2 * (x_m * temp); \ alpha = eta_p + `invSqrt2 * (Gf * (1.0 - 0.5 * x_m + `oneSixth * (x_m * x_m)) / temp); \ end else begin \ Pm = x_m - 1.0 + Em; \ xgm = Gf * sqrt(Dm + Pm); \ \ /* Polysilicon depletion */ \ if (kp > 0.0) begin \ d0 = 1.0 - Em + 2.0 * (xgm * inv_Gf2); \ eta_p = 1.0 / sqrt(1.0 + kp * xgm); \ temp = eta_p / (eta_p + 1.0); \ x_pm = kp * (temp * temp * Gf2 * Dm); \ p_pd = 2.0 * (xgm - x_pm) + Gf2 * (1.0 - Em + Dm); \ q_pd = x_pm * (x_pm - 2.0 * xgm); \ xi_pd = 1.0 - 0.5 * (Gf2 * (Em + Dm)); \ u_pd = q_pd * p_pd / (p_pd * p_pd - xi_pd * q_pd); \ x_m = x_m + u_pd; \ km = exp(u_pd); \ Em = Em / km; \ Dm = Dm * km; \ Pm = x_m - 1.0 + Em; \ xgm = Gf * sqrt(Dm + Pm); \ km0 = 1.0 - Em + 2.0 * (xgm * eta_p * inv_Gf2); \ x_ds = x_ds * km * (d0 + D_bar) / (km0 + km * D_bar); \ dps = x_ds * phit1; \ end /* (kp > 0.0) */ \ sqm = sqrt(Pm); \ alpha = eta_p + 0.5 * (Gf * (1.0 - Em) / sqm); \ end \ \ /* Potential midpoint inversion charge */ \ qim = phit1 * (Gf2 * Dm / (xgm + Gf * sqm)); \ qim1 = qim + phit1 * alpha; \ qbm = sqm * Gf * phit1; \ \ /* Series resistance */ \ if (RSG_i < 0.0) begin \ temp = 1.0 - RSG_i * qim; \ end else begin \ temp = 1.0 / (1.0 + RSG_i * qim); \ end \ GR = THER_i * (rhob * temp * qim); \ \ /* Mobility reduction */ \ qeff = qbm + eta_mu * qim; \ qeff1 = qbm + eta_mu1 * qim; \ Eeffm = E_eff0 * qeff; \ temp1 = ln(Pm / (Pm + Dm + 1.0e-14)); \ Mutmp = pow(Eeffm * MUE_T, THEMU_T) + CS_T * exp(0.5 * THECS_T * temp1); \ Gmob = (1.0 + Mutmp + GR) * Rxcor; \ \ /* Channel length modulation */ \ s1 = ln((1.0 + (Vds - dps) * inv_VP) / (1.0 + (Vdse - dps) * inv_VP)); \ dL = alploc * s1; \ GdL = 1.0 / (1.0 + dL + dL * dL); \ \ /* Velocity saturation */ \ temp2 = qim * xitsb; \ wsat = 100.0 * (temp2 / (100.0 + temp2)); \ Gmob_dL = Gmob * GdL; \ if (THESATG_i < 0.0) begin \ temp = 1.0 / (1.0 - THESATG_i * wsat); \ end else begin \ temp = 1.0 + THESATG_i * wsat; \ end \ thesat1 = thesatloc * (temp / Gmob_dL); \ zsat = thesat1 * thesat1 * dps * dps; \ if (CHNL_TYPE == `PMOS) begin \ zsat = zsat / (1.0 + thesat1 * dps); \ end \ Gvsat = 0.5 * (Gmob_dL * (1.0 + sqrt(1.0 + 2.0 * zsat))); \ Gvsatinv = 1.0 / Gvsat; \ \ /* Variables for calculation of intrinsic charges and gate current */ \ Voxm = xgm * phit1; \ temp = Gmob_dL * Gvsatinv; \ alpha1 = alpha * (1.0 + 0.5 * (zsat * temp * temp)); \ H = temp * qim1 / alpha1; \ \ end /* (xg > 0) */ tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_nqs_macrodefs.include0000644000175000017500000001257214163340332027547 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_nqs_macrodefs.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // ////////////////////////////////////////// // // Macros used in PSP-NQS // ////////////////////////////////////////// // Function to calculate bulk charge from surface potential `define PhiToQb(phi,Qb_tmp) \ if (abs(phi) <= margin_ac) \ Qb_tmp = -0.70710678 * phi * Gf_ac * (1.0 - `oneSixth * phi * (1.0 - `oneSixth * phi)); \ else begin \ `expl((-phi), temp) \ Qb_tmp = Gf_ac * sqrt(temp + phi - 1.0); \ if (phi > margin_ac) \ Qb_tmp = -Qb_tmp; \ end // Function used in fq-macro `define PhiTod2Qis(xphi,d2Qis) \ if (abs(xphi) <= margin_ac) begin \ Qb_tmp = -0.70710678 * xphi * Gf_ac * (1.0 - `oneSixth * xphi * (1.0 - `oneSixth * xphi)); \ dQbs = -0.70710678 * Gf_ac * (1.0 - `oneThird * xphi * (1.0 - 0.25 * xphi)); \ d2Qis = -0.235702 * Gf_ac * (1.0 - 0.5 * xphi); \ end else begin \ `expl((-xphi),temp) \ Qb_tmp = Gf_ac * sqrt(temp + xphi - 1.0); \ if (xphi > margin_ac) \ Qb_tmp = -Qb_tmp; \ dQbs = 0.5 * Gf_ac * Gf_ac * (1.0 - temp) / Qb_tmp; \ d2Qis = (dQbs * dQbs - 0.5 * Gf_ac * Gf_ac) / Qb_tmp + dQbs; \ end // Function used in QiToPhi `define sps(sp, xg) \ if (abs(xg) <= marginp) begin \ sp = xg / a_factrp; \ end else begin \ if (xg < -marginp) begin \ NQS_yg = -xg; \ NQS_z = 1.25 * NQS_yg / a_factrp; \ NQS_eta = (NQS_z + 10.0 - sqrt((NQS_z - 6.0) * (NQS_z - 6.0) + 64.0)) * 0.5; \ NQS_a = (NQS_yg - NQS_eta) * (NQS_yg - NQS_eta) + Gp2 * (NQS_eta + 1.0); \ NQS_c = 2.0 * (NQS_yg - NQS_eta) - Gp2; \ NQS_tau = ln(NQS_a / Gp2) - NQS_eta; \ `sigma(NQS_a, NQS_c, NQS_tau, NQS_eta, NQS_y0) \ `expl(NQS_y0, NQS_D0) \ NQS_xi = 1.0 - Gp2 * NQS_D0 * 0.5; \ NQS_p = 2.0 * (NQS_yg - NQS_y0) + Gp2 * (NQS_D0 - 1.0); \ NQS_q = (NQS_yg - NQS_y0) * (NQS_yg - NQS_y0) + Gp2 * (NQS_y0 + 1.0 - NQS_D0); \ NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \ NQS_w = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \ sp = -(NQS_y0 + NQS_w); \ end else begin \ NQS_xg1 = 1.0 / ( 1.25 + 7.32464877560822e-01 * Gp); \ NQS_A_fac = (1.25 * a_factrp * NQS_xg1 - 1.0) * NQS_xg1; \ NQS_xbar = xg / a_factrp * (1.0 + NQS_A_fac * xg); \ `expl(-NQS_xbar, NQS_temp) \ NQS_w = 1.0 - NQS_temp; \ NQS_x0 = xg + Gp2 * 0.5 - Gp * sqrt(xg + Gp2 * 0.25 - NQS_w); \ `expl((-NQS_x0), NQS_D0) \ NQS_xi = 1.0 - Gp2 * 0.5 * NQS_D0; \ NQS_p = 2.0 * (xg - NQS_x0) + Gp2 * (1.0 - NQS_D0); \ NQS_q = (xg - NQS_x0) * (xg - NQS_x0) - Gp2 * (NQS_x0 - 1.0 + NQS_D0); \ NQS_temp = NQS_p * NQS_p - 4.0 * NQS_xi * NQS_q; \ NQS_u = 2.0 * NQS_q / (NQS_p + sqrt(NQS_temp)); \ sp = NQS_x0 + NQS_u; \ end \ end // Function to calculate surface potential from inversion charge `define QiToPhi(Qi,xg,xphi) \ temp = Qi / pd + xg; \ `sps(xphi,temp) // Calculation of fk `define fq(Qi,xg,dQy,d2Qy,fk) \ `QiToPhi(Qi, xg, xphi) \ `PhiTod2Qis(xphi, d2Qis) \ dQis = pd - dQbs; \ dQis_1 = 1.0 / dQis; \ fQi = Qi * dQis_1 - 1.0; \ dfQi = (1.0 - Qi * d2Qis * dQis_1 * dQis_1) * dQis_1; \ fk0 = dfQi * dQy * dQy + fQi * d2Qy; \ dpsy2 = dQy * dQy * dQis_1 * dQis_1; \ zsat_nqs = thesat2 * dpsy2; \ if (CHNL_TYPE == `PMOS) \ zsat_nqs = zsat_nqs / (1.0 + thesat1_ac * dps_ac); \ temp = sqrt(1.0 + 2.0 * zsat_nqs); \ Fvsat = 2.0 / (1.0 + temp); \ temp1 = d2Qy - dpsy2 * d2Qis; \ fk = Fvsat * (fk0 - zsat_nqs * fQi * temp1 * Fvsat / temp); // Interpolation of surface potential along channel `define Phiy(y) \ x_m_ac + H_ac * (1.0 - sqrt(1.0 - 2.0 * dps_ac / H_ac * ((y) - ym))) * inv_phit1 tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/psp103.va0000644000175000017500000000372214163340332023763 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: psp103.va //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // `include "discipline.h" //`define NQSmodel true //`define SelfHeating true `include "Common103_macrodefs.include" `include "JUNCAP200_macrodefs.include" `include "PSP103_macrodefs.include" // Note: some verilog-A compilers have problems handling the ddx-operator, // which occurs in definition of OP-output variables. If the line below is // commented out, all OP-output variables using the ddx-operator are skipped. `define OPderiv ///////////////////////////////////////////////////////////////////////////// // // PSP global model code // ///////////////////////////////////////////////////////////////////////////// module PSP103VA(D, G, S, B); `include "PSP103_module.include" endmodule tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/PSP103_module.include0000644000175000017500000036577214163340332026225 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: PSP103_module.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 103.7.0 (PSP), 200.6.0 (JUNCAP), April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // -------------------------------------------------------------------------------------------------------------- // Node definitions // -------------------------------------------------------------------------------------------------------------- `ifdef SelfHeating inout D, G, S, B, DT; `else // SelfHeating inout D, G, S, B; `endif // SelfHeating electrical D; electrical G; electrical S; electrical B; `ifdef SelfHeating thermal DT; branch (DT) br_rth, br_ith; `endif // SelfHeating // Internal nodes and branches for correlated drain and gate noise electrical NOI; branch (NOI) NOII; branch (NOI) NOIR; branch (NOI) NOIC; // Internal nodes for gate and bulk resistors electrical GP; electrical SI; electrical DI; electrical BP; electrical BI; electrical BS; electrical BD; // Internal nodes and branches for spline collocation (NQS) `ifdef NQSmodel electrical INT1; electrical INT2; electrical INT3; electrical INT4; electrical INT5; electrical INT6; electrical INT7; electrical INT8; electrical INT9; branch(INT1) SPLINE1; branch(INT2) SPLINE2; branch(INT3) SPLINE3; branch(INT4) SPLINE4; branch(INT5) SPLINE5; branch(INT6) SPLINE6; branch(INT7) SPLINE7; branch(INT8) SPLINE8; branch(INT9) SPLINE9; branch(INT1) RES1; branch(INT2) RES2; branch(INT3) RES3; branch(INT4) RES4; branch(INT5) RES5; branch(INT6) RES6; branch(INT7) RES7; branch(INT8) RES8; branch(INT9) RES9; `endif // NQSmodel // -------------------------------------------------------------------------------------------------------------- // Instance parameters // -------------------------------------------------------------------------------------------------------------- // Instance parameters for global and binning models only `IPRco(L ,1.0e-5 ,"m" ,1.0e-9 ,inf ,"Design length") `IPRco(W ,1.0e-5 ,"m" ,1.0e-9 ,inf ,"Design width") `IPRnb(SA ,0.0 ,"m" ,"Distance between OD-edge and poly from one side") `IPRnb(SB ,0.0 ,"m" ,"Distance between OD-edge and poly from other side") `IPRnb(SD ,0.0 ,"m" ,"Distance between neighbouring fingers") `IPRcz(SCA ,0.0 ,"" ,"Integral of the first distribution function for scattered well dopants") `IPRcz(SCB ,0.0 ,"" ,"Integral of the second distribution function for scattered well dopants") `IPRcz(SCC ,0.0 ,"" ,"Integral of the third distribution function for scattered well dopants") `IPRnb(SC ,0.0 ,"m" ,"Distance between OD-edge and nearest well edge") `IPRco(NF ,1.0 ,"" ,1.0 ,inf ,"Number of fingers") `IPRcc(NGCON ,1.0 ,"" ,1.0 ,2.0 ,"Number of gate contacts") `IPRnb(XGW ,1.0e-7 ,"m" ,"Distance from the gate contact to the channel edge") `IPRnb(NRS ,0.0 ,"" ,"Number of squares of source diffusion") `IPRnb(NRD ,0.0 ,"" ,"Number of squares of drain diffusion") // Instance parameters for local model only `IPRco(JW ,1.0e-6 ,"m" ,`LG_cliplow ,inf ,"Gate-edge length of source/drain junction") // Instance parameters for global, binning, and local models `IPRnb(DELVTO ,0.0 ,"V" ,"Threshold voltage shift parameter") `IPRcz(FACTUO ,1.0 ,"" ,"Zero-field mobility pre-factor") `IPRnb(DELVTOEDGE ,0.0 ,"V" ,"Threshold voltage shift parameter of edge transistor") `IPRcz(FACTUOEDGE ,1.0 ,"" ,"Zero-field mobility pre-factor of edge transistor") `IPRco(ABSOURCE ,1.0e-12 ,"m^2" ,`AB_cliplow ,inf ,"Bottom area of source junction") `IPRco(LSSOURCE ,1.0e-6 ,"m" ,`LS_cliplow ,inf ,"STI-edge length of source junction") `IPRco(LGSOURCE ,1.0e-6 ,"m" ,`LG_cliplow ,inf ,"Gate-edge length of source junction") `IPRco(ABDRAIN ,1.0e-12 ,"m^2" ,`AB_cliplow ,inf ,"Bottom area of drain junction") `IPRco(LSDRAIN ,1.0e-6 ,"m" ,`LS_cliplow ,inf ,"STI-edge length of drain junction") `IPRco(LGDRAIN ,1.0e-6 ,"m" ,`LG_cliplow ,inf ,"Gate-edge length of drain junction") `IPRco(AS ,1.0e-12 ,"m^2" ,`AB_cliplow ,inf ,"Bottom area of source junction") `IPRco(PS ,1.0e-6 ,"m" ,`LS_cliplow ,inf ,"Perimeter of source junction") `IPRco(AD ,1.0e-12 ,"m^2" ,`AB_cliplow ,inf ,"Bottom area of drain junction") `IPRco(PD ,1.0e-6 ,"m" ,`LS_cliplow ,inf ,"Perimeter of drain junction") `IPRco(MULT ,1.0 ,"" ,0.0 ,inf ,"Number of devices in parallel") // -------------------------------------------------------------------------------------------------------------- // PSP Model Parameters // -------------------------------------------------------------------------------------------------------------- `include "PSP103_parlist.include" // -------------------------------------------------------------------------------------------------------------- // JUNCAP Model Parameters // -------------------------------------------------------------------------------------------------------------- `include "JUNCAP200_parlist.include" // -------------------------------------------------------------------------------------------------------------- // Variables // -------------------------------------------------------------------------------------------------------------- // Variables for switch (initial_model parts) integer CHNL_TYPE, SWGEO_i, SWIGATE_i, SWIMPACT_i, SWGIDL_i, SWJUNCAP_i, SWJUNASYM_i, SWNUD_i, SWEDGE_i, SWDELVTAC_i; integer SWQSAT_i, SWQPART_i, SWIGN_i; // Instance local variables real NF_i, invNF, L_i, W_i, SA_i, SB_i, SD_i, SC_i, XGW_i, JW_i, SCA_i, SCB_i, SCC_i, NGCON_i, MULT_i, FACTUO_i, DELVTO_i; real FACTUOEDGE_i, DELVTOEDGE_i; // Instance local variables for juncap real ABS_i, LSS_i, LGS_i, ABD_i, LSD_i, LGD_i, jwcorr, jww; // Variables of clipped global model parameters real TOXO_i, EPSROXO_i, NSUBO_i, WSEG_i, NPCK_i, WSEGP_i, LPCK_i, TOXOVO_i, TOXOVDO_i, LOV_i, LOVD_i, LP1_i, LP2_i, WBET_i; real AXL_i, ALP1L2_i, ALP2L2_i, SAREF_i, SBREF_i, KVSAT_i, LLODKUO_i, WLODKUO_i, LLODVTH_i, WLODVTH_i, LODETAO_i, SCREF_i; real WEB_i, WEC_i, RSHG_i, RSH_i, RSHD_i, RINT_i, RVPOLY_i, NSUBEDGEO_i, LPEDGE_i; // Variables of internal global-binning parameters of charge model real CFACL_i, CFACW_i, CFACLEXP_i, THESATACO_i, THESATACL_i, THESATACLEXP_i, THESATACW_i, THESATACLW_i, AXACO_i, AXACL_i, ALPACL_i; real ALPACLEXP_i, ALPACW_i, POCFAC_i, PLCFAC_i, PWCFAC_i, PLWCFAC_i, POTHESATAC_i, PLTHESATAC_i, PWTHESATAC_i, PLWTHESATAC_i; real POAXAC_i, PLAXAC_i, PWAXAC_i, PLWAXAC_i, POALPAC_i, PLALPAC_i, PWALPAC_i, PLWALPAC_i, KVSATAC_i; // Variables of local model parameters real VFB_p, STVFB_p, ST2VFB_p, TOX_p, EPSROX_p, NEFF_p, FACNEFFAC_p, GFACNUD_p, VSBNUD_p, DVSBNUD_p, VNSUB_p, NSLP_p, DNSUB_p; real DPHIB_p, DELVTAC_p, NP_p, CT_p, CTG_p, CTB_p, STCT_p, TOXOV_p, TOXOVD_p, NOV_p, NOVD_p, PSCE_p, PSCED_p, PSCEB_p, CF_p, CFAC_p; real CFD_p, CFB_p, BETN_p, STBET_p, MUE_p, STMUE_p, THEMU_p, STTHEMU_p, CS_p, STCS_p, THECS_p, STTHECS_p, XCOR_p, STXCOR_p; real FETA_p, RS_p, STRS_p, RSB_p, RSG_p, THESAT_p, THESATAC_p, STTHESAT_p, THESATB_p, THESATG_p, AX_p, AXAC_p, ALP_p, ALPAC_p; real ALP1_p, ALP2_p, VP_p, A1_p, A2_p, STA2_p, A3_p, A4_p, GCO_p, IGINV_p, IGOV_p, IGOVD_p, STIG_p, GC2_p, GC3_p, GC2OV_p, GC3OV_p; real CHIB_p, AGIDL_p, AGIDLD_p, BGIDL_p, BGIDLD_p, STBGIDL_p, STBGIDLD_p, CGIDL_p, CGIDLD_p, COX_p, CGOV_p, CGOVD_p, CGBOV_p, CFR_p; real CFRD_p, FNT_p, FNTEXC_p, NFA_p, NFB_p, NFC_p, EF_p, VFBEDGE_p, STVFBEDGE_p, DPHIBEDGE_p, NEFFEDGE_p, CTEDGE_p, BETNEDGE_p; real STBETEDGE_p, PSCEEDGE_p, PSCEBEDGE_p, PSCEDEDGE_p, CFEDGE_p, CFDEDGE_p, CFBEDGE_p, FNTEDGE_p, NFAEDGE_p, NFBEDGE_p, NFCEDGE_p; real EFEDGE_p, RG_p, RSE_p, RDE_p, RWELL_p, RBULK_p, RJUNS_p, RJUND_p; `ifdef SelfHeating real RTH_p, CTH_p, STRTH_p; `endif // SelfHeating `ifdef NQSmodel real MUNQS_p; `endif // NQSmodel // Variables of clipped local model parameters real TR_i, QMC_i, VFB_i, STVFB_i, ST2VFB_i, STCT_i, TOX_i, EPSROX_i, NEFF_i, FACNEFFAC_i, GFACNUD_i, VSBNUD_i, DVSBNUD_i, VNSUB_i, NSLP_i; real DNSUB_i, DPHIB_i, DELVTAC_i, NP_i, CT_i, CTG_i, CTB_i, TOXOV_i, TOXOVD_i, NOV_i, NOVD_i, CF_i, CFAC_i, CFD_i, CFB_i, PSCE_i, PSCEB_i; real PSCED_i, BETN_i, STBET_i, MUE_i, STMUE_i, THEMU_i, STTHEMU_i, CS_i, STCS_i, THECS_i, STTHECS_i, XCOR_i, STXCOR_i, FETA_i, RS_i, STRS_i; real RSB_i, RSG_i, THESAT_i, THESATAC_i, STTHESAT_i, THESATB_i, THESATG_i, AX_i, AXAC_i, ALP_i, ALPAC_i, ALP1_i, ALP2_i, VP_i, A1_i, A2_i; real STA2_i, A3_i, A4_i, GCO_i, IGINV_i, IGOV_i, IGOVD_i, STIG_i, GC2_i, GC3_i, GC2OV_i, GC3OV_i, CHIB_i, AGIDL_i, AGIDLD_i, BGIDL_i; real BGIDLD_i, STBGIDL_i, STBGIDLD_i, CGIDL_i, CGIDLD_i, COX_i, CGOV_i, CGOVD_i, CGBOV_i, CFR_i, CFRD_i, FNT_i, FNTEXC_i, NFA_i, NFB_i; real NFC_i, EF_i, VFBEDGE_i, STVFBEDGE_i, DPHIBEDGE_i, NEFFEDGE_i, CTEDGE_i, BETNEDGE_i, STBETEDGE_i, PSCEEDGE_i, PSCEBEDGE_i, PSCEDEDGE_i; real CFEDGE_i, CFDEDGE_i, CFBEDGE_i, FNTEDGE_i, NFAEDGE_i, NFBEDGE_i, NFCEDGE_i, EFEDGE_i, RG_i, RSE_i, RDE_i, RBULK_i, RJUNS_i, RJUND_i; real RWELL_i; `ifdef SelfHeating real RTH_i, CTH_i, STRTH_i; `endif // SelfHeating `ifdef NQSmodel real MUNQS_i; `endif // NQSmodel // Variables for scaling rules real iL, iW, delLPS, delWOD, LE, WE, LEcv, WEcv, Lcv, Wcv, iLE, iWE, L_f, L_slif, W_f, XGWE, NSUB0e, NPCKe, LPCKe, AA, BB, NSUB; real FBET1e, LP1e, GPE, GWE, tmpx, Lnoi, Lred, WE_edge, iWE_edge, GPE_edge, KVTHOWE, KUOWE; `ifdef SelfHeating real deltaRth; `endif // SelfHeating // Variables for binning-rules real iLEWE, iiLE, iiWE, iiLEWE, iiiLEWE, iLEcv, iiLEcv, iiWEcv, iiLEWEcv, iiiLEWEcv, iLcv, iiLcv, iiWcv, iiLWcv, iiiLWcv; // Variables for general temperature scaling real TKR, TKA, rTa, delTa, phita, inv_phita, TKD, TKD_sq, delT, rTn, ln_rTn, inv_phit, Eg, phibFac; // JUNCAP2 variables `include "JUNCAP200_varlist.include" // Local parameters after temperature scaling and variables used in self heating effect real VFB_T, CT_T, CTG_T, BETN_T, MUE_T, THEMU_T, CS_T, THECS_T, XCOR_T, RS_T, BGIDL_T, BGIDLD_T, A2_T, VFBEDGE_T, BETNEDGE_T; `ifdef SelfHeating real RTH_T; `else // SelfHeating // in the self heating model, these variables are declared locally in the evaluate block real phit, BET_i, BETEDGE_i, nt0, nt, THESAT_T, THESATAC_T, Sfl_prefac, phit0edge, Gfedge2, lnGfedge2, Sfl_prefac_edge; real ntedge; `endif // SelfHeating // Variables for channel temperature scaling (including self heating effect) real phib_dc, G_0_dc, kp, np, arg2max, qlim2, qb0, dphibq, sqrt_phib_dc, phix_dc, aphi_dc, bphi_dc, phix2, phix1_dc, alpha_b; real us1, us21, phib_ac, G_0_ac, phix_ac, aphi_ac, bphi_ac, phix1_ac, tf_ct, tf_bet, tf_mue, tf_cs, tf_xcor, tf_ther, THER_i, tf_thesat; real tf_betedge, phibedge, Gfedge, phixedge, aphiedge, bphiedge, phix2edge, phix1edge; // Variables used in instance initializing real EPSSI, EPSOX, CoxPrime, tox_sq, Cox_over_q, NEFFAC_i, qq, E_eff0, eta_mu, eta_mu1, inv_AX, inv_VP, CoxovPrime, CoxovPrime_d, GOV_s; real GOV_d, GOV2_s, GOV2_d, SP_OV_eps2_s, SP_OV_a_s, SP_OV_delta1_s, SP_OV_eps2_d, SP_OV_a_d, SP_OV_delta1_d, inv_CHIB, B_fact, BCH; real BOV, BOV_d, GCQ, GCQOV, tf_ig, AGIDLs, AGIDLDs, BGIDLs, BGIDLDs, fac_exc, ggate, gsource, gdrain, gbulk, gjuns, gjund, gwell; // Variables for bias affectation real Vgs, Vds, Vsb, Vdb, Vgb, Vjun_s, Vjun_d, VgsPrime, VsbPrime, VdbPrime, VgdPrime; real Vdsx; // Global variables used in PSP103_SPCalculation.include real Vgb1, Vdsp, delVg, Vdsat_lim, Vdsat; // Global variables used in current and charge calculations real xgs_ov, xgd_ov, Vsbstar_dc, Vsbstar_dc_tmp, Vmb, us, usnew, Vmbnew, qeff1_dc, Voxm_dc, GdL_dc, eta_p_dc, Gvsat_dc, Gmob_dL_dc, x_ds_dc; real x_m_dc, Gf_dc, Vdsat_dc, Udse_dc, SP_OV_xg, xs_ov, xd_ov, Vovs, Vovd, zg, TP, Fs1, Fs2, Fs3, Fs, Vm, Dch, arg2mina, psi_t, arg1; real Dsi, Dgate, Igc0, igc, igcd_h, u0, x, u0_div_H, Bg, Ag, xsq, inv_x, ex, inv_ex, Sg, Igc, Igb, Vtovd, Igidl, Vtovs, Igisl; real delVsat, Vsbstar_ac, xg_ac, qeff1_ac, Voxm_ac, alpha_ac, dps_ac, qim_ac, GdL_ac, H_ac, QG, QI, QD, QB, Fj, Fj2; real QCLM, Qg, Qd, Qb, Qs, Qgs_ov, Qgd_ov, Qgb_ov, Qfgs, Qfgd, rgatenoise, rsourcenoise, rdrainnoise, rbulknoise, rwellnoise, rjundnoise; real rjunsnoise; // Global variables used in macros real tme1, tme2; real inv_GOV, SP_OV_eps, SP_OV_delta, mutau, nu; real Q_EDGE_xsth, Q_EDGE_xth0, Q_EDGE_xth, Q_EDGE_n, Q_EDGE_n_inv, Q_EDGE_xgt, Q_EDGE_xgt0, Q_EDGE_xgt0e, Q_EDGE_qi0si, Q_EDGE_qi0; real Q_EDGE_exp_x, Q_EDGE_d0, Q_EDGE_d0p, Q_EDGE_sqerr, Q_EDGE_errq; // Global variables used in noise section real N1, Nm1, Delta_N1, Sfl, t1, sqt2, t2, r, lc, lcinv2, g_ideal, mid, temp2_exc, wsat_exc, temp_exc, thesat1_exc, zsat_exc, Gvsat_exc; real gfac, Sidexc, sqid, mig, migid0, migid, CGeff, sqig, c_igid, shot_igcsx, shot_igcdx, shot_igsov, shot_igdov, shot_iavl, jnoisex_s, jnoisex_d; real shot_igs, shot_igd, anoisedge, N1edge, Nm1edge, Delta_N1edge, H0edge, t1edge, sqt2edge, t2edge, redge, lcedge, lcinv2edge; real g_idealedge; // Variables used in NQS-calculations `ifdef NQSmodel integer SWNQS_i; real Gf_ac, xgm_dc, thesat1_dc, xgm_ac, x_m_ac, thesat1_ac, margin_dc, margin_ac; real Qp1_0, Qp2_0, Qp3_0, Qp4_0, Qp5_0, Qp6_0, Qp7_0, Qp8_0, Qp9_0, fk1, fk2, fk3, fk4, fk5, fk6, fk7, fk8, fk9, phi_p1, phi_p2, phi_p3; real phi_p4, phi_p5, phi_p6, phi_p7, phi_p8, phi_p9, Qp1, Qp2, Qp3, Qp4, Qp5, Qp6, Qp7, Qp8, Qp9, Qp0, QpN, QG_NQS, QS_NQS, QD_NQS, pd; real Gp, Gp2, a_factrp, marginp, x_sp, x_dp, zsat_nqs, dfQi, fQi, dQis, dQis_1, d2Qis, dQbs, dQy, d2Qy, dpsy2, ym, inorm, Tnorm, Qb_tmp; real QbSIGN, r_nqs, vnorm, vnorm_inv, NQS_xg1, NQS_yg, NQS_z, NQS_eta, NQS_a, NQS_c, NQS_tau, NQS_D0, NQS_xi, NQS_p, NQS_q, NQS_temp; real NQS_A_fac, NQS_xbar, NQS_w, NQS_x0, NQS_u, NQS_y0, xphi, fk0, thesat2, Fvsat, temp3, temp4, temp5, temp6, temp7, temp8, temp9; `endif // NQSmodel //ngspice-adms: move local variables here real Invsa, Invsb, Invsaref, Invsbref, Kstressu0, rhobeta, rhobetaref, Kstressvth0; real temp0, temp00, templ, tempw, Lx, Wx, loop, tmpa, tmpb; real ijunbot, ijunsti, ijungat, qjunbot, qjunsti, qjungat; real sigVds, dphit1, xgct, xsct0, xbct, xsbstar, xsct, dCTG, ct_fact, phit1, inv_phit1, xg_dc, alpha_dc, dps_dc, qim_dc; real qim1_dc, H_dc, FdL_dc, Gvsatinv_dc, Ids, Iimpact, mavl, Igdov, Igsov, Igcd, Igcs, eta_p_ac, Gvsat_ac, Gmob_dL_ac, H0; real COX_qm, ijun_s, ijunbot_s, ijunsti_s, ijungat_s, ijun_d, ijunbot_d, ijunsti_d, ijungat_d, qjun_s, qjunbot_s, qjunsti_s; real qjungat_s, qjun_d, qjunbot_d, qjunsti_d, qjungat_d, jnoise_s, jnoise_d, Gmob_dc, xitsb_dc, Vdse_dc, Vsbstaredge, Vsbxedge; real dphit1edge, phit1edge, inv_phit1edge, Vdspedge, delVgedge, xgedge, xbedge, dxthedge, xnedge_s, qseffedge, xnedge_d; real qdseffedge, qdeffedge, qmeffedge, dsqredge, alphabmedge, Idsedge, Sfledge, midedge, sqidedge; `ifdef SelfHeating real Pdiss, phit, BET_i, BETEDGE_i, nt0, nt, THESAT_T, THESATAC_T, Sfl_prefac, phit0edge, Gfedge2, lnGfedge2, Sfl_prefac_edge; real ntedge; `endif // SelfHeating real temp, temp1, temp2; real FdL, qim1_1, r1, r2, s2, dL1; real tmpv, vjv; real Pdiss_s, Pdiss_d; //`define SPcalcLocalVarDecl real phib, G_0, Vsbstar, cfloc, thesatloc, axloc, alploc; real Vsbx, xg, Dnsub, Gf, Gf2, inv_Gf2, xi, inv_xi, Ux, xn_s, delta_ns, margin, x_s, delta_1s, xi0s, xi1s; real xi2s, Es, Ds, Ps, Rxcor, xgs, qis, qbs, rhob, GR, Eeffm, Mutmp, Gmob, xitsb, wsat, thesat1, phi_inf; real ysat, za, Phi_0, asat, Phi_2, Phi_0_2, Phi0_Phi2, Phi_sat, Vdse, Udse, xn_d, k_ds, delta_nd, x_d, x_ds; real pC, qC, dps, xi0d, Ed, Dd, x_m, Em, D_bar, Dm, Pm, xgm, eta_p, sqm, alpha, d0, x_pm, p_pd, q_pd, xi_pd; real u_pd, km, km0, qim, qim1, qbm, qeff, qeff1, s1, dL, GdL, Gmob_dL, zsat, Gvsat, Gvsatinv, Voxm, alpha1, H; real SP_S_temp, SP_S_temp1, SP_S_temp2; real SP_S_yg, SP_S_ysub, SP_S_eta, SP_S_a, SP_S_c, SP_S_tau, SP_S_y0, SP_S_delta0, SP_S_delta1, SP_S_xi0; real SP_S_xi1, SP_S_xi2, SP_S_pC, SP_S_qC, SP_xg1, SP_S_A_fac, SP_S_xbar, SP_S_w, SP_S_x1, SP_S_bx, SP_S_b; real SP_S_x0; /* declaration of variables needed in macro "calcerfcexpmtat" */ real ysq, terfc, erfcpos; /* declaration of variables needed in hypfunction 5 */ real h1, h2, h2d, h3, h4, h5; /* declaration of variables calculated outside macro "juncapfunction", voltage-dependent part */ real idmult, vj, z, zinv, two_psistar, vjlim, vjsrh, vbbt, vav; /* declaration of variables used within macro "juncapfunction" */ real tmp, id; real isrh, vbi_minus_vjsrh, wsrhstep, dwsrh, wsrh, wdep, asrh; real itat, btat, twoatatoverthreebtat, umaxbeforelimiting, umax, sqrtumax, umaxpoweronepointfive; real wgamma, wtat, ktat, ltat, mtat, xerfc, erfctimesexpmtat, gammamax; real ibbt, Fmaxr; real fbreakdown; // -------------------------------------------------------------------------------------------------------------- // Variables for operating point info // -------------------------------------------------------------------------------------------------------------- real id_op, is, ig, ib, P_D, facvsb, facvsb0, sig1k, vth_i, vts_i, ids_i; `OPP(ctype ,"" ,"Flag for channel type") `OPP(sdint ,"" ,"Flag for source-drain interchange") `OPP(ise ,"A" ,"Total source current") `OPP(ige ,"A" ,"Total gate current") `OPP(ide ,"A" ,"Total drain current") `OPP(ibe ,"A" ,"Total bulk current") `OPP(ids ,"A" ,"Drain current, excl. edge transistor currents, avalanche, tunnel, GISL, GIDL, and junction currents") `OPP(idb ,"A" ,"Drain to bulk current") `OPP(isb ,"A" ,"Source to bulk current") `OPP(igs ,"A" ,"Gate-source tunneling current") `OPP(igd ,"A" ,"Gate-drain tunneling current") `OPP(igb ,"A" ,"Gate-bulk tunneling current") `OPP(idedge ,"A" ,"Drain current of edge transistors") `OPP(igcs ,"A" ,"Gate-channel tunneling current (source component)") `OPP(igcd ,"A" ,"Gate-channel tunneling current (drain component)") `OPP(iavl ,"A" ,"Substrate current due to weak avelanche") `OPP(igisl ,"A" ,"Gate-induced source leakage current") `OPP(igidl ,"A" ,"Gate-induced drain leakage current") `OPP(ijs ,"A" ,"Total source junction current") `OPP(ijsbot ,"A" ,"Source junction current (bottom component)") `OPP(ijsgat ,"A" ,"Source junction current (gate-edge component)") `OPP(ijssti ,"A" ,"Source junction current (STI-edge component)") `OPP(ijd ,"A" ,"Total drain junction current") `OPP(ijdbot ,"A" ,"Drain junction current (bottom component)") `OPP(ijdgat ,"A" ,"Drain junction current (gate-edge component)") `OPP(ijdsti ,"A" ,"Drain junction current (STI-edge component)") `OPP(vds ,"V" ,"Drain-source voltage") `OPP(vgs ,"V" ,"Gate-source voltage") `OPP(vsb ,"V" ,"Source-bulk voltage") `OPP(vto ,"V" ,"Zero-bias threshold voltage") `OPP(vts ,"V" ,"Threshold voltage including back bias effects") `OPP(vth ,"V" ,"Threshold voltage including back bias and drain bias effects") `OPP(vgt ,"V" ,"Effective gate drive voltage including back bias and drain bias effects") `OPP(vdss ,"V" ,"Drain saturation voltage at actual bias") `OPP(vsat ,"" ,"Saturation limit") `ifdef OPderiv `OPP(gm ,"1/Ohm" ,"Transconductance") `OPP(gmb ,"1/Ohm" ,"Substrate transconductance") `OPP(gds ,"1/Ohm" ,"Output conductance") `OPP(gjs ,"1/Ohm" ,"Source junction conductance") `OPP(gjd ,"1/Ohm" ,"Drain junction conductance") `OPP(cdd ,"F" ,"Drain capacitance") `OPP(cdg ,"F" ,"Drain-gate capacitance") `OPP(cds ,"F" ,"Drain-source capacitance") `OPP(cdb ,"F" ,"Drain-bulk capacitance") `OPP(cgd ,"F" ,"Gate-drain capacitance") `OPP(cgg ,"F" ,"Gate capacitance") `OPP(cgs ,"F" ,"Gate-source capacitance") `OPP(cgb ,"F" ,"Gate-bulk capacitance") `OPP(csd ,"F" ,"Source-drain capacitance") `OPP(csg ,"F" ,"Source-gate capacitance") `OPP(css ,"F" ,"Source capacitance") `OPP(csb ,"F" ,"Source-bulk capacitance") `OPP(cbd ,"F" ,"Bulk-drain capacitance") `OPP(cbg ,"F" ,"Bulk-gate capacitance") `OPP(cbs ,"F" ,"Bulk-source capacitance") `OPP(cbb ,"F" ,"Bulk capacitance") `OPP(cgsol ,"F" ,"Total gate-source overlap capacitance") `OPP(cgdol ,"F" ,"Total gate-drain overlap capacitance") `OPP(cjs ,"F" ,"Total source junction capacitance") `OPP(cjsbot ,"F" ,"Source junction capacitance (bottom component)") `OPP(cjsgat ,"F" ,"Source junction capacitance (gate-edge component)") `OPP(cjssti ,"F" ,"Source junction capacitance (STI-edge component)") `OPP(cjd ,"F" ,"Total drain junction capacitance") `OPP(cjdbot ,"F" ,"Drain junction capacitance (bottom component)") `OPP(cjdgat ,"F" ,"Drain junction capacitance (gate-edge component)") `OPP(cjdsti ,"F" ,"Drain junction capacitance (STI-edge component)") `endif // OPderiv `OPP(weff ,"m" ,"Effective channel width for geometrical models") `OPP(leff ,"m" ,"Effective channel length for geometrical models") `ifdef OPderiv `OPP(u ,"" ,"Transistor gain") `OPP(rout ,"Ohm" ,"Small-signal output resistance") `OPP(vearly ,"V" ,"Equivalent Early voltage") `OPP(beff ,"A/V^2" ,"Gain factor") `OPP(fug ,"Hz" ,"Unity gain frequency at actual bias") `OPP(rg_op ,"Ohm" ,"Gate resistance") `OPP(sfl ,"A^2/Hz" ,"Flicker noise current spectral density at 1 Hz") `OPP(sqrtsff ,"V/sqrt(Hz)" ,"Input-referred RMS white noise voltage spectral density at 1 kHz") `OPP(sqrtsfw ,"V/sqrt(Hz)" ,"Input-referred RMS white noise voltage spectral density") `OPP(sid ,"A^2/Hz" ,"White noise current spectral density") `OPP(sig ,"A^2/Hz" ,"Induced gate noise current spectral density at 1 Hz") `OPP(cigid ,"" ,"Imaginary part of correlation coefficient between Sig and Sid") `OPP(fknee ,"Hz" ,"Cross-over frequency above which white noise is dominant") `OPP(sigs ,"A^2/Hz" ,"Gate-source current noise spectral density") `OPP(sigd ,"A^2/Hz" ,"Gate-drain current noise spectral density") `OPP(siavl ,"A^2/Hz" ,"Impact ionization current noise spectral density") `OPP(ssi ,"A^2/Hz" ,"Total source junction current noise spectral density") `OPP(sdi ,"A^2/Hz" ,"Total drain junction current noise spectral density") `OPP(sfledge ,"A^2/Hz" ,"Flicker noise current spectral density at 1 Hz of edge transistors") `OPP(sidedge ,"A^2/Hz" ,"White noise current spectral density of edge transistors") `endif // OPderiv // local parameters after scaling, T-scaling, and clipping `OPP(lp_vfb ,"V" ,"Local parameter VFB after T-scaling and clipping") `OPP(lp_stvfb ,"V/K" ,"Local parameter STVFB after clipping") `OPP(lp_st2vfb ,"K^-1" ,"Local parameter ST2VFB after clipping") `OPP(lp_tox ,"m" ,"Local parameter TOX after clipping") `OPP(lp_epsrox ,"" ,"Local parameter EPSROX after clipping") `OPP(lp_neff ,"m^-3" ,"Local parameter NEFF after clipping") `OPP(lp_facneffac ,"" ,"Local parameter FACNEFFAC after clipping") `OPP(lp_gfacnud ,"" ,"Local parameter GFACNUD after clipping") `OPP(lp_vsbnud ,"V" ,"Local parameter VSBNUD after clipping") `OPP(lp_dvsbnud ,"V" ,"Local parameter DVSBNUD after clipping") `OPP(lp_vnsub ,"V" ,"Local parameter VNSUB after clipping") `OPP(lp_nslp ,"V" ,"Local parameter NSLP after clipping") `OPP(lp_dnsub ,"V^-1" ,"Local parameter DNSUB after clipping") `OPP(lp_dphib ,"V" ,"Local parameter DPHIB after clipping") `OPP(lp_delvtac ,"V" ,"Local parameter DELVTAC after clipping") `OPP(lp_np ,"m^-3" ,"Local parameter NP after clipping") `OPP(lp_toxov ,"m" ,"Local parameter TOXOV after clipping") `OPP(lp_toxovd ,"m" ,"Local parameter TOXOVD after clipping") `OPP(lp_nov ,"m^-3" ,"Local parameter NOV after clipping") `OPP(lp_novd ,"m^-3" ,"Local parameter NOVD after clipping") `OPP(lp_ct ,"" ,"Local parameter CT after clipping") `OPP(lp_ctg ,"" ,"Local parameter CTG after clipping") `OPP(lp_ctb ,"" ,"Local parameter CTB after clipping") `OPP(lp_stct ,"" ,"Local parameter STCT after clipping") `OPP(lp_cf ,"" ,"Local parameter CF after clipping") `OPP(lp_cfac ,"" ,"Local parameter CFAC after clipping") `OPP(lp_cfd ,"V^-1" ,"Local parameter CFD after clipping") `OPP(lp_cfb ,"V^-1" ,"Local parameter CFB after clipping") `OPP(lp_psce ,"" ,"Local parameter PSCE after clipping") `OPP(lp_psceb ,"V^-1" ,"Local parameter PSCEB after clipping") `OPP(lp_psced ,"V^-1" ,"Local parameter PSCED after clipping") `OPP(lp_betn ,"m^2/(V s)" ,"Local parameter BETN after T-scaling and clipping") `OPP(lp_stbet ,"" ,"Local parameter STBET after clipping") `OPP(lp_mue ,"m/V" ,"Local parameter MUE after T-scaling and clipping") `OPP(lp_stmue ,"" ,"Local parameter STMUE after clipping") `OPP(lp_themu ,"" ,"Local parameter THEMU after T-scaling and clipping") `OPP(lp_stthemu ,"" ,"Local parameter STTHEMU after clipping") `OPP(lp_cs ,"" ,"Local parameter CS after T-scaling and clipping") `OPP(lp_stcs ,"" ,"Local parameter STCS after clipping") `OPP(lp_thecs ,"" ,"Local parameter THECS after T-scaling and clipping") `OPP(lp_stthecs ,"" ,"Local parameter STTHECS after clipping") `OPP(lp_xcor ,"V^-1" ,"Local parameter XCOR after T-scaling and clipping") `OPP(lp_stxcor ,"" ,"Local parameter STXCOR after clipping") `OPP(lp_feta ,"" ,"Local parameter FETA after clipping") `OPP(lp_rs ,"Ohm" ,"Local parameter RS after T-scaling and clipping") `OPP(lp_strs ,"" ,"Local parameter STRS after clipping") `OPP(lp_rsb ,"V^-1" ,"Local parameter RSB after clipping") `OPP(lp_rsg ,"V^-1" ,"Local parameter RSG after clipping") `OPP(lp_thesat ,"V^-1" ,"Local parameter THESAT after T-scaling and clipping") `OPP(lp_thesatac ,"V^-1" ,"Local parameter THESATAC after T-scaling and clipping") `OPP(lp_stthesat ,"" ,"Local parameter STTHESAT after clipping") `OPP(lp_thesatb ,"V^-1" ,"Local parameter THESATB after clipping") `OPP(lp_thesatg ,"V^-1" ,"Local parameter THESATG after clipping") `OPP(lp_ax ,"" ,"Local parameter AX after clipping") `OPP(lp_axac ,"" ,"Local parameter AXAC after clipping") `OPP(lp_alp ,"" ,"Local parameter ALP after clipping") `OPP(lp_alpac ,"" ,"Local parameter ALPAC after clipping") `OPP(lp_alp1 ,"V" ,"Local parameter ALP1 after clipping") `OPP(lp_alp2 ,"V^-1" ,"Local parameter ALP2 after clipping") `OPP(lp_vp ,"V" ,"Local parameter VP after clipping") `OPP(lp_a1 ,"" ,"Local parameter A1 after clipping") `OPP(lp_a2 ,"V" ,"Local parameter A2 after T-scaling and clipping") `OPP(lp_sta2 ,"" ,"Local parameter STA2 after clipping") `OPP(lp_a3 ,"" ,"Local parameter A3 after clipping") `OPP(lp_a4 ,"1/sqrt(V)" ,"Local parameter A4 after clipping") `OPP(lp_gco ,"" ,"Local parameter GCO after clipping") `OPP(lp_iginv ,"A" ,"Local parameter IGINV after T-scaling and clipping") `OPP(lp_igov ,"A" ,"Local parameter IGOV after T-scaling and clipping") `OPP(lp_igovd ,"A" ,"Local parameter IGOVD after T-scaling and clipping") `OPP(lp_stig ,"" ,"Local parameter STIG after clipping") `OPP(lp_gc2 ,"" ,"Local parameter GC2 after clipping") `OPP(lp_gc3 ,"" ,"Local parameter GC3 after clipping") `OPP(lp_gc2ov ,"" ,"Local parameter GC2OV after clipping") `OPP(lp_gc3ov ,"" ,"Local parameter GC3OV after clipping") `OPP(lp_chib ,"V" ,"Local parameter CHIB after clipping") `OPP(lp_agidl ,"A/V^3" ,"Local parameter AGIDL after clipping") `OPP(lp_agidld ,"A/V^3" ,"Local parameter AGIDLD after clipping") `OPP(lp_bgidl ,"V" ,"Local parameter BGIDL after T-scaling and clipping") `OPP(lp_bgidld ,"V" ,"Local parameter BGIDLD after T-scaling and clipping") `OPP(lp_stbgidl ,"V/K" ,"Local parameter STBGIDL after clipping") `OPP(lp_stbgidld ,"V/K" ,"Local parameter STBGIDLD after clipping") `OPP(lp_cgidl ,"" ,"Local parameter CGIDL after clipping") `OPP(lp_cgidld ,"" ,"Local parameter CGIDLD after clipping") `OPP(lp_cox ,"F" ,"Local parameter COX after clipping") `OPP(lp_cgov ,"F" ,"Local parameter CGOV after clipping") `OPP(lp_cgovd ,"F" ,"Local parameter CGOVD after clipping") `OPP(lp_cgbov ,"F" ,"Local parameter CGBOV after clipping") `OPP(lp_cfr ,"F" ,"Local parameter CFR after clipping") `OPP(lp_cfrd ,"F" ,"Local parameter CFRD after clipping") `OPP(lp_fnt ,"" ,"Local parameter FNT after clipping") `OPP(lp_fntexc ,"" ,"Local parameter FNTEXC after clipping") `OPP(lp_nfa ,"1/(V m^4)" ,"Local parameter NFA after clipping") `OPP(lp_nfb ,"1/(V m^4)" ,"Local parameter NFB after clipping") `OPP(lp_nfc ,"V^-1" ,"Local parameter NFC after clipping") `OPP(lp_ef ,"" ,"Local parameter EF after clipping") `OPP(lp_vfbedge ,"V" ,"Local parameter VFBEDGE after T-scaling and clipping") `OPP(lp_stvfbedge ,"V/K" ,"Local parameter STVFBEDGE after clipping") `OPP(lp_dphibedge ,"V" ,"Local parameter DPHIBEDGE after clipping") `OPP(lp_neffedge ,"m^-3" ,"Local parameter NEFFEDGE after clipping") `OPP(lp_ctedge ,"" ,"Local parameter CTEDGE after clipping") `OPP(lp_betnedge ,"m^2/V/s" ,"Local parameter BETNEDGE after T-scaling and clipping") `OPP(lp_stbetedge ,"" ,"Local parameter STBETEDGE after clipping") `OPP(lp_psceedge ,"" ,"Local parameter PSCEEDGE after clipping") `OPP(lp_pscebedge ,"V^-1" ,"Local parameter PSCEBEDGE after clipping") `OPP(lp_pscededge ,"V^-1" ,"Local parameter PSCEDEDGE after clipping") `OPP(lp_cfedge ,"V" ,"Local parameter CFEDGE after clipping") `OPP(lp_cfdedge ,"V^-1" ,"Local parameter CFDEDGE after clipping") `OPP(lp_cfbedge ,"V^-1" ,"Local parameter CFBEDGE after clipping") `OPP(lp_fntedge ,"" ,"Local parameter FNTEDGE after clipping") `OPP(lp_nfaedge ,"1/(V m^4)" ,"Local parameter NFAEDGE after clipping") `OPP(lp_nfbedge ,"1/(V m^4)" ,"Local parameter NFBEDGE after clipping") `OPP(lp_nfcedge ,"V^-1" ,"Local parameter NFCEDGE after clipping") `OPP(lp_efedge ,"" ,"Local parameter EFEDGE after clipping") `OPP(lp_rg ,"Ohm" ,"Local parameter RG after clipping") `OPP(lp_rse ,"Ohm" ,"Local parameter RSE after clipping") `OPP(lp_rde ,"Ohm" ,"Local parameter RDE after clipping") `OPP(lp_rbulk ,"Ohm" ,"Local parameter RBULK after clipping") `OPP(lp_rwell ,"Ohm" ,"Local parameter RWELL after clipping") `OPP(lp_rjuns ,"Ohm" ,"Local parameter RJUNS after clipping") `OPP(lp_rjund ,"Ohm" ,"Local parameter RJUND after clipping") `ifdef SelfHeating `OPP(lp_rth ,"K/W" ,"Local parameter RTH after T-scaling and clipping") `OPP(lp_cth ,"J/K" ,"Local parameter CTH after clipping") `OPP(lp_strth ,"" ,"Local parameter STRTH after clipping") `OPP(pdiss ,"W" ,"Power dissipation") `OPP(dtsh ,"K" ,"Temperature rise due to self heating") `endif // SelfHeating `OPP(tk ,"K" ,"Device Temperature") `OPP(cjosbot ,"F" ,"Bottom component of total zero-bias source junction capacitance at device temperature") `OPP(cjossti ,"F" ,"STI-edge component of total zero-bias source junction capacitance at device temperature") `OPP(cjosgat ,"F" ,"Gate-edge component of total zero-bias source junction capacitance at device temperature") `OPP(vbisbot ,"V" ,"Built-in voltage of source-side bottom junction at device temperature") `OPP(vbissti ,"V" ,"Built-in voltage of source-side STI-edge junction at device temperature") `OPP(vbisgat ,"V" ,"Built-in voltage of source-side gate-edge junction at device temperature") `OPP(idsatsbot ,"A" ,"Total source-side bottom junction saturation current") `OPP(idsatssti ,"A" ,"Total source-side STI-edge junction saturation current") `OPP(idsatsgat ,"A" ,"Total source-side gate-edge junction saturation current") `OPP(cjosbotd ,"F" ,"Bottom component of total zero-bias drain junction capacitance at device temperature") `OPP(cjosstid ,"F" ,"STI-edge component of total zero-bias drain junction capacitance at device temperature") `OPP(cjosgatd ,"F" ,"Gate-edge component of total zero-bias drain junction capacitance at device temperature") `OPP(vbisbotd ,"V" ,"Built-in voltage of drain-side bottom junction at device temperature") `OPP(vbisstid ,"V" ,"Built-in voltage of drain-side STI-edge junction at device temperature") `OPP(vbisgatd ,"V" ,"Built-in voltage of drain-side gate-edge junction at device temperature") `OPP(idsatsbotd ,"A" ,"Total drain-side bottom junction saturation current") `OPP(idsatsstid ,"A" ,"Total drain-side STI-edge junction saturation current") `OPP(idsatsgatd ,"A" ,"Total drain-side gate-edge junction saturation current") `ifdef NQSmodel `OPP(lp_munqs ,"" ,"Local parameter MUNQS after clipping") `endif // NQSmodel // -------------------------------------------------------------------------------------------------------------- // Analog block with all calculations and contribs // -------------------------------------------------------------------------------------------------------------- analog begin // -------------------------------------------------------------------------------------------------------------- // Definition of bias/instance independent model variables // -------------------------------------------------------------------------------------------------------------- `INITIAL_MODEL begin : initial_model // Clipping and rounding of switch parameters if (`PGIVEN(nmos)) begin CHNL_TYPE = `NMOS; end else if (`PGIVEN(pmos)) begin CHNL_TYPE = `PMOS; end else begin CHNL_TYPE = (`PGIVEN(TYPE)) ? TYPE : `NMOS; end //$strobe("CHNL_TYPE %d", CHNL_TYPE); EPSSI = `EPSO * `EPSRSI; SWGEO_i = floor(`CLIP_BOTH(SWGEO, 0.0, 2.0) + 0.5); SWIGATE_i = floor(`CLIP_BOTH(SWIGATE, 0.0, 2.0) + 0.5); SWIMPACT_i = floor(`CLIP_BOTH(SWIMPACT, 0.0, 1.0) + 0.5); SWGIDL_i = floor(`CLIP_BOTH(SWGIDL, 0.0, 1.0) + 0.5); SWJUNCAP_i = floor(`CLIP_BOTH(SWJUNCAP, 0.0, 3.0) + 0.5); SWJUNASYM_i = floor(`CLIP_BOTH(SWJUNASYM, 0.0, 1.0) + 0.5); SWNUD_i = floor(`CLIP_BOTH(SWNUD, 0.0, 2.0) + 0.5); SWEDGE_i = floor(`CLIP_BOTH(SWEDGE, 0.0, 1.0) + 0.5); SWDELVTAC_i = floor(`CLIP_BOTH(SWDELVTAC, 0.0, 1.0) + 0.5); SWQSAT_i = floor(`CLIP_BOTH(SWQSAT, 0.0, 1.0) + 0.5); SWQPART_i = floor(`CLIP_BOTH(SWQPART, 0.0, 1.0) + 0.5); SWIGN_i = floor(`CLIP_BOTH(SWIGN, 0.0, 1.0) + 0.5); QMC_i = `CLIP_LOW(QMC, 0.0); `ifdef NQSmodel if (SWNQS < 0.5) begin SWNQS_i = 0; end else begin if (SWNQS < 1.5) begin SWNQS_i = 1; end else begin if (SWNQS < 2.5) begin SWNQS_i = 2; end else begin if (SWNQS < 4.0) begin SWNQS_i = 3; end else begin if (SWNQS < 7.0) begin SWNQS_i = 5; end else begin SWNQS_i = 9; end end end end end inorm = 1.0e-12; r_nqs = 1.0e3; vnorm = 10.0; vnorm_inv = 1.0 / vnorm; `endif // NQSmodel // Clipping of global model parameters TOXO_i = `CLIP_LOW(TOXO, 1.0e-10); EPSROXO_i = `CLIP_LOW(EPSROXO, 1.0); NSUBO_i = `CLIP_LOW(NSUBO, 1.0e20); WSEG_i = `CLIP_LOW(WSEG, 1.0e-10); NPCK_i = `CLIP_LOW(NPCK, 0.0); WSEGP_i = `CLIP_LOW(WSEGP, 1.0e-10); LPCK_i = `CLIP_LOW(LPCK, 1.0e-10); TOXOVO_i = `CLIP_LOW(TOXOVO, 1.0e-10); TOXOVDO_i = `CLIP_LOW(TOXOVDO, 1.0e-10); LOV_i = `CLIP_LOW(LOV, 0.0); LOVD_i = `CLIP_LOW(LOVD, 0.0); LP1_i = `CLIP_LOW(LP1, 1.0e-10); LP2_i = `CLIP_LOW(LP2, 1.0e-10); WBET_i = `CLIP_LOW(WBET, 1.0e-10); AXL_i = `CLIP_LOW(AXL, 0.0); ALP1L2_i = `CLIP_LOW(ALP1L2, 0.0); ALP2L2_i = `CLIP_LOW(ALP2L2, 0.0); SAREF_i = `CLIP_LOW(SAREF, 1.0e-9); SBREF_i = `CLIP_LOW(SBREF, 1.0e-9); KVSAT_i = `CLIP_BOTH(KVSAT, -1.0, 1.0); LLODKUO_i = `CLIP_LOW(LLODKUO, 0.0); WLODKUO_i = `CLIP_LOW(WLODKUO, 0.0); LLODVTH_i = `CLIP_LOW(LLODVTH, 0.0); WLODVTH_i = `CLIP_LOW(WLODVTH, 0.0); LODETAO_i = `CLIP_LOW(LODETAO, 0.0); SCREF_i = `CLIP_LOW(SCREF, 0.0); WEB_i = WEB; WEC_i = WEC; RSHG_i = `CLIP_LOW(RSHG, 0.0); RSH_i = `CLIP_LOW(RSH, 0.0); RSHD_i = `CLIP_LOW(RSHD, 0.0); RINT_i = `CLIP_LOW(RINT, 0.0); RVPOLY_i = `CLIP_LOW(RVPOLY, 0.0); NSUBEDGEO_i = `CLIP_LOW(NSUBEDGEO, 1.0e20); LPEDGE_i = `CLIP_LOW(LPEDGE, 1.0e-10); // Definition of global-binning parameters for the charge model in the case of separate calculation in saturation `DefACparam(CFACL_i, CFL, CFACL) `DefACparam(CFACLEXP_i, CFLEXP, CFACLEXP) `DefACparam(CFACW_i, CFW, CFACW) `DefACparam(THESATACO_i, THESATO, THESATACO) `DefACparam(THESATACL_i, THESATL, THESATACL) `DefACparam(THESATACLEXP_i, THESATLEXP, THESATACLEXP) `DefACparam(THESATACW_i, THESATW, THESATACW) `DefACparam(THESATACLW_i, THESATLW, THESATACLW) `DefACparam(AXACO_i, AXO, AXACO) `DefACparam(AXACL_i, AXL_i, AXACL) AXACL_i = `CLIP_LOW(AXACL_i, 0.0); `DefACparam(ALPACL_i, ALPL, ALPACL) `DefACparam(ALPACLEXP_i, ALPLEXP, ALPACLEXP) `DefACparam(ALPACW_i, ALPW, ALPACW) `DefACparam(POCFAC_i, POCF, POCFAC) `DefACparam(PLCFAC_i, PLCF, PLCFAC) `DefACparam(PWCFAC_i, PWCF, PWCFAC) `DefACparam(PLWCFAC_i, PLWCF, PLWCFAC) `DefACparam(POTHESATAC_i, POTHESAT, POTHESATAC) `DefACparam(PLTHESATAC_i, PLTHESAT, PLTHESATAC) `DefACparam(PWTHESATAC_i, PWTHESAT, PWTHESATAC) `DefACparam(PLWTHESATAC_i, PLWTHESAT, PLWTHESATAC) `DefACparam(POAXAC_i, POAX, POAXAC) `DefACparam(PLAXAC_i, PLAX, PLAXAC) `DefACparam(PWAXAC_i, PWAX, PWAXAC) `DefACparam(PLWAXAC_i, PLWAX, PLWAXAC) `DefACparam(POALPAC_i, POALP, POALPAC) `DefACparam(PLALPAC_i, PLALP, PLALPAC) `DefACparam(PWALPAC_i, PWALP, PWALPAC) `DefACparam(PLWALPAC_i, PLWALP, PLWALPAC) `DefACparam(KVSATAC_i, KVSAT, KVSATAC) KVSATAC_i = `CLIP_BOTH(KVSATAC_i, -1.0, 1.0); // Transistor temperature TR_i = `CLIP_LOW(TR, -273.0); TKR = `KELVINCONVERSION + TR_i; TKA = $temperature + DTA; rTa = TKA / TKR; delTa = TKA - TKR; phita = TKA * `KBOL / `QELE; inv_phita = 1.0 / phita; `ifdef SelfHeating // do nothing `else // SelfHeating TKD = TKA; `TempInitialize `endif // SelfHeating // JUNCAP2 `include "JUNCAP200_InitModel.include" end // initial_model // -------------------------------------------------------------------------------------------------------------- // Definition of instance dependent and bias independent variables // -------------------------------------------------------------------------------------------------------------- `INITIAL_INSTANCE begin : initial_instance //ngspice-adms: JUNCAP2 Instance parameter handling IFACTOR_i = `CLIP_LOW( IFACTOR ,`IFACTOR_cliplow); CFACTOR_i = `CLIP_LOW( CFACTOR ,`CFACTOR_cliplow); // Declaration of local variables // real Invsa, Invsb, Invsaref, Invsbref, Kstressu0, rhobeta, rhobetaref, Kstressvth0; // real temp0, temp00, templ, tempw, Lx, Wx, loop, tmpa, tmpb; // Instance variables NF_i = 1.0; invNF = 1.0; LE = 0.0; WE = 0.0; L_i = L; W_i = W; SA_i = SA; SB_i = SB; SD_i = SD; SC_i = SC; XGW_i = XGW; ABSOURCE_i = ABSOURCE; LSSOURCE_i = LSSOURCE; LGSOURCE_i = LGSOURCE; ABDRAIN_i = ABDRAIN; LSDRAIN_i = LSDRAIN; LGDRAIN_i = LGDRAIN; AS_i = AS; PS_i = PS; AD_i = AD; PD_i = PD; JW_i = JW; // Clipping of the instance parameters if ((SWGEO_i == 1) || (SWGEO_i == 2)) begin NF_i = `CLIP_LOW(NF, 1.0); NF_i = floor(NF_i + 0.5); // round to nearest integer invNF = 1.0 / NF_i; end L_i = `CLIP_LOW(L_i, 1.0e-9); W_i = `CLIP_LOW(W_i * invNF, 1.0e-9); SCA_i = `CLIP_LOW(SCA, 0.0); SCB_i = `CLIP_LOW(SCB, 0.0); SCC_i = `CLIP_LOW(SCC, 0.0); NGCON_i = (NGCON < 1.5) ? 1.0 : 2.0; // Internal local parameters `include "PSP103_scaling.include" // Local process parameters EPSOX = `EPSO * EPSROX_i; CoxPrime = EPSOX / TOX_i; tox_sq = TOX_i * TOX_i; Cox_over_q = CoxPrime / `QELE; NEFFAC_i = FACNEFFAC_i * NEFF_i; NEFFAC_i = `CLIP_BOTH(NEFFAC_i, 1.0e20, 1.0e26); // QM corrections: initially calculated in PSP103_macrodefs.include (PSP103.3) qq = 0.0; if (QMC_i > 0.0) begin qq = 0.4 * `QMN * QMC_i * pow(CoxPrime, `twoThirds); if (CHNL_TYPE==`PMOS) begin qq = `QMP / `QMN * qq; end end // Electrical field parameters E_eff0 = 1.0e-8 * CoxPrime / EPSSI; eta_mu = 0.5 * FETA_i; eta_mu1 = 0.5; if (CHNL_TYPE == `PMOS) begin eta_mu = `oneThird * FETA_i; eta_mu1 = `oneThird; end // Linear-saturation transition parameter inv_AX = 1.0 / AX_i; // CLM parameter inv_VP = 1.0 / VP_i; // Gate overlap CoxovPrime = EPSOX / TOXOV_i; CoxovPrime_d = EPSOX / TOXOVD_i; GOV_s = sqrt(2.0 * `QELE * NOV_i * EPSSI * inv_phita) / CoxovPrime; GOV_d = sqrt(2.0 * `QELE * NOVD_i * EPSSI * inv_phita) / CoxovPrime_d; GOV2_s = GOV_s * GOV_s; GOV2_d = GOV_d * GOV_d; `sp_ovInit(GOV_s, GOV2_s, SP_OV_eps2_s, SP_OV_a_s, SP_OV_delta1_s) `sp_ovInit(GOV_d, GOV2_d, SP_OV_eps2_d, SP_OV_a_d, SP_OV_delta1_d) // Temperature scaling variables `ifdef SelfHeating // do nothing `else // SelfHeating // Initialize variables of edge transistor `TempScaling `endif // SelfHeating // Gate to channel leakage parameters inv_CHIB = 1.0 / CHIB_i; B_fact = 4.0 * `oneThird * sqrt(2.0 * `QELE * `MELE * CHIB_i) / `HBAR; BCH = B_fact * TOX_i; BOV = B_fact * TOXOV_i; BOV_d = B_fact * TOXOVD_i; GCQ = 0.0; if (GC3_i < 0) begin GCQ = -0.495 * GC2_i / GC3_i; end GCQOV = GCQ; if (SWIGATE_i == 2) begin GCQOV = 0.0; if (GC3OV_i < 0.0) begin GCQOV = -0.495 * GC2OV_i / GC3OV_i; end end tf_ig = pow(rTa, STIG_i); IGINV_i = IGINV_i * tf_ig; IGOV_i = IGOV_i * tf_ig; IGOVD_i = IGOVD_i * tf_ig; // GIDL parameters AGIDLs = AGIDL_i * 4.0e-18 / (TOXOV_i * TOXOV_i); AGIDLDs = AGIDLD_i * 4.0e-18 / (TOXOVD_i * TOXOVD_i); B_fact = `MAX(1.0 + STBGIDL_i * delTa, 0.0); BGIDL_T = BGIDL_i * B_fact; BGIDLs = BGIDL_T * TOXOV_i * 5.0e8; B_fact = `MAX(1.0 + STBGIDLD_i * delTa, 0.0); BGIDLD_T = BGIDLD_i * B_fact; BGIDLDs = BGIDLD_T * TOXOVD_i * 5.0e8; // Self Heating parameters `ifdef SelfHeating RTH_T = RTH_i * pow(rTa, STRTH_i); `endif // SelfHeating // Noise model parameters fac_exc = `MELE * 1.0e9 * FNTEXC_i; //ngspice-adms: Parasitic resistances - no node collapse RG_i = `CLIP_LOW(RG, 1.0e-3); RSE_i = `CLIP_LOW(RSE, 1.0e-3); RDE_i = `CLIP_LOW(RDE, 1.0e-3); RBULK_i = `CLIP_LOW(RBULK, 1.0e-3); RJUNS_i = `CLIP_LOW(RJUNS, 1.0e-3); RJUND_i = `CLIP_LOW(RJUND, 1.0e-3); RWELL_i = `CLIP_LOW(RWELL, 1.0e-3); // Conductance of parasitic resistance if (RG_i > 0.0) begin ggate = 1.0 / RG_i; end else begin ggate = 0.0; end if (RSE_i > 0.0) begin gsource = 1.0 / RSE_i; end else begin gsource = 0.0; end if (RDE_i > 0.0) begin gdrain = 1.0 / RDE_i; end else begin gdrain = 0.0; end if (RBULK_i > 0.0) begin gbulk = 1.0 / RBULK_i; end else begin gbulk = 0.0; end if (RJUNS_i > 0.0) begin gjuns = 1.0 / RJUNS_i; end else begin gjuns = 0.0; end if (RJUND_i > 0.0) begin gjund = 1.0 / RJUND_i; end else begin gjund = 0.0; end if (RWELL_i > 0.0) begin gwell = 1.0 / RWELL_i; end else begin gwell = 0.0; end // JUNCAP instance parameters ABS_i = 0.0; LSS_i = 0.0; LGS_i = 0.0; ABD_i = 0.0; LSD_i = 0.0; LGD_i = 0.0; jwcorr = 0.0; jww = WE; if (SWGEO_i == 0) begin jww = `CLIP_LOW(JW_i, `LG_cliplow); end if (SWJUNCAP_i == 3) begin jwcorr = 1.0; end ABS_i = ABSOURCE_i * invNF; LSS_i = LSSOURCE_i * invNF; LGS_i = LGSOURCE_i * invNF; ABD_i = ABDRAIN_i * invNF; LSD_i = LSDRAIN_i * invNF; LGD_i = LGDRAIN_i * invNF; if ((SWJUNCAP_i == 2) || (SWJUNCAP_i == 3)) begin ABS_i = AS_i * invNF; LSS_i = PS_i * invNF - jwcorr * jww; LGS_i = jww; ABD_i = AD_i * invNF; LSD_i = PD_i * invNF - jwcorr * jww; LGD_i = jww; end if ((SWJUNCAP_i == 1) || (SWJUNCAP_i == 2) || (SWJUNCAP_i == 3)) begin ABSOURCE_i = `CLIP_LOW(ABS_i, `AB_cliplow); LSSOURCE_i = `CLIP_LOW(LSS_i, `LS_cliplow); LGSOURCE_i = `CLIP_LOW(LGS_i, `LG_cliplow); ABDRAIN_i = `CLIP_LOW(ABD_i, `AB_cliplow); LSDRAIN_i = `CLIP_LOW(LSD_i, `LS_cliplow); LGDRAIN_i = `CLIP_LOW(LGD_i, `LG_cliplow); end else begin ABSOURCE_i = 0.0; LSSOURCE_i = 0.0; LGSOURCE_i = 0.0; ABDRAIN_i = 0.0; LSDRAIN_i = 0.0; LGDRAIN_i = 0.0; end // Initialization of JUNCAP (global) variables; required for some verilog-A compilers vbimin_s = 0.0; vbimin_d = 0.0; vfmin_s = 0.0; vfmin_d = 0.0; vch_s = 0.0; vch_d = 0.0; vbbtlim_s = 0.0; vbbtlim_d = 0.0; VMAX_s = 0.0; VMAX_d = 0.0; exp_VMAX_over_phitd_s = 0.0; exp_VMAX_over_phitd_d = 0.0; ISATFOR1_s = 0.0; ISATFOR1_d = 0.0; MFOR1_s = 1.0; MFOR1_d = 1.0; ISATFOR2_s = 0.0; ISATFOR2_d = 0.0; MFOR2_s = 1.0; MFOR2_d = 1.0; ISATREV_s = 0.0; ISATREV_d = 0.0; MREV_s = 1.0; MREV_d = 1.0; m0flag_s = 0.0; m0flag_d = 0.0; xhighf1_s = 0.0; xhighf1_d = 0.0; expxhf1_s = 0.0; expxhf1_d = 0.0; xhighf2_s = 0.0; xhighf2_d = 0.0; expxhf2_s = 0.0; expxhf2_d = 0.0; xhighr_s = 0.0; xhighr_d = 0.0; expxhr_s = 0.0; expxhr_d = 0.0; zflagbot_s = 1.0; zflagbot_d = 1.0; zflagsti_s = 1.0; zflagsti_d = 1.0; zflaggat_s = 1.0; zflaggat_d = 1.0; m0_rev = 0.0; mcor_rev = 0.0; I1_cor = 0.0; I2_cor = 0.0; I3_cor = 0.0; I4_cor = 0.0; I5_cor = 0.0; tt0 = 0.0; tt1 = 0.0; tt2 = 0.0; zfrac = 0.0; alphaje = 0.0; if (SWJUNCAP_i > 0) begin `JuncapInitInstance(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, idsatbot, idsatsti, idsatgat, vbibot, vbisti, vbigat, PBOT_i, PSTI_i, PGAT_i, VBIRBOT_i, VBIRSTI_i, VBIRGAT_i, VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s) `JuncapInitInstance(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, idsatbot_d, idsatsti_d, idsatgat_d, vbibot_d, vbisti_d, vbigat_d, PBOTD_i, PSTID_i, PGATD_i, VBIRBOTD_i, VBIRSTID_i, VBIRGATD_i, VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d) if (SWJUNEXP_i == 1) begin : JUNCAPexpressInit // Local variable declaration // `LocalGlobalVars // results computed here are not used elsewhere // real ijunbot, ijunsti, ijungat, qjunbot, qjunsti, qjungat; // Initialization of (local) variables; required for some verilog-A compilers ysq = 0.0; terfc = 0.0; erfcpos = 0.0; h1 = 0.0; h2 = 0.0; h2d = 0.0; h3 = 0.0; h4 = 0.0; h5 = 0.0; idmult = 0.0; vj = 0.0; z = 0.0; zinv = 0.0; two_psistar = 0.0; vjlim = 0.0; vjsrh = 0.0; vbbt = 0.0; vav = 0.0; tmp = 0.0; id = 0.0; isrh = 0.0; vbi_minus_vjsrh = 0.0; wsrhstep = 0.0; dwsrh = 0.0; wsrh = 0.0; wdep = 0.0; asrh = 0.0; itat = 0.0; btat = 0.0; twoatatoverthreebtat = 0.0; umaxbeforelimiting = 0.0; umax = 0.0; sqrtumax = 0.0; umaxpoweronepointfive = 0.0; wgamma = 0.0; wtat = 0.0; ktat = 0.0; ltat = 0.0; mtat = 0.0; xerfc = 0.0; erfctimesexpmtat = 0.0; gammamax = 0.0; ibbt = 0.0; Fmaxr = 0.0; fbreakdown = 0.0; qjunbot = 0.0; qjunsti = 0.0; qjungat = 0.0; // Computation of JUNCAP-express internal parameters `JuncapExpressInit1(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, VJUNREF_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s) `JuncapExpressInit2(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s) `JuncapExpressInit3(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, idsatbot, idsatsti, idsatgat, ISATFOR1_s, MFOR1_s, ISATFOR2_s, MFOR2_s, ISATREV_s, MREV_s, m0flag_s) `JuncapExpressInit4(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, FJUNQ_i, cjobot, cjosti, cjogat, zflagbot_s, zflagsti_s, zflaggat_s) `JuncapExpressInit5(ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, ISATFOR1_s, ISATFOR2_s, ISATREV_s, xhighf1_s, expxhf1_s, xhighf2_s, expxhf2_s, xhighr_s, expxhr_s) `JuncapExpressInit1(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, VJUNREFD_i, qprefbot_d, qpref2bot_d, vbiinvbot_d, one_minus_PBOT_d, idsatbot_d, CSRHBOTD_i, CTATBOTD_i, vbibot_d, wdepnulrbot_d, VBIRBOTinv_d, PBOTD_i, ftdbot_d, btatpartbot_d, atatbot_d, one_over_one_minus_PBOT_d, CBBTBOTD_i, VBIRBOTD_i, wdepnulrinvbot_d, fbbtbot_d, VBRBOTD_i, VBRinvbot_d, PBRBOTD_i, fstopbot_d, slopebot_d, qprefsti_d, qpref2sti_d, vbiinvsti_d, one_minus_PSTI_d, idsatsti_d, CSRHSTID_i, CTATSTID_i, vbisti_d, wdepnulrsti_d, VBIRSTIinv_d, PSTID_i, ftdsti_d, btatpartsti_d, atatsti_d, one_over_one_minus_PSTI_d, CBBTSTID_i, VBIRSTID_i, wdepnulrinvsti_d, fbbtsti_d, VBRSTID_i, VBRinvsti_d, PBRSTID_i, fstopsti_d, slopesti_d, qprefgat_d, qpref2gat_d, vbiinvgat_d, one_minus_PGAT_d, idsatgat_d, CSRHGATD_i, CTATGATD_i, vbigat_d, wdepnulrgat_d, VBIRGATinv_d, PGATD_i, ftdgat_d, btatpartgat_d, atatgat_d, one_over_one_minus_PGAT_d, CBBTGATD_i, VBIRGATD_i, wdepnulrinvgat_d, fbbtgat_d, VBRGATD_i, VBRinvgat_d, PBRGATD_i, fstopgat_d, slopegat_d, VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d) `JuncapExpressInit2(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, qprefbot_d, qpref2bot_d, vbiinvbot_d, one_minus_PBOT_d, idsatbot_d, CSRHBOTD_i, CTATBOTD_i, vbibot_d, wdepnulrbot_d, VBIRBOTinv_d, PBOTD_i, ftdbot_d, btatpartbot_d, atatbot_d, one_over_one_minus_PBOT_d, CBBTBOTD_i, VBIRBOTD_i, wdepnulrinvbot_d, fbbtbot_d, VBRBOTD_i, VBRinvbot_d, PBRBOTD_i, fstopbot_d, slopebot_d, qprefsti_d, qpref2sti_d, vbiinvsti_d, one_minus_PSTI_d, idsatsti_d, CSRHSTID_i, CTATSTID_i, vbisti_d, wdepnulrsti_d, VBIRSTIinv_d, PSTID_i, ftdsti_d, btatpartsti_d, atatsti_d, one_over_one_minus_PSTI_d, CBBTSTID_i, VBIRSTID_i, wdepnulrinvsti_d, fbbtsti_d, VBRSTID_i, VBRinvsti_d, PBRSTID_i, fstopsti_d, slopesti_d, qprefgat_d, qpref2gat_d, vbiinvgat_d, one_minus_PGAT_d, idsatgat_d, CSRHGATD_i, CTATGATD_i, vbigat_d, wdepnulrgat_d, VBIRGATinv_d, PGATD_i, ftdgat_d, btatpartgat_d, atatgat_d, one_over_one_minus_PGAT_d, CBBTGATD_i, VBIRGATD_i, wdepnulrinvgat_d, fbbtgat_d, VBRGATD_i, VBRinvgat_d, PBRGATD_i, fstopgat_d, slopegat_d, VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d) `JuncapExpressInit3(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, idsatbot_d, idsatsti_d, idsatgat_d, ISATFOR1_d, MFOR1_d, ISATFOR2_d, MFOR2_d, ISATREV_d, MREV_d, m0flag_d) `JuncapExpressInit4(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, FJUNQD_i, cjobot_d, cjosti_d, cjogat_d, zflagbot_d, zflagsti_d, zflaggat_d) `JuncapExpressInit5(ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, ISATFOR1_d, ISATFOR2_d, ISATREV_d, xhighf1_d, expxhf1_d, xhighf2_d, expxhf2_d, xhighr_d, expxhr_d) end // JUNCAPexpressInit end end // initial_instance begin : evaluateblock // real sigVds, dphit1, xgct, xsct0, xbct, xsbstar, xsct, dCTG, ct_fact, phit1, inv_phit1, xg_dc, alpha_dc, dps_dc, qim_dc; // real qim1_dc, H_dc, FdL_dc, Gvsatinv_dc, Ids, Iimpact, mavl, Igdov, Igsov, Igcd, Igcs, eta_p_ac, Gvsat_ac, Gmob_dL_ac, H0; // real COX_qm, ijun_s, ijunbot_s, ijunsti_s, ijungat_s, ijun_d, ijunbot_d, ijunsti_d, ijungat_d, qjun_s, qjunbot_s, qjunsti_s; // real qjungat_s, qjun_d, qjunbot_d, qjunsti_d, qjungat_d, jnoise_s, jnoise_d, Gmob_dc, xitsb_dc, Vdse_dc, Vsbstaredge, Vsbxedge; // real dphit1edge, phit1edge, inv_phit1edge, Vdspedge, delVgedge, xgedge, xbedge, dxthedge, xnedge_s, qseffedge, xnedge_d; // real qdseffedge, qdeffedge, qmeffedge, dsqredge, alphabmedge, Idsedge, Sfledge, midedge, sqidedge; // `ifdef SelfHeating // real Pdiss, phit, BET_i, BETEDGE_i, nt0, nt, THESAT_T, THESATAC_T, Sfl_prefac, phit0edge, Gfedge2, lnGfedge2, Sfl_prefac_edge; // real ntedge; // `endif // SelfHeating // real temp, temp1, temp2; // -------------------------------------------------------------------------------------------------------------- // DC bias dependent quantities (calculations for current contribs) // -------------------------------------------------------------------------------------------------------------- begin : evaluateStatic // Initialize temporary variables temp = 0.0; temp1 = 0.0; temp2 = 0.0; // Initialization of variables for SHE effect `ifdef SelfHeating TKD = TKA + Temp(br_rth); `TempInitialize `TempScaling `endif // SelfHeating QCLM = 0.0; xs_ov = 0.0; xd_ov = 0.0; Vovs = 0.0; Vovd = 0.0; Iimpact = 0.0; mavl = 0.0; // Initialization of variables for NQS model `ifdef NQSmodel pd = 1.0; ym = 0.0; `endif // NQSmodel // Voltage affectations if (CHNL_TYPE == `NMOS) begin Vgs = V(GP, SI); Vds = V(DI, SI); Vsb = V(SI, BP); Vjun_s = -V(SI, BS); Vjun_d = -V(DI, BD); end else begin Vgs = -V(GP, SI); Vds = -V(DI, SI); Vsb = -V(SI, BP); Vjun_s = V(SI, BS); Vjun_d = V(DI, BD); end Vgb = Vgs + Vsb; // Voltages NOT subject to S/D-interchange VgsPrime = Vgs; VsbPrime = Vsb; VdbPrime = Vds + Vsb; VgdPrime = Vgs - Vds; xgs_ov = -VgsPrime * inv_phita; xgd_ov = -VgdPrime * inv_phita; // Source-drain interchange sigVds = 1.0; if (Vds < 0.0) begin sigVds = -1.0; Vgs = Vgs - Vds; Vsb = Vsb + Vds; Vds = -Vds; end Vdb = Vds + Vsb; Vdsx = Vds * Vds / (sqrt(Vds * Vds + 0.01) + 0.1); // Core's model calculation for DC begin : SPcalc_dc // Local variable declaration // `SPcalcLocalVarDecl // real FdL, qim1_1, r1, r2, s2, dL1; // Conditioning of terminal voltages temp = `MINA(Vdb, Vsb, bphi_dc) + phix_dc; Vsbstar_dc = Vsb - `MINA(temp, 0, aphi_dc) + phix1_dc; Vsbstar_dc_tmp = Vsbstar_dc; // Adapt Vsb for NUD-effect if ((SWNUD_i != 0) && (GFACNUD_i != 1.0)) begin Vmb = Vsbstar_dc + 0.5 * (Vds - Vdsx); us = sqrt(Vmb + phib_dc) - sqrt_phib_dc; temp = 2.0 * (us - us1) / us21 - 1.0; usnew = us - 0.25 * (1.0 - GFACNUD_i) * us21 * (temp + sqrt(temp * temp + 0.4804530139182)); Vmbnew = usnew * usnew + (2.0 * sqrt_phib_dc) * usnew; Vsbstar_dc = Vmbnew - 0.5 * (Vds - Vdsx); end // Set variables needed in PSP_core macro phib = phib_dc; G_0 = G_0_dc; Vsbstar = Vsbstar_dc; cfloc = CF_i; thesatloc = THESAT_T; axloc = AX_i; alploc = ALP_i; FdL = 1.0; // Calculation of PSP model's core `SPCalculation if (xg > 0.0) begin qim1_1 = 1.0 / qim1; r1 = qim * qim1_1; r2 = phit1 * (alpha * qim1_1); s2 = ln(1.0 + Vdsx * inv_VP); dL1 = dL + ALP1_i * (qim1_1 * r1 * s1) + ALP2_i * (qbm * r2 * r2 * s2); FdL = (1.0 + dL1 + dL1 * dL1) * GdL; end xg_dc = xg; qeff1_dc = qeff1; Voxm_dc = Voxm; alpha_dc = alpha; dps_dc = dps; qim_dc = qim; qim1_dc = qim1; GdL_dc = GdL; FdL_dc = FdL; H_dc = H; eta_p_dc = eta_p; Gvsat_dc = Gvsat; Gvsatinv_dc = Gvsatinv; Gmob_dL_dc = Gmob_dL; x_ds_dc = x_ds; x_m_dc = x_m; Gf_dc = Gf; Vdsat_dc = Vdsat; Udse_dc = Udse; Gmob_dc = Gmob; xitsb_dc = xitsb; Vdse_dc = Vdse; `ifdef NQSmodel xgm_dc = xgm; thesat1_dc = thesat1; margin_dc = margin; `endif // NQSmodel end // SPcalc_dc if (xg_dc <= 0) begin Ids = 0.0; end else begin // Drain-source current Ids = BET_i * (FdL_dc * qim1_dc * dps_dc * Gvsatinv_dc); end // Surface potential in gate overlap regions if (((SWIGATE_i != 0) && ((IGOV_i > 0.0) || (IGOVD_i > 0.0))) || ((SWGIDL_i != 0) && ((AGIDL_i > 0.0) || (AGIDLD_i > 0.0))) || (CGOV_i > 0.0) || (CGOVD_i > 0.0)) begin SP_OV_xg = 0.5 * (xgs_ov + sqrt(xgs_ov * xgs_ov + SP_OV_eps2_s)); xs_ov = -SP_OV_xg - GOV2_s * 0.5 + GOV_s * sqrt(SP_OV_xg + GOV2_s * 0.25 + SP_OV_a_s) + SP_OV_delta1_s; SP_OV_xg = 0.5 * (xgd_ov + sqrt(xgd_ov * xgd_ov + SP_OV_eps2_d)); xd_ov = -SP_OV_xg - GOV2_d * 0.5 + GOV_d * sqrt(SP_OV_xg + GOV2_d * 0.25 + SP_OV_a_d) + SP_OV_delta1_d; Vovs = -phita * (xgs_ov + xs_ov); Vovd = -phita * (xgd_ov + xd_ov); end // Gate current Igsov = 0.0; Igdov = 0.0; Igc = 0.0; Igb = 0.0; Igcs = 0.0; Igcd = 0.0; if (SWIGATE_i != 0) begin if (IGOV_i > 0.0) begin // Gate-source overlap component of gate current zg = sqrt(Vovs * Vovs + 1.0e-6) * inv_CHIB; if (GC3OV_i < 0.0) begin zg = `MINA(zg, GCQOV, 1.0e-6); end temp = BOV * (-1.5 + zg * (GC2OV_i + GC3OV_i * zg)); if (temp > 0.0) begin TP = `P3(temp); end else begin `expl_low(temp, TP) end Fs1 = 3.0 + xs_ov; Fs2 = -3.0 - GCO_i; Fs3 = 30.0 * VgsPrime; `MNE(Fs1, Fs3, 0.9, temp) `MXE(Fs2, temp, 0.3, Fs) Igsov = IGOV_i * (TP * Fs); end if (IGOVD_i > 0.0) begin // Gate-drain overlap component of gate current zg = sqrt(Vovd * Vovd + 1.0e-6) * inv_CHIB; if (GC3OV_i < 0.0) begin zg = `MINA(zg, GCQOV, 1.0e-6); end temp = BOV_d * (-1.5 + zg * (GC2OV_i + GC3OV_i * zg)); if (temp > 0.0) begin TP = `P3(temp); end else begin `expl_low(temp, TP) end Fs1 = 3.0 + xd_ov; Fs2 = -3.0 - GCO_i; Fs3 = 30.0 * VgdPrime; `MNE(Fs1, Fs3, 0.9, temp) `MXE(Fs2, temp, 0.3, Fs) Igdov = IGOVD_i * (TP * Fs); end // Gate-channel component of gate current if (IGINV_i > 0.0) begin if (xg_dc <= 0.0) begin temp = pow(Vds / Vdsat_lim, AX_i); Udse_dc = Vds * pow(1.0 + temp, -inv_AX) * inv_phit1; end `expl_low(x_ds_dc-Udse_dc, temp) Vm = Vsbstar_dc + phit1 * (0.5 * x_ds_dc - ln(0.5 * (1.0 + temp))); Dch = GCO_i * phit1; arg2mina = Voxm_dc + Dch; psi_t = `MINA(0.0, arg2mina, 0.01); zg = sqrt(Voxm_dc * Voxm_dc + 1.0e-6) * inv_CHIB; if (GC3_i < 0.0) begin zg = `MINA(zg, GCQ, 1.0e-06); end arg1 = (x_m_dc + (psi_t - alpha_b - Vm) * inv_phit1); `expl(arg1,Dsi) arg1 = -(Vgs + Vsbstar_dc - Vm) * inv_phit1; `expl(arg1,temp) Dgate = Dsi * temp; temp = BCH * (-1.5 + zg * (GC2_i + GC3_i * zg)); if (temp > 0) begin TP = `P3(temp); end else begin `expl_low(temp, TP) end Igc0 = IGINV_i * (TP * ln((1.0 + Dsi) / (1.0 + Dgate))); // Source/drain partitioning of gate-channel current if ((xg_dc <= 0.0) || ((GC2_i == 0.0) && (GC3_i == 0.0))) begin igc = 1.0; igcd_h = 0.5; end else begin temp = GC2_i + 2.0 * GC3_i * zg; u0 = CHIB_i / (temp * BCH); x = 0.5 * (dps_dc / u0); u0_div_H = u0 / H_dc; Bg = u0_div_H * (1.0 - u0_div_H) * 0.5; Ag = 0.5 - 3.0 * Bg; if (x < 1.0e-3) begin xsq = x * x; igc = 1.0 + xsq * (`oneSixth + u0_div_H * `oneThird + `oneSixth * (xsq * (0.05 + 0.2 * u0_div_H))); igcd_h = 0.5 * igc - `oneSixth * (x * (1.0 + xsq * (0.4 * (Bg + 0.25) + 0.0285714285714 * (xsq * (0.125 + Bg))))); end else begin inv_x = 1.0 / x; `expl(x, ex) inv_ex = 1.0 / ex; temp = ex - inv_ex; temp2 = ex + inv_ex; igc = 0.5 * ((1.0 - u0_div_H) * temp * inv_x + u0_div_H * temp2); igcd_h = 0.5 * (igc - temp * (Bg - Ag * inv_x * inv_x) - Ag * temp2 * inv_x); end end Sg = 0.5 * (1.0 + xg_dc / sqrt(xg_dc * xg_dc + 1.0e-6)); Igc = Igc0 * igc * Sg; Igcd = Igc0 * igcd_h * Sg; Igcs = Igc - Igcd; Igb = Igc0 * igc * (1.0 - Sg); end // (IGINV >0) end // (SWIGATE != 0) // GIDL/GISL current Igidl = 0.0; Igisl = 0.0; if (SWGIDL_i != 0) begin // GIDL current computation if ((AGIDLD_i > 0) && (Vovd < 0)) begin Vtovd = sqrt(Vovd * Vovd + CGIDLD_i * CGIDLD_i * (VdbPrime * VdbPrime) + 1.0e-6); temp = -BGIDLDs / Vtovd; `expl_low(temp, temp2) Igidl = -AGIDLDs * (VdbPrime * Vovd * Vtovd * temp2); end // GISL current computation if ((AGIDL_i > 0) && (Vovs < 0)) begin Vtovs = sqrt(Vovs * Vovs + CGIDL_i * CGIDL_i * (VsbPrime * VsbPrime) + 1.0e-6); temp = -BGIDLs / Vtovs; `expl_low(temp, temp2) Igisl = -AGIDLs * (VsbPrime * Vovs * Vtovs * temp2); end end // (SWGIDL != 0) // Drain current of edge transistors: PSP 103.4 xgedge = 0.0; qdseffedge = 0.0; qmeffedge = 0.0; dsqredge = 1.0e-40; alphabmedge = 1.0; Idsedge = 0.0; if ((SWEDGE_i != 0.0) && (BETNEDGE_i > 0)) begin temp = `MINA(Vdb, Vsb, bphiedge) + phixedge; Vsbstaredge = Vsb - `MINA(temp, 0, aphiedge) + phix1edge; Vsbxedge = Vsbstaredge + 0.5 * (Vds - Vdsx); dphit1edge = PSCEEDGE_i * (1 + PSCEDEDGE_i * Vdsx)* (1.0 + PSCEBEDGE_i * Vsbxedge); // SCE on subthreshold slope phit1edge = phit0edge * (1.0 + dphit1edge); inv_phit1edge = 1.0 / phit1edge; Vdspedge = 2.0 * Vdsx / (1.0 + sqrt(1.0 + CFDEDGE_i * Vdsx)); delVgedge = CFEDGE_i * Vdspedge * (1 + CFBEDGE_i * Vsbxedge); // DIBL effect xgedge = inv_phit1edge * (Vgs + Vsbstaredge + delVgedge - VFBEDGE_T); xbedge = inv_phit1edge * phibedge; dxthedge = 2.0 * ln(xbedge / Gfedge + sqrt(xbedge)); xnedge_s = inv_phit1edge * Vsbstaredge; `qi_edge(qseffedge,xgedge,xnedge_s) xnedge_d = inv_phit1edge * (Vdse_dc + Vsbstaredge); if ((qseffedge < 1.0e-3) && (Vdse_dc < 1.0e-6)) begin `expl_low((-xnedge_d + xnedge_s), temp) qdseffedge = qseffedge * (temp - 1.0); qdeffedge = qdseffedge + qseffedge; end else begin `qi_edge(qdeffedge,xgedge,xnedge_d) qdseffedge = qdeffedge - qseffedge; end qmeffedge = 0.5 * (qdeffedge + qseffedge); dsqredge = max(xgedge - qmeffedge, 1.0e-40); alphabmedge = 1.0 - 0.5 * Gfedge / sqrt(dsqredge + 0.25 * Gfedge2); Idsedge = -BETEDGE_i * phit1edge * phit1edge * (alphabmedge * qmeffedge + 1.0) * qdseffedge / Gmob_dc; end // Impact-Ionization if ((xg_dc > 0) && (SWIMPACT_i != 0)) begin delVsat = Vds - A3_i * dps_dc; if (delVsat > 0) begin temp2 = A2_T * ((1.0 + A4_i * (sqrt(phib_dc + Vsbstar_dc) - sqrt_phib_dc)) / (delVsat + 1.0e-30)); `expl(-temp2, temp) mavl = A1_i * (delVsat * temp); Iimpact = mavl * (Ids + Idsedge); end end // Threshold voltage calculation for .OP P_D = 1.0 + 0.25 * (Gf_dc * kp); facvsb0 = phib_dc + 2.0 * phit1; facvsb = Vsbstar_dc + facvsb0; vts_i = VFB_T + P_D * facvsb - Vsbstar_dc + Gf_dc * sqrt(phit1 * facvsb ); vth_i = vts_i - delVg; end // evaluateStatic // -------------------------------------------------------------------------------------------------------------- // AC bias dependent quantities (calculations for charge contribs) // -------------------------------------------------------------------------------------------------------------- begin : evaluateDynamic // Core's model calculation for AC begin : SPcalc_ac // Local variable declaration // `SPcalcLocalVarDecl // SP calculations if ((SWNUD_i == 1) || (SWDELVTAC_i != 0) || (SWQSAT_i == 1)) begin Vsbstar = Vsbstar_dc_tmp; phib = phib_dc; G_0 = G_0_dc; cfloc = CF_i; thesatloc = THESAT_T; axloc = AX_i; alploc = ALP_i; if (SWDELVTAC_i != 0) begin // Conditioning of terminal voltages temp = `MINA(Vdb, Vsb, bphi_ac) + phix_ac; Vsbstar_ac = Vsb - `MINA(temp, 0.0, aphi_ac) + phix1_ac; Vsbstar = Vsbstar_ac; phib = phib_ac; G_0 = G_0_ac; end if (SWQSAT_i != 0) begin cfloc = CFAC_i; thesatloc = THESATAC_T; axloc = AXAC_i; alploc = ALPAC_i; end // Calculation of PSP model's core `SPCalculation xg_ac = xg; qeff1_ac = qeff1; Voxm_ac = Voxm; alpha_ac = alpha; dps_ac = dps; qim_ac = qim; GdL_ac = GdL; H_ac = H; eta_p_ac = eta_p; Gvsat_ac = Gvsat; Gmob_dL_ac = Gmob_dL; `ifdef NQSmodel Gf_ac = Gf; x_m_ac = x_m; xgm_ac = xgm; thesat1_ac = thesat1; margin_ac = margin; `endif // NQSmodel end else begin xg_ac = xg_dc; qeff1_ac = qeff1_dc; Voxm_ac = Voxm_dc; alpha_ac = alpha_dc; dps_ac = dps_dc; qim_ac = qim_dc; GdL_ac = GdL_dc; H_ac = H_dc; eta_p_ac = eta_p_dc; Gvsat_ac = Gvsat_dc; Gmob_dL_ac = Gmob_dL_dc; `ifdef NQSmodel Gf_ac = Gf_dc; x_m_ac = x_m_dc; xgm_ac = xgm_dc; thesat1_ac = thesat1_dc; margin_ac = margin_dc; `endif // NQSmodel end end // SPcalc_ac // Quantum mechanical corrections COX_qm = COX_i; if (qq > 0.0) begin COX_qm = COX_i / (1.0 + qq * pow(qeff1_ac * qeff1_ac + qlim2, -1.0 * `oneSixth)); end // Intrinsic charge model if (xg_ac <= 0.0) begin QG = Voxm_ac; QI = 0.0; QD = 0.0; QB = QG; end else begin Fj = 0.5 * (dps_ac / H_ac); Fj2 = Fj * Fj; QG = Voxm_ac + 0.5 * (eta_p_ac * dps_ac * (Fj * GdL_ac * `oneThird - 1.0 + GdL_ac)); temp = alpha_ac * dps_ac * `oneSixth; if (SWQPART_i == 1) begin QCLM = 0.0; QD = 0.5 * GdL_ac * GdL_ac * (qim_ac - 3.0 * temp * (2.0 - Fj)); end else begin QCLM = (1.0 - GdL_ac) * (qim_ac - 0.5 * (alpha_ac * dps_ac)); QD = 0.5 * (GdL_ac * GdL_ac * (qim_ac - temp * (1.0 - Fj - 0.2 * Fj2)) + QCLM * (1.0 + GdL_ac)); end QI = GdL_ac * (qim_ac + temp * Fj) + QCLM; QB = QG - QI; end Qg = QG * COX_qm; Qd = -QD * COX_qm; Qb = -QB * COX_qm; // Extrinsic charge model Qgs_ov = CGOV_i * Vovs; Qgd_ov = CGOVD_i * Vovd; Qgb_ov = CGBOV_i * Vgb; // Outer fringe charge Qfgs = CFR_i * VgsPrime; Qfgd = CFRD_i * VgdPrime; // Variables for NQS model `ifdef NQSmodel Gp = 0.0; Gp2 = 0.0; a_factrp = 0.0; marginp = 0.0; if (SWNQS_i != 0) begin if (xg_ac <= 0.0) begin ym = 0.5; pd = 1.0; Gp = Gf_ac; end else begin ym = 0.5 * ( 1.0 + 0.25 * (dps_ac / H_ac)); pd = xgm_ac / (xg_ac - x_m_ac); Gp = Gf_ac / pd; end Gp2 = Gp * Gp; a_factrp = 1.0 + Gp * `invSqrt2; marginp = 1.0e-5 * a_factrp; end `endif // NQSmodel end // evaluateDynamic // -------------------------------------------------------------------------------------------------------------- // JUNCAP2 contribs // -------------------------------------------------------------------------------------------------------------- begin : evaluateStaticDynamic ijun_s = 0.0; ijunbot_s = 0.0; ijunsti_s = 0.0; ijungat_s = 0.0; ijun_d = 0.0; ijunbot_d = 0.0; ijunsti_d = 0.0; ijungat_d = 0.0; qjun_s = 0.0; qjunbot_s = 0.0; qjunsti_s = 0.0; qjungat_s = 0.0; qjun_d = 0.0; qjunbot_d = 0.0; qjunsti_d = 0.0; qjungat_d = 0.0; if (SWJUNCAP_i > 0) begin if (SWJUNEXP_i == 1) begin `JuncapExpressCurrent(Vjun_s, MFOR1_s, ISATFOR1_s, MFOR2_s, ISATFOR2_s, MREV_s, ISATREV_s, m0flag_s, xhighf1_s, expxhf1_s, xhighf2_s, expxhf2_s, xhighr_s, expxhr_s, ijun_s) `JuncapExpressCurrent(Vjun_d, MFOR1_d, ISATFOR1_d, MFOR2_d, ISATFOR2_d, MREV_d, ISATREV_d, m0flag_d, xhighf1_d, expxhf1_d, xhighf2_d, expxhf2_d, xhighr_d, expxhr_d, ijun_d) begin : evaluateDynamic // real tmpv, vjv; `JuncapExpressCharge(Vjun_s, ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, qprefbot, qprefsti, qprefgat, qpref2bot, qpref2sti, qpref2gat, vbiinvbot, vbiinvsti, vbiinvgat, one_minus_PBOT, one_minus_PSTI, one_minus_PGAT, vfmin_s, vch_s, zflagbot_s, zflagsti_s, zflaggat_s, qjunbot_s, qjunsti_s, qjungat_s) `JuncapExpressCharge(Vjun_d, ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, qprefbot_d, qprefsti_d, qprefgat_d, qpref2bot_d, qpref2sti_d, qpref2gat_d, vbiinvbot_d, vbiinvsti_d, vbiinvgat_d, one_minus_PBOT_d, one_minus_PSTI_d, one_minus_PGAT_d, vfmin_d, vch_d, zflagbot_d, zflagsti_d, zflaggat_d, qjunbot_d, qjunsti_d, qjungat_d) end end else begin `juncapcommon(Vjun_s, ABSOURCE_i, LSSOURCE_i, LGSOURCE_i, qprefbot, qpref2bot, vbiinvbot, one_minus_PBOT, idsatbot, CSRHBOT_i, CTATBOT_i, vbibot, wdepnulrbot, VBIRBOTinv, PBOT_i, ftdbot, btatpartbot, atatbot, one_over_one_minus_PBOT, CBBTBOT_i, VBIRBOT_i, wdepnulrinvbot, fbbtbot, VBRBOT_i, VBRinvbot, PBRBOT_i, fstopbot, slopebot, qprefsti, qpref2sti, vbiinvsti, one_minus_PSTI, idsatsti, CSRHSTI_i, CTATSTI_i, vbisti, wdepnulrsti, VBIRSTIinv, PSTI_i, ftdsti, btatpartsti, atatsti, one_over_one_minus_PSTI, CBBTSTI_i, VBIRSTI_i, wdepnulrinvsti, fbbtsti, VBRSTI_i, VBRinvsti, PBRSTI_i, fstopsti, slopesti, qprefgat, qpref2gat, vbiinvgat, one_minus_PGAT, idsatgat, CSRHGAT_i, CTATGAT_i, vbigat, wdepnulrgat, VBIRGATinv, PGAT_i, ftdgat, btatpartgat, atatgat, one_over_one_minus_PGAT, CBBTGAT_i, VBIRGAT_i, wdepnulrinvgat, fbbtgat, VBRGAT_i, VBRinvgat, PBRGAT_i, fstopgat, slopegat, VMAX_s, exp_VMAX_over_phitd_s, vbimin_s, vch_s, vfmin_s, vbbtlim_s, ijunbot_s, qjunbot_s, ijunsti_s, qjunsti_s, ijungat_s, qjungat_s) ijun_s = ABSOURCE_i * ijunbot_s + LSSOURCE_i * ijunsti_s + LGSOURCE_i * ijungat_s; `juncapcommon(Vjun_d, ABDRAIN_i, LSDRAIN_i, LGDRAIN_i, qprefbot_d, qpref2bot_d, vbiinvbot_d, one_minus_PBOT_d, idsatbot_d, CSRHBOTD_i, CTATBOTD_i, vbibot_d, wdepnulrbot_d, VBIRBOTinv_d, PBOTD_i, ftdbot_d, btatpartbot_d, atatbot_d, one_over_one_minus_PBOT_d, CBBTBOTD_i, VBIRBOTD_i, wdepnulrinvbot_d, fbbtbot_d, VBRBOTD_i, VBRinvbot_d, PBRBOTD_i, fstopbot_d, slopebot_d, qprefsti_d, qpref2sti_d, vbiinvsti_d, one_minus_PSTI_d, idsatsti_d, CSRHSTID_i, CTATSTID_i, vbisti_d, wdepnulrsti_d, VBIRSTIinv_d, PSTID_i, ftdsti_d, btatpartsti_d, atatsti_d, one_over_one_minus_PSTI_d, CBBTSTID_i, VBIRSTID_i, wdepnulrinvsti_d, fbbtsti_d, VBRSTID_i, VBRinvsti_d, PBRSTID_i, fstopsti_d, slopesti_d, qprefgat_d, qpref2gat_d, vbiinvgat_d, one_minus_PGAT_d, idsatgat_d, CSRHGATD_i, CTATGATD_i, vbigat_d, wdepnulrgat_d, VBIRGATinv_d, PGATD_i, ftdgat_d, btatpartgat_d, atatgat_d, one_over_one_minus_PGAT_d, CBBTGATD_i, VBIRGATD_i, wdepnulrinvgat_d, fbbtgat_d, VBRGATD_i, VBRinvgat_d, PBRGATD_i, fstopgat_d, slopegat_d, VMAX_d, exp_VMAX_over_phitd_d, vbimin_d, vch_d, vfmin_d, vbbtlim_d, ijunbot_d, qjunbot_d, ijunsti_d, qjunsti_d, ijungat_d, qjungat_d) ijun_d = ABDRAIN_i * ijunbot_d + LSDRAIN_i * ijunsti_d + LGDRAIN_i * ijungat_d; end end // -------------------------------------------------------------------------------------------------------------- // NQS and parasitic resistance contribs // -------------------------------------------------------------------------------------------------------------- // Set initial conditions for NQS model `ifdef NQSmodel `include "PSP103_InitNQS.include" `endif // NQSmodel // Parasitic resistances (including noise) rgatenoise = nt0 * ggate; rsourcenoise = nt0 * gsource; rdrainnoise = nt0 * gdrain; rbulknoise = nt0 * gbulk; rjunsnoise = nt0 * gjuns; rjundnoise = nt0 * gjund; rwellnoise = nt0 * gwell; end // evaluateStaticDynamic // -------------------------------------------------------------------------------------------------------------- // Current contribs // -------------------------------------------------------------------------------------------------------------- begin : loadStatic // Convert back for NMOS-PMOS and Source-Drain interchange if (sigVds > 0.0) begin I(DI, BP) <+ CHNL_TYPE * MULT_i * Iimpact; I(DI, SI) <+ CHNL_TYPE * MULT_i * (Ids + Idsedge); I(GP, SI) <+ CHNL_TYPE * MULT_i * Igcs; I(GP, DI) <+ CHNL_TYPE * MULT_i * Igcd; end else begin I(SI, BP) <+ CHNL_TYPE * MULT_i * Iimpact; I(SI, DI) <+ CHNL_TYPE * MULT_i * (Ids + Idsedge); I(GP, DI) <+ CHNL_TYPE * MULT_i * Igcs; I(GP, SI) <+ CHNL_TYPE * MULT_i * Igcd; end I(GP, BP) <+ CHNL_TYPE * MULT_i * Igb; I(GP, SI) <+ CHNL_TYPE * MULT_i * Igsov; I(GP, DI) <+ CHNL_TYPE * MULT_i * Igdov; I(SI, BP) <+ CHNL_TYPE * MULT_i * Igisl; I(DI, BP) <+ CHNL_TYPE * MULT_i * Igidl; I(BS, SI) <+ CHNL_TYPE * MULT_i * ijun_s; I(BD, DI) <+ CHNL_TYPE * MULT_i * ijun_d; //ngspice-adms: Parasitic resistances - no node collapse `NonCollapsableR(ggate, RG_i, rgatenoise, G, GP, "rgate") `NonCollapsableR(gsource, RSE_i, rsourcenoise, S, SI, "rsource") `NonCollapsableR(gdrain, RDE_i, rdrainnoise, D, DI, "rdrain") `NonCollapsableR(gbulk, RBULK_i, rbulknoise, BP, BI, "rbulk") `NonCollapsableR(gjuns, RJUNS_i, rjunsnoise, BS, BI, "rjuns") `NonCollapsableR(gjund, RJUND_i, rjundnoise, BD, BI, "rjund") `NonCollapsableR(gwell, RWELL_i, rwellnoise, B, BI, "rwell") I(DI, SI) <+ `GMIN * V(DI, SI); end // loadStatic // -------------------------------------------------------------------------------------------------------------- // ddt() contribs from charges (Note: MULT is handled explicitly) // -------------------------------------------------------------------------------------------------------------- begin : loadStaticDynamic // Implementation of NQS charges `ifdef NQSmodel `include "PSP103_ChargesNQS.include" `endif // NQSmodel // Implementation of Self heating effect `ifdef SelfHeating begin : self_heating // real Pdiss_s, Pdiss_d; Pdiss = 0.0; Pdiss_s = 0.0; Pdiss_d = 0.0; if (RSE_i > 0.0) begin Pdiss_s = gsource * V(S, SI) * V(S, SI); end if (RDE_i > 0.0) begin Pdiss_d = gdrain * V(D, DI) * V(D, DI); end if (RTH_p > 1.0e-3) begin Pdiss = ((Ids + Idsedge) * Vds + Iimpact * (Vds + Vsb) + Pdiss_s + Pdiss_d); end Pwr(br_ith) <+ -MULT_i * Pdiss; Pwr(br_rth) <+ ddt(MULT_i * CTH_i * Temp(br_rth)); Pwr(br_rth) <+ MULT_i * Temp(br_rth) / RTH_T; end // self_heating `endif // SelfHeating end // loadStaticDynamic begin : loadDynamic // Local variable // real temp; // Intrinsic MOSFET charges Qs = -(Qg + Qb + Qd); // Total outerFringe + overlap for gate-source and gate-drain. Qfgs = Qfgs + Qgs_ov; Qfgd = Qfgd + Qgd_ov; // JUNCAP2 qjun_s = ABSOURCE_i * qjunbot_s + LSSOURCE_i * qjunsti_s + LGSOURCE_i * qjungat_s; qjun_d = ABDRAIN_i * qjunbot_d + LSDRAIN_i * qjunsti_d + LGDRAIN_i * qjungat_d; // Convert back (undo S-D interchange) if (sigVds < 0.0) begin temp = Qd; // Qd <--> Qs Qd = Qs; Qs = temp; end I(GP, SI) <+ ddt(CHNL_TYPE * MULT_i * Qg); I(BP, SI) <+ ddt(CHNL_TYPE * MULT_i * Qb); I(DI, SI) <+ ddt(CHNL_TYPE * MULT_i * Qd); I(GP, SI) <+ ddt(CHNL_TYPE * MULT_i * Qfgs); I(GP, DI) <+ ddt(CHNL_TYPE * MULT_i * Qfgd); I(GP, BP) <+ ddt(CHNL_TYPE * MULT_i * Qgb_ov); I(BS, SI) <+ ddt(CHNL_TYPE * MULT_i * qjun_s); I(BD, DI) <+ ddt(CHNL_TYPE * MULT_i * qjun_d); end // loadDynamic // -------------------------------------------------------------------------------------------------------------- // Noise // -------------------------------------------------------------------------------------------------------------- begin : noise // Noise variable calculation Sfl = 0.0; Sidexc = 0.0; mid = 0.0; mig = 1.0e-40; migid = 0.0; c_igid = 0.0; CGeff = COX_qm * eta_p_ac; sqid = 0.0; sqig = 0.0; Sfledge = 0.0; midedge = 0.0; sqidedge = 0.0; // Channel noise contributions if ((xg_dc > 0.0) && (MULT_i > 0.0) && (BET_i > 0.0)) begin // Flicker noise N1 = Cox_over_q * alpha_dc * phit; Nm1 = Cox_over_q * qim1_dc; Delta_N1 = Cox_over_q * alpha_dc * dps_dc; Sfl = (NFA_i - NFB_i * N1 + NFC_i * (N1 * N1)) * ln((Nm1 + 0.5 * Delta_N1) / (Nm1 - 0.5 * Delta_N1)); Sfl = Sfl + (NFB_i + NFC_i * (Nm1 - 2.0 * N1)) * Delta_N1; Sfl = Sfl_prefac * Ids * Gvsatinv_dc * Sfl / N1; Sfl = `CLIP_LOW(Sfl, 0.0); // Thermal channel noise H0 = qim1_dc / alpha_dc; t1 = qim_dc / qim1_dc; sqt2 = 0.5 * `oneSixth * (dps_dc / H0); t2 = sqt2 * sqt2; r = H0 / H_dc - 1.0; lc = `CLIP_LOW(1.0 - 12.0 * (r * t2), 1.0e-20); lcinv2 = 1.0 / (lc * lc); g_ideal = BET_i * (FdL_dc * qim1_dc * Gvsatinv_dc); mid = t1 + 12.0 * t2 - 24.0 * ((1.0 + t1) * t2 * r); mid = `CLIP_LOW(mid, 1.0e-40); mid = g_ideal * lcinv2 * mid; if (FNTEXC_i > 0.0) begin // recalculate Gvsat, excluding Gmob-effect temp2_exc = qim_dc * xitsb_dc; wsat_exc = 100.0 * (temp2_exc / (100.0 + temp2_exc)); if (THESATG_i < 0) begin temp_exc = 1.0 / (1.0 - THESATG_i * wsat_exc); end else begin temp_exc = 1.0 + THESATG_i * wsat_exc; end thesat1_exc = THESAT_T * (temp_exc / Gmob_dc); zsat_exc = thesat1_exc * thesat1_exc * dps_dc * dps_dc; if (CHNL_TYPE == `PMOS) begin zsat_exc = zsat_exc / (1.0 + thesat1_exc * dps_dc); end Gvsat_exc = 0.5 * (Gmob_dc * (1.0 + sqrt(1.0 + 2.0 * zsat_exc))); gfac = Gmob_dc / (Gvsat_exc * lc); Sidexc = fac_exc * Ids * Vdse_dc * gfac * gfac; mid = mid + Sidexc / nt0; end sqid = sqrt(nt * mid); // Induced gate noise if ((SWIGN_i == 1) && (nt > 0.0)) begin mig = t1 / 12.0 - t2 * (t1 + 0.2 - 12.0 * t2) - 1.6 * (t2 * (t1 + 1.0 - 12.0 * t2) * r); mig = `CLIP_LOW(mig, 1.0e-40); mig = lcinv2 / g_ideal * mig; migid0 = lcinv2 * sqt2 * (1.0 - 12.0 * t2 - (t1 + 19.2 * t2 - 12.0 * (t1 * t2)) * r); CGeff = Gvsat_ac * Gvsat_ac * COX_qm * eta_p_ac / (Gmob_dL_ac * Gmob_dL_ac); if (FNTEXC_i > 0.0) begin mig = mig + Sidexc * (1.0 + 12.0 * t2) / (12.0 * g_ideal * g_ideal * nt0); migid0 = migid0 - Sidexc * sqt2 * (1.0 + r) / (g_ideal * nt0); end sqig = sqrt(nt / mig); if (sqid == 0) begin c_igid = 0.0; end else begin c_igid = migid0 * sqig / sqid; // = migid0 / sqrt(mig * mid); end c_igid = `CLIP_BOTH(c_igid, 0.0, 1.0); migid = c_igid * sqid / sqig; end end // Noise of gate leakage currents shot_igcsx = 2.0 * `QELE * abs(Igcs); shot_igcdx = 2.0 * `QELE * abs(Igcd); shot_igsov = 2.0 * `QELE * abs(Igsov); shot_igdov = 2.0 * `QELE * abs(Igdov); // Noise of impact ionization currents shot_iavl = 2.0 * `QELE * ((mavl + 1) * abs(Iimpact)); // Noise of junctions (JUNCAP2) jnoisex_s = 2.0 * `QELE * abs(ijun_s); jnoisex_d = 2.0 * `QELE * abs(ijun_d); if (sigVds > 0.0) begin shot_igs = shot_igcsx + shot_igsov; shot_igd = shot_igcdx + shot_igdov; jnoise_s = jnoisex_s; jnoise_d = jnoisex_d + shot_iavl; end else begin shot_igs = shot_igcdx + shot_igsov; shot_igd = shot_igcsx + shot_igdov; jnoise_s = jnoisex_s + shot_iavl; jnoise_d = jnoisex_d; end // Noise of edge transistors: PSP 103.4 if ((SWEDGE_i != 0.0) && (BETNEDGE_i > 0) && (xgedge > 0)) begin // Flicker noise of edge transistor temp1 = 4.0 * dsqredge / Gfedge2; anoisedge = sqrt(temp1 + 1.0) / (sqrt(temp1 + 1.1) - 1.0); temp1 = Cox_over_q * phit; N1edge = temp1 * anoisedge; Nm1edge = temp1 * (qmeffedge + anoisedge); Delta_N1edge = -temp1 * anoisedge * alphabmedge * qdseffedge; Sfledge = (NFAEDGE_i - (NFBEDGE_i - NFCEDGE_i * N1edge) * N1edge) * ln((Nm1edge + 0.5 * Delta_N1edge) / (Nm1edge - 0.5 * Delta_N1edge)); Sfledge = Sfledge + (NFBEDGE_i + NFCEDGE_i * (Nm1edge - 2.0 * N1edge)) * Delta_N1edge; Sfledge = Sfl_prefac_edge * Idsedge * Gvsatinv_dc * Sfledge / N1edge; Sfledge = `CLIP_LOW(Sfledge, 0.0); // Thermal channel noise of edge transistor H0edge = phit * (qmeffedge + anoisedge) / anoisedge; t1edge = phit1 / phit * qmeffedge / (qmeffedge + anoisedge); sqt2edge = -0.5 * `oneSixth * phit * alphabmedge * qdseffedge / H0edge; t2edge = sqt2edge * sqt2edge; redge = 0.0; temp1 = alpha_dc * H_dc; if (temp1 > 1.0e-10) begin redge = anoisedge * H0edge / temp1 - 1.0; end lcedge = `CLIP_LOW(1.0 - 12.0 * (redge * t2edge), 1.0e-20); lcinv2edge = 1.0 / (lcedge * lcedge); g_idealedge = BETEDGE_i * phit * (qmeffedge + anoisedge) * FdL_dc * Gvsatinv_dc; midedge = t1edge + 12.0 * t2edge - 24.0 * ((1.0 + t1edge) * t2edge * redge); midedge = `CLIP_LOW(midedge, 1.0e-40); midedge = g_idealedge * lcinv2edge * midedge; sqidedge = sqrt(ntedge * midedge); end // Noise contributions I(NOII) <+ white_noise((nt / mig), "igig"); I(NOIR) <+ V(NOIR) / mig; I(NOIC) <+ ddt(CGeff * V(NOIC)); //ngspice-adms: can't handle specific noise contributions // I(GP,SI) <+ -ddt(sqrt(MULT_i) * 0.5 * CGeff * V(NOIC)); // I(GP,DI) <+ -ddt(sqrt(MULT_i) * 0.5 * CGeff * V(NOIC)); // I(DI,SI) <+ sigVds * sqrt(MULT_i) * migid * I(NOII); I(DI,SI) <+ white_noise(MULT_i * sqid * sqid * (1.0 - c_igid * c_igid), "idid"); I(DI,SI) <+ flicker_noise(MULT_i * Sfl, EF_i, "flicker"); I(GP,SI) <+ white_noise(MULT_i * shot_igs, "igs"); I(GP,DI) <+ white_noise(MULT_i * shot_igd, "igd"); I(BS,SI) <+ white_noise(MULT_i * jnoise_s, "ibs"); I(BD,DI) <+ white_noise(MULT_i * jnoise_d, "ibd"); I(DI,SI) <+ flicker_noise(MULT_i * Sfledge, EFEDGE_i, "flicker"); I(DI,SI) <+ white_noise(MULT_i * sqidedge * sqidedge, "ididedge"); end // noise // -------------------------------------------------------------------------------------------------------------- // Operating point info // -------------------------------------------------------------------------------------------------------------- begin : OPinfo // Auxiliary variables id_op = Ids + Idsedge + Iimpact - Igcd; is = -Ids - Idsedge - Igcs; ig = Igcs + Igcd + Igsov + Igdov + Igb; ib = -Iimpact - Igb - Igidl - Igisl; sig1k = 2.0e3 * `PI * CGeff; sig1k = sig1k * sig1k * mig; // Actual operation point output variables sdint = sigVds; ctype = CHNL_TYPE; if (sigVds < 0.0) begin ise = MULT_i * (is - Igdov + Igidl - ijun_d); ige = MULT_i * ig; ide = MULT_i * (id_op - Igsov + Igisl - ijun_s); ibe = MULT_i * (ib + ijun_s + ijun_d); ids = MULT_i * Ids; idb = MULT_i * (Iimpact + Igisl - ijun_s); isb = MULT_i * (Igidl - ijun_d); igs = MULT_i * (Igcs + Igdov); igd = MULT_i * (Igcd + Igsov); igb = MULT_i * Igb; idedge = MULT_i * Idsedge; igcs = MULT_i * Igcs; igcd = MULT_i * Igcd; iavl = MULT_i * Iimpact; igisl = MULT_i * Igidl; igidl = MULT_i * Igisl; if (SWJUNEXP_i == 1) begin ijsbot = 0.0; ijsgat = 0.0; ijssti = 0.0; ijdbot = 0.0; ijdgat = 0.0; ijdsti = 0.0; idsatsbot = 0.0; idsatssti = 0.0; idsatsgat = 0.0; idsatsbotd = 0.0; idsatsstid = 0.0; idsatsgatd = 0.0; end else begin ijsbot = MULT_i * ABDRAIN_i * ijunbot_d; ijsgat = MULT_i * LGDRAIN_i * ijungat_d; ijssti = MULT_i * LSDRAIN_i * ijunsti_d; ijdbot = MULT_i * ABSOURCE_i * ijunbot_s; ijdgat = MULT_i * LGSOURCE_i * ijungat_s; ijdsti = MULT_i * LSSOURCE_i * ijunsti_s; idsatsbot = MULT_i * ABSOURCE_i * idsatbot; idsatssti = MULT_i * LSSOURCE_i * idsatsti; idsatsgat = MULT_i * LGSOURCE_i * idsatgat; idsatsbotd = MULT_i * ABDRAIN_i * idsatbot_d; idsatsstid = MULT_i * LSDRAIN_i * idsatsti_d; idsatsgatd = MULT_i * LGDRAIN_i * idsatgat_d; end ijs = MULT_i * ijun_d; ijd = MULT_i * ijun_s; vds = Vds; vgs = Vgs; vsb = Vsb; vto = VFB_T + P_D * facvsb0 + Gf_dc * sqrt(phit1 * facvsb0); vts = vts_i; vth = vth_i; vgt = vgs - vth; vdss = Vdsat_dc; vsat = Vds - vdss; ids_i = Ids + Idsedge + Iimpact + Igisl - Igcd - Igsov - ijun_s; // Total drain-current `ifdef OPderiv gm = CHNL_TYPE * MULT_i * ddx(ids_i, V(GP)); gmb = CHNL_TYPE * MULT_i * ddx(ids_i, V(BP)); gds = CHNL_TYPE * MULT_i * ddx(ids_i, V(SI)); gjs = MULT_i * ddx(ijun_d, V(BD)); gjd = MULT_i * ddx(ijun_s, V(BS)); css = CHNL_TYPE * MULT_i * ddx(Qd, V(DI)); csg = -CHNL_TYPE * MULT_i * ddx(Qd, V(GP)); csb = -CHNL_TYPE * MULT_i * ddx(Qd, V(BP)); csd = css - csg - csb; cgs = -CHNL_TYPE * MULT_i * ddx(Qg, V(DI)); cgg = CHNL_TYPE * MULT_i * ddx(Qg, V(GP)); cgb = -CHNL_TYPE * MULT_i * ddx(Qg, V(BP)); cgd = cgg - cgs - cgb; cds = -CHNL_TYPE * MULT_i * ddx(Qs, V(DI)); cdg = -CHNL_TYPE * MULT_i * ddx(Qs, V(GP)); cdb = -CHNL_TYPE * MULT_i * ddx(Qs, V(BP)); cdd = cdg + cds + cdb; cbs = -CHNL_TYPE * MULT_i * ddx(Qb, V(DI)); cbg = -CHNL_TYPE * MULT_i * ddx(Qb, V(GP)); cbb = CHNL_TYPE * MULT_i * ddx(Qb, V(BP)); cbd = cbb - cbs - cbg; cgsol = CHNL_TYPE * MULT_i * ddx(Qfgd, V(GP)); cgdol = CHNL_TYPE * MULT_i * ddx(Qfgs, V(GP)); cjsbot = -MULT_i * CHNL_TYPE * ABDRAIN_i * ddx(qjunbot_d, V(DI)); cjsgat = -MULT_i * CHNL_TYPE * LGDRAIN_i * ddx(qjungat_d, V(DI)); cjssti = -MULT_i * CHNL_TYPE * LSDRAIN_i * ddx(qjunsti_d, V(DI)); cjs = cjsbot + cjsgat + cjssti; cjdbot = -MULT_i * CHNL_TYPE * ABSOURCE_i * ddx(qjunbot_s, V(SI)); cjdgat = -MULT_i * CHNL_TYPE * LGSOURCE_i * ddx(qjungat_s, V(SI)); cjdsti = -MULT_i * CHNL_TYPE * LSSOURCE_i * ddx(qjunsti_s, V(SI)); cjd = cjdbot + cjdgat + cjdsti; `endif // OPderiv end else begin ise = MULT_i * (is - Igsov + Igisl - ijun_s); ige = MULT_i * ig; ide = MULT_i * (id_op - Igdov + Igidl - ijun_d); ibe = MULT_i * (ib + ijun_s + ijun_d); ids = MULT_i * Ids; idb = MULT_i * (Iimpact + Igidl - ijun_d); isb = MULT_i * (Igisl - ijun_s); igs = MULT_i * (Igcs + Igsov); igd = MULT_i * (Igcd + Igdov); igb = MULT_i * Igb; idedge = MULT_i * Idsedge; igcs = MULT_i * Igcs; igcd = MULT_i * Igcd; iavl = MULT_i * Iimpact; igisl = MULT_i * Igisl; igidl = MULT_i * Igidl; if (SWJUNEXP_i == 1) begin ijsbot = 0.0; ijsgat = 0.0; ijssti = 0.0; ijdbot = 0.0; ijdgat = 0.0; ijdsti = 0.0; idsatsbot = 0.0; idsatssti = 0.0; idsatsgat = 0.0; idsatsbotd = 0.0; idsatsstid = 0.0; idsatsgatd = 0.0; end else begin ijsbot = MULT_i * ABSOURCE_i * ijunbot_s; ijsgat = MULT_i * LGSOURCE_i * ijungat_s; ijssti = MULT_i * LSSOURCE_i * ijunsti_s; ijdbot = MULT_i * ABDRAIN_i * ijunbot_d; ijdgat = MULT_i * LGDRAIN_i * ijungat_d; ijdsti = MULT_i * LSDRAIN_i * ijunsti_d; idsatsbot = MULT_i * ABSOURCE_i * idsatbot; idsatssti = MULT_i * LSSOURCE_i * idsatsti; idsatsgat = MULT_i * LGSOURCE_i * idsatgat; idsatsbotd = MULT_i * ABDRAIN_i * idsatbot_d; idsatsstid = MULT_i * LSDRAIN_i * idsatsti_d; idsatsgatd = MULT_i * LGDRAIN_i * idsatgat_d; end ijs = MULT_i * ijun_s; ijd = MULT_i * ijun_d; vds = Vds; vgs = Vgs; vsb = Vsb; vto = VFB_T + P_D * facvsb0 + Gf_dc * sqrt(phit1 * facvsb0); vts = vts_i; vth = vth_i; vgt = vgs - vth; vdss = Vdsat_dc; vsat = Vds - vdss; ids_i = Ids + Idsedge + Iimpact + Igidl - Igcd - Igdov - ijun_d; // Total drain-current `ifdef OPderiv gm = CHNL_TYPE * MULT_i * ddx(ids_i, V(GP)); gmb = CHNL_TYPE * MULT_i * ddx(ids_i, V(BP)); gds = CHNL_TYPE * MULT_i * ddx(ids_i, V(DI)); gjs = -MULT_i * ddx(ijun_s, V(SI)); gjd = -MULT_i * ddx(ijun_d, V(DI)); cdd = CHNL_TYPE * MULT_i * ddx(Qd, V(DI)); cdg = -CHNL_TYPE * MULT_i * ddx(Qd, V(GP)); cdb = -CHNL_TYPE * MULT_i * ddx(Qd, V(BP)); cds = cdd - cdg - cdb; cgd = -CHNL_TYPE * MULT_i * ddx(Qg, V(DI)); cgg = CHNL_TYPE * MULT_i * ddx(Qg, V(GP)); cgb = -CHNL_TYPE * MULT_i * ddx(Qg, V(BP)); cgs = cgg - cgd - cgb; csd = -CHNL_TYPE * MULT_i * ddx(Qs, V(DI)); csg = -CHNL_TYPE * MULT_i * ddx(Qs, V(GP)); csb = -CHNL_TYPE * MULT_i * ddx(Qs, V(BP)); css = csg + csd + csb; cbd = -CHNL_TYPE * MULT_i * ddx(Qb, V(DI)); cbg = -CHNL_TYPE * MULT_i * ddx(Qb, V(GP)); cbb = CHNL_TYPE * MULT_i * ddx(Qb, V(BP)); cbs = cbb - cbd - cbg; cgsol = CHNL_TYPE * MULT_i * ddx(Qfgs, V(GP)); cgdol = CHNL_TYPE * MULT_i * ddx(Qfgd, V(GP)); cjsbot = -MULT_i * CHNL_TYPE * ABSOURCE_i * ddx(qjunbot_s, V(SI)); cjsgat = -MULT_i * CHNL_TYPE * LGSOURCE_i * ddx(qjungat_s, V(SI)); cjssti = -MULT_i * CHNL_TYPE * LSSOURCE_i * ddx(qjunsti_s, V(SI)); cjs = cjsbot + cjsgat + cjssti; cjdbot = -MULT_i * CHNL_TYPE * ABDRAIN_i * ddx(qjunbot_d, V(DI)); cjdgat = -MULT_i * CHNL_TYPE * LGDRAIN_i * ddx(qjungat_d, V(DI)); cjdsti = -MULT_i * CHNL_TYPE * LSDRAIN_i * ddx(qjunsti_d, V(DI)); cjd = cjdbot + cjdgat + cjdsti; `endif // OPderiv end weff = WE; leff = LE; `ifdef OPderiv if (abs(gds) < 1.0e-18) begin u = 0.0; rout = 0.0; vearly = 0.0; end else begin u = gm / gds; rout = 1.0 / gds; vearly = ide / gds; end if (abs(vgt) < 1.0e-12) begin beff = 0.0; end else begin beff = 2.0 * abs(ide) / (vgt * vgt); end if (abs(cgg + cgsol + cgdol) < 1.0e-30) begin fug = 0.0; end else begin fug = gm / (2.0 * `PI * (cgg + cgsol + cgdol)); end rg_op = RG_i / MULT_i; sfl = MULT_i * Sfl; if (abs(gm) < 1.0e-18) begin sqrtsff = 0.0; sqrtsfw = 0.0; end else begin sqrtsff = sqrt(MULT_i * Sfl / 1000.0) / gm; sqrtsfw = sqrt(MULT_i) * sqid / gm; end sid = MULT_i * sqid * sqid; sig = MULT_i * nt * sig1k / (1.0 + sig1k * mig); cigid = c_igid; if (sid == 0.0) begin fknee = 0.0; end else begin fknee = sfl / sid; end siavl = MULT_i * shot_iavl; if (sigVds < 0.0) begin sigs = MULT_i * (shot_igcsx + shot_igdov); sigd = MULT_i * (shot_igcdx + shot_igsov); ssi = MULT_i * jnoisex_d; sdi = MULT_i * jnoisex_s; end else begin sigs = MULT_i * (shot_igcsx + shot_igsov); sigd = MULT_i * (shot_igcdx + shot_igdov); ssi = MULT_i * jnoisex_s; sdi = MULT_i * jnoisex_d; end sfledge = MULT_i * Sfledge; sidedge = MULT_i * sqidedge; `endif // OPderiv lp_vfb = VFB_T; lp_stvfb = STVFB_i; lp_st2vfb = ST2VFB_i; lp_tox = TOX_i; lp_epsrox = EPSROX_i; lp_neff = NEFF_i; lp_facneffac = FACNEFFAC_i; lp_gfacnud = GFACNUD_i; lp_vsbnud = VSBNUD_i; lp_dvsbnud = DVSBNUD_i; lp_vnsub = VNSUB_i; lp_nslp = NSLP_i; lp_dnsub = DNSUB_i; lp_dphib = DPHIB_i; lp_delvtac = DELVTAC_i; lp_np = NP_i; lp_toxov = TOXOV_i; lp_toxovd = TOXOVD_i; lp_nov = NOV_i; lp_novd = NOVD_i; lp_ct = CT_T; lp_ctg = CTG_T; lp_ctb = CTB_i; lp_stct = STCT_i; lp_cf = CF_i; lp_cfac = CFAC_i; lp_cfd = CFD_i; lp_cfb = CFB_i; lp_psce = PSCE_i; lp_psceb = PSCEB_i; lp_psced = PSCED_i; lp_betn = BETN_T; lp_stbet = STBET_i; lp_mue = MUE_T; lp_stmue = STMUE_i; lp_themu = THEMU_T; lp_stthemu = STTHEMU_i; lp_cs = CS_T; lp_stcs = STCS_i; lp_thecs = THECS_T; lp_stthecs = STTHECS_i; lp_xcor = XCOR_T; lp_stxcor = STXCOR_i; lp_feta = FETA_i; lp_rs = RS_T; lp_strs = STRS_i; lp_rsb = RSB_i; lp_rsg = RSG_i; lp_thesat = THESAT_T; lp_thesatac = THESATAC_T; lp_stthesat = STTHESAT_i; lp_thesatb = THESATB_i; lp_thesatg = THESATG_i; lp_ax = AX_i; lp_axac = AXAC_i; lp_alp = ALP_i; lp_alpac = ALPAC_i; lp_alp1 = ALP1_i; lp_alp2 = ALP2_i; lp_vp = VP_i; lp_a1 = A1_i; lp_a2 = A2_T; lp_sta2 = STA2_i; lp_a3 = A3_i; lp_a4 = A4_i; lp_gco = GCO_i; lp_iginv = IGINV_i; lp_igov = IGOV_i; lp_igovd = IGOVD_i; lp_stig = STIG_i; lp_gc2 = GC2_i; lp_gc3 = GC3_i; lp_gc2ov = GC2OV_i; lp_gc3ov = GC3OV_i; lp_chib = CHIB_i; lp_agidl = AGIDL_i; lp_agidld = AGIDLD_i; lp_bgidl = BGIDL_T; lp_bgidld = BGIDLD_T; lp_stbgidl = STBGIDL_i; lp_stbgidld = STBGIDLD_i; lp_cgidl = CGIDL_i; lp_cgidld = CGIDLD_i; lp_cox = COX_i; lp_cgov = CGOV_i; lp_cgovd = CGOVD_i; lp_cgbov = CGBOV_i; lp_cfr = CFR_i; lp_cfrd = CFRD_i; lp_fnt = FNT_i; lp_fntexc = FNTEXC_i; lp_nfa = NFA_i; lp_nfb = NFB_i; lp_nfc = NFC_i; lp_ef = EF_i; lp_vfbedge = VFBEDGE_T; lp_stvfbedge = STVFBEDGE_i; lp_dphibedge = DPHIBEDGE_i; lp_neffedge = NEFFEDGE_i; lp_ctedge = CTEDGE_i; lp_betnedge = BETNEDGE_T; lp_stbetedge = STBETEDGE_i; lp_psceedge = PSCEEDGE_i; lp_pscebedge = PSCEBEDGE_i; lp_pscededge = PSCEDEDGE_i; lp_cfedge = CFEDGE_i; lp_cfdedge = CFDEDGE_i; lp_cfbedge = CFBEDGE_i; lp_fntedge = FNTEDGE_i; lp_nfaedge = NFAEDGE_i; lp_nfbedge = NFBEDGE_i; lp_nfcedge = NFCEDGE_i; lp_efedge = EFEDGE_i; lp_rg = RG_i; lp_rse = RSE_i; lp_rde = RDE_i; lp_rbulk = RBULK_i; lp_rwell = RWELL_i; lp_rjuns = RJUNS_i; lp_rjund = RJUND_i; `ifdef SelfHeating lp_rth = RTH_i; lp_cth = CTH_i; lp_strth = STRTH_i; pdiss = MULT_i * Pdiss; dtsh = TKD - TKA; `endif // SelfHeating tk = TKD; cjosbot = MULT_i * ABSOURCE_i * cjobot; cjossti = MULT_i * LSSOURCE_i * cjosti; cjosgat = MULT_i * LGSOURCE_i * cjogat; vbisbot = vbibot; vbissti = vbisti; vbisgat = vbigat; cjosbotd = MULT_i * ABDRAIN_i * cjobot_d; cjosstid = MULT_i * LSDRAIN_i * cjosti_d; cjosgatd = MULT_i * LGDRAIN_i * cjogat_d; vbisbotd = vbibot_d; vbisstid = vbisti_d; vbisgatd = vbigat_d; `ifdef NQSmodel lp_munqs = MUNQS_i; `endif // NQSmodel end // OPinfo end // evaluateblock end // analogBlock tmp_ns50wwy/src/spicelib/devices/adms/psp103/admsva/JUNCAP200_InitModel.include0000644000175000017500000004320714163340332027122 0ustar carstencarsten//====================================================================================== //====================================================================================== // Filename: JUNCAP200_InitModel.include //====================================================================================== //====================================================================================== // // (c) Copyright notice // // Since 2015 until today, PSP has been co-developed by NXP Semiconductors and // CEA-Leti. For this part of the model, each claim undivided ownership and copyrights // Since 2012 until 2015, PSP has been co-developed by NXP Semiconductors and // Delft University of Technology. For this part of the model, each claim undivided // ownership and copyrights // Until and including 2011, PSP has been co-developed by NXP Semiconductors and // Arizona State University. For this part of the model, NXP Semiconductors claims // undivided ownership and copyrights. // // // Version: 200.6.0, April 2019 // //====================================================================================== //====================================================================================== // // Further information can be found in the file releasenotesPSP103.txt // // -------------------------------------------------------------------------------------------------------------- // Calculation of internal parameters which are independent on instance parameters // -------------------------------------------------------------------------------------------------------------- TRJ_i = `CLIP_LOW( TRJ ,`TRJ_cliplow); IMAX_i = `CLIP_LOW( IMAX ,`IMAX_cliplow); FREV_i = `CLIP_BOTH(FREV ,`FREV_cliplow,`FREV_cliphigh); //IFACTOR_i = `CLIP_LOW( IFACTOR ,`IFACTOR_cliplow); //CFACTOR_i = `CLIP_LOW( CFACTOR ,`CFACTOR_cliplow); CJORBOT_i = `CLIP_LOW( CJORBOT ,`CJORBOT_cliplow); CJORSTI_i = `CLIP_LOW( CJORSTI ,`CJORSTI_cliplow); CJORGAT_i = `CLIP_LOW( CJORGAT ,`CJORGAT_cliplow); VBIRBOT_i = `CLIP_LOW( VBIRBOT ,`VBIR_cliplow); VBIRSTI_i = `CLIP_LOW( VBIRSTI ,`VBIR_cliplow); VBIRGAT_i = `CLIP_LOW( VBIRGAT ,`VBIR_cliplow); PBOT_i = `CLIP_BOTH(PBOT ,`P_cliplow,`P_cliphigh); PSTI_i = `CLIP_BOTH(PSTI ,`P_cliplow,`P_cliphigh); PGAT_i = `CLIP_BOTH(PGAT ,`P_cliplow,`P_cliphigh); PHIGBOT_i = PHIGBOT; PHIGSTI_i = PHIGSTI; PHIGGAT_i = PHIGGAT; IDSATRBOT_i = `CLIP_LOW( IDSATRBOT ,`IDSATR_cliplow); IDSATRSTI_i = `CLIP_LOW( IDSATRSTI ,`IDSATR_cliplow); IDSATRGAT_i = `CLIP_LOW( IDSATRGAT ,`IDSATR_cliplow); CSRHBOT_i = `CLIP_LOW( CSRHBOT ,`CSRH_cliplow); CSRHSTI_i = `CLIP_LOW( CSRHSTI ,`CSRH_cliplow); CSRHGAT_i = `CLIP_LOW( CSRHGAT ,`CSRH_cliplow); XJUNSTI_i = `CLIP_LOW( XJUNSTI ,`XJUN_cliplow); XJUNGAT_i = `CLIP_LOW( XJUNGAT ,`XJUN_cliplow); CTATBOT_i = `CLIP_LOW( CTATBOT ,`CTAT_cliplow); CTATSTI_i = `CLIP_LOW( CTATSTI ,`CTAT_cliplow); CTATGAT_i = `CLIP_LOW( CTATGAT ,`CTAT_cliplow); MEFFTATBOT_i = `CLIP_LOW( MEFFTATBOT ,`MEFFTAT_cliplow); MEFFTATSTI_i = `CLIP_LOW( MEFFTATSTI ,`MEFFTAT_cliplow); MEFFTATGAT_i = `CLIP_LOW( MEFFTATGAT ,`MEFFTAT_cliplow); CBBTBOT_i = `CLIP_LOW( CBBTBOT ,`CBBT_cliplow); CBBTSTI_i = `CLIP_LOW( CBBTSTI ,`CBBT_cliplow); CBBTGAT_i = `CLIP_LOW( CBBTGAT ,`CBBT_cliplow); FBBTRBOT_i = FBBTRBOT; FBBTRSTI_i = FBBTRSTI; FBBTRGAT_i = FBBTRGAT; STFBBTBOT_i = STFBBTBOT; STFBBTSTI_i = STFBBTSTI; STFBBTGAT_i = STFBBTGAT; VBRBOT_i = `CLIP_LOW( VBRBOT ,`VBR_cliplow); VBRSTI_i = `CLIP_LOW( VBRSTI ,`VBR_cliplow); VBRGAT_i = `CLIP_LOW( VBRGAT ,`VBR_cliplow); PBRBOT_i = `CLIP_LOW( PBRBOT ,`PBR_cliplow); PBRSTI_i = `CLIP_LOW( PBRSTI ,`PBR_cliplow); PBRGAT_i = `CLIP_LOW( PBRGAT ,`PBR_cliplow); SWJUNEXP_i = 0.0; if (SWJUNEXP > 0.5) begin SWJUNEXP_i = 1.0; end else begin SWJUNEXP_i = 0.0; end VJUNREF_i = `CLIP_LOW( VJUNREF ,`VJUNREF_cliplow); FJUNQ_i = `CLIP_LOW( FJUNQ ,`FJUNQ_cliplow); `ifdef JUNCAP_StandAlone // do nothing `else // JUNCAP_StandAlone if (SWJUNASYM == 0.0) begin CJORBOTD_i = CJORBOT_i; CJORSTID_i = CJORSTI_i; CJORGATD_i = CJORGAT_i; VBIRBOTD_i = VBIRBOT_i; VBIRSTID_i = VBIRSTI_i; VBIRGATD_i = VBIRGAT_i; PBOTD_i = PBOT_i; PSTID_i = PSTI_i; PGATD_i = PGAT_i; PHIGBOTD_i = PHIGBOT_i; PHIGSTID_i = PHIGSTI_i; PHIGGATD_i = PHIGGAT_i; IDSATRBOTD_i = IDSATRBOT_i; IDSATRSTID_i = IDSATRSTI_i; IDSATRGATD_i = IDSATRGAT_i; CSRHBOTD_i = CSRHBOT_i; CSRHSTID_i = CSRHSTI_i; CSRHGATD_i = CSRHGAT_i; XJUNSTID_i = XJUNSTI_i; XJUNGATD_i = XJUNGAT_i; CTATBOTD_i = CTATBOT_i; CTATSTID_i = CTATSTI_i; CTATGATD_i = CTATGAT_i; MEFFTATBOTD_i = MEFFTATBOT_i; MEFFTATSTID_i = MEFFTATSTI_i; MEFFTATGATD_i = MEFFTATGAT_i; CBBTBOTD_i = CBBTBOT_i; CBBTSTID_i = CBBTSTI_i; CBBTGATD_i = CBBTGAT_i; FBBTRBOTD_i = FBBTRBOT_i; FBBTRSTID_i = FBBTRSTI_i; FBBTRGATD_i = FBBTRGAT_i; STFBBTBOTD_i = STFBBTBOT_i; STFBBTSTID_i = STFBBTSTI_i; STFBBTGATD_i = STFBBTGAT_i; VBRBOTD_i = VBRBOT_i; VBRSTID_i = VBRSTI_i; VBRGATD_i = VBRGAT_i; PBRBOTD_i = PBRBOT_i; PBRSTID_i = PBRSTI_i; PBRGATD_i = PBRGAT_i; VJUNREFD_i = VJUNREF_i; FJUNQD_i = FJUNQ_i; end else begin CJORBOTD_i = `CLIP_LOW( CJORBOTD ,`CJORBOT_cliplow); CJORSTID_i = `CLIP_LOW( CJORSTID ,`CJORSTI_cliplow); CJORGATD_i = `CLIP_LOW( CJORGATD ,`CJORGAT_cliplow); VBIRBOTD_i = `CLIP_LOW( VBIRBOTD ,`VBIR_cliplow); VBIRSTID_i = `CLIP_LOW( VBIRSTID ,`VBIR_cliplow); VBIRGATD_i = `CLIP_LOW( VBIRGATD ,`VBIR_cliplow); PBOTD_i = `CLIP_BOTH(PBOTD ,`P_cliplow,`P_cliphigh); PSTID_i = `CLIP_BOTH(PSTID ,`P_cliplow,`P_cliphigh); PGATD_i = `CLIP_BOTH(PGATD ,`P_cliplow,`P_cliphigh); PHIGBOTD_i = PHIGBOTD; PHIGSTID_i = PHIGSTID; PHIGGATD_i = PHIGGATD; IDSATRBOTD_i = `CLIP_LOW( IDSATRBOTD ,`IDSATR_cliplow); IDSATRSTID_i = `CLIP_LOW( IDSATRSTID ,`IDSATR_cliplow); IDSATRGATD_i = `CLIP_LOW( IDSATRGATD ,`IDSATR_cliplow); CSRHBOTD_i = `CLIP_LOW( CSRHBOTD ,`CSRH_cliplow); CSRHSTID_i = `CLIP_LOW( CSRHSTID ,`CSRH_cliplow); CSRHGATD_i = `CLIP_LOW( CSRHGATD ,`CSRH_cliplow); XJUNSTID_i = `CLIP_LOW( XJUNSTID ,`XJUN_cliplow); XJUNGATD_i = `CLIP_LOW( XJUNGATD ,`XJUN_cliplow); CTATBOTD_i = `CLIP_LOW( CTATBOTD ,`CTAT_cliplow); CTATSTID_i = `CLIP_LOW( CTATSTID ,`CTAT_cliplow); CTATGATD_i = `CLIP_LOW( CTATGATD ,`CTAT_cliplow); MEFFTATBOTD_i = `CLIP_LOW( MEFFTATBOTD,`MEFFTAT_cliplow); MEFFTATSTID_i = `CLIP_LOW( MEFFTATSTID,`MEFFTAT_cliplow); MEFFTATGATD_i = `CLIP_LOW( MEFFTATGATD,`MEFFTAT_cliplow); CBBTBOTD_i = `CLIP_LOW( CBBTBOTD ,`CBBT_cliplow); CBBTSTID_i = `CLIP_LOW( CBBTSTID ,`CBBT_cliplow); CBBTGATD_i = `CLIP_LOW( CBBTGATD ,`CBBT_cliplow); FBBTRBOTD_i = FBBTRBOTD; FBBTRSTID_i = FBBTRSTID; FBBTRGATD_i = FBBTRGATD; STFBBTBOTD_i = STFBBTBOTD; STFBBTSTID_i = STFBBTSTID; STFBBTGATD_i = STFBBTGATD; VBRBOTD_i = `CLIP_LOW( VBRBOTD ,`VBR_cliplow); VBRSTID_i = `CLIP_LOW( VBRSTID ,`VBR_cliplow); VBRGATD_i = `CLIP_LOW( VBRGATD ,`VBR_cliplow); PBRBOTD_i = `CLIP_LOW( PBRBOTD ,`PBR_cliplow); PBRSTID_i = `CLIP_LOW( PBRSTID ,`PBR_cliplow); PBRGATD_i = `CLIP_LOW( PBRGATD ,`PBR_cliplow); VJUNREFD_i = `CLIP_LOW( VJUNREFD ,`VJUNREF_cliplow); FJUNQD_i = `CLIP_LOW( FJUNQD ,`FJUNQ_cliplow); end `endif // JUNCAP_StandAlone tkr = `KELVINCONVERSION + TRJ_i; tkd = max($temperature + DTA, `KELVINCONVERSION + `MINTEMP); auxt = tkd / tkr; KBOL_over_QELE = `KBOL / `QELE; phitr = KBOL_over_QELE * tkr; phitrinv = 1.0 / phitr; phitd = KBOL_over_QELE * tkd; phitdinv = 1.0 / phitd; // bandgap voltages at reference temperature deltaphigr = -(7.02e-4 * tkr * tkr) / (1108.0 + tkr); phigrbot = PHIGBOT_i + deltaphigr; phigrsti = PHIGSTI_i + deltaphigr; phigrgat = PHIGGAT_i + deltaphigr; // bandgap voltages at device temperature deltaphigd = -(7.02e-4 * tkd * tkd) / (1108.0 + tkd); phigdbot = PHIGBOT_i + deltaphigd; phigdsti = PHIGSTI_i + deltaphigd; phigdgat = PHIGGAT_i + deltaphigd; // factors ftd for ideal-current model ftdbot = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot * phitrinv) - (phigdbot * phitdinv))); ftdsti = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti * phitrinv) - (phigdsti * phitdinv))); ftdgat = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat * phitrinv) - (phigdgat * phitdinv))); // temperature-scaled saturation current for ideal-current model idsatbot = IDSATRBOT_i * ftdbot * ftdbot; idsatsti = IDSATRSTI_i * ftdsti * ftdsti; idsatgat = IDSATRGAT_i * ftdgat * ftdgat; // built-in voltages before limiting ubibot = VBIRBOT_i * auxt - 2.0 * phitd * ln(ftdbot); ubisti = VBIRSTI_i * auxt - 2.0 * phitd * ln(ftdsti); ubigat = VBIRGAT_i * auxt - 2.0 * phitd * ln(ftdgat); // built-in voltages limited to phitd vbibot = ubibot + phitd * ln(1 + exp((`vbilow - ubibot) * phitdinv)); vbisti = ubisti + phitd * ln(1 + exp((`vbilow - ubisti) * phitdinv)); vbigat = ubigat + phitd * ln(1 + exp((`vbilow - ubigat) * phitdinv)); // inverse values of built-in voltages vbiinvbot = 1.0 / vbibot; vbiinvsti = 1.0 / vbisti; vbiinvgat = 1.0 / vbigat; // one minus the grading coefficient one_minus_PBOT = 1.0 - PBOT_i; one_minus_PSTI = 1.0 - PSTI_i; one_minus_PGAT = 1.0 - PGAT_i; // one over "one minus the grading coefficient" one_over_one_minus_PBOT = 1.0 / one_minus_PBOT; one_over_one_minus_PSTI = 1.0 / one_minus_PSTI; one_over_one_minus_PGAT = 1.0 / one_minus_PGAT; // temperature-scaled zero-bias capacitance cjobot = CJORBOT_i * pow((VBIRBOT_i * vbiinvbot), PBOT_i); cjosti = CJORSTI_i * pow((VBIRSTI_i * vbiinvsti), PSTI_i); cjogat = CJORGAT_i * pow((VBIRGAT_i * vbiinvgat), PGAT_i); // prefactor in physical part of charge model qprefbot = cjobot * vbibot * one_over_one_minus_PBOT; qprefsti = cjosti * vbisti * one_over_one_minus_PSTI; qprefgat = cjogat * vbigat * one_over_one_minus_PGAT; // prefactor in mathematical extension of charge model qpref2bot = `a * cjobot; qpref2sti = `a * cjosti; qpref2gat = `a * cjogat; // zero-bias depletion widths at reference temperature, needed in SRH and TAT model wdepnulrbot = EPSSI / CJORBOT_i; wdepnulrsti = XJUNSTI_i * EPSSI / CJORSTI_i; wdepnulrgat = XJUNGAT_i * EPSSI / CJORGAT_i; // inverse values of "wdepnulr", used in BBT model wdepnulrinvbot = 1.0 / wdepnulrbot; wdepnulrinvsti = 1.0 / wdepnulrsti; wdepnulrinvgat = 1.0 / wdepnulrgat; // inverse values of built-in voltages at reference temperature, needed in SRH and BBT model VBIRBOTinv = 1.0 / VBIRBOT_i; VBIRSTIinv = 1.0 / VBIRSTI_i; VBIRGATinv = 1.0 / VBIRGAT_i; // some constants needed in erfc-approximation, needed in TAT model perfc = (`SQRTPI * `aerfc); berfc = ((-5.0 * (`aerfc) + 6.0 - pow((perfc), -2.0)) / 3.0); cerfc = (1.0 - (`aerfc) - (berfc)); // half the bandgap energy, limited to values > phitd, needed in TAT model deltaEbot = max(0.5 * phigdbot, phitd); deltaEsti = max(0.5 * phigdsti, phitd); deltaEgat = max(0.5 * phigdgat, phitd); // values of atat, needed in TAT model atatbot = deltaEbot * phitdinv; atatsti = deltaEsti * phitdinv; atatgat = deltaEgat * phitdinv; // values of btatpart, needed in TAT model btatpartbot = sqrt(32.0 * MEFFTATBOT_i * `MELE * `QELE * (deltaEbot * deltaEbot * deltaEbot)) / (3.0 * `HBAR); btatpartsti = sqrt(32.0 * MEFFTATSTI_i * `MELE * `QELE * (deltaEsti * deltaEsti * deltaEsti)) / (3.0 * `HBAR); btatpartgat = sqrt(32.0 * MEFFTATGAT_i * `MELE * `QELE * (deltaEgat * deltaEgat * deltaEgat)) / (3.0 * `HBAR); // temperature-scaled values of FBBT, needed in BBT model fbbtbot = FBBTRBOT_i * (1.0 + STFBBTBOT_i * (tkd - tkr)); fbbtsti = FBBTRSTI_i * (1.0 + STFBBTSTI_i * (tkd - tkr)); fbbtgat = FBBTRGAT_i * (1.0 + STFBBTGAT_i * (tkd - tkr)); fbbtbot = `CLIP_LOW(fbbtbot, 0.0); fbbtsti = `CLIP_LOW(fbbtsti, 0.0); fbbtgat = `CLIP_LOW(fbbtgat, 0.0); // values of fstop, needed in avalanche/breakdown model alphaav = 1.0 - 1.0 / FREV_i; fstopbot = 1.0 / (1.0 - pow(alphaav, PBRBOT_i)); fstopsti = 1.0 / (1.0 - pow(alphaav, PBRSTI_i)); fstopgat = 1.0 / (1.0 - pow(alphaav, PBRGAT_i)); // inverse values of breakdown voltages, needed in avalanche/breakdown model VBRinvbot = 1.0 / VBRBOT_i; VBRinvsti = 1.0 / VBRSTI_i; VBRinvgat = 1.0 / VBRGAT_i; // slopes for linear extrapolation close to and beyond breakdown, needed in avalanche/breakdown model slopebot = -(fstopbot * fstopbot * pow(alphaav, (PBRBOT_i - 1.0))) * PBRBOT_i * VBRinvbot; slopesti = -(fstopsti * fstopsti * pow(alphaav, (PBRSTI_i - 1.0))) * PBRSTI_i * VBRinvsti; slopegat = -(fstopgat * fstopgat * pow(alphaav, (PBRGAT_i - 1.0))) * PBRGAT_i * VBRinvgat; `ifdef JUNCAP_StandAlone // do nothing `else // JUNCAP_StandAlone phigrbot_d = PHIGBOTD_i + deltaphigr; phigrsti_d = PHIGSTID_i + deltaphigr; phigrgat_d = PHIGGATD_i + deltaphigr; phigdbot_d = PHIGBOTD_i + deltaphigd; phigdsti_d = PHIGSTID_i + deltaphigd; phigdgat_d = PHIGGATD_i + deltaphigd; ftdbot_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrbot_d * phitrinv) - (phigdbot_d * phitdinv))); ftdsti_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrsti_d * phitrinv) - (phigdsti_d * phitdinv))); ftdgat_d = (pow(auxt, 1.5)) * exp(0.5 * ((phigrgat_d * phitrinv) - (phigdgat_d * phitdinv))); idsatbot_d = IDSATRBOTD_i * ftdbot_d * ftdbot_d; idsatsti_d = IDSATRSTID_i * ftdsti_d * ftdsti_d; idsatgat_d = IDSATRGATD_i * ftdgat_d * ftdgat_d; ubibot_d = VBIRBOTD_i * auxt - 2.0 * phitd * ln(ftdbot_d); ubisti_d = VBIRSTID_i * auxt - 2.0 * phitd * ln(ftdsti_d); ubigat_d = VBIRGATD_i * auxt - 2.0 * phitd * ln(ftdgat_d); vbibot_d = ubibot_d + phitd * ln(1.0 + exp((`vbilow - ubibot_d) * phitdinv)); vbisti_d = ubisti_d + phitd * ln(1.0 + exp((`vbilow - ubisti_d) * phitdinv)); vbigat_d = ubigat_d + phitd * ln(1.0 + exp((`vbilow - ubigat_d) * phitdinv)); vbiinvbot_d = 1.0 / vbibot_d; vbiinvsti_d = 1.0 / vbisti_d; vbiinvgat_d = 1.0 / vbigat_d; one_minus_PBOT_d = 1.0 - PBOTD_i; one_minus_PSTI_d = 1.0 - PSTID_i; one_minus_PGAT_d = 1.0 - PGATD_i; one_over_one_minus_PBOT_d = 1.0 / one_minus_PBOT_d; one_over_one_minus_PSTI_d = 1.0 / one_minus_PSTI_d; one_over_one_minus_PGAT_d = 1.0 / one_minus_PGAT_d; cjobot_d = CJORBOTD_i * pow((VBIRBOTD_i * vbiinvbot_d), PBOTD_i); cjosti_d = CJORSTID_i * pow((VBIRSTID_i * vbiinvsti_d), PSTID_i); cjogat_d = CJORGATD_i * pow((VBIRGATD_i * vbiinvgat_d), PGATD_i); qprefbot_d = cjobot_d * vbibot_d * one_over_one_minus_PBOT_d; qprefsti_d = cjosti_d * vbisti_d * one_over_one_minus_PSTI_d; qprefgat_d = cjogat_d * vbigat_d * one_over_one_minus_PGAT_d; qpref2bot_d = `a * cjobot_d; qpref2sti_d = `a * cjosti_d; qpref2gat_d = `a * cjogat_d; wdepnulrbot_d = EPSSI / CJORBOTD_i; wdepnulrsti_d = XJUNSTID_i * EPSSI / CJORSTID_i; wdepnulrgat_d = XJUNGATD_i * EPSSI / CJORGATD_i; wdepnulrinvbot_d = 1.0 / wdepnulrbot_d; wdepnulrinvsti_d = 1.0 / wdepnulrsti_d; wdepnulrinvgat_d = 1.0 / wdepnulrgat_d; VBIRBOTinv_d = 1.0 / VBIRBOTD_i; VBIRSTIinv_d = 1.0 / VBIRSTID_i; VBIRGATinv_d = 1.0 / VBIRGATD_i; deltaEbot_d = max(0.5 * phigdbot_d, phitd); deltaEsti_d = max(0.5 * phigdsti_d, phitd); deltaEgat_d = max(0.5 * phigdgat_d, phitd); atatbot_d = deltaEbot_d * phitdinv; atatsti_d = deltaEsti_d * phitdinv; atatgat_d = deltaEgat_d * phitdinv; btatpartbot_d = sqrt(32.0 * MEFFTATBOTD_i * `MELE * `QELE * (deltaEbot_d * deltaEbot_d * deltaEbot_d)) / (3.0 * `HBAR); btatpartsti_d = sqrt(32.0 * MEFFTATSTID_i * `MELE * `QELE * (deltaEsti_d * deltaEsti_d * deltaEsti_d)) / (3.0 * `HBAR); btatpartgat_d = sqrt(32.0 * MEFFTATGATD_i * `MELE * `QELE * (deltaEgat_d * deltaEgat_d * deltaEgat_d)) / (3.0 * `HBAR); fbbtbot_d = FBBTRBOTD_i * (1.0 + STFBBTBOTD_i * (tkd - tkr)); fbbtsti_d = FBBTRSTID_i * (1.0 + STFBBTSTID_i * (tkd - tkr)); fbbtgat_d = FBBTRGATD_i * (1.0 + STFBBTGATD_i * (tkd - tkr)); fbbtbot_d = `CLIP_LOW(fbbtbot_d, 0.0); fbbtsti_d = `CLIP_LOW(fbbtsti_d, 0.0); fbbtgat_d = `CLIP_LOW(fbbtgat_d, 0.0); fstopbot_d = 1.0 / (1.0 - pow(alphaav, PBRBOTD_i)); fstopsti_d = 1.0 / (1.0 - pow(alphaav, PBRSTID_i)); fstopgat_d = 1.0 / (1.0 - pow(alphaav, PBRGATD_i)); VBRinvbot_d = 1.0 / VBRBOTD_i; VBRinvsti_d = 1.0 / VBRSTID_i; VBRinvgat_d = 1.0 / VBRGATD_i; slopebot_d = -(fstopbot_d * fstopbot_d * pow(alphaav, (PBRBOTD_i - 1.0))) * PBRBOTD_i * VBRinvbot_d; slopesti_d = -(fstopsti_d * fstopsti_d * pow(alphaav, (PBRSTID_i - 1.0))) * PBRSTID_i * VBRinvsti_d; slopegat_d = -(fstopgat_d * fstopgat_d * pow(alphaav, (PBRGATD_i - 1.0))) * PBRGATD_i * VBRinvgat_d; `endif // JUNCAP_StandAlone tmp_ns50wwy/src/spicelib/devices/adms/ekv/0000755000175000017500000000000014163340332020665 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/ekv/admsva/0000755000175000017500000000000014163340332022140 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/ekv/admsva/ekv.va0000644000175000017500000005552314163340332023267 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 `define P(txt) (*txt*) `define PGIVEN(p) $param_given(p) `ifdef insideADMS `define INITIAL_MODEL @(initial_model) `define INSTANCE @(initial_instance) `define NOISE @(noise) `else `define INITIAL_MODEL `define INSTANCE `define NOISE `endif `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 MIN_R 0.001 `define VEXLIM 200.0 `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 y_fv(fv,y)\ 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 \ tmp = exp(-fv);\ 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 \ tmp = exp(-fv);\ y = 1.0 / (2.0 + tmp);\ end \ else begin \ tmp = exp(fv);\ y = tmp + 1.0e-64;\ end `define expLin(result, x)\ if (x < `VEXLIM)\ result = exp(x);\ else begin\ result = exp(`VEXLIM) * (1.0 + (x - `VEXLIM));\ end module ekv (d,g,s,b); // Node definitions inout d,g,s,b; // external nodes electrical d,g,s,b; // external nodes electrical dp,sp; // internal nodes branch (dp,sp) dpsp; branch (dp,b) dpb; branch (sp,b) spb; branch (g,dp) gpdp; branch (g,sp) gpsp; branch (g,b) gb; branch (d,dp) ddp; branch (s,sp) ssp; // Instance parameters // - intrinsic model parameter real l=10e-6 from [0:inf) `P(type="instance" desc="Drawn length [m]" units="m"); parameter real w=10e-6 from [0:inf) `P(type="instance" desc="Drawn width [m]" units="m"); parameter real m=1.0 from [1:inf) `P(type="instance" desc="Parallel multiplier" units="m"); parameter real ns=1.0 from [1:inf) `P(type="instance" desc="Series multiplier" units="m"); parameter real dtemp = 0.0 from (-inf:inf) `P(type="instance" desc="Difference sim. temp and device temp" units="C"); // - external parasitics parameter real ad=0.0 from [0:inf) `P(type="instance" desc="Drain area" units="m^2"); parameter real as=0.0 from [0:inf) `P(type="instance" desc="Source area" units="m^2"); parameter real pd=0.0 from [0:inf) `P(type="instance" desc="Drain perimeter" units="m"); parameter real ps=0.0 from [0:inf) `P(type="instance" desc="Source perimeter" units="m"); parameter real nrd=0.0 from [0:inf) `P(type="instance" desc="Drain no. squares"); parameter real nrs=0.0 from [0:inf) `P(type="instance" desc="Source no. squares"); // Model parameters parameter integer nmos=1 from [0:1] `P(desc="MOS channel type"); parameter integer pmos=1 from [0:1] `P(desc="MOS channel type"); parameter integer type=1 from [-1:1] exclude 0; parameter real tnom=27.0 from [-273.15:inf) `P(desc="Nominal temperature" units="C"); parameter real imax=1.0 from [0:inf) `P(desc="Maximum forward junction current before linearization" units="A"); // - intrinsic model (optional, section 4.2.1) parameter real tox=0.0 from [0:inf) `P(desc="Oxide thickness" units="m"); parameter real nsub=0.0 from [0:inf) `P(desc="Channel doping" units="cm^-3"); parameter real vfb=-1.0 from (-inf:inf) `P(desc="Flat-band voltage" units="V"); parameter real uo=0.0 from [0:inf) `P(desc="Low-field mobility" units="cm^2/Vs"); parameter real vmax=0.0 from [0:inf) `P(desc="Saturation velocity" units="m/s"); parameter real theta=0.0 from [0:inf) `P(desc="Mobility reduction coefficient" units="V^-1"); // - intrinsic model (process related, section 4.1) parameter real cox=0.7e-3 from [1e-6:inf) `P(desc="Oxide capacitance" units="F/m^2"); parameter real xj=0.1e-6 from [1n:inf) `P(desc="Junction depth" units="m"); parameter real dl=0.0 from (-inf:inf) `P(desc="Length correction" units="m"); parameter real dw=0.0 from (-inf:inf) `P(desc="Width correction" units="m"); // - intrinsic model (basic, section 4.2) parameter real gamma=0.7 from [0:inf) `P(desc="Body effect parameter" units="V^0.5"); parameter real phi=0.5 from [0.1:inf) `P(desc="Bulk Fermi potential (*2)" units="V"); parameter real vto=0.5 from (-inf:inf) `P(desc="Long-channel threshold voltage" units="V"); parameter real kp=20e-6 from [0.0:inf) `P(desc="Transconductance parameter" units="A/V^2"); parameter real ucrit=1.0e+6 from [100e+3:inf) `P(desc="Longitudinal critical field" units="V/m"); parameter real e0=1.0e-9 from [1e-12:inf) `P(desc="Mobility reduction coefficient" units="V/m"); // - intrinsic model (channel length modulation and charge sharing, section 4.3) parameter real lambda=0.5 from [0:inf) `P(desc="Depletion length coefficient (CLM)"); parameter real weta=0.25 from (-inf:inf) `P(desc="Narrow-channel effect coefficient"); parameter real leta=0.1 from (-inf:inf) `P(desc="Short-channel effect coefficient"); // - intrinsic model (reverse short channel effect, section 4.4) parameter real q0=0.0 from (-inf:inf) `P(desc="RSCE peak charge density" units="C/m^2"); parameter real lk=0.29e-6 from [10n:inf) `P(desc="RSCE characteristic length" units="m"); // - intrinsic model (impact ionization, section 4.5) parameter real iba=0.0 from (-inf:inf) `P(desc="First impact ionization coefficient" units="m^-1"); parameter real ibb=3e8 from [1e8:inf) `P(desc="Second impact ionization coefficient" units="V/m"); parameter real ibn=1.0 from [0.1:inf) `P(desc="Saturation voltage factor for impact ionization"); // - intrinsic model (temperature, section 4.6) parameter real tcv=1e-3 from (-inf:inf) `P(desc="Threshold voltage TC" units="V/deg"); parameter real bex=-1.5 from (-inf:inf) `P(desc="Mobility temperature exponent"); parameter real ucex=0.8 from (-inf:inf) `P(desc="Longitudinal critical field temperature exponent"); parameter real ibbt=9e-4 from (-inf:inf) `P(desc="Temperature coefficient for ibb" units="K^-1"); // - intrinsic model (matching, section 4.7) parameter real avto=0.0 from (-inf:inf) `P(desc="Area related vto mismatch parameter" units="Vm"); parameter real akp=0.0 from (-inf:inf) `P(desc="Area related kp mismatch parameter" units="m"); parameter real agamma=0.0 from (-inf:inf) `P(desc="Area related gamma mismatch parameter" units="V^0.5*m"); // - intrinsic model (flicker noise, section 4.8) parameter real kf=0.0 from [0:inf) `P(desc="Flicker noise coefficient"); parameter real af=1.0 from (-inf:inf) `P(desc="Flicker noise exponent"); // - external parasitic parameters parameter real hdif=0.0 from [0:inf) `P(desc="S/D diffusion length (/2)" units="m"); parameter real rsh=0.0 from [0:inf) `P(desc="S/D sheet resistance" units="Ohm"); parameter real js=0.0 from [0:inf) `P(desc="S/D junction saturation current density" units="A/m^2"); parameter real jsw=0.0 from [0:inf) `P(desc="S/D junction sidewall saturation current density" units="A/m"); parameter real xti=0.0 from [0:inf) `P(desc="S/D diode saturation current temperature exponent"); parameter real n=1 from [0.5:10] `P(desc="S/D diode emission coefficient"); parameter real cj=0.0 from [0:inf) `P(desc="S/D zero-bias junction capacitance per area" units="F/m^2"); parameter real cjsw=0.0 from [0:inf) `P(desc="S/D zero-bias junction capacitance per perimeter" units="F/m"); parameter real pb=0.8 from (0:inf) `P(desc="S/D bottom junction builtin potential" units="V"); parameter real pbsw=pb from (0:inf) `P(desc="S/D sidewall junction builtin potential" units="V"); parameter real mj=0.5 from (0:inf) `P(desc="S/D bottom junction grading coefficient"); parameter real mjsw=0.333 from (0:inf) `P(desc="S/D sidewall junction grading coefficient"); parameter real fc=0.5 from (0:inf) `P(desc="S/D bottom junction forward-bias threshold"); parameter real fcsw=fc from (0:inf) `P(desc="S/D sidewall junction forward-bias threshold"); parameter real cgso=1.5e-10 from [0:inf) `P(desc="Gate-source overlap capacitance per width" units="F/m"); parameter real cgdo=1.5e-10 from [0:inf) `P(desc="Gate-drain overlap capacitance per width" units="F/m"); parameter real cgbo=4.0e-10 from [0:inf) `P(desc="Gate-bulk overlap capacitance per length" units="F/m"); // Declaration of variables integer mode, MOStype; real lc,isat_s,vexp_s,gexp_s,isat_d,vexp_d,gexp_d,fact, weff,leff,lmin,RDeff,RSeff,ceps,ca,xsi,dvrsce, TempK,Vt,sqrt_A,vto_a,kp_a,gamma_a,ucrit_a,phi_a,ibb_a,vc,qb0, vg,vd,vs,tmp,vgprime,vp0,vsprime,vdprime,gamma0,gammaprime,vp,nslope,ifwd, vdss,vdssprime,dv,vds,vip,dl_a,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,qdtx,qstx,qgt,qjs,qjd, cbs0,cbs0sw,cbs,cbd0,cbd0sw,cbd,v_bp_dp, v_bp_sp, fv,z0,z1,y; real ADeff, ASeff, PDeff, PSeff; real cgso_s,cgdo_s,cgbo_s; real gmin, TnomK; real cox_p, gamma_p, phi_p, kp_p, vto_p, ucrit_p; analog begin MOStype = 1; gmin = $simparam("gmin"); `INITIAL_MODEL // Model Initialization begin if (`PGIVEN(nmos)) begin MOStype = `NMOS; end else if (`PGIVEN(pmos)) begin MOStype = `PMOS; end else begin MOStype = (`PGIVEN(type)) ? type : `NMOS; end //$strobe("MOStype %d", MOStype); if (`PGIVEN(cox)) begin cox_p = cox; end else begin cox_p = (tox>0) ? (`EPSOX/tox) : 0.7e-3; end if (`PGIVEN(gamma)) begin gamma_p = gamma; end else begin gamma_p = (nsub>0) ? (sqrt(2*`P_Q*`EPSSI*nsub*1e+6)/cox_p) : 0.7; end if (`PGIVEN(phi)) begin phi_p = phi; end else begin phi_p = (nsub>0) ? (2*`VT(tnom+273.15)*ln(nsub*1e+6/`NI(tnom+273.15))) : 0.5; end if (`PGIVEN(kp)) begin kp_p = kp; end else begin kp_p = (uo>0) ? (uo*1e-4*cox_p) : 20e-6; end if (`PGIVEN(vto)) begin vto_p = vto; end else begin vto_p = (`PGIVEN(vfb)) ? (vfb+phi_p+gamma_p*sqrt(phi_p)) : 0.5; end if (`PGIVEN(ucrit)) begin ucrit_p = ucrit; end else begin ucrit_p = (vmax>0 && uo>0) ? (vmax/(uo*1e-4)) : 100e+3; end lc = sqrt(`EPSSI/cox_p*xj); end // INITIAL_MODEL `INSTANCE // temperature independent device initialization begin weff = w+dw; leff = l+dl; // eq. 54 lmin = 0.1*ns*leff; if (hdif > 0) begin RSeff = ns/m*rsh*hdif/weff; RDeff = ns/m*rsh*hdif/weff; ADeff = 2*hdif*weff; ASeff = 2*hdif*weff; PDeff = 4*hdif+2*weff; PSeff = 4*hdif+2*weff; end else begin RSeff = ns/m*rsh*nrs; RDeff = ns/m*rsh*nrd; ADeff = ad; ASeff = as; PDeff = pd; PSeff = ps; end if (RDeff < `MIN_R) begin RDeff = `MIN_R; end if (RSeff < `MIN_R) begin RSeff = `MIN_R; end ceps = 4*22e-3*22e-3; ca = 0.028; xsi = ca*(10*leff/lk-1); dvrsce = 2*q0/cox_p/`SQR(1+0.5*(xsi+sqrt(xsi*xsi+ceps))); coxt = m*ns*cox_p*weff*leff; cbs0 = m*ns*cj*ASeff; cbd0 = m*ns*cj*ADeff; cbs0sw = m*ns*cjsw*PSeff; cbd0sw = m*ns*cjsw*PDeff; cgso_s = m*ns*cgso*weff; cgdo_s = m*ns*cgdo*weff; cgbo_s = m*ns*cgbo*leff; end // temperature independent `INSTANCE // temperature dependent device initialization begin if (dtemp > 0.0) begin TempK = $temperature + dtemp; end else begin TempK = $temperature; end TnomK = tnom + 273.15; Vt = `VT(TempK); sqrt_A = sqrt(m*weff*ns*leff); vto_a = MOStype*(vto_p+tcv*(TempK-TnomK))+avto/sqrt_A; kp_a = m*kp_p*pow(TempK/TnomK,bex)*(1+akp/sqrt_A); gamma_a = gamma_p+agamma/sqrt_A; ucrit_a = ucrit_p*pow(TempK/TnomK,ucex); phi_a = phi_p*TempK/TnomK-3*Vt*ln(TempK/TnomK)-`EG(TnomK)*TempK/TnomK+`EG(TempK); ibb_a = ibb*(1+ibbt*(TempK-TnomK)); vc = ucrit_a*ns*leff; // eq. 60 qb0 = gamma_a*sqrt(phi_a); fact = (`EG(TnomK)/`VT(TnomK)-`EG(TempK)/Vt) * pow(TempK/TnomK,xti); `expLin(tmp,fact) isat_s = m*ns*(js*ASeff+jsw*PSeff)*tmp; isat_d = m*ns*(js*ADeff+jsw*PDeff)*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 end // temperature dependent begin //Bias-dependent model evaluation vg = MOStype*V(gb); vd = MOStype*V(dpb); vs = MOStype*V(spb); // $strobe("MOStype %d vg=%e vd=%e vs=%e",MOStype,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_a+gamma_a*sqrt(phi_a); // eq. 35 vsprime = 0.5*(vs+phi_a+sqrt(`SQR(vs+phi_a)+16*`SQR(Vt))); vdprime = 0.5*(vd+phi_a+sqrt(`SQR(vd+phi_a)+16*`SQR(Vt))); // $strobe("vgprime=%e vdprime=%e vsprime=%e",vgprime,vdprime,vsprime); // eq. 34 if (vgprime>=0) begin vp0 = vgprime-phi_a-gamma_a*(sqrt(vgprime+0.25*`SQR(gamma_a))-0.5*gamma_a); // eq. 36 gamma0 = gamma_a-`EPSSI/cox_p*(leta/leff*(sqrt(vsprime)+sqrt(vdprime))-3*weta/weff*sqrt(vp0+phi_a)); end else begin vp0 = -phi_a; // eq. 36 - skipped sqrt(vp0+phi_a) here, it produces inf on derivative gamma0 = gamma_a-`EPSSI/cox_p*(leta/leff*(sqrt(vsprime)+sqrt(vdprime)) ); end // eq. 37 gammaprime = 0.5*(gamma0+sqrt(`SQR(gamma0)+0.1*Vt)); // eq. 38 if (vgprime>=0) begin vp = vgprime-phi_a-gammaprime*(sqrt(vgprime+0.25*`SQR(gammaprime))-0.5*gammaprime); end else begin vp = -phi_a; end // $strobe("vp0=%e vp=%e gamma0=%e gammaprime=%e",vp0,vp,gamma0,gammaprime); // eq. 39 nslope = 1+gamma_a*0.5/sqrt(vp+phi_a+4*Vt); // Forward current (43-44) fv=(vp-vs)/Vt; `y_fv(fv,y) ifwd = y*(1.0 + y); // 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_a = lambda*lc*ln(1+(vds-vip)/(lc*ucrit_a)); // eq. 53 lprime = ns*leff-dl_a+(vds+vip)/ucrit_a; // 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; `y_fv(fv,y) irprime = y*(1.0 + y); // eq. 57 fv=(vp-vd)/Vt; `y_fv(fv,y) irev = y*(1.0 + y); // eq. 58 beta0 = kp_a*weff/leq; // eq. 59 nau = (5+MOStype)/12.0; // eq. 69 nq = 1+0.5*gamma_a/sqrt(vp+phi_a+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) begin qb = (-gamma_a*sqrt(vp+phi_a+1e-6))/Vt-(nq-1)/nq*qi; end else begin qb = -vgprime/Vt; end // eq. 76 (qox removed since it is assumed to be zero) qg = -qi-qb; if (e0!=0) begin // eq. 61 beta0prime = beta0*(1+cox_p/(e0*`EPSSI)*qb0); // eq. 62 beta = beta0prime/(1+cox_p/(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*nslope*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 `expLin(tmp,(-ibb_a*lc)/vib) idb = ids*iba/ibb_a*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 `expLin(tmp,-vs/(n*Vt)) 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 `expLin(tmp,-vd/(n*Vt)) 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 `expLin(tmp,-vd/(n*Vt)) 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 `expLin(tmp,-vs/(n*Vt)) 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; v_bp_dp = MOStype*V(b,dp); v_bp_sp = MOStype*V(b,sp); if (cbs0>0) begin if (v_bp_sp>fc*pb) begin cbs = cbs+cbs0/pow(1-fc,mj)*(1+mj*(v_bp_sp-pb*fc))/(pb*(1-fc)); end else begin cbs = cbs+cbs0/pow(1-v_bp_sp,mj); end end if (cbd0>0) begin if (v_bp_dp>fc*pb) begin cbd = cbd+cbd0/pow(1-fc,mj)*(1+mj*(v_bp_dp-pb*fc))/(pb*(1-fc)); end else begin cbd = cbd+cbd0/pow(1-v_bp_dp,mj); end end if (cbs0sw>0) begin if (v_bp_sp>fcsw*pbsw) begin cbs = cbs+cbs0sw/pow(1-fcsw,mjsw)*(1+mjsw*(v_bp_sp-pbsw*fcsw))/(pbsw*(1-fcsw)); end else begin cbs = cbs+cbs0sw/pow(1-v_bp_sp,mjsw); end end if (cbd0sw>0) begin if (v_bp_dp>fcsw*pbsw) begin cbd = cbd+cbd0sw/pow(1-fcsw,mjsw)*(1+mjsw*(v_bp_dp-pbsw*fcsw))/(pbsw*(1-fcsw)); end else begin cbd = cbd+cbd0sw/pow(1-v_bp_dp,mjsw); end end end //Bias-dependent model evaluation begin //Define branch sources I(dpsp) <+ MOStype*mode*ids; I(dpsp) <+ gmin*V(dpsp); if (mode>0) begin I(dpb) <+ MOStype*idb; I(dpb) <+ gmin*V(dpb); qdtx = qdt; qstx = qst; end else begin I(spb) <+ MOStype*idb; I(spb) <+ gmin*V(spb); qdtx = qst; qstx = qdt; end // else: !if(mode>0) I(dpb) <+ MOStype*ddt(qdtx); I(spb) <+ MOStype*ddt(qstx); I(gb) <+ MOStype*ddt(qgt); //$strobe("V(dpb): %e qdtx=%e V(spb): %e qstx=%e V(gb): %e qgt: %e" ,V(dpb),qdtx,V(spb),qstx,V(gb),qgt); I(b,sp) <+ MOStype*ibsj; I(b,dp) <+ MOStype*ibdj; qjs = cbs * v_bp_sp; qjd = cbd * v_bp_dp; I(b,sp) <+ MOStype*ddt(qjs); I(b,dp) <+ MOStype*ddt(qjd); //$strobe("v_bp_sp: %e cbs=%e v_bp_dp: %e cbd=%e" ,v_bp_sp,cbs,v_bp_dp,cbd); I(gpsp) <+ ddt(cgso_s*V(gpsp)); I(gpdp) <+ ddt(cgdo_s*V(gpdp)); I(gb) <+ ddt(cgbo_s*V(gb)) + gmin*V(dpsp); //$strobe("V(gpsp): %e cgso_s=%e V(gpdp): %e cgdo_s=%e V(gb): %e cgbo_s: %e" ,V(gpsp),cgso_s,V(gpdp),cgdo_s,V(gb),cgbo_s); I(ddp) <+ V(ddp)/RDeff; I(ssp) <+ V(ssp)/RSeff; end // begin // `NOISE begin //Define noise sources // // end // noise end //analog endmodule tmp_ns50wwy/src/spicelib/devices/adms/admst/0000755000175000017500000000000014163340332021210 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEtemp.c.xml0000644000175000017500000000614414163340332025404 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEpar.c.xml0000644000175000017500000000616514163340332025224 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEinit.c.xml0000644000175000017500000000721314163340332025400 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; } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEacld.c.xml0000644000175000017500000000711114163340332025335 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/analogfunction.xml0000644000175000017500000015216214163340332024750 0ustar carstencarsten /* math functions and appropriate derivatives */ static inline double _fn_cos(double arg) { return cos(arg); } static inline double _d0_cos(double arg) { return (-sin(arg)); } static inline double _fn_sin(double arg) { return sin(arg); } static inline double _d0_sin(double arg) { return (cos(arg)); } static inline double _fn_tan(double arg) { return tan(arg); } static inline double _d0_tan(double arg) { return (1.0/cos(arg)/cos(arg)); } static inline double _fn_cosh(double arg) { return cosh(arg); } static inline double _d0_cosh(double arg) { return (sinh(arg)); } static inline double _fn_sinh(double arg) { return sinh(arg); } static inline double _d0_sinh(double arg) { return (cosh(arg)); } static inline double _fn_tanh(double arg) { return tanh(arg); } static inline double _d0_tanh(double arg) { return (1.0/cosh(arg)/cosh(arg)); } static inline double _fn_acos(double arg) { return acos(arg); } static inline double _d0_acos(double arg) { return (-1.0/sqrt(1-arg*arg)); } static inline double _fn_asin(double arg) { return asin(arg); } static inline double _d0_asin(double arg) { return (+1.0/sqrt(1-arg*arg)); } static inline double _fn_atan(double arg) { return atan(arg); } static inline double _d0_atan(double arg) { return (+1.0/(1+arg*arg)); } static inline double _fn_acosh(double arg) { return acosh(arg); } static inline double _d0_acosh(double arg) { return (1.0/(sqrt(arg-1)*sqrt(arg+1))); } static inline double _fn_asinh(double arg) { return asinh(arg); } static inline double _d0_asinh(double arg) { return (1.0/(sqrt(arg*arg+1))); } static inline double _fn_atanh(double arg) { return atanh(arg); } static inline double _d0_atanh(double arg) { return (+1.0/(1-arg*arg)); } static inline double _fn_logE(double arg) { return log(arg); } static inline double _d0_logE(double arg) { return (1.0/arg); } static inline double _fn_log10(double arg) { return log10(arg); } static inline double _d0_log10(double arg) { return (1.0/arg/log(10.0)); } static inline double _fn_exp(double arg) { return exp(arg); } static inline double _d0_exp(double arg) { return exp(arg); } static inline double _fn_sqrt(double arg) { return sqrt(arg); } static inline double _d0_sqrt(double arg) { return (1.0/sqrt(arg)/2.0); } static inline double _fn_abs(double arg) { return fabs(arg); } static inline double _d0_abs(double arg) { return (((arg)>=0)?(+1.0):(-1.0)); } static inline double _fn_floor(double arg) { return floor(arg); } static inline double _d0_floor(double arg) { (void) arg; return 0.0; } static inline double _fn_ceil(double arg) { return ceil(arg); } static inline double _d0_ceil(double arg) { (void) arg; return 0.0; } static inline double _fn_hypot(double x,double y) { return sqrt((x)*(x)+(y)*(y)); } static inline double _d0_hypot(double x,double y) { return (x)/sqrt((x)*(x)+(y)*(y)); } static inline double _d1_hypot(double x,double y) { return (y)/sqrt((x)*(x)+(y)*(y)); } static inline double _fn_atan2(double x,double y) { return atan2(x,y); } static inline double _d0_atan2(double x,double y) { return -y / (x*x + y*y); } static inline double _d1_atan2(double x,double y) { return x / (x*x + y*y); } static inline double _fn_max(double x,double y) { return ((x)>(y))?(x):(y); } static inline double _d0_max(double x,double y) { return ((x)>(y))?1.0:0.0; } static inline double _d1_max(double x,double y) { return ((x)>(y))?0.0:1.0; } static inline double _fn_min(double x,double y) { return ((x)<(y))?(x):(y); } static inline double _d0_min(double x,double y) { return ((x)<(y))?1.0:0.0; } static inline double _d1_min(double x,double y) { return ((x)<(y))?0.0:1.0; } static inline double _fn_pow(double x,double y) { return pow(x,y); } static inline double _d0_pow(double x,double y) { return (x==0.0)?0.0:((y/x)*pow(x,y)); } static inline double _d1_pow(double x,double y) { return (x==0.0)?0.0:((log(x)/exp(0.0))*pow(x,y)); } static inline double _fn_limexp(double arg) { return ((arg)<(80))?(exp(arg)):(exp(80.0)*(1.0+(arg-80))); } static inline double _d0_limexp(double arg) { return ((arg)<(80))?(exp(arg)):(exp(80.0)); } static inline double _fn_vt(double arg) { return (1.3806503e-23 / 1.602176462e-19) * arg; } static inline double _d0_vt(double arg) { (void) arg; return (1.3806503e-23 / 1.602176462e-19); } $(module)_$function ( ) =0 =0.0 =0 =0.0 double $(module)_d_$(function) ( , ) =0 =0.0 =0 =0.0 =0 =0.0 =0 =0.0 /* * %(attribute[name='ngspicename']/value).analogfunction.h - analog function header * * This 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, or (at your option) * any later version. * */ #ifndef __$(module)_ANALOGFUNCTION_H__ #define __$(module)_ANALOGFUNCTION_H__ #endif /* __$(module)_ANALOGFUNCTION_H__ */ /* * %(attribute[name='ngspicename']/value).analogfunction.c - analog function implementations * * This 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, or (at your option) * any later version. * */ // #if HAVE_CONFIG_H // # include <config.h> // #endif #include <stdio.h> #include "%(attribute[name='ngspicename']/value).analogfunction.h" #include <math.h> tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULE.c.xml0000644000175000017500000001123414163340332024512 0ustar carstencarsten #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "$(module)defs.h" #include "ngspice/suffix.h" IFparm $(module)pTable[] = { IOP("%(lower-case(name))",$(module)_instance_%(name),IF_REAL,"%(name)"), IOP("%(lower-case(name))",$(module)_instance_%(name),IF_INTEGER,"%(name)"), OP("%(lower-case(name))",$(module)_ask_%(name),IF_REAL,"%(attribute[name='desc']/value)"), }; 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); tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEguesstopology.c.xml0000644000175000017500000004317014163340332027362 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 ELECTRON_CHARGE 1.602191770e-19 /* C */ #define BOLTZMANN 1.38062259e-23 /* J/oK */ #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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEdel.c.xml0000644000175000017500000000460314163340332025201 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; } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEext.h.xml0000644000175000017500000000600414163340332025237 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 tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEnoise.c.xml0000644000175000017500000000571214163340332025554 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/adms.implicit.xml0000644000175000017500000012534414163340332024500 0ustar carstencarsten tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULE.hxx.xml0000644000175000017500000036732014163340332025111 0ustar carstencarsten #define ELECTRON_CHARGE 1.602191770e-19 /* C */ #define BOLTZMANN 1.38062259e-23 /* J/oK */ /* 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_floor(v00,x) v00 = floor(x); #define m00_ceil(v00,x) v00 = ceil(x); #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 m00_atan2(v00,x,y) v00 = atan2(x,y); #define m10_atan2(v10,x,y) v10 = (-(y)/((x)*(x)+(y)*(y))); #define m11_atan2(v11,x,y) v11 = ((x)/((x)*(x)+(y)*(y))); #define m00_acosh(v00,x) v00 = acosh(x); #define m10_acosh(v10,v00,x) v10 = (1.0/(sqrt(x-1)*sqrt(x+1))); #define m00_asinh(v00,x) v00 = asinh(x); #define m10_asinh(v10,v00,x) v10 = (1.0/(sqrt(x*x+1))); #define m00_atanh(v00,x) v00 = atanh(x); #define m10_atanh(v10,v00,x) v10 = (1.0/(1-x*x)); #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 int double char* fabs shrinkl shrinka log10 logE limexp limexp %(name) $e tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEtrunc.c.xml0000644000175000017500000000655614163340332025601 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEdest.c.xml0000644000175000017500000000444714163340332025402 0ustar carstencarsten #include "ngspice/ngspice.h" #include "$(module)defs.h" #include "ngspice/suffix.h" void $(module)destroy(void) { } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEmpar.c.xml0000644000175000017500000000576414163340332025405 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEpzld.c.xml0000644000175000017500000001007514163340332025406 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/COPYING0000644000175000017500000010451314163340332022247 0ustar carstencarsten GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read .tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEask.c.xml0000644000175000017500000000737714163340332025226 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) { case $(module)_ask_%(name) : value->rValue = ckt->CKTstate0[inst->GENstate + hide_%(name)]; return OK; default: return(-1); } return(-1); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEitf.h.xml0000644000175000017500000000361414163340332025225 0ustar carstencarsten #ifndef DEV_$(module) #define DEV_$(module) extern SPICEdev *get_$(module)_info(void); #endif tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEsetup.c.xml0000644000175000017500000001734314163340332025602 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; /* External Nodes, connected ? */ here->%(name)Node_connected = (here->%(name)Node >= 0); /* Internal Nodes */ { here->%sNode = -1; here->%(name)Node_mine = 0; } ((GENinstance*)here)->GENstate = *states; *states += $(module)numStates; /* 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->%(name)Node == -1) { error=CKTmkVolt(ckt,&tmp,here->$(module)name,"X%(name)X"); if(error) return(error); here->%(name)Node = tmp->number; here->%(name)Node_mine = 1; } } 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->%(name)Node_mine) { if (here->%(name)Node > 0) CKTdltNNum(ckt, here->%(name)Node); here->%(name)Node_mine = 0; } if (!here->%(name)Node_connected) here->%(name)Node = -1; if (here->%(name)Node_mine) if (here->%(name)Node > 0) CKTdltNNum(ckt, here->%(name)Node); here->%(name)Node = -1; here->%(name)Node_mine = 0; } } return OK; } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceVersion.xml0000644000175000017500000031215414163340332024736 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 tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMakefile.am.xml0000644000175000017500000001272414163340332025422 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).analogfunction.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 \\ constants.vams \\ disciplines.vams \\ *.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 \%.analogfunction.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)/adms.implicit.xml \\ \$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\ \$(ADMSXMLINTERFACE)/analogfunction.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 \$< \\ -x \\ -e \$(ADMSXMLINTERFACE)/adms.implicit.xml \\ -e \$(ADMSXMLINTERFACE)/ngspiceVersion.xml \\ -e \$(ADMSXMLINTERFACE)/analogfunction.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 tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEdefs.h.xml0000644000175000017500000003707614163340332025375 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) \\ { \\ } static inline double max(double x,double y) { return ((x)>(y))?(x):(y); } static inline double min(double x,double y) { return ((x)<(y))?(x):(y); } /* 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 _f_cos(val,arg) val = cos(arg); #define _d_cos(val,dval,arg) val = cos(arg); dval = (-sin(arg)); #define _f_sin(val,arg) val = sin(arg); #define _d_sin(val,dval,arg) val = sin(arg); dval = (cos(arg)); #define _f_tan(val,arg) val = tan(arg); #define _d_tan(val,dval,arg) val = tan(arg); dval = (1.0/cos(arg)/cos(arg)); #define _f_asinh(val,arg) val = asinh(arg); #define _d_asinh(val,dval,arg) val = asinh(arg); dval = (1.0/sqrt(arg*arg + 1)); #define _f_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 _f_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 _f_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 _f_cosh(val,arg) val = cosh(arg); #define _d_cosh(val,dval,arg) val = cosh(arg); dval = (sinh(arg)); #define _f_sinh(val,arg) val = sinh(arg); #define _d_sinh(val,dval,arg) val = sinh(arg); dval = (cosh(arg)); #define _f_tanh(val,arg) val = tanh(arg); #define _d_tanh(val,dval,arg) val = tanh(arg); dval = (1.0/cosh(arg)/cosh(arg)); #define _f_acos(val,arg) val = acos(arg); #define _d_acos(val,dval,arg) val = acos(arg); dval = (-1.0/sqrt(1-arg*arg)); #define _f_asin(val,arg) val = asin(arg); #define _d_asin(val,dval,arg) val = asin(arg); dval = (+1.0/sqrt(1-arg*arg)); #define _f_atan(val,arg) val = atan(arg); #define _d_atan(val,dval,arg) val = atan(arg); dval = (+1.0/(1+arg*arg)); #define _f_logE(val,arg) val = log(arg); #define _d_logE(val,dval,arg) val = log(arg); dval = (1.0/arg); #define _f_log10(val,arg) val = log10(arg); #define _d_log10(val,dval,arg) val = log10(arg); dval = (1.0/arg/log(10)); #define _f_exp(val,arg) val = exp(arg); #define _d_exp(val,dval,arg) val = exp(arg); dval = val; #define _f_sqrt(val,arg) val = sqrt(arg); #define _d_sqrt(val,dval,arg) val = sqrt(arg); dval = (1.0/val/2.0); #define _f_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 _f_atan2(xy,x,y) xy = atan2(x,y); #define _dx_atan2(dx,x,y) dx = -(y)/((x)*(x)+(y)*(y)); #define _dy_atan2(dy,x,y) dy = (x)/((x)*(x)+(y)*(y)); #define _f_div1(x,y) ((x)/(y)) #define _f_div0(xy,x,y) xy=(x)/(y); #define _f_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 _f_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 _f_fabs(val,arg) val = fabs(arg); #define _d_fabs(val,dval,arg) val = fabs(arg); dval = (((val)>=0)?(+1.0):(-1.0)); #define _f_abs(val) ((val)<(0) ? (-(val)):(val)) #define _f_floor(val,arg) val = floor(arg); #define _f_ceil(val,arg) val = ceil(arg); /* 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)*/ } $(module)instance ; enum { hide_%(name), #define %(name) ((struct hides *)hide_%(name)) $(module)numStates }; /* 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; $(module)_ask_%(name), #include "$(module)ext.h" #include "$(module).analogfunction.h" #endif /*$(module)*/ tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEload.c.xml0000644000175000017500000003104014163340332025347 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEmask.c.xml0000644000175000017500000000602414163340332025367 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); } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEmdel.c.xml0000644000175000017500000000460514163340332025360 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; } tmp_ns50wwy/src/spicelib/devices/adms/admst/ngspiceMODULEinit.h.xml0000644000175000017500000000413014163340332025400 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 tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/0000755000175000017500000000000014163340332021521 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/0000755000175000017500000000000014163340332022774 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include0000644000175000017500000060650014163340332027006 0ustar carstencarsten// ******************************************************** // ******************************************************** // *** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Sourabh Khandelwal, Darsen Lu, // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016__________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** // Clamped Exponential Function analog function real lexp; input x; real x; begin if (x > `EXPL_THRESHOLD) begin lexp = `MAX_EXPL * (1.0 + x - `EXPL_THRESHOLD); end else if (x < -`EXPL_THRESHOLD) begin lexp = `MIN_EXPL; end else begin lexp = exp(x); end end endfunction // Clamped log Function analog function real lln; input x; real x; begin lln = ln(max(x, `N_MINLOG)); end endfunction // Hyperbolic Smoothing Function analog function real hypsmooth; input x, c; real x, c; begin hypsmooth = 0.5 * (x + sqrt(x * x + 4.0 * c * c)); end endfunction // Hyperbolic Smoothing max Function analog function real hypmax; input x, xmin, c; real x, xmin, c; begin hypmax = xmin + 0.5 * (x - xmin - c + sqrt((x - xmin - c) * (x - xmin - c) - 4.0 * xmin * c)); end endfunction // Temperature Dependence Type analog function real Tempdep; input PARAML, PARAMT, DELTEMP, TEMPMOD; real PARAML, PARAMT, DELTEMP, TEMPMOD; begin if (TEMPMOD != 0) begin Tempdep = PARAML + hypmax(PARAMT * DELTEMP, -PARAML, 1.0e-6); end else begin Tempdep = PARAML * hypsmooth(1.0 + PARAMT * DELTEMP - 1.0e-6, 1.0e-3); end end endfunction // Node Definitions `ifdef __RGATEMOD__ `define GateEdgeNode ge `else `define GateEdgeNode g `endif `ifdef __NQSMOD1__ `define IntrinsicGate gi `else `define IntrinsicGate `GateEdgeNode `endif // *************************** // * Instance Parameters * // *************************** // Note: Some instance parameters are also model parameters. Please refer to the technical note for details. `IPRco( L ,3.0e-8 ,"m" ,1.0e-9 ,inf ,"Designed gate length" ) `IPRco( D ,4.0e-8 ,"m" ,1.0e-9 ,inf ,"Diameter of the cylinder (GEOMOD=3)" ) `IPRco( TFIN ,1.5e-8 ,"m" ,1.0e-9 ,inf ,"Body (fin) thickness" ) `IPRco( FPITCH ,8.0e-8 ,"m" ,TFIN ,inf ,"Fin pitch" ) `IPIco( NF ,1 ,"" ,1 ,inf ,"Number of fingers" ) `IPRoz( NFIN ,1.0 ,"" ,"Number of fins per finger (real number enables optimization)" ) `IPIcc( NGCON ,1 ,"" ,1 ,2 ,"Number of gate contact (1 or 2 sided)" ) `IPRcz( ASEO ,0.0 ,"m^2" ,"Source-to-substrate overlap area through oxide" ) `IPRcz( ADEO ,0.0 ,"m^2" ,"Drain-to-substrate overlap area through oxide" ) `IPRcz( PSEO ,0.0 ,"m" ,"Perimeter of source-to-substrate overlap region through oxide" ) `IPRcz( PDEO ,0.0 ,"m" ,"Perimeter of drain-to-substrate overlap region through oxide" ) `IPRcz( ASEJ ,0.0 ,"m^2" ,"Source junction area (BULKMOD=1 or 2)" ) `IPRcz( ADEJ ,0.0 ,"m^2" ,"Drain junction area (BULKMOD=1 or 2)" ) `IPRcz( PSEJ ,0.0 ,"m" ,"Source-to-substrate PN junction perimeter (BULKMOD=1 or 2)" ) `IPRcz( PDEJ ,0.0 ,"m" ,"Drain-to-substrate PN junction perimeter (BULKMOD=1 or 2)" ) `IPRcz( COVS ,0.0 ,"F/m" ,"Constant gate-to-source overlap capacitance (CGEOMOD=1)" ) `IPRcz( COVD ,COVS ,"F/m" ,"Constant gate-to-drain overlap capacitance (CGEOMOD=1)" ) `IPRcz( CGSP ,0.0 ,"F/m" ,"Constant gate-to-source fringe capacitance (CGEOMOD=1)" ) `IPRcz( CGDP ,0.0 ,"F/m" ,"Constant gate-to-drain fringe capacitance (CGEOMOD=1)" ) `IPRcz( CDSP ,0.0 ,"F" ,"Constant drain-to-source fringe capacitance (all CGEOMOD)" ) `IPRcz( NRS ,0.0 ,"" ,"Number of source diffusion squares" ) `IPRcz( NRD ,0.0 ,"" ,"Number of source diffusion squares" ) `IPRoz( LRSD ,L ,"m" ,"Length of the source/drain" ) `IPRoz( NFINNOM ,1.0 ,"" ,"Nominal number of fins per finger" ) // Variability Handles `MPRnb( XL ,0.0 ,"m" ,"L offset for channel length due to mask/etch effect" ) `MPRnb( DTEMP ,0.0 ,"Celsius" ,"Variability in device temperature" ) `MPRnb( DELVTRAND ,0.0 ,"V" ,"Variability in Vth" ) `MPRcz( U0MULT ,1.0 ,"" ,"Variability in carrier mobility" ) `MPRcz( IDS0MULT ,1.0 ,"" ,"Variability in drain current for miscellaneous reasons" ) // ************************ // * Model Parameters * // ************************ `MPIcc( DEVTYPE ,`ntype ,"" ,`ptype ,`ntype ,"0: PMOS; 1: NMOS" ) `MPIcc( TYPE ,DEVTYPE ,"" ,`ptype ,`ntype ,"0: PMOS; 1: NMOS" ) `MPIcc( BULKMOD ,0 ,"" ,0 ,2 ,"0: SOI multi-gate; 1: Bulk multi-gate; 2: for decoupled bulk multi-gate" ) `MPIcc( GEOMOD ,0 ,"" ,0 ,4 ,"0: Double gate; 1: Triple gate; 2: Quadruple gate; 3: Cylindrical gate; 4: Unified fin Shape" ) `MPIcc( CGEO1SW ,0 ,"" ,0 ,1 ,"For CGEOMOD=1 only, this switch enables the parameters COVS, COVD, CGSP, and CGDP to be in F per fin, per gate-finger, per unit channel width" ) `MPIcc( RDSMOD ,0 ,"" ,0 ,2 ,"0: Internal S/D resistance model; 1: External S/D resistance model; 2: Both bias dependent and independent part of S/D resistance internal" ) `MPIcc( ASYMMOD ,0 ,"" ,0 ,1 ,"0: Turn off asymmetry model - forward mode parameters used; 1: Turn on asymmetry model" ) `MPIcc( IGCMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igc, Igs and Igd; 1: Turn on Igc, Igs and Igd" ) `MPIcc( IGBMOD ,0 ,"" ,0 ,1 ,"0: Turn off Igb; 1: Turn on Igb" ) `MPIcc( GIDLMOD ,0 ,"" ,0 ,1 ,"0: Turn off GIDL/GISL current; 1: Turn on GIDL/GISL current" ) `MPIcc( IIMOD ,0 ,"" ,0 ,2 ,"0: Turn off impact ionization current; 1: BSIM4-based model; 2: BSIMSOI-based model" ) `MPIcc( TNOIMOD ,0 ,"" ,0 ,1 ,"0: Charge-based, 1: Correlated thermal noise model" ) `MPIcc( NQSMOD ,0 ,"" ,0 ,2 ,"0: Turn off NQS model; 1: NQS gate resistance (with gi node); 2: NQS charge deficit model from BSIM4 (with q node)" ) `MPIcc( SHMOD ,0 ,"" ,0 ,1 ,"0: Turn off self-heating; 1: Turn on self-heating" ) `MPIcc( TEMPMOD ,0 ,"" ,0 ,1 ,"1: Change temperature dependence of specific parameters" ) `MPIcc( RGATEMOD ,0 ,"" ,0 ,1 ,"0: Turn off gate electrode resistance (without ge node); 1: Turn on gate electrode resistance (with ge node)" ) `MPIcc( RGEOMOD ,0 ,"" ,0 ,1 ,"Geometry-dependent source/drain resistance; 0: RSH-based; 1: Holistic" ) `MPIcc( CGEOMOD ,0 ,"" ,0 ,2 ,"Geometry-dependent parasitic capacitance model selector" ) `MPIcc( SH_WARN ,0 ,"" ,0 ,1 ,"0: Disable self-heating warnings; 1: Enable self-heating warnings" ) `MPIcc( IGCLAMP ,1 ,"" ,0 ,1 ,"0: Disable gate current clamps; 1: Enable gate current clamps" ) `MPRnb( LINT ,0.0 ,"m" ,"Length reduction parameter (dopant diffusion effect)" ) `MPRnb( LL ,0.0 ,"m^(LLN+1)" ,"Length reduction parameter (dopant diffusion effect)" ) `MPRnb( LLN ,1.0 ,"" ,"Length reduction parameter (dopant diffusion effect)" ) `MPRnb( DLC ,0.0 ,"m" ,"Delta L for C-V model" ) `MPRnb( DLCACC ,0.0 ,"m" ,"Delta L for C-V model in accumulation region (BULKMOD=1 or 2)" ) `MPRnb( DLBIN ,0.0 ,"m" ,"Delta L for binning" ) `MPRnb( LLC ,0.0 ,"m^(LLN+1)" ,"Length reduction parameter (dopant diffusion effect)" ) `MPRco( EOT ,1.0e-9 ,"m" ,1.0e-10 ,inf ,"Equivalent oxide thickness" ) `MPRco( TOXP ,1.2e-9 ,"m" ,1.0e-10 ,inf ,"Physical oxide thickness" ) `MPRco( EOTBOX ,1.4e-7 ,"m" ,1.0e-9 ,inf ,"Equivalent oxide thickness of the buried oxide (SOI FinFET)" ) `MPRco( HFIN ,3.0e-8 ,"m" ,1.0e-9 ,inf ,"Fin height" ) `MPRcz( FECH ,1.0 ,"" ,"End-channel factor for different orientation/shape" ) `MPRnb( DELTAW ,0.0 ,"m" ,"Change of effective width due to shape of fin/cylinder" ) `MPRcz( FECHCV ,1.0 ,"" ,"CV end-channel factor for different orientation/shape" ) `MPRnb( DELTAWCV ,0.0 ,"m" ,"CV change of effective width due to shape of fin/cylinder" ) `MPRnb( NBODY ,1.0e22 ,"/m^3" ,"Channel (body) doping" ) `MPRnb( NBODYN1 ,0.0 ,"" ,"NFIN dependence of channel (body) doping" ) `MPRex( NBODYN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of channel (body) doping" ) `MPRcc( NSD ,2.0e26 ,"/m^3" ,2.0e25 ,1.0e27 ,"Source/drain active doping concentration" ) `MPRcz( PHIG ,4.61 ,"eV" ,"Gate workfunction" ) `MPRnb( PHIGL ,0.0 ,"eV/m" ,"Length dependence of gate workfunction" ) `MPRnb( PHIGLT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of gate workfunction" ) `MPRnb( PHIGN1 ,0.0 ,"" ,"NFIN dependence of gate workfunction" ) `MPRex( PHIGN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of gate workfunction" ) `MPRco( EPSROX ,3.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the gate dielectric" ) `MPRco( EPSRSUB ,11.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the channel material" ) `MPRcz( EASUB ,4.05 ,"eV" ,"Electron affinity of substrate" ) `MPRnb( NI0SUB ,1.1e16 ,"/m^3" ,"Intrinsic carrier constant at 300.15K" ) `MPRnb( BG0SUB ,1.12 ,"eV" ,"Bandgap of substrate at 300.15K" ) `MPRnb( NC0SUB ,2.86e25 ,"/m^3" ,"Conduction band density of states" ) `MPRnb( NGATE ,0.0 ,"/m^3" ,"Parameter for poly gate doping. For metal gate please set NGATE = 0" ) `MPRnb( Imin ,1.0e-15 ,"A/m^2" ,"Parameter for Vgs clamping for inversion region calculation in accumulation" ) // Short Channel Effects `MPRnb( CIT ,0.0 ,"F/m^2" ,"Parameter for interface trap" ) `MPRnb( CITR ,CIT ,"" ,"Parameter for interface trap in reverse mode for asymmetric model" ) `MPRnb( CDSC ,7.0e-3 ,"F/m^2" ,"Coupling capacitance between S/D and channel" ) `MPRnb( CDSCN1 ,0.0 ,"" ,"NFIN dependence of CDSC" ) `MPRnb( CDSCN2 ,1.0e5 ,"" ,"NFIN dependence of CDSC" ) `MPRnb( CDSCD ,7.0e-3 ,"F/m^2" ,"Drain-bias sensitivity of CDSC" ) `MPRnb( CDSCDN1 ,0.0 ,"" ,"NFIN dependence of CDSCD" ) `MPRex( CDSCDN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of CDSCD" ) `MPRnb( CDSCDR ,CDSCD ,"F/m^2" ,"Reverse-mode drain-bias sensitivity of CDSC" ) `MPRnb( CDSCDRN1 ,CDSCDN1 ,"" ,"NFIN dependence of CDSCD" ) `MPRex( CDSCDRN2 ,CDSCDN2 ,"" ,0.0 ,"NFIN dependence of CDSCD" ) `MPRnb( DVT0 ,0.0 ,"" ,"SCE coefficient" ) `MPRnb( DVT1 ,0.6 ,"" ,"SCE exponent coefficient. After binning it should be within (0:inf)" ) `MPRnb( DVT1SS ,DVT1 ,"" ,"Subthreshold swing exponent coefficient. After binning it should be within (0:inf)" ) `MPRnb( PHIN ,0.05 ,"V" ,"Nonuniform vertical doping effect on surface potential" ) `MPRnb( ETA0 ,0.6 ,"" ,"DIBL coefficient" ) `MPRnb( ETA0N1 ,0.0 ,"" ,"NFIN dependence of ETA0" ) `MPRco( ETA0N2 ,1.0e5 ,"" ,1.0e-5 ,inf ,"NFIN dependence of ETA0" ) `MPRnb( ETA0LT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of ETA0" ) `MPRnb( TETA0 ,0.0 ,"/K" ,"Temperature dependence of DIBL coefficient" ) `MPRnb( ETA0R ,ETA0 ,"" ,"Reverse-mode DIBL coefficient" ) `MPRnb( TETA0R ,TETA0 ,"/K" ,"Temperature dependence of reverse-mode DIBL coefficient" ) `MPRnb( DSUB ,1.06 ,"" ,"DIBL exponent coefficient" ) `MPRnb( DVTP0 ,0.0 ,"" ,"Coefficient for drain-induced Vth shift (DITS)" ) `MPRnb( DVTP1 ,0.0 ,"" ,"DITS exponent coefficient" ) `MPRnb( ADVTP0 ,0.0 ,"" ,"Pre-exponential coefficient for DITS" ) `MPRex( BDVTP0 ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for DITS" ) `MPRnb( ADVTP1 ,0.0 ,"" ,"Pre-exponential coefficient for DVTP1" ) `MPRex( BDVTP1 ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for DVTP1" ) `MPRnb( DVTP2 ,0.0 ,"" ,"DITS model parameter" ) `MPRnb( K1RSCE ,0.0 ,"/V^(0.5)" ,"K1 for reverse short channel effect calculation" ) `MPRnb( LPE0 ,5.0e-9 ,"m" ,"Equivalent length of pocket region at zero bias" ) `MPRnb( DVTSHIFT ,0.0 ,"V" ,"Vth shift handle" ) `MPRnb( DVTSHIFTR ,DVTSHIFT ,"" ,"Vth shift handle for asymmetric mode" ) `MPRnb( THETASCE ,0.0 ,"" ,"Vth roll-off length dependence. If defined by user, it will overwrite Theta_SCE in the code") `MPRnb( THETADIBL ,0.0 ,"" ,"DIBL length dependence. If defined by user, will overwrite Theta_DIBL in the code" ) `MPRnb( THETASW ,0.0 ,"" ,"Subthreshold swing length dependence. If defined by user, it will overwrite Theta_SW in the code" ) `MPRnb( NVTM ,0.0 ,"V" ,"Subthreshold swing factor multiplied by Vtm. If defined by user, it will overwrite nVtm in the code" ) // Lateral non-uniform doping effect (IV-CV Vth shift) `MPRnb( K0 ,0.0 ,"V" ,"Lateral NUD voltage parameter" ) `MPRnb( K01 ,0.0 ,"V/K" ,"Temperature dependence of lateral NUD voltage parameter" ) `MPRnb( K0SI ,1.0 ,"" ,"Correction factor for strong inversion used in Mnud. After binning it should be within (0:inf)" ) `MPRnb( K0SI1 ,0.0 ,"/K" ,"Temperature dependence of K0SI" ) `MPRnb( K2SI ,K0SI ,"" ,"Correction factor for strong inversion used in Mob" ) `MPRnb( K2SI1 ,K0SI1 ,"" ,"Temperature dependence of K2SI" ) `MPRnb( K0SISAT ,0.0 ,"" ,"Correction factor for strong inversion used in Mnud" ) `MPRnb( K0SISAT1 ,0.0 ,"" ,"Temperature dependence of K0SISAT" ) `MPRnb( K2SISAT ,K0SISAT ,"" ,"Correction factor for strong inversion used in Mob" ) `MPRnb( K2SISAT1 ,K0SISAT1 ,"" ,"Temperature dependence of K2SISAT" ) // Body Effect for MG Devices on Bulk Substrate (ex: FinFETs on BULK) `MPRnb( PHIBE ,0.7 ,"V" ,"Body effect voltage parameter. After binning it should be within [0.2:1.2]" ) `MPRco( K1 ,1.0e-6 ,"V^(0.5)" ,1.0e-6 ,inf ,"Body effect coefficient for subthreshold region" ) `MPRnb( K11 ,0.0 ,"V^(0.5)/K" ,"Temperature dependence of K1" ) `MPRnb( K2SAT ,0.0 ,"" ,"Correction factor for K2 in saturation (high Vds)" ) `MPRnb( K2SAT1 ,0.0 ,"" ,"Temperature dependence of K2SAT" ) `MPRnb( K2 ,0.0 ,"" ,"Body effect coefficient for BULKMOD==2" ) `MPRnb( K21 ,0.0 ,"" ,"Temperature dependence of K2" ) // Quantum Mechanical Effect `MPRnb( QMFACTOR ,0.0 ,"" ,"Prefactor + switch for QM Vth correction" ) `MPRnb( QMTCENCV ,0.0 ,"" ,"Prefactor + switch for QM Width and Toxeff correction for CV" ) `MPRnb( QMTCENCVA ,0.0 ,"" ,"Prefactor + switch for QM Width and Toxeff correction for CV (accumulation region)" ) `MPRnb( AQMTCEN ,0.0 ,"" ,"Parameter for geometric dependence of Tcen on R/TFIN/HFIN" ) `MPRex( BQMTCEN ,1.2e-8 ,"" ,0.0 ,"Parameter for geometric dependence of Tcen on R/TFIN/HFIN" ) `MPRnb( ETAQM ,0.54 ,"" ,"Bulk charge coefficient for Tcen" ) `MPRnb( QM0 ,1.0e-3 ,"V" ,"Knee-point for Tcen in inversion (Charge normalized to Cox)" ) `MPRnb( PQM ,0.66 ,"" ,"Slope of normalized Tcen in inversion" ) `MPRnb( QM0ACC ,1.0e-3 ,"V" ,"Knee-point for Tcen in accumulation (Charge normalized to Cox)" ) `MPRnb( PQMACC ,0.66 ,"" ,"Slope of normalized Tcen in accumulation" ) // Velocity Saturation Model `MPRnb( VSAT ,8.5e4 ,"m/s" ,"Saturation velocity for the saturation region" ) `MPRnb( VSATR ,VSAT ,"m/s" ,"Saturation velocity for the saturation region in the reverse mode" ) `MPRnb( VSATN1 ,0.0 ,"" ,"NFIN dependence of VSAT" ) `MPRex( VSATN2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of VSAT" ) `MPRnb( VSATRN1 ,VSATN1 ,"" ,"NFIN dependence of VSATR" ) `MPRex( VSATRN2 ,VSATN2 ,"" ,0.0 ,"NFIN dependence of VSATR" ) `MPRnb( AVSAT ,0.0 ,"" ,"Pre-exponential coefficient for VSAT" ) `MPRex( BVSAT ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for VSAT" ) `MPRnb( VSAT1 ,VSAT ,"m/s" ,"Velocity saturation parameter for Ion degradation - forward mode" ) `MPRnb( VSAT1N1 ,VSATN1 ,"" ,"NFIN dependence of VSAT1" ) `MPRex( VSAT1N2 ,VSATN2 ,"" ,0.0 ,"NFIN dependence of VSAT1" ) `MPRnb( VSAT1R ,VSAT1 ,"m/s" ,"Velocity saturation parameter for Ion degradation - reverse mode" ) `MPRnb( VSAT1RN1 ,VSAT1N1 ,"" ,"NFIN dependence of VSAT1R" ) `MPRex( VSAT1RN2 ,VSAT1N2 ,"" ,0.0 ,"NFIN dependence of VSAT1R" ) `MPRnb( AVSAT1 ,AVSAT ,"" ,"Pre-exponential coefficient for VSAT1" ) `MPRex( BVSAT1 ,BVSAT ,"" ,0.0 ,"Exponential coefficient for VSAT1" ) `MPRnb( DELTAVSAT ,1.0 ,"" ,"velocity saturation parameter in the linear region" ) `MPRnb( PSAT ,2.0 ,"" ,"Velocity saturation exponent, after binnig should be from [2.0:inf)" ) `MPRnb( APSAT ,0.0 ,"" ,"Pre-exponential coefficient for PSAT" ) `MPRex( BPSAT ,1.0 ,"" ,0.0 ,"Exponential coefficient for PSAT" ) `MPRnb( KSATIV ,1.0 ,"" ,"Parameter for long channel Vdsat" ) `MPRnb( KSATIVR ,KSATIV ,"" ,"KSATIV in asymmetric mode" ) `MPRnb( VSATCV ,VSAT ,"m/s" ,"Velocity saturation parameter for CV" ) `MPRnb( AVSATCV ,AVSAT ,"" ,"Pre-exponential coefficient for VSATCV" ) `MPRex( BVSATCV ,BVSAT ,"" ,0.0 ,"Exponential coefficient for VSATCV" ) `MPRnb( DELTAVSATCV ,DELTAVSAT ,"" ,"Velocity saturation parameter in the linear region for the capacitance model" ) `MPRnb( PSATCV ,PSAT ,"" ,"Velocity saturation exponent for C-V" ) `MPRnb( APSATCV ,APSAT ,"" ,"Pre-exponential coefficient for PSATCV" ) `MPRex( BPSATCV ,BPSAT ,"" ,0.0 ,"Exponential coefficient for PSATCV" ) `MPRnb( MEXP ,4.0 ,"" ,"Smoothing function factor for Vdsat" ) `MPRnb( AMEXP ,0.0 ,"" ,"Pre-exponential coefficient for MEXP" ) `MPRnb( BMEXP ,1.0 ,"" ,"Exponential coefficient for MEXP" ) `MPRnb( MEXPR ,MEXP ,"" ,"Reverse-mode smoothing function factor for Vdsat" ) `MPRnb( AMEXPR ,AMEXP ,"" ,"Pre-exponential coefficient for MEXPR" ) `MPRnb( BMEXPR ,BMEXP ,"" ,"Exponential coefficient for MEXPR" ) `MPRnb( PTWG ,0.0 ,"/V^2" ,"Gmsat degradation parameter - forward mode" ) `MPRnb( PTWGR ,PTWG ,"/V^2" ,"Gmsat degradation parameter - reverse mode" ) `MPRnb( APTWG ,0.0 ,"" ,"Pre-exponential coefficient for PTWG" ) `MPRex( BPTWG ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for PTWG" ) `MPRnb( AT ,-1.56e-3 ,"/K" ,"Saturation velocity temperature coefficient" ) `MPRnb( ATR ,AT ,"" ,"Reverse-mode saturation velocity temperature coefficient" ) `MPRnb( ATCV ,AT ,"/K" ,"Saturation velocity temperature coefficient for CV" ) `MPRnb( TMEXP ,0.0 ,"/K" ,"Temperature coefficient for Vdseff smoothing" ) `MPRnb( TMEXPR ,TMEXP ,"/K" ,"Reverse-mode temperature coefficient for Vdseff smoothing" ) `MPRnb( PTWGT ,4.0e-3 ,"/K" ,"PTWG temperature coefficient" ) // Mobility Model `MPRnb( U0 ,3.0e-2 ,"m^2/(V*s)" ,"Low-field mobility" ) `MPRnb( U0R ,U0 ,"m^2/(V*s)" ,"Reverse-mode low-field mobility" ) `MPRnb( U0N1 ,0.0 ,"" ,"NFIN dependence of U0" ) `MPRnb( U0N1R ,U0N1 ,"" ,"Reverse-mode NFIN dependence of U0" ) `MPRex( U0N2 ,1.0e5 ,"" ,0.0 ,"NFIN dependence of U0" ) `MPRex( U0N2R ,U0N2 ,"" ,0.0 ,"Reverse-mode NFIN dependence of U0" ) `MPRnb( U0LT ,0.0 ,"/m" ,"Coupled NFIN and length dependence of U0" ) `MPRnb( ETAMOB ,2.0 ,"" ,"Effective field parameter" ) `MPRnb( UP ,0.0 ,"um^LPA" ,"Mobility L coefficient" ) `MPRnb( LPA ,1.0 ,"" ,"Mobility L power coefficient" ) `MPRnb( UPR ,UP ,"um^LPA" ,"Reverse-mode mobility L coefficient" ) `MPRnb( LPAR ,LPA ,"" ,"Reverse-mode mobility L power coefficient" ) `MPRnb( UA ,0.3 ,"(cm/MV)^EU" ,"Phonon/surface roughness scattering parameter" ) `MPRnb( UAR ,UA ,"(cm/MV)^EU" ,"Reverse-mode phonon/surface roughness scattering parameter" ) `MPRnb( AUA ,0.0 ,"" ,"Pre-exponential coefficient for UA" ) `MPRnb( AUAR ,AUA ,"" ,"Reverse-mode pre-exponential coefficient for UA" ) `MPRex( BUA ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for UA" ) `MPRex( BUAR ,BUA ,"" ,0.0 ,"Reverse-mode exponential coefficient for UAR" ) `MPRnb( UC ,0.0 ,"(1e-6*cm/MV^2)^EU" ,"Body effect for mobility degradation parameter - BULKMOD=1 or 2" ) `MPRnb( UCR ,UC ,"" ,"Reverse-mode body effect for mobility degradation parameter - BULKMOD=1 or 2" ) `MPRnb( EU ,2.5 ,"cm/MV" ,"Phonon/surface roughness scattering parameter" ) `MPRnb( EUR ,EU ,"cm/MV" ,"Reverse-mode phonon/surface roughness scattering parameter" ) `MPRnb( AEU ,0.0 ,"" ,"Pre-exponential coefficient for EU" ) `MPRnb( AEUR ,AEU ,"" ,"Reverse-mode pre-exponential coefficient for EU" ) `MPRex( BEU ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for EU" ) `MPRex( BEUR ,BEU ,"" ,0.0 ,"Reverse-mode exponential coefficient for EU" ) `MPRnb( UD ,0.0 ,"cm/MV" ,"Columbic scattering parameter" ) `MPRnb( UDR ,UD ,"cm/MV" ,"Reverse-mode columbic scattering parameter" ) `MPRnb( AUD ,0.0 ,"" ,"Pre-exponential coefficient for UD" ) `MPRnb( AUDR ,AUD ,"" ,"Reverse-mode pre-exponential coefficient for UD" ) `MPRex( BUD ,5.0e-8 ,"" ,0.0 ,"Exponential coefficient for UD" ) `MPRex( BUDR ,BUD ,"" ,0.0 ,"Reverse-mode exponential coefficient for UD" ) `MPRnb( UCS ,1.0 ,"" ,"Columbic scattering parameter" ) `MPRnb( UTE ,0.0 ,"" ,"Mobility temperature coefficient" ) `MPRnb( UTER ,UTE ,"" ,"Reverse-mode for mobility temperature coefficient" ) `MPRnb( UTL ,-1.5e-3 ,"" ,"Mobility temperature coefficient" ) `MPRnb( UTLR ,UTL ,"" ,"Reverse-mode for mobility temperature coefficient" ) `MPRnb( EMOBT ,0.0 ,"" ,"Temperature coefficient of ETAMOB" ) `MPRnb( UA1 ,1.032e-3 ,"" ,"Mobility temperature coefficient for UA" ) `MPRnb( UA1R ,UA1 ,"" ,"Reverse-mode mobility temperature coefficient for UA" ) `MPRnb( UC1 ,5.6e-11 ,"" ,"Mobility temperature coefficient for UC" ) `MPRnb( UC1R ,UC1 ,"" ,"Reverse-mode mobility temperature coefficient for UC" ) `MPRnb( UD1 ,0.0 ,"" ,"Mobility temperature coefficient for UC" ) `MPRnb( UD1R ,UD1 ,"" ,"Reverse-mode mobility temperature coefficient for UD" ) `MPRnb( UCSTE ,-4.775e-3 ,"" ,"Mobility temperature coefficient" ) `MPRcc( CHARGEWF ,0.0 ,"" ,-1.0 ,1.0 ,"Average channel charge weighting factor, +1: source-side, 0: middle, -1: drain-side" ) // Access Resistance Model `MPRnb( RDSWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 0 S/D extension resistance per unit width at high Vgs" ) `MPRnb( RDSW ,1.0e2 ,"ohm*(um^(WR))" ,"RDSMOD = 0 zero bias S/D extension resistance per unit width" ) `MPRnb( ARDSW ,0.0 ,"" ,"Pre-exponential coefficient for RDSW" ) `MPRex( BRDSW ,1.0e-7 ,"" ,0.0 ,"exponential coefficient for RDSW" ) `MPRnb( RSWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 1 source extension resistance per unit width at high Vgs" ) `MPRnb( RSW ,5.0e1 ,"ohm*(um^(WR))" ,"RDSMOD = 1 zero bias source extension resistance per unit width" ) `MPRnb( ARSW ,0.0 ,"" ,"Pre-exponential coefficient for RSW" ) `MPRex( BRSW ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for RSW" ) `MPRnb( RDWMIN ,0.0 ,"ohm*(um^(WR))" ,"RDSMOD = 1 drain extension resistance per unit width at high Vgs" ) `MPRnb( RDW ,5.0e1 ,"" ,"RDSMOD = 1 zero bias drain extension resistance per unit width" ) `MPRnb( ARDW ,0.0 ,"" ,"Pre-exponential coefficient for RDW" ) `MPRex( BRDW ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for RDW" ) `MPRcz( RSDR ,0.0 ,"V^(-PRSDR)" ,"Source-side drift resistance parameter - forward mode" ) `MPRcz( RSDRR ,RSDR ,"V^(-PRSDR)" ,"Source-side drift resistance parameter - reverse mode" ) `MPRcz( RDDR ,RSDR ,"V^(-PRDDR)" ,"Drain-side drift resistance parameter - forward mode" ) `MPRcz( RDDRR ,RDDR ,"V^(-PRDDR)" ,"Drain-side drift resistance parameter - reverse mode" ) `MPRnb( PRSDR ,1.0 ,"" ,"Source-side quasi-saturation parameter" ) `MPRnb( PRDDR ,PRSDR ,"" ,"Drain-side quasi-saturation parameter" ) `MPRnb( PRWGS ,0.0 ,"/V" ,"Gate bias dependence of source extension resistance" ) `MPRnb( PRWGD ,PRWGS ,"/V" ,"Gate bias dependence of drain extension resistance" ) `MPRnb( WR ,1.0 ,"" ,"W dependence parameter of S/D extension resistance" ) `MPRnb( PRT ,1.0e-3 ,"/K" ,"Series resistance temperature coefficient" ) `MPRnb( TRSDR ,0.0 ,"/K" ,"Source-side drift resistance temperature coefficient" ) `MPRnb( TRDDR ,TRSDR ,"/K" ,"Drain-side drift resistance temperature coefficient" ) // DIBL Model `MPRnb( PDIBL1 ,1.3 ,"" ,"DIBL output conductance parameter - forward mode" ) `MPRnb( PDIBL1R ,PDIBL1 ,"" ,"DIBL output conductance parameter - reverse mode" ) `MPRnb( PDIBL2 ,2.0e-4 ,"" ,"DIBL output conductance parameter" ) `MPRnb( PDIBL2R ,PDIBL2 ,"" ,"DIBL output conductance parameter - reverse mode" ) `MPRnb( DROUT ,1.06 ,"" ,"L dependence of DIBL effect on Rout" ) `MPRnb( PVAG ,1.0 ,"" ,"Vgs dependence on early voltage" ) // Channel Length Modulation Effect `MPRnb( PCLM ,1.3e-2 ,"" ,"Channel length modulation (CLM) parameter" ) `MPRnb( PCLMR ,PCLM ,"" ,"Reverse model PCLM parameter" ) `MPRnb( APCLM ,0.0 ,"" ,"Pre-exponential coefficient for PCLM" ) `MPRnb( APCLMR ,APCLM ,"" ,"Reverse-mode pre-exponential coefficient for PCLM" ) `MPRex( BPCLM ,1.0e-7 ,"" ,0.0 ,"Exponential coefficient for PCLM" ) `MPRex( BPCLMR ,BPCLM ,"" ,0.0 ,"Reverse-mode exponential coefficient for PCLM" ) `MPRnb( PCLMG ,0.0 ,"" ,"Gate bias dependence parameter for CLM" ) `MPRnb( PCLMCV ,PCLM ,"" ,"CLM parameter for short-channel CV" ) // Non-Saturation Effect `MPRnb( A1 ,0.0 ,"" ,"Non-saturation effect parameter for strong inversion Region" ) `MPRnb( A11 ,0.0 ,"(V^-2)/K" ,"Temperature dependence of A1" ) `MPRnb( A2 ,0.0 ,"" ,"Non-saturation effect parameter for moderate Inversion Region" ) `MPRnb( A21 ,0.0 ,"(V^-1)/K" ,"Temperature dependence of A2" ) // Gate Electrode Resistance `MPRcz( RGEXT ,0.0 ,"ohm" ,"Effective gate electrode external resistance" ) `MPRco( RGFIN ,1.0e-3 ,"ohm" ,1.0e-3 ,inf ,"Effective gate electrode per finger per fin resistance" ) // Geometry Dependent Source/Drain Resistance of RGEOMOD = 0 `MPRnb( RSHS ,0.0 ,"ohm" ,"Source-side sheet resistance" ) `MPRnb( RSHD ,RSHS ,"ohm" ,"Drain-side sheet resistance" ) // Geometry Dependent Source/Drain Resistance of RGEOMOD = 1 for variability modeling // These parameters are shared with CGEOMOD = 2 `MPRnb( HEPI ,1.0e-8 ,"m" ,"Height of the raised source/drain on top of the fin" ) `MPRnb( TSILI ,1.0e-8 ,"m" ,"Thickness of the silicide on top of the raised source/drain" ) `MPRcc( RHOC ,1.0e-12 ,"ohm*(m^2)" ,1.0e-18 ,1.0e-9 ,"Contact resistivity at the silicon/silicide interface" ) `MPRoz( RHORSD ,1.0 ,"ohm*(m)" ,"Average resistivity of silicon in the raised source/drain region" ) `MPRcc( CRATIO ,0.5 ,"" ,0.0 ,1.0 ,"Ratio of the corner area filled with silicon to the total corner area" ) `MPRoo( DELTAPRSD ,0.0 ,"m" ,-FPITCH ,inf ,"Change in silicon/silicide interface length due to non-rectangular epi" ) `MPIcc( SDTERM ,0 ,"" ,0 ,1 ,"Indicator of whether the source/drain are terminated with silicide" ) `MPRnb( LSP ,-1 ,"m" ,"Thickness of the gate sidewall spacer" ) `MPRco( EPSRSP ,3.9 ,"" ,1.0 ,inf ,"Relative dielectric constant of the spacer" ) `MPRoz( TGATE ,3.0e-8 ,"m" ,"Gate height on top of the hard mask" ) `MPRcz( TMASK ,3.0e-8 ,"m" ,"Height of hard mask on top of the fin" ) `MPRcz( ASILIEND ,0.0 ,"m^2" ,"Extra silicide cross sectional area at the two ends of the FinFET" ) `MPRcz( ARSDEND ,0.0 ,"m^2" ,"Extra raised source/drain cross sectional areaat the two ends of the FinFET" ) `MPRcz( PRSDEND ,0.0 ,"m" ,"Extra silicon/silicide interface perimeter at the two ends of the FinFET" ) `MPRcc( NSDE ,2.0e25 ,"/(m^3)" ,1.0e25 ,1.0e26 ,"Source/drain active doping concentration at Leff edge" ) `MPRnb( RGEOA ,1.0 ,"" ,"Fitting parameter for RGEOMOD=1" ) `MPRnb( RGEOB ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) `MPRnb( RGEOC ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) `MPRnb( RGEOD ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) `MPRnb( RGEOE ,0.0 ,"/m" ,"Fitting parameter for RGEOMOD=1" ) `MPRnb( CGEOA ,1.0 ,"" ,"Fitting parameter for CGEOMOD=2" ) `MPRnb( CGEOB ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) `MPRnb( CGEOC ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) `MPRnb( CGEOD ,0.0 ,"/m" ,"Fitting parameter for CGEOMOD=2" ) `MPRcz( CGEOE ,1.0 ,"" ,"Fitting parameter for CGEOMOD=2" ) // Gate Current `MPRnb( AIGBINV ,1.11e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igb in inversion" ) `MPRnb( AIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igb in inversion" ) `MPRnb( BIGBINV ,9.49e-4 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igb in inversion" ) `MPRnb( CIGBINV ,6.0e-3 ,"/V" ,"Parameter for Igb in inversion" ) `MPRnb( EIGBINV ,1.1 ,"V" ,"Parameter for Igb in inversion" ) `MPRnb( NIGBINV ,3.0 ,"" ,"Parameter for Igb in inversion" ) `MPRnb( AIGBACC ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igb in accumulation" ) `MPRnb( AIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igb in accumulation" ) `MPRnb( BIGBACC ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igb in accumulation" ) `MPRnb( CIGBACC ,7.5e-2 ,"/V" ,"Parameter for Igb in accumulation" ) `MPRnb( NIGBACC ,1.0 ,"" ,"Parameter for Igb in accumulation" ) `MPRnb( AIGC ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igc in inversion" ) `MPRnb( AIGC1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igc in inversion" ) `MPRnb( BIGC ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igc in inversion" ) `MPRnb( CIGC ,7.5e-2 ,"/V" ,"Parameter for Igc in inversion" ) `MPRnb( PIGCD ,1.0 ,"" ,"Parameter for Igc partition" ) `MPRnb( DLCIGS ,0.0 ,"m" ,"Delta L for Igs model" ) `MPRnb( AIGS ,1.36e-2 ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igs in inversion" ) `MPRnb( AIGS1 ,0.0 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igs in inversion" ) `MPRnb( BIGS ,1.71e-3 ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igs in inversion" ) `MPRnb( CIGS ,7.5e-2 ,"/V" ,"Parameter for Igs in inversion" ) `MPRnb( DLCIGD ,DLCIGS ,"m" ,"Delta L for Igd model" ) `MPRnb( AIGD ,AIGS ,"((F*s^2/g)^0.5)*m^-1" ,"Parameter for Igd in inversion" ) `MPRnb( AIGD1 ,AIGS1 ,"((F*s^2/g)^0.5)*m^-1/K" ,"Parameter for Igd in inversion" ) `MPRnb( BIGD ,BIGS ,"((F*s^2/g)^0.5)*(m*V)^-1" ,"Parameter for Igd in inversion" ) `MPRnb( CIGD ,CIGS ,"/V" ,"Parameter for Igd in inversion" ) `MPRnb( VFBSD ,0.0 ,"V" ,"Flatband voltage for S/D region" ) `MPRnb( VFBSDCV ,VFBSD ,"V" ,"Flatband voltage for S/D region for C-V calculations" ) `MPRoz( TOXREF ,1.2e-9 ,"m" ,"Target tox value" ) `MPRnb( TOXG ,TOXP ,"m" ,"Oxide thickness for gate current model" ) `MPRnb( NTOX ,1.0 ,"" ,"Exponent for Tox ratio" ) `MPRnb( POXEDGE ,1.0 ,"" ,"Factor for the gate edge Tox" ) // GIDL/GISL Current `MPRnb( AGISL ,6.055e-12 ,"mho" ,"Pre-exponential coefficient for GISL" ) `MPRnb( BGISL ,3.0e8 ,"V/m" ,"Exponential coefficient for GISL" ) `MPRnb( CGISL ,0.5 ,"V^3" ,"Parameter for body-effect of GISL" ) `MPRnb( EGISL ,0.2 ,"V" ,"Band bending parameter for GISL" ) `MPRnb( PGISL ,1.0 ,"" ,"Parameter for body-bias effect on GISL" ) `MPRnb( AGIDL ,AGISL ,"mho" ,"Pre-exponential coefficient for GIDL" ) `MPRnb( BGIDL ,BGISL ,"V/m" ,"Exponential coefficient for GIDL" ) `MPRnb( CGIDL ,CGISL ,"V^3" ,"Parameter for body-effect of GIDL" ) `MPRnb( EGIDL ,EGISL ,"V" ,"Band bending parameter for GIDL" ) `MPRnb( PGIDL ,PGISL ,"" ,"Parameter for body-bias effect on GIDL" ) // Impact Ionization Current // IIMOD = 1 `MPRnb( ALPHA0 ,0.0 ,"m/V" ,"First parameter of Iii" ) `MPRnb( ALPHA01 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHA0" ) `MPRnb( ALPHA1 ,0.0 ,"/V" ,"L scaling parameter of Iii" ) `MPRnb( ALPHA11 ,0.0 ,"/V/K" ,"Temperature dependence ALPHA1" ) `MPRnb( BETA0 ,0.0 ,"/V" ,"Vds dependence parameter of Iii" ) // IIMOD = 2 `MPRnb( ALPHAII0 ,0.0 ,"m/V" ,"First parameter of Iii for IIMOD=2" ) `MPRnb( ALPHAII01 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHAII0" ) `MPRnb( ALPHAII1 ,0.0 ,"/V" ,"L scaling parameter of Iii for IIMOD=2" ) `MPRnb( ALPHAII11 ,0.0 ,"m/V/K" ,"Temperature dependence of ALPHAII1" ) `MPRnb( BETAII0 ,0.0 ,"/V" ,"Vds dependence parameter of Iii" ) `MPRnb( BETAII1 ,0.0 ,"" ,"Vds dependence parameter of Iii" ) `MPRnb( BETAII2 ,0.1 ,"V" ,"Vds dependence parameter of Iii" ) `MPRnb( ESATII ,1.0e7 ,"V/m" ,"Saturation channel E-field for Iii" ) `MPRnb( LII ,0.5e-9 ,"V*m" ,"Channel length dependence parameter of Iii" ) `MPRnb( SII0 ,0.5 ,"/V" ,"Vgs dependence parameter of Iii" ) `MPRnb( SII1 ,0.1 ,"" ,"1st Vgs dependence parameter of Iii" ) `MPRnb( SII2 ,0.0 ,"V" ,"2nd Vgs dependence parameter of Iii" ) `MPRnb( SIID ,0.0 ,"V" ,"3rd Vds dependence parameter of Iii" ) `MPRoo( IIMOD2CLAMP1 ,0.1 ,"V" ,0.0 ,inf ,"Clamp1 of SII1*Vg term in IIMOD=2 model" ) `MPRoo( IIMOD2CLAMP2 ,0.1 ,"V" ,0.0 ,inf ,"Clamp2 of SII0*Vg term in IIMOD=2 model" ) `MPRoo( IIMOD2CLAMP3 ,0.1 ,"V" ,0.0 ,inf ,"Clamp3 of Ratio term in IIMOD=2 model" ) // Accumulation Capacitance `MPRco( EOTACC ,EOT ,"m" ,1.0e-10 ,inf ,"Equivalent oxide thickness for accumulation region" ) `MPRnb( DELVFBACC ,0.0 ,"V" ,"Change in flatband voltage: Vfb_accumulation - Vfb_inversion" ) // Fringe Capacitance // CGEOMOD=0 `MPRcz( CFS ,2.5e-11 ,"F/m" ,"Outer fringe capacitance at source side" ) `MPRcz( CFD ,CFS ,"F/m" ,"Outer fringe capacitance at drain side" ) // Overlap Capacitance for CGEOMOD = 0 and 2 `MPRcz( CGSO ,0.0 ,"F/m" ,"Non LDD region source-gate overlap capacitance per unit channel width" ) `MPRcz( CGDO ,CGSO ,"F/m" ,"Non LDD region drain-gate overlap capacitance per unit channel width" ) `MPRcz( CGSL ,0.0 ,"F/m" ,"Overlap capacitance between gate and lightly-doped source region (for CGEOMOD = 0, 2)" ) `MPRcz( CGDL ,CGSL ,"F/m" ,"Overlap capacitance between gate and lightly-doped drain region (for CGEOMOD = 0, 2)" ) `MPRco( CKAPPAS ,0.6 ,"V" ,2.0e-2 ,inf ,"Coefficient of bias-dependent overlap capacitance for the source side (for CGEOMOD = 0, 2)" ) `MPRco( CKAPPAD ,CKAPPAS ,"V" ,2.0e-2 ,inf ,"Coefficient of bias-dependent overlap capacitance for the drain side (for CGEOMOD = 0, 2)" ) `MPRcz( CGBO ,0.0 ,"F/m" ,"Gate-to-substrate overlap capacitance per unit channel length per finger per NGCON" ) `MPRcz( CGBN ,0.0 ,"F/m" ,"Gate-to-substrate overlap capacitance per unit channel length per fin per finger" ) `MPRcz( CGBL ,0.0 ,"F/m" ,"Bias dependent component of gate-to-substrate overlap capacitance per unit channel length per fin per finger" ) `MPRco( CKAPPAB ,0.6 ,"" ,2.0e-2 ,inf ,"Bias dependent gate-to-substrate parasitic capacitance" ) // Source/Drain-to-Substrate Sidewall Capacitance `MPRcz( CSDESW ,0.0 ,"F/m" ,"Coefficient for source/drain-to-substrate sidewall capacitance" ) // Junction Current and Capacitance // Junction Capacitance `MPRnb( CJS ,5.0e-4 ,"F/m^2" ,"Unit area source-side junction capacitance at zero bias" ) `MPRnb( CJD ,CJS ,"F/m^2" ,"Unit area drain-side junction capacitance at zero bias" ) `MPRnb( CJSWS ,5.0e-10 ,"F/m" ,"Unit length source-side sidewall junction capacitance at zero bias" ) `MPRnb( CJSWD ,CJSWS ,"F/m" ,"Unit length drain-side sidewall junction capacitance at zero bias" ) `MPRnb( CJSWGS ,0.0 ,"F/m" ,"Unit length source-side gate sidewall junction capacitance at zero bias" ) `MPRnb( CJSWGD ,CJSWGS ,"F/m" ,"Unit length drain-side gate sidewall junction capacitance at zero bias" ) `MPRnb( PBS ,1.0 ,"V" ,"Source-side bulk junction built-in potential" ) `MPRnb( PBD ,PBS ,"V" ,"Drain-side bulk junction built-in potential" ) `MPRnb( PBSWS ,1.0 ,"V" ,"Built-in potential for Source-side sidewall junction capacitance" ) `MPRnb( PBSWD ,PBSWS ,"V" ,"Built-in potential for Drain-side sidewall junction capacitance" ) `MPRnb( PBSWGS ,PBSWS ,"V" ,"Built-in potential for Source-side gate sidewall junction capacitance" ) `MPRnb( PBSWGD ,PBSWGS ,"V" ,"Built-in potential for Drain-side gate sidewall junction capacitance" ) `MPRnb( MJS ,0.5 ,"" ,"Source bottom junction capacitance grading coefficient" ) `MPRnb( MJD ,MJS ,"" ,"Drain bottom junction capacitance grading coefficient" ) `MPRnb( MJSWS ,0.33 ,"" ,"Source sidewall junction capacitance grading coefficient" ) `MPRnb( MJSWD ,MJSWS ,"" ,"Drain sidewall junction capacitance grading coefficient" ) `MPRnb( MJSWGS ,MJSWS ,"" ,"Source-side gate sidewall junction capacitance grading coefficient" ) `MPRnb( MJSWGD ,MJSWGS ,"" ,"Drain-side gate sidewall junction capacitance grading coefficient" ) // Second Junction for Two-Step Junction Capacitance `MPRcz( SJS ,0.0 ,"" ,"Constant for source-side two-step second junction" ) `MPRcz( SJD ,SJS ,"" ,"Constant for drain-side two-step second junction" ) `MPRcz( SJSWS ,0.0 ,"" ,"Constant for source-side sidewall two-step second junction" ) `MPRcz( SJSWD ,SJSWS ,"" ,"Constant for drain-side sidewall two-step second junction" ) `MPRcz( SJSWGS ,0.0 ,"" ,"Constant for source-side gate sidewall two-step second junction" ) `MPRcz( SJSWGD ,SJSWGS ,"" ,"Constant for source-side gate sidewall two-step second junction" ) `MPRnb( MJS2 ,1.25e-1 ,"" ,"Source bottom two-step second junction capacitance grading coefficient" ) `MPRnb( MJD2 ,MJS2 ,"" ,"Drain bottom two-step second junction capacitance grading coefficient" ) `MPRnb( MJSWS2 ,8.3e-2 ,"" ,"Source sidewall two-step second junction capacitance grading coefficient" ) `MPRnb( MJSWD2 ,MJSWS2 ,"" ,"Drain sidewall two-step second junction capacitance grading coefficient" ) `MPRnb( MJSWGS2 ,MJSWS2 ,"" ,"Source-side gate sidewall two-step second junction capacitance grading coefficient" ) `MPRnb( MJSWGD2 ,MJSWGS2 ,"" ,"Drain-side gate sidewall two-step second junction capacitance grading coefficient" ) // Junction Current `MPRnb( JSS ,1.0e-4 ,"A/m^2" ,"Bottom source junction reverse saturation current density" ) `MPRnb( JSD ,JSS ,"A/m^2" ,"Bottom drain junction reverse saturation current density" ) `MPRnb( JSWS ,0.0 ,"A/m" ,"Unit length reverse saturation current for sidewall source junction" ) `MPRnb( JSWD ,JSWS ,"A/m" ,"Unit length reverse saturation current for sidewall drain junction" ) `MPRnb( JSWGS ,0.0 ,"A/m" ,"Unit length reverse saturation current for gate-edge sidewall source junction" ) `MPRnb( JSWGD ,JSWGS ,"A/m" ,"Unit length reverse saturation current for gate-edge sidewall drain junction" ) `MPRex( NJS ,1.0 ,"" ,0.0 ,"Source junction emission coefficient" ) `MPRex( NJD ,NJS ,"" ,0.0 ,"Drain junction emission coefficient" ) `MPRnb( IJTHSFWD ,0.1 ,"A" ,"Forward source diode breakdown limiting current" ) `MPRnb( IJTHDFWD ,IJTHSFWD ,"A" ,"Forward drain diode breakdown limiting current" ) `MPRnb( IJTHSREV ,0.1 ,"A" ,"Reverse source diode breakdown limiting current" ) `MPRnb( IJTHDREV ,IJTHSREV ,"A" ,"Reverse drain diode breakdown limiting current" ) `MPRnb( BVS ,1.0e1 ,"V" ,"Source diode breakdown voltage" ) `MPRnb( BVD ,BVS ,"V" ,"Drain diode breakdown voltage" ) `MPRnb( XJBVS ,1.0 ,"" ,"Fitting parameter for source diode breakdown current" ) `MPRnb( XJBVD ,XJBVS ,"" ,"Fitting parameter for drain diode breakdown current" ) // Tunneling Component of Junction Current `MPRnb( JTSS ,0.0 ,"A/m^2" ,"Bottom source junction trap-assisted saturation current density" ) `MPRnb( JTSD ,JTSS ,"A/m^2" ,"Bottom drain junction trap-assisted saturation current density" ) `MPRnb( JTSSWS ,0.0 ,"A/m" ,"Unit length trap-assisted saturation current for sidewall source junction" ) `MPRnb( JTSSWD ,JTSSWS ,"A/m" ,"Unit length trap-assisted saturation current for sidewall drain junction" ) `MPRnb( JTSSWGS ,0.0 ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge sidewall source junction" ) `MPRnb( JTSSWGD ,JTSSWGS ,"A/m" ,"Unit length trap-assisted saturation current for gate-edge sidewall drain junction" ) `MPRnb( JTWEFF ,0.0 ,"m" ,"Trap-assisted tunneling current width dependence" ) `MPRnb( NJTS ,2.0e1 ,"" ,"Non-ideality factor for JTSS" ) `MPRnb( NJTSD ,NJTS ,"" ,"Non-ideality factor for JTSD" ) `MPRnb( NJTSSW ,2.0e1 ,"" ,"Non-ideality factor for JTSSWS" ) `MPRnb( NJTSSWD ,NJTSSW ,"" ,"Non-ideality factor for JTSSWD" ) `MPRnb( NJTSSWG ,2.0e1 ,"" ,"Non-ideality factor for JTSSWGS" ) `MPRnb( NJTSSWGD ,NJTSSWG ,"" ,"Non-ideality factor for JTSSWGD" ) `MPRnb( VTSS ,1.0e1 ,"V" ,"Bottom source junction trap-assisted current voltage dependent parameter" ) `MPRnb( VTSD ,VTSS ,"V" ,"Bottom drain junction trap-assisted current voltage dependent parameter" ) `MPRnb( VTSSWS ,1.0e1 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for sidewall source junction" ) `MPRnb( VTSSWD ,VTSSWS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for sidewall drain junction" ) `MPRnb( VTSSWGS ,1.0e1 ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall source junction" ) `MPRnb( VTSSWGD ,VTSSWGS ,"V" ,"Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall drain junction" ) // Recombination-Generation Current `MPRnb( LINTIGEN ,0.0 ,"m" ,"Lint for thermal generation current" ) `MPRnb( NTGEN ,1.0 ,"" ,"Thermal generation current parameter" ) `MPRnb( AIGEN ,0.0 ,"(m^-3)*(V^-1)" ,"Thermal generation current parameter" ) `MPRnb( BIGEN ,0.0 ,"(m^-3)*(V^-3)" ,"Thermal generation current parameter" ) // NQS Gate Resistance Model & NQS Charge Deficit Model // For NQSMOD=1, Set XRCRG1=0 to turn off NQS gate resistance `MPRnb( XRCRG1 ,1.2e1 ,"" ,"Parameter for non-quasistatic gate resistance (NQSMOD = 1) and NQSMOD = 2" ) `MPRnb( XRCRG2 ,1.0 ,"" ,"Parameter for non-quasistatic gate resistance (NQSMOD = 1) and NQSMOD = 2" ) // NQS Charge Segmentation Model `MPIcc( NSEG ,4 ,"" ,4 ,10 ,"Number of segments for NQSMOD=3 (3, 5 & 10 supported)" ) // Flicker Noise `MPRnb( EF ,1.0 ,"" ,"Flicker noise frequency exponent" ) `MPRnb( EM ,4.1e7 ,"V/m" ,"Flicker noise parameter" ) `MPRnb( NOIA ,6.25e39 ,"(eV^-1)*(s^(1-EF))*(m^-3)" ,"Flicker noise parameter" ) `MPRnb( NOIB ,3.125e24 ,"(eV^-1)*(s^(1-EF))*(m^-1)" ,"Flicker noise parameter" ) `MPRnb( NOIC ,8.75e7 ,"(eV^-1)*(s^(1-EF))*(m)" ,"Flicker noise parameter" ) `MPRnb( LINTNOI ,0.0 ,"m^2" ,"L offset for flicker noise calculation" ) // Thermal Noise `MPRcz( NTNOI ,1.0 ,"" ,"Thermal noise parameter" ) `MPRnb( TNOIA ,1.5 ,"/m" ,"Thermal noise parameter" ) `MPRnb( TNOIB ,3.5 ,"/m" ,"Thermal noise parameter" ) `MPRnb( RNOIA ,5.77e-1 ,"" ,"Thermal noise coefficient" ) `MPRnb( RNOIB ,3.7e-1 ,"" ,"Thermal noise coefficient" ) // Parameters Controlled by Correlated Thermal Noise Switch `ifdef __TNOIMOD1__ `MPRnb( TNOIC ,3.5 ,"" ,"Thermal noise parameter for TNOIMOD=1" ) `MPRnb( RNOIC ,3.95e-1 ,"" ,"Thermal noise coefficient for TNOIMOD=1" ) `MPRex( SCALEN ,1.0e5 ,"" ,0.0 ,"Noise scaling parameter for TNOIMOD=1" ) `endif // Temperature Effects `MPRco( TNOM ,27.0 ,"Celsius" ,-`P_CELSIUS0,inf ,"Temperature at which the model is extracted" ) `MPRnb( TBGASUB ,7.02e-4 ,"eV/K" ,"Bandgap temperature coefficient" ) `MPRnb( TBGBSUB ,1.108e3 ,"K" ,"Bandgap temperature coefficient" ) `MPRnb( KT1 ,0.0 ,"V" ,"Vth temperature coefficient" ) `MPRnb( KT1L ,0.0 ,"V*m" ,"Vth temperature L coefficient" ) `MPRnb( TSS ,0.0 ,"/K" ,"Swing temperature coefficient" ) `MPRnb( IIT ,-0.5 ,"" ,"Impact ionization temperature dependence for IIMOD = 1" ) `MPRnb( TII ,0.0 ,"" ,"Impact ionization temperature dependence for IIMOD = 2" ) `MPRnb( TGIDL ,-3.0e-3 ,"/K" ,"GIDL/GISL temperature dependence" ) `MPRnb( IGT ,2.5 ,"" ,"Gate current temperature dependence" ) `MPRnb( TCJ ,0.0 ,"/K" ,"Temperature coefficient for CJS/CJD" ) `MPRnb( TCJSW ,0.0 ,"/K" ,"Temperature coefficient for CJSWS/CJSWD" ) `MPRnb( TCJSWG ,0.0 ,"/K" ,"Temperature coefficient for CJSWGS/CJSWGD" ) `MPRnb( TPB ,0.0 ,"/K" ,"Temperature coefficient for PBS/PBD" ) `MPRnb( TPBSW ,0.0 ,"/K" ,"Temperature coefficient for PBSWS/PBSWD" ) `MPRnb( TPBSWG ,0.0 ,"/K" ,"Temperature coefficient for PBSWGS/PBSWGD" ) `MPRnb( XTIS ,3.0 ,"" ,"Source junction current temperature exponent" ) `MPRnb( XTID ,XTIS ,"" ,"Drain junction current temperature exponent" ) `MPRnb( XTSS ,2.0e-2 ,"" ,"Power dependence of JTSS on temperature" ) `MPRnb( XTSD ,XTSS ,"" ,"Power dependence of JTSD on temperature" ) `MPRnb( XTSSWS ,2.0e-2 ,"" ,"Power dependence of JTSSWS on temperature" ) `MPRnb( XTSSWD ,XTSSWS ,"" ,"Power dependence of JTSSWD on temperature" ) `MPRnb( XTSSWGS ,2.0e-2 ,"" ,"Power dependence of JTSSWGS on temperature" ) `MPRnb( XTSSWGD ,XTSSWGS ,"" ,"Power dependence of JTSSWGD on temperature" ) `MPRnb( TNJTS ,0.0 ,"" ,"Temperature coefficient for NJTS" ) `MPRnb( TNJTSD ,TNJTS ,"" ,"Temperature coefficient for NJTSD" ) `MPRnb( TNJTSSW ,0.0 ,"" ,"Temperature coefficient for NJTSSW" ) `MPRnb( TNJTSSWD ,TNJTSSW ,"" ,"Temperature coefficient for NJTSSWD" ) `MPRnb( TNJTSSWG ,0.0 ,"" ,"Temperature coefficient for NJTSSWG" ) `MPRnb( TNJTSSWGD ,TNJTSSWG ,"" ,"Temperature coefficient for NJTSSWGD" ) // Self Heating `MPRcz( RTH0 ,1.0e-2 ,"ohm*m*K/W" ,"Thermal resistance" ) `MPRcz( CTH0 ,1.0e-5 ,"W*s/m/K" ,"Thermal capacitance" ) `MPRcz( WTH0 ,0.0 ,"m" ,"Width dependence coefficient for Rth and Cth" ) `MPRcz( ASHEXP ,1.0 ,"" ,"Exponent to tune RTH dependence of NFINTOTAL" ) `MPRcz( BSHEXP ,1.0 ,"" ,"Exponent to tune RTH dependence of NF" ) // Unified Model `MPRoz( ACH_UFCM ,1.0 ,"m^2" ,"Area of the channel for the unified Model" ) `MPRoz( CINS_UFCM ,1.0 ,"F/m" ,"Insulator capacitance for the unified Model" ) `MPRoz( W_UFCM ,1.0 ,"m" ,"Effective channel width for the unified Model" ) `MPRcz( TFIN_TOP ,1.5e-8 ,"m" ,"Top body (fin) thickness for trapezoidal triple gate" ) `MPRco( TFIN_BASE ,1.5e-8 ,"m" ,1.0e-9 ,inf ,"Base body (fin) thickness for trapezoidal triple gate" ) `MPRcz( QMFACTORCV ,0.0 ,"" ,"Charge dependence taking QM effects into account" ) `MPRcz( ALPHA_UFCM ,0.5556 ,"" ,"Mobile charge scaling term taking QM effects into account" ) // Binning Parameters `include "bsimcmg_binning_parameters.include" // Output Variables `ifdef __OPINFO__ (* desc= "WEFF" *) real WEFF; (* desc= "LEFF" *) real LEFF; (* desc= "WEFFCV" *) real WEFFCV; (* desc= "LEFFCV" *) real LEFFCV; (* desc= "IDS" *) real IDS; (* desc= "IDEFF" *) real IDEFF; (* desc= "ISEFF" *) real ISEFF; (* desc= "IGTOT" *) real IGTOT; (* desc= "IDSGEN" *) real IDSGEN; (* desc= "III" *) real III; (* desc= "IGS" *) real IGS; (* desc= "IGD" *) real IGD; (* desc= "IGCS" *) real IGCS; (* desc= "IGCD" *) real IGCD; (* desc= "IGBS" *) real IGBS; (* desc= "IGBD" *) real IGBD; (* desc= "IGIDL" *) real IGIDL; (* desc= "IGISL" *) real IGISL; (* desc= "IJSB" *) real IJSB; (* desc= "IJDB" *) real IJDB; (* desc= "ISUB" *) real ISUB; (* desc= "BETA" *) real BETA; (* desc= "VTH" *) real VTH; (* desc= "VDSSAT" *) real VDSSAT; (* desc= "VFB" *) real VFB; (* desc= "GM" *) real GM; (* desc= "GDS" *) real GDS; (* desc= "GMBS" *) real GMBS; (* desc= "QGI" *) real QGI; (* desc= "QDI" *) real QDI; (* desc= "QSI" *) real QSI; (* desc= "QBI" *) real QBI; (* desc= "QG" *) real QG; (* desc= "QD" *) real QD; (* desc= "QS" *) real QS; (* desc= "QB" *) real QB; (* desc= "CGGI" *) real CGGI; (* desc= "CGSI" *) real CGSI; (* desc= "CGDI" *) real CGDI; (* desc= "CGEI" *) real CGEI; (* desc= "CDGI" *) real CDGI; (* desc= "CDDI" *) real CDDI; (* desc= "CDSI" *) real CDSI; (* desc= "CDEI" *) real CDEI; (* desc= "CSGI" *) real CSGI; (* desc= "CSDI" *) real CSDI; (* desc= "CSSI" *) real CSSI; (* desc= "CSEI" *) real CSEI; (* desc= "CEGI" *) real CEGI; (* desc= "CEDI" *) real CEDI; (* desc= "CESI" *) real CESI; (* desc= "CEEI" *) real CEEI; (* desc= "CGG" *) real CGG; (* desc= "CGS" *) real CGS; (* desc= "CGD" *) real CGD; (* desc= "CGE" *) real CGE; (* desc= "CDG" *) real CDG; (* desc= "CDD" *) real CDD; (* desc= "CDS" *) real CDS; (* desc= "CDE" *) real CDE; (* desc= "CSG" *) real CSG; (* desc= "CSD" *) real CSD; (* desc= "CSS" *) real CSS; (* desc= "CSE" *) real CSE; (* desc= "CEG" *) real CEG; (* desc= "CED" *) real CED; (* desc= "CES" *) real CES; (* desc= "CEE" *) real CEE; (* desc= "CGSEXT" *) real CGSEXT; (* desc= "CGDEXT" *) real CGDEXT; (* desc= "CGBOV" *) real CGBOV; (* desc= "CJST" *) real CJST; (* desc= "CJDT" *) real CJDT; (* desc= "RSGEO" *) real RSGEO; (* desc= "RDGEO" *) real RDGEO; (* desc= "CFGEO" *) real CFGEO; (* desc= "T_TOTAL_K" *) real T_TOTAL_K; (* desc= "T_TOTAL_C" *) real T_TOTAL_C; (* desc= "T_DELTA_SH" *) real T_DELTA_SH; `ifdef __DEBUG__ (* desc= "IGBACC" *) real IGBACC; (* desc= "IGBINV" *) real IGBINV; (* desc= "DIDSDVG" *) real DIDSDVG; (* desc= "DIDSDVS" *) real DIDSDVS; (* desc= "DIDSDVD" *) real DIDSDVD; (* desc= "DIGSDVG" *) real DIGSDVG; (* desc= "DIGSDVS" *) real DIGSDVS; (* desc= "DIGSDVD" *) real DIGSDVD; (* desc= "DIGDDVG" *) real DIGDDVG; (* desc= "DIGDDVS" *) real DIGDDVS; (* desc= "DIGDDVD" *) real DIGDDVD; (* desc= "DIIIDVG" *) real DIIIDVG; (* desc= "DIIIDVS" *) real DIIIDVS; (* desc= "DIIIDVD" *) real DIIIDVD; (* desc= "DIGIDLDVG" *) real DIGIDLDVG; (* desc= "DIGIDLDVS" *) real DIGIDLDVS; (* desc= "DIGIDLDVD" *) real DIGIDLDVD; (* desc= "DIGISLDVG" *) real DIGISLDVG; (* desc= "DIGISLDVS" *) real DIGISLDVS; (* desc= "DIGISLDVD" *) real DIGISLDVD; `ifdef __SHMOD__ (* desc= "CGT" *) real CGT; (* desc= "CST" *) real CST; (* desc= "CDT" *) real CDT; (* desc= "DIDSDVTH" *) real DIDSDVTH; (* desc= "DIGSDVTH" *) real DIGSDVTH; (* desc= "DIGDDVTH" *) real DIGDDVTH; (* desc= "DIIIDVTH" *) real DIIIDVTH; (* desc= "DIGIDLDVTH" *) real DIGIDLDVTH; (* desc= "DIGISLDVTH" *) real DIGISLDVTH; (* desc= "DITHDVTH" *) real DITHDVTH; `endif (* desc= "ITH" *) real ITH; (* desc= "DITHDVG" *) real DITHDVG; (* desc= "DITHDVS" *) real DITHDVS; (* desc= "DITHDVD" *) real DITHDVD; `endif `endif // Variables Inside the Model integer devsign; real NFINtotal; real DevTemp; real ids0, ids0_ov_dqi, ids, vgs, vds, vdsx, sigvds, vch, etaiv; real vgs_noswap, vds_noswap, vgd_noswap; real qd, qg, qs, qb; real ni, epssub, epssp, epsratio, Eg, Eg0, Nc; real Lg, deltaL, deltaL1, deltaLCV, Leff, Leff1, LeffCV, LeffCV_acc, Weff0, WeffCV0; real cox, cdsc, cbox; real nbody, phib, deltaPhi; real T0, T0y, T1, T1y, T2, T2y, T3, T3y, T4, T4a, T5, T6, T7, T8, T9; real Vtm, Vtm0, nVtm; real beta, beta0 ; real wf, wr; // Temperature Effects real Tnom, TRatio, dvth_temp, delTemp, ThetaSS; real K0_t, K0SI_t, K2SI_t, K1_t, K2SAT_t, A1_t, A2_t; real AIGBINV_t, AIGBACC_t, AIGC_t, AIGS_t, AIGD_t; real BETA0_t, SII0_t, BGISL_t, BGIDL_t, igtemp, PTWG_t, PTWGR_t; real ALPHA0_t, ALPHA1_t, ALPHAII0_t, ALPHAII1_t; real CJS_t, CJSWS_t, CJSWGD_t, CJD_t, CJSWD_t, CJSWGS_t; real PBS_t, PBSWS_t, PBSWGS_t, PBD_t, PBSWD_t, PBSWGD_t; real JSS_t, JSWS_t, JSWGS_t, JSD_t, JSWD_t, JSWGD_t; real JTSS_t, JTSD_t, JTSSWS_t, JTSSWD_t, JTSSWGS_t, JTSSWGD_t; real NJTS_t, NJTSD_t, NJTSSW_t, NJTSSWD_t, NJTSSWG_t, NJTSSWGD_t; real K2_t; real K0SISAT_t, K2SISAT_t; // Variables for analytical surface potential real q0; real T10, T11, T12; real e0, e1, e2; // Accumulation Model real vgsfb, vgsfbeff; // Short Channel Effect real ETA0_t, ETA0R_t; real scl, vbi, phist, dvth_vtroll, dvth_dibl, dvth_rsce, dvth_all; real tmp, Theta_SCE, Theta_SW, Theta_DIBL, Theta_RSCE, Theta_DITS; // Lateral Non-uniform Doping Effect real Mnud; // Body Effect for BULKMOD=1 real ves, vesx, vesmax, veseff; real Mob; // Quantum mechanical correction [units are MKS] real coxeff, Tcen0, Tcen, dvch_qm, MTcen; real E0, E0prime, E1, E1prime, mx, mxprime, md, mdprime; real gprime, gfactor, gam0, gam1, kT; // Drain Saturation Voltage real Vdseff, qis, qid, qbs, Dmobs; // Midpoint Potential and Charge real qia, qia2, qba, dqi; real qb0; real eta_mu, eta_mu_cv, Eeffm, Eeffm_cv, Dmob, Dmob_cv, u0, ueff, u0_a, u0r; real UA_t, UAR_t, UC_t, UCR_t, UCS_t, UD_t, UDR_t, U0_t, U0R_t, ETAMOB_t, Eeffs, EeffFactor; real Dr, WeffWRFactor; real RSourceGeo, RDrainGeo; real RDSWMIN_i, RDWMIN_i, RSWMIN_i; real Rdrain, Rsource; real rdstemp, Rdsi, Rdss; real RSDR_t, RSDRR_t, RDDR_t, RDDRR_t; real DIBLfactor, PVAGfactor, diffVds, VaDIBL, Vgst2Vtm, Moc, Mclm; real MclmCV, inv_MclmCV; real Dvsat, Vdsat, inv_MEXP, DvsatCV, Nsat; real VSAT_t, VSAT1_t, VSAT1R_t, VSATCV_t, MEXP_t, MEXPR_t, Esat, EsatL, Esat1, Esat1L, EsatCV, EsatCVL; real WVCox, Ta, Tb, Tc; // Asymmetry Model real VSAT1_a, MEXP_a, PTWG_a, RSDR_a, RDDR_a, PDIBL1_a, VSAT_a; // Geometry dependent Source/Drain Resistance real mu_max, mu_rsd, rhorsd, afin, thetarsp; real Rsp, lt, arsd_total, prsd_total, alpha; real eta, RrsdTML, Rrsdside, Rrsd; real Rdsgeo, Arsd, Prsd; // Geometry dependent fringing capacitance real Hg, Wg, Trsd, Hrsd, Cgg_top, Cgg_side, Cfr_geo, Acorner, Ccorner; // Gate Electrode Resistance `ifdef __RGATEMOD__ real ggeltd, Rgeltd; `endif // Gate Current real Vaux_Igbinv, igbinv, igsd_mult, igsd_mult0, igbs, igbd; real Voxacc, Vaux_Igbacc, vfbzb, igbacc; real igcs, igcd, igc0, Vdseffx, T1_exp; real igisl, igidl, vfbsd, igs, igd, vgs_eff, vgd_eff; real Aechvb, Bechvb, Toxratio, Toxratioedge; // Impact Ionization current real Iii, Vdiff, Vdsatii, VgsStep, Ratio, ALPHAII; // Accumulation Capacitance real cox_acc; real qg_acc, qb_acc; real vge; // Parasitic Capacitance real qgs_ov, qgd_ov, qgs_fr, qgd_fr, qds_fr; real qgs_parasitic, qgd_parasitic, Qes, Qed, Qeg; real vgs_overlap, vgd_overlap, vge_overlap; real cgsp, cgdp, csbox, cdbox, cgbox, vfbsdcv; // Junction Current and Capacitance real Ies, Ied, ves_jct, ved_jct, vec; real Czbs, Czbssw, Czbsswg, Czbd, Czbdsw, Czbdswg; real pb2, arg, sarg, Qec; real Qesj, Qesj1, Qesj2, Qesj3, Qedj, Qedj1, Qedj2, Qedj3; real Isbs, Isbd, Nvtms, Nvtmd; real SslpRev, IVjsmRev, VjsmRev, SslpFwd, IVjsmFwd, VjsmFwd, XExpBVS; real DslpRev, IVjdmRev, VjdmRev, DslpFwd, IVjdmFwd, VjdmFwd, XExpBVD; real igentemp, idsgen, LINTIGEN_i; // NQS Gate Resistance `ifdef __NQSMOD1__ real gcrg, XRCRG1_i, XRCRG2_i; real IdovVds; `endif // NQS Charge Deficit Model `ifdef __NQSMOD2__ real xdpart, gtau, gcrg, XRCRG1_i, XRCRG2_i; real IdovVds; `endif // Flicker Noise real LINTNOI_i; real litl, Esatnoi, Leffnoi, Leffnoisq, DelClm; real N0, Nl, Nstar, Ssi, Swi, FNPowerAt1Hz; // Thermal Noise real NTNOI_i, qinv; real Gtnoi, sid; real gspr, gdpr; // Variables Controlled by Correlated Thermal Noise Switch `ifdef __TNOIMOD1__ real Abulk, etaa, gamma, delta, epsilon, gche; real npart_beta, npart_theta, ctnoi, npart_c; real noiGd0, GammaGd0, C0, sf; `endif // Self Heating `ifdef __SHMOD__ real gth, cth; `endif // Binning real Inv_L, Inv_NFIN, Inv_LNFIN; real NBODY_i, PHIG_i, CFD_i, CFS_i, COVS_i, COVD_i, CGSO_i, CGDO_i; real CGSL_i, CGDL_i, CGBL_i, CKAPPAS_i, CKAPPAD_i, CKAPPAB_i; real QMFACTOR_i, QMTCENCV_i, QMTCENCVA_i, KSATIV_i, KSATIVR_i, KSATIV_a; real CDSC_i, CDSCD_i, CDSCD_a, CDSCDR_i, CIT_i, DVT0_i, CITR_i, CIT_a; real DVT1_i, DVT1SS_i, PHIN_i, ETA0_i, ETA0_a, ETA0R_i, DSUB_i, VSAT_i, VSATR_i, VSATR_t; real DVTP0_i, DVTP1_i ; real K0_i, K01_i, K0SI_i, K0SI1_i, K2SI_i, K2SI1_i, PHIBE_i, K1_i, K11_i, K2SAT_i, K2SAT1_i; real DELTAVSAT_i, PSAT_i, DELTAVSATCV_i, PSATCV_i, VSAT1_i, VSAT1R_i, PTWG_i, PTWGR_i, VSATCV_i; real UP_i, U0_i, U0R_i, ETAMOB_i, NGATE_i, RDSW_i, UPR_i; real PRWGS_i, PRWGD_i, WR_i, PDIBL1_i, PDIBL1R_i, PDIBL2_i,PDIBL2R_i, PDIBL2_a ; real DROUT_i, PVAG_i; real AIGBINV_i, AIGBINV1_i, BIGBINV_i, CIGBINV_i, EIGBINV_i, NIGBINV_i; real AIGBACC_i, AIGBACC1_i, BIGBACC_i, CIGBACC_i, NIGBACC_i; real AIGC_i, AIGC1_i, BIGC_i, CIGC_i, PIGCD_i; real AIGS_i, AIGS1_i, BIGS_i, CIGS_i, NTOX_i, POXEDGE_i; real AIGD_i, AIGD1_i, BIGD_i, CIGD_i; real AGIDL_i, BGIDL_i, CGIDL_i, EGIDL_i, PGIDL_i; real AGISL_i, BGISL_i, CGISL_i, EGISL_i, PGISL_i; real ALPHA0_i, ALPHA1_i, ALPHAII0_i, ALPHAII1_i, BETA0_i; real BETAII0_i, BETAII1_i, BETAII2_i, ESATII_i; real LII_i, SII0_i, SII1_i, SII2_i, SIID_i, TII_i; real MEXP_i, MEXPR_i; real PCLM_i, PCLMG_i, PCLMCV_i, PCLM_a, PCLMR_i; real A1_i, A2_i, A11_i, A21_i; real K1RSCE_i, LPE0_i, DVTSHIFT_i, DVTSHIFT_a, DVTSHIFTR_i ; real UA_i, UC_i, EU_i, UD_i, UCS_i, UAR_i, EUR_i, UCR_i, UDR_i, UA_a, UD_a, UC_a, EU_a; real UA1_i, UA1R_i, UC1_i, UD1_i, UCSTE_i, UTE_i, UTL_i, EMOBT_i, UC1R_i, UD1R_i, UTER_i, UTLR_i; real PTWGT_i; real AT_i, ATCV_i, ATR_i; real RDW_i, RSW_i; real PRT_i, KT1_i, TSS_i, IIT_i, IGT_i, TGIDL_i; real NTGEN_i, AIGEN_i, BIGEN_i; real K0SISAT_i, K0SISAT1_i; real K2SISAT_i, K2SISAT1_i; real K2_i, K21_i; // Variables of Unified Finfet Compact Model real Cins, Ach, Weff_UFCM, qdep,rc, vth_fixed_factor_Sub, vth_fixed_factor_SI, qm, Qdep_ov_Cins, qi_acc_for_QM; real fieldnormalizationfactor, auxQMfact, QMFACTORCVfinal; real psipclamp, sqrtpsip, nq, F0; real LSP_i; `Cfringe_2d_vars(); //=================================================== // analog block begins //=================================================== analog begin // ************************************************ // * Geometry dependent calculations * // ************************************************ begin : CMGBiasIndepCalc // Variable Initialization to Prevent Hidden States qid = 0.0; qis = 0.0; qba = 0.0; T11 = 0.0; T12 = 0.0; ids = 0.0; sigvds = 0.0; Iii = 0.0; qd = 0.0; qg = 0.0; qs = 0.0; qb = 0.0; Weff0 = 0.0; WeffCV0 = 0.0; CJS_t = 0.0; CJSWS_t = 0.0; CJSWGS_t = 0.0; CJD_t = 0.0; CJSWD_t = 0.0; CJSWGD_t = 0.0; PBS_t = 0.0; PBSWS_t = 0.0; PBSWGS_t = 0.0; PBD_t = 0.0; PBSWD_t = 0.0; PBSWGD_t = 0.0; JSS_t = 0.0; JSWS_t = 0.0; JSWGS_t = 0.0; JSD_t = 0.0; JSWD_t = 0.0; JSWGD_t = 0.0; JTSS_t = 0.0; JTSSWS_t = 0.0; JTSSWGS_t = 0.0; JTSD_t = 0.0; JTSSWD_t = 0.0; JTSSWGD_t = 0.0; NJTS_t = 0.0; NJTSSW_t = 0.0; NJTSSWG_t = 0.0; NJTSD_t = 0.0; NJTSSWD_t = 0.0; NJTSSWGD_t = 0.0; Ies = 0.0; Ied = 0.0; Czbs = 0.0; Czbssw = 0.0; Czbsswg = 0.0; Czbd = 0.0; Czbdsw = 0.0; Czbdswg = 0.0; Qes = 0.0; Qed = 0.0; Qeg = 0.0; Isbs = 0.0; Isbd = 0.0; Nvtms = 0.0; Nvtmd = 0.0; SslpRev = 0.0; IVjsmRev = 0.0; VjsmRev = 0.0; SslpFwd = 0.0; IVjsmFwd = 0.0; VjsmFwd = 0.0; DslpRev = 0.0; IVjdmRev = 0.0; VjdmRev = 0.0; DslpFwd = 0.0; IVjdmFwd = 0.0; VjdmFwd = 0.0; XExpBVS = 0.0; XExpBVD = 0.0; idsgen = 0.0; q0 = 0.0; Tcen = 0.0; MTcen = 0.0; Rdrain = 0.0; Rsource = 0.0; Cfr_geo = 0.0; igbinv = 0.0; igbs = 0.0; igbd = 0.0; igbacc = 0.0; igcs = 0.0; igcd = 0.0; igidl = 0.0; igisl = 0.0; igs = 0.0; igd = 0.0; cox_acc = 0.0; CGSO_i = 0.0; CGDO_i = 0.0; qb_acc = 0.0; qg_acc = 0.0; qgs_fr = 0.0; qgd_fr = 0.0; qds_fr = 0.0; qgs_parasitic = 0.0; qgd_parasitic = 0.0; FNPowerAt1Hz = 0.0; Gtnoi = 0.0; gspr = 0.0; gdpr = 0.0; Dr = 1.0; CDSCDR_i = 0.0; ETA0R_i = 0.0; VSAT1R_i = 0.0; VSAT1R_t = 0.0; MEXPR_i = 0.0; MEXPR_t = 0.0; PTWGR_i = 0.0; PTWGR_t = 0.0; PDIBL1R_i = 0.0; PDIBL2R_i = 0.0; PHIBE_i = 0.0; K1_i = 0.0; K11_i = 0.0; K2SAT_i = 0.0; K2SAT1_i = 0.0; KSATIVR_i = 0.0; K2_i = 0.0; K21_i = 0.0; UC_i = 0.0; UC1_i = 0.0; UC_t = 0.0; U0R_i = 0.0; UPR_i = 0.0; EUR_i = 0.0; ATR_i = 0.0; CITR_i = 0.0; ETA0R_i = 0.0; DVTP0_i = 0.0; DVTP1_i = 0.0; PDIBL2R_i = 0.0; PCLMR_i = 0.0; LeffCV_acc = 0.0; RDDRR_t = 0.0; RSDRR_t = 0.0; Rdsi = 0.0; T3y = 0.0; Tcen0 = 0.0; veseff = 0.0; U0R_t = 0.0; UAR_t = 0.0; UCR_t = 0.0; UDR_t = 0.0; VSAT_a = 0.0; DVTSHIFTR_i = 0.0; UA1R_i = 0.0; UAR_i = 0.0; UC1R_i = 0.0; UCR_i = 0.0; UD1R_i = 0.0; UDR_i = 0.0; UTER_i = 0.0; UTLR_i = 0.0; VSATR_i = 0.0; VSATR_t = 0.0; u0r = 0.0; // Thermal Noise sid = 0.0; `ifdef __TNOIMOD1__ ctnoi = 0.0; sf = 0.0; C0 = 0.0; gamma = 0.0; delta = 0.0; `endif `ifdef __RGATEMOD__ ggeltd = 0.0; `endif // Unified FinFET Model qm = 1.0; Cins = 1.0; Ach = 1.0; Weff_UFCM = 1.0; qdep = -1.0; rc = 1.0; vth_fixed_factor_Sub = 1.0; vth_fixed_factor_SI = 1.0; qi_acc_for_QM = 0.0; fieldnormalizationfactor = 0.0; auxQMfact = 0.0; QMFACTORCVfinal = 0.0; psipclamp = 1.0; sqrtpsip = 1.0; nq = 1.0; F0 = 0.0; e0 = 0.0; e1 = 0.0; e2 = 0.0; Qdep_ov_Cins = 0.0; // Constants if ( TYPE == `ntype ) begin devsign = 1; end else begin devsign = -1; end epssub = EPSRSUB * `EPS0; epssp = EPSRSP * `EPS0; cbox = EPSROX * `EPS0 / EOTBOX; epsratio = EPSRSUB / EPSROX; if ($port_connected(t) == 1) begin `ifdef __SHMOD__ if (SHMOD == 0) begin if (SH_WARN == 1) begin $strobe("The optional 5th terminal is present but not active because SHMOD=0."); end end `else Temp(t) <+ 0.0; if (SH_WARN == 1) begin $strobe("The optional 5th terminal is present but not active because the model was not compiled with self-heating enabled (__SHMOD__ was not activated)."); end `endif end // Constants for Quantum Mechanical Effects mx = 0.916 * `MEL; mxprime = 0.190 * `MEL; md = 0.190 * `MEL; mdprime = 0.417 * `MEL; gprime = 4.0; gfactor = 2.0; // Effective Channel Length for I-V / C-V Lg = L + XL; deltaL = LINT + LL * pow(Lg, -LLN); deltaL1 = LINT + LL * pow(Lg+DLBIN, -LLN); deltaLCV = DLC + LLC * pow(Lg, -LLN); Leff = Lg - 2.0 * deltaL; Leff1 = Lg + DLBIN - 2.0 * deltaL1; //Used in the binning equations only LeffCV = Lg - 2.0 * deltaLCV; if (BULKMOD != 0) LeffCV_acc = LeffCV - DLCACC; // Total Fins NFINtotal = NFIN * NF; // Range Checking on Leff and Leff1 if (Leff <= 0.0) begin $strobe("Fatal: Leff = %e is not positive.", Leff); $finish(0); end else if (Leff <= 1.0e-9) begin $strobe("Warning: Leff = %e <= 1.0e-9.", Leff); end if (Leff1 <= 0.0) begin $strobe("Fatal: Leff1 = %e is not positive.", Leff1); $finish(0); end else if (Leff1 <= 1.0e-9) begin $strobe("Warning: Leff1 = %e <= 1.0e-9.", Leff1); end // Binning Inv_L = 1.0e-6 / (Leff1); Inv_NFIN = 1.0 / NFIN; Inv_LNFIN = 1.0e-6 / (Leff1 * NFIN); // Nbody Binning Equation for UFCM Parameters NBODY_i = NBODY + Inv_L * LNBODY + Inv_NFIN * NNBODY + Inv_LNFIN * PNBODY; if (NBODYN1 != 0.0) begin NBODY_i = NBODY_i * (1.0 + NBODYN1/NFIN * lln(1.0 + NFIN/NBODYN2)); end // Model Parameters for Unified FinFET Compact Model by Juan Duarte 10/2013 case (GEOMOD) 0: begin // Double Gate if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin Weff_UFCM = 2.0 * HFIN; Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * TFIN; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end else begin Weff_UFCM = 2.0 * sqrt( HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0); Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end end 1: begin // Triple Gate if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin Weff_UFCM = 2.0 * HFIN + TFIN; Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * TFIN; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end else begin Weff_UFCM = 2.0 * sqrt(HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0) + TFIN_TOP; Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; rc = (2.0 * Cins /(Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end end 2: begin // Quadruple Gate if (!$param_given(TFIN_TOP) || !$param_given(TFIN_BASE)) begin Weff_UFCM = 2.0 * HFIN + 2.0 * TFIN; Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * TFIN; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end else begin Weff_UFCM = 2.0 * sqrt(HFIN * HFIN + (TFIN_TOP - TFIN_BASE) * (TFIN_TOP - TFIN_BASE) / 4.0) + TFIN_TOP + TFIN_BASE; Cins = Weff_UFCM * EPSROX * `EPS0 / EOT; Ach = HFIN * (TFIN_TOP + TFIN_BASE) / 2.0; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end end 3: begin // Cylindrical Gate Weff_UFCM = `M_PI * D; Cins = 2.0 * `M_PI * EPSROX * `EPS0 / ln(1.0 + 2.0 * EOT / D); Ach = `M_PI * D * D / 4.0; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end 4: begin // Unified Model Weff_UFCM = W_UFCM; Cins = CINS_UFCM; Ach = ACH_UFCM; rc = (2.0 * Cins / (Weff_UFCM * Weff_UFCM * epssub / Ach)); Qdep_ov_Cins = -`q * NBODY_i * Ach / Cins; end endcase // Cox Definition cox = Cins / Weff_UFCM; if (BULKMOD != 0) begin cox_acc = cox * EOT / EOTACC; end // Effective Width Calculation Weff0 = Weff_UFCM - DELTAW; WeffCV0 = Weff_UFCM - DELTAWCV; // SCE Scaling Length scl = sqrt((epssub * Ach / Cins) * (1.0 + Ach * Cins / (2.0 * epssub * Weff_UFCM * Weff_UFCM))); // Binning Equations (Process Parameters) PHIG_i = PHIG + Inv_L * LPHIG + Inv_NFIN * NPHIG + Inv_LNFIN * PPHIG; NGATE_i = NGATE + Inv_L * LNGATE + Inv_NFIN * NNGATE + Inv_LNFIN * PNGATE; // Binning Equations (Model Parameters) CIT_i = CIT + Inv_L * LCIT + Inv_NFIN * NCIT + Inv_LNFIN * PCIT; CDSC_i = CDSC + Inv_L * LCDSC + Inv_NFIN * NCDSC + Inv_LNFIN * PCDSC; CDSCD_i = CDSCD + Inv_L * LCDSCD + Inv_NFIN * NCDSCD + Inv_LNFIN * PCDSCD; DVT0_i = DVT0 + Inv_L * LDVT0 + Inv_NFIN * NDVT0 + Inv_LNFIN * PDVT0; DVT1_i = DVT1 + Inv_L * LDVT1 + Inv_NFIN * NDVT1 + Inv_LNFIN * PDVT1; DVT1SS_i = DVT1SS + Inv_L * LDVT1SS + Inv_NFIN * NDVT1SS + Inv_LNFIN * PDVT1SS; PHIN_i = PHIN + Inv_L * LPHIN + Inv_NFIN * NPHIN + Inv_LNFIN * PPHIN; ETA0_i = ETA0 + Inv_L * LETA0 + Inv_NFIN * NETA0 + Inv_LNFIN * PETA0; DSUB_i = DSUB + Inv_L * LDSUB + Inv_NFIN * NDSUB + Inv_LNFIN * PDSUB; K1RSCE_i = K1RSCE + Inv_L * LK1RSCE + Inv_NFIN * NK1RSCE + Inv_LNFIN * PK1RSCE; LPE0_i = LPE0 + Inv_L * LLPE0 + Inv_NFIN * NLPE0 + Inv_LNFIN * PLPE0; DVTSHIFT_i = DVTSHIFT + Inv_L * LDVTSHIFT + Inv_NFIN * NDVTSHIFT + Inv_LNFIN * PDVTSHIFT; K0_i = K0 + Inv_L * LK0 + Inv_NFIN * NK0 + Inv_LNFIN * PK0; K01_i = K01 + Inv_L * LK01 + Inv_NFIN * NK01 + Inv_LNFIN * PK01; K0SI_i = K0SI + Inv_L * LK0SI + Inv_NFIN * NK0SI + Inv_LNFIN * PK0SI; K0SI1_i = K0SI1 + Inv_L * LK0SI1 + Inv_NFIN * NK0SI1 + Inv_LNFIN * PK0SI1; K2SI_i = K2SI + Inv_L * LK2SI + Inv_NFIN * NK2SI + Inv_LNFIN * PK2SI; K2SI1_i = K2SI1 + Inv_L * LK2SI1 + Inv_NFIN * NK2SI1 + Inv_LNFIN * PK2SI1; K0SISAT_i = K0SISAT + Inv_L * LK0SISAT + Inv_NFIN * NK0SISAT + Inv_LNFIN * PK0SISAT; K0SISAT1_i = K0SISAT1 + Inv_L * LK0SISAT1 + Inv_NFIN * NK0SISAT1 + Inv_LNFIN * PK0SISAT1; K2SISAT_i = K2SISAT + Inv_L * LK2SISAT + Inv_NFIN * NK2SISAT + Inv_LNFIN * PK2SISAT; K2SISAT1_i = K2SISAT1 + Inv_L * LK2SISAT1 + Inv_NFIN * NK2SISAT1 + Inv_LNFIN * PK2SISAT1; if (BULKMOD != 0) begin if (BULKMOD == 2) begin K2_i = K2 + Inv_L * LK2 + Inv_NFIN * NK2 + Inv_LNFIN * PK2; K21_i = K21 + Inv_L * LK21 + Inv_NFIN * NK21 + Inv_LNFIN * PK21; K2SAT_i = K2SAT + Inv_L * LK2SAT + Inv_NFIN * NK2SAT + Inv_LNFIN * PK2SAT; K2SAT1_i = K2SAT1 + Inv_L * LK2SAT1 + Inv_NFIN * NK2SAT1 + Inv_LNFIN * PK2SAT1; end PHIBE_i = PHIBE + Inv_L * LPHIBE + Inv_NFIN * NPHIBE + Inv_LNFIN * PPHIBE; K1_i = K1 + Inv_L * LK1 + Inv_NFIN * NK1 + Inv_LNFIN * PK1; K11_i = K11 + Inv_L * LK11 + Inv_NFIN * NK11 + Inv_LNFIN * PK11; end QMFACTOR_i = QMFACTOR + Inv_L * LQMFACTOR + Inv_NFIN * NQMFACTOR + Inv_LNFIN * PQMFACTOR; QMTCENCV_i = QMTCENCV + Inv_L * LQMTCENCV + Inv_NFIN * NQMTCENCV + Inv_LNFIN * PQMTCENCV; QMTCENCVA_i = QMTCENCVA + Inv_L * LQMTCENCVA + Inv_NFIN * NQMTCENCVA + Inv_LNFIN * PQMTCENCVA; VSAT_i = VSAT + Inv_L * LVSAT + Inv_NFIN * NVSAT + Inv_LNFIN * PVSAT; VSAT1_i = VSAT1 + Inv_L * LVSAT1 + Inv_NFIN * NVSAT1 + Inv_LNFIN * PVSAT1; VSATCV_i = VSATCV + Inv_L * LVSATCV + Inv_NFIN * NVSATCV + Inv_LNFIN * PVSATCV; DELTAVSAT_i = DELTAVSAT + Inv_L * LDELTAVSAT + Inv_NFIN * NDELTAVSAT + Inv_LNFIN * PDELTAVSAT; PSAT_i = PSAT + Inv_L * LPSAT + Inv_NFIN * NPSAT + Inv_LNFIN * PPSAT; DELTAVSATCV_i = DELTAVSATCV + Inv_L * LDELTAVSATCV + Inv_NFIN * NDELTAVSATCV + Inv_LNFIN * PDELTAVSATCV; PSATCV_i = PSATCV + Inv_L * LPSATCV + Inv_NFIN * NPSATCV + Inv_LNFIN * PPSATCV; KSATIV_i = KSATIV + Inv_L * LKSATIV + Inv_NFIN * NKSATIV + Inv_LNFIN * PKSATIV; MEXP_i = MEXP + Inv_L * LMEXP + Inv_NFIN * NMEXP + Inv_LNFIN * PMEXP; PTWG_i = PTWG + Inv_L * LPTWG + Inv_NFIN * NPTWG + Inv_LNFIN * PPTWG; U0_i = U0 + Inv_L * LU0 + Inv_NFIN * NU0 + Inv_LNFIN * PU0; ETAMOB_i = ETAMOB + Inv_L * LETAMOB + Inv_NFIN * NETAMOB + Inv_LNFIN * PETAMOB; UP_i = UP + Inv_L * LUP + Inv_NFIN * NUP + Inv_LNFIN * PUP; UA_i = UA + Inv_L * LUA + Inv_NFIN * NUA + Inv_LNFIN * PUA; if (BULKMOD != 0) begin UC_i = UC + Inv_L * LUC + Inv_NFIN * NUC + Inv_LNFIN * PUC; end EU_i = EU + Inv_L * LEU + Inv_NFIN * NEU + Inv_LNFIN * PEU; UD_i = UD + Inv_L * LUD + Inv_NFIN * NUD + Inv_LNFIN * PUD; UCS_i = UCS + Inv_L * LUCS + Inv_NFIN * NUCS + Inv_LNFIN * PUCS; PCLM_i = PCLM + Inv_L * LPCLM + Inv_NFIN * NPCLM + Inv_LNFIN * PPCLM; PCLMG_i = PCLMG + Inv_L * LPCLMG + Inv_NFIN * NPCLMG + Inv_LNFIN * PPCLMG; PCLMCV_i = PCLMCV + Inv_L * LPCLMCV + Inv_NFIN * NPCLMCV + Inv_LNFIN * PPCLMCV; A1_i = A1 + Inv_L * LA1 + Inv_NFIN * NA1 + Inv_LNFIN * PA1; A11_i = A11 + Inv_L * LA11 + Inv_NFIN * NA11 + Inv_LNFIN * PA11; A2_i = A2 + Inv_L * LA2 + Inv_NFIN * NA2 + Inv_LNFIN * PA2; A21_i = A21 + Inv_L * LA21 + Inv_NFIN * NA21 + Inv_LNFIN * PA21; RDSW_i = RDSW + Inv_L * LRDSW + Inv_NFIN * NRDSW + Inv_LNFIN * PRDSW; RSW_i = RSW + Inv_L * LRSW + Inv_NFIN * NRSW + Inv_LNFIN * PRSW; RDW_i = RDW + Inv_L * LRDW + Inv_NFIN * NRDW + Inv_LNFIN * PRDW; PRWGD_i = PRWGD + Inv_L * LPRWGD + Inv_NFIN * NPRWGD + Inv_LNFIN * PPRWGD; PRWGS_i = PRWGS + Inv_L * LPRWGS + Inv_NFIN * NPRWGS + Inv_LNFIN * PPRWGS; WR_i = WR + Inv_L * LWR + Inv_NFIN * NWR + Inv_LNFIN * PWR; PDIBL1_i = PDIBL1 + Inv_L * LPDIBL1 + Inv_NFIN * NPDIBL1 + Inv_LNFIN * PPDIBL1; PDIBL2_i = PDIBL2 + Inv_L * LPDIBL2 + Inv_NFIN * NPDIBL2 + Inv_LNFIN * PPDIBL2; DROUT_i = DROUT + Inv_L * LDROUT + Inv_NFIN * NDROUT + Inv_LNFIN * PDROUT; PVAG_i = PVAG + Inv_L * LPVAG + Inv_NFIN * NPVAG + Inv_LNFIN * PPVAG; AIGBINV_i = AIGBINV + Inv_L * LAIGBINV + Inv_NFIN * NAIGBINV + Inv_LNFIN * PAIGBINV; AIGBINV1_i = AIGBINV1 + Inv_L * LAIGBINV1 + Inv_NFIN * NAIGBINV1 + Inv_LNFIN * PAIGBINV1; BIGBINV_i = BIGBINV + Inv_L * LBIGBINV + Inv_NFIN * NBIGBINV + Inv_LNFIN * PBIGBINV; CIGBINV_i = CIGBINV + Inv_L * LCIGBINV + Inv_NFIN * NCIGBINV + Inv_LNFIN * PCIGBINV; EIGBINV_i = EIGBINV + Inv_L * LEIGBINV + Inv_NFIN * NEIGBINV + Inv_LNFIN * PEIGBINV; NIGBINV_i = NIGBINV + Inv_L * LNIGBINV + Inv_NFIN * NNIGBINV + Inv_LNFIN * PNIGBINV; AIGBACC_i = AIGBACC + Inv_L * LAIGBACC + Inv_NFIN * NAIGBACC + Inv_LNFIN * PAIGBACC; AIGBACC1_i = AIGBACC1 + Inv_L * LAIGBACC1 + Inv_NFIN * NAIGBACC1 + Inv_LNFIN * PAIGBACC1; BIGBACC_i = BIGBACC + Inv_L * LBIGBACC + Inv_NFIN * NBIGBACC + Inv_LNFIN * PBIGBACC; CIGBACC_i = CIGBACC + Inv_L * LCIGBACC + Inv_NFIN * NCIGBACC + Inv_LNFIN * PCIGBACC; NIGBACC_i = NIGBACC + Inv_L * LNIGBACC + Inv_NFIN * NNIGBACC + Inv_LNFIN * PNIGBACC; AIGC_i = AIGC + Inv_L * LAIGC + Inv_NFIN * NAIGC + Inv_LNFIN * PAIGC; AIGC1_i = AIGC1 + Inv_L * LAIGC1 + Inv_NFIN * NAIGC1 + Inv_LNFIN * PAIGC1; BIGC_i = BIGC + Inv_L * LBIGC + Inv_NFIN * NBIGC + Inv_LNFIN * PBIGC; CIGC_i = CIGC + Inv_L * LCIGC + Inv_NFIN * NCIGC + Inv_LNFIN * PCIGC; PIGCD_i = PIGCD + Inv_L * LPIGCD + Inv_NFIN * NPIGCD + Inv_LNFIN * PPIGCD; AIGS_i = AIGS + Inv_L * LAIGS + Inv_NFIN * NAIGS + Inv_LNFIN * PAIGS; AIGS1_i = AIGS1 + Inv_L * LAIGS1 + Inv_NFIN * NAIGS1 + Inv_LNFIN * PAIGS1; BIGS_i = BIGS + Inv_L * LBIGS + Inv_NFIN * NBIGS + Inv_LNFIN * PBIGS; CIGS_i = CIGS + Inv_L * LCIGS + Inv_NFIN * NCIGS + Inv_LNFIN * PCIGS; AIGD_i = AIGD + Inv_L * LAIGD + Inv_NFIN * NAIGD + Inv_LNFIN * PAIGD; AIGD1_i = AIGD1 + Inv_L * LAIGD1 + Inv_NFIN * NAIGD1 + Inv_LNFIN * PAIGD1; BIGD_i = BIGD + Inv_L * LBIGD + Inv_NFIN * NBIGD + Inv_LNFIN * PBIGD; CIGD_i = CIGD + Inv_L * LCIGD + Inv_NFIN * NCIGD + Inv_LNFIN * PCIGD; NTOX_i = NTOX + Inv_L * LNTOX + Inv_NFIN * NNTOX + Inv_LNFIN * PNTOX; POXEDGE_i = POXEDGE + Inv_L * LPOXEDGE + Inv_NFIN * NPOXEDGE + Inv_LNFIN * PPOXEDGE; AGIDL_i = AGIDL + Inv_L * LAGIDL + Inv_NFIN * NAGIDL + Inv_LNFIN * PAGIDL; BGIDL_i = BGIDL + Inv_L * LBGIDL + Inv_NFIN * NBGIDL + Inv_LNFIN * PBGIDL; CGIDL_i = CGIDL + Inv_L * LCGIDL + Inv_NFIN * NCGIDL + Inv_LNFIN * PCGIDL; EGIDL_i = EGIDL + Inv_L * LEGIDL + Inv_NFIN * NEGIDL + Inv_LNFIN * PEGIDL; PGIDL_i = PGIDL + Inv_L * LPGIDL + Inv_NFIN * NPGIDL + Inv_LNFIN * PPGIDL; AGISL_i = AGISL + Inv_L * LAGISL + Inv_NFIN * NAGISL + Inv_LNFIN * PAGISL; BGISL_i = BGISL + Inv_L * LBGISL + Inv_NFIN * NBGISL + Inv_LNFIN * PBGISL; CGISL_i = CGISL + Inv_L * LCGISL + Inv_NFIN * NCGISL + Inv_LNFIN * PCGISL; EGISL_i = EGISL + Inv_L * LEGISL + Inv_NFIN * NEGISL + Inv_LNFIN * PEGISL; PGISL_i = PGISL + Inv_L * LPGISL + Inv_NFIN * NPGISL + Inv_LNFIN * PPGISL; ALPHA0_i = ALPHA0 + Inv_L * LALPHA0 + Inv_NFIN * NALPHA0 + Inv_LNFIN * PALPHA0; ALPHA1_i = ALPHA1 + Inv_L * LALPHA1 + Inv_NFIN * NALPHA1 + Inv_LNFIN * PALPHA1; ALPHAII0_i = ALPHAII0 + Inv_L * LALPHAII0 + Inv_NFIN * NALPHAII0 + Inv_LNFIN * PALPHAII0; ALPHAII1_i = ALPHAII1 + Inv_L * LALPHAII1 + Inv_NFIN * NALPHAII1 + Inv_LNFIN * PALPHAII1; BETA0_i = BETA0 + Inv_L * LBETA0 + Inv_NFIN * NBETA0 + Inv_LNFIN * PBETA0; BETAII0_i = BETAII0 + Inv_L * LBETAII0 + Inv_NFIN * NBETAII0 + Inv_LNFIN * PBETAII0; BETAII1_i = BETAII1 + Inv_L * LBETAII1 + Inv_NFIN * NBETAII1 + Inv_LNFIN * PBETAII1; BETAII2_i = BETAII2 + Inv_L * LBETAII2 + Inv_NFIN * NBETAII2 + Inv_LNFIN * PBETAII2; ESATII_i = ESATII + Inv_L * LESATII + Inv_NFIN * NESATII + Inv_LNFIN * PESATII; LII_i = LII + Inv_L * LLII + Inv_NFIN * NLII + Inv_LNFIN * PLII; SII0_i = SII0 + Inv_L * LSII0 + Inv_NFIN * NSII0 + Inv_LNFIN * PSII0; SII1_i = SII1 + Inv_L * LSII1 + Inv_NFIN * NSII1 + Inv_LNFIN * PSII1; SII2_i = SII2 + Inv_L * LSII2 + Inv_NFIN * NSII2 + Inv_LNFIN * PSII2; SIID_i = SIID + Inv_L * LSIID + Inv_NFIN * NSIID + Inv_LNFIN * PSIID; TII_i = TII + Inv_L * LTII + Inv_NFIN * NTII + Inv_LNFIN * PTII; CFS_i = CFS + Inv_L * LCFS + Inv_NFIN * NCFS + Inv_LNFIN * PCFS; CFD_i = CFD + Inv_L * LCFD + Inv_NFIN * NCFD + Inv_LNFIN * PCFD; COVS_i = COVS + Inv_L * LCOVS + Inv_NFIN * NCOVS + Inv_LNFIN * PCOVS; COVD_i = COVD + Inv_L * LCOVD + Inv_NFIN * NCOVD + Inv_LNFIN * PCOVD; CGSL_i = CGSL + Inv_L * LCGSL + Inv_NFIN * NCGSL + Inv_LNFIN * PCGSL; CGDL_i = CGDL + Inv_L * LCGDL + Inv_NFIN * NCGDL + Inv_LNFIN * PCGDL; CGBL_i = CGBL + Inv_L * LCGBL + Inv_NFIN * NCGBL + Inv_LNFIN * PCGBL; CKAPPAS_i = CKAPPAS + Inv_L * LCKAPPAS + Inv_NFIN * NCKAPPAS + Inv_LNFIN * PCKAPPAS; CKAPPAD_i = CKAPPAD + Inv_L * LCKAPPAD + Inv_NFIN * NCKAPPAD + Inv_LNFIN * PCKAPPAD; CKAPPAB_i = CKAPPAB + Inv_L * LCKAPPAB + Inv_NFIN * NCKAPPAB + Inv_LNFIN * PCKAPPAB; NTGEN_i = NTGEN + Inv_L * LNTGEN + Inv_NFIN * NNTGEN + Inv_LNFIN * PNTGEN; AIGEN_i = AIGEN + Inv_L * LAIGEN + Inv_NFIN * NAIGEN + Inv_LNFIN * PAIGEN; BIGEN_i = BIGEN + Inv_L * LBIGEN + Inv_NFIN * NBIGEN + Inv_LNFIN * PBIGEN; if (ASYMMOD != 0) begin CDSCDR_i = CDSCDR + Inv_L * LCDSCDR + Inv_NFIN * NCDSCDR + Inv_LNFIN * PCDSCDR; CITR_i = CITR + Inv_L * LCITR + Inv_NFIN * NCITR + Inv_LNFIN * PCITR; ETA0R_i = ETA0R + Inv_L * LETA0R + Inv_NFIN * NETA0R + Inv_LNFIN * PETA0R; VSAT1R_i = VSAT1R + Inv_L * LVSAT1R + Inv_NFIN * NVSAT1R + Inv_LNFIN * PVSAT1R; MEXPR_i = MEXPR + Inv_L * LMEXPR + Inv_NFIN * NMEXPR + Inv_LNFIN * PMEXPR; PTWGR_i = PTWGR + Inv_L * LPTWGR + Inv_NFIN * NPTWGR + Inv_LNFIN * PPTWGR; PDIBL1R_i = PDIBL1R + Inv_L * LPDIBL1R + Inv_NFIN * NPDIBL1R + Inv_LNFIN * PPDIBL1R; PDIBL2R_i = PDIBL2R + Inv_L * LPDIBL2R + Inv_NFIN * NPDIBL2R + Inv_LNFIN * PPDIBL2R; PCLMR_i = PCLMR + Inv_L * LPCLMR + Inv_NFIN * NPCLMR + Inv_LNFIN * PPCLMR; DVTSHIFTR_i = DVTSHIFTR + Inv_L * LDVTSHIFTR + Inv_NFIN * NDVTSHIFTR + Inv_LNFIN * PDVTSHIFTR; VSATR_i = VSATR + Inv_L * LVSATR + Inv_NFIN * NVSATR + Inv_LNFIN * PVSATR; KSATIVR_i = KSATIVR + Inv_L * LKSATIVR + Inv_NFIN * NKSATIVR + Inv_LNFIN * PKSATIVR; U0R_i = U0R + Inv_L * LU0R + Inv_NFIN * NU0R + Inv_LNFIN * PU0R; UAR_i = UAR + Inv_L * LUAR + Inv_NFIN * NUAR + Inv_LNFIN * PUAR; UPR_i = UPR + Inv_L * LUPR + Inv_NFIN * NUPR + Inv_LNFIN * PUPR; if (BULKMOD != 0) begin UCR_i = UCR + Inv_L * LUCR + Inv_NFIN * NUCR + Inv_LNFIN * PUCR; end EUR_i = EUR + Inv_L * LEUR + Inv_NFIN * NEUR + Inv_LNFIN * PEUR; UDR_i = UDR + Inv_L * LUDR + Inv_NFIN * NUDR + Inv_LNFIN * PUDR; end `ifdef __NQSMOD1__ if (NQSMOD == 1 && XRCRG1 != 0.0) begin XRCRG1_i = XRCRG1 + Inv_L * LXRCRG1 + Inv_NFIN * NXRCRG1 + Inv_LNFIN * PXRCRG1; XRCRG2_i = XRCRG2 + Inv_L * LXRCRG2 + Inv_NFIN * NXRCRG2 + Inv_LNFIN * PXRCRG2; end else begin XRCRG1_i = 0.0; XRCRG2_i = 0.0; end `else if (NQSMOD == 1) begin $strobe(" Although the model selector NQSMOD is set to 1, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment \"`define __NQSMOD1__\" in bsimcmg.va to activate it."); end `endif `ifdef __NQSMOD2__ if (NQSMOD == 2 && XRCRG1 != 0.0) begin XRCRG1_i = XRCRG1 + Inv_L * LXRCRG1 + Inv_NFIN * NXRCRG1 + Inv_LNFIN * PXRCRG1; XRCRG2_i = XRCRG2 + Inv_L * LXRCRG2 + Inv_NFIN * NXRCRG2 + Inv_LNFIN * PXRCRG2; end else begin XRCRG1_i = 0.0; XRCRG2_i = 0.0; end `else if (NQSMOD == 2) begin $strobe(" Although the model selector NQSMOD is set to 2, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment \"`define __NQSMOD2__\" in bsimcmg.va to activate it."); end `endif UTE_i = UTE + Inv_L * LUTE + Inv_NFIN * NUTE + Inv_LNFIN * PUTE; UTL_i = UTL + Inv_L * LUTL + Inv_NFIN * NUTL + Inv_LNFIN * PUTL; EMOBT_i = EMOBT + Inv_L * LEMOBT + Inv_NFIN * NEMOBT + Inv_LNFIN * PEMOBT; UA1_i = UA1 + Inv_L * LUA1 + Inv_NFIN * NUA1 + Inv_LNFIN * PUA1; if (BULKMOD != 0) begin UC1_i = UC1 + Inv_L * LUC1 + Inv_NFIN * NUC1 + Inv_LNFIN * PUC1; end UD1_i = UD1 + Inv_L * LUD1 + Inv_NFIN * NUD1 + Inv_LNFIN * PUD1; UCSTE_i = UCSTE + Inv_L * LUCSTE + Inv_NFIN * NUCSTE + Inv_LNFIN * PUCSTE; PTWGT_i = PTWGT + Inv_L * LPTWGT + Inv_NFIN * NPTWGT + Inv_LNFIN * PPTWGT; AT_i = AT + Inv_L * LAT + Inv_NFIN * NAT + Inv_LNFIN * PAT; ATCV_i = ATCV + Inv_L * LATCV + Inv_NFIN * NATCV + Inv_LNFIN * PATCV; PRT_i = PRT + Inv_L * LPRT + Inv_NFIN * NPRT + Inv_LNFIN * PPRT; KT1_i = KT1 + Inv_L * LKT1 + Inv_NFIN * NKT1 + Inv_LNFIN * PKT1; TSS_i = TSS + Inv_L * LTSS + Inv_NFIN * NTSS + Inv_LNFIN * PTSS; IIT_i = IIT + Inv_L * LIIT + Inv_NFIN * NIIT + Inv_LNFIN * PIIT; TGIDL_i = TGIDL + Inv_L * LTGIDL + Inv_NFIN * NTGIDL + Inv_LNFIN * PTGIDL; IGT_i = IGT + Inv_L * LIGT + Inv_NFIN * NIGT + Inv_LNFIN * PIGT; if (ASYMMOD != 0) begin UTER_i = UTER + Inv_L * LUTER + Inv_NFIN * NUTER + Inv_LNFIN * PUTER; UTLR_i = UTLR + Inv_L * LUTLR + Inv_NFIN * NUTLR + Inv_LNFIN * PUTLR; UA1R_i = UA1R + Inv_L * LUA1R + Inv_NFIN * NUA1R + Inv_LNFIN * PUA1R; UD1R_i = UD1R + Inv_L * LUD1R + Inv_NFIN * NUD1R + Inv_LNFIN * PUD1R; ATR_i = ATR + Inv_L * LATR + Inv_NFIN * NATR + Inv_LNFIN * PATR; if (BULKMOD != 0) begin UC1R_i = UC1R + Inv_L * LUC1R + Inv_NFIN * NUC1R + Inv_LNFIN * PUC1R; end end // Geometrical Scaling // NFIN Scaling if (PHIGN1 != 0.0) begin PHIG_i = PHIG_i * (1.0 + PHIGN1 / NFIN * lln(1.0 + NFIN / PHIGN2)); end if (ETA0N1 != 0.0) begin ETA0_i = ETA0_i * (1.0 + ETA0N1 / NFIN * lln(1.0 + NFIN / ETA0N2)); end if (CDSCN1 != 0.0) begin CDSC_i = CDSC_i * (1.0 + CDSCN1 / NFIN * lln(1.0 + NFIN / CDSCN2)); end if (CDSCDN1 != 0.0) begin CDSCD_i = CDSCD_i * (1.0 + CDSCDN1 / NFIN * lln(1.0 + NFIN / CDSCDN2)); end if (CDSCDRN1 != 0.0) begin CDSCDR_i = CDSCDR_i * (1.0 + CDSCDRN1 / NFIN * lln(1.0 + NFIN / CDSCDRN2)); end if (VSATN1 != 0.0) begin VSAT_i = VSAT_i * (1.0 + VSATN1 / NFIN * lln(1.0 + NFIN / VSATN2)); end if (VSAT1N1 != 0.0) begin VSAT1_i = VSAT1_i * (1.0 + VSAT1N1 / NFIN * lln(1.0 + NFIN / VSAT1N2)); end if (VSAT1RN1 != 0.0) begin VSAT1R_i = VSAT1R_i * (1.0 + VSAT1RN1 / NFIN * lln(1.0 + NFIN / VSAT1RN2)); end if (U0N1 != 0.0) begin U0_i = U0_i * (1.0 + U0N1 / NFIN * lln(1.0 + NFIN / U0N2)); end if ($param_given(NFINNOM)) begin PHIG_i = PHIG_i * (1.0 + (NFIN - NFINNOM) * PHIGLT * Leff) ; ETA0_i = ETA0_i * (1.0 + (NFIN - NFINNOM) * ETA0LT * Leff); U0_i = U0_i * (1.0 + (NFIN - NFINNOM) * U0LT * Leff); end if (U0N1R != 0.0) begin U0R_i = U0R_i * (1.0 + U0N1R / NFIN * lln(1.0 + NFIN / U0N2R)); end // Length Scaling PHIG_i = PHIG_i + PHIGL * Leff; if (LPA > 0.0) begin U0_i = U0_i * (1.0 - UP_i * pow(Leff, -LPA)); end else begin U0_i = U0_i * (1.0 - UP_i); end UA_i = UA_i + AUA * lexp(-Leff / BUA); UD_i = UD_i + AUD * lexp(-Leff / BUD); EU_i = EU_i + AEU * lexp(-Leff / BEU); if (ASYMMOD != 0) begin if (LPAR > 0.0) begin U0R_i = U0R_i * (1.0 - UPR_i * pow(Leff, -LPAR)); end else begin U0R_i = U0R_i * (1.0 - UPR_i); end UAR_i = UAR_i + AUAR * lexp(-Leff / BUAR); UDR_i = UDR_i + AUDR * lexp(-Leff / BUDR); EUR_i = EUR_i + AEUR * lexp(-Leff / BEUR); end if (RDSMOD == 1) begin RSW_i = RSW_i + ARSW * lexp(-Leff / BRSW); RDW_i = RDW_i + ARDW * lexp(-Leff / BRDW); end else begin RDSW_i = RDSW_i + ARDSW * lexp(-Leff / BRDSW); end PCLM_i = PCLM_i + APCLM * lexp(-Leff / BPCLM); if (ASYMMOD != 0) begin PCLMR_i = PCLMR_i + APCLMR * pow(Leff, -BPCLMR); end MEXP_i = MEXP_i + AMEXP * pow(Leff, -BMEXP); if (ASYMMOD != 0) begin MEXPR_i = MEXPR_i + AMEXPR * pow(Leff, -BMEXPR); end PTWG_i = PTWG_i + APTWG * lexp(-Leff / BPTWG); if (ASYMMOD != 0) begin PTWGR_i = PTWGR_i + APTWG * lexp(-Leff / BPTWG); end VSAT_i = VSAT_i + AVSAT * lexp(-Leff / BVSAT); VSAT1_i = VSAT1_i + AVSAT1 * lexp(-Leff / BVSAT1); if (ASYMMOD != 0) begin VSAT1R_i = VSAT1R_i + AVSAT1 * lexp(-Leff / BVSAT1); end PSAT_i = PSAT_i + APSAT * lexp(-Leff / BPSAT); PSATCV_i = PSATCV_i + APSATCV * lexp(-Leff / BPSATCV); VSATCV_i = VSATCV_i + AVSATCV * lexp(-LeffCV / BVSATCV); // Scaling for DITS Parameters DVTP0_i = DVTP0 + ADVTP0 * lexp(-Leff / BDVTP0); DVTP1_i = DVTP1 + ADVTP1 * lexp(-Leff / BDVTP1); // Geometrical Scaling for Toxeff / Charge Centroid Tcen if (QMTCENCV_i > 0.0 || QMTCENCVA_i > 0.0) begin MTcen = 1.0 + AQMTCEN * lexp(- (2.0 * Ach / Weff_UFCM) / BQMTCEN); Tcen0 = (2.0 * Ach / Weff_UFCM ) * MTcen; end // ************************************** // * Parameter Checking * // ************************************** if (LeffCV <= 1.0e-9) begin $strobe("Warning: LeffCV = %e <= 1.0e-9.", LeffCV); end if (BULKMOD != 0) begin if (LeffCV_acc <= 1.0e-9) begin $strobe("Warning: LeffCV_acc = %e <= 1.0e-9.", LeffCV_acc); end end if (Weff0 <= 1.0e-9) begin $strobe("Warning: Weff0 = %e <= 1.0e-9.", Weff0); end if (WeffCV0 <= 1.0e-9) begin $strobe("Warning: WeffCV0 = %e <= 1.0e-9.", WeffCV0); end if (NBODY_i <= 0.0) begin $strobe("Fatal: NBODY_i = %e is not positive.", NBODY_i); $finish(0); end else if (NBODY_i <= 1.0e18) begin $strobe("Warning: NBODY_i = %e m^-3 may be too small.", NBODY_i); end if (NGATE_i < 0.0) begin $strobe("Fatal: NGATE_i = %e is negative.", NGATE_i); $finish(0); end else if (NGATE_i != 0.0 && NGATE_i <= 1.0e24) begin $strobe("Warning: NGATE_i = %e may be too small.", NGATE_i); end else if (NGATE_i > 1.0e31) begin $strobe("Fatal: NGATE_i = %e is too high.", NGATE_i); $finish(0); end if (DVT0_i < 0.0) begin $strobe("Warning: DVT0_i = %e is negative.", DVT0_i); end if (PHIG_i <= 0.0) begin $strobe("Fatal: PHIG_i = %e is not positive.", PHIG_i); $finish(0); end if (VSAT_i <= 0.0) begin $strobe("Fatal: VSAT_i = %e is not positive.", VSAT_i); $finish(0); end if (VSAT1_i <= 0.0) begin $strobe("Fatal: VSAT1_i = %e is not positive.", VSAT1_i); $finish(0); end if (ASYMMOD != 0 && VSAT1R_i <= 0.0) begin $strobe("Fatal: VSAT1R_i = %e is not positive.", VSAT1R_i); $finish(0); end if (DVT1_i <= 0.0) begin $strobe("Fatal: DVT1_i = %e is not positive.", DVT1_i); $finish(0); end if (DVT1SS_i <= 0.0) begin $strobe("Fatal: DVT1SS_i = %e is not positive.", DVT1SS_i); $finish(0); end if (CDSC_i < 0.0) begin $strobe("Warning: CDSC_i = %e is negative.", CDSC_i); end if (CDSCD_i < 0.0) begin $strobe("Warning: CDSCD_i = %e is negative.", CDSCD_i); end if (ASYMMOD != 0 && CDSCDR_i < 0.0) begin $strobe("Warning: CDSCDR_i = %e is negative.", CDSCDR_i); end if (DSUB_i <= 0.0) begin $strobe("Fatal: DSUB_i = %e is not positive.", DSUB_i); $finish(0); end if (ETA0_i < 0.0) begin $strobe("Warning: ETA0_i = %e is negative, setting it to 0", ETA0_i); ETA0_i = 0.0; end if (ETA0R_i < 0.0) begin $strobe("Warning: ETA0R_i = %e is negative, setting it to 0", ETA0R_i); ETA0R_i = 0.0; end if (LPE0_i < -Leff) begin $strobe("Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0", LPE0_i); LPE0_i = 0.0; end if (K0SI_i <= 0.0) begin $strobe("Warning: K0SI_i = %e is not positive, setting it to 0.", K0SI_i); K0SI_i = 0.0; end if (K2SI_i <= 0.0) begin $strobe("Warning: K2SI_i = %e is not positive, setting it to 0.", K2SI_i); K2SI_i = 0.0; end if (PHIBE_i < 0.2 && BULKMOD != 0) begin $strobe("Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2.", PHIBE_i); PHIBE_i = 0.2; end if (PHIBE_i > 1.2 && BULKMOD != 0) begin $strobe("Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2.", PHIBE_i); PHIBE_i = 1.2; end if (PSAT_i < 2.0) begin $strobe("Warning: PSAT_i = %e is less than 2.0, setting it to 2.0.", PSAT_i); PSAT_i = 2.0; end if (PSATCV_i < 2.0) begin $strobe("Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0.", PSATCV_i); PSATCV_i = 2.0; end if (U0_i < 0.0) begin $strobe("Warning: U0_i = %e is negative, setting it to the default value.", U0_i); U0_i = 0.03; end if (UA_i < 0.0) begin $strobe("Warning: UA_i = %e is negative, setting it to 0.", UA_i); UA_i = 0.0; end if (EU_i < 0.0) begin $strobe("Warning: EU_i = %e is negative, setting it to 0.", EU_i); EU_i = 0.0; end if (UD_i < 0.0) begin $strobe("Warning: UD_i = %e is negative, setting it to 0.", UD_i); UD_i = 0.0; end if (UCS_i < 0.0) begin $strobe("Warning: UCS_i = %e is negative, setting it to 0.", UCS_i); UCS_i = 0.0; end if (ETAMOB_i < 0.0) begin $strobe("Warning: ETAMOB_i = %e is negative, setting it to 0", ETAMOB_i); ETAMOB_i = 0.0; end RDSWMIN_i = RDSWMIN; if (RDSWMIN_i < 0.0) begin $strobe("Warning: RDSWMIN = %e is negative. Set to zero", RDSWMIN_i); RDSWMIN_i = 0.0; end if (RDSW_i < 0.0) begin $strobe("Warning: RDSW_i = %e is negative. Set to zero", RDSW_i); RDSW_i = 0.0; end RSWMIN_i = RSWMIN; if (RSWMIN_i < 0.0) begin $strobe("Warning: RSWMIN = %e is negative. Set to zero", RSWMIN_i); RSWMIN_i = 0.0; end if (RSW_i < 0.0) begin $strobe("Warning: RSW_i = %e is negative. Set to zero", RSW_i); RSW_i = 0.0; end RDWMIN_i = RDWMIN; if (RDWMIN_i < 0.0) begin $strobe("Warning: RDWMIN = %e is negative. Set to zero", RDWMIN_i); RDWMIN_i = 0.0; end if (RDW_i < 0) begin $strobe("Warning: RDW_i = %e is negative. Set to zero", RDW_i); RDW_i = 0.0; end if (PRWGD_i < 0.0) begin $strobe("Warning: PRWGD_i = %e is negative. Set to zero", PRWGD_i); PRWGD_i = 0.0; end if (PRWGS_i < 0.0) begin $strobe("Warning: PRWGS_i = %e is negative. Set to zero", PRWGS_i); PRWGS_i = 0.0; end if (PCLM_i < 0) begin $strobe("Warning: PCLM_i = %e is negative.", PCLM_i); end if (PDIBL1_i < 0.0) begin $strobe("Warning: PDIBL1_i = %e is negative.", PDIBL1_i); end if (ASYMMOD != 0) begin if (PDIBL1R_i < 0.0) begin $strobe("Warning: PDIBL1R_i = %e is negative.", PDIBL1R_i); end if (PDIBL2R_i < 0.0) begin $strobe("Warning: PDIBL2R_i = %e is negative.", PDIBL2R_i); end if (U0R_i < 0) begin $strobe("Warning: U0R_i = %e is negative, setting it to 0.", U0R_i); U0R_i = 0.0; end if (UAR_i < 0.0) begin $strobe("Warning: UAR_i = %e is negative, setting it to 0.", UAR_i); UAR_i = 0.0; end if (EUR_i < 0.0) begin $strobe("Warning: EUR_i = %e is negative, setting it to 0.", EUR_i); EUR_i = 0.0; end if (UDR_i < 0.0) begin $strobe("Warning: UDR_i = %e is negative, setting it to 0.", UDR_i); UDR_i = 0.0; end end if (PDIBL2_i < 0.0) begin $strobe("Warning: PDIBL2_i = %e is negative.", PDIBL2_i); end if (DROUT_i <= 0.0) begin $strobe("Fatal: DROUT_i = %e is non-positive.", DROUT_i); $finish(0); end if (MEXP_i < 2.0) begin $strobe("Warning: MEXP_i = %e < 2. Setting MEXP_i = 2.", MEXP_i); MEXP_i = 2.0; end if (ASYMMOD != 0) begin if (MEXPR_i < 2.0) begin $strobe("Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2.", MEXPR_i); MEXPR_i = 2.0; end end if (PTWG_i < 0) begin $strobe("Warning: PTWG_i = %e is negative, setting it to 0.", PTWG_i ); PTWG_i = 0.0; end if (QMTCENCV_i > 0.0) begin if (QM0 <= 0.0) begin $strobe("Fatal: QM0 = %e is non-positive.", QM0); $finish(0); end end if (BULKMOD != 0 && QMTCENCVA_i > 0.0) begin if (QM0ACC <= 0.0) begin $strobe("Fatal: QM0ACC = %e is non-positive.", QM0ACC); $finish(0); end end if (CGIDL_i < 0.0) begin $strobe("Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0.", CGIDL_i); CGIDL_i = 0.0; end if (CGISL_i < 0.0) begin $strobe("Warning: CGISL_i = %e < 0. Setting CGISL_i = 0.", CGISL_i); CGISL_i = 0.0; end if (IGBMOD != 0) begin if (NIGBINV_i <= 0.0) begin $strobe("Fatal: NIGBINV_i = %e is non-positive.", NIGBINV_i); $finish(0); end if (NIGBACC_i <= 0.0) begin $strobe("Fatal: NIGBACC_i = %e is non-positive.", NIGBACC_i); $finish(0); end end if (IGCMOD != 0) begin if (POXEDGE_i <= 0.0) begin $strobe("Fatal: POXEDGE_i = %e is non-positive.", POXEDGE_i); $finish(0); end if (PIGCD_i <= 0.0) begin $strobe("Fatal: PIGCD_i = %e is non-positive.", PIGCD_i); $finish(0); end end if (IGCMOD != 0 || IGBMOD != 0) begin if (TOXREF <= 0) begin $strobe("Fatal: TOXREF = %e is non-positive.", TOXREF); $finish(0); end end if (LINTIGEN >= (Leff / 2.0)) begin $strobe("Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0.", LINTIGEN); LINTIGEN_i = 0.0; end else begin LINTIGEN_i = LINTIGEN; end if (NTGEN_i <= 0.0) begin $strobe("Fatal: NTGEN_i = %e is non-positive.", NTGEN_i); $finish(0); end `ifdef __NQSMOD1__ if (NQSMOD == 1 && XRCRG1_i != 0.0 && XRCRG1_i < 1.0e-3) begin $strobe("Warning: XRCRG1_i = %e. Gate resistance may be too large. Disabling NQS Gate Resistance.", XRCRG1_i); XRCRG1_i = 0.0; end `endif if (IIMOD == 2) begin if (BETAII0_i < 0.0) begin $strobe("Warning: BETAII0_i = %e is negative.",BETAII0_i); end if (BETAII1_i < 0.0) begin $strobe("Warning: BETAII1_i = %e is negative.", BETAII1_i); end if (BETAII2_i < 0.0) begin $strobe("Warning: BETAII2_i = %e is negative.", BETAII2_i); end if (ESATII_i < 0.0) begin $strobe("Warning: ESATII_i = %e is negative.", ESATII_i); end if (LII_i < 0.0) begin $strobe("Warning: LII_i = %e is negative.", LII_i); end if (SII1_i < 0.0) begin $strobe("Warning: SII1_i = %e is negative.", SII1); end if (SII2_i < 0.0) begin $strobe("Warning: SII2_i = %e is negative.", SII2_i); end if (SIID_i < 0.0) begin $strobe("Warning: SIID_i = %e is negative.", SIID_i); end end if (EF <= 0.0) begin $strobe("Fatal: EF = %e is non-positive.", EF); $finish(0); end else if (EF > 2.0) begin $strobe("Fatal: EF = %e > 2.0.", EF); $finish(0); end if (LINTNOI >= (Leff / 2.0)) begin $strobe("Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0.", LINTNOI); LINTNOI_i = 0.0; end else begin LINTNOI_i = LINTNOI; end if (NTNOI < 0) begin $strobe("Warning: NTNOI = %e is negative. Set to zero.", NTNOI); NTNOI_i = 0.0; end else begin NTNOI_i = NTNOI; end // Self-Heating `ifdef __SHMOD__ if (SHMOD != 0 && RTH0 > 0.0) begin T1y = WTH0; if (BSHEXP != 0.0) begin T1y = WTH0 * pow(NF, BSHEXP); end T2y = FPITCH; if (ASHEXP != 0.0) begin T2y = FPITCH * pow(NFINtotal, ASHEXP); end gth = (T1y + T2y)/ RTH0; cth = CTH0 * (T1y + T2y); end else begin gth = 1.0; cth = 0.0; end `else if (SHMOD != 0) begin $strobe("Although the model selector SHMOD is set to 1, the self heating model is not activated in the Verilog-A code. Please uncomment \"`define __SHMOD__\" in bsimcmg.va to activate it."); end `endif // Gate Electrode Resistance `ifdef __RGATEMOD__ if (RGATEMOD != 0) begin Rgeltd = (RGEXT / NGCON + (RGFIN * NFIN) / (NGCON == 2 ? 12.0 : 3.0)) / NF; ggeltd = 1.0 / max(1.0e-3, Rgeltd); end `else if (RGATEMOD != 0) $strobe("Although the model selector RGATEMOD is set to 1, the gate electrode resistance model is not activated in the Verilog-A code. Please uncomment \"`define __RGATEMOD__\" in bsimcmg.va to activate it."); `endif // Geometry-Dependent Source/Drain Resistance if (RGEOMOD == 0) begin RSourceGeo = RSHS * NRS; RDrainGeo = RSHD * NRD; end else begin // Area and perimeter calculation if (HEPI > 0.0) begin Arsd = FPITCH * HFIN + (TFIN + (FPITCH - TFIN) * CRATIO) * HEPI; end else begin Arsd = FPITCH * max(1.0e-9, HFIN + HEPI); end Prsd = FPITCH + DELTAPRSD; // Resistivity Calculation if ($param_given(RHORSD)) begin rhorsd = RHORSD; end else begin mu_max = (TYPE == `ntype) ? 1417.0 : 470.5; if (TYPE == `ntype) begin mu_rsd = (52.2 + (mu_max - 52.2) / (1.0 + pow(NSD / 9.68e22, 0.680)) - 43.4 / (1.0 + pow(3.43e26 / NSD, 2.0))) * 1.0e-4; end else begin mu_rsd = (44.9 + (mu_max - 44.9) / (1.0 + pow(NSD / 2.23e22, 0.719)) - 29.0 / (1.0 + pow(6.10e26 / NSD, 2.0))) * 1.0e-4; end rhorsd = 1.0 / (`q * NSD * mu_rsd); end // Component: Spreading Resistance (extension -> hdd) thetarsp = 55.0 * `M_PI / 180.0; afin = min(Arsd, max(1.0e-18, TFIN * (HFIN + min(0.0, HEPI)))); T1y = `COT(thetarsp); Rsp = rhorsd * T1y / (sqrt(`M_PI) * NFIN) * (1.0 / sqrt(afin) - 2.0 / sqrt(Arsd) + sqrt(afin / (Arsd*Arsd))); // Component: Contact Resistance arsd_total = Arsd * NFIN + ARSDEND; prsd_total = Prsd * NFIN + PRSDEND; lt = sqrt(RHOC * arsd_total / (rhorsd * prsd_total)); alpha = LRSD / lt; T0y = lexp(alpha + alpha); if (SDTERM == 1.0) begin eta = rhorsd * lt / RHOC; T1y = T0y * (1.0 + eta); T2y = T1y + 1.0 - eta; T3y = T1y - 1.0 + eta; end else begin T2y = T0y + 1.0; T3y = T0y - 1.0; end RrsdTML = rhorsd * lt * T2y / (arsd_total * T3y); if (HEPI < -1.0e-10) begin Rrsdside = RHOC / (-HEPI * TFIN * NFIN); Rrsd = (RrsdTML + Rsp) * Rrsdside / ((RrsdTML + Rsp) + Rrsdside); end else begin Rrsd = RrsdTML + Rsp; end Rdsgeo = Rrsd / NF * max(0.0, RGEOA + RGEOB * TFIN + RGEOC * FPITCH + RGEOD * LRSD + RGEOE * HEPI); RSourceGeo = Rdsgeo; RDrainGeo = Rdsgeo; end // Clamping of Source/Drain Resistances if (RSourceGeo <= 1.0e-3) begin RSourceGeo = 1.0e-3; end if (RDrainGeo <= 1.0e-3) begin RDrainGeo = 1.0e-3; end if (RDSMOD == 1) begin if (RSWMIN_i <= 0.0) begin RSWMIN_i = 0.0; end if (RDWMIN_i <= 0.0) begin RDWMIN_i = 0.0; end if (RSW_i <= 0.0) begin RSW_i = 0.0; end if (RDW_i <= 0.0) begin RDW_i = 0.0; end end else begin if (RDSWMIN_i <= 0.0) begin RDSWMIN_i = 0.0; end if (RDSW_i <= 0.0) begin RDSW_i = 0.0; end end // End of Clamping of Source/Drain Resistances if (CGEOMOD != 1) begin if ($param_given(CGSO)) begin CGSO_i = CGSO; end else begin if ($param_given(DLC) && DLC > 0.0) begin CGSO_i = max(0.0, DLC * cox - CGSL_i); end else begin CGSO_i = 0.3 * TFIN * cox; end end if ($param_given(CGDO)) begin CGDO_i = CGDO; end else begin if ($param_given(DLC) && DLC > 0.0) begin CGDO_i = max(0.0, DLC * cox - CGDL_i); end else begin CGDO_i = 0.3 * TFIN * cox; end end end // Parasitic Source/Drain to Gate Fringe Capacitance Model if (CGEOMOD == 2) begin if ($param_given(LSP)) LSP_i = LSP; else LSP_i = 0.2*(L + XL); Hg = TGATE + TMASK; Trsd = 0.5 * (FPITCH - TFIN); Wg = max(0.0, Trsd - TOXP); Hrsd = max(0.0, HEPI + TSILI); // Top Component if (TMASK > 0.0) begin // Capacitance Model by Chung-Hsun Lin (IBM) T0y = 3.467e-11 * lln(1.0e-7 * EPSRSP / (3.9 * LSP_i)); T1y = 0.942 * Hrsd * epssp / LSP_i; Cgg_top = (T0y + T1y) * (TFIN + (FPITCH - TFIN) * CRATIO); end else begin `Cfringe_2d(cfr_top_trigate, Hg, Hrsd, LSP_i, TFIN, LRSD, Lg, TOXP, 0.85, Cgg_top) end // Side Component if (TMASK > 0) begin `Cfringe_2d(cfr_side_dblgate, Wg, Trsd, LSP_i, HFIN, LRSD, Lg, TOXP, 0.70, Cgg_side) end else begin `Cfringe_2d(cfr_side_trigate, Wg, Trsd, LSP_i, HFIN, LRSD, Lg, TOXP, 0.85, Cgg_side) end // Corner Component if (TMASK > 0.0) begin Acorner = 0.0; end else begin if (HEPI > 0.0) begin Acorner = (FPITCH - TFIN) * (HEPI * CRATIO + TSILI); end else begin Acorner = (FPITCH - TFIN) * Hrsd; end end Ccorner = (NFIN * Acorner + ARSDEND + ASILIEND) * epssp / LSP_i; Cfr_geo = (Ccorner + Cgg_top * NFIN + CGEOE * Cgg_side * NFIN * 2.0) * NF; Cfr_geo = Cfr_geo * max(0.0, CGEOA + CGEOB * TFIN + CGEOC * FPITCH + CGEOD * LRSD); end // Source/Gate/Drain-to-Substrate Parasitic Capacitances T0y = CSDESW * lln(1.0 + HFIN / EOTBOX); csbox = cbox * ASEO + T0y * max(0.0, PSEO - FPITCH * NFINtotal); cdbox = cbox * ADEO + T0y * max(0.0, PDEO - FPITCH * NFINtotal); cgbox = (CGBO * NF * NGCON + CGBN * NFINtotal) * Lg; // Mobility Degradation EeffFactor = 1.0e-8 / (epsratio * (EOT)); WeffWRFactor = 1.0 / (pow((Weff0) * 1.0e6, WR_i) * NFINtotal); litl = sqrt(epsratio * EOT * 0.5 * TFIN); if (!$param_given(THETASCE)) begin tmp = DVT1_i * Leff / scl + 1.0e-6; if (tmp < 40.0) begin Theta_SCE = 0.5 / (cosh(tmp) - 1.0); end else begin Theta_SCE = exp(-tmp); end end else begin Theta_SCE = THETASCE; end if (!$param_given(THETASW)) begin tmp = DVT1SS_i * Leff / scl + 1.0e-6; if (tmp < 40.0) begin Theta_SW = 0.5 / (cosh(tmp) - 1.0); end else begin Theta_SW = exp(-tmp); end end else begin Theta_SW = THETASW; end if (!$param_given(THETADIBL)) begin tmp = DSUB_i * Leff / scl + 1.0e-6; if (tmp < 40.0) begin Theta_DIBL = 0.5 / (cosh(tmp) - 1.0); end else begin Theta_DIBL = exp(-tmp); end end else begin Theta_DIBL = THETADIBL; end Theta_RSCE = sqrt(1.0 + LPE0_i / Leff) - 1.0; tmp = DSUB_i * Leff / scl + 1.0e-6; if (tmp < 40.0) begin T0y = 1.0 / max((1.0 + DVTP2 * (cosh(tmp) - 2.0)), 1.0e-6); end else begin T0y = exp(-tmp) / max((exp(-tmp) + DVTP2), 1.0e-6); end Theta_DITS = T0y; nbody = NBODY_i; qbs = `q * nbody * Ach / Cins; // Gate Current if (TYPE == `ntype) begin Aechvb = 4.97232e-7; // NMOS Bechvb = 7.45669e11; // NMOS end else begin Aechvb = 3.42537e-7; // PMOS Bechvb = 1.16645e12; // PMOS end T0y = TOXG * TOXG; T1y = TOXG * POXEDGE_i; T2y = T1y * T1y; Toxratio = lexp(NTOX_i * lln(TOXREF / TOXG)) / T0y; Toxratioedge = lexp(NTOX_i * lln(TOXREF / T1y)) / T2y; igsd_mult0 = Weff0 * Aechvb * Toxratioedge; if (TNOM < -`P_CELSIUS0) begin $strobe("Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C.", TNOM); Tnom = `REFTEMP; end else begin Tnom = TNOM + `CONSTCtoK; end end // initial_step // ************************************************ // * Temperature Dependence Calculations * // ************************************************ `ifdef __SHMOD__ if (SHMOD != 0 && RTH0 > 0.0) begin DevTemp = $temperature + Temp(rth_branch) + DTEMP; end else begin `endif DevTemp = $temperature + DTEMP; `ifdef __SHMOD__ end `endif begin : CMGTempDepCalc TRatio = DevTemp / Tnom; delTemp = DevTemp - Tnom; Vtm = `KboQ * DevTemp; Vtm0 = `KboQ * Tnom; Eg = BG0SUB - TBGASUB * DevTemp * DevTemp / (DevTemp + TBGBSUB); Eg0 = BG0SUB - TBGASUB * Tnom * Tnom / (Tnom + TBGBSUB); T1 = (DevTemp / 300.15) * sqrt(DevTemp / 300.15); ni = NI0SUB * T1 * lexp(BG0SUB / (2.0 * `KboQ * 300.15) - Eg / (2.0 * Vtm)); Nc = NC0SUB * T1; ThetaSS = hypsmooth(1.0 + TSS_i * delTemp - 1.0e-6, 1.0e-3); // Quantum Mechanical Vth Correction (Ref: Trivedi et al., EDL 2005) kT = Vtm * `q; T0y = `HBAR * `M_PI / (2*Ach/Weff_UFCM ); E0 = T0y * T0y / (2.0 * mx); E0prime = T0y * T0y / (2.0 * mxprime); E1 = 4.0 * E0; E1prime = 4.0 * E0prime; T1 = gprime * mdprime / (gfactor * md); gam0 = 1.0 + T1 * lexp((E0 - E0prime) / kT); gam1 = gam0 + lexp((E0 - E1) / kT) + T1 * lexp((E0 - E1prime) / kT); T2 = -Vtm * lln(gfactor * md / (`M_PI * `HBAR * `HBAR * Nc) * kT / (2.0 * Ach / Weff_UFCM) * gam1); dvch_qm = QMFACTOR_i * (E0 / `q + T2); // Temperature Dependence ETA0_t = Tempdep(ETA0_i, TETA0, delTemp, TEMPMOD); ETA0R_t = Tempdep(ETA0R_i, TETA0R, delTemp, TEMPMOD); T1 = U0_i * pow(TRatio, UTE_i); U0_t = T1 + hypmax(UTL_i * delTemp, -0.9 * T1, 1.0e-4); u0 = U0_t; if (ASYMMOD == 1) begin T1 = U0R_i * pow(TRatio, UTER_i); U0R_t = T1 + hypmax(UTLR_i * delTemp, -0.9 * T1, 1.0e-4); u0r = U0R_t; end ETAMOB_t = Tempdep(ETAMOB_i, EMOBT_i, delTemp, TEMPMOD); UA_t = UA_i + hypmax(UA1_i*delTemp, -UA_i, 1.0e-6); if (ASYMMOD != 0) begin UAR_t = UAR_i + hypmax(UA1R_i * delTemp, -UAR_i, 1.0e-6); end if (BULKMOD != 0) begin if (TEMPMOD == 0) begin UC_t = Tempdep(UC_i, UC1_i, delTemp, 0); if (ASYMMOD != 0) begin UCR_t = Tempdep(UCR_i, UC1R_i, delTemp, 0); end end else begin UC_t = UC_i + UC1_i * delTemp; if (ASYMMOD != 0) begin UCR_t = UCR_i + UC1R_i * delTemp; end end end UD_t = UD_i * pow(TRatio, UD1_i); if (ASYMMOD != 0) begin UDR_t = UDR_i * pow(TRatio, UD1R_i); end UCS_t = UCS_i * pow(TRatio, UCSTE_i); rdstemp = hypsmooth(1.0 + PRT_i * delTemp - 1.0e-6, 1.0e-3); RSDR_t = Tempdep(RSDR, TRSDR, delTemp, TEMPMOD); if (ASYMMOD != 0) begin RSDRR_t = Tempdep(RSDRR, TRSDR, delTemp, TEMPMOD); end RDDR_t = Tempdep(RDDR, TRDDR, delTemp, TEMPMOD); if (ASYMMOD != 0) begin RDDRR_t = Tempdep(RDDRR, TRDDR, delTemp, TEMPMOD); end VSAT_t = Tempdep(VSAT_i, -AT_i, delTemp, TEMPMOD); if (VSAT_t < 1000) begin $strobe("Warning: VSAT(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT_t); VSAT_t = 1000; end if (ASYMMOD != 0) begin VSATR_t = Tempdep(VSATR_i, -ATR_i, delTemp, TEMPMOD); if (VSATR_t < 1000) begin $strobe("Warning: VSATR(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSATR_t); VSATR_t = 1000; end end VSAT1_t = Tempdep(VSAT1_i, -AT_i, delTemp, TEMPMOD); if (VSAT1_t < 1000) begin $strobe("Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT1_t); VSAT1_t = 1000; end if (ASYMMOD != 0) begin VSAT1R_t = Tempdep(VSAT1R_i, -AT_i, delTemp, TEMPMOD); if (VSAT1R_t < 1000) begin $strobe("Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSAT1R_t); VSAT1R_t = 1000; end end VSATCV_t = Tempdep(VSATCV_i, -ATCV_i, delTemp, TEMPMOD); if (VSATCV_t < 1000) begin $strobe("Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K.", DevTemp, VSATCV_t); VSATCV_t = 1000; end MEXP_t = hypsmooth(MEXP_i * (1.0 + TMEXP * delTemp) - 2.0, 1.0e-3) + 2.0; if (ASYMMOD != 0) begin MEXPR_t = hypsmooth(MEXPR_i * (1.0 + TMEXPR * delTemp) - 2.0, 1.0e-3) + 2.0; end PTWG_t = Tempdep(PTWG_i, -PTWGT_i, delTemp, TEMPMOD); if (ASYMMOD != 0) begin PTWGR_t = Tempdep(PTWGR_i, -PTWGT_i, delTemp, TEMPMOD); end dvth_temp = (KT1_i + KT1L / Leff) * (TRatio - 1.0); BETA0_t = BETA0_i * pow(TRatio, IIT_i); SII0_t = SII0_i * (hypsmooth(1.0 + TII_i * (TRatio - 1.0) - 0.01, 1.0e-3) + 0.01); K0_t = K0_i + K01_i * delTemp; K0SI_t = K0SI_i + hypmax(K0SI1_i * delTemp, -K0SI_i, 1.0e-6); K2SI_t = K2SI_i + hypmax(K2SI1_i * delTemp, -K2SI_i, 1.0e-6); K1_t = K1_i + hypmax(K11_i * delTemp, -K1_i, 1.0e-6); K2SAT_t = K2SAT_i + K2SAT1_i * delTemp; A1_t = A1_i + A11_i * delTemp; A2_t = A2_i + A21_i * delTemp; K2_t = K2_i + hypmax(K21_i * delTemp, -K2_i, 1.0e-6); K0SISAT_t = K0SISAT_i + K0SISAT1_i * delTemp; K2SISAT_t = K2SISAT_i + K2SISAT1_i * delTemp; AIGBINV_t = AIGBINV_i + hypmax(AIGBINV1_i * delTemp, -AIGBINV_i, 1.0e-6); AIGBACC_t = AIGBACC_i + hypmax(AIGBACC1_i * delTemp, -AIGBACC_i, 1.0e-6); AIGC_t = AIGC_i + hypmax(AIGC1_i * delTemp, -AIGC_i, 1.0e-6); AIGS_t = AIGS_i + hypmax(AIGS1_i * delTemp, -AIGS_i, 1.0e-6); AIGD_t = AIGD_i + hypmax(AIGD1_i * delTemp, -AIGD_i, 1.0e-6); BGIDL_t = BGIDL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); BGISL_t = BGISL_i * hypsmooth(1.0 + TGIDL_i * delTemp - 1.0e-6, 1.0e-3); ALPHA0_t = ALPHA0_i + hypmax(ALPHA01 * delTemp, -ALPHA0_i, 1.0e-6); ALPHA1_t = ALPHA1_i + hypmax(ALPHA11 * delTemp, -ALPHA1_i, 1.0e-6); ALPHAII0_t = ALPHAII0_i + hypmax(ALPHAII01 * delTemp, -ALPHAII0_i, 1.0e-25); ALPHAII1_t = ALPHAII1_i + hypmax(ALPHAII11 * delTemp, -ALPHAII1_i, 1.0e-20); igtemp = lexp(IGT_i * lln(TRatio)); igsd_mult = igsd_mult0 * igtemp; if (BULKMOD != 0) begin CJS_t = Tempdep(CJS, TCJ, delTemp, TEMPMOD); CJD_t = Tempdep(CJD, TCJ, delTemp, TEMPMOD); CJSWS_t = Tempdep(CJSWS, TCJSW, delTemp, TEMPMOD); CJSWD_t = Tempdep(CJSWD, TCJSW, delTemp, TEMPMOD); CJSWGS_t = Tempdep(CJSWGS, TCJSWG, delTemp, TEMPMOD); CJSWGD_t = Tempdep(CJSWGD, TCJSWG, delTemp, TEMPMOD); PBS_t = hypsmooth(PBS - TPB * delTemp - 0.01, 1.0e-3) + 0.01; PBD_t = hypsmooth(PBD - TPB * delTemp - 0.01, 1.0e-3) + 0.01; PBSWS_t = hypsmooth(PBSWS - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; PBSWD_t = hypsmooth(PBSWD - TPBSW * delTemp - 0.01, 1.0e-3) + 0.01; PBSWGS_t = hypsmooth(PBSWGS - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; PBSWGD_t = hypsmooth(PBSWGD - TPBSWG * delTemp - 0.01, 1.0e-3) + 0.01; T0 = Eg0 / Vtm0 - Eg / Vtm; T1 = lln(TRatio); T3 = lexp((T0 + XTIS * T1) / NJS); JSS_t = JSS * T3; JSWS_t = JSWS * T3; JSWGS_t = JSWGS * T3; T3 = lexp((T0 + XTID * T1) / NJD); JSD_t = JSD * T3; JSWD_t = JSWD * T3; JSWGD_t = JSWGD * T3; JTSS_t = JTSS * lexp(Eg0 * XTSS * (TRatio - 1.0) / Vtm); JTSD_t = JTSD * lexp(Eg0 * XTSD * (TRatio - 1.0) / Vtm); JTSSWS_t = JTSSWS * lexp(Eg0 * XTSSWS * (TRatio - 1.0) / Vtm); JTSSWD_t = JTSSWD * lexp(Eg0 * XTSSWD * (TRatio - 1.0) / Vtm); JTSSWGS_t = JTSSWGS * (sqrt(JTWEFF / Weff0) + 1.0) * lexp(Eg0 * XTSSWGS * (TRatio - 1.0) / Vtm); JTSSWGD_t = JTSSWGD * (sqrt(JTWEFF / Weff0) + 1.0) * lexp(Eg0 * XTSSWGD * (TRatio - 1.0) / Vtm); // All NJT's Smoothed to 0.01 to Prevent Divide-by-zero / Negative Values NJTS_t = hypsmooth(NJTS * (1.0 + TNJTS * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; NJTSD_t = hypsmooth(NJTSD * (1.0 + TNJTSD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSW_t = hypsmooth(NJTSSW * (1.0 + TNJTSSW * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWD_t = hypsmooth(NJTSSWD * (1.0 + TNJTSSWD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWG_t = hypsmooth(NJTSSWG * (1.0 + TNJTSSWG * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; NJTSSWGD_t = hypsmooth(NJTSSWGD * (1.0 + TNJTSSWGD * (TRatio-1.0)) - 0.01, 1.0e-3) + 0.01; end if (!$param_given(VFBSD)) begin if (NGATE > 0.0) begin vfbsd = devsign * (hypsmooth(0.5 * Eg - Vtm * lln(NGATE / ni), 1.0e-4) - (0.5 * Eg - devsign * (0.5 * Eg - hypsmooth(0.5 * Eg - Vtm * lln(NSD / ni), 1.0e-4)))); end else begin vfbsd = devsign * (PHIG_i - (EASUB + 0.5 * Eg - devsign * (0.5 * Eg - hypsmooth(0.5 * Eg - Vtm * lln(NSD / ni), 1.0e-4)))); end end else begin vfbsd = VFBSD; end if (!$param_given(VFBSDCV)) begin vfbsdcv = vfbsd; end else begin vfbsdcv = VFBSDCV; end `ifdef __SHMOD__ if (SHMOD != 0 && RTH0 > 0.0) begin T0 = Vtm * lln(nbody / ni); phib = sqrt(T0 * T0 + 1.0e-6); end else begin phib = Vtm * lln(nbody / ni); end `else phib = Vtm * lln(nbody/ni); `endif `ifdef __SHMOD__ if (SHMOD != 0 && RTH0 > 0.0) begin T0 = Vtm * lln(nbody * NSD / (ni * ni)); vbi = sqrt(T0 * T0 + 1.0e-6); end else begin vbi = Vtm * lln(nbody * NSD / (ni * ni)); end `else vbi = Vtm * lln(nbody * NSD / (ni * ni)); `endif // deltaPhi definition and Polysilicon Depletion // deltaPhi: workfunction difference between the gate and the n+ source. deltaPhi = devsign*(PHIG_i - (EASUB + (TYPE == `ntype ? 0 : Eg))); // Mobility Degradation eta_mu = 0.5 * ETAMOB_t; eta_mu_cv = 0.5; if ( TYPE != `ntype ) begin eta_mu = 1.0 / 3.0 * ETAMOB_t; eta_mu_cv = 1.0 / 3.0; end // Junction Current and Capacitance if (BULKMOD != 0) begin // Source-Side Junction Current Isbs = ASEJ * JSS_t + PSEJ * JSWS_t + TFIN * NFINtotal * JSWGS_t; if (Isbs > 0.0) begin Nvtms = Vtm * NJS; XExpBVS = lexp(-BVS / Nvtms) * XJBVS; T2 = max(IJTHSFWD / Isbs, 10.0); Tb = 1.0 + T2 - XExpBVS; VjsmFwd = Nvtms * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVS))); T0 = lexp(VjsmFwd / Nvtms); IVjsmFwd = Isbs * (T0 - XExpBVS / T0 + XExpBVS - 1.0); SslpFwd = Isbs * (T0 + XExpBVS / T0) / Nvtms; T2 = hypsmooth(IJTHSREV / Isbs - 10.0, 1.0e-3) + 10.0; VjsmRev = -BVS - Nvtms * lln((T2 - 1.0) / XJBVS); T1 = XJBVS * lexp(-(BVS + VjsmRev) / Nvtms); IVjsmRev = Isbs * (1.0 + T1); SslpRev = -Isbs * T1 / Nvtms; end // Drain-Side Junction Current Isbd = ADEJ * JSD_t + PDEJ * JSWD_t + TFIN * NFINtotal * JSWGD_t; if (Isbd > 0.0) begin Nvtmd = Vtm * NJD; XExpBVD = lexp(-BVD / Nvtmd) * XJBVD; T2 = max(IJTHDFWD / Isbd, 10.0); Tb = 1.0 + T2 - XExpBVD; VjdmFwd = Nvtmd * lln(0.5 * (Tb + sqrt(Tb * Tb + 4.0 * XExpBVD))); T0 = lexp(VjdmFwd / Nvtmd); IVjdmFwd = Isbd * (T0 - XExpBVD / T0 + XExpBVD - 1.0); DslpFwd = Isbd * (T0 + XExpBVD / T0) / Nvtmd; T2 = hypsmooth(IJTHDREV / Isbd - 10.0, 1.0e-3) + 10.0; VjdmRev = -BVD - Nvtmd * lln((T2 - 1.0) / XJBVD); T1 = XJBVD * lexp(-(BVD + VjdmRev) / Nvtmd); IVjdmRev = Isbd * (1.0 + T1); DslpRev = -Isbd * T1 / Nvtmd; end // Junction Capacitance Czbs = CJS_t * ASEJ; Czbssw = CJSWS_t * PSEJ; Czbsswg = CJSWGS_t * Weff0 * NFINtotal; Czbd = CJD_t * ADEJ; Czbdsw = CJSWD_t * PDEJ; Czbdswg = CJSWGD_t * Weff0 * NFINtotal; end // Generation-Recombination Current T0 = Eg / Vtm * (TRatio - 1.0); T1 = T0 / NTGEN_i; igentemp = lexp(T1); end // End of temperature dependent calculations // ************************************************ // * Bias dependent calculations follow * // ************************************************ // Load Terminal Voltages vgs_noswap = devsign * V(`IntrinsicGate, si); vds_noswap = devsign * V(di, si); vgd_noswap = devsign * V(`IntrinsicGate, di); ves_jct = devsign * V(e, si); ved_jct = devsign * V(e, di); vge = devsign * V(`IntrinsicGate, e); // Source-Drain Interchange sigvds = 1.0; if (vds_noswap < 0.0) begin sigvds = -1.0; vgs = vgs_noswap - vds_noswap; vds = -1.0 * vds_noswap; ves = ved_jct; end else begin vgs = vgs_noswap; vds = vds_noswap; ves = ves_jct; end vgsfb = vgs - deltaPhi; // Initialize Certain Variables to Zero to Prevent Unnecessary Update etaiv = 0.0; Qes = 0.0; Qesj = 0.0; Qeg = 0.0; Qed = 0.0; Qedj = 0.0; // Vds Smoothing vdsx = sqrt (vds * vds + 0.01) - 0.1; // Ves Smoothing if (BULKMOD != 0) begin vesx = ves - 0.5 * (vds - vdsx); vesmax = 0.95 * PHIBE_i; T2 = vesmax - vesx - 1.0e-3; veseff = vesmax - 0.5 * (T2 + sqrt(T2 * T2 + 0.004 * vesmax)); end // Asymmetry Model T0 = tanh(0.6 * vds_noswap / Vtm); wf = 0.5 + 0.5 * T0; wr = 1.0 - wf; if (ASYMMOD != 0) begin CDSCD_a = CDSCDR_i * wr + CDSCD_i * wf; ETA0_a = ETA0R_t * wr + ETA0_t * wf; PDIBL1_a = PDIBL1R_i * wr + PDIBL1_i * wf; PDIBL2_a = PDIBL2R_i * wr + PDIBL2_i * wf; MEXP_a = MEXPR_t * wr + MEXP_t * wf; PTWG_a = PTWGR_t * wr + PTWG_t * wf; VSAT1_a = VSAT1R_t * wr + VSAT1_t * wf; RSDR_a = RSDRR_t * wr + RSDR_t * wf; RDDR_a = RDDRR_t * wr + RDDR_t * wf; PCLM_a = PCLMR_i * wr + PCLM_i * wf; VSAT_a = VSATR_t * wr + VSAT_t * wf; KSATIV_a = KSATIVR_i * wr + KSATIV_i * wf; DVTSHIFT_a = DVTSHIFTR_i * wr + DVTSHIFT_i * wf; CIT_a = CITR_i * wr + CIT_i * wf; u0_a = u0r * wr + u0 * wf; UA_a = UAR_t*wr + UA_t * wf; UD_a = UDR_t * wr + UD_t * wf; UC_a = UCR_t * wr + UC_t * wf; EU_a = EUR_i * wr + EU_i * wf; end else begin CDSCD_a = CDSCD_i; ETA0_a = ETA0_t; PDIBL1_a = PDIBL1_i; PDIBL2_a = PDIBL2_i; MEXP_a = MEXP_t; PTWG_a = PTWG_t; VSAT1_a = VSAT1_t; RSDR_a = RSDR_t; RDDR_a = RDDR_t; PCLM_a = PCLM_i; VSAT_a = VSAT_t; KSATIV_a = KSATIV_i; DVTSHIFT_a = DVTSHIFT_i; CIT_a = CIT_i; u0_a = u0; UA_a = UA_t; UD_a = UD_t; UC_a = UC_t; EU_a = EU_i; end // Drain Saturation Voltage inv_MEXP = 1.0 / MEXP_a; // SCE, DIBL, SS Degradation Effects (Ref: BSIM4 Model) phist = 0.4 + phib + PHIN_i; T1 = 2.0 * (Cins / Weff_UFCM) / (rc + 2.0); cdsc = Theta_SW * (CDSC_i + CDSCD_a * vdsx); if (!$param_given(NVTM)) nVtm = Vtm * ThetaSS * (1.0 + (CIT_a + cdsc) / T1); else nVtm = NVTM; // temp deped UFCM qdep = Qdep_ov_Cins / nVtm; vth_fixed_factor_SI = ln(Cins * nVtm/(`q * Nc * 2.0 * Ach)); vth_fixed_factor_Sub = ln((qdep * rc) * (qdep * rc) / ((exp(qdep * rc) - qdep * rc - 1.0))) + vth_fixed_factor_SI; q0 = 10.0 * nVtm / rc + 2.0 * qbs; // New QM parameter calculation: fieldnormalizationfactor, auxQMfact, QMFACTORCVfinal fieldnormalizationfactor = Vtm * Cins / (Weff_UFCM * epssub); auxQMfact = pow(((3.0 / 4.0) * 3.0 * `HBAR * 2.0 * `M_PI * `q / (4.0 * sqrt(2.0 * mx))), 2.0 / 3.0); QMFACTORCVfinal = QMFACTORCV * auxQMfact * pow(fieldnormalizationfactor, 2.0 / 3.0) * (1/(`q * Vtm)); dvth_vtroll = -DVT0_i * Theta_SCE * (vbi - phist); dvth_dibl = -ETA0_a * Theta_DIBL * vdsx + (DVTP0_i * Theta_DITS * pow(vdsx, DVTP1_i)); dvth_rsce = K1RSCE_i * Theta_RSCE * sqrt(phist); dvth_all = dvth_vtroll + dvth_dibl + dvth_rsce + dvth_temp + DVTSHIFT_a; vgsfb = vgsfb - dvth_all; // Vgs Clamping for Inversion Region Calculation in Accumulation beta0 = u0_a * cox * Weff0 / Leff; T0 = -(dvch_qm + nVtm * lln(2.0 * cox * Imin / (beta0 * nVtm * `q * Nc * TFIN))); T1 = vgsfb + T0 + DELVTRAND; vgsfbeff = hypsmooth(T1 , 1.0e-4) - T0; // Core Model Calculation at Source Side vch = 0.0 + dvch_qm; if (BULKMOD != 0) begin T1 = hypsmooth(2.0 * phib + vch - ves, 0.1); T3 = (-K1_t / (2.0 * nVtm)) * (sqrt(T1) - sqrt(2.0 * phib)); T0 = -qdep - T3 + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0/3.0); T1 = -qdep - T3 + vth_fixed_factor_SI; end else begin T0 = -qdep + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0/3.0); T1 = -qdep + vth_fixed_factor_SI; end T2 = (vgsfbeff - vch) / nVtm; F0 = -T2 + T1; T3 = 0.5 * (T2 - T0); qm = exp(T3); if (qm > 1.0e-7) begin T7 = ln(1.0 + qm); qm = 2.0 * (1.0 - sqrt(1.0 + T7 * T7)); T8 = (qm * ALPHA_UFCM + qdep) * rc; T4 = T8 / (exp(T8) - T8 - 1.0); T5 = T8 * T4; e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); e1 = -1.0 + 1.0 / qm + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0/3.0); qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); T8 = (qm * ALPHA_UFCM + qdep) * rc; T4 = T8 / (exp(T8) - T8 - 1.0); T5 = T8 * T4; e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); e1 = -1.0 + 1.0 / qm + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0/3.0); e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0/3.0); qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); end else begin qm = -qm * qm; end qis = -qm * nVtm; // Drain Saturation Voltage Eeffs = EeffFactor * (qbs + eta_mu * qis); qb0 = 1.0e-2 / cox; T2 = pow(0.5 * (1.0 + abs((qis) / qb0)), UCS_t); if (BULKMOD != 0) begin T3 = (UA_a + UC_a * veseff) * pow(abs(Eeffs), EU_a) + UD_a / T2; end else begin T3 = UA_a * pow(abs(Eeffs), EU_a) + UD_a / T2; end Dmobs = 1.0 + T3; Dmobs = Dmobs / U0MULT; if (RDSMOD == 1) begin Rdss = 0.0; end else if (RDSMOD == 0) begin T4 = 1.0 + PRWGS_i * qis; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); Rdss = (RDSWMIN_i + RDSW_i * T0) * WeffWRFactor * NFINtotal * rdstemp; end else begin T4 = 1.0 + PRWGS_i * qis; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); Rdss = (RSourceGeo + RDrainGeo + RDSWMIN_i + RDSW_i * T0) * WeffWRFactor * NFINtotal * rdstemp; end Esat = 2.0 * VSAT_a / u0_a * Dmobs; EsatL = Esat * Leff; T6 = KSATIV_a * (qis + 2 * Vtm); if (Rdss == 0.0) begin Vdsat = EsatL * T6 / (EsatL + T6); end else begin WVCox = Weff0 * VSAT_a * cox; T0 = WVCox * Rdss; Ta = 2.0 * T0; Tb = T6 + EsatL + 3.0 * T6 * T0; Tc = T6 * (EsatL + 2.0 * T6 * T0); Vdsat = (Tb - sqrt(Tb * Tb - 2.0 * Ta * Tc)) / Ta; end Vdsat = hypsmooth(Vdsat - 1.0e-3, 1.0e-5) + 1.0e-3; T7 = pow(vds / Vdsat , MEXP_a); T8 = pow(1.0 + T7, inv_MEXP); Vdseff = vds / T8; if (Vdseff > vds) begin Vdseff = vds; end // Core Model Calculation at Drain Side vch = Vdseff + dvch_qm; if (BULKMOD != 0) begin T1 = hypsmooth(2.0 * phib + vch - ves, 0.1); T3 = (-K1_t / (2.0 * nVtm)) * (sqrt(T1) - sqrt(2.0 * phib)); T0 = -qdep - T3 + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0 / 3.0); T1 = -qdep - T3 + vth_fixed_factor_SI; end else begin T0 = -qdep + vth_fixed_factor_Sub + QMFACTORCVfinal * pow(-qdep, 2.0 / 3.0); T1 = -qdep + vth_fixed_factor_SI; end T2 = (vgsfbeff - vch) / nVtm; F0 = -T2 + T1; T3 = (T2 - T0) * 0.5; qm = exp(T3); if (qm > 1.0e-7) begin T7 = ln(1.0 + qm); qm = 2.0 * (1.0 - sqrt(1.0 + T7 * T7)); T8 = (qm * ALPHA_UFCM + qdep) * rc; T4 = T8 / (exp(T8) - T8 - 1.0); T5 = T8 * T4; e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0 / 3.0); e1 = -1.0 + (1.0 / qm) + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0 / 3.0); qm = qm - (e0 / e1)*(1.0 + (e0 * e2) / (2.0 * e1 * e1)); T8 = (qm * ALPHA_UFCM + qdep) * rc; T4 = T8 / (exp(T8) - T8 - 1.0); T5 = T8 * T4; e0 = F0 - qm + ln(-qm) + ln(T5) + QMFACTORCVfinal * pow(-(qm + qdep), 2.0/3.0); e1 = -1.0 + (1.0 / qm) + (2.0 / T8 - T4 - 1.0) * rc - (2.0 / 3.0) * QMFACTORCVfinal * pow(-(qm + qdep), -1.0 / 3.0); e2 = -1.0 / (qm * qm) - (2.0 / 9.0) * QMFACTORCVfinal * pow(-(qm + qdep), -4.0 / 3.0); qm = qm - (e0 / e1) * (1.0 + (e0 * e2) / (2.0 * e1 * e1)); end else begin qm = -qm * qm; end qid = -qm * nVtm; if (BULKMOD != 0) begin T9 = (K1_t / (2.0 * nVtm)) * sqrt(Vtm); T0 = T9 / 2.0; T2 = (vge - (deltaPhi - Eg - Vtm * ln(NBODY / Nc) + DELVFBACC)) / Vtm; if ((T2 * Vtm) > phib + T9 * sqrt(phib * Vtm)) begin T1 = sqrt(T2 - 1.0 + T0 * T0) - T0; T10 = 1.0 + T1 * T1; end else begin T3 = T2 * 0.5 - 3.0 * (1.0 + T9 / sqrt(2.0)); T10 = T3 + sqrt(T3 * T3 + 6.0 * T2); if (T2 < 0.0) begin T4 = (T2 - T10) / T9; T10 = -ln(1.0 - T10 + T4 * T4 ); end else begin T11 = exp(-T10); T4 = sqrt(T2 - 1.0 + T11 + T0 * T0) - T0; T10 = 1.0 - T11 + T4 * T4; end end T6 = exp(-T10) - 1.0; T7 = sqrt(T6 + T10); if (T10 > 1.0e-15) begin e0 = -(T2 - T10) + T9 * T7; e1 = 1.0 - T9 * 0.5 * T6 / T7; T8 = T10 - (e0 / e1); T11 = exp(-T8) - 1.0; T12 = sqrt(T11 + T8); qba = -T9 * T12 * Vtm; end else begin if (T10 < -1.0e-15) begin e0 = -(T2 - T10) - T9 * T7; e1 = 1.0 + T9 * 0.5 * T6 / T7; T8 = T10 - e0 / e1; T12 = T9 * sqrt(exp(-T8) + T8 - 1.0); end else begin T12 = 0.0; T8 = 0.0; end qba = T12 * Vtm; end qi_acc_for_QM = T9 * exp(-T8 / 2.0) * Vtm; psipclamp = 0.5 * (T8 + 1.0 + sqrt((T8 - 1.0) * (T8 - 1.0) + 0.25 * 2.0 * 2.0)); sqrtpsip = sqrt(psipclamp); nq = 1.0 + T9 / sqrtpsip; end // Drain Side and Average Potential / Charge qia = 0.5 * (qis + qid); dqi = qis - qid; T0 = pow(Vdseff, 2.0) / 6.25e-4; // pow(Vdseff,2.0) / pow(25e-3, 2.0) if (CHARGEWF != 0.0) qia2 = 0.5 * (qis + qid) + CHARGEWF * (1.0 - lexp(-T0)) * 0.5 * dqi; else qia2 = 0.5 * (qis + qid); `ifdef __DEBUG__ if (qis < 0.0) $strobe("Warning: negative source-side inversion carrier density. Vgs=%f Vds=%f Vbs=%f qis=%e", V(g, s), V(d, s), V(e, s), qis); if (qid < 0.0) $strobe("Warning: negative drain-side inversion carrier density. Vgs=%f Vds=%f Vbs=%f qid=%e", V(g, s), V(d, s), V(e, s), qid); `endif // Toxeff model for quantum mechanical effects // Normal operation (Vgs > Vfb) if (QMTCENCV_i > 0.0) begin T4 = qia / QM0; T5 = 1.0 + pow(T4, PQM); Tcen = Tcen0 / T5; coxeff = 1.0 / (1.0 / (cox * EOT / TOXP) + Tcen * QMTCENCV_i / epssub); end else begin coxeff = cox; end // Quantum Mechanical Effect Correction for Accumulation Side Cap (Vgs < Vfb) if (BULKMOD != 0 && QMTCENCVA_i != 0.0) begin T6 = 1.0 + pow(qi_acc_for_QM / QM0ACC, PQMACC); Tcen = Tcen0 / T6; cox_acc = 1.0 / (1.0 / cox_acc + Tcen * QMTCENCVA_i / epssub); end // Multiplication Factor for I-V beta = u0_a * cox * Weff0 / Leff; // Mobility Degradation Eeffm = EeffFactor * (qba + eta_mu * qia2); T2 = pow(0.5 * (1.0 + abs((qia2) / qb0)), UCS_t); if (BULKMOD != 0) begin T3 = (UA_a + UC_a * veseff) * pow(abs(Eeffm), EU_a) + UD_a / T2; end else begin T3 = UA_a * pow(abs(Eeffm), EU_a) + UD_a / T2; end Dmob = 1.0 + T3; Dmob = Dmob / U0MULT; ueff = u0_a / Dmob; // Mobility Degradation for C-V Eeffm_cv = EeffFactor * (qba + eta_mu_cv * qia2); T3 = UA_a * pow(abs(Eeffm_cv), EU_a) + UD_a / T2; Dmob_cv = 1.0 + T3; Dmob_cv = Dmob_cv / U0MULT; // Calculate current and capacitance enhancement factors due to CLM and DIBL tmp = DROUT_i * Leff / scl + 1.0e-6; if (tmp < 40.0) begin DIBLfactor = 0.5 * PDIBL1_a / (cosh(tmp) - 1.0) + PDIBL2_a; end else begin DIBLfactor = PDIBL1_a * exp(-tmp) + PDIBL2_a; end if (PVAG_i > 0.0) begin PVAGfactor = 1.0 + PVAG_i * qia / EsatL; end else begin PVAGfactor = 1.0 / (1.0 - PVAG_i * qia / EsatL); end if (Vdseff > vds) begin Vdseff = vds; end diffVds = vds - Vdseff; Vgst2Vtm = qia + 2.0 * Vtm; if (DIBLfactor > 0) begin T1 = Vgst2Vtm; T3 = T1 / (Vdsat + T1); VaDIBL = T1 / DIBLfactor * T3 * PVAGfactor; Moc = 1.0 + diffVds / VaDIBL; end else begin Moc = 1.0; end if (PCLM_a > 0.0) begin if (PCLMG_i < 0.0) begin T1 = 1.0 / (1.0 / PCLM_a - PCLMG_i * qia); end else begin T1 = PCLM_a + PCLMG_i * qia; end Mclm = 1.0 + T1 * lln(1.0 + (vds - Vdseff) / T1 / (Vdsat + EsatL)); end else begin Mclm = 1.0; end Moc = Moc * Mclm; // Current Degradation Factor Due to Velocity Saturation Esat1 = 2.0 * VSAT1_a / ueff; Esat1L = Esat1 * Leff; T0 = lexp(PSAT_i * lln(dqi / Esat1L)); Ta = (1.0 + lexp(1.0 / PSAT_i * lln(DELTAVSAT_i))); Dvsat = (1.0 + lexp(1.0 / PSAT_i * lln(DELTAVSAT_i + T0))) / Ta; Dvsat = Dvsat + 0.5 * PTWG_a * qia * dqi * dqi; // Non-Saturation Effect T0 = A1_t + A2_t / (qia + 2.0 * nVtm); T1 = T0 * dqi * dqi; T2 = T1 + 1.0 - 0.001; T3 = -1.0 + 0.5 * (T2 + sqrt(T2 * T2 + 0.004)); // max(T1, -1.0) Nsat = 0.5 * (1.0 + sqrt(1.0 + T3)); Dvsat = Dvsat * Nsat; // Lateral Non-uniform doping effect (IV-CV Vth shift) factor if (K0_t != 0) begin T1 = K0_t / (max(0, K0SI_t + K0SISAT_t * dqi * dqi) * qia + 2.0 * nVtm); Mnud = lexp(-T1); end else begin Mnud = 1.0; end // Body-Effect Factor for BULKMOD = 2 if (BULKMOD == 2) begin T0 = hypsmooth((K2_t + K2SAT_t * vdsx), 1.0e-6); T1 = T0 / (max(0, K2SI_t + K2SISAT_t * dqi * dqi) * qia + 2.0 * nVtm); T3 = sqrt(PHIBE_i - veseff) - sqrt(PHIBE_i); Mob = lexp(- T1 * T3); end else Mob = 1.0; // Velocity Saturation Factor for C-V EsatCV = 2.0 * VSATCV_t * Dmob_cv / u0_a; EsatCVL = EsatCV * LeffCV; T0 = lexp(PSATCV_i * lln(dqi / EsatCVL)); Ta = (1.0 + lexp(1.0 / PSATCV_i * lln(DELTAVSATCV_i))); DvsatCV = (1.0 + lexp(1.0 / PSATCV_i * lln(DELTAVSATCV_i + T0))) / Ta; // Channel Length Modulation factor for C-V if (PCLMCV_i != 0) begin MclmCV = 1.0 + PCLMCV_i * lln(1.0 + (vds - Vdseff) / PCLMCV_i / (Vdsat + EsatCVL)); end else begin MclmCV = 1.0; end // Calculating fixed body charge qb with sign (Here to avoid multiple calculation in NQSMOD=3 case) qb = -`q * nbody * Ach * LeffCV; // ************************************************ // * Current and Charges Calculations * // ************************************************ // Quasi Static I-V Model T1 = qia; etaiv = q0 / (q0 + qia); T2 = (2.0 - etaiv) * nVtm; ids0_ov_dqi = T1 + T2; ids0 = ids0_ov_dqi * dqi; // S/D Series Resistance `include "bsimcmg_rdsmod.include" ids = NFINtotal * beta * ids0 * Moc * Mnud * Mob / (Dmob * Dvsat * Dr); ids = ids * IDS0MULT; // Quasi Static C-V Model `include "bsimcmg_quasi_static_cv.include" // Parasitic Capacitances // Bias-dependent overlap capacitances (CGEOMOD = 0 and 2) qgs_ov = 0.0; qgd_ov = 0.0; if (CGEOMOD != 1) begin T1 = NFINtotal * WeffCV0 * devsign; T2 = devsign * V(`GateEdgeNode, si); T0 = T2 - vfbsdcv + `DELTA_1; vgs_overlap = 0.5 * (T0 - sqrt(T0 * T0 + 4.0 * `DELTA_1)); qgs_ov = T1 * (CGSL_i * (T2 - vfbsdcv - vgs_overlap - 0.5 * CKAPPAS_i * (sqrt(1.0 - 4.0 * vgs_overlap / CKAPPAS_i) - 1.0)) + CGSO_i * T2); T2 = devsign * V(`GateEdgeNode, di); T0 = T2 - vfbsdcv + `DELTA_1; vgd_overlap = 0.5 * (T0 - sqrt(T0 * T0 + 4.0 * `DELTA_1)); qgd_ov = T1 * (CGDL_i * (T2 - vfbsdcv - vgd_overlap - 0.5 * CKAPPAD_i * (sqrt(1.0 - 4.0 * vgd_overlap / CKAPPAD_i) - 1.0)) + CGDO_i * T2); end if (CGEOMOD == 0) begin T1 = NFINtotal * WeffCV0; // Fringe caps dont see QM effects qgs_fr = T1 * CFS_i * V(`GateEdgeNode, si); qgd_fr = T1 * CFD_i * V(`GateEdgeNode, di); qgs_parasitic = qgs_ov + qgs_fr; qgd_parasitic = qgd_ov + qgd_fr; end else if (CGEOMOD == 1) begin // CGEO1SW=1 enables parameters to be in F per fin, per gate-finger, per unit channel width if (CGEO1SW == 1) begin T0 = NFINtotal * WeffCV0; COVS_i = T0 * COVS_i; COVD_i = T0 * COVD_i; cgsp = T0 * CGSP; cgdp = T0 * CGDP; end else begin cgsp = CGSP; cgdp = CGDP; end qgs_ov = COVS_i * V(`GateEdgeNode, si); qgd_ov = COVD_i * V(`GateEdgeNode, di); qgs_parasitic = qgs_ov; qgd_parasitic = qgd_ov; qgs_fr = cgsp * V(`GateEdgeNode, s); qgd_fr = cgdp * V(`GateEdgeNode, d); end else begin qgs_fr = Cfr_geo * V(`GateEdgeNode, si); qgd_fr = Cfr_geo * V(`GateEdgeNode, di); qgs_parasitic = qgs_ov + qgs_fr; qgd_parasitic = qgd_ov + qgd_fr; end // Drain-to-Source Fringe Capacitance Available for all CGEOMOD qds_fr = CDSP * V(d, s); // Impact Ionization Current (Ref: IIMOD = 1 from BSIM4 Model, IIMOD = 2 from BSIMSOI Model) Iii = 0.0; if (IIMOD == 1) begin T0 = (ALPHA0_t + ALPHA1_t * Leff) / Leff; if ((T0 <= 0.0) || (BETA0_t <= 0.0)) Iii = 0.0; else begin T1 = -BETA0_t / (diffVds + 1.0e-30); Iii = T0 * diffVds * ids * lexp(T1); end end else if (IIMOD == 2) begin //End of IIMOD=1 ALPHAII = (ALPHAII0_t + ALPHAII1_t * Leff) / Leff; if (ALPHAII <= 0.0) begin Iii = 0.0; end else begin T0 = ESATII_i * Leff; T1 = SII0_t * T0 / (1.0 + T0); T0 = 1.0 / (1.0 + hypsmooth(SII1_i * vgsfbeff, IIMOD2CLAMP1)); // T0 = 1 / (1 + SII1_i * vgsfbeff) T3 = T0 + SII2_i; T2 = hypsmooth(vgsfbeff * T3, IIMOD2CLAMP2); // T2 = vgsfbeff * T3 T3 = 1.0 / (1.0 + SIID_i * vds); VgsStep = T1 * T2 * T3; Vdsatii = VgsStep * (1.0 - LII_i / Leff); Vdiff = vds - Vdsatii; T0 = BETAII2_i + BETAII1_i * Vdiff + BETAII0_i * Vdiff * Vdiff; T1 = sqrt(T0 * T0 + 1.0e-10); Ratio = -hypmax( -ALPHAII * lexp(Vdiff / T1), -10.0, IIMOD2CLAMP3); Iii = Ratio * ids; end end // End of IIMOD=2 // Gate Current (Ref: BSIM4 Model) igbinv = 0.0; igbacc = 0.0; igcs = 0.0; igcd = 0.0; igs = 0.0; igd = 0.0; // Igb if (IGBMOD != 0) begin // Igbinv T1 = (qia - EIGBINV_i) / NIGBINV_i / Vtm; Vaux_Igbinv = NIGBINV_i * Vtm * lln(1.0 + lexp(T1)); T2 = AIGBINV_t - BIGBINV_i * qia; T3 = 1.0 + CIGBINV_i * qia; T4 = -9.82222e11 * TOXG * T2 * T3; T5 = lexp(T4); T6 = 3.75956e-7; igbinv = Weff0 * Leff * T6 * Toxratio * vge * Vaux_Igbinv * T5; igbinv = igbinv * igtemp; // Igbacc vfbzb = deltaPhi - (Eg / 2.0) - phib; T0 = vfbzb - vge; T1 = T0 / NIGBACC_i / Vtm; Vaux_Igbacc = NIGBACC_i * Vtm * lln(1.0 + lexp(T1)); if (BULKMOD != 0) begin Voxacc = qi_acc_for_QM; end else begin if (vfbzb <= 0) Voxacc = 0.5 * (T0 - 0.02 + sqrt((T0 - 0.02) * (T0 - 0.02) - 0.08 * vfbzb)); else Voxacc = 0.5 * (T0 - 0.02 + sqrt((T0 - 0.02) * (T0 - 0.02) + 0.08 * vfbzb)); end T2 = AIGBACC_t - BIGBACC_i * Voxacc; T3 = 1.0 + CIGBACC_i * Voxacc; T4 = -7.45669e11 * TOXG * T2 * T3; T5 = lexp(T4); T6 = 4.97232e-7; igbacc = Weff0 * Leff * T6 * Toxratio * vge * Vaux_Igbacc * T5; igbacc = igbacc * igtemp; end if (IGCMOD != 0) begin // Igcinv T1 = AIGC_t - BIGC_i * qia; T2 = 1.0 + CIGC_i * qia; T3 = -Bechvb * TOXG * T1 * T2; T4 = qia * lexp(T3); T5 = (vge + 0.5 * vdsx + 0.5 * (ves_jct + ved_jct)); igc0 = Weff0 * Leff * Aechvb * Toxratio * T4 * T5 * igtemp; // Gate-Current Partitioning Vdseffx = sqrt(Vdseff * Vdseff + 0.01) - 0.1; T1 = PIGCD_i * Vdseffx; T1_exp = lexp(-T1); T3 = T1 + T1_exp - 1.0 + 1.0e-4; T4 = 1.0 - (T1 + 1.0) * T1_exp + 1.0e-4; T5 = T1 * T1 + 2.0e-4; igcd = igc0 * T4 / T5; igcs = igc0 * T3 / T5; // Igs T0 = vgs_noswap - vfbsd; vgs_eff = sqrt(T0 * T0 + 1.0e-4); if (IGCLAMP == 1) begin T1 = hypsmooth((AIGS_t - BIGS_i * vgs_eff), 1.0e-6); if (CIGS_i < 0.01) begin CIGS_i = 0.01; end end else begin T1 = AIGS_t - BIGS_i * vgs_eff; end T2 = 1.0 + CIGS_i * vgs_eff; T3 = -Bechvb * TOXG * POXEDGE_i * T1 * T2; T4 = lexp(T3); if (sigvds > 0.0) begin igs = igsd_mult * DLCIGS * vgs_noswap * vgs_eff * T4; end else begin igd = igsd_mult * DLCIGS * vgs_noswap * vgs_eff * T4; end // Igd T0 = vgd_noswap - vfbsd; vgd_eff = sqrt(T0 * T0 + 1.0e-4); if (IGCLAMP == 1) begin T1 = hypsmooth((AIGD_t - BIGD_i * vgd_eff), 1.0e-6); if (CIGD_i < 0.01) begin CIGD_i = 0.01; end end else begin T1 = AIGD_t - BIGD_i * vgd_eff; end T2 = 1.0 + CIGD_i * vgd_eff; T3 = -Bechvb * TOXG * POXEDGE_i * T1 * T2; T4 = lexp(T3); if (sigvds > 0.0) begin igd = igsd_mult * DLCIGD * vgd_noswap * vgd_eff * T4; end else begin igs = igsd_mult * DLCIGD * vgd_noswap * vgd_eff * T4; end end // GIDL/GISL Current (Ref: BSIM4 Model) igisl = 0.0; igidl = 0.0; if (GIDLMOD != 0) begin T0 = epsratio * EOT; // GIDL if ((AGIDL_i <= 0.0) || (BGIDL_t <= 0.0)) begin T6 = 0.0; end else begin T1 = (-vgd_noswap - EGIDL_i + vfbsd) / T0; T1 = hypsmooth(T1, 1.0e-2); T2 = BGIDL_t / (T1 + 1.0e-3); T3 = lexp(PGIDL_i * lln(T1)); if (BULKMOD != 0) begin T4 = -ved_jct*ved_jct*ved_jct; T4a = CGIDL_i + abs(T4) + 1.0e-5; T5 = hypsmooth(T4/T4a, 1.0e-6) - 1.0e-6; T6 = AGIDL_i * Weff0 * T3 * lexp(-T2) * T5; end else begin T6 = AGIDL_i * Weff0 * T3 * lexp(-T2) * vds_noswap; end end if (sigvds > 0.0) begin igidl = T6; end else begin igisl = T6; end // GISL if ((AGISL_i <= 0.0) || (BGISL_t <= 0.0)) begin T6 = 0.0; end else begin T1 = (-vgs_noswap - EGISL_i + vfbsd) / T0; T1 = hypsmooth(T1, 1.0e-2); T2 = BGISL_t / (T1 + 1.0e-3); T3 = lexp(PGISL_i * lln(T1)); if (BULKMOD != 0) begin T4 = -ves_jct * ves_jct * ves_jct; T4a = CGISL_i + abs(T4) + 1.0e-5; T5 = hypsmooth(T4/T4a, 1.0e-6) - 1.0e-6; T6 = AGISL_i * Weff0 * T3 * lexp(-T2) * T5; end else T6 = AGISL_i * Weff0 * T3 * lexp(-T2) * (-vds_noswap); end if (sigvds > 0.0) begin igisl = T6; end else begin igidl = T6; end end // End of GIDLMOD // Junction Current if (BULKMOD != 0) begin // Source-Side Junction Current if (Isbs > 0.0) begin if (ves_jct < VjsmRev) begin T0 = ves_jct / Nvtms; T1 = lexp(T0) - 1.0; T2 = IVjsmRev + SslpRev * (ves_jct - VjsmRev); Ies = T1 * T2; end else if (ves_jct <= VjsmFwd) begin T0 = ves_jct / Nvtms; T1 = (BVS + ves_jct) / Nvtms; T2 = lexp(-T1); Ies = Isbs * (lexp(T0) + XExpBVS - 1.0 - XJBVS * T2); end else begin Ies = IVjsmFwd + SslpFwd * (ves_jct - VjsmFwd); end end else begin Ies = 0.0; end // Source-Side Junction Tunneling Current if (JTSS_t > 0.0) begin if ((VTSS - ves_jct) < (VTSS * 1.0e-3)) begin T0 = -ves_jct / Vtm0 / NJTS_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ies = Ies - ASEJ * JTSS_t * T1; end else begin T0 = -ves_jct / Vtm0 / NJTS_t; T1 = lexp(T0 * VTSS / (VTSS - ves_jct)) - 1.0; Ies = Ies - ASEJ * JTSS_t * T1; end end if (JTSSWS_t > 0.0) begin if ((VTSSWS - ves_jct) < (VTSSWS * 1.0e-3)) begin T0 = -ves_jct / Vtm0 / NJTSSW_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ies = Ies - PSEJ * JTSSWS_t * T1; end else begin T0 = -ves_jct / Vtm0 / NJTSSW_t; T1 = lexp(T0 * VTSSWS / (VTSSWS - ves_jct)) - 1.0; Ies = Ies - PSEJ * JTSSWS_t * T1; end end if (JTSSWGS_t > 0.0) begin if ((VTSSWGS - ves_jct) < (VTSSWGS * 1.0e-3)) begin T0 = -ves_jct / Vtm0 / NJTSSWG_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ies = Ies - Weff0 * NFINtotal * JTSSWGS_t * T1; end else begin T0 = -ves_jct / Vtm0 / NJTSSWG_t; T1 = lexp(T0 * VTSSWGS / (VTSSWGS - ves_jct)) - 1.0; Ies = Ies - Weff0 * NFINtotal * JTSSWGS_t * T1; end end // Drain-Side Junction Current if (Isbd > 0.0) begin if (ved_jct < VjdmRev) begin T0 = ved_jct / Nvtmd; T1 = lexp(T0) - 1.0; T2 = IVjdmRev + DslpRev * (ved_jct - VjdmRev); Ied = T1 * T2; end else if (ved_jct <= VjdmFwd) begin T0 = ved_jct / Nvtmd; T1 = (BVD + ved_jct) / Nvtmd; T2 = lexp(-T1); Ied = Isbd * (lexp(T0) + XExpBVD - 1.0 - XJBVD * T2); end else Ied = IVjdmFwd + DslpFwd * (ved_jct - VjdmFwd); end else Ied = 0.0; // Drain-Side Junction Tunneling Current if (JTSD_t > 0.0) begin if ((VTSD - ved_jct) < (VTSD * 1.0e-3)) begin T0 = -ved_jct / Vtm0 / NJTSD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ied = Ied - ADEJ * JTSD_t * T1; end else begin T0 = -ved_jct / Vtm0 / NJTSD_t; T1 = lexp(T0 * VTSD/ (VTSD - ved_jct)) - 1.0; Ied = Ied - ADEJ * JTSD_t * T1; end end if (JTSSWD_t > 0.0) begin if ((VTSSWD - ved_jct) < (VTSSWD * 1.0e-3)) begin T0 = -ved_jct / Vtm0 / NJTSSWD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ied = Ied - PDEJ * JTSSWD_t * T1; end else begin T0 = -ved_jct / Vtm0 / NJTSSWD_t; T1 = lexp(T0 * VTSSWD / (VTSSWD - ved_jct)) - 1.0; Ied = Ied - PDEJ * JTSSWD_t * T1; end end if (JTSSWGD_t > 0.0) begin if ((VTSSWGD - ved_jct) < (VTSSWGD * 1.0e-3)) begin T0 = -ved_jct / Vtm0 / NJTSSWGD_t; T1 = lexp(T0 * 1.0e3) - 1.0; Ied = Ied - Weff0 * NFINtotal * JTSSWGD_t * T1; end else begin T0 = -ved_jct / Vtm0 / NJTSSWGD_t; T1 = lexp(T0 * VTSSWGD / (VTSSWGD - ved_jct)) - 1.0; Ied = Ied - Weff0 * NFINtotal * JTSSWGD_t * T1; end end // Junction Capacitance (No Swapping) // Source-Substrate Junction `BSIM6JunctnCap(ves_jct, Czbs, PBS_t, SJS, MJS, MJS2, Qesj1) `BSIM6JunctnCap(ves_jct, Czbssw, PBSWS_t, SJSWS, MJSWS, MJSWS2, Qesj2) `BSIM6JunctnCap(ves_jct, Czbsswg, PBSWGS_t, SJSWGS, MJSWGS, MJSWGS2, Qesj3) Qesj = Qesj1 + Qesj2 + Qesj3; // Drain-Substrate Junction `BSIM6JunctnCap(ved_jct, Czbd, PBD_t, SJD, MJD, MJD2, Qedj1) `BSIM6JunctnCap(ved_jct, Czbdsw, PBSWD_t, SJSWD, MJSWD, MJSWD2, Qedj2) `BSIM6JunctnCap(ved_jct, Czbdswg, PBSWGD_t, SJSWGD, MJSWGD, MJSWGD2, Qedj3) Qedj = Qedj1 + Qedj2 + Qedj3; end // BULKMOD=0 Qes = Qesj + csbox * ves_jct; Qed = Qedj + cdbox * ved_jct; // Gate-to-Substrate Parasitic Capacitance // Bias Independent Component Qeg = cgbox * devsign * V(e, `GateEdgeNode); if (BULKMOD != 0) begin // Bias Dependent Component T2 = devsign * V(`GateEdgeNode, e); T3 = T2 - deltaPhi + Eg / 2.0 + phib - DELVFBACC; T0 = T3 + `DELTA_1; vge_overlap = 0.5 * (T0 + sqrt(T0 * T0 + 4.0 * `DELTA_1)); Qeg = Qeg - NFINtotal * LeffCV * (CGBL_i * (T3 - vge_overlap + 0.5 * CKAPPAB_i * ( sqrt(1.0 + 4.0 * vge_overlap / CKAPPAB_i) - 1.0 ))); end // Generation-Recombination Component T0 = vds; T1 = T0 * (AIGEN_i + BIGEN_i * T0 * T0); idsgen = HFIN * TFIN * (Leff - 2.0 * LINTIGEN_i) * igentemp * T1; // NQS Gate Resistance (Ref: BSIM4 Model) T0 = ueff * coxeff * Weff0 / Leff; `ifdef __NQSMOD1__ if (NQSMOD == 1 && XRCRG1_i != 0) begin IdovVds = beta * ids0_ov_dqi * Moc / (Dmob * Dvsat * Dr); gcrg = NFINtotal * XRCRG1_i * (IdovVds + XRCRG2_i * Vtm * T0); end `endif `ifdef __NQSMOD2__ if (NQSMOD == 2) begin IdovVds = beta * ids0_ov_dqi * Moc / (Dmob * Dvsat * Dr); gcrg = NFINtotal * XRCRG1_i * (IdovVds + XRCRG2_i * Vtm * T0); gtau = gcrg / (cox * Weff0 * Leff); end `endif // *** Multiply all current and charge components by NFINtotal *** // Note: Do not multiply ids, qg, qs, qd, qb, Ies, Ied, Qbs, Qbd with NFINtotal // since it is already considered. igidl = NFINtotal * igidl; igisl = NFINtotal * igisl; igcd = NFINtotal * igcd; igcs = NFINtotal * igcs; igs = NFINtotal * igs; igd = NFINtotal * igd; igbinv = NFINtotal * igbinv; igbacc = NFINtotal * igbacc; idsgen = NFINtotal * idsgen; // Gate to Body Tunneling Current Empirical Partition for BULKMOD = 0 igbs = 0.0; igbd = 0.0; if (BULKMOD == 0) begin igbs = (igbinv + igbacc) * wf; igbd = (igbinv + igbacc) * wr; end // Noise Models Esatnoi = 2.0 * VSAT_a / ueff; // Thermal noise and flicker noise // Flicker Noise (Ref: BSIM4 Model from K. K. Hung et al. TED 1990) if (NOIA > 0.0 || NOIB > 0.0 || NOIC > 0.0) begin Leffnoi = Leff - 2.0 * LINTNOI_i; Leffnoisq = Leffnoi * Leffnoi; if (EM <= 0.0) begin DelClm = 0.0; end else begin T0 = (diffVds / litl + EM) / Esatnoi; DelClm = litl * lln(T0); if (DelClm < 0.0) begin DelClm = 0.0; end end T1 = `q * `q * `q * Vtm * abs(ids) * ueff; T2 = 1.0e10 * coxeff * Leffnoisq; N0 = coxeff * qis / `q; Nl = coxeff * qid / `q; Nstar = Vtm / `q * (coxeff + CIT_a); T3 = NOIA * lln((N0 + Nstar) / (Nl + Nstar)); T4 = NOIB * (N0 - Nl); T5 = 0.5 * NOIC * (N0 * N0 - Nl * Nl); T6 = `q * Vtm * ids * ids; T7 = 1.0e10 * Leffnoisq * Weff0 * NFINtotal; T8 = NOIA + NOIB * Nl + NOIC * Nl * Nl; T9 = (Nl + Nstar) * (Nl + Nstar); Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; T10 = NOIA * `q * Vtm; T11 = Weff0 * NFINtotal * Leffnoi * 1.0e10 * Nstar * Nstar; Swi = T10 / T11 * ids * ids; T1 = Swi + Ssi; if (T1 > 0.0) begin FNPowerAt1Hz = (Ssi * Swi) / T1; end else begin FNPowerAt1Hz = 0.0; end end else begin FNPowerAt1Hz = 0.0; end // Thermal Noise case (TNOIMOD) 0 : begin // Charge-based model (BSIM4 - TNOIMOD=0) T0 = ueff * qinv; T1 = T0 * Rdsi + Leff * Leff; Gtnoi = (T0 / T1) * NTNOI_i; sid = 4.0 * Vtm * `q * Gtnoi; end 1: begin // Correlated Thermal Noise by Navid, November 2013, Reference BSIMSOI4.5.0 `ifdef __TNOIMOD1__ Abulk = 1.0; Vgst2Vtm = KSATIV_a * (qis + 2.0 * Vtm); etaa = 1.0 - Vdseff * Abulk / Vgst2Vtm ; T0 = 1.0 - etaa; T1 = 1.0 + etaa; T2 = T1 + 2.0 * Abulk * Vtm / (qia + 1.0e-10); T3 = T2 * T2; T4 = T0 * T0; T5 = T3 * T3; T6 = 1.0 / (1.0 + Vdseff / EsatL) ; gamma = T6 * (0.5 * T1 + T0 * T0 / (6.0 * T2)); 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 = qia / EsatL; T8 = T8 * T8; npart_c = RNOIC * (1.0 + T8 * TNOIC * Leff); T9 = gamma * delta ; if (T9 > 0.0) begin ctnoi = epsilon / sqrt( gamma * delta) * (2.5316 * npart_c); end else begin ctnoi = 1.0; end if (ctnoi > 1) begin ctnoi = 1.0; end if (ctnoi < 0) begin ctnoi = 0.0; end npart_beta = RNOIA * (1.0 + T8 * TNOIA * Leff); npart_theta = RNOIB * (1.0 + T8 * TNOIB * Leff); gamma = gamma * (3.0 * npart_beta * npart_beta); delta = delta * (3.75 * npart_theta * npart_theta); T9 = qia * 0.5 * T1; gche = beta * T9 * T6; noiGd0 = NFINtotal * beta * qia / (1.0 + gche * Rdsi); GammaGd0 = gamma * noiGd0; sid = 4.0 * Vtm * `q * GammaGd0; C0 = NFINtotal * coxeff * WeffCV0 * LeffCV; if (gamma > 0.0 && delta > 0.0) begin sf = (noiGd0 + 1.0e-15) / sqrt(delta / gamma); end else begin sf = 0.0; end `else $strobe("[Warning!] Although the model selector TNOIMOD is set to 1, the new correlated thermal noise model is not activated. Please uncomment \"`define __TNOIMOD1__\" in the bsimcmg.va."); `endif end endcase // Source and Drain Conductance for Thermal Noise Contribution if (RDSMOD != 2) begin gspr = 1.0 / Rsource; // Note: gspr considers all fins gdpr = 1.0 / Rdrain; // Note: gdpr considers all fins end // Loading Ids, Gate and Drain charges `ifdef __NQSMOD2__ if (sigvds > 0.0) begin I(di, si) <+ devsign * ids; end else begin I(si, di) <+ devsign * ids; end if (NQSMOD == 2) begin I(`IntrinsicGate, si) <+ devsign * gtau * -V(q); I(di, si) <+ devsign * xdpart * gtau * V(q); end else begin // Quasi-static Stamping (Normal case) I(di, si) <+ devsign * ddt(qd); I(`IntrinsicGate, si) <+ devsign * ddt(qg); end `else if (sigvds > 0.0) begin I(di, si) <+ devsign * ids; end else begin I(si, di) <+ devsign * ids; end I(di, si) <+ devsign * ddt(qd); I(`IntrinsicGate, si) <+ devsign * ddt(qg); `endif // Loading Other Currents if (sigvds > 0.0) begin I(di, si) <+ devsign * idsgen; I(`IntrinsicGate, si) <+ devsign * (igcs + igs); I(`IntrinsicGate, di) <+ devsign * (igcd + igd); if (BULKMOD != 0) begin I(di, e) <+ devsign * (igidl + Iii); I(si, e) <+ devsign * igisl; I(`IntrinsicGate, e) <+ devsign * (igbinv + igbacc); end else begin I(di, si) <+ devsign * (igidl + Iii); I(si, di) <+ devsign * igisl; end end else begin I(si, di) <+ devsign * idsgen; I(`IntrinsicGate, di) <+ devsign * (igcs + igs); I(`IntrinsicGate, si) <+ devsign * (igcd + igd); if (BULKMOD != 0) begin I(si, e) <+ devsign * (igidl + Iii); I(di, e) <+ devsign * igisl; I(`IntrinsicGate, e) <+ devsign * (igbinv + igbacc); end else begin I(si, di) <+ devsign * (igidl + Iii); I(di, si) <+ devsign * igisl; end end if (BULKMOD == 0) begin I(`IntrinsicGate, si) <+ devsign * igbs; I(`IntrinsicGate, di) <+ devsign * igbd; end if (BULKMOD != 0) begin I(e, si) <+ devsign * Ies; I(e, di) <+ devsign * Ied; end I(e, si) <+ devsign * ddt(Qes); I(e, di) <+ devsign * ddt(Qed); I(e, `GateEdgeNode) <+ devsign * ddt(Qeg); // Loading other charges I(`GateEdgeNode, si) <+ ddt(qgs_parasitic); I(`GateEdgeNode, di) <+ ddt(qgd_parasitic); I(d, s) <+ ddt(qds_fr); if (CGEOMOD == 1) begin I(`GateEdgeNode, s) <+ ddt(qgs_fr); I(`GateEdgeNode, d) <+ ddt(qgd_fr); end // Accumulation Charge for Bulk FET if (BULKMOD != 0) begin I(`IntrinsicGate, si) <+ devsign * ddt(qg_acc); I(e, si) <+ devsign * ddt(qb_acc); end // External S/D Resistance if (RDSMOD == 2) begin V(d, di) <+ 0.0; V(s, si) <+ 0.0; end else begin I(d, di) <+ V(d, di) / Rdrain; I(s, si) <+ V(s, si) / Rsource; end // NQSMOD1 Gate Resistance Model `ifdef __NQSMOD1__ if (NQSMOD == 1 && XRCRG1_i != 0) I(`GateEdgeNode, gi) <+ V(`GateEdgeNode, gi) * gcrg; else V(`GateEdgeNode, gi) <+ 0.0; `endif // NQSMOD2 BSIM4 Charge Deficit Model `ifdef __NQSMOD2__ if (NQSMOD ==2) begin I(q) <+ ddt(qg - qb); I(q) <+ V(q) * gtau; I(q) <+ ddt(V(q)); end else V(q) <+ 0.0; `endif // Gate Electrode Resistance `ifdef __RGATEMOD__ if (RGATEMOD != 0) I(g, ge) <+ V(g, ge) * ggeltd; else V(g, ge) <+ 0.0; `endif // Flicker Noise I(di,si) <+ flicker_noise(FNPowerAt1Hz, EF, "flicker"); // Thermal noise for parasitics if (RDSMOD != 2) begin I(d, di) <+ white_noise(4.0 * Vtm * `q * gdpr, "thermal"); I(s, si) <+ white_noise(4.0 * Vtm * `q * gspr, "thermal"); end `ifdef __RGATEMOD__ if (RGATEMOD != 0) I(g, ge) <+ white_noise(4.0 * Vtm * `q * ggeltd, "thermal"); `endif // Channel thermal noise and induced gate noise stamping // Implementation of correlated noise follows C. C. McAndrew, WCM 2005 if (TNOIMOD == 0) begin I(di, si) <+ white_noise(sid, "thermal"); `ifdef __TNOIMOD1__ V(N) <+ 0.0; `endif end else begin `ifdef __TNOIMOD1__ I(di,si) <+ white_noise(sid * abs(1.0 - ctnoi * ctnoi), "thermal"); I(di,si) <+ ctnoi * V(N) * sf * SCALEN ; if (gamma > 0 && delta > 0) begin I(N) <+ V(N) * sf * SCALEN; I(N) <+ white_noise(sid/(sf*sf*SCALEN*SCALEN)); end else begin I(N) <+ V(N) ; end I(`IntrinsicGate,si) <+ ddt(0.5 * C0 * SCALEN * V(N)); I(`IntrinsicGate,di) <+ ddt(0.5 * C0 * SCALEN * V(N)); `else $strobe("[Warning!] Although the model selector TNOIMOD is set to 1, the new correlated thermal noise model is not activated. Please uncomment \"`define __TNOIMOD1__\" in the bsimcmg.va."); `endif end // Gate Current Shot Noise if (IGCMOD != 0) begin if (sigvds > 0) begin I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igcs + igs), "shot"); I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igcd + igd), "shot"); end else begin I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igcs + igs), "shot"); I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igcd + igd), "shot"); end end if (IGBMOD != 0) begin if (BULKMOD != 0) begin I(`IntrinsicGate, e) <+ white_noise(2.0 * `q * abs(igbinv + igbacc), "shot"); end else begin I(`IntrinsicGate, si) <+ white_noise(2.0 * `q * abs(igbs), "shot"); I(`IntrinsicGate, di) <+ white_noise(2.0 * `q * abs(igbd), "shot"); end end // Self Heating `ifdef __SHMOD__ if (SHMOD != 0 && RTH0 > 0) begin if (RDSMOD != 2) begin Pwr(ith_branch) <+ -(devsign * sigvds * V(di,si) * ids + V(d,di) * V(d,di) / Rdrain + V(s,si) * V(s,si) / Rsource); end else begin Pwr(ith_branch) <+ -(devsign * sigvds * V(di,si) * ids ); end end Pwr(rth_branch) <+ Temp(rth_branch) * gth; Pwr(rth_branch) <+ ddt(Temp(rth_branch) * cth); `endif // Operating-Point information `ifdef __OPINFO__ // W & L WEFF = Weff0; // Effective width for IV LEFF = Leff; // Effective length for IV WEFFCV = WeffCV0; // Effective width for CV LEFFCV = LeffCV; // Effective length for CV // Currents IDS = devsign * ids; // Intrinsic Drain Current (Electrical) if (sigvds > 0) begin // Total Source/Drain Currents (Physical) if (BULKMOD != 0) begin IDEFF = IDS + devsign * idsgen - devsign * (igd + igcd) + devsign * (Iii + igidl) - devsign * Ied; ISEFF = -IDS - devsign * idsgen - devsign * (igs + igcs) + devsign * (igisl) - devsign * Ies; end else begin IDEFF = IDS + devsign * idsgen - devsign * (igd + igcd + igbd) + devsign * (Iii + igidl - igisl); ISEFF = -IDS - devsign * idsgen - devsign * (igs + igcs + igbs) + devsign* (igisl - igidl); end end else begin if (BULKMOD != 0) begin IDEFF = -IDS - devsign * idsgen - devsign * (igs + igcs) + devsign * (igisl) - devsign * Ied; ISEFF = IDS + devsign * idsgen - devsign * (igd + igcd) + devsign * (Iii + igidl) - devsign * Ies; end else begin IDEFF = -IDS - devsign * idsgen - devsign * (igs + igcs + igbd) + devsign * (igisl - igidl); ISEFF = IDS + devsign * idsgen - devsign * (igd + igcd + igbs) + devsign * (Iii + igidl - igisl); end end if (BULKMOD == 0) begin // Total Gate Current IGTOT = devsign * (igs + igd + igcs + igcd + igbs + igbd); end else begin IGTOT = devsign * (igs + igd + igcs + igcd + igbacc + igbinv); end IDSGEN = sigvds * devsign * idsgen; // Generation-Recombination Current (Physical) III = devsign * Iii; // Impact Ionization Current if (sigvds > 0) begin IGIDL = devsign * igidl; // GIDL Current (Physical) IGISL = devsign * igisl; // GISL Current (Physical) end else begin IGIDL = devsign * igisl; // GIDL Current (Physical) IGISL = devsign * igidl; // GISL Current (Physical) end if (BULKMOD != 0) begin IJSB = -devsign * Ies; // Source-Body Junction Current (Physical) IJDB = -devsign * Ied; // Drain-Body Junction Current (Physical) end else begin IJSB = 0.0; IJDB = 0.0; end if (BULKMOD != 0) begin ISUB = -III - IGIDL - IGISL - IJSB - IJDB - devsign * (igbinv + igbacc); // Substrate Current end else begin ISUB = 0.0; end // Misc Variables BETA = beta; // Drain Current prefactor per fin per finger VDSSAT = Vdsat; // Drain-Source saturation Voltage if (NGATE_i > 0) // Flatband Voltage VFB = -devsign * (phib + Vtm * lln(NGATE_i / ni)); else VFB = PHIG_i - (EASUB + 0.5 * Eg + devsign * phib); // Threshold Voltage Calculation q0 = 10.0 * Vtm / rc + 2.0 * qbs; T1 = Vtm * (Vtm + q0); T2 = cox * cox * T1; T3 = 2.0 * `q * ni * epssub * Vtm; VTH = VFB + devsign * (Vtm * lln(T2 / T3) + dvch_qm + phib + qbs + Vtm + dvth_all - DELVTRAND); // Conductances GM = ddx(devsign * ids,V(`IntrinsicGate)); // Transconductance GDS = ddx(devsign * ids,V(di)); // Output Conductance if (BULKMOD != 0) GMBS = ddx(devsign * ids,V(e)); // Body Transconductance else GMBS = 0.0; // Intrinsic Charges (Physical) (Sriram: Not accurate for NQSMOD= 2 and 3) QGI = devsign * qg + devsign * qg_acc; QDI = devsign * qd; QSI = devsign * qs; QBI = devsign * (qb + qb_acc); // Total Charges (Sriram: Not accurate for NQSMOD= 2 and 3) QG = devsign * qg + qgs_parasitic + qgd_parasitic + (CGEOMOD == 1 ? qgs_fr + qgd_fr : 0) + devsign * qg_acc - devsign * Qeg; QD = devsign * qd - qgd_parasitic - (CGEOMOD == 1 ? qgd_fr : 0) - devsign * Qed; QS = devsign * qs - qgs_parasitic - (CGEOMOD == 1 ? qgs_fr : 0) - devsign * Qes; QB = devsign * (qb + qb_acc) + devsign * (Qeg + Qes + Qed); // Intrinsic Capacitances (Physical) CGGI = ddx(QGI, V(`IntrinsicGate)); CGSI = ddx(-QGI, V(si)); CGDI = ddx(-QGI, V(di)); CGEI = ddx(-QGI, V(e)); CSGI = ddx(-QSI, V(`IntrinsicGate)); CSDI = ddx(-QSI, V(di)); CSSI = ddx(QSI, V(si)); CSEI = ddx(-QSI, V(e)); // Should be zero everywhere CDGI = ddx(-QDI, V(`IntrinsicGate)); CDDI = ddx(QDI, V(di)); CDSI = ddx(-QDI, V(si)); CDEI = ddx(-QDI, V(e)); CEGI = ddx(-QBI, V(`IntrinsicGate)); CEDI = ddx(-QBI, V(di)); // Should be zero everywhere CESI = ddx(-QBI, V(si)); // Should be zero everywhere CEEI = ddx(QBI, V(e)); // Total Capacitances CGG = ddx(QG, V(`IntrinsicGate)); CGS = ddx(-QG, V(si)); CGD = ddx(-QG, V(di)); CGE = ddx(-QG, V(e)); CSG = ddx(-QS, V(`IntrinsicGate)); CSD = ddx(-QS, V(di)); CSS = ddx(QS, V(si)); CSE = ddx(-QS, V(e)); CDG = ddx(-QD, V(`IntrinsicGate)); CDD = ddx(QD, V(di)); CDS = ddx(-QD, V(si)); CDE = ddx(-QD, V(e)); CEG = ddx(-QB, V(`IntrinsicGate)); CED = ddx(-QB, V(di)); CES = ddx(-QB, V(si)); CEE = ddx(QB, V(e)); // Total extrinsic capacitance CGSEXT = ddx(-(qgs_parasitic + (CGEOMOD == 1 ? qgs_fr : 0)),V(si)); // Gate-Source Overlap + outer fringing CGDEXT = ddx(-(qgd_parasitic + (CGEOMOD == 1 ? qgd_fr : 0)),V(di)); // Gate-Drain Overlap + outer fringing CGBOV = ddx(Qeg,V(e)); // Gate-Body Overlap CGBOV = -devsign * CGBOV; // Total of Junction Capacitance and Source/Drain-Body Overlap Capacitance CJST = ddx(Qes, V(si)); CJST = -devsign * CJST; CJDT = ddx(Qed, V(di)); CJDT = -devsign * CJDT; RSGEO = RSourceGeo; // External bias independent Source Resistance RDGEO = RDrainGeo; // External bias independent Drain Resistance CFGEO = Cfr_geo; // Geometric Parasitic Cap for CGEOMOD=1 // Output for Self-Heating Temperature T_TOTAL_K = DevTemp; T_TOTAL_C = DevTemp - `P_CELSIUS0; T_DELTA_SH = Temp(t); `ifdef __DEBUG__ // Individual Gate Current Components IGS = devsign * igs; IGD = devsign * igd; IGCS = devsign * igcs; IGCD = devsign * igcd; if (BULKMOD == 0) begin IGBS = devsign * igbs; IGBD = devsign * igbd; end else begin IGBINV = devsign * igbinv; IGBACC = devsign * igbacc; end DIDSDVG = ddx(ids, V(`IntrinsicGate)); DIDSDVG = devsign * sigvds * DIDSDVG; DIDSDVS = ddx(ids, V(si)); DIDSDVS = devsign * sigvds * DIDSDVS; DIDSDVD = ddx(ids, V(di)); DIDSDVD = devsign * sigvds * DIDSDVD; `ifdef __SHMOD__ DIDSDVTH = ddx(ids, Temp(t)); DIDSDVTH = devsign * sigvds * DIDSDVTH; `endif DIGSDVG = ddx(igs + igcs, V(`IntrinsicGate)); DIGSDVG = devsign * DIGSDVG; DIGSDVS = ddx(igs + igcs, V(si)); DIGSDVS = devsign * DIGSDVS; DIGSDVD = ddx(igs + igcs, V(di)); DIGSDVD = devsign * DIGSDVD; `ifdef __SHMOD__ DIGSDVTH = ddx(igs + igcs, Temp(t)); DIGSDVTH = devsign * DIGSDVTH; `endif DIGDDVG = ddx(igd + igcd, V(`IntrinsicGate)); DIGDDVG = devsign * DIGDDVG; DIGDDVS = ddx(igd + igcd, V(si)); DIGDDVS = devsign * DIGDDVS; DIGDDVD = ddx(igd + igcd, V(di)); DIGDDVD = devsign * DIGDDVD; `ifdef __SHMOD__ DIGDDVTH = ddx(igd + igcd, Temp(t)); DIGDDVTH = devsign * DIGDDVTH; `endif DIIIDVG = ddx(Iii, V(`IntrinsicGate)); DIIIDVG = devsign * DIIIDVG; DIIIDVS = ddx(Iii, V(si)); DIIIDVS = devsign * DIIIDVS; DIIIDVD = ddx(Iii, V(di)); DIIIDVD = devsign * DIIIDVD; `ifdef __SHMOD__ DIIIDVTH = ddx(Iii, Temp(t)); DIIIDVTH = devsign * DIIIDVTH; `endif DIGIDLDVG = ddx(igidl, V(`IntrinsicGate)); DIGIDLDVG = devsign * DIGIDLDVG; DIGIDLDVS = ddx(igidl, V(si)); DIGIDLDVS = devsign * DIGIDLDVS; DIGIDLDVD = ddx(igidl, V(di)); DIGIDLDVD = devsign * DIGIDLDVD; `ifdef __SHMOD__ DIGIDLDVTH = ddx(igidl, Temp(t)); DIGIDLDVTH = devsign * DIGIDLDVTH; `endif DIGISLDVG = ddx(igisl, V(`IntrinsicGate)); DIGISLDVG = devsign * DIGISLDVG; DIGISLDVS = ddx(igisl, V(si)); DIGISLDVS = devsign * DIGISLDVS; DIGISLDVD = ddx(igisl, V(di)); DIGISLDVD = devsign * DIGISLDVD; `ifdef __SHMOD__ DIGISLDVTH = ddx(igisl, Temp(t)); DIGISLDVTH = devsign * DIGISLDVTH; `endif `ifdef __SHMOD__ CGT = ddx(QG, Temp(t)); CST = ddx(QS, Temp(t)); CDT = ddx(QD, Temp(t)); `endif ITH = ids * vds; `ifdef __SHMOD__ DITHDVTH = ddx(ITH, Temp(t)); `endif DITHDVG = ddx(ITH, V(`IntrinsicGate)); DITHDVS = ddx(ITH, V(si)); DITHDVD = ddx(ITH, V(di)); `endif // __DEBUG__ `endif // __OPINFO__ end // analog block ends //================================================ tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_cfringe.include0000644000175000017500000001514514163340332027465 0ustar carstencarsten// ******************************************************** // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal, // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016__________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** // ******************************************************** // Macro for the geometry-dependent fringing capacitance // model // ******************************************************** /* (while (re-search-forward (rx bow (or "Hr" "Lr" "Hgdelta" "Lmax" "y" "x" "CcgSat" "Cnon" "TT1" "Ccg1" "r1cf" "Rcf" "Ccg2" "Ccg" "C1" "C2" "C3" "Cfglog" "dcf" "TT0" "TT2" "Cfgsat" "delta" "xCfg") eow) nil t) (replace-match "x42_\\&" t)) */ `define Cfringe_2d_vars() \ real x42_Hr, x42_Lr, x42_Hgdelta, x42_Lmax, x42_y, x42_x; \ real x42_CcgSat, x42_Cnon, x42_TT1, x42_Ccg1, x42_r1cf, x42_Rcf, x42_Ccg2; \ real x42_Ccg, x42_C1, x42_C2, x42_C3, x42_Cfglog, x42_dcf, x42_TT0; \ real x42_TT2, x42_Cfgsat, x42_delta, Cfg; `define Cfringe_2d(block_name, Hg, Hc, Lext, Wfin, Lc, Lg, Tox, Cf1, Cgg) \ begin : block_name \ x42_Hr = 2.3 + 0.2 * ((Hg) + (Tox)) / (Hc); \ x42_Lr = 1.05; \ x42_Hgdelta = abs((Hg) + (Tox) - (Hc)); \ x42_Lmax = (Lext) * x42_Lr; \ \ x42_y = min((Hc), (Hg) + (Tox)); \ x42_x = (Lext) / (x42_Hr + 1.0); \ x42_Cnon = 1.7e12; \ x42_CcgSat = epssp * (x42_y - x42_x) / (Lext); \ x42_TT1 = x42_Cnon * x42_CcgSat; \ if (x42_TT1 > `EXPL_THRESHOLD) \ x42_Ccg1 = x42_CcgSat; \ else \ x42_Ccg1 = 1.0 / x42_Cnon * ln(1.0 + lexp(x42_TT1)); \ \ x42_r1cf = 0.5 * \ min((Hc) / ((Hg) + (Tox)), ((Hg) + (Tox)) / (Hc)); \ x42_Rcf = x42_Hgdelta * x42_r1cf; \ x42_Ccg2 = epssp * 2 / `M_PI * \ ln(((Lext) + 0.5 * `M_PI * x42_Rcf) / (Lext)); \ \ x42_Ccg = (Wfin) * (x42_Ccg1 + x42_Ccg2); \ \ x42_x = x42_Lmax / (Hg); \ x42_C1 = 4.0 / (sqrt(2.0 * (x42_x + 1)) * `M_PI); \ x42_C2 = sqrt((Tox) * (Tox) + 2.0 * (Hg) * (Tox) + \ (Hg) * (Hg) * (x42_x + 1)) * sqrt(x42_x + 1) + (Tox) + \ (Hg) * x42_x + (Hg); \ x42_C3 = (Tox) * sqrt((x42_x + 1) * (x42_x + 4)) + Tox * (x42_x + 2); \ x42_Cfglog = epssp * (x42_C1 * ln(x42_C2 / x42_C3) + 12.27); \ \ x42_dcf = x42_Hr * x42_Lr; \ x42_TT0 = sqrt(x42_dcf * x42_dcf + 1.0); \ x42_TT1 = sqrt((x42_dcf * x42_dcf + 1) * ((x42_dcf * (Tox)) * (x42_dcf * (Tox)) + \ 2 * x42_dcf * x42_Lmax * (Tox) + (x42_dcf * x42_dcf + 1) * x42_Lmax * x42_Lmax)) \ + x42_dcf * (Tox) + x42_dcf * x42_dcf * x42_Lmax + x42_Lmax; \ x42_TT2 = (x42_TT0 + 1.0) * (x42_dcf * (Tox)); \ x42_Cfgsat = 2.0 * epssp * sqrt(2) / `M_PI * (Cf1) * x42_dcf \ / x42_TT0 * ln(x42_TT1 / x42_TT2); \ \ x42_delta = 1.2e-12; \ x42_TT1 = x42_Cfgsat - x42_Cfglog - x42_delta; \ Cfg = (Wfin) * (x42_Cfgsat - 0.5 * (x42_TT1 + \ sqrt(x42_TT1 * x42_TT1 + 4 * x42_delta * x42_Cfgsat))); \ Cgg = x42_Ccg + Cfg; \ end tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_rdsmod.include0000644000175000017500000001003414163340332027330 0ustar carstencarsten// ******************************************************* // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016_________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** // Source-Drain Resistance Model case(RDSMOD) 1: begin Rdsi = 0.0; Dr = 1.0; T2 = vgs_noswap - vfbsd; T3 = sqrt(T2 * T2 + 1.0e-1); vgs_eff = 0.5 * (T2 + T3); T4 = 1.0 + PRWGS_i * vgs_eff; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); T5 = RSW_i * (1.0 + RSDR_a * lexp(0.5 * PRSDR * lln(V(si,s) * V(si,s) + 1.0E-6))); Rsource = rdstemp * (RSourceGeo + (RSWMIN_i + T5 * T0) * WeffWRFactor); T2 = vgd_noswap - vfbsd; T3 = sqrt(T2 * T2 + 1.0e-1); vgd_eff = 0.5 * (T2 + T3); T4 = 1.0 + PRWGD_i * vgd_eff; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); T5 = RDW_i * (1.0 + RDDR_a * lexp(0.5 * PRDDR * lln(V(di,d) * V(di,d) + 1.0E-6))); Rdrain = rdstemp * (RDrainGeo + (RDWMIN_i + T5 * T0) * WeffWRFactor); end 0: begin Rsource = RSourceGeo; Rdrain = RDrainGeo; T4 = 1.0 + PRWGS_i * qia; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); Rdsi = rdstemp * (RDSWMIN_i + RDSW_i * T0) * WeffWRFactor; Dr = 1.0 + (NFINtotal) * beta * ids0_ov_dqi / (Dmob * Dvsat) * Rdsi; end 2: begin T4 = 1.0 + PRWGS_i * qia; T1 = 1.0 / T4; T0 = 0.5 * (T1 + sqrt(T1 * T1 + 0.01)); Rdsi = rdstemp * (RSourceGeo + RDrainGeo + RDSWMIN_i + RDSW_i * T0) * WeffWRFactor; Dr = 1.0 + (NFINtotal) * beta * ids0_ov_dqi / (Dmob * Dvsat) * Rdsi; Rsource = 0.0; Rdrain = 0.0; end endcase tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg.va0000644000175000017500000001103714163340332024747 0ustar carstencarsten// ******************************************************** // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 *****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016__________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** `include "constants.vams" `include "disciplines.vams" /**************************************************************/ /* SHMOD is a model parameter */ /* SHMOD = 1 : Self-heating turned on */ /* SHMOD = 0 : Self-heating turned off */ /* */ /* RDSMOD is a model parameter */ /* RDSMOD = 1 : External source/drain resistance model */ /* RDSMOD = 0 : Internal source/drain resistance model */ /* RDSMOD = 2 : Internal Bias Dependent and Bias Independent part of source/drain resistance */ /* */ /* NQSMOD is a model parameter */ /* NQSMOD = 1 : NQS Resistance / gi node turned on */ /* NQSMOD = 0 : NQS Resistance / gi node turned off */ /* */ /* RGATEMOD is a model parameter */ /* RGATEMOD = 1 : Gate Resistance / ge node turned on */ /* RGATEMOD = 0 : Gate Resistance / ge node turned off */ /**************************************************************/ // // In Verilog-A the number of internal nodes cannot be controlled by // a model parameter. Therefore we use `define statements // to control it. Comment the following lines whenever // possible for best computational efficiency. `define __OPINFO__ `define __DEBUG__ `define __SHMOD__ `define __RDSMOD__ //`define __NQSMOD1__ //`define __NQSMOD2__ `define __RGATEMOD__ `define __TNOIMOD1__ //Correlated Thermal Noise Switch `include "common_defs.include" `include "bsimcmg_cfringe.include" module bsimcmg(d, g, s, e, t); inout g, d, s, e, t; electrical g, d, s, e; electrical si, di; `ifdef __NQSMOD1__ electrical gi; `endif `ifdef __NQSMOD2__ electrical q; `endif `ifdef __RGATEMOD__ electrical ge; `endif `ifdef __SHMOD__ thermal t; branch (t) rth_branch; branch (t) ith_branch; `else thermal t; `endif // Internal node controlled by Correlated Thermal Noise Switch `ifdef __TNOIMOD1__ electrical N; `endif `include "bsimcmg_body.include" endmodule tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/common_defs.include0000644000175000017500000002756114163340332026645 0ustar carstencarsten// ******************************************************** // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016__________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** // Numerical Constants `define EXPL_THRESHOLD 80.0 `define MAX_EXPL 5.540622384e34 `define MIN_EXPL 1.804851387e-35 `define N_MINLOG 1.0e-38 `define MEXPQM 4 `define DELTA_1 0.02 `define DELTA_ASYMM 0.04 `define CONSTCtoK (273.15) `define REFTEMP (300.15) /* 27 degrees C */ // Model type definitions `define ntype 1 `define ptype 0 // Physical Constants `define q 1.60219e-19 // Coul `define EPS0 8.8542e-12 // F/m `define HBAR 1.05457e-34 // Joule-sec `define MEL 9.11e-31 // kg `define KboQ 8.617087e-5 // Joule / degree // Mathematical functions //`define SINH(x) (0.5 * (lexp(x) - lexp(-(x)))) `define COSH(x) (0.5 * (lexp(x) + lexp(-(x)))) //`define TANH(x) ((lexp(x) - lexp(-(x))) / (lexp(x) + lexp(-(x)))) `define COT(x) ((x)>=`M_PI/2 ? 0 : ((x)<=-`M_PI/2 ? 0 : 1.0/tan(x))) // Junction capacitance //ex:(ves_jct, Czbs, PBS_t, SBS, MJS, MJS2, Qes1) `define BSIM6JunctnCap(vex, Cz, PB, SJ, MJ, MJ2, Qej) \ begin \ if (Cz > 0.0) begin \ T1 = vex / PB; \ if (T1 < 0.9) begin \ if (SJ > 0.0) begin /*second-step junction*/ \ vec = PB * (1.0 - lexp((1.0 / MJ) * lln(1.0/SJ))); /*Switch over voltage*/\ pb2 = PB * SJ * MJ2 / MJ / lexp(- (1.0 + MJ) * lln(1.0 - vec / PB)); /*PB for second doping region*/\ if (vex > vec) begin \ arg = 1.0 - T1; \ if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ else sarg = lexp(-MJ * lln(arg)); \ Qej = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ end else begin /*vex < vec*/ \ arg = 1.0 - vec / PB; \ if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ else sarg = lexp(-MJ * lln(arg)); \ Qec = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ arg = 1.0 - (vex - vec) / pb2; \ if (MJ2 == 0.5) sarg = 1.0 / sqrt(arg); \ else sarg = lexp(-MJ2 * lln(arg)); \ Qej = Qec + SJ * pb2 * Cz * (1.0 - arg * sarg) / (1.0 - MJ2); \ end \ end else begin /*single junction*/ \ arg = 1.0 - T1; \ if (MJ == 0.5) sarg = 1.0 / sqrt(arg); \ else sarg = lexp(-MJ * lln(arg)); \ Qej = PB * Cz * (1.0 - arg * sarg) / (1.0 - MJ); \ end \ end else begin /*vex/PB>=0.9*/ \ T2 = lexp(-MJ * lln(0.1)); \ T3 = 1.0 / (1.0-MJ); \ T4 = T2 * (T1 - 1.0) * (5.0 * MJ * (T1-1.0) + (1.0 + MJ) ); \ T5 = T3 * (1.0 - 0.05 * MJ * (1.0 + MJ) * T2 ); \ Qej = PB * Cz * (T4 + T5); /*Quadratic equation for Qej when vex/PB>=0.9*/\ end \ end else begin \ Qej = 0.0; \ end \ end // // Macros for the model/instance parameters // // MPRxx model parameter real // MPIxx model parameter integer // IPRxx instance parameter real // IPIxx instance parameter integer // || // cc closed lower bound, closed upper bound // oo open lower bound, open upper bound // co closed lower bound, open upper bound // oc open lower bound, closed upper bound // cz closed lower bound=0, open upper bound=inf // oz open lower bound=0, open upper bound=inf // nb no bounds // ex no bounds with exclude // sw switch(integer only, values 0=false and 1=true) // ty switch(integer only, values -1=p-type and +1=n-type) // // IPM instance parameter mFactor(multiplicity, implicit for LRM2.2) // OPP operating point parameter, includes units and description for printing // `define ALIAS(alias,paramName) aliasparam alias = paramName ; `define OPP(nam,uni,des) (*units=uni, desc=des*) real nam ; `define MPRnb(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def ; `define MPRex(nam,def,uni,exc, des) (*units=uni, desc=des*) parameter real nam=def exclude exc ; `define MPRcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr] ; `define MPRoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr) ; `define MPRco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from[lwr:upr) ; `define MPRoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter real nam=def from(lwr:upr] ; `define MPRcz(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def from[ 0:inf); `define MPRoz(nam,def,uni, des) (*units=uni, desc=des*) parameter real nam=def from( 0:inf); `define MPInb(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def ; `define MPIex(nam,def,uni,exc, des) (*units=uni, desc=des*) parameter integer nam=def exclude exc ; `define MPIcc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr] ; `define MPIoo(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr) ; `define MPIco(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from[lwr:upr) ; `define MPIoc(nam,def,uni,lwr,upr,des) (*units=uni, desc=des*) parameter integer nam=def from(lwr:upr] ; `define MPIcz(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ 0:inf); `define MPIoz(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from( 0:inf); `define MPIsw(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ 0: 1] ; `define MPIty(nam,def,uni, des) (*units=uni, desc=des*) parameter integer nam=def from[ -1: 1] exclude 0 ; `define IPRnb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def ; `define IPRex(nam,def,uni,exc, des) (*units=uni, type="instance", desc=des*) parameter real nam=def exclude exc ; `define IPRcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr] ; `define IPRoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr) ; `define IPRco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[lwr:upr) ; `define IPRoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter real nam=def from(lwr:upr] ; `define IPRcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from[ 0:inf); `define IPRoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter real nam=def from( 0:inf); `define IPInb(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def ; `define IPIex(nam,def,uni,exc, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def exclude exc ; `define IPIcc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr] ; `define IPIoo(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr) ; `define IPIco(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[lwr:upr) ; `define IPIoc(nam,def,uni,lwr,upr,des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from(lwr:upr] ; `define IPIcz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from[ 0:inf); `define IPIoz(nam,def,uni, des) (*units=uni, type="instance", desc=des*) parameter integer nam=def from( 0:inf); `ifdef EXPLICIT_MFACTOR `define IPM (*units="" , type="instance", desc="multiplicity factor"*) parameter real m=1.0 from(0.0:inf) ; `define MFACTOR_USE m `else // `define IPM `define MFACTOR_USE 1.0 `endif tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_binning_parameters.include0000644000175000017500000011624614163340332031723 0ustar carstencarsten// ******************************************************** // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, Sourabh Khandelwal // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016_________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** `MPRnb( LNBODY ,0.0 ,"m^-2" ,"" ) `MPRnb( NNBODY ,0.0 ,"m^-2" ,"" ) `MPRnb( PNBODY ,0.0 ,"m^-1" ,"" ) `MPRnb( LPHIG ,0.0 ,"m*eV" ,"" ) `MPRnb( NPHIG ,0.0 ,"m*eV" ,"" ) `MPRnb( PPHIG ,0.0 ,"(m^2)*eV" ,"" ) `MPRnb( LNGATE ,0.0 ,"m^-2" ,"" ) `MPRnb( NNGATE ,0.0 ,"m^-2" ,"" ) `MPRnb( PNGATE ,0.0 ,"m^-1" ,"" ) `MPRnb( LCIT ,0.0 ,"F/m" ,"" ) `MPRnb( NCIT ,0.0 ,"F/m" ,"" ) `MPRnb( PCIT ,0.0 ,"F" ,"" ) `MPRnb( LCITR ,LCIT ,"" ,"" ) `MPRnb( NCITR ,NCIT ,"" ,"" ) `MPRnb( PCITR ,PCIT ,"" ,"" ) `MPRnb( LCDSC ,0.0 ,"F/m" ,"" ) `MPRnb( NCDSC ,0.0 ,"F/m" ,"" ) `MPRnb( PCDSC ,0.0 ,"F" ,"" ) `MPRnb( LCDSCD ,0.0 ,"F/m" ,"" ) `MPRnb( NCDSCD ,0.0 ,"F/m" ,"" ) `MPRnb( PCDSCD ,0.0 ,"F" ,"" ) `MPRnb( LCDSCDR ,LCDSCD ,"F/m" ,"" ) `MPRnb( NCDSCDR ,NCDSCD ,"F/m" ,"" ) `MPRnb( PCDSCDR ,PCDSCD ,"F" ,"" ) `MPRnb( LDVT0 ,0.0 ,"" ,"" ) `MPRnb( NDVT0 ,0.0 ,"" ,"" ) `MPRnb( PDVT0 ,0.0 ,"" ,"" ) `MPRnb( LDVT1 ,0.0 ,"" ,"" ) `MPRnb( NDVT1 ,0.0 ,"" ,"" ) `MPRnb( PDVT1 ,0.0 ,"" ,"" ) `MPRnb( LDVT1SS ,LDVT1 ,"" ,"" ) `MPRnb( NDVT1SS ,NDVT1 ,"" ,"" ) `MPRnb( PDVT1SS ,PDVT1 ,"" ,"" ) `MPRnb( LPHIN ,0.0 ,"m*V" ,"" ) `MPRnb( NPHIN ,0.0 ,"m*V" ,"" ) `MPRnb( PPHIN ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LETA0 ,0.0 ,"" ,"" ) `MPRnb( NETA0 ,0.0 ,"" ,"" ) `MPRnb( PETA0 ,0.0 ,"" ,"" ) `MPRnb( LETA0R ,LETA0 ,"" ,"" ) `MPRnb( NETA0R ,NETA0 ,"" ,"" ) `MPRnb( PETA0R ,PETA0 ,"" ,"" ) `MPRnb( LDSUB ,0.0 ,"" ,"" ) `MPRnb( NDSUB ,0.0 ,"" ,"" ) `MPRnb( PDSUB ,0.0 ,"" ,"" ) `MPRnb( LK1RSCE ,0.0 ,"m*V^(1/2)" ,"" ) `MPRnb( NK1RSCE ,0.0 ,"m*V^(1/2)" ,"" ) `MPRnb( PK1RSCE ,0.0 ,"(m^2)*V^(1/2)" ,"" ) `MPRnb( LLPE0 ,0.0 ,"m^2" ,"" ) `MPRnb( NLPE0 ,0.0 ,"m^2" ,"" ) `MPRnb( PLPE0 ,0.0 ,"m^3" ,"" ) `MPRnb( LDVTSHIFT ,0.0 ,"m*V" ,"" ) `MPRnb( NDVTSHIFT ,0.0 ,"m*V" ,"" ) `MPRnb( PDVTSHIFT ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LDVTSHIFTR ,LDVTSHIFT ,"" ,"" ) `MPRnb( NDVTSHIFTR ,NDVTSHIFT ,"" ,"" ) `MPRnb( PDVTSHIFTR ,PDVTSHIFT ,"" ,"" ) `MPRnb( LPHIBE ,0.0 ,"m*V" ,"" ) `MPRnb( NPHIBE ,0.0 ,"m*V" ,"" ) `MPRnb( PPHIBE ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LK0 ,0.0 ,"m*V" ,"" ) `MPRnb( NK0 ,0.0 ,"m*V" ,"" ) `MPRnb( PK0 ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LK01 ,0.0 ,"(m*V)/K" ,"" ) `MPRnb( NK01 ,0.0 ,"(m*V)/K" ,"" ) `MPRnb( PK01 ,0.0 ,"(m^2*V)/K" ,"" ) `MPRnb( LK0SI ,0.0 ,"" ,"" ) `MPRnb( NK0SI ,0.0 ,"" ,"" ) `MPRnb( PK0SI ,0.0 ,"" ,"" ) `MPRnb( LK0SI1 ,0.0 ,"m/K" ,"" ) `MPRnb( NK0SI1 ,0.0 ,"m/K" ,"" ) `MPRnb( PK0SI1 ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LK1 ,0.0 ,"m*V^(1/2)" ,"" ) `MPRnb( NK1 ,0.0 ,"m*V^(1/2)" ,"" ) `MPRnb( PK1 ,0.0 ,"(m^2)*V^(1/2)" ,"" ) `MPRnb( LK11 ,0.0 ,"(m*V^(-1/2))/K" ,"" ) `MPRnb( NK11 ,0.0 ,"(m*V^(-1/2))/K" ,"" ) `MPRnb( PK11 ,0.0 ,"(m^2*V^(-1/2))/K" ,"" ) `MPRnb( LK2SI ,LK0SI ,"" ,"" ) `MPRnb( NK2SI ,NK0SI ,"" ,"" ) `MPRnb( PK2SI ,PK0SI ,"" ,"" ) `MPRnb( LK2SI1 ,LK0SI1 ,"" ,"" ) `MPRnb( NK2SI1 ,NK0SI1 ,"" ,"" ) `MPRnb( PK2SI1 ,PK0SI1 ,"" ,"" ) `MPRnb( LK0SISAT ,0.0 ,"" ,"" ) `MPRnb( NK0SISAT ,0.0 ,"" ,"" ) `MPRnb( PK0SISAT ,0.0 ,"" ,"" ) `MPRnb( LK0SISAT1 ,0.0 ,"" ,"" ) `MPRnb( NK0SISAT1 ,0.0 ,"" ,"" ) `MPRnb( PK0SISAT1 ,0.0 ,"" ,"" ) `MPRnb( LK2SISAT ,LK0SISAT ,"" ,"" ) `MPRnb( NK2SISAT ,NK0SISAT ,"" ,"" ) `MPRnb( PK2SISAT ,PK0SISAT ,"" ,"" ) `MPRnb( LK2SISAT1 ,LK0SISAT1 ,"" ,"" ) `MPRnb( NK2SISAT1 ,NK0SISAT1 ,"" ,"" ) `MPRnb( PK2SISAT1 ,PK0SISAT1 ,"" ,"" ) `MPRnb( LK2SAT ,0.0 ,"" ,"" ) `MPRnb( NK2SAT ,0.0 ,"" ,"" ) `MPRnb( PK2SAT ,0.0 ,"" ,"" ) `MPRnb( LK2SAT1 ,0.0 ,"" ,"" ) `MPRnb( NK2SAT1 ,0.0 ,"" ,"" ) `MPRnb( PK2SAT1 ,0.0 ,"" ,"" ) `MPRnb( LK2 ,0.0 ,"" ,"" ) `MPRnb( NK2 ,0.0 ,"" ,"" ) `MPRnb( PK2 ,0.0 ,"" ,"" ) `MPRnb( LK21 ,0.0 ,"" ,"" ) `MPRnb( NK21 ,0.0 ,"" ,"" ) `MPRnb( PK21 ,0.0 ,"" ,"" ) `MPRnb( LDVTB ,0.0 ,"" ,"" ) `MPRnb( NDVTB ,0.0 ,"" ,"" ) `MPRnb( PDVTB ,0.0 ,"" ,"" ) `MPRnb( LLPEB ,0.0 ,"" ,"" ) `MPRnb( NLPEB ,0.0 ,"" ,"" ) `MPRnb( PLPEB ,0.0 ,"" ,"" ) `MPRnb( LQMFACTOR ,0.0 ,"" ,"" ) `MPRnb( NQMFACTOR ,0.0 ,"" ,"" ) `MPRnb( PQMFACTOR ,0.0 ,"" ,"" ) `MPRnb( LQMTCENCV ,0.0 ,"" ,"" ) `MPRnb( NQMTCENCV ,0.0 ,"" ,"" ) `MPRnb( PQMTCENCV ,0.0 ,"" ,"" ) `MPRnb( LQMTCENCVA ,0.0 ,"" ,"" ) `MPRnb( NQMTCENCVA ,0.0 ,"" ,"" ) `MPRnb( PQMTCENCVA ,0.0 ,"" ,"" ) `MPRnb( LVSAT ,0.0 ,"(m^2)/s" ,"" ) `MPRnb( NVSAT ,0.0 ,"(m^2)/s" ,"" ) `MPRnb( PVSAT ,0.0 ,"(m^3)/s" ,"" ) `MPRnb( LVSATR ,LVSAT ,"" ,"" ) `MPRnb( NVSATR ,NVSAT ,"" ,"" ) `MPRnb( PVSATR ,PVSAT ,"" ,"" ) `MPRnb( LVSAT1 ,LVSAT ,"" ,"" ) `MPRnb( NVSAT1 ,NVSAT ,"" ,"" ) `MPRnb( PVSAT1 ,PVSAT ,"" ,"" ) `MPRnb( LVSAT1R ,LVSAT1 ,"(m^2)/s" ,"" ) `MPRnb( NVSAT1R ,NVSAT1 ,"(m^2)/s" ,"" ) `MPRnb( PVSAT1R ,PVSAT1 ,"(m^3)/s" ,"" ) `MPRnb( LPSAT ,0.0 ,"" ,"" ) `MPRnb( NPSAT ,0.0 ,"" ,"" ) `MPRnb( PPSAT ,0.0 ,"" ,"" ) `MPRnb( LDELTAVSAT ,0.0 ,"" ,"" ) `MPRnb( NDELTAVSAT ,0.0 ,"" ,"" ) `MPRnb( PDELTAVSAT ,0.0 ,"" ,"" ) `MPRnb( LKSATIV ,0.0 ,"" ,"" ) `MPRnb( NKSATIV ,0.0 ,"" ,"" ) `MPRnb( PKSATIV ,0.0 ,"" ,"" ) `MPRnb( LKSATIVR ,LKSATIV ,"" ,"" ) `MPRnb( NKSATIVR ,NKSATIV ,"" ,"" ) `MPRnb( PKSATIVR ,PKSATIV ,"" ,"" ) `MPRnb( LVSATCV ,0.0 ,"(m^2)/s" ,"" ) `MPRnb( NVSATCV ,0.0 ,"(m^2)/s" ,"" ) `MPRnb( PVSATCV ,0.0 ,"(m^3)/s" ,"" ) `MPRnb( LPSATCV ,0.0 ,"" ,"" ) `MPRnb( NPSATCV ,0.0 ,"" ,"" ) `MPRnb( PPSATCV ,0.0 ,"" ,"" ) `MPRnb( LDELTAVSATCV ,0.0 ,"" ,"" ) `MPRnb( NDELTAVSATCV ,0.0 ,"" ,"" ) `MPRnb( PDELTAVSATCV ,0.0 ,"" ,"" ) `MPRnb( LMEXP ,0.0 ,"" ,"" ) `MPRnb( NMEXP ,0.0 ,"" ,"" ) `MPRnb( PMEXP ,0.0 ,"" ,"" ) `MPRnb( LMEXPR ,LMEXP ,"" ,"" ) `MPRnb( NMEXPR ,NMEXP ,"" ,"" ) `MPRnb( PMEXPR ,PMEXP ,"" ,"" ) `MPRnb( LPTWG ,0.0 ,"m*(V^-2)" ,"" ) `MPRnb( NPTWG ,0.0 ,"m*(V^-2)" ,"" ) `MPRnb( PPTWG ,0.0 ,"m^2*(V^-2)" ,"" ) `MPRnb( LPTWGR ,LPTWG ,"m*(V^-2)" ,"" ) `MPRnb( NPTWGR ,NPTWG ,"m*(V^-2)" ,"" ) `MPRnb( PPTWGR ,PPTWG ,"m^2*(V^-2)" ,"" ) `MPRnb( LU0 ,0.0 ,"(m^3)/V*s" ,"" ) `MPRnb( NU0 ,0.0 ,"(m^3)/V*s" ,"" ) `MPRnb( PU0 ,0.0 ,"(m^4)/V*s" ,"" ) `MPRnb( LU0R ,LU0 ,"" ,"" ) `MPRnb( NU0R ,NU0 ,"" ,"" ) `MPRnb( PU0R ,PU0 ,"" ,"" ) `MPRnb( LETAMOB ,0.0 ,"" ,"" ) `MPRnb( NETAMOB ,0.0 ,"" ,"" ) `MPRnb( PETAMOB ,0.0 ,"" ,"" ) `MPRnb( LUP ,0.0 ,"m*(um^LPA)" ,"" ) `MPRnb( NUP ,0.0 ,"m*(um^LPA)" ,"" ) `MPRnb( PUP ,0.0 ,"m^2*(um^LPA)" ,"" ) `MPRnb( LUPR ,LUP ,"" ,"" ) `MPRnb( NUPR ,NUP ,"" ,"" ) `MPRnb( PUPR ,PUP ,"" ,"" ) `MPRnb( LUA ,0.0 ,"m*((cm/MV)^EU)" ,"" ) `MPRnb( NUA ,0.0 ,"m*((cm/MV)^EU)" ,"" ) `MPRnb( PUA ,0.0 ,"m^2*((cm/MV)^EU)" ,"" ) `MPRnb( LUAR ,LUA ,"" ,"" ) `MPRnb( NUAR ,NUA ,"" ,"" ) `MPRnb( PUAR ,PUA ,"" ,"" ) `MPRnb( LUC ,0.0 ,"" ,"" ) `MPRnb( NUC ,0.0 ,"" ,"" ) `MPRnb( PUC ,0.0 ,"" ,"" ) `MPRnb( LUCR ,LUC ,"" ,"" ) `MPRnb( NUCR ,NUC ,"" ,"" ) `MPRnb( PUCR ,PUC ,"" ,"" ) `MPRnb( LEU ,0.0 ,"m*(cm/MV)" ,"" ) `MPRnb( NEU ,0.0 ,"m*(cm/MV)" ,"" ) `MPRnb( PEU ,0.0 ,"m^2*(cm/MV)" ,"" ) `MPRnb( LEUR ,LEU ,"" ,"" ) `MPRnb( NEUR ,NEU ,"" ,"" ) `MPRnb( PEUR ,PEU ,"" ,"" ) `MPRnb( LUD ,0.0 ,"m*(cm/MV)" ,"" ) `MPRnb( NUD ,0.0 ,"m*(cm/MV)" ,"" ) `MPRnb( PUD ,0.0 ,"m^2*(cm/MV)" ,"" ) `MPRnb( LUDR ,LUD ,"" ,"" ) `MPRnb( NUDR ,NUD ,"" ,"" ) `MPRnb( PUDR ,PUD ,"" ,"" ) `MPRnb( LUCS ,0.0 ,"" ,"" ) `MPRnb( NUCS ,0.0 ,"" ,"" ) `MPRnb( PUCS ,0.0 ,"" ,"" ) `MPRnb( LPCLM ,0.0 ,"" ,"" ) `MPRnb( NPCLM ,0.0 ,"" ,"" ) `MPRnb( PPCLM ,0.0 ,"" ,"" ) `MPRnb( LPCLMR ,LPCLM ,"" ,"" ) `MPRnb( NPCLMR ,NPCLM ,"" ,"" ) `MPRnb( PPCLMR ,PPCLM ,"" ,"" ) `MPRnb( LPCLMG ,0.0 ,"" ,"" ) `MPRnb( NPCLMG ,0.0 ,"" ,"" ) `MPRnb( PPCLMG ,0.0 ,"" ,"" ) `MPRnb( LPCLMCV ,LPCLM ,"" ,"" ) `MPRnb( NPCLMCV ,NPCLM ,"" ,"" ) `MPRnb( PPCLMCV ,PPCLM ,"" ,"" ) `MPRnb( LA1 ,0.0 ,"m*(V^-2)" ,"" ) `MPRnb( NA1 ,0.0 ,"m*(V^-2)" ,"" ) `MPRnb( PA1 ,0.0 ,"m^2*(V^-2)" ,"" ) `MPRnb( LA11 ,0.0 ,"m*(V^-2/K)" ,"" ) `MPRnb( NA11 ,0.0 ,"m*(V^-2/K)" ,"" ) `MPRnb( PA11 ,0.0 ,"m^2*(V^-2/K)" ,"" ) `MPRnb( LA2 ,0.0 ,"m*(V^-1)" ,"" ) `MPRnb( NA2 ,0.0 ,"m*(V^-1)" ,"" ) `MPRnb( PA2 ,0.0 ,"m^2*(V^-1)" ,"" ) `MPRnb( LA21 ,0.0 ,"m*(V^-1/K)" ,"" ) `MPRnb( NA21 ,0.0 ,"m*(V^-1/K)" ,"" ) `MPRnb( PA21 ,0.0 ,"m^2*(V^-1/K)" ,"" ) `MPRnb( LRDSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( NRDSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( PRDSW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) `MPRnb( LRSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( NRSW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( PRSW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) `MPRnb( LRDW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( NRDW ,0.0 ,"m*(ohm-um^WR)" ,"" ) `MPRnb( PRDW ,0.0 ,"(m^2)*(ohm-um^WR)" ,"" ) `MPRnb( LPRWGS ,0.0 ,"m/V" ,"" ) `MPRnb( NPRWGS ,0.0 ,"m/V" ,"" ) `MPRnb( PPRWGS ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LPRWGD ,0.0 ,"m/V" ,"" ) `MPRnb( NPRWGD ,0.0 ,"m/V" ,"" ) `MPRnb( PPRWGD ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LWR ,0.0 ,"" ,"" ) `MPRnb( NWR ,0.0 ,"" ,"" ) `MPRnb( PWR ,0.0 ,"" ,"" ) `MPRnb( LPDIBL1 ,0.0 ,"" ,"" ) `MPRnb( NPDIBL1 ,0.0 ,"" ,"" ) `MPRnb( PPDIBL1 ,0.0 ,"" ,"" ) `MPRnb( LPDIBL1R ,LPDIBL1 ,"" ,"" ) `MPRnb( NPDIBL1R ,NPDIBL1 ,"" ,"" ) `MPRnb( PPDIBL1R ,PPDIBL1 ,"" ,"" ) `MPRnb( LPDIBL2 ,0.0 ,"" ,"" ) `MPRnb( NPDIBL2 ,0.0 ,"" ,"" ) `MPRnb( PPDIBL2 ,0.0 ,"" ,"" ) `MPRnb( LPDIBL2R ,LPDIBL2 ,"" ,"" ) `MPRnb( NPDIBL2R ,NPDIBL2 ,"" ,"" ) `MPRnb( PPDIBL2R ,PPDIBL2 ,"" ,"" ) `MPRnb( LDROUT ,0.0 ,"" ,"" ) `MPRnb( NDROUT ,0.0 ,"" ,"" ) `MPRnb( PDROUT ,0.0 ,"" ,"" ) `MPRnb( LPVAG ,0.0 ,"" ,"" ) `MPRnb( NPVAG ,0.0 ,"" ,"" ) `MPRnb( PPVAG ,0.0 ,"" ,"" ) `MPRnb( LAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( NAIGBINV ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( PAIGBINV ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) `MPRnb( LAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( NAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( PAIGBINV1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) `MPRnb( LBIGBINV ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( NBIGBINV ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( PBIGBINV ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) `MPRnb( LCIGBINV ,0.0 ,"m/V" ,"" ) `MPRnb( NCIGBINV ,0.0 ,"m/V" ,"" ) `MPRnb( PCIGBINV ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LEIGBINV ,0.0 ,"m*V" ,"" ) `MPRnb( NEIGBINV ,0.0 ,"m*V" ,"" ) `MPRnb( PEIGBINV ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LNIGBINV ,0.0 ,"" ,"" ) `MPRnb( NNIGBINV ,0.0 ,"" ,"" ) `MPRnb( PNIGBINV ,0.0 ,"" ,"" ) `MPRnb( LAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( NAIGBACC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( PAIGBACC ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) `MPRnb( LAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( NAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( PAIGBACC1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) `MPRnb( LBIGBACC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( NBIGBACC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( PBIGBACC ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) `MPRnb( LCIGBACC ,0.0 ,"m/V" ,"" ) `MPRnb( NCIGBACC ,0.0 ,"m/V" ,"" ) `MPRnb( PCIGBACC ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LNIGBACC ,0.0 ,"" ,"" ) `MPRnb( NNIGBACC ,0.0 ,"" ,"" ) `MPRnb( PNIGBACC ,0.0 ,"" ,"" ) `MPRnb( LAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( NAIGC ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( PAIGC ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) `MPRnb( LAIGC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( NAIGC1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( PAIGC1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) `MPRnb( LBIGC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( NBIGC ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( PBIGC ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) `MPRnb( LCIGC ,0.0 ,"m/V" ,"" ) `MPRnb( NCIGC ,0.0 ,"m/V" ,"" ) `MPRnb( PCIGC ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LPIGCD ,0.0 ,"" ,"" ) `MPRnb( NPIGCD ,0.0 ,"" ,"" ) `MPRnb( PPIGCD ,0.0 ,"" ,"" ) `MPRnb( LAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( NAIGS ,0.0 ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( PAIGS ,0.0 ,"((F*s^2/g)^0.5)*m" ,"" ) `MPRnb( LAIGS1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( NAIGS1 ,0.0 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( PAIGS1 ,0.0 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) `MPRnb( LBIGS ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( NBIGS ,0.0 ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( PBIGS ,0.0 ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) `MPRnb( LCIGS ,0.0 ,"m/V" ,"" ) `MPRnb( NCIGS ,0.0 ,"m/V" ,"" ) `MPRnb( PCIGS ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LAIGD ,LAIGS ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( NAIGD ,NAIGS ,"(F*s^2/g)^0.5" ,"" ) `MPRnb( PAIGD ,PAIGS ,"((F*s^2/g)^0.5)*m" ,"" ) `MPRnb( LAIGD1 ,LAIGS1 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( NAIGD1 ,NAIGS1 ,"((F*s^2/g)^0.5)/K" ,"" ) `MPRnb( PAIGD1 ,PAIGS1 ,"((F*s^2/g)^0.5)*(m/K)" ,"" ) `MPRnb( LBIGD ,LBIGS ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( NBIGD ,NBIGS ,"((F*s^2/g)^0.5)/V" ,"" ) `MPRnb( PBIGD ,PBIGS ,"((F*s^2/g)^0.5)*(m/V)" ,"" ) `MPRnb( LCIGD ,LCIGS ,"m/V" ,"" ) `MPRnb( NCIGD ,NCIGS ,"m/V" ,"" ) `MPRnb( PCIGD ,PCIGS ,"(m^2)/V" ,"" ) `MPRnb( LNTOX ,0.0 ,"" ,"" ) `MPRnb( NNTOX ,0.0 ,"" ,"" ) `MPRnb( PNTOX ,0.0 ,"" ,"" ) `MPRnb( LPOXEDGE ,0.0 ,"" ,"" ) `MPRnb( NPOXEDGE ,0.0 ,"" ,"" ) `MPRnb( PPOXEDGE ,0.0 ,"" ,"" ) `MPRnb( LAGISL ,0.0 ,"m/ohm" ,"" ) `MPRnb( NAGISL ,0.0 ,"m/ohm" ,"" ) `MPRnb( PAGISL ,0.0 ,"(m^2)/ohm" ,"" ) `MPRnb( LBGISL ,0.0 ,"V" ,"" ) `MPRnb( NBGISL ,0.0 ,"V" ,"" ) `MPRnb( PBGISL ,0.0 ,"m*V" ,"" ) `MPRnb( LCGISL ,0.0 ,"m*(V^3)" ,"" ) `MPRnb( NCGISL ,0.0 ,"m*(V^3)" ,"" ) `MPRnb( PCGISL ,0.0 ,"(m^2)*(V^3)" ,"" ) `MPRnb( LEGISL ,0.0 ,"m*V" ,"" ) `MPRnb( NEGISL ,0.0 ,"m*V" ,"" ) `MPRnb( PEGISL ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LPGISL ,0.0 ,"" ,"" ) `MPRnb( NPGISL ,0.0 ,"" ,"" ) `MPRnb( PPGISL ,0.0 ,"" ,"" ) `MPRnb( LAGIDL ,LAGISL ,"m/ohm" ,"" ) `MPRnb( NAGIDL ,NAGISL ,"m/ohm" ,"" ) `MPRnb( PAGIDL ,PAGISL ,"(m^2)/ohm" ,"" ) `MPRnb( LBGIDL ,LBGISL ,"V" ,"" ) `MPRnb( NBGIDL ,NBGISL ,"V" ,"" ) `MPRnb( PBGIDL ,PBGISL ,"m*V" ,"" ) `MPRnb( LCGIDL ,LCGISL ,"m*(V^3)" ,"" ) `MPRnb( NCGIDL ,NCGISL ,"m*(V^3)" ,"" ) `MPRnb( PCGIDL ,PCGISL ,"(m^2)*(V^3)" ,"" ) `MPRnb( LEGIDL ,LEGISL ,"m*V" ,"" ) `MPRnb( NEGIDL ,NEGISL ,"m*V" ,"" ) `MPRnb( PEGIDL ,PEGISL ,"(m^2)*V" ,"" ) `MPRnb( LPGIDL ,LPGISL ,"" ,"" ) `MPRnb( NPGIDL ,NPGISL ,"" ,"" ) `MPRnb( PPGIDL ,PPGISL ,"" ,"" ) `MPRnb( LALPHA0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( NALPHA0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( PALPHA0 ,0.0 ,"(m^3)/V" ,"" ) `MPRnb( LALPHA1 ,0.0 ,"m/V" ,"" ) `MPRnb( NALPHA1 ,0.0 ,"m/V" ,"" ) `MPRnb( PALPHA1 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LALPHAII0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( NALPHAII0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( PALPHAII0 ,0.0 ,"(m^3)/V" ,"" ) `MPRnb( LALPHAII1 ,0.0 ,"m/V" ,"" ) `MPRnb( NALPHAII1 ,0.0 ,"m/V" ,"" ) `MPRnb( PALPHAII1 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LBETA0 ,0.0 ,"m/V" ,"" ) `MPRnb( NBETA0 ,0.0 ,"m/V" ,"" ) `MPRnb( PBETA0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LBETAII0 ,0.0 ,"m/V" ,"" ) `MPRnb( NBETAII0 ,0.0 ,"m/V" ,"" ) `MPRnb( PBETAII0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LBETAII1 ,0.0 ,"" ,"" ) `MPRnb( NBETAII1 ,0.0 ,"" ,"" ) `MPRnb( PBETAII1 ,0.0 ,"" ,"" ) `MPRnb( LBETAII2 ,0.0 ,"m*V" ,"" ) `MPRnb( NBETAII2 ,0.0 ,"m*V" ,"" ) `MPRnb( PBETAII2 ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LESATII ,0.0 ,"V" ,"" ) `MPRnb( NESATII ,0.0 ,"V" ,"" ) `MPRnb( PESATII ,0.0 ,"m*V" ,"" ) `MPRnb( LLII ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( NLII ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( PLII ,0.0 ,"(m^3)*V" ,"" ) `MPRnb( LSII0 ,0.0 ,"m/V" ,"" ) `MPRnb( NSII0 ,0.0 ,"m/V" ,"" ) `MPRnb( PSII0 ,0.0 ,"(m^2)/V" ,"" ) `MPRnb( LSII1 ,0.0 ,"" ,"" ) `MPRnb( NSII1 ,0.0 ,"" ,"" ) `MPRnb( PSII1 ,0.0 ,"" ,"" ) `MPRnb( LSII2 ,0.0 ,"m*V" ,"" ) `MPRnb( NSII2 ,0.0 ,"m*V" ,"" ) `MPRnb( PSII2 ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LSIID ,0.0 ,"m*V" ,"" ) `MPRnb( NSIID ,0.0 ,"m*V" ,"" ) `MPRnb( PSIID ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LCFS ,0.0 ,"F" ,"" ) `MPRnb( NCFS ,0.0 ,"F" ,"" ) `MPRnb( PCFS ,0.0 ,"F*m" ,"" ) `MPRnb( LCFD ,LCFS ,"F" ,"" ) `MPRnb( NCFD ,NCFS ,"F" ,"" ) `MPRnb( PCFD ,PCFS ,"F*m" ,"" ) `MPRnb( LCOVS ,0.0 ,"F" ,"" ) `MPRnb( NCOVS ,0.0 ,"F" ,"" ) `MPRnb( PCOVS ,0.0 ,"F*m" ,"" ) `MPRnb( LCOVD ,LCOVS ,"F" ,"" ) `MPRnb( NCOVD ,NCOVS ,"F" ,"" ) `MPRnb( PCOVD ,PCOVS ,"F*m" ,"" ) `MPRnb( LCGSL ,0.0 ,"F" ,"" ) `MPRnb( NCGSL ,0.0 ,"F" ,"" ) `MPRnb( PCGSL ,0.0 ,"F*m" ,"" ) `MPRnb( LCGDL ,LCGSL ,"F" ,"" ) `MPRnb( NCGDL ,NCGSL ,"F" ,"" ) `MPRnb( PCGDL ,PCGSL ,"F*m" ,"" ) `MPRnb( LCKAPPAS ,0.0 ,"m*V" ,"" ) `MPRnb( NCKAPPAS ,0.0 ,"m*V" ,"" ) `MPRnb( PCKAPPAS ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LCKAPPAD ,LCKAPPAS ,"m*V" ,"" ) `MPRnb( NCKAPPAD ,NCKAPPAS ,"m*V" ,"" ) `MPRnb( PCKAPPAD ,PCKAPPAS ,"(m^2)*V" ,"" ) `MPRnb( LCGBL ,0.0 ,"F" ,"" ) `MPRnb( NCGBL ,0.0 ,"F" ,"" ) `MPRnb( PCGBL ,0.0 ,"F*m" ,"" ) `MPRnb( LCKAPPAB ,0.0 ,"m*V" ,"" ) `MPRnb( NCKAPPAB ,0.0 ,"m*V" ,"" ) `MPRnb( PCKAPPAB ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LNTGEN ,0.0 ,"" ,"" ) `MPRnb( NNTGEN ,0.0 ,"" ,"" ) `MPRnb( PNTGEN ,0.0 ,"" ,"" ) `MPRnb( LAIGEN ,0.0 ,"(m^-2)*(V^-1)" ,"" ) `MPRnb( NAIGEN ,0.0 ,"(m^-2)*(V^-1)" ,"" ) `MPRnb( PAIGEN ,0.0 ,"(m^-1)*(V^-1)" ,"" ) `MPRnb( LBIGEN ,0.0 ,"(m^-2)*(V^-3)" ,"" ) `MPRnb( NBIGEN ,0.0 ,"(m^-2)*(V^-3)" ,"" ) `MPRnb( PBIGEN ,0.0 ,"(m^-1)*(V^-3)" ,"" ) `MPRnb( LXRCRG1 ,0.0 ,"" ,"" ) `MPRnb( NXRCRG1 ,0.0 ,"" ,"" ) `MPRnb( PXRCRG1 ,0.0 ,"" ,"" ) `MPRnb( LXRCRG2 ,0.0 ,"" ,"" ) `MPRnb( NXRCRG2 ,0.0 ,"" ,"" ) `MPRnb( PXRCRG2 ,0.0 ,"" ,"" ) `MPRnb( LUTE ,0.0 ,"" ,"" ) `MPRnb( NUTE ,0.0 ,"" ,"" ) `MPRnb( PUTE ,0.0 ,"" ,"" ) `MPRnb( LUTER ,LUTE ,"" ,"" ) `MPRnb( NUTER ,NUTE ,"" ,"" ) `MPRnb( PUTER ,PUTE ,"" ,"" ) `MPRnb( LUTL ,0.0 ,"" ,"" ) `MPRnb( NUTL ,0.0 ,"" ,"" ) `MPRnb( PUTL ,0.0 ,"" ,"" ) `MPRnb( LUTLR ,LUTL ,"" ,"" ) `MPRnb( NUTLR ,NUTL ,"" ,"" ) `MPRnb( PUTLR ,PUTL ,"" ,"" ) `MPRnb( LEMOBT ,0.0 ,"" ,"" ) `MPRnb( NEMOBT ,0.0 ,"" ,"" ) `MPRnb( PEMOBT ,0.0 ,"" ,"" ) `MPRnb( LUA1 ,0.0 ,"" ,"" ) `MPRnb( NUA1 ,0.0 ,"" ,"" ) `MPRnb( PUA1 ,0.0 ,"" ,"" ) `MPRnb( LUA1R ,LUA1 ,"" ,"" ) `MPRnb( NUA1R ,NUA1 ,"" ,"" ) `MPRnb( PUA1R ,PUA1 ,"" ,"" ) `MPRnb( LUC1 ,0.0 ,"" ,"" ) `MPRnb( NUC1 ,0.0 ,"" ,"" ) `MPRnb( PUC1 ,0.0 ,"" ,"" ) `MPRnb( LUC1R ,LUC1 ,"" ,"" ) `MPRnb( NUC1R ,NUC1 ,"" ,"" ) `MPRnb( PUC1R ,PUC1 ,"" ,"" ) `MPRnb( LUD1 ,0.0 ,"" ,"" ) `MPRnb( NUD1 ,0.0 ,"" ,"" ) `MPRnb( PUD1 ,0.0 ,"" ,"" ) `MPRnb( LUD1R ,LUD1 ,"" ,"" ) `MPRnb( NUD1R ,NUD1 ,"" ,"" ) `MPRnb( PUD1R ,PUD1 ,"" ,"" ) `MPRnb( LUCSTE ,0.0 ,"" ,"" ) `MPRnb( NUCSTE ,0.0 ,"" ,"" ) `MPRnb( PUCSTE ,0.0 ,"" ,"" ) `MPRnb( LPTWGT ,0.0 ,"m/K" ,"" ) `MPRnb( NPTWGT ,0.0 ,"m/K" ,"" ) `MPRnb( PPTWGT ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LAT ,0.0 ,"m/K" ,"" ) `MPRnb( NAT ,0.0 ,"m/K" ,"" ) `MPRnb( PAT ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LATR ,LAT ,"" ,"" ) `MPRnb( NATR ,NAT ,"" ,"" ) `MPRnb( PATR ,PAT ,"" ,"" ) `MPRnb( LATCV ,0.0 ,"m/K" ,"" ) `MPRnb( NATCV ,0.0 ,"m/K" ,"" ) `MPRnb( PATCV ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LSTTHETASAT ,0.0 ,"" ,"" ) `MPRnb( NSTTHETASAT ,0.0 ,"" ,"" ) `MPRnb( PSTTHETASAT ,0.0 ,"" ,"" ) `MPRnb( LPRT ,0.0 ,"m/K" ,"" ) `MPRnb( NPRT ,0.0 ,"m/K" ,"" ) `MPRnb( PPRT ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LKT1 ,0.0 ,"m*V" ,"" ) `MPRnb( NKT1 ,0.0 ,"m*V" ,"" ) `MPRnb( PKT1 ,0.0 ,"(m^2)*V" ,"" ) `MPRnb( LTSS ,0.0 ,"" ,"" ) `MPRnb( NTSS ,0.0 ,"" ,"" ) `MPRnb( PTSS ,0.0 ,"" ,"" ) `MPRnb( LIIT ,0.0 ,"" ,"" ) `MPRnb( NIIT ,0.0 ,"" ,"" ) `MPRnb( PIIT ,0.0 ,"" ,"" ) `MPRnb( LTII ,0.0 ,"" ,"" ) `MPRnb( NTII ,0.0 ,"" ,"" ) `MPRnb( PTII ,0.0 ,"" ,"" ) `MPRnb( LTGIDL ,0.0 ,"m/K" ,"" ) `MPRnb( NTGIDL ,0.0 ,"m/K" ,"" ) `MPRnb( PTGIDL ,0.0 ,"(m^2)/K" ,"" ) `MPRnb( LIGT ,0.0 ,"" ,"" ) `MPRnb( NIGT ,0.0 ,"" ,"" ) `MPRnb( PIGT ,0.0 ,"" ,"" ) tmp_ns50wwy/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_quasi_static_cv.include0000644000175000017500000000722614163340332031232 0ustar carstencarsten// ******************************************************** // **** BSIM-CMG 110.0.0 released by Sourabh Khandelwal on 01/01/2016 ****/ // * BSIM Common Multi-Gate Model Equations (Verilog-A) // ******************************************************** // // ******************************************************** // * Copyright 2016 Regents of the University of California. // * All rights reserved. // * // * Project Director: Prof. Chenming Hu. // * Authors: Sriramkumar V., Navid Paydavosi, Juan Duarte, Darsen Lu, // * Chung-Hsun Lin, Mohan Dunga, Shijing Yao, // * Ali Niknejad, Chenming Hu // ******************************************************** // ******************************************************** // * NONDISCLOSURE STATEMENT // 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. 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 // Agreed to on __Jan 01, 2016_________________ // By: ___University of California, Berkeley____ // ___Chenming Hu_____________________ // ___Professor in Graduate School _______ // ******************************************************** // *** Quasi Static CV Model *** T11 = (2.0*qia+nVtm)/DvsatCV;//G qg = qia+dqi*dqi/(6.0*T11);//qc qd = -0.5*(qia-(dqi/(6.0))*(1.0-(dqi/T11)*(1+dqi/(5.0*T11))));//qd // Including CLM in qg and qd inv_MclmCV = 1.0 / MclmCV; qg = inv_MclmCV * qg + (MclmCV - 1.0) * qid; qd = inv_MclmCV * inv_MclmCV * qd + 0.5 * (MclmCV - inv_MclmCV) * qid; //Calculating partition for NQSMOD2 `ifdef __NQSMOD2__ if(NQSMOD == 2) xdpart = qd / qg; else xdpart = 0; `endif qs = -qg-qd; //from charge conservation qs = -qg-qd; T6 = NFINtotal*WeffCV0 * LeffCV * coxeff; qg = T6*qg; qd = T6*qd; qs = T6*qs; qinv = qg ; if(BULKMOD != 0) begin T1 = NFINtotal * WeffCV0 * LeffCV_acc * cox_acc; T7 = qi_acc_for_QM;//qbulk T10 = T7 * T1; qg_acc = - T10; qb_acc = T10; T1 = NFINtotal * WeffCV0 * LeffCV * cox; T2 = qba - qi_acc_for_QM; T10 = T1*T2; qg_acc = qg_acc - T10; qb_acc = qb_acc + T10; T1 = NFINtotal * WeffCV0 * LeffCV * cox; T2 = (nq-1.0)*0.5*(qia+(dqi*dqi/(6.0*T11))); T10 = T1*T2; qg_acc = qg_acc - T10; qb_acc = qb_acc + T10; end // if vds is negative, physical charge on qd is qs if (sigvds < 0) begin T1 = qd; qd = qs; qs = T1; end tmp_ns50wwy/src/spicelib/devices/adms/psp102/0000755000175000017500000000000014163340332021125 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/res/0000755000175000017500000000000014163340332017745 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/res/resnoise.c0000644000175000017500000001723514163340332021750 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); } tmp_ns50wwy/src/spicelib/devices/res/ressacl.c0000644000175000017500000000356014163340332021551 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); } tmp_ns50wwy/src/spicelib/devices/res/ressoachk.c0000644000175000017500000000227514163340332022101 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; } tmp_ns50wwy/src/spicelib/devices/res/Makefile.am0000644000175000017500000000074714163340332022011 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 tmp_ns50wwy/src/spicelib/devices/res/respzld.c0000644000175000017500000000227214163340332021577 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); } tmp_ns50wwy/src/spicelib/devices/res/resload.c0000644000175000017500000000374614163340332021554 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); } tmp_ns50wwy/src/spicelib/devices/res/resdefs.h0000644000175000017500000001733014163340332021555 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*/ tmp_ns50wwy/src/spicelib/devices/res/resmask.c0000644000175000017500000000447414163340332021567 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); } } tmp_ns50wwy/src/spicelib/devices/res/ressetup.c0000644000175000017500000000607614163340332021774 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); } tmp_ns50wwy/src/spicelib/devices/res/resparam.c0000644000175000017500000000473714163340332021736 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; if (here->REStemp < 1e-6) here->REStemp = 0; 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); } tmp_ns50wwy/src/spicelib/devices/res/resext.h0000644000175000017500000000161214163340332021430 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 *); tmp_ns50wwy/src/spicelib/devices/res/resitf.h0000644000175000017500000000025514163340332021414 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 tmp_ns50wwy/src/spicelib/devices/res/resask.c0000644000175000017500000001307414163340332021406 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 = tprintf("%s: %s", inst->GENname, msg); errRtn = "RESask"; 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 = tprintf("%s: %s", inst->GENname, msg); errRtn = "RESask"; 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 */ } tmp_ns50wwy/src/spicelib/devices/res/ressload.c0000644000175000017500000000266014163340332021731 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); } tmp_ns50wwy/src/spicelib/devices/res/res.c0000644000175000017500000001037314163340332020706 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); tmp_ns50wwy/src/spicelib/devices/res/resinit.c0000644000175000017500000000312114163340332021563 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; } tmp_ns50wwy/src/spicelib/devices/res/ressprt.c0000644000175000017500000000270314163340332021615 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); } } } tmp_ns50wwy/src/spicelib/devices/res/resmpar.c0000644000175000017500000000462114163340332021565 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); } tmp_ns50wwy/src/spicelib/devices/res/ressset.c0000644000175000017500000000176114163340332021606 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); } tmp_ns50wwy/src/spicelib/devices/res/restemp.c0000644000175000017500000000636114163340332021576 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; } } tmp_ns50wwy/src/spicelib/devices/res/resinit.h0000644000175000017500000000035614163340332021577 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 tmp_ns50wwy/src/spicelib/devices/numos/0000755000175000017500000000000014163340332020315 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/numos/numosext.h0000644000175000017500000000163414163340332022354 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 */ tmp_ns50wwy/src/spicelib/devices/numos/Makefile.am0000644000175000017500000000072214163340332022352 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 tmp_ns50wwy/src/spicelib/devices/numos/nummload.c0000644000175000017500000005374514163340332022313 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 = 0.0, is = 0.0, ig = 0.0; double ideq, iseq, igeq; double idhat = 0.0, ishat = 0.0, ighat = 0.0; double delVdb, delVsb, delVgb; double vdb, vsb, vgb; int icheck; int icheck1; int i; double deltaNorm[7]; int devConverged = 0; int numDevNonCon; int deviceType; int doInitSolve; int doVoltPred; char *initStateName; struct mosConductances g; /* remove compiler warning */ g.dIdDVdb = 0.0; g.dIdDVsb = 0.0; g.dIdDVgb = 0.0; g.dIsDVdb = 0.0; g.dIsDVsb = 0.0; g.dIsDVgb = 0.0; g.dIgDVdb = 0.0; g.dIgDVsb = 0.0; g.dIgDVgb = 0.0; /* 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); } tmp_ns50wwy/src/spicelib/devices/numos/numm.c0000644000175000017500000000736214163340332021445 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); tmp_ns50wwy/src/spicelib/devices/numos/nummparm.c0000644000175000017500000000245514163340332022323 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); } tmp_ns50wwy/src/spicelib/devices/numos/numosdef.h0000644000175000017500000002006514163340332022311 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 */ tmp_ns50wwy/src/spicelib/devices/numos/numositf.h0000644000175000017500000000027314163340332022334 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 tmp_ns50wwy/src/spicelib/devices/numos/nummask.c0000644000175000017500000002540514163340332022142 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 */ } tmp_ns50wwy/src/spicelib/devices/numos/nummdump.c0000644000175000017500000001212614163340332022325 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; BOOLEAN writeAscii = TRUE; 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); writeAscii = compareFiletypeVar("ascii"); fpState = fopen(fileName, (writeAscii ? "w" : "wb")); if (!fpState) { perror(fileName); } else { NUMOSputHeader(fpState, ckt, inst); TWOprnSolution(fpState, inst->NUMOSpDevice, model->NUMOSoutputs, writeAscii, "numos"); 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); } } } } tmp_ns50wwy/src/spicelib/devices/numos/nummpzld.c0000644000175000017500000001021414163340332022325 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); } tmp_ns50wwy/src/spicelib/devices/numos/numosinit.h0000644000175000017500000000040214163340332022507 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 tmp_ns50wwy/src/spicelib/devices/numos/numosinit.c0000644000175000017500000000322314163340332022506 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; } tmp_ns50wwy/src/spicelib/devices/numos/nummtemp.c0000644000175000017500000000706614163340332022334 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); } tmp_ns50wwy/src/spicelib/devices/numos/nummmpar.c0000644000175000017500000000134014163340332022313 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); } tmp_ns50wwy/src/spicelib/devices/numos/nummdel.c0000644000175000017500000000114614163340332022124 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; } tmp_ns50wwy/src/spicelib/devices/numos/nummtrun.c0000644000175000017500000000273514163340332022355 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); } tmp_ns50wwy/src/spicelib/devices/numos/nummset.c0000644000175000017500000002203714163340332022155 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); } tmp_ns50wwy/src/spicelib/devices/numos/nummacld.c0000644000175000017500000001412214163340332022261 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); } tmp_ns50wwy/src/spicelib/devices/mos1/0000755000175000017500000000000014163340332020033 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mos1/mos1init.h0000644000175000017500000000037014163340332021747 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 tmp_ns50wwy/src/spicelib/devices/mos1/mos1dset.c0000644000175000017500000004560314163340332021746 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); } tmp_ns50wwy/src/spicelib/devices/mos1/Makefile.am0000644000175000017500000000112214163340332022063 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 tmp_ns50wwy/src/spicelib/devices/mos1/mos1par.c0000644000175000017500000000740214163340332021564 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->MOS1icVBS = *(value->v.vec.rVec+2); here->MOS1icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->MOS1icVGS = *(value->v.vec.rVec+1); here->MOS1icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1defs.h0000644000175000017500000004304514163340332021733 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*/ tmp_ns50wwy/src/spicelib/devices/mos1/mos1sset.c0000644000175000017500000000261014163340332021754 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1conv.c0000644000175000017500000000634714163340332021756 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1sld.c0000644000175000017500000006440114163340332021566 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1supd.c0000644000175000017500000001566714163340332021771 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1sprt.c0000644000175000017500000000417414163340332021775 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"); } } } } tmp_ns50wwy/src/spicelib/devices/mos1/mos1mpar.c0000644000175000017500000001226114163340332021740 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1pzld.c0000644000175000017500000001205414163340332021752 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1del.c0000644000175000017500000000057314163340332021550 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; } tmp_ns50wwy/src/spicelib/devices/mos1/mos1set.c0000644000175000017500000001735114163340332021601 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; } tmp_ns50wwy/src/spicelib/devices/mos1/mos1ext.h0000644000175000017500000000236514163340332021612 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*); tmp_ns50wwy/src/spicelib/devices/mos1/mos1noi.c0000644000175000017500000001364514163340332021575 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1acld.c0000644000175000017500000001045414163340332021706 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1itf.h0000644000175000017500000000026714163340332021573 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 tmp_ns50wwy/src/spicelib/devices/mos1/mos1ic.c0000644000175000017500000000245314163340332021376 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1.c0000644000175000017500000002220114163340332021053 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); tmp_ns50wwy/src/spicelib/devices/mos1/mos1ask.c0000644000175000017500000004071014163340332021557 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 */ } tmp_ns50wwy/src/spicelib/devices/mos1/mos1mask.c0000644000175000017500000000720014163340332021731 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 */ } tmp_ns50wwy/src/spicelib/devices/mos1/mos1temp.c0000644000175000017500000003425414163340332021754 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1init.c0000644000175000017500000000326214163340332021745 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; } tmp_ns50wwy/src/spicelib/devices/mos1/mos1trun.c0000644000175000017500000000135514163340332021773 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1sacl.c0000644000175000017500000007420514163340332021731 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1dist.c0000644000175000017500000007716714163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/mos1/mos1load.c0000644000175000017500000011323614163340332021724 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/0000755000175000017500000000000014163340332020704 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvtemp.c0000644000175000017500000003767514163340332023105 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvpzld.c0000644000175000017500000004275314163340332023102 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhveval_qover.h0000644000175000017500000006052714163340332024300 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/Makefile.am0000644000175000017500000000127414163340332022744 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 tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhveval.c0000644000175000017500000072415214163340332023060 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvpar.c0000644000175000017500000001311414163340332022700 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; /* FALLTHROUGH */ case 2: here->HSMHV_icVGS = *(value->v.vec.rVec + 1); here->HSMHV_icVGS_Given = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvask.c0000644000175000017500000003341314163340332022700 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 */ } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvmask.c0000644000175000017500000014465414163340332023067 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 */ } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvext.h0000644000175000017500000000312314163340332022722 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 *); tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvevalenv.h0000644000175000017500000000456214163340332023572 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhv.c0000644000175000017500000014464114163340332022207 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); tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvacld.c0000644000175000017500000003502714163340332023030 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvgetic.c0000644000175000017500000000273314163340332023216 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvsoachk.c0000644000175000017500000003613114163340332023372 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvinit.h0000644000175000017500000000040214163340332023062 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 tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvtrunc.c0000644000175000017500000000313414163340332023252 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvdef.h0000644000175000017500000026777114163340332022705 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*/ tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvtemp_eval.h0000644000175000017500000004230714163340332024105 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/hisimhv.h0000644000175000017500000000300114163340332022516 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 */ tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvcvtest.c0000644000175000017500000002742114163340332023434 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvmpar.c0000644000175000017500000020625114163340332023063 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvinit.c0000644000175000017500000000326714163340332023071 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvitf.h0000644000175000017500000000112314163340332022702 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 tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvld.c0000644000175000017500000034346314163340332022532 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; #ifndef NOBYPASS line755: /* standard entry if HSMHVevaluate is bypassed */ #endif /* (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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvnoi.c0000644000175000017500000001674114163340332022714 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); } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvset.c0000644000175000017500000023577514163340332022734 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; } tmp_ns50wwy/src/spicelib/devices/hisimhv1/hsmhvld_info_eval.h0000644000175000017500000001552714163340332024556 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 */ tmp_ns50wwy/src/spicelib/devices/ChangeLog0000644000175000017500000000743514163340332020737 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. tmp_ns50wwy/src/spicelib/devices/asrc/0000755000175000017500000000000014163340332020104 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/asrc/asrcconv.c0000644000175000017500000000326114163340332022070 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); } tmp_ns50wwy/src/spicelib/devices/asrc/asrcfbr.c0000644000175000017500000000172014163340332021672 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); } tmp_ns50wwy/src/spicelib/devices/asrc/Makefile.am0000644000175000017500000000071014163340332022136 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 tmp_ns50wwy/src/spicelib/devices/asrc/asrcitf.h0000644000175000017500000000027014163340332021707 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 tmp_ns50wwy/src/spicelib/devices/asrc/asrcask.c0000644000175000017500000000357514163340332021711 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_M: value->rValue = here->ASRCm; 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); } } tmp_ns50wwy/src/spicelib/devices/asrc/asrcset.c0000644000175000017500000001126614163340332021722 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; if (!here->ASRCreciprocmGiven) here->ASRCreciprocm = 0; if (!here->ASRCmGiven) here->ASRCm = 1.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; } tmp_ns50wwy/src/spicelib/devices/asrc/asrcpzld.c0000644000175000017500000000550514163340332022077 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; if (here->ASRCreciprocm == 1) factor = factor / here->ASRCm; else factor = factor * here->ASRCm; 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); } tmp_ns50wwy/src/spicelib/devices/asrc/asrcacld.c0000644000175000017500000000424514163340332022031 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; if (here->ASRCreciprocm == 1) factor = factor / here->ASRCm; else factor = factor * here->ASRCm; /* * 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); } tmp_ns50wwy/src/spicelib/devices/asrc/asrcext.h0000644000175000017500000000140414163340332021725 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 *); tmp_ns50wwy/src/spicelib/devices/asrc/asrcdefs.h0000644000175000017500000000647414163340332022062 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 */ double ASRCm; /* Output multiplier */ int ASRCreciproctc; /* Flag to calculate reciprocal temperature behaviour */ int ASRCreciprocm; /* Flag to calculate reciprocal multiplier 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 ASRCmGiven : 1; /* indicates tc2 parameter specified */ unsigned ASRCreciproctcGiven : 1; /* indicates reciproctc flag parameter specified */ unsigned ASRCreciprocmGiven : 1; /* indicates reciprocm 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, ASRC_M, ASRC_RM, }; /* module-wide variables */ extern double *asrc_vals, *asrc_derivs; extern int asrc_nvals; /* model parameters */ /* device questions */ /* model questions */ #include "asrcext.h" #endif /*ASRC*/ tmp_ns50wwy/src/spicelib/devices/asrc/asrcdest.c0000644000175000017500000000046114163340332022061 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; } tmp_ns50wwy/src/spicelib/devices/asrc/asrcinit.h0000644000175000017500000000030014163340332022062 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 tmp_ns50wwy/src/spicelib/devices/asrc/asrcdel.c0000644000175000017500000000076314163340332021673 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; } tmp_ns50wwy/src/spicelib/devices/asrc/asrctemp.c0000644000175000017500000000173314163340332022072 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); } tmp_ns50wwy/src/spicelib/devices/asrc/asrcpar.c0000644000175000017500000000300114163340332021675 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_M: here->ASRCm = value->rValue; here->ASRCmGiven = TRUE; break; case ASRC_RTC: here->ASRCreciproctc = value->iValue; here->ASRCreciproctcGiven = TRUE; break; case ASRC_RM: here->ASRCreciprocm = value->iValue; here->ASRCreciprocmGiven = TRUE; break; case ASRC_TEMP: here->ASRCtemp = value->rValue + CONSTCtoK; here->ASRCtempGiven = TRUE; break; case ASRC_DTEMP: here->ASRCdtemp = value->rValue; here->ASRCdtempGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/asrc/asrcload.c0000644000175000017500000000716514163340332022051 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 * Evaluate the B-source parse tree (example: exp function): * ASRCload asrcload.c * IFeval ifeval.c * PTeval ifeval.c * PTexp ptfuncs.c */ 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; /* FIXME: tnmom instead of 300.15 */ factor = 1.0 + here->ASRCtc1 * difference + here->ASRCtc2 * difference * difference; if (here->ASRCreciproctc == 1) factor = 1 / factor; if (here->ASRCreciprocm == 1) factor = factor / here->ASRCm; else factor = factor * here->ASRCm; /* * 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) { fprintf(stderr, " in line %s\n\n", here->gen.GENname); 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); } tmp_ns50wwy/src/spicelib/devices/asrc/asrc.c0000644000175000017500000000273214163340332021204 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"), IOPU("m", ASRC_M, IF_REAL, "Multiplier"), IOPU("reciprocm", ASRC_RM, IF_INTEGER, "Flag to calculate reciprocal multiplier 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); tmp_ns50wwy/src/spicelib/devices/asrc/asrcinit.c0000644000175000017500000000341014163340332022062 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 = (int (*)(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)) ASRCsetup, .DEVunsetup = ASRCunsetup, .DEVpzSetup = (int (*)(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)) 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; } tmp_ns50wwy/src/spicelib/devices/dio/0000755000175000017500000000000014163340332017727 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/dio/diodefs.h0000644000175000017500000004346014163340332021524 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 */ const int DIOtempNode; /* number of the temperature node of the 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) */ /* self heating */ double *DIOtempPosPtr; double *DIOtempPosPrimePtr; double *DIOtempNegPtr; double *DIOtempTempPtr; double *DIOposTempPtr; double *DIOposPrimeTempPtr; double *DIOnegTempPtr; 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 */ unsigned DIOlengthMetalGiven : 1; /* Length of metal capacitor (level=3) */ unsigned DIOlengthPolyGiven : 1; /* Length of polysilicon capacitor (level=3) */ unsigned DIOwidthMetalGiven : 1; /* Width of metal capacitor (level=3) */ unsigned DIOwidthPolyGiven : 1; /* Width of polysilicon capacitor (level=3) */ 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 */ int DIOthermal; /* flag indicate self heating on */ double DIOlengthMetal; /* Length of metal capacitor (level=3) */ double DIOlengthPoly; /* Length of polysilicon capacitor (level=3) */ double DIOwidthMetal; /* Width of metal capacitor (level=3) */ double DIOwidthPoly; /* Width of polysilicon capacitor (level=3) */ 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 DIOtConductance_dT; /* temperature adjusted series conductance temperature derivative */ 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 DIOtSatCur_dT; /* temperature adjusted saturation current temperature derivative */ double DIOtSatSWCur; /* temperature adjusted side wall saturation current */ double DIOtSatSWCur_dT; /* temperature adjusted side wall saturation current temperature derivative */ double DIOtTunSatCur; /* tunneling saturation current */ double DIOtTunSatCur_dT; /* tunneling saturation current temperature derivative */ double DIOtTunSatSWCur; /* sidewall tunneling saturation current */ double DIOtTunSatSWCur_dT; /* sidewall tunneling saturation current temperature derivative */ 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 */ double DIOtRecSatCur_dT; /* temperature adjusted recombination saturation current */ double DIOdIth_dVrs; double DIOdIth_dVdio; double DIOdIth_dT; double DIOgcTt; double DIOdIrs_dT; double DIOdIdio_dT; double DIOcmetal; /* parasitic metal overlap capacitance */ double DIOcpoly; /* parasitic polysilicon overlap capacitance */ /* * 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 DIOqth DIOstate+5 /* thermal capacitor charge */ #define DIOcqth DIOstate+6 /* thermal capacitor current */ #define DIOdeltemp DIOstate+7 /* thermal voltage over rth0 */ #define DIOdIdio_dT DIOstate+8 #define DIOnumStates 9 #define DIOsensxp DIOstate+9 /* charge sensitivities and their derivatives. * +10 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 DIOid_maxGiven : 1; unsigned DIOpd_maxGiven : 1; unsigned DIOte_maxGiven : 1; unsigned DIOrecSatCurGiven : 1; unsigned DIOrecEmissionCoeffGiven : 1; unsigned DIOrth0Given :1; unsigned DIOcth0Given :1; unsigned DIOlengthMetalGiven : 1; /* Length of metal capacitor (level=3) */ unsigned DIOlengthPolyGiven : 1; /* Length of polysilicon capacitor (level=3) */ unsigned DIOwidthMetalGiven : 1; /* Width of metal capacitor (level=3) */ unsigned DIOwidthPolyGiven : 1; /* Width of polysilicon capacitor (level=3) */ unsigned DIOmetalOxideThickGiven : 1; /* Thickness of the metal to bulk oxide (level=3) */ unsigned DIOpolyOxideThickGiven : 1; /* Thickness of the polysilicon to bulk oxide (level=3) */ unsigned DIOmetalMaskOffsetGiven : 1; /* Masking and etching effects in metal (level=3)") */ unsigned DIOpolyMaskOffsetGiven : 1; /* Masking and etching effects in polysilicon (level=3) */ 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 DIOid_max; /* maximum current */ double DIOpd_max; /* maximum power dissipation */ double DIOte_max; /* maximum temperature */ double DIOrecSatCur; /* Recombination saturation current */ double DIOrecEmissionCoeff; /* Recombination emission coefficient */ double DIOrth0; double DIOcth0; double DIOlengthMetal; /* Length of metal capacitor (level=3) */ double DIOlengthPoly; /* Length of polysilicon capacitor (level=3) */ double DIOwidthMetal; /* Width of metal capacitor (level=3) */ double DIOwidthPoly; /* Width of polysilicon capacitor (level=3) */ double DIOmetalOxideThick; /* Thickness of the metal to bulk oxide (level=3) */ double DIOpolyOxideThick; /* Thickness of the polysilicon to bulk oxide (level=3) */ double DIOmetalMaskOffset; /* Masking and etching effects in metal (level=3)") */ double DIOpolyMaskOffset; /* Masking and etching effects in polysilicon (level=3) */ } 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, DIO_THERMAL, DIO_LM, DIO_LP, DIO_WM, DIO_WP, }; /* 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_ID_MAX, DIO_MOD_TE_MAX, DIO_MOD_PD_MAX, DIO_MOD_ISR, DIO_MOD_NR, DIO_MOD_RTH0, DIO_MOD_CTH0, DIO_MOD_LM, DIO_MOD_LP, DIO_MOD_WM, DIO_MOD_WP, DIO_MOD_XOM, DIO_MOD_XOI, DIO_MOD_XM, DIO_MOD_XP, }; void DIOtempUpdate(DIOmodel *inModel, DIOinstance *here, double Temp, CKTcircuit *ckt); #include "dioext.h" #endif /*DIO*/ tmp_ns50wwy/src/spicelib/devices/dio/diosacl.c0000644000175000017500000002247514163340332021523 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; 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); } tmp_ns50wwy/src/spicelib/devices/dio/dioparam.c0000644000175000017500000000454114163340332021673 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) { DIOinstance *here = (DIOinstance*)inst; NG_IGNORE(select); 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; here->DIOwGiven = TRUE; break; case DIO_L: here->DIOl = value->rValue; here->DIOlGiven = TRUE; break; case DIO_M: here->DIOm = value->rValue; here->DIOmGiven = TRUE; break; case DIO_THERMAL: here->DIOthermal = (value->iValue != 0); 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; case DIO_LM: here->DIOlengthMetal = value->rValue; here->DIOlengthMetalGiven = TRUE; break; case DIO_LP: here->DIOlengthPoly = value->rValue; here->DIOlengthPolyGiven = TRUE; break; case DIO_WM: here->DIOwidthMetal = value->rValue; here->DIOwidthMetalGiven = TRUE; break; case DIO_WP: here->DIOwidthPoly = value->rValue; here->DIOwidthPolyGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/dio/Makefile.am0000644000175000017500000000110414163340332021757 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 tmp_ns50wwy/src/spicelib/devices/dio/diogetic.c0000644000175000017500000000160214163340332021661 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); } tmp_ns50wwy/src/spicelib/devices/dio/diodset.c0000644000175000017500000001246114163340332021532 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); } tmp_ns50wwy/src/spicelib/devices/dio/dioask.c0000644000175000017500000001237614163340332021356 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_THERMAL: value->iValue = here->DIOthermal; 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) + *(ckt->CKTstate0 + here->DIOcurrent) * *(ckt->CKTstate0 + here->DIOcurrent) / here->DIOtConductance; } 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); } } tmp_ns50wwy/src/spicelib/devices/dio/dioitf.h0000644000175000017500000000026414163340332021360 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 tmp_ns50wwy/src/spicelib/devices/dio/diosload.c0000644000175000017500000001242114163340332021671 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); } tmp_ns50wwy/src/spicelib/devices/dio/dionoise.c0000644000175000017500000001251414163340332021707 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); } tmp_ns50wwy/src/spicelib/devices/dio/diosset.c0000644000175000017500000000215414163340332021547 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); } tmp_ns50wwy/src/spicelib/devices/dio/diosoachk.c0000644000175000017500000001251014163340332022036 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 */ double id; /* current diode current */ double pd; /* current diode power */ double pd_max; /* maximum diode power */ double te; /* current diode temperature */ int maxwarns; static int warns_fv = 0, warns_bv = 0, warns_id = 0, warns_pd = 0, warns_te = 0; if (!ckt) { warns_fv = 0; warns_bv = 0; warns_id = 0; warns_pd = 0; warns_te = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = DIOnextModel(model)) { for (here = DIOinstances(model); here; here = DIOnextInstance(here)) { vd = ckt->CKTrhsOld [here->DIOposNode] - ckt->CKTrhsOld [here->DIOnegNode]; if (vd > model->DIOfv_max) if (warns_fv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vd=%.4g V has exceeded Fv_max=%.4g V\n", vd, model->DIOfv_max); warns_fv++; } if (-vd > model->DIObv_max) if (warns_bv < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vd=%.4g V has exceeded Bv_max=%.4g V\n", vd, model->DIObv_max); warns_bv++; } id = fabs(*(ckt->CKTstate0 + here->DIOcurrent)); if (id > fabs(model->DIOid_max)) if (warns_id < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Id=%.4g A at Vd=%.4g V has exceeded Id_max=%.4g A\n", id, vd, model->DIOid_max); warns_id++; } pd = fabs(*(ckt->CKTstate0 + here->DIOcurrent) * *(ckt->CKTstate0 + here->DIOvoltage) + *(ckt->CKTstate0 + here->DIOcurrent) * *(ckt->CKTstate0 + here->DIOcurrent) / here->DIOtConductance); /* Calculate max power including derating: up to tnom the derating is zero, at maximum temp allowed the derating is 100%. Device temperature by self-heating or given externally. */ if (here->DIOthermal && model->DIOrth0Given && model->DIOpd_maxGiven && model->DIOte_maxGiven && model->DIOnomTempGiven) { te = ckt->CKTrhsOld[here->DIOtempNode]; if (te < model->DIOnomTemp) pd_max = model->DIOpd_max; else { pd_max = model->DIOpd_max - (te - model->DIOnomTemp) / model->DIOrth0; pd_max = (pd_max > 0) ? pd_max : 0.; } if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V and Te=%.4g C has exceeded Pd_max=%.4g W\n", pd, vd, te, pd_max); warns_pd++; } if (te > model->DIOte_max) if (warns_te < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Te=%.4g C at Vd=%.4g V has exceeded te_max=%.4g C\n", te, vd, model->DIOte_max); warns_te++; } } /* Derating of max allowed power dissipation, without self-heating, external temp given by .temp (global) or instance parameter 'temp', therefore no temperature limits are calculated */ else if (!here->DIOthermal && model->DIOrth0Given && model->DIOpd_maxGiven && model->DIOnomTempGiven) { if (here->DIOtemp < model->DIOnomTemp) pd_max = model->DIOpd_max; else { pd_max = model->DIOpd_max - (here->DIOtemp - model->DIOnomTemp) / model->DIOrth0; pd_max = (pd_max > 0) ? pd_max : 0.; } if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V and Te=%.4g C has exceeded Pd_max=%.4g W\n", pd, vd, here->DIOtemp - CONSTCtoK, pd_max); warns_pd++; } } /* No derating, max power is fixed by model parameter pd_max */ else { pd_max = model->DIOpd_max; if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V has exceeded Pd_max=%.4g W\n", pd, vd, pd_max); warns_pd++; } } } } return OK; } tmp_ns50wwy/src/spicelib/devices/dio/dioinit.h0000644000175000017500000000035614163340332021543 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 tmp_ns50wwy/src/spicelib/devices/dio/diomask.c0000644000175000017500000001567614163340332021541 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_ID_MAX: value->rValue = model->DIOid_max; return(OK); case DIO_MOD_PD_MAX: value->rValue = model->DIOpd_max; return(OK); case DIO_MOD_TE_MAX: value->rValue = model->DIOte_max; return(OK); case DIO_MOD_ISR: value->rValue = model->DIOrecSatCur; return(OK); case DIO_MOD_NR: value->rValue = model->DIOrecEmissionCoeff; return(OK); case DIO_MOD_RTH0: value->rValue = model->DIOrth0; return(OK); case DIO_MOD_CTH0: value->rValue = model->DIOcth0; return(OK); case DIO_MOD_LM: value->rValue = model->DIOlengthMetal; return(OK); case DIO_MOD_LP: value->rValue = model->DIOlengthPoly; return(OK); case DIO_MOD_WM: value->rValue = model->DIOwidthMetal; return(OK); case DIO_MOD_WP: value->rValue = model->DIOwidthPoly; return(OK); case DIO_MOD_XOM: value->rValue = model->DIOmetalOxideThick; return(OK); case DIO_MOD_XOI: value->rValue = model->DIOpolyOxideThick; return(OK); case DIO_MOD_XM: value->rValue = model->DIOmetalMaskOffset; return(OK); case DIO_MOD_XP: value->rValue = model->DIOpolyMaskOffset; return(OK); default: return(E_BADPARM); } } tmp_ns50wwy/src/spicelib/devices/dio/dioconv.c0000644000175000017500000000410314163340332021532 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; double delTemp, deldelTemp; /* 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); int selfheat = ((here->DIOtempNode > 0) && (here->DIOthermal) && (model->DIOrth0Given)); if (selfheat) delTemp = *(ckt->CKTrhsOld + here->DIOtempNode); else delTemp = 0.0; deldelTemp = delTemp - *(ckt->CKTstate0 + here->DIOdeltemp); cdhat= *(ckt->CKTstate0 + here->DIOcurrent) + *(ckt->CKTstate0 + here->DIOconduct) * delvd + *(ckt->CKTstate0 + here->DIOdIdio_dT) * deldelTemp; 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); } tmp_ns50wwy/src/spicelib/devices/dio/dioacld.c0000644000175000017500000000502414163340332021473 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; 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; int selfheat = ((here->DIOtempNode > 0) && (here->DIOthermal) && (model->DIOrth0Given)); if (selfheat) { double dIth_dVrs = here->DIOdIth_dVrs; double dIth_dVdio = here->DIOdIth_dVdio; double dIth_dT = here->DIOdIth_dT; double gcTt = here->DIOgcTt; double dIrs_dT = here->DIOdIrs_dT; double dIdio_dT = *(ckt->CKTstate0 + here->DIOdIdio_dT); (*(here->DIOtempPosPtr) += -dIth_dVrs); (*(here->DIOtempPosPrimePtr) += -dIth_dVdio + dIth_dVrs); (*(here->DIOtempNegPtr) += dIth_dVdio); (*(here->DIOtempTempPtr) += -dIth_dT + 1/model->DIOrth0 + gcTt); (*(here->DIOposTempPtr) += dIrs_dT); (*(here->DIOposPrimeTempPtr) += dIdio_dT - dIrs_dT); (*(here->DIOnegTempPtr) += -dIdio_dT); double xgcTt= *(ckt->CKTstate0 + here->DIOcqth) * ckt->CKTomega; (*(here->DIOtempTempPtr + 1) += xgcTt); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/dio/dioinit.c0000644000175000017500000000322114163340332021530 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; } tmp_ns50wwy/src/spicelib/devices/dio/diosupd.c0000644000175000017500000000464414163340332021552 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); } tmp_ns50wwy/src/spicelib/devices/dio/diotrunc.c0000644000175000017500000000117614163340332021727 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); } tmp_ns50wwy/src/spicelib/devices/dio/dioext.h0000644000175000017500000000235414163340332021400 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 *); tmp_ns50wwy/src/spicelib/devices/dio/dioload.c0000644000175000017500000005741014163340332021515 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, cdb_dT, cdsw_dT; 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, cdb_rec_dT; 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, vtebrk; int Check_dio=0, Check_th; int error; int SenCond=0; /* sensitivity condition */ double diffcharge, diffchargeSW, deplcharge, deplchargeSW, diffcap, diffcapSW, deplcap, deplcapSW; double deldelTemp, delTemp, Temp; double ceqqth=0.0, Ith=0.0, gcTt=0.0, vrs=0.0; double dIdio_dT, dIth_dVdio=0.0, dIrs_dT=0.0, dIth_dVrs=0.0, dIth_dT=0.0; double argsw_dT, csat_dT, csatsw_dT; /* 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)) { int selfheat = ((here->DIOtempNode > 0) && (here->DIOthermal) && (model->DIOrth0Given)); /* * this routine loads diodes for dc and transient analyses. */ if (selfheat) Check_th = 1; else Check_th = 0; if(ckt->CKTsenInfo){ if((ckt->CKTsenInfo->SENstatus == PERTURBATION) && (here->DIOsenPertFlag == OFF))continue; SenCond = here->DIOsenPertFlag; #ifdef SENSDEBUG printf("DIOload \n"); #endif /* SENSDEBUG */ } cdsw = 0.0; cdsw_dT = 0.0; gdsw = 0.0; delTemp = 0.0; vt = CONSTKoverQ * here->DIOtemp; vte = model->DIOemissionCoeff * vt; vtebrk = model->DIObrkdEmissionCoeff * vt; gspr = here->DIOtConductance; /* * initialization */ if(SenCond){ #ifdef SENSDEBUG printf("DIOsenPertFlag = ON \n"); #endif /* SENSDEBUG */ if((ckt->CKTsenInfo->SENmode == TRANSEN)&& (ckt->CKTmode & MODEINITTRAN)) { vd = *(ckt->CKTstate1 + here->DIOvoltage); delTemp = *(ckt->CKTstate1 + here->DIOdeltemp); } else{ vd = *(ckt->CKTstate0 + here->DIOvoltage); delTemp = *(ckt->CKTstate0 + here->DIOdeltemp); } #ifdef SENSDEBUG printf("vd = %.7e \n",vd); #endif /* SENSDEBUG */ goto next1; } Check_dio=1; if(ckt->CKTmode & MODEINITSMSIG) { vd= *(ckt->CKTstate0 + here->DIOvoltage); delTemp = *(ckt->CKTstate0 + here->DIOdeltemp); } else if (ckt->CKTmode & MODEINITTRAN) { vd= *(ckt->CKTstate1 + here->DIOvoltage); delTemp = *(ckt->CKTstate1 + here->DIOdeltemp); } else if ( (ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC) ) { vd=here->DIOinitCond; } else if ( (ckt->CKTmode & MODEINITJCT) && here->DIOoff) { vd=0; delTemp = 0.0; } else if ( ckt->CKTmode & MODEINITJCT) { vd=here->DIOtVcrit; delTemp = 0.0; } else if ( ckt->CKTmode & MODEINITFIX && here->DIOoff) { vd=0; delTemp = 0.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); *(ckt->CKTstate0 + here->DIOdeltemp) = *(ckt->CKTstate1 + here->DIOdeltemp); delTemp = DEVpred(ckt,here->DIOdeltemp); *(ckt->CKTstate0 + here->DIOdIdio_dT) = *(ckt->CKTstate1 + here->DIOdIdio_dT); *(ckt->CKTstate0+here->DIOqth) = *(ckt->CKTstate1+here->DIOqth); } else { #endif /* PREDICTOR */ vd = *(ckt->CKTrhsOld+here->DIOposPrimeNode)- *(ckt->CKTrhsOld + here->DIOnegNode); if (selfheat) delTemp = *(ckt->CKTrhsOld + here->DIOtempNode); else delTemp = 0.0; *(ckt->CKTstate0+here->DIOqth) = model->DIOcth0 * delTemp; if((ckt->CKTmode & MODEINITTRAN)) { *(ckt->CKTstate1+here->DIOqth) = *(ckt->CKTstate0+here->DIOqth); } #ifndef PREDICTOR } #endif /* PREDICTOR */ delvd=vd- *(ckt->CKTstate0 + here->DIOvoltage); deldelTemp = delTemp - *(ckt->CKTstate0 + here->DIOdeltemp); cdhat= *(ckt->CKTstate0 + here->DIOcurrent) + *(ckt->CKTstate0 + here->DIOconduct) * delvd + *(ckt->CKTstate0 + here->DIOdIdio_dT) * deldelTemp; /* * 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) { if ((here->DIOtempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->DIOdeltemp)))+ ckt->CKTvoltTol*1e4))) { vd= *(ckt->CKTstate0 + here->DIOvoltage); cd= *(ckt->CKTstate0 + here->DIOcurrent); gd= *(ckt->CKTstate0 + here->DIOconduct); delTemp = *(ckt->CKTstate0 + here->DIOdeltemp); dIdio_dT= *(ckt->CKTstate0 + here->DIOdIdio_dT); 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_dio); vd = -(vdtemp+here->DIOtBrkdwnV); } else { vd = DEVpnjlim(vd,*(ckt->CKTstate0 + here->DIOvoltage), vte,here->DIOtVcrit,&Check_dio); } if (selfheat) delTemp = DEVlimitlog(delTemp, *(ckt->CKTstate0 + here->DIOdeltemp), 100, &Check_th); else delTemp = 0.0; } /* * compute dc current and derivitives */ next1: if (selfheat) { Temp = here->DIOtemp + delTemp; DIOtempUpdate(model, here, Temp, ckt); vt = CONSTKoverQ * Temp; vte = model->DIOemissionCoeff * vt; vtebrk = model->DIObrkdEmissionCoeff * vt; } else { Temp = here->DIOtemp; } csat = here->DIOtSatCur; csat_dT = here->DIOtSatCur_dT; csatsw = here->DIOtSatSWCur; csatsw_dT = here->DIOtSatSWCur_dT; gspr = here->DIOtConductance; 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; cdsw_dT = csatsw_dT * (evd - 1) - csatsw * vd * evd / (vtesw * Temp); } else if((!(model->DIObreakdownVoltageGiven)) || vd >= -here->DIOtBrkdwnV) { /* reverse */ argsw = 3*vtesw/(vd*CONSTe); argsw = argsw * argsw * argsw; argsw_dT = 3 * argsw / Temp; cdsw = -csatsw*(1+argsw); gdsw = csatsw*3*argsw/vd; cdsw_dT = -csatsw_dT - (csatsw_dT*argsw + csatsw*argsw_dT); } else { /* breakdown */ double evrev_dT; evrev = exp(-(here->DIOtBrkdwnV+vd)/vtebrk); evrev_dT = (here->DIOtBrkdwnV+vd)*evrev/(vtebrk*Temp); cdsw = -csatsw*evrev; gdsw = csatsw*evrev/vtebrk; cdsw_dT = -(csatsw_dT*evrev + csatsw*evrev_dT); } } else { /* merge saturation currents and use same characteristic as bottom diode */ csat = csat + csatsw; csat_dT = csat_dT + csatsw_dT; cdsw_dT = 0.0; } } /* * temperature dependent diode saturation current and derivative */ if (vd >= -3*vte) { /* bottom current forward */ evd = exp(vd/vte); cdb = csat*(evd-1); gdb = csat*evd/vte; cdb_dT = csat_dT * (evd - 1) - csat * vd * evd / (vte * Temp); if (model->DIOrecSatCurGiven) { /* recombination current */ double vterec = model->DIOrecEmissionCoeff*vt; evd_rec = exp(vd/(vterec)); cdb_rec = here->DIOtRecSatCur*(evd_rec-1); gdb_rec = here->DIOtRecSatCur*evd_rec/vterec; cdb_rec_dT = here->DIOtRecSatCur_dT * (evd_rec - 1) -here->DIOtRecSatCur * vd * evd_rec / (vterec*Temp); 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; cdb_dT = cdb_dT + cdb_rec_dT*gen_fac; } } else if((!(model->DIObreakdownVoltageGiven)) || vd >= -here->DIOtBrkdwnV) { /* reverse */ double darg_dT; arg = 3*vte/(vd*CONSTe); arg = arg * arg * arg; darg_dT = 3 * arg / Temp; cdb = -csat*(1+arg); gdb = csat*3*arg/vd; cdb_dT = -csat_dT - (csat_dT*arg + csat*darg_dT); } else { /* breakdown */ double evrev_dT; evrev = exp(-(here->DIOtBrkdwnV+vd)/vtebrk); evrev_dT = (here->DIOtBrkdwnV+vd)*evrev/(vtebrk*Temp); cdb = -csat*evrev; gdb = csat*evrev/vtebrk; cdb_dT = -(csat_dT*evrev + csat*evrev_dT); } 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; cdsw_dT = cdsw_dT - here->DIOtTunSatSWCur_dT * (evd - 1) - here->DIOtTunSatSWCur * vd * evd / (vtetun * Temp); } 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; cdb_dT = cdb_dT - here->DIOtTunSatCur_dT * (evd - 1) - here->DIOtTunSatCur * vd * evd / (vtetun * Temp); } cd = cdb + cdsw; gd = gdb + gdsw; dIdio_dT = cdb_dT + cdsw_dT; 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->DIOcmetal + here->DIOcpoly; 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; *(ckt->CKTstate0 + here->DIOdIdio_dT) = dIdio_dT; #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 (selfheat) { error = NIintegrate(ckt, &gcTt, &ceqqth, model->DIOcth0, here->DIOqth); if (error) return(error); if (ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->DIOcqth) = *(ckt->CKTstate0 + here->DIOcqth); } } } } if(SenCond) goto next2; /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX)) || (!(here->DIOoff)) ) { if ((Check_th == 1) || (Check_dio == 1)) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } next2: *(ckt->CKTstate0 + here->DIOvoltage) = vd; *(ckt->CKTstate0 + here->DIOcurrent) = cd; *(ckt->CKTstate0 + here->DIOconduct) = gd; *(ckt->CKTstate0 + here->DIOdeltemp) = delTemp; *(ckt->CKTstate0 + here->DIOdIdio_dT) = dIdio_dT; if(SenCond) continue; #ifndef NOBYPASS load: #endif if (selfheat) { double dIrs_dVrs, dIrs_dgspr, dIth_dIrs; vrs = *(ckt->CKTrhsOld + here->DIOposNode) - *(ckt->CKTrhsOld + here->DIOposPrimeNode); Ith = vd*cd + vrs*vrs*gspr; /* Diode dissipated power */ dIrs_dVrs = gspr; dIrs_dgspr = vrs; dIrs_dT = dIrs_dgspr * here->DIOtConductance_dT; dIth_dVrs = vrs*gspr; dIth_dIrs = vrs; dIth_dVrs = dIth_dVrs + dIth_dIrs*dIrs_dVrs; dIth_dT = dIth_dIrs*dIrs_dT + dIdio_dT*vd; dIth_dVdio = cd + vd*gd; here->DIOdIth_dVrs = dIth_dVrs; here->DIOdIth_dVdio = dIth_dVdio; here->DIOdIth_dT = dIth_dT; here->DIOgcTt = gcTt; here->DIOdIrs_dT = dIrs_dT; } /* * load current vector */ cdeq=cd-gd*vd; *(ckt->CKTrhs + here->DIOnegNode) += cdeq; *(ckt->CKTrhs + here->DIOposPrimeNode) -= cdeq; if (selfheat) { *(ckt->CKTrhs + here->DIOposNode) += dIrs_dT*delTemp; *(ckt->CKTrhs + here->DIOposPrimeNode) += dIdio_dT*delTemp - dIrs_dT*delTemp; *(ckt->CKTrhs + here->DIOnegNode) += -dIdio_dT*delTemp; *(ckt->CKTrhs + here->DIOtempNode) += Ith - dIth_dVdio*vd - dIth_dVrs*vrs - dIth_dT*delTemp - ceqqth; } /* * load matrix */ *(here->DIOposPosPtr) += gspr; *(here->DIOnegNegPtr) += gd; *(here->DIOposPrimePosPrimePtr) += (gd + gspr); *(here->DIOposPosPrimePtr) -= gspr; *(here->DIOnegPosPrimePtr) -= gd; *(here->DIOposPrimePosPtr) -= gspr; *(here->DIOposPrimeNegPtr) -= gd; if (selfheat) { (*(here->DIOtempPosPtr) += -dIth_dVrs); (*(here->DIOtempPosPrimePtr) += -dIth_dVdio + dIth_dVrs); (*(here->DIOtempNegPtr) += dIth_dVdio); (*(here->DIOtempTempPtr) += -dIth_dT + 1/model->DIOrth0 + gcTt); (*(here->DIOposTempPtr) += dIrs_dT); (*(here->DIOposPrimeTempPtr) += dIdio_dT - dIrs_dT); (*(here->DIOnegTempPtr) += -dIdio_dT); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/dio/diosetup.c0000644000175000017500000003033314163340332021731 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" #include "ngspice/fteext.h" int DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; int error; CKTnode *tmp; double scale; if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; /* 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->DIOid_maxGiven) { model->DIOid_max = 1e99; } if(!model->DIOpd_maxGiven) { model->DIOpd_max = 1e99; } if(!model->DIOte_maxGiven) { model->DIOte_max = 1e99; } if(!model->DIOrecEmissionCoeffGiven) { model->DIOrecEmissionCoeff = 1; } if(!model->DIOrecSatCurGiven) { model->DIOrecSatCur = 1e-14; } /* set lower limit of saturation current */ if (model->DIOsatCur < ckt->CKTepsmin) model->DIOsatCur = ckt->CKTepsmin; if(!model->DIOnomTempGiven) { model->DIOnomTemp = ckt->CKTnomTemp; } if((!model->DIOresistGiven) || (model->DIOresist==0)) { model->DIOconductance = 0.0; } else { model->DIOconductance = 1/model->DIOresist; } if (!model->DIOrth0Given) { model->DIOrth0 = 0; } if (!model->DIOcth0Given) { model->DIOcth0 = 1e-5; } if(!model->DIOlengthMetalGiven) { model->DIOlengthMetal = 0.0; } if(!model->DIOlengthPolyGiven) { model->DIOlengthPoly = 0.0; } if(!model->DIOwidthMetalGiven) { model->DIOwidthMetal = 0.0; } if(!model->DIOwidthPolyGiven) { model->DIOwidthPoly = 0.0; } if(!model->DIOmetalOxideThickGiven) { model->DIOmetalOxideThick = 1e-06; /* m */ } if(!model->DIOpolyOxideThickGiven) { model->DIOpolyOxideThick = 1e-06; /* m */ } if(!model->DIOmetalMaskOffsetGiven) { model->DIOmetalMaskOffset = 0.0; } if(!model->DIOpolyMaskOffsetGiven) { model->DIOpolyMaskOffset = 0.0; } /* 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; here->DIOcmetal = 0.0; here->DIOcpoly = 0.0; if (model->DIOlevel == 3) { double wm, lm, wp, lp; if((here->DIOwGiven) && (here->DIOlGiven)) { here->DIOarea = here->DIOw * here->DIOl * here->DIOm; here->DIOpj = (2 * here->DIOw + 2 * here->DIOl) * here->DIOm; } here->DIOarea = here->DIOarea * scale * scale; here->DIOpj = here->DIOpj * scale; if (here->DIOwidthMetalGiven) wm = here->DIOwidthMetal; else wm = model->DIOwidthMetal; if (here->DIOlengthMetalGiven) lm = here->DIOlengthMetal; else lm = model->DIOlengthMetal; if (here->DIOwidthPolyGiven) wp = here->DIOwidthPoly; else wp = model->DIOwidthPoly; if (here->DIOlengthPolyGiven) lp = here->DIOlengthPoly; else lp = model->DIOlengthPoly; here->DIOcmetal = CONSTepsSiO2 / model->DIOmetalOxideThick * here->DIOm * (wm * scale + model->DIOmetalMaskOffset) * (lm * scale + model->DIOmetalMaskOffset); here->DIOcpoly = CONSTepsSiO2 / model->DIOpolyOxideThick * here->DIOm * (wp * scale + model->DIOpolyMaskOffset) * (lp * scale + model->DIOpolyMaskOffset); } 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; } } } } int selfheat = ((here->DIOtempNode > 0) && (here->DIOthermal) && (model->DIOrth0Given)); /* 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); if (selfheat) { TSTALLOC(DIOtempPosPtr, DIOtempNode, DIOposNode); TSTALLOC(DIOtempPosPrimePtr, DIOtempNode, DIOposPrimeNode); TSTALLOC(DIOtempNegPtr, DIOtempNode, DIOnegNode); TSTALLOC(DIOtempTempPtr, DIOtempNode, DIOtempNode); TSTALLOC(DIOposTempPtr, DIOposNode, DIOtempNode); TSTALLOC(DIOposPrimeTempPtr, DIOposPrimeNode, DIOtempNode); TSTALLOC(DIOnegTempPtr, DIOnegNode, DIOtempNode); } } } 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; } tmp_ns50wwy/src/spicelib/devices/dio/diosprt.c0000644000175000017500000000250314163340332021557 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); } } } tmp_ns50wwy/src/spicelib/devices/dio/diompar.c0000644000175000017500000002262214163340332021532 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_ID_MAX: model->DIOid_max = value->rValue; model->DIOid_maxGiven = TRUE; break; case DIO_MOD_PD_MAX: model->DIOpd_max = value->rValue; model->DIOpd_maxGiven = TRUE; break; case DIO_MOD_TE_MAX: model->DIOte_max = value->rValue; model->DIOte_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_RTH0: model->DIOrth0 = value->rValue; model->DIOrth0Given = TRUE; break; case DIO_MOD_CTH0: model->DIOcth0 = value->rValue; model->DIOcth0Given = TRUE; break; case DIO_MOD_LM: model->DIOlengthMetal = value->rValue; model->DIOlengthMetalGiven = TRUE; break; case DIO_MOD_LP: model->DIOlengthPoly = value->rValue; model->DIOlengthPolyGiven = TRUE; break; case DIO_MOD_WM: model->DIOwidthMetal = value->rValue; model->DIOwidthMetalGiven = TRUE; break; case DIO_MOD_WP: model->DIOwidthPoly = value->rValue; model->DIOwidthPolyGiven = TRUE; break; case DIO_MOD_XOM: model->DIOmetalOxideThick = value->rValue * 1e-10; /* m */ model->DIOmetalOxideThickGiven = TRUE; break; case DIO_MOD_XOI: model->DIOpolyOxideThick = value->rValue * 1e-10; /* m */ model->DIOpolyOxideThickGiven = TRUE; break; case DIO_MOD_XM: model->DIOmetalMaskOffset = value->rValue; model->DIOmetalMaskOffsetGiven = TRUE; break; case DIO_MOD_XP: model->DIOpolyMaskOffset = value->rValue; model->DIOpolyMaskOffsetGiven = 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); } tmp_ns50wwy/src/spicelib/devices/dio/diotemp.c0000644000175000017500000002757714163340332021556 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" void DIOtempUpdate(DIOmodel *inModel, DIOinstance *here, double Temp, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; double xfc, xfcs; double vt, vte, vts, vtt, vtr; double cbv; double xbv; double xcbv; double tol; double vtnom; int iter; double dt; double factor; double tBreakdownVoltage; double egfet1,arg1,fact1,pbfact1,pbo,gmaold,pboSW,gmaSWold; double fact2,pbfact,arg,egfet,gmanew,gmaSWnew; double arg1_dT, arg2, arg2_dT; double gclimit; if (!cp_getvar("DIOgradingCoeffMax", CP_REAL, &gclimit, 0)) gclimit = 0.9; vt = CONSTKoverQ * Temp; vte = model->DIOemissionCoeff * vt; vts = model->DIOswEmissionCoeff * vt; vtt = model->DIOtunEmissionCoeff * vt; vtr = model->DIOrecEmissionCoeff * vt; vtnom = CONSTKoverQ * model->DIOnomTemp; dt = Temp - 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; } /* this part gets really ugly - I won't even try to * explain these equations */ fact2 = Temp/REFTEMP; egfet = 1.16-(7.02e-4*Temp*Temp)/ (Temp+1108); arg = -egfet/(2*CONSTboltz*Temp) + 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*(Temp-REFTEMP)-gmanew); } else if (model->DIOtlevc == 1) { here->DIOtJctPot = model->DIOjunctionPot - model->DIOtpb*(Temp-REFTEMP); here->DIOtJctCap = here->DIOjunctionCap * (1+model->DIOcta*(Temp-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*(Temp-REFTEMP)-gmaSWnew); } else if (model->DIOtlevc == 1) { here->DIOtJctSWPot = model->DIOjunctionSWPot - model->DIOtphp*(Temp-REFTEMP); here->DIOtJctSWCap = here->DIOjunctionSWCap * (1+model->DIOctp*(Temp-REFTEMP)); } arg1 = ((Temp / model->DIOnomTemp) - 1) * model->DIOactivationEnergy / vte; arg1_dT = model->DIOactivationEnergy / (vte*model->DIOnomTemp) - model->DIOactivationEnergy*(Temp/model->DIOnomTemp -1)/(vte*Temp); arg2 = model->DIOsaturationCurrentExp / model->DIOemissionCoeff * log(Temp / model->DIOnomTemp); arg2_dT = model->DIOsaturationCurrentExp / model->DIOemissionCoeff / Temp; here->DIOtSatCur = model->DIOsatCur * here->DIOarea * exp(arg1 + arg2); here->DIOtSatCur_dT = model->DIOsatCur * here->DIOarea * exp(arg1 + arg2) * (arg1_dT + arg2_dT); arg1 = ((Temp / model->DIOnomTemp) - 1) * model->DIOactivationEnergy / vts; arg1_dT = model->DIOactivationEnergy / (vts*model->DIOnomTemp) - model->DIOactivationEnergy*(Temp/model->DIOnomTemp -1)/(vts*Temp); arg2 = model->DIOsaturationCurrentExp / model->DIOswEmissionCoeff * log(Temp / model->DIOnomTemp); arg2_dT = model->DIOsaturationCurrentExp / model->DIOswEmissionCoeff / Temp; here->DIOtSatSWCur = model->DIOsatSWCur * here->DIOpj * exp(arg1 + arg2); here->DIOtSatSWCur_dT = model->DIOsatSWCur * here->DIOpj * exp(arg1 + arg2) * (arg1_dT + arg2_dT); arg1 = ((Temp / model->DIOnomTemp) - 1) * model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy / vtt; arg1_dT = model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy / (vtt*model->DIOnomTemp) - model->DIOactivationEnergy*(Temp/model->DIOnomTemp -1)/(vtt*Temp); arg2 = model->DIOtunSaturationCurrentExp / model->DIOtunEmissionCoeff * log(Temp / model->DIOnomTemp); arg2_dT = model->DIOtunSaturationCurrentExp / model->DIOtunEmissionCoeff / Temp; here->DIOtTunSatCur = model->DIOtunSatCur * here->DIOarea * exp(arg1 + arg2); here->DIOtTunSatCur_dT = model->DIOtunSatCur * here->DIOarea * exp(arg1 + arg2) * (arg1_dT + arg2_dT); arg1 = ((Temp / model->DIOnomTemp) - 1) * model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy / vtt; arg1_dT = model->DIOtunEGcorrectionFactor*model->DIOactivationEnergy / (vtt*model->DIOnomTemp) - model->DIOactivationEnergy*(Temp/model->DIOnomTemp -1)/(vtt*Temp); arg2 = model->DIOtunSaturationCurrentExp / model->DIOtunEmissionCoeff * log(Temp / model->DIOnomTemp); arg2_dT = model->DIOtunSaturationCurrentExp / model->DIOtunEmissionCoeff / Temp; here->DIOtTunSatSWCur = model->DIOtunSatSWCur * here->DIOpj * exp(arg1 + arg2); here->DIOtTunSatSWCur_dT = model->DIOtunSatSWCur * here->DIOpj * exp(arg1 + arg2) * (arg1_dT + arg2_dT); arg1 = ((Temp / model->DIOnomTemp) - 1) * model->DIOactivationEnergy / vtr; arg1_dT = model->DIOactivationEnergy / (vtr*model->DIOnomTemp) - model->DIOactivationEnergy*(Temp/model->DIOnomTemp -1)/(vtr*Temp); arg2 = model->DIOsaturationCurrentExp / model->DIOrecEmissionCoeff * log(Temp / model->DIOnomTemp); arg2_dT = model->DIOsaturationCurrentExp / model->DIOrecEmissionCoeff / Temp; here->DIOtRecSatCur = model->DIOrecSatCur * here->DIOarea * exp(arg1 + arg2); here->DIOtRecSatCur_dT = model->DIOrecSatCur * here->DIOarea * exp(arg1 + arg2) * (arg1_dT + arg2_dT); xfc=log(1-model->DIOdepletionCapCoeff); xfcs=log(1-model->DIOdepletionSWcapCoeff); /* 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 = here->DIOm * model->DIObreakdownCurrent; } else { /* level=3 */ cbv = model->DIObreakdownCurrent * here->DIOarea; } if (cbv < here->DIOtSatCur * tBreakdownVoltage/vt) { #ifdef TRACE cbv=here->DIOtSatCur * tBreakdownVoltage/vt; 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)); 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 * here->DIOarea; if(model->DIOresistGiven && model->DIOresist!=0.0) { factor = 1.0 + (model->DIOresistTemp1) * dt + (model->DIOresistTemp2 * dt * dt); here->DIOtConductance = model->DIOconductance * here->DIOarea / factor; here->DIOtConductance_dT = -model->DIOconductance * here->DIOarea * (model->DIOresistTemp1 + model->DIOresistTemp2 * dt) / (factor*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); } int DIOtemp(GENmodel *inModel, CKTcircuit *ckt) { DIOmodel *model = (DIOmodel*)inModel; DIOinstance *here; /* loop through all the diode models */ for( ; model != NULL; model = DIOnextModel(model)) { /* loop through all the instances */ for(here=DIOinstances(model);here;here=DIOnextInstance(here)) { if(!here->DIOdtempGiven) here->DIOdtemp = 0.0; if(!here->DIOtempGiven) here->DIOtemp = ckt->CKTtemp + here->DIOdtemp; DIOtempUpdate(model, here, here->DIOtemp, ckt); } /* instance */ } /* model */ return(OK); } tmp_ns50wwy/src/spicelib/devices/dio/diopzld.c0000644000175000017500000000314014163340332021536 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; 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); } tmp_ns50wwy/src/spicelib/devices/dio/dio.c0000644000175000017500000001777714163340332020671 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"), IOPU("lm", DIO_LM, IF_REAL, "Length of metal capacitor (level=3)"), IOPU("lp", DIO_LP, IF_REAL, "Length of polysilicon capacitor (level=3)"), IOPU("wm", DIO_WM, IF_REAL, "Width of metal capacitor (level=3)"), IOPU("wp", DIO_WP, IF_REAL, "Width of polysilicon capacitor (level=3)"), IOP("thermal",DIO_THERMAL, IF_FLAG, "Self heating mode selector"), 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( "isr", DIO_MOD_ISR, IF_REAL, "Recombination saturation current"), IOP( "nr", DIO_MOD_NR, IF_REAL, "Recombination current emission coefficient"), /* SOA parameters */ 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( "id_max", DIO_MOD_ID_MAX, IF_REAL, "maximum current"), IOP( "te_max", DIO_MOD_TE_MAX, IF_REAL, "temperature"), IOP( "pd_max", DIO_MOD_PD_MAX, IF_REAL, "maximum power dissipation"), /* self heating */ IOP("rth0", DIO_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), IOP("cth0", DIO_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), /* scaled parasitic capacitances level 3 model */ IOP( "lm", DIO_MOD_LM, IF_REAL, "Length of metal capacitor (level=3)"), IOP( "lp", DIO_MOD_LP, IF_REAL, "Length of polysilicon capacitor (level=3)"), IOP( "wm", DIO_MOD_WM, IF_REAL, "Width of metal capacitor (level=3)"), IOP( "wp", DIO_MOD_WP, IF_REAL, "Width of polysilicon capacitor (level=3)"), IOP( "xom", DIO_MOD_XOM, IF_REAL, "Thickness of the metal to bulk oxide (level=3)"), IOP( "xoi", DIO_MOD_XOI, IF_REAL, "Thickness of the polysilicon to bulk oxide (level=3)"), IOP( "xm", DIO_MOD_XM, IF_REAL, "Masking and etching effects in metal (level=3)"), IOP( "xp", DIO_MOD_XP, IF_REAL, "Masking and etching effects in polysilicon (level=3)"), IP( "d", DIO_MOD_D, IF_FLAG, "Diode model") }; char *DIOnames[] = { "D+", "D-", "Tj" }; int DIOnSize = NUMELEMS(DIOnames); int DIOpTSize = NUMELEMS(DIOpTable); int DIOmPTSize = NUMELEMS(DIOmPTable); int DIOiSize = sizeof(DIOinstance); int DIOmSize = sizeof(DIOmodel); tmp_ns50wwy/src/spicelib/devices/dio/diodisto.c0000644000175000017500000002067314163340332021721 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/0000755000175000017500000000000014163340332020167 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim1/b1mpar.c0000644000175000017500000002664714163340332021534 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/bsim1def.h0000644000175000017500000005147314163340332022044 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*/ tmp_ns50wwy/src/spicelib/devices/bsim1/Makefile.am0000644000175000017500000000101214163340332022215 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 tmp_ns50wwy/src/spicelib/devices/bsim1/b1mask.c0000644000175000017500000002067614163340332021524 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim1/bsim1init.h0000644000175000017500000000035214163340332022237 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 tmp_ns50wwy/src/spicelib/devices/bsim1/b1set.c0000644000175000017500000003176514163340332021365 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; } tmp_ns50wwy/src/spicelib/devices/bsim1/b1temp.c0000644000175000017500000001372314163340332021531 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1ld.c0000644000175000017500000007100114163340332021154 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1getic.c0000644000175000017500000000242314163340332021652 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1disto.c0000644000175000017500000012555214163340332021712 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/bsim1init.c0000644000175000017500000000311514163340332022232 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; } tmp_ns50wwy/src/spicelib/devices/bsim1/b1cvtest.c0000644000175000017500000000743314163340332022075 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/ChangeLog0000644000175000017500000000012614163340332021740 0ustar carstencarsten22/11/1990 Modified b1mpar.c substituting iValue to rValue as discovered by Al Davis. tmp_ns50wwy/src/spicelib/devices/bsim1/b1pzld.c0000644000175000017500000001370314163340332021533 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/bsim1itf.h0000644000175000017500000000026314163340332022057 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 tmp_ns50wwy/src/spicelib/devices/bsim1/b1eval.c0000644000175000017500000004666114163340332021522 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; } tmp_ns50wwy/src/spicelib/devices/bsim1/b1trunc.c0000644000175000017500000000207114163340332021711 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1ask.c0000644000175000017500000001663414163340332021346 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim1/b1par.c0000644000175000017500000000563014163340332021344 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue){ case 3: here->B1icVBS = *(value->v.vec.rVec+2); here->B1icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->B1icVGS = *(value->v.vec.rVec+1); here->B1icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->B1icVDS = *(value->v.vec.rVec); here->B1icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1.c0000644000175000017500000001756114163340332020647 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); tmp_ns50wwy/src/spicelib/devices/bsim1/bsim1ext.h0000644000175000017500000000237514163340332022103 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*); tmp_ns50wwy/src/spicelib/devices/bsim1/b1noi.c0000644000175000017500000001270114163340332021344 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((double)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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1moscap.c0000644000175000017500000000432314163340332022042 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1dset.c0000644000175000017500000012201414163340332021515 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; /* remove compiler warnings */ d_qg.value = 0.0; d_qg.d1_p = 0.0; d_qg.d1_q = 0.0; d_qg.d1_r = 0.0; d_qg.d2_p2 = 0.0; d_qg.d2_q2 = 0.0; d_qg.d2_r2 = 0.0; d_qg.d2_pq = 0.0; d_qg.d2_qr = 0.0; d_qg.d2_pr = 0.0; d_qg.d3_p3 = 0.0; d_qg.d3_q3 = 0.0; d_qg.d3_r3 = 0.0; d_qg.d3_p2q = 0.0; d_qg.d3_p2r = 0.0; d_qg.d3_pq2 = 0.0; d_qg.d3_q2r = 0.0; d_qg.d3_pr2 = 0.0; d_qg.d3_qr2 = 0.0; d_qg.d3_pqr = 0.0; d_qb.value = 0.0; d_qb.d1_p = 0.0; d_qb.d1_q = 0.0; d_qb.d1_r = 0.0; d_qb.d2_p2 = 0.0; d_qb.d2_q2 = 0.0; d_qb.d2_r2 = 0.0; d_qb.d2_pq = 0.0; d_qb.d2_qr = 0.0; d_qb.d2_pr = 0.0; d_qb.d3_p3 = 0.0; d_qb.d3_q3 = 0.0; d_qb.d3_r3 = 0.0; d_qb.d3_p2q = 0.0; d_qb.d3_p2r = 0.0; d_qb.d3_pq2 = 0.0; d_qb.d3_q2r = 0.0; d_qb.d3_pr2 = 0.0; d_qb.d3_qr2 = 0.0; d_qb.d3_pqr = 0.0; d_qd.value = 0.0; d_qd.d1_p = 0.0; d_qd.d1_q = 0.0; d_qd.d1_r = 0.0; d_qd.d2_p2 = 0.0; d_qd.d2_q2 = 0.0; d_qd.d2_r2 = 0.0; d_qd.d2_pq = 0.0; d_qd.d2_qr = 0.0; d_qd.d2_pr = 0.0; d_qd.d3_p3 = 0.0; d_qd.d3_q3 = 0.0; d_qd.d3_r3 = 0.0; d_qd.d3_p2q = 0.0; d_qd.d3_p2r = 0.0; d_qd.d3_pq2 = 0.0; d_qd.d3_q2r = 0.0; d_qd.d3_pr2 = 0.0; d_qd.d3_qr2 = 0.0; d_qd.d3_pqr = 0.0; /* 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); } tmp_ns50wwy/src/spicelib/devices/bsim1/b1acld.c0000644000175000017500000001163114163340332021463 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/0000755000175000017500000000000014163340332020135 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/vcvs/vcvsitf.h0000644000175000017500000000026014163340332021770 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 tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsdefs.h0000644000175000017500000000621614163340332022136 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*/ tmp_ns50wwy/src/spicelib/devices/vcvs/Makefile.am0000644000175000017500000000067314163340332022177 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 tmp_ns50wwy/src/spicelib/devices/vcvs/vcvspzld.c0000644000175000017500000000232314163340332022154 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsinit.h0000644000175000017500000000030214163340332022146 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 tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsext.h0000644000175000017500000000130214163340332022004 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*); tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsask.c0000644000175000017500000001205114163340332021760 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 */ } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsset.c0000644000175000017500000000457314163340332022007 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; } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsinit.c0000644000175000017500000000314014163340332022144 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; } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsfbr.c0000644000175000017500000000175214163340332021761 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvs.c0000644000175000017500000000331414163340332021263 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); tmp_ns50wwy/src/spicelib/devices/vcvs/vcvssld.c0000644000175000017500000000215114163340332021764 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvspar.c0000644000175000017500000000137214163340332021770 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvsload.c0000644000175000017500000000222414163340332022122 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvssacl.c0000644000175000017500000000256614163340332022136 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); } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvssprt.c0000644000175000017500000000304314163340332022173 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); } } } tmp_ns50wwy/src/spicelib/devices/vcvs/vcvssset.c0000644000175000017500000000165514163340332022170 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/0000755000175000017500000000000014163340332020347 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hisim2/hsm2noi.c0000644000175000017500000002752614163340332022106 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/Makefile.am0000644000175000017500000000120114163340332022375 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 tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2eval.c0000644000175000017500000104726014163340332022246 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 */ tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2evalenv.h0000644000175000017500000000471614163340332022762 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 */ tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2temp.c0000644000175000017500000010037714163340332022262 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2soachk.c0000644000175000017500000003576514163340332022575 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; } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2init.h0000644000175000017500000000037414163340332022261 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 tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2cvtest.c0000644000175000017500000001510214163340332022614 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2getic.c0000644000175000017500000000607114163340332022404 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2mpar.c0000644000175000017500000017235014163340332022254 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2ext.h0000644000175000017500000000310114163340332022105 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 *); tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2ask.c0000644000175000017500000002132614163340332022067 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 */ } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2acld.c0000644000175000017500000006072714163340332022224 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hisim2.h0000644000175000017500000000261114163340332021713 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 */ tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2def.h0000644000175000017500000022137214163340332022057 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*/ tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2eval_dep.h0000644000175000017500000023522314163340332023100 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 */ tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2mdel.c0000644000175000017500000000463414163340332022235 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; } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2trunc.c0000644000175000017500000000576014163340332022450 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2.c0000644000175000017500000013374614163340332021402 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); tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2init.c0000644000175000017500000000322414163340332022251 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; } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2pzld.c0000644000175000017500000002601114163340332022256 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2itf.h0000644000175000017500000000011714163340332022073 0ustar carstencarsten #ifndef DEV_HISIM2 #define DEV_HISIM2 SPICEdev *get_hsm2_info(void); #endif tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2par.c0000644000175000017500000001510314163340332022067 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->HSM2_icVBS = *(value->v.vec.rVec + 2); here->HSM2_icVBS_Given = TRUE; /* FALLTHROUGH */ case 2: here->HSM2_icVGS = *(value->v.vec.rVec + 1); here->HSM2_icVGS_Given = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2mask.c0000644000175000017500000013432314163340332022246 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 */ } tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2ld.c0000644000175000017500000016134014163340332021711 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; #ifndef NOBYPASS line755: #endif 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 tmp_ns50wwy/src/spicelib/devices/hisim2/hsm2set.c0000644000175000017500000020173414163340332022107 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; } tmp_ns50wwy/src/spicelib/devices/isrc/0000755000175000017500000000000014163340332020114 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/isrc/isrcext.h0000644000175000017500000000102614163340332021745 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*); tmp_ns50wwy/src/spicelib/devices/isrc/Makefile.am0000644000175000017500000000062314163340332022151 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 tmp_ns50wwy/src/spicelib/devices/isrc/isrcinit.h0000644000175000017500000000030214163340332022104 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 tmp_ns50wwy/src/spicelib/devices/isrc/isrctemp.c0000644000175000017500000000352314163340332022111 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); } tmp_ns50wwy/src/spicelib/devices/isrc/isrcdel.c0000644000175000017500000000076214163340332021712 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; } tmp_ns50wwy/src/spicelib/devices/isrc/isrcdefs.h0000644000175000017500000000712714163340332022076 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 */ /* needed for outputting results */ double ISRCcurrent; /* current 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, ISRC_CURRENT, }; enum { ISRC_TRNOISE = 25, ISRC_TRRANDOM, ISRC_EXTERNAL, }; /* model parameters */ /* device questions */ /* model questions */ #include "isrcext.h" #endif /*ISRC*/ tmp_ns50wwy/src/spicelib/devices/isrc/isrc.c0000644000175000017500000000515614163340332021227 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"), OP ("current", ISRC_CURRENT, IF_REAL, "Current in DC or Transient mode"), 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); tmp_ns50wwy/src/spicelib/devices/isrc/isrcacct.c0000644000175000017500000003111414163340332022053 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; double PHASE; double phase; double deltat; 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; PHASE = here->ISRCfunctionOrder > 7 ? here->ISRCcoeffs[7] : 0.0; /* offset time by delay */ time = ckt->CKTtime - TD; tshift = TD; /* 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; 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); } tmp_ns50wwy/src/spicelib/devices/isrc/isrcacld.c0000644000175000017500000000270014163340332022043 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); } tmp_ns50wwy/src/spicelib/devices/isrc/isrcload.c0000644000175000017500000003547414163340332022075 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; double PHASE; double phase; double deltat; 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; 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; 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; double PHASE; double phase; PHASE = here->ISRCfunctionOrder > 5 ? here->ISRCcoeffs[5] : 0.0; /* compute phase in radians */ phase = PHASE * M_PI / 180.0; 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) { value = VO + VA * sin(phase); } else { value = VO + VA * sin(FREQ*time * 2.0 * M_PI + phase) * exp(-time*THETA); } } 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; 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; 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); /* compute waveform value */ value = VO + VA * sin((2.0 * M_PI * FC * time + phasec) + MDI * sin(2.0 * M_PI * FS * time + phases)); } break; case AM: { double VA, FC, MF, VO, TD; 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; 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 { /* compute waveform value */ value = VA * (VO + sin(2.0 * M_PI * MF * time + phases )) * sin(2.0 * M_PI * FC * time + phases); } } 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 */ here->ISRCcurrent = m * value; } // for loop instances } // for loop models return(OK); } tmp_ns50wwy/src/spicelib/devices/isrc/isrcitf.h0000644000175000017500000000026714163340332021735 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 tmp_ns50wwy/src/spicelib/devices/isrc/isrcask.c0000644000175000017500000000614414163340332021724 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); case ISRC_CURRENT: value->rValue = here->ISRCcurrent; return (OK); #ifdef SHARED_MODULE case ISRC_EXTERNAL: /* Don't do anything */ return (OK); #endif default: return (E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/isrc/isrcinit.c0000644000175000017500000000307114163340332022105 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; } tmp_ns50wwy/src/spicelib/devices/isrc/isrcpar.c0000644000175000017500000001776714163340332021745 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->ISRCacPhase = *(value->v.vec.rVec+1); here->ISRCacPGiven = TRUE; /* FALLTHROUGH */ case 1: here->ISRCacMag = *(value->v.vec.rVec); here->ISRCacMGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos6/0000755000175000017500000000000014163340332020040 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mos6/mos6trun.c0000644000175000017500000000135414163340332022004 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6ic.c0000644000175000017500000000245214163340332021407 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); } tmp_ns50wwy/src/spicelib/devices/mos6/Makefile.am0000644000175000017500000000071014163340332022072 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 tmp_ns50wwy/src/spicelib/devices/mos6/mos6set.c0000644000175000017500000002022114163340332021601 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; } tmp_ns50wwy/src/spicelib/devices/mos6/ChangeLog0000644000175000017500000000026714163340332021617 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 tmp_ns50wwy/src/spicelib/devices/mos6/mos6.c0000644000175000017500000002326314163340332021076 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); tmp_ns50wwy/src/spicelib/devices/mos6/mos6ask.c0000644000175000017500000004402714163340332021576 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 */ } tmp_ns50wwy/src/spicelib/devices/mos6/mos6ext.h0000644000175000017500000000152114163340332021615 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*); tmp_ns50wwy/src/spicelib/devices/mos6/mos6mpar.c0000644000175000017500000001416014163340332021752 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6temp.c0000644000175000017500000003404314163340332021762 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6defs.h0000644000175000017500000004116414163340332021745 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*/ tmp_ns50wwy/src/spicelib/devices/mos6/mos6itf.h0000644000175000017500000000034314163340332021600 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 tmp_ns50wwy/src/spicelib/devices/mos6/mos6load.c0000644000175000017500000011266014163340332021736 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 arg1; double sarg1; 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 ) { sarg1 = sqrt(here->MOS6tPhi - vbsvbd); } else { sarg1 = sqrt(here->MOS6tPhi); sarg1 = sarg1 - vbsvbd / (sarg1+sarg1); sarg1 = MAX(0,sarg1); } vdshere = vds * here->MOS6mode; von=(here->MOS6tVbi*model->MOS6type)+model->MOS6gamma*sarg1 - 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 (sarg1 <= 0) { arg1=0; } else { if ((here->MOS6mode==1?vbs:vbd) <= 0 ) { vonbm = model->MOS6gamma1 + model->MOS6gamma / (sarg1 + sarg1); } else { vonbm = model->MOS6gamma1 + model->MOS6gamma / 2 / sqrt(here->MOS6tPhi); } } sarg1 = log(vgon); vdsat = model->MOS6kv * exp(sarg1 * model->MOS6nv); idsat = betac * exp(sarg1 * 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6par.c0000644000175000017500000000706314163340332021601 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->MOS6icVBS = *(value->v.vec.rVec+2); here->MOS6icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->MOS6icVGS = *(value->v.vec.rVec+1); here->MOS6icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6conv.c0000644000175000017500000000634614163340332021767 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6init.c0000644000175000017500000000317014163340332021755 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; } tmp_ns50wwy/src/spicelib/devices/mos6/mos6mask.c0000644000175000017500000001032214163340332021742 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); } tmp_ns50wwy/src/spicelib/devices/mos6/mos6init.h0000644000175000017500000000037014163340332021761 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 tmp_ns50wwy/src/spicelib/devices/mos6/mos6del.c0000644000175000017500000000057314163340332021562 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; } tmp_ns50wwy/src/spicelib/devices/jfet2/0000755000175000017500000000000014163340332020166 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/jfet2/jfet2par.c0000644000175000017500000000423414163340332022052 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->JFET2icVGS = *(value->v.vec.rVec+1); here->JFET2icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->JFET2icVDS = *(value->v.vec.rVec); here->JFET2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/jfet2/psmodel.c0000644000175000017500000003050414163340332021777 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))); } tmp_ns50wwy/src/spicelib/devices/jfet2/Makefile.am0000644000175000017500000000100514163340332022216 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 tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2ic.c0000644000175000017500000000240114163340332021655 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2mask.c0000644000175000017500000000275014163340332022224 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 */ } tmp_ns50wwy/src/spicelib/devices/jfet2/psmodel.h0000644000175000017500000001342514163340332022007 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 tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2mpar.c0000644000175000017500000000237014163340332022226 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2itf.h0000644000175000017500000000055514163340332022061 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 tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2trun.c0000644000175000017500000000151614163340332022260 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2ask.c0000644000175000017500000001302314163340332022042 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 */ } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2init.c0000644000175000017500000000321314163340332022227 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; } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2temp.c0000644000175000017500000001025414163340332022234 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 ). See http://ngspice.sourceforge.net/external-documents/models/psfet.pdf 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2parm.h0000644000175000017500000001005014163340332022225 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 tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2.c0000644000175000017500000000714714163340332021355 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); tmp_ns50wwy/src/spicelib/devices/jfet2/ChangeLog0000644000175000017500000000126414163340332021743 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. tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2acld.c0000644000175000017500000000750114163340332022173 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2noi.c0000644000175000017500000001345214163340332022057 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2init.h0000644000175000017500000000040214163340332022231 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 tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2ext.h0000644000175000017500000000165414163340332022100 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*); tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2load.c0000644000175000017500000003333514163340332022213 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); } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2set.c0000644000175000017500000001244614163340332022067 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; } tmp_ns50wwy/src/spicelib/devices/jfet2/jfet2defs.h0000644000175000017500000002126314163340332022217 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*/ tmp_ns50wwy/src/spicelib/devices/mesa/0000755000175000017500000000000014163340332020101 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/mesa/mesaext.h0000644000175000017500000000137114163340332021722 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*); tmp_ns50wwy/src/spicelib/devices/mesa/mesaitf.h0000644000175000017500000000026014163340332021700 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 tmp_ns50wwy/src/spicelib/devices/mesa/mesamparam.c0000644000175000017500000002145014163340332022372 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); } tmp_ns50wwy/src/spicelib/devices/mesa/Makefile.am0000644000175000017500000000072114163340332022135 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 tmp_ns50wwy/src/spicelib/devices/mesa/mesapzl.c0000644000175000017500000001224214163340332021721 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesagetic.c0000644000175000017500000000213414163340332022206 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesatrunc.c0000644000175000017500000000127014163340332022246 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesatemp.c0000644000175000017500000001557214163340332022072 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesa.c0000644000175000017500000001647014163340332021202 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); tmp_ns50wwy/src/spicelib/devices/mesa/mesainit.h0000644000175000017500000000037014163340332022063 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 tmp_ns50wwy/src/spicelib/devices/mesa/mesaacl.c0000644000175000017500000001115614163340332021656 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesaload.c0000644000175000017500000010347514163340332022044 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; } tmp_ns50wwy/src/spicelib/devices/mesa/mesamask.c0000644000175000017500000001556214163340332022057 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 */ } tmp_ns50wwy/src/spicelib/devices/mesa/mesaask.c0000644000175000017500000001261014163340332021671 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 */ } tmp_ns50wwy/src/spicelib/devices/mesa/mesaparam.c0000644000175000017500000000434714163340332022223 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->MESAicVGS = *(value->v.vec.rVec+1); here->MESAicVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/mesa/mesasetup.c0000644000175000017500000003507314163340332022263 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; } tmp_ns50wwy/src/spicelib/devices/mesa/mesainit.c0000644000175000017500000000313314163340332022056 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; } tmp_ns50wwy/src/spicelib/devices/mesa/mesadefs.h0000644000175000017500000002723314163340332022050 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4/0000755000175000017500000000000014163340332020172 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim4/b4check.c0000644000175000017500000011014614163340332021644 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 ________ * * * ****************************************************************************** * Modified by Holger Vogt, 12/27/2020 ******************************************************************************/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM4.8 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file bsim4.out and print the data into the file. */ int BSIM4checkModel( BSIM4model *model, BSIM4instance *here, CKTcircuit *ckt) { struct bsim4SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); static char modname[BSIZE_SP]; size_t mlen = strlen(model->BSIM4modName); if (mlen < BSIZE_SP) { /* Check the model named model->BSIM4modName only once, because BSIM4checkModel() is called for each instance. */ if (!strncmp(modname, model->BSIM4modName, mlen)) return(0); strcpy(modname, model->BSIM4modName); } pParam = here->pParam; wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 4.8 model %s\n", model->BSIM4modName); if ((strcmp(model->BSIM4version, "4.8.1")) && (strncmp(model->BSIM4version, "4.81", 4)) && (strncmp(model->BSIM4version, "4.8", 3))) { printf("Warning: This model supports BSIM4 version 4.8\n"); printf("You specified a wrong version number. Working now with BSIM4.8.1\n"); wl_append_word(&wl, &wl, tprintf("Warning: This model supports BSIM4 version 4.8\n")); wl_append_word(&wl, &wl, tprintf("You specified a wrong version number. Working now with BSIM4.8.1.\n")); } if ((here->BSIM4rgateMod == 2) || (here->BSIM4rgateMod == 3)) { if ((here->BSIM4trnqsMod == 1) || (here->BSIM4acnqsMod == 1)) { wl_append_word(&wl, &wl, tprintf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n")); } } if (model->BSIM4toxe <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxe = %g is not positive.\n", model->BSIM4toxe)); Fatal_Flag = 1; } if (model->BSIM4toxp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxp = %g is not positive.\n", model->BSIM4toxp)); Fatal_Flag = 1; } if (model->BSIM4eot <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: EOT = %g is not positive.\n", model->BSIM4eot)); Fatal_Flag = 1; } if (model->BSIM4epsrgate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4epsrgate)); Fatal_Flag = 1; } if (model->BSIM4epsrsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4epsrsub)); Fatal_Flag = 1; } if (model->BSIM4easub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4easub)); Fatal_Flag = 1; } if (model->BSIM4ni0sub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4ni0sub)); Fatal_Flag = 1; } if (model->BSIM4toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM4toxm)); Fatal_Flag = 1; } if (model->BSIM4toxref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxref = %g is not positive.\n", model->BSIM4toxref)); Fatal_Flag = 1; } if (pParam->BSIM4lpe0 < -pParam->BSIM4leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4lpe0)); Fatal_Flag = 1; } if (model->BSIM4lintnoi > pParam->BSIM4leff / 2) { wl_append_word(&wl, &wl, tprintf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4lintnoi)); Fatal_Flag = 1; } if (pParam->BSIM4lpeb < -pParam->BSIM4leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4lpeb)); Fatal_Flag = 1; } if (pParam->BSIM4ndep <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4ndep)); Fatal_Flag = 1; } if (pParam->BSIM4phi <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4phi)); wl_append_word(&wl, &wl, tprintf(" Phin = %g Ndep = %g \n", pParam->BSIM4phin, pParam->BSIM4ndep)); Fatal_Flag = 1; } if (pParam->BSIM4nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4nsub)); Fatal_Flag = 1; } if (pParam->BSIM4ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4ngate)); Fatal_Flag = 1; } if (pParam->BSIM4ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4ngate)); Fatal_Flag = 1; } if (pParam->BSIM4xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4xj)); Fatal_Flag = 1; } if (pParam->BSIM4dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4dvt1)); Fatal_Flag = 1; } if (pParam->BSIM4dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM4w0 == -pParam->BSIM4weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM4dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4dsub)); Fatal_Flag = 1; } if (pParam->BSIM4b1 == -pParam->BSIM4weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (here->BSIM4u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4u0temp)); Fatal_Flag = 1; } if (pParam->BSIM4delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4delta)); Fatal_Flag = 1; } if (here->BSIM4vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4vsattemp)); Fatal_Flag = 1; } if (pParam->BSIM4pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4pclm)); Fatal_Flag = 1; } if (pParam->BSIM4drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM4drout)); Fatal_Flag = 1; } if (here->BSIM4m <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: multiplier = %g is not positive.\n", here->BSIM4m)); Fatal_Flag = 1; } if (here->BSIM4nf < 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Fatal: SAref = %g is not positive.\n", model->BSIM4saref)); Fatal_Flag = 1; } if (model->BSIM4sbref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: SBref = %g is not positive.\n", model->BSIM4sbref)); Fatal_Flag = 1; } } if ((here->BSIM4l + model->BSIM4xl) <= model->BSIM4xgl) { wl_append_word(&wl, &wl, tprintf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n")); Fatal_Flag = 1; } if (here->BSIM4ngcon < 1.0) { wl_append_word(&wl, &wl, tprintf("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; wl_append_word(&wl, &wl, tprintf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n")); } if (model->BSIM4gbmin < 1.0e-20) { wl_append_word(&wl, &wl, tprintf("Warning: Gbmin = %g is too small.\n", model->BSIM4gbmin)); } /* Check saturation parameters */ if (pParam->BSIM4fprout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: fprout = %g is negative.\n", pParam->BSIM4fprout)); Fatal_Flag = 1; } if (pParam->BSIM4pdits < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pdits = %g is negative.\n", pParam->BSIM4pdits)); Fatal_Flag = 1; } if (model->BSIM4pditsl < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pditsl = %g is negative.\n", model->BSIM4pditsl)); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4igbMod) { if (pParam->BSIM4nigbinv <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4nigbinv)); Fatal_Flag = 1; } if (pParam->BSIM4nigbacc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4nigbacc)); Fatal_Flag = 1; } } if (model->BSIM4igcMod) { if (pParam->BSIM4nigc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4nigc)); Fatal_Flag = 1; } if (pParam->BSIM4poxedge <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4poxedge)); Fatal_Flag = 1; } if (pParam->BSIM4pigcd <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4pigcd)); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM4clc)); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4ckappas < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappas = %g is too small.\n", pParam->BSIM4ckappas)); pParam->BSIM4ckappas = 0.02; } if (pParam->BSIM4ckappad < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappad = %g is too small.\n", pParam->BSIM4ckappad)); pParam->BSIM4ckappad = 0.02; } if (model->BSIM4vtss < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtss = %g is negative.\n", model->BSIM4vtss)); Fatal_Flag = 1; } if (model->BSIM4vtsd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsd = %g is negative.\n", model->BSIM4vtsd)); Fatal_Flag = 1; } if (model->BSIM4vtssws < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtssws = %g is negative.\n", model->BSIM4vtssws)); Fatal_Flag = 1; } if (model->BSIM4vtsswd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4vtsswd)); Fatal_Flag = 1; } if (model->BSIM4vtsswgs < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4vtsswgs)); Fatal_Flag = 1; } if (model->BSIM4vtsswgd < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4leff)); } if (pParam->BSIM4leffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4leffCV)); } if (pParam->BSIM4weff <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4weff)); } if (pParam->BSIM4weffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4toxe)); } if (model->BSIM4toxp < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4toxp)); } if (model->BSIM4toxm < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4toxm)); } if (pParam->BSIM4ndep <= 1.0e12) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4ndep)); } else if (pParam->BSIM4ndep >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4ndep)); } if (pParam->BSIM4nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4nsub)); } else if (pParam->BSIM4nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4nsub)); } if ((pParam->BSIM4ngate > 0.0) && (pParam->BSIM4ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4ngate)); } if (pParam->BSIM4dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4dvt0)); } if (fabs(1.0e-8 / (pParam->BSIM4w0 + pParam->BSIM4weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM4nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4nfactor)); } if (pParam->BSIM4cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4cdsc)); } if (pParam->BSIM4cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4cdscd)); } /* Check DIBL parameters */ if (here->BSIM4eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", here->BSIM4eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4b1 + pParam->BSIM4weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM4a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4a2)); pParam->BSIM4a2 = 0.01; } else if (pParam->BSIM4a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4prwg)); pParam->BSIM4prwg = 0.0; } if (pParam->BSIM4rdsw < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4rdsw)); pParam->BSIM4rdsw = 0.0; pParam->BSIM4rds0 = 0.0; } if (pParam->BSIM4rds0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rds0)); pParam->BSIM4rds0 = 0.0; } if (pParam->BSIM4rdswmin < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4rdswmin)); pParam->BSIM4rdswmin = 0.0; } if (pParam->BSIM4pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4pscbe2)); } if (pParam->BSIM4vsattemp < 1.0e3) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4lambda)); } } if ((model->BSIM4vtlGiven) && (pParam->BSIM4vtl > 0.0)) { if (pParam->BSIM4vtl < 6.0e4) { wl_append_word(&wl, &wl, tprintf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4vtl)); } if (pParam->BSIM4xn < 3.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4pdibl1)); } } if (pParam->BSIM4pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: LODK2 = %g is not positive.\n", model->BSIM4lodk2)); } if (model->BSIM4lodeta0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: LODETA0 = %g is not positive.\n", model->BSIM4lodeta0)); } } /* Check gate resistance parameters */ if (here->BSIM4rgateMod == 1) { if (model->BSIM4rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 1.\n")); } else if (here->BSIM4rgateMod == 2) { if (model->BSIM4rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg <= 0.0 for rgateMod = 2.\n")); else if (pParam->BSIM4xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n")); } if (here->BSIM4rgateMod == 3) { if (model->BSIM4rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 3.\n")); else if (pParam->BSIM4xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 should be positive for rgateMod = 3.\n")); } /* Check body resistance parameters */ if (model->BSIM4rbps0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBPS0 = %g is not positive.\n", model->BSIM4rbps0)); Fatal_Flag = 1; } if (model->BSIM4rbpd0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBPD0 = %g is not positive.\n", model->BSIM4rbpd0)); Fatal_Flag = 1; } if (model->BSIM4rbpbx0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBPBX0 = %g is not positive.\n", model->BSIM4rbpbx0)); Fatal_Flag = 1; } if (model->BSIM4rbpby0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBPBY0 = %g is not positive.\n", model->BSIM4rbpby0)); Fatal_Flag = 1; } if (model->BSIM4rbdbx0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBDBX0 = %g is not positive.\n", model->BSIM4rbdbx0)); Fatal_Flag = 1; } if (model->BSIM4rbdby0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBDBY0 = %g is not positive.\n", model->BSIM4rbdby0)); Fatal_Flag = 1; } if (model->BSIM4rbsbx0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBSBX0 = %g is not positive.\n", model->BSIM4rbsbx0)); Fatal_Flag = 1; } if (model->BSIM4rbsby0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: RBSBY0 = %g is not positive.\n", model->BSIM4rbsby0)); Fatal_Flag = 1; } /* Check capacitance parameters */ if (pParam->BSIM4noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM4noff)); } if (pParam->BSIM4voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4voffcv)); } if (pParam->BSIM4moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM4moin)); } if (pParam->BSIM4moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM4moin)); } if (model->BSIM4capMod == 2) { if (pParam->BSIM4acde < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM4acde)); } if (pParam->BSIM4acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM4acde)); } } /* Check overlap capacitance parameters */ if (model->BSIM4cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4cgdo)); model->BSIM4cgdo = 0.0; } if (model->BSIM4cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4cgso)); model->BSIM4cgso = 0.0; } if (model->BSIM4cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4cgbo)); model->BSIM4cgbo = 0.0; } if (model->BSIM4tnoiMod == 1){ wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia)); model->BSIM4tnoia = 0.0; } if (model->BSIM4tnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib)); model->BSIM4tnoib = 0.0; } if (model->BSIM4rnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia)); model->BSIM4rnoia = 0.0; } if (model->BSIM4rnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: tnoic = %g is negative. Set to zero.\n", model->BSIM4tnoic)); model->BSIM4tnoic = 0.0; } if (model->BSIM4rnoic < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4tnoia)); model->BSIM4tnoia = 0.0; } if (model->BSIM4tnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4tnoib)); model->BSIM4tnoib = 0.0; } if (model->BSIM4rnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4rnoia)); model->BSIM4rnoia = 0.0; } if (model->BSIM4rnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Njs = %g is less than 0.7.\n", model->BSIM4SjctEmissionCoeff)); } if (model->BSIM4DjctEmissionCoeff < 0.1) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Njd = %g is less than 0.7.\n", model->BSIM4DjctEmissionCoeff)); } if (model->BSIM4njtsstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4njtsstemp, ckt->CKTtemp)); } if (model->BSIM4njtsswstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4njtsswstemp, ckt->CKTtemp)); } if (model->BSIM4njtsswgstemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4njtsswgstemp, ckt->CKTtemp)); } if (model->BSIM4njtsdGiven && model->BSIM4njtsdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4njtsdtemp, ckt->CKTtemp)); } if (model->BSIM4njtsswdGiven && model->BSIM4njtsswdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4njtsswdtemp, ckt->CKTtemp)); } if (model->BSIM4njtsswgdGiven && model->BSIM4njtsswgdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4njtsswgdtemp, ckt->CKTtemp)); } if (model->BSIM4ntnoi < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4ntnoi)); model->BSIM4ntnoi = 0.0; } /* diode model */ if (model->BSIM4SbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctBotGradingCoeff)); model->BSIM4SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4SbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctSideGradingCoeff)); model->BSIM4SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4SbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4SbulkJctGateSideGradingCoeff)); model->BSIM4SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4DbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctBotGradingCoeff)); model->BSIM4DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4DbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4DbulkJctSideGradingCoeff)); model->BSIM4DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4DbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4scref)); model->BSIM4scref = 1e-6; } if (here->BSIM4sca < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4sca)); here->BSIM4sca = 0.0; } if (here->BSIM4scb < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4scb)); here->BSIM4scb = 0.0; } if (here->BSIM4scc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4scc)); here->BSIM4scc = 0.0; } if (here->BSIM4sc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4sc)); here->BSIM4sc = 0.0; } } if (wlstart->wl_next) { if ((fplog = fopen("bsim4.out", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlstart); return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim4/Makefile.am0000644000175000017500000000105014163340332022222 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 tmp_ns50wwy/src/spicelib/devices/bsim4/b4mask.c0000644000175000017500000027716614163340332021542 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4/bsim4init.h0000644000175000017500000000040214163340332022241 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 tmp_ns50wwy/src/spicelib/devices/bsim4/b4ld.c0000644000175000017500000073541214163340332021177 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 tmp_ns50wwy/src/spicelib/devices/bsim4/b4temp.c0000644000175000017500000037514014163340332021543 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, "detected during BSIM4.8.1 parameter checking for \n model %s of device instance %s\n", model->BSIM4modName, here->BSIM4name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4/b4par.c0000644000175000017500000002543014163340332021352 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_WNFLAG: here->BSIM4wnflag = value->iValue; here->BSIM4wnflagGiven = 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM4icVBS = *(value->v.vec.rVec+2); here->BSIM4icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM4icVGS = *(value->v.vec.rVec+1); here->BSIM4icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM4icVDS = *(value->v.vec.rVec); here->BSIM4icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4/b4cvtest.c0000644000175000017500000003211414163340332022075 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/bsim4ext.h0000644000175000017500000001340114163340332022101 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 *); tmp_ns50wwy/src/spicelib/devices/bsim4/b4noi.c0000644000175000017500000012173314163340332021360 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/ChangeLog0000644000175000017500000000104514163340332021744 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). tmp_ns50wwy/src/spicelib/devices/bsim4/b4mpar.c0000644000175000017500000040237214163340332021533 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.000001e24) mod->BSIM4nsd *= 1.0e-6; break; case BSIM4_MOD_NGATE: mod->BSIM4ngate = value->rValue; mod->BSIM4ngateGiven = TRUE; if (mod->BSIM4ngate > 1.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/bsim4def.h0000644000175000017500000036266414163340332022061 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; int BSIM4wnflag; 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 BSIM4wnflagGiven :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 #define BSIM4_WNFLAG 40 /* 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4/b4.c0000644000175000017500000023375214163340332020657 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( "wnflag", BSIM4_WNFLAG, IF_INTEGER, "W/NF device flag for bin selection"), 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); tmp_ns50wwy/src/spicelib/devices/bsim4/b4mdel.c0000644000175000017500000001206414163340332021510 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; } tmp_ns50wwy/src/spicelib/devices/bsim4/bsim4init.c0000644000175000017500000000325314163340332022243 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; } tmp_ns50wwy/src/spicelib/devices/bsim4/b4getic.c0000644000175000017500000001313414163340332021661 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/b4pzld.c0000644000175000017500000011620014163340332021535 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/b4set.c0000644000175000017500000033443114163340332021367 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; } tmp_ns50wwy/src/spicelib/devices/bsim4/b4trunc.c0000644000175000017500000001355514163340332021730 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/bsim4itf.h0000644000175000017500000001122514163340332022065 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 tmp_ns50wwy/src/spicelib/devices/bsim4/b4ask.c0000644000175000017500000004230514163340332021346 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_WNFLAG: value->iValue = here->BSIM4wnflag; 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4/B4TERMS_OF_USE0000644000175000017500000000254414163340332022302 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 tmp_ns50wwy/src/spicelib/devices/bsim4/b4acld.c0000644000175000017500000010056614163340332021477 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); } tmp_ns50wwy/src/spicelib/devices/bsim4/b4soachk.c0000644000175000017500000003616114163340332022043 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; } tmp_ns50wwy/src/spicelib/devices/bsim4/b4geo.c0000644000175000017500000004067014163340332021345 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; } tmp_ns50wwy/src/spicelib/devices/vdmos/0000755000175000017500000000000014163340332020304 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/vdmos/vdmosext.h0000644000175000017500000000205514163340332022330 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*); extern int VDMOSsoaCheck(CKTcircuit *, GENmodel *); tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosinit.c0000644000175000017500000000325514163340332022471 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 = VDMOSsoaCheck, .DEVinstSize = &VDMOSiSize, .DEVmodSize = &VDMOSmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_vdmos_info(void) { return &VDMOSinfo; } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosset.c0000644000175000017500000004531114163340332022320 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, 2020 Dietmar Warning **********/ /* 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->VDMOStransconductanceGiven) model->VDMOStransconductance = 1; if (!model->VDMOSvth0Given) model->VDMOSvth0 = 0; if (!model->VDIOjctSatCurGiven) model->VDIOjctSatCur = 1e-14; if (!model->VDIOjunctionPotGiven) model->VDIOjunctionPot = .8; if (!model->VDIOjunctionCapGiven) model->VDIOjunctionCap = 0.; 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->VDMOSsubshiftGiven) model->VDMOSsubshift = 0; if (!model->VDMOSksubthresGiven) model->VDMOSksubthres = 0.1; if (!model->VDMOSmtrGiven) model->VDMOSmtr = 1.; if (!model->VDIObvGiven) model->VDIObv = 1e99; if (!model->VDIOibvGiven) model->VDIOibv = 1.0e-10; if (!model->VDIObrkdEmissionCoeffGiven) model->VDIObrkdEmissionCoeff = 1.; if (!model->VDMOSdrainResistanceGiven) model->VDMOSdrainResistance = 0.0; if (!model->VDMOSsourceResistanceGiven) model->VDMOSsourceResistance = 0.0; if (!model->VDMOSgateResistanceGiven) model->VDMOSgateResistance = 0.0; if (!model->VDMOSrdsGiven) model->VDMOSrds = 1.0e+15; if (!model->VDIOresistanceGiven) model->VDIOresistance = 0.0; if (!model->VDIOnGiven) model->VDIOn = 1.; if (!model->VDIOtransitTimeGiven) model->VDIOtransitTime = 0.; if (!model->VDIOegGiven) model->VDIOeg = 1.11; if (!model->VDIOxtiGiven) model->VDIOxti = 3.0; if (!model->VDMOSrthjcGiven) model->VDMOSrthjc = 1.0; if (!model->VDMOSrthcaGiven) model->VDMOSrthca = 1000; if (!model->VDMOScthjGiven) model->VDMOScthj = 10e-06; if (!model->VDMOSmuGiven) model->VDMOSmu = -1.5; if (!model->VDMOStcvthGiven) model->VDMOStcvth = 0.0; if (!model->VDMOStexp0Given) model->VDMOStexp0 = 1.5; if (!model->VDMOStexp1Given) model->VDMOStexp1 = 0.3; if (!model->VDMOStrd1Given) model->VDMOStrd1 = 0.0; if (!model->VDMOStrd2Given) model->VDMOStrd2 = 0.0; if (!model->VDMOStrg1Given) model->VDMOStrg1 = 0.0; if (!model->VDMOStrg2Given) model->VDMOStrg2 = 0.0; if (!model->VDMOStrs1Given) model->VDMOStrs1 = 0.0; if (!model->VDMOStrs2Given) model->VDMOStrs2 = 0.0; if (!model->VDIOtrb1Given) model->VDIOtrb1 = 0.0; if (!model->VDIOtrb2Given) model->VDIOtrb2 = 0.0; if (!model->VDMOStksubthres1Given) model->VDMOStksubthres1 = 0.0; if (!model->VDMOStksubthres2Given) model->VDMOStksubthres2 = 0.0; if (!model->VDMOSvgsMaxGiven) model->VDMOSvgsMax = 1e99; if (!model->VDMOSvgdMaxGiven) model->VDMOSvgdMax = 1e99; if (!model->VDMOSvdsMaxGiven) model->VDMOSvdsMax = 1e99; if (!model->VDMOSvgsrMaxGiven) model->VDMOSvgsrMax = 1e99; if (!model->VDMOSvgdrMaxGiven) model->VDMOSvgdrMax = 1e99; if (!model->VDMOSpd_maxGiven) model->VDMOSpd_max = 1e99; if (!model->VDMOSid_maxGiven) model->VDMOSpd_max = 1e99; if (!model->VDMOSidr_maxGiven) model->VDMOSidr_max = 1e99; if (!model->VDMOSte_maxGiven) model->VDMOSte_max = 1e99; if (!model->VDMOSderatingGiven) model->VDMOSderating = 0; if (!model->VDMOSrth_extGiven) model->VDMOSrth_ext = model->VDMOSrthca; if (!model->VDMOSqsResistanceGiven) model->VDMOSqsResistance = 0.0; if (!model->VDMOSqsVoltageGiven) model->VDMOSqsVoltage = 0.0; if ((model->VDMOSqsResistanceGiven) && (model->VDMOSqsVoltageGiven)) model->VDMOSqsGiven = 1; else model->VDMOSqsGiven = 0; if(!model->VDMOStnomGiven) { model->VDMOStnom = ckt->CKTnomTemp; } /* 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 = 3.9 * 8.854214871e-12 / 1e-07; /* use default Tox of 100nm */ /* body diode model */ /* limit activation energy to min of .1 */ if (model->VDIOeg<.1) { SPfrontEnd->IFerrorf(ERR_WARNING, "%s: body diode activation energy too small, limited to 0.1", model->VDMOSmodName); model->VDIOeg = .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; /* 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(!here->VDMOSmGiven) { here->VDMOSm = 1; } if (model->VDMOSdrainResistance > 0) { here->VDMOSdrainConductance = here->VDMOSm / model->VDMOSdrainResistance; } else { here->VDMOSdrainConductance = 0.0; } if (model->VDMOSsourceResistance > 0) { here->VDMOSsourceConductance = here->VDMOSm / model->VDMOSsourceResistance; } else { here->VDMOSsourceConductance = 0.0; } if (model->VDMOSgateResistance > 0) { here->VDMOSgateConductance = here->VDMOSm / model->VDMOSgateResistance; } else { here->VDMOSgateConductance = 0.0; } if (model->VDMOSrdsGiven) { if (model->VDMOSrds > 0) { here->VDMOSdsConductance = here->VDMOSm / model->VDMOSrds; } else { here->VDMOSdsConductance = 1e-15; } } else { here->VDMOSdsConductance = 1e-15; } if (model->VDIOresistance > 0) { here->VDIOconductance = here->VDMOSm / model->VDIOresistance; } else { here->VDIOconductance = 0.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->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, 2, &tmpNode, &tmpName) == OK) { if (tmpNode->nsGiven) { tmp->nodeset = tmpNode->nodeset; tmp->nsGiven = tmpNode->nsGiven; } } } } } else { here->VDMOSgNodePrime = here->VDMOSgNode; } 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->VDIOresistance > 0 ) { if (here->VDIOposPrimeNode == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "body 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; } if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { if (here->VDMOStempNode == -1) { error = CKTmkVolt(ckt,&tmp,here->VDMOSname,"Tj"); if (error) return(error); here->VDMOStempNode = tmp->number; } if (here->VDMOStcaseNode == -1) { error = CKTmkVolt(ckt,&tmp,here->VDMOSname,"Tc"); if (error) return(error); here->VDMOStcaseNode = tmp->number; } if(here->VDMOSvcktTbranch == 0) { error = CKTmkCur(ckt,&tmp,here->VDMOSname,"VcktTemp"); if(error) return(error); here->VDMOSvcktTbranch = tmp->number; } if (here->VDMOStNodePrime == 0) { error = CKTmkVolt(ckt, &tmp, here->VDMOSname, "cktTemp"); if (error) return(error); here->VDMOStNodePrime = tmp->number; } } else { here->VDMOStempNode = 0; here->VDMOStcaseNode = 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(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); if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { TSTALLOC(VDMOSTemptempPtr, VDMOStempNode, VDMOStempNode); /* Transistor thermal contribution */ TSTALLOC(VDMOSTempdpPtr, VDMOStempNode, VDMOSdNodePrime); TSTALLOC(VDMOSTempspPtr, VDMOStempNode, VDMOSsNodePrime); TSTALLOC(VDMOSTempgpPtr, VDMOStempNode, VDMOSgNodePrime); TSTALLOC(VDMOSGPtempPtr, VDMOSgNodePrime, VDMOStempNode); TSTALLOC(VDMOSDPtempPtr, VDMOSdNodePrime, VDMOStempNode); TSTALLOC(VDMOSSPtempPtr, VDMOSsNodePrime, VDMOStempNode); TSTALLOC(VDIOTempposPrimePtr, VDMOStempNode, VDIOposPrimeNode);/* Diode thermal contribution */ TSTALLOC(VDMOSTempdPtr, VDMOStempNode, VDMOSdNode); TSTALLOC(VDIOPosPrimetempPtr, VDIOposPrimeNode, VDMOStempNode); TSTALLOC(VDMOSDtempPtr, VDMOSdNode, VDMOStempNode); TSTALLOC(VDMOStempSPtr, VDMOStempNode, VDMOSsNode); TSTALLOC(VDMOSSTempPtr, VDMOSsNode, VDMOStempNode); TSTALLOC(VDMOSTcasetcasePtr, VDMOStcaseNode, VDMOStcaseNode); /* Rthjc between tj and tcase*/ TSTALLOC(VDMOSTcasetempPtr, VDMOStcaseNode, VDMOStempNode); TSTALLOC(VDMOSTemptcasePtr, VDMOStempNode, VDMOStcaseNode); TSTALLOC(VDMOSTptpPtr, VDMOStNodePrime, VDMOStNodePrime); /* Rthca between tcase and Vsrc */ TSTALLOC(VDMOSTptcasePtr, VDMOStNodePrime, VDMOStempNode); TSTALLOC(VDMOSTcasetpPtr, VDMOStempNode, VDMOStNodePrime); TSTALLOC(VDMOSCktTcktTPtr, VDMOSvcktTbranch, VDMOSvcktTbranch); /* Vsrc=cktTemp to gnd */ TSTALLOC(VDMOSCktTtpPtr, VDMOSvcktTbranch, VDMOStNodePrime); TSTALLOC(VDMOSTpcktTPtr, VDMOStNodePrime, VDMOSvcktTbranch); } } } 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; if ((here->VDMOSthermal) && (model->VDMOSrthjcGiven)) { if (here->VDMOStNodePrime > 0) CKTdltNNum(ckt, here->VDMOStNodePrime); here->VDMOStNodePrime = 0; if (here->VDMOSvcktTbranch > 0) CKTdltNNum(ckt, here->VDMOSvcktTbranch); here->VDMOSvcktTbranch = 0; } } } return OK; } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmositf.h0000644000175000017500000000027214163340332022311 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 tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosload.c0000644000175000017500000012076014163340332022446 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, 2020 Dietmar Warning **********/ #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" 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 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, xrev; double capgs = 0.0; /* total gate-source capacitance */ double capgd = 0.0; /* total gate-drain capacitance */ double capth = 0.0; /* total thermal capacitance */ int Check_th, Check_dio; int error; int selfheat; double rd0T, rd1T, dBeta_dT, dIds_dT; double Vrd=0.0, dIth_dVrd=0.0, dIrd_dT=0.0; double drd0T_dT, drd1T_dT, drd_dT, dgdrain_dT=0.0; double dIrd_dgdrain; double deldelTemp=0.0, delTemp, delTemp1, Temp, Vds, Vgs; double ceqqth=0.0; double GmT, gTtg, gTtdp, gTtt, gTtsp, gcTt=0.0; /* 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)) { Temp = here->VDMOStemp; selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven); if (selfheat) Check_th = 1; else Check_th = 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 */ if ((ckt->CKTmode & MODEINITSMSIG)) { vgs = *(ckt->CKTstate0 + here->VDMOSvgs); vds = *(ckt->CKTstate0 + here->VDMOSvds); delTemp = *(ckt->CKTstate0 + here->VDMOSdelTemp); } else if ((ckt->CKTmode & MODEINITTRAN)) { vgs = *(ckt->CKTstate1 + here->VDMOSvgs); vds = *(ckt->CKTstate1 + here->VDMOSvds); delTemp = *(ckt->CKTstate1 + here->VDMOSdelTemp); } else if ((ckt->CKTmode & MODEINITJCT) && !here->VDMOSoff) { /* 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 two voltages */ vds = model->VDMOStype * here->VDMOSicVDS; vgs = model->VDMOStype * here->VDMOSicVGS; delTemp = 0.0; if ((vds == 0.0) && (vgs == 0.0) && ((ckt->CKTmode & (MODETRAN | MODEAC|MODEDCOP | MODEDCTRANCURVE)) || (!(ckt->CKTmode & MODEUIC)))) { vgs = model->VDMOStype * model->VDMOSvth0 + 0.1; vds = 0.0; } } else if ((ckt->CKTmode & (MODEINITJCT | MODEINITFIX)) && (here->VDMOSoff)) { vgs = vds = delTemp = 0.0; /* * ok - now to do the start-up operations * * we must get values for 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 */ } else { #ifndef PREDICTOR if (ckt->CKTmode & MODEINITPRED) { /* 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))); *(ckt->CKTstate0 + here->VDMOSdelTemp) = *(ckt->CKTstate1 + here->VDMOSdelTemp); delTemp = (1 + xfact)* (*(ckt->CKTstate1 + here->VDMOSdelTemp)) - (xfact * (*(ckt->CKTstate2 + here->VDMOSdelTemp))); } 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)); if (selfheat) delTemp = *(ckt->CKTrhsOld + here->VDMOStempNode); else delTemp = 0.0; #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; deldelTemp = delTemp - *(ckt->CKTstate0 + here->VDMOSdelTemp); /* these are needed for convergence testing */ if (here->VDMOSmode >= 0) { cdhat = here->VDMOScd + here->VDMOSgm * delvgs + here->VDMOSgds * delvds + here->VDMOSgmT * deldelTemp; } else { cdhat = here->VDMOScd - here->VDMOSgm * delvgd + here->VDMOSgds * delvds + here->VDMOSgmT * deldelTemp; } #ifndef NOBYPASS /* now lets see if we can bypass (ugh) */ if ((!(ckt->CKTmode & MODEINITPRED)) && (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)) && ((here->VDMOStempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->VDMOSdelTemp))) + ckt->CKTvoltTol*1e4)))) { /* 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; delTemp = *(ckt->CKTstate0 + here->VDMOSdelTemp); /* calculate Vds for temperature conductance calculation in bypass (used later when filling Temp node matrix) */ 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)); capth = (*(ckt->CKTstate0 + here->VDMOScapth) + *(ckt->CKTstate1 + here->VDMOScapth)); } 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)); } else { vgd = DEVfetlim(vgd, vgdo, von); vds = vgs - vgd; if (!(ckt->CKTfixLimit)) { vds = -DEVlimvds(-vds, -(*(ckt->CKTstate0 + here->VDMOSvds))); } vgs = vgd + vds; } if (selfheat) delTemp = DEVlimitlog(delTemp, *(ckt->CKTstate0 + here->VDMOSdelTemp),30,&Check_th); else delTemp = 0.0; #endif /*NODELIMITING*/ } if (selfheat) { Temp = here->VDMOStemp + delTemp; VDMOStempUpdate(model, here, Temp, ckt); } else { Temp = here->VDMOStemp; } here->VDMOSTempSH = Temp; /* added for portability of SH Temp for noise analysis */ /* Calculate temperature dependent values for self-heating effect */ if (selfheat) { double TempRatio = Temp / here->VDMOStemp; Beta = here->VDMOStTransconductance * pow(TempRatio,model->VDMOSmu); dBeta_dT = Beta * model->VDMOSmu / Temp; rd0T = here->VDMOSdrainResistance * pow(TempRatio, model->VDMOStexp0); drd0T_dT = rd0T * model->VDMOStexp0 / Temp; rd1T = 0.0; drd1T_dT = 0.0; if (model->VDMOSqsGiven) { rd1T = here->VDMOSqsResistance * pow(TempRatio, model->VDMOStexp1); drd1T_dT = rd1T * model->VDMOStexp1 / Temp; } } else { Beta = here->VDMOStTransconductance; dBeta_dT = 0.0; rd0T = here->VDMOSdrainResistance; drd0T_dT = 0.0; rd1T = 0.0; drd1T_dT = 0.0; if (model->VDMOSqsGiven) rd1T = here->VDMOSqsResistance; } /* * 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; Vds = vds; Vgs = vgs; } else { /* inverse mode */ here->VDMOSmode = -1; Vds = -vds; Vgs = vgd; } { /* * this block of code evaluates the drain current and its * derivatives using the shichman-hodges model and the * charges associated with the gate and channel for * mosfets * */ von = here->VDMOStVth * model->VDMOStype; double vgst = (here->VDMOSmode == 1 ? vgs : vgd) - von; vdsat = MAX(vgst, 0); /* 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 */ double slope = here->VDMOStksubthres; 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; double betap = Beta*t0/t1; double dbetapdvgs = -Beta*theta*t0/(t1*t1); double dbetapdvds = Beta*lambda/t1; double dbetapdT = dBeta_dT*t0/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; dIds_dT = dbetapdT * vgst*vgst * .5; } 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; dIds_dT = dbetapdT * vdss * (vgst - .5 * vdss); } } /* 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; *(ckt->CKTstate0 + here->VDMOSdelTemp) = delTemp; /* 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 = rd0T + rd1T * (vdsn / (vdsn + fabs(model->VDMOSqsVoltage))); drd_dT = drd0T_dT + drd1T_dT * (vdsn / (vdsn + fabs(model->VDMOSqsVoltage))); if (rd > 0) { here->VDMOSdrainConductance = 1 / rd + ckt->CKTgmin; dgdrain_dT = -drd_dT / (rd*rd); } else { here->VDMOSdrainConductance = 1 / rd0T; dgdrain_dT = -drd0T_dT / (rd0T*rd0T); } } else { if (rd0T > 0) { here->VDMOSdrainConductance = 1 / rd0T; dgdrain_dT = -drd0T_dT / (rd0T*rd0T); } } if (selfheat) { GmT = dIds_dT; here->VDMOSgmT = GmT; } else { GmT = 0.0; here->VDMOSgmT = 0.0; } if (selfheat) { /* power flows from ground into the temperature node. */ here->VDMOSgtempg = model->VDMOStype*here->VDMOSgm * Vds; here->VDMOSgtempT = GmT * Vds; here->VDMOSgtempd = model->VDMOStype* (here->VDMOSgds * Vds + cdrain); here->VDMOScth = cdrain * Vds - model->VDMOStype * (here->VDMOSgtempg * Vgs + here->VDMOSgtempd * Vds) - here->VDMOSgtempT * delTemp; Vrd = *(ckt->CKTrhsOld + here->VDMOSdNode) - *(ckt->CKTrhsOld + here->VDMOSdNodePrime); dIth_dVrd = here->VDMOSdrainConductance * Vrd; dIrd_dgdrain = Vrd; dIrd_dT = dIrd_dgdrain * dgdrain_dT; here->VDMOScth += here->VDMOSdrainConductance * Vrd*Vrd - dIth_dVrd*Vrd - dIrd_dT*Vrd*delTemp; } /* * vdmos capacitor model */ if (ckt->CKTmode & (MODETRAN | MODETRANOP | MODEINITSMSIG)) { /* * calculate gate - drain, gate - source capacitors * drain-source capacitor is evaluated with the body 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)); *(ckt->CKTstate0 + here->VDMOScapth) = model->VDMOScthj; /* always constant */ vgs1 = *(ckt->CKTstate1 + here->VDMOSvgs); vgd1 = vgs1 - *(ckt->CKTstate1 + here->VDMOSvds); delTemp1 = *(ckt->CKTstate1 + here->VDMOSdelTemp); if (ckt->CKTmode & (MODETRANOP | MODEINITSMSIG)) { capgs = 2 * *(ckt->CKTstate0 + here->VDMOScapgs); capgd = 2 * *(ckt->CKTstate0 + here->VDMOScapgd); capth = 2 * *(ckt->CKTstate0 + here->VDMOScapth); } else { capgs = (*(ckt->CKTstate0 + here->VDMOScapgs) + *(ckt->CKTstate1 + here->VDMOScapgs)); capgd = (*(ckt->CKTstate0 + here->VDMOScapgd) + *(ckt->CKTstate1 + here->VDMOScapgd)); capth = (*(ckt->CKTstate0 + here->VDMOScapth) + *(ckt->CKTstate1 + here->VDMOScapth)); } #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); *(ckt->CKTstate0 + here->VDMOSqth) = (1 + xfact) * *(ckt->CKTstate1 + here->VDMOSqth) - xfact * *(ckt->CKTstate2 + here->VDMOSqth); } 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); *(ckt->CKTstate0 + here->VDMOSqth) = (delTemp-delTemp1)*capth + *(ckt->CKTstate1 + here->VDMOSqth); } else { /* TRANOP only */ *(ckt->CKTstate0 + here->VDMOSqgs) = vgs*capgs; *(ckt->CKTstate0 + here->VDMOSqgd) = vgd*capgd; *(ckt->CKTstate0 + here->VDMOSqth) = delTemp*capth; } #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; gcTt = 0.0; ceqqth = 0.0; } else { if (capgs == 0) *(ckt->CKTstate0 + here->VDMOScqgs) = 0; if (capgd == 0) *(ckt->CKTstate0 + here->VDMOScqgd) = 0; if (capth == 0) *(ckt->CKTstate0 + here->VDMOScqth) = 0; /* * calculate equivalent conductances and currents for * vdmos 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); if (selfheat) { error = NIintegrate(ckt, &gcTt, &ceqqth, capth, here->VDMOSqth); if (error) return(error); ceqqth = ceqqth - gcTt*delTemp + ckt->CKTag[0] * *(ckt->CKTstate0 + here->VDMOSqth); } } /* * load current vector */ if (selfheat) { if (here->VDMOSmode >= 0) { GmT = model->VDMOStype * here->VDMOSgmT; gTtg = here->VDMOSgtempg; gTtdp = here->VDMOSgtempd; gTtt = here->VDMOSgtempT; gTtsp = - (gTtg + gTtdp); } else { GmT = -model->VDMOStype * here->VDMOSgmT; gTtg = here->VDMOSgtempg; gTtsp = here->VDMOSgtempd; gTtt = here->VDMOSgtempT; gTtdp = - (gTtg + gTtsp); } } else { GmT = 0.0; gTtg = 0.0; gTtdp = 0.0; gTtt = 0.0; gTtsp = 0.0; } 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; if (selfheat) { *(ckt->CKTrhs + here->VDMOSdNode) += dIrd_dT * delTemp; *(ckt->CKTrhs + here->VDMOSdNodePrime) += GmT * delTemp - dIrd_dT * delTemp; *(ckt->CKTrhs + here->VDMOSsNodePrime) += -GmT * delTemp; *(ckt->CKTrhs + here->VDMOStempNode) += here->VDMOScth - ceqqth; double vCktTemp = (ckt->CKTtemp-CONSTCtoK); /* ckt temperature */ if (ckt->CKTmode & MODETRANOP) vCktTemp *= ckt->CKTsrcFact; *(ckt->CKTrhs + here->VDMOSvcktTbranch)+= vCktTemp; } /* * load y matrix */ *(here->VDMOSDdPtr) += (here->VDMOSdrainConductance + here->VDMOSdsConductance); *(here->VDMOSGgPtr) += (here->VDMOSgateConductance); *(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); if (selfheat) { (*(here->VDMOSDtempPtr) += dIrd_dT); (*(here->VDMOSDPtempPtr) += GmT - dIrd_dT); (*(here->VDMOSSPtempPtr) += -GmT); (*(here->VDMOSGPtempPtr) += 0.0); (*(here->VDMOSTemptempPtr) += -gTtt - dIrd_dT*Vrd + 1/model->VDMOSrthjc + gcTt); (*(here->VDMOSTempgpPtr) += -gTtg); (*(here->VDMOSTempdPtr) += -dIth_dVrd); (*(here->VDMOSTempdpPtr) += -gTtdp + dIth_dVrd); (*(here->VDMOSTempspPtr) += -gTtsp); (*(here->VDMOSTemptcasePtr) += -1/model->VDMOSrthjc); (*(here->VDMOSTcasetempPtr) += -1/model->VDMOSrthjc); (*(here->VDMOSTcasetcasePtr) += 1/model->VDMOSrthjc + 1/model->VDMOSrthca); (*(here->VDMOSTptpPtr) += 1/model->VDMOSrthca); (*(here->VDMOSTptcasePtr) += -1/model->VDMOSrthca); (*(here->VDMOSTcasetpPtr) += -1/model->VDMOSrthca); (*(here->VDMOSCktTtpPtr) += 1.0); (*(here->VDMOSTpcktTPtr) += 1.0); } /* body diode model * Delivers reverse conduction and forward breakdown * of VDMOS transistor */ double vd, cd; double vte; double vtebrk, vbrknp; double cdb, cdeq; double capd; double gd, gdb, gspr; double delvd; /* change in diode voltage temporary */ double evrev; double Ith=0.0, dIth_dT=0.0; double dIdio_dT=0.0, dIth_dVdio=0.0; double vrs=0.0, dIrs_dT=0.0, dIth_dVrs=0.0; #ifndef NOBYPASS double tol; /* temporary for tolerance calculations */ #endif gspr = here->VDIOtConductance; vt = CONSTKoverQ * Temp; vte = model->VDIOn * vt; vtebrk = model->VDIObrkdEmissionCoeff * vt; vbrknp = here->VDIOtBrkdwnV; Check_dio = 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); *(ckt->CKTstate0 + here->VDIOdIdio_dT) = *(ckt->CKTstate1 + here->VDIOdIdio_dT); } 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 + *(ckt->CKTstate0 + here->VDIOdIdio_dT) * deldelTemp; /* * 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) { if ((here->VDMOStempNode == 0) || (fabs(deldelTemp) < (ckt->CKTreltol * MAX(fabs(delTemp), fabs(*(ckt->CKTstate0+here->VDMOSdelTemp)))+ ckt->CKTvoltTol*1e4))) { vd = *(ckt->CKTstate0 + here->VDIOvoltage); cd = *(ckt->CKTstate0 + here->VDIOcurrent); gd = *(ckt->CKTstate0 + here->VDIOconduct); dIdio_dT= *(ckt->CKTstate0 + here->VDIOdIdio_dT); goto load; } } } } #endif /* NOBYPASS */ /* * limit new junction voltage */ if ((model->VDIObvGiven) && (vd < MIN(0, -vbrknp + 10 * vtebrk))) { double vdtemp; vdtemp = -(vd + vbrknp); vdtemp = DEVpnjlim(vdtemp, -(*(ckt->CKTstate0 + here->VDIOvoltage) + vbrknp), vtebrk, here->VDIOtVcrit, &Check_dio); vd = -(vdtemp + vbrknp); } else { vd = DEVpnjlim(vd, *(ckt->CKTstate0 + here->VDIOvoltage), vte, here->VDIOtVcrit, &Check_dio); } } /* * compute dc current and derivatives */ if (vd >= -3 * vte) { /* forward current */ double evd; evd = exp(vd / vte); cdb = here->VDIOtSatCur*(evd - 1); dIdio_dT = here->VDIOtSatCur_dT * (evd - 1) - here->VDIOtSatCur * vd * evd / (vte * Temp); gdb = here->VDIOtSatCur*evd / vte; } else if ((!(model->VDIObvGiven)) || vd >= -vbrknp) { /* reverse */ double arg3, darg3_dT; arg = 3 * vte / (vd*CONSTe); arg3 = arg * arg * arg; darg3_dT = 3 * arg3 / Temp; cdb = -here->VDIOtSatCur*(1 + arg3); dIdio_dT = -here->VDIOtSatCur_dT * (arg3 + 1) - here->VDIOtSatCur * darg3_dT; gdb = here->VDIOtSatCur * 3 * arg / vd; } else { /* breakdown */ evrev = exp(-(vbrknp + vd) / vtebrk); cdb = -here->VDIOtSatCur*evrev; dIdio_dT = here->VDIOtSatCur * (-vbrknp-vd) * evrev / vtebrk / Temp - here->VDIOtSatCur_dT * evrev; gdb = here->VDIOtSatCur*evrev / vtebrk; } cd = cdb + ckt->CKTgmin*vd; gd = gdb + ckt->CKTgmin; if ((ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC | MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC))) { /* * charge storage elements */ double czero, diffcharge, deplcharge, diffcap, deplcap; 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 { double czof2; 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_th == 1) || (Check_dio == 1)) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } *(ckt->CKTstate0 + here->VDIOvoltage) = vd; *(ckt->CKTstate0 + here->VDIOcurrent) = cd; *(ckt->CKTstate0 + here->VDIOconduct) = gd; *(ckt->CKTstate0 + here->VDIOdIdio_dT) = dIdio_dT; #ifndef NOBYPASS load: #endif if (selfheat) { double dIrs_dgspr, dIth_dIrs; vrs = *(ckt->CKTrhsOld + here->VDMOSsNode) - *(ckt->CKTrhsOld + here->VDIOposPrimeNode); Ith = vd*cd + vrs*vrs*gspr; dIth_dVdio = cd + vd*gd; dIth_dVrs = vrs*gspr; dIrs_dgspr = vrs; dIrs_dT = dIrs_dgspr * here->VDIOtConductance_dT; dIth_dIrs = vrs; dIth_dT = dIth_dIrs*dIrs_dT + dIdio_dT*vd; } /* * 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; } if (selfheat) { *(ckt->CKTrhs + here->VDIOposPrimeNode) += dIdio_dT*delTemp - dIrs_dT*delTemp; *(ckt->CKTrhs + here->VDMOSdNode) += -dIdio_dT*delTemp; *(ckt->CKTrhs + here->VDMOSsNode) += dIrs_dT*delTemp; *(ckt->CKTrhs + here->VDMOStempNode) += Ith - model->VDMOStype*dIth_dVdio*vd - dIth_dVrs*vrs - dIth_dT*delTemp; } /* * load matrix */ *(here->VDMOSSsPtr) += gspr; *(here->VDMOSDdPtr) += gd; *(here->VDIORPrpPtr) += (gd + gspr); *(here->VDIOSrpPtr) -= gspr; *(here->VDIODrpPtr) -= gd; *(here->VDIORPsPtr) -= gspr; *(here->VDIORPdPtr) -= gd; if (selfheat) { (*(here->VDMOStempSPtr) += -dIth_dVrs); (*(here->VDIOTempposPrimePtr) += -dIth_dVdio + dIth_dVrs); (*(here->VDMOSTempdPtr) += dIth_dVdio); (*(here->VDMOSTemptempPtr) += -dIth_dT); (*(here->VDIOPosPrimetempPtr) += dIdio_dT - dIrs_dT); (*(here->VDMOSSTempPtr) += dIrs_dT); (*(here->VDMOSDtempPtr) += -dIdio_dT); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/Makefile.am0000644000175000017500000000105014163340332022334 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 \ vdmossoachk.c \ vdmostemp.c \ vdmostrun.c AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosnoi.c0000644000175000017500000001612514163340332022313 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; double tempRatioSH; /* 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: if ((inst->VDMOSthermal) && (model->VDMOSrthjcGiven)) tempRatioSH = inst->VDMOSTempSH / ckt->CKTtemp; else tempRatioSH = 1.0; NevalSrc(&noizDens[VDMOSRDNOIZ],&lnNdens[VDMOSRDNOIZ], ckt,THERMNOISE,inst->VDMOSdNodePrime,inst->VDMOSdNode, inst->VDMOSdrainConductance * tempRatioSH); NevalSrc(&noizDens[VDMOSRSNOIZ],&lnNdens[VDMOSRSNOIZ], ckt,THERMNOISE,inst->VDMOSsNodePrime,inst->VDMOSsNode, inst->VDMOSsourceConductance * tempRatioSH); NevalSrc(&noizDens[VDMOSIDNOIZ],&lnNdens[VDMOSIDNOIZ], ckt,THERMNOISE,inst->VDMOSdNodePrime,inst->VDMOSsNodePrime, (2.0/3.0 * fabs(inst->VDMOSgm)) * tempRatioSH); 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->VDMOSm * 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); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmostemp.c0000644000175000017500000001715514163340332022477 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, 2020 Dietmar Warning **********/ /* perform the temperature update to the vdmos */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" void VDMOStempUpdate(VDMOSmodel *inModel, VDMOSinstance *here, double Temp, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel*)inModel; double egfet,egfet1; double fact1,fact2; double kt,kt1; double arg1; double ratio; double phio; double pbfact1,pbfact; double vt,vtnom; double xfc; 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); xfc = log(1 - model->VDIOdepletionCapCoeff); double arg; /* 1 - fc */ double dt = Temp - model->VDMOStnom; /* vdmos temperature model */ ratio = Temp/model->VDMOStnom; here->VDMOStTransconductance = model->VDMOStransconductance * here->VDMOSm * pow(ratio, model->VDMOSmu); here->VDMOStVth = model->VDMOSvth0 - model->VDMOStype * model->VDMOStcvth * dt; here->VDMOStksubthres = model->VDMOSksubthres * (1.0 + (model->VDMOStksubthres1 * dt) + (model->VDMOStksubthres2 * dt * dt)); if (model->VDMOStexp0Given) here->VDMOSdrainResistance = model->VDMOSdrainResistance / here->VDMOSm * pow(ratio, model->VDMOStexp0); else here->VDMOSdrainResistance = model->VDMOSdrainResistance / here->VDMOSm * (1.0 + (model->VDMOStrd1 * dt) + (model->VDMOStrd2 * dt * dt)); here->VDMOSgateConductance = here->VDMOSgateConductance / (1.0 + (model->VDMOStrg1 * dt) + (model->VDMOStrg2 * dt * dt)); here->VDMOSsourceConductance = here->VDMOSsourceConductance / (1.0 + (model->VDMOStrs1 * dt) + (model->VDMOStrs2 * dt * dt)); if (model->VDMOSqsGiven) here->VDMOSqsResistance = model->VDMOSqsResistance / here->VDMOSm * pow(ratio, model->VDMOStexp1); vt = Temp * CONSTKoverQ; fact2 = Temp/REFTEMP; kt = Temp * CONSTboltz; egfet = 1.16-(7.02e-4*Temp*Temp)/ (Temp+1108); arg = -egfet/(kt+kt)+1.1150877/(CONSTboltz*(REFTEMP+REFTEMP)); pbfact = -2*vt *(1.5*log(fact2)+CHARGE*arg); phio = (model->VDMOSphi - pbfact1) / fact1; here->VDMOStPhi = fact2 * phio + pbfact; /* needed for distortion analysis */ /* body diode temperature model */ double pbo, gmaold; double gmanew, factor; double tBreakdownVoltage, vte, cbv; double xbv, xcbv, tol, iter; double arg1_dT, arg2, arg2_dT; /* 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 = here->VDMOSm * 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*(Temp - REFTEMP) - gmanew); vte = model->VDIOn*vt; arg1 = ((Temp / model->VDMOStnom) - 1) * model->VDIOeg / vte; arg1_dT = model->VDIOeg / (vte*model->VDMOStnom) - model->VDIOeg*(Temp/model->VDMOStnom -1)/(vte*Temp); arg2 = model->VDIOxti / model->VDIOn * log(Temp / model->VDMOStnom); arg2_dT = model->VDIOxti / model->VDIOn / Temp; here->VDIOtSatCur = here->VDMOSm * model->VDIOjctSatCur * exp(arg1 + arg2); here->VDIOtSatCur_dT = here->VDMOSm * model->VDIOjctSatCur * exp(arg1 + arg2) * (arg1_dT + arg2_dT); /* 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 */ here->VDIOtVcrit = vte * log(vte / (CONSTroot2*here->VDIOtSatCur)); /* limit junction potential to max of 1/FC */ if (here->VDIOtDepCap > 2.5) { here->VDIOtJctPot = 2.5 / model->VDIOn; here->VDIOtDepCap = model->VDIOn*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->VDIObvGiven) { /* tlev == 0 */ tBreakdownVoltage = fabs(model->VDIObv); cbv = model->VDIOibv; if (cbv < here->VDIOtSatCur * tBreakdownVoltage / vt) { #ifdef TRACE cbv = here->VDIOtSatCur * tBreakdownVoltage / vt; SPfrontEnd->IFerrorf(ERR_WARNING, "%s: breakdown current increased to %g to resolve", here->VDMOSname, 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)); 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->VDMOSname, 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 */ factor = 1.0 + (model->VDIOtrb1) * dt + (model->VDIOtrb2 * dt * dt); here->VDIOtConductance = here->VDIOconductance / factor; here->VDIOtConductance_dT = -here->VDIOconductance * (model->VDIOtrb1 + model->VDIOtrb2 * dt) / (factor*factor); here->VDIOtF2 = exp((1 + here->VDIOtGradingCoeff)*xfc); here->VDIOtF3 = 1 - model->VDIOdepletionCapCoeff* (1 + here->VDIOtGradingCoeff); } int VDMOStemp(GENmodel *inModel, CKTcircuit *ckt) { VDMOSmodel *model = (VDMOSmodel*)inModel; VDMOSinstance *here; /* loop through all the vdmos models */ for( ; model != NULL; model = VDMOSnextModel(model)) { /* loop through all the instances */ for(here=VDMOSinstances(model);here;here=VDMOSnextInstance(here)) { if(!here->VDMOSdtempGiven) here->VDMOSdtemp = 0.0; if(!here->VDMOStempGiven) here->VDMOStemp = ckt->CKTtemp + here->VDMOSdtemp; VDMOStempUpdate(model, here, here->VDMOStemp, ckt); } /* instance */ } /* model */ return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmospar.c0000644000175000017500000000425614163340332022312 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, 2020 Dietmar Warning **********/ /* */ #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_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_THERMAL: here->VDMOSthermal = (value->iValue != 0); break; case VDMOS_IC: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->VDMOSicVGS = *(value->v.vec.rVec+1); here->VDMOSicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->VDMOSicVDS = *(value->v.vec.rVec); here->VDMOSicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmossoachk.c0000644000175000017500000002411414163340332022773 0ustar carstencarsten/********** Copyright 2013 Dietmar Warning. All rights reserved. Author: 2013 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "vdmosdefs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int VDMOSsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { VDMOSmodel *model = (VDMOSmodel *) inModel; VDMOSinstance *here; double vgs, vgd, vds; /* actual mos voltages */ int maxwarns; static int warns_vgs = 0, warns_vgd = 0, warns_vds = 0, warns_id = 0, warns_idr = 0, warns_pd = 0, warns_te = 0; double id; /* current VDMOS current */ double idr; /* current reverse diode current */ double pd; /* current VDMOS power dissipation */ double pd_max; /* maximum VDMOS power */ double te; /* current VDMOS temperature */ if (!ckt) { warns_vgs = 0; warns_vgd = 0; warns_vds = 0; warns_id = 0; warns_idr = 0; warns_pd = 0; warns_te = 0; return OK; } maxwarns = ckt->CKTsoaMaxWarns; for (; model; model = VDMOSnextModel(model)) { for (here = VDMOSinstances(model); here; here = VDMOSnextInstance(here)) { vgs = ckt->CKTrhsOld [here->VDMOSgNode] - ckt->CKTrhsOld [here->VDMOSsNode]; vgd = ckt->CKTrhsOld [here->VDMOSgNode] - ckt->CKTrhsOld [here->VDMOSdNode]; vds = ckt->CKTrhsOld [here->VDMOSdNode] - ckt->CKTrhsOld [here->VDMOSsNode]; if (!model->VDMOSvgsrMaxGiven) { if (fabs(vgs) > model->VDMOSvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->VDMOSvgsMax); warns_vgs++; } } else { if (model->VDMOStype > 0) { if (vgs > model->VDMOSvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->VDMOSvgsMax); warns_vgs++; } if (-1*vgs > model->VDMOSvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->VDMOSvgsrMax); warns_vgs++; } } else { if (vgs > model->VDMOSvgsrMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgsr_max=%g\n", vgs, model->VDMOSvgsrMax); warns_vgs++; } if (-1*vgs > model->VDMOSvgsMax) if (warns_vgs < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgs=%g has exceeded Vgs_max=%g\n", vgs, model->VDMOSvgsMax); warns_vgs++; } } } if (!model->VDMOSvgdrMaxGiven) { if (fabs(vgd) > model->VDMOSvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->VDMOSvgdMax); warns_vgd++; } } else { if (model->VDMOStype > 0) { if (vgd > model->VDMOSvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->VDMOSvgdMax); warns_vgd++; } if (-1*vgd > model->VDMOSvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->VDMOSvgdrMax); warns_vgd++; } } else { if (vgd > model->VDMOSvgdrMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgdr_max=%g\n", vgd, model->VDMOSvgdrMax); warns_vgd++; } if (-1*vgd > model->VDMOSvgdMax) if (warns_vgd < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vgd=%g has exceeded Vgd_max=%g\n", vgd, model->VDMOSvgdMax); warns_vgd++; } } } if (fabs(vds) > model->VDMOSvdsMax) if (warns_vds < maxwarns) { soa_printf(ckt, (GENinstance*) here, "Vds=%g has exceeded Vds_max=%g\n", vds, model->VDMOSvdsMax); warns_vds++; } /* max. drain current */ id = fabs(here->VDMOScd); if (model->VDMOSid_maxGiven && id > fabs(model->VDMOSid_max)) if (warns_id < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Id=%.4g A at Vd=%.4g V has exceeded Id_max=%.4g A\n", id, vds, model->VDMOSid_max); warns_id++; } /* max. reverse current */ idr = fabs(*(ckt->CKTstate0 + here->VDIOcurrent) * -1. + here->VDMOScd); if (model->VDMOSidr_maxGiven && idr > fabs(model->VDMOSidr_max)) if (warns_idr < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Idr=%.4g A at Vd=%.4g V has exceeded Idr_max=%.4g A\n", fabs(idr), vds, model->VDMOSidr_max); warns_idr++; } pd = fabs((id + idr) * vds); pd += fabs(*(ckt->CKTstate0 + here->VDMOScqgd) * (*(ckt->CKTrhsOld + here->VDMOSgNode) - *(ckt->CKTrhsOld + here->VDMOSdNode))); pd += fabs(*(ckt->CKTstate0 + here->VDMOScqgs) * (*(ckt->CKTrhsOld + here->VDMOSgNode) - *(ckt->CKTrhsOld + here->VDMOSsNode))); /* Calculate max power including derating: up to tnom the derating is zero, at maximum temp allowed the derating is 100%. Device temperature by self-heating or given externally. */ if (here->VDMOSthermal && model->VDMOSderatingGiven && model->VDMOSpd_maxGiven && model->VDMOSte_maxGiven && model->VDMOStnomGiven) { te = ckt->CKTrhsOld[here->VDMOStcaseNode]; if (te < model->VDMOStnom - CONSTCtoK) pd_max = model->VDMOSpd_max; else { pd_max = model->VDMOSpd_max - (te - model->VDMOStnom + CONSTCtoK) * model->VDMOSderating; pd_max = (pd_max > 0) ? pd_max : 0.; } if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V and Te=%.4g C has exceeded Pd_max=%.4g W\n", pd, vds, te, pd_max); warns_pd++; } if (te > model->VDMOSte_max) if (warns_te < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Te=%.4g C at Vd=%.4g V has exceeded te_max=%.4g C\n", te, vds, model->VDMOSte_max); warns_te++; } } /* Derating of max allowed power dissipation, without self-heating, external temp given by .temp (global) or instance parameter 'temp', therefore no temperature limits are calculated */ else if (!here->VDMOSthermal && model->VDMOSderatingGiven && model->VDMOSpd_maxGiven && model->VDMOStnomGiven) { if (here->VDMOStemp < model->VDMOStnom) pd_max = model->VDMOSpd_max; else { pd_max = model->VDMOSpd_max - (here->VDMOStemp - model->VDMOStnom) * model->VDMOSderating; pd_max = (pd_max > 0) ? pd_max : 0.; } if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V and Te=%.4g C has exceeded Pd_max=%.4g W\n", pd, vds, here->VDMOStemp - CONSTCtoK, pd_max); warns_pd++; } } /* No derating, max power is fixed by model parameter pd_max */ else { pd_max = model->VDMOSpd_max; if (pd > pd_max) if (warns_pd < maxwarns) { soa_printf(ckt, (GENinstance*)here, "Pd=%.4g W at Vd=%.4g V has exceeded Pd_max=%.4g W\n", pd, vds, pd_max); warns_pd++; } } } } return OK; } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosdefs.h0000644000175000017500000004377014163340332022462 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, 2020 Dietmar Warning **********/ #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 drain 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 VDMOStempNode; /* number of the temperature node of the mosfet */ int VDMOStcaseNode; /* number of the 2nd temperature 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 VDMOStNodePrime; /* number of the internal temp node between voltage source and Rthca */ int VDIOposPrimeNode; /* number of the internal node of the body diode */ int VDMOSvcktTbranch; /* equation number of branch equation added for cktTemp source */ double VDMOSm; /* parallel device multiplier */ double VDMOSsourceConductance; /*conductance of source(or 0):set in setup*/ double VDMOSdrainConductance; /*conductance of drain(or 0):set in setup*/ double VDMOSdrainResistance; /*resistance of drain(or 0): set in temp*/ double VDMOSqsResistance; /*resistance of drain: set in temp*/ 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*/ int VDMOSthermal; /* flag indicate self heating on */ double VDMOStTransconductance; /* temperature corrected transconductance*/ double VDMOStPhi; /* temperature corrected Phi */ double VDMOStVth; /* temperature corrected Vth */ double VDMOStksubthres; /* temperature weak inversion slope */ double VDMOSicVDS; /* initial condition D-S voltage */ double VDMOSicVGS; /* initial condition G-S voltage */ double VDMOSvon; double VDMOSvdsat; double VDMOScd; double VDMOSgm; double VDMOSgds; double VDIOcap; double VDIOtSatCur; /* temperature corrected saturation Cur. density */ double VDIOtSatCur_dT; double VDIOinitCond; double VDIOtVcrit; double VDIOconductance; double VDIOtConductance; double VDIOtConductance_dT; double VDIOtBrkdwnV; double VDIOtJctCap; double VDIOtDepCap; /* temperature adjusted transition point in */ /* the curve matching Fc * Vj */ double VDIOtJctPot; /* temperature corrected junction potential */ double VDIOtGradingCoeff; double VDIOtTransitTime; double VDIOtF1; double VDIOtF2; double VDIOtF3; double VDMOSTempSH; /* for portability of SH temp to noise analysis */ double VDMOSgmT; double VDMOSgtempg; double VDMOSgtempd; double VDMOSgtempT; double VDMOScgT; double VDMOScdT; double VDMOScth; /* current alias power */ /* * 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 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) */ /* body 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) */ /* self heating */ double *VDMOSTemptempPtr; /* Transistor thermal contribution */ double *VDMOSTempdpPtr; double *VDMOSTempspPtr; double *VDMOSTempgpPtr; double *VDMOSGPtempPtr; double *VDMOSDPtempPtr; double *VDMOSSPtempPtr; double *VDIOTempposPrimePtr; /* Diode thermal contribution */ double *VDMOSTempdPtr; double *VDIOPosPrimetempPtr; double *VDMOSDtempPtr; double *VDMOStempSPtr; double *VDMOSSTempPtr; double *VDMOSTcasetcasePtr; /* for Rthjc */ double *VDMOSTcasetempPtr; double *VDMOSTemptcasePtr; double *VDMOSTptpPtr; /* for Rthca */ double *VDMOSTptcasePtr; double *VDMOSTcasetpPtr; double *VDMOSCktTcktTPtr; /* for VcktTemp */ double *VDMOSCktTtpPtr; double *VDMOSTpcktTPtr; } VDMOSinstance ; #define VDMOSvgs VDMOSstates+ 0 /* gate-source voltage */ #define VDMOSvds VDMOSstates+ 1 /* drain-source voltage */ #define VDMOSdelTemp VDMOSstates+ 2 /* thermal voltage over rth0 */ #define VDMOScapgs VDMOSstates+3 /* gate-source capacitor value */ #define VDMOSqgs VDMOSstates+ 4 /* gate-source capacitor charge */ #define VDMOScqgs VDMOSstates+ 5 /* gate-source capacitor current */ #define VDMOScapgd VDMOSstates+ 6 /* gate-drain capacitor value */ #define VDMOSqgd VDMOSstates+ 7 /* gate-drain capacitor charge */ #define VDMOScqgd VDMOSstates+ 8 /* gate-drain capacitor current */ #define VDIOvoltage VDMOSstates+ 9 #define VDIOcurrent VDMOSstates+ 10 #define VDIOconduct VDMOSstates+ 11 #define VDIOcapCharge VDMOSstates+ 12 #define VDIOcapCurrent VDMOSstates+ 13 #define VDMOScapth VDMOSstates+ 14 /* thermal capacitor value */ #define VDMOSqth VDMOSstates+ 15 /* thermal capacitor charge */ #define VDMOScqth VDMOSstates+ 16 /* thermal capacitor current */ #define VDIOdIdio_dT VDMOSstates+ 17 #define VDMOSnumStates 18 /* per model data */ /* NOTE: parameters marked 'input - use xxxx' are parameters 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 VDMOSvth0; /* input - use tVth */ double VDMOSphi; /* input - use tPhi */ double VDMOSlambda; double VDMOStheta; double VDMOSfNcoef; double VDMOSfNexp; double VDMOScgdmin; double VDMOScgdmax; double VDMOSa; double VDMOScgs; double VDMOSsubshift; double VDMOSksubthres; double VDMOSmtr; double VDMOSrds; /* body diode */ double VDIOjunctionCap; /* input - use tCj */ double VDIOjunctionPot; /* input - use tJctPot */ double VDIOdepletionCapCoeff; double VDIOjctSatCur; /* input - use tSatCur */ double VDIObv; double VDIOibv; double VDIObrkdEmissionCoeff; double VDIOresistance; double VDIOn; double VDIOtransitTime; double VDIOtranTimeTemp1; double VDIOtranTimeTemp2; double VDIOeg; double VDIOxti; double VDIOgradCoeff; double VDIOgradCoeffTemp1; double VDIOgradCoeffTemp2; double VDIOtrb1; double VDIOtrb2; double VDMOStcvth; double VDMOSrthjc; double VDMOSrthca; double VDMOScthj; double VDMOSmu; double VDMOStexp0; double VDMOStexp1; double VDMOStrd1; double VDMOStrd2; double VDMOStrg1; double VDMOStrg2; double VDMOStrs1; double VDMOStrs2; double VDMOStksubthres1; double VDMOStksubthres2; double VDMOSvgsMax; double VDMOSvgdMax; double VDMOSvdsMax; double VDMOSvgsrMax; double VDMOSvgdrMax; double VDMOSid_max; double VDMOSidr_max; double VDMOSpd_max; double VDMOSrth_ext; double VDMOSte_max; double VDMOSderating; unsigned VDMOStypeGiven :1; unsigned VDMOSdrainResistanceGiven :1; unsigned VDMOSsourceResistanceGiven :1; unsigned VDMOSgateResistanceGiven :1; unsigned VDMOSqsResistanceGiven :1; unsigned VDMOSqsVoltageGiven :1; unsigned VDMOSqsGiven :1; unsigned VDMOStransconductanceGiven :1; unsigned VDMOSvth0Given :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 VDMOSsubshiftGiven :1; unsigned VDMOSksubthresGiven :1; unsigned VDMOSmtrGiven :1; unsigned VDMOSrdsGiven :1; unsigned VDIOjctSatCurGiven :1; unsigned VDIOgradCoeffGiven :1; unsigned VDIOdepletionCapCoeffGiven :1; unsigned VDIObvGiven :1; unsigned VDIOibvGiven :1; unsigned VDIOjunctionCapGiven :1; unsigned VDIOjunctionPotGiven :1; unsigned VDIObrkdEmissionCoeffGiven :1; unsigned VDIOresistanceGiven :1; unsigned VDIOnGiven :1; unsigned VDIOtransitTimeGiven :1; unsigned VDIOegGiven :1; unsigned VDIOxtiGiven :1; unsigned VDIOtrb1Given :1; unsigned VDIOtrb2Given :1; unsigned VDMOStcvthGiven :1; unsigned VDMOSrthjcGiven :1; unsigned VDMOSrthcaGiven :1; unsigned VDMOScthjGiven :1; unsigned VDMOSmuGiven :1; unsigned VDMOStexp0Given :1; unsigned VDMOStexp1Given :1; unsigned VDMOStrd1Given :1; unsigned VDMOStrd2Given :1; unsigned VDMOStrg1Given :1; unsigned VDMOStrg2Given :1; unsigned VDMOStrs1Given :1; unsigned VDMOStrs2Given :1; unsigned VDMOStksubthres1Given :1; unsigned VDMOStksubthres2Given :1; unsigned VDMOSvgsMaxGiven :1; unsigned VDMOSvgdMaxGiven :1; unsigned VDMOSvdsMaxGiven :1; unsigned VDMOSvgsrMaxGiven :1; unsigned VDMOSvgdrMaxGiven :1; unsigned VDMOSrth_extGiven :1; unsigned VDMOSpd_maxGiven :1; unsigned VDMOSte_maxGiven :1; unsigned VDMOSid_maxGiven :1; unsigned VDMOSidr_maxGiven :1; unsigned VDMOSderatingGiven :1; } VDMOSmodel; #ifndef NMOS #define NMOS 1 #define PMOS -1 #endif /*NMOS*/ /* device parameters */ enum { VDMOS_OFF = 1, VDMOS_IC, VDMOS_IC_VDS, VDMOS_IC_VGS, VDMOS_CG, VDMOS_CS, VDMOS_POWER, VDMOS_TEMP, VDMOS_M, VDMOS_DTEMP, VDMOS_THERMAL, }; /* model parameters */ enum { VDMOS_MOD_VTH = 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_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_MTRIODE, VDMOS_MOD_SUBSHIFT, VDMOS_MOD_KSUBTHRES, VDMOS_MOD_RDS, VDIO_MOD_IS, VDIO_MOD_VJ, VDIO_MOD_CJ, VDIO_MOD_MJ, VDIO_MOD_FC, VDIO_MOD_RB, VDIO_MOD_BV, VDIO_MOD_IBV, VDIO_MOD_NBV, VDIO_MOD_N, VDIO_MOD_TT, VDIO_MOD_EG, VDIO_MOD_XTI, VDIO_MOD_TRB1, VDIO_MOD_TRB2, VDMOS_MOD_TCVTH, VDMOS_MOD_RTHJC, VDMOS_MOD_RTHCA, VDMOS_MOD_CTHJ, VDMOS_MOD_MU, VDMOS_MOD_TEXP0, VDMOS_MOD_TEXP1, VDMOS_MOD_TRD1, VDMOS_MOD_TRD2, VDMOS_MOD_TRG1, VDMOS_MOD_TRG2, VDMOS_MOD_TRS1, VDMOS_MOD_TRS2, VDMOS_MOD_TKSUBTHRES1, VDMOS_MOD_TKSUBTHRES2, VDMOS_MOD_VGS_MAX, VDMOS_MOD_VGD_MAX, VDMOS_MOD_VDS_MAX, VDMOS_MOD_VGSR_MAX, VDMOS_MOD_VGDR_MAX, VDMOS_MOD_PD_MAX, VDMOS_MOD_ID_MAX, VDMOS_MOD_IDR_MAX, VDMOS_MOD_TE_MAX, VDMOS_MOD_RTH_EXT, VDMOS_MOD_DERATING, }; /* device questions */ enum { VDMOS_CAPGS = 201, VDMOS_CAPGD, VDMOS_CAPDS, VDMOS_DNODE, VDMOS_GNODE, VDMOS_SNODE, VDMOS_TNODE, VDMOS_TCASE, VDMOS_DNODEPRIME, VDMOS_SNODEPRIME, VDMOS_SOURCECONDUCT, VDMOS_DRAINCONDUCT, VDMOS_VON, VDMOS_CD, VDMOS_GM, VDMOS_GDS, VDMOS_VGS, VDMOS_VDS, VDMOS_QGS, VDMOS_CQGS, VDMOS_QGD, VDMOS_CQGD, VDMOS_CDIO, VDMOS_SOURCERESIST, VDMOS_DRAINRESIST, }; /* model questions */ void VDMOStempUpdate(VDMOSmodel *, VDMOSinstance *, double , CKTcircuit *); #include "vdmosext.h" #endif /*VDMOS*/ tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosic.c0000644000175000017500000000215414163340332022116 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); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosacld.c0000644000175000017500000001363614163340332022435 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, 2020 Dietmar Warning **********/ /* */ #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, xcgT; double xgd, xcdT; double capgs, cgT; double capgd, cdT; double cTt, gTtt, gTtg, gTtdp, gTtsp; double GmT; double xcsT, xcTt; int selfheat; for( ; model != NULL; model = VDMOSnextModel(model)) { for(here = VDMOSinstances(model); here!= NULL; here = VDMOSnextInstance(here)) { selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven); if (here->VDMOSmode < 0) { xnrm=0; xrev=1; } else { xnrm=1; xrev=0; } if (here->VDMOSmode >= 0) { GmT = model->VDMOStype * here->VDMOSgmT; cgT = model->VDMOStype * here->VDMOScgT; cdT = model->VDMOStype * here->VDMOScdT; cTt = model->VDMOScthj; gTtg = here->VDMOSgtempg; gTtdp = here->VDMOSgtempd; gTtt = here->VDMOSgtempT; gTtsp = - (gTtg + gTtdp); } else { GmT = -model->VDMOStype * here->VDMOSgmT; cgT = -model->VDMOStype * here->VDMOScgT; cdT = -model->VDMOStype * here->VDMOScdT; cTt = -model->VDMOScthj; gTtg = -here->VDMOSgtempg; gTtdp = -here->VDMOSgtempd; gTtt = -here->VDMOSgtempT; gTtsp = gTtg + gTtdp; } /* * 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; xcgT = cgT * ckt->CKTomega; xcdT = cdT * ckt->CKTomega; xcsT = -(cgT + cdT) * ckt->CKTomega; xcTt = cTt * ckt->CKTomega; /* body 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); *(here->VDMOSGgpPtr) -= here->VDMOSgateConductance; *(here->VDMOSGPgPtr) -= here->VDMOSgateConductance; /* body 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; if (selfheat) { *(here->VDMOSDPtempPtr) += GmT; *(here->VDMOSSPtempPtr) += -GmT; *(here->VDMOSTemptempPtr) += gTtt + 1/model->VDMOSrthjc; *(here->VDMOSTempgpPtr) += gTtg; *(here->VDMOSTempdpPtr) += gTtdp; *(here->VDMOSTempspPtr) += gTtsp; *(here->VDMOSTemptcasePtr) += -1/model->VDMOSrthjc; *(here->VDMOSTcasetempPtr) += -1/model->VDMOSrthjc; *(here->VDMOSTcasetcasePtr) += 1/model->VDMOSrthjc + 1/model->VDMOSrthca; *(here->VDMOSTptpPtr) += 1/model->VDMOSrthca; *(here->VDMOSTptcasePtr) += -1/model->VDMOSrthca; *(here->VDMOSTcasetpPtr) += -1/model->VDMOSrthca; *(here->VDMOSCktTtpPtr) += 1.0; *(here->VDMOSTpcktTPtr) += 1.0; *(here->VDMOSTemptempPtr + 1) += xcTt; *(here->VDMOSDPtempPtr + 1) += xcdT; *(here->VDMOSSPtempPtr + 1) += xcsT; *(here->VDMOSGPtempPtr + 1) += xcgT; } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosmask.c0000644000175000017500000001600314163340332022454 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_VTH: value->rValue = model->VDMOSvth0; 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_TNOM: value->rValue = model->VDMOStnom-CONSTCtoK; return(OK); case VDMOS_MOD_AF: value->rValue = model->VDMOSfNcoef; return(OK); case VDMOS_MOD_KF: value->rValue = model->VDMOSfNexp; 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_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 VDIO_MOD_RB: value->rValue = model->VDIOresistance; return(OK); case VDIO_MOD_IS: value->rValue = model->VDIOjctSatCur; return(OK); case VDIO_MOD_N: value->rValue = model->VDIOn; return(OK); case VDIO_MOD_VJ: value->rValue = model->VDIOjunctionPot; return(OK); case VDIO_MOD_CJ: value->rValue = model->VDIOjunctionCap; return(OK); case VDIO_MOD_MJ: value->rValue = model->VDIOgradCoeff; return(OK); case VDIO_MOD_FC: value->rValue = model->VDIOdepletionCapCoeff; return(OK); case VDIO_MOD_BV: value->rValue = model->VDIObv; return(OK); case VDIO_MOD_IBV: value->rValue = model->VDIOibv; return(OK); case VDIO_MOD_NBV: value->rValue = model->VDIObrkdEmissionCoeff; return(OK); case VDMOS_MOD_RDS: value->rValue = model->VDMOSrds; return(OK); case VDIO_MOD_TT: value->rValue = model->VDIOtransitTime; return(OK); case VDIO_MOD_EG: value->rValue = model->VDIOeg; return(OK); case VDIO_MOD_XTI: value->rValue = model->VDIOxti; return(OK); case VDMOS_MOD_TCVTH: value->rValue = model->VDMOStcvth; return(OK); case VDMOS_MOD_RTHJC: value->rValue = model->VDMOSrthjc; return(OK); case VDMOS_MOD_RTHCA: value->rValue = model->VDMOSrthca; return(OK); case VDMOS_MOD_CTHJ: value->rValue = model->VDMOScthj; return(OK); case VDMOS_MOD_MU: value->rValue = model->VDMOSmu; return(OK); case VDMOS_MOD_TEXP0: value->rValue = model->VDMOStexp0; return(OK); case VDMOS_MOD_TEXP1: value->rValue = model->VDMOStexp1; return(OK); case VDMOS_MOD_TRD1: value->rValue = model->VDMOStrd1; return(OK); case VDMOS_MOD_TRD2: value->rValue = model->VDMOStrd2; return(OK); case VDMOS_MOD_TRG1: value->rValue = model->VDMOStrg1; return(OK); case VDMOS_MOD_TRG2: value->rValue = model->VDMOStrg2; return(OK); case VDMOS_MOD_TRS1: value->rValue = model->VDMOStrs1; return(OK); case VDMOS_MOD_TRS2: value->rValue = model->VDMOStrs2; return(OK); case VDIO_MOD_TRB1: value->rValue = model->VDIOtrb1; return(OK); case VDIO_MOD_TRB2: value->rValue = model->VDIOtrb2; return(OK); case VDMOS_MOD_TKSUBTHRES1: value->rValue = model->VDMOStksubthres1; return(OK); case VDMOS_MOD_TKSUBTHRES2: value->rValue = model->VDMOStksubthres2; return(OK); /* SOA */ case VDMOS_MOD_VGS_MAX: value->rValue = model->VDMOSvgsMax; return(OK); case VDMOS_MOD_VGD_MAX: value->rValue = model->VDMOSvgdMax; return(OK); case VDMOS_MOD_VDS_MAX: value->rValue = model->VDMOSvdsMax; return(OK); case VDMOS_MOD_VGSR_MAX: value->rValue = model->VDMOSvgsrMax; return(OK); case VDMOS_MOD_VGDR_MAX: value->rValue = model->VDMOSvgdrMax; return(OK); case VDMOS_MOD_PD_MAX: value->rValue = model->VDMOSpd_max; return(OK); case VDMOS_MOD_ID_MAX: value->rValue = model->VDMOSid_max; return(OK); case VDMOS_MOD_IDR_MAX: value->rValue = model->VDMOSidr_max; return(OK); case VDMOS_MOD_TE_MAX: value->rValue = model->VDMOSte_max; return(OK); case VDMOS_MOD_RTH_EXT: value->rValue = model->VDMOSrth_ext; return(OK); case VDMOS_MOD_DERATING: value->rValue = model->VDMOSderating; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosmpar.c0000644000175000017500000002345414163340332022470 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1985 Thomas L. Quarles VDMOS: 2018 Holger Vogt, 2020 Dietmar Warning **********/ #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_VTH: model->VDMOSvth0 = value->rValue; model->VDMOSvth0Given = 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; break; case VDMOS_MOD_VQ: model->VDMOSqsVoltage = value->rValue; model->VDMOSqsVoltageGiven = TRUE; break; case VDIO_MOD_RB: model->VDIOresistance = value->rValue; model->VDIOresistanceGiven = TRUE; break; case VDIO_MOD_IS: model->VDIOjctSatCur = value->rValue; model->VDIOjctSatCurGiven = TRUE; break; case VDIO_MOD_VJ: model->VDIOjunctionPot = value->rValue; model->VDIOjunctionPotGiven = TRUE; break; case VDIO_MOD_CJ: model->VDIOjunctionCap = value->rValue; model->VDIOjunctionCapGiven = TRUE; break; case VDIO_MOD_MJ: model->VDIOgradCoeff = value->rValue; model->VDIOgradCoeffGiven = TRUE; model->VDIOgradCoeffTemp1 = 0; model->VDIOgradCoeffTemp2 = 0; break; case VDIO_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_SUBSHIFT: model->VDMOSsubshift = value->rValue; model->VDMOSsubshiftGiven = TRUE; break; case VDMOS_MOD_KSUBTHRES: model->VDMOSksubthres = value->rValue; model->VDMOSksubthresGiven = TRUE; break; case VDIO_MOD_BV: model->VDIObv = value->rValue; model->VDIObvGiven = TRUE; break; case VDIO_MOD_IBV: model->VDIOibv = value->rValue; model->VDIOibvGiven = TRUE; break; case VDIO_MOD_NBV: model->VDIObrkdEmissionCoeff = value->rValue; model->VDIObrkdEmissionCoeffGiven = TRUE; break; case VDMOS_MOD_RDS: model->VDMOSrds = value->rValue; model->VDMOSrdsGiven = TRUE; break; case VDIO_MOD_N: model->VDIOn = value->rValue; model->VDIOnGiven = TRUE; break; case VDIO_MOD_TT: model->VDIOtransitTime = value->rValue; model->VDIOtransitTimeGiven = TRUE; model->VDIOtranTimeTemp1 = 0; model->VDIOtranTimeTemp2 = 0; break; case VDIO_MOD_EG: model->VDIOeg = value->rValue; model->VDIOegGiven = TRUE; break; case VDIO_MOD_XTI: model->VDIOxti = value->rValue; model->VDIOxtiGiven = TRUE; break; case VDMOS_MOD_TCVTH: model->VDMOStcvth = value->rValue; model->VDMOStcvthGiven = TRUE; break; case VDMOS_MOD_RTHJC: model->VDMOSrthjc = value->rValue; model->VDMOSrthjcGiven = TRUE; break; case VDMOS_MOD_RTHCA: model->VDMOSrthca = value->rValue; model->VDMOSrthcaGiven = TRUE; break; case VDMOS_MOD_CTHJ: model->VDMOScthj = value->rValue; model->VDMOScthjGiven = TRUE; break; case VDMOS_MOD_MU: model->VDMOSmu = value->rValue; model->VDMOSmuGiven = TRUE; break; case VDMOS_MOD_TEXP0: model->VDMOStexp0 = value->rValue; model->VDMOStexp0Given = TRUE; break; case VDMOS_MOD_TEXP1: model->VDMOStexp1 = value->rValue; model->VDMOStexp1Given = TRUE; break; case VDMOS_MOD_TRD1: model->VDMOStrd1 = value->rValue; model->VDMOStrd1Given = TRUE; break; case VDMOS_MOD_TRD2: model->VDMOStrd2 = value->rValue; model->VDMOStrd2Given = TRUE; break; case VDMOS_MOD_TRG1: model->VDMOStrg1 = value->rValue; model->VDMOStrg1Given = TRUE; break; case VDMOS_MOD_TRG2: model->VDMOStrg2 = value->rValue; model->VDMOStrg2Given = TRUE; break; case VDMOS_MOD_TRS1: model->VDMOStrs1 = value->rValue; model->VDMOStrs1Given = TRUE; break; case VDMOS_MOD_TRS2: model->VDMOStrs2 = value->rValue; model->VDMOStrs2Given = TRUE; break; case VDIO_MOD_TRB1: model->VDIOtrb1 = value->rValue; model->VDIOtrb1Given = TRUE; break; case VDIO_MOD_TRB2: model->VDIOtrb2 = value->rValue; model->VDIOtrb2Given = TRUE; break; case VDMOS_MOD_TKSUBTHRES1: model->VDMOStksubthres1 = value->rValue; model->VDMOStksubthres1Given = TRUE; break; case VDMOS_MOD_TKSUBTHRES2: model->VDMOStksubthres2 = value->rValue; model->VDMOStksubthres2Given = TRUE; break; case VDMOS_MOD_VGS_MAX: model->VDMOSvgsMax = value->rValue; model->VDMOSvgsMaxGiven = TRUE; break; case VDMOS_MOD_VGD_MAX: model->VDMOSvgdMax = value->rValue; model->VDMOSvgdMaxGiven = TRUE; break; case VDMOS_MOD_VDS_MAX: model->VDMOSvdsMax = value->rValue; model->VDMOSvdsMaxGiven = TRUE; break; case VDMOS_MOD_VGSR_MAX: model->VDMOSvgsrMax = value->rValue; model->VDMOSvgsrMaxGiven = TRUE; break; case VDMOS_MOD_VGDR_MAX: model->VDMOSvgdrMax = value->rValue; model->VDMOSvgdrMaxGiven = TRUE; break; case VDMOS_MOD_PD_MAX: model->VDMOSpd_max = value->rValue; model->VDMOSpd_maxGiven = TRUE; break; case VDMOS_MOD_ID_MAX: model->VDMOSid_max = value->rValue; model->VDMOSid_maxGiven = TRUE; break; case VDMOS_MOD_IDR_MAX: model->VDMOSidr_max = value->rValue; model->VDMOSidr_maxGiven = TRUE; break; case VDMOS_MOD_TE_MAX: model->VDMOSte_max = value->rValue; model->VDMOSte_maxGiven = TRUE; break; case VDMOS_MOD_RTH_EXT: model->VDMOSrth_ext = value->rValue; model->VDMOSrth_extGiven = TRUE; break; case VDMOS_MOD_DERATING: model->VDMOSderating = value->rValue; model->VDMOSderatingGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosconv.c0000644000175000017500000000675514163340332022503 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; double delvd,vd,cd; int selfheat; double delTemp, deldelTemp; 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; selfheat = (here->VDMOSthermal) && (model->VDMOSrthjcGiven); if (selfheat) { delTemp = *(ckt->CKTrhs + here->VDMOStempNode); deldelTemp = delTemp - *(ckt->CKTstate0 + here->VDMOSdelTemp); } else { deldelTemp = 0.0; } /* these are needed for convergence testing */ if (here->VDMOSmode >= 0) { cdhat= here->VDMOScd - here->VDMOSgm * delvgs + here->VDMOSgds * delvds + here->VDMOSgmT * deldelTemp; } else { cdhat= here->VDMOScd - here->VDMOSgm * delvgd + here->VDMOSgds * delvds + here->VDMOSgmT * deldelTemp; } /* * 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 */ } /* * initialization */ vd = *(ckt->CKTrhsOld+here->VDIOposPrimeNode)- *(ckt->CKTrhsOld + here->VDMOSdNode); delvd=vd- *(ckt->CKTstate0 + here->VDIOvoltage); cdhat= *(ckt->CKTstate0 + here->VDIOcurrent) + *(ckt->CKTstate0 + here->VDIOconduct) * delvd + *(ckt->CKTstate0 + here->VDIOdIdio_dT) * deldelTemp; cd= *(ckt->CKTstate0 + here->VDIOcurrent); /* * 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); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmospzld.c0000644000175000017500000000772414163340332022504 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; /* body diode */ double gspr, geq, xceq; gspr = here->VDIOtConductance; geq = *(ckt->CKTstate0 + here->VDIOconduct); xceq = *(ckt->CKTstate0 + here->VDIOcapCurrent); /* * 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->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); *(here->VDMOSGgpPtr) -= here->VDMOSgateConductance; *(here->VDMOSGPgPtr) -= here->VDMOSgateConductance; /* body diode */ *(here->VDMOSSsPtr) += gspr; *(here->VDMOSDdPtr) += geq + xceq * s->real; *(here->VDMOSDdPtr +1 ) += xceq * s->imag; *(here->VDIORPrpPtr) += geq + gspr + xceq * s->real; *(here->VDIORPrpPtr +1) += xceq * s->imag; *(here->VDIOSrpPtr) -= gspr; *(here->VDIODrpPtr) -= geq + xceq * s->real; *(here->VDIODrpPtr +1) -= xceq * s->imag; *(here->VDIORPsPtr) -= gspr; *(here->VDIORPdPtr) -= geq + xceq * s->real; *(here->VDIORPdPtr +1 ) -= xceq * s->imag; } } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosdset.c0000644000175000017500000002145014163340332022462 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 OxideCap; double gm; double gds; double vgst; double vds; double vdsat; double vgd; double vgs; 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)) { Beta = here->VDMOStTransconductance; OxideCap = model->VDMOSoxideCapFactor * here->VDMOSm; 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 and channel for * mosfets * */ /* the following variables are local to this code block until * it is obvious that they can be made global */ { double von = here->VDMOStVth * model->VDMOStype; vgst = (here->VDMOSmode == 1 ? vgs : vgd) - von; vdsat = MAX(vgst, 0); 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; double 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 */ gm = betap*vgst*dvgstdvgs + 0.5*dbetapdvgs*vgst*vgst; gds = .5*dbetapdvds*vgst*vgst; gm2 = betap; gds2 = 0; gmds = Beta*lambda*vgst; gm3 = 0; gds3 = 0; gm2ds = Beta*lambda; gmds2 = 0; } else { /* linear region */ gm = betap*vdss*dvgstdvgs + vdss*dbetapdvgs*(vgst-.5*vdss); gds = vdss*dbetapdvds*(vgst-.5*vdss) + betap*mtr*(vgst-.5*vdss) - .5*vdss*betap*mtr; gm2 = 0; gds2 = 2*Beta * lambda*(vgst - vds*here->VDMOSmode) - betap; gmds = Beta * lambda * vds * here->VDMOSmode + betap; gm3=0; gds3 = -Beta*lambda*3.; gm2ds=0; gmds2 = 2*lambda*Beta; } /* * finished */ } /* code block */ /* * COMPUTE EQUIVALENT DRAIN CURRENT SOURCE */ /* * 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 = OxideCap; /*FIXME: using a guess for the oxide thickness of 1e-07 in vdmostemp.c */ 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); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosinit.h0000644000175000017500000000040214163340332022465 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 tmp_ns50wwy/src/spicelib/devices/vdmos/vdmos.c0000644000175000017500000002233414163340332021604 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Author: 1987 Thomas L. Quarles Modified: 2000 AlansFixes VDMOS: 2018 Holger Vogt, 2020 Dietmar Warning **********/ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "ngspice/ifsim.h" #include "vdmosdefs.h" #include "ngspice/suffix.h" IFparm VDMOSpTable[] = { /* parameters */ IOPU("m", VDMOS_M, IF_REAL, "Multiplier"), 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"), IOP("thermal", VDMOS_THERMAL, IF_FLAG, "Thermal model switch on/off"), 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"), OP( "idio", VDMOS_CDIO, IF_REAL, "Body diode current"), 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( "tempnode", VDMOS_TNODE, IF_INTEGER, "Number of temperature node"), OPU( "tcasenode", VDMOS_TCASE, IF_INTEGER, "Number of 2nd temperature 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, "Device on state 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, "Instantaneous power"), }; IFparm VDMOSmPTable[] = { /* model parameters */ /* basic device */ OP("type", VDMOS_MOD_TYPE, IF_STRING, "N-channel or P-channel MOS"), IOP("vto", VDMOS_MOD_VTH, IF_REAL, "Threshold voltage"), IOPR("vth0", VDMOS_MOD_VTH, 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"), /* temperature dependency */ IOP( "tcvth", VDMOS_MOD_TCVTH, IF_REAL, "Linear Vth0 temperature coefficient"), IOPR("vtotc", VDMOS_MOD_TCVTH, IF_REAL, "Linear Vth0 temperature coefficient"), IOP( "mu", VDMOS_MOD_MU, IF_REAL, "Exponent of gain temperature dependency"), IOPR("bex", VDMOS_MOD_MU, IF_REAL, "Exponent of gain temperature dependency"), IOP( "texp0", VDMOS_MOD_TEXP0, IF_REAL, "Drain resistance rd0 temperature exponent"), IOP( "texp1", VDMOS_MOD_TEXP1, IF_REAL, "Drain resistance rd1 temperature exponent"), IOP( "trd1", VDMOS_MOD_TRD1, IF_REAL, "Drain resistance linear temperature coefficient"), IOP( "trd2", VDMOS_MOD_TRD2, IF_REAL, "Drain resistance quadratic temperature coefficient"), IOP( "trg1", VDMOS_MOD_TRG1, IF_REAL, "Gate resistance linear temperature coefficient"), IOP( "trg2", VDMOS_MOD_TRG2, IF_REAL, "Gate resistance quadratic temperature coefficient"), IOP( "trs1", VDMOS_MOD_TRS1, IF_REAL, "Source resistance linear temperature coefficient"), IOP( "trs2", VDMOS_MOD_TRS2, IF_REAL, "Source resistance quadratic temperature coefficient"), IOP( "trb1", VDIO_MOD_TRB1, IF_REAL, "Body resistance linear temperature coefficient"), IOP( "trb2", VDIO_MOD_TRB2, IF_REAL, "Body resistance quadratic temperature coefficient"), /* weak inversion */ IOP("subshift", VDMOS_MOD_SUBSHIFT, IF_REAL, "Shift of weak inversion plot on the vgs axis"), IOP("ksubthres", VDMOS_MOD_KSUBTHRES, IF_REAL, "Slope of weak inversion log current versus vgs"), IOP("tksubthres1", VDMOS_MOD_TKSUBTHRES1, IF_REAL, "Linear temperature coefficient of ksubthres"), IOP("tksubthres2", VDMOS_MOD_TKSUBTHRES2, IF_REAL, "Quadratic temperature coefficient of ksubthres"), /* body diode */ IOP("bv", VDIO_MOD_BV, IF_REAL, "Vds breakdown voltage"), IOP("ibv", VDIO_MOD_IBV, IF_REAL, "Current at Vds=bv"), IOP("nbv", VDIO_MOD_NBV, IF_REAL, "Vds breakdown emission coefficient"), IOP("rds", VDMOS_MOD_RDS, IF_REAL, "Drain-source shunt resistance"), IOP("rb", VDIO_MOD_RB, IF_REAL, "Body diode ohmic resistance"), IOP("n", VDIO_MOD_N, IF_REAL, "Body diode emission coefficient"), IOP("tt", VDIO_MOD_TT, IF_REAL, "Body diode transit time"), IOP("eg", VDIO_MOD_EG, IF_REAL, "Body diode activation energy for temperature effect on Is"), IOP("xti", VDIO_MOD_XTI, IF_REAL, "Body diode saturation current temperature exponent"), IOP("is", VDIO_MOD_IS, IF_REAL, "Body diode saturation current"), IOP("vj", VDIO_MOD_VJ, IF_REAL, "Body diode junction potential"), /* body diode capacitance (e.g. source-drain capacitance) */ IOPA("cjo", VDIO_MOD_CJ, IF_REAL, "Zero-bias body diode junction capacitance"), IOP("m", VDIO_MOD_MJ, IF_REAL, "Body diode grading coefficient"), IOP("fc", VDIO_MOD_FC, IF_REAL, "Body diode coefficient for forward-bias depletion capacitance formula"), /* 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"), /* self heating */ IOP("rthjc", VDMOS_MOD_RTHJC, IF_REAL, "Self-heating thermal resistance, junction-to-case"), IOP("rthca", VDMOS_MOD_RTHCA, IF_REAL, "Self-heating thermal resistance, case-to-ambient"), IOP("cthj", VDMOS_MOD_CTHJ, IF_REAL, "Self-heating thermal capacitance"), /* soa check */ IOP("vgs_max", VDMOS_MOD_VGS_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgd_max", VDMOS_MOD_VGD_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("vds_max", VDMOS_MOD_VDS_MAX, IF_REAL, "maximum voltage D-S branch"), IOP("vgsr_max", VDMOS_MOD_VGSR_MAX, IF_REAL, "maximum voltage G-S branch"), IOP("vgdr_max", VDMOS_MOD_VGDR_MAX, IF_REAL, "maximum voltage G-D branch"), IOP("pd_max", VDMOS_MOD_PD_MAX, IF_REAL, "maximum device power dissipation"), IOP("id_max", VDMOS_MOD_ID_MAX, IF_REAL, "maximum drain/source current"), IOP("idr_max", VDMOS_MOD_IDR_MAX, IF_REAL, "maximum drain/source reverse current"), IOP("te_max", VDMOS_MOD_TE_MAX, IF_REAL, "maximum temperature"), IOP("rth_ext", VDMOS_MOD_RTH_EXT, IF_REAL, "thermal resistance case to ambient, incl. heat sink"), IOP("derating", VDMOS_MOD_DERATING, IF_REAL, "thermal derating for power"), }; char *VDMOSnames[] = { "Drain", "Gate", "Source", "Temp", "Tcase" }; int VDMOSnSize = NUMELEMS(VDMOSnames); int VDMOSpTSize = NUMELEMS(VDMOSpTable); int VDMOSmPTSize = NUMELEMS(VDMOSmPTable); int VDMOSiSize = sizeof(VDMOSinstance); int VDMOSmSize = sizeof(VDMOSmodel); tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosdist.c0000644000175000017500000007102014163340332022464 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); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmostrun.c0000644000175000017500000000137514163340332022517 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); CKTterr(here->VDIOcapCharge,ckt,timeStep); } } return(OK); } tmp_ns50wwy/src/spicelib/devices/vdmos/vdmosask.c0000644000175000017500000001524614163340332022307 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_OFF: value->iValue = here->VDMOSoff; return(OK); case VDMOS_THERMAL: value->iValue = here->VDMOSthermal; 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_TNODE: value->iValue = here->VDMOStempNode; 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_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_CDIO: value->rValue = *(ckt->CKTstate0 + here->VDIOcurrent); 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 { value->rValue = fabs(here->VDMOScd * (*(ckt->CKTrhsOld + here->VDMOSdNode) - *(ckt->CKTrhsOld + here->VDMOSsNode))); if ((ckt->CKTcurrentAnalysis & DOING_TRAN) && !(ckt->CKTmode & MODETRANOP)) { value->rValue += fabs(*(ckt->CKTstate0 + here->VDMOScqgd) * (*(ckt->CKTrhsOld + here->VDMOSgNode) - *(ckt->CKTrhsOld + here->VDMOSdNode))); value->rValue += fabs(*(ckt->CKTstate0 + here->VDMOScqgs) * (*(ckt->CKTrhsOld + here->VDMOSgNode) - *(ckt->CKTrhsOld + here->VDMOSsNode))); } value->rValue += fabs(*(ckt->CKTstate0 + here->VDIOcurrent) * (*(ckt->CKTrhsOld + here->VDMOSdNode) - *(ckt->CKTrhsOld + here->VDMOSsNode))); } return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/0000755000175000017500000000000014163340332021367 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdcheck.c0000644000175000017500000007020014163340332024073 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdpzld.c0000644000175000017500000001426014163340332023773 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/Makefile.am0000644000175000017500000000113214163340332023420 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdpar.c0000644000175000017500000001353614163340332023611 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); /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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; /* FALLTHROUGH */ case 4: here->B3SOIPDicVES = *(value->v.vec.rVec+3); here->B3SOIPDicVESGiven = TRUE; /* FALLTHROUGH */ case 3: here->B3SOIPDicVBS = *(value->v.vec.rVec+2); here->B3SOIPDicVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->B3SOIPDicVGS = *(value->v.vec.rVec+1); here->B3SOIPDicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->B3SOIPDicVDS = *(value->v.vec.rVec); here->B3SOIPDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/BsimTerms_use0000644000175000017500000000247314163340332024101 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. tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdinit.h0000644000175000017500000000042314163340332023766 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdcvtest.c0000644000175000017500000000612714163340332024335 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipd.c0000644000175000017500000011671214163340332023106 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); tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/ChangeLog0000644000175000017500000000010014163340332023130 0ustar carstencarsten2000-11-14 Paolo Nenzi * Initial release tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c0000644000175000017500000000312014163340332023756 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c0000644000175000017500000015016514163340332023774 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdacld.c0000644000175000017500000003245014163340332023726 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdset.c0000644000175000017500000016747414163340332023635 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdgetic.c0000644000175000017500000000311314163340332024110 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdmpar.c0000644000175000017500000020700714163340332023764 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdld.c0000644000175000017500000050664514163340332023436 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) { 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipditf.h0000644000175000017500000000037714163340332023615 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdtrunc.c0000644000175000017500000000240114163340332024147 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdext.h0000644000175000017500000000245714163340332023634 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*); tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipddef.h0000644000175000017500000021262014163340332023565 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdask.c0000644000175000017500000002174414163340332023605 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c0000644000175000017500000003036314163340332023611 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_pd/b3soipdmask.c0000644000175000017500000014215014163340332023755 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 */ } tmp_ns50wwy/src/spicelib/devices/cktaccept.c0000644000175000017500000000224414163340332021263 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); } tmp_ns50wwy/src/spicelib/devices/ndev/0000755000175000017500000000000014163340332020110 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/ndev/ndevload.c0000644000175000017500000000557514163340332022064 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); } tmp_ns50wwy/src/spicelib/devices/ndev/Makefile.am0000644000175000017500000000075214163340332022150 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 tmp_ns50wwy/src/spicelib/devices/ndev/ndevaccept.c0000644000175000017500000000372014163340332022372 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevask.c0000644000175000017500000000120514163340332021705 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 */ } tmp_ns50wwy/src/spicelib/devices/ndev/ndev.c0000644000175000017500000000201414163340332021205 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); tmp_ns50wwy/src/spicelib/devices/ndev/ndevinit.c0000644000175000017500000000314414163340332022076 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; } tmp_ns50wwy/src/spicelib/devices/ndev/ndevexch.h0000644000175000017500000000254014163340332022066 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 tmp_ns50wwy/src/spicelib/devices/ndev/ndevparm.c0000644000175000017500000000123514163340332022071 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevdefs.h0000644000175000017500000000374414163340332022067 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 */ tmp_ns50wwy/src/spicelib/devices/ndev/ndevset.c0000644000175000017500000001151514163340332021727 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevext.h0000644000175000017500000000176014163340332021742 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 */ tmp_ns50wwy/src/spicelib/devices/ndev/ndevdump.c0000644000175000017500000000146614163340332022105 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevitf.h0000644000175000017500000000027014163340332021717 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 tmp_ns50wwy/src/spicelib/devices/ndev/ndevinit.h0000644000175000017500000000037014163340332022101 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 tmp_ns50wwy/src/spicelib/devices/ndev/ndevpzld.c0000644000175000017500000000074714163340332022112 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevtemp.c0000644000175000017500000000111714163340332022076 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevtrun.c0000644000175000017500000000072514163340332022125 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevmpar.c0000644000175000017500000000150614163340332022072 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); } tmp_ns50wwy/src/spicelib/devices/ndev/ndevmdel.c0000644000175000017500000000074214163340332022055 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; } tmp_ns50wwy/src/spicelib/devices/ndev/ndevacld.c0000644000175000017500000000111114163340332022026 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/0000755000175000017500000000000014163340332020131 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/vsrc/Makefile.am0000644000175000017500000000071114163340332022164 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 tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcset.c0000644000175000017500000000440614163340332021772 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; } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrctemp.c0000644000175000017500000000341314163340332022141 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcpar.c0000644000175000017500000002233214163340332021757 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->VSRCacPhase = *(value->v.vec.rVec+1); here->VSRCacPGiven = TRUE; /* FALLTHROUGH */ case 1: here->VSRCacMag = *(value->v.vec.rVec); here->VSRCacMGiven = TRUE; /* FALLTHROUGH */ 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; /* Parameter r of pwl may now be parameterized: if r == -1, no repetition done. if r == 0, repeat forever. if r == xx, repeat from time xx to last time point given. */ if (value->rValue < -0.5) { here->VSRCrGiven = FALSE; break; } 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcitf.h0000644000175000017500000000026714163340332021767 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 tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcacct.c0000644000175000017500000003146414163340332022115 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; double PHASE; double phase; double deltat; 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; PHASE = here->VSRCfunctionOrder > 7 ? here->VSRCcoeffs[7] : 0.0; /* offset time by delay */ time = ckt->CKTtime - TD; tshift = TD; /* 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; 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; if (ckt->CKTtime == 0 && TD > 0) { error = CKTsetBreak(ckt, TD); if (error) return(error); } 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, 10)) { /* 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcdefs.h0000644000175000017500000001061714163340332022126 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*/ tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcdel.c0000644000175000017500000000076214163340332021744 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; } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcask.c0000644000175000017500000000723214163340332021755 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 { if (ckt->CKTrhsOld) value->rValue = *(ckt->CKTrhsOld + here->VSRCbranch); else value->rValue = 0.; } 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 */ } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcload.c0000644000175000017500000003734614163340332022127 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; double PHASE; double phase; double deltat; 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; 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; 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; double PHASE; double phase; PHASE = here->VSRCfunctionOrder > 5 ? here->VSRCcoeffs[5] : 0.0; /* compute phase in radians */ phase = PHASE * M_PI / 180.0; 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) { value = VO + VA * sin(phase); } else { value = VO + VA * sin(FREQ*time * 2.0 * M_PI + phase) * exp(-time*THETA); } } 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; 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; 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); /* compute waveform value */ value = VO + VA * sin((2.0 * M_PI * FC * time + phasec) + MDI * sin(2.0 * M_PI * FS * time + phases)); } break; case AM: { double VA, FC, MF, VO, TD; 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; 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 { /* compute waveform value */ value = VA * (VO + sin(2.0 * M_PI * MF * time + phases )) * sin(2.0 * M_PI * FC * time + phases); } } 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcfbr.c0000644000175000017500000000171414163340332021747 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcacld.c0000644000175000017500000000256414163340332022105 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrc.c0000644000175000017500000000477714163340332021271 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_STRING,"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); tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcinit.c0000644000175000017500000000313014163340332022133 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; } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcpzld.c0000644000175000017500000000256114163340332022150 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); } tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcext.h0000644000175000017500000000145614163340332022006 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*); tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcinit.h0000644000175000017500000000030214163340332022136 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 tmp_ns50wwy/src/spicelib/devices/vsrc/vsrcpzs.c0000644000175000017500000000320714163340332022011 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/0000755000175000017500000000000014163340332020440 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1trunc.c0000644000175000017500000000235714163340332022442 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/bsim3v1def.h0000644000175000017500000014520014163340332022556 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3v1/bsim3v1itf.h0000644000175000017500000000043014163340332022575 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 tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1temp.c0000644000175000017500000010732614163340332022256 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1ask.c0000644000175000017500000001503014163340332022055 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v1/Makefile.am0000644000175000017500000000101414163340332022470 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 tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1acld.c0000644000175000017500000001366214163340332022213 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1check.c0000644000175000017500000003135714163340332022366 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1pzld.c0000644000175000017500000001412214163340332022251 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1.c0000644000175000017500000007151614163340332021371 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); tmp_ns50wwy/src/spicelib/devices/bsim3v1/bsim3v1init.c0000644000175000017500000000334714163340332022763 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1mask.c0000644000175000017500000011542014163340332022236 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3v1/ChangeLog0000644000175000017500000000077714163340332022225 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 tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1ld.c0000644000175000017500000027213614163340332021712 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1noi.c0000644000175000017500000002707314163340332022076 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1set.c0000644000175000017500000011104314163340332022073 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; } tmp_ns50wwy/src/spicelib/devices/bsim3v1/bsim3v1init.h0000644000175000017500000000042614163340332022763 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 tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1cvtest.c0000644000175000017500000000610414163340332022611 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1mpar.c0000644000175000017500000015215514163340332022250 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.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/bsim3v1ext.h0000644000175000017500000000262314163340332022621 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 *); tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1par.c0000644000175000017500000000676214163340332022075 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM3v1icVBS = *(value->v.vec.rVec+2); here->BSIM3v1icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM3v1icVGS = *(value->v.vec.rVec+1); here->BSIM3v1icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM3v1icVDS = *(value->v.vec.rVec); here->BSIM3v1icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3v1/b3v1getic.c0000644000175000017500000000233214163340332022373 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); } tmp_ns50wwy/src/spicelib/devices/soi3/0000755000175000017500000000000014163340332020031 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/soi3/Makefile.am0000644000175000017500000000074414163340332022072 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 tmp_ns50wwy/src/spicelib/devices/soi3/soi3.c0000644000175000017500000003421114163340332021053 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); tmp_ns50wwy/src/spicelib/devices/soi3/soi3mask.c0000644000175000017500000002276414163340332021741 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 */ } tmp_ns50wwy/src/spicelib/devices/soi3/soi3itf.h0000644000175000017500000000145414163340332021566 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 tmp_ns50wwy/src/spicelib/devices/soi3/soi3init.c0000644000175000017500000000316114163340332021737 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; } tmp_ns50wwy/src/spicelib/devices/soi3/soi3ic.c0000644000175000017500000000410214163340332021363 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3nois.c0000644000175000017500000002015714163340332021750 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3temp.c0000644000175000017500000006165714163340332021757 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3defs.h0000644000175000017500000007555614163340332021743 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*/ tmp_ns50wwy/src/spicelib/devices/soi3/soi3set.c0000644000175000017500000005742614163340332021604 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; } tmp_ns50wwy/src/spicelib/devices/soi3/soi3par.c0000644000175000017500000001253414163340332021562 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 4: here->SOI3icVBS = *(value->v.vec.rVec+3); here->SOI3icVBSGiven = TRUE; /* FALLTHROUGH */ case 3: here->SOI3icVGBS = *(value->v.vec.rVec+2); here->SOI3icVGBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->SOI3icVGFS = *(value->v.vec.rVec+1); here->SOI3icVGFSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3cap.c0000644000175000017500000003636714163340332021555 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); } tmp_ns50wwy/src/spicelib/devices/soi3/README0000644000175000017500000000453214163340332020715 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 tmp_ns50wwy/src/spicelib/devices/soi3/soi3mpar.c0000644000175000017500000003327114163340332021740 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3acld.c0000644000175000017500000004600114163340332021677 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3init.h0000644000175000017500000000037014163340332021743 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 tmp_ns50wwy/src/spicelib/devices/soi3/soi3ext.h0000644000175000017500000000570614163340332021610 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*); tmp_ns50wwy/src/spicelib/devices/soi3/soi3ask.c0000644000175000017500000005324214163340332021557 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 */ } tmp_ns50wwy/src/spicelib/devices/soi3/soi3load.c0000644000175000017500000034361414163340332021725 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; /* remove compiler warnings */ cgfgf=cgfd=cgfs=cgfdeltaT=cgfgb = 0; cdgf=cdd=cds=cddeltaT=cdgb = 0; csgf=csd=css=csdeltaT=csgb = 0; cbgf=cbd=cbs=cbdeltaT=cbgb = 0; cgbgf=cgbd=cgbs=cgbdeltaT=cgbgb = 0; 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3trun.c0000644000175000017500000000250514163340332021765 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); } tmp_ns50wwy/src/spicelib/devices/soi3/soi3conv.c0000644000175000017500000002162114163340332021742 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/0000755000175000017500000000000014163340332020170 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim2/b2ask.c0000644000175000017500000001665114163340332021347 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim2/b2trunc.c0000644000175000017500000000210114163340332021705 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/Makefile.am0000644000175000017500000000076214163340332022231 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 tmp_ns50wwy/src/spicelib/devices/bsim2/b2noi.c0000644000175000017500000001270114163340332021346 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((double)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); } tmp_ns50wwy/src/spicelib/devices/bsim2/bsim2init.h0000644000175000017500000000035214163340332022241 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 tmp_ns50wwy/src/spicelib/devices/bsim2/b2temp.c0000644000175000017500000003041014163340332021523 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2getic.c0000644000175000017500000000242414163340332021655 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2moscap.c0000644000175000017500000000432314163340332022044 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/bsim2init.c0000644000175000017500000000311214163340332022231 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; } tmp_ns50wwy/src/spicelib/devices/bsim2/b2eval.c0000644000175000017500000005275414163340332021524 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; } tmp_ns50wwy/src/spicelib/devices/bsim2/b2pzld.c0000644000175000017500000001365014163340332021536 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2par.c0000644000175000017500000000561314163340332021347 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch(value->v.numValue){ case 3: here->B2icVBS = *(value->v.vec.rVec+2); here->B2icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->B2icVGS = *(value->v.vec.rVec+1); here->B2icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->B2icVDS = *(value->v.vec.rVec); here->B2icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2ld.c0000644000175000017500000007002114163340332021157 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 = 0.0; double cddb = 0.0; double cdsb = 0.0; double cggb; double cbgb; double cbsb; double csgb = 0.0; double cssb = 0.0; double csdb = 0.0; 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2mask.c0000644000175000017500000003322014163340332021513 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim2/b2cvtest.c0000644000175000017500000000743314163340332022077 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2set.c0000644000175000017500000004171014163340332021356 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; } tmp_ns50wwy/src/spicelib/devices/bsim2/bsim2itf.h0000644000175000017500000000026314163340332022061 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 tmp_ns50wwy/src/spicelib/devices/bsim2/b2acld.c0000644000175000017500000001202014163340332021456 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/b2mpar.c0000644000175000017500000004455214163340332021531 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); } tmp_ns50wwy/src/spicelib/devices/bsim2/bsim2def.h0000644000175000017500000005714014163340332022043 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*/ tmp_ns50wwy/src/spicelib/devices/bsim2/b2.c0000644000175000017500000003012114163340332020634 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); tmp_ns50wwy/src/spicelib/devices/bsim2/bsim2ext.h0000644000175000017500000000223514163340332022100 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*); tmp_ns50wwy/src/spicelib/devices/vbic/0000755000175000017500000000000014163340332020077 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/vbic/vbicparam.c0000644000175000017500000000424314163340332022212 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 : /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->VBICicVCE = *(value->v.vec.rVec+1); here->VBICicVCEGiven = TRUE; /* FALLTHROUGH */ case 1: here->VBICicVBE = *(value->v.vec.rVec); here->VBICicVBEGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicmask.c0000644000175000017500000003046314163340332022050 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 */ } tmp_ns50wwy/src/spicelib/devices/vbic/vbicinit.h0000644000175000017500000000037014163340332022057 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 tmp_ns50wwy/src/spicelib/devices/vbic/vbicgetic.c0000644000175000017500000000243614163340332022207 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); } tmp_ns50wwy/src/spicelib/devices/vbic/Makefile.am0000644000175000017500000000077714163340332022146 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 tmp_ns50wwy/src/spicelib/devices/vbic/vbicsoachk.c0000644000175000017500000000423214163340332022360 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; } tmp_ns50wwy/src/spicelib/devices/vbic/vbicconv.c0000644000175000017500000002523014163340332022056 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbictemp.c0000644000175000017500000003636014163340332022064 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicask.c0000644000175000017500000001516314163340332021673 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) { IFvalue IC, IB, IE, IS; VBICinstance *here = (VBICinstance*)instPtr; 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: VBICask(ckt, instPtr, VBIC_QUEST_CC, &IC, select); VBICask(ckt, instPtr, VBIC_QUEST_CB, &IB, select); VBICask(ckt, instPtr, VBIC_QUEST_CE, &IE, select); VBICask(ckt, instPtr, VBIC_QUEST_CS, &IS, select); value->rValue = fabs(*(ckt->CKTstate0 + here->VBICibe) * *(ckt->CKTstate0 + here->VBICvbei)) + fabs(*(ckt->CKTstate0 + here->VBICibc) * *(ckt->CKTstate0 + here->VBICvbci)) + fabs(*(ckt->CKTstate0 + here->VBICitzf) - *(ckt->CKTstate0 + here->VBICitzr)) * fabs(*(ckt->CKTstate0 + here->VBICvbei) - *(ckt->CKTstate0 + here->VBICvbci)) + fabs(*(ckt->CKTstate0 + here->VBICibex) * *(ckt->CKTstate0 + here->VBICvbex)) + fabs(*(ckt->CKTstate0 + here->VBICibep) * *(ckt->CKTstate0 + here->VBICvbep)) + fabs(*(ckt->CKTstate0 + here->VBICibcp) * *(ckt->CKTstate0 + here->VBICvbcp)) + fabs(*(ckt->CKTstate0 + here->VBICiccp)) * fabs(*(ckt->CKTstate0 + here->VBICvbep) - *(ckt->CKTstate0 + here->VBICvbcp)) + fabs(IC.rValue * IC.rValue * here->VBICtextCollResist) + fabs(IC.rValue * *(ckt->CKTstate0 + here->VBICvrci)) + fabs(IB.rValue * IB.rValue * here->VBICtextBaseResist) + fabs(IB.rValue * *(ckt->CKTstate0 + here->VBICvrbi)) + fabs(IE.rValue * IE.rValue * here->VBICtemitterResist) + fabs(IS.rValue * *(ckt->CKTstate0 + here->VBICvrbp)); 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 */ } tmp_ns50wwy/src/spicelib/devices/vbic/vbictrunc.c0000644000175000017500000000224614163340332022246 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbic.c0000644000175000017500000003071414163340332021173 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); tmp_ns50wwy/src/spicelib/devices/vbic/vbicdefs.h0000644000175000017500000006204214163340332022041 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 *VBICtempCollPtr; double *VBICtempCollCIPtr; double *VBICtempCollCXPtr; double *VBICtempBasePtr; double *VBICtempBaseBIPtr; double *VBICtempBaseBXPtr; double *VBICtempBaseBPPtr; double *VBICtempEmitPtr; double *VBICtempEmitEIPtr; double *VBICtempSubsPtr; double *VBICtempSubsSIPtr; 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*/ tmp_ns50wwy/src/spicelib/devices/vbic/vbicacld.c0000644000175000017500000002766014163340332022025 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_Vbei; *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; *(here->VBICcollCICollCIPtr) += Itzr_Vbci; /* 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: Rcx */ *(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: Rbx */ *(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: Re */ *(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: Rs */ *(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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicnoise.c0000644000175000017500000002622714163340332022235 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicext.h0000644000175000017500000000213714163340332021717 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 tmp_ns50wwy/src/spicelib/devices/vbic/vbicload.c0000644000175000017500000051455314163340332022043 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 *); 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; /* 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); 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 = DEVlimitlog(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 */ rhs_current = -Ircx_Vrth * Vrth; *(ckt->CKTrhs + here->VBICcollNode) += -rhs_current; *(here->VBICcollTempPtr) += Ircx_Vrth; *(ckt->CKTrhs + here->VBICcollCXNode) += rhs_current; *(here->VBICcollCXtempPtr) += -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 */ rhs_current = -Irbx_Vrth * Vrth; *(ckt->CKTrhs + here->VBICbaseNode) += -rhs_current; *(here->VBICbaseTempPtr) += Irbx_Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += rhs_current; *(here->VBICbaseBXtempPtr) += -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 */ rhs_current = -Ire_Vrth * Vrth; *(ckt->CKTrhs + here->VBICemitNode) += -rhs_current; *(here->VBICemitTempPtr) += Ire_Vrth; *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEItempPtr) += -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 */ rhs_current = -Irs_Vrth * Vrth; *(ckt->CKTrhs + here->VBICsubsNode) += -rhs_current; *(here->VBICsubsTempPtr) += Irs_Vrth; *(ckt->CKTrhs + here->VBICsubsSINode) += rhs_current; *(here->VBICsubsSItempPtr) += -Irs_Vrth; /* c Stamp element: Rth */ *(here->VBICtempTempPtr) += Irth_Vrth; /* c Stamp element: Cth */ rhs_current = Icth - Icth_Vrth*Vrth; *(ckt->CKTrhs + here->VBICtempNode) += -rhs_current; *(here->VBICtempTempPtr) += Icth_Vrth; /* c Stamp element: Ith */ rhs_current = -Ith - Ith_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->VBICtempCollPtr) += -Ith_Vrcx; *(here->VBICtempCollCXPtr) += +Ith_Vrcx; *(here->VBICtempBasePtr) += -Ith_Vrbx; *(here->VBICtempBaseBXPtr) += +Ith_Vrbx; *(here->VBICtempEmitPtr) += -Ith_Vre; *(here->VBICtempEmitEIPtr) += +Ith_Vre; *(here->VBICtempSubsPtr) += -Ith_Vrs; *(here->VBICtempSubsSIPtr) += +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_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_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_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_Vrth=qlo_PSatT*PSatT_Vrth; qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; qhi=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_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_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_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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicitf.h0000644000175000017500000000047314163340332021702 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 tmp_ns50wwy/src/spicelib/devices/vbic/vbicpzld.c0000644000175000017500000003465414163340332022074 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicmpar.c0000644000175000017500000004357214163340332022061 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" #define R_MIN 0.01 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 < R_MIN) { mods->VBICextCollResist = R_MIN; } mods->VBICextCollResistGiven = TRUE; break; case VBIC_MOD_RCI: mods->VBICintCollResist = value->rValue; if (mods->VBICintCollResist < R_MIN) { mods->VBICintCollResist = R_MIN; } 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 < R_MIN) { mods->VBICextBaseResist = R_MIN; } mods->VBICextBaseResistGiven = TRUE; break; case VBIC_MOD_RBI: mods->VBICintBaseResist = value->rValue; if (mods->VBICintBaseResist < R_MIN) { mods->VBICintBaseResist = R_MIN; } mods->VBICintBaseResistGiven = TRUE; break; case VBIC_MOD_RE: mods->VBICemitterResist = value->rValue; if (mods->VBICemitterResist < R_MIN) { mods->VBICemitterResist = R_MIN; } mods->VBICemitterResistGiven = TRUE; break; case VBIC_MOD_RS: mods->VBICsubstrateResist = value->rValue; if (mods->VBICsubstrateResist < R_MIN) { mods->VBICsubstrateResist = R_MIN; } mods->VBICsubstrateResistGiven = TRUE; break; case VBIC_MOD_RBP: mods->VBICparBaseResist = value->rValue; if (mods->VBICparBaseResist < R_MIN) { mods->VBICparBaseResist = R_MIN; } 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); } tmp_ns50wwy/src/spicelib/devices/vbic/vbicinit.c0000644000175000017500000000323214163340332022052 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; } tmp_ns50wwy/src/spicelib/devices/vbic/vbicsetup.c0000644000175000017500000005710314163340332022255 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(VBICtempCollPtr,VBICtempNode,VBICcollNode); TSTALLOC(VBICtempCollCIPtr,VBICtempNode,VBICcollCINode); TSTALLOC(VBICtempCollCXPtr,VBICtempNode,VBICcollCXNode); TSTALLOC(VBICtempBaseBIPtr,VBICtempNode,VBICbaseBINode); TSTALLOC(VBICtempBasePtr,VBICtempNode,VBICbaseNode); TSTALLOC(VBICtempBaseBXPtr,VBICtempNode,VBICbaseBXNode); TSTALLOC(VBICtempBaseBPPtr,VBICtempNode,VBICbaseBPNode); TSTALLOC(VBICtempEmitPtr,VBICtempNode,VBICemitNode); TSTALLOC(VBICtempEmitEIPtr,VBICtempNode,VBICemitEINode); TSTALLOC(VBICtempSubsPtr,VBICtempNode,VBICsubsNode); TSTALLOC(VBICtempSubsSIPtr,VBICtempNode,VBICsubsSINode); 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/0000755000175000017500000000000014163340332021353 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soidd.c0000644000175000017500000007667614163340332023074 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); tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/Makefile.am0000644000175000017500000000113214163340332023404 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddld.c0000644000175000017500000053150714163340332023401 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) { 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddpzld.c0000644000175000017500000001433014163340332023741 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddacld.c0000644000175000017500000004537014163340332023703 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/BsimTerms_use0000644000175000017500000000247314163340332024065 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. tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddext.h0000644000175000017500000000245614163340332023603 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*); tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soidddef.h0000644000175000017500000017144314163340332023544 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*/ tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddask.c0000644000175000017500000001774114163340332023557 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c0000644000175000017500000000330614163340332023734 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddmpar.c0000644000175000017500000016053714163340332023742 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddcheck.c0000644000175000017500000004271414163340332024054 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddtemp.c0000644000175000017500000012725014163340332023743 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddinit.h0000644000175000017500000000042314163340332023736 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddtrunc.c0000644000175000017500000000240114163340332024117 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddgetic.c0000644000175000017500000000311014163340332024055 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddmask.c0000644000175000017500000012075714163340332023736 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddcvtest.c0000644000175000017500000000612514163340332024303 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); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soidditf.h0000644000175000017500000000040014163340332023550 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 tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddset.c0000644000175000017500000017162114163340332023572 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; } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddpar.c0000644000175000017500000001076114163340332023556 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); /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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; /* FALLTHROUGH */ case 4: here->B3SOIDDicVES = *(value->v.vec.rVec+3); here->B3SOIDDicVESGiven = TRUE; /* FALLTHROUGH */ case 3: here->B3SOIDDicVBS = *(value->v.vec.rVec+2); here->B3SOIDDicVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->B3SOIDDicVGS = *(value->v.vec.rVec+1); here->B3SOIDDicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->B3SOIDDicVDS = *(value->v.vec.rVec); here->B3SOIDDicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim3soi_dd/b3soiddnoi.c0000644000175000017500000003007014163340332023554 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); } tmp_ns50wwy/src/spicelib/devices/cktfinddev.c0000644000175000017500000000057014163340332021443 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/0000755000175000017500000000000014163340332020164 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hfet2/hfet2trunc.c0000644000175000017500000000107114163340332022413 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/Makefile.am0000644000175000017500000000074214163340332022223 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 tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2ask.c0000644000175000017500000001226414163340332022044 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 */ } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2param.c0000644000175000017500000000332714163340332022366 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->HFET2icVGS = *(value->v.vec.rVec+1); here->HFET2icVGSGiven = TRUE; /* FALLTHROUGH */ 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2mpar.c0000644000175000017500000001022714163340332022222 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2mask.c0000644000175000017500000001132514163340332022216 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 */ } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2getic.c0000644000175000017500000000154114163340332022355 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2setup.c0000644000175000017500000001505714163340332022431 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; } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2init.c0000644000175000017500000000316214163340332022226 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; } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2ext.h0000644000175000017500000000142314163340332022066 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*); tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2itf.h0000644000175000017500000000011614163340332022046 0ustar carstencarsten#ifndef DEV_HFET2 #define DEV_HFET2 SPICEdev *get_hfet2_info(void); #endif tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2acl.c0000644000175000017500000000500314163340332022016 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2init.h0000644000175000017500000000040214163340332022225 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 tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2.c0000644000175000017500000001201214163340332021334 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); tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2temp.c0000644000175000017500000000330314163340332022225 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2defs.h0000644000175000017500000002002214163340332022203 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*/ tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2load.c0000644000175000017500000003607114163340332022207 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); } tmp_ns50wwy/src/spicelib/devices/hfet2/hfet2pzl.c0000644000175000017500000000606514163340332022075 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/0000755000175000017500000000000014163340332020446 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6ld.c0000644000175000017500000071633414163340332021731 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 tmp_ns50wwy/src/spicelib/devices/bsim4v6/Makefile.am0000644000175000017500000000113214163340332022477 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 tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6mpar.c0000644000175000017500000036116614163340332022270 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.000001e24) mod->BSIM4v6nsd *= 1.0e-6; break; case BSIM4v6_MOD_NGATE: mod->BSIM4v6ngate = value->rValue; mod->BSIM4v6ngateGiven = TRUE; if (mod->BSIM4v6ngate > 1.000001e24) 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6acld.c0000644000175000017500000007177014163340332022233 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/bsim4v6init.c0000644000175000017500000000335514163340332022776 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6check.c0000644000175000017500000007123614163340332022402 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 . * Modified by Holger Vogt, 12/27/2020. **********/ #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" #include "ngspice/wordlist.h" #include "ngspice/cpextern.h" /* Check for correctness of the BSIM4.5 parameters: If parameter excursions are found, put the warning or error message into a wordlist. Only then open a file bsim4v6.out and print the data into the file. */ int BSIM4v6checkModel( BSIM4v6model *model, BSIM4v6instance *here, CKTcircuit *ckt) { struct bsim4v6SizeDependParam *pParam; int Fatal_Flag = 0; FILE *fplog; wordlist* wl, *wlstart; pParam = here->pParam; if (cp_getvar("ng_nomodcheck", CP_BOOL, NULL, 0)) return(0); wl = wlstart = TMALLOC(wordlist, 1); wl->wl_prev = NULL; wl->wl_next = NULL; wl->wl_word = tprintf("\nChecking parameters for BSIM 4.5 model %s\n", model->BSIM4v6modName); if ((here->BSIM4v6rgateMod == 2) || (here->BSIM4v6rgateMod == 3)) { if ((here->BSIM4v6trnqsMod == 1) || (here->BSIM4v6acnqsMod == 1)) { wl_append_word(&wl, &wl, tprintf("Warning: You've selected both Rg and charge deficit NQS; select one only.\n")); } } if (model->BSIM4v6toxe <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxe = %g is not positive.\n", model->BSIM4v6toxe)); Fatal_Flag = 1; } if (model->BSIM4v6toxp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxp = %g is not positive.\n", model->BSIM4v6toxp)); Fatal_Flag = 1; } if (model->BSIM4v6eot <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: EOT = %g is not positive.\n", model->BSIM4v6eot)); Fatal_Flag = 1; } if (model->BSIM4v6epsrgate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrgate = %g is not positive.\n", model->BSIM4v6epsrgate)); Fatal_Flag = 1; } if (model->BSIM4v6epsrsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Epsrsub = %g is not positive.\n", model->BSIM4v6epsrsub)); Fatal_Flag = 1; } if (model->BSIM4v6easub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4v6easub)); Fatal_Flag = 1; } if (model->BSIM4v6ni0sub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Easub = %g is not positive.\n", model->BSIM4v6ni0sub)); Fatal_Flag = 1; } if (model->BSIM4v6toxm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxm = %g is not positive.\n", model->BSIM4v6toxm)); Fatal_Flag = 1; } if (model->BSIM4v6toxref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Toxref = %g is not positive.\n", model->BSIM4v6toxref)); Fatal_Flag = 1; } if (pParam->BSIM4v6lpe0 < -pParam->BSIM4v6leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpe0 = %g is less than -Leff.\n", pParam->BSIM4v6lpe0)); Fatal_Flag = 1; } if (model->BSIM4v6lintnoi > pParam->BSIM4v6leff / 2) { wl_append_word(&wl, &wl, tprintf("Fatal: Lintnoi = %g is too large - Leff for noise is negative.\n", model->BSIM4v6lintnoi)); Fatal_Flag = 1; } if (pParam->BSIM4v6lpeb < -pParam->BSIM4v6leff) { wl_append_word(&wl, &wl, tprintf("Fatal: Lpeb = %g is less than -Leff.\n", pParam->BSIM4v6lpeb)); Fatal_Flag = 1; } if (pParam->BSIM4v6ndep <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ndep = %g is not positive.\n", pParam->BSIM4v6ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v6phi <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Phi = %g is not positive. Please check Phin and Ndep\n", pParam->BSIM4v6phi)); wl_append_word(&wl, &wl, tprintf(" Phin = %g Ndep = %g \n", pParam->BSIM4v6phin, pParam->BSIM4v6ndep)); Fatal_Flag = 1; } if (pParam->BSIM4v6nsub <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Nsub = %g is not positive.\n", pParam->BSIM4v6nsub)); Fatal_Flag = 1; } if (pParam->BSIM4v6ngate < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is not positive.\n", pParam->BSIM4v6ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v6ngate > 1.e25) { wl_append_word(&wl, &wl, tprintf("Fatal: Ngate = %g Ngate is too high\n", pParam->BSIM4v6ngate)); Fatal_Flag = 1; } if (pParam->BSIM4v6xj <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Xj = %g is not positive.\n", pParam->BSIM4v6xj)); Fatal_Flag = 1; } if (pParam->BSIM4v6dvt1 < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1 = %g is negative.\n", pParam->BSIM4v6dvt1)); Fatal_Flag = 1; } if (pParam->BSIM4v6dvt1w < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dvt1w = %g is negative.\n", pParam->BSIM4v6dvt1w)); Fatal_Flag = 1; } if (pParam->BSIM4v6w0 == -pParam->BSIM4v6weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (W0 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (pParam->BSIM4v6dsub < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Dsub = %g is negative.\n", pParam->BSIM4v6dsub)); Fatal_Flag = 1; } if (pParam->BSIM4v6b1 == -pParam->BSIM4v6weff) { wl_append_word(&wl, &wl, tprintf("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n")); Fatal_Flag = 1; } if (here->BSIM4v6u0temp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: u0 at current temperature = %g is not positive.\n", here->BSIM4v6u0temp)); Fatal_Flag = 1; } if (pParam->BSIM4v6delta < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Delta = %g is less than zero.\n", pParam->BSIM4v6delta)); Fatal_Flag = 1; } if (here->BSIM4v6vsattemp <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vsat at current temperature = %g is not positive.\n", here->BSIM4v6vsattemp)); Fatal_Flag = 1; } if (pParam->BSIM4v6pclm <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Pclm = %g is not positive.\n", pParam->BSIM4v6pclm)); Fatal_Flag = 1; } if (pParam->BSIM4v6drout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Drout = %g is negative.\n", pParam->BSIM4v6drout)); Fatal_Flag = 1; } if (here->BSIM4v6m <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: multiplier = %g is not positive.\n", here->BSIM4v6m)); Fatal_Flag = 1; } if (here->BSIM4v6nf < 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Fatal: SAref = %g is not positive.\n", model->BSIM4v6saref)); Fatal_Flag = 1; } if (model->BSIM4v6sbref <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: SBref = %g is not positive.\n", model->BSIM4v6sbref)); Fatal_Flag = 1; } } if ((here->BSIM4v6l + model->BSIM4v6xl) <= model->BSIM4v6xgl) { wl_append_word(&wl, &wl, tprintf("Fatal: The parameter xgl must be smaller than Ldrawn+XL.\n")); Fatal_Flag = 1; } if (here->BSIM4v6ngcon < 1.0) { wl_append_word(&wl, &wl, tprintf("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; wl_append_word(&wl, &wl, tprintf("Warning: Ngcon must be equal to one or two; reset to 1.0.\n")); } if (model->BSIM4v6gbmin < 1.0e-20) { wl_append_word(&wl, &wl, tprintf("Warning: Gbmin = %g is too small.\n", model->BSIM4v6gbmin)); } /* Check saturation parameters */ if (pParam->BSIM4v6fprout < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: fprout = %g is negative.\n", pParam->BSIM4v6fprout)); Fatal_Flag = 1; } if (pParam->BSIM4v6pdits < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pdits = %g is negative.\n", pParam->BSIM4v6pdits)); Fatal_Flag = 1; } if (model->BSIM4v6pditsl < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pditsl = %g is negative.\n", model->BSIM4v6pditsl)); Fatal_Flag = 1; } /* Check gate current parameters */ if (model->BSIM4v6igbMod) { if (pParam->BSIM4v6nigbinv <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbinv = %g is non-positive.\n", pParam->BSIM4v6nigbinv)); Fatal_Flag = 1; } if (pParam->BSIM4v6nigbacc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigbacc = %g is non-positive.\n", pParam->BSIM4v6nigbacc)); Fatal_Flag = 1; } } if (model->BSIM4v6igcMod) { if (pParam->BSIM4v6nigc <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: nigc = %g is non-positive.\n", pParam->BSIM4v6nigc)); Fatal_Flag = 1; } if (pParam->BSIM4v6poxedge <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: poxedge = %g is non-positive.\n", pParam->BSIM4v6poxedge)); Fatal_Flag = 1; } if (pParam->BSIM4v6pigcd <= 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: pigcd = %g is non-positive.\n", pParam->BSIM4v6pigcd)); Fatal_Flag = 1; } } /* Check capacitance parameters */ if (pParam->BSIM4v6clc < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Clc = %g is negative.\n", pParam->BSIM4v6clc)); Fatal_Flag = 1; } /* Check overlap capacitance parameters */ if (pParam->BSIM4v6ckappas < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappas = %g is too small.\n", pParam->BSIM4v6ckappas)); pParam->BSIM4v6ckappas = 0.02; } if (pParam->BSIM4v6ckappad < 0.02) { wl_append_word(&wl, &wl, tprintf("Warning: ckappad = %g is too small.\n", pParam->BSIM4v6ckappad)); pParam->BSIM4v6ckappad = 0.02; } if (model->BSIM4v6vtss < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtss = %g is negative.\n", model->BSIM4v6vtss)); Fatal_Flag = 1; } if (model->BSIM4v6vtsd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsd = %g is negative.\n", model->BSIM4v6vtsd)); Fatal_Flag = 1; } if (model->BSIM4v6vtssws < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtssws = %g is negative.\n", model->BSIM4v6vtssws)); Fatal_Flag = 1; } if (model->BSIM4v6vtsswd < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswd = %g is negative.\n", model->BSIM4v6vtsswd)); Fatal_Flag = 1; } if (model->BSIM4v6vtsswgs < 0.0) { wl_append_word(&wl, &wl, tprintf("Fatal: Vtsswgs = %g is negative.\n", model->BSIM4v6vtsswgs)); Fatal_Flag = 1; } if (model->BSIM4v6vtsswgd < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Leff = %g <= 1.0e-9. Recommended Leff >= 1e-8 \n", pParam->BSIM4v6leff)); } if (pParam->BSIM4v6leffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Leff for CV = %g <= 1.0e-9. Recommended LeffCV >=1e-8 \n", pParam->BSIM4v6leffCV)); } if (pParam->BSIM4v6weff <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("Warning: Weff = %g <= 1.0e-9. Recommended Weff >=1e-7 \n", pParam->BSIM4v6weff)); } if (pParam->BSIM4v6weffCV <= 1.0e-9) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Toxe = %g is less than 1A. Recommended Toxe >= 5A\n", model->BSIM4v6toxe)); } if (model->BSIM4v6toxp < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxp = %g is less than 1A. Recommended Toxp >= 5A\n", model->BSIM4v6toxp)); } if (model->BSIM4v6toxm < 1.0e-10) { wl_append_word(&wl, &wl, tprintf("Warning: Toxm = %g is less than 1A. Recommended Toxm >= 5A\n", model->BSIM4v6toxm)); } if (pParam->BSIM4v6ndep <= 1.0e12) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too small.\n", pParam->BSIM4v6ndep)); } else if (pParam->BSIM4v6ndep >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Ndep = %g may be too large.\n", pParam->BSIM4v6ndep)); } if (pParam->BSIM4v6nsub <= 1.0e14) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too small.\n", pParam->BSIM4v6nsub)); } else if (pParam->BSIM4v6nsub >= 1.0e21) { wl_append_word(&wl, &wl, tprintf("Warning: Nsub = %g may be too large.\n", pParam->BSIM4v6nsub)); } if ((pParam->BSIM4v6ngate > 0.0) && (pParam->BSIM4v6ngate <= 1.e18)) { wl_append_word(&wl, &wl, tprintf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", pParam->BSIM4v6ngate)); } if (pParam->BSIM4v6dvt0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Dvt0 = %g is negative.\n", pParam->BSIM4v6dvt0)); } if (fabs(1.0e-8 / (pParam->BSIM4v6w0 + pParam->BSIM4v6weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (W0 + Weff) may be too small.\n")); } /* Check subthreshold parameters */ if (pParam->BSIM4v6nfactor < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Nfactor = %g is negative.\n", pParam->BSIM4v6nfactor)); } if (pParam->BSIM4v6cdsc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdsc = %g is negative.\n", pParam->BSIM4v6cdsc)); } if (pParam->BSIM4v6cdscd < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Cdscd = %g is negative.\n", pParam->BSIM4v6cdscd)); } /* Check DIBL parameters */ if (here->BSIM4v6eta0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Eta0 = %g is negative.\n", here->BSIM4v6eta0)); } /* Check Abulk parameters */ if (fabs(1.0e-8 / (pParam->BSIM4v6b1 + pParam->BSIM4v6weff)) > 10.0) { wl_append_word(&wl, &wl, tprintf("Warning: (B1 + Weff) may be too small.\n")); } /* Check Saturation parameters */ if (pParam->BSIM4v6a2 < 0.01) { wl_append_word(&wl, &wl, tprintf("Warning: A2 = %g is too small. Set to 0.01.\n", pParam->BSIM4v6a2)); pParam->BSIM4v6a2 = 0.01; } else if (pParam->BSIM4v6a2 > 1.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Prwg = %g is negative. Set to zero.\n", pParam->BSIM4v6prwg)); pParam->BSIM4v6prwg = 0.0; } if (pParam->BSIM4v6rdsw < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdsw = %g is negative. Set to zero.\n", pParam->BSIM4v6rdsw)); pParam->BSIM4v6rdsw = 0.0; pParam->BSIM4v6rds0 = 0.0; } if (pParam->BSIM4v6rds0 < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rds at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rds0)); pParam->BSIM4v6rds0 = 0.0; } if (pParam->BSIM4v6rdswmin < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Rdswmin at current temperature = %g is negative. Set to zero.\n", pParam->BSIM4v6rdswmin)); pParam->BSIM4v6rdswmin = 0.0; } if (pParam->BSIM4v6pscbe2 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Pscbe2 = %g is not positive.\n", pParam->BSIM4v6pscbe2)); } if (pParam->BSIM4v6vsattemp < 1.0e3) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Lambda = %g may be too large.\n", pParam->BSIM4v6lambda)); } } if ((model->BSIM4v6vtlGiven) && (pParam->BSIM4v6vtl > 0.0)) { if (pParam->BSIM4v6vtl < 6.0e4) { wl_append_word(&wl, &wl, tprintf("Warning: Thermal velocity vtl = %g may be too small.\n", pParam->BSIM4v6vtl)); } if (pParam->BSIM4v6xn < 3.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: Pdibl1 = %g is negative.\n", pParam->BSIM4v6pdibl1)); } } if (pParam->BSIM4v6pdibl2 < 0.0) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: LODK2 = %g is not positive.\n", model->BSIM4v6lodk2)); } if (model->BSIM4v6lodeta0 <= 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: LODETA0 = %g is not positive.\n", model->BSIM4v6lodeta0)); } } /* Check gate resistance parameters */ if (here->BSIM4v6rgateMod == 1) { if (model->BSIM4v6rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 1.\n")); } else if (here->BSIM4v6rgateMod == 2) { if (model->BSIM4v6rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg <= 0.0 for rgateMod = 2.\n")); else if (pParam->BSIM4v6xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 <= 0.0 for rgateMod = 2.\n")); } if (here->BSIM4v6rgateMod == 3) { if (model->BSIM4v6rshg <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: rshg should be positive for rgateMod = 3.\n")); else if (pParam->BSIM4v6xrcrg1 <= 0.0) wl_append_word(&wl, &wl, tprintf("Warning: xrcrg1 should be positive for rgateMod = 3.\n")); } /* Check capacitance parameters */ if (pParam->BSIM4v6noff < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Noff = %g is too small.\n", pParam->BSIM4v6noff)); } if (pParam->BSIM4v6voffcv < -0.5) { wl_append_word(&wl, &wl, tprintf("Warning: Voffcv = %g is too small.\n", pParam->BSIM4v6voffcv)); } if (pParam->BSIM4v6moin < 5.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too small.\n", pParam->BSIM4v6moin)); } if (pParam->BSIM4v6moin > 25.0) { wl_append_word(&wl, &wl, tprintf("Warning: Moin = %g is too large.\n", pParam->BSIM4v6moin)); } if (model->BSIM4v6capMod == 2) { if (pParam->BSIM4v6acde < 0.1) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too small.\n", pParam->BSIM4v6acde)); } if (pParam->BSIM4v6acde > 1.6) { wl_append_word(&wl, &wl, tprintf("Warning: Acde = %g is too large.\n", pParam->BSIM4v6acde)); } } /* Check overlap capacitance parameters */ if (model->BSIM4v6cgdo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgdo = %g is negative. Set to zero.\n", model->BSIM4v6cgdo)); model->BSIM4v6cgdo = 0.0; } if (model->BSIM4v6cgso < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgso = %g is negative. Set to zero.\n", model->BSIM4v6cgso)); model->BSIM4v6cgso = 0.0; } if (model->BSIM4v6cgbo < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: cgbo = %g is negative. Set to zero.\n", model->BSIM4v6cgbo)); model->BSIM4v6cgbo = 0.0; } if (model->BSIM4v6tnoiMod == 1) { if (model->BSIM4v6tnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoia = %g is negative. Set to zero.\n", model->BSIM4v6tnoia)); model->BSIM4v6tnoia = 0.0; } if (model->BSIM4v6tnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: tnoib = %g is negative. Set to zero.\n", model->BSIM4v6tnoib)); model->BSIM4v6tnoib = 0.0; } if (model->BSIM4v6rnoia < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoia = %g is negative. Set to zero.\n", model->BSIM4v6rnoia)); model->BSIM4v6rnoia = 0.0; } if (model->BSIM4v6rnoib < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: rnoib = %g is negative. Set to zero.\n", model->BSIM4v6rnoib)); model->BSIM4v6rnoib = 0.0; } } if (model->BSIM4v6SjctEmissionCoeff < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njs = %g is negative.\n", model->BSIM4v6SjctEmissionCoeff)); } if (model->BSIM4v6DjctEmissionCoeff < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njd = %g is negative.\n", model->BSIM4v6DjctEmissionCoeff)); } if (model->BSIM4v6njts < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njts = %g is negative at temperature = %g.\n", model->BSIM4v6njts, ckt->CKTtemp)); } if (model->BSIM4v6njtssw < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtssw = %g is negative at temperature = %g.\n", model->BSIM4v6njtssw, ckt->CKTtemp)); } if (model->BSIM4v6njtsswg < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswg = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswg, ckt->CKTtemp)); } if (model->BSIM4v6njtsdGiven && model->BSIM4v6njtsdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsdtemp, ckt->CKTtemp)); } if (model->BSIM4v6njtsswdGiven && model->BSIM4v6njtsswdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswdtemp, ckt->CKTtemp)); } if (model->BSIM4v6njtsswgdGiven && model->BSIM4v6njtsswgdtemp < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: Njtsswgd = %g is negative at temperature = %g.\n", model->BSIM4v6njtsswgdtemp, ckt->CKTtemp)); } if (model->BSIM4v6ntnoi < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: ntnoi = %g is negative. Set to zero.\n", model->BSIM4v6ntnoi)); model->BSIM4v6ntnoi = 0.0; } /* diode model */ if (model->BSIM4v6SbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctBotGradingCoeff)); model->BSIM4v6SbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v6SbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctSideGradingCoeff)); model->BSIM4v6SbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v6SbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWGS = %g is too big. Set to 0.99.\n", model->BSIM4v6SbulkJctGateSideGradingCoeff)); model->BSIM4v6SbulkJctGateSideGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctBotGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctBotGradingCoeff)); model->BSIM4v6DbulkJctBotGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("Warning: MJSWD = %g is too big. Set to 0.99.\n", model->BSIM4v6DbulkJctSideGradingCoeff)); model->BSIM4v6DbulkJctSideGradingCoeff = 0.99; } if (model->BSIM4v6DbulkJctGateSideGradingCoeff >= 0.99) { wl_append_word(&wl, &wl, tprintf("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) { wl_append_word(&wl, &wl, tprintf("Warning: SCREF = %g is not positive. Set to 1e-6.\n", model->BSIM4v6scref)); model->BSIM4v6scref = 1e-6; } if (here->BSIM4v6sca < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCA = %g is negative. Set to 0.0.\n", here->BSIM4v6sca)); here->BSIM4v6sca = 0.0; } if (here->BSIM4v6scb < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCB = %g is negative. Set to 0.0.\n", here->BSIM4v6scb)); here->BSIM4v6scb = 0.0; } if (here->BSIM4v6scc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SCC = %g is negative. Set to 0.0.\n", here->BSIM4v6scc)); here->BSIM4v6scc = 0.0; } if (here->BSIM4v6sc < 0.0) { wl_append_word(&wl, &wl, tprintf("Warning: SC = %g is negative. Set to 0.0.\n", here->BSIM4v6sc)); here->BSIM4v6sc = 0.0; } } if (wlstart->wl_next) { if ((fplog = fopen("bsim4v6.out", "w")) != NULL) { while (wlstart) { fprintf(fplog, "%s", wlstart->wl_word); fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } fclose(fplog); } else { while (wlstart) { fprintf(stderr, "%s", wlstart->wl_word); wlstart = wlstart->wl_next; } } } wl_free(wlstart); if ((strcmp(model->BSIM4v6version, "4.6.5")) && (strncmp(model->BSIM4v6version, "4.60", 4)) && (strncmp(model->BSIM4v6version, "4.6", 3))) { printf("Warning: This model is BSIM4.6.5; you specified a wrong version number '%s'.\n", model->BSIM4v6version); } return(Fatal_Flag); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6geo.c0000644000175000017500000003101714163340332022070 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6cvtest.c0000644000175000017500000002216214163340332022627 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6pzld.c0000644000175000017500000010432114163340332022266 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/bsim4v6init.h0000644000175000017500000000042614163340332022777 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 tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6mdel.c0000644000175000017500000000171014163340332022234 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6par.c0000644000175000017500000001537614163340332022112 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 3: here->BSIM4v6icVBS = *(value->v.vec.rVec+2); here->BSIM4v6icVBSGiven = TRUE; /* FALLTHROUGH */ case 2: here->BSIM4v6icVGS = *(value->v.vec.rVec+1); here->BSIM4v6icVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->BSIM4v6icVDS = *(value->v.vec.rVec); here->BSIM4v6icVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6temp.c0000644000175000017500000034674114163340332022300 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, "detected during BSIM4.6.5 parameter checking for \n model %s of device instance %s\n", model->BSIM4v6modName, here->BSIM4v6name); return(E_BADPARM); } } /* End instance */ } return(OK); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6.c0000644000175000017500000021561614163340332021406 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); tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6trunc.c0000644000175000017500000000337214163340332022454 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/bsim4v6def.h0000644000175000017500000034510214163340332022575 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*/ tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6noi.c0000644000175000017500000006744614163340332022122 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6soachk.c0000644000175000017500000003647114163340332022577 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6set.c0000644000175000017500000030600614163340332022114 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; } tmp_ns50wwy/src/spicelib/devices/bsim4v6/bsim4v6ext.h0000644000175000017500000000260614163340332022636 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 *); tmp_ns50wwy/src/spicelib/devices/bsim4v6/B4TERMS_OF_USE0000644000175000017500000000254414163340332022556 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 tmp_ns50wwy/src/spicelib/devices/bsim4v6/bsim4v6itf.h0000644000175000017500000000037714163340332022623 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 tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6getic.c0000644000175000017500000000267314163340332022417 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); } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6mask.c0000644000175000017500000025633414163340332022264 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 */ } tmp_ns50wwy/src/spicelib/devices/bsim4v6/b4v6ask.c0000644000175000017500000003275014163340332022101 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 */ } tmp_ns50wwy/src/spicelib/devices/devsup.c0000644000175000017500000005722214163340332020636 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); } /* DEVlimitlog(deltemp, deltemp_old, LIM_TOL, check) * Logarithmic damping the per-iteration change of deltemp beyond LIM_TOL. */ double DEVlimitlog( double deltemp, double deltemp_old, double LIM_TOL, int *check) { static bool shown = FALSE; *check = 0; if (!shown && (isnan (deltemp) || isnan (deltemp_old))) { fprintf(stderr, "\n\nThe temperature limiting function received NaN.\n"); fprintf(stderr, "Please check your power dissipation and improve your heat sink Rth!\n"); fprintf(stderr, " This message will be shown only once.\n\n"); deltemp = 0.0; *check = 1; shown = TRUE; } /* 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 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 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; } /* 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); } tmp_ns50wwy/src/spicelib/devices/cktsoachk.c0000644000175000017500000000212314163340332021270 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; } tmp_ns50wwy/src/spicelib/devices/tra/0000755000175000017500000000000014163340332017742 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/tra/Makefile.am0000644000175000017500000000062514163340332022001 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 tmp_ns50wwy/src/spicelib/devices/tra/traload.c0000644000175000017500000001533514163340332021543 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); } tmp_ns50wwy/src/spicelib/devices/tra/trasetup.c0000644000175000017500000001133414163340332021757 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; } tmp_ns50wwy/src/spicelib/devices/tra/tratrunc.c0000644000175000017500000000570514163340332021757 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); } tmp_ns50wwy/src/spicelib/devices/tra/tratemp.c0000644000175000017500000000175714163340332021574 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); } tmp_ns50wwy/src/spicelib/devices/tra/traparam.c0000644000175000017500000000475014163340332021723 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: /* FALLTHROUGH ded to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 4: here->TRAinitCur2 = *(value->v.vec.rVec+3); /* FALLTHROUGH */ case 3: here->TRAinitVolt2 = *(value->v.vec.rVec+2); /* FALLTHROUGH */ case 2: here->TRAinitCur1 = *(value->v.vec.rVec+1); /* FALLTHROUGH */ case 1: here->TRAinitVolt1 = *(value->v.vec.rVec); break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/tra/trainit.c0000644000175000017500000000305114163340332021557 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; } tmp_ns50wwy/src/spicelib/devices/tra/traask.c0000644000175000017500000000527614163340332021405 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 */ } tmp_ns50wwy/src/spicelib/devices/tra/tradefs.h0000644000175000017500000001235014163340332021544 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*/ tmp_ns50wwy/src/spicelib/devices/tra/trainit.h0000644000175000017500000000027214163340332021566 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 tmp_ns50wwy/src/spicelib/devices/tra/traext.h0000644000175000017500000000121014163340332021414 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*); tmp_ns50wwy/src/spicelib/devices/tra/traitf.h0000644000175000017500000000025514163340332021406 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 tmp_ns50wwy/src/spicelib/devices/tra/traacct.c0000644000175000017500000001310314163340332021525 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); } tmp_ns50wwy/src/spicelib/devices/tra/traacld.c0000644000175000017500000000452414163340332021525 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); } tmp_ns50wwy/src/spicelib/devices/tra/tra.c0000644000175000017500000000331314163340332020674 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); tmp_ns50wwy/src/spicelib/devices/txl/0000755000175000017500000000000014163340332017763 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/txl/txlask.c0000644000175000017500000000160714163340332021441 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 */ } tmp_ns50wwy/src/spicelib/devices/txl/Makefile.am0000644000175000017500000000064514163340332022024 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 tmp_ns50wwy/src/spicelib/devices/txl/txlitf.h0000644000175000017500000000031114163340332021441 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 tmp_ns50wwy/src/spicelib/devices/txl/txlinit.h0000644000175000017500000000055714163340332021636 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 tmp_ns50wwy/src/spicelib/devices/txl/txlload.c0000644000175000017500000004047714163340332021612 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 ratio1; double f; VI_list_txl *vi; TERM *tms; h *= 0.5e-12; ratio1 = tx->ratio; vi = tx->vi_tail; if (ratio1 > 0.0) { tms = tx->h3_term; f = h * ratio1 * 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 * ratio1 * 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 * ratio1 * 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 * ratio1 * 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) { double tp; tp = ar*br - ai*bi; *ci = ar*bi + ai*br; *cr = tp; return (1); } tmp_ns50wwy/src/spicelib/devices/txl/txlfbr.c0000644000175000017500000000166514163340332021440 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); } tmp_ns50wwy/src/spicelib/devices/txl/txlmpar.c0000644000175000017500000000210114163340332021610 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) { 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); } tmp_ns50wwy/src/spicelib/devices/txl/txldefs.h0000644000175000017500000000447514163340332021617 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*/ tmp_ns50wwy/src/spicelib/devices/txl/txlacct.c0000644000175000017500000000316514163340332021576 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); } tmp_ns50wwy/src/spicelib/devices/txl/txlsetup.c0000644000175000017500000006660314163340332022032 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_in, double a2_in, double a3_in, double x) { double t1, t2; t1 = x*x*x + a1_in*x*x + a2_in*x + a3_in; t2 = 3.0*x*x + 2.0*a1_in*x + a2_in; return(x - t1 / t2); } static int div3(double a1_in, double a2_in, double a3_in, double x, double *p1_in, double *p2_in) { NG_IGNORE(a2_in); *p1_in = a1_in + x; *p2_in = -a3_in / 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_in, double *b2_in, double *b3_in, double *b4_in, double *b5_in) /* float at, bt; */ { double a, b; double y1, y2, y3, y4, y5; a = at; b = bt; y1 = *b1_in = 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_in = y2 / 2.0; *b3_in = y3 / 6.0; *b4_in = y4 / 24.0; *b5_in = 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_in, double eq2_in, double eq3_in, double ep1_in, double ep2_in, double a, double b, double *cr, double *ci) { double d, n; d = (3.0*(a*a-b*b)+2.0*ep1_in*a+ep2_in)*(3.0*(a*a-b*b)+2.0*ep1_in*a+ep2_in); d += (6.0*a*b+2.0*ep1_in*b)*(6.0*a*b+2.0*ep1_in*b); n = -(eq1_in*(a*a-b*b)+eq2_in*a+eq3_in)*(6.0*a*b+2.0*ep1_in*b); n += (2.0*eq1_in*a*b+eq2_in*b)*(3.0*(a*a-b*b)+2.0*ep1_in*a+ep2_in); *ci = n/d; n = (3.0*(a*a-b*b)+2.0*ep1_in*a+ep2_in)*(eq1_in*(a*a-b*b)+eq2_in*a+eq3_in); n += (6.0*a*b+2.0*ep1_in*b)*(2.0*eq1_in*a*b+eq2_in*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_in, double a2_in, double a3_in, double *ex1_in, double *ex2_in, double *ex3_in) { double x, t; double p, q; q = (a1_in*a1_in-3.0*a2_in) / 9.0; p = (2.0*a1_in*a1_in*a1_in-9.0*a1_in*a2_in+27.0*a3_in) / 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_in/3.0; } else { if (p > 0.0) { t = pow(sqrt(-t)+p, 1.0 / 3.0); x = -(t + q / t) - a1_in/3.0; } else if (p == 0.0) { x = -a1_in/3.0; } else { t = pow(sqrt(-t)-p, 1.0 / 3.0); x = (t + q / t) - a1_in/3.0; } } { double ex1a; int i = 0; ex1a = x; for (t = root3(a1_in, a2_in, a3_in, x); ABS(t-x) > 5.0e-4; t = root3(a1_in, a2_in, a3_in, x)) { if (++i == 32) { x = ex1a; 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_in = x; div3(a1_in, a2_in, a3_in, x, &a1_in, &a2_in); t = a1_in * a1_in - 4.0 * a2_in; if (t < 0) { ifImg = 1; printf("***** Two Imaginary Roots.\n"); *ex3_in = 0.5 * sqrt(-t); *ex2_in = -0.5 * a1_in; } else { ifImg = 0; t *= 1.0e-16; t = sqrt(t)*1.0e8; if (a1_in >= 0.0) *ex2_in = t = -0.5 * (a1_in + t); else *ex2_in = t = -0.5 * (a1_in - t); *ex3_in = a2_in / 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_in, double a2_in, double a3_in, double *x1r, double *x2r, double *x3r) { double x, t; double p, q; q = (a1_in*a1_in-3.0*a2_in) / 9.0; p = (2.0*a1_in*a1_in*a1_in-9.0*a1_in*a2_in+27.0*a3_in) / 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_in/3.0; } else { if (p > 0.0) { t = pow(sqrt(-t)+p, 1.0 / 3.0); x = -(t + q / t) - a1_in/3.0; } else if (p == 0.0) { x = -a1_in/3.0; } else { t = pow(sqrt(-t)-p, 1.0 / 3.0); x = (t + q / t) - a1_in/3.0; } } { double x_backup = x; int i = 0; for (t = root3(a1_in, a2_in, a3_in, x); ABS(t-x) > 5.0e-4; t = root3(a1_in, a2_in, a3_in, 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; } } */ *x1r = x; div3(a1_in, a2_in, a3_in, x, &a1_in, &a2_in); t = a1_in * a1_in - 4.0 * a2_in; 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_in >= 0.0) *x2r = t = -0.5 * (a1_in + t); else *x2r = t = -0.5 * (a1_in - t); *x3r = a2_in / t; /* *x2 = 0.5 * (-a1 + t); *x3 = 0.5 * (-a1 - t); */ return(1); } int TXLdevDelete(GENinstance* inst) { VI_list_txl *tmplist, *prevlist; TXLinstance* here = (TXLinstance*)inst; if (here->txline2) tfree(here->txline2); if (here->txline) { prevlist = tmplist = here->txline->vi_head; while(tmplist) { tmplist = tmplist->next; tfree(prevlist); prevlist = tmplist; } tfree(here->txline); } return OK; } tmp_ns50wwy/src/spicelib/devices/txl/txlparam.c0000644000175000017500000000147414163340332021765 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); } tmp_ns50wwy/src/spicelib/devices/txl/txlinit.c0000644000175000017500000000310314163340332021617 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 = TXLdevDelete, .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; } tmp_ns50wwy/src/spicelib/devices/txl/txlmask.c0000644000175000017500000000201314163340332021606 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); } } tmp_ns50wwy/src/spicelib/devices/txl/txlext.h0000644000175000017500000000101314163340332021457 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*); extern int TXLdevDelete(GENinstance*); tmp_ns50wwy/src/spicelib/devices/txl/txl.c0000644000175000017500000000222614163340332020740 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); tmp_ns50wwy/src/spicelib/devices/cap/0000755000175000017500000000000014163340332017717 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/cap/capdefs.h0000644000175000017500000001467114163340332021506 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*/ tmp_ns50wwy/src/spicelib/devices/cap/capgetic.c0000644000175000017500000000165314163340332021647 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); } tmp_ns50wwy/src/spicelib/devices/cap/Makefile.am0000644000175000017500000000102014163340332021744 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 tmp_ns50wwy/src/spicelib/devices/cap/capsupd.c0000644000175000017500000000461414163340332021527 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); } tmp_ns50wwy/src/spicelib/devices/cap/capinit.c0000644000175000017500000000312314163340332021511 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; } tmp_ns50wwy/src/spicelib/devices/cap/capacld.c0000644000175000017500000000165114163340332021455 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); } tmp_ns50wwy/src/spicelib/devices/cap/capsetup.c0000644000175000017500000000706514163340332021717 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); } tmp_ns50wwy/src/spicelib/devices/cap/capsprt.c0000644000175000017500000000257614163340332021551 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); } } } tmp_ns50wwy/src/spicelib/devices/cap/capload.c0000644000175000017500000000612514163340332021472 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); } tmp_ns50wwy/src/spicelib/devices/cap/captemp.c0000644000175000017500000000552414163340332021522 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); } tmp_ns50wwy/src/spicelib/devices/cap/capitf.h0000644000175000017500000000025514163340332021340 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 tmp_ns50wwy/src/spicelib/devices/cap/capparam.c0000644000175000017500000000376714163340332021664 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); } tmp_ns50wwy/src/spicelib/devices/cap/capinit.h0000644000175000017500000000035614163340332021523 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 tmp_ns50wwy/src/spicelib/devices/cap/capmask.c0000644000175000017500000000336014163340332021504 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); } } tmp_ns50wwy/src/spicelib/devices/cap/capsload.c0000644000175000017500000000543114163340332021654 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); } tmp_ns50wwy/src/spicelib/devices/cap/capask.c0000644000175000017500000001351114163340332021326 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); } } tmp_ns50wwy/src/spicelib/devices/cap/capsset.c0000644000175000017500000000201014163340332021516 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); } tmp_ns50wwy/src/spicelib/devices/cap/cap.c0000644000175000017500000000747714163340332020645 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); tmp_ns50wwy/src/spicelib/devices/cap/cappzld.c0000644000175000017500000000237514163340332021527 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); } tmp_ns50wwy/src/spicelib/devices/cap/captrunc.c0000644000175000017500000000126614163340332021707 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); } tmp_ns50wwy/src/spicelib/devices/cap/capmpar.c0000644000175000017500000000425014163340332021507 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); } tmp_ns50wwy/src/spicelib/devices/cap/capext.h0000644000175000017500000000172514163340332021361 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 *); tmp_ns50wwy/src/spicelib/devices/cap/capsoachk.c0000644000175000017500000000227614163340332022026 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; } tmp_ns50wwy/src/spicelib/devices/cap/capsacl.c0000644000175000017500000000355714163340332021503 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); } tmp_ns50wwy/src/spicelib/devices/dev.c0000644000175000017500000003512214163340332020101 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; #define FREE_DLERR_MSG(msg) #else /* ifdef HAS_WINGUI */ #undef BOOLEAN #include typedef FARPROC funptr_t; void *dlopen(const char *, int); funptr_t dlsym(void *, const char *); char *dlerror(void); #define FREE_DLERR_MSG(msg) free_dlerr_msg(msg) static void free_dlerr_msg(char *msg); #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 */ #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 **); extern struct coreInfo_t coreInfo; /* cmexport.c */ #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 "hicum2/hicum2itf.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/mextram/bjt504titf.h" #include "adms/ekv/ekvitf.h" #include "adms/psp102/psp102itf.h" #include "adms/psp103/psp103itf.h" #include "adms/bsimbulk/bsimbulkitf.h" #include "adms/bsimcmg/bsimcmgitf.h" #include "adms/r2_cmc/r2_cmcitf.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_hicum_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_bjt504t_info, (SPICEdev *(*)(void)) get_ekv_info, (SPICEdev *(*)(void)) get_psp102_info, (SPICEdev *(*)(void)) get_psp103_info, (SPICEdev *(*)(void)) get_bsimbulk_info, (SPICEdev *(*)(void)) get_bsimcmg_info, (SPICEdev *(*)(void)) get_r2_cmc_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 what 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", "bjt504t", "ekv", "psp102", "psp103", "bsimbulk", "bsimcmg"} #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", "hicum2"} #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; int dnum = DEVNUM + n; DEVices = TREALLOC(SPICEdev *, DEVices, dnum); DEVicesfl = TREALLOC(int, DEVicesfl, dnum); 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; int utypes = g_evt_num_udn_types + n; g_evt_udn_info = TREALLOC(Evt_Udn_Info_t *, g_evt_udn_info, utypes); 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; } int load_opus(const char *name) { void *lib; char *msg; int num; SPICEdev **devs; Evt_Udn_Info_t **udns; funptr_t fetch; lib = dlopen(name, RTLD_NOW); if (!lib) { msg = dlerror(); printf("Error opening code model \"%s\": %s\n", name, msg); FREE_DLERR_MSG(msg); return 1; } /* Get code models defined by the library */ if ((fetch = dlsym(lib, "CMdevNum")) != (funptr_t) NULL) { num = *(*(int * (*)(void)) fetch)(); fetch = dlsym(lib, "CMdevs"); if (fetch != (funptr_t) NULL) { devs = (*(SPICEdev ** (*)(void)) fetch)(); } else { msg = dlerror(); printf("Error getting the list of devices: %s\n", msg); FREE_DLERR_MSG(msg); return 1; } } else { msg = dlerror(); printf("Error finding the number of devices: %s\n", msg); FREE_DLERR_MSG(msg); return 1; } add_device(num, devs, 1); #ifdef TRACE printf("Got %d devices.\n", num); #endif /* Get user-defined ndes defined by the library */ if ((fetch = dlsym(lib, "CMudnNum")) != (funptr_t) NULL) { num = *(*(int * (*)(void)) fetch)(); fetch = dlsym(lib, "CMudns"); if (fetch != (funptr_t) NULL) { udns = (*(Evt_Udn_Info_t ** (*)(void)) fetch)(); } else { msg = dlerror(); printf("Error getting the list of user-defined types: %s\n", msg); FREE_DLERR_MSG(msg); return 1; } } else { msg = dlerror(); printf("Error finding the number of user-defined types: %s\n", msg); FREE_DLERR_MSG(msg); return 1; } add_udn(num, udns); #ifdef TRACE printf("Got %d udns.\n", num); #endif /* Give the code model access to facilities provided by ngspice. */ if ((fetch = dlsym(lib,"CMgetCoreItfPtr")) != (funptr_t) NULL) { const struct coreInfo_t ** const core = (const struct coreInfo_t **const) (*(struct coreInfo_t ** (*)(void)) fetch)(); *core = &coreInfo; } else { msg = dlerror(); printf("Error getting interface pointer: %s\n", msg); FREE_DLERR_MSG(msg); return 1; } return 0; } /* end of function load_opus */ #if defined(__MINGW32__) || defined(HAS_WINGUI) || defined(_MSC_VER) /* For reporting error message if formatting fails */ static const char errstr_fmt[] = "Unable to find message in dlerr(). System code = %lu"; static char errstr[sizeof errstr_fmt - 3 + 3 * sizeof(unsigned long)]; /* Emulations of POSIX dlopen(), dlsym(), and dlerror(). */ 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; DWORD rc = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); if (rc == 0) { /* FormatMessage failed */ (void) sprintf(errstr, errstr_fmt, (unsigned long) GetLastError()); return errstr; } return lpMsgBuf; /* Return the formatted message */ } /* end of function dlerror */ /* Free message related to dynamic loading */ static void free_dlerr_msg(char *msg) { if (msg != errstr) { /* msg is an allocation */ LocalFree(msg); } } /* end of function free_dlerr_msg */ #endif /* Windows emulation of dlopen, dlsym, and dlerr */ #endif /*-------------------- end of XSPICE additions ----------------------*/ tmp_ns50wwy/src/spicelib/devices/hicum2/0000755000175000017500000000000014163340332020343 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/hicum2/hicum2mask.c0000644000175000017500000003463514163340332022565 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "ngspice/cktdefs.h" #include "ngspice/devdefs.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #define MIN_R 0.001 /*ARGSUSED*/ int HICUMmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value) { HICUMmodel *model = (HICUMmodel*)instPtr; NG_IGNORE(ckt); switch(which) { //Circuit simulator specific parameters case HICUM_MOD_TYPE: if (model->HICUMtype == NPN) value->sValue = "npn"; else value->sValue = "pnp"; return(OK); case HICUM_MOD_TNOM: value->rValue = model->HICUMtnom; return(OK); case HICUM_MOD_VERSION : value->sValue = model->HICUMversion; return(OK); //Transfer current case HICUM_MOD_C10: value->rValue = model->HICUMc10; return(OK); case HICUM_MOD_QP0: value->rValue = model->HICUMqp0; return(OK); case HICUM_MOD_ICH: value->rValue = model->HICUMich; return(OK); case HICUM_MOD_HF0: value->rValue = model->HICUMhf0; return(OK); case HICUM_MOD_HFE: value->rValue = model->HICUMhfe; return(OK); case HICUM_MOD_HFC: value->rValue = model->HICUMhfc; return(OK); case HICUM_MOD_HJEI: value->rValue = model->HICUMhjei; return(OK); case HICUM_MOD_AHJEI: value->rValue = model->HICUMahjei; return(OK); case HICUM_MOD_RHJEI: value->rValue = model->HICUMrhjei; return(OK); case HICUM_MOD_HJCI: value->rValue = model->HICUMhjci; return(OK); //Base-Emitter diode: case HICUM_MOD_IBEIS: value->rValue = model->HICUMibeis; return(OK); case HICUM_MOD_MBEI: value->rValue = model->HICUMmbei; return(OK); case HICUM_MOD_IREIS: value->rValue = model->HICUMireis; return(OK); case HICUM_MOD_MREI: value->rValue = model->HICUMmrei; return(OK); case HICUM_MOD_IBEPS: value->rValue = model->HICUMibeps; return(OK); case HICUM_MOD_MBEP: value->rValue = model->HICUMmbep; return(OK); case HICUM_MOD_IREPS: value->rValue = model->HICUMireps; return(OK); case HICUM_MOD_MREP: value->rValue = model->HICUMmrep; return(OK); case HICUM_MOD_MCF: value->rValue = model->HICUMmcf; return(OK); case HICUM_MOD_TBHREC: value->rValue = model->HICUMtbhrec; return(OK); case HICUM_MOD_IBCIS: value->rValue = model->HICUMibcis; return(OK); case HICUM_MOD_MBCI: value->rValue = model->HICUMmbci; return(OK); case HICUM_MOD_IBCXS: value->rValue = model->HICUMibcxs; return(OK); case HICUM_MOD_MBCX: value->rValue = model->HICUMmbcx; return(OK); case HICUM_MOD_IBETS: value->rValue = model->HICUMibets; return(OK); case HICUM_MOD_ABET: value->rValue = model->HICUMabet; return(OK); case HICUM_MOD_TUNODE: value->rValue = model->HICUMtunode = value->iValue; return(OK); case HICUM_MOD_FAVL: value->rValue = model->HICUMfavl; return(OK); case HICUM_MOD_QAVL: value->rValue = model->HICUMqavl; return(OK); case HICUM_MOD_KAVL: value->rValue = model->HICUMkavl; return(OK); case HICUM_MOD_ALFAV: value->rValue = model->HICUMalfav; return(OK); case HICUM_MOD_ALQAV: value->rValue = model->HICUMalqav; return(OK); case HICUM_MOD_ALKAV: value->rValue = model->HICUMalkav; return(OK); case HICUM_MOD_RBI0: value->rValue = model->HICUMrbi0; return(OK); case HICUM_MOD_RBX: value->rValue = model->HICUMrbx; return(OK); case HICUM_MOD_FGEO: value->rValue = model->HICUMfgeo; return(OK); case HICUM_MOD_FDQR0: value->rValue = model->HICUMfdqr0; return(OK); case HICUM_MOD_FCRBI: value->rValue = model->HICUMfcrbi; return(OK); case HICUM_MOD_FQI: value->rValue = model->HICUMfqi; return(OK); case HICUM_MOD_RE: value->rValue = model->HICUMre; return(OK); case HICUM_MOD_RCX: value->rValue = model->HICUMrcx; return(OK); case HICUM_MOD_ITSS: value->rValue = model->HICUMitss; return(OK); case HICUM_MOD_MSF: value->rValue = model->HICUMmsf; return(OK); case HICUM_MOD_ISCS: value->rValue = model->HICUMiscs; return(OK); case HICUM_MOD_MSC: value->rValue = model->HICUMmsc; return(OK); case HICUM_MOD_TSF: value->rValue = model->HICUMtsf; return(OK); case HICUM_MOD_RSU: value->rValue = model->HICUMrsu; return(OK); case HICUM_MOD_CSU: value->rValue = model->HICUMcsu; return(OK); case HICUM_MOD_CJEI0: value->rValue = model->HICUMcjei0; return(OK); case HICUM_MOD_VDEI: value->rValue = model->HICUMvdei; return(OK); case HICUM_MOD_ZEI: value->rValue = model->HICUMzei; return(OK); case HICUM_MOD_AJEI: value->rValue = model->HICUMajei; return(OK); case HICUM_MOD_CJEP0: value->rValue = model->HICUMcjep0; return(OK); case HICUM_MOD_VDEP: value->rValue = model->HICUMvdep; return(OK); case HICUM_MOD_ZEP: value->rValue = model->HICUMzep; return(OK); case HICUM_MOD_AJEP: value->rValue = model->HICUMajep; return(OK); case HICUM_MOD_CJCI0: value->rValue = model->HICUMcjci0; return(OK); case HICUM_MOD_VDCI: value->rValue = model->HICUMvdci; return(OK); case HICUM_MOD_ZCI: value->rValue = model->HICUMzci; return(OK); case HICUM_MOD_VPTCI: value->rValue = model->HICUMvptci; return(OK); case HICUM_MOD_CJCX0: value->rValue = model->HICUMcjcx0; return(OK); case HICUM_MOD_VDCX: value->rValue = model->HICUMvdcx; return(OK); case HICUM_MOD_ZCX: value->rValue = model->HICUMzcx; return(OK); case HICUM_MOD_VPTCX: value->rValue = model->HICUMvptcx; return(OK); case HICUM_MOD_FBCPAR: value->rValue = model->HICUMfbcpar; return(OK); case HICUM_MOD_FBEPAR: value->rValue = model->HICUMfbepar; return(OK); case HICUM_MOD_CJS0: value->rValue = model->HICUMcjs0; return(OK); case HICUM_MOD_VDS: value->rValue = model->HICUMvds; return(OK); case HICUM_MOD_ZS: value->rValue = model->HICUMzs; return(OK); case HICUM_MOD_VPTS: value->rValue = model->HICUMvpts; return(OK); case HICUM_MOD_CSCP0: value->rValue = model->HICUMcscp0; return(OK); case HICUM_MOD_VDSP: value->rValue = model->HICUMvdsp; return(OK); case HICUM_MOD_ZSP: value->rValue = model->HICUMzsp; return(OK); case HICUM_MOD_VPTSP: value->rValue = model->HICUMvptsp; return(OK); case HICUM_MOD_T0: value->rValue = model->HICUMt0; return(OK); case HICUM_MOD_DT0H: value->rValue = model->HICUMdt0h; return(OK); case HICUM_MOD_TBVL: value->rValue = model->HICUMtbvl; return(OK); case HICUM_MOD_TEF0: value->rValue = model->HICUMtef0; return(OK); case HICUM_MOD_GTFE: value->rValue = model->HICUMgtfe; return(OK); case HICUM_MOD_THCS: value->rValue = model->HICUMthcs; return(OK); case HICUM_MOD_AHC: value->rValue = model->HICUMahc; return(OK); case HICUM_MOD_FTHC: value->rValue = model->HICUMfthc; return(OK); case HICUM_MOD_RCI0: value->rValue = model->HICUMrci0; return(OK); case HICUM_MOD_VLIM: value->rValue = model->HICUMvlim; return(OK); case HICUM_MOD_VCES: value->rValue = model->HICUMvces; return(OK); case HICUM_MOD_VPT: value->rValue = model->HICUMvpt; return(OK); case HICUM_MOD_AICK: value->rValue = model->HICUMaick; return(OK); case HICUM_MOD_DELCK: value->rValue = model->HICUMdelck; return(OK); case HICUM_MOD_TR: value->rValue = model->HICUMtr; return(OK); case HICUM_MOD_VCBAR: value->rValue = model->HICUMvcbar; return(OK); case HICUM_MOD_ICBAR: value->rValue = model->HICUMicbar; return(OK); case HICUM_MOD_ACBAR: value->rValue = model->HICUMacbar; return(OK); case HICUM_MOD_CBEPAR: value->rValue = model->HICUMcbepar; return(OK); case HICUM_MOD_CBCPAR: value->rValue = model->HICUMcbcpar; return(OK); case HICUM_MOD_ALQF: value->rValue = model->HICUMalqf; return(OK); case HICUM_MOD_ALIT: value->rValue = model->HICUMalit; return(OK); case HICUM_MOD_FLNQS: value->iValue = model->HICUMflnqs; return(OK); case HICUM_MOD_KF: value->rValue = model->HICUMkf; return(OK); case HICUM_MOD_AF: value->rValue = model->HICUMaf; return(OK); case HICUM_MOD_CFBE: value->rValue = model->HICUMcfbe; return(OK); case HICUM_MOD_FLCONO: value->iValue = model->HICUMflcono; return(OK); case HICUM_MOD_KFRE: value->rValue = model->HICUMkfre; return(OK); case HICUM_MOD_AFRE: value->rValue = model->HICUMafre; return(OK); case HICUM_MOD_LATB: value->rValue = model->HICUMlatb; return(OK); case HICUM_MOD_LATL: value->rValue = model->HICUMlatl; return(OK); case HICUM_MOD_VGB: value->rValue = model->HICUMvgb; return(OK); case HICUM_MOD_ALT0: value->rValue = model->HICUMalt0; return(OK); case HICUM_MOD_KT0: value->rValue = model->HICUMkt0; return(OK); case HICUM_MOD_ZETACI: value->rValue = model->HICUMzetaci; return(OK); case HICUM_MOD_ALVS: value->rValue = model->HICUMalvs; return(OK); case HICUM_MOD_ALCES: value->rValue = model->HICUMalces; return(OK); case HICUM_MOD_ZETARBI: value->rValue = model->HICUMzetarbi; return(OK); case HICUM_MOD_ZETARBX: value->rValue = model->HICUMzetarbx; return(OK); case HICUM_MOD_ZETARCX: value->rValue = model->HICUMzetarcx; return(OK); case HICUM_MOD_ZETARE: value->rValue = model->HICUMzetare; return(OK); case HICUM_MOD_ZETACX: value->rValue = model->HICUMzetacx; return(OK); case HICUM_MOD_VGE: value->rValue = model->HICUMvge; return(OK); case HICUM_MOD_VGC: value->rValue = model->HICUMvgc; return(OK); case HICUM_MOD_VGS: value->rValue = model->HICUMvgs; return(OK); case HICUM_MOD_F1VG: value->rValue = model->HICUMf1vg; return(OK); case HICUM_MOD_F2VG: value->rValue = model->HICUMf2vg; return(OK); case HICUM_MOD_ZETACT: value->rValue = model->HICUMzetact; return(OK); case HICUM_MOD_ZETABET: value->rValue = model->HICUMzetabet; return(OK); case HICUM_MOD_ALB: value->rValue = model->HICUMalb; return(OK); case HICUM_MOD_DVGBE: value->rValue = model->HICUMdvgbe; return(OK); case HICUM_MOD_ZETAHJEI: value->rValue = model->HICUMzetahjei; return(OK); case HICUM_MOD_ZETAVGBE: value->rValue = model->HICUMzetavgbe; return(OK); case HICUM_MOD_FLSH: value->iValue = model->HICUMflsh; return(OK); case HICUM_MOD_RTH: value->rValue = model->HICUMrth; return(OK); case HICUM_MOD_ZETARTH: value->rValue = model->HICUMzetarth; return(OK); case HICUM_MOD_ALRTH: value->rValue = model->HICUMalrth; return(OK); case HICUM_MOD_CTH: value->rValue = model->HICUMcth; return(OK); case HICUM_MOD_FLCOMP: value->rValue = model->HICUMflcomp; return(OK); case HICUM_MOD_VBE_MAX: value->rValue = model->HICUMvbeMax; return(OK); case HICUM_MOD_VBC_MAX: value->rValue = model->HICUMvbcMax; return(OK); case HICUM_MOD_VCE_MAX: value->rValue = model->HICUMvceMax; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/hicum2/Makefile.am0000644000175000017500000000135614163340332022404 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_LTLIBRARIES = libhicum2.la libhicum2_la_SOURCES = \ hicum2.c \ hicum2acld.c \ hicum2ask.c \ hicum2conv.c \ hicum2defs.h \ hicum2ext.h \ hicum2getic.c \ hicum2init.c \ hicum2init.h \ hicum2itf.h \ hicumL2.hpp \ hicumL2.cpp \ hicumL2temp.hpp \ hicumL2temp.cpp \ hicum2mask.c \ hicum2mpar.c \ hicum2noise.c \ hicum2param.c \ hicum2pzld.c \ hicum2setup.c \ hicum2soachk.c \ hicum2trunc.c AM_CFLAGS = -O -g -Wall -Wextra -I$(top_srcdir)/src/include AM_CPPFLAGS = @AM_CPPFLAGS@ -O -g -Wall -Wextra AM_CXXFLAGS = -I$(top_srcdir)/src/include/cppduals -I$(top_srcdir)/src/include -std=c++11 -O -g -Wall -Wextra MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2soachk.c0000644000175000017500000000441614163340332023074 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hicum2defs.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/cpdefs.h" int HICUMsoaCheck(CKTcircuit *ckt, GENmodel *inModel) { HICUMmodel *model = (HICUMmodel *) inModel; HICUMinstance *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 = HICUMnextModel(model)) { for (here = HICUMinstances(model); here; here=HICUMnextInstance(here)) { vbe = fabs(ckt->CKTrhsOld [here->HICUMbaseNode] - ckt->CKTrhsOld [here->HICUMemitNode]); vbc = fabs(ckt->CKTrhsOld [here->HICUMbaseNode] - ckt->CKTrhsOld [here->HICUMcollNode]); vce = fabs(ckt->CKTrhsOld [here->HICUMcollNode] - ckt->CKTrhsOld [here->HICUMemitNode]); if (vbe > model->HICUMvbeMax) if (warns_vbe < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbe|=%g has exceeded Vbe_max=%g\n", vbe, model->HICUMvbeMax); warns_vbe++; } if (vbc > model->HICUMvbcMax) if (warns_vbc < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vbc|=%g has exceeded Vbc_max=%g\n", vbc, model->HICUMvbcMax); warns_vbc++; } if (vce > model->HICUMvceMax) if (warns_vce < maxwarns) { soa_printf(ckt, (GENinstance*) here, "|Vce|=%g has exceeded Vce_max=%g\n", vce, model->HICUMvceMax); warns_vce++; } } } return OK; } tmp_ns50wwy/src/spicelib/devices/hicum2/hicumL2temp.hpp0000644000175000017500000000055314163340332023250 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef hicumL2_temp #define hicumL2_temp #include "hicum2defs.h" #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif #endif /* hicumL2_temp */tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2trunc.c0000644000175000017500000000256114163340332022756 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine performs truncation error calculations for * HICUMs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep) { HICUMmodel *model = (HICUMmodel*)inModel; HICUMinstance *here; for( ; model != NULL; model = HICUMnextModel(model)) { for(here=HICUMinstances(model);here!=NULL; here = HICUMnextInstance(here)){ CKTterr(here->HICUMqrbi, ckt, timeStep); CKTterr(here->HICUMqjei, ckt, timeStep); CKTterr(here->HICUMqf, ckt, timeStep); CKTterr(here->HICUMqjci, ckt, timeStep); CKTterr(here->HICUMqr, ckt, timeStep); CKTterr(here->HICUMqjep, ckt, timeStep); CKTterr(here->HICUMqjcx0_i, ckt, timeStep); CKTterr(here->HICUMqjcx0_ii, ckt, timeStep); CKTterr(here->HICUMqdsu, ckt, timeStep); CKTterr(here->HICUMqjs, ckt, timeStep); CKTterr(here->HICUMqscp, ckt, timeStep); } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2ext.h0000644000175000017500000000220614163340332022424 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef __HICUMEXT_H #define __HICUMEXT_H extern int HICUMacLoad(GENmodel *,CKTcircuit*); extern int HICUMask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); extern int HICUMconvTest(GENmodel*,CKTcircuit*); extern int HICUMmDelete(GENmodel*); extern int HICUMgetic(GENmodel*,CKTcircuit*); //extern int HICUMload(GENmodel*,CKTcircuit*);//moved to hicumL2.hpp extern int HICUMmAsk(CKTcircuit*,GENmodel*,int,IFvalue*); extern int HICUMmParam(int,IFvalue*,GENmodel*); extern int HICUMparam(int,IFvalue*,GENinstance*,IFvalue*); extern int HICUMpzLoad(GENmodel*, CKTcircuit*, SPcomplex*); extern int HICUMsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); extern int HICUMunsetup(GENmodel*,CKTcircuit*); // extern int HICUMtemp(GENmodel*,CKTcircuit*); // moved to hicum2temp.hpp extern int HICUMtrunc(GENmodel*,CKTcircuit*,double*); extern int HICUMnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); extern int HICUMsoaCheck(CKTcircuit *, GENmodel *); #endif tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2defs.h0000644000175000017500000010044314163340332022547 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef HICUM #define HICUM #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 HICUM noise sources */ enum { HICUMRCNOIZ = 0, HICUMRBNOIZ, HICUMRBINOIZ, HICUMRENOIZ, HICUMRSNOIZ, HICUMIAVLNOIZ, HICUMIBCINOIZ, HICUMIBEPNOIZ, HICUMIBCXNOIZ, HICUMIJSCNOIZ, HICUMITNOIZ, HICUMIBEINOIZ, HICUMFLBENOIZ, HICUMFLRENOIZ, HICUMTOTNOIZ, /* finally, the number of noise sources */ HICUMNSRCS }; typedef struct sDualDouble { double rpart; double dpart; } dual_double; /* data needed to describe a single instance */ typedef struct sHICUMinstance { struct GENinstance gen; #define HICUMmodPtr(inst) ((struct sHICUMmodel *)((inst)->gen.GENmodPtr)) #define HICUMnextInstance(inst) ((struct sHICUMinstance *)((inst)->gen.GENnextInstance)) #define HICUMname gen.GENname #define HICUMstate gen.GENstate const int HICUMcollNode; /* number of collector node of hicum */ const int HICUMbaseNode; /* number of base node of hicum */ const int HICUMemitNode; /* number of emitter node of hicum */ const int HICUMsubsNode; /* number of substrate node of hicum */ int HICUMtempNode; /* number of the temperature node of the hicum */ int HICUMcollCINode; /* number of internal collector node of hicum */ int HICUMbaseBINode; /* number of internal base node of hicum */ int HICUMemitEINode; /* number of internal emitter node of hicum */ int HICUMbaseBPNode; /* number of internal base node of hicum */ int HICUMsubsSINode; /* number of internal substrate node */ int HICUMxfNode; /* number of internal excess phase node qdei */ int HICUMxf1Node; /* number of internal excess phase 1 node itf */ int HICUMxf2Node; /* number of internal excess phase 2 node itf */ double HICUMarea; /* area factor for the hicum */ //initial conditions double HICUMicVBE; /* initial condition inner B-E branch */ double HICUMicVCE; /* initial condition inner C-E branch */ double HICUMicVCS; /* initial condition inner C-S branch */ double HICUMtemp; /* instance temperature */ double HICUMtemp_Vrth;/* derivative device temperature to temperature at thermal node */ double HICUMdtemp; /* instance delta temperature */ double HICUMdtemp_sh; /* instance delta temperature because of self-heating */ double HICUMm; /* multiply factor for the hicum */ double HICUMvt0; dual_double HICUMvt; dual_double HICUMdT; dual_double HICUMibeis_t; dual_double HICUMireis_t; dual_double HICUMibeps_t; dual_double HICUMireps_t; dual_double HICUMibcis_t; dual_double HICUMibcxs_t; dual_double HICUMitss_t; dual_double HICUMiscs_t; dual_double HICUMqp0_t; dual_double HICUMvlim_t; dual_double HICUMtef0_t; dual_double HICUMc10_t; dual_double HICUMrci0_t; dual_double HICUMvces_t; dual_double HICUMt0_t; dual_double HICUMthcs_t; dual_double HICUMfavl_t; dual_double HICUMqavl_t; dual_double HICUMkavl_t; dual_double HICUMrbi0_t; dual_double HICUMibets_t; dual_double HICUMabet_t; dual_double HICUMcjcx01_t; dual_double HICUMcjcx02_t; dual_double HICUMrcx_t; dual_double HICUMrbx_t; dual_double HICUMre_t; dual_double HICUMtsf_t; dual_double HICUMcscp0_t; dual_double HICUMvdsp_t; dual_double HICUMvptsp_t; dual_double HICUMahjei_t; dual_double HICUMhjei0_t; dual_double HICUMhf0_t; dual_double HICUMhfc_t; dual_double HICUMhfe_t; dual_double HICUMrth_t; dual_double HICUMvdei_t; dual_double HICUMajei_t; dual_double HICUMcjci0_t; dual_double HICUMvdci_t; dual_double HICUMvptci_t; dual_double HICUMvdep_t; dual_double HICUMajep_t; dual_double HICUMcjep0_t; dual_double HICUMcjei0_t; dual_double HICUMvdcx_t; dual_double HICUMvptcx_t; dual_double HICUMcjs0_t; dual_double HICUMvds_t; dual_double HICUMvpts_t; //model variables that depend on "area" and "m" and are needed in temp double HICUMqp0_scaled; double HICUMc10_scaled; double HICUMicbar_scaled; double HICUMrth_scaled; double HICUMcth_scaled; double HICUMcjei0_scaled; double HICUMibeis_scaled; double HICUMireis_scaled; double HICUMibeps_scaled; double HICUMireps_scaled; double HICUMcjep0_scaled; double HICUMcbepar_scaled; double HICUMibets_scaled; double HICUMibcis_scaled; double HICUMcjci0_scaled; double HICUMcjcx0_scaled; double HICUMcbcpar_scaled; double HICUMibcxs_scaled; double HICUMqavl_scaled; double HICUMre_scaled; double HICUMrci0_scaled; double HICUMrbx_scaled; double HICUMrcx_scaled; double HICUMrbi0_scaled; double HICUMkf_scaled; double HICUMkfre_scaled; double HICUMrbi; double HICUMiavl; double HICUMpterm; double HICUMtf; double HICUMick; double *HICUMcollCollPtr; /* pointer to sparse matrix at * (collector,collector) */ double *HICUMbaseBasePtr; /* pointer to sparse matrix at * (base,base) */ double *HICUMemitEmitPtr; /* pointer to sparse matrix at * (emitter,emitter) */ double *HICUMsubsSubsPtr; /* pointer to sparse matrix at * (substrate,substrate) */ double *HICUMcollCICollCIPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *HICUMbaseBIBaseBIPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *HICUMbaseBPBaseBPPtr; /* pointer to sparse matrix at * (collector prime,collector prime) */ double *HICUMemitEIEmitEIPtr; /* pointer to sparse matrix at * (emitter prime,emitter prime) */ double *HICUMemitEIXfPtr; /* pointer to sparse matrix at * (emitter prime,xf) */ double *HICUMbaseBIXfPtr; /* pointer to sparse matrix at * (base prime,xf) */ double *HICUMsubsSISubsSIPtr; /* pointer to sparse matrix at * (substrate prime, substrate prime) */ double *HICUMbaseEmitPtr; /* pointer to sparse matrix at * (base,emit) */ double *HICUMemitBasePtr; /* pointer to sparse matrix at * (emit,base) */ double *HICUMcollCollCIPtr; /* pointer to sparse matrix at * (collector,collector prime) */ double *HICUMbaseBaseBPPtr; /* pointer to sparse matrix at * (base,base prime) */ double *HICUMemitEmitEIPtr; /* pointer to sparse matrix at * (emitter,emitter prime) */ double *HICUMsubsSubsSIPtr; /* pointer to sparse matrix at * (substrate, Substrate connection) */ double *HICUMcollCIBaseBIPtr; /* pointer to sparse matrix at * (collector prime,base) */ double *HICUMcollCIEmitEIPtr; /* pointer to sparse matrix at * (collector prime,emitter prime) */ double *HICUMbaseBPBaseBIPtr; /* pointer to sparse matrix at * (base prime,emitter prime) */ double *HICUMbaseBPEmitEIPtr; /* pointer to sparse matrix at * (base prime,emitter prime) */ double *HICUMbaseBPSubsSIPtr; /* pointer to sparse matrix at * (base prime,emitter prime) */ double *HICUMbaseBIEmitEIPtr; /* pointer to sparse matrix at * (base prime,emitter prime) */ double *HICUMcollCICollPtr; /* pointer to sparse matrix at * (collector prime,collector) */ double *HICUMbaseBPBasePtr; /* pointer to sparse matrix at * (base prime,base ) */ double *HICUMemitEIEmitPtr; /* pointer to sparse matrix at * (emitter prime,emitter) */ double *HICUMsubsSISubsPtr; /* pointer to sparse matrix at * (Substrate connection, substrate) */ double *HICUMbaseBPCollCIPtr; /* pointer to sparse matrix at * (base,collector prime) */ double *HICUMcollCIBaseBPPtr; /* pointer to sparse matrix at * (collector prime,base) */ double *HICUMbaseBICollCIPtr; /* pointer to sparse matrix at * (base,collector prime) */ double *HICUMemitEICollCIPtr; /* pointer to sparse matrix at * (emitter prime,collector prime) */ double *HICUMsubsSICollCIPtr; /* pointer to sparse matrix at * (substrate,collector prime) */ double *HICUMcollCISubsSIPtr; /* pointer to sparse matrix at * (collector prime,substrate) */ double *HICUMbaseBIBaseBPPtr; /* pointer to sparse matrix at * (base prime,emitter prime) */ double *HICUMemitEIBaseBPPtr; /* pointer to sparse matrix at * (emitter prime,base prime) */ double *HICUMsubsSIBaseBPPtr; /* pointer to sparse matrix at * (substrate,base) */ double *HICUMsubsSIBaseBIPtr; /* pointer to sparse matrix at * (substrate,base) */ double *HICUMemitEIBaseBIPtr; /* pointer to sparse matrix at * (emitter prime,base prime) */ double *HICUMsubsTempPtr; /* pointer to sparse matrix at * (subs ,T) */ double *HICUMcollCIBasePtr; double *HICUMbaseCollCIPtr; double *HICUMbaseBPEmitPtr; double *HICUMemitBaseBPPtr; double *HICUMsubsCollPtr; double *HICUMcollSubsPtr; /* excess phase */ double *HICUMxfXfPtr; double *HICUMxfBaseBIPtr; double *HICUMxfEmitEIPtr; double *HICUMxfCollCIPtr; double *HICUMxfTempPtr; double *HICUMxf1Xf1Ptr; double *HICUMxf1TempPtr; double *HICUMxf1BaseBIPtr; double *HICUMxf1EmitEIPtr; double *HICUMxf1CollCIPtr; double *HICUMxf1Xf2Ptr; double *HICUMxf2Xf1Ptr; double *HICUMxf2TempPtr; double *HICUMxf2BaseBIPtr; double *HICUMxf2EmitEIPtr; double *HICUMxf2CollCIPtr; double *HICUMxf2Xf2Ptr; double *HICUMemitXf2Ptr; double *HICUMemitEIXf2Ptr; double *HICUMcollCIXf2Ptr; /* self heating */ double *HICUMcollTempPtr; double *HICUMbaseTempPtr; double *HICUMemitTempPtr; double *HICUMcollCItempPtr; double *HICUMbaseBItempPtr; double *HICUMbaseBPtempPtr; double *HICUMemitEItempPtr; double *HICUMsubsSItempPtr; double *HICUMtempCollPtr; double *HICUMtempBasePtr; double *HICUMtempEmitPtr; double *HICUMtempCollCIPtr; double *HICUMtempBaseBIPtr; double *HICUMtempBaseBPPtr; double *HICUMtempEmitEIPtr; double *HICUMtempSubsSIPtr; double *HICUMtempTempPtr; unsigned HICUMareaGiven :1; /* flag to indicate area was specified */ unsigned HICUMoff :1; /* 'off' flag for hicum */ unsigned HICUMicVBEGiven :1; /* flag to indicate VBE init. cond. given */ unsigned HICUMicVCEGiven :1; /* flag to indicate VCE init. cond. given */ unsigned HICUMicVCSGiven :1; /* flag to indicate VCS init. cond. given */ unsigned HICUMtempGiven :1; /* temperature given for hicum instance*/ unsigned HICUMdtempGiven :1; /* delta temperature given for hicum instance*/ unsigned HICUMmGiven :1; /* flag to indicate multiplier was specified */ double HICUMcaprbi; double HICUMcapdeix; double HICUMcapjei; double HICUMcapdci; double HICUMcapjci; double HICUMcapjep; double HICUMcapjcx_t_i; double HICUMcapjcx_t_ii; double HICUMcapdsu; double HICUMcapjs; double HICUMcapscp; double HICUMcapsu; double HICUMcapcth; //Caps due to coupling between branches double HICUMqrbi_Vbiei; double HICUMqrbi_Vbici; double HICUMqrbi_Vrth; double HICUMqjei_Vrth; double HICUMqjep_Vrth; double HICUMqf_Vbici; double HICUMqf_Vxf; double HICUMqf_Vrth; double HICUMqr_Vbiei; double HICUMqr_Vrth; double HICUMqjci_Vrth; double HICUMqjcx0_i_Vrth; double HICUMqjcx0_ii_Vrth; double HICUMqdsu_Vrth; double HICUMqdsu_Vsici; double HICUMqjs_Vrth; double HICUMqscp_Vrth; double HICUMicth_dT; double HICUMcapxf; double HICUMtVcrit; double HICUMbetadc; #ifndef NONOISE double HICUMnVar[NSTATVARS][HICUMNSRCS]; #else /*NONOISE*/ double **HICUMnVar; #endif /*NONOISE*/ /* the above to avoid allocating memory when it is not needed */ } HICUMinstance; /* entries in the state vector for hicum: */ #define HICUMvbiei HICUMstate #define HICUMvbici HICUMstate+1 #define HICUMvbpei HICUMstate+2 #define HICUMvbpbi HICUMstate+3 #define HICUMvbpci HICUMstate+4 #define HICUMvsici HICUMstate+5 #define HICUMvcic HICUMstate+6 #define HICUMvbbp HICUMstate+7 #define HICUMveie HICUMstate+8 #define HICUMvrth HICUMstate+9 #define HICUMvxf HICUMstate+10 #define HICUMvxf1 HICUMstate+11 #define HICUMvxf2 HICUMstate+12 #define HICUMibiei HICUMstate+13 #define HICUMibiei_Vbiei HICUMstate+14 #define HICUMibiei_Vxf HICUMstate+15 #define HICUMibiei_Vbici HICUMstate+16 #define HICUMibiei_Vrth HICUMstate+17 #define HICUMibpei HICUMstate+18 #define HICUMibpei_Vbpei HICUMstate+19 #define HICUMibpei_Vrth HICUMstate+20 #define HICUMiciei HICUMstate+21 #define HICUMiciei_Vbiei HICUMstate+22 #define HICUMiciei_Vbici HICUMstate+23 #define HICUMiciei_Vxf2 HICUMstate+24 #define HICUMiciei_Vrth HICUMstate+25 #define HICUMibici HICUMstate+26 #define HICUMibici_Vbici HICUMstate+27 #define HICUMibici_Vbiei HICUMstate+28 #define HICUMibici_Vrth HICUMstate+29 #define HICUMibpbi HICUMstate+30 #define HICUMibpbi_Vbpbi HICUMstate+31 #define HICUMibpbi_Vbiei HICUMstate+32 #define HICUMibpbi_Vbici HICUMstate+33 #define HICUMibpbi_Vrth HICUMstate+34 #define HICUMibpci HICUMstate+35 #define HICUMibpci_Vbpci HICUMstate+36 #define HICUMibpci_Vrth HICUMstate+37 #define HICUMisici HICUMstate+38 #define HICUMisici_Vsici HICUMstate+39 #define HICUMisici_Vrth HICUMstate+40 #define HICUMibpsi HICUMstate+41 #define HICUMibpsi_Vbpci HICUMstate+42 #define HICUMibpsi_Vsici HICUMstate+43 #define HICUMibpsi_Vrth HICUMstate+44 #define HICUMisis_Vsis HICUMstate+45 #define HICUMieie HICUMstate+46 // needed for re-flicker noise #define HICUMieie_Vrth HICUMstate+47 #define HICUMqrbi HICUMstate+48 #define HICUMcqrbi HICUMstate+49 #define HICUMqjei HICUMstate+50 #define HICUMcqjei HICUMstate+51 #define HICUMqf HICUMstate+52 #define HICUMcqf HICUMstate+53 #define HICUMqr HICUMstate+54 #define HICUMcqr HICUMstate+55 #define HICUMqjci HICUMstate+56 #define HICUMcqjci HICUMstate+57 #define HICUMqjep HICUMstate+58 #define HICUMcqjep HICUMstate+59 #define HICUMqjcx0_i HICUMstate+60 #define HICUMcqcx0_t_i HICUMstate+61 #define HICUMqjcx0_ii HICUMstate+62 #define HICUMcqcx0_t_ii HICUMstate+63 #define HICUMqdsu HICUMstate+64 #define HICUMcqdsu HICUMstate+65 #define HICUMqjs HICUMstate+66 #define HICUMcqjs HICUMstate+67 #define HICUMqscp HICUMstate+68 #define HICUMcqscp HICUMstate+69 #define HICUMqbepar1 HICUMstate+70 #define HICUMcqbepar1 HICUMstate+71 #define HICUMgqbepar1 HICUMstate+72 #define HICUMqbepar2 HICUMstate+73 #define HICUMcqbepar2 HICUMstate+74 #define HICUMgqbepar2 HICUMstate+75 #define HICUMqbcpar1 HICUMstate+76 #define HICUMcqbcpar1 HICUMstate+77 #define HICUMgqbcpar1 HICUMstate+78 #define HICUMqbcpar2 HICUMstate+79 #define HICUMcqbcpar2 HICUMstate+80 #define HICUMgqbcpar2 HICUMstate+81 #define HICUMqsu HICUMstate+82 #define HICUMcqsu HICUMstate+83 #define HICUMgqsu HICUMstate+84 #define HICUMqcth HICUMstate+85 #define HICUMcqcth HICUMstate+86 #define HICUMqxf HICUMstate+87 #define HICUMcqxf HICUMstate+88 #define HICUMgqxf HICUMstate+89 #define HICUMixf HICUMstate+90 #define HICUMixf_Vbiei HICUMstate+91 #define HICUMixf_Vbici HICUMstate+92 #define HICUMixf_Vxf HICUMstate+93 #define HICUMixf_Vrth HICUMstate+94 #define HICUMqxf1 HICUMstate+95 #define HICUMcqxf1 HICUMstate+96 #define HICUMgqxf1 HICUMstate+97 #define HICUMixf1 HICUMstate+98 #define HICUMixf1_Vbiei HICUMstate+99 #define HICUMixf1_Vbici HICUMstate+100 #define HICUMixf1_Vxf2 HICUMstate+101 #define HICUMixf1_Vxf1 HICUMstate+102 #define HICUMixf1_Vrth HICUMstate+103 #define HICUMqxf2 HICUMstate+104 #define HICUMcqxf2 HICUMstate+105 #define HICUMgqxf2 HICUMstate+106 #define HICUMixf2 HICUMstate+107 #define HICUMixf2_Vbiei HICUMstate+108 #define HICUMixf2_Vbici HICUMstate+109 #define HICUMixf2_Vxf1 HICUMstate+110 #define HICUMixf2_Vxf2 HICUMstate+111 #define HICUMixf2_Vrth HICUMstate+112 #define HICUMith HICUMstate+113 #define HICUMith_Vrth HICUMstate+114 #define HICUMith_Vbiei HICUMstate+115 #define HICUMith_Vbici HICUMstate+116 #define HICUMith_Vbpbi HICUMstate+117 #define HICUMith_Vbpci HICUMstate+118 #define HICUMith_Vbpei HICUMstate+119 #define HICUMith_Vciei HICUMstate+120 #define HICUMith_Vsici HICUMstate+121 #define HICUMith_Vcic HICUMstate+122 #define HICUMith_Vbbp HICUMstate+123 #define HICUMith_Veie HICUMstate+124 #define HICUMit HICUMstate+125 //for noise #define HICUMnumStates 126 /* per model data */ typedef struct sHICUMmodel { /* model structure for a hicum */ struct GENmodel gen; #define HICUMmodType gen.GENmodType #define HICUMnextModel(inst) ((struct sHICUMmodel *)((inst)->gen.GENnextModel)) #define HICUMinstances(inst) ((HICUMinstance *)((inst)->gen.GENinstances)) #define HICUMmodName gen.GENmodName //Circuit simulator specific parameters int HICUMtype; double HICUMtnom; char *HICUMversion; //Transfer current double HICUMc10; double HICUMqp0; double HICUMich; double HICUMhf0; double HICUMhfe; double HICUMhfc; double HICUMhjei; double HICUMahjei; double HICUMrhjei; double HICUMhjci; //Base-Emitter diode; double HICUMibeis; double HICUMmbei; double HICUMireis; double HICUMmrei; double HICUMibeps; double HICUMmbep; double HICUMireps; double HICUMmrep; double HICUMmcf; //Transit time for excess recombination current at b-c barrier double HICUMtbhrec; //Base-Collector diode currents double HICUMibcis; double HICUMmbci; double HICUMibcxs; double HICUMmbcx; //Base-Emitter tunneling current double HICUMibets; double HICUMabet; int HICUMtunode; //Base-Collector avalanche current double HICUMfavl; double HICUMqavl; double HICUMkavl; double HICUMalfav; double HICUMalqav; double HICUMalkav; //Series resistances double HICUMrbi0; double HICUMrbx; double HICUMfgeo; double HICUMfdqr0; double HICUMfcrbi; double HICUMfqi; double HICUMre; double HICUMrcx; //Substrate transistor double HICUMitss; double HICUMmsf; double HICUMiscs; double HICUMmsc; double HICUMtsf; //Intra-device substrate coupling double HICUMrsu; double HICUMcsu; //Depletion Capacitances double HICUMcjei0; double HICUMvdei; double HICUMzei; double HICUMajei; double HICUMcjep0; double HICUMvdep; double HICUMzep; double HICUMajep; double HICUMcjci0; double HICUMvdci; double HICUMzci; double HICUMvptci; double HICUMcjcx0; double HICUMvdcx; double HICUMzcx; double HICUMvptcx; double HICUMfbcpar; double HICUMfbepar; double HICUMcjs0; double HICUMvds; double HICUMzs; double HICUMvpts; double HICUMcscp0; double HICUMvdsp; double HICUMzsp; double HICUMvptsp; //Diffusion Capacitances double HICUMt0; double HICUMdt0h; double HICUMtbvl; double HICUMtef0; double HICUMgtfe; double HICUMthcs; double HICUMahc; double HICUMfthc; double HICUMrci0; double HICUMvlim; double HICUMvces; double HICUMvpt; double HICUMaick; double HICUMdelck; double HICUMtr; double HICUMvcbar; double HICUMicbar; double HICUMacbar; //Isolation Capacitances double HICUMcbepar; double HICUMcbcpar; //Non-quasi-static Effect double HICUMalqf; double HICUMalit; int HICUMflnqs; //Noise double HICUMkf; double HICUMaf; int HICUMcfbe; int HICUMflcono; double HICUMkfre; double HICUMafre; //Lateral Geometry Scaling (at high current densities) double HICUMlatb; double HICUMlatl; //Temperature dependence double HICUMvgb; double HICUMalt0; double HICUMkt0; double HICUMzetaci; double HICUMalvs; double HICUMalces; double HICUMzetarbi; double HICUMzetarbx; double HICUMzetarcx; double HICUMzetare; double HICUMzetacx; double HICUMvge; double HICUMvgc; double HICUMvgs; double HICUMf1vg; double HICUMf2vg; double HICUMzetact; double HICUMzetabet; double HICUMalb; double HICUMdvgbe; double HICUMzetahjei; double HICUMzetavgbe; //Self-Heating int HICUMflsh; double HICUMrth; double HICUMzetarth; double HICUMalrth; double HICUMcth; //Compatibility with V2.1 double HICUMflcomp; //SOA check parameters double HICUMvbeMax; /* maximum voltage over B-E junction */ double HICUMvbcMax; /* maximum voltage over B-C junction */ double HICUMvceMax; /* maximum voltage over C-E branch */ //Circuit simulator specific parameters unsigned HICUMtypeGiven : 1; unsigned HICUMtnomGiven : 1; unsigned HICUMversionGiven :1; //Transfer current unsigned HICUMc10Given : 1; unsigned HICUMqp0Given : 1; unsigned HICUMichGiven : 1; unsigned HICUMhf0Given : 1; unsigned HICUMhfeGiven : 1; unsigned HICUMhfcGiven : 1; unsigned HICUMhjeiGiven : 1; unsigned HICUMahjeiGiven : 1; unsigned HICUMrhjeiGiven : 1; unsigned HICUMhjciGiven : 1; //Base-Emitter diodeGiven : 1; unsigned HICUMibeisGiven : 1; unsigned HICUMmbeiGiven : 1; unsigned HICUMireisGiven : 1; unsigned HICUMmreiGiven : 1; unsigned HICUMibepsGiven : 1; unsigned HICUMmbepGiven : 1; unsigned HICUMirepsGiven : 1; unsigned HICUMmrepGiven : 1; unsigned HICUMmcfGiven : 1; //Transit time for excess recombination current at b-c barrier unsigned HICUMtbhrecGiven : 1; //Base-Collector diode currents unsigned HICUMibcisGiven : 1; unsigned HICUMmbciGiven : 1; unsigned HICUMibcxsGiven : 1; unsigned HICUMmbcxGiven : 1; //Base-Emitter tunneling current unsigned HICUMibetsGiven : 1; unsigned HICUMabetGiven : 1; unsigned HICUMtunodeGiven : 1; //Base-Collector avalanche current unsigned HICUMfavlGiven : 1; unsigned HICUMqavlGiven : 1; unsigned HICUMkavlGiven : 1; unsigned HICUMalfavGiven : 1; unsigned HICUMalqavGiven : 1; unsigned HICUMalkavGiven : 1; //Series resistances unsigned HICUMrbi0Given : 1; unsigned HICUMrbxGiven : 1; unsigned HICUMfgeoGiven : 1; unsigned HICUMfdqr0Given : 1; unsigned HICUMfcrbiGiven : 1; unsigned HICUMfqiGiven : 1; unsigned HICUMreGiven : 1; unsigned HICUMrcxGiven : 1; //Substrate transistor unsigned HICUMitssGiven : 1; unsigned HICUMmsfGiven : 1; unsigned HICUMiscsGiven : 1; unsigned HICUMmscGiven : 1; unsigned HICUMtsfGiven : 1; //Intra-device substrate coupling unsigned HICUMrsuGiven : 1; unsigned HICUMcsuGiven : 1; //Depletion Capacitances unsigned HICUMcjei0Given : 1; unsigned HICUMvdeiGiven : 1; unsigned HICUMzeiGiven : 1; unsigned HICUMajeiGiven : 1; unsigned HICUMcjep0Given : 1; unsigned HICUMvdepGiven : 1; unsigned HICUMzepGiven : 1; unsigned HICUMajepGiven : 1; unsigned HICUMcjci0Given : 1; unsigned HICUMvdciGiven : 1; unsigned HICUMzciGiven : 1; unsigned HICUMvptciGiven : 1; unsigned HICUMcjcx0Given : 1; unsigned HICUMvdcxGiven : 1; unsigned HICUMzcxGiven : 1; unsigned HICUMvptcxGiven : 1; unsigned HICUMfbcparGiven : 1; unsigned HICUMfbeparGiven : 1; unsigned HICUMcjs0Given : 1; unsigned HICUMvdsGiven : 1; unsigned HICUMzsGiven : 1; unsigned HICUMvptsGiven : 1; unsigned HICUMcscp0Given : 1; unsigned HICUMvdspGiven : 1; unsigned HICUMzspGiven : 1; unsigned HICUMvptspGiven : 1; //Diffusion Capacitances unsigned HICUMt0Given : 1; unsigned HICUMdt0hGiven : 1; unsigned HICUMtbvlGiven : 1; unsigned HICUMtef0Given : 1; unsigned HICUMgtfeGiven : 1; unsigned HICUMthcsGiven : 1; unsigned HICUMahcGiven : 1; unsigned HICUMfthcGiven : 1; unsigned HICUMrci0Given : 1; unsigned HICUMvlimGiven : 1; unsigned HICUMvcesGiven : 1; unsigned HICUMvptGiven : 1; unsigned HICUMaickGiven : 1; unsigned HICUMdelckGiven : 1; unsigned HICUMtrGiven : 1; unsigned HICUMvcbarGiven : 1; unsigned HICUMicbarGiven : 1; unsigned HICUMacbarGiven : 1; //Isolation Capacitances unsigned HICUMcbeparGiven : 1; unsigned HICUMcbcparGiven : 1; //Non-quasi-static Effect unsigned HICUMalqfGiven : 1; unsigned HICUMalitGiven : 1; unsigned HICUMflnqsGiven : 1; //Noise unsigned HICUMkfGiven : 1; unsigned HICUMafGiven : 1; unsigned HICUMcfbeGiven : 1; unsigned HICUMflconoGiven : 1; unsigned HICUMkfreGiven : 1; unsigned HICUMafreGiven : 1; //Lateral Geometry Scaling (at high current densities) unsigned HICUMlatbGiven : 1; unsigned HICUMlatlGiven : 1; //Temperature dependence unsigned HICUMvgbGiven : 1; unsigned HICUMalt0Given : 1; unsigned HICUMkt0Given : 1; unsigned HICUMzetaciGiven : 1; unsigned HICUMalvsGiven : 1; unsigned HICUMalcesGiven : 1; unsigned HICUMzetarbiGiven : 1; unsigned HICUMzetarbxGiven : 1; unsigned HICUMzetarcxGiven : 1; unsigned HICUMzetareGiven : 1; unsigned HICUMzetacxGiven : 1; unsigned HICUMvgeGiven : 1; unsigned HICUMvgcGiven : 1; unsigned HICUMvgsGiven : 1; unsigned HICUMf1vgGiven : 1; unsigned HICUMf2vgGiven : 1; unsigned HICUMzetactGiven : 1; unsigned HICUMzetabetGiven : 1; unsigned HICUMalbGiven : 1; unsigned HICUMdvgbeGiven : 1; unsigned HICUMzetahjeiGiven : 1; unsigned HICUMzetavgbeGiven : 1; //Self-Heating unsigned HICUMflshGiven : 1; unsigned HICUMrth_deGiven : 1; unsigned HICUMrthGiven : 1; unsigned HICUMzetarthGiven : 1; unsigned HICUMalrthGiven : 1; unsigned HICUMcthGiven : 1; //Compatibility with V2.1 unsigned HICUMflcompGiven : 1; unsigned HICUMvbeMaxGiven : 1; unsigned HICUMvbcMaxGiven : 1; unsigned HICUMvceMaxGiven : 1; } HICUMmodel; #ifndef NPN #define NPN 1 #define PNP -1 #endif /*NPN*/ /* device parameters */ enum { HICUM_AREA = 1, HICUM_OFF, HICUM_IC, HICUM_TEMP, HICUM_DTEMP, HICUM_M, }; /* model parameters */ enum { //Circuit simulator specific parameters HICUM_MOD_NPN = 101, HICUM_MOD_PNP, HICUM_MOD_TNOM, HICUM_MOD_VERSION, //Transfer current HICUM_MOD_C10, HICUM_MOD_QP0, HICUM_MOD_ICH, HICUM_MOD_HF0, HICUM_MOD_HFE, HICUM_MOD_HFC, HICUM_MOD_HJEI, HICUM_MOD_AHJEI, HICUM_MOD_RHJEI, HICUM_MOD_HJCI, //Base-Emitter diode, HICUM_MOD_IBEIS, HICUM_MOD_MBEI, HICUM_MOD_IREIS, HICUM_MOD_MREI, HICUM_MOD_IBEPS, HICUM_MOD_MBEP, HICUM_MOD_IREPS, HICUM_MOD_MREP, HICUM_MOD_MCF, //Transit time for excess recombination current at b-c barrier HICUM_MOD_TBHREC, //Base-Collector diode currents HICUM_MOD_IBCIS, HICUM_MOD_MBCI, HICUM_MOD_IBCXS, HICUM_MOD_MBCX, //Base-Emitter tunneling current HICUM_MOD_IBETS, HICUM_MOD_ABET, HICUM_MOD_TUNODE, //Base-Collector avalanche current HICUM_MOD_FAVL, HICUM_MOD_QAVL, HICUM_MOD_KAVL, HICUM_MOD_ALFAV, HICUM_MOD_ALQAV, HICUM_MOD_ALKAV, //Series resistances HICUM_MOD_RBI0, HICUM_MOD_RBX, HICUM_MOD_FGEO, HICUM_MOD_FDQR0, HICUM_MOD_FCRBI, HICUM_MOD_FQI, HICUM_MOD_RE, HICUM_MOD_RCX, //Substrate transistor HICUM_MOD_ITSS, HICUM_MOD_MSF, HICUM_MOD_ISCS, HICUM_MOD_MSC, HICUM_MOD_TSF, //Intra-device substrate coupling HICUM_MOD_RSU, HICUM_MOD_CSU, //Depletion Capacitances HICUM_MOD_CJEI0, HICUM_MOD_VDEI, HICUM_MOD_ZEI, HICUM_MOD_AJEI, HICUM_MOD_CJEP0, HICUM_MOD_VDEP, HICUM_MOD_ZEP, HICUM_MOD_AJEP, HICUM_MOD_CJCI0, HICUM_MOD_VDCI, HICUM_MOD_ZCI, HICUM_MOD_VPTCI, HICUM_MOD_CJCX0, HICUM_MOD_VDCX, HICUM_MOD_ZCX, HICUM_MOD_VPTCX, HICUM_MOD_FBCPAR, HICUM_MOD_FBEPAR, HICUM_MOD_CJS0, HICUM_MOD_VDS, HICUM_MOD_ZS, HICUM_MOD_VPTS, HICUM_MOD_CSCP0, HICUM_MOD_VDSP, HICUM_MOD_ZSP, HICUM_MOD_VPTSP, //Diffusion Capacitances HICUM_MOD_T0, HICUM_MOD_DT0H, HICUM_MOD_TBVL, HICUM_MOD_TEF0, HICUM_MOD_GTFE, HICUM_MOD_THCS, HICUM_MOD_AHC, HICUM_MOD_FTHC, HICUM_MOD_RCI0, HICUM_MOD_VLIM, HICUM_MOD_VCES, HICUM_MOD_VPT, HICUM_MOD_AICK, HICUM_MOD_DELCK, HICUM_MOD_TR, HICUM_MOD_VCBAR, HICUM_MOD_ICBAR, HICUM_MOD_ACBAR, //Isolation Capacitances HICUM_MOD_CBEPAR, HICUM_MOD_CBCPAR, //Non-quasi-static Effect HICUM_MOD_ALQF, HICUM_MOD_ALIT, HICUM_MOD_FLNQS, //Noise HICUM_MOD_KF, HICUM_MOD_AF, HICUM_MOD_CFBE, HICUM_MOD_FLCONO, HICUM_MOD_KFRE, HICUM_MOD_AFRE, //Lateral Geometry Scaling (at high current densities) HICUM_MOD_LATB, HICUM_MOD_LATL, //Temperature dependence HICUM_MOD_VGB, HICUM_MOD_ALT0, HICUM_MOD_KT0, HICUM_MOD_ZETACI, HICUM_MOD_ALVS, HICUM_MOD_ALCES, HICUM_MOD_ZETARBI, HICUM_MOD_ZETARBX, HICUM_MOD_ZETARCX, HICUM_MOD_ZETARE, HICUM_MOD_ZETACX, HICUM_MOD_VGE, HICUM_MOD_VGC, HICUM_MOD_VGS, HICUM_MOD_F1VG, HICUM_MOD_F2VG, HICUM_MOD_ZETACT, HICUM_MOD_ZETABET, HICUM_MOD_ALB, HICUM_MOD_DVGBE, HICUM_MOD_ZETAHJEI, HICUM_MOD_ZETAVGBE, //Self-Heating HICUM_MOD_FLSH, HICUM_MOD_RTH, HICUM_MOD_ZETARTH, HICUM_MOD_ALRTH, HICUM_MOD_CTH, //Compatibility with V2.1 HICUM_MOD_FLCOMP, //SOA check HICUM_MOD_VBE_MAX, HICUM_MOD_VBC_MAX, HICUM_MOD_VCE_MAX, }; /* device questions */ enum { HICUM_QUEST_COLLNODE = 251, HICUM_QUEST_BASENODE, HICUM_QUEST_EMITNODE, HICUM_QUEST_SUBSNODE, HICUM_QUEST_TEMPNODE, HICUM_QUEST_COLLCINODE, HICUM_QUEST_BASEBPNODE, HICUM_QUEST_BASEBINODE, HICUM_QUEST_EMITEINODE, HICUM_QUEST_SUBSSINODE, HICUM_QUEST_XFNODE, HICUM_QUEST_XF1NODE, HICUM_QUEST_XF2NODE, /* temperature */ HICUM_QUEST_TK, HICUM_QUEST_DTSH, /* voltages */ HICUM_QUEST_VBE, HICUM_QUEST_VBBP, HICUM_QUEST_VBC, HICUM_QUEST_VCE, HICUM_QUEST_VSC, HICUM_QUEST_VBIEI, HICUM_QUEST_VBPBI, HICUM_QUEST_VBICI, HICUM_QUEST_VCIEI, /* currents */ HICUM_QUEST_CC, HICUM_QUEST_CAVL, HICUM_QUEST_CB, HICUM_QUEST_CE, HICUM_QUEST_CS, HICUM_QUEST_CBEI, HICUM_QUEST_CBCI, /* resistances */ HICUM_QUEST_RCX_T, HICUM_QUEST_RE_T, HICUM_QUEST_IT, HICUM_QUEST_RBI, HICUM_QUEST_RB, /* transconductances and capacitances */ HICUM_QUEST_BETADC, HICUM_QUEST_GMI, HICUM_QUEST_GMS, HICUM_QUEST_RPII, HICUM_QUEST_RPIX, HICUM_QUEST_RMUI, HICUM_QUEST_RMUX, HICUM_QUEST_ROI, HICUM_QUEST_CPII, HICUM_QUEST_CPIX, HICUM_QUEST_CMUI, HICUM_QUEST_CMUX, HICUM_QUEST_CCS, HICUM_QUEST_BETAAC, HICUM_QUEST_CRBI, /* transit time */ HICUM_QUEST_TF, HICUM_QUEST_FT, HICUM_QUEST_ICK, /* power */ HICUM_QUEST_POWER, }; /* model questions */ enum { HICUM_MOD_COLLCONDUCT = 301, HICUM_MOD_BASECONDUCT, HICUM_MOD_EMITTERCONDUCT, HICUM_MOD_SUBSTRATECONDUCT, HICUM_MOD_TYPE, }; #include "hicum2ext.h" #endif /*HICUM*/ tmp_ns50wwy/src/spicelib/devices/hicum2/hicumL2.hpp0000644000175000017500000000150614163340332022361 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef hicumL2_H #define hicumL2_H #include "hicum2defs.h" #ifdef __cplusplus extern "C" { #endif void hicum_diode(double T, double IS, double UM1, double U, double *Iz, double *Gz, double *Tz); void hicum_qjmodf(double T, double c_0, double u_d, double z, double a_j, double U_cap, double *C, double *C_dU, double *C_dvt, double *Qz, double *Qz_dU, double *Qz_dvt); void hicum_thermal_update(HICUMmodel *, HICUMinstance *, double * Temp, double * Tdev_Vrth); int HICUMload(GENmodel *inModel, CKTcircuit *ckt); int HICUMtemp(GENmodel *inModel, CKTcircuit *ckt); #ifdef __cplusplus } #endif #endif /* hicumL2_H */tmp_ns50wwy/src/spicelib/devices/hicum2/hicumL2.cpp0000644000175000017500000050345114163340332022362 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This file defines the HICUM L2.4.0 model load function * Comments on the Code: * - We use dual numbers to calculate derivatives, this is readable and error proof. * - The code is targeted to be readable and maintainable, speed is sacrificed for this purpose. * - The verilog a code is available at the website of TU Dresden, Michael Schroeter's chair. * - lambda functions are used to calculate derivatives of larger Verilog Macros */ #include #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 #endif #include "duals/dual" #include "hicumL2.hpp" #include "hicumL2temp.hpp" #include //ngspice header files written in C #ifdef __cplusplus extern "C" { #endif #include "ngspice/typedefs.h" #include "ngspice/devdefs.h" #include "ngspice/const.h" #include "ngspice/trandefs.h" #include "ngspice/sperror.h" #include "hicum2defs.h" #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #ifdef __cplusplus } #endif //HICUM DEFINITIONS #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 MIN_R 0.001 using namespace duals::literals; // IDEAL DIODE (WITHOUT CAPACITANCE): // conductance calculation not required // INPUT: // IS, IST : saturation currents (model parameter related) // UM1 : ideality factor // U : branch voltage // IMPLICIT INPUT: // T : Temperature // OUTPUT: // Iz : diode current duals::duald HICDIO(duals::duald T, duals::duald IST, double UM1, duals::duald U) { duals::duald DIOY, le, vt; vt = CONSTboltz * T / CHARGE; DIOY = U/(UM1*vt); // le = exp(DIOY); // would be the best way... But stay close to HICUML2.va // return IST*(le-1.0); if (IST > 0.0) { if (DIOY > Dexp_lim) { le = (1 + (DIOY - Dexp_lim)); DIOY = Dexp_lim; return IST*(le*exp(DIOY)-1.0); } else if (DIOY <= -14.0) { return -IST; } else { le = exp(DIOY); return IST*(le-1.0); } } else { return 0.0; } } // 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: // T : Temperature // OUTPUT: // Qz : depletion Charge // C : depletion capacitance void QJMODF(duals::duald T, duals::duald c_0, duals::duald u_d, double z, duals::duald a_j, duals::duald U_cap, duals::duald * C, duals::duald * Qz) { duals::duald DFV_f, DFv_e, DFs_q, DFs_q2, DFv_j, DFdvj_dv, DFQ_j, DFC_j1, DFb, vt; vt = CONSTboltz * T / CHARGE; if (c_0 > 0.0) { DFV_f = u_d*(1.0-exp(-log(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 = log(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); } else { *C = 0.0; *Qz = 0.0; } } // 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 void QJMOD(duals::duald T, duals::duald c_0, duals::duald u_d, double z, double a_j, duals::duald v_pt, duals::duald U_cap, duals::duald * C, duals::duald * Qz) { duals::duald DQ_j1, DQ_j2, DQ_j3, DC_j1, DC_j2, DC_j3, De_1, De_2, Dzr1, DCln1, DCln2, Dz1, Dv_j1, Dv_j2, De, Da, Dv_r, Dv_j4, Dv_e, DC_c, DC_max, DV_f, Dv_p, Dz_r, vt; vt = CONSTboltz * T / CHARGE; if (c_0 > 0.0){ Dz_r = z/4.0; Dv_p = v_pt-u_d; DV_f = u_d*(1.0-exp(-log(a_j)/z)); DC_max = a_j*c_0; DC_c = c_0*exp((Dz_r-z)*log(v_pt/u_d)); Dv_e = (DV_f-U_cap)/vt; if(Dv_e < Cexp_lim) { De = exp(Dv_e); De_1 = De/(1.0+De); Dv_j1 = DV_f-vt*log(1.0+De); } else { De_1 = 1.0; Dv_j1 = U_cap; } Da = 0.1*Dv_p+4.0*vt; Dv_r = (Dv_p+Dv_j1)/Da; if(Dv_r < Cexp_lim){ De = exp(Dv_r); De_2 = De/(1.0+De); Dv_j2 = -Dv_p+Da*(log(1.0+De)-exp(-(Dv_p+DV_f)/Da)); } else { De_2 = 1.0; Dv_j2 = Dv_j1; } Dv_j4 = U_cap-Dv_j1; DCln1 = log(1.0-Dv_j1/u_d); DCln2 = log(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; } else { *C = 0.0; *Qz = 0.0; } } // 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) void HICFCI(double zb, double zl, duals::duald w, duals::duald * hicfcio, duals::duald * dhicfcio_dw) { duals::duald a, a2, a3, r, lnzb, x, z; z = zb*w; lnzb = log(1+zb*w); if(z > 1.0e-6){ 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; } else { 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; } } // 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 void HICFCT(double z, duals::duald w, duals::duald * hicfcto, duals::duald *dhicfcto_dw) { duals::duald a, lnz; a = z*w; lnz = log(1+z*w); if (a > 1.0e-6){ *hicfcto = (a - lnz)/z; *dhicfcto_dw = a / (1.0 + a); } else { *hicfcto = 0.5 * a * w; *dhicfcto_dw = a; } } // DEPLETION CHARGE & CAPACITANCE CALCULATION SELECTOR // Dependent on junction punch-through voltage // Important for collector related junctions void HICJQ(duals::duald T, duals::duald c_0, duals::duald u_d, double z, duals::duald v_pt, duals::duald U_cap, duals::duald * C,duals::duald * Qz) { if(v_pt.rpart() < VPT_thresh){ QJMOD(T,c_0,u_d,z,2.4,v_pt,U_cap,C,Qz); } else { QJMODF(T,c_0,u_d,z,2.4,U_cap,C,Qz); } } duals::duald calc_hjei_vbe(duals::duald Vbiei, duals::duald T, HICUMinstance * here, HICUMmodel * model){ //calculates hje_vbe //wrapping in a routine allows easy calculation of derivatives with dual numbers duals::duald vj, vj_z, vt, vdei_t, hjei0_t, ahjei_t; if (model->HICUMahjei == 0.0){ return model->HICUMhjei; }else{ double T_dpart = T.dpart(); vt = CONSTboltz * T / CHARGE; vdei_t = here->HICUMvdei_t.rpart; hjei0_t = here->HICUMhjei0_t.rpart; ahjei_t = here->HICUMahjei_t.rpart; if (T_dpart!=0.0){ vdei_t.dpart(here->HICUMvdei_t.dpart); hjei0_t.dpart(here->HICUMhjei0_t.dpart); ahjei_t.dpart(here->HICUMahjei_t.dpart); } //vendhjei = vdei_t*(1.0-exp(-ln(ajei_t)/z_h)); vj = (vdei_t-Vbiei)/(model->HICUMrhjei*vt); vj = vdei_t-model->HICUMrhjei*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(model->HICUMzei*log(1.0-vj/vdei_t)))*ahjei_t; return hjei0_t*(exp(vj_z)-1.0)/vj_z; } } void hicum_diode(duals::duald T, dual_double IS, double UM1, double U, double *Iz, double *Gz, double *Tz) { // T is T_dev + 1_e*T_dev_Vrth //wrapper for hicum diode equation that also generates derivatives duals::duald result = 0; duals::duald is_t = IS.rpart; result = HICDIO(T.rpart(), is_t, UM1, U+1_e); *Iz = result.rpart(); *Gz = result.dpart(); //derivative for U is_t = IS.rpart + 1_e*IS.dpart; result = HICDIO(T, is_t, UM1, U); *Tz = result.dpart(); //derivative for T } void hicum_qjmodf(duals::duald T, dual_double c_0, dual_double u_d, double z, dual_double a_j, double U_cap, double *C, double *C_dU, double *C_dT, double *Qz, double *Qz_dU, double *Qz_dT) { //wrapper for QJMODF that also generates derivatives duals::duald Cresult = 0; duals::duald Qresult = 0; duals::duald c_0_t = c_0.rpart; duals::duald u_d_t = u_d.rpart; duals::duald a_j_t = a_j.rpart; QJMODF(T.rpart(), c_0_t, u_d_t, z, a_j_t, U_cap+1_e, &Cresult, &Qresult); *C = Cresult.rpart(); *C_dU = Cresult.dpart(); *Qz = Qresult.rpart(); *Qz_dU = Qresult.dpart(); c_0_t.dpart(c_0.dpart); u_d_t.dpart(u_d.dpart); a_j_t.dpart(a_j.dpart); QJMODF(T, c_0_t, u_d_t, z, a_j_t, U_cap, &Cresult, &Qresult); *Qz_dT = Qresult.dpart(); *C_dT = Cresult.dpart(); } void hicum_HICJQ(duals::duald T, dual_double c_0, dual_double u_d, double z, dual_double v_pt, double U_cap, double * C, double * C_dU, double * C_dT, double * Qz, double * Qz_dU, double * Qz_dT) { //wrapper for HICJQ that also generates derivatives duals::duald Cresult = 0; duals::duald Qresult = 0; duals::duald c_0_t = c_0.rpart; duals::duald u_d_t = u_d.rpart; duals::duald v_pt_t = v_pt.rpart; HICJQ(T.rpart(), c_0_t, u_d_t, z, v_pt_t, U_cap+1_e, &Cresult, &Qresult); *C = Cresult.rpart(); *C_dU = Cresult.dpart(); *Qz = Qresult.rpart(); *Qz_dU = Qresult.dpart(); c_0_t.dpart(c_0.dpart); u_d_t.dpart(u_d.dpart); v_pt_t.dpart(v_pt.dpart); HICJQ(T, c_0_t, u_d_t, z, v_pt_t, U_cap, &Cresult, &Qresult); *Qz_dT = Qresult.dpart(); *C_dT = Cresult.dpart(); } int HICUMload(GENmodel *inModel, CKTcircuit *ckt) { HICUMmodel *model = (HICUMmodel*)inModel; HICUMinstance *here; //Declaration of variables double cbcpar1,cbcpar2,cbepar2,cbepar1,Oich,Otbhrec; //Charges, capacitances and currents double Qjci,Qjei,Qjep; double Qdei,Qrbi; double Qdei_Vbiei, Qdei_Vbici, Qdei_dT; double it,ibei,irei,ibci,ibep,irep,ibh_rec; double ibet,iavl,iavl_dT,iavl_Vbiei,iavl_Vbici; double ijbcx,ijbcx_dT,ijbcx_Vbpci,ijsc,ijsc_Vsici,ijsc_Vrth,Qjs,Qscp,HSI_Tsu,Qdsu; double HSI_Tsu_Vbpci, HSI_Tsu_Vsici, HSI_Tsu_dT; double Qdsu_Vbpci, Qdsu_Vsici, Qdsu_dT; duals::duald result_Qdsu, result_HSI_TSU; double Qscp_Vsc, Qscp_dT; double Cscp_Vsc, Cscp_dT; //Base resistance and self-heating power double rbi=0.0,pterm,pterm_dT; //Model initialization double C_1; //Model evaluation double Crbi,Cjci,Cjei,Cjep,Cscp; double Cjs, Cjs_dT; double Cjcx_i, Cjcx_i_Vbci, Cjcx_i_dT; double Cjcx_ii, Cjcx_ii_Vbpci, Cjcx_ii_dT; double Qjcx_i , Qjcx_i_Vbci , Qjcx_i_dT ; double Qjcx_ii, Qjcx_ii_Vbpci, Qjcx_ii_dT; double Qjs_Vsici, Qjs_dT; double itf,itr,Tf,Tr,a_bpt,Q_0; double itf_Vbiei, itf_Vbici, itf_dT; double itr_Vbiei, itr_Vbici, itr_dT; double Tf_Vbiei, Tf_Vbici, Tf_dT; double it_Vbiei, it_Vbici, it_dT; double Qf_Vbiei, Qf_Vbici, Qf_dT; double Qr_Vbiei, Qr_Vbici, Qr_dT; duals::duald result_itf, result_itr, result_Qf, result_Qr, result_Q_bf, result_a_h, result_Q_p, result_Tf; //intermediate variables when calling void dual functions double T_f0, Q_p, a_h; double Q_bf, Q_bf_Vbiei, Q_bf_Vbici, Q_bf_dT; double Q_pT, Q_pT_dVbiei, Q_pT_dVbici, Q_pT_dT; double Qf, Cdei, Qr, Cdci; double Cdei_Vbiei, Cdei_Vbici, Cdei_Vrth; double Cdci_Vbiei, Cdci_Vbici, Cdci_Vrth; double Crbi_Vbiei, Crbi_Vbici, Crbi_Vrth; double ick, ick_Vciei, ick_dT; //NQS double Ixf1,Ixf2,Qxf1,Qxf2; double Ixf1_Vxf1, Ixf1_Vxf2, Ixf1_ditf, Ixf1_dTf, Ixf1_Vbiei, Ixf1_Vbici, Ixf1_dT; double Ixf2_Vxf1, Ixf2_Vbiei, Ixf2_Vbici, Ixf2_dT; double Ixf_Vxf, Ixf_Tf,Ixf_Qdei,Ixf_Vbiei, Ixf_Vbici, Ixf_dT; double Ixf2_Vxf2, Ixf2_dTf; double Itxf, Qdeix; double Itxf_Vxf2, Itxf_Vbici, Itxf_Vbiei, Itxf_dT; double Qdeix_Vxf, Qdeix_dT, Qdeix_Vbici, Qdeix_Vbiei; double Qxf, Ixf, Vxf; double Vxf1, Vxf2; double hjei_vbe; double Vbiei, Vbici, Vciei, Vbpei, Vbpbi, Vbpci, Vsici, Vbci, Vsc; double Vbici_temp, Vaval; //Model flags int use_aval; //helpers for ngspice implementation duals::duald result; //end of variables #ifndef PREDICTOR double xfact; #endif double delvbiei, delvbici, delvbpei, delvbpbi, delvbpci, delvsici, delvbbp, delveie, delvciei, delvcic, delvxf2; double ibieihat; double ibpeihat; double icieihat; double ibicihat; double ibpcihat; double ibpbihat; double isicihat; double ibpsihat; double ithhat; double ceq, geq; double rhs_current; int icheck=1; int ichk1, ichk2, ichk3, ichk4, ichk5, ichk6; int error; double Vbe, Vcic, Vbbp, Veie, Vsis, Vbpe; double Ibiei, Ibiei_Vbiei, Ibiei_Vxf=0.0, Ibiei_Vbici; double Ibici, Ibici_Vbici, Ibici_Vbiei; double Ibpei, Ibpei_Vbpei; double Ibpci, Ibpci_Vbpci; double Isici, Isici_Vsici;// double Isc=0.0, Isc_Vsc=0.0; double Iciei, Iciei_Vbiei, Iciei_Vbici, Iciei_Vrth, Iciei_Vxf2; double Ibbp_Vbbp=0.0; double Isis_Vsis; double Ieie, Ieie_Veie=0.0; double Ibpbi, Ibpbi_Vbpbi, Ibpbi_Vbici, Ibpbi_Vbiei; double Ibpsi, Ibpsi_Vbpci, Ibpsi_Vsici, Ibpsi_Vrth; double Icic_Vcic=0.0; double Ibci=0.0, Ibci_Vbci=0.0; double hjei_vbe_Vbiei, hjei_vbe_dT, ibet_Vbpei, ibet_dT, ibet_Vbiei, ibh_rec_Vbiei, ibh_rec_dT, ibh_rec_Vbici; double irei_Vbiei, irei_dT; double ibep_Vbpei, ibep_dT; double irep_Vbpei, irep_dT, rbi_dT, rbi_Vbiei, rbi_Vbici; double ibei_Vbiei, ibei_dT; double ibci_Vbici, ibci_dT; double Q_0_Vbiei, Q_0_Vbici, Q_0_dT; double Temp; double Tdev_Vrth; //derivative device temperature to Vrth //below variable has a real part equal to the device temperature and a dual part equal to dTdev/dVrth //this is necessary, since for some Vrth, HICUM sets Tdev constant (eg very high self heating beyond 300K) //then, dTdev/dVrth. Else it is equal to 1. duals::duald Temp_dual; double Cjei_Vbiei,Cjci_Vbici,Cjep_Vbpei,Cjep_dT,Cjs_Vsici; double Cjei_dT, Cjci_dT; double Qjei_Vbiei, Qjei_dT, Qjci_Vbici, Qjci_dT; double T_f0_Vbici,T_f0_dT; double Qbepar1; double Qbepar2; double Qbcpar1; double Qbcpar2; double Qsu; double Qcth; double Qcth_Vrth; double Qrbi_Vbpbi; double Qrbi_Vrth; double Qrbi_Vbiei; double Qrbi_Vbici; double Qjep_Vbpei,Qjep_dT; double Qbepar1_Vbe; double Qbepar2_Vbpe; double Qbcpar1_Vbci; double Qbcpar2_Vbpci; double Qsu_Vsis; double cqbepar1, gqbepar1; double cqbepar2, gqbepar2; double cqbcpar1, gqbcpar1; double cqbcpar2, gqbcpar2; double cqsu, gqsu; double Qxf_Vxf, Qxf1_Vxf1, Qxf2_Vxf2; double Ith=0.0, Vrth=0.0, Icth, Icth_Vrth, delvrth; double Ibiei_Vrth; double Ibici_Vrth; double Ibpei_Vrth; double Ibpci_Vrth; double Isici_Vrth; double Ibpbi_Vrth; double Ieie_Vrth; double Icic_Vrth=0.0; double Irth_Vrth=0.0; double Ibbp_Vrth=0.0; double Ith_Vrth=0.0; double Ith_Vciei=0.0; double Ith_Vbiei=0.0; double Ith_Vbici=0.0; double Ith_Vbpei=0.0; double Ith_Vbpci=0.0; double Ith_Vsici=0.0; double Ith_Vbpbi=0.0; double Ith_Veie=0.0; double Ith_Vcic=0.0; double Ith_Vbbp=0.0; // 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 std::function HICQFC = [&](duals::duald T, duals::duald Ix, duals::duald I_CK, duals::duald FFT_pcS, duals::duald * Q_fC, duals::duald * Q_CT, duals::duald * T_fC, duals::duald * T_cT) { duals::duald FCln, FCa, FCa1, FCd_a, FCw, FCdw_daick, FCda1_dw, FCf_ci, FCdfCT_ditf, FCw2, FCz, FCdfc_dw, FFdVc_ditf, FCf_CT, FCf1, FCf2, FCrt; duals::duald FCa_ck, FCdaick_ditf, FCxl, FCxb, FCdf1_dw, FCz_1, FCf3, FCdf2_dw, FCdf3_dw, FCdw_ditf, FCdfc_ditf; duals::duald FCdfCT_dw, FCd_f, FFdVc; duals::duald vt; vt = CONSTboltz * T / CHARGE; *Q_fC = FFT_pcS*Ix; FCa = 1.0-I_CK/Ix; FCrt = sqrt(FCa*FCa+model->HICUMahc); FCa_ck = 1.0-(FCa+FCrt)/(1.0+sqrt(1.0+model->HICUMahc)); FCdaick_ditf = (FCa_ck-1.0)*(1-FCa)/(FCrt*Ix); if(model->HICUMlatb > model->HICUMlatl){ FCz = model->HICUMlatb-model->HICUMlatl; FCxl = 1.0+model->HICUMlatl; FCxb = 1.0+model->HICUMlatb; if(model->HICUMlatb > 0.01){ FCln = log(FCxb/FCxl); FCa1 = exp((FCa_ck-1.0)*FCln); FCd_a = 1.0/(model->HICUMlatl-FCa1*model->HICUMlatb); FCw = (FCa1-1.0)*FCd_a; FCdw_daick = -FCz*FCa1*FCln*FCd_a*FCd_a; FCa1 = log((1.0+model->HICUMlatb*FCw)/(1.0+model->HICUMlatl*FCw)); FCda1_dw = model->HICUMlatb/(1.0+model->HICUMlatb*FCw) - model->HICUMlatl/(1.0+model->HICUMlatl*FCw); } else { FCf1 = 1.0-FCa_ck; FCd_a = 1.0/(1.0+FCa_ck*model->HICUMlatb); FCw = FCf1*FCd_a; FCdw_daick = -1.0*FCd_a*FCd_a*FCxb*FCd_a; FCa1 = FCz*FCw; FCda1_dw = FCz; } FCf_CT = 2.0/FCz; FCw2 = FCw*FCw; FCf1 = model->HICUMlatb*model->HICUMlatl*FCw*FCw2/3.0+(model->HICUMlatb+model->HICUMlatl)*FCw2/2.0+FCw; FCdf1_dw = model->HICUMlatb*model->HICUMlatl*FCw2 + (model->HICUMlatb+model->HICUMlatl)*FCw + 1.0; HICFCI(model->HICUMlatb,model->HICUMlatl,FCw,&FCf2,&FCdf2_dw); HICFCI(model->HICUMlatl,model->HICUMlatb,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(model->HICUMflcomp < 2.3) { HICFCT(model->HICUMlatb,FCw,&FCf2,&FCdf2_dw); HICFCT(model->HICUMlatl,FCw,&FCf3,&FCdf3_dw); FCf_CT = FCf_CT*(FCf2-FCf3); FCdfCT_dw = FCf_CT*(FCdf2_dw-FCdf3_dw); FCdfCT_ditf = FCdfCT_dw*FCdw_ditf; } else { FCf_CT = FCf_ci; FCdfCT_ditf = FCdfc_ditf; } } else { if(model->HICUMlatb > 0.01) { FCd_a = 1.0/(1.0+FCa_ck*model->HICUMlatb); FCw = (1.0-FCa_ck)*FCd_a; FCdw_daick = -(1.0+model->HICUMlatb)*FCd_a*FCd_a; } else { FCw = 1.0-FCa_ck-FCa_ck*model->HICUMlatb; FCdw_daick = -(1.0+model->HICUMlatb); } FCw2 = FCw*FCw; FCz = model->HICUMlatb*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(model->HICUMflcomp < 2.3){ if (FCz > 0.001){ FCf_CT = 2.0*(FCz_1*log(FCz_1)-FCz)/(model->HICUMlatb*model->HICUMlatb*FCz_1); FCdfCT_dw = 2.0*FCw*FCd_f*FCd_f; } else { 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; } FCdfCT_ditf = FCdfCT_dw*FCdw_ditf; } else { FCf_CT = FCf_ci; FCdfCT_ditf = FCdfc_ditf; } } *Q_CT = *Q_fC*FCf_CT*exp((FFdVc-model->HICUMvcbar)/vt); *Q_fC = *Q_fC*FCf_ci*exp((FFdVc-model->HICUMvcbar)/vt); *T_fC = FFT_pcS*exp((FFdVc-model->HICUMvcbar)/vt)*(FCf_ci+Ix*FCdfc_ditf) +*Q_fC/vt*FFdVc_ditf; *T_cT = FFT_pcS*exp((FFdVc-model->HICUMvcbar)/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 std::function HICQFF = [&](duals::duald T, duals::duald itf, duals::duald I_CK, duals::duald * T_f, duals::duald * Q_f, duals::duald * T_fT, duals::duald * Q_fT, duals::duald * Q_bf) { duals::duald FFitf_ick, FFdTef, FFdQef, FFdVc, FFdVc_ditf, FFib, FFfcbar, FFdib_ditf; duals::duald vt,tef0_t,thcs_t,hf0_t,hfe_t,hfc_t; duals::duald FFdQbfb, FFdTbfb, FFdQfhc, FFdTfhc, FFdQcfc,FFdTcfc, FFdQbfc,FFdTbfc; duals::duald FFdQcfcT, FFic, FFw, FFdTcfcT; double T_dpart = T.dpart(); vt = CONSTboltz * T / CHARGE; tef0_t = here->HICUMtef0_t.rpart; thcs_t = here->HICUMthcs_t.rpart; hf0_t = here->HICUMhf0_t.rpart; hfe_t = here->HICUMhfe_t.rpart; hfc_t = here->HICUMhfc_t.rpart; if (T_dpart!=0.0){ tef0_t.dpart(here->HICUMtef0_t.dpart); thcs_t.dpart(here->HICUMthcs_t.dpart); hf0_t.dpart(here->HICUMhf0_t.dpart); hfe_t.dpart(here->HICUMhfe_t.dpart); hfc_t.dpart(here->HICUMhfc_t.dpart); } if(itf < 1.0e-6*I_CK){ *Q_fT = *Q_f; *T_fT = *T_f; *Q_bf = 0; } else { FFitf_ick = itf/I_CK; FFdTef = tef0_t*exp(model->HICUMgtfe*log(FFitf_ick)); FFdQef = FFdTef*itf/(1+model->HICUMgtfe); if (here->HICUMicbar_scaled<0.05*(model->HICUMvlim/here->HICUMrci0_scaled)) { FFdVc = 0; FFdVc_ditf = 0; } else { FFib = (itf-I_CK)/here->HICUMicbar_scaled; if (FFib < -1.0e10) { FFib = -1.0e10; } FFfcbar = (FFib+sqrt(FFib*FFib+model->HICUMacbar))/2.0; FFdib_ditf = FFfcbar/sqrt(FFib*FFib+model->HICUMacbar)/here->HICUMicbar_scaled; FFdVc = model->HICUMvcbar*exp(-1.0/FFfcbar); FFdVc_ditf = FFdVc/(FFfcbar*FFfcbar)*FFdib_ditf; } FFdQbfb = (1-model->HICUMfthc)*thcs_t*itf*(exp(FFdVc/vt)-1); FFdTbfb = FFdQbfb/itf+(1-model->HICUMfthc)*thcs_t*itf*exp(FFdVc/vt)/vt*FFdVc_ditf; FFic = 1-1.0/FFitf_ick; FFw = (FFic+sqrt(FFic*FFic+model->HICUMahc))/(1+sqrt(1+model->HICUMahc)); FFdQfhc = thcs_t*itf*FFw*FFw*exp((FFdVc-model->HICUMvcbar)/vt); FFdTfhc = FFdQfhc*(1.0/itf*(1.0+2.0/(FFitf_ick*sqrt(FFic*FFic+model->HICUMahc)))+1.0/vt*FFdVc_ditf); if(model->HICUMlatb <= 0.0 && model->HICUMlatl <= 0.0){ FFdQcfc = model->HICUMfthc*FFdQfhc; FFdTcfc = model->HICUMfthc*FFdTfhc; FFdQcfcT = FFdQcfc; FFdTcfcT = FFdTcfc; } else { HICQFC(T, itf,I_CK,model->HICUMfthc*thcs_t,&FFdQcfc,&FFdQcfcT,&FFdTcfc,&FFdTcfcT); } FFdQbfc = (1-model->HICUMfthc)*FFdQfhc; FFdTbfc = (1-model->HICUMfthc)*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; } }; //Hole charge at low bias std::function calc_Q_0 = [&](duals::duald T, duals::duald Qjei, duals::duald Qjci, duals::duald hjei_vbe){ duals::duald Q_0, b_q, Q_bpt, qp0_t; qp0_t = here->HICUMqp0_t.rpart; double T_dpart = T.dpart(); if (T_dpart!=0.0){ qp0_t.dpart(here->HICUMqp0_t.dpart); } a_bpt = 0.05; Q_0 = qp0_t + hjei_vbe*Qjei + model->HICUMhjci*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); return Q_0; }; std::function calc_T_f0 = [&](duals::duald T, duals::duald Vbici){ //Transit time calculation at low current density duals::duald vt, vdci_t, cjci0_t, t0_t; duals::duald cV_f,cv_e,cs_q,cs_q2,cv_j,cdvj_dv,Cjcit,cc; double T_dpart = T.dpart(); vt = CONSTboltz * T / CHARGE; vdci_t = here->HICUMvdci_t.rpart; cjci0_t = here->HICUMcjci0_t.rpart; t0_t = here->HICUMt0_t.rpart; if (T_dpart!=0.0){ vdci_t.dpart(here->HICUMvdci_t.dpart); cjci0_t.dpart(here->HICUMcjci0_t.dpart); t0_t.dpart(here->HICUMt0_t.dpart); } if(here->HICUMcjci0_t.rpart > 0.0){ // CJMODF cV_f = vdci_t*(1.0-exp(-log(2.4)/model->HICUMzci)); 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(-model->HICUMzci*log(1.0-cv_j/vdci_t))*cdvj_dv+2.4*cjci0_t*(1.0-cdvj_dv); } else { Cjcit = 0.0; } if(Cjcit > 0.0) { cc = cjci0_t/Cjcit; } else { cc = 1.0; } return t0_t+model->HICUMdt0h*(cc-1.0)+model->HICUMtbvl*(1/cc-1.0); }; std::function calc_ick = [&](duals::duald T, duals::duald Vciei){ duals::duald ick, vces_t, rci0_t, vlim_t, Orci0_t; duals::duald Ovpt,a,d1,vceff,a1,a11,Odelck,ick1,ick2,ICKa, vc, vt; double T_dpart = T.dpart(); vces_t = here->HICUMvces_t.rpart; rci0_t = here->HICUMrci0_t.rpart; vlim_t = here->HICUMvlim_t.rpart; if (T_dpart!=0.0){ vces_t.dpart(here->HICUMvces_t.dpart); rci0_t.dpart(here->HICUMrci0_t.dpart); vlim_t.dpart(here->HICUMvlim_t.dpart); } //Effective collector voltage vc = Vciei-vces_t; vt = CONSTboltz * T / CHARGE; //Inverse of low-field internal collector resistance: needed in HICICK Orci0_t = 1.0/rci0_t; //Critical current for onset of high-current effects //begin : HICICK Ovpt = 1.0/model->HICUMvpt; 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/model->HICUMdelck; ick1 = exp(Odelck*log(1+exp(model->HICUMdelck*log(a1)))); ick2 = a11/ick1; ICKa = (vceff-vlim_t)*Ovpt; ick = ick2*(1.0+0.5*(ICKa+sqrt(ICKa*ICKa+model->HICUMaick))); return ick; //end }; std::function calc_ibet = [&](duals::duald Vbiei, duals::duald Vbpei, duals::duald T){ //Tunneling current duals::duald ibet; if (here->HICUMibets_scaled > 0 && (Vbpei <0.0 || Vbiei < 0.0)){ //begin : HICTUN duals::duald pocce,czz, cje0_t, vde_t, ibets_t, abet_t; double T_dpart = T.dpart(); ibets_t = here->HICUMibets_t.rpart; abet_t = here->HICUMabet_t.rpart; if (T_dpart!=0.0){ abet_t.dpart(here->HICUMabet_t.dpart); ibets_t.dpart(here->HICUMibets_t.dpart); } if(model->HICUMtunode==1 && here->HICUMcjep0_t.rpart > 0.0 && here->HICUMvdep_t.rpart >0.0){ cje0_t = here->HICUMcjep0_t.rpart; vde_t = here->HICUMvdep_t.rpart; if (T_dpart!=0.0){ cje0_t.dpart(here->HICUMcjep0_t.dpart); vde_t.dpart(here->HICUMvdep_t.dpart); } pocce = exp((1-1/model->HICUMzep)*log(Cjep/cje0_t)); czz = -(Vbpei/vde_t)*ibets_t*pocce; ibet = czz*exp(-abet_t/pocce); } else if (model->HICUMtunode==0 && here->HICUMcjei0_t.rpart > 0.0 && here->HICUMvdei_t.rpart >0.0){ cje0_t = here->HICUMcjei0_t.rpart; vde_t = here->HICUMvdei_t.rpart; if (T_dpart!=0.0){ cje0_t.dpart(here->HICUMcjei0_t.dpart); vde_t.dpart(here->HICUMvdei_t.dpart); } pocce = exp((1-1/model->HICUMzei)*log(Cjei/cje0_t)); czz = -(Vbiei/vde_t)*ibets_t*pocce; ibet = czz*exp(-abet_t/pocce); } else { ibet = 0.0; } } else { ibet = 0.0; } return ibet; }; std::function calc_iavl = [&](duals::duald Vbici, duals::duald Cjci, duals::duald itf, duals::duald T){ //Avalanche current duals::duald iavl; duals::duald v_bord,v_q,U0,av,avl,cjci0_t, vdci_t, qavl_t,favl_t, kavl_t; if (use_aval == 1) {//begin : HICAVL double T_dpart = T.dpart(); cjci0_t = here->HICUMcjci0_t.rpart; vdci_t = here->HICUMvdci_t.rpart; qavl_t = here->HICUMqavl_t.rpart; favl_t = here->HICUMfavl_t.rpart; kavl_t = here->HICUMkavl_t.rpart; if (T_dpart!=0.0){ cjci0_t.dpart(here->HICUMcjci0_t.dpart); vdci_t.dpart(here->HICUMvdci_t.dpart); qavl_t.dpart(here->HICUMqavl_t.dpart); favl_t.dpart(here->HICUMfavl_t.dpart); kavl_t.dpart(here->HICUMkavl_t.dpart); } v_bord = vdci_t-Vbici; if (v_bord > 0) { v_q = qavl_t/Cjci; U0 = qavl_t/cjci0_t; if(v_bord > U0){ av = favl_t*exp(-v_q/U0); avl = av*(U0+(1.0+v_q/U0)*(v_bord-U0)); } else { avl = favl_t * v_bord * exp(-v_q / v_bord); } /* 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 (model->HICUMkavl > 0) { //: HICAVLHIGH duals::duald denom,sq_smooth,hl; 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; } else { iavl = itf*avl; } } else { iavl = 0.0; } } else{ iavl = 0; } return iavl; }; std::function calc_rbi = [&](duals::duald T, duals::duald Qjei, duals::duald Qf){ //Internal base resistance duals::duald vt,rbi; vt = CONSTboltz * T / CHARGE; if(here->HICUMrbi0_t.rpart > 0.0){ //: HICRBI duals::duald Qz_nom,f_QR,ETA,Qz0,fQz, qp0_t; double T_dpart = T.dpart(); rbi = here->HICUMrbi0_t.rpart; qp0_t = here->HICUMqp0_t.rpart; if (T_dpart!=0.0) { rbi.dpart(here->HICUMrbi0_t.dpart); qp0_t.dpart(here->HICUMqp0_t.dpart); } // Consideration of conductivity modulation // To avoid convergence problem hyperbolic smoothing used f_QR = (1+model->HICUMfdqr0)*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 = rbi/fQz; // Consideration of emitter current crowding if( ibei > 0.0) { ETA = rbi*ibei*model->HICUMfgeo/vt; if(ETA < 1.0e-6) { rbi = rbi*(1.0-0.5*ETA); } else { rbi = rbi*log(1.0+ETA)/ETA; } } // Consideration of peripheral charge if(Qf > 0.0) { rbi = rbi*(Qjei+Qf*model->HICUMfqi)/(Qjei+Qf); } } else { rbi = 0.0; } return rbi; }; std::function calc_it_final = [&](duals::duald T, duals::duald Vbiei, duals::duald Vbici, duals::duald Q_pT, duals::duald T_f0, duals::duald ick, duals::duald *itf, duals::duald *itr, duals::duald *Qf, duals::duald *Qr, duals::duald *Q_bf, duals::duald * Tf){ // given T,Q_pT, ick, T_f0, Tr, Vbiei, Vbici -> calculate itf, itr, Qf, Qr duals::duald VT, VT_f, i_0f, i_0r, I_Tf1, a_h, Q_fT,T_fT; duals::duald c10_t; double T_dpart = T.dpart(); VT = CONSTboltz * T / CHARGE; c10_t = here->HICUMc10_t.rpart; if (T_dpart!=0.0) { c10_t.dpart(here->HICUMc10_t.dpart); } VT_f = model->HICUMmcf*VT; i_0f = c10_t * exp(Vbiei/VT_f); i_0r = c10_t * exp(Vbici/VT); 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(T,*itf,ick,Tf,Qf,&T_fT,&Q_fT,Q_bf); *Qr = Tr*(*itr); }; std::function calc_it_initial = [&](duals::duald T, duals::duald Vbiei, duals::duald Vbici, duals::duald Q_0, duals::duald T_f0, duals::duald ick, duals::duald *itf, duals::duald *itr, duals::duald *Qf, duals::duald *Qr, duals::duald *Q_bf, duals::duald *a_h, duals::duald *Q_p, duals::duald *Tf){ // given T,Q_pT, ick, T_f0, Tr, Vbiei, Vbici -> calculate itf, itr, Qf, Qr duals::duald VT, VT_f, i_0f, i_0r, I_Tf1, Q_fT, T_fT, A; duals::duald c10_t; double T_dpart = T.dpart(); VT = CONSTboltz * T / CHARGE; c10_t = here->HICUMc10_t.rpart; if (T_dpart!=0.0) { c10_t.dpart(here->HICUMc10_t.dpart); } VT_f = model->HICUMmcf*VT; i_0f = c10_t * exp(Vbiei/VT_f); i_0r = c10_t * exp(Vbici/VT); *Q_p = Q_0; if (T_f0 > 0.0 || Tr > 0.0) { A = 0.5*Q_0; *Q_p = A+sqrt(A*A+T_f0*i_0f+Tr*i_0r); } 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(T,*itf,ick,Tf,Qf,&T_fT,&Q_fT,Q_bf); //Initial formulation of reverse diffusion charge *Qr = Tr*(*itr); }; std::function calc_it = [&](duals::duald T, duals::duald Vbiei, duals::duald Vbici, duals::duald Q_0, duals::duald T_f0, duals::duald ick){ // This function calculates Q_pT in a dual way // Tr also as argument here? duals::duald VT, VT_f,i_0f,i_0r, Q_p, A, I_Tf1,itf, itr, a_h, Qf, Qr, d_Q0, Q_pT, a, d_Q, Tf, T_fT, Q_bf, Q_fT; duals::duald c10_t; int extra_round=0; double T_dpart = T.dpart(); int l_it; VT = CONSTboltz * T / CHARGE; c10_t = here->HICUMc10_t.rpart; if (T_dpart!=0.0) { c10_t.dpart(here->HICUMc10_t.dpart); } VT_f = model->HICUMmcf*VT; i_0f = c10_t * exp(Vbiei/VT_f); i_0r = c10_t * exp(Vbici/VT); //Initial formulation of forward and reverse component of transfer current Q_p = Q_0; if (T_f0 > 0.0 || Tr > 0.0) { A = 0.5*Q_0; Q_p = A+sqrt(A*A+T_f0*i_0f+Tr*i_0r); } 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(T,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; extra_round = 1; if(Qf > RTOLC*Q_p || a_h > RTOLC) { //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)) || (extra_round < 5)) { 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(T,itf,ick,&Tf,&Qf,&T_fT,&Q_fT,&Q_bf); Qr = Tr*itr; if(Oich == 0.0) { a = 1.0+(T_fT*itf+Qr)/Q_pT; } else { a = 1.0+(T_fT*I_Tf1*(1.0+2.0*a_h)+Qr)/Q_pT; } 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) { if (d_Q>=0) { d_Q = a; } else { d_Q = -a; } } Q_pT = Q_pT+d_Q; l_it = l_it+1; if (!(abs(d_Q) >= RTOLC*abs(Q_pT))) { //extra_rounds to get rid of derivative noise extra_round = extra_round + 1; } } //final calculations afterwards, see later in load where this is called } return Q_pT; }; std::function calc_itss = [&](duals::duald T, duals::duald Vbpci, duals::duald Vsici, duals::duald * HSI_Tsu, duals::duald * Qdsu){ duals::duald HSUM, vt, HSa, HSb, itss_t, tsf_t; double T_dpart = T.dpart(); vt = CONSTboltz * T / CHARGE; itss_t = here->HICUMitss_t.rpart; tsf_t = here->HICUMtsf_t.rpart; if (T_dpart!=0.0){ itss_t.dpart(here->HICUMitss_t.dpart); tsf_t.dpart(here->HICUMtsf_t.dpart); } if(model->HICUMitss > 0.0) { // : Sub_Transfer HSUM = model->HICUMmsf*vt; HSa = exp(Vbpci/HSUM); HSb = exp(Vsici/HSUM); *HSI_Tsu = itss_t*(HSa-HSb); if(model->HICUMtsf > 0.0) { *Qdsu = tsf_t*itss_t*HSa; } else { *Qdsu = 0.0; } } else { *HSI_Tsu = 0.0; *Qdsu = 0.0; }; }; /* loop through all the models */ for (; model != NULL; model = HICUMnextModel(model)) { // Model_initialization int selfheat = ((model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0)); int nqs = ((model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0)); // Avoid divide-by-zero and define infinity other way // High current correction for 2D and 3D effects if (model->HICUMich != 0.0) { Oich = 1.0 / model->HICUMich; } else { Oich = 0.0; } // Base current recombination time constant at b-c barrier if (model->HICUMtbhrec != 0.0) { Otbhrec = 1.0 / model->HICUMtbhrec; } else { Otbhrec = 0.0; } // Turn avalanche calculation on depending of parameters if ((model->HICUMfavl > 0.0) && (model->HICUMcjci0 > 0.0)) { use_aval = 1; } else { use_aval = 0; } // end of Model_initialization /* loop through all the instances of the model */ for (here = HICUMinstances(model); here != NULL ; here=HICUMnextInstance(here)) { // Depletion capacitance splitting at b-c junction // Capacitances at peripheral and external base node C_1 = (1.0 - model->HICUMfbcpar) * (here->HICUMcjcx0_scaled + here->HICUMcbcpar_scaled); if (C_1 >= here->HICUMcbcpar_scaled) { cbcpar1 = here->HICUMcbcpar_scaled; cbcpar2 = 0.0; } else { cbcpar1 = C_1; cbcpar2 = here->HICUMcbcpar_scaled - cbcpar1; } // Parasitic b-e capacitance partitioning: No temperature dependence cbepar2 = model->HICUMfbepar * here->HICUMcbepar_scaled; cbepar1 = here->HICUMcbepar_scaled - cbepar2; gqbepar1 = 0.0; gqbepar2 = 0.0; gqbcpar1 = 0.0; gqbcpar2 = 0.0; gqsu = 0.0; Icth = 0.0, Icth_Vrth = 0.0; /* * initialization */ icheck=1; if(ckt->CKTmode & MODEINITSMSIG) { Vbiei = *(ckt->CKTstate0 + here->HICUMvbiei); Vbici = *(ckt->CKTstate0 + here->HICUMvbici); // dead assign: //Vciei = Vbiei - Vbici; Vbpei = *(ckt->CKTstate0 + here->HICUMvbpei); Vbpci = *(ckt->CKTstate0 + here->HICUMvbpci); Vbci = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vsici = *(ckt->CKTstate0 + here->HICUMvsici); Vsc = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsNode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbpbi = *(ckt->CKTstate0 + here->HICUMvbpbi); Vbe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vcic = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMcollCINode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbbp = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMbaseBPNode)); Vbpe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Veie = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMemitEINode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vsis = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsSINode)- *(ckt->CKTrhsOld+here->HICUMsubsNode)); Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode); Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node); Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node); if (selfheat) { Vrth = *(ckt->CKTstate0 + here->HICUMvrth); } } else if(ckt->CKTmode & MODEINITTRAN) { Vbiei = *(ckt->CKTstate1 + here->HICUMvbiei); Vbici = *(ckt->CKTstate1 + here->HICUMvbici); // dead assign: //Vciei = Vbiei - Vbici; Vbpei = *(ckt->CKTstate1 + here->HICUMvbpei); Vbpci = *(ckt->CKTstate1 + here->HICUMvbpci); Vbci = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vsici = *(ckt->CKTstate1 + here->HICUMvsici); Vsc = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsNode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbpbi = *(ckt->CKTstate1 + here->HICUMvbpbi); Vbe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vcic = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMcollCINode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbbp = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMbaseBPNode)); Vbpe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Veie = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMemitEINode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vsis = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsSINode)- *(ckt->CKTrhsOld+here->HICUMsubsNode)); Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode); Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node); Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node); if (selfheat) { Vrth = *(ckt->CKTstate1 + here->HICUMvrth); } } else if((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){ Vbiei = model->HICUMtype * here->HICUMicVBE; // multiplication by type has historical reasons Vciei = model->HICUMtype * here->HICUMicVCE; // the user sets anytime positive numbers independent from type Vbici = Vbiei - Vciei; Vsc = Vsici = model->HICUMtype * here->HICUMicVCS; Vbe = Vbpei = Vbiei; Vbci = Vbpci = Vbici; Vbpbi = 0.0; Vbbp = 0.0; Vbpe = 0.0; Vcic = 0.0; Veie = 0.0; Vrth = 0.0; Vsis = 0.0; Icth = 0.0, Icth_Vrth=0.0; Vxf=Vxf1=Vxf2=0.0; } else if((ckt->CKTmode & MODEINITJCT) && (here->HICUMoff==0)) { Vbiei = here->HICUMtVcrit; Vbici = 0.0; // dead assign: //Vciei = Vbiei - Vbici; Vsc = Vsici = 0.0; Vbe = Vbpei = Vbiei; Vbci = Vbpci = Vbici; Vbpbi = 0.0; Vbbp = 0.0; Vbpe = 0.0; Vcic = 0.0; Veie = 0.0; Vrth = 0.0; Vsis = 0.0; Icth = 0.0, Icth_Vrth=0.0; Vxf=Vxf1=Vxf2=0.0; } else if((ckt->CKTmode & MODEINITJCT) || ( (ckt->CKTmode & MODEINITFIX) && (here->HICUMoff!=0))) { Vbe=0.0; Vbiei=Vbe; // dead assign: //Vciei=0.0; Vbci=Vbici=Vbpci=0.0; Vbpei=0.0; Vsc=Vsici=0.0; Vbpbi=Vbbp=Vbpe=0.0; Vcic=Veie=Vsis=0.0; Vrth=0.0,Icth=0.0,Icth_Vrth=0.0; Vxf=Vxf1=Vxf2=0.0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { xfact = ckt->CKTdelta/ckt->CKTdeltaOld[1]; Vbiei = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbiei)- xfact * *(ckt->CKTstate2 + here->HICUMvbiei); Vbici = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbici)- xfact * *(ckt->CKTstate2 + here->HICUMvbici); Vciei = Vbiei - Vbici; Vbpei = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbpei)- xfact * *(ckt->CKTstate2 + here->HICUMvbpei); Vbpci = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbpci)- xfact * *(ckt->CKTstate2 + here->HICUMvbpci); Vsici = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvsici)- xfact * *(ckt->CKTstate2 + here->HICUMvsici); Vbpbi = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbpbi)- xfact * *(ckt->CKTstate2 + here->HICUMvbpbi); // dead assign: // Vxf = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf)- // xfact * *(ckt->CKTstate2 + here->HICUMvxf); // Vxf1 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf1)- // xfact * *(ckt->CKTstate2 + here->HICUMvxf1); Vxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)- xfact * *(ckt->CKTstate2 + here->HICUMvxf2); Vrth = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvrth); Veie = (1+xfact) * *(ckt->CKTstate1 + here->HICUMveie)- xfact * *(ckt->CKTstate2 + here->HICUMveie); Vcic = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvcic)- xfact * *(ckt->CKTstate2 + here->HICUMvcic); Vbbp = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbbp)- xfact * *(ckt->CKTstate2 + here->HICUMvbbp); ///////////////////////// // begin copy state vector ///////////////////////// *(ckt->CKTstate0+here->HICUMvbiei)=*(ckt->CKTstate1+here->HICUMvbiei); *(ckt->CKTstate0+here->HICUMvbici)=*(ckt->CKTstate1+here->HICUMvbici); *(ckt->CKTstate0+here->HICUMvbpei)=*(ckt->CKTstate1+here->HICUMvbpei); *(ckt->CKTstate0+here->HICUMvbpbi)=*(ckt->CKTstate1+here->HICUMvbpbi); *(ckt->CKTstate0+here->HICUMvbpci)=*(ckt->CKTstate1+here->HICUMvbpci); *(ckt->CKTstate0+here->HICUMvsici)=*(ckt->CKTstate1+here->HICUMvsici); *(ckt->CKTstate0+here->HICUMvcic)=*(ckt->CKTstate1+here->HICUMvcic); *(ckt->CKTstate0+here->HICUMvbbp)=*(ckt->CKTstate1+here->HICUMvbbp); *(ckt->CKTstate0+here->HICUMveie)=*(ckt->CKTstate1+here->HICUMveie); *(ckt->CKTstate0+here->HICUMibiei)=*(ckt->CKTstate1+here->HICUMibiei); *(ckt->CKTstate0+here->HICUMibiei_Vbiei)=*(ckt->CKTstate1+here->HICUMibiei_Vbiei); *(ckt->CKTstate0+here->HICUMibiei_Vxf)=*(ckt->CKTstate1+here->HICUMibiei_Vxf); *(ckt->CKTstate0+here->HICUMibiei_Vbici)=*(ckt->CKTstate1+here->HICUMibiei_Vbici); *(ckt->CKTstate0+here->HICUMibiei_Vrth)=*(ckt->CKTstate1+here->HICUMibiei_Vrth); *(ckt->CKTstate0+here->HICUMibpei)=*(ckt->CKTstate1+here->HICUMibpei); *(ckt->CKTstate0+here->HICUMibpei_Vbpei)=*(ckt->CKTstate1+here->HICUMibpei_Vbpei); *(ckt->CKTstate0+here->HICUMibpei_Vrth)=*(ckt->CKTstate1+here->HICUMibpei_Vrth); *(ckt->CKTstate0+here->HICUMiciei)=*(ckt->CKTstate1+here->HICUMiciei); *(ckt->CKTstate0+here->HICUMiciei_Vbiei)=*(ckt->CKTstate1+here->HICUMiciei_Vbiei); *(ckt->CKTstate0+here->HICUMiciei_Vbici)=*(ckt->CKTstate1+here->HICUMiciei_Vbici); *(ckt->CKTstate0+here->HICUMiciei_Vxf2)=*(ckt->CKTstate1+here->HICUMiciei_Vxf2); *(ckt->CKTstate0+here->HICUMiciei_Vrth)=*(ckt->CKTstate1+here->HICUMiciei_Vrth); *(ckt->CKTstate0+here->HICUMibici)=*(ckt->CKTstate1+here->HICUMibici); *(ckt->CKTstate0+here->HICUMibici_Vbici)=*(ckt->CKTstate1+here->HICUMibici_Vbici); *(ckt->CKTstate0+here->HICUMibici_Vbiei)=*(ckt->CKTstate1+here->HICUMibici_Vbiei); *(ckt->CKTstate0+here->HICUMibici_Vrth)=*(ckt->CKTstate1+here->HICUMibici_Vrth); *(ckt->CKTstate0+here->HICUMibpbi)=*(ckt->CKTstate1+here->HICUMibpbi); *(ckt->CKTstate0+here->HICUMibpbi_Vbpbi)=*(ckt->CKTstate1+here->HICUMibpbi_Vbpbi); *(ckt->CKTstate0+here->HICUMibpbi_Vbiei)=*(ckt->CKTstate1+here->HICUMibpbi_Vbiei); *(ckt->CKTstate0+here->HICUMibpbi_Vbici)=*(ckt->CKTstate1+here->HICUMibpbi_Vbici); *(ckt->CKTstate0+here->HICUMibpbi_Vrth)=*(ckt->CKTstate1+here->HICUMibpbi_Vrth); *(ckt->CKTstate0+here->HICUMibpci)=*(ckt->CKTstate1+here->HICUMibpci); *(ckt->CKTstate0+here->HICUMibpci_Vbpci)=*(ckt->CKTstate1+here->HICUMibpci_Vbpci); *(ckt->CKTstate0+here->HICUMibpci_Vrth)=*(ckt->CKTstate1+here->HICUMibpci_Vrth); *(ckt->CKTstate0+here->HICUMisici)=*(ckt->CKTstate1+here->HICUMisici); *(ckt->CKTstate0+here->HICUMisici_Vsici)=*(ckt->CKTstate1+here->HICUMisici_Vsici); *(ckt->CKTstate0+here->HICUMisici_Vrth)=*(ckt->CKTstate1+here->HICUMisici_Vrth); *(ckt->CKTstate0+here->HICUMibpsi)=*(ckt->CKTstate1+here->HICUMibpsi); *(ckt->CKTstate0+here->HICUMibpsi_Vbpci)=*(ckt->CKTstate1+here->HICUMibpsi_Vbpci); *(ckt->CKTstate0+here->HICUMibpsi_Vsici)=*(ckt->CKTstate1+here->HICUMibpsi_Vsici); *(ckt->CKTstate0+here->HICUMibpsi_Vrth)=*(ckt->CKTstate1+here->HICUMibpsi_Vrth); *(ckt->CKTstate0+here->HICUMisis_Vsis)=*(ckt->CKTstate1+here->HICUMisis_Vsis); *(ckt->CKTstate0+here->HICUMieie)=*(ckt->CKTstate1+here->HICUMieie); *(ckt->CKTstate0+here->HICUMieie_Vrth)=*(ckt->CKTstate1+here->HICUMieie_Vrth); *(ckt->CKTstate0+here->HICUMqrbi)=*(ckt->CKTstate1+here->HICUMqrbi); *(ckt->CKTstate0+here->HICUMcqrbi)=*(ckt->CKTstate1+here->HICUMcqrbi); *(ckt->CKTstate0+here->HICUMqjei)=*(ckt->CKTstate1+here->HICUMqjei); *(ckt->CKTstate0+here->HICUMcqjei)=*(ckt->CKTstate1+here->HICUMcqjei); *(ckt->CKTstate0+here->HICUMqf)=*(ckt->CKTstate1+here->HICUMqf); *(ckt->CKTstate0+here->HICUMcqf)=*(ckt->CKTstate1+here->HICUMcqf); *(ckt->CKTstate0+here->HICUMqr)=*(ckt->CKTstate1+here->HICUMqr); *(ckt->CKTstate0+here->HICUMcqr)=*(ckt->CKTstate1+here->HICUMcqr); *(ckt->CKTstate0+here->HICUMqjci)=*(ckt->CKTstate1+here->HICUMqjci); *(ckt->CKTstate0+here->HICUMcqjci)=*(ckt->CKTstate1+here->HICUMcqjci); *(ckt->CKTstate0+here->HICUMqjep)=*(ckt->CKTstate1+here->HICUMqjep); *(ckt->CKTstate0+here->HICUMcqjep)=*(ckt->CKTstate1+here->HICUMcqjep); *(ckt->CKTstate0+here->HICUMqjcx0_i)=*(ckt->CKTstate1+here->HICUMqjcx0_i); *(ckt->CKTstate0+here->HICUMcqcx0_t_i)=*(ckt->CKTstate1+here->HICUMcqcx0_t_i); *(ckt->CKTstate0+here->HICUMqjcx0_ii)=*(ckt->CKTstate1+here->HICUMqjcx0_ii); *(ckt->CKTstate0+here->HICUMcqcx0_t_ii)=*(ckt->CKTstate1+here->HICUMcqcx0_t_ii); *(ckt->CKTstate0+here->HICUMqdsu)=*(ckt->CKTstate1+here->HICUMqdsu); *(ckt->CKTstate0+here->HICUMcqdsu)=*(ckt->CKTstate1+here->HICUMcqdsu); *(ckt->CKTstate0+here->HICUMqjs)=*(ckt->CKTstate1+here->HICUMqjs); *(ckt->CKTstate0+here->HICUMcqjs)=*(ckt->CKTstate1+here->HICUMcqjs); *(ckt->CKTstate0+here->HICUMqscp)=*(ckt->CKTstate1+here->HICUMqscp); *(ckt->CKTstate0+here->HICUMcqscp)=*(ckt->CKTstate1+here->HICUMcqscp); *(ckt->CKTstate0+here->HICUMqbepar1)=*(ckt->CKTstate1+here->HICUMqbepar1); *(ckt->CKTstate0+here->HICUMcqbepar1)=*(ckt->CKTstate1+here->HICUMcqbepar1); *(ckt->CKTstate0+here->HICUMgqbepar1)=*(ckt->CKTstate1+here->HICUMgqbepar1); *(ckt->CKTstate0+here->HICUMqbepar2)=*(ckt->CKTstate1+here->HICUMqbepar2); *(ckt->CKTstate0+here->HICUMcqbepar2)=*(ckt->CKTstate1+here->HICUMcqbepar2); *(ckt->CKTstate0+here->HICUMgqbepar2)=*(ckt->CKTstate1+here->HICUMgqbepar2); *(ckt->CKTstate0+here->HICUMqbcpar1)=*(ckt->CKTstate1+here->HICUMqbcpar1); *(ckt->CKTstate0+here->HICUMcqbcpar1)=*(ckt->CKTstate1+here->HICUMcqbcpar1); *(ckt->CKTstate0+here->HICUMgqbcpar1)=*(ckt->CKTstate1+here->HICUMgqbcpar1); *(ckt->CKTstate0+here->HICUMqbcpar2)=*(ckt->CKTstate1+here->HICUMqbcpar2); *(ckt->CKTstate0+here->HICUMcqbcpar2)=*(ckt->CKTstate1+here->HICUMcqbcpar2); *(ckt->CKTstate0+here->HICUMgqbcpar2)=*(ckt->CKTstate1+here->HICUMgqbcpar2); *(ckt->CKTstate0+here->HICUMqsu)=*(ckt->CKTstate1+here->HICUMqsu); *(ckt->CKTstate0+here->HICUMcqsu)=*(ckt->CKTstate1+here->HICUMcqsu); *(ckt->CKTstate0+here->HICUMgqsu)=*(ckt->CKTstate1+here->HICUMgqsu); *(ckt->CKTstate0+here->HICUMqcth)=*(ckt->CKTstate1+here->HICUMqcth); *(ckt->CKTstate0+here->HICUMcqcth)=*(ckt->CKTstate1+here->HICUMcqcth); *(ckt->CKTstate0+here->HICUMvrth)=*(ckt->CKTstate1+here->HICUMvrth); *(ckt->CKTstate0+here->HICUMvxf)=*(ckt->CKTstate1+here->HICUMvxf); *(ckt->CKTstate0+here->HICUMqxf)=*(ckt->CKTstate1+here->HICUMqxf); *(ckt->CKTstate0+here->HICUMcqxf)=*(ckt->CKTstate1+here->HICUMcqxf); *(ckt->CKTstate0+here->HICUMgqxf)=*(ckt->CKTstate1+here->HICUMgqxf); *(ckt->CKTstate0+here->HICUMixf_Vbiei)=*(ckt->CKTstate1+here->HICUMixf_Vbiei); *(ckt->CKTstate0+here->HICUMixf_Vbici)=*(ckt->CKTstate1+here->HICUMixf_Vbici); *(ckt->CKTstate0+here->HICUMixf_Vxf)=*(ckt->CKTstate1+here->HICUMixf_Vxf); *(ckt->CKTstate0+here->HICUMixf_Vrth)=*(ckt->CKTstate1+here->HICUMixf_Vrth); *(ckt->CKTstate0+here->HICUMvxf1)=*(ckt->CKTstate1+here->HICUMvxf1); *(ckt->CKTstate0+here->HICUMqxf1)=*(ckt->CKTstate1+here->HICUMqxf1); *(ckt->CKTstate0+here->HICUMcqxf1)=*(ckt->CKTstate1+here->HICUMcqxf1); *(ckt->CKTstate0+here->HICUMgqxf1)=*(ckt->CKTstate1+here->HICUMgqxf1); *(ckt->CKTstate0+here->HICUMixf1_Vbiei)=*(ckt->CKTstate1+here->HICUMixf1_Vbiei); *(ckt->CKTstate0+here->HICUMixf1_Vbici)=*(ckt->CKTstate1+here->HICUMixf1_Vbici); *(ckt->CKTstate0+here->HICUMixf1_Vxf2)=*(ckt->CKTstate1+here->HICUMixf1_Vxf2); *(ckt->CKTstate0+here->HICUMixf1_Vxf1)=*(ckt->CKTstate1+here->HICUMixf1_Vxf1); *(ckt->CKTstate0+here->HICUMixf1_Vrth)=*(ckt->CKTstate1+here->HICUMixf1_Vrth); *(ckt->CKTstate0+here->HICUMvxf2)=*(ckt->CKTstate1+here->HICUMvxf2); *(ckt->CKTstate0+here->HICUMqxf2)=*(ckt->CKTstate1+here->HICUMqxf2); *(ckt->CKTstate0+here->HICUMcqxf2)=*(ckt->CKTstate1+here->HICUMcqxf2); *(ckt->CKTstate0+here->HICUMgqxf2)=*(ckt->CKTstate1+here->HICUMgqxf2); *(ckt->CKTstate0+here->HICUMixf2_Vbiei)=*(ckt->CKTstate1+here->HICUMixf2_Vbiei); *(ckt->CKTstate0+here->HICUMixf2_Vbici)=*(ckt->CKTstate1+here->HICUMixf2_Vbici); *(ckt->CKTstate0+here->HICUMixf2_Vxf1)=*(ckt->CKTstate1+here->HICUMixf2_Vxf1); *(ckt->CKTstate0+here->HICUMixf2_Vxf2)=*(ckt->CKTstate1+here->HICUMixf2_Vxf2); *(ckt->CKTstate0+here->HICUMixf2_Vrth)=*(ckt->CKTstate1+here->HICUMixf2_Vrth); *(ckt->CKTstate0+here->HICUMith)=*(ckt->CKTstate1+here->HICUMith); *(ckt->CKTstate0+here->HICUMith_Vrth)=*(ckt->CKTstate1+here->HICUMith_Vrth); *(ckt->CKTstate0+here->HICUMith_Vbiei)=*(ckt->CKTstate1+here->HICUMith_Vbiei); *(ckt->CKTstate0+here->HICUMith_Vbici)=*(ckt->CKTstate1+here->HICUMith_Vbici); *(ckt->CKTstate0+here->HICUMith_Vbpbi)=*(ckt->CKTstate1+here->HICUMith_Vbpbi); *(ckt->CKTstate0+here->HICUMith_Vbpci)=*(ckt->CKTstate1+here->HICUMith_Vbpci); *(ckt->CKTstate0+here->HICUMith_Vbpei)=*(ckt->CKTstate1+here->HICUMith_Vbpei); *(ckt->CKTstate0+here->HICUMith_Vciei)=*(ckt->CKTstate1+here->HICUMith_Vciei); *(ckt->CKTstate0+here->HICUMith_Vsici)=*(ckt->CKTstate1+here->HICUMith_Vsici); *(ckt->CKTstate0+here->HICUMith_Vcic)=*(ckt->CKTstate1+here->HICUMith_Vcic); *(ckt->CKTstate0+here->HICUMith_Vbbp)=*(ckt->CKTstate1+here->HICUMith_Vbbp); *(ckt->CKTstate0+here->HICUMith_Veie)=*(ckt->CKTstate1+here->HICUMith_Veie); *(ckt->CKTstate0+here->HICUMit)=*(ckt->CKTstate1+here->HICUMit); ///////////////////////// // end copy state vector ///////////////////////// } else { #endif /* PREDICTOR */ /* * compute new nonlinear branch voltages */ Vbiei = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBINode)- *(ckt->CKTrhsOld+here->HICUMemitEINode)); // no direct Vbe branch exists, dont need this voltage: // Vbe = model->HICUMtype*( // *(ckt->CKTrhsOld+here->HICUMbaseNode)- // *(ckt->CKTrhsOld+here->HICUMemitNode)); Vbici = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBINode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vbpei = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMemitEINode)); Vbpbi = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMbaseBINode)); Veie = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMemitEINode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vcic = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMcollCINode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbbp = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMbaseBPNode)); Vbpci = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vsici = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsSINode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); // not needed because convergence in NQS network is not checked here //Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode); //Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node); Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node); Vciei = Vbiei - Vbici; if (selfheat) { Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode); } #ifndef PREDICTOR } #endif /* PREDICTOR */ delvbiei = Vbiei - *(ckt->CKTstate0 + here->HICUMvbiei); delvbici = Vbici - *(ckt->CKTstate0 + here->HICUMvbici); delvbpei = Vbpei - *(ckt->CKTstate0 + here->HICUMvbpei); delvbpbi = Vbpbi - *(ckt->CKTstate0 + here->HICUMvbpbi); delvbpci = Vbpci - *(ckt->CKTstate0 + here->HICUMvbpci); delvsici = Vsici - *(ckt->CKTstate0 + here->HICUMvsici); delvcic = Vcic - *(ckt->CKTstate0 + here->HICUMvcic); delvbbp = Vbbp - *(ckt->CKTstate0 + here->HICUMvbbp); delveie = Veie - *(ckt->CKTstate0 + here->HICUMveie); delvxf2 = Vxf2 - *(ckt->CKTstate0 + here->HICUMvxf2); delvciei = delvbiei-delvbici; if (selfheat) { delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth); } else { delvrth = 0; } Vbe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vsc = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsNode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbci = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vbpe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Veie = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMemitEINode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); Vcic = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMcollCINode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbbp = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMbaseBPNode)); Vsis = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsSINode)- *(ckt->CKTrhsOld+here->HICUMsubsNode)); Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode); Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node); Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node); if (selfheat) { Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode); } //todo: maybe add ibiei_Vxf ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei+ *(ckt->CKTstate0 + here->HICUMibiei_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici; ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ *(ckt->CKTstate0 + here->HICUMibici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei+ *(ckt->CKTstate0 + here->HICUMibpei_Vrth)*delvrth; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + *(ckt->CKTstate0 + here->HICUMibpci_Vbpci)*delvbpci+ *(ckt->CKTstate0 + here->HICUMibpci_Vrth)*delvrth; icieihat = *(ckt->CKTstate0 + here->HICUMiciei) + *(ckt->CKTstate0 + here->HICUMiciei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMiciei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMiciei_Vxf2)*delvxf2 + *(ckt->CKTstate0 + here->HICUMiciei_Vbici)*delvbici; ibpbihat = *(ckt->CKTstate0 + here->HICUMibpbi) + *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi)*delvbpbi + *(ckt->CKTstate0 + here->HICUMibpbi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibpbi_Vbici)*delvbici; isicihat = *(ckt->CKTstate0 + here->HICUMisici) + *(ckt->CKTstate0 + here->HICUMisici_Vsici)*delvsici+ *(ckt->CKTstate0 + here->HICUMisici_Vrth)*delvrth; ibpsihat = *(ckt->CKTstate0 + here->HICUMibpsi) + *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci)*delvbpci + *(ckt->CKTstate0 + here->HICUMibpsi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpsi_Vsici)*delvsici; ithhat = *(ckt->CKTstate0 + here->HICUMith) + *(ckt->CKTstate0 + here->HICUMith_Vbiei)*delvbiei+ *(ckt->CKTstate0 + here->HICUMith_Vbici)*delvbici+ *(ckt->CKTstate0 + here->HICUMith_Vbpbi)*delvbpbi+ *(ckt->CKTstate0 + here->HICUMith_Vbpci)*delvbpci+ *(ckt->CKTstate0 + here->HICUMith_Vbpei)*delvbpei+ *(ckt->CKTstate0 + here->HICUMith_Vciei)*delvciei+ *(ckt->CKTstate0 + here->HICUMith_Vsici)*delvsici+ *(ckt->CKTstate0 + here->HICUMith_Vcic)*delvcic+ *(ckt->CKTstate0 + here->HICUMith_Vbbp)*delvbbp+ *(ckt->CKTstate0 + here->HICUMith_Veie)*delveie+ *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth; /* * 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)) && !selfheat && (fabs(delvbiei) < (ckt->CKTreltol*MAX(fabs(Vbiei), fabs(*(ckt->CKTstate0 + here->HICUMvbiei)))+ ckt->CKTvoltTol)) ) if( (fabs(delvbici) < ckt->CKTreltol*MAX(fabs(Vbici), fabs(*(ckt->CKTstate0 + here->HICUMvbici)))+ ckt->CKTvoltTol) ) if( (fabs(delvbpei) < ckt->CKTreltol*MAX(fabs(Vbpei), fabs(*(ckt->CKTstate0 + here->HICUMvbpei)))+ ckt->CKTvoltTol) ) if( (fabs(delvbpbi) < ckt->CKTreltol*MAX(fabs(Vbpbi), fabs(*(ckt->CKTstate0 + here->HICUMvbpbi)))+ ckt->CKTvoltTol) ) if( (fabs(delvsici) < ckt->CKTreltol*MAX(fabs(Vsici), fabs(*(ckt->CKTstate0 + here->HICUMvsici)))+ ckt->CKTvoltTol) ) if( (fabs(delvcic) < ckt->CKTreltol*MAX(fabs(Vcic), fabs(*(ckt->CKTstate0 + here->HICUMvcic)))+ ckt->CKTvoltTol) ) if( (fabs(delvbbp) < ckt->CKTreltol*MAX(fabs(Vbbp), fabs(*(ckt->CKTstate0 + here->HICUMvbbp)))+ ckt->CKTvoltTol) ) if( (fabs(delveie) < ckt->CKTreltol*MAX(fabs(Veie), fabs(*(ckt->CKTstate0 + here->HICUMveie)))+ ckt->CKTvoltTol) ) if( (fabs(ibieihat-*(ckt->CKTstate0 + here->HICUMibiei)) < ckt->CKTreltol* MAX(fabs(ibieihat), fabs(*(ckt->CKTstate0 + here->HICUMibiei)))+ ckt->CKTabstol) ) if( (fabs(ibpeihat-*(ckt->CKTstate0 + here->HICUMibpei)) < ckt->CKTreltol* MAX(fabs(ibpeihat), fabs(*(ckt->CKTstate0 + here->HICUMibpei)))+ ckt->CKTabstol) ) if( (fabs(icieihat-*(ckt->CKTstate0 + here->HICUMiciei)) < ckt->CKTreltol* MAX(fabs(icieihat), fabs(*(ckt->CKTstate0 + here->HICUMiciei)))+ ckt->CKTabstol) ) if( (fabs(ibicihat-*(ckt->CKTstate0 + here->HICUMibici)) < ckt->CKTreltol* MAX(fabs(ibicihat), fabs(*(ckt->CKTstate0 + here->HICUMibici)))+ ckt->CKTabstol) ) if( (fabs(ibpcihat-*(ckt->CKTstate0 + here->HICUMibpci)) < ckt->CKTreltol* MAX(fabs(ibpcihat), fabs(*(ckt->CKTstate0 + here->HICUMibpci)))+ ckt->CKTabstol) ) if( (fabs(ibpbihat-*(ckt->CKTstate0 + here->HICUMibpbi)) < ckt->CKTreltol* MAX(fabs(ibpbihat), fabs(*(ckt->CKTstate0 + here->HICUMibpbi)))+ ckt->CKTabstol) ) if( (fabs(isicihat-*(ckt->CKTstate0 + here->HICUMisici)) < ckt->CKTreltol* MAX(fabs(isicihat), fabs(*(ckt->CKTstate0 + here->HICUMisici)))+ ckt->CKTabstol) ) if( (fabs(ithhat-*(ckt->CKTstate0 + here->HICUMith)) < ckt->CKTreltol* MAX(fabs(ithhat), fabs(*(ckt->CKTstate0 + here->HICUMith)))+ ckt->CKTabstol) ) if( (fabs(ibpsihat-*(ckt->CKTstate0 + here->HICUMibpsi)) < ckt->CKTreltol* MAX(fabs(ibpsihat), fabs(*(ckt->CKTstate0 + here->HICUMibpsi)))+ ckt->CKTabstol) ) { /* * bypassing.... */ Vbiei = *(ckt->CKTstate0 + here->HICUMvbiei); Vbici = *(ckt->CKTstate0 + here->HICUMvbici); Vbpei = *(ckt->CKTstate0 + here->HICUMvbpei); Vbpbi = *(ckt->CKTstate0 + here->HICUMvbpbi); Vbpci = *(ckt->CKTstate0 + here->HICUMvbpci); Vsici = *(ckt->CKTstate0 + here->HICUMvsici); Vcic = *(ckt->CKTstate0 + here->HICUMvcic); Vbbp = *(ckt->CKTstate0 + here->HICUMvbbp); Veie = *(ckt->CKTstate0 + here->HICUMveie); Vrth = *(ckt->CKTstate0 + here->HICUMvrth); Vxf = *(ckt->CKTstate0 + here->HICUMvxf); Vxf1 = *(ckt->CKTstate0 + here->HICUMvxf1); Vxf2 = *(ckt->CKTstate0 + here->HICUMvxf2); Ibiei = *(ckt->CKTstate0 + here->HICUMibiei); Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vxf = *(ckt->CKTstate0 + here->HICUMibiei_Vxf); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); Ibiei_Vrth = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); Ibpei = *(ckt->CKTstate0 + here->HICUMibpei); Ibpei_Vbpei = *(ckt->CKTstate0 + here->HICUMibpei_Vbpei); Ibpei_Vrth = *(ckt->CKTstate0 + here->HICUMibpei_Vrth); Iciei = *(ckt->CKTstate0 + here->HICUMiciei); Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth); Iciei_Vxf2 = *(ckt->CKTstate0 + here->HICUMiciei_Vxf2); Ibici = *(ckt->CKTstate0 + here->HICUMibici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibici_Vrth = *(ckt->CKTstate0 + here->HICUMibici_Vrth); Ibpbi = *(ckt->CKTstate0 + here->HICUMibpbi); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vbici = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); Isici = *(ckt->CKTstate0 + here->HICUMisici); Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); Isici_Vrth = *(ckt->CKTstate0 + here->HICUMisici_Vrth); Ibpsi = *(ckt->CKTstate0 + here->HICUMibpsi); Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici); Ibpsi_Vrth = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth); Ibpci = *(ckt->CKTstate0 + here->HICUMibpci); Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); //dead assign: //Ieie = *(ckt->CKTstate0 + here->HICUMieie); Ieie_Vrth = *(ckt->CKTstate0 + here->HICUMieie_Vrth); Isis_Vsis = *(ckt->CKTstate0 + here->HICUMisis_Vsis); gqbepar1 = *(ckt->CKTstate0 + here->HICUMgqbepar1); gqbepar2 = *(ckt->CKTstate0 + here->HICUMgqbepar2); gqbcpar1 = *(ckt->CKTstate0 + here->HICUMgqbcpar1); gqbcpar2 = *(ckt->CKTstate0 + here->HICUMgqbcpar2); Ixf = *(ckt->CKTstate0 + here->HICUMixf) ; Ixf_Vbiei = *(ckt->CKTstate0 + here->HICUMixf_Vbiei) ; Ixf_Vbici = *(ckt->CKTstate0 + here->HICUMixf_Vbici) ; Ixf_Vxf = *(ckt->CKTstate0 + here->HICUMixf_Vxf) ; Ixf_dT = *(ckt->CKTstate0 + here->HICUMixf_Vrth) ; Ixf1 = *(ckt->CKTstate0 + here->HICUMixf1) ; Ixf1_Vbiei = *(ckt->CKTstate0 + here->HICUMixf1_Vbiei) ; Ixf1_Vbici = *(ckt->CKTstate0 + here->HICUMixf1_Vbici) ; Ixf1_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf2) ; Ixf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf1) ; Ixf1_dT = *(ckt->CKTstate0 + here->HICUMixf1_Vrth) ; Ixf2 = *(ckt->CKTstate0 + here->HICUMixf2) ; Ixf2_Vbiei = *(ckt->CKTstate0 + here->HICUMixf2_Vbiei) ; Ixf2_Vbici = *(ckt->CKTstate0 + here->HICUMixf2_Vbici) ; Ixf2_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf1) ; Ixf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf2) ; Ixf2_dT = *(ckt->CKTstate0 + here->HICUMixf2_Vrth) ; goto load; } /* * limit nonlinear branch voltages */ ichk1 = 1, ichk2 = 1, ichk3 = 1, ichk4 = 1, ichk5=1, ichk6 = 0; Vbiei = DEVpnjlim(Vbiei,*(ckt->CKTstate0 + here->HICUMvbiei),here->HICUMvt.rpart, here->HICUMtVcrit,&icheck); Vaval = 3 * here->HICUMvdci_t.rpart;//limit step around 3*vdci_t -> somehow this brings convergence if ((model->HICUMfavlGiven) && (Vbici < MIN(0, -Vaval))) { Vbici_temp = -(Vbici + Vaval); Vbici_temp = DEVpnjlim( Vbici_temp, -(*(ckt->CKTstate0 + here->HICUMvbici) + Vaval), here->HICUMvt.rpart, here->HICUMtVcrit, &ichk1 ); Vbici = -(Vbici_temp + Vaval); } else { Vbici = DEVpnjlim(Vbici,*(ckt->CKTstate0 + here->HICUMvbici),here->HICUMvt.rpart, here->HICUMtVcrit,&ichk1); } Vbpei = DEVpnjlim(Vbpei,*(ckt->CKTstate0 + here->HICUMvbpei),here->HICUMvt.rpart, here->HICUMtVcrit,&ichk2); Vbpci = DEVpnjlim(Vbpci,*(ckt->CKTstate0 + here->HICUMvbpci),here->HICUMvt.rpart, here->HICUMtVcrit,&ichk3); Vsici = DEVpnjlim(Vsici,*(ckt->CKTstate0 + here->HICUMvsici),here->HICUMvt.rpart, here->HICUMtVcrit,&ichk4); Vbpbi = DEVpnjlim(Vbpbi,*(ckt->CKTstate0 + here->HICUMvbpbi),here->HICUMvt.rpart, here->HICUMtVcrit,&ichk5); if (selfheat) { Vrth = DEVlimitlog(Vrth, *(ckt->CKTstate0 + here->HICUMvrth),1,&ichk6); } if ((ichk1 == 1) || (ichk2 == 1) || (ichk3 == 1) || (ichk4 == 1) || (ichk5 == 1) || (ichk6 == 1)) icheck=1; } /* * determine dc current and derivatives */ Vbiei = model->HICUMtype*Vbiei; Vbici = model->HICUMtype*Vbici; Vciei = (Vbiei-Vbici); Vbpei = model->HICUMtype*Vbpei; Vbpci = model->HICUMtype*Vbpci; Vbci = model->HICUMtype*Vbci; Vsici = model->HICUMtype*Vsici; Vsc = model->HICUMtype*Vsc; // Thermal update if (selfheat) { Temp = here->HICUMtemp+Vrth; hicum_thermal_update(model, here, &Temp, &Tdev_Vrth); here->HICUMdtemp_sh = Temp - here->HICUMtemp; here->HICUMtemp_Vrth = Tdev_Vrth; } else { Temp = here->HICUMtemp; Tdev_Vrth = 0; here->HICUMdtemp_sh = 0; here->HICUMtemp_Vrth = 0; } Temp_dual = Temp + 1_e*Tdev_Vrth; // Model_evaluation //Intrinsic transistor //Internal base currents across b-e junction hicum_diode(Temp_dual,here->HICUMibeis_t,model->HICUMmbei, Vbiei, &ibei, &ibei_Vbiei, &ibei_dT); hicum_diode(Temp_dual,here->HICUMireis_t,model->HICUMmrei, Vbiei, &irei, &irei_Vbiei, &irei_dT); //Internal b-e and b-c junction capacitances and charges //Cjei = ddx(Qjei,V(bi)); hicum_qjmodf(Temp_dual,here->HICUMcjei0_t,here->HICUMvdei_t,model->HICUMzei,here->HICUMajei_t,Vbiei,&Cjei,&Cjei_Vbiei, &Cjei_dT,&Qjei, &Qjei_Vbiei, &Qjei_dT); result = calc_hjei_vbe(Vbiei+1_e, Temp, here, model); hjei_vbe = result.rpart(); hjei_vbe_Vbiei = result.dpart(); result = calc_hjei_vbe(Vbiei, Temp_dual, here, model); hjei_vbe_dT = result.dpart(); //Cjci = ddx(Qjci,V(bi)); hicum_HICJQ(Temp_dual, here->HICUMcjci0_t,here->HICUMvdci_t,model->HICUMzci,here->HICUMvptci_t, Vbici, &Cjci, &Cjci_Vbici, &Cjci_dT, &Qjci, &Qjci_Vbici, &Qjci_dT); //Hole charge at low bias result = calc_Q_0(Temp , Qjei+1_e*Qjei_Vbiei, Qjci, hjei_vbe+1_e*hjei_vbe_Vbiei); Q_0 = result.rpart(); Q_0_Vbiei = result.dpart(); result = calc_Q_0(Temp , Qjei, Qjci+1_e*Qjci_Vbici, hjei_vbe); Q_0_Vbici = result.dpart(); result = calc_Q_0(Temp_dual , Qjei+1_e*Qjei_dT, Qjci+1_e*Qjci_dT, hjei_vbe+1_e*hjei_vbe_dT); Q_0_dT = result.dpart(); //Transit time calculation at low current density result = calc_T_f0(Temp, Vbici+1_e); T_f0 = result.rpart(); T_f0_Vbici = result.dpart(); result = calc_T_f0(Temp_dual, Vbici); T_f0_dT = result.dpart() ; //Critical current result = calc_ick(Temp, Vciei+1_e); ick = result.rpart(); ick_Vciei = result.dpart(); result = calc_ick(Temp_dual, Vciei); ick_dT = result.dpart(); here->HICUMick = ick; //begin Q_pT calculation //Initial formulation of forward and reverse component of transfer current Tr = model->HICUMtr; //begin initial transfer current calculations -> itf, itr, Qf, Qr------------ calc_it_initial(Temp_dual, Vbiei , Vbici , Q_0+1_e*Q_0_dT , T_f0+1_e*T_f0_dT , ick+1_e*ick_dT , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_a_h, &result_Q_p, &result_Tf); itf = result_itf.rpart(); itr = result_itr.rpart(); Qf = result_Qf.rpart(); Qr = result_Qr.rpart(); Q_bf = result_Q_bf.rpart(); a_h = result_a_h.rpart(); //needed to check if newton iteration needed Q_p = result_Q_p.rpart(); //needed to check if newton iteration needed Tf = result_Tf.rpart(); //needed to check if newton iteration needed // dead assign: //itf_dT = result_itf.dpart(); //itr_dT = result_itr.dpart(); //Qf_dT = result_Qf.dpart(); //Qr_dT = result_Qr.dpart(); //Q_bf_dT= result_Q_bf.dpart(); //Tf_dT = result_Tf.dpart(); if (!(Qf > RTOLC*Q_p || a_h > RTOLC)) { // in this case the newton is not run and the derivatives of the initial solution are needed calc_it_initial(Temp_dual, Vbiei , Vbici , Q_0+1_e*Q_0_dT , T_f0+1_e*T_f0_dT , ick+1_e*ick_dT , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_a_h, &result_Q_p, &result_Tf); itf_dT = result_itf.dpart(); itr_dT = result_itr.dpart(); Qf_dT = result_Qf.dpart(); Qr_dT = result_Qr.dpart(); Q_bf_dT = result_Q_bf.dpart(); Tf_dT = result_Tf.dpart(); calc_it_initial(Temp , Vbiei+1_e, Vbici , Q_0+1_e*Q_0*Vbiei , T_f0 , ick+1_e*ick_Vciei , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_a_h, &result_Q_p, &result_Tf); itf_Vbiei = result_itf.dpart(); itr_Vbiei = result_itr.dpart(); Qf_Vbiei = result_Qf.dpart(); Qr_Vbiei = result_Qr.dpart(); Q_bf_Vbiei = result_Q_bf.dpart(); Tf_Vbiei = result_Tf.dpart(); calc_it_initial(Temp , Vbiei , Vbici+1_e, Q_0+1_e*Q_0_Vbici , T_f0+1_e*T_f0_Vbici , ick-1_e*ick_Vciei , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_a_h, &result_Q_p, &result_Tf); itf_Vbici = result_itf.dpart(); itr_Vbici = result_itr.dpart(); Qf_Vbici = result_Qf.dpart(); Qr_Vbici = result_Qr.dpart(); Q_bf_Vbici= result_Q_bf.dpart(); Tf_Vbici = result_Tf.dpart(); } else { //Newton needed result = calc_it(Temp_dual, Vbiei , Vbici , Q_0+1_e*Q_0_dT , T_f0+1_e*T_f0_dT , ick+1_e*ick_dT ); Q_pT = result.rpart(); Q_pT_dT = result.dpart(); result = calc_it(Temp , Vbiei+1_e, Vbici , Q_0+1_e*Q_0_Vbiei , T_f0 , ick+1_e*ick_Vciei ); Q_pT_dVbiei = result.dpart(); result = calc_it(Temp , Vbiei , Vbici+1_e, Q_0+1_e*Q_0_Vbici , T_f0+1_e*T_f0_Vbici , ick-1_e*ick_Vciei ); Q_pT_dVbici = result.dpart(); //end Q_pT ------------------------------------------------------------------------------- //begin final transfer current calculations -> itf, itr, Qf, Qr------------ calc_it_final(Temp_dual, Vbiei , Vbici , Q_pT+1_e*Q_pT_dT , T_f0+1_e*T_f0_dT , ick+1_e*ick_dT , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_Tf); itf = result_itf.rpart(); itr = result_itr.rpart(); Qf = result_Qf.rpart(); Qr = result_Qr.rpart(); Q_bf = result_Q_bf.rpart(); Tf = result_Tf.rpart(); itf_dT = result_itf.dpart(); itr_dT = result_itr.dpart(); Qf_dT = result_Qf.dpart(); Qr_dT = result_Qr.dpart(); Q_bf_dT= result_Q_bf.dpart(); Tf_dT = result_Tf.dpart(); calc_it_final(Temp , Vbiei+1_e , Vbici , Q_pT+1_e*Q_pT_dVbiei , T_f0 , ick+1_e*ick_Vciei , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_Tf); itf_Vbiei = result_itf.dpart(); itr_Vbiei = result_itr.dpart(); Qf_Vbiei = result_Qf.dpart(); Qr_Vbiei = result_Qr.dpart(); Q_bf_Vbiei = result_Q_bf.dpart(); Tf_Vbiei = result_Tf.dpart(); calc_it_final(Temp , Vbiei , Vbici+1_e, Q_pT+1_e*Q_pT_dVbici , T_f0+1_e*T_f0_Vbici , ick-1_e*ick_Vciei , &result_itf, &result_itr, &result_Qf, &result_Qr, &result_Q_bf, &result_Tf); itf_Vbici = result_itf.dpart(); itr_Vbici = result_itr.dpart(); Qf_Vbici = result_Qf.dpart(); Qr_Vbici = result_Qr.dpart(); Q_bf_Vbici= result_Q_bf.dpart(); Tf_Vbici = result_Tf.dpart(); } // finally the transfer current it = itf - itr; it_Vbiei = itf_Vbiei - itr_Vbiei; it_Vbici = itf_Vbici - itr_Vbici; it_dT = itf_dT - itr_dT; //end final calculations -------------------------------------------------- here->HICUMtf = Tf; //NQS effect implemented with gyrator network //Once the delay in ITF is considered, IT_NQS is calculated afterwards //Diffusion charges for further use (remember derivatives if this will be used someday) Qdei = Qf; Qdei_Vbici = Qf_Vbici; Qdei_Vbiei = Qf_Vbiei; Qdei_dT = Qf_dT; //Qdci = Qr; //we just use Qr herein //High-frequency emitter current crowding (lateral NQS) Cdei = T_f0*itf/here->HICUMvt.rpart; Cdei_Vbiei = T_f0*itf_Vbiei/here->HICUMvt.rpart; Cdei_Vbici = T_f0_Vbici*itf/here->HICUMvt.rpart; Cdei_Vbici+= T_f0*itf_Vbici/here->HICUMvt.rpart; Cdei_Vrth = T_f0_dT*itf/here->HICUMvt.rpart + T_f0*itf_dT/here->HICUMvt.rpart - T_f0*itf/here->HICUMvt.rpart/here->HICUMvt.rpart*here->HICUMvt.dpart; Cdci = model->HICUMtr*itr/here->HICUMvt.rpart; Cdci_Vbiei = model->HICUMtr*itr_Vbiei/here->HICUMvt.rpart; Cdci_Vbici = model->HICUMtr*itr_Vbici/here->HICUMvt.rpart; Cdci_Vrth = model->HICUMtr*itr_dT/here->HICUMvt.rpart - model->HICUMtr*itr/here->HICUMvt.rpart/here->HICUMvt.rpart*here->HICUMvt.dpart; Crbi = model->HICUMfcrbi*(Cjei+Cjci+Cdei+Cdci); Crbi_Vrth = model->HICUMfcrbi*(Cjei_dT+Cjci_dT+Cdei_Vrth+Cdci_Vrth); Crbi_Vbiei = model->HICUMfcrbi*(Cjei_Vbiei+Cdei_Vbiei+Cdci_Vbiei); Crbi_Vbici = model->HICUMfcrbi*(Cjci_Vbici+Cdei_Vbici+Cdci_Vbici); Qrbi = Crbi*Vbpbi; //Vbpbi=(Vbpei-Vbiei)=(Vbpci-Vbici) Qrbi_Vbpbi = Crbi; Qrbi_Vbiei = Vbpbi*Crbi_Vbiei; Qrbi_Vbici = Vbpbi*Crbi_Vbici; Qrbi_Vrth = Vbpbi*Crbi_Vrth; //HICCR: } //Internal base current across b-c junction hicum_diode(Temp_dual,here->HICUMibcis_t,model->HICUMmbci, Vbici, &ibci, &ibci_Vbici, &ibci_dT); //Avalanche current result = calc_iavl(Vbici+1_e, Cjci+1_e*Cjci_Vbici, itf+1_e*itf_Vbici , Temp); iavl = result.rpart(); iavl_Vbici = result.dpart(); result = calc_iavl(Vbici, Cjci, itf+1_e*itf_Vbiei , Temp); iavl_Vbiei = result.dpart(); result = calc_iavl(Vbici , Cjci+1_e*Cjci_dT , itf+1_e*itf_dT , Temp_dual); iavl_dT = result.dpart(); here->HICUMiavl = iavl; //Excess base current from recombination at the b-c barrier ibh_rec = Q_bf*Otbhrec; ibh_rec_Vbiei = Otbhrec*Q_bf_Vbiei ; ibh_rec_Vbici = Otbhrec*Q_bf_Vbici ; ibh_rec_dT = Otbhrec*Q_bf_dT ; //internal base resistance result = calc_rbi(Temp_dual, Qjei+1_e*Qjei_dT , Qf+1_e*Qf_dT ); rbi = result.rpart(); rbi_dT = result.dpart(); result = calc_rbi(Temp, Qjei+1_e*Qjei_Vbiei , Qf+1_e*Qf_Vbiei ); rbi_Vbiei = result.dpart(); result = calc_rbi(Temp, Qjei , Qf+1_e*Qf_Vbici ); rbi_Vbici = result.dpart(); here->HICUMrbi = rbi; //Base currents across peripheral b-e junction hicum_diode(Temp_dual,here->HICUMibeps_t,model->HICUMmbep, Vbpei, &ibep, &ibep_Vbpei, &ibep_dT); hicum_diode(Temp_dual,here->HICUMireps_t,model->HICUMmrep, Vbpei, &irep, &irep_Vbpei, &irep_dT); //Peripheral b-e junction capacitance and charge hicum_qjmodf(Temp_dual,here->HICUMcjep0_t,here->HICUMvdep_t,model->HICUMzep,here->HICUMajep_t,Vbpei,&Cjep,&Cjep_Vbpei, &Cjep_dT,&Qjep, &Qjep_Vbpei, &Qjep_dT); //Tunneling current result = calc_ibet(Vbiei , Vbpei+1_e, Temp); ibet = result.rpart(); ibet_Vbpei = result.dpart(); result = calc_ibet(Vbiei+1_e, Vbpei, Temp); ibet_Vbiei = result.dpart(); result = calc_ibet(Vbiei , Vbpei, Temp_dual); ibet_dT = result.dpart(); //Base currents across peripheral b-c junction (bp,ci) hicum_diode(Temp_dual,here->HICUMibcxs_t,model->HICUMmbcx, Vbpci, &ijbcx, &ijbcx_Vbpci, &ijbcx_dT); //Depletion capacitance and charge at external b-c junction (b,ci) hicum_HICJQ(Temp_dual, here->HICUMcjcx01_t,here->HICUMvdcx_t,model->HICUMzcx,here->HICUMvptcx_t, Vbci, &Cjcx_i, &Cjcx_i_Vbci, &Cjcx_i_dT, &Qjcx_i, &Qjcx_i_Vbci, &Qjcx_i_dT); //Depletion capacitance and charge at peripheral b-c junction (bp,ci) hicum_HICJQ(Temp_dual, here->HICUMcjcx02_t,here->HICUMvdcx_t,model->HICUMzcx,here->HICUMvptcx_t, Vbpci, &Cjcx_ii, &Cjcx_ii_Vbpci, &Cjcx_ii_dT, &Qjcx_ii, &Qjcx_ii_Vbpci, &Qjcx_ii_dT); //Depletion substrate capacitance and charge at inner s-c junction (si,ci) hicum_HICJQ(Temp_dual, here->HICUMcjs0_t,here->HICUMvds_t,model->HICUMzs,here->HICUMvpts_t, Vsici, &Cjs, &Cjs_Vsici, &Cjs_dT, &Qjs, &Qjs_Vsici, &Qjs_dT); /* * Peripheral substrate capacitance and charge at s-c junction (s,c) * Bias dependent only if model->HICUMvdsp > 0 */ if (model->HICUMvdsp > 0) { hicum_HICJQ(Temp_dual, here->HICUMcscp0_t,here->HICUMvdsp_t,model->HICUMzsp,here->HICUMvptsp_t, Vsc, &Cscp, &Cscp_Vsc, &Cscp_dT, &Qscp, &Qscp_Vsc, &Qscp_dT); } else { // Constant, temperature independent capacitance Cscp = model->HICUMcscp0; Cscp_Vsc = 0; Cscp_dT = 0; Qscp = model->HICUMcscp0*Vsc; Qscp_Vsc = model->HICUMcscp0; Qscp_dT = 0; } //Parasitic substrate transistor transfer current and diffusion charge calc_itss(Temp_dual, Vbpci , Vsici , &result_HSI_TSU, &result_Qdsu); HSI_Tsu = result_HSI_TSU.rpart(); Qdsu = result_Qdsu.rpart(); HSI_Tsu_dT = result_HSI_TSU.dpart(); Qdsu_dT = result_Qdsu.dpart(); calc_itss(Temp , Vbpci+1_e, Vsici , &result_HSI_TSU, &result_Qdsu); HSI_Tsu_Vbpci = result_HSI_TSU.dpart(); Qdsu_Vbpci = result_Qdsu.dpart(); calc_itss(Temp , Vbpci , Vsici+1_e, &result_HSI_TSU, &result_Qdsu); HSI_Tsu_Vsici = result_HSI_TSU.dpart(); Qdsu_Vsici = result_Qdsu.dpart(); // Current gain computation for correlated noise implementation if (ibei > 0.0) { here->HICUMbetadc=it/ibei; } else { here->HICUMbetadc=0.0; } if (here->HICUMre_t.rpart >= MIN_R) { Ieie = Veie/here->HICUMre_t.rpart; // only needed for re flicker noise } else { Ieie = 0.0; } //Diode current for s-c junction (si,ci) hicum_diode(Temp_dual,here->HICUMiscs_t,model->HICUMmsc, Vsici, &ijsc, &ijsc_Vsici, &ijsc_Vrth); // Self-heating calculation if (model->HICUMflsh == 1 && here->HICUMrth_scaled >= MIN_R) { pterm = (Vbiei-Vbici)*it + (here->HICUMvdci_t.rpart-Vbici)*iavl; pterm_dT = (Vbiei-Vbici)*it_dT + (here->HICUMvdci_t.rpart-Vbici)*iavl_dT + here->HICUMvdci_t.dpart*iavl; } else if (model->HICUMflsh == 2 && here->HICUMrth_scaled >= MIN_R) { pterm = (Vbiei-Vbici)*it + (here->HICUMvdci_t.rpart-Vbici)*iavl + ibei*Vbiei + ibci*Vbici + ibep*Vbpei + ijbcx*Vbpci + ijsc*Vsici; pterm_dT = (Vbiei-Vbici)*it_dT + (here->HICUMvdci_t.rpart-Vbici)*iavl_dT + here->HICUMvdci_t.dpart*iavl + ibei_dT*Vbiei + ibci_dT*Vbici + ibep_dT*Vbpei + ijbcx_dT*Vbpci + ijsc_Vrth*Vsici; if (rbi > 0.0) { pterm += Vbpbi*Vbpbi/rbi; pterm_dT += -Vbpbi*Vbpbi*rbi_dT/rbi/rbi; } if (here->HICUMre_t.rpart >= MIN_R) { pterm += Veie*Veie/here->HICUMre_t.rpart; pterm_dT += -Veie*Veie*here->HICUMre_t.dpart/here->HICUMre_t.rpart/here->HICUMre_t.rpart; } if (here->HICUMrcx_t.rpart >= MIN_R) { pterm += Vcic*Vcic/here->HICUMrcx_t.rpart; pterm_dT += -Vcic*Vcic*here->HICUMrcx_t.dpart/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart; } if (here->HICUMrbx_t.rpart >= MIN_R) { pterm += Vbbp*Vbbp/here->HICUMrbx_t.rpart; pterm_dT += -Vbbp*Vbbp*here->HICUMrbx_t.dpart/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart; } } else { pterm = 0; // default value... pterm_dT = 0; } here->HICUMpterm = pterm; Itxf = itf; Itxf_Vbici = itf_Vbici; Itxf_Vbiei = itf_Vbiei; Itxf_dT = itf_dT; Itxf_Vxf2 = 0.0; Qdeix = Qdei; Qdeix_Vbiei = Qdei_Vbiei; Qdeix_Vbici = Qdei_Vbici; Qdeix_dT = Qdei_dT; Qdeix_Vxf = 0.0; // Excess Phase calculation -> hand implementation instead of dual numbers if (nqs) { // && (ckt->CKTmode & (MODETRAN | MODEAC) ) ) { //evaluate nqs network only in TRANSIENT and AC modes. Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0; Ixf1_Vxf1 = 0.0; Ixf1_Vxf2 = 1.0/Tf*model->HICUMt0; Ixf1_ditf = -Ixf1_Vxf2; Ixf1_dTf = -Ixf1/Tf; //Tf(Vbiei,Vciei=Vbiei-Vbici) Ixf1_Vbiei = Ixf1_ditf*itf_Vbiei + Ixf1_dTf*Tf_Vbiei; Ixf1_Vbici = Ixf1_ditf*itf_Vbici + Ixf1_dTf*Tf_Vbici; Ixf1_dT = Ixf1_ditf*itf_dT + Ixf1_dTf*Tf_dT; Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0; Ixf2_Vxf2 = 1.0/Tf*model->HICUMt0; Ixf2_Vxf1 = -Ixf2_Vxf2; Ixf2_dTf = -Ixf2/Tf; Ixf2_Vbiei = Ixf2_dTf*Tf_Vbiei; Ixf2_Vbici = Ixf2_dTf*Tf_Vbici; Ixf2_dT = Ixf2_dTf*Tf_dT; Qxf1 = model->HICUMalit*model->HICUMt0*Vxf1; Qxf1_Vxf1 = model->HICUMalit*model->HICUMt0; Qxf2 = model->HICUMalit*model->HICUMt0*Vxf2/3; Qxf2_Vxf2 = model->HICUMalit*model->HICUMt0/3; Itxf = Vxf2; Itxf_Vbiei = 0; Itxf_Vbici = 0; Itxf_dT = 0; Itxf_Vxf2 = 1.0; Ixf = (Vxf - Qdei)*model->HICUMt0/Tf; //for RC nw Ixf_Vxf = 1.0*model->HICUMt0/Tf; Ixf_Qdei = -Ixf_Vxf; Ixf_Tf = -Ixf/Tf; Ixf_Vbiei = Ixf_Tf*Tf_Vbiei + Ixf_Qdei * Qdei_Vbiei; Ixf_Vbici = Ixf_Tf*Tf_Vbici + Ixf_Qdei * Qdei_Vbici; Ixf_dT = Ixf_Tf*Tf_dT + Ixf_Qdei * Qdei_dT; Qxf = model->HICUMalqf*model->HICUMt0*Vxf; //for RC nw Qxf_Vxf = model->HICUMalqf*model->HICUMt0; //for RC nw Qdeix = Vxf; //for RC nw Qdeix_Vxf = 1.0; Qdeix_Vbiei = 0; Qdeix_Vbici = 0; Qdeix_dT = 0; } else { Ixf1 = Vxf1; Ixf1_Vxf1 = 1.0; Ixf1_Vxf2 = 0; // dead assign: //Ixf1_ditf = 0; //Ixf1_dTf = 0; Ixf1_Vbiei = 0; Ixf1_Vbici = 0; Ixf1_dT = 0; Ixf2 = Vxf2; Ixf2_Vxf2 = 1.0; Ixf2_Vxf1 = 0; // dead assign: //Ixf2_dTf = 0; Ixf2_Vbiei = 0; Ixf2_Vbici = 0; Ixf2_dT = 0; Qxf1 = 0; Qxf1_Vxf1 = 0; Qxf2 = 0; Qxf2_Vxf2 = 0; Ixf = Vxf; Ixf_Vxf = 1.0; // dead assign: //Ixf_Tf = 0; //Ixf_Qdei = 0; Ixf_Vbiei = 0; Ixf_Vbici = 0; Ixf_dT = 0; Qxf = 0; Qxf_Vxf = 0; } // end of Model_evaluation //resistors if(model->HICUMrcxGiven && model->HICUMrcx != 0) { Icic_Vcic = 1/here->HICUMrcx_t.rpart; Icic_Vrth = -Vcic*here->HICUMrcx_t.dpart/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart; } else { Icic_Vcic = 0.0; Icic_Vrth = 0.0; } if(model->HICUMrbxGiven && model->HICUMrbx != 0) { Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; Ibbp_Vrth = -Vbbp*here->HICUMrbx_t.dpart/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart; } else { Ibbp_Vbbp = 0.0; Ibbp_Vrth = 0.0; } if(model->HICUMreGiven && model->HICUMre != 0) { Ieie_Veie = 1/here->HICUMre_t.rpart; Ieie_Vrth = -Veie*here->HICUMre_t.dpart /here->HICUMre_t.rpart/here->HICUMre_t.rpart; } else { Ieie_Veie = 0.0; Ieie_Vrth = 0.0; } if(model->HICUMrsuGiven && model->HICUMrsu != 0) { Isis_Vsis = 1/model->HICUMrsu*here->HICUMm; } else { Isis_Vsis = 0.0; } if(selfheat){ Irth_Vrth = (1/here->HICUMrth_t.rpart - Vrth/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart); } else { Irth_Vrth = 0.0; } Ibpei = model->HICUMtype*ibep; Ibpei += model->HICUMtype*irep; Ibpei_Vbpei = model->HICUMtype*ibep_Vbpei; Ibpei_Vbpei += model->HICUMtype*irep_Vbpei; Ibpei_Vrth = model->HICUMtype*ibep_dT; Ibpei_Vrth += model->HICUMtype*irep_dT; Ibiei = model->HICUMtype*ibei; Ibiei_Vbiei = model->HICUMtype*ibei_Vbiei; Ibiei_Vrth = model->HICUMtype*ibei_dT; Ibiei += model->HICUMtype*irei; Ibiei_Vbiei += model->HICUMtype*irei_Vbiei; Ibiei_Vrth += model->HICUMtype*irei_dT; Ibiei += model->HICUMtype*ibh_rec; Ibiei_Vbiei += model->HICUMtype*ibh_rec_Vbiei; Ibiei_Vrth += model->HICUMtype*ibh_rec_dT; Ibiei_Vbici = model->HICUMtype*ibh_rec_Vbici; if (model->HICUMtunode==1.0) { Ibpei += -model->HICUMtype*ibet; Ibpei_Vbpei += -model->HICUMtype*ibet_Vbpei; Ibpei_Vrth += -model->HICUMtype*ibet_dT; } else { Ibiei += -model->HICUMtype*ibet; Ibiei_Vbiei += -model->HICUMtype*ibet_Vbiei; Ibiei_Vrth += -model->HICUMtype*ibet_dT; } Ibpsi = model->HICUMtype*HSI_Tsu; Ibpsi_Vbpci = model->HICUMtype*HSI_Tsu_Vbpci; Ibpsi_Vsici = model->HICUMtype*HSI_Tsu_Vsici; Ibpsi_Vrth = model->HICUMtype*HSI_Tsu_dT; Ibpci = model->HICUMtype*ijbcx; Ibpci_Vbpci = model->HICUMtype*ijbcx_Vbpci; Ibpci_Vrth = model->HICUMtype*ijbcx_dT; Ibici = model->HICUMtype*(ibci - iavl); Ibici_Vbici = model->HICUMtype*(ibci_Vbici - iavl_Vbici); Ibici_Vbiei = model->HICUMtype*( - iavl_Vbiei); Ibici_Vrth = model->HICUMtype*(ibci_dT - iavl_dT); Isici = model->HICUMtype*ijsc; Isici_Vsici = model->HICUMtype*ijsc_Vsici; Isici_Vrth = model->HICUMtype*ijsc_Vrth; Iciei = model->HICUMtype*(Itxf - itr); Iciei_Vbiei = model->HICUMtype*(Itxf_Vbiei - itr_Vbiei); Iciei_Vbici = model->HICUMtype*(Itxf_Vbici - itr_Vbici); Iciei_Vrth = model->HICUMtype*(Itxf_dT - itr_dT); Iciei_Vxf2 = model->HICUMtype*Itxf_Vxf2; if (rbi > 0.0) { Ibpbi = Vbpbi / rbi; Ibpbi_Vbpbi = 1 / rbi; Ibpbi_Vbiei = -Vbpbi * rbi_Vbiei / (rbi*rbi); Ibpbi_Vbici = -Vbpbi * rbi_Vbici / (rbi*rbi); Ibpbi_Vrth = -Vbpbi * rbi_dT / (rbi*rbi); } else { // fallback in case bp-bi nodes are collapsed Ibpbi = 0.0; Ibpbi_Vbpbi = 0.0; Ibpbi_Vbiei = 0.0; Ibpbi_Vbici = 0.0; Ibpbi_Vrth = 0.0; }; Ith_Vbiei = 0.0; Ith_Vbici = 0.0; Ith_Vbpbi = 0.0; Ith_Vbpci = 0.0; Ith_Vbpei = 0.0; Ith_Vciei = 0.0; Ith_Vsici = 0.0; Ith_Vcic = 0.0; Ith_Vbbp = 0.0; Ith_Veie = 0.0; Ith_Vrth = 0.0; if(!selfheat) { Ith = 0; } else { Ith = pterm; //Current from gnd to T Ith_Vrth = pterm_dT; if (model->HICUMflsh == 1) { //it(Vbiei,Vbici)*(Vbiei-Vbici) Ith_Vbiei += it_Vbiei*(Vbiei-Vbici) + it; Ith_Vbici += it_Vbici*(Vbiei-Vbici) - it; //avalanche current Ith_Vbici += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbici - iavl; Ith_Vbiei += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbiei; } else if (model->HICUMflsh == 2) { //remember: //pterm = (Vbiei-Vbici)*it + (here->HICUMvdci_t.rpart-Vbici)*iavl + ibei*Vbiei + ibci*Vbici + ibep*Vbpei + ijbcx*Vbpci + ijsc*Vsici; //it(Vbiei,Vbici)*(Vbiei-Vbici) Ith_Vbiei += it_Vbiei*(Vbiei-Vbici) + it; Ith_Vbici += it_Vbici*(Vbiei-Vbici) - it; //Vbiei*Ibiei(Vbiei) Ith_Vbiei += ibei + ibei_Vbiei*Vbiei; //Vbici*Ibici(Vbici,Vbiei) Ith_Vbici += ibci + ibci_Vbici*Vbici; Ith_Vbici += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbici - iavl; Ith_Vbiei += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbiei; //Vbpei*Ibpei(Vbpei) Ith_Vbpei += ibep + ibep_Vbpei*Vbpei; //Vpbci*Ibpci(Vbpci) Ith_Vbpci += Ibpci + Ibpci_Vbpci*Vbpci; //Vsici*Isici(Vsici) Ith_Vsici += Isici + Isici_Vsici*Vsici; if (rbi > 0.0) { //Vbpbi*Ibpbi(Vbpbi,Vbiei,Vbici) Ith_Vbpbi += Ibpbi + Ibpbi_Vbpbi*Vbpbi; Ith_Vbiei += Ibpbi_Vbiei*Vbpbi; Ith_Vbici += Ibpbi_Vbici*Vbpbi; } if (here->HICUMre_t.rpart >= MIN_R) { Ith_Veie = 2*Veie/here->HICUMre_t.rpart; } if (here->HICUMrcx_t.rpart >= MIN_R) { Ith_Vcic = 2*Vcic/here->HICUMrcx_t.rpart; } if (here->HICUMrbx_t.rpart >= MIN_R) { Ith_Vbbp = 2*Vbbp/here->HICUMrbx_t.rpart; } } } // ******************************************** // add gmin over parallel to all non-linear branches Ibiei += ckt->CKTgmin*Vbiei; Ibiei_Vbiei += ckt->CKTgmin; Ibici += ckt->CKTgmin*Vbici; Ibici_Vbici += ckt->CKTgmin; Ibpei += ckt->CKTgmin*Vbpei; Ibpei_Vbpei += ckt->CKTgmin; Ibpci += ckt->CKTgmin*Vbpci; Ibpci_Vbpci += ckt->CKTgmin; Isici += ckt->CKTgmin*Vsici; Isici_Vsici += ckt->CKTgmin; // calculate charge derivatives for electrostatic caps Qbepar1_Vbe = cbepar1; Qbepar2_Vbpe = cbepar2; Qbcpar1_Vbci = cbcpar1; Qbcpar2_Vbpci = cbcpar2; Qsu_Vsis = model->HICUMcsu; Qcth_Vrth = here->HICUMcth_scaled; if( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC)) || ((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) || (ckt->CKTmode & MODEINITSMSIG)) { // calculate charges over electrostatic caps Qbepar1 = cbepar1*Vbe; Qbepar2 = cbepar2*Vbpe; Qbcpar1 = cbcpar1*Vbci; Qbcpar2 = cbcpar2*Vbpci; Qsu = model->HICUMcsu*Vsis; if (selfheat) { Qcth = here->HICUMcth_scaled*Vrth; } else { Qcth = 0; } // store charges and their derivatives in state vector //Qrbi *(ckt->CKTstate0 + here->HICUMqrbi) = Qrbi; *(ckt->CKTstate0 + here->HICUMcqrbi) = Qrbi_Vbpbi; //Qjei *(ckt->CKTstate0 + here->HICUMqjei) = Qjei; *(ckt->CKTstate0 + here->HICUMcqjei) = Qjei_Vbiei; //Qf *(ckt->CKTstate0 + here->HICUMqf) = Qdeix; *(ckt->CKTstate0 + here->HICUMcqf) = Qdeix_Vbiei; //Qr *(ckt->CKTstate0 + here->HICUMqr) = Qr; *(ckt->CKTstate0 + here->HICUMcqr) = Qr_Vbici; //Qjci *(ckt->CKTstate0 + here->HICUMqjci) = Qjci; *(ckt->CKTstate0 + here->HICUMcqjci) = Qjci_Vbici; //Qjep *(ckt->CKTstate0 + here->HICUMqjep) = Qjep; *(ckt->CKTstate0 + here->HICUMcqjep) = Qjep_Vbpei; //Qjcx_i *(ckt->CKTstate0 + here->HICUMqjcx0_i) = Qjcx_i; *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) = Qjcx_i_Vbci; //Qjcx_ii *(ckt->CKTstate0 + here->HICUMqjcx0_ii) = Qjcx_ii; *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) = Qjcx_ii_Vbpci; //Qdsu *(ckt->CKTstate0 + here->HICUMqdsu) = Qdsu; *(ckt->CKTstate0 + here->HICUMcqdsu) = Qdsu_Vbpci; //Qs *(ckt->CKTstate0 + here->HICUMqjs) = Qjs; *(ckt->CKTstate0 + here->HICUMcqjs) = Qjs_Vsici; //Qscp *(ckt->CKTstate0 + here->HICUMqscp) = Qscp; *(ckt->CKTstate0 + here->HICUMcqscp) = Qscp_Vsc; //Qbepar1 *(ckt->CKTstate0 + here->HICUMqbepar1) = Qbepar1; *(ckt->CKTstate0 + here->HICUMcqbepar1) = Qbepar1_Vbe; //Qbepar2 *(ckt->CKTstate0 + here->HICUMqbepar2) = Qbepar2; *(ckt->CKTstate0 + here->HICUMcqbepar2) = Qbepar2_Vbpe; //Qbcpar1 *(ckt->CKTstate0 + here->HICUMqbcpar1) = Qbcpar1; *(ckt->CKTstate0 + here->HICUMcqbcpar1) = Qbcpar1_Vbci; //Qbcpar2 *(ckt->CKTstate0 + here->HICUMqbcpar2) = Qbcpar2; *(ckt->CKTstate0 + here->HICUMcqbcpar2) = Qbcpar2_Vbpci; //Qsu *(ckt->CKTstate0 + here->HICUMqsu) = Qsu; *(ckt->CKTstate0 + here->HICUMcqsu) = Qsu_Vsis; *(ckt->CKTstate0 + here->HICUMqxf1) = Qxf1; *(ckt->CKTstate0 + here->HICUMcqxf1) = Qxf1_Vxf1; *(ckt->CKTstate0 + here->HICUMqxf2) = Qxf2; *(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2; *(ckt->CKTstate0 + here->HICUMqxf) = Qxf; *(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf; if (selfheat) { //Qth *(ckt->CKTstate0 + here->HICUMqcth) = Qcth; *(ckt->CKTstate0 + here->HICUMcqcth) = Qcth_Vrth; } //below is not important for load here->HICUMcaprbi = Qrbi_Vbpbi; here->HICUMcapdeix = Cdei; here->HICUMcapjei = Cjei; here->HICUMcapdci = Cdci; here->HICUMcapjci = Cjci; here->HICUMcapjep = Cjep; here->HICUMcapjcx_t_i = Cjcx_i; here->HICUMcapjcx_t_ii = Cjcx_ii; here->HICUMcapdsu = Qdsu_Vbpci; here->HICUMcapjs = Cjs; here->HICUMcapscp = Cscp; here->HICUMcapsu = model->HICUMcsu; here->HICUMcapcth = here->HICUMcth_scaled; //derivatives of charges due to cross coupling here->HICUMqrbi_Vbiei = Qrbi_Vbiei; here->HICUMqrbi_Vbici = Qrbi_Vbici; here->HICUMqrbi_Vrth = Qrbi_Vrth; here->HICUMqjei_Vrth = Qjei_dT; here->HICUMqjep_Vrth = Qjep_dT; here->HICUMqf_Vbici = Qdeix_Vbici; here->HICUMqf_Vxf = Qdeix_Vxf; here->HICUMqf_Vrth = Qdeix_dT; here->HICUMqr_Vbiei = Qr_Vbiei; here->HICUMqr_Vrth = Qr_dT; here->HICUMqjci_Vrth = Qjci_dT; here->HICUMqjcx0_i_Vrth = Qjcx_i_dT; here->HICUMqjcx0_ii_Vrth = Qjcx_ii_dT; here->HICUMqdsu_Vrth = Qdsu_dT; here->HICUMqdsu_Vsici = Qdsu_Vsici; here->HICUMqjs_Vrth = Qjs_dT; here->HICUMqscp_Vrth = Qscp_dT; here->HICUMicth_dT = Icth_Vrth; /* * store small-signal parameters */ if ( (!(ckt->CKTmode & MODETRANOP))|| (!(ckt->CKTmode & MODEUIC)) ) { if(ckt->CKTmode & MODEINITSMSIG) { *(ckt->CKTstate0 + here->HICUMcqrbi) = Qrbi_Vbpbi; *(ckt->CKTstate0 + here->HICUMcqf) = Qdeix_Vbiei; *(ckt->CKTstate0 + here->HICUMcqr) = Qr_Vbici; *(ckt->CKTstate0 + here->HICUMcqjei) = Cjei; *(ckt->CKTstate0 + here->HICUMcqjci) = Cjci; *(ckt->CKTstate0 + here->HICUMcqjep) = Qjep_Vbpei; *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) = Qjcx_i_Vbci; *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) = Qjcx_ii_Vbpci; *(ckt->CKTstate0 + here->HICUMcqdsu) = Qdsu_Vbpci; *(ckt->CKTstate0 + here->HICUMcqjs) = Qjs_Vsici; *(ckt->CKTstate0 + here->HICUMcqscp) = Qscp_Vsc; *(ckt->CKTstate0 + here->HICUMcqbepar1) = Qbepar1_Vbe; *(ckt->CKTstate0 + here->HICUMcqbepar2) = Qbepar2_Vbpe; *(ckt->CKTstate0 + here->HICUMcqbcpar1) = Qbcpar1_Vbci; *(ckt->CKTstate0 + here->HICUMcqbcpar2) = Qbcpar2_Vbpci; *(ckt->CKTstate0 + here->HICUMcqsu) = Qsu_Vsis; *(ckt->CKTstate0 + here->HICUMcqxf1) = Qxf1_Vxf1; *(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2; *(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf; if (selfheat) *(ckt->CKTstate0 + here->HICUMcqcth) = here->HICUMcth_scaled; continue; /* go to 1000 */ } //transient analysis if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HICUMqrbi) = *(ckt->CKTstate0 + here->HICUMqrbi) ; *(ckt->CKTstate1 + here->HICUMqjei) = *(ckt->CKTstate0 + here->HICUMqjei) ; *(ckt->CKTstate1 + here->HICUMqf) = *(ckt->CKTstate0 + here->HICUMqf) ; *(ckt->CKTstate1 + here->HICUMqr) = *(ckt->CKTstate0 + here->HICUMqr) ; *(ckt->CKTstate1 + here->HICUMqjci) = *(ckt->CKTstate0 + here->HICUMqjci) ; *(ckt->CKTstate1 + here->HICUMqjep) = *(ckt->CKTstate0 + here->HICUMqjep) ; *(ckt->CKTstate1 + here->HICUMqjcx0_i) = *(ckt->CKTstate0 + here->HICUMqjcx0_i) ; *(ckt->CKTstate1 + here->HICUMqjcx0_ii) = *(ckt->CKTstate0 + here->HICUMqjcx0_ii) ; *(ckt->CKTstate1 + here->HICUMqdsu) = *(ckt->CKTstate0 + here->HICUMqdsu) ; *(ckt->CKTstate1 + here->HICUMqjs) = *(ckt->CKTstate0 + here->HICUMqjs) ; *(ckt->CKTstate1 + here->HICUMqscp) = *(ckt->CKTstate0 + here->HICUMqscp) ; *(ckt->CKTstate1 + here->HICUMqbepar1) = *(ckt->CKTstate0 + here->HICUMqbepar1) ; *(ckt->CKTstate1 + here->HICUMqbepar2) = *(ckt->CKTstate0 + here->HICUMqbepar2) ; *(ckt->CKTstate1 + here->HICUMqbcpar1) = *(ckt->CKTstate0 + here->HICUMqbcpar1) ; *(ckt->CKTstate1 + here->HICUMqbcpar2) = *(ckt->CKTstate0 + here->HICUMqbcpar2) ; *(ckt->CKTstate1 + here->HICUMqsu) = *(ckt->CKTstate0 + here->HICUMqsu) ; *(ckt->CKTstate1 + here->HICUMqxf1) = *(ckt->CKTstate0 + here->HICUMqxf1) ; *(ckt->CKTstate1 + here->HICUMqxf2) = *(ckt->CKTstate0 + here->HICUMqxf2) ; *(ckt->CKTstate1 + here->HICUMqxf) = *(ckt->CKTstate0 + here->HICUMqxf) ; if (selfheat) *(ckt->CKTstate1 + here->HICUMqcth) = *(ckt->CKTstate0 + here->HICUMqcth) ; } //Integrate all charges and add the displacement current to the branch currents //Qrbi error = NIintegrate(ckt,&geq,&ceq,Qrbi_Vbpbi,here->HICUMqrbi); if(error) return(error); Ibpbi_Vbpbi += geq; Ibpbi += *(ckt->CKTstate0 + here->HICUMcqrbi); //Qjei error = NIintegrate(ckt,&geq,&ceq,Cjei,here->HICUMqjei); if(error) return(error); Ibiei_Vbiei += geq; Ibiei += *(ckt->CKTstate0 + here->HICUMcqjei); //Qdeix if (!nqs) { error = NIintegrate(ckt,&geq,&ceq,Qdeix_Vbiei,here->HICUMqf); if(error) return(error); Ibiei_Vbiei += geq; Ibiei_Vxf = 0; Ibiei += *(ckt->CKTstate0 + here->HICUMcqf); } else { //Qdeix is now a function of Vxf(t) error = NIintegrate(ckt,&geq,&ceq,Qdeix_Vxf,here->HICUMqf); if(error) return(error); Ibiei_Vxf = geq; Ibiei += *(ckt->CKTstate0 + here->HICUMcqf); } //Qr error = NIintegrate(ckt,&geq,&ceq,Qr_Vbici,here->HICUMqr); if(error) return(error); Ibici_Vbici += geq; Ibici += *(ckt->CKTstate0 + here->HICUMcqr); //Qjci error = NIintegrate(ckt,&geq,&ceq,Cjci,here->HICUMqjci); if(error) return(error); Ibici_Vbici += geq; Ibici += *(ckt->CKTstate0 + here->HICUMcqjci); //Qjep error = NIintegrate(ckt,&geq,&ceq,Cjep,here->HICUMqjep); if(error) return(error); Ibpei_Vbpei += geq; Ibpei += *(ckt->CKTstate0 + here->HICUMcqjep); //Qjcx_i error = NIintegrate(ckt,&geq,&ceq,Cjcx_i,here->HICUMqjcx0_i); if(error) return(error); Ibci_Vbci = geq; Ibci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i); //Qjcx_ii error = NIintegrate(ckt,&geq,&ceq,Cjcx_ii,here->HICUMqjcx0_ii); if(error) return(error); Ibpci_Vbpci += geq; Ibpci += *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii); //Qdsu error = NIintegrate(ckt,&geq,&ceq,Qdsu_Vbpci,here->HICUMqdsu); if(error) return(error); Ibpci_Vbpci += geq; Ibpci += *(ckt->CKTstate0 + here->HICUMcqdsu); //Qjs error = NIintegrate(ckt,&geq,&ceq,Cjs,here->HICUMqjs); if(error) return(error); Isici_Vsici += geq; Isici += *(ckt->CKTstate0 + here->HICUMcqjs); //Qscp error = NIintegrate(ckt,&geq,&ceq,Cscp,here->HICUMqscp); if(error) return(error); Isc_Vsc = geq; Isc = *(ckt->CKTstate0 + here->HICUMcqscp); if (nqs) { //Qxf1 error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->HICUMqxf1); if(error) return(error); Ixf1_Vxf1 += geq; Ixf1 += *(ckt->CKTstate0 + here->HICUMcqxf1); //Qxf2 error = NIintegrate(ckt,&geq,&ceq,Qxf2_Vxf2,here->HICUMqxf2); if(error) return(error); Ixf2_Vxf2 += geq; Ixf2 += *(ckt->CKTstate0 + here->HICUMcqxf2); //Qxf error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf); if(error) return(error); Ixf_Vxf += geq; Ixf += *(ckt->CKTstate0 + here->HICUMcqxf); } if (selfheat) { //Qth error = NIintegrate(ckt,&geq,&ceq,here->HICUMcth_scaled,here->HICUMqcth); if(error) return(error); Icth_Vrth = geq; Icth = *(ckt->CKTstate0 + here->HICUMcqcth); } if(ckt->CKTmode & MODEINITTRAN) { //copy from state1 to state0 *(ckt->CKTstate1 + here->HICUMcqrbi) = *(ckt->CKTstate0 + here->HICUMcqrbi) ; *(ckt->CKTstate1 + here->HICUMcqjei) = *(ckt->CKTstate0 + here->HICUMcqjei) ; *(ckt->CKTstate1 + here->HICUMcqf) = *(ckt->CKTstate0 + here->HICUMcqf) ; *(ckt->CKTstate1 + here->HICUMcqr) = *(ckt->CKTstate0 + here->HICUMcqr) ; *(ckt->CKTstate1 + here->HICUMcqjci) = *(ckt->CKTstate0 + here->HICUMcqjci) ; *(ckt->CKTstate1 + here->HICUMcqjep) = *(ckt->CKTstate0 + here->HICUMcqjep) ; *(ckt->CKTstate1 + here->HICUMcqcx0_t_i) = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) ; *(ckt->CKTstate1 + here->HICUMcqcx0_t_ii) = *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) ; *(ckt->CKTstate1 + here->HICUMcqdsu) = *(ckt->CKTstate0 + here->HICUMcqdsu) ; *(ckt->CKTstate1 + here->HICUMcqjs) = *(ckt->CKTstate0 + here->HICUMcqjs) ; *(ckt->CKTstate1 + here->HICUMcqscp) = *(ckt->CKTstate0 + here->HICUMcqscp) ; *(ckt->CKTstate1 + here->HICUMcqxf1) = *(ckt->CKTstate0 + here->HICUMcqxf1) ; *(ckt->CKTstate1 + here->HICUMcqxf2) = *(ckt->CKTstate0 + here->HICUMcqxf2) ; *(ckt->CKTstate1 + here->HICUMcqxf) = *(ckt->CKTstate0 + here->HICUMcqxf) ; if (selfheat) *(ckt->CKTstate1 + here->HICUMcqcth) = *(ckt->CKTstate0 + here->HICUMcqcth) ; } } } /* * check convergence */ if ( (!(ckt->CKTmode & MODEINITFIX))||(!(here->HICUMoff))) { if (icheck == 1) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; } } /* * charge storage for electrostatic caps */ if(ckt->CKTmode & (MODETRAN | MODEAC)) { // Ibe += ddt(cbepar1*Vbe); error = NIintegrate(ckt,&gqbepar1,&cqbepar1,cbepar1,here->HICUMqbepar1); if(error) return(error); // Ibpe += ddt(cbepar2*Vbpe); error = NIintegrate(ckt,&gqbepar2,&cqbepar2,cbepar2,here->HICUMqbepar2); if(error) return(error); // Ibci += ddt(cbcpar1*Vbci); error = NIintegrate(ckt,&gqbcpar1,&cqbcpar1,cbcpar1,here->HICUMqbcpar1); if(error) return(error); // Ibpci += ddt(cbcpar2*Vbpci); error = NIintegrate(ckt,&gqbcpar2,&cqbcpar2,cbcpar2,here->HICUMqbcpar2); if(error) return(error); // Isis += ddt(model->HICUMcsu*Vsis); error = NIintegrate(ckt,&gqsu,&cqsu,model->HICUMcsu,here->HICUMqsu); if(error) return(error); if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HICUMcqbepar1) = *(ckt->CKTstate0 + here->HICUMcqbepar1); *(ckt->CKTstate1 + here->HICUMcqbepar2) = *(ckt->CKTstate0 + here->HICUMcqbepar2); *(ckt->CKTstate1 + here->HICUMcqbcpar1) = *(ckt->CKTstate0 + here->HICUMcqbcpar1); *(ckt->CKTstate1 + here->HICUMcqbcpar2) = *(ckt->CKTstate0 + here->HICUMcqbcpar2); *(ckt->CKTstate1 + here->HICUMcqsu) = *(ckt->CKTstate0 + here->HICUMcqsu); } } // Write branch currents and voltages to state vector *(ckt->CKTstate0 + here->HICUMvbiei) = Vbiei; *(ckt->CKTstate0 + here->HICUMvbici) = Vbici; *(ckt->CKTstate0 + here->HICUMvbpei) = Vbpei; *(ckt->CKTstate0 + here->HICUMvbpbi) = Vbpbi; *(ckt->CKTstate0 + here->HICUMvbpci) = Vbpci; *(ckt->CKTstate0 + here->HICUMvsici) = Vsici; *(ckt->CKTstate0 + here->HICUMvcic) = Vcic; *(ckt->CKTstate0 + here->HICUMvbbp) = Vbbp; *(ckt->CKTstate0 + here->HICUMveie) = Veie; *(ckt->CKTstate0 + here->HICUMvxf1) = Vxf1; *(ckt->CKTstate0 + here->HICUMvxf2) = Vxf2; *(ckt->CKTstate0 + here->HICUMvxf) = Vxf; *(ckt->CKTstate0 + here->HICUMibiei) = Ibiei; *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) = Ibiei_Vbiei; *(ckt->CKTstate0 + here->HICUMibiei_Vxf) = Ibiei_Vxf; *(ckt->CKTstate0 + here->HICUMibiei_Vbici) = Ibiei_Vbici; *(ckt->CKTstate0 + here->HICUMibiei_Vrth) = Ibiei_Vrth; *(ckt->CKTstate0 + here->HICUMibpei) = Ibpei; *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) = Ibpei_Vbpei; *(ckt->CKTstate0 + here->HICUMibpei_Vrth) = Ibpei_Vrth; *(ckt->CKTstate0 + here->HICUMiciei) = Iciei; *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) = Iciei_Vbiei; *(ckt->CKTstate0 + here->HICUMiciei_Vbici) = Iciei_Vbici; *(ckt->CKTstate0 + here->HICUMiciei_Vrth) = Iciei_Vrth; *(ckt->CKTstate0 + here->HICUMiciei_Vxf2) = Iciei_Vxf2; *(ckt->CKTstate0 + here->HICUMibici) = Ibici; *(ckt->CKTstate0 + here->HICUMibici_Vbici) = Ibici_Vbici; *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = Ibici_Vbiei; *(ckt->CKTstate0 + here->HICUMibici_Vrth) = Ibici_Vrth; *(ckt->CKTstate0 + here->HICUMibpbi) = Ibpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = Ibpbi_Vbpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei) = Ibpbi_Vbiei; *(ckt->CKTstate0 + here->HICUMibpbi_Vbici) = Ibpbi_Vbici; *(ckt->CKTstate0 + here->HICUMibpbi_Vrth) = Ibpbi_Vrth; *(ckt->CKTstate0 + here->HICUMibpci) = Ibpci; *(ckt->CKTstate0 + here->HICUMibpci_Vbpci) = Ibpci_Vbpci; *(ckt->CKTstate0 + here->HICUMibpci_Vrth) = Ibpci_Vrth; *(ckt->CKTstate0 + here->HICUMisici) = Isici; *(ckt->CKTstate0 + here->HICUMisici_Vsici) = Isici_Vsici; *(ckt->CKTstate0 + here->HICUMisici_Vrth) = Isici_Vrth; *(ckt->CKTstate0 + here->HICUMibpsi) = Ibpsi; *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci) = Ibpsi_Vbpci; *(ckt->CKTstate0 + here->HICUMibpsi_Vsici) = Ibpsi_Vsici; *(ckt->CKTstate0 + here->HICUMibpsi_Vrth) = Ibpsi_Vrth; *(ckt->CKTstate0 + here->HICUMisis_Vsis) = Isis_Vsis; *(ckt->CKTstate0 + here->HICUMieie) = Ieie; *(ckt->CKTstate0 + here->HICUMieie_Vrth) = Ieie_Vrth; *(ckt->CKTstate0 + here->HICUMcqcth) = Icth; *(ckt->CKTstate0 + here->HICUMvrth) = Vrth; *(ckt->CKTstate0 + here->HICUMgqbepar1) = gqbepar1; *(ckt->CKTstate0 + here->HICUMgqbepar2) = gqbepar2; *(ckt->CKTstate0 + here->HICUMgqbcpar1) = gqbcpar1; *(ckt->CKTstate0 + here->HICUMgqbcpar2) = gqbcpar2; *(ckt->CKTstate0 + here->HICUMgqsu) = gqsu; *(ckt->CKTstate0 + here->HICUMith) = Ith; *(ckt->CKTstate0 + here->HICUMith_Vrth) = Ith_Vrth; *(ckt->CKTstate0 + here->HICUMith_Vbiei) = Ith_Vbiei; *(ckt->CKTstate0 + here->HICUMith_Vbici) = Ith_Vbici; *(ckt->CKTstate0 + here->HICUMith_Vbpbi) = Ith_Vbpbi; *(ckt->CKTstate0 + here->HICUMith_Vbpci) = Ith_Vbpci; *(ckt->CKTstate0 + here->HICUMith_Vbpei) = Ith_Vbpei; *(ckt->CKTstate0 + here->HICUMith_Vciei) = Ith_Vciei; *(ckt->CKTstate0 + here->HICUMith_Vsici) = Ith_Vsici; *(ckt->CKTstate0 + here->HICUMith_Vcic) = Ith_Vcic; *(ckt->CKTstate0 + here->HICUMith_Vbbp) = Ith_Vbbp; *(ckt->CKTstate0 + here->HICUMith_Veie) = Ith_Veie; *(ckt->CKTstate0 + here->HICUMixf) = Ixf; *(ckt->CKTstate0 + here->HICUMixf_Vbiei) = Ixf_Vbiei; *(ckt->CKTstate0 + here->HICUMixf_Vbici) = Ixf_Vbici; *(ckt->CKTstate0 + here->HICUMixf_Vxf) = Ixf_Vxf; *(ckt->CKTstate0 + here->HICUMixf_Vrth) = Ixf_dT; *(ckt->CKTstate0 + here->HICUMixf1) = Ixf1; *(ckt->CKTstate0 + here->HICUMixf1_Vbiei) = Ixf1_Vbiei; *(ckt->CKTstate0 + here->HICUMixf1_Vbici) = Ixf1_Vbici; *(ckt->CKTstate0 + here->HICUMixf1_Vxf2) = Ixf1_Vxf2; *(ckt->CKTstate0 + here->HICUMixf1_Vxf1) = Ixf1_Vxf1; *(ckt->CKTstate0 + here->HICUMixf1_Vrth) = Ixf1_dT; *(ckt->CKTstate0 + here->HICUMixf2) = Ixf2; *(ckt->CKTstate0 + here->HICUMixf2_Vbiei) = Ixf2_Vbiei; *(ckt->CKTstate0 + here->HICUMixf2_Vbici) = Ixf2_Vbici; *(ckt->CKTstate0 + here->HICUMixf2_Vxf1) = Ixf2_Vxf1; *(ckt->CKTstate0 + here->HICUMixf2_Vxf2) = Ixf2_Vxf2; *(ckt->CKTstate0 + here->HICUMixf2_Vrth) = Ixf2_dT; *(ckt->CKTstate0 + here->HICUMit) = it; load: // ############################################################# // ############### STAMPS NO SH ############################## // ############################################################# // Branch: sc, Stamp element: Cscp rhs_current = model->HICUMtype * (Isc - Isc_Vsc*Vsc); *(ckt->CKTrhs + here->HICUMsubsNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollNode) += rhs_current; // with respect to Vsc *(here->HICUMsubsSubsPtr) += Isc_Vsc; *(here->HICUMcollCollPtr) += Isc_Vsc; *(here->HICUMsubsCollPtr) += -Isc_Vsc; *(here->HICUMcollSubsPtr) += -Isc_Vsc; // Branch: bci, Stamp element: Qbcx rhs_current = model->HICUMtype * (Ibci - Ibci_Vbci*Vbci); *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; //with respect to Vbci *(here->HICUMbaseBasePtr) += Ibci_Vbci; *(here->HICUMcollCICollCIPtr) += Ibci_Vbci; *(here->HICUMbaseCollCIPtr) += -Ibci_Vbci; *(here->HICUMcollCIBasePtr) += -Ibci_Vbci; // Branch: be, Stamp element: Cbepar1 rhs_current = model->HICUMtype * (*(ckt->CKTstate0 + here->HICUMcqbepar1) - Vbe * gqbepar1); *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitNode) += rhs_current; // with respect to Vbe *(here->HICUMbaseBasePtr) += gqbepar1; *(here->HICUMemitEmitPtr) += gqbepar1; *(here->HICUMbaseEmitPtr) += -gqbepar1; *(here->HICUMemitBasePtr) += -gqbepar1; // Branch: bpe, Stamp element: Cbepar2 rhs_current = model->HICUMtype * (*(ckt->CKTstate0 + here->HICUMcqbepar2) - Vbpe * gqbepar2); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitNode) += rhs_current; // with respect to Vbpe *(here->HICUMbaseBPBaseBPPtr) += gqbepar2; *(here->HICUMemitEmitPtr) += gqbepar2; *(here->HICUMbaseBPEmitPtr) += -gqbepar2; *(here->HICUMemitBaseBPPtr) += -gqbepar2; // Branch: bci, Stamp element: Cbcpar1 rhs_current = model->HICUMtype * (*(ckt->CKTstate0 + here->HICUMcqbcpar1) - Vbci * gqbcpar1); *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Vbci *(here->HICUMbaseBasePtr) += gqbcpar1; *(here->HICUMcollCICollCIPtr) += gqbcpar1; *(here->HICUMbaseCollCIPtr) += -gqbcpar1; *(here->HICUMcollCIBasePtr) += -gqbcpar1; // Branch: bpci, Stamp element: Cbcpar2 rhs_current = model->HICUMtype * (*(ckt->CKTstate0 + here->HICUMcqbcpar2) - Vbpci * gqbcpar2); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Vbpci *(here->HICUMbaseBPBaseBPPtr) += gqbcpar2; *(here->HICUMcollCICollCIPtr) += gqbcpar2; *(here->HICUMbaseBPCollCIPtr) += -gqbcpar2; *(here->HICUMcollCIBaseBPPtr) += -gqbcpar2; // Branch: ssi, Stamp element: Csu //Markus: I think rhs sign is wrong here rhs_current = model->HICUMtype * (*(ckt->CKTstate0 + here->HICUMcqsu) - Vsis * gqsu); *(ckt->CKTrhs + here->HICUMsubsNode) += +rhs_current; *(ckt->CKTrhs + here->HICUMsubsSINode) += -rhs_current; // with respect to Vsis *(here->HICUMsubsSubsPtr) += gqsu; *(here->HICUMsubsSISubsSIPtr) += gqsu; *(here->HICUMsubsSubsSIPtr) += -gqsu; *(here->HICUMsubsSISubsPtr) += -gqsu; // Branch: biei, Stamp element: Ibiei = Ibei + Irei ( was Ijbei ) rhs_current = model->HICUMtype * (Ibiei - Ibiei_Vbiei*Vbiei - Ibiei_Vxf*Vxf - Ibiei_Vbici*Vbici); *(ckt->CKTrhs + here->HICUMbaseBINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Vbiei *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Ibiei_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibiei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbiei; // with respect to Vbici *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbici; *(here->HICUMemitEICollCIPtr) += Ibiei_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici; if (nqs) { *(here->HICUMbaseBIXfPtr) += Ibiei_Vxf; *(here->HICUMemitEIXfPtr) += -Ibiei_Vxf; } // Branch: bpei, Stamp element: Ibpei = Ibep + Irep ( was Ijbep ) rhs_current = model->HICUMtype * (Ibpei - Ibpei_Vbpei*Vbpei); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Vbpei *(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei; *(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei; *(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei; // Branch: bici, Stamp element: Ibici ( was Ijbci ) f_bi=+ f_ci=- rhs_current = model->HICUMtype * (Ibici - Ibici_Vbici*Vbici - Ibici_Vbiei*Vbiei); *(ckt->CKTrhs + here->HICUMbaseBINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Vbici *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; *(here->HICUMcollCICollCIPtr) += Ibici_Vbici; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; // with respect to Vbiei *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbiei; *(here->HICUMcollCIEmitEIPtr) += Ibici_Vbiei; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibici_Vbiei; // Branch: ciei, Stamp element: It rhs_current = model->HICUMtype * (Iciei - Iciei_Vbiei*Vbiei - Iciei_Vbici*Vbici- Iciei_Vxf2*Vxf2); *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Vbiei f_CI = + f_EI = - *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Iciei_Vbiei; *(here->HICUMcollCIEmitEIPtr) += -Iciei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbiei; // with respect to Vbici *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbici; *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; *(here->HICUMcollCICollCIPtr) += -Iciei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; if (nqs) { // with respect to Vxf2 *(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2; *(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2; } // Branch: bpci, Stamp element: Ibpci ( was Ijbcx ) rhs_current = model->HICUMtype * (Ibpci - Ibpci_Vbpci*Vbpci); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Vbpci *(here->HICUMbaseBPBaseBPPtr) += Ibpci_Vbpci; *(here->HICUMcollCICollCIPtr) += Ibpci_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpci_Vbpci; *(here->HICUMcollCIBaseBPPtr) += -Ibpci_Vbpci; // Branch: cic, Stamp element: Rcx // with respect to Vcic *(here->HICUMcollCollPtr) += Icic_Vcic; *(here->HICUMcollCICollCIPtr) += Icic_Vcic; *(here->HICUMcollCICollPtr) += -Icic_Vcic; *(here->HICUMcollCollCIPtr) += -Icic_Vcic; // Branch: bbp, Stamp element: Rbx // with respect to Vbbp *(here->HICUMbaseBasePtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBaseBPPtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBasePtr) += -Ibbp_Vbbp; *(here->HICUMbaseBaseBPPtr) += -Ibbp_Vbbp; // Branch: eie, Stamp element: Re // with respect to Veie *(here->HICUMemitEmitPtr) += Ieie_Veie; *(here->HICUMemitEIEmitEIPtr) += Ieie_Veie; *(here->HICUMemitEIEmitPtr) += -Ieie_Veie; *(here->HICUMemitEmitEIPtr) += -Ieie_Veie; if (rbi > 0.0) { // Branch: bpbi, Stamp element: Rbi, Crbi rhs_current = model->HICUMtype * (Ibpbi - Ibpbi_Vbpbi*Vbpbi - Ibpbi_Vbiei*Vbiei - Ibpbi_Vbici*Vbici); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current; //f_Bp = + f_Bi = - // with respect to Vbpbi *(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi; // with respect to Vbiei *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei; // with respect to Vbici *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici; } // Branch: sici, Stamp element: Ijsc rhs_current = model->HICUMtype * (Isici - Isici_Vsici*Vsici); *(ckt->CKTrhs + here->HICUMsubsSINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Vsici *(here->HICUMsubsSISubsSIPtr) += Isici_Vsici; *(here->HICUMcollCICollCIPtr) += Isici_Vsici; *(here->HICUMsubsSICollCIPtr) += -Isici_Vsici; *(here->HICUMcollCISubsSIPtr) += -Isici_Vsici; // Branch: bpsi, Stamp element: Its rhs_current = model->HICUMtype * (Ibpsi - Ibpsi_Vbpci*Vbpci - Ibpsi_Vsici*Vsici); *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMsubsSINode) += rhs_current; // f_Bp = + f_Si = - // with respect to Vsici *(here->HICUMbaseBPSubsSIPtr) += Ibpsi_Vsici; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vsici; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vsici; *(here->HICUMsubsSISubsSIPtr) += -Ibpsi_Vsici; // with respect to Vbpci *(here->HICUMbaseBPBaseBPPtr) += Ibpsi_Vbpci; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vbpci; *(here->HICUMsubsSIBaseBPPtr) += -Ibpsi_Vbpci; // Branch: sis, Stamp element: Rsu // with respect to Vsis *(here->HICUMsubsSubsPtr) += Isis_Vsis; *(here->HICUMsubsSISubsSIPtr) += Isis_Vsis; *(here->HICUMsubsSISubsPtr) += -Isis_Vsis; *(here->HICUMsubsSubsSIPtr) += -Isis_Vsis; if (nqs) { // Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+ rhs_current = Ixf1 - Ixf1_Vbici*Vbici - Ixf1_Vbiei*Vbiei -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2; *(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current; // rhs_current; // into xf1 node *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei; *(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei; *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbici; *(here->HICUMxf1CollCIPtr) += -Ixf1_Vbici; *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2; *(here->HICUMxf1Xf1Ptr) += +Ixf1_Vxf1; // Branch: xf2-ground, Stamp element: Ixf2 f_xf2=+ rhs_current = Ixf2 - Ixf2_Vbici*Vbici - Ixf2_Vbiei*Vbiei - Ixf2_Vxf1*Vxf1 - Ixf2_Vxf2*Vxf2; *(ckt->CKTrhs + here->HICUMxf2Node) += -rhs_current; // rhs_current; // into xf2 node *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbiei; *(here->HICUMxf2EmitEIPtr) += -Ixf2_Vbiei; *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbici; *(here->HICUMxf2CollCIPtr) += -Ixf2_Vbici; *(here->HICUMxf2Xf2Ptr) += +Ixf2_Vxf2; *(here->HICUMxf2Xf1Ptr) += +Ixf2_Vxf1; // Branch: xf-ground, Stamp element: Ixf f_xf=+ rhs_current = Ixf - Ixf_Vbici*Vbici - Ixf_Vbiei*Vbiei - Ixf_Vxf*Vxf; *(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current; // rhs_current; // into xf node *(here->HICUMxfBaseBIPtr) += +Ixf_Vbiei; *(here->HICUMxfEmitEIPtr) += -Ixf_Vbiei; *(here->HICUMxfBaseBIPtr) += +Ixf_Vbici; *(here->HICUMxfCollCIPtr) += -Ixf_Vbici; *(here->HICUMxfXfPtr) += +Ixf_Vxf; } // ############################################################# // ############### FINISH STAMPS NO SH ######################### // ############################################################# if (selfheat) { // ############################################################# // ############### STAMP WITH SH ADDITIONS ##################### // ############################################################# // Stamp element: Ibiei f_Bi = + f_Ei = - rhs_current = -Ibiei_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseBItempPtr) += Ibiei_Vrth; *(here->HICUMemitEItempPtr) += -Ibiei_Vrth; // Stamp element: Ibpei f_Bp = + f_Ei = - rhs_current = -Ibpei_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseBPtempPtr) += Ibpei_Vrth; *(here->HICUMemitEItempPtr) += -Ibpei_Vrth; // Stamp element: Ibici f_Bi = + f_Ci = - rhs_current = -Ibici_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseBItempPtr) += Ibici_Vrth; *(here->HICUMcollCItempPtr) += -Ibici_Vrth; // Stamp element: Iciei f_Ci = + f_Ei = - rhs_current = -Iciei_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMcollCItempPtr) += Iciei_Vrth; *(here->HICUMemitEItempPtr) += -Iciei_Vrth; // Stamp element: Ibpci f_Bp = + f_Ci = - rhs_current = -Ibpci_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseBPtempPtr) += Ibpci_Vrth; *(here->HICUMcollCItempPtr) += -Ibpci_Vrth; // Stamp element: Rcx f_Ci = + f_C = - rhs_current = -Icic_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollNode) += rhs_current; // with respect to Potential Vrth *(here->HICUMcollCItempPtr) += Icic_Vrth; *(here->HICUMcollTempPtr) += -Icic_Vrth; // Stamp element: Rbx f_B = + f_Bp = - rhs_current = -Ibbp_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMbaseBPNode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseTempPtr) += Ibbp_Vrth; *(here->HICUMbaseBPtempPtr) += -Ibbp_Vrth; // Stamp element: Re f_Ei = + f_E = - rhs_current = - Ieie_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMemitEINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMemitNode) += +rhs_current; // with respect to Potential Vrth *(here->HICUMemitEItempPtr) += +Ieie_Vrth; *(here->HICUMemitTempPtr) += -Ieie_Vrth; if (rbi > 0.0) { // Stamp element: Rbi f_Bp = + f_Bi = - rhs_current = -Ibpbi_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth; *(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth; }; // Stamp element: Isici f_Si = + f_Ci = - rhs_current = -Isici_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMsubsSINode) += -rhs_current; *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; // with respect to Potential Vrth *(here->HICUMsubsSItempPtr) += Isici_Vrth; *(here->HICUMcollCItempPtr) += -Isici_Vrth; // Branch: bpsi, Stamp element: Its rhs_current = - Ibpsi_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; *(ckt->CKTrhs + here->HICUMsubsSINode) += rhs_current; // f_Bp = + f_Si = - // with respect to Vrth *(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth; *(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth; if (nqs) { // Stamp element: Ixf f_xf = + rhs_current = -Ixf_dT*Vrth; *(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current; // with respect to Potential Vxf *(here->HICUMxfTempPtr) += Ixf_dT; // Stamp element: Ixf1 f_xf1 = + rhs_current = -Ixf1_dT*Vrth; *(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current; // with respect to Potential Vxf1 *(here->HICUMxf1TempPtr) += Ixf1_dT; // Stamp element: Ixf2 f_xf2 = + rhs_current = -Ixf2_dT*Vrth; *(ckt->CKTrhs + here->HICUMxf2Node) += -rhs_current; // with respect to Potential Vxf2 *(here->HICUMxf2TempPtr) += Ixf2_dT; } // Stamp element: Ith f_T = - Ith // Ith = -Vrth/here->HICUMrth_t.rpart; //Current from gnd to T // Ith_Vrth = (-1/here->HICUMrth_t.rpart + Vrth/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart); rhs_current = Ith - Ith_Vbiei*Vbiei - Ith_Vbici*Vbici - Ith_Vciei*Vciei - Ith_Vbpei*Vbpei - Ith_Vbpci*Vbpci - Ith_Vsici*Vsici - Ith_Vbpbi*Vbpbi - Ith_Vcic*Vcic - Ith_Vbbp*Vbbp - Ith_Veie*Veie - Ith_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMtempNode) += rhs_current; // with respect to Potential Vrth *(here->HICUMtempTempPtr) += -Ith_Vrth; // with respect to Potential Vbiei *(here->HICUMtempBaseBIPtr) += -Ith_Vbiei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbiei; // with respect to Potential Vbici *(here->HICUMtempBaseBIPtr) += -Ith_Vbici; *(here->HICUMtempCollCIPtr) += +Ith_Vbici; // with respect to Potential Vciei *(here->HICUMtempCollCIPtr) += -Ith_Vciei; *(here->HICUMtempEmitEIPtr) += +Ith_Vciei; // with respect to Potential Vbpei *(here->HICUMtempBaseBPPtr) += -Ith_Vbpei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbpei; // with respect to Potential Vbpci *(here->HICUMtempBaseBPPtr) += -Ith_Vbpci; *(here->HICUMtempCollCIPtr) += +Ith_Vbpci; // with respect to Potential Vsici *(here->HICUMtempSubsSIPtr) += -Ith_Vsici; *(here->HICUMtempCollCIPtr) += +Ith_Vsici; // with respect to Potential Vbpbi *(here->HICUMtempBaseBPPtr) += -Ith_Vbpbi; *(here->HICUMtempBaseBIPtr) += +Ith_Vbpbi; // with respect to Potential Vcic *(here->HICUMtempCollCIPtr) += -Ith_Vcic; *(here->HICUMtempCollPtr) += +Ith_Vcic; // with respect to Potential Vbbp *(here->HICUMtempBasePtr) += -Ith_Vbbp; *(here->HICUMtempBaseBPPtr) += +Ith_Vbbp; // with respect to Potential Veie *(here->HICUMtempEmitEIPtr) += -Ith_Veie; *(here->HICUMtempEmitPtr) += +Ith_Veie; // Cth f_T = - (put this separate to Ith to get signs right) rhs_current = Icth - Vrth * Icth_Vrth; *(ckt->CKTrhs + here->HICUMtempNode) += -rhs_current; *(here->HICUMtempTempPtr) += +Icth_Vrth; // Stamp element: Rth f_T = + rhs_current = Vrth/here->HICUMrth_t.rpart - Irth_Vrth*Vrth; *(ckt->CKTrhs + here->HICUMtempNode) += -rhs_current; *(here->HICUMtempTempPtr) += Irth_Vrth; } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2ask.c0000644000175000017500000002330414163340332022377 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine gives access to the internal device * parameters for HICUMs */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/cktdefs.h" #include "hicum2defs.h" #include "ngspice/ifsim.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /*ARGSUSED*/ int HICUMask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select) { HICUMinstance *here = (HICUMinstance*)instPtr; NG_IGNORE(select); double g_be; IFvalue IC, IB, RPIi, RPIx, GMi; IFvalue CPIi, CPIx, CMUi, CMUx; IFvalue rcx_t, re_t, rb, BETAAC; switch(which) { case HICUM_AREA: value->rValue = here->HICUMarea; return(OK); case HICUM_OFF: value->iValue = here->HICUMoff; return(OK); case HICUM_TEMP: value->rValue = here->HICUMtemp - CONSTCtoK; return(OK); case HICUM_M: value->rValue = here->HICUMm; return(OK); case HICUM_QUEST_COLLNODE: value->iValue = here->HICUMcollNode; return(OK); case HICUM_QUEST_BASENODE: value->iValue = here->HICUMbaseNode; return(OK); case HICUM_QUEST_EMITNODE: value->iValue = here->HICUMemitNode; return(OK); case HICUM_QUEST_SUBSNODE: value->iValue = here->HICUMsubsNode; return(OK); case HICUM_QUEST_COLLCINODE: value->iValue = here->HICUMcollCINode; return(OK); case HICUM_QUEST_BASEBPNODE: value->iValue = here->HICUMbaseBPNode; return(OK); case HICUM_QUEST_BASEBINODE: value->iValue = here->HICUMbaseBINode; return(OK); case HICUM_QUEST_EMITEINODE: value->iValue = here->HICUMemitEINode; return(OK); case HICUM_QUEST_SUBSSINODE: value->iValue = here->HICUMsubsSINode; return(OK); /* voltages */ case HICUM_QUEST_VBE: value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMemitNode); return(OK); case HICUM_QUEST_VBBP: value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMbaseBPNode); return(OK); case HICUM_QUEST_VBC: value->rValue = *(ckt->CKTstate0 + here->HICUMbaseNode)-*(ckt->CKTstate0 + here->HICUMcollNode); return(OK); case HICUM_QUEST_VCE: value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMemitNode); return(OK); case HICUM_QUEST_VSC: value->rValue = *(ckt->CKTstate0 + here->HICUMcollNode)-*(ckt->CKTstate0 + here->HICUMsubsNode); return(OK); case HICUM_QUEST_VBIEI: value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei); return(OK); case HICUM_QUEST_VBPBI: value->rValue = *(ckt->CKTstate0 + here->HICUMvbpbi); return(OK); case HICUM_QUEST_VBICI: value->rValue = *(ckt->CKTstate0 + here->HICUMvbici); return(OK); case HICUM_QUEST_VCIEI: value->rValue = *(ckt->CKTstate0 + here->HICUMvbiei) - *(ckt->CKTstate0 + here->HICUMvbici); return(OK); /* currents */ case HICUM_QUEST_CC: // value->rValue = 0.0; value->rValue = *(ckt->CKTstate0 + here->HICUMiciei) - *(ckt->CKTstate0 + here->HICUMibici) - *(ckt->CKTstate0 + here->HICUMibpci) - *(ckt->CKTstate0 + here->HICUMisici); return(OK); case HICUM_QUEST_CB: value->rValue = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibpci) + *(ckt->CKTstate0 + here->HICUMibpsi); return(OK); case HICUM_QUEST_CE: value->rValue = - *(ckt->CKTstate0 + here->HICUMibiei) - *(ckt->CKTstate0 + here->HICUMibpei) - *(ckt->CKTstate0 + here->HICUMiciei); return(OK); case HICUM_QUEST_CS: value->rValue = *(ckt->CKTstate0 + here->HICUMisici) - *(ckt->CKTstate0 + here->HICUMibpsi); return(OK); case HICUM_QUEST_CAVL: value->rValue = here->HICUMiavl; return(OK); case HICUM_QUEST_CBEI: value->rValue = *(ckt->CKTstate0 + here->HICUMibiei); return(OK); case HICUM_QUEST_CBCI: value->rValue = *(ckt->CKTstate0 + here->HICUMibici); return(OK); /* resistances */ case HICUM_QUEST_RCX_T: value->rValue = here->HICUMrcx_t.rpart; return(OK); case HICUM_QUEST_RE_T: value->rValue = here->HICUMre_t.rpart; return(OK); case HICUM_QUEST_IT: value->rValue = *(ckt->CKTstate0 + here->HICUMiciei); return(OK); case HICUM_QUEST_RBI: value->rValue = here->HICUMrbi; return(OK); case HICUM_QUEST_RB: value->rValue = here->HICUMrbi + here->HICUMrbx_t.rpart; return(OK); /* transconductances and capacitances */ case HICUM_QUEST_BETADC: HICUMask(ckt, instPtr, HICUM_QUEST_CC, &IC, select); HICUMask(ckt, instPtr, HICUM_QUEST_CB, &IB, select); if (IB.rValue != 0.0) { value->rValue = IC.rValue/IB.rValue; } else { value->rValue = 0.0; } return(OK); case HICUM_QUEST_GMI: value->rValue = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); return(OK); case HICUM_QUEST_GMS: value->rValue = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); return(OK); case HICUM_QUEST_RPII: value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) ); return(OK); case HICUM_QUEST_RPIX: value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) ); return(OK); case HICUM_QUEST_RMUI: value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibici_Vbici) + ckt->CKTgmin); return(OK); case HICUM_QUEST_RMUX: value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMibpci_Vbpci) + ckt->CKTgmin); return(OK); case HICUM_QUEST_ROI: value->rValue = 1/( *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) + ckt->CKTgmin); return(OK); case HICUM_QUEST_CPII: value->rValue = here->HICUMcapjei + here->HICUMcapdeix; return(OK); case HICUM_QUEST_CPIX: value->rValue = here->HICUMcapjep + here->HICUMcbepar_scaled; return(OK); case HICUM_QUEST_CMUI: value->rValue = here->HICUMcapjci + here->HICUMcapdci; return(OK); case HICUM_QUEST_CMUX: value->rValue = here->HICUMcapjcx_t_i + here->HICUMcapjcx_t_ii + here->HICUMcbcpar_scaled + here->HICUMcapdsu; return(OK); case HICUM_QUEST_CCS: value->rValue = here->HICUMcapjs + here->HICUMcapscp; return(OK); case HICUM_QUEST_CRBI: value->rValue = here->HICUMcaprbi; return(OK); case HICUM_QUEST_BETAAC: HICUMask(ckt, instPtr, HICUM_QUEST_RPII, &RPIi, select); HICUMask(ckt, instPtr, HICUM_QUEST_RPIX, &RPIx, select); HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select); g_be = 1/(RPIi.rValue + RPIx.rValue); if (g_be > 0.0) { value->rValue = GMi.rValue/g_be; } else { value->rValue = 0.0; } return(OK); /* transit time */ case HICUM_QUEST_TF: value->rValue = here->HICUMtf; return(OK); case HICUM_QUEST_FT: // FT = GMi/(2*`M_PI*(CPIi+CPIx+CMUi+CMUx+(rcx_t+re_t+(re_t+rb)/BETAAC)*GMi*(CMUi+CMUx))); HICUMask(ckt, instPtr, HICUM_QUEST_GMI, &GMi, select); HICUMask(ckt, instPtr, HICUM_QUEST_CPII, &CPIi, select); HICUMask(ckt, instPtr, HICUM_QUEST_CPIX, &CPIx, select); HICUMask(ckt, instPtr, HICUM_QUEST_CMUI, &CMUi, select); HICUMask(ckt, instPtr, HICUM_QUEST_CMUX, &CMUx, select); HICUMask(ckt, instPtr, HICUM_QUEST_RCX_T, &rcx_t, select); HICUMask(ckt, instPtr, HICUM_QUEST_RE_T, &re_t, select); HICUMask(ckt, instPtr, HICUM_QUEST_RB, &rb, select); HICUMask(ckt, instPtr, HICUM_QUEST_BETAAC, &BETAAC, select); value->rValue = GMi.rValue/( 2 * M_PI * ( CPIi.rValue + CPIx.rValue + CMUi.rValue + CMUx.rValue + (rcx_t.rValue + re_t.rValue + (re_t.rValue + rb.rValue)/BETAAC.rValue) ) * GMi.rValue * ( CMUi.rValue + CMUx.rValue ) ); return(OK); case HICUM_QUEST_ICK: value->rValue = here->HICUMick; return(OK); case HICUM_QUEST_POWER: value->rValue = here->HICUMpterm; return(OK); case HICUM_QUEST_TK: value->rValue = here->HICUMtemp; return(OK); case HICUM_QUEST_DTSH: value->rValue = here->HICUMdtemp_sh; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2pzld.c0000644000175000017500000012124714163340332022577 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * 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 "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) { HICUMinstance *here; HICUMmodel *model = (HICUMmodel*)inModel; double Ibpei_Vbpei; double Ibpei_Vrth; double Ibiei_Vbiei; double Ibiei_Vxf; double Ibiei_Vbici; double Ibiei_Vrth; double Ibici_Vbici; double Ibici_Vbiei; double Ibici_Vrth; double Ibpci_Vbpci; double Ibpci_Vrth; double Isici_Vsici; double Isici_Vrth; double Iciei_Vbiei; double Iciei_Vbici; double Iciei_Vrth; double Iciei_Vxf2; double Ibpbi_Vbpbi; double Ibpbi_Vbici; double Ibpbi_Vbiei; double Ibpbi_Vrth; double Isis_Vsis; double Icic_Vcic, Icic_Vrth; double Ieie_Veie, Ieie_Vrth; double Ibbp_Vbbp, Ibbp_Vrth; double Irth_Vrth; double Ibpsi_Vbpci; double Ibpsi_Vsici; double Ibpsi_Vrth; double XQrbi_Vbpbi; double XQrbi_Vbiei; double XQrbi_Vbici; double XQrbi_Vrth; double XQjei_Vbiei; double XQjei_Vrth; double XQjci_Vbici; double XQjci_Vrth; double XQjep_Vbpei; double XQjep_Vrth; double volatile Xqjcx0_t_i_Vbci; double Xqjcx0_t_i_Vrth; double volatile Xqjcx0_t_ii_Vbpci; double Xqjcx0_t_ii_Vrth; double XQdsu_Vbpci; double XQdsu_Vsici; double XQdsu_Vrth; double XQjs_Vsici; double XQjs_Vrth; double XQscp_Vsc; double XQscp_Vrth; double XQbepar1_Vbe; double XQbepar2_Vbpe; double XQbcpar1_Vbci; double XQbcpar2_Vbpci; double XQsu_Vsis; double XQcth_Vrth; double XQf_Vbiei; double XQf_Vbici; double XQf_Vrth; double XQf_Vxf; double XQr_Vrth; double XQr_Vbiei; double XQr_Vbici; double XQxf_Vxf; double XQxf1_Vxf1; double XQxf2_Vxf2; double Ixf1_Vbiei; double Ixf1_Vbici; double Ixf1_Vxf2 ; double Ixf1_Vxf1 ; double Ixf1_Vrth ; double Ixf2_Vbiei; double Ixf2_Vbici; double Ixf2_Vxf2 ; double Ixf2_Vxf1 ; double Ixf2_Vrth ; double Ixf_Vbiei ; double Ixf_Vbici ; double Ixf_Vxf ; double Ixf_Vrth ; double Ith_Vrth, Ith_Vbiei, Ith_Vbici, Ith_Vbpbi, Ith_Vbpci, Ith_Vbpei, Ith_Vciei, Ith_Vsici, Ith_Vcic, Ith_Vbbp, Ith_Veie; /* loop through all the models */ for( ; model != NULL; model = HICUMnextModel(model)) { int selfheat = ( (model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0)); int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0)); /* loop through all the instances of the model */ for( here = HICUMinstances(model); here!= NULL; here = HICUMnextInstance(here)) { // get all derivatives of branch DC currents if(model->HICUMrcxGiven && model->HICUMrcx != 0) { Icic_Vcic = 1/here->HICUMrcx_t.rpart; Icic_Vrth = -*(ckt->CKTstate0 + here->HICUMvcic)/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart*here->HICUMrcx_t.dpart; } else { Icic_Vcic = 0.0; Icic_Vrth = 0.0; } if(model->HICUMrbxGiven && model->HICUMrbx != 0) { Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; Ibbp_Vrth = -*(ckt->CKTstate0 + here->HICUMvbbp)/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart*here->HICUMrbx_t.dpart; } else { Ibbp_Vbbp = 0.0; Ibbp_Vrth = 0.0; } if(model->HICUMreGiven && model->HICUMre != 0) { Ieie_Veie = 1/here->HICUMre_t.rpart; Ieie_Vrth = -*(ckt->CKTstate0 + here->HICUMveie)/here->HICUMre_t.rpart/here->HICUMre_t.rpart*here->HICUMre_t.dpart; } else { Ieie_Veie = 0.0; Ieie_Vrth = 0.0; } if(model->HICUMrsuGiven && model->HICUMrsu != 0) { Isis_Vsis = 1/model->HICUMrsu*here->HICUMm; } else { Isis_Vsis = 0.0; } if(selfheat) { Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart); } else { Irth_Vrth = 0.0; } Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vxf = *(ckt->CKTstate0 + here->HICUMibiei_Vxf); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); Ibiei_Vrth = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); Ibpei_Vbpei = *(ckt->CKTstate0 + here->HICUMibpei_Vbpei); Ibpei_Vrth = *(ckt->CKTstate0 + here->HICUMibpei_Vrth); Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth); Iciei_Vxf2 = *(ckt->CKTstate0 + here->HICUMiciei_Vxf2); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibici_Vrth = *(ckt->CKTstate0 + here->HICUMibici_Vrth); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vbici = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); Isici_Vrth = *(ckt->CKTstate0 + here->HICUMisici_Vrth); Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici); Ibpsi_Vrth = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth); Ith_Vrth = *(ckt->CKTstate0 + here->HICUMith_Vrth); Ith_Vbiei = *(ckt->CKTstate0 + here->HICUMith_Vbiei); Ith_Vbici = *(ckt->CKTstate0 + here->HICUMith_Vbici); Ith_Vbpbi = *(ckt->CKTstate0 + here->HICUMith_Vbpbi); Ith_Vbpci = *(ckt->CKTstate0 + here->HICUMith_Vbpci); Ith_Vbpei = *(ckt->CKTstate0 + here->HICUMith_Vbpei); Ith_Vciei = *(ckt->CKTstate0 + here->HICUMith_Vciei); Ith_Vsici = *(ckt->CKTstate0 + here->HICUMith_Vsici); Ith_Vcic = *(ckt->CKTstate0 + here->HICUMith_Vcic); Ith_Vbbp = *(ckt->CKTstate0 + here->HICUMith_Vbbp); Ith_Veie = *(ckt->CKTstate0 + here->HICUMith_Veie); Ixf1_Vbiei = *(ckt->CKTstate0 + here->HICUMixf1_Vbiei); Ixf1_Vbici = *(ckt->CKTstate0 + here->HICUMixf1_Vbici); Ixf1_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf2); Ixf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf1); Ixf1_Vrth = *(ckt->CKTstate0 + here->HICUMixf1_Vrth); Ixf2_Vbiei = *(ckt->CKTstate0 + here->HICUMixf2_Vbiei); Ixf2_Vbici = *(ckt->CKTstate0 + here->HICUMixf2_Vbici); Ixf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf2); Ixf2_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf1); Ixf2_Vrth = *(ckt->CKTstate0 + here->HICUMixf2_Vrth); Ixf_Vbiei = *(ckt->CKTstate0 + here->HICUMixf_Vbiei); Ixf_Vbici = *(ckt->CKTstate0 + here->HICUMixf_Vbici); Ixf_Vxf = *(ckt->CKTstate0 + here->HICUMixf_Vxf); Ixf_Vrth = *(ckt->CKTstate0 + here->HICUMixf_Vrth); //////////////////////////////////// ////////// The real part ///////// //////////////////////////////////// // Stamp element: Ibiei *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Ibiei_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibiei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbiei; *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbici; *(here->HICUMemitEICollCIPtr) += Ibiei_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici; if (nqs) { *(here->HICUMbaseBIXfPtr) += Ibiei_Vxf; *(here->HICUMemitEIXfPtr) += -Ibiei_Vxf; } // Stamp element: Ibpei *(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei; *(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei; *(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei;; // Stamp element: Ibici *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; *(here->HICUMcollCICollCIPtr) += Ibici_Vbici; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbiei; *(here->HICUMcollCIEmitEIPtr) += Ibici_Vbiei; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibici_Vbiei; // Stamp element: Iciei *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Iciei_Vbiei; *(here->HICUMcollCIEmitEIPtr) += -Iciei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbiei; *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbici; *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; *(here->HICUMcollCICollCIPtr) += -Iciei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; if (nqs) { *(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2; *(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2; } // Stamp element: Ibpci *(here->HICUMbaseBPBaseBPPtr) += Ibpci_Vbpci; *(here->HICUMcollCICollCIPtr) += Ibpci_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpci_Vbpci; *(here->HICUMcollCIBaseBPPtr) += -Ibpci_Vbpci; // Stamp element: Rcx *(here->HICUMcollCollPtr) += Icic_Vcic; *(here->HICUMcollCICollCIPtr) += Icic_Vcic; *(here->HICUMcollCICollPtr) += -Icic_Vcic; *(here->HICUMcollCollCIPtr) += -Icic_Vcic; // Stamp element: Rbx *(here->HICUMbaseBasePtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBaseBPPtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBasePtr) += -Ibbp_Vbbp; *(here->HICUMbaseBaseBPPtr) += -Ibbp_Vbbp; // Stamp element: Re *(here->HICUMemitEmitPtr) += Ieie_Veie; *(here->HICUMemitEIEmitEIPtr) += Ieie_Veie; *(here->HICUMemitEIEmitPtr) += -Ieie_Veie; *(here->HICUMemitEmitEIPtr) += -Ieie_Veie; // Stamp element: Ibpbi if (here->HICUMrbi>0.0) { *(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei; *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici; }; // Stamp element: Isici *(here->HICUMsubsSISubsSIPtr) += Isici_Vsici; *(here->HICUMcollCICollCIPtr) += Isici_Vsici; *(here->HICUMsubsSICollCIPtr) += -Isici_Vsici; *(here->HICUMcollCISubsSIPtr) += -Isici_Vsici;; // Stamp element: Ibpsi *(here->HICUMbaseBPSubsSIPtr) += Ibpsi_Vsici; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vsici; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vsici; *(here->HICUMsubsSISubsSIPtr) += -Ibpsi_Vsici; *(here->HICUMbaseBPBaseBPPtr) += Ibpsi_Vbpci; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vbpci; *(here->HICUMsubsSIBaseBPPtr) += -Ibpsi_Vbpci;; // Stamp element: Rsu *(here->HICUMsubsSubsPtr) += Isis_Vsis; *(here->HICUMsubsSISubsSIPtr) += Isis_Vsis; *(here->HICUMsubsSISubsPtr) += -Isis_Vsis; *(here->HICUMsubsSubsSIPtr) += -Isis_Vsis; if (nqs) { //Ixf1 *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei; *(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei; *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbici; *(here->HICUMxf1CollCIPtr) += -Ixf1_Vbici; *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2; *(here->HICUMxf1Xf1Ptr) += +Ixf1_Vxf1; //Ixf2 *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbiei; *(here->HICUMxf2EmitEIPtr) += -Ixf2_Vbiei; *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbici; *(here->HICUMxf2CollCIPtr) += -Ixf2_Vbici; *(here->HICUMxf2Xf2Ptr) += +Ixf2_Vxf2; *(here->HICUMxf2Xf1Ptr) += +Ixf2_Vxf1; //Ixf *(here->HICUMxfBaseBIPtr) += +Ixf_Vbiei; *(here->HICUMxfEmitEIPtr) += -Ixf_Vbiei; *(here->HICUMxfBaseBIPtr) += +Ixf_Vbici; *(here->HICUMxfCollCIPtr) += -Ixf_Vbici; *(here->HICUMxfXfPtr) += +Ixf_Vxf; } //////////////////////////////////// ////////// The complex part ////// //////////////////////////////////// //Qrbi XQrbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMcqrbi); XQrbi_Vbiei = here->HICUMqrbi_Vbiei; XQrbi_Vbici = here->HICUMqrbi_Vbici; XQrbi_Vrth = here->HICUMqrbi_Vrth; //Qjei XQjei_Vbiei = *(ckt->CKTstate0 + here->HICUMcqjei); XQjei_Vrth = here->HICUMqjei_Vrth; //Qf XQf_Vbiei = *(ckt->CKTstate0 + here->HICUMcqf); XQf_Vbici = here->HICUMqf_Vbici; XQf_Vrth = here->HICUMqf_Vrth; XQf_Vxf = here->HICUMqf_Vxf; //Qr XQr_Vbici = *(ckt->CKTstate0 + here->HICUMcqr); XQr_Vbiei = here->HICUMqr_Vbiei; XQr_Vrth = here->HICUMqr_Vrth; //Qjci XQjci_Vbici = *(ckt->CKTstate0 + here->HICUMcqjci); XQjci_Vrth = here->HICUMqjci_Vrth; //Qjep XQjep_Vbpei = *(ckt->CKTstate0 + here->HICUMcqjep); XQjep_Vrth = here->HICUMqjep_Vrth; //Qjcx_i Xqjcx0_t_i_Vbci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i); Xqjcx0_t_i_Vrth = here->HICUMqjcx0_i_Vrth; //Qjcx_ii Xqjcx0_t_ii_Vbpci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii); Xqjcx0_t_ii_Vrth = here->HICUMqjcx0_ii_Vrth; //Qdsu XQdsu_Vbpci = *(ckt->CKTstate0 + here->HICUMcqdsu); XQdsu_Vsici = here->HICUMqdsu_Vsici; XQdsu_Vrth = here->HICUMqdsu_Vrth; //Qjs XQjs_Vsici = *(ckt->CKTstate0 + here->HICUMcqjs); XQjs_Vrth = here->HICUMqjs_Vrth; //Qscp XQscp_Vsc = *(ckt->CKTstate0 + here->HICUMcqscp); XQscp_Vrth = here->HICUMqscp_Vrth; //Qbepar1 XQbepar1_Vbe = *(ckt->CKTstate0 + here->HICUMcqbepar1); //Qbepar2 XQbepar2_Vbpe = *(ckt->CKTstate0 + here->HICUMcqbepar2); //Qbcpar1 XQbcpar1_Vbci = *(ckt->CKTstate0 + here->HICUMcqbcpar1); //Qbcpar2 XQbcpar2_Vbpci = *(ckt->CKTstate0 + here->HICUMcqbcpar2); //Qsu XQsu_Vsis = *(ckt->CKTstate0 + here->HICUMcqsu); //Qcth XQcth_Vrth = *(ckt->CKTstate0 + here->HICUMcqcth); //Qxf XQxf_Vxf = *(ckt->CKTstate0 + here->HICUMcqxf); XQxf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMcqxf1); XQxf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMcqxf2); //Qrbi f_bp=+ f_bi=- if (here->HICUMrbi>0.0) { *(here->HICUMbaseBPBaseBPPtr + 1) += XQrbi_Vbpbi*(s->imag); *(here->HICUMbaseBPBaseBPPtr ) += XQrbi_Vbpbi*(s->real); *(here->HICUMbaseBIBaseBIPtr + 1) += XQrbi_Vbpbi*(s->imag); *(here->HICUMbaseBIBaseBIPtr ) += XQrbi_Vbpbi*(s->real); *(here->HICUMbaseBPBaseBIPtr + 1) += -XQrbi_Vbpbi*(s->imag); *(here->HICUMbaseBPBaseBIPtr ) += -XQrbi_Vbpbi*(s->real); *(here->HICUMbaseBIBaseBPPtr + 1) += -XQrbi_Vbpbi*(s->imag); *(here->HICUMbaseBIBaseBPPtr ) += -XQrbi_Vbpbi*(s->real); *(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbiei*(s->imag); *(here->HICUMbaseBPBaseBIPtr ) += XQrbi_Vbiei*(s->real); *(here->HICUMbaseBIEmitEIPtr + 1) += XQrbi_Vbiei*(s->imag); *(here->HICUMbaseBIEmitEIPtr ) += XQrbi_Vbiei*(s->real); *(here->HICUMbaseBPEmitEIPtr + 1) += -XQrbi_Vbiei*(s->imag); *(here->HICUMbaseBPEmitEIPtr ) += -XQrbi_Vbiei*(s->real); *(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbiei*(s->imag); *(here->HICUMbaseBIBaseBIPtr ) += -XQrbi_Vbiei*(s->real); *(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbici*(s->imag); *(here->HICUMbaseBPBaseBIPtr ) += XQrbi_Vbici*(s->real); *(here->HICUMbaseBICollCIPtr + 1) += XQrbi_Vbici*(s->imag); *(here->HICUMbaseBICollCIPtr ) += XQrbi_Vbici*(s->real); *(here->HICUMbaseBPCollCIPtr + 1) += -XQrbi_Vbici*(s->imag); *(here->HICUMbaseBPCollCIPtr ) += -XQrbi_Vbici*(s->real); *(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbici*(s->imag); *(here->HICUMbaseBIBaseBIPtr ) += -XQrbi_Vbici*(s->real); }; //Qjei *(here->HICUMbaseBIBaseBIPtr + 1) += XQjei_Vbiei*(s->imag); *(here->HICUMbaseBIBaseBIPtr ) += XQjei_Vbiei*(s->real); *(here->HICUMemitEIEmitEIPtr + 1) += XQjei_Vbiei*(s->imag); *(here->HICUMemitEIEmitEIPtr ) += XQjei_Vbiei*(s->real); *(here->HICUMbaseBIEmitEIPtr + 1) += -XQjei_Vbiei*(s->imag); *(here->HICUMbaseBIEmitEIPtr ) += -XQjei_Vbiei*(s->real); *(here->HICUMemitEIBaseBIPtr + 1) += -XQjei_Vbiei*(s->imag); *(here->HICUMemitEIBaseBIPtr ) += -XQjei_Vbiei*(s->real); //Qf f_Bi=+ f_Ei =- *(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbiei*(s->imag); *(here->HICUMbaseBIBaseBIPtr) += XQf_Vbiei*(s->real); *(here->HICUMemitEIEmitEIPtr +1) += XQf_Vbiei*(s->imag); *(here->HICUMemitEIEmitEIPtr) += XQf_Vbiei*(s->real); *(here->HICUMbaseBIEmitEIPtr +1) += -XQf_Vbiei*(s->imag); *(here->HICUMbaseBIEmitEIPtr) += -XQf_Vbiei*(s->real); *(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbiei*(s->imag); *(here->HICUMemitEIBaseBIPtr) += -XQf_Vbiei*(s->real); *(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbici*(s->imag); *(here->HICUMbaseBIBaseBIPtr) += XQf_Vbici*(s->real); *(here->HICUMemitEICollCIPtr +1) += XQf_Vbici*(s->imag); *(here->HICUMemitEICollCIPtr) += XQf_Vbici*(s->real); *(here->HICUMbaseBICollCIPtr +1) += -XQf_Vbici*(s->imag); *(here->HICUMbaseBICollCIPtr) += -XQf_Vbici*(s->real); *(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici*(s->imag); *(here->HICUMemitEIBaseBIPtr) += -XQf_Vbici*(s->real); if (nqs) { *(here->HICUMbaseBIXfPtr +1) += XQf_Vxf*(s->imag); *(here->HICUMbaseBIXfPtr ) += XQf_Vxf*(s->real); *(here->HICUMemitEIXfPtr +1) += -XQf_Vxf*(s->imag); *(here->HICUMemitEIXfPtr ) += -XQf_Vxf*(s->real); } //Qjci *(here->HICUMbaseBIBaseBIPtr +1) += XQjci_Vbici*(s->imag); *(here->HICUMbaseBIBaseBIPtr) += XQjci_Vbici*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQjci_Vbici*(s->imag); *(here->HICUMcollCICollCIPtr) += XQjci_Vbici*(s->real); *(here->HICUMcollCIBaseBIPtr +1) += -XQjci_Vbici*(s->imag); *(here->HICUMcollCIBaseBIPtr) += -XQjci_Vbici*(s->real); *(here->HICUMbaseBICollCIPtr +1) += -XQjci_Vbici*(s->imag); *(here->HICUMbaseBICollCIPtr) += -XQjci_Vbici*(s->real); //Qr f_bi = + f_ci=- *(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbici*(s->imag); *(here->HICUMbaseBIBaseBIPtr) += XQr_Vbici*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQr_Vbici*(s->imag); *(here->HICUMcollCICollCIPtr) += XQr_Vbici*(s->real); *(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbici*(s->imag); *(here->HICUMcollCIBaseBIPtr) += -XQr_Vbici*(s->real); *(here->HICUMbaseBICollCIPtr +1) += -XQr_Vbici*(s->imag); *(here->HICUMbaseBICollCIPtr) += -XQr_Vbici*(s->real); *(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbiei*(s->imag); *(here->HICUMbaseBIBaseBIPtr) += XQr_Vbiei*(s->real); *(here->HICUMcollCIEmitEIPtr +1) += XQr_Vbiei*(s->imag); *(here->HICUMcollCIEmitEIPtr) += XQr_Vbiei*(s->real); *(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbiei*(s->imag); *(here->HICUMcollCIBaseBIPtr) += -XQr_Vbiei*(s->real); *(here->HICUMbaseBIEmitEIPtr +1) += -XQr_Vbiei*(s->imag); *(here->HICUMbaseBIEmitEIPtr) += -XQr_Vbiei*(s->real); //Qjep *(here->HICUMbaseBPBaseBPPtr +1) += XQjep_Vbpei*(s->imag); *(here->HICUMbaseBPBaseBPPtr) += XQjep_Vbpei*(s->real); *(here->HICUMemitEIEmitEIPtr +1) += XQjep_Vbpei*(s->imag); *(here->HICUMemitEIEmitEIPtr) += XQjep_Vbpei*(s->real); *(here->HICUMbaseBPEmitEIPtr +1) += -XQjep_Vbpei*(s->imag); *(here->HICUMbaseBPEmitEIPtr) += -XQjep_Vbpei*(s->real); *(here->HICUMemitEIBaseBPPtr +1) += -XQjep_Vbpei*(s->imag); *(here->HICUMemitEIBaseBPPtr) += -XQjep_Vbpei*(s->real); //Qjcx_i *(here->HICUMbaseBasePtr +1) += Xqjcx0_t_i_Vbci*(s->imag); *(here->HICUMbaseBasePtr) += Xqjcx0_t_i_Vbci*(s->real); *(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_i_Vbci*(s->imag); *(here->HICUMcollCICollCIPtr) += Xqjcx0_t_i_Vbci*(s->real); *(here->HICUMbaseCollCIPtr +1) += -Xqjcx0_t_i_Vbci*(s->imag); *(here->HICUMbaseCollCIPtr) += -Xqjcx0_t_i_Vbci*(s->real); *(here->HICUMcollCIBasePtr +1) += -Xqjcx0_t_i_Vbci*(s->imag); *(here->HICUMcollCIBasePtr) += -Xqjcx0_t_i_Vbci*(s->real); //Qjcx_ii *(here->HICUMbaseBPBaseBPPtr +1) += Xqjcx0_t_ii_Vbpci*(s->imag); *(here->HICUMbaseBPBaseBPPtr) += Xqjcx0_t_ii_Vbpci*(s->real); *(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_ii_Vbpci*(s->imag); *(here->HICUMcollCICollCIPtr) += Xqjcx0_t_ii_Vbpci*(s->real); *(here->HICUMbaseBPCollCIPtr +1) += -Xqjcx0_t_ii_Vbpci*(s->imag); *(here->HICUMbaseBPCollCIPtr) += -Xqjcx0_t_ii_Vbpci*(s->real); *(here->HICUMcollCIBaseBPPtr +1) += -Xqjcx0_t_ii_Vbpci*(s->imag); *(here->HICUMcollCIBaseBPPtr) += -Xqjcx0_t_ii_Vbpci*(s->real); //Qdsu f_bp=+ f_ci=- *(here->HICUMbaseBPBaseBPPtr +1) += XQdsu_Vbpci*(s->imag); *(here->HICUMbaseBPBaseBPPtr) += XQdsu_Vbpci*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQdsu_Vbpci*(s->imag); *(here->HICUMcollCICollCIPtr) += XQdsu_Vbpci*(s->real); *(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vbpci*(s->imag); *(here->HICUMbaseBPCollCIPtr) += -XQdsu_Vbpci*(s->real); *(here->HICUMcollCIBaseBPPtr +1) += -XQdsu_Vbpci*(s->imag); *(here->HICUMcollCIBaseBPPtr) += -XQdsu_Vbpci*(s->real); *(here->HICUMbaseBPSubsSIPtr +1) += XQdsu_Vsici*(s->imag); *(here->HICUMbaseBPSubsSIPtr) += XQdsu_Vsici*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQdsu_Vsici*(s->imag); *(here->HICUMcollCICollCIPtr) += XQdsu_Vsici*(s->real); *(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vsici*(s->imag); *(here->HICUMbaseBPCollCIPtr) += -XQdsu_Vsici*(s->real); *(here->HICUMcollCISubsSIPtr +1) += -XQdsu_Vsici*(s->imag); *(here->HICUMcollCISubsSIPtr) += -XQdsu_Vsici*(s->real); //Qjs *(here->HICUMsubsSISubsSIPtr +1) += XQjs_Vsici*(s->imag); *(here->HICUMsubsSISubsSIPtr) += XQjs_Vsici*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQjs_Vsici*(s->imag); *(here->HICUMcollCICollCIPtr) += XQjs_Vsici*(s->real); *(here->HICUMsubsSICollCIPtr +1) += -XQjs_Vsici*(s->imag); *(here->HICUMsubsSICollCIPtr) += -XQjs_Vsici*(s->real); *(here->HICUMcollCISubsSIPtr +1) += -XQjs_Vsici*(s->imag); *(here->HICUMcollCISubsSIPtr) += -XQjs_Vsici*(s->real); //Qscp *(here->HICUMsubsSubsPtr + 1) += XQscp_Vsc*(s->imag); *(here->HICUMsubsSubsPtr ) += XQscp_Vsc*(s->real); *(here->HICUMcollCollPtr + 1) += XQscp_Vsc*(s->imag); *(here->HICUMcollCollPtr ) += XQscp_Vsc*(s->real); *(here->HICUMcollSubsPtr + 1) += -XQscp_Vsc*(s->imag); *(here->HICUMcollSubsPtr ) += -XQscp_Vsc*(s->real); *(here->HICUMsubsCollPtr + 1) += -XQscp_Vsc*(s->imag); *(here->HICUMsubsCollPtr ) += -XQscp_Vsc*(s->real); //Qbepar1 *(here->HICUMbaseBasePtr + 1) += XQbepar1_Vbe*(s->imag); *(here->HICUMbaseBasePtr ) += XQbepar1_Vbe*(s->real); *(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe*(s->imag); *(here->HICUMemitEmitPtr ) += XQbepar1_Vbe*(s->real); *(here->HICUMbaseEmitPtr + 1) += -XQbepar1_Vbe*(s->imag); *(here->HICUMbaseEmitPtr ) += -XQbepar1_Vbe*(s->real); *(here->HICUMemitBasePtr + 1) += -XQbepar1_Vbe*(s->imag); *(here->HICUMemitBasePtr ) += -XQbepar1_Vbe*(s->real); //Qbepar2 *(here->HICUMbaseBPBaseBPPtr + 1) += XQbepar2_Vbpe*(s->imag); *(here->HICUMbaseBPBaseBPPtr ) += XQbepar2_Vbpe*(s->real); *(here->HICUMemitEmitPtr + 1) += XQbepar2_Vbpe*(s->imag); *(here->HICUMemitEmitPtr ) += XQbepar2_Vbpe*(s->real); *(here->HICUMemitBaseBPPtr + 1) += -XQbepar2_Vbpe*(s->imag); *(here->HICUMemitBaseBPPtr ) += -XQbepar2_Vbpe*(s->real); *(here->HICUMbaseBPEmitPtr + 1) += -XQbepar2_Vbpe*(s->imag); *(here->HICUMbaseBPEmitPtr ) += -XQbepar2_Vbpe*(s->real); //Qbcpar1 *(here->HICUMbaseBasePtr + 1) += XQbcpar1_Vbci*(s->imag); *(here->HICUMbaseBasePtr ) += XQbcpar1_Vbci*(s->real); *(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci*(s->imag); *(here->HICUMcollCICollCIPtr ) += XQbcpar1_Vbci*(s->real); *(here->HICUMbaseCollCIPtr + 1) += -XQbcpar1_Vbci*(s->imag); *(here->HICUMbaseCollCIPtr ) += -XQbcpar1_Vbci*(s->real); *(here->HICUMcollCIBasePtr + 1) += -XQbcpar1_Vbci*(s->imag); *(here->HICUMcollCIBasePtr ) += -XQbcpar1_Vbci*(s->real); //Qbcpar2 *(here->HICUMbaseBPBaseBPPtr +1) += XQbcpar2_Vbpci*(s->imag); *(here->HICUMbaseBPBaseBPPtr) += XQbcpar2_Vbpci*(s->real); *(here->HICUMcollCICollCIPtr +1) += XQbcpar2_Vbpci*(s->imag); *(here->HICUMcollCICollCIPtr) += XQbcpar2_Vbpci*(s->real); *(here->HICUMbaseBPCollCIPtr +1) += -XQbcpar2_Vbpci*(s->imag); *(here->HICUMbaseBPCollCIPtr) += -XQbcpar2_Vbpci*(s->real); *(here->HICUMcollCIBaseBPPtr +1) += -XQbcpar2_Vbpci*(s->imag); *(here->HICUMcollCIBaseBPPtr) += -XQbcpar2_Vbpci*(s->real); //Qsu *(here->HICUMsubsSubsPtr + 1) += XQsu_Vsis*(s->imag); *(here->HICUMsubsSubsPtr ) += XQsu_Vsis*(s->real); *(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis*(s->imag); *(here->HICUMsubsSISubsSIPtr ) += XQsu_Vsis*(s->real); *(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis*(s->imag); *(here->HICUMsubsSISubsPtr ) += -XQsu_Vsis*(s->real); *(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis*(s->imag); *(here->HICUMsubsSubsSIPtr ) += -XQsu_Vsis*(s->real); if (nqs) { //Qxf1 *(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1*(s->imag); *(here->HICUMxf1Xf1Ptr) += +XQxf1_Vxf1*(s->real); //Qxf2 *(here->HICUMxf2Xf2Ptr + 1) += +XQxf2_Vxf2*(s->imag); *(here->HICUMxf2Xf2Ptr ) += +XQxf2_Vxf2*(s->real); //Qxf *(here->HICUMxfXfPtr + 1) += +XQxf_Vxf*(s->imag); *(here->HICUMxfXfPtr ) += +XQxf_Vxf*(s->real); } // Stamps with SH if (selfheat) { // Stamp element: Ibiei f_Bi = + f_Ei = - *(here->HICUMbaseBItempPtr) += Ibiei_Vrth; *(here->HICUMemitEItempPtr) += -Ibiei_Vrth; // Stamp element: Ibpei f_Bp = + f_Ei = - // with respect to Potential Vrth *(here->HICUMbaseBPtempPtr) += Ibpei_Vrth; *(here->HICUMemitEItempPtr) += -Ibpei_Vrth; // Stamp element: Ibici f_Bi = + f_Ci = - *(here->HICUMbaseBItempPtr) += Ibici_Vrth; *(here->HICUMcollCItempPtr) += -Ibici_Vrth; // Stamp element: Iciei f_Ci = + f_Ei = - *(here->HICUMcollCItempPtr) += Iciei_Vrth; *(here->HICUMemitEItempPtr) += -Iciei_Vrth; // Stamp element: Ibpci f_Bp = + f_Ci = - *(here->HICUMbaseBPtempPtr) += Ibpci_Vrth; *(here->HICUMcollCItempPtr) += -Ibpci_Vrth; // Stamp element: Rcx f_Ci = + f_C = - *(here->HICUMcollCItempPtr) += Icic_Vrth; *(here->HICUMcollTempPtr) += -Icic_Vrth; // Stamp element: Rbx f_B = + f_Bp = - *(here->HICUMbaseTempPtr) += Ibbp_Vrth; *(here->HICUMbaseBPtempPtr) += -Ibbp_Vrth; // Stamp element: Re f_Ei = + f_E = - *(here->HICUMemitEItempPtr) += Ieie_Vrth; *(here->HICUMemitTempPtr) += -Ieie_Vrth; if (here->HICUMrbi>0.0) { // Stamp element: Rbi f_Bp = + f_Bi = - *(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth; *(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth; }; // Stamp element: Isici f_Si = + f_Ci = - *(here->HICUMsubsSItempPtr) += Isici_Vrth; *(here->HICUMcollCItempPtr) += -Isici_Vrth; // Branch: bpsi, Stamp element: Its *(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth; *(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth; if (nqs) { // Stamp element: Ixf f_xf = + *(here->HICUMxfTempPtr) += Ixf_Vrth; // Stamp element: Ixf1 f_xf1 = + *(here->HICUMxf1TempPtr) += Ixf1_Vrth; // Stamp element: Ixf2 f_xf2 = + *(here->HICUMxf2TempPtr) += Ixf2_Vrth; } // Stamp element: Rth f_T = + *(here->HICUMtempTempPtr) += Irth_Vrth; // Stamp element: Ith f_T = - Ith // with respect to Potential Vrth *(here->HICUMtempTempPtr) += -Ith_Vrth; // with respect to Potential Vbiei *(here->HICUMtempBaseBIPtr) += -Ith_Vbiei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbiei; // with respect to Potential Vbici *(here->HICUMtempBaseBIPtr) += -Ith_Vbici; *(here->HICUMtempCollCIPtr) += +Ith_Vbici; // with respect to Potential Vciei *(here->HICUMtempCollCIPtr) += -Ith_Vciei; *(here->HICUMtempEmitEIPtr) += +Ith_Vciei; // with respect to Potential Vbpei *(here->HICUMtempBaseBPPtr) += -Ith_Vbpei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbpei; // with respect to Potential Vbpci *(here->HICUMtempBaseBPPtr) += -Ith_Vbpci; *(here->HICUMtempCollCIPtr) += +Ith_Vbpci; // with respect to Potential Vsici *(here->HICUMtempSubsSIPtr) += -Ith_Vsici; *(here->HICUMtempCollCIPtr) += +Ith_Vsici; // with respect to Potential Vbpbi *(here->HICUMtempBaseBPPtr) += -Ith_Vbpbi; *(here->HICUMtempBaseBIPtr) += +Ith_Vbpbi; // with respect to Potential Vcic *(here->HICUMtempCollCIPtr) += -Ith_Vcic; *(here->HICUMtempCollPtr) += +Ith_Vcic; // with respect to Potential Vbbp *(here->HICUMtempBasePtr) += -Ith_Vbbp; *(here->HICUMtempBaseBPPtr) += +Ith_Vbbp; // with respect to Potential Veie *(here->HICUMtempEmitEIPtr) += -Ith_Veie; *(here->HICUMtempEmitPtr) += +Ith_Veie; //the charges *(here->HICUMbaseBItempPtr + 1) += +XQrbi_Vrth*(s->imag); *(here->HICUMbaseBItempPtr ) += +XQrbi_Vrth*(s->real); *(here->HICUMbaseBPtempPtr + 1) += -XQrbi_Vrth*(s->imag); *(here->HICUMbaseBPtempPtr ) += -XQrbi_Vrth*(s->real); *(here->HICUMbaseBItempPtr + 1) += +XQjei_Vrth*(s->imag); *(here->HICUMbaseBItempPtr ) += +XQjei_Vrth*(s->real); *(here->HICUMemitEItempPtr + 1) += -XQjei_Vrth*(s->imag); *(here->HICUMemitEItempPtr ) += -XQjei_Vrth*(s->real); *(here->HICUMbaseBItempPtr + 1) += +XQf_Vrth*(s->imag); *(here->HICUMbaseBItempPtr ) += +XQf_Vrth*(s->real); *(here->HICUMemitEItempPtr + 1) += -XQf_Vrth*(s->imag); *(here->HICUMemitEItempPtr ) += -XQf_Vrth*(s->real); *(here->HICUMbaseBItempPtr + 1) += +XQr_Vrth*(s->imag); *(here->HICUMbaseBItempPtr ) += +XQr_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -XQr_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -XQr_Vrth*(s->real); *(here->HICUMbaseBItempPtr + 1) += +XQjci_Vrth*(s->imag); *(here->HICUMbaseBItempPtr ) += +XQjci_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -XQjci_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -XQjci_Vrth*(s->real); *(here->HICUMbaseBPtempPtr + 1) += +XQjep_Vrth*(s->imag); *(here->HICUMbaseBPtempPtr ) += +XQjep_Vrth*(s->real); *(here->HICUMemitEItempPtr + 1) += -XQjep_Vrth*(s->imag); *(here->HICUMemitEItempPtr ) += -XQjep_Vrth*(s->real); *(here->HICUMbaseTempPtr + 1) += +Xqjcx0_t_i_Vrth*(s->imag); *(here->HICUMbaseTempPtr ) += +Xqjcx0_t_i_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_i_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -Xqjcx0_t_i_Vrth*(s->real); *(here->HICUMbaseBPtempPtr + 1) += +Xqjcx0_t_ii_Vrth*(s->imag); *(here->HICUMbaseBPtempPtr ) += +Xqjcx0_t_ii_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_ii_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -Xqjcx0_t_ii_Vrth*(s->real); *(here->HICUMbaseBPtempPtr + 1) += +XQdsu_Vrth*(s->imag); *(here->HICUMbaseBPtempPtr ) += +XQdsu_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -XQdsu_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -XQdsu_Vrth*(s->real); *(here->HICUMsubsSItempPtr + 1) += +XQjs_Vrth*(s->imag); *(here->HICUMsubsSItempPtr ) += +XQjs_Vrth*(s->real); *(here->HICUMcollCItempPtr + 1) += -XQjs_Vrth*(s->imag); *(here->HICUMcollCItempPtr ) += -XQjs_Vrth*(s->real); *(here->HICUMsubsTempPtr + 1) += +XQscp_Vrth*(s->imag); *(here->HICUMsubsTempPtr ) += +XQscp_Vrth*(s->real); *(here->HICUMcollTempPtr + 1) += -XQscp_Vrth*(s->imag); *(here->HICUMcollTempPtr ) += -XQscp_Vrth*(s->real); *(here->HICUMtempTempPtr + 1) += +XQcth_Vrth*(s->imag); *(here->HICUMtempTempPtr ) += +XQcth_Vrth*(s->real); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2acld.c0000644000175000017500000007651014163340332022533 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * 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 "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) { HICUMinstance *here; HICUMmodel *model = (HICUMmodel*)inModel; double Ibpei_Vbpei; double Ibpei_Vrth; double Ibiei_Vbiei; double Ibiei_Vxf; double Ibiei_Vbici; double Ibiei_Vrth; double Ibici_Vbici; double Ibici_Vbiei; double Ibici_Vrth; double Ibpci_Vbpci; double Ibpci_Vrth; double Isici_Vsici; double Isici_Vrth; double Iciei_Vbiei; double Iciei_Vbici; double Iciei_Vrth; double Iciei_Vxf2; double Ibpbi_Vbpbi; double Ibpbi_Vbici; double Ibpbi_Vbiei; double Ibpbi_Vrth; double Isis_Vsis; double Irth_Vrth; double Icic_Vcic, Icic_Vrth; double Ieie_Veie, Ieie_Vrth; double Ibbp_Vbbp, Ibbp_Vrth; double Ibpsi_Vbpci; double Ibpsi_Vsici; double Ibpsi_Vrth; double XQrbi_Vbpbi; double XQrbi_Vbiei; double XQrbi_Vbici; double XQrbi_Vrth; double XQjei_Vbiei; double XQjei_Vrth; double XQjci_Vbici; double XQjci_Vrth; double XQjep_Vbpei; double XQjep_Vrth; double volatile Xqjcx0_t_i_Vbci; double Xqjcx0_t_i_Vrth; double volatile Xqjcx0_t_ii_Vbpci; double Xqjcx0_t_ii_Vrth; double XQdsu_Vbpci; double XQdsu_Vsici; double XQdsu_Vrth; double XQjs_Vsici; double XQjs_Vrth; double XQscp_Vsc; double XQscp_Vrth; double XQbepar1_Vbe; double XQbepar2_Vbpe; double XQbcpar1_Vbci; double XQbcpar2_Vbpci; double XQsu_Vsis; double XQcth_Vrth; double XQf_Vbiei; double XQf_Vbici; double XQf_Vrth; double XQf_Vxf; double XQr_Vrth; double XQr_Vbiei; double XQr_Vbici; double XQxf_Vxf; double XQxf1_Vxf1; double XQxf2_Vxf2; double Ixf1_Vbiei; double Ixf1_Vbici; double Ixf1_Vxf2 ; double Ixf1_Vxf1 ; double Ixf1_Vrth ; double Ixf2_Vbiei; double Ixf2_Vbici; double Ixf2_Vxf2 ; double Ixf2_Vxf1 ; double Ixf2_Vrth ; double Ixf_Vbiei ; double Ixf_Vbici ; double Ixf_Vxf ; double Ixf_Vrth ; double Ith_Vrth, Ith_Vbiei, Ith_Vbici, Ith_Vbpbi, Ith_Vbpci, Ith_Vbpei, Ith_Vciei, Ith_Vsici, Ith_Vcic, Ith_Vbbp, Ith_Veie; /* loop through all the models */ for( ; model != NULL; model = HICUMnextModel(model)) { int selfheat = ( (model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0)); int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0)); /* loop through all the instances of the model */ for( here = HICUMinstances(model); here!= NULL; here = HICUMnextInstance(here)) { // get all derivatives of branch DC currents if(model->HICUMrcxGiven && model->HICUMrcx != 0) { Icic_Vcic = 1/here->HICUMrcx_t.rpart; Icic_Vrth = -*(ckt->CKTstate0 + here->HICUMvcic)/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart*here->HICUMrcx_t.dpart; } else { Icic_Vcic = 0.0; Icic_Vrth = 0.0; } if(model->HICUMrbxGiven && model->HICUMrbx != 0) { Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; Ibbp_Vrth = -*(ckt->CKTstate0 + here->HICUMvbbp)/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart*here->HICUMrbx_t.dpart; } else { Ibbp_Vbbp = 0.0; Ibbp_Vrth = 0.0; } if(model->HICUMreGiven && model->HICUMre != 0) { Ieie_Veie = 1/here->HICUMre_t.rpart; Ieie_Vrth = -*(ckt->CKTstate0 + here->HICUMveie)/here->HICUMre_t.rpart/here->HICUMre_t.rpart*here->HICUMre_t.dpart; } else { Ieie_Veie = 0.0; Ieie_Vrth = 0.0; } if(model->HICUMrsuGiven && model->HICUMrsu != 0) { Isis_Vsis = 1/model->HICUMrsu*here->HICUMm; } else { Isis_Vsis = 0.0; } if(selfheat) { Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart); } else { Irth_Vrth = 0.0; } Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vxf = *(ckt->CKTstate0 + here->HICUMibiei_Vxf); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); Ibiei_Vrth = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); Ibpei_Vbpei = *(ckt->CKTstate0 + here->HICUMibpei_Vbpei); Ibpei_Vrth = *(ckt->CKTstate0 + here->HICUMibpei_Vrth); Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth); Iciei_Vxf2 = *(ckt->CKTstate0 + here->HICUMiciei_Vxf2); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibici_Vrth = *(ckt->CKTstate0 + here->HICUMibici_Vrth); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vbici = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); Isici_Vrth = *(ckt->CKTstate0 + here->HICUMisici_Vrth); Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici); Ibpsi_Vrth = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth); Ith_Vrth = *(ckt->CKTstate0 + here->HICUMith_Vrth); Ith_Vbiei = *(ckt->CKTstate0 + here->HICUMith_Vbiei); Ith_Vbici = *(ckt->CKTstate0 + here->HICUMith_Vbici); Ith_Vbpbi = *(ckt->CKTstate0 + here->HICUMith_Vbpbi); Ith_Vbpci = *(ckt->CKTstate0 + here->HICUMith_Vbpci); Ith_Vbpei = *(ckt->CKTstate0 + here->HICUMith_Vbpei); Ith_Vciei = *(ckt->CKTstate0 + here->HICUMith_Vciei); Ith_Vsici = *(ckt->CKTstate0 + here->HICUMith_Vsici); Ith_Vcic = *(ckt->CKTstate0 + here->HICUMith_Vcic); Ith_Vbbp = *(ckt->CKTstate0 + here->HICUMith_Vbbp); Ith_Veie = *(ckt->CKTstate0 + here->HICUMith_Veie); Ixf1_Vbiei = *(ckt->CKTstate0 + here->HICUMixf1_Vbiei); Ixf1_Vbici = *(ckt->CKTstate0 + here->HICUMixf1_Vbici); Ixf1_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf2); Ixf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf1); Ixf1_Vrth = *(ckt->CKTstate0 + here->HICUMixf1_Vrth); Ixf2_Vbiei = *(ckt->CKTstate0 + here->HICUMixf2_Vbiei); Ixf2_Vbici = *(ckt->CKTstate0 + here->HICUMixf2_Vbici); Ixf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf2); Ixf2_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf1); Ixf2_Vrth = *(ckt->CKTstate0 + here->HICUMixf2_Vrth); Ixf_Vbiei = *(ckt->CKTstate0 + here->HICUMixf_Vbiei); Ixf_Vbici = *(ckt->CKTstate0 + here->HICUMixf_Vbici); Ixf_Vxf = *(ckt->CKTstate0 + here->HICUMixf_Vxf); Ixf_Vrth = *(ckt->CKTstate0 + here->HICUMixf_Vrth); //////////////////////////////////// ////////// The real part ///////// //////////////////////////////////// // Stamp element: Ibiei *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Ibiei_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibiei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbiei; *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbici; *(here->HICUMemitEICollCIPtr) += Ibiei_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici; if (nqs) { *(here->HICUMbaseBIXfPtr) += Ibiei_Vxf; *(here->HICUMemitEIXfPtr) += -Ibiei_Vxf; } // Stamp element: Ibpei *(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei; *(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei; *(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei;; // Stamp element: Ibici *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; *(here->HICUMcollCICollCIPtr) += Ibici_Vbici; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbiei; *(here->HICUMcollCIEmitEIPtr) += Ibici_Vbiei; *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += -Ibici_Vbiei; // Stamp element: Iciei *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbiei; *(here->HICUMemitEIEmitEIPtr) += Iciei_Vbiei; *(here->HICUMcollCIEmitEIPtr) += -Iciei_Vbiei; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbiei; *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbici; *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; *(here->HICUMcollCICollCIPtr) += -Iciei_Vbici; *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; if (nqs) { *(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2; *(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2; } // Stamp element: Ibpci *(here->HICUMbaseBPBaseBPPtr) += Ibpci_Vbpci; *(here->HICUMcollCICollCIPtr) += Ibpci_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpci_Vbpci; *(here->HICUMcollCIBaseBPPtr) += -Ibpci_Vbpci; // Stamp element: Rcx *(here->HICUMcollCollPtr) += Icic_Vcic; *(here->HICUMcollCICollCIPtr) += Icic_Vcic; *(here->HICUMcollCICollPtr) += -Icic_Vcic; *(here->HICUMcollCollCIPtr) += -Icic_Vcic; // Stamp element: Rbx *(here->HICUMbaseBasePtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBaseBPPtr) += Ibbp_Vbbp; *(here->HICUMbaseBPBasePtr) += -Ibbp_Vbbp; *(here->HICUMbaseBaseBPPtr) += -Ibbp_Vbbp; // Stamp element: Re *(here->HICUMemitEmitPtr) += Ieie_Veie; *(here->HICUMemitEIEmitEIPtr) += Ieie_Veie; *(here->HICUMemitEIEmitPtr) += -Ieie_Veie; *(here->HICUMemitEmitEIPtr) += -Ieie_Veie; // Stamp element: Ibpbi if (here->HICUMrbi>0.0) { *(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi; *(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei; *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei; *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici; *(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici; *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici; }; // Stamp element: Isici *(here->HICUMsubsSISubsSIPtr) += Isici_Vsici; *(here->HICUMcollCICollCIPtr) += Isici_Vsici; *(here->HICUMsubsSICollCIPtr) += -Isici_Vsici; *(here->HICUMcollCISubsSIPtr) += -Isici_Vsici;; // Stamp element: Ibpsi *(here->HICUMbaseBPSubsSIPtr) += Ibpsi_Vsici; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vsici; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vsici; *(here->HICUMsubsSISubsSIPtr) += -Ibpsi_Vsici; *(here->HICUMbaseBPBaseBPPtr) += Ibpsi_Vbpci; *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vbpci; *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vbpci; *(here->HICUMsubsSIBaseBPPtr) += -Ibpsi_Vbpci;; // Stamp element: Rsu *(here->HICUMsubsSubsPtr) += Isis_Vsis; *(here->HICUMsubsSISubsSIPtr) += Isis_Vsis; *(here->HICUMsubsSISubsPtr) += -Isis_Vsis; *(here->HICUMsubsSubsSIPtr) += -Isis_Vsis; if (nqs) { //Ixf1 *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei; *(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei; *(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbici; *(here->HICUMxf1CollCIPtr) += -Ixf1_Vbici; *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2; *(here->HICUMxf1Xf1Ptr) += +Ixf1_Vxf1; //Ixf2 *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbiei; *(here->HICUMxf2EmitEIPtr) += -Ixf2_Vbiei; *(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbici; *(here->HICUMxf2CollCIPtr) += -Ixf2_Vbici; *(here->HICUMxf2Xf2Ptr) += +Ixf2_Vxf2; *(here->HICUMxf2Xf1Ptr) += +Ixf2_Vxf1; //Ixf *(here->HICUMxfBaseBIPtr) += +Ixf_Vbiei; *(here->HICUMxfEmitEIPtr) += -Ixf_Vbiei; *(here->HICUMxfBaseBIPtr) += +Ixf_Vbici; *(here->HICUMxfCollCIPtr) += -Ixf_Vbici; *(here->HICUMxfXfPtr) += +Ixf_Vxf; } //////////////////////////////////// ////////// The complex part ////// //////////////////////////////////// //Qrbi XQrbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMcqrbi) * ckt->CKTomega; XQrbi_Vbiei = here->HICUMqrbi_Vbiei * ckt->CKTomega; XQrbi_Vbici = here->HICUMqrbi_Vbici * ckt->CKTomega; XQrbi_Vrth = here->HICUMqrbi_Vrth * ckt->CKTomega; //Qjei XQjei_Vbiei = *(ckt->CKTstate0 + here->HICUMcqjei) * ckt->CKTomega; XQjei_Vrth = here->HICUMqjei_Vrth * ckt->CKTomega; //Qf XQf_Vbiei = *(ckt->CKTstate0 + here->HICUMcqf) * ckt->CKTomega; XQf_Vbici = here->HICUMqf_Vbici * ckt->CKTomega; XQf_Vrth = here->HICUMqf_Vrth * ckt->CKTomega; XQf_Vxf = here->HICUMqf_Vxf * ckt->CKTomega; //Qr XQr_Vbici = *(ckt->CKTstate0 + here->HICUMcqr) * ckt->CKTomega; XQr_Vbiei = here->HICUMqr_Vbiei * ckt->CKTomega; XQr_Vrth = here->HICUMqr_Vrth * ckt->CKTomega; //Qjci XQjci_Vbici = *(ckt->CKTstate0 + here->HICUMcqjci) * ckt->CKTomega; XQjci_Vrth = here->HICUMqjci_Vrth * ckt->CKTomega; //Qjep XQjep_Vbpei = *(ckt->CKTstate0 + here->HICUMcqjep) * ckt->CKTomega; XQjep_Vrth = here->HICUMqjep_Vrth * ckt->CKTomega; //Qjcx_i Xqjcx0_t_i_Vbci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) * ckt->CKTomega; Xqjcx0_t_i_Vrth = here->HICUMqjcx0_i_Vrth * ckt->CKTomega; //Qjcx_ii Xqjcx0_t_ii_Vbpci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) * ckt->CKTomega; Xqjcx0_t_ii_Vrth = here->HICUMqjcx0_ii_Vrth * ckt->CKTomega; //Qdsu XQdsu_Vbpci = *(ckt->CKTstate0 + here->HICUMcqdsu) * ckt->CKTomega; XQdsu_Vsici = here->HICUMqdsu_Vsici * ckt->CKTomega; XQdsu_Vrth = here->HICUMqdsu_Vrth * ckt->CKTomega; //Qjs XQjs_Vsici = *(ckt->CKTstate0 + here->HICUMcqjs) * ckt->CKTomega; XQjs_Vrth = here->HICUMqjs_Vrth * ckt->CKTomega; //Qscp XQscp_Vsc = *(ckt->CKTstate0 + here->HICUMcqscp) * ckt->CKTomega; XQscp_Vrth = here->HICUMqscp_Vrth * ckt->CKTomega; //Qbepar1 XQbepar1_Vbe = *(ckt->CKTstate0 + here->HICUMcqbepar1) * ckt->CKTomega; //Qbepar2 XQbepar2_Vbpe = *(ckt->CKTstate0 + here->HICUMcqbepar2) * ckt->CKTomega; //Qbcpar1 XQbcpar1_Vbci = *(ckt->CKTstate0 + here->HICUMcqbcpar1) * ckt->CKTomega; //Qbcpar2 XQbcpar2_Vbpci = *(ckt->CKTstate0 + here->HICUMcqbcpar2) * ckt->CKTomega; //Qsu XQsu_Vsis = *(ckt->CKTstate0 + here->HICUMcqsu) * ckt->CKTomega; //Qcth XQcth_Vrth = *(ckt->CKTstate0 + here->HICUMcqcth) * ckt->CKTomega; //Qxf XQxf_Vxf = *(ckt->CKTstate0 + here->HICUMcqxf) * ckt->CKTomega; XQxf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMcqxf1) * ckt->CKTomega; XQxf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMcqxf2) * ckt->CKTomega; //Qrbi f_bp=+ f_bi=- if (here->HICUMrbi>0.0) { *(here->HICUMbaseBPBaseBPPtr + 1) += XQrbi_Vbpbi; *(here->HICUMbaseBIBaseBIPtr + 1) += XQrbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr + 1) += -XQrbi_Vbpbi; *(here->HICUMbaseBIBaseBPPtr + 1) += -XQrbi_Vbpbi; *(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbiei; *(here->HICUMbaseBIEmitEIPtr + 1) += XQrbi_Vbiei; *(here->HICUMbaseBPEmitEIPtr + 1) += -XQrbi_Vbiei; *(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbiei; *(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbici; *(here->HICUMbaseBICollCIPtr + 1) += XQrbi_Vbici; *(here->HICUMbaseBPCollCIPtr + 1) += -XQrbi_Vbici; *(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbici; } //Qjei *(here->HICUMbaseBIBaseBIPtr + 1) += XQjei_Vbiei; *(here->HICUMemitEIEmitEIPtr + 1) += XQjei_Vbiei; *(here->HICUMbaseBIEmitEIPtr + 1) += -XQjei_Vbiei; *(here->HICUMemitEIBaseBIPtr + 1) += -XQjei_Vbiei; //Qf f_Bi=+ f_Ei =- *(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbiei; *(here->HICUMemitEIEmitEIPtr +1) += XQf_Vbiei; *(here->HICUMbaseBIEmitEIPtr +1) += -XQf_Vbiei; *(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbiei; *(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbici; *(here->HICUMemitEICollCIPtr +1) += XQf_Vbici; *(here->HICUMbaseBICollCIPtr +1) += -XQf_Vbici; *(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici; if (nqs) { *(here->HICUMbaseBIXfPtr +1) += XQf_Vxf; *(here->HICUMemitEIXfPtr +1) += -XQf_Vxf; } //Qjci *(here->HICUMbaseBIBaseBIPtr +1) += XQjci_Vbici; *(here->HICUMcollCICollCIPtr +1) += XQjci_Vbici; *(here->HICUMcollCIBaseBIPtr +1) += -XQjci_Vbici; *(here->HICUMbaseBICollCIPtr +1) += -XQjci_Vbici; //Qr f_bi = + f_ci=- *(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbici; *(here->HICUMcollCICollCIPtr +1) += XQr_Vbici; *(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbici; *(here->HICUMbaseBICollCIPtr +1) += -XQr_Vbici; *(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbiei; *(here->HICUMcollCIEmitEIPtr +1) += XQr_Vbiei; *(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbiei; *(here->HICUMbaseBIEmitEIPtr +1) += -XQr_Vbiei; //Qjep *(here->HICUMbaseBPBaseBPPtr +1) += XQjep_Vbpei; *(here->HICUMemitEIEmitEIPtr +1) += XQjep_Vbpei; *(here->HICUMbaseBPEmitEIPtr +1) += -XQjep_Vbpei; *(here->HICUMemitEIBaseBPPtr +1) += -XQjep_Vbpei; //Qjcx_i *(here->HICUMbaseBasePtr +1) += Xqjcx0_t_i_Vbci; *(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_i_Vbci; *(here->HICUMbaseCollCIPtr +1) += -Xqjcx0_t_i_Vbci; *(here->HICUMcollCIBasePtr +1) += -Xqjcx0_t_i_Vbci; //Qjcx_ii *(here->HICUMbaseBPBaseBPPtr +1) += Xqjcx0_t_ii_Vbpci; *(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_ii_Vbpci; *(here->HICUMbaseBPCollCIPtr +1) += -Xqjcx0_t_ii_Vbpci; *(here->HICUMcollCIBaseBPPtr +1) += -Xqjcx0_t_ii_Vbpci; //Qdsu f_bp=+ f_ci=- *(here->HICUMbaseBPBaseBPPtr +1) += XQdsu_Vbpci; *(here->HICUMcollCICollCIPtr +1) += XQdsu_Vbpci; *(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vbpci; *(here->HICUMcollCIBaseBPPtr +1) += -XQdsu_Vbpci; *(here->HICUMbaseBPSubsSIPtr +1) += XQdsu_Vsici; *(here->HICUMcollCICollCIPtr +1) += XQdsu_Vsici; *(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vsici; *(here->HICUMcollCISubsSIPtr +1) += -XQdsu_Vsici; //Qjs *(here->HICUMsubsSISubsSIPtr +1) += XQjs_Vsici; *(here->HICUMcollCICollCIPtr +1) += XQjs_Vsici; *(here->HICUMsubsSICollCIPtr +1) += -XQjs_Vsici; *(here->HICUMcollCISubsSIPtr +1) += -XQjs_Vsici; //Qscp *(here->HICUMsubsSubsPtr + 1) += XQscp_Vsc; *(here->HICUMcollCollPtr + 1) += XQscp_Vsc; *(here->HICUMcollSubsPtr + 1) += -XQscp_Vsc; *(here->HICUMsubsCollPtr + 1) += -XQscp_Vsc; //Qbepar1 *(here->HICUMbaseBasePtr + 1) += XQbepar1_Vbe; *(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe; *(here->HICUMbaseEmitPtr + 1) += -XQbepar1_Vbe; *(here->HICUMemitBasePtr + 1) += -XQbepar1_Vbe; //Qbepar2 *(here->HICUMbaseBPBaseBPPtr + 1) += XQbepar2_Vbpe; *(here->HICUMemitEmitPtr + 1) += XQbepar2_Vbpe; *(here->HICUMemitBaseBPPtr + 1) += -XQbepar2_Vbpe; *(here->HICUMbaseBPEmitPtr + 1) += -XQbepar2_Vbpe; //Qbcpar1 *(here->HICUMbaseBasePtr + 1) += XQbcpar1_Vbci; *(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci; *(here->HICUMbaseCollCIPtr + 1) += -XQbcpar1_Vbci; *(here->HICUMcollCIBasePtr + 1) += -XQbcpar1_Vbci; //Qbcpar2 *(here->HICUMbaseBPBaseBPPtr +1) += XQbcpar2_Vbpci; *(here->HICUMcollCICollCIPtr +1) += XQbcpar2_Vbpci; *(here->HICUMbaseBPCollCIPtr +1) += -XQbcpar2_Vbpci; *(here->HICUMcollCIBaseBPPtr +1) += -XQbcpar2_Vbpci; //Qsu *(here->HICUMsubsSubsPtr + 1) += XQsu_Vsis; *(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis; *(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis; *(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis; if (nqs) { //Qxf1 *(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1; //Qxf2 *(here->HICUMxf2Xf2Ptr + 1) += +XQxf2_Vxf2; //Qxf *(here->HICUMxfXfPtr + 1) += +XQxf_Vxf; } // Stamps with SH if (selfheat) { // Stamp element: Ibiei f_Bi = + f_Ei = - *(here->HICUMbaseBItempPtr) += Ibiei_Vrth; *(here->HICUMemitEItempPtr) += -Ibiei_Vrth; // Stamp element: Ibpei f_Bp = + f_Ei = - // with respect to Potential Vrth *(here->HICUMbaseBPtempPtr) += Ibpei_Vrth; *(here->HICUMemitEItempPtr) += -Ibpei_Vrth; // Stamp element: Ibici f_Bi = + f_Ci = - *(here->HICUMbaseBItempPtr) += Ibici_Vrth; *(here->HICUMcollCItempPtr) += -Ibici_Vrth; // Stamp element: Iciei f_Ci = + f_Ei = - *(here->HICUMcollCItempPtr) += Iciei_Vrth; *(here->HICUMemitEItempPtr) += -Iciei_Vrth; // Stamp element: Ibpci f_Bp = + f_Ci = - *(here->HICUMbaseBPtempPtr) += Ibpci_Vrth; *(here->HICUMcollCItempPtr) += -Ibpci_Vrth; // Stamp element: Rcx f_Ci = + f_C = - *(here->HICUMcollCItempPtr) += Icic_Vrth; *(here->HICUMcollTempPtr) += -Icic_Vrth; // Stamp element: Rbx f_B = + f_Bp = - *(here->HICUMbaseTempPtr) += Ibbp_Vrth; *(here->HICUMbaseBPtempPtr) += -Ibbp_Vrth; // Stamp element: Re f_Ei = + f_E = - *(here->HICUMemitEItempPtr) += Ieie_Vrth; *(here->HICUMemitTempPtr) += -Ieie_Vrth; // Stamp element: Rbi f_Bp = + f_Bi = - *(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth; *(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth; // Stamp element: Isici f_Si = + f_Ci = - *(here->HICUMsubsSItempPtr) += Isici_Vrth; *(here->HICUMcollCItempPtr) += -Isici_Vrth; // Branch: bpsi, Stamp element: Its *(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth; *(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth; if (nqs) { // Stamp element: Ixf f_xf = + *(here->HICUMxfTempPtr) += Ixf_Vrth; // Stamp element: Ixf1 f_xf1 = + *(here->HICUMxf1TempPtr) += Ixf1_Vrth; // Stamp element: Ixf2 f_xf2 = + *(here->HICUMxf2TempPtr) += Ixf2_Vrth; } // Stamp element: Rth f_T = + *(here->HICUMtempTempPtr) += Irth_Vrth; // Stamp element: Ith f_T = - Ith // with respect to Potential Vrth *(here->HICUMtempTempPtr) += -Ith_Vrth; // with respect to Potential Vbiei *(here->HICUMtempBaseBIPtr) += -Ith_Vbiei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbiei; // with respect to Potential Vbici *(here->HICUMtempBaseBIPtr) += -Ith_Vbici; *(here->HICUMtempCollCIPtr) += +Ith_Vbici; // with respect to Potential Vciei *(here->HICUMtempCollCIPtr) += -Ith_Vciei; *(here->HICUMtempEmitEIPtr) += +Ith_Vciei; // with respect to Potential Vbpei *(here->HICUMtempBaseBPPtr) += -Ith_Vbpei; *(here->HICUMtempEmitEIPtr) += +Ith_Vbpei; // with respect to Potential Vbpci *(here->HICUMtempBaseBPPtr) += -Ith_Vbpci; *(here->HICUMtempCollCIPtr) += +Ith_Vbpci; // with respect to Potential Vsici *(here->HICUMtempSubsSIPtr) += -Ith_Vsici; *(here->HICUMtempCollCIPtr) += +Ith_Vsici; // with respect to Potential Vbpbi *(here->HICUMtempBaseBPPtr) += -Ith_Vbpbi; *(here->HICUMtempBaseBIPtr) += +Ith_Vbpbi; // with respect to Potential Vcic *(here->HICUMtempCollCIPtr) += -Ith_Vcic; *(here->HICUMtempCollPtr) += +Ith_Vcic; // with respect to Potential Vbbp *(here->HICUMtempBasePtr) += -Ith_Vbbp; *(here->HICUMtempBaseBPPtr) += +Ith_Vbbp; // with respect to Potential Veie *(here->HICUMtempEmitEIPtr) += -Ith_Veie; *(here->HICUMtempEmitPtr) += +Ith_Veie; //the charges *(here->HICUMbaseBItempPtr + 1) += +XQrbi_Vrth; *(here->HICUMbaseBPtempPtr + 1) += -XQrbi_Vrth; *(here->HICUMbaseBItempPtr + 1) += +XQjei_Vrth; *(here->HICUMemitEItempPtr + 1) += -XQjei_Vrth; *(here->HICUMbaseBItempPtr + 1) += +XQf_Vrth; *(here->HICUMemitEItempPtr + 1) += -XQf_Vrth; *(here->HICUMbaseBItempPtr + 1) += +XQr_Vrth; *(here->HICUMcollCItempPtr + 1) += -XQr_Vrth; *(here->HICUMbaseBItempPtr + 1) += +XQjci_Vrth; *(here->HICUMcollCItempPtr + 1) += -XQjci_Vrth; *(here->HICUMbaseBPtempPtr + 1) += +XQjep_Vrth; *(here->HICUMemitEItempPtr + 1) += -XQjep_Vrth; *(here->HICUMbaseTempPtr + 1) += +Xqjcx0_t_i_Vrth; *(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_i_Vrth; *(here->HICUMbaseBPtempPtr + 1) += +Xqjcx0_t_ii_Vrth; *(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_ii_Vrth; *(here->HICUMbaseBPtempPtr + 1) += +XQdsu_Vrth; *(here->HICUMcollCItempPtr + 1) += -XQdsu_Vrth; *(here->HICUMsubsSItempPtr + 1) += +XQjs_Vrth; *(here->HICUMcollCItempPtr + 1) += -XQjs_Vrth; *(here->HICUMsubsTempPtr + 1) += +XQscp_Vrth; *(here->HICUMcollTempPtr + 1) += -XQscp_Vrth; *(here->HICUMtempTempPtr + 1) += +XQcth_Vrth; } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2getic.c0000644000175000017500000000274614163340332022723 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine gets the device initial conditions for the HICUMs * from the RHS vector */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMgetic(GENmodel *inModel, CKTcircuit *ckt) { HICUMmodel *model = (HICUMmodel*)inModel; HICUMinstance *here; /* * grab initial conditions out of rhs array. User specified, so use * external nodes to get values */ for( ; model ; model = HICUMnextModel(model)) { for(here = HICUMinstances(model); here ; here = HICUMnextInstance(here)) { if(!here->HICUMicVBEGiven) { here->HICUMicVBE = *(ckt->CKTrhs + here->HICUMbaseNode) - *(ckt->CKTrhs + here->HICUMemitNode); } if(!here->HICUMicVCEGiven) { here->HICUMicVCE = *(ckt->CKTrhs + here->HICUMcollNode) - *(ckt->CKTrhs + here->HICUMemitNode); } if(!here->HICUMicVCSGiven) { here->HICUMicVCS = *(ckt->CKTrhs + here->HICUMcollNode) - *(ckt->CKTrhs + here->HICUMsubsNode); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2mpar.c0000644000175000017500000004767414163340332022600 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine sets model parameters for * HICUMs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMmParam(int param, IFvalue *value, GENmodel *inModel) { HICUMmodel *model = (HICUMmodel*)inModel; switch(param) { //Circuit simulator specific parameters case HICUM_MOD_NPN: if(value->iValue) { model->HICUMtype = NPN; } break; case HICUM_MOD_PNP: if(value->iValue) { model->HICUMtype = PNP; } break; case HICUM_MOD_TNOM: model->HICUMtnom = value->rValue+CONSTCtoK; model->HICUMtnomGiven = TRUE; break; case HICUM_MOD_VERSION : model->HICUMversion = value->sValue; model->HICUMversionGiven = TRUE; break; //Transfer current case HICUM_MOD_C10: model->HICUMc10 = value->rValue; model->HICUMc10Given = TRUE; break; case HICUM_MOD_QP0: model->HICUMqp0 = value->rValue; model->HICUMqp0Given = TRUE; break; case HICUM_MOD_ICH: model->HICUMich = value->rValue; model->HICUMichGiven = TRUE; break; case HICUM_MOD_HF0: model->HICUMhf0 = value->rValue; model->HICUMhf0Given = TRUE; break; case HICUM_MOD_HFE: model->HICUMhfe = value->rValue; model->HICUMhfeGiven = TRUE; break; case HICUM_MOD_HFC: model->HICUMhfc = value->rValue; model->HICUMhfcGiven = TRUE; break; case HICUM_MOD_HJEI: model->HICUMhjei = value->rValue; model->HICUMhjeiGiven = TRUE; break; case HICUM_MOD_AHJEI: model->HICUMahjei = value->rValue; model->HICUMahjeiGiven = TRUE; break; case HICUM_MOD_RHJEI: model->HICUMrhjei = value->rValue; model->HICUMrhjeiGiven = TRUE; break; case HICUM_MOD_HJCI: model->HICUMhjci = value->rValue; model->HICUMhjciGiven = TRUE; break; //Base-Emitter diode: case HICUM_MOD_IBEIS: model->HICUMibeis = value->rValue; model->HICUMibeisGiven = TRUE; break; case HICUM_MOD_MBEI: model->HICUMmbei = value->rValue; model->HICUMmbeiGiven = TRUE; break; case HICUM_MOD_IREIS: model->HICUMireis = value->rValue; model->HICUMireisGiven = TRUE; break; case HICUM_MOD_MREI: model->HICUMmrei = value->rValue; model->HICUMmreiGiven = TRUE; break; case HICUM_MOD_IBEPS: model->HICUMibeps = value->rValue; model->HICUMibepsGiven = TRUE; break; case HICUM_MOD_MBEP: model->HICUMmbep = value->rValue; model->HICUMmbepGiven = TRUE; break; case HICUM_MOD_IREPS: model->HICUMireps = value->rValue; model->HICUMirepsGiven = TRUE; break; case HICUM_MOD_MREP: model->HICUMmrep = value->rValue; model->HICUMmrepGiven = TRUE; break; case HICUM_MOD_MCF: model->HICUMmcf = value->rValue; model->HICUMmcfGiven = TRUE; break; //Transit time for excess recombination current at b-c barrier case HICUM_MOD_TBHREC: model->HICUMtbhrec = value->rValue; model->HICUMtbhrecGiven = TRUE; break; //Base-Collector diode currents case HICUM_MOD_IBCIS: model->HICUMibcis = value->rValue; model->HICUMibcisGiven = TRUE; break; case HICUM_MOD_MBCI: model->HICUMmbci = value->rValue; model->HICUMmbciGiven = TRUE; break; case HICUM_MOD_IBCXS: model->HICUMibcxs = value->rValue; model->HICUMibcxsGiven = TRUE; break; case HICUM_MOD_MBCX: model->HICUMmbcx = value->rValue; model->HICUMmbcxGiven = TRUE; break; //Base-Emitter tunneling current case HICUM_MOD_IBETS: model->HICUMibets = value->rValue; model->HICUMibetsGiven = TRUE; break; case HICUM_MOD_ABET: model->HICUMabet = value->rValue; model->HICUMabetGiven = TRUE; break; case HICUM_MOD_TUNODE: model->HICUMtunode = value->iValue; model->HICUMtunodeGiven = TRUE; break; //Base-Collector avalanche current case HICUM_MOD_FAVL: model->HICUMfavl = value->rValue; model->HICUMfavlGiven = TRUE; break; case HICUM_MOD_QAVL: model->HICUMqavl = value->rValue; model->HICUMqavlGiven = TRUE; break; case HICUM_MOD_KAVL: model->HICUMkavl = value->rValue; model->HICUMkavlGiven = TRUE; break; case HICUM_MOD_ALFAV: model->HICUMalfav = value->rValue; model->HICUMalfavGiven = TRUE; break; case HICUM_MOD_ALQAV: model->HICUMalqav = value->rValue; model->HICUMalqavGiven = TRUE; break; case HICUM_MOD_ALKAV: model->HICUMalkav = value->rValue; model->HICUMalkavGiven = TRUE; break; //Series resistances case HICUM_MOD_RBI0: model->HICUMrbi0 = value->rValue; model->HICUMrbi0Given = TRUE; break; case HICUM_MOD_RBX: model->HICUMrbx = value->rValue; model->HICUMrbxGiven = TRUE; break; case HICUM_MOD_FGEO: model->HICUMfgeo = value->rValue; model->HICUMfgeoGiven = TRUE; break; case HICUM_MOD_FDQR0: model->HICUMfdqr0 = value->rValue; model->HICUMfdqr0Given = TRUE; break; case HICUM_MOD_FCRBI: model->HICUMfcrbi = value->rValue; model->HICUMfcrbiGiven = TRUE; break; case HICUM_MOD_FQI: model->HICUMfqi = value->rValue; model->HICUMfqiGiven = TRUE; break; case HICUM_MOD_RE: model->HICUMre = value->rValue; model->HICUMreGiven = TRUE; break; case HICUM_MOD_RCX: model->HICUMrcx = value->rValue; model->HICUMrcxGiven = TRUE; break; //Substrate transistor case HICUM_MOD_ITSS: model->HICUMitss = value->rValue; model->HICUMitssGiven = TRUE; break; case HICUM_MOD_MSF: model->HICUMmsf = value->rValue; model->HICUMmsfGiven = TRUE; break; case HICUM_MOD_ISCS: model->HICUMiscs = value->rValue; model->HICUMiscsGiven = TRUE; break; case HICUM_MOD_MSC: model->HICUMmsc = value->rValue; model->HICUMmscGiven = TRUE; break; case HICUM_MOD_TSF: model->HICUMtsf = value->rValue; model->HICUMtsfGiven = TRUE; break; //Intra-device substrate coupling case HICUM_MOD_RSU: model->HICUMrsu = value->rValue; model->HICUMrsuGiven = TRUE; break; case HICUM_MOD_CSU: model->HICUMcsu = value->rValue; model->HICUMcsuGiven = TRUE; break; //Depletion Capacitances case HICUM_MOD_CJEI0: model->HICUMcjei0 = value->rValue; model->HICUMcjei0Given = TRUE; break; case HICUM_MOD_VDEI: model->HICUMvdei = value->rValue; model->HICUMvdeiGiven = TRUE; break; case HICUM_MOD_ZEI: model->HICUMzei = value->rValue; model->HICUMzeiGiven = TRUE; break; case HICUM_MOD_AJEI: model->HICUMajei = value->rValue; model->HICUMajeiGiven = TRUE; break; case HICUM_MOD_CJEP0: model->HICUMcjep0 = value->rValue; model->HICUMcjep0Given = TRUE; break; case HICUM_MOD_VDEP: model->HICUMvdep = value->rValue; model->HICUMvdepGiven = TRUE; break; case HICUM_MOD_ZEP: model->HICUMzep = value->rValue; model->HICUMzepGiven = TRUE; break; case HICUM_MOD_AJEP: model->HICUMajep = value->rValue; model->HICUMajepGiven = TRUE; break; case HICUM_MOD_CJCI0: model->HICUMcjci0 = value->rValue; model->HICUMcjci0Given = TRUE; break; case HICUM_MOD_VDCI: model->HICUMvdci = value->rValue; model->HICUMvdciGiven = TRUE; break; case HICUM_MOD_ZCI: model->HICUMzci = value->rValue; model->HICUMzciGiven = TRUE; break; case HICUM_MOD_VPTCI: model->HICUMvptci = value->rValue; model->HICUMvptciGiven = TRUE; break; case HICUM_MOD_CJCX0: model->HICUMcjcx0 = value->rValue; model->HICUMcjcx0Given = TRUE; break; case HICUM_MOD_VDCX: model->HICUMvdcx = value->rValue; model->HICUMvdcxGiven = TRUE; break; case HICUM_MOD_ZCX: model->HICUMzcx = value->rValue; model->HICUMzcxGiven = TRUE; break; case HICUM_MOD_VPTCX: model->HICUMvptcx = value->rValue; model->HICUMvptcxGiven = TRUE; break; case HICUM_MOD_FBCPAR: model->HICUMfbcpar = value->rValue; model->HICUMfbcparGiven = TRUE; break; case HICUM_MOD_FBEPAR: model->HICUMfbepar = value->rValue; model->HICUMfbeparGiven = TRUE; break; case HICUM_MOD_CJS0: model->HICUMcjs0 = value->rValue; model->HICUMcjs0Given = TRUE; break; case HICUM_MOD_VDS: model->HICUMvds = value->rValue; model->HICUMvdsGiven = TRUE; break; case HICUM_MOD_ZS: model->HICUMzs = value->rValue; model->HICUMzsGiven = TRUE; break; case HICUM_MOD_VPTS: model->HICUMvpts = value->rValue; model->HICUMvptsGiven = TRUE; break; case HICUM_MOD_CSCP0: model->HICUMcscp0 = value->rValue; model->HICUMcscp0Given = TRUE; break; case HICUM_MOD_VDSP: model->HICUMvdsp = value->rValue; model->HICUMvdspGiven = TRUE; break; case HICUM_MOD_ZSP: model->HICUMzsp = value->rValue; model->HICUMzspGiven = TRUE; break; case HICUM_MOD_VPTSP: model->HICUMvptsp = value->rValue; model->HICUMvptspGiven = TRUE; break; //Diffusion Capacitances case HICUM_MOD_T0: model->HICUMt0 = value->rValue; model->HICUMt0Given = TRUE; break; case HICUM_MOD_DT0H: model->HICUMdt0h = value->rValue; model->HICUMdt0hGiven = TRUE; break; case HICUM_MOD_TBVL: model->HICUMtbvl = value->rValue; model->HICUMtbvlGiven = TRUE; break; case HICUM_MOD_TEF0: model->HICUMtef0 = value->rValue; model->HICUMtef0Given = TRUE; break; case HICUM_MOD_GTFE: model->HICUMgtfe = value->rValue; model->HICUMgtfeGiven = TRUE; break; case HICUM_MOD_THCS: model->HICUMthcs = value->rValue; model->HICUMthcsGiven = TRUE; break; case HICUM_MOD_AHC: model->HICUMahc = value->rValue; model->HICUMahcGiven = TRUE; break; case HICUM_MOD_FTHC: model->HICUMfthc = value->rValue; model->HICUMfthcGiven = TRUE; break; case HICUM_MOD_RCI0: model->HICUMrci0 = value->rValue; model->HICUMrci0Given = TRUE; break; case HICUM_MOD_VLIM: model->HICUMvlim = value->rValue; model->HICUMvlimGiven = TRUE; break; case HICUM_MOD_VCES: model->HICUMvces = value->rValue; model->HICUMvcesGiven = TRUE; break; case HICUM_MOD_VPT: model->HICUMvpt = value->rValue; model->HICUMvptGiven = TRUE; break; case HICUM_MOD_AICK: model->HICUMaick = value->rValue; model->HICUMaickGiven = TRUE; break; case HICUM_MOD_DELCK: model->HICUMdelck = value->rValue; model->HICUMdelckGiven = TRUE; break; case HICUM_MOD_TR: model->HICUMtr = value->rValue; model->HICUMtrGiven = TRUE; break; case HICUM_MOD_VCBAR: model->HICUMvcbar = value->rValue; model->HICUMvcbarGiven = TRUE; break; case HICUM_MOD_ICBAR: model->HICUMicbar = value->rValue; model->HICUMicbarGiven = TRUE; break; case HICUM_MOD_ACBAR: model->HICUMacbar = value->rValue; model->HICUMacbarGiven = TRUE; break; //Isolation Capacitances case HICUM_MOD_CBEPAR: model->HICUMcbepar = value->rValue; model->HICUMcbeparGiven = TRUE; break; case HICUM_MOD_CBCPAR: model->HICUMcbcpar = value->rValue; model->HICUMcbcparGiven = TRUE; break; //Non-quasi-static Effect case HICUM_MOD_ALQF: model->HICUMalqf = value->rValue; model->HICUMalqfGiven = TRUE; break; case HICUM_MOD_ALIT: model->HICUMalit = value->rValue; model->HICUMalitGiven = TRUE; break; case HICUM_MOD_FLNQS: model->HICUMflnqs = value->iValue; model->HICUMflnqsGiven = TRUE; break; //Noise case HICUM_MOD_KF: model->HICUMkf = value->rValue; model->HICUMkfGiven = TRUE; break; case HICUM_MOD_AF: model->HICUMaf = value->rValue; model->HICUMafGiven = TRUE; break; case HICUM_MOD_CFBE: model->HICUMcfbe = value->iValue; model->HICUMcfbeGiven = TRUE; break; case HICUM_MOD_FLCONO: model->HICUMflcono = value->iValue; model->HICUMflconoGiven = TRUE; break; case HICUM_MOD_KFRE: model->HICUMkfre = value->rValue; model->HICUMkfreGiven = TRUE; break; case HICUM_MOD_AFRE: model->HICUMafre = value->rValue; model->HICUMafreGiven = TRUE; break; //Lateral Geometry Scaling (at high current densities) case HICUM_MOD_LATB: model->HICUMlatb = value->rValue; model->HICUMlatbGiven = TRUE; break; case HICUM_MOD_LATL: model->HICUMlatl = value->rValue; model->HICUMlatlGiven = TRUE; break; //Temperature dependence case HICUM_MOD_VGB: model->HICUMvgb = value->rValue; model->HICUMvgbGiven = TRUE; break; case HICUM_MOD_ALT0: model->HICUMalt0 = value->rValue; model->HICUMalt0Given = TRUE; break; case HICUM_MOD_KT0: model->HICUMkt0 = value->rValue; model->HICUMkt0Given = TRUE; break; case HICUM_MOD_ZETACI: model->HICUMzetaci = value->rValue; model->HICUMzetaciGiven = TRUE; break; case HICUM_MOD_ALVS: model->HICUMalvs = value->rValue; model->HICUMalvsGiven = TRUE; break; case HICUM_MOD_ALCES: model->HICUMalces = value->rValue; model->HICUMalcesGiven = TRUE; break; case HICUM_MOD_ZETARBI: model->HICUMzetarbi = value->rValue; model->HICUMzetarbiGiven = TRUE; break; case HICUM_MOD_ZETARBX: model->HICUMzetarbx = value->rValue; model->HICUMzetarbxGiven = TRUE; break; case HICUM_MOD_ZETARCX: model->HICUMzetarcx = value->rValue; model->HICUMzetarcxGiven = TRUE; break; case HICUM_MOD_ZETARE: model->HICUMzetare = value->rValue; model->HICUMzetareGiven = TRUE; break; case HICUM_MOD_ZETACX: model->HICUMzetacx = value->rValue; model->HICUMzetacxGiven = TRUE; break; case HICUM_MOD_VGE: model->HICUMvge = value->rValue; model->HICUMvgeGiven = TRUE; break; case HICUM_MOD_VGC: model->HICUMvgc = value->rValue; model->HICUMvgcGiven = TRUE; break; case HICUM_MOD_VGS: model->HICUMvgs = value->rValue; model->HICUMvgsGiven = TRUE; break; case HICUM_MOD_F1VG: model->HICUMf1vg = value->rValue; model->HICUMf1vgGiven = TRUE; break; case HICUM_MOD_F2VG: model->HICUMf2vg = value->rValue; model->HICUMf2vgGiven = TRUE; break; case HICUM_MOD_ZETACT: model->HICUMzetact = value->rValue; model->HICUMzetactGiven = TRUE; break; case HICUM_MOD_ZETABET: model->HICUMzetabet = value->rValue; model->HICUMzetabetGiven = TRUE; break; case HICUM_MOD_ALB: model->HICUMalb = value->rValue; model->HICUMalbGiven = TRUE; break; case HICUM_MOD_DVGBE: model->HICUMdvgbe = value->rValue; model->HICUMdvgbeGiven = TRUE; break; case HICUM_MOD_ZETAHJEI: model->HICUMzetahjei = value->rValue; model->HICUMzetahjeiGiven = TRUE; break; case HICUM_MOD_ZETAVGBE: model->HICUMzetavgbe = value->rValue; model->HICUMzetavgbeGiven = TRUE; break; //Self-Heating case HICUM_MOD_FLSH: model->HICUMflsh = value->iValue; model->HICUMflshGiven = TRUE; break; case HICUM_MOD_RTH: model->HICUMrth = value->rValue; model->HICUMrthGiven = TRUE; break; case HICUM_MOD_ZETARTH: model->HICUMzetarth = value->rValue; model->HICUMzetarthGiven = TRUE; break; case HICUM_MOD_ALRTH: model->HICUMalrth = value->rValue; model->HICUMalrthGiven = TRUE; break; case HICUM_MOD_CTH: model->HICUMcth = value->rValue; model->HICUMcthGiven = TRUE; break; //Compatibility with V2.1 case HICUM_MOD_FLCOMP: model->HICUMflcomp = value->rValue; model->HICUMflcompGiven = TRUE; break; //SOA-check case HICUM_MOD_VBE_MAX: model->HICUMvbeMax = value->rValue; model->HICUMvbeMaxGiven = TRUE; break; case HICUM_MOD_VBC_MAX: model->HICUMvbcMax = value->rValue; model->HICUMvbcMaxGiven = TRUE; break; case HICUM_MOD_VCE_MAX: model->HICUMvceMax = value->rValue; model->HICUMvceMaxGiven = TRUE; break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2init.c0000644000175000017500000000364414163340332022571 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #include "ngspice/config.h" #include "ngspice/devdefs.h" #include "hicum2itf.h" #include "hicum2ext.h" #include "hicum2init.h" #include "hicumL2.hpp" #include "hicumL2temp.hpp" SPICEdev HICUMinfo = { .DEVpublic = { .name = "hicum2", .description = "High Current Model for BJT", .terms = &HICUMnSize, .numNames = &HICUMnSize, .termNames = HICUMnames, .numInstanceParms = &HICUMpTSize, .instanceParms = HICUMpTable, .numModelParms = &HICUMmPTSize, .modelParms = HICUMmPTable, .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 = HICUMparam, .DEVmodParam = HICUMmParam, .DEVload = HICUMload, .DEVsetup = HICUMsetup, .DEVunsetup = HICUMunsetup, .DEVpzSetup = HICUMsetup, .DEVtemperature = HICUMtemp, .DEVtrunc = HICUMtrunc, .DEVfindBranch = NULL, .DEVacLoad = HICUMacLoad, .DEVaccept = NULL, .DEVdestroy = NULL, .DEVmodDelete = HICUMmDelete, .DEVdelete = NULL, .DEVsetic = HICUMgetic, .DEVask = HICUMask, .DEVmodAsk = HICUMmAsk, .DEVpzLoad = HICUMpzLoad, .DEVconvTest = HICUMconvTest, .DEVsenSetup = NULL, .DEVsenLoad = NULL, .DEVsenUpdate = NULL, .DEVsenAcLoad = NULL, .DEVsenPrint = NULL, .DEVsenTrunc = NULL, .DEVdisto = NULL, .DEVnoise = HICUMnoise, .DEVsoaCheck = HICUMsoaCheck, .DEVinstSize = &HICUMiSize, .DEVmodSize = &HICUMmSize, #ifdef CIDER .DEVdump = NULL, .DEVacct = NULL, #endif }; SPICEdev * get_hicum_info(void) { return &HICUMinfo; } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2.c0000644000175000017500000004704714163340332021712 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This file defines the HICUM data structures that are * available to the next level(s) up the calling hierarchy */ #include "ngspice/ngspice.h" #include "ngspice/devdefs.h" #include "hicum2defs.h" #include "ngspice/suffix.h" IFparm HICUMpTable[] = { /* parameters */ IOPU("area", HICUM_AREA, IF_REAL, "Area factor"), IOPU("off", HICUM_OFF, IF_FLAG, "Device initially off"), IP("ic", HICUM_IC, IF_REALVEC, "Initial condition vector"), // these are left here for future. Sometimes it is advantageous for debugging if one can set the initial node voltages of all nodes. // OP("icvb", HICUM_IC_VB, IF_REAL, "Initial B potential"), // OP("icvc", HICUM_IC_VC, IF_REAL, "Initial C potential"), // OP("icve", HICUM_IC_VE, IF_REAL, "Initial E potential"), // OP("icvbi", HICUM_IC_VBi, IF_REAL, "Initial Bi potential"), // OP("icvbp", HICUM_IC_VBp, IF_REAL, "Initial Bp potential"), // OP("icvci", HICUM_IC_VCi, IF_REAL, "Initial Ci potential"), // OP("icvt", HICUM_IC_Vt, IF_REAL, "Initial T potential"), // OP("icvei", HICUM_IC_VEi, IF_REAL, "Initial Ei potential"), IOPU("m", HICUM_M, IF_REAL, "Multiplier"), IOPU("temp", HICUM_TEMP, IF_REAL, "Instance temperature"), IP("dt", HICUM_DTEMP, IF_REAL, "Instance delta temperature"), IOPU("tk", HICUM_QUEST_TK, IF_REAL, "Actual device temperature"), IOPU("dtsh", HICUM_QUEST_DTSH, IF_REAL, "Temperature increase due to self-heating"), IOPU("it", HICUM_QUEST_IT, IF_REAL, "transfer current"), OPU("collnode", HICUM_QUEST_COLLNODE, IF_INTEGER, "Number of collector node"), OPU("basenode", HICUM_QUEST_BASENODE, IF_INTEGER, "Number of base node"), OPU("emitnode", HICUM_QUEST_EMITNODE, IF_INTEGER, "Number of emitter node"), OPU("subsnode", HICUM_QUEST_SUBSNODE, IF_INTEGER, "Number of substrate node"), OPU("tempnode", HICUM_QUEST_TEMPNODE, IF_INTEGER, "Number of temperature node"), OPU("collCInode", HICUM_QUEST_COLLCINODE, IF_INTEGER, "Internal collector node"), OPU("baseBPnode", HICUM_QUEST_BASEBPNODE, IF_INTEGER, "External base node"), OPU("baseBInode", HICUM_QUEST_BASEBINODE, IF_INTEGER, "Internal base node"), OPU("emitEInode", HICUM_QUEST_EMITEINODE, IF_INTEGER, "Internal emitter node"), OPU("subsSInode", HICUM_QUEST_SUBSSINODE, IF_INTEGER, "Internal substrate node"), OPU("xfnode", HICUM_QUEST_XFNODE, IF_INTEGER, "Internal phase node xf"), OPU("xf1node", HICUM_QUEST_XF1NODE, IF_INTEGER, "Internal phase node xf1"), OPU("xf2node", HICUM_QUEST_XF2NODE, IF_INTEGER, "Internal phase node xf2"), /* voltages */ OP("vbe", HICUM_QUEST_VBE, IF_REAL, "External BE voltage"), OP("vbbp", HICUM_QUEST_VBBP, IF_REAL, "BBP voltage"), OP("vbc", HICUM_QUEST_VBC, IF_REAL, "External BC voltage"), OP("vce", HICUM_QUEST_VCE, IF_REAL, "External CE voltage"), OP("vsc", HICUM_QUEST_VSC, IF_REAL, "External SC voltage"), OP("vbiei", HICUM_QUEST_VBIEI, IF_REAL, "Internal BE voltage"), OP("vbpbi", HICUM_QUEST_VBPBI, IF_REAL, "Peripheral Base to internal Base voltage"), OP("vbici", HICUM_QUEST_VBICI, IF_REAL, "Internal BC voltage"), OP("vciei", HICUM_QUEST_VCIEI, IF_REAL, "Internal CE voltage"), /* currents */ OP("ic", HICUM_QUEST_CC, IF_REAL, "Collector current"), OP("iavl", HICUM_QUEST_CAVL, IF_REAL, "Avalanche current"), OP("ib", HICUM_QUEST_CB, IF_REAL, "Base current"), OP("ibei", HICUM_QUEST_CBEI, IF_REAL, "Intenral Base Emitter current"), OP("ibci", HICUM_QUEST_CBCI, IF_REAL, "Internal Base Collector current"), OP("ie", HICUM_QUEST_CE, IF_REAL, "Emitter current"), OP("is", HICUM_QUEST_CS, IF_REAL, "Substrate current"), /* resistances */ OP("rcx_t", HICUM_QUEST_RCX_T, IF_REAL, "External (saturated) collector series resistance"), OP("re_t", HICUM_QUEST_RE_T, IF_REAL, "Emitter series resistance"), OP("rbi", HICUM_QUEST_RBI, IF_REAL, "Internal base resistance as calculated in the model"), OP("rb", HICUM_QUEST_RB, IF_REAL, "Total base resistance as calculated in the model"), /* transconductances and capacitances */ OP("betadc", HICUM_QUEST_BETADC, IF_REAL, "Common emitter forward current gain"), OP("gmi", HICUM_QUEST_GMI, IF_REAL, "Internal transconductance"), OP("gms", HICUM_QUEST_GMS, IF_REAL, "Transconductance of the parasitic substrate PNP"), OP("rpii", HICUM_QUEST_RPII, IF_REAL, "Internal base-emitter (input) resistance"), OP("rpix", HICUM_QUEST_RPIX, IF_REAL, "External base-emitter (input) resistance"), OP("rmui", HICUM_QUEST_RMUI, IF_REAL, "Internal feedback resistance"), OP("rmux", HICUM_QUEST_RMUX, IF_REAL, "External feedback resistance"), OP("roi", HICUM_QUEST_ROI, IF_REAL, "Output resistance"), OP("cpii", HICUM_QUEST_CPII, IF_REAL, "Total internal BE capacitance"), OP("cpix", HICUM_QUEST_CPIX, IF_REAL, "Total external BE capacitance"), OP("cmui", HICUM_QUEST_CMUI, IF_REAL, "Total internal BC capacitance"), OP("cmux", HICUM_QUEST_CMUX, IF_REAL, "Total external BC capacitance"), OP("ccs", HICUM_QUEST_CCS, IF_REAL, "CS junction capacitance"), OP("betaac", HICUM_QUEST_BETAAC, IF_REAL, "Small signal current gain"), OP("crbi", HICUM_QUEST_CRBI, IF_REAL, "Shunt capacitance across RBI as calculated in the model"), /* transit time */ OP("tf", HICUM_QUEST_TF, IF_REAL, "Forward transit time"), OP("ft", HICUM_QUEST_FT, IF_REAL, "Transit frequency"), OP("ick", HICUM_QUEST_ICK, IF_REAL, "Transit frequency"), /* power */ OP("p", HICUM_QUEST_POWER, IF_REAL, "Power dissipation") }; IFparm HICUMmPTable[] = { /* model parameters */ //Circuit simulator specific parameters IOP("type", HICUM_MOD_TYPE, IF_STRING, "For transistor type NPN(+1) or PNP (-1)"), IOPU("npn", HICUM_MOD_NPN, IF_FLAG, "NPN type device"), IOPU("pnp", HICUM_MOD_PNP, IF_FLAG, "PNP type device"), IOP("tnom", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"), IOPR("tref", HICUM_MOD_TNOM, IF_REAL, "Temperature at which parameters are specified"), IOP("version", HICUM_MOD_VERSION, IF_STRING, " parameter for model version"), //Transfer current IOP("c10", HICUM_MOD_C10 , IF_REAL, "GICCR constant"), IOP("qp0", HICUM_MOD_QP0 , IF_REAL, "Zero-bias hole charge"), IOP("ich", HICUM_MOD_ICH , IF_REAL, "High-current correction for 2D and 3D effects"), //`0' signifies infinity IOP("hf0", HICUM_MOD_HF0 , IF_REAL, "Weight factor for the low current minority charge"), IOP("hfe", HICUM_MOD_HFE , IF_REAL, "Emitter minority charge weighting factor in HBTs"), IOP("hfc", HICUM_MOD_HFC , IF_REAL, "Collector minority charge weighting factor in HBTs"), IOP("hjei", HICUM_MOD_HJEI , IF_REAL, "B-E depletion charge weighting factor in HBTs"), IOP("ahjei", HICUM_MOD_AHJEI, IF_REAL, "Parameter describing the slope of hjEi(VBE)"), IOP("rhjei", HICUM_MOD_RHJEI, IF_REAL, "Smoothing parameter for hjEi(VBE) at high voltage"), IOP("hjci", HICUM_MOD_HJCI , IF_REAL, "B-C depletion charge weighting factor in HBTs"), //Base-Emitter diode currents IOP("ibeis", HICUM_MOD_IBEIS, IF_REAL, "Internal B-E saturation current"), IOP("mbei", HICUM_MOD_MBEI , IF_REAL, "Internal B-E current ideality factor"), IOP("ireis", HICUM_MOD_IREIS, IF_REAL, "Internal B-E recombination saturation current"), IOP("mrei", HICUM_MOD_MREI , IF_REAL, "Internal B-E recombination current ideality factor"), IOP("ibeps", HICUM_MOD_IBEPS, IF_REAL, "Peripheral B-E saturation current"), IOP("mbep", HICUM_MOD_MBEP , IF_REAL, "Peripheral B-E current ideality factor"), IOP("ireps", HICUM_MOD_IREPS, IF_REAL, "Peripheral B-E recombination saturation current"), IOP("mrep", HICUM_MOD_MREP , IF_REAL, "Peripheral B-E recombination current ideality factor"), IOP("mcf", HICUM_MOD_MCF , IF_REAL, "Non-ideality factor for III-V HBTs"), //Transit time for excess recombination current at b-c barrier IOP("tbhrec", HICUM_MOD_TBHREC, IF_REAL, "Base current recombination time constant at B-C barrier for high forward injection"), //Base-Collector diode currents IOP("ibcis", HICUM_MOD_IBCIS, IF_REAL, "Internal B-C saturation current"), IOP("mbci", HICUM_MOD_MBCI , IF_REAL, "Internal B-C current ideality factor"), IOP("ibcxs", HICUM_MOD_IBCXS, IF_REAL, "External B-C saturation current"), IOP("mbcx", HICUM_MOD_MBCX , IF_REAL, "External B-C current ideality factor"), //Base-Emitter tunneling current IOP("ibets", HICUM_MOD_IBETS, IF_REAL, "B-E tunneling saturation current"), IOP("abet", HICUM_MOD_ABET, IF_REAL, "Exponent factor for tunneling current"), IOP("tunode",HICUM_MOD_TUNODE, IF_INTEGER, "Specifies the base node connection for the tunneling current"), // =1 signifies perimeter node //Base-Collector avalanche current IOP("favl", HICUM_MOD_FAVL , IF_REAL, "Avalanche current factor"), IOP("qavl", HICUM_MOD_QAVL , IF_REAL, "Exponent factor for avalanche current"), IOP("kavl", HICUM_MOD_KAVL , IF_REAL, "Flag/factor for turning strong avalanche on"), IOP("alfav", HICUM_MOD_ALFAV, IF_REAL, "Relative TC for FAVL"), IOP("alqav", HICUM_MOD_ALQAV, IF_REAL, "Relative TC for QAVL"), IOP("alkav", HICUM_MOD_ALKAV, IF_REAL, "Relative TC for KAVL"), //Series resistances IOP("rbi0", HICUM_MOD_RBI0 , IF_REAL, "Zero bias internal base resistance"), IOP("rbx", HICUM_MOD_RBX , IF_REAL, "External base series resistance"), IOP("fgeo", HICUM_MOD_FGEO , IF_REAL, "Factor for geometry dependence of emitter current crowding"), IOP("fdqr0", HICUM_MOD_FDQR0, IF_REAL, "Correction factor for modulation by B-E and B-C space charge layer"), IOP("fcrbi", HICUM_MOD_FCRBI, IF_REAL, "Ratio of HF shunt to total internal capacitance (lateral NQS effect)"), IOP("fqi", HICUM_MOD_FQI , IF_REAL, "Ration of internal to total minority charge"), IOP("re", HICUM_MOD_RE , IF_REAL, "Emitter series resistance"), IOP("rcx", HICUM_MOD_RCX , IF_REAL, "External collector series resistance"), //Substrate transistor IOP("itss", HICUM_MOD_ITSS, IF_REAL, "Substrate transistor transfer saturation current"), IOP("msf", HICUM_MOD_MSF , IF_REAL, "Forward ideality factor of substrate transfer current"), IOP("iscs", HICUM_MOD_ISCS, IF_REAL, "C-S diode saturation current"), IOP("msc", HICUM_MOD_MSC , IF_REAL, "Ideality factor of C-S diode current"), IOP("tsf", HICUM_MOD_TSF , IF_REAL, "Transit time for forward operation of substrate transistor"), //Intra-device substrate coupling IOP("rsu", HICUM_MOD_RSU, IF_REAL, "Substrate series resistance"), IOP("csu", HICUM_MOD_CSU, IF_REAL, "Substrate shunt capacitance"), //Depletion Capacitances IOP("cjei0", HICUM_MOD_CJEI0 , IF_REAL, "Internal B-E zero-bias depletion capacitance"), IOP("vdei", HICUM_MOD_VDEI , IF_REAL, "Internal B-E built-in potential"), IOP("zei", HICUM_MOD_ZEI , IF_REAL, "Internal B-E grading coefficient"), IOP("ajei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"), IOPR("aljei", HICUM_MOD_AJEI , IF_REAL, "Ratio of maximum to zero-bias value of internal B-E capacitance"), IOP("cjep0", HICUM_MOD_CJEP0 , IF_REAL, "Peripheral B-E zero-bias depletion capacitance"), IOP("vdep", HICUM_MOD_VDEP , IF_REAL, "Peripheral B-E built-in potential"), IOP("zep", HICUM_MOD_ZEP , IF_REAL, "Peripheral B-E grading coefficient"), IOP("ajep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"), IOPR("aljep", HICUM_MOD_AJEP , IF_REAL, "Ratio of maximum to zero-bias value of peripheral B-E capacitance"), IOP("cjci0", HICUM_MOD_CJCI0 , IF_REAL, "Internal B-C zero-bias depletion capacitance"), IOP("vdci", HICUM_MOD_VDCI , IF_REAL, "Internal B-C built-in potential"), IOP("zci", HICUM_MOD_ZCI , IF_REAL, "Internal B-C grading coefficient"), IOP("vptci", HICUM_MOD_VPTCI , IF_REAL, "Internal B-C punch-through voltage"), IOP("cjcx0", HICUM_MOD_CJCX0 , IF_REAL, "External B-C zero-bias depletion capacitance"), IOP("vdcx", HICUM_MOD_VDCX , IF_REAL, "External B-C built-in potential"), IOP("zcx", HICUM_MOD_ZCX , IF_REAL, "External B-C grading coefficient"), IOP("vptcx", HICUM_MOD_VPTCX , IF_REAL, "External B-C punch-through voltage"), IOP("fbcpar", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"), IOPR("fbc", HICUM_MOD_FBCPAR, IF_REAL, "Partitioning factor of parasitic B-C cap"), IOP("fbepar", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"), IOPR("fbe", HICUM_MOD_FBEPAR, IF_REAL, "Partitioning factor of parasitic B-E cap"), IOP("cjs0", HICUM_MOD_CJS0 , IF_REAL, "C-S zero-bias depletion capacitance"), IOP("vds", HICUM_MOD_VDS , IF_REAL, "C-S built-in potential"), IOP("zs", HICUM_MOD_ZS , IF_REAL, "C-S grading coefficient"), IOP("vpts", HICUM_MOD_VPTS , IF_REAL, "C-S punch-through voltage"), IOP("cscp0", HICUM_MOD_CSCP0 , IF_REAL, "Perimeter S-C zero-bias depletion capacitance"), IOP("vdsp", HICUM_MOD_VDSP , IF_REAL, "Perimeter S-C built-in potential"), IOP("zsp", HICUM_MOD_ZSP , IF_REAL, "Perimeter S-C grading coefficient"), IOP("vptsp", HICUM_MOD_VPTSP , IF_REAL, "Perimeter S-C punch-through voltage"), //Diffusion Capacitances IOP("t0", HICUM_MOD_T0 , IF_REAL, "Low current forward transit time at VBC=0V"), IOP("dt0h", HICUM_MOD_DT0H , IF_REAL, "Time constant for base and B-C space charge layer width modulation"), IOP("tbvl", HICUM_MOD_TBVL , IF_REAL, "Time constant for modeling carrier jam at low VCE"), IOP("tef0", HICUM_MOD_TEF0 , IF_REAL, "Neutral emitter storage time"), IOP("gtfe", HICUM_MOD_GTFE , IF_REAL, "Exponent factor for current dependence of neutral emitter storage time"), IOP("thcs", HICUM_MOD_THCS , IF_REAL, "Saturation time constant at high current densities"), IOP("ahc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"), IOPR("alhc", HICUM_MOD_AHC , IF_REAL, "Smoothing factor for current dependence of base and collector transit time"), IOP("fthc", HICUM_MOD_FTHC , IF_REAL, "Partitioning factor for base and collector portion"), IOP("rci0", HICUM_MOD_RCI0 , IF_REAL, "Internal collector resistance at low electric field"), IOP("vlim", HICUM_MOD_VLIM , IF_REAL, "Voltage separating ohmic and saturation velocity regime"), IOP("vces", HICUM_MOD_VCES , IF_REAL, "Internal C-E saturation voltage"), IOP("vpt", HICUM_MOD_VPT , IF_REAL, "Collector punch-through voltage"), // `0' signifies infinity IOP("aick", HICUM_MOD_AICK , IF_REAL, "Smoothing term for ICK"), IOP("delck", HICUM_MOD_DELCK, IF_REAL, "Fitting factor for critical current"), IOP("tr", HICUM_MOD_TR , IF_REAL, "Storage time for inverse operation"), IOP("vcbar", HICUM_MOD_VCBAR, IF_REAL, "Barrier voltage"), IOP("icbar", HICUM_MOD_ICBAR, IF_REAL, "Normalization parameter"), IOP("acbar", HICUM_MOD_ACBAR, IF_REAL, "Smoothing parameter for barrier voltage"), //Isolation Capacitances IOP("cbepar", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"), IOPR("ceox", HICUM_MOD_CBEPAR, IF_REAL, "Total parasitic B-E capacitance"), IOP("cbcpar", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"), IOPR("ccox", HICUM_MOD_CBCPAR, IF_REAL, "Total parasitic B-C capacitance"), //Non-quasi-static Effect IOP("alqf", HICUM_MOD_ALQF, IF_REAL, "Factor for additional delay time of minority charge"), IOP("alit", HICUM_MOD_ALIT, IF_REAL, "Factor for additional delay time of transfer current"), IOP("flnqs", HICUM_MOD_FLNQS, IF_INTEGER, "Flag for turning on and off of vertical NQS effect"), //Noise IOP("kf", HICUM_MOD_KF , IF_REAL, "Flicker noise coefficient"), IOP("af", HICUM_MOD_AF , IF_REAL, "Flicker noise exponent factor"), IOP("cfbe", HICUM_MOD_CFBE , IF_INTEGER, "Flag for determining where to tag the flicker noise source"), IOP("flcono", HICUM_MOD_FLCONO, IF_INTEGER, "Flag for turning on and off of correlated noise implementation"), IOP("kfre", HICUM_MOD_KFRE , IF_REAL, "Emitter resistance flicker noise coefficient"), IOP("afre", HICUM_MOD_AFRE , IF_REAL, "Emitter resistance flicker noise exponent factor"), //Lateral Geometry Scaling (at high current densities) IOP("latb", HICUM_MOD_LATB, IF_REAL, "Scaling factor for collector minority charge in direction of emitter width"), IOP("latl", HICUM_MOD_LATL, IF_REAL, "Scaling factor for collector minority charge in direction of emitter length"), //Temperature dependence IOP("vgb", HICUM_MOD_VGB , IF_REAL, "Bandgap voltage extrapolated to 0 K"), IOP("alt0", HICUM_MOD_ALT0 , IF_REAL, "First order relative TC of parameter T0"), IOP("kt0", HICUM_MOD_KT0 , IF_REAL, "Second order relative TC of parameter T0"), IOP("zetaci", HICUM_MOD_ZETACI , IF_REAL, "Temperature exponent for RCI0"), IOP("alvs", HICUM_MOD_ALVS , IF_REAL, "Relative TC of saturation drift velocity"), IOP("alces", HICUM_MOD_ALCES , IF_REAL, "Relative TC of VCES"), IOP("zetarbi", HICUM_MOD_ZETARBI , IF_REAL, "Temperature exponent of internal base resistance"), IOP("zetarbx", HICUM_MOD_ZETARBX , IF_REAL, "Temperature exponent of external base resistance"), IOP("zetarcx", HICUM_MOD_ZETARCX , IF_REAL, "Temperature exponent of external collector resistance"), IOP("zetare", HICUM_MOD_ZETARE , IF_REAL, "Temperature exponent of emitter resistance"), IOP("zetacx", HICUM_MOD_ZETACX , IF_REAL, "Temperature exponent of mobility in substrate transistor transit time"), IOP("vge", HICUM_MOD_VGE , IF_REAL, "Effective emitter bandgap voltage"), IOP("vgc", HICUM_MOD_VGC , IF_REAL, "Effective collector bandgap voltage"), IOP("vgs", HICUM_MOD_VGS , IF_REAL, "Effective substrate bandgap voltage"), IOP("f1vg", HICUM_MOD_F1VG , IF_REAL, "Coefficient K1 in T-dependent band-gap equation"), IOP("f2vg", HICUM_MOD_F2VG , IF_REAL, "Coefficient K2 in T-dependent band-gap equation"), IOP("zetact", HICUM_MOD_ZETACT , IF_REAL, "Exponent coefficient in transfer current temperature dependence"), IOP("zetabet", HICUM_MOD_ZETABET , IF_REAL, "Exponent coefficient in B-E junction current temperature dependence"), IOP("alb", HICUM_MOD_ALB , IF_REAL, "Relative TC of forward current gain for V2.1 model"), IOP("dvgbe", HICUM_MOD_DVGBE , IF_REAL, "Bandgap difference between B and B-E junction used for hjEi0 and hf0"), IOP("zetahjei", HICUM_MOD_ZETAHJEI, IF_REAL, "Temperature coefficient for ahjEi"), IOP("zetavgbe", HICUM_MOD_ZETAVGBE, IF_REAL, "Temperature coefficient for hjEi0"), //Self-Heating IOP("flsh", HICUM_MOD_FLSH , IF_INTEGER, "Flag for turning on and off self-heating effect"), IOP("rth", HICUM_MOD_RTH , IF_REAL, "Thermal resistance"), IOP("zetarth", HICUM_MOD_ZETARTH, IF_REAL, "Temperature coefficient for Rth"), IOP("alrth", HICUM_MOD_ALRTH , IF_REAL, "First order relative TC of parameter Rth"), IOP("cth", HICUM_MOD_CTH , IF_REAL, "Thermal capacitance"), //Compatibility with V2.1 IOP("flcomp", HICUM_MOD_FLCOMP, IF_REAL, "Flag for compatibility with v2.1 model (0=v2.1)"), IOP("vbe_max", HICUM_MOD_VBE_MAX, IF_REAL, "maximum voltage B-E junction"), IOP("vbc_max", HICUM_MOD_VBC_MAX, IF_REAL, "maximum voltage B-C junction"), IOP("vce_max", HICUM_MOD_VCE_MAX, IF_REAL, "maximum voltage C-E branch") }; char *HICUMnames[] = { "collector", "base", "emitter", "substrate", "temp" }; int HICUMnSize = NUMELEMS(HICUMnames); int HICUMpTSize = NUMELEMS(HICUMpTable); int HICUMmPTSize = NUMELEMS(HICUMmPTable); int HICUMiSize = sizeof(HICUMinstance); int HICUMmSize = sizeof(HICUMmodel); tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2setup.c0000644000175000017500000007453114163340332022771 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * 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 "hicum2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" int HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) /* load the HICUM structure with those pointers needed later * for fast matrix loading */ { HICUMmodel *model = (HICUMmodel*)inModel; HICUMinstance *here; int error; CKTnode *tmp; /* loop through all the transistor models */ for( ; model != NULL; model = HICUMnextModel(model)) { //Circuit simulator specific parameters if(model->HICUMtype != NPN && model->HICUMtype != PNP) model->HICUMtype = NPN; if(!model->HICUMtnomGiven) model->HICUMtnom = ckt->CKTnomTemp; if (!model->HICUMversionGiven) model->HICUMversion = copy("2.4.0"); //Transfer current if(!model->HICUMc10Given) model->HICUMc10 = 2e-30; if(!model->HICUMqp0Given) model->HICUMqp0 = 2e-14; if(!model->HICUMichGiven) model->HICUMich = 0.0; if(!model->HICUMhf0Given) model->HICUMhf0 = 1.0; if(!model->HICUMhfeGiven) model->HICUMhfe = 1.0; if(!model->HICUMhfcGiven) model->HICUMhfc = 1.0; if(!model->HICUMhjeiGiven) model->HICUMhjei = 1.0; if(!model->HICUMahjeiGiven) model->HICUMahjei = 0.0; if(!model->HICUMrhjeiGiven) model->HICUMrhjei = 1.0; if(!model->HICUMhjciGiven) model->HICUMhjci = 1.0; //Base-Emitter diode; if(!model->HICUMibeisGiven) model->HICUMibeis = 1e-18; if(!model->HICUMmbeiGiven) model->HICUMmbei = 1.0; if(!model->HICUMireisGiven) model->HICUMireis = 0.0; if(!model->HICUMmreiGiven) model->HICUMmrei = 2.0; if(!model->HICUMibepsGiven) model->HICUMibeps = 0.0; if(!model->HICUMmbepGiven) model->HICUMmbep = 1.0; if(!model->HICUMirepsGiven) model->HICUMireps = 0.0; if(!model->HICUMmrepGiven) model->HICUMmrep = 2.0; if(!model->HICUMmcfGiven) model->HICUMmcf = 1.0; //Transit time for excess recombination current at b-c barrier if(!model->HICUMtbhrecGiven) model->HICUMtbhrec = 0.0; //Base-Collector diode currents if(!model->HICUMibcisGiven) model->HICUMibcis = 1e-16; if(!model->HICUMmbciGiven) model->HICUMmbci = 1.0; if(!model->HICUMibcxsGiven) model->HICUMibcxs = 0.0; if(!model->HICUMmbcxGiven) model->HICUMmbcx = 1.0; //Base-Emitter tunneling current if(!model->HICUMibetsGiven) model->HICUMibets = 0.0; if(!model->HICUMabetGiven) model->HICUMabet = 40.0; if(!model->HICUMtunodeGiven) model->HICUMtunode = 1; //Base-Collector avalanche current if(!model->HICUMfavlGiven) model->HICUMfavl = 0.0; if(!model->HICUMqavlGiven) model->HICUMqavl = 0.0; if(!model->HICUMkavlGiven) model->HICUMkavl = 0.0; if(!model->HICUMalfavGiven) model->HICUMalfav = 0.0; if(!model->HICUMalqavGiven) model->HICUMalqav = 0.0; if(!model->HICUMalkavGiven) model->HICUMalkav = 0.0; //Series resistances if(!model->HICUMrbi0Given) model->HICUMrbi0 = 0.0; if(!model->HICUMrbxGiven) model->HICUMrbx = 0.0; if(!model->HICUMfgeoGiven) model->HICUMfgeo = 0.6557; if(!model->HICUMfdqr0Given) model->HICUMfdqr0 = 0.0; if(!model->HICUMfcrbiGiven) model->HICUMfcrbi = 0.0; if(!model->HICUMfqiGiven) model->HICUMfqi = 1.0; if(!model->HICUMreGiven) model->HICUMre = 0.0; if(!model->HICUMrcxGiven) model->HICUMrcx = 0.0; //Substrate transistor if(!model->HICUMitssGiven) model->HICUMitss = 0.0; if(!model->HICUMmsfGiven) model->HICUMmsf = 1.0; if(!model->HICUMiscsGiven) model->HICUMiscs = 0.0; if(!model->HICUMmscGiven) model->HICUMmsc = 1.0; if(!model->HICUMtsfGiven) model->HICUMtsf = 0.0; //Intra-device substrate coupling if(!model->HICUMrsuGiven) model->HICUMrsu = 0.0; if(!model->HICUMcsuGiven) model->HICUMcsu = 0.0; //Depletion Capacitances if(!model->HICUMcjei0Given) model->HICUMcjei0 = 1.0e-20; if(!model->HICUMvdeiGiven) model->HICUMvdei = 0.9; if(!model->HICUMzeiGiven) model->HICUMzei = 0.5; if(!model->HICUMajeiGiven) model->HICUMajei = 2.5; if(!model->HICUMcjep0Given) model->HICUMcjep0 = 1.0e-20; if(!model->HICUMvdepGiven) model->HICUMvdep = 0.9; if(!model->HICUMzepGiven) model->HICUMzep = 0.5; if(!model->HICUMajepGiven) model->HICUMajep = 2.5; if(!model->HICUMcjci0Given) model->HICUMcjci0 = 1.0e-20; if(!model->HICUMvdciGiven) model->HICUMvdci = 0.7; if(!model->HICUMzciGiven) model->HICUMzci = 0.4; if(!model->HICUMvptciGiven) model->HICUMvptci = 100.0; if(!model->HICUMcjcx0Given) model->HICUMcjcx0 = 1.0e-20; if(!model->HICUMvdcxGiven) model->HICUMvdcx = 0.7; if(!model->HICUMzcxGiven) model->HICUMzcx = 0.4; if(!model->HICUMvptcxGiven) model->HICUMvptcx = 100.0; if(!model->HICUMfbcparGiven) model->HICUMfbcpar = 0.0; if(!model->HICUMfbeparGiven) model->HICUMfbepar = 1.0; if(!model->HICUMcjs0Given) model->HICUMcjs0 = 0.0; if(!model->HICUMvdsGiven) model->HICUMvds = 0.6; if(!model->HICUMzsGiven) model->HICUMzs = 0.5; if(!model->HICUMvptsGiven) model->HICUMvpts = 100.0; if(!model->HICUMcscp0Given) model->HICUMcscp0 = 0.0; if(!model->HICUMvdspGiven) model->HICUMvdsp = 0.6; if(!model->HICUMzspGiven) model->HICUMzsp = 0.5; if(!model->HICUMvptspGiven) model->HICUMvptsp = 100.0; //Diffusion Capacitances if(!model->HICUMt0Given) model->HICUMt0 = 0.0; if(!model->HICUMdt0hGiven) model->HICUMdt0h = 0.0; if(!model->HICUMtbvlGiven) model->HICUMtbvl = 0.0; if(!model->HICUMtef0Given) model->HICUMtef0 = 0.0; if(!model->HICUMgtfeGiven) model->HICUMgtfe = 1.0; if(!model->HICUMthcsGiven) model->HICUMthcs = 0.0; if(!model->HICUMahcGiven) model->HICUMahc = 0.1; if(!model->HICUMfthcGiven) model->HICUMfthc = 0.0; if(!model->HICUMrci0Given) model->HICUMrci0 = 150; if(!model->HICUMvlimGiven) model->HICUMvlim = 0.5; if(!model->HICUMvcesGiven) model->HICUMvces = 0.1; if(!model->HICUMvptGiven) model->HICUMvpt = 100.0; if(!model->HICUMaickGiven) model->HICUMaick = 1.0e-03; if(!model->HICUMdelckGiven) model->HICUMdelck = 2.0; if(!model->HICUMtrGiven) model->HICUMtr = 0.0; if(!model->HICUMvcbarGiven) model->HICUMvcbar = 0.0; if(!model->HICUMicbarGiven) model->HICUMicbar = 0.0; if(!model->HICUMacbarGiven) model->HICUMacbar = 0.01; //Isolation Capacitances if(!model->HICUMcbeparGiven) model->HICUMcbepar = 0.0; if(!model->HICUMcbcparGiven) model->HICUMcbcpar = 0.0; //Non-quasi-static Effect if(!model->HICUMalqfGiven) model->HICUMalqf = 0.167; if(!model->HICUMalitGiven) model->HICUMalit = 0.333; if(!model->HICUMflnqsGiven) model->HICUMflnqs = 0; //Noise if(!model->HICUMkfGiven) model->HICUMkf = 0.0; if(!model->HICUMafGiven) model->HICUMaf = 2.0; if(!model->HICUMcfbeGiven) model->HICUMcfbe = -1; if(!model->HICUMflconoGiven) model->HICUMflcono = 0; if(!model->HICUMkfreGiven) model->HICUMkfre = 0.0; if(!model->HICUMafreGiven) model->HICUMafre = 2.0; //Lateral Geometry Scaling (at high current densities) if(!model->HICUMlatbGiven) model->HICUMlatb = 0.0; if(!model->HICUMlatlGiven) model->HICUMlatl = 0.0; //Temperature dependence if(!model->HICUMvgbGiven) model->HICUMvgb = 1.17; if(!model->HICUMalt0Given) model->HICUMalt0 = 0.0; if(!model->HICUMkt0Given) model->HICUMkt0 = 0.0; if(!model->HICUMzetaciGiven) model->HICUMzetaci = 0.0; if(!model->HICUMalvsGiven) model->HICUMalvs = 0.0; if(!model->HICUMalcesGiven) model->HICUMalces = 0.0; if(!model->HICUMzetarbiGiven) model->HICUMzetarbi = 0.0; if(!model->HICUMzetarbxGiven) model->HICUMzetarbx = 0.0; if(!model->HICUMzetarcxGiven) model->HICUMzetarcx = 0.0; if(!model->HICUMzetareGiven) model->HICUMzetare = 0.0; if(!model->HICUMzetacxGiven) model->HICUMzetacx = 1.0; if(!model->HICUMvgeGiven) model->HICUMvge = 1.17; if(!model->HICUMvgcGiven) model->HICUMvgc = 1.17; if(!model->HICUMvgsGiven) model->HICUMvgs = 1.17; if(!model->HICUMf1vgGiven) model->HICUMf1vg = -1.02377e-4; if(!model->HICUMf2vgGiven) model->HICUMf2vg = 4.3215e-4; if(!model->HICUMzetactGiven) model->HICUMzetact = 3.0; if(!model->HICUMzetabetGiven) model->HICUMzetabet = 3.5; if(!model->HICUMalbGiven) model->HICUMalb = 0.0; if(!model->HICUMdvgbeGiven) model->HICUMdvgbe = 0.0; if(!model->HICUMzetahjeiGiven) model->HICUMzetahjei = 1.0; if(!model->HICUMzetavgbeGiven) model->HICUMzetavgbe = 1.0; //Self-Heating if(!model->HICUMflshGiven) model->HICUMflsh = 0; if(!model->HICUMrthGiven) model->HICUMrth = 0.0; if(!model->HICUMzetarthGiven) model->HICUMzetarth = 0.0; if(!model->HICUMalrthGiven) model->HICUMalrth = 0.0; if(!model->HICUMcthGiven) model->HICUMcth = 0.0; if((model->HICUMrthGiven) && (model->HICUMcth < 1e-12)) model->HICUMcth = 1e-12; //Compatibility with V2.1 if(!model->HICUMflcompGiven) model->HICUMflcomp = 0.0; if(!model->HICUMvbeMaxGiven) model->HICUMvbeMax = 1e99; if(!model->HICUMvbcMaxGiven) model->HICUMvbcMax = 1e99; if(!model->HICUMvceMaxGiven) model->HICUMvceMax = 1e99; int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0)); int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0)); /* loop through all the instances of the model */ for (here = HICUMinstances(model); here != NULL ; here=HICUMnextInstance(here)) { CKTnode *tmpNode; IFuid tmpName; if(!here->HICUMareaGiven) { here->HICUMarea = 1.0; } if(!here->HICUMmGiven) { here->HICUMm = 1.0; } if(!here->HICUMdtempGiven) { here->HICUMdtemp = 0.0; } // Warning: // The scaling with HICUMm and HICUMarea is done here from model to here variables in order to save memory. // Classical spice scaling with "area" is implemented, but it is not recommended to be used. If you want // scaling, more sophisticated expressions should be used. Those can be found in modern PDKs or should be // provided by modeling engineers. // For discrete devices, the multiplication factor "m" should give reasonable results. // // The HICUMm device multiplicaton factor can be exected to give good results. // The following variables need scaling in HICUM: // IT : qp0 ~ (area m)**2 qp0 ~ area m icbar ~ area m // BE junction: cjei0 ~ area m cjep0 ~ m // ibeis ~ area m ibeps ~ m // cbepar ~ m -> area scaling not reasonable // BC junction: cjci0 ~ area m cjcx0 ~ m // ibcis ~ area m ibcxs ~ m // ireis ~ area m ireps ~ m // cbcpar ~ m -> area scaling not reasonable // qavl ~ area m // re ~1/(area*m) // rci0 ~1/(area*m) // rbx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase // rcx ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase // rbi0 ~1/(area*m) -> assume that scaling with "area" is due to lE0 increase // rth ~1/(area*m) -> bad assumption, but more transistor geometry needs to be known for accurate scaling // cth ~ area*m -> bad assumption, but more transistor geometry needs to be known for accurate scaling // Substrate related parameters not scaled on purpose. This is very geometry dependent? double area_times_m = here->HICUMm*here->HICUMarea; //IT here->HICUMqp0_scaled = model->HICUMqp0 * area_times_m; here->HICUMc10_scaled = model->HICUMc10 * area_times_m*area_times_m; here->HICUMicbar_scaled = model->HICUMicbar * area_times_m; here->HICUMrth_scaled = model->HICUMrth / area_times_m; //very poor assumption here->HICUMcth_scaled = model->HICUMcth * area_times_m; //very poor assumption //BE junction here->HICUMcjei0_scaled = model->HICUMcjei0 * area_times_m; here->HICUMibeis_scaled = model->HICUMibeis * area_times_m; here->HICUMireis_scaled = model->HICUMireis * area_times_m; here->HICUMibeps_scaled = model->HICUMibeps * here->HICUMm; here->HICUMireps_scaled = model->HICUMireps * here->HICUMm; here->HICUMcjep0_scaled = model->HICUMcjep0 * here->HICUMm; here->HICUMcbepar_scaled = model->HICUMcbepar * here->HICUMm; here->HICUMibets_scaled = model->HICUMibets * area_times_m; //BC junction here->HICUMibcis_scaled = model->HICUMibcis * area_times_m; here->HICUMcjci0_scaled = model->HICUMcjci0 * area_times_m; here->HICUMcjcx0_scaled = model->HICUMcjcx0 * here->HICUMm; here->HICUMcbcpar_scaled = model->HICUMcbcpar * here->HICUMm; here->HICUMibcxs_scaled = model->HICUMibcxs * here->HICUMm; here->HICUMqavl_scaled = model->HICUMqavl * area_times_m; //resistances here->HICUMre_scaled = model->HICUMre / area_times_m; here->HICUMrci0_scaled = model->HICUMrci0 / area_times_m; here->HICUMrbx_scaled = model->HICUMrbx / area_times_m; here->HICUMrcx_scaled = model->HICUMrcx / area_times_m; here->HICUMrbi0_scaled = model->HICUMrbi0 / area_times_m; //noise here->HICUMkf_scaled = model->HICUMkf * pow(here->HICUMm, (1-model->HICUMaf)); here->HICUMkfre_scaled = model->HICUMkfre * pow(here->HICUMm, (1-model->HICUMafre)); here->HICUMstate = *states; *states += HICUMnumStates; if(model->HICUMrcx == 0) { here->HICUMcollCINode = here->HICUMcollNode; } else if(here->HICUMcollCINode == 0) { error = CKTmkVolt(ckt,&tmp,here->HICUMname,"collCI"); if(error) return(error); here->HICUMcollCINode = 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->HICUMrbx == 0) { here->HICUMbaseBPNode = here->HICUMbaseNode; } else if(here->HICUMbaseBPNode == 0){ error = CKTmkVolt(ckt,&tmp,here->HICUMname, "baseBP"); if(error) return(error); here->HICUMbaseBPNode = 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->HICUMre == 0) { here->HICUMemitEINode = here->HICUMemitNode; } else if(here->HICUMemitEINode == 0) { error = CKTmkVolt(ckt,&tmp,here->HICUMname, "emitEI"); if(error) return(error); here->HICUMemitEINode = 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->HICUMrsu == 0) { here->HICUMsubsSINode = here->HICUMsubsNode; } else if(here->HICUMsubsSINode == 0) { error = CKTmkVolt(ckt,&tmp,here->HICUMname, "subsSI"); if(error) return(error); here->HICUMsubsSINode = 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->HICUMrbi0 == 0) { here->HICUMbaseBINode = here->HICUMbaseBPNode; } else if(here->HICUMbaseBINode == 0) { error = CKTmkVolt(ckt, &tmp, here->HICUMname, "baseBI"); if(error) return(error); here->HICUMbaseBINode = tmp->number; if (ckt->CKTcopyNodesets) { if (CKTinst2Node(ckt,here,5,&tmpNode,&tmpName)==OK) { if (tmpNode->nsGiven) { tmp->nodeset=tmpNode->nodeset; tmp->nsGiven=tmpNode->nsGiven; } } } } if (selfheat) { if (here->HICUMtempNode == 0) { // no external node for temperature error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT"); // create internal node if (error) return(error); here->HICUMtempNode = tmp->number; } } else { if (here->HICUMtempNode > 0) { // external temp node is given, but no she parameter here->HICUMtempNode = 0; } } if (nqs) { if(here->HICUMxfNode == 0) { error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf"); if(error) return(error); here->HICUMxfNode = tmp->number; } if(here->HICUMxf1Node == 0) { error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf1"); if(error) return(error); here->HICUMxf1Node = tmp->number; } if(here->HICUMxf2Node == 0) { error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf2"); if(error) return(error); here->HICUMxf2Node = tmp->number; } } else { here->HICUMxfNode = 0; here->HICUMxf1Node = 0; here->HICUMxf2Node = 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(HICUMcollCollPtr,HICUMcollNode,HICUMcollNode); TSTALLOC(HICUMbaseBasePtr,HICUMbaseNode,HICUMbaseNode); TSTALLOC(HICUMemitEmitPtr,HICUMemitNode,HICUMemitNode); TSTALLOC(HICUMsubsSubsPtr,HICUMsubsNode,HICUMsubsNode); TSTALLOC(HICUMcollCICollCIPtr,HICUMcollCINode,HICUMcollCINode); TSTALLOC(HICUMbaseBIBaseBIPtr,HICUMbaseBINode,HICUMbaseBINode); TSTALLOC(HICUMemitEIEmitEIPtr,HICUMemitEINode,HICUMemitEINode); TSTALLOC(HICUMbaseBPBaseBPPtr,HICUMbaseBPNode,HICUMbaseBPNode); TSTALLOC(HICUMsubsSISubsSIPtr,HICUMsubsSINode,HICUMsubsSINode); TSTALLOC(HICUMbaseEmitPtr,HICUMbaseNode,HICUMemitNode); //b-e TSTALLOC(HICUMemitBasePtr,HICUMemitNode,HICUMbaseNode); //e-b TSTALLOC(HICUMbaseBaseBPPtr,HICUMbaseNode,HICUMbaseBPNode); //b-bp TSTALLOC(HICUMbaseBPBasePtr,HICUMbaseBPNode,HICUMbaseNode); //bp-b TSTALLOC(HICUMemitEmitEIPtr,HICUMemitNode,HICUMemitEINode); //e-ei TSTALLOC(HICUMemitEIEmitPtr,HICUMemitEINode,HICUMemitNode); //ei-e TSTALLOC(HICUMsubsSubsSIPtr,HICUMsubsNode,HICUMsubsSINode); //s-si TSTALLOC(HICUMsubsSISubsPtr,HICUMsubsSINode,HICUMsubsNode); //si-s TSTALLOC(HICUMcollCIBasePtr,HICUMcollCINode,HICUMbaseNode); //b-ci TSTALLOC(HICUMbaseCollCIPtr,HICUMbaseNode,HICUMcollCINode); //ci-b TSTALLOC(HICUMcollCIEmitEIPtr,HICUMcollCINode,HICUMemitEINode); //ci-ei TSTALLOC(HICUMemitEICollCIPtr,HICUMemitEINode,HICUMcollCINode); //ei-ci TSTALLOC(HICUMbaseBPBaseBIPtr,HICUMbaseBPNode,HICUMbaseBINode); //bp-bi TSTALLOC(HICUMbaseBIBaseBPPtr,HICUMbaseBINode,HICUMbaseBPNode); //bi-bp TSTALLOC(HICUMbaseBPEmitEIPtr,HICUMbaseBPNode,HICUMemitEINode); //bp-ei TSTALLOC(HICUMemitEIBaseBPPtr,HICUMemitEINode,HICUMbaseBPNode); //ei-bp TSTALLOC(HICUMbaseBPEmitPtr,HICUMbaseBPNode,HICUMemitNode); //bp-e TSTALLOC(HICUMemitBaseBPPtr,HICUMemitNode,HICUMbaseBPNode); //e-bp TSTALLOC(HICUMbaseBPSubsSIPtr,HICUMbaseBPNode,HICUMsubsSINode); //bp-si TSTALLOC(HICUMsubsSIBaseBPPtr,HICUMsubsSINode,HICUMbaseBPNode); //si-bp TSTALLOC(HICUMbaseBIEmitEIPtr,HICUMbaseBINode,HICUMemitEINode); //ei-bi TSTALLOC(HICUMemitEIBaseBIPtr,HICUMemitEINode,HICUMbaseBINode); //bi-ei if (nqs) { TSTALLOC(HICUMbaseBIXfPtr ,HICUMbaseBINode,HICUMxfNode); //bi - xf TSTALLOC(HICUMemitEIXfPtr ,HICUMemitEINode,HICUMxfNode); //ei - xf } TSTALLOC(HICUMbaseBICollCIPtr,HICUMbaseBINode,HICUMcollCINode); //ci-bi TSTALLOC(HICUMcollCIBaseBIPtr,HICUMcollCINode,HICUMbaseBINode); //bi-ci TSTALLOC(HICUMbaseBPCollCIPtr,HICUMbaseBPNode,HICUMcollCINode); //bp-ci TSTALLOC(HICUMcollCIBaseBPPtr,HICUMcollCINode,HICUMbaseBPNode); //ci-bp TSTALLOC(HICUMsubsSICollCIPtr,HICUMsubsSINode,HICUMcollCINode); //si-ci TSTALLOC(HICUMcollCISubsSIPtr,HICUMcollCINode,HICUMsubsSINode); //ci-si TSTALLOC(HICUMcollCICollPtr,HICUMcollCINode,HICUMcollNode); //ci-c TSTALLOC(HICUMcollCollCIPtr,HICUMcollNode,HICUMcollCINode); //c-ci TSTALLOC(HICUMsubsCollPtr,HICUMsubsNode,HICUMcollNode); //s-c TSTALLOC(HICUMcollSubsPtr,HICUMcollNode,HICUMsubsNode); //c-s if (nqs) { TSTALLOC(HICUMxf1Xf1Ptr ,HICUMxf1Node ,HICUMxf1Node); TSTALLOC(HICUMxf1BaseBIPtr,HICUMxf1Node ,HICUMbaseBINode); TSTALLOC(HICUMxf1EmitEIPtr,HICUMxf1Node ,HICUMemitEINode); TSTALLOC(HICUMxf1CollCIPtr,HICUMxf1Node ,HICUMcollCINode); TSTALLOC(HICUMxf1Xf2Ptr ,HICUMxf1Node ,HICUMxf2Node); TSTALLOC(HICUMxf2Xf1Ptr ,HICUMxf2Node ,HICUMxf1Node); TSTALLOC(HICUMxf2BaseBIPtr,HICUMxf2Node ,HICUMbaseBINode); TSTALLOC(HICUMxf2EmitEIPtr,HICUMxf2Node ,HICUMemitEINode); TSTALLOC(HICUMxf2CollCIPtr,HICUMxf2Node ,HICUMcollCINode); TSTALLOC(HICUMxf2Xf2Ptr ,HICUMxf2Node ,HICUMxf2Node); TSTALLOC(HICUMemitEIXf2Ptr,HICUMemitEINode,HICUMxf2Node); TSTALLOC(HICUMcollCIXf2Ptr,HICUMcollCINode,HICUMxf2Node); TSTALLOC(HICUMxfXfPtr ,HICUMxfNode,HICUMxfNode); TSTALLOC(HICUMxfEmitEIPtr ,HICUMxfNode,HICUMemitEINode); TSTALLOC(HICUMxfCollCIPtr ,HICUMxfNode,HICUMcollCINode); TSTALLOC(HICUMxfBaseBIPtr ,HICUMxfNode,HICUMbaseBINode); } TSTALLOC(HICUMbaseBPSubsSIPtr ,HICUMbaseBPNode,HICUMsubsSINode); TSTALLOC(HICUMsubsSIBaseBPPtr ,HICUMsubsSINode,HICUMbaseBPNode); if (selfheat) { TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode); TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode); TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode); TSTALLOC(HICUMcollCItempPtr,HICUMcollCINode,HICUMtempNode); TSTALLOC(HICUMbaseBItempPtr,HICUMbaseBINode,HICUMtempNode); TSTALLOC(HICUMbaseBPtempPtr,HICUMbaseBPNode,HICUMtempNode); TSTALLOC(HICUMemitEItempPtr,HICUMemitEINode,HICUMtempNode); TSTALLOC(HICUMsubsSItempPtr,HICUMsubsSINode,HICUMtempNode); TSTALLOC(HICUMsubsTempPtr ,HICUMsubsNode ,HICUMtempNode); TSTALLOC(HICUMcollTempPtr ,HICUMcollNode ,HICUMtempNode); TSTALLOC(HICUMtempCollPtr,HICUMtempNode,HICUMcollNode); TSTALLOC(HICUMtempBasePtr,HICUMtempNode,HICUMbaseNode); TSTALLOC(HICUMtempEmitPtr,HICUMtempNode,HICUMemitNode); TSTALLOC(HICUMtempCollCIPtr,HICUMtempNode,HICUMcollCINode); TSTALLOC(HICUMtempBaseBIPtr,HICUMtempNode,HICUMbaseBINode); TSTALLOC(HICUMtempBaseBPPtr,HICUMtempNode,HICUMbaseBPNode); TSTALLOC(HICUMtempEmitEIPtr,HICUMtempNode,HICUMemitEINode); TSTALLOC(HICUMtempSubsSIPtr,HICUMtempNode,HICUMsubsSINode); TSTALLOC(HICUMtempTempPtr,HICUMtempNode,HICUMtempNode); if (nqs) { TSTALLOC(HICUMxfTempPtr ,HICUMxfNode,HICUMtempNode); TSTALLOC(HICUMxf2TempPtr ,HICUMxf2Node ,HICUMtempNode); TSTALLOC(HICUMxf1TempPtr ,HICUMxf1Node ,HICUMtempNode); } } } } return(OK); } int HICUMunsetup( GENmodel *inModel, CKTcircuit *ckt) { HICUMmodel *model; HICUMinstance *here; for (model = (HICUMmodel *)inModel; model != NULL; model = HICUMnextModel(model)) { int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0)); int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0)); for (here = HICUMinstances(model); here != NULL; here=HICUMnextInstance(here)) { if (here->HICUMcollCINode > 0 && here->HICUMcollCINode != here->HICUMcollNode) CKTdltNNum(ckt, here->HICUMcollCINode); here->HICUMcollCINode = 0; if (here->HICUMbaseBINode > 0 && here->HICUMbaseBPNode != here->HICUMbaseBINode) CKTdltNNum(ckt, here->HICUMbaseBINode); here->HICUMbaseBINode = 0; if (here->HICUMbaseBPNode > 0 && here->HICUMbaseBPNode != here->HICUMbaseNode) CKTdltNNum(ckt, here->HICUMbaseBPNode); here->HICUMbaseBPNode = 0; if (here->HICUMemitEINode > 0 && here->HICUMemitEINode != here->HICUMemitNode) CKTdltNNum(ckt, here->HICUMemitEINode); here->HICUMemitEINode = 0; if (here->HICUMsubsSINode > 0 && here->HICUMsubsSINode != here->HICUMsubsNode) CKTdltNNum(ckt, here->HICUMsubsSINode); here->HICUMsubsSINode = 0; if (selfheat) { if (here->HICUMtempNode > 6) { // it is an internal node CKTdltNNum(ckt, here->HICUMtempNode); here->HICUMtempNode = 0; } } if (nqs) { if(here->HICUMxfNode > 0) CKTdltNNum(ckt, here->HICUMxfNode); here->HICUMxfNode = 0; if(here->HICUMxf1Node > 0) CKTdltNNum(ckt, here->HICUMxf1Node); here->HICUMxf1Node = 0; if(here->HICUMxf2Node > 0) CKTdltNNum(ckt, here->HICUMxf2Node); here->HICUMxf2Node = 0; } } } return OK; } int HICUMmDelete(GENmodel* gen_model) { HICUMmodel* model = (HICUMmodel*)gen_model; FREE(model->HICUMversion); return OK; } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2noise.c0000644000175000017500000003202614163340332022737 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #include "ngspice/ngspice.h" #include "hicum2defs.h" #include "ngspice/cktdefs.h" #include "ngspice/iferrmsg.h" #include "ngspice/noisedef.h" #include "ngspice/suffix.h" /* * HICUMnoise (mode, operation, firstModel, ckt, data, OnDens) * * This routine names and evaluates all of the noise sources * associated with HICUM'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 HICUM's is summed with the variable "OnDens". */ int HICUMnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens) { NOISEAN *job = (NOISEAN *) ckt->CKTcurJob; HICUMmodel *firstModel = (HICUMmodel *) genmodel; HICUMmodel *model; HICUMinstance *here; double tempOnoise; double tempInoise; double noizDens[HICUMNSRCS]; double lnNdens[HICUMNSRCS]; int i; double Ibbp_Vbbp; double Icic_Vcic; double Ibpbi_Vbpbi; double Ieie_Veie; double Isis_Vsis; /* define the names of the noise sources */ static char *HICUMnNames[HICUMNSRCS] = { /* Note that we have to keep the order consistent with the strchr definitions in HICUMdefs.h */ "_rcx", /* thermal noise due to rcx */ "_rbx", /* thermal noise due to rbx */ "_rbi", /* thermal noise due to rbi */ "_re", /* thermal noise due to re */ "_rsu", /* thermal noise due to rsu */ "_iavl", /* shot noise due to iavl */ "_ibci", /* shot noise due to ibci */ "_ibep", /* shot noise due to ibep */ "_ijbcx", /* shot noise due to ijbcx */ "_ijsc", /* shot noise due to ijsc */ "_it", /* shot noise due to iciei */ "_ibei", /* shot noise due to ibiei */ "_1overfbe", /* flicker (1/f) noise ibe */ "_1overfre", /* flicker (1/f) noise re */ "" /* total transistor noise */ }; for (model=firstModel; model != NULL; model=HICUMnextModel(model)) { for (here=HICUMinstances(model); here != NULL; here=HICUMnextInstance(here)) { // get all derivatives of branch DC currents if(model->HICUMrcxGiven && model->HICUMrcx != 0) { Icic_Vcic = 1/here->HICUMrcx_t.rpart; } else { Icic_Vcic = 0.0; } if(model->HICUMrbxGiven && model->HICUMrbx != 0) { Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; } else { Ibbp_Vbbp = 0.0; } if(model->HICUMreGiven && model->HICUMre != 0) { Ieie_Veie = 1/here->HICUMre_t.rpart; } else { Ieie_Veie = 0.0; } if(model->HICUMrsuGiven && model->HICUMrsu != 0) { Isis_Vsis = 1/model->HICUMrsu*here->HICUMm; } else { Isis_Vsis = 0.0; } if(here->HICUMrbi > 0) { Ibpbi_Vbpbi = 1/here->HICUMrbi; } else { Ibpbi_Vbpbi = 0.0; } 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 < HICUMNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_%s%s", here->HICUMname, HICUMnNames[i]); } break; case INT_NOIZ: for (i=0; i < HICUMNSRCS; i++) { NOISE_ADD_OUTVAR(ckt, data, "onoise_total_%s%s", here->HICUMname, HICUMnNames[i]); NOISE_ADD_OUTVAR(ckt, data, "inoise_total_%s%s", here->HICUMname, HICUMnNames[i]); } break; } } break; case N_CALC: switch (mode) { case N_DENS: NevalSrc(&noizDens[HICUMRCNOIZ],&lnNdens[HICUMRCNOIZ], ckt,THERMNOISE,here->HICUMcollCINode,here->HICUMcollNode, Icic_Vcic); NevalSrc(&noizDens[HICUMRBNOIZ],&lnNdens[HICUMRBNOIZ], ckt,THERMNOISE,here->HICUMbaseNode,here->HICUMbaseBPNode, Ibbp_Vbbp); NevalSrc(&noizDens[HICUMRBINOIZ],&lnNdens[HICUMRBINOIZ], ckt,THERMNOISE,here->HICUMbaseBPNode,here->HICUMbaseBINode, Ibpbi_Vbpbi); NevalSrc(&noizDens[HICUMRENOIZ],&lnNdens[HICUMRENOIZ], ckt,THERMNOISE,here->HICUMemitEINode,here->HICUMemitNode, Ieie_Veie); NevalSrc(&noizDens[HICUMRSNOIZ],&lnNdens[HICUMRSNOIZ], ckt,THERMNOISE,here->HICUMsubsSINode,here->HICUMsubsNode, Isis_Vsis); NevalSrc(&noizDens[HICUMIAVLNOIZ],&lnNdens[HICUMIAVLNOIZ], ckt,SHOTNOISE,here->HICUMcollCINode,here->HICUMbaseBINode, here->HICUMiavl); NevalSrc(&noizDens[HICUMIBCINOIZ],&lnNdens[HICUMIBCINOIZ], ckt,SHOTNOISE,here->HICUMbaseBINode,here->HICUMcollCINode, *(ckt->CKTstate0 + here->HICUMibici)+here->HICUMiavl); NevalSrc(&noizDens[HICUMIBEPNOIZ],&lnNdens[HICUMIBEPNOIZ], ckt,SHOTNOISE,here->HICUMbaseBPNode,here->HICUMemitEINode, *(ckt->CKTstate0 + here->HICUMibpei)); NevalSrc(&noizDens[HICUMIBCXNOIZ],&lnNdens[HICUMIBCXNOIZ], ckt,SHOTNOISE,here->HICUMbaseBPNode,here->HICUMcollCINode, *(ckt->CKTstate0 + here->HICUMibpci)); NevalSrc(&noizDens[HICUMIJSCNOIZ],&lnNdens[HICUMIJSCNOIZ], ckt,SHOTNOISE,here->HICUMsubsSINode,here->HICUMcollCINode, *(ckt->CKTstate0 + here->HICUMisici)); NevalSrc(&noizDens[HICUMITNOIZ],&lnNdens[HICUMITNOIZ], ckt,SHOTNOISE,here->HICUMcollCINode,here->HICUMemitEINode, *(ckt->CKTstate0 + here->HICUMit)); NevalSrc(&noizDens[HICUMIBEINOIZ],&lnNdens[HICUMIBEINOIZ], ckt,SHOTNOISE,here->HICUMbaseBINode,here->HICUMemitEINode, *(ckt->CKTstate0 + here->HICUMibiei)); if (model->HICUMcfbe == -1) { NevalSrc(&noizDens[HICUMFLBENOIZ], NULL, ckt, N_GAIN,here->HICUMbaseBINode, here->HICUMemitEINode, (double)0.0); } else { NevalSrc(&noizDens[HICUMFLBENOIZ], NULL, ckt, N_GAIN,here->HICUMbaseBPNode, here->HICUMemitEINode, (double)0.0); } noizDens[HICUMFLBENOIZ] *= here->HICUMkf_scaled * exp(model->HICUMaf * log(MAX(fabs((*(ckt->CKTstate0 + here->HICUMibiei)+*(ckt->CKTstate0 + here->HICUMibpei))),N_MINLOG))) / data->freq; lnNdens[HICUMFLBENOIZ] = log(MAX(noizDens[HICUMFLBENOIZ],N_MINLOG)); NevalSrc(&noizDens[HICUMFLRENOIZ], NULL, ckt, N_GAIN,here->HICUMemitEINode, here->HICUMemitNode, (double)0.0); noizDens[HICUMFLRENOIZ] *= here->HICUMkfre_scaled * exp(model->HICUMafre * log(MAX(fabs(*(ckt->CKTstate0 + here->HICUMieie)),N_MINLOG))) / data->freq; lnNdens[HICUMFLRENOIZ] = log(MAX(noizDens[HICUMFLRENOIZ],N_MINLOG)); noizDens[HICUMTOTNOIZ] = noizDens[HICUMRCNOIZ] + noizDens[HICUMRBNOIZ] + noizDens[HICUMRBINOIZ] + noizDens[HICUMRENOIZ] + noizDens[HICUMRSNOIZ] + noizDens[HICUMIAVLNOIZ] + noizDens[HICUMIBCINOIZ] + noizDens[HICUMIBEPNOIZ] + noizDens[HICUMIBCXNOIZ] + noizDens[HICUMIJSCNOIZ] + noizDens[HICUMITNOIZ] + noizDens[HICUMIBEINOIZ] + noizDens[HICUMFLBENOIZ] + noizDens[HICUMFLRENOIZ]; lnNdens[HICUMTOTNOIZ] = log(noizDens[HICUMTOTNOIZ]); *OnDens += noizDens[HICUMTOTNOIZ]; if (data->delFreq == 0.0) { /* if we haven't done any previous integration, we need to */ /* initialize our "history" variables */ for (i=0; i < HICUMNSRCS; i++) { here->HICUMnVar[LNLSTDENS][i] = lnNdens[i]; } /* clear out our integration variables if it's the first pass */ if (data->freq == job->NstartFreq) { for (i=0; i < HICUMNSRCS; i++) { here->HICUMnVar[OUTNOIZ][i] = 0.0; here->HICUMnVar[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 < HICUMNSRCS; i++) { if (i != HICUMTOTNOIZ) { tempOnoise = Nintegrate(noizDens[i], lnNdens[i], here->HICUMnVar[LNLSTDENS][i], data); tempInoise = Nintegrate(noizDens[i] * data->GainSqInv , lnNdens[i] + data->lnGainInv, here->HICUMnVar[LNLSTDENS][i] + data->lnGainInv, data); here->HICUMnVar[LNLSTDENS][i] = lnNdens[i]; data->outNoiz += tempOnoise; data->inNoise += tempInoise; if (job->NStpsSm != 0) { here->HICUMnVar[OUTNOIZ][i] += tempOnoise; here->HICUMnVar[OUTNOIZ][HICUMTOTNOIZ] += tempOnoise; here->HICUMnVar[INNOIZ][i] += tempInoise; here->HICUMnVar[INNOIZ][HICUMTOTNOIZ] += tempInoise; } } } } if (data->prtSummary) { for (i=0; i < HICUMNSRCS; 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 < HICUMNSRCS; i++) { data->outpVector[data->outNumber++] = here->HICUMnVar[OUTNOIZ][i]; data->outpVector[data->outNumber++] = here->HICUMnVar[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 here */ } /* for model */ return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2param.c0000644000175000017500000000372614163340332022727 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine sets instance parameters for * HICUMs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/const.h" #include "ngspice/ifsim.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" /* ARGSUSED */ int HICUMparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select) { HICUMinstance *here = (HICUMinstance*)instPtr; NG_IGNORE(select); switch(param) { case HICUM_AREA: here->HICUMarea = value->rValue; here->HICUMareaGiven = TRUE; break; case HICUM_OFF: here->HICUMoff = (value->iValue != 0); break; case HICUM_TEMP: here->HICUMtemp = value->rValue+CONSTCtoK; here->HICUMtempGiven = TRUE; break; case HICUM_DTEMP: here->HICUMdtemp = value->rValue; here->HICUMdtempGiven = TRUE; break; case HICUM_M: here->HICUMm = value->rValue; here->HICUMmGiven = TRUE; break; case HICUM_IC : switch(value->v.numValue) { case 3: here->HICUMicVCS = *(value->v.vec.rVec+2); here->HICUMicVCSGiven = TRUE; /* fallthrough */ case 2: here->HICUMicVCE = *(value->v.vec.rVec+1); here->HICUMicVCEGiven = TRUE; /* fallthrough */ case 1: here->HICUMicVBE = *(value->v.vec.rVec); here->HICUMicVBEGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicumL2temp.cpp0000644000175000017500000005136714163340332023254 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #include #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 #endif #include "duals/dual" #include "hicumL2.hpp" #include //ngspice header files written in C #ifdef __cplusplus extern "C" { #endif #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "ngspice/smpdefs.h" #include "hicum2defs.h" #include "ngspice/const.h" #include "ngspice/sperror.h" #include "ngspice/ifsim.h" #include "ngspice/suffix.h" #ifdef __cplusplus } #endif using namespace duals::literals; #define TMAX 326.85 #define TMIN -100.0 #define LN_EXP_LIMIT 11.0 duals::duald clip_temperature(duals::duald T){ // smooth clipping function for device temperature, if self heating increases temperature beyond // T0+TMAX or below T0-TMIN duals::duald Tdev; Tdev = T; if (T<(TMIN+CONSTCtoK+1.0)){ Tdev = TMIN+CONSTCtoK+exp(T-TMIN+CONSTCtoK-1.0); } else if (T>(TMAX+CONSTCtoK-1.0)) { Tdev = TMAX+CONSTCtoK-exp(TMAX+CONSTCtoK-T-1.0); }; return Tdev; }; void TMPHICJ(double , double , double , double , double , double , double , double , double , double , double , double *, double *, double *); // 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" void TMPHICJ(duals::duald vt, double vt0, duals::duald qtt0, duals::duald ln_qtt0, double mg, double c_j, double vd0, double z, double w, double is_al, double vgeff, duals::duald *c_j_t, duals::duald *vd_t, duals::duald *w_t) { duals::duald vdj0,vdjt,vdt; if (c_j > 0.0) { vdj0 = 2*vt0*log(exp(vd0*0.5/vt0)-exp(-0.5*vd0/vt0)); vdjt = vdj0*qtt0+vgeff*(1-qtt0)-mg*vt*ln_qtt0; vdt = vdjt+2*vt*log(0.5*(1+sqrt(1+4*exp(-vdjt/vt)))); *vd_t = vdt; *c_j_t = c_j*exp(z*log(vd0/(*vd_t))); if (is_al == 1) { *w_t = w*(*vd_t)/vd0; } else { *w_t = w; } } else { *c_j_t = c_j; *vd_t = vd0; *w_t = w; } } void hicum_TMPHICJ(duals::duald vt, double vt0, duals::duald qtt0, duals::duald ln_qtt0, double mg, double c_j, double vd0, double z, double w, double is_al, double vgeff, double *c_j_t, double *vd_t, double *w_t, double *c_j_t_dT, double *vd_t_dT, double *w_t_dT) { duals::duald c_j_t_result; duals::duald vd_t_result; duals::duald w_t_result; TMPHICJ(vt, vt0, qtt0, ln_qtt0, mg, c_j, vd0, z, w, is_al, vgeff, &c_j_t_result, &vd_t_result, &w_t_result); *c_j_t = c_j_t_result.rpart(); *c_j_t_dT = c_j_t_result.dpart(); *vd_t = vd_t_result.rpart(); *vd_t_dT = vd_t_result.dpart(); *w_t = w_t_result.rpart(); *w_t_dT = w_t_result.dpart(); } int HICUMtemp(GENmodel *inModel, CKTcircuit *ckt) /* Pre-compute many useful parameters */ { HICUMmodel *model = (HICUMmodel *)inModel; HICUMinstance *here; /* loop through all the bipolar models */ for( ; model != NULL; model = HICUMnextModel(model)) { /* loop through all the instances of the model */ for (here = HICUMinstances(model); here != NULL ; here=HICUMnextInstance(here)) { if(!here->HICUMtempGiven) here->HICUMtemp = ckt->CKTtemp; if(here->HICUMdtempGiven) here->HICUMtemp = here->HICUMtemp + here->HICUMdtemp; hicum_thermal_update(model, here, &here -> HICUMtemp, &here->HICUMtemp_Vrth); } } return(OK); } void hicum_thermal_update(HICUMmodel *inModel, HICUMinstance *inInstance, double * HICUMTemp, double * Tdev_Vrth) { HICUMmodel *model = (HICUMmodel *)inModel; HICUMinstance *here = (HICUMinstance *)inInstance; double mg,k10,k20,avs,vgb_t0,vge_t0,vgbe_t0,vgbe0,vgbc0,vgsc0; double zetabci,zetabcxt,zetasct; duals::duald temp, dT, vt, qtt0, ln_qtt0; duals::duald k1,k2,dvg0,vge_t,vgb_t,vgbe_t,cratio_t,a; double cratio_t_real, cratio_t_dual; double Tnom, zetatef, cjcx01, cjcx02, C_1; duals::duald cjei0_t, vdei_t, cjep0_t, vdep_t; Tnom = model->HICUMtnom; k10 = model->HICUMf1vg*Tnom*log(Tnom); k20 = model->HICUMf2vg*Tnom; avs = model->HICUMalvs*Tnom; vgb_t0 = model->HICUMvgb+k10+k20; vge_t0 = model->HICUMvge+k10+k20; vgbe_t0 = (vgb_t0+vge_t0)/2; vgbe0 = (model->HICUMvgb+model->HICUMvge)/2; vgbc0 = (model->HICUMvgb+model->HICUMvgc)/2; vgsc0 = (model->HICUMvgs+model->HICUMvgc)/2; mg = 3-model->HICUMf1vg/CONSTKoverQ; zetabci = mg+1-model->HICUMzetaci; zetabcxt= mg+1-model->HICUMzetacx; zetasct = mg-1.5; // Smooth ngspice T clipping temp = clip_temperature( *(HICUMTemp)+1_e ); *(HICUMTemp) = temp.rpart(); *(Tdev_Vrth) = temp.dpart(); // original HICUM clipping for Tdev => left here for reference // *(Tdev_Vrth) = 1.0; // if(*(HICUMTemp) < TMIN + CONSTCtoK) { // *(HICUMTemp) = TMIN + CONSTCtoK; // *(Tdev_Vrth) = 0.0; // } else { // if (*(HICUMTemp) > TMAX + CONSTCtoK) { // *(HICUMTemp) = TMAX + CONSTCtoK; // *(Tdev_Vrth) = 0.0; // } //} //This routine calculates the derivatives with respect to Vrth. Since at some point // Tdev becomes constant (see above), we need to account for this like below. //temp = *(HICUMTemp)+1_e* *(Tdev_Vrth); // dual number device temperature vt = temp*CONSTKoverQ; // dual valued temperature voltage here->HICUMvt0 = Tnom * CONSTKoverQ; here->HICUMvt.rpart = vt.rpart(); here->HICUMvt.dpart = vt.dpart(); dT = temp-Tnom; qtt0 = temp/Tnom; ln_qtt0 = log(qtt0); k1 = model->HICUMf1vg*temp*log(temp); k2 = model->HICUMf2vg*temp; vgb_t = model->HICUMvgb+k1+k2; vge_t = model->HICUMvge+k1+k2; vgbe_t = (vgb_t+vge_t)/2; here->HICUMtVcrit = here->HICUMvt.rpart * log(here->HICUMvt.rpart / (CONSTroot2*here->HICUMibeis_scaled)); //Internal b-e junction capacitance hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, here->HICUMcjei0_scaled, model->HICUMvdei, model->HICUMzei, model->HICUMajei, 1, vgbe0, &here->HICUMcjei0_t.rpart, &here->HICUMvdei_t.rpart, &here->HICUMajei_t.rpart, &here->HICUMcjei0_t.dpart, &here->HICUMvdei_t.dpart, &here->HICUMajei_t.dpart); cjei0_t.rpart(here->HICUMcjei0_t.rpart); cjei0_t.dpart(here->HICUMcjei0_t.dpart); vdei_t.rpart(here->HICUMvdei_t.rpart); vdei_t.dpart(here->HICUMvdei_t.dpart); if (model->HICUMflcomp < 2.3) { duals::duald V_gT, r_VgVT, k; V_gT = 3.0*vt*ln_qtt0 + model->HICUMvgb*(qtt0-1.0); r_VgVT = V_gT/vt; //Internal b-e diode saturation currents a = model->HICUMmcf*r_VgVT/model->HICUMmbei - model->HICUMalb*dT; a = here->HICUMibeis_scaled*exp(a); here->HICUMibeis_t.rpart = a.rpart(); here->HICUMibeis_t.dpart = a.dpart(); a = model->HICUMmcf*r_VgVT/model->HICUMmrei - model->HICUMalb*dT; a = here->HICUMireis_scaled*exp(a); here->HICUMireis_t.rpart = a.rpart(); here->HICUMireis_t.dpart = a.dpart(); //Peripheral b-e diode saturation currents a = model->HICUMmcf*r_VgVT/model->HICUMmbep - model->HICUMalb*dT; a = here->HICUMibeps_scaled*exp(a); here->HICUMibeps_t.rpart = a.rpart(); here->HICUMibeps_t.dpart = a.dpart(); a = model->HICUMmcf*r_VgVT/model->HICUMmrep - model->HICUMalb*dT; a = here->HICUMireps_scaled*exp(a); here->HICUMireps_t.rpart = a.rpart(); here->HICUMireps_t.dpart = a.dpart(); //Internal b-c diode saturation current a = r_VgVT/model->HICUMmbci; a = here->HICUMibcis_scaled*exp(a); here->HICUMibcis_t.rpart = a.rpart(); here->HICUMibcis_t.dpart = a.dpart(); //External b-c diode saturation currents a = r_VgVT/model->HICUMmbcx; a = here->HICUMibcxs_scaled*exp(a); here->HICUMibcxs_t.rpart = a.rpart(); here->HICUMibcxs_t.dpart = a.dpart(); //Saturation transfer current for substrate transistor a = r_VgVT/model->HICUMmsf; a = model->HICUMitss*exp(a); here->HICUMitss_t.rpart = a.rpart(); here->HICUMitss_t.rpart = a.dpart(); //Saturation current for c-s diode a = r_VgVT/model->HICUMmsc; a = model->HICUMiscs*exp(a); here->HICUMiscs_t.rpart = a.rpart(); here->HICUMiscs_t.dpart = a.dpart(); //Zero bias hole charge a = vdei_t/model->HICUMvdei; a = here->HICUMqp0_scaled*(1.0+0.5*model->HICUMzei*(1.0-a)); here->HICUMqp0_t.rpart = a.rpart(); here->HICUMqp0_t.dpart = a.dpart(); //Voltage separating ohmic and saturation velocity regime a = model->HICUMvlim*(1.0-model->HICUMalvs*dT)*exp(model->HICUMzetaci*ln_qtt0); k = (a-vt)/vt; if (k.rpart() < LN_EXP_LIMIT) { a = vt + vt*log(1.0+exp(k)); } here->HICUMvlim_t.rpart = a.rpart(); here->HICUMvlim_t.dpart = a.dpart(); //Neutral emitter storage time a = 1.0+model->HICUMalb*dT; k = 0.5*(a+sqrt(a*a+0.01)); a = model->HICUMtef0*qtt0/k; here->HICUMtef0_t.rpart = a.rpart(); here->HICUMtef0_t.dpart = a.dpart(); } else { //Internal b-e diode saturation currents a = here->HICUMibeis_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1)); here->HICUMibeis_t.rpart = a.rpart(); here->HICUMibeis_t.dpart = a.dpart(); if (model->HICUMflcomp>=2.3) { a = here->HICUMireis_scaled*exp(mg/model->HICUMmrei*ln_qtt0+vgbe0/(model->HICUMmrei*vt)*(qtt0-1)); } else { a = here->HICUMireis_scaled*exp(0.5*mg*ln_qtt0+0.5*vgbe0/vt*(qtt0-1)); } here->HICUMireis_t.rpart = a.rpart(); here->HICUMireis_t.dpart = a.dpart(); //Peripheral b-e diode saturation currents a = here->HICUMibeps_scaled*exp(model->HICUMzetabet*ln_qtt0+model->HICUMvge/vt*(qtt0-1)); here->HICUMibeps_t.rpart = a.rpart(); here->HICUMibeps_t.dpart = a.dpart(); if (model->HICUMflcomp>=2.3) { a = here->HICUMireps_scaled*exp(mg/model->HICUMmrep*ln_qtt0+vgbe0/(model->HICUMmrep*vt)*(qtt0-1)); } else { a = here->HICUMireps_scaled*exp(0.5*mg*qtt0+0.5*vgbe0/vt*(qtt0-1)); } here->HICUMireps_t.rpart = a.rpart(); here->HICUMireps_t.dpart = a.dpart(); //Internal b-c diode saturation currents a = here->HICUMibcis_scaled*exp(zetabci*ln_qtt0+model->HICUMvgc/vt*(qtt0-1)); here->HICUMibcis_t.rpart = a.rpart(); here->HICUMibcis_t.dpart = a.dpart(); //External b-c diode saturation currents a = here->HICUMibcxs_scaled*exp(zetabcxt*ln_qtt0+model->HICUMvgc/vt*(qtt0-1)); here->HICUMibcxs_t.rpart = a.rpart(); here->HICUMibcxs_t.dpart = a.dpart(); //Saturation transfer current for substrate transistor a = model->HICUMitss*exp(zetasct*ln_qtt0+model->HICUMvgc/vt*(qtt0-1)); here->HICUMitss_t.rpart = a.rpart(); here->HICUMitss_t.dpart = a.dpart(); //Saturation current for c-s diode a = model->HICUMiscs*exp(zetasct*ln_qtt0+model->HICUMvgs/vt*(qtt0-1)); here->HICUMiscs_t.rpart = a.rpart(); here->HICUMiscs_t.dpart = a.dpart(); //Zero bias hole charge a = exp(model->HICUMzei*log(vdei_t/model->HICUMvdei)); a = here->HICUMqp0_scaled*(2.0-a); here->HICUMqp0_t.rpart = a.rpart(); here->HICUMqp0_t.dpart = a.dpart(); //Voltage separating ohmic and saturation velocity regime a = model->HICUMvlim*exp((model->HICUMzetaci-avs)*ln_qtt0); here->HICUMvlim_t.rpart = a.rpart(); here->HICUMvlim_t.dpart = a.dpart(); //Neutral emitter storage time if (model->HICUMflcomp >= 2.3) { a = model->HICUMtef0; } else { zetatef = model->HICUMzetabet-model->HICUMzetact-0.5; dvg0 = model->HICUMvgb-model->HICUMvge; a = model->HICUMtef0*exp(zetatef*ln_qtt0-dvg0/vt*(qtt0-1)); } here->HICUMtef0_t.rpart = a.rpart(); here->HICUMtef0_t.dpart = a.dpart(); } //GICCR prefactor a = here->HICUMc10_scaled*exp(model->HICUMzetact*ln_qtt0+model->HICUMvgb/vt*(qtt0-1)); here->HICUMc10_t.rpart = a.rpart(); here->HICUMc10_t.dpart = a.dpart(); // Low-field internal collector resistance a = here->HICUMrci0_scaled*exp(model->HICUMzetaci*ln_qtt0); here->HICUMrci0_t.rpart = a.rpart(); here->HICUMrci0_t.dpart = a.dpart(); //Internal c-e saturation voltage a = model->HICUMvces*(1+model->HICUMalces*dT); here->HICUMvces_t.rpart = a.rpart(); here->HICUMvces_t.dpart = a.dpart(); //Internal b-c junction capacitance hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, here->HICUMcjci0_scaled, model->HICUMvdci, model->HICUMzci, model->HICUMvptci, 0, vgbc0, &here->HICUMcjci0_t.rpart, &here->HICUMvdci_t.rpart, &here->HICUMvptci_t.rpart, &here->HICUMcjci0_t.dpart, &here->HICUMvdci_t.dpart, &here->HICUMvptci_t.dpart); //Low-current forward transit time a = model->HICUMt0*(1+model->HICUMalt0*dT+model->HICUMkt0*dT*dT); here->HICUMt0_t.rpart = a.rpart(); here->HICUMt0_t.dpart = a.dpart(); //Saturation time constant at high current densities a = model->HICUMthcs*exp((model->HICUMzetaci-1)*ln_qtt0); here->HICUMthcs_t.rpart = a.rpart(); here->HICUMthcs_t.dpart = a.dpart(); //Avalanche current factors a = model->HICUMfavl*exp(model->HICUMalfav*dT); here->HICUMfavl_t.rpart = a.rpart(); here->HICUMfavl_t.dpart = a.dpart(); a = here->HICUMqavl_scaled*exp(model->HICUMalqav*dT); here->HICUMqavl_t.rpart = a.rpart(); here->HICUMqavl_t.dpart = a.dpart(); a = model->HICUMkavl*exp(model->HICUMalkav*dT); here->HICUMkavl_t.rpart = a.rpart(); here->HICUMkavl_t.dpart = a.dpart(); //Zero bias internal base resistance a = here->HICUMrbi0_scaled*exp(model->HICUMzetarbi*ln_qtt0); here->HICUMrbi0_t.rpart = a.rpart(); here->HICUMrbi0_t.dpart = a.dpart(); //Peripheral b-e junction capacitance hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, here->HICUMcjep0_scaled, model->HICUMvdep, model->HICUMzep, model->HICUMajep, 1, vgbe0, &here->HICUMcjep0_t.rpart, &here->HICUMvdep_t.rpart, &here->HICUMajep_t.rpart, &here->HICUMcjep0_t.dpart, &here->HICUMvdep_t.dpart, &here->HICUMajep_t.dpart); cjep0_t.rpart(here->HICUMcjep0_t.rpart); cjep0_t.dpart(here->HICUMcjep0_t.dpart); vdep_t.rpart(here->HICUMvdep_t.rpart); vdep_t.dpart(here->HICUMvdep_t.dpart); //Tunneling current factors if (here->HICUMibets_scaled > 0) { // HICTUN_T duals::duald a_eg,ab,aa; ab = 1.0; aa = 1.0; a_eg = vgbe_t0/vgbe_t; if(model->HICUMtunode==1 && here->HICUMcjep0_scaled > 0.0 && model->HICUMvdep >0.0) { ab = (cjep0_t/here->HICUMcjep0_scaled)*sqrt(a_eg)*vdep_t*vdep_t/(model->HICUMvdep*model->HICUMvdep); aa = (model->HICUMvdep/vdep_t)*(here->HICUMcjep0_scaled/cjep0_t)*pow(a_eg,-1.5); } else if (model->HICUMtunode==0 && here->HICUMcjei0_scaled > 0.0 && model->HICUMvdei >0.0) { ab = (cjei0_t/here->HICUMcjei0_scaled)*sqrt(a_eg)*vdei_t*vdei_t/(model->HICUMvdei*model->HICUMvdei); aa = (model->HICUMvdei/vdei_t)*(here->HICUMcjei0_scaled/cjei0_t)*pow(a_eg,-1.5); } a = here->HICUMibets_scaled*ab; here->HICUMibets_t.rpart = a.rpart(); here->HICUMibets_t.dpart = a.dpart(); a = model->HICUMabet*aa; here->HICUMabet_t.rpart = a.rpart(); here->HICUMabet_t.dpart = a.dpart(); } else { here->HICUMibets_t.rpart = 0; here->HICUMibets_t.dpart = 0; here->HICUMabet_t.rpart = 1; here->HICUMabet_t.dpart = 0; } //Depletion capacitance splitting at b-c junction //Capacitances at peripheral and external base node C_1 = (1.0-model->HICUMfbcpar)*(here->HICUMcjcx0_scaled+here->HICUMcbcpar_scaled); if (C_1 >= here->HICUMcbcpar_scaled) { cjcx01 = C_1-here->HICUMcbcpar_scaled; cjcx02 = here->HICUMcjcx0_scaled-cjcx01; } else { cjcx01 = 0.0; cjcx02 = here->HICUMcjcx0_scaled; } //Temperature mapping for tunneling current is done inside HICTUN hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, 1.0, model->HICUMvdcx, model->HICUMzcx, model->HICUMvptcx, 0, vgbc0, &cratio_t_real, &here->HICUMvdcx_t.rpart, &here->HICUMvptcx_t.rpart, &cratio_t_dual, &here->HICUMvdcx_t.dpart, &here->HICUMvptcx_t.dpart); cratio_t.rpart(cratio_t_real); cratio_t.dpart(cratio_t_dual); a = cratio_t*cjcx01; here->HICUMcjcx01_t.rpart = a.rpart(); here->HICUMcjcx01_t.dpart = a.dpart(); a = cratio_t*cjcx02; here->HICUMcjcx02_t.rpart = a.rpart(); here->HICUMcjcx02_t.dpart = a.dpart(); //Constant external series resistances a = here->HICUMrcx_scaled*exp(model->HICUMzetarcx*ln_qtt0); here->HICUMrcx_t.rpart = a.rpart(); here->HICUMrcx_t.dpart = a.dpart(); a = here->HICUMrbx_scaled*exp(model->HICUMzetarbx*ln_qtt0); here->HICUMrbx_t.rpart = a.rpart(); here->HICUMrbx_t.dpart = a.dpart(); a = here->HICUMre_scaled*exp(model->HICUMzetare*ln_qtt0); here->HICUMre_t.rpart = a.rpart(); here->HICUMre_t.dpart = a.dpart(); //Forward transit time in substrate transistor a = model->HICUMtsf*exp((model->HICUMzetacx-1.0)*ln_qtt0); here->HICUMtsf_t.rpart = a.rpart(); here->HICUMtsf_t.dpart = a.dpart(); //Capacitance for c-s junction hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, model->HICUMcjs0, model->HICUMvds, model->HICUMzs, model->HICUMvpts, 0, vgsc0, &here->HICUMcjs0_t.rpart, &here->HICUMvds_t.rpart, &here->HICUMvpts_t.rpart, &here->HICUMcjs0_t.dpart, &here->HICUMvds_t.dpart, &here->HICUMvpts_t.dpart); /*Peripheral s-c capacitance * Note, thermal update only required for model->HICUMvds > 0 * Save computional effort otherwise */ if (model->HICUMvdsp > 0) { hicum_TMPHICJ(vt, here->HICUMvt0, qtt0, ln_qtt0, mg, model->HICUMcscp0, model->HICUMvdsp, model->HICUMzsp, model->HICUMvptsp, 0, vgsc0, &here->HICUMcscp0_t.rpart, &here->HICUMvdsp_t.rpart, &here->HICUMvptsp_t.rpart, &here->HICUMcscp0_t.dpart, &here->HICUMvdsp_t.dpart, &here->HICUMvptsp_t.dpart); } else { // Avoid uninitialized variables here->HICUMcscp0_t.rpart = model->HICUMcscp0; here->HICUMcscp0_t.dpart = 0; here->HICUMvdsp_t.rpart = model->HICUMvdsp; here->HICUMvdsp_t.dpart = 0; here->HICUMvptsp_t.rpart = model->HICUMvptsp; here->HICUMvptsp_t.dpart = 0; } a = model->HICUMahjei*exp(model->HICUMzetahjei*ln_qtt0); here->HICUMahjei_t.rpart = a.rpart(); here->HICUMahjei_t.dpart = a.dpart(); a = model->HICUMhjei*exp(model->HICUMdvgbe/vt*(exp(model->HICUMzetavgbe*log(qtt0))-1)); here->HICUMhjei0_t.rpart = a.rpart(); here->HICUMhjei0_t.dpart = a.dpart(); a = model->HICUMhf0*exp(model->HICUMdvgbe/vt*(qtt0-1)); here->HICUMhf0_t.rpart = a.rpart(); here->HICUMhf0_t.dpart = a.dpart(); if (model->HICUMflcomp >= 2.3) { a = model->HICUMhfe*exp((model->HICUMvgb-model->HICUMvge)/vt*(qtt0-1)); here->HICUMhfe_t.rpart = a.rpart(); here->HICUMhfe_t.dpart = a.dpart(); a = model->HICUMhfc*exp((model->HICUMvgb-model->HICUMvgc)/vt*(qtt0-1)); here->HICUMhfc_t.rpart = a.rpart(); here->HICUMhfc_t.dpart = a.dpart(); } else { here->HICUMhfe_t.rpart = model->HICUMhfe; here->HICUMhfe_t.dpart = 0; here->HICUMhfc_t.rpart = model->HICUMhfc; here->HICUMhfc_t.dpart = 0; } a = here->HICUMrth_scaled*exp(model->HICUMzetarth*ln_qtt0)*(1+model->HICUMalrth*dT); here->HICUMrth_t.rpart = a.rpart(); here->HICUMrth_t.dpart = a.dpart(); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2conv.c0000644000175000017500000002607314163340332022574 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ /* * This routine performs the device convergence test for * HICUMs in the circuit. */ #include "ngspice/ngspice.h" #include "ngspice/cktdefs.h" #include "hicum2defs.h" #include "ngspice/sperror.h" #include "ngspice/suffix.h" int HICUMconvTest(GENmodel *inModel, CKTcircuit *ckt) { HICUMinstance *here; HICUMmodel *model = (HICUMmodel *) inModel; double tol; double delvbiei; double delvbici; double delvbpei; double delvbpbi; double delvbpci; double delvsici; double delvrth; double delvciei; double delvcic; double delvbbp; double delveie; double delvxf; double ibieihat; double ibicihat; double icieihat; double ibpeihat; double ibpbihat; double ibpcihat; double ibpsihat; double isicihat; double volatile ithhat; double Vbiei, Vbici, Vbpei, Vbpbi, Vbpci, Vsici, Vrth, Vcic, Vbbp, Veie, Vxf; double Ibiei, Ibici, Iciei, Ibpei, Ibpbi, Ibpci, Ibpsi, Isici, Ith; for( ; model != NULL; model = HICUMnextModel(model)) { for(here=HICUMinstances(model);here!=NULL;here = HICUMnextInstance(here)) { Vbiei= model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBINode)- *(ckt->CKTrhsOld+here->HICUMemitEINode)); Vbici = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBINode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vbpei = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMemitEINode)); Vbpbi = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMbaseBINode)); Vbpci = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseBPNode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vsici = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMsubsSINode)- *(ckt->CKTrhsOld+here->HICUMcollCINode)); Vcic = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMcollCINode)- *(ckt->CKTrhsOld+here->HICUMcollNode)); Vbbp = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMbaseBPNode)); Veie = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMemitNode)- *(ckt->CKTrhsOld+here->HICUMemitEINode)); Vxf = *(ckt->CKTrhsOld+here->HICUMxfNode); Vrth = model->HICUMtype*(*(ckt->CKTrhsOld+here->HICUMtempNode)); delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth); delvbiei = Vbiei - *(ckt->CKTstate0 + here->HICUMvbiei); delvbici = Vbici - *(ckt->CKTstate0 + here->HICUMvbici); delvbpei = Vbpei - *(ckt->CKTstate0 + here->HICUMvbpei); delvbpbi = Vbpbi - *(ckt->CKTstate0 + here->HICUMvbpbi); delvbpci = Vbpci - *(ckt->CKTstate0 + here->HICUMvbpci); delvsici = Vsici - *(ckt->CKTstate0 + here->HICUMvsici); delvciei = delvbiei-delvbici; delvcic = Vcic - *(ckt->CKTstate0 + here->HICUMvcic); delvbbp = Vbbp - *(ckt->CKTstate0 + here->HICUMvbbp); delveie = Veie - *(ckt->CKTstate0 + here->HICUMveie); delvxf = Vxf - *(ckt->CKTstate0 + here->HICUMvxf); //todo: maybe add ibiei_Vxf ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibiei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici + *(ckt->CKTstate0 + here->HICUMibiei_Vxf)*delvxf; ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ *(ckt->CKTstate0 + here->HICUMibici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; icieihat = *(ckt->CKTstate0 + here->HICUMiciei) + *(ckt->CKTstate0 + here->HICUMiciei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMiciei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMiciei_Vbici)*delvbici; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + *(ckt->CKTstate0 + here->HICUMibpei_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei; ibpbihat = *(ckt->CKTstate0 + here->HICUMibpbi) + *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibpbi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpbi_Vbici)*delvbici; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + *(ckt->CKTstate0 + here->HICUMibpci_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibpci_Vbpci)*delvbici; ibpsihat = *(ckt->CKTstate0 + here->HICUMibpsi) + *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci)*delvbpci + *(ckt->CKTstate0 + here->HICUMibpsi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpsi_Vsici)*delvsici; isicihat = *(ckt->CKTstate0 + here->HICUMisici) + *(ckt->CKTstate0 + here->HICUMisici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMisici_Vsici)*delvsici; ithhat = *(ckt->CKTstate0 + here->HICUMith) + *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMith_Vbiei)*delvbiei+ *(ckt->CKTstate0 + here->HICUMith_Vbici)*delvbici+ *(ckt->CKTstate0 + here->HICUMith_Vbpbi)*delvbpbi+ *(ckt->CKTstate0 + here->HICUMith_Vbpci)*delvbpci+ *(ckt->CKTstate0 + here->HICUMith_Vbpei)*delvbpei+ *(ckt->CKTstate0 + here->HICUMith_Vciei)*delvciei+ *(ckt->CKTstate0 + here->HICUMith_Vsici)*delvsici+ *(ckt->CKTstate0 + here->HICUMith_Vcic)*delvcic+ *(ckt->CKTstate0 + here->HICUMith_Vbbp)*delvbbp+ *(ckt->CKTstate0 + here->HICUMith_Veie)*delveie; Ibiei = *(ckt->CKTstate0 + here->HICUMibiei); Ibici = *(ckt->CKTstate0 + here->HICUMibici); Iciei = *(ckt->CKTstate0 + here->HICUMiciei); Ibpei = *(ckt->CKTstate0 + here->HICUMibpei); Ibpbi = *(ckt->CKTstate0 + here->HICUMibpbi); Ibpci = *(ckt->CKTstate0 + here->HICUMibpci); Ibpsi = *(ckt->CKTstate0 + here->HICUMibpsi); Isici = *(ckt->CKTstate0 + here->HICUMisici); Ith = *(ckt->CKTstate0 + here->HICUMith); /* * check convergence */ tol=ckt->CKTreltol*MAX(fabs(ibieihat),fabs(Ibiei))+ckt->CKTabstol; if (fabs(ibieihat-Ibiei) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibicihat),fabs(Ibici))+ckt->CKTabstol; if (fabs(ibicihat-Ibici) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(icieihat),fabs(Iciei))+ckt->CKTabstol; if (fabs(icieihat-Iciei) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibpeihat),fabs(Ibpei))+ckt->CKTabstol; if (fabs(ibpeihat-Ibpei) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibpbihat),fabs(Ibpbi))+ckt->CKTabstol; if (fabs(ibpbihat-Ibpbi) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibpcihat),fabs(Ibpci))+ckt->CKTabstol; if (fabs(ibpcihat-Ibpci) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ibpsihat),fabs(Ibpsi))+ckt->CKTabstol; if (fabs(ibpsihat-Ibpsi) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(isicihat),fabs(Isici))+ckt->CKTabstol; if (fabs(isicihat-Isici) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { tol=ckt->CKTreltol*MAX(fabs(ithhat),fabs(Ith))+ckt->CKTabstol; if (fabs(ithhat-Ith) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } } } } } } } } } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2itf.h0000644000175000017500000000043714163340332022412 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef DEV_HICUM #define DEV_HICUM extern SPICEdev *get_hicum_info(void); #endif tmp_ns50wwy/src/spicelib/devices/hicum2/hicum2init.h0000644000175000017500000000071714163340332022574 0ustar carstencarsten/********** License : 3-clause BSD Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher Model Author : 1990 Michael Schröter TU Dresden **********/ #ifndef _HICUMINIT_H #define _HICUMINIT_H extern IFparm HICUMpTable[ ]; extern IFparm HICUMmPTable[ ]; extern char *HICUMnames[ ]; extern int HICUMpTSize; extern int HICUMmPTSize; extern int HICUMnSize; extern int HICUMiSize; extern int HICUMmSize; #endif tmp_ns50wwy/src/spicelib/devices/jfet/0000755000175000017500000000000014163340332020104 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/jfet/jfetinit.c0000644000175000017500000000316414163340332022070 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; } tmp_ns50wwy/src/spicelib/devices/jfet/jfet.c0000644000175000017500000001163314163340332021204 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("tcv", JFET_MOD_TCV, IF_REAL, "Threshold voltage temperature coefficient"), IOP("vtotc", JFET_MOD_VTOTC, IF_REAL, "Threshold voltage temperature coefficient alternative"), IOP("bex", JFET_MOD_BEX, IF_REAL, "Mobility temperature exponent"), IOP("betatce", JFET_MOD_BETATCE, IF_REAL, "Mobility temperature exponent alternative"), IOP("xti", JFET_MOD_XTI, IF_REAL, "Gate junction saturation current temperature exponent"), IOP("eg", JFET_MOD_EG, IF_REAL, "Bandgap voltage"), IOP("kf", JFET_MOD_KF, IF_REAL, "Flicker Noise Coefficient"), IOP("af", JFET_MOD_AF, IF_REAL, "Flicker Noise 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); tmp_ns50wwy/src/spicelib/devices/jfet/Makefile.am0000644000175000017500000000076214163340332022145 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 tmp_ns50wwy/src/spicelib/devices/jfet/jfetdefs.h0000644000175000017500000002331314163340332022051 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 JFETvtotc; double JFETbex; double JFETbetatce; double JFETxti; double JFETeg; 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 JFETtcvGiven : 1; unsigned JFETvtotcGiven : 1; unsigned JFETbexGiven : 1; unsigned JFETbetatceGiven : 1; unsigned JFETxtiGiven : 1; unsigned JFETegGiven : 1; unsigned JFETfNcoefGiven : 1; unsigned JFETfNexpGiven : 1; unsigned JFETnlevGiven : 1; unsigned JFETgdsnoiGiven : 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_B, /* Modification for Sydney University JFET model */ JFET_MOD_TCV, JFET_MOD_VTOTC, JFET_MOD_BEX, JFET_MOD_BETATCE, JFET_MOD_XTI, JFET_MOD_EG, JFET_MOD_KF, JFET_MOD_AF, 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*/ tmp_ns50wwy/src/spicelib/devices/jfet/jfettemp.c0000644000175000017500000001176214163340332022075 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; if (model->JFETxtiGiven) { here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/vt) * pow(ratio1+1,model->JFETxti); } else { here->JFETtSatCur = model->JFETgateSatCurrent * exp(ratio1*model->JFETeg/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)); if (model->JFETvtotcGiven) { here->JFETtThreshold = model->JFETthreshold + model->JFETvtotc*(here->JFETtemp-model->JFETtnom); } else { here->JFETtThreshold = model->JFETthreshold - model->JFETtcv*(here->JFETtemp-model->JFETtnom); } if (model->JFETbetatceGiven) { here->JFETtBeta = model->JFETbeta * pow(1.01,model->JFETbetatce*(here->JFETtemp-model->JFETtnom)); } else { here->JFETtBeta = model->JFETbeta * pow(here->JFETtemp/model->JFETtnom,model->JFETbex); } } } return(OK); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetpar.c0000644000175000017500000000376014163340332021711 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: /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (value->v.numValue) { case 2: here->JFETicVGS = *(value->v.vec.rVec+1); here->JFETicVGSGiven = TRUE; /* FALLTHROUGH */ case 1: here->JFETicVDS = *(value->v.vec.rVec); here->JFETicVDSGiven = TRUE; break; default: return(E_BADPARM); } break; default: return(E_BADPARM); } return(OK); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetdist.c0000644000175000017500000005273714163340332022102 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetmask.c0000644000175000017500000000673114163340332022063 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_TCV: value->rValue = model->JFETtcv; return(OK); case JFET_MOD_VTOTC: value->rValue = model->JFETvtotc; return(OK); case JFET_MOD_BEX: value->rValue = model->JFETbex; return(OK); case JFET_MOD_BETATCE: value->rValue = model->JFETbetatce; return(OK); case JFET_MOD_XTI: value->rValue = model->JFETxti; return(OK); case JFET_MOD_EG: value->rValue = model->JFETeg; return(OK); case JFET_MOD_TYPE: if (model->JFETtype == NJF) value->sValue = "njf"; else value->sValue = "pjf"; 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_NLEV: value->iValue = model->JFETnlev; return(OK); case JFET_MOD_GDSNOI: value->rValue = model->JFETgdsnoi; return(OK); default: return(E_BADPARM); } /* NOTREACHED */ } tmp_ns50wwy/src/spicelib/devices/jfet/jfetext.h0000644000175000017500000000166614163340332021737 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*); tmp_ns50wwy/src/spicelib/devices/jfet/jfetpzld.c0000644000175000017500000000654514163340332022104 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetset.c0000644000175000017500000001706514163340332021725 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; } /* 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->JFETvtotcGiven) { model->JFETvtotc = 0.0; } if(!model->JFETbexGiven) { model->JFETbex = 0.0; } if(!model->JFETbetatceGiven) { model->JFETbetatce = 0.0; } if(!model->JFETxtiGiven) { model->JFETxti = 3.0; } if(!model->JFETegGiven) { model->JFETeg = 1.11; } if(!model->JFETfNcoefGiven) { model->JFETfNcoef = 0; } if(!model->JFETfNexpGiven) { model->JFETfNexp = 1; } 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; } tmp_ns50wwy/src/spicelib/devices/jfet/jfetnoi.c0000644000175000017500000002122514163340332021710 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetic.c0000644000175000017500000000214414163340332021515 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfettrun.c0000644000175000017500000000126314163340332022113 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetitf.h0000644000175000017500000000026014163340332021706 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 tmp_ns50wwy/src/spicelib/devices/jfet/jfetacld.c0000644000175000017500000000537014163340332022031 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetinit.h0000644000175000017500000000037014163340332022071 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 tmp_ns50wwy/src/spicelib/devices/jfet/jfetmpar.c0000644000175000017500000000751414163340332022067 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; /* 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_VTOTC: model->JFETvtotcGiven = TRUE; model->JFETvtotc = value->rValue; break; case JFET_MOD_BETATCE: model->JFETbetatceGiven = TRUE; model->JFETbetatce = value->rValue; break; case JFET_MOD_BEX: model->JFETbexGiven = TRUE; model->JFETbex = value->rValue; break; case JFET_MOD_XTI: model->JFETxtiGiven = TRUE; model->JFETxti = value->rValue; break; case JFET_MOD_EG: model->JFETegGiven = TRUE; model->JFETeg = value->rValue; 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; 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetask.c0000644000175000017500000001202414163340332021676 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 */ } tmp_ns50wwy/src/spicelib/devices/jfet/jfetdset.c0000644000175000017500000002064614163340332022070 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); } tmp_ns50wwy/src/spicelib/devices/jfet/jfetload.c0000644000175000017500000005243014163340332022044 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); } tmp_ns50wwy/src/spicelib/devices/csw/0000755000175000017500000000000014163340332017750 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/csw/cswitf.h0000644000175000017500000000026414163340332021422 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 tmp_ns50wwy/src/spicelib/devices/csw/csw.c0000644000175000017500000000274114163340332020714 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); tmp_ns50wwy/src/spicelib/devices/csw/Makefile.am0000644000175000017500000000066114163340332022007 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 tmp_ns50wwy/src/spicelib/devices/csw/cswmask.c0000644000175000017500000000215614163340332021570 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; } } tmp_ns50wwy/src/spicelib/devices/csw/cswacld.c0000644000175000017500000000162214163340332021535 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswext.h0000644000175000017500000000137414163340332021443 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 *); tmp_ns50wwy/src/spicelib/devices/csw/cswinit.c0000644000175000017500000000313614163340332021577 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswtrunc.c0000644000175000017500000000343114163340332021765 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswparam.c0000644000175000017500000000143414163340332021733 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswpzld.c0000644000175000017500000000172014163340332021602 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswdefs.h0000644000175000017500000000655614163340332021573 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 tmp_ns50wwy/src/spicelib/devices/csw/cswask.c0000644000175000017500000000364114163340332021413 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; } } tmp_ns50wwy/src/spicelib/devices/csw/cswload.c0000644000175000017500000001453614163340332021561 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; // ckt->CKTstate0[here->CSWctrlvalue] = i_ctrl; /* FIXME: without this statement truncation is not used, as with SW. But test are needed to check if improvments are possible. */ 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswinit.h0000644000175000017500000000035314163340332021602 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 tmp_ns50wwy/src/spicelib/devices/csw/cswsetup.c0000644000175000017500000000413714163340332021776 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)) == NULL) \ 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswnoise.c0000644000175000017500000001054014163340332021746 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; } tmp_ns50wwy/src/spicelib/devices/csw/cswmpar.c0000644000175000017500000000234214163340332021571 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; } tmp_ns50wwy/src/spicelib/devices/ind/0000755000175000017500000000000014163340332017726 5ustar carstencarstentmp_ns50wwy/src/spicelib/devices/ind/Makefile.am0000644000175000017500000000113314163340332021760 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 tmp_ns50wwy/src/spicelib/devices/ind/indpzld.c0000644000175000017500000000177414163340332021547 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); } tmp_ns50wwy/src/spicelib/devices/ind/indsprt.c0000644000175000017500000000262614163340332021563 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); } } } tmp_ns50wwy/src/spicelib/devices/ind/indask.c0000644000175000017500000001154714163340332021353 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 */ } tmp_ns50wwy/src/spicelib/devices/ind/muttemp.c0000644000175000017500000001761714163340332021601 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); } tmp_ns50wwy/src/spicelib/devices/ind/indsset.c0000644000175000017500000000173514163340332021551 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); } tmp_ns50wwy/src/spicelib/devices/ind/indsupd.c0000644000175000017500000001156714163340332021552 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); } tmp_ns50wwy/src/spicelib/devices/ind/ind.c0000644000175000017500000001000314163340332020636 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); tmp_ns50wwy/src/spicelib/devices/ind/mutparam.c0000644000175000017500000000163514163340332021725 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); } tmp_ns50wwy/src/spicelib/devices/ind/indext.h0000644000175000017500000000260414163340332021374 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 tmp_ns50wwy/src/spicelib/devices/ind/indsload.c0000644000175000017500000001137014163340332021671 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); } tmp_ns50wwy/src/spicelib/devices/ind/indtrunc.c0000644000175000017500000000122014163340332021713 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); } tmp_ns50wwy/src/spicelib/devices/ind/inditf.h0000644000175000017500000000031314163340332021351 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 tmp_ns50wwy/src/spicelib/devices/ind/mutsprt.c0000644000175000017500000000271214163340332021612 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); } } } tmp_ns50wwy/src/spicelib/devices/ind/indacld.c0000644000175000017500000000164114163340332021472 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); } tmp_ns50wwy/src/spicelib/devices/ind/indinit.c0000644000175000017500000000574014163340332021536 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; } tmp_ns50wwy/src/spicelib/devices/ind/mutsset.c0000644000175000017500000000200214163340332021570 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); } tmp_ns50wwy/src/spicelib/devices/ind/indtemp.c0000644000175000017500000000435214163340332021536 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); } tmp_ns50wwy/src/spicelib/devices/ind/indsetup.c0000644000175000017500000000711514163340332021731 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; } tmp_ns50wwy/src/spicelib/devices/ind/indload.c0000644000175000017500000001103614163340332021505 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))) { /* set initial conditions for mutual inductance here, if uic is set */ if (ckt->CKTmode & MODEUIC && ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate0 + muthere->MUTind1->INDflux) += muthere->MUTfactor * muthere->MUTind2->INDinitCond; *(ckt->CKTstate0 + muthere->MUTind2->INDflux) += muthere->MUTfactor * muthere->MUTind1->INDinitCond; } else { *(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); } tmp_ns50wwy/src/spicelib/devices/ind/indmpar.c0000644000175000017500000000263314163340332021530 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); } tmp_ns50wwy/src/spicelib/devices/ind/mutpzld.c0000644000175000017500000000166014163340332021574 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); } tmp_ns50wwy/src/spicelib/devices/ind/indsacl.c0000644000175000017500000001416314163340332021514 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 = %d,senparmno = %d\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); } tmp_ns50wwy/src/spicelib/devices/ind/indparam.c0000644000175000017500000000314114163340332021664 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); } tmp_ns50wwy/src/spicelib/devices/ind/indmask.c0000644000175000017500000000230614163340332021521 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); } } tmp_ns50wwy/src/spicelib/devices/ind/inddefs.h0000644000175000017500000001651414163340332021522 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*/ tmp_ns50wwy/src/spicelib/devices/ind/indinit.h0000644000175000017500000000051414163340332021535 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 tmp_ns50wwy/src/spicelib/devices/ind/mutacld.c0000644000175000017500000000136214163340332021525 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); } tmp_ns50wwy/src/spicelib/devices/ind/mutsetup.c0000644000175000017500000000456114163340332021766 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); } tmp_ns50wwy/src/spicelib/devices/ind/mutask.c0000644000175000017500000000643114163340332021402 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 */ } tmp_ns50wwy/src/spicelib/devices/cktaccept.h0000644000175000017500000000006314163340332021265 0ustar carstencarsten#ifndef _CKTACCEPT_H #define _CKTACCEPT_H #endif tmp_ns50wwy/src/spicelib/parser/0000755000175000017500000000000014163340332017026 5ustar carstencarstentmp_ns50wwy/src/spicelib/parser/inp2t.c0000644000175000017500000000452314163340332020232 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)); } tmp_ns50wwy/src/spicelib/parser/inpxx.h0000644000175000017500000000574314163340332020356 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 tmp_ns50wwy/src/spicelib/parser/inp2dot.c0000644000175000017500000006566614163340332020574 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; } tmp_ns50wwy/src/spicelib/parser/inppas2.h0000644000175000017500000000013414163340332020551 0ustar carstencarsten#ifndef ngspice_INPPAS2_H #define ngspice_INPPAS2_H #include "ngspice/inpdefs.h" #endif tmp_ns50wwy/src/spicelib/parser/inpaname.c0000644000175000017500000000462214163340332020766 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); } tmp_ns50wwy/src/spicelib/parser/sperror.c0000644000175000017500000000451714163340332020675 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; } tmp_ns50wwy/src/spicelib/parser/inpfindl.c0000644000175000017500000000410114163340332020771 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); } } tmp_ns50wwy/src/spicelib/parser/inp2p.c0000644000175000017500000001021014163340332020214 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') { INPgetNetTok(&line, &tempname,1); if ((strcmp(tempname, "length") == 0) || (strcmp(tempname, "len") == 0)) break; num ++; } num = (num - 2) / 2; line = current->line; INPgetNetTok(&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])); } INPgetNetTok(&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])); } INPgetNetTok(&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)); INPgetNetTok(&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; } tmp_ns50wwy/src/spicelib/parser/inppname.c0000644000175000017500000000237614163340332021011 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); } tmp_ns50wwy/src/spicelib/parser/Makefile.am0000644000175000017500000000231714163340332021065 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 \ inppas4.c \ inppas4.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 tmp_ns50wwy/src/spicelib/parser/inpgmod.c0000644000175000017500000004270214163340332020634 0ustar carstencarsten/********** Copyright 1990 Regents of the University of California. All rights reserved. Copyright 2000 The ngspice team 3-Clause BSD license (see COPYING or https://opensource.org/licenses/BSD-3-Clause) 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 "ngspice/compatmode.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) || (strcmp(parm, "m") == 0)) { /* no instance parameter default for level and multiplier */ /* just grab the 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-9; } static bool in_range(double value, double min, double max) { /* the standard binning rule is: min <= value < max */ return is_equal(value, min) || is_equal(value, max) || (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", "nf", "wnflag" }; static char *model_tokens[] = { "lmin", "lmax", "wmin", "wmax" }; double scale; int wnflag; if (!cp_getvar("scale", CP_REAL, &scale, 0)) scale = 1; if (!cp_getvar("wnflag", CP_NUM, &wnflag, 0)) { if (newcompat.spe || newcompat.hs) wnflag = 1; else wnflag = 0; } *model = NULL; /* read W and L. If not on the instance line, leave */ if (!parse_line(line, instance_tokens, 2, parse_values, parse_found)) return NULL; /* This is for reading nf. If nf is not available, set to 1 if in HSPICE or Spectre compatibility mode */ if (!parse_line(line, instance_tokens, 3, parse_values, parse_found)) { parse_values[2] = 1.; /* divisor */ } /* This is for reading wnflag from instance. If it is not available, no change. If instance wnflag == 0, set divisor to 1, else use instance nf */ else if (parse_line(line, instance_tokens, 4, parse_values, parse_found)) { /* wnflag from instance overrules: no use of nf */ if (parse_values[3] == 0) { parse_values[2] = 1.; /* divisor */ } } /* We do have nf, but no wnflag on the instance. Now it depends on the default wnflag or on the .options wnflag */ else { if (wnflag == 0) parse_values[2] = 1.; /* divisor */ } l = parse_values[0] * scale; w = parse_values[1] / parse_values[2] * 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\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 = NULL; /* 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 */ tmp_ns50wwy/src/spicelib/parser/inp2i.c0000644000175000017500000000412514163340332020215 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)); } } tmp_ns50wwy/src/spicelib/parser/inpfindv.c0000644000175000017500000000242014163340332021005 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 */ if (sscanf(where, "%s", version) != 1) { /* We get the version number */ sprintf( version, "default" ); printf("Warning -- Version not specified correct on line \"%s\"\nSetting version to 'default'.\n", line); } 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); } } tmp_ns50wwy/src/spicelib/parser/inppas3.c0000644000175000017500000001403414163340332020551 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 node is not found, issue a warning, ignore the defective token */ if (INPtermSearch(ckt, &nodename, tab, &node1) != E_EXISTS) { fprintf(stderr, "Warning : Nodeset on non-existent node - %s, ignored\n", nodename); fprintf(stderr, " Please check line %s\n\n", current->line); FREE(name); /* Gobble the rest of the token */ line = nexttok(line); continue; } 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 node is not found, issue a warning, ignore the defective token */ if (INPtermSearch(ckt, &nodename, tab, &node1) != E_EXISTS) { fprintf(stderr, "Warning : IC on non-existent node - %s, ignored\n", nodename); fprintf(stderr, " Please check line %s\n\n", current->line); FREE(name); /* Gobble the rest of the token */ line = nexttok(line); continue; } 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; } tmp_ns50wwy/src/spicelib/parser/inpdpar.c0000644000175000017500000001042214163340332020626 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) { if (cieq(parameter, "$")) { errbuf = copy(" unknown parameter ($). Check the compatibility flag!\n"); } else { 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); if (rtn && error == E_BADPARM) { /* add the parameter name to error message */ char* extended_rtn = tprintf("%s: %s", p->keyword, rtn); tfree(rtn); rtn = extended_rtn; } 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) { if (eq(parm, "$")) { errbuf = copy(" unknown parameter ($). Check the compatibility flag!\n"); } else { 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; } tmp_ns50wwy/src/spicelib/parser/inp2z.c0000644000175000017500000000655614163340332020250 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)); } } tmp_ns50wwy/src/spicelib/parser/inp2g.c0000644000175000017500000000467314163340332020223 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)); } } tmp_ns50wwy/src/spicelib/parser/inpdomod.c0000644000175000017500000004513614163340332021014 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; #endif case 8: type = INPtypelook("hicum2"); if(type < 0) { err = INPmkTemp( "Device type HICUM2 not available in this binary\n"); } break; 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, 8, 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: case 77: type = INPtypelook("BSIMBULK"); if (type < 0) { err = INPmkTemp ("Device type BSIMBULK not available in this binary\n");} break; case 17: case 72: type = INPtypelook("BSIMCMG"); if (type < 0) { err = INPmkTemp ("Device type BSIMCMG 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; case 69: type = INPtypelook("psp103"); if (type < 0) { err = INPmkTemp ("Device type PSP103 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,16,17,44,45,49,54-58,60,68,72,73,77 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) { err = INPfindLev(line,&lev); switch(lev) { case 0: case 1: default: type = INPtypelook("Resistor"); if (type < 0) { err = INPmkTemp ("Device type Resistor not available in this binary\n"); } break; #ifdef ADMS case 2: type = INPtypelook("r2_cmc"); if (type < 0) { err = INPmkTemp( "Device type R2_CMC not available in this binary\n"); } break; #endif } 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); } tmp_ns50wwy/src/spicelib/parser/inp2k.c0000644000175000017500000000347714163340332020230 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)); } } tmp_ns50wwy/src/spicelib/parser/inp2v.c0000644000175000017500000000412514163340332020232 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)); } } tmp_ns50wwy/src/spicelib/parser/inpgtok.c0000644000175000017500000002113214163340332020644 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); } tmp_ns50wwy/src/spicelib/parser/inppas1.h0000644000175000017500000000013314163340332020547 0ustar carstencarsten#ifndef ngspice_INPPAS1_H #define ngspice_INPPAS1_H #include "ngspice/inpdefs.h" #endif tmp_ns50wwy/src/spicelib/parser/inp2q.c0000644000175000017500000000754614163340332020237 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_max_numnodes(int type) { if (type == INPtypelook("VBIC") || type == INPtypelook("hicum2")) return 5; #ifdef ADMS if (type == INPtypelook("hicum0") || type == INPtypelook("bjt504t")) 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_max_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("bjt504t") && #endif thismodel->INPmodType != INPtypelook("hicum2") && 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)); } } tmp_ns50wwy/src/spicelib/parser/inpsymt.c0000644000175000017500000001665614163340332020713 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); } /* Just tests for the existence of a node. If node is found, its token and node adresses are fed back. Return value 0 if no node is found, E_EXISTS if its already there */ int INPtermSearch(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); } } return (0); } tmp_ns50wwy/src/spicelib/parser/inptyplk.c0000644000175000017500000000256114163340332021050 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] && strcasecmp(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; } tmp_ns50wwy/src/spicelib/parser/inpdoopt.c0000644000175000017500000000404514163340332021031 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); } } tmp_ns50wwy/src/spicelib/parser/inperrc.c0000644000175000017500000000434414163340332020641 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 */ tmp_ns50wwy/src/spicelib/parser/inpgval.c0000644000175000017500000000750214163340332020636 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 error, and first character of remaining line is ')', everything is o.k. If first token is already in error, return NULL.*/ temp.v.numValue = 0; list = TMALLOC(double, 1); tmp = INPevaluate(line, &error, 1); if (error) { if(ft_ngdebug) fprintf(stderr, "\nError: Could not read parameter in front of\n %s\n", *line); 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, "") && !prefix(")", *line)) { fprintf(stderr, "\nWarning: Reading a vector without limiting parens may be dangerous\n%s\nat\n", compline); fprintf(stderr, "%*s%s\n", (int)(*line - compline)," ", *line); } temp.v.vec.rVec = list; } else if (type == IF_INTVEC) { /* read until error occurs. If error, and first character of remaining line is ')', everything is o.k. 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, "") && !prefix(")", *line)) { fprintf(stderr, "\nWarning: Reading a vector without limiting parens may be dangerous\n%s\nat\n", compline); fprintf(stderr, "%*s%s\n", (int)(*line - 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; } tmp_ns50wwy/src/spicelib/parser/inp2d.c0000644000175000017500000000714414163340332020214 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 */ const int max_i = 3;/* the maximum node count */ CKTnode *node[3]; 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 */ IFuid uid; /* uid of default model */ int i; 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); for (i = 0; ; i++) { char *token; INPgetNetTok(&line, &token, 1); if (i >= 2 && 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]); } if (i > max_i) { LITERR("Too many nodes for this model type"); return; } numnodes = i; 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)); for (i = 0; i < max_i; i++) if (i < numnodes) IFC (bindNode, (ckt, fast, i + 1, node[i])); else if (thismodel->INPmodType != INPtypelook("NUMD") && (thismodel->INPmodType != INPtypelook("NUMD2"))) GENnode(fast)[i] = -1; 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 } tmp_ns50wwy/src/spicelib/parser/inpgtitl.c0000644000175000017500000000121414163340332021022 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); } tmp_ns50wwy/src/spicelib/parser/inppas1.c0000644000175000017500000000230414163340332020544 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 */ } } tmp_ns50wwy/src/spicelib/parser/inp2n.c0000644000175000017500000000701214163340332020220 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 tmp_ns50wwy/src/spicelib/parser/inp2e.c0000644000175000017500000000465614163340332020222 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)); } } tmp_ns50wwy/src/spicelib/parser/inp2m.c0000644000175000017500000001334614163340332020226 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; } #ifdef ADMS if (type == INPtypelook("BSIMBULK") || /* bsimbulk.va */ type == INPtypelook("BSIMCMG")) /* bsimcmg.va */ { return 5; } #endif if (type == INPtypelook("VDMOS")) /* 3 ; VDMOSnames */ { return 5; } 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]); } /* We have at least 4 nodes, except for VDMOS */ if (i == 3 && thismodel->INPmodType != INPtypelook("VDMOS")) { LITERR("not enough nodes"); return; } 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") && thismodel->INPmodType != INPtypelook("psp103") && thismodel->INPmodType != INPtypelook("bsimbulk") && thismodel->INPmodType != INPtypelook("bsimcmg") && #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"); } tmp_ns50wwy/src/spicelib/parser/inpgstr.c0000644000175000017500000000342114163340332020660 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); } tmp_ns50wwy/src/spicelib/parser/inp2o.c0000644000175000017500000000577114163340332020233 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)); } tmp_ns50wwy/src/spicelib/parser/ChangeLog0000644000175000017500000001051514163340332020602 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 tmp_ns50wwy/src/spicelib/parser/inpcfix.c0000644000175000017500000000063714163340332020640 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++; } } tmp_ns50wwy/src/spicelib/parser/inp2f.c0000644000175000017500000000472514163340332020220 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)); } } tmp_ns50wwy/src/spicelib/parser/inp2b.c0000644000175000017500000000410114163340332020200 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)); } tmp_ns50wwy/src/spicelib/parser/inpeval.c0000644000175000017500000003677314163340332020650 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))); } /* In addition to fcn INPevaluate() above, allow values like 4k7, similar to the RKM code (used by inp2r) */ double INPevaluateRKM_R(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; double deci; int expo1; int expo2; int expo3; int sign; int expsgn; char* tmpline; bool hasmulti = FALSE; /* 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; deci = 0; expo1 = 0; expo2 = 0; expo3 = 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 != '.') && (*here != 'r'))) { /* 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; hasmulti = TRUE; break; case 'g': case 'G': expo1 = expo1 + 9; hasmulti = TRUE; break; case 'k': case 'K': expo1 = expo1 + 3; hasmulti = TRUE; break; case 'u': case 'U': expo1 = expo1 - 6; hasmulti = TRUE; break; case 'r': case 'R': expo1 = expo1; hasmulti = TRUE; break; case 'n': case 'N': expo1 = expo1 - 9; hasmulti = TRUE; break; case 'p': case 'P': expo1 = expo1 - 12; hasmulti = TRUE; break; case 'm': case 'M': if (((here[1] == 'E') || (here[1] == 'e')) && ((here[2] == 'G') || (here[2] == 'g'))) { expo1 = expo1 + 6; /* Meg */ here += 2; hasmulti = TRUE; } 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, M for milli */ hasmulti = TRUE; } break; case 'l': case 'L': expo1 = expo1 - 3; /* m, milli */ hasmulti = TRUE; break; default: break; } /* read a digit after multiplier */ if (hasmulti) { here++; while (isdigit_c(*here)) { deci = 10 * deci + *here - '0'; expo3 = expo3 - 1; here++; } mantis = mantis + deci * pow(10.0, (double)expo3); } if (gobble) { FREE(token); } else { *line = here; } return (sign * mantis * pow(10.0, (double)(expo1 + expsgn * expo2))); } /* In addition to fcn INPevaluate() above, allow values like 4k7, similar to the RKM code (used by inp2r) */ double INPevaluateRKM_C(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; double deci; int expo1; int expo2; int expo3; int sign; int expsgn; char* tmpline; bool hasmulti = FALSE; /* 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; deci = 0; expo1 = 0; expo2 = 0; expo3 = 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 != '.') && (*here != 'r'))) { /* 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; hasmulti = TRUE; break; case 'g': case 'G': expo1 = expo1 + 9; hasmulti = TRUE; break; case 'k': case 'K': expo1 = expo1 + 3; hasmulti = TRUE; break; case 'u': case 'U': expo1 = expo1 - 6; hasmulti = TRUE; break; case 'r': case 'R': expo1 = expo1; hasmulti = TRUE; break; case 'n': case 'N': expo1 = expo1 - 9; hasmulti = TRUE; break; case 'p': case 'P': expo1 = expo1 - 12; hasmulti = TRUE; break; case 'f': case 'F': expo1 = expo1 - 15; hasmulti = TRUE; break; case 'm': case 'M': if (((here[1] == 'E') || (here[1] == 'e')) && ((here[2] == 'G') || (here[2] == 'g'))) { expo1 = expo1 + 6; /* Meg */ here += 2; hasmulti = TRUE; } 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; /* Meg as well */ hasmulti = TRUE; } break; case 'l': case 'L': expo1 = expo1 - 3; /* m, milli */ hasmulti = TRUE; break; default: break; } /* read a digit after multiplier */ if (hasmulti) { here++; while (isdigit_c(*here)) { deci = 10 * deci + *here - '0'; expo3 = expo3 - 1; here++; } mantis = mantis + deci * pow(10.0, (double)expo3); } if (gobble) { FREE(token); } else { *line = here; } return (sign * mantis * pow(10.0, (double)(expo1 + expsgn * expo2))); } tmp_ns50wwy/src/spicelib/parser/inppas2.c0000644000175000017500000001404714163340332020554 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; } tmp_ns50wwy/src/spicelib/parser/inpmktmp.c0000644000175000017500000000066714163340332021042 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); } tmp_ns50wwy/src/spicelib/parser/ptfuncs.c0000644000175000017500000001177514163340332020667 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 && newcompat.ps) 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)); } /* Limit the exp: If arg > EXPARGMAX (arbitrarily selected to 14), continue with linear output, if compatmode PSPICE is selected*/ double PTexp(double arg) { if (newcompat.ps && arg > EXPARGMAX) return EXPMAX * (arg - EXPARGMAX + 1.); else 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); } tmp_ns50wwy/src/spicelib/parser/inp2u.c0000644000175000017500000000514614163340332020235 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)); } tmp_ns50wwy/src/spicelib/parser/inperror.c0000644000175000017500000000154614163340332021040 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; } tmp_ns50wwy/src/spicelib/parser/inppas4.h0000644000175000017500000000013414163340332020553 0ustar carstencarsten#ifndef ngspice_INPPAS4_H #define ngspice_INPPAS4_H #include "ngspice/inpdefs.h" #endif tmp_ns50wwy/src/spicelib/parser/inpptree-parser-y.h0000644000175000017500000000060714163340332022570 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); tmp_ns50wwy/src/spicelib/parser/inpptree.c0000644000175000017500000013374114163340332021031 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/compatmode.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, char* tline); 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; char* treeline = *line; 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, treeline)) { *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) * * when D(a) == 0, then * * D(pow(a,b)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * = pow(a,b) * D(b)*log(abs(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 if (a->type == PT_CONSTANT){ arg2 = PTdifferentiate(b, varnum); newp = mkb(PT_TIMES, mkf(PTF_POW, mkb(PT_COMMA, a, b)), mkb(PT_TIMES, arg2, mkf(PTF_LOG, mkf(PTF_ABS, a)))); } 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: /* u > EXPARGMAX -> EXPMAX, that is exp(EXPARGMAX), else exp(u) */ if (newcompat.ps) { arg1 = mkb(PT_TERN, mkf(PTF_GT0, mkb(PT_MINUS, p->left, mkcon(EXPARGMAX))), mkb(PT_COMMA, mkcon(EXPMAX), mkf(PTF_EXP, p->left))); } else { /* exp(u) */ arg1 = mkf(PTF_EXP, p->left); } #ifdef TRACE1 printf("debug exp, %s, returns; ", __func__); printTree(arg1); printf("\n"); #endif 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 TRACE1 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 TRACE1 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) * * when D(a) == 0, then * * D(pow(a,b)) * = pow(a,b) * (D(b)*log(abs(a)) + b*D(a)/a) * = pow(a,b) * D(b)*log(abs(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); } else if (a->type == PT_CONSTANT) { arg2 = PTdifferentiate(b, varnum); newp = mkb(PT_TIMES, mkf(PTF_POW, mkb(PT_COMMA, a, b)), mkb(PT_TIMES, arg2, mkf(PTF_LOG, mkf(PTF_ABS, a)))); } 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))))); } #ifdef TRACE printf("debug pow, %s, returns; ", __func__); printTree(newp); printf("\n"); #endif 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); } 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))))); } #ifdef TRACE printf("debug pwr, %s, returns; ", __func__); printTree(newp); printf("\n"); #endif 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. Returns 0 and error message containing expression to parsed, if not ok. */ static int PTcheck(INPparseNode * p, char *tline) { int ret; static bool msgsent = FALSE; 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: ret = (PTcheck(p->left, tline)); if (ret == 0 && !msgsent) { fprintf(stderr, "\nError: The internal check of parse tree \n%s\nfailed\n", tline); msgsent = TRUE; } return ret; case PT_PLUS: case PT_MINUS: case PT_TIMES: case PT_DIVIDE: case PT_POWER: case PT_COMMA: ret = (PTcheck(p->left, tline) && PTcheck(p->right, tline)); if (ret == 0 && !msgsent) { fprintf(stderr, "\nError: The internal check of parse tree \n%s\nfailed\n", tline); msgsent = TRUE; } return ret; case PT_TERN: ret = (PTcheck(p->left, tline) && PTcheck(p->right->left, tline) && PTcheck(p->right->right, tline)); if (ret == 0 && !msgsent) { fprintf(stderr, "\nError: The internal check of parse tree \n%s\nfailed\n", tline); msgsent = TRUE; } return ret; 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; } /* Don't parse the B source instance parameters, thus prevent memory leak. As soon as we meet such parameter, token=0 is returned. */ case 't': if (ciprefix("tc1=", sbuf) || ciprefix("tc2=", sbuf) || ciprefix("temp=", sbuf)) { token = 0; break; } /* FALLTHROUGH */ case 'd': if (ciprefix("dtemp=", sbuf)) { token = 0; break; } /* FALLTHROUGH */ case 'r': if (ciprefix("reciproctc=", sbuf)) { token = 0; break; } /* FALLTHROUGH */ 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); } /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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); /* FALLTHROUGH */ 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; } tmp_ns50wwy/src/spicelib/parser/inpapnam.c0000644000175000017500000000132314163340332020774 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); } tmp_ns50wwy/src/spicelib/parser/inplist.c0000644000175000017500000000261414163340332020657 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); } } } } } } tmp_ns50wwy/src/spicelib/parser/inpptree-parser.y0000644000175000017500000001110314163340332022334 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(line); NG_IGNORE(retval); NG_IGNORE(ckt); fprintf (stderr, "\n%s: %s, parsing stopped at\n %s\n\n", __func__, s, locp->start); } tmp_ns50wwy/src/spicelib/parser/inp2y.c0000644000175000017500000002674414163340332020250 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; } tmp_ns50wwy/src/spicelib/parser/inp2h.c0000644000175000017500000000425514163340332020220 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)); } } tmp_ns50wwy/src/spicelib/parser/ifeval.c0000644000175000017500000001160314163340332020441 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; if (!myTree) { fprintf(stderr, "\nInternal error: No tree to evaluate.\n"); controlled_exit(EXIT_BAD); } #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, "\nError: %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); } tmp_ns50wwy/src/spicelib/parser/inpkmods.c0000644000175000017500000000107714163340332021023 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; } tmp_ns50wwy/src/spicelib/parser/inp2s.c0000644000175000017500000000571714163340332020237 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 */ } } tmp_ns50wwy/src/spicelib/parser/inplkmod.c0000644000175000017500000000125214163340332021007 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; } tmp_ns50wwy/src/spicelib/parser/inppas3.h0000644000175000017500000000015514163340332020555 0ustar carstencarsten/* AlansFixes */ #ifndef ngspice_INPPAS3_H #define ngspice_INPPAS3_H #include "ngspice/inpdefs.h" #endif tmp_ns50wwy/src/spicelib/parser/inp2r.c0000644000175000017500000001612614163340332020232 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" #include "ngspice/compatmode.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); /* enable reading values like 4k7 */ if (newcompat.lt) val = INPevaluateRKM_R(&line, &error1, 1); /* [] */ else 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 ((INPtypelook("Resistor") != thismodel->INPmodType) #ifdef ADMS && (INPtypelook("r2_cmc") != thismodel->INPmodType) #endif ) { 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; } tmp_ns50wwy/src/spicelib/parser/inp2w.c0000644000175000017500000000544714163340332020243 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 */ } } tmp_ns50wwy/src/spicelib/parser/inp2j.c0000644000175000017500000000550414163340332020220 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)); } } tmp_ns50wwy/src/spicelib/parser/inppas4.c0000644000175000017500000000464414163340332020560 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/inpdefs.h" #include "ngspice/inpmacs.h" #include "ngspice/fteext.h" #include "ngspice/iferrmsg.h" #include "ngspice/cktdefs.h" #include "inppas4.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 4 - If option cshunt is given, add a capacitor to each voltage node */ void INPpas4(CKTcircuit *ckt, INPtables *tab) { CKTnode* node; int mytype = -1; IFuid uid; /* uid for default cap model */ int error; /* error code temporary */ GENinstance* fast; /* pointer to the actual instance */ IFvalue ptemp; /* a value structure to package capacitance into */ int nadded = 0; /* capacitors added */ double csval = 0.; /* cshunt capacitors value */ /* get the cshunt value */ if (!cp_getvar("cshunt_value", CP_REAL, &csval, 0)) return; if ((mytype = INPtypelook("Capacitor")) < 0) { fprintf(stderr, "Device type Capacitor not supported by this binary\n"); return; } if (!tab->defCmod) { /* create default C model */ IFnewUid(ckt, &uid, NULL, "C", UID_MODEL, NULL); error = (*(ft_sim->newModel))(ckt, mytype, &(tab->defCmod), uid); } /* scan through all nodes, add a new C device for each voltage node */ for (node = ckt->CKTnodes; node; node = node->next) { if (node->type == NODE_VOLTAGE && (node->number > 0)) { int nn = node->number; char* devname = tprintf("capac%dshunt", nn); (*(ft_sim->newInstance))(ckt, tab->defCmod, &fast, devname); /* the top node, second node is gnd automatically */ (*(ft_sim->bindNode))(ckt, fast, 1, node); /* value of the capacitance */ ptemp.rValue = csval; error = INPpName("capacitance", &ptemp, ckt, mytype, fast); /* add device numbers for statistics */ ckt->CKTstat->STATdevNum[mytype].instNum++; ckt->CKTstat->STATtotalDev++; nadded++; } } printf("Option cshunt: %d capacitors added with %g F each\n", nadded, csval); } tmp_ns50wwy/src/spicelib/parser/inpmkmod.c0000644000175000017500000000314614163340332021014 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); } tmp_ns50wwy/src/spicelib/parser/ifnewuid.c0000644000175000017500000000331714163340332021010 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); } tmp_ns50wwy/src/spicelib/parser/inp2c.c0000644000175000017500000001066314163340332020213 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 "ngspice/compatmode.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); /* enable reading values like 4u7 */ if (newcompat.lt) val = INPevaluateRKM_C(&line, &error1, 1); /* [] */ else 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; } tmp_ns50wwy/src/spicelib/parser/inp2l.c0000644000175000017500000001040414163340332020215 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; } tmp_ns50wwy/src/ngspice.c0000644000175000017500000000570214163340332015540 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, }; tmp_ns50wwy/src/ngicon.rc0000644000175000017500000000002514163340332015540 0ustar carstencarsten101 ICON ngspice.ico tmp_ns50wwy/src/ciderlib/0000755000175000017500000000000014163340332015515 5ustar carstencarstentmp_ns50wwy/src/ciderlib/Makefile.am0000644000175000017500000000017614163340332017555 0ustar carstencarsten## Process this file with automake EXTRA_DIST = notes SUBDIRS = input support oned twod MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/ciderlib/oned/0000755000175000017500000000000014163340332016442 5ustar carstencarstentmp_ns50wwy/src/ciderlib/oned/onepoiss.c0000644000175000017500000001101414163340332020442 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; } } tmp_ns50wwy/src/ciderlib/oned/onedopng.c0000644000175000017500000000723114163340332020422 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); } break; 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; } } } } } } } } tmp_ns50wwy/src/ciderlib/oned/oneddefs.h0000644000175000017500000000075714163340332020413 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 tmp_ns50wwy/src/ciderlib/oned/oneprint.c0000644000175000017500000004065214163340332020453 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, BOOLEAN asciiSave, char *extra) { int index, i, ii; 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; if (extra != NULL) { fprintf(file, "Title: Device %s (%s) internal state\n", pDevice->name, extra); } else { 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++); } if (asciiSave) { fprintf(file, "Values:\n"); } else { 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; } if (asciiSave) { for (ii = 0; ii < numVars; ii++) { if (ii == 0) { fprintf(file, "%d", index - 1); } fprintf(file, "\t%e\n", data[ii]); } } else { 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; if (!pDevice) { return; } 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 = NULL; double total; int iTotal; if (!pDevice) { return; } pStats = pDevice->pStats; 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); } tmp_ns50wwy/src/ciderlib/oned/Makefile.am0000644000175000017500000000075714163340332020507 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 tmp_ns50wwy/src/ciderlib/oned/onedext.h0000644000175000017500000001024414163340332020262 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 *, BOOLEAN, char *); 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 tmp_ns50wwy/src/ciderlib/oned/onesolve.c0000644000175000017500000007543114163340332020452 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); } } } } } } tmp_ns50wwy/src/ciderlib/oned/onecont.c0000644000175000017500000004560214163340332020262 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; } } } tmp_ns50wwy/src/ciderlib/oned/onesetup.c0000644000175000017500000001445214163340332020456 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; } } } } tmp_ns50wwy/src/ciderlib/oned/oneproj.c0000644000175000017500000002446314163340332020273 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; */ } tmp_ns50wwy/src/ciderlib/oned/oneread.c0000644000175000017500000000472714163340332020235 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); } tmp_ns50wwy/src/ciderlib/oned/onecond.c0000644000175000017500000001676414163340332020251 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; } tmp_ns50wwy/src/ciderlib/oned/notes0000644000175000017500000000226214163340332017517 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) tmp_ns50wwy/src/ciderlib/oned/onemesh.c0000644000175000017500000002241014163340332020243 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; } } */ tmp_ns50wwy/src/ciderlib/oned/onedest.c0000644000175000017500000000325714163340332020256 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); } tmp_ns50wwy/src/ciderlib/oned/oneadmit.c0000644000175000017500000005736414163340332020425 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_adm, 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_adm, -y->real, -y->imag); CMPLX_ASSIGN(*yd, yAc_adm); CMPLX_MULT_SELF_SCALAR(*yd, GNorm * pDevice->area); pDevice->pStats->miscTime[STAT_AC] += SPfrontEnd->IFseconds() - startTime; return (AcAnalysisMethod); } /* end of function NUMDadmittance */ 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); } tmp_ns50wwy/src/ciderlib/oned/oneaval.c0000644000175000017500000001244314163340332020237 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); } tmp_ns50wwy/src/ciderlib/oned/readme0000644000175000017500000000140314163340332017620 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 '_'. tmp_ns50wwy/src/ciderlib/oned/onefreez.c0000644000175000017500000000553514163340332020433 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; } } tmp_ns50wwy/src/ciderlib/input/0000755000175000017500000000000014163340332016654 5ustar carstencarstentmp_ns50wwy/src/ciderlib/input/mobility.c0000644000175000017500000001347014163340332020655 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); } tmp_ns50wwy/src/ciderlib/input/Makefile.am0000644000175000017500000000110114163340332020701 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 tmp_ns50wwy/src/ciderlib/input/bdryset.c0000644000175000017500000001235714163340332020504 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 ); } tmp_ns50wwy/src/ciderlib/input/elctset.c0000644000175000017500000001132314163340332020463 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 ); } tmp_ns50wwy/src/ciderlib/input/outpset.c0000644000175000017500000000636114163340332020531 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 ); } tmp_ns50wwy/src/ciderlib/input/doping.c0000644000175000017500000002104214163340332020277 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); } tmp_ns50wwy/src/ciderlib/input/models.c0000644000175000017500000000773214163340332020314 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); } tmp_ns50wwy/src/ciderlib/input/mesh.c0000644000175000017500000000716514163340332017765 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); } tmp_ns50wwy/src/ciderlib/input/meshset.c0000644000175000017500000010367014163340332020477 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 = 0.0, rTempE = 0.0; /* 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); } } tmp_ns50wwy/src/ciderlib/input/method.c0000644000175000017500000000624714163340332020311 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); } tmp_ns50wwy/src/ciderlib/input/electrod.c0000644000175000017500000000576214163340332020633 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); } tmp_ns50wwy/src/ciderlib/input/cards.c0000644000175000017500000000175114163340332020120 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); tmp_ns50wwy/src/ciderlib/input/domain.c0000644000175000017500000000654314163340332020277 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); } tmp_ns50wwy/src/ciderlib/input/material.c0000644000175000017500000002257114163340332020625 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); } tmp_ns50wwy/src/ciderlib/input/boundary.c0000644000175000017500000001037514163340332020651 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); } tmp_ns50wwy/src/ciderlib/input/output.c0000644000175000017500000001733314163340332020367 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); } tmp_ns50wwy/src/ciderlib/input/dopset.c0000644000175000017500000002354014163340332020322 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/carddefs.h" #include "ngspice/cidersupt.h" #include "ngspice/cktdefs.h" #include "ngspice/ciderinp.h" #include "ngspice/cpextern.h" #include "ngspice/dopdefs.h" #include "ngspice/meshext.h" #include "ngspice/ngspice.h" #include "ngspice/numenum.h" #include "ngspice/profile.h" #include "ngspice/gendev.h" #include "ngspice/sperror.h" #include "ngspice/suffix.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; if (readSupremData( card->DOPinFile, 0, card->DOPimpurityType, tableList) != 0) { (void) fprintf(cp_err, "Doping setup failed.\n"); return -1; } newProfile->IMPID = ++impurityId; break; case DOP_SUPASCII: newProfile->type = LOOKUP; if (readSupremData( card->DOPinFile, 1, card->DOPimpurityType, tableList) != 0) { (void) fprintf(cp_err, "Doping setup failed.\n"); return -1; } newProfile->IMPID = ++impurityId; break; case DOP_ASCII: newProfile->type = LOOKUP; if (readAsciiData(card->DOPinFile, card->DOPimpurityType, tableList) != 0) { (void) fprintf(cp_err, "Doping setup failed.\n"); return -1; } 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 ); } tmp_ns50wwy/src/ciderlib/input/domnset.c0000644000175000017500000001245514163340332020500 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 ); } tmp_ns50wwy/src/ciderlib/input/mobset.c0000644000175000017500000001001414163340332020305 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 ); } tmp_ns50wwy/src/ciderlib/input/optionsc.c0000644000175000017500000001141514163340332020660 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); } tmp_ns50wwy/src/ciderlib/input/matlset.c0000644000175000017500000001122114163340332020466 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 ); } tmp_ns50wwy/src/ciderlib/input/contset.c0000644000175000017500000000402014163340332020473 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 ); } tmp_ns50wwy/src/ciderlib/input/readme0000644000175000017500000000041514163340332020034 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. tmp_ns50wwy/src/ciderlib/input/contact.c0000644000175000017500000000620414163340332020455 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); } tmp_ns50wwy/src/ciderlib/input/modlset.c0000644000175000017500000000417414163340332020475 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 ); } tmp_ns50wwy/src/ciderlib/support/0000755000175000017500000000000014163340332017231 5ustar carstencarstentmp_ns50wwy/src/ciderlib/support/integuse.c0000644000175000017500000001645614163340332021234 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 ); } tmp_ns50wwy/src/ciderlib/support/recomb.c0000644000175000017500000000265614163340332020655 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; } tmp_ns50wwy/src/ciderlib/support/globals.c0000644000175000017500000001064614163340332021027 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; } tmp_ns50wwy/src/ciderlib/support/suprmitf.c0000644000175000017500000003350214163340332021251 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 #include #include "ngspice/cidersupt.h" #include "ngspice/cpextern.h" #include "ngspice/ngspice.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), (size_t) num,\ fp ) != (size_t) num)) {\ xrc = -1;\ goto EXITPOINT;\ } #define DEBUG if (0) int SUPbinRead(const char *inFile, float *x, float *conc, int *impId, int *numNod) { int xrc = 0; 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 = (FILE *) NULL; /* Clear Concentration Array */ for ( i=0; i < MAXGRID; i++ ) { conc[i] = 0.0; } /* Open Input File */ if ((fpSuprem = fopen( inFile, "r" )) == NULL) { (void) fprintf(cp_err, "Unable to read file \"%s\": %s.\n", inFile, strerror(errno)); xrc = -1; goto EXITPOINT; } /* * 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 ); if (fclose(fpSuprem) != 0) { (void) fprintf(cp_err, "Unable to close file \"%s\": %s.\n", inFile, strerror(errno)); xrc = -1; goto EXITPOINT; } fpSuprem = (FILE *) NULL; /* shift silicon layer to beginning of array */ for (j = numLay; --j >= 0; ) { if (matTyp[j] == 1) { break; } } if (j < 0) { (void) fprintf(cp_err, "internal error in %s!\n", __FUNCTION__); xrc = -1; goto EXITPOINT; } 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; EXITPOINT: if (fpSuprem != (FILE *) NULL) { if (fclose(fpSuprem) != 0) { (void) fprintf(cp_err, "Unable to close \"%s\" at exit: %s\n", inFile, strerror(errno)); xrc = -1; } } return xrc; } /* end of function SUPbinRead */ int SUPascRead(const char *inFile, float *x, float *conc, int *impId, int *numNod) { int xrc = 0; int i, j; 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) { (void) fprintf(cp_err, "Unable to open file \"%s\": %s.\n", inFile, strerror(errno)); xrc = -1; goto EXITPOINT; } /* * The first line contains the number of layers (I4), the number of * impurities (I4), and the number of nodes (I4) present in the structure. */ if (fscanf( fpSuprem, "%d %d %d\n", &numLay, &numImp, &numGrid) != 3) { (void) fprintf(cp_err, "Unable to read file first line of \"%s\"\n", inFile); xrc = -1; goto EXITPOINT; } 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) { int idata; float rdata; if (fscanf(fpSuprem, "%s\n %d %e %d %d %e\n", cdata, &matTyp[i], &layerTh[i], &topNod[i], &idata, &rdata) != 6) { (void) fprintf(cp_err, "Unable to read layer %d " "from file \"%s\".\n", i + 1, inFile); xrc = -1; goto EXITPOINT; } DEBUG fprintf(stderr,"set 2: %s: %d %f %d\n", cdata, matTyp[i], layerTh[i], topNod[i]); } /* end of loop over layers */ /* * 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) { if (fscanf( fpSuprem, "%s\n %d\n", cdata, &impTyp[i]) != 2) { (void) fprintf(cp_err, "Unable to read impurity %d " "from file \"%s\".\n", i + 1, inFile); xrc = -1; goto EXITPOINT; } DEBUG fprintf(stderr,"set 3: %s: %d\n", cdata, impTyp[i]); } /* end of loop over impurities */ /* * 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) { float rdata; if (fscanf(fpSuprem, "%e%e", &rdata, &rdata) != 2) { (void) fprintf(cp_err, "Unable to read integrated dopant " "and interior concentration of layer %d and " "impurity %d from file \"%s\".\n", j + 1, i + 1, inFile); xrc = -1; goto EXITPOINT; } } } 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) { float rdata; if (fscanf(fpSuprem, "%e %e", &rdata, &x[i]) != 2) { (void) fprintf(cp_err, "Unable to read grid %d " "from file \"%s\".\n", i + 1, inFile); xrc = -1; goto EXITPOINT; } for (j = 0; j < numImp; j++) { float junk; /* chemical concentration - not required */ if (fscanf(fpSuprem, "%e", &junk) != 1) { (void) fprintf(cp_err, "Unable to chemical concentration " "%d of layer %d " "from file \"%s\".\n", j + 1, i + 1, inFile); xrc = -1; goto EXITPOINT; } /* store active concentration */ if (fscanf(fpSuprem, "%e", &con[i]) != 1) { (void) fprintf(cp_err, "Unable to active concentration " "%d of layer %d " "from file \"%s\".\n", j + 1, i + 1, inFile); xrc = -1; goto EXITPOINT; } /* 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]; } } } } /* end of loop over num grid */ 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. */ if (fclose(fpSuprem) != 0) { (void) fprintf(cp_err, "Unable to close file \"%s\": %s.\n", inFile, strerror(errno)); xrc = -1; goto EXITPOINT; } fpSuprem = (FILE *) NULL; /* shift silicon layer to beginning of array */ for (j = numLay; --j >= 0; ) { if (matTyp[j] == 1) { break; } } if (j < 0) { (void) fprintf(cp_err, "internal error in %s!\n", __FUNCTION__); xrc = -1; goto EXITPOINT; } 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; EXITPOINT: if (fpSuprem != (FILE *) NULL) { if (fclose(fpSuprem) != 0) { (void) fprintf(cp_err, "Unable to close \"%s\" at exit: %s\n", inFile, strerror(errno)); xrc = -1; } } return xrc; } /* end of function SUPascRead */ tmp_ns50wwy/src/ciderlib/support/Makefile.am0000644000175000017500000000067214163340332021272 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 tmp_ns50wwy/src/ciderlib/support/suprem.c0000644000175000017500000001576614163340332020727 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 #include #include "ngspice/cidersupt.h" #include "ngspice/cpextern.h" #include "ngspice/ngspice.h" #include "ngspice/profile.h" static void free_profile_data(double **p); static double **alloc_profile_data(size_t n); int readAsciiData(const char *fileName, int impType, DOPtable **ppTable) { int xrc = 0; FILE *fpAscii = (FILE *) NULL; int index; double x, y; int numPoints; DOPtable *tmpTable = (DOPtable *) NULL; double **profileData = (double **) NULL; double sign; /* Open Input File */ if ((fpAscii = fopen( fileName, "r" )) == NULL) { (void) fprintf(cp_err, "unable to open SUPREM file \"%s\": %s\n", fileName, strerror(errno)); xrc = -1; return xrc; /* return immediately, nothing to free */ } /* Get sign of concentrations */ if (impType == IMP_P_TYPE) { sign = -1.0; } else { sign = 1.0; } /* read the number of points */ if (fscanf(fpAscii, "%d", &numPoints) != 1) { (void) fprintf(cp_err, "unable to read point count " "from SUPREM file \"%s\"\n", fileName); xrc = -1; goto EXITPOINT; } /* allocate 2-D array to read in data of x-coordinate and N(x) */ profileData = alloc_profile_data((size_t) numPoints + 1); /* the number of points is stored as profileData[0][0] */ profileData[0][0] = numPoints; for (index = 1; index <= numPoints; index++ ) { if (fscanf(fpAscii, "%lf %lf ", &x, &y) != 2) { (void) fprintf(cp_err, "unable to read point %d" "from SUPREM file \"%s\"\n", index + 1, fileName); xrc = -1; goto EXITPOINT; } profileData[0][index] = x; profileData[1][index] = sign * ABS(y); } /* end of loop over points */ /* 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 ]); } */ EXITPOINT: if (fpAscii != (FILE *) NULL) { /* close data file if open */ fclose(fpAscii); } /* Free resources on error */ if (xrc != 0) { free_profile_data(profileData); free(tmpTable); } return xrc; } /* end of function readAsciiData */ /* 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. */ int readSupremData(const char *fileName, int fileType, int impType, DOPtable **ppTable) { int xrc = 0; #define MAX_GRID 500 float x[ MAX_GRID ], conc[ MAX_GRID ]; int index; DOPtable *tmpTable = (DOPtable *) NULL; double **profileData = (double **) NULL; int numNodes; /* read the Suprem data file */ if ( fileType == 0 ) { /* BINARY FILE */ xrc = SUPbinRead(fileName, x, conc, &impType, &numNodes); } else { xrc = SUPascRead( fileName, x, conc, &impType, &numNodes ); } if (xrc != 0) { (void) fprintf(cp_err, "Data input failed.\n"); xrc = -1; return xrc; /* return immediately, nothing to free */ } /* allocate 2-D array to read in data of x-coordinate and N(x) */ profileData = alloc_profile_data((size_t) numNodes + 1); /* 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 ]); } */ if (xrc != 0) { free_profile_data(profileData); free(tmpTable); } return xrc; } /* end of function readSupremData */ /* Allocate a profile data */ static double **alloc_profile_data(size_t n) { double **p; XCALLOC(p, double *, 2); XCALLOC(p[0], double, n); XCALLOC(p[1], double, n); return p; } /* end of function alloc_profile_data */ /* Free a profile data */ static void free_profile_data(double **p) { /* Immediate exit if no allocation */ if (p == (double **) NULL) { return; } free(p[0]); free(p[1]); free(p); } /* end of function alloc_profile_data */ /* 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" ); } } */ tmp_ns50wwy/src/ciderlib/support/database.c0000644000175000017500000000270514163340332021145 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. */ } } tmp_ns50wwy/src/ciderlib/support/mobil.c0000644000175000017500000002612614163340332020506 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; } tmp_ns50wwy/src/ciderlib/support/mater.c0000644000175000017500000003447014163340332020515 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; } tmp_ns50wwy/src/ciderlib/support/integset.c0000644000175000017500000000622514163340332021224 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 ] ); } } */ tmp_ns50wwy/src/ciderlib/support/logfile.c0000644000175000017500000000154114163340332021017 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; } } tmp_ns50wwy/src/ciderlib/support/misc.c0000644000175000017500000001104514163340332020331 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" #include "ngspice/cpextern.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 ); } /* Return TRUE if the filetype variable matches the string 's' */ BOOLEAN compareFiletypeVar(char *s) { char buf[BSIZE_SP]; if (cp_getvar("filetype", CP_STRING, buf, sizeof(buf))) { if (!strcmp(buf, s)) { return TRUE; } else { return FALSE; } } else { return FALSE; } } tmp_ns50wwy/src/ciderlib/support/readme0000644000175000017500000000072414163340332020414 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 tmp_ns50wwy/src/ciderlib/support/geominfo.c0000644000175000017500000000636314163340332021210 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 ); } } tmp_ns50wwy/src/ciderlib/support/devprint.c0000644000175000017500000000522714163340332021236 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; } } tmp_ns50wwy/src/ciderlib/notes0000644000175000017500000000075014163340332016572 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. tmp_ns50wwy/src/ciderlib/twod/0000755000175000017500000000000014163340332016472 5ustar carstencarstentmp_ns50wwy/src/ciderlib/twod/twocont.c0000644000175000017500000010655414163340332020346 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 == 0 || nIndex == 3 ) { /* Left (Top?) Side : bug 483 */ 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; } } } } } } tmp_ns50wwy/src/ciderlib/twod/twomesh.c0000644000175000017500000004037014163340332020330 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; } } } tmp_ns50wwy/src/ciderlib/twod/twodext.h0000644000175000017500000001510314163340332020341 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 *, BOOLEAN, char *); 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 int 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 tmp_ns50wwy/src/ciderlib/twod/twomobdv.c0000644000175000017500000014563314163340332020513 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; } tmp_ns50wwy/src/ciderlib/twod/twomobil.c0000644000175000017500000001072114163340332020473 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; } tmp_ns50wwy/src/ciderlib/twod/Makefile.am0000644000175000017500000000114014163340332020522 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 tmp_ns50wwy/src/ciderlib/twod/twoprint.c0000644000175000017500000004261514163340332020534 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, BOOLEAN asciiSave, char *extra) { 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; int ii; int point_number = 0; 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; if (extra != NULL) { fprintf(file, "Title: Device %s (%s) internal state\n", pDevice->name, extra); } else { 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++); } if (asciiSave) { fprintf(file, "Values:\n"); } else { 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; } if (asciiSave) { for (ii = 0; ii < numVars; ii++) { if (ii == 0) { fprintf(file, "%d", point_number); point_number++; } fprintf(file, "\t%e\n", data[ii]); } } else { 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; if (asciiSave) { for (ii = 0; ii < numVars; ii++) { if (ii == 0) { fprintf(file, "%d", point_number); point_number++; } fprintf(file, "\t%e\n", data[ii]); } } else { 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; if (!pDevice) { return; } 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 = NULL; double total; int iTotal; if (!pDevice) { return; } pStats = pDevice->pStats; 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); } tmp_ns50wwy/src/ciderlib/twod/twoaval.c0000644000175000017500000001345714163340332020325 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 ); } tmp_ns50wwy/src/ciderlib/twod/twocond.c0000644000175000017500000004404714163340332020324 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; } tmp_ns50wwy/src/ciderlib/twod/twoelect.c0000644000175000017500000001210514163340332020463 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; } tmp_ns50wwy/src/ciderlib/twod/twodopng.c0000644000175000017500000001232414163340332020501 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 ); } break; 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 ); } break; 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; } } } } } } } } tmp_ns50wwy/src/ciderlib/twod/twodest.c0000644000175000017500000000346314163340332020335 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 ); } tmp_ns50wwy/src/ciderlib/twod/twosolve.c0000644000175000017500000011212314163340332020520 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 "../../maths/misc/norm.h" #include "ngspice/bool.h" #include "ngspice/cidersupt.h" #include "ngspice/cpextern.h" #include "ngspice/ifsim.h" #include "ngspice/macros.h" #include "ngspice/ngspice.h" #include "ngspice/numenum.h" #include "ngspice/numglobs.h" #include "ngspice/spmatrix.h" #include "ngspice/twodev.h" #include "ngspice/twomesh.h" #include "twoddefs.h" #include "twodext.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; } /* After first two iterations, no special handling for a * new solver */ newSolver = FALSE; } /* end of case of iteratin 2 */ } /* end of special processing for a new solver */ 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 */ int 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(); /* Set up pDevice to compute the equilibrium solution. If the solver * is for bias, the arrays must be freed and allocated to the correct * sizes for an equilibrium solution; if it is a new solver, they are * only allocated; and if already an equilibrium solve, nothing * needs to be done */ /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ switch (pDevice->solverType) { case SLV_SMSIG: case SLV_BIAS: /* Free memory allocated for the bias solution */ FREE(pDevice->dcSolution); FREE(pDevice->dcDeltaSolution); FREE(pDevice->copiedSolution); FREE(pDevice->rhs); FREE(pDevice->rhsImag); spDestroy(pDevice->matrix); /* FALLTHROUGH */ case SLV_NONE: { /* Allocate memory needed for an equilibrium solution */ const int n_dim = pDevice->dimEquil; const int n_eqn = n_dim - 1; pDevice->poissonOnly = TRUE; pDevice->numEqns = n_eqn; XCALLOC(pDevice->dcSolution, double, n_dim); XCALLOC(pDevice->dcDeltaSolution, double, n_dim); XCALLOC(pDevice->copiedSolution, double, n_dim); XCALLOC(pDevice->rhs, double, n_dim); pDevice->matrix = spCreate(n_eqn, 0, &error); if (error == spNO_MEMORY) { (void) fprintf(cp_err, "TWOequilSolve: Out of Memory\n"); return E_NOMEM; } newSolver = TRUE; spSetReal(pDevice->matrix); /* set to a real matrix */ TWOQjacBuild(pDevice); pDevice->numOrigEquil = spElementCount(pDevice->matrix); pDevice->numFillEquil = 0; pDevice->solverType = SLV_EQUIL; break; } case SLV_EQUIL: /* Nothing to do if already equilibrium solver */ break; default: /* Invalid data */ fprintf(stderr, "Panic: Unknown solver type in equil solution.\n"); return E_PANIC; } /* end of switch over solve type */ 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; return 0; } /* 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(); /* Set up for solving for bias */ /* FALLTHROUGH added to suppress GCC warning due to * -Wimplicit-fallthrough flag */ 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); /* FALLTHROUGH */ case SLV_NONE: /* Set up for bias */ 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); /* FALLTHROUGH */ case SLV_SMSIG: spSetReal(pDevice->matrix); pDevice->solverType = SLV_BIAS; break; case 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); } } } } } } tmp_ns50wwy/src/ciderlib/twod/twosetup.c0000644000175000017500000002247114163340332020536 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; } } } } tmp_ns50wwy/src/ciderlib/twod/twocurr.c0000644000175000017500000001166314163340332020352 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; } } } tmp_ns50wwy/src/ciderlib/twod/tworead.c0000644000175000017500000000616014163340332020306 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); } tmp_ns50wwy/src/ciderlib/twod/twofield.c0000644000175000017500000000635314163340332020462 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; } } tmp_ns50wwy/src/ciderlib/twod/twoproj.c0000644000175000017500000004743414163340332020356 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; } } } } } } } tmp_ns50wwy/src/ciderlib/twod/twopoiss.c0000644000175000017500000002111414163340332020524 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; } } } } } tmp_ns50wwy/src/ciderlib/twod/twoadmit.c0000644000175000017500000013074614163340332020501 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); } tmp_ns50wwy/src/ciderlib/twod/readme0000644000175000017500000000163314163340332017655 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'. tmp_ns50wwy/src/ciderlib/twod/twosetbc.c0000644000175000017500000000454014163340332020473 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; } } tmp_ns50wwy/src/ciderlib/twod/twoncont.c0000644000175000017500000006751214163340332020524 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 == 0 || nIndex == 3 ) { /* Left (Top?) Side : bug 483 */ 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; } } } } } } tmp_ns50wwy/src/ciderlib/twod/twopcont.c0000644000175000017500000006753614163340332020534 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 == 0 || nIndex == 3 ) { /* Left (Top?) Side : bug 483 */ 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; } } } } } } tmp_ns50wwy/src/ciderlib/twod/twomobfn.c0000644000175000017500000003046314163340332020477 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; } tmp_ns50wwy/src/ciderlib/twod/twoddefs.h0000644000175000017500000000236214163340332020465 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 tmp_ns50wwy/src/nghelp.c0000644000175000017500000000451014163340332015361 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" #include "misc/tilde.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(const char *s) { return tildexpand(s); } void controlled_exit(int status) { exit(status); } tmp_ns50wwy/src/include/0000755000175000017500000000000014163340332015363 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/0000755000175000017500000000000014163340332017176 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/tests/0000755000175000017500000000000014163340332020340 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/tests/test_1.cpp0000644000175000017500000001546714163340332022260 0ustar carstencarsten//===-- test_1.cpp - test duals/dual ------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_eigen Dual number Eigen integration tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include #include #include #include "eexpokit/padm.hpp" #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ /// Simple taylor series, truncated when |S| is "small enough" template ReturnT expm4(const Eigen::EigenBase & A_, typename DerivedA::RealScalar mn = std::numeric_limits::epsilon() * 10 //= 1.L/(1ull << (std::numeric_limits::digits / 3)) ) { //std::cerr << "do PO:" << type_name() << "\n"; typedef typename DerivedA::RealScalar Real; using std::isfinite; using std::pow; const DerivedA & A = A_.derived(); int maxt = std::numeric_limits::digits; int s = (int)log2(rpart(A.derived().norm())) + 1; s = std::max(0, s); auto B = A * pow(Real(2), -s); ReturnT R(A.rows(), A.cols()); R.setIdentity(); R += B; ReturnT S = B; int ni = 0; for (int ii = 2; ii < maxt; ii++) { ni++; S = Real(1.0/ii) * S * B; R += S; auto Sn = S.norm(); if (!isfinite(Sn)) { std::cout << "expm() non-finite norm:" << Sn << " at " << ii << "\n"; std::cout << " |R| = " << R.norm() << " s=" << s << "\n" << " |A| = " << rpart(A.real().norm()) << "\n" << " |A/2^s|=" << rpart(A.real().norm()/pow(2,s)) << "\n"; break; } // converged yet? if (Sn < mn) break; if (ii == maxt - 1) { std::cout << "expm() didn't converge in " << maxt << " |S| = " << Sn << "\n"; throw std::invalid_argument("no converge"); } } //int ss = s; for (; s; s--) R = R * R; //std::cout << "expm s=" << ss << " ni=" << ni << " tol=" << mn << " |S|= " << S.norm() << "\n"; return R; } template > void dexpm() { //typedef std::complex T; //typedef std::complex> dualt; T tol = NN * NN * 1000 * Eigen::NumTraits::epsilon(); #define N2 2*NN // check dual emtx A = emtx::Random(); emtx V = emtx::Random(); emtx dA1,dA2,dA3,eA1,eA2,eA3,C; // dA/dV method 1 emtx AVA = emtx::Zero(); AVA.block( 0, 0,NN,NN) = A; AVA.block( 0,NN,NN,NN) = V; AVA.block(NN,NN,NN,NN) = A; AVA = AVA.exp(); //AVA = eexpokit::padm(AVA,13); eA1 = AVA.block(0,0,NN,NN); dA1 = AVA.block(0,NN,NN,NN); // dA/dV method 2 emtx a,b,c; a = A + DT(0,1) * V; b = expm4(a); // TODO: find a second trustworthy expm function, padm() and a.exp() // arent reliable here. //c = eexpokit::padm(a,13); //C = eexpokit::padm(A,13); //c = a.exp(); eA2 = rpart(b); dA2 = dpart(b); eA3 = rpart(c); dA3 = dpart(c); #if 0 std::ofstream A_(type_name().str() + std::to_string(NN) + "A.dat"); A_ << A; std::ofstream V_(type_name().str() + std::to_string(NN) + "V.dat"); V_ << V; std::ofstream _(type_name().str() + std::to_string(NN) + "_.dat"); _ << "A=" << A << "\n"; _ << "V=" << V << "\n"; _ << "eA1=" << eA1 << "\n"; _ << "dA1=" << dA1 << "\n"; //_ << "a=" << a << "\n"; _ << "b=" << b << "\n"; _ << "c=" << c << "\n"; _ << "C=" << C << "\n"; std::cout << "a:" << type_name() << "\n"; #endif EXPECT_LT((eA1 - eA2).norm(), tol) << "eA1=" << eA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "eA2=" << eA2.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "b=" << b.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; EXPECT_LT((dA1 - dA2).norm(), tol) << "dA1=" << dA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "dA2=" << dA2.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "b=" << b.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; #if 0 // see above. EXPECT_LT((eA1 - eA3).norm(), tol) << "eA1=" << eA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "eA3=" << eA3.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "c=" << c.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; EXPECT_LT((dA1 - dA3).norm(), tol) << "dA1=" << dA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "dA3=" << dA3.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "c=" << c.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; #endif } #if defined(PHASE_1) TEST(dexpm, float2) { dexpm(); } TEST(dexpm, float4) { dexpm(); } #elif defined(PHASE_2) TEST(dexpm, double2) { dexpm(); } TEST(dexpm, double4) { dexpm(); } #endif int main(int argc, char **argv) { std::ptrdiff_t l1, l2, l3; Eigen::internal::manage_caching_sizes(Eigen::GetAction, &l1, &l2, &l3); std::cout << "l1=" << l1 << " l2=" << l2 << " l3=" << l3 << "\n"; std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/example.cpp0000644000175000017500000000320214163340332022474 0ustar carstencarsten//===-- example.cpp - examples of using -------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file example.cpp Dual number usage examples * * (c)2019 Michael Tesch. tesch1@gmail.com */ #if defined(PHASE_1) #include using namespace duals::literals; template T f(T x) { return pow(x,pow(x,x)); } template T df(T x) { return pow(x,-1. + x + pow(x,x)) * (1. + x*log(x) + x*pow(log(x),2.)); } template T ddf(T x) { return (pow(x,pow(x,x)) * pow(pow(x,x - 1.) + pow(x,x)*log(x)*(log(x) + 1.), 2.) + pow(x,pow(x,x)) * (pow(x,x - 1.) * log(x) + pow(x,x - 1.) * (log(x) + 1.) + pow(x,x - 1.) * ((x - 1.)/x + log(x)) + pow(x,x) * log(x) * pow(log(x) + 1., 2.) )); } int main() { std::cout << " f(2.) = " << f(2.) << "\n"; std::cout << " df(2.) = " << df(2.) << "\n"; std::cout << "ddf(2.) = " << ddf(2.) << "\n"; std::cout << " f(2+1_e) = " << f(2+1_e) << "\n"; std::cout << " f(2+1_e).dpart() = " << f(2+1_e).dpart() << "\n"; duals::hyperduald x(2+1_e,1+0_e); std::cout << " f((2+1_e) + (1+0_e)_e).dpart().dpart() = " << f(x).dpart().dpart() << "\n"; } #endif tmp_ns50wwy/src/include/cppduals/tests/test_funcs.cpp0000644000175000017500000001443414163340332023227 0ustar carstencarsten//===-- test_funcs.cpp - test duals/dual ------------------------*- C++ -*-===// // // Part of the cppduals Project // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // #include "gtest/gtest.h" #include #include using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexf; typedef std::complex complexd; //using std::complex; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ asdf; EXPECT_TRUE(asdf::value); } #define EXPECT_CNEAR(a,b,prec) EXPECT_NEAR(std::abs((a) - (b)), 0, std::abs(prec)) // rough comparison of a finite-differences approx of the derivative // with the duals's implementation. just meant to catch wild wrongness, // not verify precision. #define FD_CHECK(T, F, ...) \ TEST(func##_##T, F) { \ for (T x : __VA_ARGS__) { \ T prec = 100 * std::sqrt(std::numeric_limits::epsilon()); \ T dd = dpart(F(x + dual(0,1))); \ /*T dx = std::numeric_limits::epsilon() * (T)1000000; */ \ T dx = T(1)/ (1ull << (std::numeric_limits::digits / 3)); \ T fd = (F(x + dx) - F(x - dx)) / (2*dx); \ EXPECT_CNEAR(dd, fd, prec * std::abs(std::max(std::max(dd,fd),T(1)))) \ << "dd=" << dd << " fd=" << fd << " x=" << x << " dx=" << dx; \ } \ } FD_CHECK(double, exp, {-1,0,1}) FD_CHECK(double, log, {1}) //FD_CHECK(complexd, log, {-1,1}) TODO FD_CHECK(double, log10, {1}) //FD_CHECK(complexd, log10, {-1,0,1}) TODO FD_CHECK(double, sqrt, {0.5,1.0}) FD_CHECK(double, cbrt, {-10.,-0.01,0.01,1.0,10.}) //FD_CHECK(complexd, sqrt, {0,1}) TODO FD_CHECK(double, sin, {-1,0,1}) FD_CHECK(double, cos, {-1,0,1}) FD_CHECK(double, tan, {-1,0,1}) FD_CHECK(double, asin, {-.9,0.,.9}) FD_CHECK(double, acos, {-.9,0.,.9}) FD_CHECK(double, atan, {-10,-1,0,1,10}) // TODO: //FD_CHECK(double, sinh, {0}) //FD_CHECK(double, cosh, {0}) //FD_CHECK(double, tanh, {0}) //FD_CHECK(double, asinh, {0}) //FD_CHECK(double, acosh, {0}) //FD_CHECK(double, atanh, {0}) FD_CHECK(double, erf, {-1,0,1}) FD_CHECK(double, erfc, {-1,0,1}) FD_CHECK(double, tgamma, {1.,0.5,10.}) FD_CHECK(double, lgamma, {-1.1, 0.5, 1.1, 2.}) // check that functions with poles in their derivatives dont generate // NaNs at the poles if dpart==0. #define DZERO_CHECK(F, DZ) \ TEST(zero_##F, DZ) { \ dual d(DZ,0); \ EXPECT_TRUE(std::isfinite(F(d).dpart())); \ } DZERO_CHECK(log, 0) DZERO_CHECK(sqrt, 0) DZERO_CHECK(cbrt, 0) DZERO_CHECK(asin, 1) DZERO_CHECK(acos, 1) //DZERO_CHECK(atan, i) //DZERO_CHECK(atan2, i) // These dont really cause d/dt = 0, but do a partial check and // increase code coverage. DZERO_CHECK(tgamma, 0) DZERO_CHECK(lgamma, 0) TEST(func, tgamma) { duald x = 10 + 4_e; //EXPECT_EQ(tgamma(x).rpart(), 362880); "interestingly", compiling without optimization (-O0) causes this to fail EXPECT_NEAR(tgamma(x).rpart(), 362880, 362880 * 100 * std::numeric_limits::epsilon()); } TEST(func, rpart) { dualf x = 10 + 4_e; EXPECT_EQ(rpart(x), 10); } TEST(func, dpart) { dualf x = 2 + 4_e; EXPECT_EQ(dpart(x), 4); } TEST(func, abs) { } TEST(func, arg) { } TEST(func, norm) { } TEST(func, conj) { } TEST(func, polar) { } struct pike_f1 { // function template TYPE f(const TYPE & x) { return exp(x) / sqrt(pow(sin(x), 3) + pow(cos(x), 3)); } // analytic derivative template TYPE df(const TYPE & x) { return (exp(x) * (3 * cos(x) + 5*cos(3*x) + 9 * sin(x) + sin(3*x))) / (8 * pow(pow(sin(x), (3)) + pow(cos(x), 3), 3./2.)); } // analytic second derivative template TYPE ddf(const TYPE & x) { return (exp(x) * (130 - 12 * cos(2*x) + 30*cos(4*x) + 12*cos(6*x) - 111.*sin(2*x) + 48.*sin(4*x) + 5*sin(6*x))) / (64. * pow(pow(sin(x), 3) + pow(cos(x), 3), 5./2.)); } // analytic third derivative template TYPE dddf(const TYPE & x) { return exp(x)*(1.0) / pow(sin(x) + pow(cos(x),(3.0)) - pow(cos(x),(2.0)) * sin(x), 7.0/2.0) * (cos(x) * - (186.0) + sin(x)*(68.0) + pow(cos(x),3)*171 - pow(cos(x),5)*42 - pow(cos(x),7)*33 + pow(cos(x),9)*110 + pow(cos(x),2)*sin(x)*(256.0) - pow(cos(x),4)*sin(x)*(495.0) + pow(cos(x),6)*sin(x)*(139.0) + pow(cos(x),8)*sin(x)*74.0) * (1.0/8); } }; TEST(diff, pike) { #if 1 typedef double real_t; typedef duald dual_t; typedef hyperduald hdual_t; #else typedef float real_t; typedef dualf dual_t; typedef hyperduald hdual_t; #endif pike_f1 f1; // calculate f, f' and f'' and f''' analytically at x real_t x = 7; real_t f = f1.f(x); real_t fp = f1.df(x); real_t fpp = f1.ddf(x); real_t fppp = f1.dddf(x); // calculate f, f' and f'' and f'' and f''' using duals dual_t dfp = f1.f(x + 1_e); dual_t ddfp = f1.df(x + 1_e); real_t x4 = 0; hdual_t dfpp = f1.f(hdual_t(x+1_e, 1 + x4*1_e) ); // x + 1*e1 + 1*e2 + x4*e1e2 hdual_t dfppp = f1.df(hdual_t(x+1_e, 1 + x4*1_e)); real_t prec = std::numeric_limits::epsilon() * 1e6; //prec = 1e-11; EXPECT_NEAR(f, dfpp.rpart().rpart(), prec); EXPECT_NEAR(fp, dfp.dpart(), prec); EXPECT_NEAR(fp, ddfp.rpart(), prec); EXPECT_NEAR(fp, dfpp.rpart().dpart(), prec); EXPECT_NEAR(fpp, ddfp.dpart(), prec); EXPECT_NEAR(fpp, dfpp.dpart().dpart(), prec); EXPECT_NEAR(fppp, dfppp.dpart().dpart(), prec); //std::cout << "dfpp=" << dfpp << "\n"; //std::cout << "dfppp=" << dfppp << "\n"; } #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char **argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/gold-riick.bench_dual.json0000644000175000017500000003317514163340332025353 0ustar carstencarsten{ "context": { "date": "2019-04-09 23:10:32", "host_name": "riick.fritz.box", "executable": "./tests/bench_dual", "num_cpus": 8, "mhz_per_cpu": 4200, "cpu_scaling_enabled": true, "caches": [ { "type": "Data", "level": 1, "size": 32000000, "num_sharing": 2 }, { "type": "Instruction", "level": 1, "size": 32000000, "num_sharing": 2 }, { "type": "Unified", "level": 2, "size": 256000000, "num_sharing": 2 }, { "type": "Unified", "level": 3, "size": 8192000000, "num_sharing": 8 } ], "load_avg": [0.91,0.55,0.49], "library_build_type": "debug" }, "benchmarks": [ { "name": "B_Add/2", "run_name": "B_Add/2", "run_type": "iteration", "iterations": 824542173, "real_time": 8.4453082668102275e-01, "cpu_time": 8.4330497549941574e-01, "time_unit": "ns" }, { "name": "B_Add/8", "run_name": "B_Add/8", "run_type": "iteration", "iterations": 215407779, "real_time": 3.3351862932159380e+00, "cpu_time": 3.3321200252475562e+00, "time_unit": "ns" }, { "name": "B_Add/64", "run_name": "B_Add/64", "run_type": "iteration", "iterations": 58354344, "real_time": 1.2061169807457697e+01, "cpu_time": 1.2049604618980897e+01, "time_unit": "ns" }, { "name": "B_Add/512", "run_name": "B_Add/512", "run_type": "iteration", "iterations": 7147541, "real_time": 9.8321614102488141e+01, "cpu_time": 9.8233268476529204e+01, "time_unit": "ns" }, { "name": "B_Add/4096", "run_name": "B_Add/4096", "run_type": "iteration", "iterations": 583950, "real_time": 1.1997066478428608e+03, "cpu_time": 1.1986074835174250e+03, "time_unit": "ns" }, { "name": "B_Add/8192", "run_name": "B_Add/8192", "run_type": "iteration", "iterations": 280278, "real_time": 2.5014722955172806e+03, "cpu_time": 2.4990253212881489e+03, "time_unit": "ns" }, { "name": "B_Add>/2", "run_name": "B_Add>/2", "run_type": "iteration", "iterations": 719322979, "real_time": 9.6203674730458488e-01, "cpu_time": 9.6122821067280295e-01, "time_unit": "ns" }, { "name": "B_Add>/8", "run_name": "B_Add>/8", "run_type": "iteration", "iterations": 208022307, "real_time": 3.3676157142748866e+00, "cpu_time": 3.3648201247955565e+00, "time_unit": "ns" }, { "name": "B_Add>/64", "run_name": "B_Add>/64", "run_type": "iteration", "iterations": 41387591, "real_time": 1.6822550362762875e+01, "cpu_time": 1.6808160639260215e+01, "time_unit": "ns" }, { "name": "B_Add>/512", "run_name": "B_Add>/512", "run_type": "iteration", "iterations": 5437243, "real_time": 1.2896090977804755e+02, "cpu_time": 1.2885078338415281e+02, "time_unit": "ns" }, { "name": "B_Add>/4096", "run_name": "B_Add>/4096", "run_type": "iteration", "iterations": 583456, "real_time": 1.2011305840153541e+03, "cpu_time": 1.2000171855289859e+03, "time_unit": "ns" }, { "name": "B_Add>/8192", "run_name": "B_Add>/8192", "run_type": "iteration", "iterations": 281308, "real_time": 2.5101460142166443e+03, "cpu_time": 2.5074422056962462e+03, "time_unit": "ns" }, { "name": "B_Sub/2", "run_name": "B_Sub/2", "run_type": "iteration", "iterations": 728551981, "real_time": 9.6308006466451668e-01, "cpu_time": 9.6223501587047333e-01, "time_unit": "ns" }, { "name": "B_Sub/8", "run_name": "B_Sub/8", "run_type": "iteration", "iterations": 242708995, "real_time": 2.8970816594436135e+00, "cpu_time": 2.8945758520404290e+00, "time_unit": "ns" }, { "name": "B_Sub/64", "run_name": "B_Sub/64", "run_type": "iteration", "iterations": 42881747, "real_time": 1.6390650175399376e+01, "cpu_time": 1.6376361322219417e+01, "time_unit": "ns" }, { "name": "B_Sub/512", "run_name": "B_Sub/512", "run_type": "iteration", "iterations": 5463762, "real_time": 1.2839805814698460e+02, "cpu_time": 1.2829124383529179e+02, "time_unit": "ns" }, { "name": "B_Sub/4096", "run_name": "B_Sub/4096", "run_type": "iteration", "iterations": 579043, "real_time": 1.2007505781594916e+03, "cpu_time": 1.1996460815518028e+03, "time_unit": "ns" }, { "name": "B_Sub/8192", "run_name": "B_Sub/8192", "run_type": "iteration", "iterations": 283021, "real_time": 2.4547645685559423e+03, "cpu_time": 2.4523946138272386e+03, "time_unit": "ns" }, { "name": "B_Sub>/2", "run_name": "B_Sub>/2", "run_type": "iteration", "iterations": 828173889, "real_time": 8.4244681131040999e-01, "cpu_time": 8.4170307016284329e-01, "time_unit": "ns" }, { "name": "B_Sub>/8", "run_name": "B_Sub>/8", "run_type": "iteration", "iterations": 224061326, "real_time": 3.1243714855868139e+00, "cpu_time": 3.1216511010025840e+00, "time_unit": "ns" }, { "name": "B_Sub>/64", "run_name": "B_Sub>/64", "run_type": "iteration", "iterations": 58141628, "real_time": 1.2089688595827512e+01, "cpu_time": 1.2079371891684870e+01, "time_unit": "ns" }, { "name": "B_Sub>/512", "run_name": "B_Sub>/512", "run_type": "iteration", "iterations": 7040996, "real_time": 9.9699899139357910e+01, "cpu_time": 9.9613642160853260e+01, "time_unit": "ns" }, { "name": "B_Sub>/4096", "run_name": "B_Sub>/4096", "run_type": "iteration", "iterations": 581668, "real_time": 1.2034631524593226e+03, "cpu_time": 1.2022905179586996e+03, "time_unit": "ns" }, { "name": "B_Sub>/8192", "run_name": "B_Sub>/8192", "run_type": "iteration", "iterations": 282164, "real_time": 2.4708674956039085e+03, "cpu_time": 2.4684340667129668e+03, "time_unit": "ns" }, { "name": "B_Mul/2", "run_name": "B_Mul/2", "run_type": "iteration", "iterations": 265558620, "real_time": 2.6450566357631402e+00, "cpu_time": 2.6427702102082029e+00, "time_unit": "ns" }, { "name": "B_Mul/8", "run_name": "B_Mul/8", "run_type": "iteration", "iterations": 223502135, "real_time": 3.1301059652276355e+00, "cpu_time": 3.1273447656327855e+00, "time_unit": "ns" }, { "name": "B_Mul/64", "run_name": "B_Mul/64", "run_type": "iteration", "iterations": 30377857, "real_time": 2.3107029109224477e+01, "cpu_time": 2.3087210891801917e+01, "time_unit": "ns" }, { "name": "B_Mul/512", "run_name": "B_Mul/512", "run_type": "iteration", "iterations": 3753884, "real_time": 1.8687841100299300e+02, "cpu_time": 1.8672708799739081e+02, "time_unit": "ns" }, { "name": "B_Mul/4096", "run_name": "B_Mul/4096", "run_type": "iteration", "iterations": 461567, "real_time": 1.5087395958443526e+03, "cpu_time": 1.5074006547261827e+03, "time_unit": "ns" }, { "name": "B_Mul/8192", "run_name": "B_Mul/8192", "run_type": "iteration", "iterations": 229621, "real_time": 3.0899390212718718e+03, "cpu_time": 3.0867818709961157e+03, "time_unit": "ns" }, { "name": "B_Mul>/2", "run_name": "B_Mul>/2", "run_type": "iteration", "iterations": 46285967, "real_time": 1.5099909223178337e+01, "cpu_time": 1.5086400139377007e+01, "time_unit": "ns" }, { "name": "B_Mul>/8", "run_name": "B_Mul>/8", "run_type": "iteration", "iterations": 11661962, "real_time": 6.0014554242011371e+01, "cpu_time": 5.9962549440651621e+01, "time_unit": "ns" }, { "name": "B_Mul>/64", "run_name": "B_Mul>/64", "run_type": "iteration", "iterations": 1468536, "real_time": 4.7647983704918062e+02, "cpu_time": 4.7608059795605925e+02, "time_unit": "ns" }, { "name": "B_Mul>/512", "run_name": "B_Mul>/512", "run_type": "iteration", "iterations": 183082, "real_time": 3.8213512741184391e+03, "cpu_time": 3.8181861133262651e+03, "time_unit": "ns" }, { "name": "B_Mul>/4096", "run_name": "B_Mul>/4096", "run_type": "iteration", "iterations": 22675, "real_time": 3.0901148974846190e+04, "cpu_time": 3.0871022888643743e+04, "time_unit": "ns" }, { "name": "B_Mul>/8192", "run_name": "B_Mul>/8192", "run_type": "iteration", "iterations": 11344, "real_time": 6.1823873857552790e+04, "cpu_time": 6.1759684238363785e+04, "time_unit": "ns" }, { "name": "B_Div/2", "run_name": "B_Div/2", "run_type": "iteration", "iterations": 223074129, "real_time": 3.1221121030774452e+00, "cpu_time": 3.1193331432888822e+00, "time_unit": "ns" }, { "name": "B_Div/8", "run_name": "B_Div/8", "run_type": "iteration", "iterations": 206899949, "real_time": 3.3619264062599843e+00, "cpu_time": 3.3588176041551177e+00, "time_unit": "ns" }, { "name": "B_Div/64", "run_name": "B_Div/64", "run_type": "iteration", "iterations": 29041803, "real_time": 2.3762771511892577e+01, "cpu_time": 2.3742337485038277e+01, "time_unit": "ns" }, { "name": "B_Div/512", "run_name": "B_Div/512", "run_type": "iteration", "iterations": 3605971, "real_time": 1.9516093806834385e+02, "cpu_time": 1.9498607337663077e+02, "time_unit": "ns" }, { "name": "B_Div/4096", "run_name": "B_Div/4096", "run_type": "iteration", "iterations": 412656, "real_time": 1.7029046954383241e+03, "cpu_time": 1.7012804781706957e+03, "time_unit": "ns" }, { "name": "B_Div/8192", "run_name": "B_Div/8192", "run_type": "iteration", "iterations": 199214, "real_time": 3.5068666004871179e+03, "cpu_time": 3.5033117702571099e+03, "time_unit": "ns" }, { "name": "B_Div>/2", "run_name": "B_Div>/2", "run_type": "iteration", "iterations": 38292924, "real_time": 1.8300814009951591e+01, "cpu_time": 1.8285078308462527e+01, "time_unit": "ns" }, { "name": "B_Div>/8", "run_name": "B_Div>/8", "run_type": "iteration", "iterations": 9592683, "real_time": 7.3376013778254773e+01, "cpu_time": 7.3309770269694255e+01, "time_unit": "ns" }, { "name": "B_Div>/64", "run_name": "B_Div>/64", "run_type": "iteration", "iterations": 1196541, "real_time": 5.8431534145313731e+02, "cpu_time": 5.8382388986252840e+02, "time_unit": "ns" }, { "name": "B_Div>/512", "run_name": "B_Div>/512", "run_type": "iteration", "iterations": 150056, "real_time": 4.6825903796710227e+03, "cpu_time": 4.6785734792344165e+03, "time_unit": "ns" }, { "name": "B_Div>/4096", "run_name": "B_Div>/4096", "run_type": "iteration", "iterations": 18718, "real_time": 3.7536350839790939e+04, "cpu_time": 3.7500307404637017e+04, "time_unit": "ns" }, { "name": "B_Div>/8192", "run_name": "B_Div>/8192", "run_type": "iteration", "iterations": 9342, "real_time": 7.4837835688738924e+04, "cpu_time": 7.4762648469278734e+04, "time_unit": "ns" } ] } tmp_ns50wwy/src/include/cppduals/tests/test_eigen.cpp0000644000175000017500000003672414163340332023206 0ustar carstencarsten//===-- test_funcs.cpp - test duals/dual ------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_eigen Dual number Eigen integration tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include //#include #include "eexpokit/padm.hpp" #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define EXPECT_DEQ(A,B) EXPECT_EQ(rpart(A), rpart(B)); EXPECT_EQ(dpart(A), dpart(B)) #define ASSERT_DEQ(A,B) ASSERT_EQ(rpart(A), rpart(B)); ASSERT_EQ(dpart(A), dpart(B)) #define EXPECT_DNE(A,B) EXPECT_NE(rpart(A), rpart(B)); EXPECT_NE(dpart(A), dpart(B)) #define EXPECT_DNEAR(A,B,tol) \ EXPECT_NEAR(rpart(A), rpart(B),tol); \ EXPECT_NEAR(dpart(A), dpart(B),tol) /// Simple taylor series, truncated when |S| is "small enough" template ReturnT expm4(const Eigen::EigenBase & A_, typename DerivedA::RealScalar mn = std::numeric_limits::epsilon() * 1000) { //std::cerr << "do PO:" << type_name() << "\n"; typedef typename DerivedA::RealScalar Real; using std::isfinite; const DerivedA & A = A_.derived(); int maxt = std::numeric_limits::digits; int s = log2(rpart(A.derived().norm())) + 1; s = std::max(0, s); auto B = A * pow(Real(2), -s); ReturnT R(A.rows(), A.cols()); R.setIdentity(); R += B; ReturnT S = B; for (int ii = 2; ii < maxt; ii++) { S = S * B * Real(1.0/ii); R += S; auto Sn = S.norm(); if (!isfinite(Sn)) { std::cout << "expm() non-finite norm:" << Sn << " at " << ii << "\n"; std::cout << " |R| = " << R.norm() << " s=" << s << "\n" << " |A| = " << rpart(A.real().norm()) << "\n" << " |A/2^s|=" << rpart(A.real().norm()/pow(2,s)) << "\n"; break; } // converged yet? if (Sn < mn) break; if (ii == maxt - 1) { std::cout << "expm() didn't converge in " << maxt << " |S| = " << Sn << "\n"; throw std::invalid_argument("no converge"); } } for (; s; s--) R = R * R; return R; } TEST(Eigen, NumTraits) { //::testing::StaticAssertTypeEq>::Real, float>(); _EXPECT_TRUE(std::is_same>::Real, dualf>); _EXPECT_TRUE(std::is_same::Real, dualf>); EXPECT_EQ(Eigen::NumTraits>::dummy_precision(), Eigen::NumTraits::dummy_precision()); EXPECT_EQ(Eigen::NumTraits>::digits10(), Eigen::NumTraits::digits10()); EXPECT_EQ(Eigen::NumTraits::dummy_precision(), Eigen::NumTraits::dummy_precision()); } TEST(Eigen, construction) { emtx ed; emtx ef; emtx ecd; emtx ecf; emtx edd; emtx edf_; emtx ecdd; emtx ecdf_; } TEST(Eigen, sparse) { smtx ed; smtx ef; smtx ecd; smtx ecf; smtx edd; smtx edf_; smtx ecdd; smtx ecdf_; } TEST(Eigen, expr_type_dense) { emtx ed; emtx ef; emtx ecd; emtx ecf; emtx edd; emtx edf_; emtx ecdd; emtx ecdf_; //_EXPECT_TRUE(std::is_base_of,U >::value); //_EXPECT_TRUE(std::is_same,dualf>::type, emtx>); ecf = ecf * 1; #define PO_EXPR_TYPE(...) typename std::decay::type::PlainObject _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); //_EXPECT_TRUE(std::is_same>); [1] //_EXPECT_TRUE(std::is_same>); [1] _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); static_assert(!duals::can_promote>::value, "nope"); _EXPECT_TRUE(std::is_same>); //_EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); auto a1 = ecf * 1; auto a2 = ecf * ecf; //auto a3 = ecf * edf_; [1] //auto a4 = ecf * 1_ef; [1] auto a5 = ecf * cdualf(1,2); auto a6 = edf_ * 2; auto a7 = edf_ * 2_ef; auto a8 = ecf * complexf(1,2); auto a9 = ecdf_ * 1; ecdf_ = ecdf_ * complexf(1,2); ecdf_ = ecdf_ * cdualf(1_ef,2_ef); auto a12 = edd * 1_e; auto a13 = ed * 1; auto A1 = a1.eval(); A1 += A1; auto A2 = a2.eval(); A2 += A2; //auto A3 = a3.eval(); A3 += A3; [1] //auto A4 = a4.eval(); A4 += A4; [1] auto A5 = a5.eval(); A5 += A5; auto A6 = a6.eval(); A6 += A6; auto A7 = a7.eval(); A7 += A7; auto A8 = a8.eval(); A8 += A8; auto A9 = a9.eval(); A9 += A9; auto A12 = a12.eval(); A12 += A12; auto A13 = a13.eval(); A13 += A13; } TEST(init, Constant) { edf<3> a = edf<3>::Constant(3,3, 5 + 8_ef); ecdf<3> b = ecdf<3>::Constant(3,3, cdualf(4,2 + 3_ef)); EXPECT_EQ(a(1,1), 5 + 8_ef); EXPECT_EQ(b(0,1), cdualf(4,2 + 3_ef)); EXPECT_TRUE((a.array() < 6).all()); EXPECT_FALSE((a.array() != 5 + 8_ef).any()); EXPECT_EQ((a.array() == 5 + 8_ef).count(), 9); } TEST(init, setIdentity) { edf<3> a = edf<3>::Constant(3,3, 5 + 8_ef); ecdf<3> b = ecdf<3>::Constant(3,3, cdualf(4,2 + 3_ef)); a.setIdentity(); b.setIdentity(); EXPECT_EQ(a(0,0), 1); EXPECT_EQ(a(0,1), 0); EXPECT_EQ(a(0,2), 0); EXPECT_EQ(a(1,0), 0); EXPECT_EQ(a(1,1), 1); EXPECT_EQ(a(1,2), 0); EXPECT_EQ(a(2,0), 0); EXPECT_EQ(a(2,1), 0); EXPECT_EQ(a(2,2), 1); EXPECT_EQ(b(0,0).real(), 1); EXPECT_EQ(b(0,1).real(), 0); EXPECT_EQ(b(0,2).real(), 0); EXPECT_EQ(b(1,0).real(), 0); EXPECT_EQ(b(1,1).real(), 1); EXPECT_EQ(b(1,2).real(), 0); EXPECT_EQ(b(2,0).real(), 0); EXPECT_EQ(b(2,1).real(), 0); EXPECT_EQ(b(2,2).real(), 1); } TEST(init, setZero) { edf<3> a = edf<3>::Constant(3,3, 5 + 8_ef); ecdf<3> b = ecdf<3>::Constant(3,3, cdualf(4,2 + 3_ef)); EXPECT_EQ(a(1,1), 5 + 8_ef); a.setZero(); b.setZero(); EXPECT_EQ(a(0,0), 0); EXPECT_EQ(a(0,1), 0); EXPECT_EQ(a(0,2), 0); EXPECT_EQ(a(1,0), 0); EXPECT_EQ(a(1,1), 0); EXPECT_EQ(a(1,2), 0); EXPECT_EQ(a(2,0), 0); EXPECT_EQ(a(2,1), 0); EXPECT_EQ(a(2,2), 0); EXPECT_EQ(b(0,0).real(), 0); EXPECT_EQ(b(0,1).real(), 0); EXPECT_EQ(b(0,2).real(), 0); EXPECT_EQ(b(1,0).real(), 0); EXPECT_EQ(b(1,1).real(), 0); EXPECT_EQ(b(1,2).real(), 0); EXPECT_EQ(b(2,0).real(), 0); EXPECT_EQ(b(2,1).real(), 0); EXPECT_EQ(b(2,2).real(), 0); EXPECT_EQ(b(0,0).imag(), 0); EXPECT_EQ(b(0,1).imag(), 0); EXPECT_EQ(b(0,2).imag(), 0); EXPECT_EQ(b(1,0).imag(), 0); EXPECT_EQ(b(1,1).imag(), 0); EXPECT_EQ(b(1,2).imag(), 0); EXPECT_EQ(b(2,0).imag(), 0); EXPECT_EQ(b(2,1).imag(), 0); EXPECT_EQ(b(2,2).imag(), 0); } TEST(init, LinSpaced) { ecf<3,1> a = ecf<3,1>::LinSpaced(3, 4, complexf(6,7)); EXPECT_EQ(a(0).real(), 4); EXPECT_EQ(a(1).real(), 5); EXPECT_EQ(a(2).real(), 6); edf<3,1> b = edf<3,1>::LinSpaced(3, 4, 6 + 6_ef); EXPECT_EQ(b(0), 4); EXPECT_EQ(b(1), 5 + 3_ef); EXPECT_EQ(b(2), 6 + 6_ef); } TEST(init, Random) { complexf c = emtx::Random()(0,0); EXPECT_NE(c.real(), 0); EXPECT_NE(c.imag(), 0); typedef dualf Rt; using duals::random; Rt b = emtx::Random()(0,0); EXPECT_NE(b.rpart(), 0); //EXPECT_NE(b.dpart(), 0); // edf<3> j = edf<3>::Random(3,3); EXPECT_NE(j(1,2).rpart(), 0); //EXPECT_NE(j(2,0).dpart(), 0); // ecdf<3> k = ecdf<3>::Random(3,3); EXPECT_NE(k(0,1).real().rpart(), 0); //EXPECT_NE(k(1,1).imag().dpart(), 0); // using duals::randos::random2; dualf x = random2(); EXPECT_NE(x.rpart(), 0); EXPECT_NE(x.dpart(), 0); duald y = random2(); EXPECT_NE(y.rpart(), 0); EXPECT_NE(y.dpart(), 0); //EXPECT_NE(k(1,1).imag().dpart(), 0); // } TEST(assign, ops) { emtx ed; emtx ef; emtx ecd; emtx ecf; emtx edd; emtx edf_; emtx ecdd; emtx ecdf_; ed *= 2; ef *= 2; //ecd *= 2; //ecf *= 2; //ecd *= 2_e; //ecf *= 2_ef; edd *= 2; edf_ *= 2; edd *= 2_e; edf_ *= 2_ef; //ecdd *= 2; // ecdf_ *= 2; } TEST(Array, math) { int N = 5; emtx x(N,1); emtx y(N,1); emtx z(N,1); x.array() += 1; x += y + z; x *= 2; emtx a(N,1); emtx A(N,1); emtx c(N,1); a.array() = 1 + 1_e; a.array() += 3_e; a.array() = 0; a.array() += 1; A.array() += 2; c = a + A; c = a * 2; c = a * 2_e; c = 2 * a; c = (3 + 2_e) * a; c *= 3; c *= 3_e; EXPECT_EQ(c(N-1), 27_e); } TEST(access, CwiseRpartOp) { // on float matrices (pass-through) emtx a, b = emtx::Random(); a = b.unaryExpr(duals::CwiseRpartOp()); EXPECT_NE(a.norm(), 0); // on dual matrices emtx d; a = d.unaryExpr(duals::CwiseRpartOp()); a = d.unaryExpr(duals::CwiseDpartOp()); a = rpart(d); a = dpart(d); // on complex> matrices emtx g, f = emtx::Random(); emtx e; e.array() = f.array().cast() - 1_ef * f.array().cast(); g = e.unaryExpr(duals::CwiseRpartOp()); EXPECT_EQ((f-g).norm(), 0); g = f.unaryExpr(duals::CwiseRpartOp()); EXPECT_EQ((f-g).norm(), 0); g = rpart(f); EXPECT_EQ((f-g).norm(), 0); g = e.unaryExpr(duals::CwiseDpartOp()); EXPECT_EQ((f+g).norm(), 0); g = f.unaryExpr(duals::CwiseDpartOp()); EXPECT_EQ((g).norm(), 0); g = dpart(f); EXPECT_EQ((g).norm(), 0); } TEST(access, CwiseDpartOp) { // on float matrices (pass-through) emtx a, b = emtx::Random(); a = b.unaryExpr(duals::CwiseDpartOp()); EXPECT_EQ(a.norm(), 0); // on dual matrices emtx d = b - 1_ef * b; a = d.unaryExpr(duals::CwiseDpartOp()); EXPECT_NE(a.norm(), 0); EXPECT_EQ((a+b).norm(), 0); // on complex> matrices emtx g, f = emtx::Random(); emtx e; e.array() = f.array().cast() - 1_ef * f.array().cast(); g = e.unaryExpr(duals::CwiseDpartOp()); EXPECT_EQ((g+f).norm(), 0); d = e.real(); EXPECT_NE(d.norm(), 0); } TEST(measure, norm) { typedef emtx MatrixC; MatrixC c = (MatrixC() << 1,2,3, 4,5,6, 7,8,9).finished(); EXPECT_EQ(c.cwiseAbs().colwise().sum().maxCoeff(), complexf(18)); //EXPECT_EQ(c.maxCoeff(), complexf(9)); //typedef duald Rt; typedef dualf Rt; //typedef cdualf Rt; typedef emtx MatrixD; Rt b = 1+0_ef; b = 3; Rt d(1); MatrixD x; x << d; MatrixD a = (MatrixD() << 1,2,3, 4,5+5_ef,6, 7,8,9).finished(); //typename MatrixD::Index index; EXPECT_EQ(a.sum(), 45 + 5_ef); EXPECT_NEAR(rpart(a.norm()), 16.8819430161341337282, 1e-5); EXPECT_NEAR(rpart(a.mean()), 5, 1e-5); EXPECT_NEAR(dpart(a.mean()), 0.555555555555555, 1e-5); EXPECT_EQ(a.minCoeff(), 1); EXPECT_EQ(a.maxCoeff(), 9); EXPECT_EQ(a.trace(), 15 + 5_ef); EXPECT_EQ(a.squaredNorm(), 285+0_e); EXPECT_EQ(a.lpNorm<1>(), 45 + 5_ef); //EXPECT_EQ(a.lpNorm(), 9); // 1-norm //EXPECT_EQ(a.colwise().lpNorm<1>().maxCoeff(), 45 + 5_ef); EXPECT_EQ(a.cwiseAbs().colwise().sum().maxCoeff(), 18); } TEST(dual_decay, stat) { emtx ef; emtx ecd; emtx ecf; emtx edd; emtx edf_; emtx ecdd; emtx ecdf_; _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); _EXPECT_TRUE(std::is_same>); } TEST(dpart, matrix) { emtx a = emtx::Random(3,3); emtx b = emtx::Random(3,3); emtx c = emtx::Random(3,3); emtx d = emtx::Random(3,3); emtx A = a + 1_ef * b; emtx B = c + 1_ef * d; emtx AA; emtx BB,CC; AA.real() = A; AA.imag() = B; BB.real() = a; BB.imag() = c; CC.real() = b; CC.imag() = d; EXPECT_EQ((rpart(A) - a).norm(),0); EXPECT_EQ((dpart(A) - b).norm(),0); EXPECT_EQ((rpart(AA) - BB).norm(),0); EXPECT_EQ((dpart(AA) - CC).norm(),0); } TEST(func, expm) { typedef float T; typedef dual dualt; typedef std::complex> cdualt; #define NN 3 #define N2 6 emtx a,b; a = emtx::Random(); a.array() += 1.1 + 2.2_ef; a.setZero(); a = eexpokit::padm(a); EXPECT_LT((a - emtx::Identity()).norm(), 1e-6) << "a=" << a << "\n"; a *= 1+2_e; EXPECT_LT((a - emtx::Identity()).norm(), 1e-6) << "a=" << a << "\n"; emtx c; //b = a + 1_e * emtx::Random(); c.setZero(); c = c.exp(); //c = expm4(c); EXPECT_LT((c - emtx::Identity()).norm(), 1e-6) << "b=" << b << "\n"; #undef NN #undef N2 } #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char **argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/bench_fmt.cpp0000644000175000017500000000527414163340332023001 0ustar carstencarsten/* * Copyright 2019 Michael Tesch. All rights reserved. * * author(s): michael tesch (tesch1@gmail.com) * */ /*! \file bench_fmt.cpp * \brief benchmarking for formatting * * To disable freq scaling: * cpupower frequency-set --governor performance * to re-enable freq scaling: * cpupower frequency-set --governor ondemand */ #include #include #define CPPDUALS_LIBFMT #define CPPDUALS_LIBFMT_COMPLEX #include "duals/dual" template void B_fmt_1(benchmark::State& state) { T c(3.4); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{}", c)); } } template void B_ios_1(benchmark::State& state) { T c(3.4); for (auto _ : state) { std::string s; std::stringstream ss; ss << c; s = ss.str(); } } template void B_fmt(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{}", c)); } } template void B_fmt_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:g}", c)); } } template void B_fmt_star_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:*g}", c)); } } template void B_fmt_comma_g(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; benchmark::DoNotOptimize(s = fmt::format("{:,g}", c)); } } template void B_ios(benchmark::State& state) { T c(3.4, 5.6); for (auto _ : state) { std::string s; std::stringstream ss; ss << c; s = ss.str(); } } BENCHMARK_TEMPLATE(B_fmt_1, float); BENCHMARK_TEMPLATE(B_fmt_1, double); BENCHMARK_TEMPLATE(B_ios_1, float); BENCHMARK_TEMPLATE(B_ios_1, double); BENCHMARK_TEMPLATE(B_fmt_g, std::complex); BENCHMARK_TEMPLATE(B_fmt_star_g, std::complex); BENCHMARK_TEMPLATE(B_fmt_comma_g, std::complex); BENCHMARK_TEMPLATE(B_fmt, std::complex); BENCHMARK_TEMPLATE(B_fmt, std::complex); BENCHMARK_TEMPLATE(B_fmt, duals::dual); BENCHMARK_TEMPLATE(B_fmt, duals::dual); BENCHMARK_TEMPLATE(B_ios, std::complex); BENCHMARK_TEMPLATE(B_ios, std::complex); BENCHMARK_TEMPLATE(B_ios, duals::dual); BENCHMARK_TEMPLATE(B_ios, duals::dual); #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { std::ios::sync_with_stdio(false); std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); } tmp_ns50wwy/src/include/cppduals/tests/test_solve.cpp0000644000175000017500000000732514163340332023242 0ustar carstencarsten//===-- test_funcs.cpp - test duals/dual ------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_eigen Dual number Eigen integration tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include #include #include "eexpokit/padm.hpp" #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define EXPECT_DEQ(A,B) EXPECT_EQ(rpart(A), rpart(B)); EXPECT_EQ(dpart(A), dpart(B)) #define ASSERT_DEQ(A,B) ASSERT_EQ(rpart(A), rpart(B)); ASSERT_EQ(dpart(A), dpart(B)) #define EXPECT_DNE(A,B) EXPECT_NE(rpart(A), rpart(B)); EXPECT_NE(dpart(A), dpart(B)) #define EXPECT_DNEAR(A,B,tol) \ EXPECT_NEAR(rpart(A), rpart(B),tol); \ EXPECT_NEAR(dpart(A), dpart(B),tol) template > void solveLu() { auto tol = NN * NN * 10000 * Eigen::NumTraits::epsilon(); // check scalar emtx a = emtx::Random(); emtx b = emtx::Random(); emtx c,d,e; c = a * b; d = a.lu().solve(c); EXPECT_LT((b - d).norm(), tol); // check dual emtx A = a + DT(0,1) * emtx::Random(); emtx B = b + DT(0,1) * emtx::Random(); emtx C,D,E; C = A * B; D = A.lu().solve(C); EXPECT_LT(rpart(B - D).norm(), tol); EXPECT_LT(dpart(B - D).norm(), tol); } #if defined(PHASE_1) TEST(solveLu, float2) { solveLu(); } TEST(solveLu, float7) { solveLu(); } TEST(solveLu, float8) { solveLu(); } TEST(solveLu, float31) { solveLu(); } TEST(solveLu, double2) { solveLu(); } TEST(solveLu, double3) { solveLu(); } TEST(solveLu, double4) { solveLu(); } TEST(solveLu, double31) { solveLu(); } #elif defined(PHASE_2) TEST(solveLu, complexf2) { solveLu(); } TEST(solveLu, complexf8) { solveLu(); } TEST(solveLu, complexf31) { solveLu(); } TEST(solveLu, complexd31) { solveLu(); } #endif #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char **argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/test_expm.cpp0000644000175000017500000001524314163340332023061 0ustar carstencarsten//===-- test_funcs.cpp - test duals/dual ------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_eigen Dual number Eigen integration tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include #include #include "eexpokit/padm.hpp" #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define EXPECT_DEQ(A,B) EXPECT_EQ(rpart(A), rpart(B)); EXPECT_EQ(dpart(A), dpart(B)) #define ASSERT_DEQ(A,B) ASSERT_EQ(rpart(A), rpart(B)); ASSERT_EQ(dpart(A), dpart(B)) #define EXPECT_DNE(A,B) EXPECT_NE(rpart(A), rpart(B)); EXPECT_NE(dpart(A), dpart(B)) #define EXPECT_DNEAR(A,B,tol) \ EXPECT_NEAR(rpart(A), rpart(B),tol); \ EXPECT_NEAR(dpart(A), dpart(B),tol) /// Simple taylor series, truncated when |S| is "small enough" template ReturnT expm4(const Eigen::EigenBase & A_, typename DerivedA::RealScalar mn = std::numeric_limits::epsilon() * 1000) { //std::cerr << "do PO:" << type_name() << "\n"; typedef typename DerivedA::RealScalar Real; using std::isfinite; const DerivedA & A = A_.derived(); int maxt = std::numeric_limits::digits; int s = log2(rpart(A.derived().norm())) + 1; s = std::max(0, s); auto B = A * pow(Real(2), -s); ReturnT R(A.rows(), A.cols()); R.setIdentity(); R += B; ReturnT S = B; for (int ii = 2; ii < maxt; ii++) { S = S * B * Real(1.0/ii); R += S; auto Sn = S.norm(); if (!isfinite(Sn)) { std::cout << "expm() non-finite norm:" << Sn << " at " << ii << "\n"; std::cout << " |R| = " << R.norm() << " s=" << s << "\n" << " |A| = " << rpart(A.real().norm()) << "\n" << " |A/2^s|=" << rpart(A.real().norm()/pow(2,s)) << "\n"; break; } // converged yet? if (Sn < mn) break; if (ii == maxt - 1) { std::cout << "expm() didn't converge in " << maxt << " |S| = " << Sn << "\n"; throw std::invalid_argument("no converge"); } } for (; s; s--) R = R * R; return R; } template > void dexpm() { //typedef std::complex T; //typedef std::complex> dualt; auto tol = NN * NN * 10000 * Eigen::NumTraits::epsilon(); #define N2 2*NN // check dual emtx A = emtx::Random(); emtx V = emtx::Random(); emtx dA1,dA2,dA3,eA1,eA2,eA3; // dA/dV method 1 emtx AVA = emtx::Zero(); AVA.block( 0, 0,NN,NN) = A; AVA.block( 0,NN,NN,NN) = V; AVA.block(NN,NN,NN,NN) = A; AVA = AVA.exp(); eA1 = AVA.block(0,0,NN,NN); dA1 = AVA.block(0,NN,NN,NN); // dA/dV method 2 emtx a,b; a = A + DT(1_e) * V; b = eexpokit::padm(a,13); //b = expm4(a); //b = a.exp(); eA2 = rpart(b); dA2 = dpart(b); #if 0 // dA/dV method 3 //typedef Eigen::AutoDiffScalar> AD; typedef Eigen::Matrix Vector1t; typedef Eigen::AutoDiffScalar AD; typedef Eigen::Matrix MatrixAD; //MatrixAD c = A.template cast(); MatrixAD c(A); for (Eigen::Index j = 0; j < NN; j++) for (Eigen::Index i = 0; i < NN; i++) c(i,j).derivatives()(0) = V(i,j); //auto d = eexpokit::padm(c,8); MatrixAD d = c.exp(); eA3 = d; for (Eigen::Index j = 0; j < NN; j++) for (Eigen::Index i = 0; i < NN; i++) dA3(i,j) = d(i,j).derivatives()(0); EXPECT_LT((dA1 - dA3).norm(), tol) << "dA1=" << dA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "dA3=" << dA3.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; #endif #if 0 std::cout << "A=" << A << "\n"; std::cout << "V=" << V << "\n"; std::cout << "a=" << a << "\n"; std::cout << "b=" << b << "\n"; #endif EXPECT_LT((eA1 - eA2).norm(), tol) << "eA1=" << eA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "eA2=" << eA2.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; EXPECT_LT((dA1 - dA2).norm(), tol) << "dA1=" << dA1.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n" << "dA2=" << dA2.block(0,0,std::min(4,NN),std::min(4,NN)) << "\n"; #undef NN #undef N2 } #if defined(PHASE_1) TEST(dexpm, float2) { dexpm(); } //TEST(dexpm, float3) { dexpm(); } TEST(dexpm, float7) { dexpm(); } #elif defined(PHASE_2) TEST(dexpm, float8) { dexpm(); } //TEST(dexpm, float16) { dexpm(); } TEST(dexpm, float31) { dexpm(); } #elif defined(PHASE_3) TEST(dexpm, double2) { dexpm(); } TEST(dexpm, double3) { dexpm(); } #elif defined(PHASE_4) TEST(dexpm, double4) { dexpm(); } TEST(dexpm, double31) { dexpm(); } //TEST(dexpm, adouble) { dexpm(); } #elif defined(PHASE_5) TEST(dexpm, cfloat8) { dexpm(); } TEST(dexpm, cfloat31) { dexpm(); } #endif #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char **argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/test_packets.cpp0000644000175000017500000005022214163340332023536 0ustar carstencarsten//===-- test_packets.cpp - test duals/dual_eigen -----------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_packets Dual number Eigen integration tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define EXPECT_DEQ(A,B) EXPECT_EQ(rpart(A), rpart(B)); EXPECT_EQ(dpart(A), dpart(B)) #define ASSERT_DEQ(A,B) ASSERT_EQ(rpart(A), rpart(B)); ASSERT_EQ(dpart(A), dpart(B)) #define EXPECT_DNE(A,B) EXPECT_NE(rpart(A), rpart(B)); EXPECT_NE(dpart(A), dpart(B)) #define EXPECT_DNEAR(A,B,tol) \ EXPECT_NEAR(abs(rpart((A) - (B))),0,tol); \ EXPECT_NEAR(abs(dpart((A) - (B))),0,tol) #if !defined(CPPDUALS_DONT_VECTORIZE) && !defined(EIGEN_DONT_VECTORIZE) TEST(Packet1cdf, pload_pstore) { using namespace Eigen::internal; cdualf cd1 = cdualf(1+2_ef,3+4_ef); cdualf cd2 = cdualf(5+6_ef,7+8_ef); Packet1cdf p1 = pload(&cd1); pstore(&cd2, p1); EXPECT_DEQ(cd1, cd2); } using duals::randos::random2; #define GEN_PACKET_TEST_BI(PTYPE,pop,op) TEST(PTYPE,pop) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ double tol = rpart(20*Eigen::NumTraits::epsilon()); \ std::vector> cd1(N); \ std::vector> cd2(N); \ std::vector> cd3(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ cd2[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ PTYPE p2 = pload(cd2.data()); \ auto p3 = pop (p1, p2); \ pstore(cd3.data(), p3); \ for (int i = 0; i < N; i++) { \ EXPECT_DNEAR(cd3[i], cd1[i] op cd2[i], tol) \ << cd1[i] << ',' << cd2[i] << " fail at " << i; \ } \ } #define GEN_PACKET_TEST_UN(PTYPE,pop,op) TEST(PTYPE,pop) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ double tol = rpart(20*Eigen::NumTraits::epsilon()); \ std::vector> cd1(N); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ auto p2 = pop (p1); \ pstore(cd2.data(), p2); \ for (int i = 0; i < N; i++) { \ EXPECT_DNEAR(cd2[i], op(cd1[i]), tol) \ << cd1[i] << " fail at " << i; \ } \ } #define GEN_PACKET_TEST_RD(PTYPE,pop,op) TEST(PTYPE,pop) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ double tol = rpart(20*Eigen::NumTraits::epsilon()); \ std::vector> cd1(N); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ DTYPE p2 = pop (p1); \ DTYPE acc(1); \ for (int i = 0; i < N; i++) \ acc op##= cd1[i]; \ EXPECT_DNEAR(acc, (DTYPE(1) op p2), tol) \ << acc << " " << p2 << " fail."; \ } #define GEN_PACKET_TEST_REVERSE(PTYPE) TEST(PTYPE,preverse) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ std::vector> cd1(N); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ PTYPE p2 = preverse (p1); \ pstore(cd2.data(), p2); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[i], cd2[N-1-i]) \ << cd1[i] << "," << cd2[N-1-i] << " @ " << i << " fail."; \ } \ } #define GEN_PACKET_TEST_FIRST(PTYPE) TEST(PTYPE,pfirst) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ std::vector> cd1(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ DTYPE c2 = pfirst (p1); \ EXPECT_DEQ(cd1[0], c2) \ << cd1[0] << "," << c2 << " fail."; \ } #define GEN_PACKET_TEST_SET1(PTYPE) TEST(PTYPE,pset1) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ std::vector> cd1(N); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ cd2[i] = random2(); \ } \ DTYPE c2 = random2(); \ PTYPE p1 = pset1(c2); \ PTYPE p2 = pload1(&c2); \ pstore(cd1.data(), p1); \ pstore(cd2.data(), p2); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[i], c2) \ << i << ":" << cd1[i] << "," << c2 << " fail."; \ EXPECT_DEQ(cd2[i], c2) \ << i << ":" << cd1[i] << "," << c2 << " fail."; \ } \ } #define GEN_PACKET_TEST_LOADDUP(PTYPE) TEST(PTYPE,ploaddup) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ std::vector> cd1(1+N/2); \ std::vector> cd2(N); \ for (size_t i = 0; i < 1+N/2; i++) { cd1[i] = random2(); } \ for (size_t i = 0; i < N ; i++) { cd2[i] = random2(); } \ PTYPE p1 = ploaddup(cd1.data()); \ pstore(cd2.data(), p1); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[i/2], cd2[i]) \ << i << ":" << cd1[i/2] << "," << cd2[i] << " fail."; \ } \ } #define GEN_PACKET_TEST_ULOAD(PTYPE) TEST(PTYPE,ploadu) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ char b1[sizeof(DTYPE) * (N+2)]; \ char b2[sizeof(DTYPE) * (N+2)]; \ DTYPE * cd1 = (DTYPE *)&b1[1]; \ DTYPE * cd2 = (DTYPE *)&b2[2]; \ for (size_t i = 0; i < N+1; i++) { \ cd1[i] = random2(); \ cd2[i] = random2(); \ } \ PTYPE p1 = ploadu(&cd1[1]); \ pstoreu(&cd2[1], p1); \ for (int i = 1; i < N+1; i++) { \ EXPECT_DEQ(cd1[i], cd2[i]) \ << cd1[i] << "," << cd2[i] << " fail."; \ } \ } #define GEN_PACKET_TEST_BROADCAST(PTYPE,B) TEST(PTYPE,pbroadcast##B) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ PTYPE p1; \ std::vector> cd1(B); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { cd1[i] = random2(); } \ PTYPE p0,p3,p2; \ if (B == 2) pbroadcast2(cd1.data(), p0,p1); \ if (B == 4) pbroadcast4(cd1.data(), p0,p1,p2,p3); \ pstore(cd2.data(), p0); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[0], cd2[i]) << i << ":" << cd1[0] << "," << cd2[i] << " fail."; \ } \ pstore(cd2.data(), p1); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[1], cd2[i]) << i << ":" << cd1[1] << "," << cd2[i] << " fail."; \ } \ if (B == 4) { \ pstore(cd2.data(), p2); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[2], cd2[i]) << i << ":" << cd1[2] << "," << cd2[i] << " fail."; \ } \ pstore(cd2.data(), p3); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(cd1[3], cd2[i]) << i << ":" << cd1[3] << "," << cd2[i] << " fail."; \ } \ } \ } #define GEN_PACKET_TEST_CPLXFLIP(PTYPE) TEST(PTYPE,pcplxflip) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ std::vector> cd1(N); \ std::vector> cd2(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ cd2[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ PTYPE p2 = pcplxflip (p1); \ pstore(cd2.data(), p2); \ for (int i = 0; i < N; i++) { \ EXPECT_DEQ(real(cd1[i]), imag(cd2[i])) \ << cd1[i] << "," << cd2[i] << " fail."; \ EXPECT_DEQ(imag(cd1[i]), real(cd2[i])) \ << cd1[i] << "," << cd2[i] << " fail."; \ } \ } #define GEN_PACKET_TEST_CONJ_HELPER(PTYPE) TEST(PTYPE,conj_helper) { \ using namespace Eigen::internal; \ typedef unpacket_traits::type DTYPE; \ const static int N = unpacket_traits::size; \ double tol = rpart(10*Eigen::NumTraits::epsilon()); \ std::vector> cd1(N); \ std::vector> cd2(N); \ std::vector> cd3(N); \ std::vector> r(N); \ for (size_t i = 0; i < N; i++) { \ cd1[i] = random2(); \ cd2[i] = random2(); \ cd3[i] = random2(); \ } \ PTYPE p1 = pload(cd1.data()); \ PTYPE p2 = pload(cd2.data()); \ PTYPE p3 = pload(cd3.data()); \ conj_helper cj; p3 = cj.pmadd(p1,p2,p3); \ pstore(r.data(), p3); \ for (int i = 0; i < N; i++) { \ EXPECT_DNEAR(r[i], cd1[i] * cd2[i] + cd3[i], tol) \ << r[i] << "!=" << cd1[i] << "*" << cd3[i] << "+" << cd3[i] << " fail."; \ } \ } #define GEN_PACKET_TESTS(PTYPE) \ GEN_PACKET_TEST_BI(PTYPE,padd,+) \ GEN_PACKET_TEST_BI(PTYPE,psub,-) \ GEN_PACKET_TEST_BI(PTYPE,pmul,*) \ GEN_PACKET_TEST_BI(PTYPE,pdiv,/) \ GEN_PACKET_TEST_UN(PTYPE,pnegate,-) \ GEN_PACKET_TEST_RD(PTYPE,predux,+) \ GEN_PACKET_TEST_RD(PTYPE,predux_mul,*) \ GEN_PACKET_TEST_ULOAD(PTYPE) \ GEN_PACKET_TEST_SET1(PTYPE) \ GEN_PACKET_TEST_LOADDUP(PTYPE) \ /*GEN_PACKET_TEST_BROADCAST(PTYPE,2)*/ \ GEN_PACKET_TEST_BROADCAST(PTYPE,4) \ GEN_PACKET_TEST_FIRST(PTYPE) \ GEN_PACKET_TEST_REVERSE(PTYPE) #define GEN_CPACKET_TESTS(PTYPE) \ GEN_PACKET_TESTS(PTYPE) \ GEN_PACKET_TEST_CPLXFLIP(PTYPE) \ GEN_PACKET_TEST_CONJ_HELPER(PTYPE) \ GEN_PACKET_TEST_UN(PTYPE,pconj,conj) // TODO: //pcplxflip //preduxp //pand //por //pxor //andnot //pbroadcast4 //ploadquad (for packets w/ size==8) //pgather //pscatter //align_impl //insertfirst //insertlast // test the tests GEN_PACKET_TESTS(Packet4f) GEN_CPACKET_TESTS(Packet2cf) #if defined(EIGEN_VECTORIZE_AVX) GEN_CPACKET_TESTS(Packet4cf) #endif #ifdef EIGEN_VECTORIZE_SSE GEN_PACKET_TESTS(Packet2df) GEN_PACKET_TESTS(Packet1dd) GEN_CPACKET_TESTS(Packet1cdf) #endif #if defined(EIGEN_VECTORIZE_AVX) GEN_PACKET_TESTS(Packet4df) GEN_PACKET_TESTS(Packet2dd) GEN_CPACKET_TESTS(Packet2cdf) #if defined(__AVX2__) GEN_CPACKET_TESTS(Packet1cdd) #endif #endif #endif // CPPDUALS_DONT_VECTORIZE TEST(compile, VECTORIZE) { #if defined(CPPDUALS_DONT_VECTORIZE) || defined(EIGEN_DONT_VECTORIZE) EXPECT_TRUE(false) << "CPPDUALS_DONT_VECTORIZE supresses vectorization tests!"; #endif } TEST(compile, SSE) { EXPECT_TRUE(std::string(Eigen::SimdInstructionSetsInUse()).find("SSE") != std::string::npos) << "Not using SSE instructions:" << Eigen::SimdInstructionSetsInUse(); #ifndef EIGEN_VECTORIZE_SSE EXPECT_TRUE(false) << "Not using EIGEN_VECTORIZE_SSE:" << Eigen::SimdInstructionSetsInUse(); #endif } TEST(compile, AVX) { EXPECT_TRUE(std::string(Eigen::SimdInstructionSetsInUse()).find("AVX") != std::string::npos) << "Not using AVX instructions:" << Eigen::SimdInstructionSetsInUse(); #ifndef EIGEN_VECTORIZE_AVX EXPECT_TRUE(false) << "Not using EIGEN_VECTORIZE_AVX:" << Eigen::SimdInstructionSetsInUse(); #endif } #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char **argv) { std::ptrdiff_t l1, l2, l3; Eigen::internal::manage_caching_sizes(Eigen::GetAction, &l1, &l2, &l3); std::cout << "l1=" << l1 << " l2=" << l2 << " l3=" << l3 << "\n"; std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/CMakeLists.txt0000644000175000017500000002025414163340332023103 0ustar carstencarsten# # Part of the cppduals Project # # (c)2019 Michael Tesch. tesch1@gmail.com # # See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for # license information. # # This Source Code Form is subject to the terms of the Mozilla # Public License v. 2.0. If a copy of the MPL was not distributed # with this file, You can obtain one at http://mozilla.org/MPL/2.0/. # gtest_discover_tests requires 3.10 cmake_minimum_required (VERSION 3.10) # Configure google-test as a downloadable library. include (GoogleTest) if (WIN32) add_definitions (-D_USE_MATH_DEFINES) endif () include_directories ("${CMAKE_SOURCE_DIR}") include_directories ("${DEPS_ROOT}/include") include_directories ("${EIGEN3_INCLUDE_DIRS}") #include_directories ("${MPFR_INCLUDES}") include_directories ("${EXPOKIT_INCLUDE_DIR}") set (IOFORMAT "IOFormat(FullPrecision, DontAlignCols, \", \", \"\\$\\n\", \"\", \"\", \"[\", \"]\")") add_definitions (-DEIGEN_DEFAULT_IO_FORMAT=${IOFORMAT}) #add_definitions (-DEIGEN_DEFAULT_IO_FORMAT=EIGEN_IO_FORMAT_OCTAVE) # # Correctness & Coverage # if (NOT MSVC) set (OPT_FLAGS "-O2") set (OPT_FLAGS "-O3;-msse3") set (OPT_FLAGS "-O3;-mavx2;-mfma") set (OPT_FLAGS "-O3;-march=native") else () set (OPT_FLAGS "/arch:IA32") set (OPT_FLAGS "/arch:SSE") set (OPT_FLAGS "/arch:SSE2") set (OPT_FLAGS "/arch:AVX2") endif () #set (OPT_FLAGS "${OPT_FLAGS};-fsanitize=address;-fno-omit-frame-pointer") set (OPT_FLAGS "${OPT_FLAGS};-DCPPDUALS_VECTORIZE_CDUAL") #set (OPT_FLAGS "${OPT_FLAGS};-DCPPDUALS_DONT_VECTORIZE") #set (OPT_FLAGS "${OPT_FLAGS};-DEIGEN_DONT_VECTORIZE") set (ALL_TESTS test_dual test_funcs test_eigen test_packets test_vectorize test_solve test_expm test_1 test_fmt example ) set (ALL_TEST_BINS ) foreach (TEST_ ${ALL_TESTS}) foreach (PHASE 1 2 3 4 5) # check if file has phase defined file (READ ${TEST_}.cpp TMPTXT) string (FIND "${TMPTXT}" "PHASE_${PHASE}" hasphase) if ((${hasphase} EQUAL -1) AND NOT (${PHASE} EQUAL 1)) continue () endif () set (TEST ${TEST_}_${PHASE}) message ("Adding test ${TEST}") set (ALL_TEST_BINS ${ALL_TEST_BINS} ${TEST}) add_executable (${TEST} ${TEST_}.cpp) set (PHASE_FLAGS ${OPT_FLAGS} -DPHASE_${PHASE}) string (REPLACE ";" ", " L2 "${CMAKE_CXX_FLAGS}") target_compile_options (${TEST} PUBLIC ${PHASE_FLAGS}) target_compile_definitions (${TEST} PRIVATE "OPT_FLAGS=${L2}") target_link_libraries (${TEST} gtest_main cppduals_coverage_config) #target_link_libraries (${TEST} -lasan) add_dependencies (${TEST} eigenX expokitX) gtest_discover_tests (${TEST} TEST_LIST ${TEST}_targets) set_tests_properties (${${TEST}_targets} PROPERTIES TIMEOUT 10) # -ftest-coverage endforeach (PHASE) endforeach (TEST_) # special for fmt target_compile_features (test_fmt_1 PUBLIC cxx_std_14) target_link_libraries (test_fmt_1 fmt::fmt) if (CPPDUALS_BENCHMARK) # # Benchmarks # message ("searching: ${DEPS_ROOT} for google benchmark libs") find_library (BENCHMARK_LIBRARY benchmark PATHS ${DEPS_ROOT}/lib) find_library (BENCHMARKM_LIBRARY benchmark_main PATHS ${DEPS_ROOT}/lib) #find_library (PTHREAD_LIBRARY pthread) message ("BENCHMARK_LIBRARY: ${BENCHMARK_LIBRARY}") include_directories ("${BENCHMARK_INC_DIR}") if (Boost_FOUND AND NO) add_definitions (-DHAVE_BOOST=1) include_directories ("${Boost_INCLUDE_DIRS}") include_directories ("${PIRANHA_INCLUDE_DIR}") include_directories ("${AUDI_INCLUDE_DIR}") endif (Boost_FOUND AND NO) if (NOT APPLE AND NOT BLA_VENDOR) if (NOT BLA_STATIC) # default to static set (BLA_STATIC OFF) endif (NOT BLA_STATIC) set (BLA_VENDOR OpenBLAS) endif (NOT APPLE AND NOT BLA_VENDOR) find_package (BLAS REQUIRED) #find_package (LAPACK REQUIRED) add_definitions (-DHAVE_BLAS) #add_definitions (-DEIGEN_USE_BLAS) # find lapacke.h cblas.h set (CBLAS_HINTS ${BLAS_DIR} ${LAPACK_DIR} /usr /usr/local /opt /opt/local) set (CBLAS_PATHS /usr /usr/local /opt /opt/local /usr/local/opt /System/Library/Frameworks) # Finds the include directories for lapacke.h find_path (LAPACKE_INCLUDE_DIRS NAMES lapacke.h HINTS ${CBLAS_HINTS} PATH_SUFFIXES include inc include/x86_64 include/x64 openblas/include # Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/Headers PATHS ${CBLAS_PATHS} DOC "LAPACK(E) include header lapacke.h") mark_as_advanced (LAPACKE_INCLUDE_DIRS) if (LAPACKE_INCLUDE_DIRS) include_directories (${LAPACKE_INCLUDE_DIRS}) else () add_definitions (-DEIGEN_LAPACKE) endif (LAPACKE_INCLUDE_DIRS) # Finds the include directories for cblas*.h find_path (CBLAS_INCLUDE_DIRS NAMES cblas.h cblas_openblas.h cblas-openblas.h HINTS ${CBLAS_HINTS} PATH_SUFFIXES include inc include/x86_64 include/x64 openblas/include # Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current/Headers PATHS ${CBLAS_PATHS} DOC "BLAS include header cblas.h") mark_as_advanced (CBLAS_INCLUDE_DIRS) include_directories (${CBLAS_INCLUDE_DIRS}) foreach (cblas in cblas.h cblas_openblas.h cblas-openblas.h) if (EXISTS "${CBLAS_INCLUDE_DIRS}/${cblas}") add_definitions (-DCBLAS_HEADER="${cblas}") break() endif (EXISTS "${CBLAS_INCLUDE_DIRS}/${cblas}") endforeach (cblas) message ("Found BLAS : ${BLAS_LIBRARIES}") message ("Found cBLAS : ${CBLAS_INCLUDE_DIRS}") message ("Found lapacke : ${LAPACKE_INCLUDE_DIRS}") set (OPT_FLAGS "") if (NOT MSVC) #set (OPT_FLAGS "-O3;-mavx") #set (OPT_FLAGS "-O3;-march=native;-fopenmp") set (OPT_FLAGS "-O3;-msse3;-fopenmp") set (OPT_FLAGS "-O3") set (OPT_FLAGS "-O3;-msse3") set (OPT_FLAGS "-O3;-march=native;-funroll-loops") set (OPT_FLAGS "-O3;-msse3;-mavx2;-mfma") set (OPT_FLAGS "-O3;-march=native") #set (OPT_FLAGS "${OPT_FLAGS};-save-temps;-fverbose-asm") else () set (OPT_FLAGS "/arch:IA32") set (OPT_FLAGS "/arch:SSE") set (OPT_FLAGS "/arch:SSE2") set (OPT_FLAGS "/arch:AVX2") endif () #set (OPT_FLAGS "${OPT_FLAGS};-DEIGEN_DONT_VECTORIZE") #set (OPT_FLAGS "${OPT_FLAGS};-DCPPDUALS_DONT_VECTORIZE") #set (OPT_FLAGS "${OPT_FLAGS};-DCPPDUALS_DONT_VECTORIZE_CDUAL") foreach (BENCH bench_dual bench_eigen bench_gemm bench_example bench_fmt) add_executable (${BENCH} ${BENCH}.cpp) target_compile_options (${BENCH} PUBLIC ${OPT_FLAGS}) #set_target_properties (${BENCH} PROPERTIES LINK_FLAGS -fopenmp) #target_link_options (${BENCH} PUBLIC ${OPT_FLAGS}) string (REPLACE ";" ", " L2 "${OPT_FLAGS} ${CMAKE_CXX_FLAGS}") target_compile_definitions (${BENCH} PRIVATE "OPT_FLAGS=${L2}") add_dependencies (${BENCH} benchmarkX eigenX expokitX) target_link_libraries (${BENCH} ${BENCHMARK_LIBRARY} -lpthread ${BLAS_LIBRARIES}) endforeach (BENCH) target_link_libraries (bench_fmt fmt::fmt) endif (CPPDUALS_BENCHMARK) add_executable (sandbox sandbox.cpp) add_dependencies (sandbox eigenX expokitX ) # mpfrX mprealX #target_compile_options (sandbox PUBLIC ${OPT_FLAGS}) target_compile_options (sandbox PUBLIC -DCPPDUALS_VECTORIZE_CDUAL) if (MSVC) target_compile_options (sandbox PUBLIC /arch:AVX2) else () target_compile_options (sandbox PUBLIC -O1 -msse3 -mavx2 -mfma) endif () set_target_properties (sandbox PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) target_link_libraries (sandbox PUBLIC cppduals_coverage_config) # # Generate coverage reports # if (CODE_COVERAGE) add_custom_target (cov DEPENDS ${ALL_TEST_BINS} COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target test COMMAND $ COMMAND lcov --capture --directory . --output-file coverage.info COMMAND lcov --remove coverage.info '/usr/*' --output-file coverage.info COMMAND lcov --remove coverage.info '*/thirdparty/*' --output-file coverage.info COMMAND lcov --remove coverage.info '*/googletest/*' --output-file coverage.info COMMAND lcov --list coverage.info ) add_custom_target (cov-html DEPENDS cov COMMAND rm -rf ../coverage COMMAND genhtml --ignore-errors source coverage.info --legend --title "make cov" --output-directory=../coverage COMMAND echo "output in coverage/index.html" ) endif () tmp_ns50wwy/src/include/cppduals/tests/runbench.sh0000755000175000017500000000767414163340332022521 0ustar carstencarsten#!/usr/bin/env bash # # run benchmarks - # CMDLINE="$0 $@" SCRIPT=$(basename "$0") SRCDIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)" OnError() { echo "$SCRIPT: Error on line ${BASH_LINENO[0]}, exiting." exit 1 } trap OnError ERR HOSTTAG=$(hostname | cut -d . -f 1) VERBOSE=1 GOLDBASE="$SRCDIR/gold-${HOSTTAG}" BENCH_LIST= BENCH_ARGS= MAKE_ARGS= TAG= usage () { if [ -t 3 ]; then echo "$SCRIPT failed, see log" >&3 ; fi cat < [options...] where are [bench_eigen|bench_dual] where [options...] are: -g|--makegold - save ouput to the 'gold' file standard location -T|--tag - add tag to results file [$TAG] -t|--test - filter benchmark tests against [*] -o|--output - output file name base [$OUTFILE] -f|--fast - run fast, at the great expense of accurate measurement -m|--medium - run medium fast, at the medium expense of accurate measurement -v|--verbose - be more verbose (can add multiple times) -q|--quiet - be more quiet (can add multiple times) -h|--help - print this usage message and exit current bench1 args: ${BENCH_ARGS} EOF exit 1 } # process command line args while [ $# -gt 0 ]; do key="$1" case $key in -g|--makegold) OUTFILE="$GOLDBASE" ;; -T|--tag) TAG="-$2" ; shift ;; -o|--output) OUTFILE="$2"; shift ;; -t|--test) BENCH_ARGS="${BENCH_ARGS} --benchmark_filter=$2" shift ;; -f|--fast) BENCH_ARGS="${BENCH_ARGS} --benchmark_min_time=0.001" ;; -m|--medium) BENCH_ARGS="${BENCH_ARGS} --benchmark_min_time=0.05" ;; -h|help) usage ;; -v|--verbose) VERBOSE=$(( VERBOSE + 1 )) MAKE_ARGS="${MAKE_ARGS} VERBOSE=1" ;; -q|--quiet) VERBOSE=$(( VERBOSE - 1 )) ;; *) if [ -f "${SRCDIR}/${key}.cpp" ]; then BENCH_LIST="${BENCH_LIST} ${key}" shift continue fi # unknown option echo "unknown option $key" usage ;; esac shift done # default if [ -z "${BENCH_LIST}" ]; then BENCH_LIST=bench_dual fi BENCH_ARGS="${BENCH_ARGS} --benchmark_out_format=json" ret=0 for NAME in ${BENCH_LIST}; do GOLDFILE=${GOLDBASE}.${NAME}${TAG}.json TMPFILE=$(mktemp ./bench.XXXXXXXXX) # if there's no gold reference yet, by default create one if [ -z "$OUTFILE" ]; then if [ ! -f "$GOLDFILE" ]; then echo "No gold file found, creating one..." REALOUT=$GOLDFILE else REALOUT=bo-${NAME}${TAG}.json fi else REALOUT=${OUTFILE}.${NAME}${TAG}.json fi BENCH_ARGS="${BENCH_ARGS} --benchmark_out=${TMPFILE}" #BENCH_ARGS="${BENCH_ARGS} --benchmark_counters_tabular=true" #BENCH_ARGS="${BENCH_ARGS} --benchmark_repetitions=1000" echo "GOLDFILE=$GOLDFILE" echo "TMPFILE =$TMPFILE" echo "OUTFILE =$OUTFILE" echo "REALOUT =$REALOUT" echo "Making ${NAME}${TAG} $MAKE_ARGS" make -j4 "${NAME}" $MAKE_ARGS echo "Running benchmarks: ./tests/${NAME} $BENCH_ARGS" #echo " : output in ${NAME}.out" if ! ./tests/${NAME} $BENCH_ARGS ; then echo "failed $NAME" ret=1 continue fi if [ "${REALOUT}" != "$TMPFILE" ]; then mv "$TMPFILE" "${REALOUT}" fi if [ "${REALOUT}" != "$GOLDFILE" ]; then echo "comparing with $GOLDFILE" ./thirdparty/benchmarkX/src/benchmarkX/tools/compare.py benchmarks "$GOLDFILE" "${REALOUT}" fi #./thirdparty/benchmarkX/src/benchmarkX/tools/compare.py filters ./bench_eigen B_Pade B_Expm echo "Benchmark ouput in '${REALOUT}'" done exit $ret tmp_ns50wwy/src/include/cppduals/tests/test_dual.cpp0000644000175000017500000006176314163340332023045 0ustar carstencarsten//===-- test_dual.cpp - test duals/dual -------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_dual Dual number class tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include #include #include "gtest/gtest.h" using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex chduald; typedef std::complex cduald; typedef std::complex cdualf; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; //using std::complex; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define EXPECT_DEQ(A,B) EXPECT_EQ((A).rpart(), (B).rpart()); EXPECT_EQ((A).dpart(), (B).dpart()) #define EXPECT_DNE(A,B) EXPECT_NE((A).rpart(), (B).rpart()); EXPECT_NE((A).dpart(), (B).dpart()) class Rando {}; TEST(template_, dual_traits) { // see about maybe using? // ::testing::StaticAssertTypeEq(); // value_type _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); // real_type // depth EXPECT_EQ(dual_traits::depth, 0); EXPECT_EQ(dual_traits::depth, 0); EXPECT_EQ(dual_traits::depth, 0); EXPECT_EQ(dual_traits::depth, 1); EXPECT_EQ(dual_traits::depth, 2); } TEST(template_, external_traits) { // is_dual // is_arithmetic // is_complex // EXPECT_TRUE(is_dual::value); EXPECT_TRUE(is_dual::value); EXPECT_FALSE(is_dual::value); EXPECT_FALSE(is_dual>::value); EXPECT_FALSE(is_complex::value); EXPECT_FALSE(is_complex::value); EXPECT_FALSE(is_complex::value); EXPECT_FALSE(is_complex::value); static_assert(!is_complex::value, "int is complex?"); static_assert(std::is_same::value,int>::type, int>::value, "yes"); EXPECT_TRUE(is_complex>::value); EXPECT_TRUE(is_complex>::value); // is_arithmetic - depends on #define CPPDUALS_ENABLE_STD_IS_ARITHMETIC //EXPECT_FALSE(std::is_arithmetic::value); //EXPECT_FALSE(std::is_arithmetic::value); EXPECT_FALSE(std::is_arithmetic>::value); EXPECT_FALSE(std::is_arithmetic::value); //EXPECT_TRUE(std::is_arithmetic::value); EXPECT_TRUE(std::is_compound::value); EXPECT_TRUE(std::is_compound::value); EXPECT_TRUE(std::is_compound::value); } TEST(numeric_limits, members) { // std::numeric_limits EXPECT_TRUE(std::numeric_limits::is_specialized == true); EXPECT_EQ(std::numeric_limits::min(), std::numeric_limits::min()); EXPECT_EQ(std::numeric_limits::lowest(), std::numeric_limits::lowest()); EXPECT_EQ(std::numeric_limits::max(), std::numeric_limits::max()); EXPECT_EQ(std::numeric_limits::epsilon(), std::numeric_limits::epsilon()); EXPECT_EQ(std::numeric_limits::round_error(), std::numeric_limits::round_error()); EXPECT_EQ(std::numeric_limits::infinity(), std::numeric_limits::infinity()); //EXPECT_EQ(std::numeric_limits::quiet_NaN(), std::numeric_limits::quiet_NaN()); //EXPECT_EQ(std::numeric_limits::signaling_NaN(), std::numeric_limits::signaling_NaN()); EXPECT_EQ(std::numeric_limits::denorm_min(), std::numeric_limits::denorm_min()); } using namespace duals; TEST(template_, common_type) { _EXPECT_TRUE(std::is_same::type, float>); _EXPECT_TRUE(std::is_same::type, dualf>); _EXPECT_TRUE(std::is_same::type, dualf>); _EXPECT_TRUE(std::is_same::type, dualf>); _EXPECT_TRUE(std::is_same::type, dualf>); // notable(!) because dual(double) _EXPECT_TRUE(std::is_same::type, dualf>); _EXPECT_TRUE(std::is_same::type, dualf>); dualf x; hyperdualf y; y = true ? x : y; _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperduald>); _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperdualf>); _EXPECT_TRUE(std::is_same::type, hyperduald>); _EXPECT_TRUE(std::is_same::type, float>); _EXPECT_TRUE(std::is_same::type, dualf>); // Rando type //_EXPECT_FALSE(std::is_same::type, float>); // cant // complex _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); // complex> _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); _EXPECT_TRUE(std::is_same::type, cdualf>); // expression types complexf a; dualf d(1,8), dd{2,9}; hyperduald h(2.f,3.f); cdualf cd(1+1_ef,2+2_ef); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same); _EXPECT_FALSE(duals::can_promote); _EXPECT_FALSE(duals::can_promote); //_EXPECT_TRUE(std::is_same); // no compile _EXPECT_TRUE(std::is_same); _EXPECT_TRUE(std::is_same > ); cd = a * dd; cd = a + dd; cd += d * a; } TEST(construction, raw) { dualf x; dualf y{1}; dualf yy(1); dualf za(2,3); dualf zb(7.,9); dualf zc(2.,4.); dualf w(yy = za); duald ze(2.f,3.f); hyperdualf X; hyperdualf Y(y); hyperdualf Z(zb,za); hyperdualf W(0,w); EXPECT_EQ(x.rpart(), 0); EXPECT_EQ(x.dpart(), 0); EXPECT_EQ(y.rpart(), 1); EXPECT_EQ(y.dpart(), 0); EXPECT_EQ(za.rpart(), 2); EXPECT_EQ(za.dpart(), 3); EXPECT_EQ(zb.rpart(), 7); EXPECT_EQ(zb.dpart(), 9); EXPECT_EQ(zc.rpart(), 2); EXPECT_EQ(zc.dpart(), 4); EXPECT_EQ(w.rpart(), 2); EXPECT_EQ(w.dpart(), 3); EXPECT_EQ(ze.rpart(), 2); EXPECT_EQ(ze.dpart(), 3); EXPECT_EQ(X.rpart().rpart(), 0); EXPECT_EQ(X.rpart().dpart(), 0); EXPECT_EQ(X.dpart().rpart(), 0); EXPECT_EQ(X.dpart().dpart(), 0); EXPECT_EQ(Y.rpart().rpart(), 1); EXPECT_EQ(Y.rpart().dpart(), 0); EXPECT_EQ(Y.dpart().rpart(), 0); EXPECT_EQ(Y.dpart().dpart(), 0); EXPECT_EQ(Z.rpart().rpart(), 7); EXPECT_EQ(Z.rpart().dpart(), 9); EXPECT_EQ(Z.dpart().rpart(), 2); EXPECT_EQ(Z.dpart().dpart(), 3); EXPECT_EQ(W.rpart().rpart(), 0); EXPECT_EQ(W.rpart().dpart(), 0); EXPECT_EQ(W.dpart().rpart(), 2); EXPECT_EQ(W.dpart().dpart(), 3); } TEST(construction, copy) { dualf za(2,3); dualf zb = za; EXPECT_EQ(zb.rpart(), 2); EXPECT_EQ(zb.dpart(), 3); } #if __cpp_user_defined_literals >= 200809 TEST(literal, expr) { dualf x = (2 + 0.0_ef) * (1 + 3_ef); duald y = 2.2 * 3.3_e + 0_e; dualld z = 4_el / 2 + 0.0_el; EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), 6); EXPECT_EQ(y.rpart(), 0); EXPECT_EQ(y.dpart(), 7.26); EXPECT_EQ(z.rpart(), 0); EXPECT_EQ(z.dpart(), 2); } #endif TEST(construction, assign) { dualf z(2,3); EXPECT_EQ(z.dpart(), 3); z = 5; EXPECT_EQ(z.rpart(), 5); EXPECT_EQ(z.dpart(), 0); hyperdualf x(1); EXPECT_EQ(x.rpart().rpart(), 1); EXPECT_EQ(x.rpart().dpart(), 0); EXPECT_EQ(x.dpart().rpart(), 0); EXPECT_EQ(x.dpart().dpart(), 0); x = 4; x = 5.0; x = 6.0f; x = 6.0L; } TEST(construction, cast) { dualf z = duald(1.1,2); EXPECT_EQ(z.dpart(), 2); z = z + z; int i = (int)z; EXPECT_EQ(i,2); } TEST(members, rpart) { EXPECT_EQ(rpart(3), 3); dualf z(2,3); EXPECT_EQ(z.rpart(), 2); EXPECT_EQ(z.dpart(), 3); z.rpart(4); EXPECT_EQ(z.rpart(), 4); EXPECT_EQ(z.dpart(), 3); } TEST(members, dpart) { EXPECT_EQ(dpart(3), 0); dualf z(2,3); EXPECT_EQ(z.dpart(), 3); EXPECT_EQ(z.rpart(), 2); z.dpart(4); EXPECT_EQ(z.dpart(), 4); EXPECT_EQ(z.rpart(), 2); } TEST(members, unary) { dualf z(2,3); EXPECT_EQ((-z).rpart(), -2); EXPECT_EQ((-z).dpart(), -3); EXPECT_EQ((+z).rpart(), 2); EXPECT_EQ((+z).dpart(), 3); } //TEST(members, real) { TBD //} TEST(comparison, eq) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // == EXPECT_TRUE(a == 2); EXPECT_TRUE(a == a); EXPECT_TRUE(c == d); EXPECT_FALSE(a == b); EXPECT_TRUE(a == c); EXPECT_TRUE(A == 2); EXPECT_TRUE(A == A); EXPECT_TRUE(C == D); EXPECT_FALSE(A == B); EXPECT_TRUE(A == C); //EXPECT_TRUE(a == 1); //disallowed //EXPECT_TRUE(A == 1); //disallowed //EXPECT_TRUE(A == a); //disallowed } TEST(comparison, ne) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // != EXPECT_TRUE(a != 3); EXPECT_FALSE(a != a); EXPECT_FALSE(c != d); EXPECT_TRUE(a != b); EXPECT_FALSE(a != c); EXPECT_TRUE(A != 3); EXPECT_FALSE(A != A); EXPECT_FALSE(C != D); EXPECT_TRUE(A != B); EXPECT_FALSE(A != C); //EXPECT_TRUE(A != a); disallowed } TEST(comparison, lt) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // < EXPECT_FALSE(a < 2); EXPECT_FALSE(a < a); EXPECT_FALSE(c < d); EXPECT_TRUE(a < b); EXPECT_FALSE(a < c); EXPECT_FALSE(A < a); EXPECT_FALSE(C < d); EXPECT_TRUE(A < b); EXPECT_FALSE(A < c); EXPECT_FALSE(a < A); EXPECT_FALSE(c < D); EXPECT_TRUE(a < B); EXPECT_FALSE(a < C); EXPECT_TRUE(a < 2.5); EXPECT_TRUE(A < 2.5); EXPECT_TRUE(a < 6); EXPECT_FALSE(a < 2); EXPECT_FALSE(a < 1); EXPECT_FALSE(2.5 < a); EXPECT_FALSE(6 < a); EXPECT_FALSE(2 < a); EXPECT_TRUE(1 < a); } TEST(comparison, gt) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // > EXPECT_FALSE(a > a); EXPECT_FALSE(c > d); EXPECT_FALSE(a > b); EXPECT_FALSE(a > c); EXPECT_TRUE(b > c); EXPECT_TRUE(b > a); EXPECT_FALSE(A > a); EXPECT_FALSE(C > d); EXPECT_FALSE(A > b); EXPECT_FALSE(A > c); EXPECT_FALSE(a > A); EXPECT_FALSE(c > D); EXPECT_FALSE(a > B); EXPECT_FALSE(a > C); EXPECT_TRUE(B > c); EXPECT_TRUE(B > a); EXPECT_TRUE(b > C); EXPECT_TRUE(b > A); EXPECT_FALSE(a > 2.5); EXPECT_FALSE(a > 6); EXPECT_FALSE(a > 2); EXPECT_TRUE(a > 1); EXPECT_TRUE(A > 1); EXPECT_TRUE(2.5 > a); EXPECT_TRUE(6 > a); EXPECT_FALSE(2 > a); EXPECT_FALSE(1 > a); EXPECT_TRUE(3 > A); } TEST(comparison, le) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // <= EXPECT_TRUE(a <= a); EXPECT_TRUE(c <= d); EXPECT_TRUE(a <= b); EXPECT_TRUE(a <= c); EXPECT_FALSE(b <= c); EXPECT_TRUE(A <= a); EXPECT_TRUE(C <= d); EXPECT_FALSE(B <= c); EXPECT_TRUE(A <= b); EXPECT_TRUE(A <= c); EXPECT_TRUE(a <= A); EXPECT_TRUE(c <= D); EXPECT_TRUE(a <= B); EXPECT_TRUE(a <= C); EXPECT_TRUE(a <= 2.5); EXPECT_TRUE(a <= 6); EXPECT_TRUE(a <= 2); EXPECT_FALSE(a <= 1); EXPECT_FALSE(2.5 <= a); EXPECT_FALSE(6 <= a); EXPECT_TRUE(2 <= a); EXPECT_TRUE(1 <= a); } TEST(comparison, ge) { dualf a(2,3); dualf b(4,1); dualf c(2,1); dualf d(2,1); hyperdualf A(a,a); hyperdualf B(b,b); hyperdualf C(c,c); hyperdualf D(d,d); // >= EXPECT_TRUE(a >= a); EXPECT_TRUE(c >= d); EXPECT_FALSE(a >= b); EXPECT_TRUE(a >= c); EXPECT_TRUE(A >= a); EXPECT_TRUE(C >= d); EXPECT_FALSE(A >= b); EXPECT_TRUE(A >= c); EXPECT_TRUE(a >= A); EXPECT_TRUE(c >= D); EXPECT_FALSE(a >= B); EXPECT_TRUE(a >= C); EXPECT_FALSE(a >= 2.5); EXPECT_FALSE(a >= 6); EXPECT_TRUE(a >= 2); EXPECT_TRUE(a >= 1); EXPECT_TRUE(2.5 >= a); EXPECT_TRUE(6 >= a); EXPECT_TRUE(2 >= a); EXPECT_FALSE(1 >= a); } TEST(compound_assign, same_type) { // OP= dualf x = 2 + 4_e; x *= x; x /= 2 + 4_e; x += 3.; x += 30 + 22.5_e; x -= 33.f; x -= 22.5_el; EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), 4); x += 1; x += 1.2; x += 1.2_e; x -= 1; x -= 1.2; x -= 1.2_e; x *= 1; x *= 1.2; x *= 1.2_e; x /= 1; x /= 1.2; x /= 1.2_e; } TEST(compound_assign, other_type) { dualf x = 2 + 4_e; hyperdualf y = 3 + 5_ef; y += x; y -= x; y *= x; y /= x; //x /= y; //impossible y += 1; y += 1.2; y += 1.2_e; y -= 1; y -= 1.2; y -= 1.2_e; y *= 1; y *= 1.2; y *= 1.2_e; y /= 1; y /= 1.2; y /= 1.2_e; } TEST(non_class, rd_part) { float z = 3; dualf x = 2 + 4_e; cdualf y(2 + 4_ef, 5 + 7_ef); EXPECT_EQ(rpart(z), 3); EXPECT_EQ(dpart(z), 0); EXPECT_EQ(rpart(x), 2); EXPECT_EQ(dpart(x), 4); EXPECT_EQ(rpart(y), complexf(2,5)); EXPECT_EQ(dpart(y), complexf(4,7)); } TEST(non_class, dconj) { float z = 3; dualf x = 2 + 4_ef; cdualf y(2 + 4_ef, 5 + 7_ef); EXPECT_EQ(dconj(z), 3); EXPECT_DEQ(dconj(x), 2 - 4_ef); EXPECT_DEQ(real(dconj(y)), 2 - 4_ef); EXPECT_DEQ(imag(dconj(y)), 5 - 7_ef); } TEST(non_class, putto) { { std::stringstream s; s << 2 + 3_ef; EXPECT_EQ(s.str(), "(2+3_ef)"); } { std::stringstream s; s << 2 + 3_e; EXPECT_EQ(s.str(), "(2+3_e)"); } { std::stringstream s; s << 2 + 3_el; EXPECT_EQ(s.str(), "(2+3_el)"); } #if 0 // seems reasonable { std::stringstream s; s << 3_e; EXPECT_EQ(s.str(), "(3_e)"); } #endif { std::stringstream s; s << std::fixed << std::setprecision(10) << 10 + 2_e; EXPECT_EQ(s.str(), "(10.0000000000+2.0000000000_e)"); } { std::stringstream s; s << cdualf(2 + 3_ef, 4 + 5_ef); EXPECT_EQ(s.str(), "((2+3_ef),(4+5_ef))"); } } TEST(non_class, getfro) { { std::stringstream s("( 2+3_ef )"); dualf x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), 3); } { std::stringstream s("( 2+-3_ef )"); dualf x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), -3); } { std::stringstream s("(+2+-3_ef )"); dualf x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), -3); } { std::stringstream s("(2 -3.3_e ) "); duald x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), -3.3); } { std::stringstream s("(2) "); duald x(1,8); s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 2); EXPECT_EQ(x.dpart(), 0); } { std::stringstream s("(2_e) "); duald x(1,8); s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 0); EXPECT_EQ(x.dpart(), 2); } { std::stringstream s("(3_e ) "); duald x(1,8); s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.rpart(), 0); EXPECT_EQ(x.dpart(), 3); } { std::stringstream s(" (2.3+ 3_el)"); dualld x; s >> x; EXPECT_TRUE(s); EXPECT_NEAR(0, (x - (2.3 + 3_el)).rpart(), 10000*std::numeric_limits::epsilon()); } #ifndef _MSC_VER // hoping for a patch to fix this { std::stringstream s("((2+3_ef),(4+5_ef))"); cdualf x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x, cdualf(2 + 3_ef, 4 + 5_ef)); EXPECT_EQ(x.real().rpart(), 2); EXPECT_EQ(x.real().dpart(), 3); EXPECT_EQ(x.imag().rpart(), 4); EXPECT_EQ(x.imag().dpart(), 5); } #endif { std::stringstream s("1 "); cdualf x; s >> x; EXPECT_TRUE(s); EXPECT_EQ(x.real().rpart(), 1); EXPECT_EQ(x.real().dpart(), 0); EXPECT_EQ(x.imag().rpart(), 0); EXPECT_EQ(x.imag().dpart(), 0); } // invalid conversions { std::stringstream s("(2 -3.3_e ) "); duald x; s.setstate(std::ios_base::failbit); s >> x; EXPECT_FALSE(s); EXPECT_NE(x.rpart(), 2); EXPECT_NE(x.dpart(), -3.3); } { std::stringstream s(""); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DEQ(x, duald()); } { std::stringstream s("()"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("(a)"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("asdf"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("(2+ _ef)"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("(2+ 3_)"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3_e); } { std::stringstream s("(2+ 3.3_ef"); dualf x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_ef); } { std::stringstream s("(2+ 3.3_ef}"); dualf x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_ef); } { std::stringstream s("(2+ 3.3_el)"); duald x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("(2+ 3.3_el)"); dualf x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_ef); } { std::stringstream s("(2+ 3.3_ef)"); dualld x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_el); } { std::stringstream s("(2,3.3_ef)"); dualld x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_e); } { std::stringstream s("(2+3.3_f)"); dualld x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_el); } { std::stringstream s("(2+3.3)"); dualld x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2+3.3_el); } { std::stringstream s("(2-3.3)"); dualld x; s >> x; EXPECT_FALSE(s); EXPECT_DNE(x, 2-3.3_el); } { std::stringstream s("(1 "); cdualf x; s >> x; EXPECT_FALSE(s); EXPECT_EQ(x, cdualf()); } { std::stringstream s("(1_) "); cdualf x; s >> x; EXPECT_FALSE(s); EXPECT_EQ(x, cdualf()); } { std::stringstream s("(1.3 _e) "); cduald x; s >> x; EXPECT_FALSE(s); EXPECT_EQ(x, cduald()); } } TEST(non_class, math) { dualf x = 2 + 4_e; hyperdualf y = 3 + 5_ef; // TODO: FIXME: check results too y = x + 1; y = 1 + x; y = x + x; y = y + x; y = y + 1; y = 1 + y; y = x - 1; y = 1 - x; y = x - x; y = y - x; y = y - 1; y = 1 - y; y = x * 1; y = 1 * x; y = x * x; y = y * x; y = y * 1; y = 1 * y; y = x / 1; y = 1 / x; y = x / x; y = y / x; y = y / 1; y = 1 / y; } TEST(non_class, random) { typedef dualf Rt; Rt a = duals::random(0.1, 0.99+0.88_ef); EXPECT_NE(a.rpart(), 0); EXPECT_NE(a.dpart(), 0); a = duals::random(0.1, 0.99); EXPECT_NE(a.rpart(), 0); EXPECT_EQ(a.dpart(), 0); Rt b = duals::random >(0.1, 0.99+0.2_ef); EXPECT_NE(b.rpart(), 0); EXPECT_NE(b.dpart(), 0); Rt c = duals::random(); EXPECT_NE(c.rpart(), 0); EXPECT_EQ(c.dpart(), 0); } TEST(non_class, random2) { // float float a1 = duals::randos::random2(); float a2 = duals::randos::random2(); EXPECT_NE(a1, 0); EXPECT_NE(a2, 0); EXPECT_NE(a1, a2); // complexf complexf b1 = duals::randos::random2(); complexf b2 = duals::randos::random2(); EXPECT_NE(b1.real(), 0); EXPECT_NE(b1.imag(), 0); EXPECT_NE(b2.real(), 0); EXPECT_NE(b2.imag(), 0); EXPECT_NE(b1.real(), b2.real()); EXPECT_NE(b1.imag(), b2.imag()); // dualf dualf c1 = duals::randos::random2(); dualf c2 = duals::randos::random2(); EXPECT_NE(c1.rpart(), 0); EXPECT_NE(c1.dpart(), 0); EXPECT_NE(c2.rpart(), 0); EXPECT_NE(c2.dpart(), 0); EXPECT_NE(c1.rpart(), c2.rpart()); EXPECT_NE(c1.dpart(), c2.dpart()); // cdualf cdualf d1 = duals::randos::random2(); cdualf d2 = duals::randos::random2(); EXPECT_NE(d1.real().rpart(), 0); EXPECT_NE(d1.real().dpart(), 0); EXPECT_NE(d1.imag().rpart(), 0); EXPECT_NE(d1.imag().dpart(), 0); EXPECT_NE(d2.real().rpart(), 0); EXPECT_NE(d2.real().dpart(), 0); EXPECT_NE(d2.imag().rpart(), 0); EXPECT_NE(d2.imag().dpart(), 0); EXPECT_NE(d1.real().rpart(), d2.real().rpart()); EXPECT_NE(d1.real().dpart(), d2.real().dpart()); EXPECT_NE(d1.imag().rpart(), d2.imag().rpart()); EXPECT_NE(d1.imag().dpart(), d2.imag().dpart()); } TEST(smoke, funcs) { dualf x = pow(1 + 2_e, 2); dualf y(2,3); x = pow(x,y); x = pow(2,y); x = pow(y,2); x = pow(2 + 2_e, -1); EXPECT_EQ(x.rpart(), 0.5); x = 2 + 4_e; hyperdualf X = pow(x,y); auto Y = pow(X,2); EXPECT_EQ(Y.rpart().rpart(), 16); // TODO / FIXME : check results of these // TODO / FIXME : check for hyperdual and cdual args too x = exp(y); x = log(y); x = log10(y); x = pow(x, y); x = pow(x, 2); x = pow(2, x); X = pow(x, Y); X = pow(Y, 2); X = pow(2, Y); x = abs(y); x = sqrt(y); x = cbrt(y); x = sin(y); x = cos(y); x = tan(y); x = asin(y); x = acos(y); x = atan(y); x = exp(log(log10(pow(x, abs(sqrt(sin(cos(tan(asin(acos(atan(y)))))))))))); // TODO: //x = sinh(y); //x = cosh(y); //x = tanh(y); //x = asinh(y); //x = acosh(y); //x = atanh(y); } TEST(complex, nesting) { complexf a; complexf b; complexf c; std::complex A; std::complex B(2); std::complex C(3+4_e, 5+6_ef); A = B + C; A = B - C; A = B * C; A = B / C; a = duals::rpart(C); EXPECT_EQ(a, complexf(3,5)); a = duals::dpart(C); EXPECT_EQ(a, complexf(4,6)); c = duals::rpart(a); EXPECT_EQ(a, c); c = duals::dpart(a); EXPECT_EQ(c, complexf(0,0)); cdualf z(2+4_ef,3+6_ef); EXPECT_EQ(duals::rpart(z), complexf(2,3)); EXPECT_EQ(duals::dpart(z), complexf(4,6)); EXPECT_EQ(duals::rpart(9), 9); EXPECT_EQ(duals::dpart(9), 0); } TEST(complex, mixing) { complexf a; complexf b; complexf c; std::complex A; std::complex B(2); std::complex C(3+4_e, 5+6_ef); A = 1; A *= 2; A *= 2.f; A *= 2_ef; //A = a + 1_ef; // complex * dual -> complex B = A * a; // complex * real -> complex // complex * dual -> complex ? } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); std::cout.precision(20); std::cerr.precision(20); return RUN_ALL_TESTS(); } tmp_ns50wwy/src/include/cppduals/tests/bench_dual.cpp0000644000175000017500000000502314163340332023130 0ustar carstencarsten//===-- bench_dual - test dual class ----------------------------*- C++ -*-===// // // Part of the cppduals Project // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // #include #include "benchmark/benchmark.h" #include "type_name.hpp" #include // for SimdInstructionSetsInUse() #include #define N_RANGE ->RangeMultiplier(8)->Range(2, 1<<13) // 2 - 2048 template void B_Add(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) a[i] = b[i] + c[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } } template void B_Sub(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) a[i] = b[i] - c[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } } template void B_Mul(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) a[i] = b[i] * c[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } } template void B_Div(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) a[i] = b[i] / c[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } } BENCHMARK_TEMPLATE(B_Add, duals::dualf) N_RANGE; BENCHMARK_TEMPLATE(B_Add, std::complex) N_RANGE; //BENCHMARK_TEMPLATE(B_Add, std::complex) N_RANGE; BENCHMARK_TEMPLATE(B_Sub, duals::dualf) N_RANGE; BENCHMARK_TEMPLATE(B_Sub, std::complex) N_RANGE; BENCHMARK_TEMPLATE(B_Mul, duals::dualf) N_RANGE; BENCHMARK_TEMPLATE(B_Mul, std::complex) N_RANGE; BENCHMARK_TEMPLATE(B_Div, duals::dualf) N_RANGE; BENCHMARK_TEMPLATE(B_Div, std::complex) N_RANGE; #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); } tmp_ns50wwy/src/include/cppduals/tests/gold-riick.bench_eigen.json0000644000175000017500000010430014163340332025502 0ustar carstencarsten{ "context": { "date": "2019-04-09 23:08:18", "host_name": "riick.fritz.box", "executable": "./tests/bench_eigen", "num_cpus": 8, "mhz_per_cpu": 4200, "cpu_scaling_enabled": true, "caches": [ { "type": "Data", "level": 1, "size": 32000000, "num_sharing": 2 }, { "type": "Instruction", "level": 1, "size": 32000000, "num_sharing": 2 }, { "type": "Unified", "level": 2, "size": 256000000, "num_sharing": 2 }, { "type": "Unified", "level": 3, "size": 8192000000, "num_sharing": 8 } ], "load_avg": [0.22,0.3,0.4], "library_build_type": "debug" }, "benchmarks": [ { "name": "B_VecVecAdd/16", "run_name": "B_VecVecAdd/16", "run_type": "iteration", "iterations": 180924879, "real_time": 3.8605093496472498e+00, "cpu_time": 3.8571275319189242e+00, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecAdd/64", "run_name": "B_VecVecAdd/64", "run_type": "iteration", "iterations": 64782693, "real_time": 1.0841915385679169e+01, "cpu_time": 1.0832253484738587e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecAdd/512", "run_name": "B_VecVecAdd/512", "run_type": "iteration", "iterations": 7454786, "real_time": 9.4037966079633392e+01, "cpu_time": 9.3956058832540620e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecAdd/4096", "run_name": "B_VecVecAdd/4096", "run_type": "iteration", "iterations": 887211, "real_time": 7.8947018349280040e+02, "cpu_time": 7.8873874196780673e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecAdd/32768", "run_name": "B_VecVecAdd/32768", "run_type": "iteration", "iterations": 74589, "real_time": 1.0496599471337400e+04, "cpu_time": 1.0484130729732267e+04, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecAdd/16", "run_name": "B_VecVecAdd/16", "run_type": "iteration", "iterations": 100268427, "real_time": 6.9855227114097467e+00, "cpu_time": 6.9794841800001501e+00, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecAdd/64", "run_name": "B_VecVecAdd/64", "run_type": "iteration", "iterations": 33908934, "real_time": 2.0504943003838601e+01, "cpu_time": 2.0486776729696086e+01, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecAdd/512", "run_name": "B_VecVecAdd/512", "run_type": "iteration", "iterations": 3847106, "real_time": 1.8061561287461691e+02, "cpu_time": 1.8046621096481346e+02, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecAdd/4096", "run_name": "B_VecVecAdd/4096", "run_type": "iteration", "iterations": 241792, "real_time": 2.8880790968903125e+03, "cpu_time": 2.8854683860508189e+03, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecAdd/32768", "run_name": "B_VecVecAdd/32768", "run_type": "iteration", "iterations": 34278, "real_time": 2.0482072932406583e+04, "cpu_time": 2.0457970126611850e+04, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecAdd/16", "run_name": "B_VecVecAdd/16", "run_type": "iteration", "iterations": 180774798, "real_time": 3.8546289622325109e+00, "cpu_time": 3.8513491742361134e+00, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecAdd/64", "run_name": "B_VecVecAdd/64", "run_type": "iteration", "iterations": 64822505, "real_time": 1.0825528649566287e+01, "cpu_time": 1.0816422799458286e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecAdd/512", "run_name": "B_VecVecAdd/512", "run_type": "iteration", "iterations": 7418810, "real_time": 9.4474278224507643e+01, "cpu_time": 9.4393267249060116e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecAdd/4096", "run_name": "B_VecVecAdd/4096", "run_type": "iteration", "iterations": 787021, "real_time": 8.8372437201364426e+02, "cpu_time": 8.8291091343178766e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecAdd/32768", "run_name": "B_VecVecAdd/32768", "run_type": "iteration", "iterations": 74334, "real_time": 9.4530596495291920e+03, "cpu_time": 9.4405510668065763e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecAdd/16", "run_name": "B_VecVecAdd/16", "run_type": "iteration", "iterations": 83226526, "real_time": 8.4084707317685830e+00, "cpu_time": 8.4012327632178216e+00, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecAdd/64", "run_name": "B_VecVecAdd/64", "run_type": "iteration", "iterations": 22089166, "real_time": 3.1446520117173769e+01, "cpu_time": 3.1420938889227411e+01, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecAdd/512", "run_name": "B_VecVecAdd/512", "run_type": "iteration", "iterations": 2768369, "real_time": 2.5131933278141992e+02, "cpu_time": 2.5110695936849464e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecAdd/4096", "run_name": "B_VecVecAdd/4096", "run_type": "iteration", "iterations": 230944, "real_time": 3.0152391054585528e+03, "cpu_time": 3.0124982939586976e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecAdd/32768", "run_name": "B_VecVecAdd/32768", "run_type": "iteration", "iterations": 31125, "real_time": 2.0452062490893655e+04, "cpu_time": 2.0429064642570207e+04, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecSub/16", "run_name": "B_VecVecSub/16", "run_type": "iteration", "iterations": 166806959, "real_time": 4.1335862791472016e+00, "cpu_time": 4.1301434971906712e+00, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecSub/64", "run_name": "B_VecVecSub/64", "run_type": "iteration", "iterations": 62516488, "real_time": 1.0969133855478731e+01, "cpu_time": 1.0959984172495432e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecSub/512", "run_name": "B_VecVecSub/512", "run_type": "iteration", "iterations": 7352753, "real_time": 9.5394953015786953e+01, "cpu_time": 9.5312306832556501e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecSub/4096", "run_name": "B_VecVecSub/4096", "run_type": "iteration", "iterations": 795475, "real_time": 8.8428106855173394e+02, "cpu_time": 8.8340810836292746e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecSub/32768", "run_name": "B_VecVecSub/32768", "run_type": "iteration", "iterations": 78716, "real_time": 8.9159691042675076e+03, "cpu_time": 8.9058508308348828e+03, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecSub/16", "run_name": "B_VecVecSub/16", "run_type": "iteration", "iterations": 116619636, "real_time": 5.9864787261521455e+00, "cpu_time": 5.9814199728766297e+00, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecSub/64", "run_name": "B_VecVecSub/64", "run_type": "iteration", "iterations": 34598286, "real_time": 2.0135183892963326e+01, "cpu_time": 2.0117970843989234e+01, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecSub/512", "run_name": "B_VecVecSub/512", "run_type": "iteration", "iterations": 3830985, "real_time": 1.8078139694755305e+02, "cpu_time": 1.8062805858023461e+02, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecSub/4096", "run_name": "B_VecVecSub/4096", "run_type": "iteration", "iterations": 240530, "real_time": 2.8930698623926046e+03, "cpu_time": 2.8903870619049530e+03, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecSub/32768", "run_name": "B_VecVecSub/32768", "run_type": "iteration", "iterations": 34574, "real_time": 1.9197238675608125e+04, "cpu_time": 1.9174525655116548e+04, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_VecVecSub/16", "run_name": "B_VecVecSub/16", "run_type": "iteration", "iterations": 165139207, "real_time": 4.2223793710677526e+00, "cpu_time": 4.2182891128936966e+00, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecSub/64", "run_name": "B_VecVecSub/64", "run_type": "iteration", "iterations": 63445364, "real_time": 1.1045120018574911e+01, "cpu_time": 1.1035489984737104e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecSub/512", "run_name": "B_VecVecSub/512", "run_type": "iteration", "iterations": 7345972, "real_time": 9.5444725355690466e+01, "cpu_time": 9.5355927847260915e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecSub/4096", "run_name": "B_VecVecSub/4096", "run_type": "iteration", "iterations": 794183, "real_time": 8.8587168324587356e+02, "cpu_time": 8.8506970307851054e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecSub/32768", "run_name": "B_VecVecSub/32768", "run_type": "iteration", "iterations": 78698, "real_time": 8.9248058148233613e+03, "cpu_time": 8.9144583216853953e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecSub/16", "run_name": "B_VecVecSub/16", "run_type": "iteration", "iterations": 117906660, "real_time": 5.8997501922307896e+00, "cpu_time": 5.8946146468740821e+00, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecSub/64", "run_name": "B_VecVecSub/64", "run_type": "iteration", "iterations": 34429666, "real_time": 2.0153225217076457e+01, "cpu_time": 2.0136235071231887e+01, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecSub/512", "run_name": "B_VecVecSub/512", "run_type": "iteration", "iterations": 3864880, "real_time": 1.8136100007693943e+02, "cpu_time": 1.8120591428453196e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecSub/4096", "run_name": "B_VecVecSub/4096", "run_type": "iteration", "iterations": 241995, "real_time": 2.8953614618863439e+03, "cpu_time": 2.8926006900969046e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecSub/32768", "run_name": "B_VecVecSub/32768", "run_type": "iteration", "iterations": 36583, "real_time": 2.0212787277763855e+04, "cpu_time": 2.0189552223710449e+04, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMulCXX/16", "run_name": "B_VecVecMulCXX/16", "run_type": "iteration", "iterations": 170435148, "real_time": 4.0887311286652732e+00, "cpu_time": 4.0848732152360832e+00, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMulCXX/64", "run_name": "B_VecVecMulCXX/64", "run_type": "iteration", "iterations": 45583414, "real_time": 1.5407829237911679e+01, "cpu_time": 1.5394688120551850e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMulCXX/512", "run_name": "B_VecVecMulCXX/512", "run_type": "iteration", "iterations": 4423908, "real_time": 1.5927837829862833e+02, "cpu_time": 1.5911698593189436e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMulCXX/4096", "run_name": "B_VecVecMulCXX/4096", "run_type": "iteration", "iterations": 576011, "real_time": 1.2240382145864278e+03, "cpu_time": 1.2227896758916040e+03, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMulCXX/32768", "run_name": "B_VecVecMulCXX/32768", "run_type": "iteration", "iterations": 64202, "real_time": 1.0882538114490886e+04, "cpu_time": 1.0868956107286340e+04, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMulCXX/16", "run_name": "B_VecVecMulCXX/16", "run_type": "iteration", "iterations": 5846425, "real_time": 1.1976380591009804e+02, "cpu_time": 1.1965603253270159e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMulCXX/64", "run_name": "B_VecVecMulCXX/64", "run_type": "iteration", "iterations": 1466030, "real_time": 4.7930638734693537e+02, "cpu_time": 4.7883859197970060e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMulCXX/512", "run_name": "B_VecVecMulCXX/512", "run_type": "iteration", "iterations": 183613, "real_time": 3.8221828029001613e+03, "cpu_time": 3.8184806576876072e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMulCXX/4096", "run_name": "B_VecVecMulCXX/4096", "run_type": "iteration", "iterations": 22964, "real_time": 3.0671331694348351e+04, "cpu_time": 3.0638503396620952e+04, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMulCXX/32768", "run_name": "B_VecVecMulCXX/32768", "run_type": "iteration", "iterations": 2868, "real_time": 2.4470983367725671e+05, "cpu_time": 2.4440932531380758e+05, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMulCXX/16", "run_name": "B_VecVecMulCXX/16", "run_type": "iteration", "iterations": 6486504, "real_time": 1.0797110292617515e+02, "cpu_time": 1.0787133223073539e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMulCXX/64", "run_name": "B_VecVecMulCXX/64", "run_type": "iteration", "iterations": 1621202, "real_time": 4.3161563332584228e+02, "cpu_time": 4.3120790006427052e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMulCXX/512", "run_name": "B_VecVecMulCXX/512", "run_type": "iteration", "iterations": 203228, "real_time": 3.4495250751415124e+03, "cpu_time": 3.4462141880055906e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMulCXX/4096", "run_name": "B_VecVecMulCXX/4096", "run_type": "iteration", "iterations": 23621, "real_time": 2.9794133483296169e+04, "cpu_time": 2.9762544134456657e+04, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMulCXX/32768", "run_name": "B_VecVecMulCXX/32768", "run_type": "iteration", "iterations": 3087, "real_time": 2.2790885617450281e+05, "cpu_time": 2.2763470229996752e+05, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMul/16", "run_name": "B_VecVecMul/16", "run_type": "iteration", "iterations": 125189051, "real_time": 5.5811731489733525e+00, "cpu_time": 5.5761090241030766e+00, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMul/64", "run_name": "B_VecVecMul/64", "run_type": "iteration", "iterations": 38314681, "real_time": 1.8339616738004455e+01, "cpu_time": 1.8323085503439177e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMul/512", "run_name": "B_VecVecMul/512", "run_type": "iteration", "iterations": 3861034, "real_time": 1.8175674262791739e+02, "cpu_time": 1.8159286735107742e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMul/4096", "run_name": "B_VecVecMul/4096", "run_type": "iteration", "iterations": 453908, "real_time": 1.5423866619775124e+03, "cpu_time": 1.5409249165028930e+03, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMul/32768", "run_name": "B_VecVecMul/32768", "run_type": "iteration", "iterations": 51267, "real_time": 1.3472148184734395e+04, "cpu_time": 1.3457016696900666e+04, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecMul/16", "run_name": "B_VecVecMul/16", "run_type": "iteration", "iterations": 103767771, "real_time": 6.7423243003204867e+00, "cpu_time": 6.7361222686377706e+00, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMul/64", "run_name": "B_VecVecMul/64", "run_type": "iteration", "iterations": 28839997, "real_time": 2.5733866164836186e+01, "cpu_time": 2.5692276008211984e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMul/512", "run_name": "B_VecVecMul/512", "run_type": "iteration", "iterations": 3089757, "real_time": 2.3200159559330496e+02, "cpu_time": 2.3163820714703445e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMul/4096", "run_name": "B_VecVecMul/4096", "run_type": "iteration", "iterations": 401681, "real_time": 1.7092732641175310e+03, "cpu_time": 1.7075385218618835e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMul/32768", "run_name": "B_VecVecMul/32768", "run_type": "iteration", "iterations": 46183, "real_time": 1.5056671999980754e+04, "cpu_time": 1.5038838468700540e+04, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecMul/16", "run_name": "B_VecVecMul/16", "run_type": "iteration", "iterations": 6463717, "real_time": 1.0847177065537703e+02, "cpu_time": 1.0837419707576966e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMul/64", "run_name": "B_VecVecMul/64", "run_type": "iteration", "iterations": 1617774, "real_time": 4.3208375832151614e+02, "cpu_time": 4.3166927395297489e+02, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMul/512", "run_name": "B_VecVecMul/512", "run_type": "iteration", "iterations": 203093, "real_time": 3.4504276220745865e+03, "cpu_time": 3.4473836173575692e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMul/4096", "run_name": "B_VecVecMul/4096", "run_type": "iteration", "iterations": 23685, "real_time": 2.9671313448051955e+04, "cpu_time": 2.9641000379987374e+04, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecMul/32768", "run_name": "B_VecVecMul/32768", "run_type": "iteration", "iterations": 3046, "real_time": 2.2757245273251657e+05, "cpu_time": 2.2729234996716972e+05, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_VecVecDiv/16", "run_name": "B_VecVecDiv/16", "run_type": "iteration", "iterations": 68894778, "real_time": 1.0236266760369533e+01, "cpu_time": 1.0226780859936872e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecDiv/64", "run_name": "B_VecVecDiv/64", "run_type": "iteration", "iterations": 18649150, "real_time": 3.7501655893881811e+01, "cpu_time": 3.7468728011732701e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecDiv/512", "run_name": "B_VecVecDiv/512", "run_type": "iteration", "iterations": 1968779, "real_time": 3.5862479486976355e+02, "cpu_time": 3.5827182685308884e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecDiv/4096", "run_name": "B_VecVecDiv/4096", "run_type": "iteration", "iterations": 258267, "real_time": 2.7069726794287362e+03, "cpu_time": 2.7044063469200469e+03, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecDiv/32768", "run_name": "B_VecVecDiv/32768", "run_type": "iteration", "iterations": 29800, "real_time": 2.3611576510077630e+04, "cpu_time": 2.3582546744966672e+04, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_VecVecDiv/16", "run_name": "B_VecVecDiv/16", "run_type": "iteration", "iterations": 78245490, "real_time": 8.9748381794155634e+00, "cpu_time": 8.9668903728508376e+00, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecDiv/64", "run_name": "B_VecVecDiv/64", "run_type": "iteration", "iterations": 20855178, "real_time": 3.3688787743036087e+01, "cpu_time": 3.3658853690915713e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecDiv/512", "run_name": "B_VecVecDiv/512", "run_type": "iteration", "iterations": 2021523, "real_time": 3.4750070863024507e+02, "cpu_time": 3.4719469033990492e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecDiv/4096", "run_name": "B_VecVecDiv/4096", "run_type": "iteration", "iterations": 266914, "real_time": 2.6213387195336618e+03, "cpu_time": 2.6188667735675390e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_VecVecDiv/32768", "run_name": "B_VecVecDiv/32768", "run_type": "iteration", "iterations": 30728, "real_time": 2.2879389319382171e+04, "cpu_time": 2.2852349420723909e+04, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMat>/2", "run_name": "B_MatMat>/2", "run_type": "iteration", "iterations": 19451166, "real_time": 3.6094199340648096e+01, "cpu_time": 3.6063892724991391e+01, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMat>/8", "run_name": "B_MatMat>/8", "run_type": "iteration", "iterations": 1476262, "real_time": 4.7589821725885787e+02, "cpu_time": 4.7545503034014263e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMat>/64", "run_name": "B_MatMat>/64", "run_type": "iteration", "iterations": 5528, "real_time": 1.2705245730795665e+05, "cpu_time": 1.2691759171490670e+05, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMat>/512", "run_name": "B_MatMat>/512", "run_type": "iteration", "iterations": 11, "real_time": 6.2057088182138443e+07, "cpu_time": 6.1977055909091465e+07, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMat/2", "run_name": "B_MatMat/2", "run_type": "iteration", "iterations": 21949318, "real_time": 3.2040698986063724e+01, "cpu_time": 3.2012572281288897e+01, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_MatMat/8", "run_name": "B_MatMat/8", "run_type": "iteration", "iterations": 1742273, "real_time": 4.0465230935074487e+02, "cpu_time": 4.0430352705918961e+02, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_MatMat/64", "run_name": "B_MatMat/64", "run_type": "iteration", "iterations": 5632, "real_time": 1.2452037021210510e+05, "cpu_time": 1.2438374556107815e+05, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_MatMat/512", "run_name": "B_MatMat/512", "run_type": "iteration", "iterations": 12, "real_time": 6.0091539751738310e+07, "cpu_time": 6.0017517999999844e+07, "time_unit": "ns", "type": 1.0100000000000000e+02 }, { "name": "B_MatMat/2", "run_name": "B_MatMat/2", "run_type": "iteration", "iterations": 20309870, "real_time": 3.4533803958149321e+01, "cpu_time": 3.4504405641198680e+01, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_MatMat/8", "run_name": "B_MatMat/8", "run_type": "iteration", "iterations": 995549, "real_time": 7.0548867709988122e+02, "cpu_time": 7.0485181844388637e+02, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_MatMat/64", "run_name": "B_MatMat/64", "run_type": "iteration", "iterations": 3161, "real_time": 2.1945795254815428e+05, "cpu_time": 2.1918954824422437e+05, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_MatMat/512", "run_name": "B_MatMat/512", "run_type": "iteration", "iterations": 6, "real_time": 1.0906691200216301e+08, "cpu_time": 1.0892126233333243e+08, "time_unit": "ns", "type": 1.0200000000000000e+02 }, { "name": "B_MatMat/2", "run_name": "B_MatMat/2", "run_type": "iteration", "iterations": 9921424, "real_time": 7.0047328387518874e+01, "cpu_time": 6.9983574535267834e+01, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_MatMat/8", "run_name": "B_MatMat/8", "run_type": "iteration", "iterations": 148687, "real_time": 4.7224756233779026e+03, "cpu_time": 4.7185805416747162e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_MatMat/64", "run_name": "B_MatMat/64", "run_type": "iteration", "iterations": 342, "real_time": 2.0482986842075153e+06, "cpu_time": 2.0461444239765937e+06, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_MatMat/512", "run_name": "B_MatMat/512", "run_type": "iteration", "iterations": 1, "real_time": 1.0340107579831965e+09, "cpu_time": 1.0327275300000025e+09, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_MatMatCXX>/2", "run_name": "B_MatMatCXX>/2", "run_type": "iteration", "iterations": 1787832, "real_time": 3.8974881697155820e+02, "cpu_time": 3.9094019963715300e+02, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMatCXX>/8", "run_name": "B_MatMatCXX>/8", "run_type": "iteration", "iterations": 156259, "real_time": 4.4753756913094467e+03, "cpu_time": 4.4732676006106130e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMatCXX>/64", "run_name": "B_MatMatCXX>/64", "run_type": "iteration", "iterations": 336, "real_time": 2.0899283644255428e+06, "cpu_time": 2.0881369553573458e+06, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_MatMatCXX>/512", "run_name": "B_MatMatCXX>/512", "run_type": "iteration", "iterations": 1, "real_time": 1.0902496219496243e+09, "cpu_time": 1.0890752440000000e+09, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_Expm/2", "run_name": "B_Expm/2", "run_type": "iteration", "iterations": 1059890, "real_time": 6.5850473824937990e+02, "cpu_time": 6.5797180462122753e+02, "time_unit": "ns", "type": 1.0000000000000000e+00 }, { "name": "B_Expm/8", "run_name": "B_Expm/8", "run_type": "iteration", "iterations": 272781, "real_time": 2.5473390779476085e+03, "cpu_time": 2.5451668774584818e+03, "time_unit": "ns", "type": 1.0000000000000000e+00 }, { "name": "B_Expm/64", "run_name": "B_Expm/64", "run_type": "iteration", "iterations": 3030, "real_time": 2.3047708846296711e+05, "cpu_time": 2.3019247755775266e+05, "time_unit": "ns", "type": 1.0000000000000000e+00 }, { "name": "B_Expm/512", "run_name": "B_Expm/512", "run_type": "iteration", "iterations": 6, "real_time": 1.0921186016639693e+08, "cpu_time": 1.0906773133333303e+08, "time_unit": "ns", "type": 1.0000000000000000e+00 }, { "name": "B_Expm/2", "run_name": "B_Expm/2", "run_type": "iteration", "iterations": 288471, "real_time": 2.4382128324851224e+03, "cpu_time": 2.4356807096727298e+03, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_Expm/8", "run_name": "B_Expm/8", "run_type": "iteration", "iterations": 8466, "real_time": 8.0712747225426137e+04, "cpu_time": 8.0632011575715092e+04, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_Expm/64", "run_name": "B_Expm/64", "run_type": "iteration", "iterations": 23, "real_time": 3.1281992957583100e+07, "cpu_time": 3.1251026695652168e+07, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_Expm/512", "run_name": "B_Expm/512", "run_type": "iteration", "iterations": 1, "real_time": 1.3991444604005665e+10, "cpu_time": 1.3975875479000010e+10, "time_unit": "ns", "type": 1.1000000000000000e+01 }, { "name": "B_Expm/2", "run_name": "B_Expm/2", "run_type": "iteration", "iterations": 174796, "real_time": 4.0080735884692217e+03, "cpu_time": 4.0040435078605583e+03, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_Expm/8", "run_name": "B_Expm/8", "run_type": "iteration", "iterations": 5795, "real_time": 1.2455649490727753e+05, "cpu_time": 1.2441344417601440e+05, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_Expm/64", "run_name": "B_Expm/64", "run_type": "iteration", "iterations": 21, "real_time": 3.2950426762302715e+07, "cpu_time": 3.2913187571428657e+07, "time_unit": "ns", "type": 1.1100000000000000e+02 }, { "name": "B_Expm/512", "run_name": "B_Expm/512", "run_type": "iteration", "iterations": 1, "real_time": 1.5224556519999168e+10, "cpu_time": 1.5205081530000015e+10, "time_unit": "ns", "type": 1.1100000000000000e+02 } ] } tmp_ns50wwy/src/include/cppduals/tests/bench_gemm.cpp0000644000175000017500000001726714163340332023145 0ustar carstencarsten//===-- bench_gemm - benchmark dual m*m -----------------------*- C++ -*-===// // // Part of the cppduals Project // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // #if defined(__APPLE__) && defined(__clang__) #include #else #ifdef EIGEN_LAPACKE #include #else #include #endif extern "C" { //#include //#include #include CBLAS_HEADER } #endif // defined(__APPLE__) && defined(__clang__) #include #include #include #include #include "type_name.hpp" #include #include #include #include "benchmark/benchmark.h" using namespace duals; template< class T > struct type_identity { typedef T type; }; #include /* encode the type into an integer for benchmark output */ template struct type_num { /* should fail */ }; template<> struct type_num { static constexpr int id = 1; }; template<> struct type_num { static constexpr int id = 2; }; template<> struct type_num { static constexpr int id = 3; }; template struct type_num> { static constexpr int id = 10 + type_num::id; }; template struct type_num> { static constexpr int id = 100 + type_num::id; }; using duals::dualf; using duals::duald; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using MatrixX = Eigen::Matrix; #if 0 #define V_RANGE(V,NF) ->Arg(V*4/NF)->Arg(V*32/NF)->Arg(V*256/NF)->Arg(V*2048/NF)->Arg(V*1)->Complexity() #else #define V_RANGE(V,NF) ->Arg(V*64/NF)->Arg(V*128/NF)->Arg(V*256/NF)->Arg(V*512/NF)->Arg(V*1024/NF) ->Arg(V*2048/NF) #endif // measure Eigen's matrix-matrix multiplication template void B_MatMat(benchmark::State& state) { int N = state.range(0); typedef typename Eigen::ScalarBinaryOpTraits::ReturnType R; MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Random(N, N); MatrixX C = MatrixX::Random(N, N); for (auto _ : state) { C.noalias() = A * B; benchmark::ClobberMemory(); // Force c to be written to memory. } state.SetComplexityN(state.range(0)); } template ::value>::type* = nullptr> void matrix_multiplcation(T *A, int Awidth, int Aheight, T *B, int Bwidth, int Bheight, T *AB, bool tA, bool tB, typename type_identity::type beta) { int A_height = tA ? Awidth : Aheight; int A_width = tA ? Aheight : Awidth; #ifndef NDEBUG int B_height = tB ? Bwidth : Bheight; #endif int B_width = tB ? Bheight : Bwidth; int m = A_height; int n = B_width; int k = A_width; // Error, width and height should match! assert(A_width == B_height); int lda = tA ? m : k; int ldb = tB ? k : n; #define TRANSPOSE(X) ((X) ? CblasTrans : CblasNoTrans) // http://www.netlib.org/lapack/explore-html/d7/d2b/dgemm_8f.html if (!is_complex::value) { if (sizeof(T) == sizeof(float)) cblas_sgemm(CblasColMajor, TRANSPOSE(tA), TRANSPOSE(tB), m, n, k, 1.0, (float *)A, lda, (float *)B, ldb, std::real(beta), (float *)AB, n); else cblas_dgemm(CblasColMajor, TRANSPOSE(tA), TRANSPOSE(tB), m, n, k, 1.0, (double *)A, lda, (double *)B, ldb, std::real(beta), (double *)AB, n); } else { std::complex alphaf(1,0); std::complex alpha(1,0); if (Eigen::NumTraits::digits10() < 10) cblas_cgemm(CblasColMajor, TRANSPOSE(tA), TRANSPOSE(tB), m, n, k, &alphaf, A, lda, B, ldb, &beta, AB, n); else cblas_zgemm(CblasColMajor, TRANSPOSE(tA), TRANSPOSE(tB), m, n, k, &alpha, A, lda, B, ldb, &beta, AB, n); } #undef TRANSPOSE } template ::value>::type* = nullptr> void matrix_multiplcation(T *A, int Awidth, int Aheight, T *B, int Bwidth, int Bheight, T *AB, bool tA, bool tB, typename type_identity::type beta) { /* nothing */ } // measure BLAS matrix-matrix multiplication template void B_MatMatBLAS(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Random(N, N); MatrixX C = MatrixX::Random(N, N); MatrixX D = A*B; for (auto _ : state) { matrix_multiplcation(A.data(), A.cols(), A.rows(), B.data(), B.cols(), B.rows(), C.data(), false, false, (Rt)0.); benchmark::ClobberMemory(); // Force a to be written to memory. } double err = (double)rpart((D - C).norm() / D.norm()); if (err > 1e-6) state.SkipWithError("BLAS matmat error"); state.SetComplexityN(state.range(0)); } // measure compiler's matrix-matrix multiplication template void B_MatMatCXX(benchmark::State& state) { int N = state.range(0); std::vector a(N*N); std::vector b(N*N); std::vector c(N*N); for (auto _ : state) { state.PauseTiming(); a.assign(N*N,1.1); b.assign(N*N,2.2); c.assign(N*N,0.); state.ResumeTiming(); for(int i=0; i void B_MatVec(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, N); MatrixX b = MatrixX::Random(N, 1); MatrixX c = MatrixX::Random(N, 1); for (auto _ : state) { c = A * b; benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } #define MAKE_BM_SIMPLE(TYPE1,TYPE2,NF) \ BENCHMARK_TEMPLATE(B_MatMat, TYPE1,TYPE2) V_RANGE(1,NF) #define MAKE_BENCHMARKS(TYPE1,TYPE2,NF) \ MAKE_BM_SIMPLE(TYPE1,TYPE2,NF); \ BENCHMARK_TEMPLATE(B_MatMatBLAS, TYPE1) V_RANGE(1,NF) // BENCHMARK_TEMPLATE(B_MatMatBLAS, TYPE1) V_RANGE(1,2*NF); // BENCHMARK_TEMPLATE(B_VecVecMulCXX, TYPE1,TYPE2) V_RANGE(4,NF); // BENCHMARK_TEMPLATE(B_MatMatCXX, TYPE1,TYPE2) V_RANGE(1,NF); MAKE_BENCHMARKS(float, float, 1); MAKE_BENCHMARKS(complexf, complexf,2); //MAKE_BM_SIMPLE(dualf, float,2); TODO MAKE_BM_SIMPLE(dualf, dualf,2); //MAKE_BM_SIMPLE(cdualf, cdualf,2); MAKE_BM_SIMPLE(cdualf, cdualf,4); #if HAVE_BOOST #include MAKE_BM_SIMPLE(audi::gdual,2); #endif // novelty: //MAKE_BM_SIMPLE(float, complexf,2); //MAKE_BM_SIMPLE(complexf, float,2); MAKE_BENCHMARKS(double, double, 1); MAKE_BENCHMARKS(complexd, complexd,2); MAKE_BM_SIMPLE(duald, duald,2); MAKE_BM_SIMPLE(cduald, cduald,4); #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { #ifndef EIGEN_VECTORIZE static_assert(false, "no vectorization?"); #endif #ifndef NDEBUG static_assert(false, "NDEBUG to benchmark?"); #endif std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); } tmp_ns50wwy/src/include/cppduals/tests/bench_example.cpp0000644000175000017500000000455714163340332023651 0ustar carstencarsten//===-- bench_example - benchmark the examples ---------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // #include #include #include "benchmark/benchmark.h" using namespace duals; template T f(T x) { return pow(x,pow(x,x)); } template T df(T x) { return pow(x,-1. + x + pow(x,x)) * (1. + x*log(x) + x*pow(log(x),2.)); } template T ddf(T x) { return (pow(x,pow(x,x)) * pow(pow(x,x - 1.) + pow(x,x)*log(x)*(log(x) + 1.), 2.) + pow(x,pow(x,x)) * (pow(x,x - 1.) * log(x) + pow(x,x - 1.) * (log(x) + 1.) + pow(x,x - 1.) * ((x - 1.)/x + log(x)) + pow(x,x) * log(x) * pow(log(x) + 1., 2.) )); } template void F(benchmark::State& state) { T x = state.range(0); for (auto _ : state) { benchmark::DoNotOptimize(f(x)); } } template void DF(benchmark::State& state) { T x = state.range(0); for (auto _ : state) { benchmark::DoNotOptimize(df(x)); } } template void DDF(benchmark::State& state) { T x = state.range(0); for (auto _ : state) { benchmark::DoNotOptimize(ddf(x)); } } template void dF(benchmark::State& state) { T x = state.range(0); for (auto _ : state) { benchmark::DoNotOptimize(f(dual(x,1))); } } template void ddF(benchmark::State& state) { T x = state.range(0); for (auto _ : state) { benchmark::DoNotOptimize(f(duals::dual>(x+1_e,1+0_e))); } } BENCHMARK_TEMPLATE(F, float) ->Arg(2); // V_RANGE(1,NF) BENCHMARK_TEMPLATE(DF, float)->Arg(2); // V_RANGE(1,NF) BENCHMARK_TEMPLATE(DDF, float)->Arg(2); // V_RANGE(1,NF) BENCHMARK_TEMPLATE(dF, float)->Arg(2); // V_RANGE(1,NF) BENCHMARK_TEMPLATE(ddF, float)->Arg(2); // V_RANGE(1,NF) #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); } tmp_ns50wwy/src/include/cppduals/tests/test_fmt.cpp0000644000175000017500000001172114163340332022673 0ustar carstencarsten//===-- test_dual.cpp - test duals/dual -------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_dual Dual number libfmt formatting tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include #define CPPDUALS_LIBFMT #define CPPDUALS_LIBFMT_COMPLEX #include #include "gtest/gtest.h" using duals::dualf; using duals::duald; using duals::dualld; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; using namespace duals::literals; using namespace std::complex_literals; TEST(libfmt, complex_) { std::string s = fmt::format("{}", 2.f + 3if); EXPECT_EQ(s, "(2.0+3.0if)"); } TEST(libfmt, complex_el) { std::string s = fmt::format("{}", 2.l + 3il); EXPECT_EQ(s, "(2.0+3.0il)"); } TEST(libfmt, complex_flags) { std::string s; s = fmt::format("{}", 2. + 3i); EXPECT_EQ(s, "(2.0+3.0i)"); s = fmt::format("{:$}", 2. + 3i); EXPECT_EQ(s, "(2.0+3.0i)"); s = fmt::format("{:*}", 2. + 3i); EXPECT_EQ(s, "(2.0+3.0*i)"); s = fmt::format("{:,}", 2. + 3i); EXPECT_EQ(s, "(2.0,3.0)"); // + + s = fmt::format("{:$+}", 2. + 3i); EXPECT_EQ(s, "(+2.0+3.0i)"); s = fmt::format("{:*+}", 2. + 3i); EXPECT_EQ(s, "(+2.0+3.0*i)"); s = fmt::format("{:,+}", 2. + 3i); EXPECT_EQ(s, "(+2.0,+3.0)"); // + - s = fmt::format("{:$+}", 2. - 3i); EXPECT_EQ(s, "(+2.0-3.0i)"); s = fmt::format("{:*+}", 2. - 3i); EXPECT_EQ(s, "(+2.0-3.0*i)"); s = fmt::format("{:,+}", 2. - 3i); EXPECT_EQ(s, "(+2.0,-3.0)"); } TEST(libfmt, complex_all_real) { std::string s; s = fmt::format("{}", 2. + 0i); EXPECT_EQ(s, "(2.0)"); s = fmt::format("{:*}", 2. + 0i); EXPECT_EQ(s, "(2.0)"); s = fmt::format("{:,}", 2. + 0i); EXPECT_EQ(s, "(2.0,0.0)"); } TEST(libfmt, complex_all_imag) { std::string s; s = fmt::format("{}", 0. + 3i); EXPECT_EQ(s, "(3.0i)"); s = fmt::format("{:*}", 0. + 3i); EXPECT_EQ(s, "(3.0*i)"); s = fmt::format("{:,}", 0. + 3i); EXPECT_EQ(s, "(0.0,3.0)"); } TEST(libfmt, complex_plus) { std::string s = fmt::format("{:+}", 1. + 3i); EXPECT_EQ(s, "(+1.0+3.0i)"); s = fmt::format("{:+}", 1. - 3i); EXPECT_EQ(s, "(+1.0-3.0i)"); } TEST(libfmt, complex_g) { std::string s = fmt::format("{:g}", 2.f + 3if); EXPECT_EQ(s, "(2+3if)"); } TEST(libfmt, complex_gs) { std::string s = fmt::format("{:*g}", 3i); EXPECT_EQ(s, "(3*i)"); } TEST(libfmt, complex_gel) { std::string s = fmt::format("{:g}", 2.l + 3il); EXPECT_EQ(s, "(2+3il)"); } TEST(libfmt, dual_) { std::string s = fmt::format("{}", 2 + 3_ef); EXPECT_EQ(s, "(2.0+3.0_ef)"); } TEST(libfmt, dual_el) { std::string s = fmt::format("{}", 2 + 3_el); EXPECT_EQ(s, "(2.0+3.0_el)"); } TEST(libfmt, dual_flags) { std::string s; s = fmt::format("{}", 2. + 3_e); EXPECT_EQ(s, "(2.0+3.0_e)"); s = fmt::format("{:$}", 2. + 3_e); EXPECT_EQ(s, "(2.0+3.0_e)"); s = fmt::format("{:*}", 2. + 3_e); EXPECT_EQ(s, "(2.0+3.0*e)"); s = fmt::format("{:,}", 2. + 3_e); EXPECT_EQ(s, "(2.0,3.0)"); // + + s = fmt::format("{:$+}", 2. + 3_e); EXPECT_EQ(s, "(+2.0+3.0_e)"); s = fmt::format("{:*+}", 2. + 3_e); EXPECT_EQ(s, "(+2.0+3.0*e)"); s = fmt::format("{:,+}", 2. + 3_e); EXPECT_EQ(s, "(+2.0,+3.0)"); // + - s = fmt::format("{:$+}", 2. - 3_e); EXPECT_EQ(s, "(+2.0-3.0_e)"); s = fmt::format("{:*+}", 2. - 3_e); EXPECT_EQ(s, "(+2.0-3.0*e)"); s = fmt::format("{:,+}", 2. - 3_e); EXPECT_EQ(s, "(+2.0,-3.0)"); } TEST(libfmt, dual_all_real) { std::string s; s = fmt::format("{}", 2 + 0_e); EXPECT_EQ(s, "(2.0)"); s = fmt::format("{:*}", 2 + 0_e); EXPECT_EQ(s, "(2.0)"); s = fmt::format("{:,}", 2 + 0_e); EXPECT_EQ(s, "(2.0,0.0)"); } TEST(libfmt, dual_all_dual) { std::string s; s = fmt::format("a{}b", 0 + 3_e); EXPECT_EQ(s, "a(3.0_e)b"); s = fmt::format("a{:*}b", 0 + 3_e); EXPECT_EQ(s, "a(3.0*e)b"); s = fmt::format("a{:,}b", 0 + 3_e); EXPECT_EQ(s, "a(0.0,3.0)b"); } TEST(libfmt, dual_g) { std::string s = fmt::format("{:g}", 2 + 3_ef); EXPECT_EQ(s, "(2+3_ef)"); } TEST(libfmt, dual_gs) { std::string s = fmt::format("a{:*g}b", 3_e); EXPECT_EQ(s, "a(3*e)b"); s = fmt::format("{:*+g}", 3_e); EXPECT_EQ(s, "(+3*e)"); } TEST(libfmt, dual_gel) { std::string s = fmt::format("{:g}", 2 + 3_el); EXPECT_EQ(s, "(2+3_el)"); } TEST(libfmt, dual_cgt) { std::string s = fmt::format("{:g}", cdualf(2 + 3_ef, 4 + 5_ef)); EXPECT_EQ(s, "((2+3_ef)+(4+5_ef)i)"); } TEST(libfmt, dual_cgts) { std::string s; s = fmt::format("{:**g}", cdualf(2 + 3_ef, 4 + 5_ef)); EXPECT_EQ(s, "((2+3*ef)+(4+5*ef)*i)"); // todo - should be *if s = fmt::format("{:,*g}", cdualf(2 + 3_ef, 4 + 5_ef)); EXPECT_EQ(s, "((2+3*ef),(4+5*ef))"); s = fmt::format("{:,,g}", cdualf(2 + 3_ef, 4 + 5_ef)); EXPECT_EQ(s, "((2,3),(4,5))"); } tmp_ns50wwy/src/include/cppduals/tests/bench_eigen.cpp0000644000175000017500000003027214163340332023276 0ustar carstencarsten//===-- bench_dual - test dual class ----------------------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // #include #include #include #include #include "type_name.hpp" #include #include #include #include "eexpokit/padm.hpp" #include "eexpokit/chbv.hpp" #include "eexpokit/expv.hpp" //#include "eexpokit/mexpv.hpp" #include "benchmark/benchmark.h" using namespace duals; template< class T > struct type_identity { typedef T type; }; namespace Eigen { namespace internal { template struct is_exp_known_type; template struct is_exp_known_type> : is_exp_known_type {}; #if 0 template struct MatrixExponentialScalingOp; template struct MatrixExponentialScalingOp> { MatrixExponentialScalingOp(int squarings) : m_squarings(squarings) { } inline const duals::dual operator() (const duals::dual & x) const { using std::ldexp; return ldexp(x, -m_squarings); } typedef std::complex> ComplexScalar; inline const ComplexScalar operator() (const ComplexScalar& x) const { using std::ldexp; return ComplexScalar(ldexp(x.real(), -m_squarings), ldexp(x.imag(), -m_squarings)); } private: int m_squarings; }; #endif }} #include namespace Eigen { namespace internal { template struct matrix_exp_computeUV > { typedef typename NumTraits::Scalar>::Real RealScalar; template static void run(const ArgType& arg, MatrixType& U, MatrixType& V, int& squarings) { using std::frexp; using std::pow; const RealScalar l1norm = arg.cwiseAbs().colwise().sum().maxCoeff(); squarings = 0; if (l1norm < 1.495585217958292e-002) { matrix_exp_pade3(arg, U, V); } else if (l1norm < 2.539398330063230e-001) { matrix_exp_pade5(arg, U, V); } else if (l1norm < 9.504178996162932e-001) { matrix_exp_pade7(arg, U, V); } else if (l1norm < 2.097847961257068e+000) { matrix_exp_pade9(arg, U, V); } else { const RealScalar maxnorm = 5.371920351148152; frexp(l1norm / maxnorm, &squarings); if (squarings < 0) squarings = 0; MatrixType A = arg.unaryExpr(MatrixExponentialScalingOp(squarings)); matrix_exp_pade13(A, U, V); } } }; }} /* encode the type into an integer for benchmark output */ template struct type_num { /* should fail */ }; template<> struct type_num { static constexpr int id = 1; }; template<> struct type_num { static constexpr int id = 2; }; template<> struct type_num { static constexpr int id = 3; }; template struct type_num> { static constexpr int id = 10 + type_num::id; }; template struct type_num> { static constexpr int id = 100 + type_num::id; }; using duals::dualf; using duals::duald; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using MatrixX = Eigen::Matrix; #if 0 #define V_RANGE(V,NF) ->Arg(V*4/NF)->Arg(V*32/NF)->Arg(V*256/NF)->Arg(V*2048/NF)->Arg(V*1)->Complexity() #else #define V_RANGE(V,NF) ->Arg(V*1024/NF) #endif template void B_VecVecAddCXX(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) a[i] = b[i] + b[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure Eigen's vec-vec multiplication template void B_VecVecAdd(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, 1); MatrixX B = MatrixX::Random(N, 1); MatrixX C = MatrixX::Random(N, 1); for (auto _ : state) { B = A + A; benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure Eigen's vec-vec multiplication template void B_VecVecSub(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, 1); MatrixX B = MatrixX::Random(N, 1); MatrixX C = MatrixX::Random(N, 1); for (auto _ : state) { B = A - A; benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } template void B_VecVecMulCXX(benchmark::State& state) { int N = state.range(0); std::vector a(N); std::vector b(N); std::vector c(N); for (auto _ : state) { for (int i = 0; i < N; i++) b[i] = a[i] * a[i]; benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure Eigen's vec-vec multiplication template void B_VecVecMul(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, 1); MatrixX B = MatrixX::Random(N, 1); MatrixX C = MatrixX::Random(N, 1); for (auto _ : state) { B = A.array() * C.array(); benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure Eigen's vec-vec multiplication template void B_VecVecDiv(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, 1); MatrixX B = MatrixX::Random(N, 1); MatrixX C = MatrixX::Random(N, 1); for (auto _ : state) { C = A.array() / B.array(); benchmark::ClobberMemory(); // Force a to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure Eigen's matrix-matrix multiplication template void B_MatMat(benchmark::State& state) { int N = state.range(0); typedef typename Eigen::ScalarBinaryOpTraits::ReturnType R; MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Random(N, N); MatrixX C = MatrixX::Random(N, N); for (auto _ : state) { C.noalias() = A * B; benchmark::ClobberMemory(); // Force c to be written to memory. } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure compiler's matrix-matrix multiplication template void B_MatMatCXX(benchmark::State& state) { int N = state.range(0); std::vector a(N*N); std::vector b(N*N); std::vector c(N*N); for (auto _ : state) { state.PauseTiming(); a.assign(N*N,1.1); b.assign(N*N,2.2); c.assign(N*N,0.); state.ResumeTiming(); for(int i=0; i::id; state.SetComplexityN(state.range(0)); } // measure Eigen's matrix-matrix solve template void B_MatDiv(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Random(N, N); MatrixX C = MatrixX::Zero(N, N); for (auto _ : state) { C = B.partialPivLu().solve(A); // C = A / B benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } // measure eigen's matrix-vector multiplication template void B_MatVec(benchmark::State& state) { int N = state.range(0); MatrixX A = MatrixX::Random(N, N); MatrixX b = MatrixX::Random(N, 1); MatrixX c = MatrixX::Random(N, 1); for (auto _ : state) { c = A * b; benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } template void B_Expm(benchmark::State& state) { int N = state.range(0); //Rt S(1); MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Zero(N, N); //A = S * A / A.norm(); for (auto _ : state) { B = A.exp(); benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } template void B_ExpPadm(benchmark::State& state) { int N = state.range(0); //Rt S(1); MatrixX A = MatrixX::Random(N, N); MatrixX B = MatrixX::Zero(N, N); //A = S * A / A.norm(); for (auto _ : state) { B = eexpokit::padm(A); benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } template void B_ExpExpv(benchmark::State& state) { int N = state.range(0); //Rt S(1); MatrixX A = MatrixX::Zero(N, N); MatrixX b = MatrixX::Ones(N, 1); MatrixX c = MatrixX::Zero(N, 1); //A = S * A / A.norm(); // sparse random fill for (int i = 0; i < 4*N; i++) A((int)duals::randos::random(0.,N-1.), (int)duals::randos::random(0.,N-1.)) = duals::randos::random2(); for (auto _ : state) { auto ret = eexpokit::expv(1,A,b); if (ret.err > 1) { std::ofstream f("fail.m"); f << "A=" << A.format(eexpokit::OctaveFmt) << "\n"; break; } // c = ret.w benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } template void B_ExpChbv(benchmark::State& state) { int N = state.range(0); //Rt S(1); MatrixX A = MatrixX::Random(N, N); MatrixX b = MatrixX::Zero(N, 1); MatrixX c = MatrixX::Zero(N, 1); //A = S * A / A.norm(); for (auto _ : state) { c = eexpokit::chbv(A,b); benchmark::ClobberMemory(); } state.counters["type"] = type_num::id; state.SetComplexityN(state.range(0)); } #define MAKE_BM_SIMPLE(TYPE1,TYPE2,NF) \ BENCHMARK_TEMPLATE(B_VecVecAdd, TYPE1,TYPE2) V_RANGE(4,NF); \ BENCHMARK_TEMPLATE(B_VecVecSub, TYPE1,TYPE2) V_RANGE(4,NF); \ BENCHMARK_TEMPLATE(B_VecVecMul, TYPE1,TYPE2) V_RANGE(4,NF); \ BENCHMARK_TEMPLATE(B_VecVecDiv, TYPE1,TYPE2) V_RANGE(4,NF); \ BENCHMARK_TEMPLATE(B_MatVec, TYPE1,TYPE2) V_RANGE(4,NF); \ BENCHMARK_TEMPLATE(B_MatMat, TYPE1,TYPE2) V_RANGE(1,NF); \ BENCHMARK_TEMPLATE(B_MatDiv, TYPE1,TYPE2) V_RANGE(1,NF); \ BENCHMARK_TEMPLATE(B_Expm, TYPE1) V_RANGE(1,NF); \ BENCHMARK_TEMPLATE(B_ExpPadm, TYPE1) V_RANGE(1,NF); \ BENCHMARK_TEMPLATE(B_ExpChbv, TYPE1) V_RANGE(1,NF); \ BENCHMARK_TEMPLATE(B_ExpExpv, TYPE1) V_RANGE(1,NF) #define MAKE_BENCHMARKS(TYPE1,TYPE2,NF) \ MAKE_BM_SIMPLE(TYPE1,TYPE2,NF) // BENCHMARK_TEMPLATE(B_VecVecMulCXX, TYPE1,TYPE2) V_RANGE(4,NF); // BENCHMARK_TEMPLATE(B_MatMatCXX, TYPE1,TYPE2) V_RANGE(1,NF); #if 1 MAKE_BENCHMARKS(float, float, 1); MAKE_BENCHMARKS(complexf, complexf,2); MAKE_BM_SIMPLE(dualf, dualf,2); MAKE_BM_SIMPLE(cdualf, cdualf,4); #else MAKE_BENCHMARKS(double, double,1); MAKE_BENCHMARKS(complexd, complexd,2); MAKE_BM_SIMPLE(duald, duald,2); MAKE_BM_SIMPLE(cduald, cduald,4); #endif #define QUOTE(...) STRFY(__VA_ARGS__) #define STRFY(...) #__VA_ARGS__ int main(int argc, char** argv) { #ifndef EIGEN_VECTORIZE static_assert(false, "no vectorization?"); #endif std::cout << "OPT_FLAGS=" << QUOTE(OPT_FLAGS) << "\n"; std::cout << "INSTRUCTIONSET=" << Eigen::SimdInstructionSetsInUse() << "\n"; ::benchmark::Initialize(&argc, argv); ::benchmark::RunSpecifiedBenchmarks(); } tmp_ns50wwy/src/include/cppduals/tests/type_name.hpp0000644000175000017500000000520014163340332023027 0ustar carstencarsten// https://stackoverflow.com/questions/81870/is-it-possible-to-print-a-variables-type-in-standard-c #pragma once #include #include #include #include #ifndef _MSC_VER # if __cplusplus < 201103 # define CONSTEXPR11_TN # define CONSTEXPR14_TN # define NOEXCEPT_TN # elif __cplusplus < 201402 # define CONSTEXPR11_TN constexpr # define CONSTEXPR14_TN # define NOEXCEPT_TN noexcept # else # define CONSTEXPR11_TN constexpr # define CONSTEXPR14_TN constexpr # define NOEXCEPT_TN noexcept # endif #else // _MSC_VER # if _MSC_VER < 1900 # define CONSTEXPR11_TN # define CONSTEXPR14_TN # define NOEXCEPT_TN # elif _MSC_VER < 2000 # define CONSTEXPR11_TN constexpr # define CONSTEXPR14_TN # define NOEXCEPT_TN noexcept # else # define CONSTEXPR11_TN constexpr # define CONSTEXPR14_TN constexpr # define NOEXCEPT_TN noexcept # endif #endif // _MSC_VER class static_string { const char* const p_; const std::size_t sz_; public: typedef const char* const_iterator; template CONSTEXPR11_TN static_string(const char(&a)[N]) NOEXCEPT_TN : p_(a) , sz_(N-1) {} CONSTEXPR11_TN static_string(const char* p, std::size_t N) NOEXCEPT_TN : p_(p) , sz_(N) {} //CONSTEXPR11_TN operator const char *() const { return p_; } CONSTEXPR11_TN const char* data() const NOEXCEPT_TN {return p_;} CONSTEXPR11_TN std::size_t size() const NOEXCEPT_TN {return sz_;} CONSTEXPR11_TN const_iterator begin() const NOEXCEPT_TN {return p_;} CONSTEXPR11_TN const_iterator end() const NOEXCEPT_TN {return p_ + sz_;} CONSTEXPR11_TN char operator[](std::size_t n) const { return n < sz_ ? p_[n] : throw std::out_of_range("static_string"); } std::string str() const { return std::string(begin(), end()); } }; inline std::ostream& operator<<(std::ostream& os, static_string const& s) { return os.write(s.data(), s.size()); } #define CRED "\x1b[31m" #define CGREEN "\x1b[32m" #define CYELLOW "\x1b[33m" #define CBLUE "\x1b[34m" #define CMAGENTA "\x1b[35m" #define CCYAN "\x1b[36m" #define CRESET "\x1b[0m" template CONSTEXPR14_TN static_string type_name() { #ifdef __clang__ static_string p = __PRETTY_FUNCTION__; return static_string(p.data() + 31, p.size() - 31 - 1); #elif defined(__GNUC__) static_string p = __PRETTY_FUNCTION__; # if __cplusplus < 201402 return static_string(p.data() + 36, p.size() - 36 - 1); # else return static_string(p.data() + 46, p.size() - 46 - 1); # endif #elif defined(_MSC_VER) static_string p = __FUNCSIG__; return static_string(p.data() + 38, p.size() - 38 - 7); #endif } tmp_ns50wwy/src/include/cppduals/tests/sandbox.cpp0000644000175000017500000000710714163340332022507 0ustar carstencarsten//===-- test_dual.cpp - test duals/dual -------------------------*- C++ -*-===// // // Part of the cppduals Project // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * just a place to play around and get dirty. * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include #include #include #include "type_name.hpp" #include #include #include #include using std::cout; using std::cerr; using duals::dualf; using duals::duald; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; typedef std::complex chyperdualf; using duals::dual_traits; using namespace duals::literals; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define PO_EXPR_TYPE(...) typename std::decay::type::PlainObject template class Rando { T x; }; struct Randa { int x; }; namespace std { template struct common_type,T> { typedef Rando type; }; } #if 0 int main(int argc, char * argv[]) { emtx A,B,C; //emtx A,B,C; C = A * B; } #elif 0 int main(int argc, char * argv[]) { typedef double T; T h(T(1) / (1ull << (std::numeric_limits::digits / 3))); #define func erfc for (double x = 0; x < 4; x += .21) { std::cout << " erf(" << x << ") = " << func (x) << " , =" << (func (x+h)- func (x))/h << "\n"; std::cout << "d(erf" << x << ") = " << func (x + 1_e) << "\n"; } } #else template T f(T x) { return pow(x,pow(x,x)); } template T df(T x) { return pow(x,-1 + x + pow(x,x)) * (1 + x*log(x) + x*pow(log(x),2)); } template T ddf(T x) { return (pow(x,pow(x,x)) * pow(pow(x,x - 1) + pow(x,x)*log(x)*(log(x) + 1), 2) + pow(x,pow(x,x)) * (pow(x,x - 1) * log(x) + pow(x,x - 1) * (log(x) + 1) + pow(x,x - 1) * ((x - 1)/x + log(x)) + pow(x,x) * log(x) * pow(log(x) + 1, 2) )); } int main(int argc, char * argv[]) { dualf h; dualf xx(1); hyperdualf y; hyperdualf w(1); hyperdualf z(xx,h); hyperdualf a(xx); emtx ed; emtx ef; emtx ecd; emtx ecf_; emtx edd; emtx edf_; emtx ecdd; emtx ecdf_; std::cout << " f(2.) = " << f(2.) << "\n"; std::cout << " df(2.) = " << df(2.) << "\n"; std::cout << "ddf(2.) = " << ddf(2.) << "\n"; std::cout << " f(2+1_e) = " << f(2+1_e) << "\n"; std::cout << " f(2+1_e).dpart() = " << f(2+1_e).dpart() << "\n"; duals::hyperduald x(2+1_e,1+0_e); std::cout << " f((2+1_e) + (1+0_e)_e).dpart().dpart() = " << f(x).dpart().dpart() << "\n"; std::cout << " c((2+1_e) + (1+0_e)_e).dpart().dpart() = " << cbrt(x).dpart().dpart() << "\n"; } #endif tmp_ns50wwy/src/include/cppduals/tests/test_vectorize.cpp0000644000175000017500000003504014163340332024117 0ustar carstencarsten//===-- test_vectorize.cpp - test duals/dual_eigen -------------*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // (c)2019 Michael Tesch. tesch1@gmail.com // /** * \file test_vectorize Dual number Eigen vectorization op tests * * (c)2019 Michael Tesch. tesch1@gmail.com */ #include "type_name.hpp" #include #include #include #include #include "gtest/gtest.h" using duals::rpart; using duals::dpart; using duals::dualf; using duals::duald; using duals::dualld; using duals::hyperdualf; using duals::hyperduald; using duals::hyperdualld; using duals::is_dual; using duals::is_complex; using duals::dual_traits; using namespace duals::literals; typedef std::complex complexd; typedef std::complex complexf; typedef std::complex cduald; typedef std::complex cdualf; template using emtx = Eigen::Matrix; template using smtx = Eigen::SparseMatrix; template using ecf = Eigen::Matrix ; template using edf = Eigen::Matrix ; template using ecdf = Eigen::Matrix ; #define _EXPECT_TRUE(...) {typedef __VA_ARGS__ tru; EXPECT_TRUE(tru::value); static_assert(tru::value, "sa"); } #define _EXPECT_FALSE(...) {typedef __VA_ARGS__ fal; EXPECT_FALSE(fal::value); static_assert(!fal::value, "sa"); } #define ASSERT_DEQ(A,B) ASSERT_EQ(rpart(A), rpart(B)); ASSERT_EQ(dpart(A), dpart(B)) #define ASSERT_DNEAR(A,B,tol) \ ASSERT_NEAR(abs(rpart((A) - (B))),0,abs(rpart(A))*(tol)); \ ASSERT_NEAR(abs(dpart((A) - (B))),0,abs(dpart(A))*(tol)) #define EXPECT_DEQ(A,B) EXPECT_EQ(rpart(A), rpart(B)); EXPECT_EQ(dpart(A), dpart(B)) #define EXPECT_DNE(A,B) EXPECT_NE(rpart(A), rpart(B)); EXPECT_NE(dpart(A), dpart(B)) #define EXPECT_DNEAR(A,B,tol) \ EXPECT_NEAR(abs(rpart((A) - (B))),0,abs(rpart(A))*(tol)); \ EXPECT_NEAR(abs(dpart((A) - (B))),0,abs(dpart(A))*(tol)) template void elemwise(int N) { std::vector a(N); std::vector b(N); std::vector cp(N); std::vector cm(N); std::vector ct(N); std::vector cd(N); std::vector cc(N); std::vector cca(N); std::vector ccb(N); emtx A(N,1); emtx B(N,1); emtx Cp(N,1); emtx Cm(N,1); emtx Ct(N,1); emtx Cd(N,1); emtx Cc(N,1); emtx Cca(N,1); emtx Ccb(N,1); double tol = rpart(2000*Eigen::NumTraits::epsilon()); using duals::randos::random2; Rt sum(0); for (int i = 0; i < N; i++) { A(i) = a[i] = random2(); B(i) = b[i] = random2(); cp[i] = a[i] + b[i]; cm[i] = a[i] - b[i]; ct[i] = a[i] * b[i]; cd[i] = a[i] / b[i]; cc[i] = conj(a[i]) + conj(b[i]); cca[i] = conj(a[i]) + b[i]; ccb[i] = a[i] + conj(b[i]); sum += a[i]; } Cp = A.array() + B.array(); Cm = A.array() - B.array(); Ct = A.array() * B.array(); Cd = A.array() / B.array(); Cc = conj(A.array()) + conj(B.array()); Cca = conj(A.array()) + B.array(); Ccb = A.array() + conj(B.array()); for (int i = 0; i < N; i++) { ASSERT_DEQ(cp[i], Cp(i)) << "p mismatch at " << i << "\n"; ASSERT_DEQ(cm[i], Cm(i)) << "m mismatch at " << i << "\n"; ASSERT_DNEAR(ct[i], Ct(i),tol) << "t mismatch at " << i << "\n"; ASSERT_DNEAR(cd[i], Cd(i),3*tol) /* why is this so much worse? */ << "d mismatch at " << i << " " << cd[i] << "|\n" << Cd(i) << " != " << a[i] << "/" << b[i] << "\n"; ASSERT_DEQ(cc[i], Cc(i)) << "c mismatch at " << i << "\n"; ASSERT_DEQ(cca[i], Cca(i)) << "ca mismatch at " << i << "\n"; ASSERT_DEQ(ccb[i], Ccb(i)) << "cb mismatch at " << i << "\n"; } ASSERT_DNEAR(sum, A.sum(), N*tol); ASSERT_DNEAR(sum, A.sum(), N*tol); } TEST(Vector, full_even_dualf) { elemwise(512); } TEST(Vector, full_even_duald) { elemwise(512); } TEST(Vector, full_even_cdualf) { elemwise(512); } TEST(Vector, full_odd_dualf) { elemwise(2049); } TEST(Vector, full_odd_duald) { elemwise(2049); } TEST(Vector, full_odd_cdualf) { elemwise(2049); } TEST(Vector, single_elem_dualf) { elemwise(1); } TEST(Vector, single_elem_duald) { elemwise(1); } TEST(Vector, single_elem_cdualf) { elemwise(1); } TEST(Vector, two_elem_dualf) { elemwise(2); } TEST(Vector, two_elem_duald) { elemwise(2); } TEST(Vector, two_elem_cdualf) { elemwise(2); } #define DBOUT(X) #define MAKE_MULT_TEST(TYPE1, TYPE2, FIX, SIZE) \ TEST(MatMult, TYPE1##_##TYPE2##_##SIZE) { \ typedef TYPE1 T1; \ typedef TYPE2 T2; \ typedef decltype(TYPE1() * TYPE2()) T3; \ using duals::rpart; \ using duals::conj; \ /*using std::conj;*/ \ using duals::randos::random2; \ \ double tol = rpart(20*Eigen::NumTraits::epsilon()); \ static const Eigen::Index N = FIX; \ static const int n = SIZE; \ emtx A(n,n); \ emtx B(n,n); \ emtx C(n,n); \ emtx D(n,n); \ \ for (Eigen::Index i = 0; i < A.size(); i++) { \ A.data()[i] = random2(); \ B.data()[i] = random2(); \ } \ \ C.setZero(); \ for(int i=0; ili>h1, .sm>li>h2, .sm>li>h3, .sm>li>h4, .sm>li>h5, .sm>li>h6 { margin:0; padding:0 } .sm ul { display:none } .sm li, .sm a { position:relative } .sm a { display:block } .sm a.disabled { cursor:not-allowed } .sm:after { content:"\00a0"; display:block; height:0; font:0/0 serif; clear:both; visibility:hidden; overflow:hidden } .sm, .sm *, .sm *:before, .sm *:after { -moz-box-sizing:border-box; -webkit-box-sizing:border-box; box-sizing:border-box } #doc-content { overflow:auto; display:block; padding:0; margin:0; -webkit-overflow-scrolling:touch } .sm-dox { background-image:url("tab_b.png") } .sm-dox a, .sm-dox a:focus, .sm-dox a:hover, .sm-dox a:active { padding:0 12px; padding-right:43px; font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif; font-size:13px; font-weight:bold; line-height:36px; text-decoration:none; text-shadow:0 1px 1px rgba(128,128,128,0.9); color:#2c2c2c; outline:0 } .sm-dox a:hover { background-image:url("tab_a.png"); background-repeat:repeat-x; color:brown; text-shadow:0 1px 1px black } .sm-dox a.current { color:#d23600 } .sm-dox a.disabled { color:#bbb } .sm-dox a span.sub-arrow { position:absolute; top:50%; margin-top:-14px; left:auto; right:3px; width:28px; height:28px; overflow:hidden; font:bold 12px/28px monospace!important; text-align:center; text-shadow:none; background:rgba(255,255,255,0.5); -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px } .sm-dox a.highlighted span.sub-arrow:before { display:block; content:'-' } .sm-dox>li:first-child>a, .sm-dox>li:first-child>:not(ul) a { -moz-border-radius:5px 5px 0 0; -webkit-border-radius:5px; border-radius:5px 5px 0 0 } .sm-dox>li:last-child>a, .sm-dox>li:last-child>*:not(ul) a, .sm-dox>li:last-child>ul, .sm-dox>li:last-child>ul>li:last-child>a, .sm-dox>li:last-child>ul>li:last-child>*:not(ul) a, .sm-dox>li:last-child>ul>li:last-child>ul, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul { -moz-border-radius:0 0 5px 5px; -webkit-border-radius:0; border-radius:0 0 5px 5px } .sm-dox>li:last-child>a.highlighted, .sm-dox>li:last-child>*:not(ul) a.highlighted, .sm-dox>li:last-child>ul>li:last-child>a.highlighted, .sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted, .sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted { -moz-border-radius:0; -webkit-border-radius:0; border-radius:0 } .sm-dox ul { background:rgba(162,162,162,0.1) } .sm-dox ul a, .sm-dox ul a:focus, .sm-dox ul a:hover, .sm-dox ul a:active { font-size:12px; border-left:8px solid transparent; line-height:36px; text-shadow:none; background-color:#9ab8d7; background-image:none } .sm-dox ul a:hover { background-image:url("tab_a.png"); background-repeat:repeat-x; color:#9ab8d7; text-shadow:0 1px 1px black } .sm-dox ul ul a, .sm-dox ul ul a:hover, .sm-dox ul ul a:focus, .sm-dox ul ul a:active { border-left:16px solid transparent } .sm-dox ul ul ul a, .sm-dox ul ul ul a:hover, .sm-dox ul ul ul a:focus, .sm-dox ul ul ul a:active { border-left:24px solid transparent } .sm-dox ul ul ul ul a, .sm-dox ul ul ul ul a:hover, .sm-dox ul ul ul ul a:focus, .sm-dox ul ul ul ul a:active { border-left:32px solid transparent } .sm-dox ul ul ul ul ul a, .sm-dox ul ul ul ul ul a:hover, .sm-dox ul ul ul ul ul a:focus, .sm-dox ul ul ul ul ul a:active { border-left:40px solid transparent } @media(min-width:768px) { .sm-dox ul { position:absolute; width:12em } .sm-dox li { float:left } .sm-dox.sm-rtl li { float:right } .sm-dox ul li, .sm-dox.sm-rtl ul li, .sm-dox.sm-vertical li { float:none } .sm-dox a { white-space:nowrap } .sm-dox ul a, .sm-dox.sm-vertical a { white-space:normal } .sm-dox .sm-nowrap>li>a, .sm-dox .sm-nowrap>li>:not(ul) a { white-space:nowrap } .sm-dox { padding:0 10px; background-image:url("tab_b.png"); line-height:36px } .sm-dox a span.sub-arrow { top:50%; margin-top:-2px; right:12px; width:0; height:0; border-width:4px; border-style:solid dashed dashed dashed; border-color:#283a5d transparent transparent transparent; background:transparent; -moz-border-radius:0; -webkit-border-radius:0; border-radius:0 } .sm-dox a, .sm-dox a:focus, .sm-dox a:active, .sm-dox a:hover, .sm-dox a.highlighted { padding:0 12px; background-image:url("tab_s.png"); background-repeat:no-repeat; background-position:right; -moz-border-radius:0!important; -webkit-border-radius:0; border-radius:0!important } .sm-dox a:hover { background-image:url("tab_a.png"); background-repeat:repeat-x; color:#bbb; text-shadow:0 1px 1px #2c2c2c } .sm-dox a:hover span.sub-arrow { border-color:white transparent transparent transparent } .sm-dox a.has-submenu { padding-right:24px } .sm-dox li { border-top:0 } .sm-dox>li>ul:before, .sm-dox>li>ul:after { content:''; position:absolute; top:-18px; left:30px; width:0; height:0; overflow:hidden; border-width:9px; border-style:dashed dashed solid dashed; border-color:transparent transparent #bbb transparent } .sm-dox>li>ul:after { top:-16px; left:31px; border-width:8px; border-color:transparent transparent #fff transparent } .sm-dox ul { border:1px solid #bbb; padding:5px 0; background:#9ab8d7; -moz-border-radius:5px!important; -webkit-border-radius:5px; border-radius:5px!important; -moz-box-shadow:0 5px 9px rgba(0,0,0,0.2); -webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2); box-shadow:0 5px 9px rgba(0,0,0,0.2) } .sm-dox ul a span.sub-arrow { right:8px; top:50%; margin-top:-5px; border-width:5px; border-color:transparent transparent transparent #555; border-style:dashed dashed dashed solid } .sm-dox ul a, .sm-dox ul a:hover, .sm-dox ul a:focus, .sm-dox ul a:active, .sm-dox ul a.highlighted { color:#555; background-image:none; border:0!important; color:#555; background-image:none } .sm-dox ul a:hover { background-image:url("tab_a.png"); background-repeat:repeat-x; color:#9ab8d7; text-shadow:0 1px 1px black } .sm-dox ul a:hover span.sub-arrow { border-color:transparent transparent transparent white } .sm-dox span.scroll-up, .sm-dox span.scroll-down { position:absolute; display:none; visibility:hidden; overflow:hidden; background:#fff; height:36px } .sm-dox span.scroll-up:hover, .sm-dox span.scroll-down:hover { background:#eee } .sm-dox span.scroll-up:hover span.scroll-up-arrow, .sm-dox span.scroll-up:hover span.scroll-down-arrow { border-color:transparent transparent #d23600 transparent } .sm-dox span.scroll-down:hover span.scroll-down-arrow { border-color:#d23600 transparent transparent transparent } .sm-dox span.scroll-up-arrow, .sm-dox span.scroll-down-arrow { position:absolute; top:0; left:50%; margin-left:-6px; width:0; height:0; overflow:hidden; border-width:6px; border-style:dashed dashed solid dashed; border-color:transparent transparent #555 transparent } .sm-dox span.scroll-down-arrow { top:8px; border-style:solid dashed dashed dashed; border-color:#555 transparent transparent transparent } .sm-dox.sm-rtl a.has-submenu { padding-right:12px; padding-left:24px } .sm-dox.sm-rtl a span.sub-arrow { right:auto; left:12px } .sm-dox.sm-rtl.sm-vertical a.has-submenu { padding:10px 20px } .sm-dox.sm-rtl.sm-vertical a span.sub-arrow { right:auto; left:8px; border-style:dashed solid dashed dashed; border-color:transparent #555 transparent transparent } .sm-dox.sm-rtl>li>ul:before { left:auto; right:30px } .sm-dox.sm-rtl>li>ul:after { left:auto; right:31px } .sm-dox.sm-rtl ul a.has-submenu { padding:10px 20px!important } .sm-dox.sm-rtl ul a span.sub-arrow { right:auto; left:8px; border-style:dashed solid dashed dashed; border-color:transparent #555 transparent transparent } .sm-dox.sm-vertical { padding:10px 0; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px } .sm-dox.sm-vertical a { padding:10px 20px } .sm-dox.sm-vertical a:hover, .sm-dox.sm-vertical a:focus, .sm-dox.sm-vertical a:active, .sm-dox.sm-vertical a.highlighted { background:#fff } .sm-dox.sm-vertical a.disabled { background-image:url("tab_b.png") } .sm-dox.sm-vertical a span.sub-arrow { right:8px; top:50%; margin-top:-5px; border-width:5px; border-style:dashed dashed dashed solid; border-color:transparent transparent transparent #555 } .sm-dox.sm-vertical>li>ul:before, .sm-dox.sm-vertical>li>ul:after { display:none } .sm-dox.sm-vertical ul a { padding:10px 20px } .sm-dox.sm-vertical ul a:hover, .sm-dox.sm-vertical ul a:focus, .sm-dox.sm-vertical ul a:active, .sm-dox.sm-vertical ul a.highlighted { background:#eee } .sm-dox.sm-vertical ul a.disabled { background:#fff } } tmp_ns50wwy/src/include/cppduals/doc/Doxyfile.in0000644000175000017500000031475614163340332022076 0ustar carstencarsten# Doxyfile 1.8.10 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. # # All text after a single hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all text # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # for the list of possible encodings. # The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the # project for which the documentation is generated. This name is used in the # title of most generated pages and in a few other places. # The default value is: My Project. PROJECT_NAME = "cppduals" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. PROJECT_NUMBER = ${cppduals_VERSION} # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = "Dual numbers for C++" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 # pixels and the maximum width should not exceed 200 pixels. Doxygen will copy # the logo to the output directory. PROJECT_LOGO = ${PROJECT_SOURCE_DIR}/doc/Greek_Epsilon_archaic.svg # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and # will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes # performance problems for the file system. # The default value is: NO. CREATE_SUBDIRS = NO # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. # The default value is: NO. ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. # The default value is: YES. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found # as the leading text of the brief description, will be stripped from the text # and the result, after processing the whole list, is used as the annotated # text. Otherwise, the brief description is used as-is. If left blank, the # following values are used ($name is automatically replaced with the name of # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. # The default value is: NO. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. FULL_PATH_NAMES = NO # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which # header file to include in order to use a class. If left blank only the name of # the header file containing the class definition is used. Otherwise one should # specify the list of include paths that are normally passed to the compiler # using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief # description.) # The default value is: NO. JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) # The default value is: NO. QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this # tag to YES if you prefer the old behavior instead. # # Note that setting this tag to YES also means that rational rose comments are # not recognized any more. # The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: # name=value # For example adding # "sideeffect=@par Side Effects:\n" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. ALIASES = # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all # members will be omitted, etc. # The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored # for that language. For instance, namespaces will be presented as packages, # qualified scopes will look different, etc. # The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # Fortran. In the later case the parser tries to guess whether the code is fixed # or free formatted code, this is the default for Fortran type files), VHDL. For # instance to make doxygen treat .inc files as Fortran files (default is PHP), # and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. EXTENSION_MAPPING = no_extension=C++ # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); # versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # will parse them like normal C++ but will assume all classes use public instead # of private inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make # doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. # The default value is: YES. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. DISTRIBUTE_GROUP_DOC = NO # If one adds a struct or class to a group and this option is enabled, then also # any nested class or struct is added to the same group. By default this option # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. GROUP_NESTED_COMPOUNDS = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that # type (e.g. under the Public Functions section). Set it to NO to prevent # subgrouping. Alternatively, this can be done per class using the # \nosubgrouping command. # The default value is: YES. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) # instead of on a separate page (for HTML and Man pages) or section (for LaTeX # and RTF). # # Note that this feature does not work in combination with # SEPARATE_MEMBER_PAGES. # The default value is: NO. INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions # with only public data fields or simple typedef fields will be shown inline in # the documentation of the scope in which they are defined (i.e. file, # namespace, or group documentation), provided this scope is documented. If set # to NO, structs, classes, and unions are shown on a separate page (for HTML and # Man pages) or section (for LaTeX and RTF). # The default value is: NO. INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically be # useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small # doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 # symbols. At the end of a run doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. # Note: This will also disable the warnings about undocumented members that are # normally produced when WARNINGS is set to YES. # The default value is: NO. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. # The default value is: NO. EXTRACT_PRIVATE = YES # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. # The default value is: NO. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES, all static members of a file will be # included in the documentation. # The default value is: NO. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, # only classes defined in header files are included. Does not have any effect # for Java sources. # The default value is: YES. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are # included in the documentation. If set to NO, only methods in the interface are # included. # The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base name of # the file that contains the anonymous namespace. By default anonymous namespace # are hidden. # The default value is: NO. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option # has no effect if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO, these declarations will be # included in the documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES, upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. # The default value is: system dependent. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. # The default value is: NO. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief # member documentation. # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting # detailed member documentation. # The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will # be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the alphabetical # list. # The default value is: NO. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo # list. This list is created by putting \todo commands in the documentation. # The default value is: YES. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test # list. This list is created by putting \test commands in the documentation. # The default value is: YES. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the # documentation. If the initializer consists of more lines than specified here # it will be hidden. Use a value of 0 to hide initializers completely. The # appearance of the value of individual variables and macros / defines can be # controlled using \showinitializer or \hideinitializer command in the # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES, the # list will mention the files that were used to generate the documentation. # The default value is: YES. SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml # will be used as the name of the layout file. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib # extension is automatically appended if omitted. This requires the bibtex tool # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # For LaTeX the style of the bibliography can be controlled using # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # search path. See also \cite for info how to create references. CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to # standard output by doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. # The default value is: YES. WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters # in a documented function, or documenting parameters that don't exist or using # markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete # parameter documentation, but not about the absence of documentation. # The default value is: NO. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag is used to specify the files and/or directories that contain # documented source files. You may enter file names like myfile.cpp or # directories like /usr/src/myproject. Separate the files or directories with # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. INPUT = ${PROJECT_SOURCE_DIR}/duals/dual \ ${PROJECT_SOURCE_DIR}/duals/dual_eigen \ ${PROJECT_SOURCE_DIR}/doc # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: http://www.gnu.org/software/libiconv) for the list of # possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, # *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, # *.vhdl, *.ucf, *.qsf, *.as and *.js. FILE_PATTERNS = *.cpp *.hpp *.h *.dox *.md # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test # # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). IMAGE_PATH = ${PROJECT_SOURCE_DIR}/doc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # # # # where is the value of the INPUT_FILTER tag, and is the # name of an input file. Doxygen will then use the output that the filter # program writes to standard output. If FILTER_PATTERNS is specified, this tag # will be ignored. # # Note that the filter must not add or remove lines; it is applied before the # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: pattern=filter # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and # it is also possible to disable source filtering for a specific pattern using # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub # and want to reuse the introduction page also for the doxygen output. USE_MDFILE_AS_MAINPAGE = ${PROJECT_SOURCE_DIR}/README.md #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will be # generated. Documented entities will be cross-referenced with these sources. # # Note: To get rid of all source code in the generated output, make sure that # also VERBATIM_HEADERS is set to NO. # The default value is: NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES then for each documented function # all documented entities called/used by that function will be listed. # The default value is: NO. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES then the hyperlinks from functions in REFERENCES_RELATION and # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will # link to the documentation. # The default value is: YES. REFERENCES_LINK_SOURCE = YES # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the # source code will show a tooltip with additional information such as prototype, # brief description and links to the definition and documentation. Since this # will make the HTML file larger and loading of large files a bit slower, you # can opt to disable this feature. # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see http://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. # # To use it do the following: # - Install the latest version of global # - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # # The result: instead of the source browser generated by doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. # The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all # compounds will be generated. Enable this if the project contains a lot of # classes, structs, unions or interfaces. # The default value is: YES. ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of # it. # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = ../docs # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets # that doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" # for information on how to generate the default header that doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the # default header when upgrading to a newer version of doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = header.html # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of # the HTML output. If left blank doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style # sheet that doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets # created by doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the # list). For an example see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = customdoxygen.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that the # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_FILES = favicon.ico # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a colorwheel, see # http://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_HUE = 80 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 10 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 # gradually make the output lighter, whereas values above 100 make the output # darker. The value divided by 100 is the actual gamma applied, so 80 represents # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not # change the gamma. # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 240 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this # to YES can help to show when doxygen was last run and thus if the # documentation is up to date. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to # such a level that at most the specified number of entries are visible (unless # a fully collapsed tree already exceeds this amount). So setting the number of # entries 1 will produce a full collapsed tree by default. 0 is a special value # representing an infinite number of entries and will result in a full expanded # tree by default. # Minimum value: 0, maximum value: 9999, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development # environment (see: http://developer.apple.com/tools/xcode/), introduced with # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # Makefile in the HTML output directory. Running make will produce the docset in # that directory and running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider # (such as a company or product suite) can be grouped. # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for # words in the documentation. The HTML workshop also contains a viewer for # compressed HTML files. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, # doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated # (YES) or that it should be included in the master .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated # (YES) or a normal table of contents (NO) in the .chm file. Furthermore it # enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # (.qch) of the generated HTML documentation. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To # install this plugin and make it available under the help contents menu in # Eclipse, the contents of the directory containing the HTML and XML files needs # to be copied into the plugins directory of eclipse. The name of the directory # within the plugins directory should be the same as the ECLIPSE_DOC_ID value. # After copying Eclipse needs to be restarted before the help appears. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this # name. Each documentation set should have its own identifier. # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top # of each HTML page. A value of NO enables the index and the value YES disables # it. Since the tabs in the index contain the same information as the navigation # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. #DISABLE_INDEX = YES DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag # value is set to YES, a side panel will be generated containing a tree-like # index structure (just like the one that is generated for HTML Help). For this # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # further fine-tune the look of the index. As an example, the default style # sheet generated by doxygen has an example that shows how to put an image at # the root of the tree instead of the PROJECT_NAME. Since the tree basically has # the same information as the tab index, you could consider setting # DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. #GENERATE_TREEVIEW = YES GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 # If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not # supported properly for IE 6.0, but are supported on all modern browsers. # # Note that when changing this option you need to delete any form_*.png files in # the HTML output directory before the changes have effect. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path # to it using the MATHJAX_RELPATH option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. USE_MATHJAX = YES # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: # http://docs.mathjax.org/en/latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. #MATHJAX_FORMAT = HTML-CSS MATHJAX_FORMAT = NativeMML # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory # should contain the MathJax.js script. For instance, if the mathjax directory # is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from http://www.mathjax.org before deployment. # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5 #MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. # For large projects the javascript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically # , / tmp_ns50wwy/src/include/cppduals/doc/favicon.ico0000644000175000017500000001246614163340332022075 0ustar carstencarsten h&  ¨Ž(  224€˜™™†j*ôÿÿðÒÝîûI_ÿÿ¨‚ÿÿ-šÿó£ÿçŸÿêURDDD<”ÿýÝÝÑÌÅ»„yÿøWÿÿ$!ÿÿyÙÿì>éÿóÌÐàéE 9QUK0 ÿÿðààÿáÿáÿãÿààáÿáÿáÿðÿðøÿÿ( @ d d ,33AD5*±ôÿÿÿÿÿÿÿÿÿðŠ@ÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœSÿÿÿÿÿÿüÄ¢¢ª®ÃØíðˆ¡ÿÿÿÿÿ¼ØÿÿÿÿØ ÷ÿÿÿÿiÿÿÿÿÿ)ÿÿÿÿï@ÿÿÿÿÔIÿÿÿÿÀEÿÿÿÿ¸Aÿÿÿÿ¸<ÿÿÿÿ窪ªªªªª¥™Žˆwi5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÌÌÇ»»»»­¤™‰€v.ûÿÿÿââÿÿÿþ Äÿÿÿÿ-—ÿÿÿÿ_]ÿÿÿÿ¯#ÿÿÿÿûåÿÿÿÿ¥~ÿÿÿÿÿhÒÿÿÿÿÿ»™Œ– ¬Öý눩ýÿÿÿÿÿÿÿÿÿÿÿòœ$`™¤ª´¡‡nU,ÿÿÿÿÿÿÿÿÿàÿÿþþþÿÿþÿÿþÿÿüÿÿüÿÿüÿÿüÿÿüÿÿüÿÿü?ü?ü?üÿÿþÿÿþÿÿþÿÿþÿÿþÿÿÿÿÿÿÿÿÿ?ÿ€?ÿàÿÿÿÿÿÿÿÿÿÿÿÿÿtmp_ns50wwy/src/include/cppduals/doc/Greek_Epsilon_archaic.svg0000644000175000017500000000400014163340332024656 0ustar carstencarsten tmp_ns50wwy/src/include/cppduals/doc/gitlab-release0000755000175000017500000001664414163340332022564 0ustar carstencarsten#!/usr/bin/env python3 # found on github, of all places, with an MIT license: # MIT License # # Copyright (c) 2017 iNet Process # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import argparse import os import sys from distutils.version import LooseVersion from urllib.parse import urljoin, quote_plus import requests class GitlabReleaseError(RuntimeError): pass class GitlabRelease: def __init__(self, debug=False): self.env = {} self.fetch_all_env() self.api_project_url = self.get_api_project_url() self.debug = debug def fetch_env_var(self, name, msg): if name not in self.env: try: self.env[name] = os.environ[name] except KeyError: raise GitlabReleaseError('Missing environment variable \'{}\': {}'.format(name, msg)) return self.env[name] def is_gitlab_v9(self): gl_version = self.fetch_env_var('CI_SERVER_VERSION', '') return LooseVersion(gl_version) >= LooseVersion('9.0.0') def get_tag(self): tag_env = 'CI_BUILD_TAG' if self.is_gitlab_v9(): tag_env = 'CI_COMMIT_TAG' return self.fetch_env_var(tag_env, 'Releases can only be created on tag build.') def fetch_all_env(self): env = { 'CI_PROJECT_URL': '', 'CI_PROJECT_ID': '', 'GITLAB_ACCESS_TOKEN': "You must specifiy the private token linked to your GitLab account.\n" 'You probably need to add a GITLAB_ACCESS_TOKEN variable to your project.', } for var, msg in env.items(): self.fetch_env_var(var, msg) def get_api_project_url(self): api_version = 'v3' if self.is_gitlab_v9(): api_version = 'v4' return urljoin(self.env['CI_PROJECT_URL'], '/api/{}/projects/{}'.format(api_version, self.env['CI_PROJECT_ID'])) def post_file(self, filename): url = '/'.join((self.api_project_url, 'uploads')) files = {'file': open(filename, 'rb')} res = self.request('post', url, files=files) return res.json()['markdown'] def fetch_links(self): url = '/'.join((self.api_project_url, 'releases', self.get_tag(), 'assets/links')) headers = {'Content-Type': 'application/json'} res = self.request('get', url, headers=headers) return res.json() def set_links(self, links, update=False): url = '/'.join((self.api_project_url, 'releases', self.get_tag(), 'assets/links')) headers = {'Content-Type': 'application/json'} method = 'put' if update else 'post' res = self.request(method, url, headers=headers, json=links) return res.json() def set_release(self, message, update=False): url = '/'.join((self.api_project_url, 'repository/tags', self.get_tag(), 'release')) headers = {'Content-Type': 'application/json'} body = {'description': message} method = 'put' if update else 'post' res = self.request(method, url, headers=headers, json=body) return res.json() def fetch_release(self): url = '/'.join((self.api_project_url, 'repository/tags', self.get_tag())) res = self.request('get', url) return res.json()['release'] def request(self, method, url, **kwargs): if 'headers' not in kwargs: kwargs['headers'] = {} kwargs['headers']['PRIVATE-TOKEN'] = self.env['GITLAB_ACCESS_TOKEN'] if self.debug: print(url) if 'body' in kwargs['headers']: print(kwargs['headers']['body']) res = requests.request(method, url, **kwargs) res.raise_for_status() if self.debug: print(res.content) return res def create_release(self, message, files): links = ['* ' + self.post_file(filename) for filename in files] links.insert(0, message) existing_release = self.fetch_release() update = False if existing_release is not None: links = [existing_release['description'], '---'] + links update = True return self.set_release("\n\n".join(links), update) if __name__ == '__main__': parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description=''' This program is intended to be used in a GitLab CI job in a Runner with Docker. ### 1. Configure your `.gitlab-ci.yml` To make an automatic release you need to add something like this to the file `.gitlab-ci.yml` in your project. ```yaml stages: - build - publish build: stage: build script: - my_build_command artifacts: expire_in: '1 hour' paths: - compiled-$CI_BUILD_TAG.exe - doc-$CI_BUILD_TAG.pdf publish: image: inetprocess/gitlab-release stage: publish only: - tags script: - gitlab-release compiled-$CI_BUILD_TAG.exe doc-$CI_BUILD_TAG.pdf ``` ### 2. Generate a personnal access token Generate a new [Personal Access Token] (https://docs.gitlab.com/ee/api/README.html#personal-access-tokens) from your user profile. ### 3. Configure your project Set a [secret variable](https://docs.gitlab.com/ce/ci/variables/#secret-variables) in your project named `GITLAB_ACCESS_TOKEN` with the token you have generated in the previous step. ''' ) parser.add_argument('-m', '--message', default='', help='Markdown message before the files list in the release note') parser.add_argument('files', nargs='*', help='Files to link in the release.') parser.add_argument('-d', '--debug', action='store_true', help='Print debug messages') parser.add_argument('-l', '--links', action='store_true', help='Print project links') args = parser.parse_args() #os.environ['CI_PROJECT_ID'] = 'tesch1%2Fcppduals' #os.environ['CI_BUILD_TAG'] = 'v0.3.1' #os.environ['CI_COMMIT_TAG'] = 'v0.3.1' #os.environ['CI_PROJECT_URL'] = 'https://gitlab.com' #os.environ['CI_SERVER_VERSION'] = '9.0.0' #os.environ['GITLAB_ACCESS_TOKEN'] = '' try: release = GitlabRelease(args.debug) #if args.links: # print(release.fetch_links()) # sys.exit(0) info = release.create_release(args.message, args.files) print("Release: {tag_name} created.\n{description}".format_map(info)) except GitlabReleaseError as err: print(err) sys.exit(1) tmp_ns50wwy/src/include/cppduals/doc/DoxygenLayout.xml0000644000175000017500000001404414163340332023303 0ustar carstencarsten tmp_ns50wwy/src/include/cppduals/doc/header.html0000644000175000017500000000415614163340332022067 0ustar carstencarsten $projectname: $title $title $treeview $search $mathjax $extrastylesheet
$projectname  $projectnumber
$projectbrief
$projectbrief
$searchbox
tmp_ns50wwy/src/include/cppduals/.gitlab-ci.yml0000644000175000017500000000361414163340332021636 0ustar carstencarsten#image: ubuntu:19.04 image: fedora:30 variables: GIT_DEPTH: 3 CTEST_OUTPUT_ON_FAILURE: y stages: - build - test - cover - publish before_script: #- apt-get update --yes #- apt-get install --yes cmake g++ git doxygen lcov graphviz - dnf install -y gcc-c++ make cmake git doxygen lcov graphviz build: stage: build # variables: # CC: clang # CXX: clang++ script: - echo $CXX - cmake -Bbuild -H. -DCPPDUALS_TESTING=ON - cmake --build build - cmake -Bbuild-latest -H. -DCPPDUALS_TESTING=ON -DCPPDUALS_EIGEN_LATEST=ON - cmake --build build-latest artifacts: expire_in: 1 week paths: - build - build-latest test: stage: test script: - cmake --build build --target test - cmake --build build-latest --target test dependencies: - build cover: script: - cmake -Bbuild-cov -H. -DCODE_COVERAGE=ON -DCPPDUALS_TESTING=ON - cmake --build build-cov --target cov - cmake --build build-cov --target cov-html coverage: '/Total:|\w*\d+\.\d+/' artifacts: expire_in: 1 day paths: - build-cov only: - merge_requests pages: script: - cmake -Bbuild -H. -DCODE_COVERAGE=ON -DCPPDUALS_TESTING=ON - cmake --build build --target cppduals_docs - cmake --build build --target cov-html - mv build/docs public/ - mv build/coverage public/ coverage: '/Total:|\w*\d+\.\d+/' artifacts: paths: - public only: - master publish: stage: publish dependencies: - build environment: name: publish only: - /^v\d+\.\d+\.\d+$/ except: - branches before_script: - dnf install -y python3-requests script: # - ln -s cppduals-h-${CI_BUILD_TAG#v} . # - tar czvhf cppduals-h-${CI_BUILD_TAG#v}.tgz cppduals-h-${CI_BUILD_TAG#v}/duals cppduals-h-${CI_BUILD_TAG#v}/CMakeLists.txt - tar czvf cppduals-h-${CI_BUILD_TAG#v}.tgz duals CMakeLists.txt - ./doc/gitlab-release --message "Release ${CI_BUILD_TAG}" cppduals-h-${CI_BUILD_TAG#v}.tgz tmp_ns50wwy/src/include/cppduals/.appveyor.yml0000644000175000017500000000173514163340332021652 0ustar carstencarstenversion: 0.2.{build} clone_folder: c:\projects\cppduals clone_depth: 3 image: #- Visual Studio 2013 #- Visual Studio 2015 - Visual Studio 2017 configuration: - Release #- Debug # someone with a debugger please investigate this :) # Do not build feature branch with open Pull Requests skip_branch_with_pr: true # skip unsupported combinations init: - echo %APPVEYOR_BUILD_WORKER_IMAGE% - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2013" ( set generator="Visual Studio 12 2013" ) - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" ( set generator="Visual Studio 14 2015" ) - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" ( set generator="Visual Studio 15 2017" ) - echo %generator% before_build: - cmd: |- mkdir build cd build cmake --version cmake .. -G %generator% -DCPPDUALS_TESTING=ON pwd ls build: project: c:\projects\cppduals\build\cppduals.sln verbosity: minimal # parallel: true test_script: - pwd - ctest -C Debug -VV tmp_ns50wwy/src/include/cppduals/thirdparty/0000755000175000017500000000000014163340332021370 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/thirdparty/CMakeLists.txt0000644000175000017500000001537514163340332024143 0ustar carstencarsten # https://gist.github.com/johnb003/65982fdc7a1274fdb023b0c68664ebe4 # 3.10 adds support for "gtest_discover_tests" which enumerates the tests inside # of the code and adds them to ctest. # cmake_minimum_required (VERSION 3.10) project (cppduals_thirdparty) include (ExternalProject) get_directory_property (hasParent PARENT_DIRECTORY) set (DEPS_ROOT "${CMAKE_BINARY_DIR}/root") if (hasParent) set (DEPS_ROOT "${CMAKE_BINARY_DIR}/thirdparty/root" PARENT_SCOPE) endif (hasParent) if (NOT WIN32) set (DOWNLOAD_DIR "$ENV{HOME}/Downloads") else (NOT WIN32) set (DOWNLOAD_DIR "C:/Downloads") endif (NOT WIN32) # # Google test (https://github.com/google/googletest/blob/master/googletest/README.md) # # Download and unpack googletest at configure time configure_file (CMakeLists-gt.txt.in googletest-download/CMakeLists.txt) execute_process (COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . RESULT_VARIABLE result WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download) if (result) message (FATAL_ERROR "CMake step for googletest failed: ${result}") endif () execute_process (COMMAND ${CMAKE_COMMAND} --build . RESULT_VARIABLE result WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download) if (result) message (FATAL_ERROR "Build step for googletest failed: ${result}") endif () # Prevent overriding the parent project's compiler/linker # settings on Windows set (gtest_force_shared_crt ON CACHE BOOL "" FORCE) # Add googletest directly to our build. This defines # the gtest and gtest_main targets. add_subdirectory ( ${CMAKE_CURRENT_BINARY_DIR}/googletest-src ${CMAKE_CURRENT_BINARY_DIR}/googletest-build EXCLUDE_FROM_ALL) # The gtest/gtest_main targets carry header search path # dependencies automatically when using CMake 2.8.11 or # later. Otherwise we have to add them here ourselves. if (CMAKE_VERSION VERSION_LESS 2.8.11) include_directories ("${gtest_SOURCE_DIR}/include") endif () # Can simply link against gtest or gtest_main as needed. Eg #add_executable (example example.cpp) #target_link_libraries (example gtest_main) #add_test (NAME example_test COMMAND example) # # Eigen # if (CPPDUALS_EIGEN_LATEST) set (EIGEN_URL http://bitbucket.org/eigen/eigen/get/default.tar.bz2) #set (EIGEN_MD5 ffc83130dcd37b694c6cf7e905099af9) else () set (EIGEN_URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.bz2) set (EIGEN_MD5 05b1f7511c93980c385ebe11bd3c93fa) endif () ExternalProject_Add (eigenX PREFIX eigenX URL ${EIGEN_URL} #URL_HASH MD5=${EIGEN_MD5} DOWNLOAD_DIR "$ENV{HOME}/Downloads" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (eigenX source_dir) if (hasParent AND NOT EIGEN3_INCLUDE_DIRS) set (EIGEN3_INCLUDE_DIRS "${source_dir}" PARENT_SCOPE) endif () # # Eigen-Expokit # set (EEX_SHA 72bf6e445d5ae84218dcbd74580720491e0074db ) ExternalProject_Add (expokitX PREFIX expokitX URL https://gitlab.com/api/v4/projects/tesch1%2Feigen-expokit/repository/archive.tbz2?sha=${EEX_SHA} #URL_HASH MD5=96b79de1d01547f6d658865b7caa02ee DOWNLOAD_DIR "$ENV{HOME}/Downloads" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (expokitX source_dir) if (hasParent) set (EXPOKIT_INCLUDE_DIR "${source_dir}" PARENT_SCOPE) endif() # # fmt # ExternalProject_Add (fmtX PREFIX fmtX URL https://github.com/fmtlib/fmt/archive/6.1.1.tar.gz URL_HASH MD5=acfb83d44afdca171ee26c597c931e7c DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (fmtX source_dir) ExternalProject_Get_Property (fmtX binary_dir) if (hasParent) message (" FMT3_INCLUDE_DIRS: ${source_dir}") add_subdirectory (${source_dir} ${binary_dir} EXCLUDE_FROM_ALL) endif () if (CPPDUALS_BENCHMARK) # # google benchmark # ExternalProject_Add (benchmarkX PREFIX benchmarkX URL "http://github.com/google/benchmark/archive/v1.5.0.tar.gz" URL_HASH MD5=eb1466370f3ae31e74557baa29729e9e DOWNLOAD_DIR ${DOWNLOAD_DIR} CMAKE_ARGS --target install -DBENCHMARK_ENABLE_GTEST_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DBENCHMARK_USE_LIBCXX=${CPPDUALS_USE_LIBCXX} "-DCMAKE_INSTALL_PREFIX=" INSTALL_DIR "${DEPS_ROOT}" ) ExternalProject_Get_Property (benchmarkX source_dir) ExternalProject_Get_Property (benchmarkX install_dir) if (hasParent) set (BENCHMARK_SRC_DIR "${source_dir}" PARENT_SCOPE) set (BENCHMARK_INC_DIR "${install_dir}/include" PARENT_SCOPE) message (" BENCHMARK_SRC_DIR: ${BENCHMARK_SRC_DIR}") endif() if (Boost_FOUND AND NO) # # Audi + Piranha - needs boost # #boost 1.70 find_package (Boost 1.69) if (hasParent) set (Boost_FOUND ${Boost_FOUND} PARENT_SCOPE) set (Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} PARENT_SCOPE) endif () # piranha ExternalProject_Add (piranhaX PREFIX piranhaX URL https://github.com/bluescarni/piranha/archive/v0.11.tar.gz URL_HASH MD5=33482f719f6b8a6a5316f9bd148f5b10 DOWNLOAD_DIR "$ENV{HOME}/Downloads" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (piranhaX source_dir) if (hasParent) set (PIRANHA_INCLUDE_DIR "${source_dir}/include" PARENT_SCOPE) endif () # AuDi ExternalProject_Add (audiX PREFIX audiX URL https://github.com/darioizzo/audi/archive/v1.6.5.tar.gz URL_HASH MD5=a51897469dfce4ceaa25e65519a346b9 DOWNLOAD_DIR "$ENV{HOME}/Downloads" #CONFIGURE_COMMAND "" CMAKE_ARGS -DAUDI_BUILD_TESTS=OFF BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (audiX source_dir) if (hasParent) set (AUDI_INCLUDE_DIR "${source_dir}/include" PARENT_SCOPE) endif () endif (Boost_FOUND AND NO) endif (CPPDUALS_BENCHMARK) # # multi-precision math # if (0) ExternalProject_Add (mpfrX PREFIX mpfrX URL https://www.mpfr.org/mpfr-current/mpfr-4.0.2.tar.bz2 URL_HASH MD5=6d8a8bb46fe09ff44e21cdbf84f5cdac DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND "../mpfrX/configure" --prefix= #BUILD_COMMAND "make install" #INSTALL_COMMAND "make install" ) # clumsy download link - retrieves "archive.tar" ExternalProject_Add (mprealX PREFIX mprealX URL "http://www.holoborodko.com/pavel/wp-content/plugins/download-monitor/download.php?id=4" URL_HASH MD5=68ad2258eb4a1c699c407f0e7bee5125 DOWNLOAD_DIR ${DOWNLOAD_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) ExternalProject_Get_Property (mprealX source_dir) ExternalProject_Get_Property (mpfrX INSTALL_DIR) if (hasParent) set (MPFR_INCLUDES "${INSTALL_DIR}/include" "${source_dir}" PARENT_SCOPE) set (MPFR_LIBRARIES "${INSTALL_DIR}/lib/libmpfr.a" -lgmp PARENT_SCOPE) message (" MPFR_INCLUDES: ${MPFR_INCLUDES}") add_definitions (-DHAVE_MPFR) endif (hasParent) endif (0) tmp_ns50wwy/src/include/cppduals/thirdparty/CMakeLists-gt.txt.in0000644000175000017500000000075114163340332025150 0ustar carstencarstencmake_minimum_required (VERSION 2.8.2) project (googletest-download NONE) include (ExternalProject) ExternalProject_Add (googletest GIT_REPOSITORY https://github.com/google/googletest.git # GIT_TAG master GIT_TAG release-1.8.1 GIT_SHALLOW 1 SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" TEST_COMMAND "" ) tmp_ns50wwy/src/include/cppduals/CMakeLists.txt0000644000175000017500000001730214163340332021741 0ustar carstencarsten# # CMake for cppduals # cmake_minimum_required (VERSION 3.1) project (cppduals VERSION 0.3.1 LANGUAGES C CXX ) include (GNUInstallDirs) set (CMAKE_CXX_STANDARD 11 CACHE STRING "Which C++ standard to test against.") set (CMAKE_CXX_STANDARD_REQUIRED ON) set (CMAKE_DISABLE_IN_SOURCE_BUILD ON) if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) message (STATUS "Configuring cppduals for standalone build") set (CPPDUALS_STANDALONE TRUE) elseif () message (STATUS "Configuring cppduals for subproject build") set (CPPDUALS_STANDALONE FALSE) endif () if (CPPDUALS_STANDALONE AND NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_NO_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE ) message (STATUS "Setting build type to 'RelWithDebInfo' since none specified") set_property (CACHE CMAKE_BUILD_TYPE PROPERTY VALUE RelWithDebInfo) set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" ) endif () if (CPPDUALS_STANDALONE AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "cppduals installation directory" FORCE ) message (STATUS "No install prefix specified; using '${CMAKE_INSTALL_PREFIX}'") endif () set_property (CACHE CMAKE_CXX_STANDARD PROPERTY STRINGS 11 14 17 20) option (CPPDUALS_TESTING "Enable testing" OFF) option (CPPDUALS_BENCHMARK "Enable benchmarking" OFF) option (CPPDUALS_EIGEN_LATEST "Eigen latest" OFF) option (CPPDUALS_USE_LIBCXX "When testing use flags for libc++" OFF) set (EIGEN3_INCLUDE_DIRS "" CACHE PATH "Path to Eigen includes" ) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wpedantic") endif () if (CPPDUALS_BENCHMARK) set (CPPDUALS_TESTING ON) endif (CPPDUALS_BENCHMARK) if (CPPDUALS_USE_LIBCXX) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_compile_options ("-stdlib=libc++") set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ ") # -lc++abi elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") # this is unfinished... set (CPPDUALS_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++") message (WARNING "libc++ header path must be manually specified using CMAKE_CXX_FLAGS") list (APPEND CPPDUALS_CXX_LINKER_FLAGS -nodefaultlibs) list (APPEND CPPDUALS_CXX_LIBRARIES c++) else () message(FATAL_ERROR "-DCPPDUALS_USE_LIBCXX:BOOL=ON is not supported for this compiler") endif () endif (CPPDUALS_USE_LIBCXX) # # Primary Library Target # add_library (cppduals_duals INTERFACE) target_include_directories (cppduals_duals INTERFACE $ $ ) set_target_properties (cppduals_duals PROPERTIES EXPORT_NAME duals ) add_library (cppduals::duals ALIAS cppduals_duals) # # Build external dependencies for testing & benchmarking # if (CPPDUALS_TESTING) cmake_minimum_required (VERSION 3.10) # need gtest_discover_tests file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/thirdparty") # generator name if (NOT "${CMAKE_EXTRA_GENERATOR}" STREQUAL "") set (GENERATOR_STRING "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}") else () set (GENERATOR_STRING "${CMAKE_GENERATOR}") endif () # configure the thirdparty build dir execute_process ( WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/thirdparty" COMMAND ${CMAKE_COMMAND} "-G${GENERATOR_STRING}" "-DCMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" "-DCPPDUALS_BENCHMARK=${CPPDUALS_BENCHMARK}" "-DCPPDUALS_EIGEN_LATEST=${CPPDUALS_EIGEN_LATEST}" "-DCPPDUALS_USE_LIBCXX=${CPPDUALS_USE_LIBCXX}" "${PROJECT_SOURCE_DIR}/thirdparty" RESULT_VARIABLE DEPS_CONFIG_RESULT ) if (DEPS_CONFIG_RESULT) message (FATAL_ERROR "Configuring dependencies failed: ${DEPS_CONFIG_RESULT}") endif () # build the thirdparty message ("***************************************************************") message ("** Building '${PROJECT_BINARY_DIR}/thirdparty'...") message ("***************************************************************") execute_process ( WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/thirdparty" COMMAND "${CMAKE_COMMAND}" --build . RESULT_VARIABLE DEPS_BUILD_RESULT ) message ("***************************************************************") message ("*** Building thirdparty/ done.") message ("***************************************************************") if (DEPS_BUILD_RESULT) message ("***************************************************************") message (FATAL_ERROR "Building dependencies failed: ${DEPS_BUILD_RESULT}") message ("***************************************************************") endif () add_subdirectory (thirdparty) endif () # # Code Coverage Configuration # add_library (cppduals_coverage_config INTERFACE) option (CODE_COVERAGE "Enable coverage reporting" OFF) if (CODE_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") # Add required flags (GCC & LLVM/Clang) target_compile_options (cppduals_coverage_config INTERFACE -O0 # no optimization -g # generate debug info --coverage # sets all required flags ) if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) target_link_options (cppduals_coverage_config INTERFACE --coverage) else () target_link_libraries (cppduals_coverage_config INTERFACE --coverage) endif () endif () # # Testing # if (CPPDUALS_TESTING) enable_testing () include (CTest) add_subdirectory (tests) endif (CPPDUALS_TESTING) # # Documentation # find_program (DOXYGEN doxygen) if (DOXYGEN) configure_file (${PROJECT_SOURCE_DIR}/doc/Doxyfile.in ${PROJECT_BINARY_DIR}/doc/Doxyfile) configure_file (${PROJECT_SOURCE_DIR}/doc/DoxygenLayout.xml ${PROJECT_BINARY_DIR}/doc/DoxygenLayout.xml COPYONLY) configure_file (${PROJECT_SOURCE_DIR}/doc/header.html ${PROJECT_BINARY_DIR}/doc/header.html COPYONLY) configure_file (${PROJECT_SOURCE_DIR}/doc/footer.html ${PROJECT_BINARY_DIR}/doc/footer.html COPYONLY) configure_file (${PROJECT_SOURCE_DIR}/doc/favicon.ico ${PROJECT_BINARY_DIR}/doc/favicon.ico COPYONLY) configure_file (${PROJECT_SOURCE_DIR}/doc/customdoxygen.css ${PROJECT_BINARY_DIR}/doc/customdoxygen.css) add_custom_target (cppduals_docs WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc COMMAND cmake -E remove_directory ${PROJECT_BINARY_DIR}/docs COMMAND ${DOXYGEN} Doxyfile ) else () add_custom_target (cppduals_docs COMMAND echo "Please install doxygen and reconfigure to build the docs" ) endif () # # Installation # install (TARGETS cppduals_duals EXPORT cppduals_export) install (EXPORT cppduals_export FILE cppduals-config.cmake NAMESPACE cppduals:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cppduals ) install ( DIRECTORY ${PROJECT_SOURCE_DIR}/duals DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN "*~" EXCLUDE ) install ( DIRECTORY ${PROJECT_BINARY_DIR}/docs/ # Trailing slash triggers rename DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/doc/cppduals OPTIONAL ) # # etags # find_program (ETAGS etags) if (ETAGS) add_custom_target (cppduals_etags COMMAND ${ETAGS} --language=c++ ${PROJECT_SOURCE_DIR}/duals/* COMMAND ${ETAGS} --language=c++ --append ${PROJECT_SOURCE_DIR}/duals/arch/*/* COMMAND ${ETAGS} --language=c++ --append `find ${PROJECT_BINARY_DIR}/thirdparty/eigenX/src/eigenX -type f` ) endif (ETAGS) tmp_ns50wwy/src/include/cppduals/duals/0000755000175000017500000000000014163340332020306 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/duals/dual_eigen0000644000175000017500000006420714163340332022336 0ustar carstencarsten//===-- duals/dual_eigen - wrapp dual number type for Eigen -----*- C++ -*-===// // // Part of the cppduals project. // https://gitlab.com/tesch1/cppduals // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // (c)2019 Michael Tesch. tesch1@gmail.com // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. // // Some code fragments are adapted from Eigen's Complex.h files, which // carry the following license: // // Copyright (C) 2014 Benoit Steiner (benoit.steiner.goog@gmail.com) // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef CPPDUALS_DUAL_EIGEN #define CPPDUALS_DUAL_EIGEN #include "dual" #ifndef PARSED_BY_DOXYGEN #include #include #endif #if !EIGEN_VERSION_AT_LEAST(3, 3, 0) #error "Eigen too old for cppduals. Upgrade." #endif /** \file dual_eigen \brief Nestable, vectorizable Dual numbers for Eigen Include this file to enable use of the `duals::dual<>` class as a scalar type in Eigen. Some optimizations are performed using Eigen's vectorization facilities, which is particularly noticeable for multiplication and division. In certain cases the vectorization can be worse than the compiler's code, thus it can be disabled by `#define CPPDUALS_DONT_VECTORIZE`. There is some also vectorization for dual-ized complex's (`std::complex>`), which can be disabled by `#define CPPDUALS_DONT_VECTORIZE_CDUAL`. The same type promotion that exists for `duals::dual`: an operation between a 'scalar' T and dual is promoted to dual. This is enabled for Eigen matrices by default: multiplying an `Eigen::Matrix` by `1_ef` results in an expression with a basic POD type of `Eigen::Matrix,..>`. This type of type promotion can be disabled (ie for correctness checking or to speed compilation) by #define `CPPDUALS_NO_EIGEN_PROMOTION`. */ namespace duals { /** template unary functor to get the real part of a matrix * use it like this: m2 = m1.unaryExpr(CwiseRpartOp()); * or just call m2 = rpart(m1); */ template struct CwiseRpartOp { typedef decltype(rpart(ScalarSrc())) ScalarDst; typedef ScalarDst result_type; EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ScalarDst operator()(const ScalarSrc & x) const { return rpart(x); } }; /** template unary functor to get the dual part of a matrix * use it like this: m2 = m1.unaryExpr(CwiseDpartOp()); * or just call m2 = dpart(m1); */ template struct CwiseDpartOp { typedef decltype(dpart(ScalarSrc())) ScalarDst; typedef ScalarDst result_type; EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ScalarDst operator()(const ScalarSrc & x) const { return dpart(x); } }; /** template unary functor to dual-conjugate a matrix of duals * use it like this: m2 = m1.unaryExpr(CwiseDconjOp()); * or just call m2 = dconj(m1); */ template struct CwiseDconjOp { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar & x) const { return dconj(x); } }; /// Extract the "real part" of a dual-valued matrix. #ifdef PARSED_BY_DOXYGEN template const RealType #else template const Eigen::CwiseUnaryOp, const XprType > #endif rpart(const Eigen::EigenBase & x) { return x.derived().unaryExpr(CwiseRpartOp()); } /// Extract the "dual part" of a dual-valued matrix. #ifdef PARSED_BY_DOXYGEN template const RealType #else template const Eigen::CwiseUnaryOp, const XprType > #endif dpart(const Eigen::EigenBase & x) { return x.derived().unaryExpr(CwiseDpartOp()); } /// Dual-conjugate a dual-valued matrix. #ifdef PARSED_BY_DOXYGEN template const XprType #else template const Eigen::CwiseUnaryOp, const XprType > #endif dconj(const Eigen::EigenBase & x) { return x.derived().unaryExpr(CwiseDconjOp()); } } // namespace duals namespace Eigen { template struct NumTraits > : GenericNumTraits { typedef typename NumTraits::Real ReallyReal; typedef duals::dual Real; typedef duals::dual Literal; typedef duals::dual Nested; enum { IsInteger = NumTraits::IsInteger, IsSigned = NumTraits::IsSigned, IsComplex = 0, RequireInitialization = NumTraits::RequireInitialization, ReadCost = 2 * NumTraits::ReadCost, AddCost = 2 * NumTraits::AddCost, MulCost = 3 * NumTraits::MulCost + 1 * NumTraits::AddCost }; EIGEN_DEVICE_FUNC static inline Real epsilon() { return Real(NumTraits::epsilon()); } EIGEN_DEVICE_FUNC static inline ReallyReal dummy_precision() { return NumTraits::dummy_precision(); } EIGEN_DEVICE_FUNC static inline ReallyReal highest() { return NumTraits::highest(); } EIGEN_DEVICE_FUNC static inline ReallyReal lowest() { return NumTraits::lowest(); } EIGEN_DEVICE_FUNC static inline ReallyReal digits10() { return NumTraits::digits10(); } }; #if !defined(CPPDUALS_NO_EIGEN_PROMOTION) template struct ScalarBinaryOpTraits,duals::dual,BinaryOp> : public duals::can_promote,duals::dual>::wrap {}; template struct ScalarBinaryOpTraits,T,BinaryOp> : public duals::can_promote,T>::wrap {}; template struct ScalarBinaryOpTraits,BinaryOp> : public duals::can_promote,T>::wrap {}; #if 0 // until Eigen doesnt make assumptions about complex return types :P template struct ScalarBinaryOpTraits,duals::dual,BinaryOp> : public duals::can_promote,duals::dual>::wrap {}; template struct ScalarBinaryOpTraits,std::complex,BinaryOp> : public duals::can_promote,duals::dual>::wrap {}; #endif #ifndef PARSED_BY_DOXYGEN // Special cases for nested complex> and reals #define CPPDUALS_CD_SBOTS_REALS(U) \ template \ struct ScalarBinaryOpTraits>,U,BinaryOp> \ : public duals::can_promote>,U>::wrap {}; \ template \ struct ScalarBinaryOpTraits>,BinaryOp> \ : public duals::can_promote>,U>::wrap {} CPPDUALS_CD_SBOTS_REALS(int); CPPDUALS_CD_SBOTS_REALS(float); CPPDUALS_CD_SBOTS_REALS(double); CPPDUALS_CD_SBOTS_REALS(std::complex); #endif // PARSED_BY_DOXYGEN #endif // CPPDUALS_NO_EIGEN_PROMOTION #ifndef PARSED_BY_DOXYGEN namespace numext { using duals::rpart; using duals::dpart; using duals::dconj; } namespace internal { template struct real_impl > { typedef T RealScalar; EIGEN_DEVICE_FUNC static inline T run(const duals::dual& x) { return x.rpart(); } }; template struct real_ref_impl> { typedef typename NumTraits::Real RealScalar; EIGEN_DEVICE_FUNC static inline RealScalar & run(duals::dual & x) { return reinterpret_cast(&x)[0]; } EIGEN_DEVICE_FUNC static inline const RealScalar & run(const duals::dual & x) { return reinterpret_cast(&x)[0]; } }; template struct real_ref_retval> { typedef typename NumTraits::Real & type; }; template struct scalar_random_op> { EIGEN_EMPTY_STRUCT_CTOR(scalar_random_op) inline const duals::dual operator() () const { return duals::random>(); } }; // // stuff for gebp_* template EIGEN_DEVICE_FUNC inline Packet pdconj(const Packet& a) { return numext::dconj(a); } template struct dconj_if; template<> struct dconj_if { template inline T operator()(const T& x) const { return numext::dconj(x); } template inline T pdconj(const T& x) const { return internal::pdconj(x); } }; template<> struct dconj_if { template inline const T& operator()(const T& x) const { return x; } template inline const T& pdconj(const T& x) const { return x; } }; // Generic implementation for custom dual types. template struct dconj_helper { typedef typename ScalarBinaryOpTraits::ReturnType Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const LhsScalar& x, const RhsScalar& y, const Scalar& c) const { return padd(c, pmul(x,y)); } EIGEN_STRONG_INLINE Scalar pmul(const LhsScalar& x, const RhsScalar& y) const { return dconj_if()(x) * dconj_if()(y); } }; template struct dconj_helper { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar pmadd(const Scalar& x, const Scalar& y, const Scalar& c) const { return internal::pmadd(x,y,c); } EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar pmul(const Scalar& x, const Scalar& y) const { return internal::pmul(x,y); } }; template struct dconj_helper, duals::dual, false,true> { typedef duals::dual Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const Scalar& x, const Scalar& y, const Scalar& c) const { return c + pmul(x,y); } EIGEN_STRONG_INLINE Scalar pmul(const Scalar& x, const Scalar& y) const { return Scalar(numext::real(x)*numext::real(y) + numext::imag(x)*numext::imag(y), numext::imag(x)*numext::real(y) - numext::real(x)*numext::imag(y)); } }; template struct dconj_helper, duals::dual, true,false> { typedef duals::dual Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const Scalar& x, const Scalar& y, const Scalar& c) const { return c + pmul(x,y); } EIGEN_STRONG_INLINE Scalar pmul(const Scalar& x, const Scalar& y) const { return Scalar(numext::real(x)*numext::real(y) + numext::imag(x)*numext::imag(y), numext::real(x)*numext::imag(y) - numext::imag(x)*numext::real(y)); } }; template struct dconj_helper, duals::dual, true,true> { typedef duals::dual Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const Scalar& x, const Scalar& y, const Scalar& c) const { return c + pmul(x,y); } EIGEN_STRONG_INLINE Scalar pmul(const Scalar& x, const Scalar& y) const { return Scalar(numext::real(x)*numext::real(y) - numext::imag(x)*numext::imag(y), -numext::real(x)*numext::imag(y) - numext::imag(x)*numext::real(y)); } }; template struct dconj_helper, RealScalar, Conj,false> { typedef duals::dual Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const Scalar& x, const RealScalar& y, const Scalar& c) const { return padd(c, pmul(x,y)); } EIGEN_STRONG_INLINE Scalar pmul(const Scalar& x, const RealScalar& y) const { return dconj_if()(x)*y; } }; template struct dconj_helper, false,Conj> { typedef duals::dual Scalar; EIGEN_STRONG_INLINE Scalar pmadd(const RealScalar& x, const Scalar& y, const Scalar& c) const { return padd(c, pmul(x,y)); } EIGEN_STRONG_INLINE Scalar pmul(const RealScalar& x, const Scalar& y) const { return x*dconj_if()(y); } }; } // namespace internal #endif // PARSED_BY_DOXYGEN } // namespace Eigen #if !defined(CPPDUALS_DONT_VECTORIZE) #ifndef PARSED_BY_DOXYGEN // first thing Eigen does: stop the compiler from committing suicide #include "Eigen/src/Core/util/DisableStupidWarnings.h" #define EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL(PACKET_DUAL, PACKET_REAL) \ template<> struct dconj_helper { \ EIGEN_STRONG_INLINE PACKET_DUAL pmadd(const PACKET_REAL& x, const PACKET_DUAL& y, const PACKET_DUAL& c) const \ { return padd(c, pmul(x,y)); } \ EIGEN_STRONG_INLINE PACKET_DUAL pmul(const PACKET_REAL& x, const PACKET_DUAL& y) const \ { return PACKET_DUAL(Eigen::internal::pmul(x, PACKET_REAL(y.v))); } \ }; \ \ template<> struct dconj_helper { \ EIGEN_STRONG_INLINE PACKET_DUAL pmadd(const PACKET_DUAL& x, const PACKET_REAL& y, const PACKET_DUAL& c) const \ { return padd(c, pmul(x,y)); } \ EIGEN_STRONG_INLINE PACKET_DUAL pmul(const PACKET_DUAL& x, const PACKET_REAL& y) const \ { return PACKET_DUAL(Eigen::internal::pmul(PACKET_REAL(x.v), y)); } \ }; #if defined EIGEN_VECTORIZE_AVX512 #include "duals/arch/SSE/Dual.h" #include "duals/arch/AVX/Dual.h" #include "duals/arch/SSE/ComplexDual.h" #include "duals/arch/AVX/ComplexDual.h" #elif defined EIGEN_VECTORIZE_AVX #include "duals/arch/SSE/Dual.h" #include "duals/arch/AVX/Dual.h" #include "duals/arch/SSE/ComplexDual.h" #include "duals/arch/AVX/ComplexDual.h" #elif defined EIGEN_VECTORIZE_SSE #include "duals/arch/SSE/Dual.h" #include "duals/arch/SSE/ComplexDual.h" #elif defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX) // #include "duals/arch/AltiVec/Dual.h" // TODO #elif defined EIGEN_VECTORIZE_NEON //#include "duals/arch/NEON/Dual.h" // TODO #elif defined EIGEN_VECTORIZE_ZVECTOR // #include "duals/arch/ZVector/Dual.h" // TODO #endif #undef EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL // reallow compiler seppuku #include "Eigen/src/Core/util/ReenableStupidWarnings.h" #endif // PARSED_BY_DOXYGEN //////// gepb for duals::dual #if 0 // TODO namespace Eigen { namespace internal { template class gebp_traits, RealScalar, _ConjLhs, false> { public: typedef duals::dual LhsScalar; typedef RealScalar RhsScalar; typedef typename ScalarBinaryOpTraits::ReturnType ResScalar; enum { ConjLhs = _ConjLhs, ConjRhs = false, Vectorizable = packet_traits::Vectorizable && packet_traits::Vectorizable, LhsPacketSize = Vectorizable ? packet_traits::size : 1, RhsPacketSize = Vectorizable ? packet_traits::size : 1, ResPacketSize = Vectorizable ? packet_traits::size : 1, NumberOfRegisters = EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS, nr = 4, #if defined(EIGEN_HAS_SINGLE_INSTRUCTION_MADD) && !defined(EIGEN_VECTORIZE_ALTIVEC) && !defined(EIGEN_VECTORIZE_VSX) // we assume 16 registers mr = 3*LhsPacketSize, #else mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*LhsPacketSize, #endif LhsProgress = LhsPacketSize, RhsProgress = 1 }; typedef typename packet_traits::type _LhsPacket; typedef typename packet_traits::type _RhsPacket; typedef typename packet_traits::type _ResPacket; typedef typename conditional::type LhsPacket; typedef typename conditional::type RhsPacket; typedef typename conditional::type ResPacket; typedef ResPacket AccPacket; EIGEN_STRONG_INLINE void initAcc(AccPacket& p) { p = pset1(ResScalar(0)); } EIGEN_STRONG_INLINE void loadRhs(const RhsScalar* b, RhsPacket& dest) const { dest = pset1(*b); } EIGEN_STRONG_INLINE void loadRhsQuad(const RhsScalar* b, RhsPacket& dest) const { dest = pset1(*b); } EIGEN_STRONG_INLINE void loadLhs(const LhsScalar* a, LhsPacket& dest) const { dest = pload(a); } EIGEN_STRONG_INLINE void loadLhsUnaligned(const LhsScalar* a, LhsPacket& dest) const { dest = ploadu(a); } EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, RhsPacket& b0, RhsPacket& b1, RhsPacket& b2, RhsPacket& b3) { pbroadcast4(b, b0, b1, b2, b3); } // EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, RhsPacket& b0, RhsPacket& b1) // { // pbroadcast2(b, b0, b1); // } EIGEN_STRONG_INLINE void madd(const LhsPacket& a, const RhsPacket& b, AccPacket& c, RhsPacket& tmp) const { madd_impl(a, b, c, tmp, typename conditional::type()); } EIGEN_STRONG_INLINE void madd_impl(const LhsPacket& a, const RhsPacket& b, AccPacket& c, RhsPacket& tmp, const true_type&) const { //std::cerr << CYELLOW "%" << CRESET; //duals::dual, RealScalar // accpacket=lhspacket #ifdef EIGEN_HAS_SINGLE_INSTRUCTION_MADD EIGEN_UNUSED_VARIABLE(tmp); c.v = pmadd(a.v,b,c.v); #else tmp = b; tmp = pmul(RhsPacket(a.v),tmp); c = AccPacket(padd(RhsPacket(c.v),tmp)); #endif } EIGEN_STRONG_INLINE void madd_impl(const LhsScalar& a, const RhsScalar& b, ResScalar& c, RhsScalar& /*tmp*/, const false_type&) const { c += a * b; } EIGEN_STRONG_INLINE void acc(const AccPacket& c, const ResPacket& alpha, ResPacket& r) const { r = cj.pmadd(c,alpha,r); } protected: dconj_helper cj; }; template class gebp_traits, duals::dual, _ConjLhs, _ConjRhs > { public: typedef duals::dual Scalar; typedef duals::dual LhsScalar; typedef duals::dual RhsScalar; typedef duals::dual ResScalar; enum { ConjLhs = _ConjLhs, ConjRhs = _ConjRhs, Vectorizable = packet_traits::Vectorizable && packet_traits::Vectorizable, RealPacketSize = Vectorizable ? packet_traits::size : 1, ResPacketSize = Vectorizable ? packet_traits::size : 1, LhsPacketSize = Vectorizable ? packet_traits::size : 1, RhsPacketSize = Vectorizable ? packet_traits::size : 1, // FIXME: should depend on NumberOfRegisters nr = 4, mr = ResPacketSize, LhsProgress = ResPacketSize, RhsProgress = 1 }; typedef typename packet_traits::type RealPacket; typedef typename packet_traits::type ScalarPacket; typedef DoublePacket DoublePacketType; typedef typename conditional::type LhsPacket; typedef typename conditional::type RhsPacket; typedef typename conditional::type ResPacket; typedef typename conditional::type AccPacket; EIGEN_STRONG_INLINE void initAcc(Scalar& p) { p = Scalar(0); } EIGEN_STRONG_INLINE void initAcc(DoublePacketType& p) { p.first = pset1(RealScalar(0)); p.second = pset1(RealScalar(0)); } // Scalar path EIGEN_STRONG_INLINE void loadRhs(const RhsScalar* b, ResPacket& dest) const { dest = pset1(*b); } // Vectorized path EIGEN_STRONG_INLINE void loadRhs(const RhsScalar* b, DoublePacketType& dest) const { dest.first = pset1(rpart(*b)); dest.second = pset1(dpart(*b)); } EIGEN_STRONG_INLINE void loadRhsQuad(const RhsScalar* b, ResPacket& dest) const { loadRhs(b,dest); } EIGEN_STRONG_INLINE void loadRhsQuad(const RhsScalar* b, DoublePacketType& dest) const { eigen_internal_assert(unpacket_traits::size<=4); loadRhs(b,dest); } EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, RhsPacket& b0, RhsPacket& b1, RhsPacket& b2, RhsPacket& b3) { // FIXME not sure that's the best way to implement it! loadRhs(b+0, b0); loadRhs(b+1, b1); loadRhs(b+2, b2); loadRhs(b+3, b3); } // Vectorized path EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, DoublePacketType& b0, DoublePacketType& b1) { // FIXME not sure that's the best way to implement it! loadRhs(b+0, b0); loadRhs(b+1, b1); } // Scalar path EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, RhsScalar& b0, RhsScalar& b1) { // FIXME not sure that's the best way to implement it! loadRhs(b+0, b0); loadRhs(b+1, b1); } // nothing special here EIGEN_STRONG_INLINE void loadLhs(const LhsScalar* a, LhsPacket& dest) const { dest = pload((const typename unpacket_traits::type*)(a)); } EIGEN_STRONG_INLINE void loadLhsUnaligned(const LhsScalar* a, LhsPacket& dest) const { dest = ploadu((const typename unpacket_traits::type*)(a)); } EIGEN_STRONG_INLINE void madd(const LhsPacket& a, const RhsPacket& b, DoublePacketType& c, RhsPacket& /*tmp*/) const { c.first = padd(pmul(a,b.first), c.first); c.second = padd(pmul(a,b.second),c.second); } EIGEN_STRONG_INLINE void madd(const LhsPacket& a, const RhsPacket& b, ResPacket& c, RhsPacket& /*tmp*/) const { c = cj.pmadd(a,b,c); } EIGEN_STRONG_INLINE void acc(const Scalar& c, const Scalar& alpha, Scalar& r) const { r += alpha * c; } EIGEN_STRONG_INLINE void acc(const DoublePacketType& c, const ResPacket& alpha, ResPacket& r) const { // assemble c ResPacket tmp; if((!ConjLhs)&&(!ConjRhs)) { tmp = pcplxflip(pconj(ResPacket(c.second))); tmp = padd(ResPacket(c.first),tmp); } else if((!ConjLhs)&&(ConjRhs)) { tmp = pconj(pcplxflip(ResPacket(c.second))); tmp = padd(ResPacket(c.first),tmp); } else if((ConjLhs)&&(!ConjRhs)) { tmp = pcplxflip(ResPacket(c.second)); tmp = padd(pconj(ResPacket(c.first)),tmp); } else if((ConjLhs)&&(ConjRhs)) { tmp = pcplxflip(ResPacket(c.second)); tmp = psub(pconj(ResPacket(c.first)),tmp); } r = pmadd(tmp,alpha,r); } protected: dconj_helper cj; }; template class gebp_traits, false, _ConjRhs > { public: typedef duals::dual Scalar; typedef RealScalar LhsScalar; typedef Scalar RhsScalar; typedef Scalar ResScalar; enum { ConjLhs = false, ConjRhs = _ConjRhs, Vectorizable = packet_traits::Vectorizable && packet_traits::Vectorizable, LhsPacketSize = Vectorizable ? packet_traits::size : 1, RhsPacketSize = Vectorizable ? packet_traits::size : 1, ResPacketSize = Vectorizable ? packet_traits::size : 1, NumberOfRegisters = EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS, // FIXME: should depend on NumberOfRegisters nr = 4, mr = (EIGEN_PLAIN_ENUM_MIN(16,NumberOfRegisters)/2/nr)*ResPacketSize, LhsProgress = ResPacketSize, RhsProgress = 1 }; typedef typename packet_traits::type _LhsPacket; typedef typename packet_traits::type _RhsPacket; typedef typename packet_traits::type _ResPacket; typedef typename conditional::type LhsPacket; typedef typename conditional::type RhsPacket; typedef typename conditional::type ResPacket; typedef ResPacket AccPacket; EIGEN_STRONG_INLINE void initAcc(AccPacket& p) { p = pset1(ResScalar(0)); } EIGEN_STRONG_INLINE void loadRhs(const RhsScalar* b, RhsPacket& dest) const { dest = pset1(*b); } void broadcastRhs(const RhsScalar* b, RhsPacket& b0, RhsPacket& b1, RhsPacket& b2, RhsPacket& b3) { pbroadcast4(b, b0, b1, b2, b3); } // EIGEN_STRONG_INLINE void broadcastRhs(const RhsScalar* b, RhsPacket& b0, RhsPacket& b1) // { // // FIXME not sure that's the best way to implement it! // b0 = pload1(b+0); // b1 = pload1(b+1); // } EIGEN_STRONG_INLINE void loadLhs(const LhsScalar* a, LhsPacket& dest) const { dest = ploaddup(a); } EIGEN_STRONG_INLINE void loadRhsQuad(const RhsScalar* b, RhsPacket& dest) const { eigen_internal_assert(unpacket_traits::size<=4); loadRhs(b,dest); } EIGEN_STRONG_INLINE void loadLhsUnaligned(const LhsScalar* a, LhsPacket& dest) const { dest = ploaddup(a); } EIGEN_STRONG_INLINE void madd(const LhsPacket& a, const RhsPacket& b, AccPacket& c, RhsPacket& tmp) const { madd_impl(a, b, c, tmp, typename conditional::type()); } EIGEN_STRONG_INLINE void madd_impl(const LhsPacket& a, const RhsPacket& b, AccPacket& c, RhsPacket& tmp, const true_type&) const { //std::cerr << CYELLOW "*" << CRESET; //RealScalar, duals::dual #ifdef EIGEN_HAS_SINGLE_INSTRUCTION_MADD EIGEN_UNUSED_VARIABLE(tmp); c.v = pmadd(a,b.v,c.v); #else tmp = b; tmp = RhsPacket(pmul(a,LhsPacket(tmp.v))); c = padd(c,tmp); #endif } EIGEN_STRONG_INLINE void madd_impl(const LhsScalar& a, const RhsScalar& b, ResScalar& c, RhsScalar& /*tmp*/, const false_type&) const { c += a * b; } EIGEN_STRONG_INLINE void acc(const AccPacket& c, const ResPacket& alpha, ResPacket& r) const { r = cj.pmadd(alpha,c,r); } protected: dconj_helper cj; }; } } // Eigen::internal #endif // gebp_traits //////// #endif // CPPDUALS_DONT_VECTORIZE #endif // CPPDUALS_DUAL_EIGEN tmp_ns50wwy/src/include/cppduals/duals/Makefile.am0000644000175000017500000000017014163340332022340 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_HEADERS = \ dual MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/include/cppduals/duals/arch/0000755000175000017500000000000014163340332021223 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/duals/arch/AVX/0000755000175000017500000000000014163340332021661 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/duals/arch/AVX/Dual.h0000644000175000017500000005475414163340332022736 0ustar carstencarsten// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2014 Benoit Steiner (benoit.steiner.goog@gmail.com) // Copyright (C) 2019 Michael Tesch // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_DUAL_AVX_H #define EIGEN_DUAL_AVX_H namespace Eigen { namespace internal { //---------- float ---------- struct Packet4df { EIGEN_STRONG_INLINE Packet4df() {} EIGEN_STRONG_INLINE explicit Packet4df(const __m256& a) : v(a) {} __m256 v; }; template<> struct packet_traits > : default_packet_traits { typedef Packet4df type; typedef Packet2df half; enum { Vectorizable = 1, AlignedOnScalar = 1, size = 4, HasHalfPacket = 1, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; template<> struct unpacket_traits { typedef duals::dual type; enum {size=4, alignment=Aligned32, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet2df half; }; //template<> EIGEN_STRONG_INLINE Packet4df pzero(const Packet4df& /*a*/) { return Packet4df(_mm256_setzero_ps()); } template<> EIGEN_STRONG_INLINE Packet4df padd(const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_add_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df psub(const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_sub_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df pnegate(const Packet4df& a) { return Packet4df(pnegate(a.v)); } template<> EIGEN_STRONG_INLINE Packet4df pdconj(const Packet4df& a) { const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0x00000000,0x80000000,0x00000000,0x80000000, 0x00000000,0x80000000,0x00000000,0x80000000)); return Packet4df(_mm256_xor_ps(a.v,mask)); } template<> EIGEN_STRONG_INLINE Packet4df pconj(const Packet4df& a) { return a; } template<> EIGEN_STRONG_INLINE Packet4df pmul(const Packet4df& a, const Packet4df& b) { #ifdef xx__FMA__ __m256 result = _mm256_fmadd_ps(_mm256_moveldup_ps(a.v), b.v, _mm256_blend_ps(_mm256_setzero_ps(), _mm256_mul_ps(_mm256_moveldup_ps(b.v), a.v), 0xaa)); return Packet4df(result); #else __m256 result = _mm256_add_ps(_mm256_mul_ps(_mm256_moveldup_ps(a.v), b.v), _mm256_blend_ps(_mm256_setzero_ps(), _mm256_mul_ps(_mm256_moveldup_ps(b.v), a.v), 0xaa)); #endif return Packet4df(result); } template<> EIGEN_STRONG_INLINE Packet4df pand (const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_and_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df por (const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_or_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df pxor (const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_xor_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df pandnot(const Packet4df& a, const Packet4df& b) { return Packet4df(_mm256_andnot_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet4df pload1(const duals::dual* from) { return Packet4df(_mm256_castpd_ps(_mm256_broadcast_sd((const double*)(const void*)from))); } template<> EIGEN_STRONG_INLINE Packet4df pload (const duals::dual* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet4df(pload(&numext::real_ref(*from))); } template<> EIGEN_STRONG_INLINE Packet4df ploadu(const duals::dual* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet4df(ploadu(&numext::real_ref(*from))); } template<> EIGEN_STRONG_INLINE Packet4df pset1(const duals::dual& from) { return Packet4df(_mm256_castpd_ps(_mm256_broadcast_sd((const double*)(const void*)&from))); } template<> EIGEN_STRONG_INLINE Packet4df ploaddup(const duals::dual* from) { // FIXME The following might be optimized using _mm256_movedup_pd Packet2df a = ploaddup(from); Packet2df b = ploaddup(from+1); return Packet4df(_mm256_insertf128_ps(_mm256_castps128_ps256(a.v), b.v, 1)); } template<> EIGEN_STRONG_INLINE void pstore >(duals::dual* to, const Packet4df& from) { EIGEN_DEBUG_ALIGNED_STORE pstore(&numext::real_ref(*to), from.v); } template<> EIGEN_STRONG_INLINE void pstoreu >(duals::dual* to, const Packet4df& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu(&numext::real_ref(*to), from.v); } template<> EIGEN_DEVICE_FUNC inline Packet4df pgather, Packet4df>(const duals::dual* from, Index stride) { return Packet4df(_mm256_set_ps(duals::dpart(from[3*stride]), duals::rpart(from[3*stride]), duals::dpart(from[2*stride]), duals::rpart(from[2*stride]), duals::dpart(from[1*stride]), duals::rpart(from[1*stride]), duals::dpart(from[0*stride]), duals::rpart(from[0*stride]))); } template<> EIGEN_DEVICE_FUNC inline void pscatter, Packet4df>(duals::dual* to, const Packet4df& from, Index stride) { __m128 low = _mm256_extractf128_ps(from.v, 0); to[stride*0] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(low, low, 0)), _mm_cvtss_f32(_mm_shuffle_ps(low, low, 1))); to[stride*1] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(low, low, 2)), _mm_cvtss_f32(_mm_shuffle_ps(low, low, 3))); __m128 high = _mm256_extractf128_ps(from.v, 1); to[stride*2] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(high, high, 0)), _mm_cvtss_f32(_mm_shuffle_ps(high, high, 1))); to[stride*3] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(high, high, 2)), _mm_cvtss_f32(_mm_shuffle_ps(high, high, 3))); } template<> EIGEN_STRONG_INLINE duals::dual pfirst(const Packet4df& a) { return pfirst(Packet2df(_mm256_castps256_ps128(a.v))); } template<> EIGEN_STRONG_INLINE Packet4df preverse(const Packet4df& a) { __m128 low = _mm256_extractf128_ps(a.v, 0); __m128 high = _mm256_extractf128_ps(a.v, 1); __m128d lowd = _mm_castps_pd(low); __m128d highd = _mm_castps_pd(high); low = _mm_castpd_ps(_mm_shuffle_pd(lowd,lowd,0x1)); high = _mm_castpd_ps(_mm_shuffle_pd(highd,highd,0x1)); __m256 result = _mm256_setzero_ps(); result = _mm256_insertf128_ps(result, low, 1); result = _mm256_insertf128_ps(result, high, 0); return Packet4df(result); } template<> EIGEN_STRONG_INLINE duals::dual predux(const Packet4df& a) { return predux(padd(Packet2df(_mm256_extractf128_ps(a.v,0)), Packet2df(_mm256_extractf128_ps(a.v,1)))); } template<> EIGEN_STRONG_INLINE Packet4df preduxp(const Packet4df* vecs) { Packet8f t0 = _mm256_shuffle_ps(vecs[0].v, vecs[0].v, _MM_SHUFFLE(3, 1, 2 ,0)); Packet8f t1 = _mm256_shuffle_ps(vecs[1].v, vecs[1].v, _MM_SHUFFLE(3, 1, 2 ,0)); t0 = _mm256_hadd_ps(t0,t1); Packet8f t2 = _mm256_shuffle_ps(vecs[2].v, vecs[2].v, _MM_SHUFFLE(3, 1, 2 ,0)); Packet8f t3 = _mm256_shuffle_ps(vecs[3].v, vecs[3].v, _MM_SHUFFLE(3, 1, 2 ,0)); t2 = _mm256_hadd_ps(t2,t3); t1 = _mm256_permute2f128_ps(t0,t2, 0 + (2<<4)); t3 = _mm256_permute2f128_ps(t0,t2, 1 + (3<<4)); return Packet4df(_mm256_add_ps(t1,t3)); } template<> EIGEN_STRONG_INLINE duals::dual predux_mul(const Packet4df& a) { return predux_mul(pmul(Packet2df(_mm256_extractf128_ps(a.v, 0)), Packet2df(_mm256_extractf128_ps(a.v, 1)))); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet4df& first, const Packet4df& second) { if (Offset==0) return; palign_impl::run(first.v, second.v); } }; #if 0 // TODO template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet4df pmadd(const Packet4df& x, const Packet4df& y, const Packet4df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet4df pmul(const Packet4df& a, const Packet4df& b) const { return internal::pmul(a, pdconj(b)); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet4df pmadd(const Packet4df& x, const Packet4df& y, const Packet4df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet4df pmul(const Packet4df& a, const Packet4df& b) const { return internal::pmul(pdconj(a), b); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet4df pmadd(const Packet4df& x, const Packet4df& y, const Packet4df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet4df pmul(const Packet4df& a, const Packet4df& b) const { return pdconj(internal::pmul(a, b)); } }; EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL(Packet4df,Packet8f) #endif template<> EIGEN_STRONG_INLINE Packet4df pdiv(const Packet4df& a, const Packet4df& b) { #if 0 // approxer, but faster? const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0x00000000,0xffffffff,0x00000000,0xffffffff, 0x00000000,0xffffffff,0x00000000,0xffffffff)); __m256 xr = _mm256_moveldup_ps(b.v); __m256 num = _mm256_sub_ps(_mm256_mul_ps(a.v, xr), _mm256_and_ps(mask, _mm256_mul_ps(b.v, _mm256_moveldup_ps(a.v)))); return Packet4df(_mm256_div_ps(num, _mm256_mul_ps(xr,xr))); #else const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0xffffffff,0x00000000,0xffffffff,0x00000000, 0xffffffff,0x00000000,0xffffffff,0x00000000)); __m256 xr = _mm256_moveldup_ps(b.v); __m256 r = _mm256_div_ps(_mm256_add_ps(_mm256_and_ps(mask, a.v), _mm256_andnot_ps(mask, _mm256_sub_ps(_mm256_mul_ps(a.v, xr), _mm256_mul_ps(b.v, _mm256_moveldup_ps(a.v))))), _mm256_add_ps(_mm256_and_ps(mask, b.v), _mm256_andnot_ps(mask, _mm256_mul_ps(xr,xr)))); return Packet4df(r); #endif } //---------- double ---------- struct Packet2dd { EIGEN_STRONG_INLINE Packet2dd() {} EIGEN_STRONG_INLINE explicit Packet2dd(const __m256d& a) : v(a) {} __m256d v; }; template<> struct packet_traits > : default_packet_traits { typedef Packet2dd type; #if EIGEN_VERSION_AT_LEAST(3, 3, 8) // sometime after 3.3.7 gebp_traits cant deal with this #define TWODD_NOHALF #endif #ifdef TWODD_NOHALF typedef Packet2dd half; #else typedef Packet1dd half; #endif enum { Vectorizable = 1, AlignedOnScalar = 0, size = 2, #ifdef TWODD_NOHALF HasHalfPacket = 0, #else HasHalfPacket = 1, #endif HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; template<> struct unpacket_traits { typedef duals::dual type; enum {size=2, alignment=Aligned32, masked_load_available=false, masked_store_available=false, vectorizable=true}; #ifdef TWODD_NOHALF typedef Packet2dd half; #else typedef Packet1dd half; #endif }; template<> EIGEN_STRONG_INLINE Packet2dd padd(const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_add_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd psub(const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_sub_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd pnegate(const Packet2dd& a) { return Packet2dd(pnegate(a.v)); } template<> EIGEN_STRONG_INLINE Packet2dd pdconj(const Packet2dd& a) { const __m256d mask = _mm256_castsi256_pd(_mm256_set_epi32(0x80000000,0x0,0x0,0x0,0x80000000,0x0,0x0,0x0)); return Packet2dd(_mm256_xor_pd(a.v,mask)); } template<> EIGEN_STRONG_INLINE Packet2dd pconj(const Packet2dd& a) { return a; } template<> EIGEN_STRONG_INLINE Packet2dd pmul(const Packet2dd& a, const Packet2dd& b) { #if 0 const __m256d mask = _mm256_castsi256_pd(_mm256_set_epi32(0xffffffff,0xffffffff,0x0,0x0, 0xffffffff,0xffffffff,0x0,0x0)); return Packet2dd(_mm256_add_pd(_mm256_and_pd(mask, _mm256_mul_pd(a.v, _mm256_shuffle_pd(b.v,b.v,0x0))), _mm256_mul_pd(b.v, _mm256_shuffle_pd(a.v,a.v,0x0)))); #else #ifdef __FMA__ // not sure if this is actually faster. return Packet2dd(_mm256_fmadd_pd(b.v, _mm256_movedup_pd(a.v), _mm256_blend_pd(_mm256_setzero_pd(), _mm256_mul_pd(a.v, _mm256_movedup_pd(b.v)), 0xa))); #else return Packet2dd(_mm256_add_pd(_mm256_mul_pd(b.v,_mm256_movedup_pd(a.v)), _mm256_blend_pd(_mm256_setzero_pd(), _mm256_mul_pd(a.v, _mm256_movedup_pd(b.v)), 0xa))); #endif #endif } template<> EIGEN_STRONG_INLINE Packet2dd pand (const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_and_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd por (const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_or_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd pxor (const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_xor_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd pandnot(const Packet2dd& a, const Packet2dd& b) { return Packet2dd(_mm256_andnot_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2dd pload (const duals::dual* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet2dd(pload((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet2dd ploadu(const duals::dual* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet2dd(ploadu((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet2dd pset1(const duals::dual& from) { // in case casting to a __m128d* is really not safe, then we can still fallback to this version: (much slower though) // return Packet2dd(_mm256_loadu2_m128d((const double*)&from,(const double*)&from)); return Packet2dd(_mm256_broadcast_pd((const __m128d*)(const void*)&from)); } template<> EIGEN_STRONG_INLINE Packet2dd ploaddup(const duals::dual* from) { return pset1(*from); } template<> EIGEN_STRONG_INLINE void pstore >(duals::dual * to, const Packet2dd& from) { EIGEN_DEBUG_ALIGNED_STORE pstore((double*)to, from.v); } template<> EIGEN_STRONG_INLINE void pstoreu >(duals::dual * to, const Packet2dd& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((double*)to, from.v); } template<> EIGEN_DEVICE_FUNC inline Packet2dd pgather, Packet2dd>(const duals::dual* from, Index stride) { return Packet2dd(_mm256_set_pd(duals::dpart(from[1*stride]), duals::rpart(from[1*stride]), duals::dpart(from[0*stride]), duals::rpart(from[0*stride]))); } template<> EIGEN_DEVICE_FUNC inline void pscatter, Packet2dd>(duals::dual* to, const Packet2dd& from, Index stride) { __m128d low = _mm256_extractf128_pd(from.v, 0); to[stride*0] = duals::dual(_mm_cvtsd_f64(low), _mm_cvtsd_f64(_mm_shuffle_pd(low, low, 1))); __m128d high = _mm256_extractf128_pd(from.v, 1); to[stride*1] = duals::dual(_mm_cvtsd_f64(high), _mm_cvtsd_f64(_mm_shuffle_pd(high, high, 1))); } template<> EIGEN_STRONG_INLINE duals::dual pfirst(const Packet2dd& a) { __m128d low = _mm256_extractf128_pd(a.v, 0); EIGEN_ALIGN16 double res[2]; _mm_store_pd(res, low); return duals::dual(res[0],res[1]); } template<> EIGEN_STRONG_INLINE Packet2dd preverse(const Packet2dd& a) { __m256d result = _mm256_permute2f128_pd(a.v, a.v, 1); return Packet2dd(result); } template<> EIGEN_STRONG_INLINE duals::dual predux(const Packet2dd& a) { return predux(padd(Packet1dd(_mm256_extractf128_pd(a.v,0)), Packet1dd(_mm256_extractf128_pd(a.v,1)))); } template<> EIGEN_STRONG_INLINE Packet2dd preduxp(const Packet2dd* vecs) { Packet4d t0 = _mm256_permute2f128_pd(vecs[0].v,vecs[1].v, 0 + (2<<4)); Packet4d t1 = _mm256_permute2f128_pd(vecs[0].v,vecs[1].v, 1 + (3<<4)); return Packet2dd(_mm256_add_pd(t0,t1)); } template<> EIGEN_STRONG_INLINE duals::dual predux_mul(const Packet2dd& a) { return pfirst(pmul(Packet1dd(_mm256_extractf128_pd(a.v,0)), Packet1dd(_mm256_extractf128_pd(a.v,1)))); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet2dd& first, const Packet2dd& second) { if (Offset==0) return; palign_impl::run(first.v, second.v); } }; #if 0 // TODO template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2dd pmadd(const Packet2dd& x, const Packet2dd& y, const Packet2dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2dd pmul(const Packet2dd& a, const Packet2dd& b) const { return internal::pmul(a, pdconj(b)); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2dd pmadd(const Packet2dd& x, const Packet2dd& y, const Packet2dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2dd pmul(const Packet2dd& a, const Packet2dd& b) const { return internal::pmul(pdconj(a), b); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2dd pmadd(const Packet2dd& x, const Packet2dd& y, const Packet2dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2dd pmul(const Packet2dd& a, const Packet2dd& b) const { return pdconj(internal::pmul(a, b)); } }; EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL(Packet2dd,Packet4d) #endif template<> EIGEN_STRONG_INLINE Packet2dd pdiv(const Packet2dd& a, const Packet2dd& b) { #if 1 // help gcc to not use 12 registers :P __m256d y1 = _mm256_setzero_pd(); __m256d y2 = _mm256_blend_pd(a.v, y1, 0xa); __m256d y4 = _mm256_movedup_pd(b.v); y4 = _mm256_mul_pd(a.v, y4); __m256d y0 = _mm256_movedup_pd(a.v); y0 = _mm256_mul_pd(b.v, y0); y0 = _mm256_sub_pd(y4, y0); y0 = _mm256_blend_pd(y1, y0, 0xa); y0 = _mm256_add_pd(y2, y0); y2 = _mm256_blend_pd(b.v, y1, 0xa); __m256d y3 = _mm256_mul_pd(b.v, b.v); y1 = _mm256_unpacklo_pd(y1, y3); y1 = _mm256_add_pd(y2, y1); return Packet2dd(_mm256_div_pd(y0, y1)); #else const __m256d mask = _mm256_castsi256_pd(_mm256_setr_epi32(0xffffffff,0xffffffff,0x00000000,0x00000000, 0xffffffff,0xffffffff,0x00000000,0x00000000)); return Packet2dd(_mm256_div_pd (_mm256_add_pd(_mm256_and_pd(mask, a.v), _mm256_andnot_pd(mask, _mm256_sub_pd(_mm256_mul_pd(a.v, _mm256_shuffle_pd(b.v,b.v,0x0)), _mm256_mul_pd(b.v, _mm256_shuffle_pd(a.v,a.v,0x0))))), _mm256_add_pd(_mm256_and_pd(mask, b.v), _mm256_andnot_pd(mask, _mm256_mul_pd(_mm256_shuffle_pd(b.v,b.v,0x0), _mm256_shuffle_pd(b.v,b.v,0x0)))))); #endif } EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock& kernel) { __m256d P0 = _mm256_castps_pd(kernel.packet[0].v); __m256d P1 = _mm256_castps_pd(kernel.packet[1].v); __m256d P2 = _mm256_castps_pd(kernel.packet[2].v); __m256d P3 = _mm256_castps_pd(kernel.packet[3].v); __m256d T0 = _mm256_shuffle_pd(P0, P1, 15); __m256d T1 = _mm256_shuffle_pd(P0, P1, 0); __m256d T2 = _mm256_shuffle_pd(P2, P3, 15); __m256d T3 = _mm256_shuffle_pd(P2, P3, 0); kernel.packet[1].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T0, T2, 32)); kernel.packet[3].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T0, T2, 49)); kernel.packet[0].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T1, T3, 32)); kernel.packet[2].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T1, T3, 49)); } EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock& kernel) { __m256d tmp = _mm256_permute2f128_pd(kernel.packet[0].v, kernel.packet[1].v, 0+(2<<4)); kernel.packet[1].v = _mm256_permute2f128_pd(kernel.packet[0].v, kernel.packet[1].v, 1+(3<<4)); kernel.packet[0].v = tmp; } template<> EIGEN_STRONG_INLINE Packet4df pinsertfirst(const Packet4df& a, duals::dual b) { return Packet4df(_mm256_blend_ps(a.v,pset1(b).v,1|2)); } template<> EIGEN_STRONG_INLINE Packet2dd pinsertfirst(const Packet2dd& a, duals::dual b) { return Packet2dd(_mm256_blend_pd(a.v,pset1(b).v,1|2)); } template<> EIGEN_STRONG_INLINE Packet4df pinsertlast(const Packet4df& a, duals::dual b) { return Packet4df(_mm256_blend_ps(a.v,pset1(b).v,(1<<7)|(1<<6))); } template<> EIGEN_STRONG_INLINE Packet2dd pinsertlast(const Packet2dd& a, duals::dual b) { return Packet2dd(_mm256_blend_pd(a.v,pset1(b).v,(1<<3)|(1<<2))); } } // end namespace internal } // end namespace Eigen #endif // EIGEN_DUAL_AVX_H tmp_ns50wwy/src/include/cppduals/duals/arch/AVX/ComplexDual.h0000644000175000017500000005133514163340332024256 0ustar carstencarsten// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2010 Gael Guennebaud // Copyright (C) 2019 Michael Tesch // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_CDUAL_AVX_H #define EIGEN_CDUAL_AVX_H namespace Eigen { namespace internal { #define vec8f_swizzle1(v,p,q,r,s) \ (_mm256_permute_ps(v, ((s)<<6|(r)<<4|(q)<<2|(p)))) #ifdef __AVX2__ #define vec4d_swizzle1(v,p,q,r,s) \ (_mm256_permute4x64_pd(v,(s)<<6|(r)<<4|(q)<<2|(p))) #else //#error "TODO" #endif //---------- float ---------- struct Packet2cdf { EIGEN_STRONG_INLINE Packet2cdf() {} EIGEN_STRONG_INLINE explicit Packet2cdf(const __m256 & a) : v(a) {} EIGEN_STRONG_INLINE explicit Packet2cdf(const Packet4df & a) : v(a.v) {} //__m256 v; Packet4df v; }; // Use the packet_traits defined in AVX/PacketMath.h instead if we're going // to leverage AVX instructions. #if !defined(CPPDUALS_DONT_VECTORIZE_CDUAL) template<> struct packet_traits > > : default_packet_traits { typedef Packet2cdf type; typedef Packet1cdf half; enum { Vectorizable = 1, AlignedOnScalar = 0, size = 2, HasHalfPacket = 1, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; #endif template<> struct unpacket_traits { typedef std::complex > type; enum {size=2, alignment=Aligned32, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet1cdf half; }; template<> EIGEN_STRONG_INLINE Packet2cdf padd(const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_add_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf psub(const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_sub_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf pnegate(const Packet2cdf& a) { return Packet2cdf(pnegate(a.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf pconj(const Packet2cdf& a) { const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0x00000000,0x00000000,0x80000000,0x80000000, 0x00000000,0x00000000,0x80000000,0x80000000)); return Packet2cdf(_mm256_xor_ps(a.v.v,mask)); } template<> EIGEN_STRONG_INLINE std::complex > pfirst(const Packet2cdf& a) { EIGEN_ALIGN32 float res[8]; _mm256_store_ps(res, a.v.v); return std::complex >(duals::dual(res[0],res[1]), duals::dual(res[2],res[3])); } template<> EIGEN_STRONG_INLINE Packet2cdf pmul(const Packet2cdf& a, const Packet2cdf& b) { #ifdef __FMA__xx const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0x00000000,0x00000000,0xffffffff,0xffffffff, 0x00000000,0x00000000,0xffffffff,0xffffffff)); Packet2cdf x(vec8f_swizzle1 (_mm256_addsub_ps(_mm256_fmadd_ps(vec8f_swizzle1(a.v.v, 0, 0, 0, 0), vec8f_swizzle1(b.v.v, 0, 2, 1, 3), _mm256_and_ps(mask, _mm256_mul_ps(vec8f_swizzle1(a.v.v, 0, 0, 1, 1), vec8f_swizzle1(b.v.v, 0, 0, 0, 2)))), _mm256_fmadd_ps(vec8f_swizzle1(a.v.v, 2, 2, 2, 2), vec8f_swizzle1(b.v.v, 2, 0, 3, 1), _mm256_and_ps(mask, _mm256_mul_ps(vec8f_swizzle1(a.v.v, 0, 0, 3, 3), vec8f_swizzle1(b.v.v, 0, 0, 2, 0))))), 0,2,1,3)); return x; #else // help gcc __m256 y0 = a.v.v; __m256 y1 = _mm256_permute_ps(y0,0); __m256 y2 = b.v.v; __m256 y3 = _mm256_permute_ps(y2,216); y1 = _mm256_mul_ps(y1,y3); y3 = _mm256_permute_ps(y0,84); __m256 y4 = _mm256_permute_ps(y2,132); y3 = _mm256_mul_ps(y3,y4); y4 = _mm256_setzero_ps(); y3 = _mm256_blend_ps(y4,y3,204); y1 = _mm256_add_ps(y1,y3); y3 = _mm256_permute_ps(y0,170); __m256 y5 = _mm256_permute_ps(y2,114); y3 = _mm256_mul_ps(y3,y5); y0 = _mm256_movehdup_ps(y0); y2 = _mm256_permute_ps(y2,36); y0 = _mm256_mul_ps(y0,y2); y0 = _mm256_blend_ps(y4,y0,204); y0 = _mm256_add_ps(y3,y0); y0 = _mm256_addsub_ps(y1,y0); y0 = _mm256_permute_ps(y0,216); return Packet2cdf(y0); #endif } template<> EIGEN_STRONG_INLINE Packet2cdf pand (const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_and_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf por (const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_or_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf pxor (const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_xor_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf pandnot(const Packet2cdf& a, const Packet2cdf& b) { return Packet2cdf(_mm256_andnot_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet2cdf pload (const std::complex >* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet2cdf(pload((const float*)from)); } template<> EIGEN_STRONG_INLINE Packet2cdf ploadu(const std::complex >* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet2cdf(_mm256_loadu_ps((float*)from)); } template<> EIGEN_STRONG_INLINE Packet2cdf pset1(const std::complex >& from) { /* here we really have to use unaligned loads :( */ const __m128 v = ploadu((float *)&from); return Packet2cdf(_mm256_insertf128_ps(_mm256_castps128_ps256(v),v,1)); //return Packet2cdf(_mm256_set_m128(v,v)); // missing on older GCCs } template<> EIGEN_STRONG_INLINE Packet2cdf ploaddup(const std::complex >* from) { return pset1(*from); } // FIXME force unaligned store, this is a temporary fix template<> EIGEN_STRONG_INLINE void pstore > >(std::complex > * to, const Packet2cdf& from) { EIGEN_DEBUG_ALIGNED_STORE pstore((float*)to, Packet8f(from.v.v)); } template<> EIGEN_STRONG_INLINE void pstoreu > >(std::complex > * to, const Packet2cdf& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, Packet8f(from.v.v)); } //template<> EIGEN_STRONG_INLINE void //prefetch > >(const std::complex > * addr) //{ _mm256_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0); } template<> EIGEN_STRONG_INLINE Packet2cdf preverse(const Packet2cdf& a) { const __m256 result = _mm256_permute2f128_ps(a.v.v, a.v.v, 1); return Packet2cdf(result); } template<> EIGEN_STRONG_INLINE std::complex > predux(const Packet2cdf& a) { return pfirst(Packet2cdf(_mm256_add_ps(a.v.v, _mm256_permute2f128_ps(a.v.v, a.v.v, 1)))); } template<> EIGEN_STRONG_INLINE Packet2cdf preduxp(const Packet2cdf* vecs) { return vecs[0]; } template<> EIGEN_STRONG_INLINE std::complex > predux_mul(const Packet2cdf& a) { return pfirst(pmul(a, preverse(a))); } #if 0 template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet2cdf& /*first*/, const Packet2cdf& /*second*/) { // FIXME is it sure we never have to align a Packet2cdf? // Even though a std::complex > has 32 bytes, it is not necessarily aligned on a 32 byte boundary... } }; #endif template<> struct conj_helper { EIGEN_STRONG_INLINE Packet2cdf pmadd(const Packet2cdf& x, const Packet2cdf& y, const Packet2cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2cdf pmul(const Packet2cdf& a, const Packet2cdf& b) const { //#ifdef EIGEN_VECTORIZE_SSE3 return internal::pmul(a, pconj(b)); //#else // TODO for AVX //const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x80000000,0x0,0x0,0x0)); //return Packet2cdf(_mm_add_pd(_mm_xor_pd(_mm_mul_pd(vec2d_swizzle1(a.v.v, 0, 0), b.v), mask), // _mm_mul_pd(vec2d_swizzle1(a.v, 1, 1), // vec2d_swizzle1(b.v, 1, 0)))); //#endif } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet2cdf pmadd(const Packet2cdf& x, const Packet2cdf& y, const Packet2cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2cdf pmul(const Packet2cdf& a, const Packet2cdf& b) const { //#ifdef EIGEN_VECTORIZE_SSE3 return internal::pmul(pconj(a), b); //#else //const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x80000000,0x0,0x0,0x0)); //return Packet2cdf(_mm_add_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 0, 0), b.v), // _mm_xor_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 1, 1), // vec2d_swizzle1(b.v, 1, 0)), mask))); //#endif } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet2cdf pmadd(const Packet2cdf& x, const Packet2cdf& y, const Packet2cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2cdf pmul(const Packet2cdf& a, const Packet2cdf& b) const { //#ifdef EIGEN_VECTORIZE_SSE3 return pconj(internal::pmul(a, b)); //#else //const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x80000000,0x0,0x0,0x0)); //return Packet2cdf(_mm_sub_pd(_mm_xor_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 0, 0), b.v), mask), // _mm_mul_pd(vec2d_swizzle1(a.v, 1, 1), // vec2d_swizzle1(b.v, 1, 0)))); //#endif } }; //TODO EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cdf,Packet4df) template<> EIGEN_STRONG_INLINE Packet2cdf pdiv(const Packet2cdf& a, const Packet2cdf& b) { Packet2cdf res = conj_helper().pmul(a,b); Packet4df s = pmul(b.v, b.v); return Packet2cdf(pdiv(res.v, padd(s, Packet4df(_mm256_castpd_ps(_mm256_shuffle_pd(_mm256_castps_pd(s.v), _mm256_castps_pd(s.v), 0x5)))))); } EIGEN_STRONG_INLINE Packet2cdf pcplxflip/* */(const Packet2cdf& x) { return Packet2cdf(vec8f_swizzle1(x.v.v, 2, 3, 0, 1)); } EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock & kernel) { __m256d tmp = _mm256_permute2f128_pd(_mm256_castps_pd(kernel.packet[0].v.v), _mm256_castps_pd(kernel.packet[1].v.v), 0+(2<<4)); kernel.packet[1].v.v = _mm256_castpd_ps(_mm256_permute2f128_pd(_mm256_castps_pd(kernel.packet[0].v.v), _mm256_castps_pd(kernel.packet[1].v.v), 1+(3<<4))); kernel.packet[0].v.v = _mm256_castpd_ps(tmp); } //---------- double ---------- #ifdef __AVX2__ struct Packet1cdd { EIGEN_STRONG_INLINE Packet1cdd() {} EIGEN_STRONG_INLINE explicit Packet1cdd(const __m256d & a) : v(a) {} EIGEN_STRONG_INLINE explicit Packet1cdd(const Packet2dd & a) : v(a) {} //__m256d v; Packet2dd v; }; #if !defined(CPPDUALS_DONT_VECTORIZE_CDUAL) template<> struct packet_traits > > : default_packet_traits { typedef Packet1cdd type; typedef Packet1cdd half; enum { Vectorizable = 1, AlignedOnScalar = 0, size = 1, HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; #endif template<> struct unpacket_traits { typedef std::complex > type; enum {size=1, alignment=Aligned32, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet1cdd half; }; template<> EIGEN_STRONG_INLINE Packet1cdd padd(const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_add_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd psub(const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_sub_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd pnegate(const Packet1cdd& a) { return Packet1cdd(pnegate(a.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd pconj(const Packet1cdd& a) { const __m256d mask = _mm256_castsi256_pd(_mm256_set_epi32(0x80000000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0)); return Packet1cdd(_mm256_xor_pd(a.v.v,mask)); } template<> EIGEN_STRONG_INLINE Packet1cdd pmul(const Packet1cdd& a, const Packet1cdd& b) { #ifndef __AVX2__ // TODO #error "no avx2, really?" #endif #ifdef __FMA__ const __m256d mask = _mm256_castsi256_pd(_mm256_setr_epi32(0x0,0x0,0x0,0x0, 0xffffffff,0xffffffff,0xffffffff,0xffffffff)); return Packet1cdd(vec4d_swizzle1 (_mm256_addsub_pd(_mm256_fmadd_pd(_mm256_broadcastsd_pd(_mm256_castpd256_pd128(a.v.v)), vec4d_swizzle1(b.v.v, 0, 2, 1, 3), _mm256_and_pd(mask, _mm256_mul_pd(vec4d_swizzle1(a.v.v, 0, 0, 1, 1), vec4d_swizzle1(b.v.v, 0, 0, 0, 2)))), _mm256_fmadd_pd(vec4d_swizzle1(a.v.v, 2, 2, 2, 2), vec4d_swizzle1(b.v.v, 2, 0, 3, 1), _mm256_and_pd(mask, _mm256_mul_pd(vec4d_swizzle1(a.v.v, 0, 0, 3, 3), vec4d_swizzle1(b.v.v, 0, 0, 2, 0))))), 0,2,1,3)); #else const __m256d mask = _mm256_castsi256_pd(_mm256_setr_epi32(0x0,0x0,0x0,0x0, 0xffffffff,0xffffffff,0xffffffff,0xffffffff)); return Packet1cdd(vec4d_swizzle1 (_mm256_addsub_pd(_mm256_add_pd(_mm256_mul_pd(_mm256_broadcastsd_pd(_mm256_castpd256_pd128(a.v.v)), vec4d_swizzle1(b.v.v, 0, 2, 1, 3)), _mm256_and_pd(mask, _mm256_mul_pd(vec4d_swizzle1(a.v.v, 0, 0, 1, 1), vec4d_swizzle1(b.v.v, 0, 0, 0, 2)))), _mm256_add_pd(_mm256_mul_pd(vec4d_swizzle1(a.v.v, 2, 2, 2, 2), vec4d_swizzle1(b.v.v, 2, 0, 3, 1)), _mm256_and_pd(mask, _mm256_mul_pd(vec4d_swizzle1(a.v.v, 0, 0, 3, 3), vec4d_swizzle1(b.v.v, 0, 0, 2, 0))))), 0,2,1,3)); #endif } template<> EIGEN_STRONG_INLINE Packet1cdd pand (const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_and_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd por (const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_or_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd pxor (const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_xor_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd pandnot(const Packet1cdd& a, const Packet1cdd& b) { return Packet1cdd(_mm256_andnot_pd(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdd pload (const std::complex >* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet1cdd(ploadu((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet1cdd ploadu(const std::complex >* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet1cdd(ploadu((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet1cdd pset1(const std::complex >& from) { /* here we really have to use unaligned loads :( */ return ploadu(&from); } template<> EIGEN_STRONG_INLINE Packet1cdd ploaddup(const std::complex >* from) { return pset1(*from); } // FIXME force unaligned store, this is a temporary fix template<> EIGEN_STRONG_INLINE void pstore > >(std::complex > * to, const Packet1cdd& from) { EIGEN_DEBUG_ALIGNED_STORE pstoreu((double*)to, from.v.v); } template<> EIGEN_STRONG_INLINE void pstoreu > >(std::complex > * to, const Packet1cdd& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((double*)to, from.v.v); } template<> EIGEN_STRONG_INLINE void prefetch > >(const std::complex > * addr) { _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0); } template<> EIGEN_STRONG_INLINE std::complex > pfirst(const Packet1cdd& a) { EIGEN_ALIGN16 double res[4]; _mm256_store_pd(res, a.v.v); return std::complex >(duals::dual(res[0],res[1]), duals::dual(res[2],res[3])); } template<> EIGEN_STRONG_INLINE Packet1cdd preverse(const Packet1cdd& a) { return a; } template<> EIGEN_STRONG_INLINE std::complex > predux(const Packet1cdd& a) { return pfirst(a); } template<> EIGEN_STRONG_INLINE Packet1cdd preduxp(const Packet1cdd* vecs) { return vecs[0]; } template<> EIGEN_STRONG_INLINE std::complex > predux_mul(const Packet1cdd& a) { return pfirst(a); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet1cdd& /*first*/, const Packet1cdd& /*second*/) { // FIXME is it sure we never have to align a Packet1cdd? // Even though a std::complex > has 16 bytes, it is not necessarily aligned on a 16 bytes boundary... } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdd pmadd(const Packet1cdd& x, const Packet1cdd& y, const Packet1cdd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdd pmul(const Packet1cdd& a, const Packet1cdd& b) const { return internal::pmul(a, pconj(b)); } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdd pmadd(const Packet1cdd& x, const Packet1cdd& y, const Packet1cdd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdd pmul(const Packet1cdd& a, const Packet1cdd& b) const { return internal::pmul(pconj(a), b); } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdd pmadd(const Packet1cdd& x, const Packet1cdd& y, const Packet1cdd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdd pmul(const Packet1cdd& a, const Packet1cdd& b) const { return pconj(internal::pmul(a, b)); } }; EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cdd,Packet2dd) template<> EIGEN_STRONG_INLINE Packet1cdd pdiv(const Packet1cdd& a, const Packet1cdd& b) { //Packet2cd num = pmul(a, pconj(b)); //__m256d tmp = _mm256_mul_pd(b.v, b.v); //__m256d denom = _mm256_hadd_pd(tmp, tmp); //return Packet2cd(_mm256_div_pd(num.v, denom)); Packet1cdd num = conj_helper().pmul(a,b); Packet2dd tmp = pmul(b.v, b.v); Packet2dd denom ( _mm256_add_pd(tmp.v, _mm256_permute2f128_pd(tmp.v,tmp.v, 1))); return Packet1cdd(pdiv(num.v, denom)); } EIGEN_STRONG_INLINE Packet1cdd pcplxflip/* */(const Packet1cdd& x) { return Packet1cdd(_mm256_permute2f128_pd(x.v.v,x.v.v, 1)); } #else #warning "AVX2 disabled: not vectorizing std::complex>" #endif } // end namespace internal } // end namespace Eigen #endif // EIGEN_CDUAL_AVX_H tmp_ns50wwy/src/include/cppduals/duals/arch/SSE/0000755000175000017500000000000014163340332021655 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/duals/arch/SSE/Dual.h0000644000175000017500000004464614163340332022731 0ustar carstencarsten// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2010 Gael Guennebaud // Copyright (C) 2019 Michael Tesch // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_DUAL_SSE_H #define EIGEN_DUAL_SSE_H namespace Eigen { namespace internal { //---------- float ---------- struct Packet2df { EIGEN_STRONG_INLINE Packet2df() {} EIGEN_STRONG_INLINE explicit Packet2df(const __m128& a) : v(a) {} __m128 v; }; // Use the packet_traits defined in AVX/Dual.h instead if we're going // to leverage AVX instructions. #ifndef EIGEN_VECTORIZE_AVX template<> struct packet_traits > : default_packet_traits { typedef Packet2df type; typedef Packet2df half; enum { Vectorizable = 1, AlignedOnScalar = 1, size = 2, HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0, HasBlend = 1 }; }; #endif template<> struct unpacket_traits { typedef duals::dual type; enum {size=2, alignment=Aligned16, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet2df half; }; template<> EIGEN_STRONG_INLINE Packet2df padd(const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_add_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df psub(const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_sub_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df pnegate(const Packet2df& a) { const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x80000000,0x80000000,0x80000000,0x80000000)); return Packet2df(_mm_xor_ps(a.v,mask)); } template<> EIGEN_STRONG_INLINE Packet2df pdconj(const Packet2df& a) { const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000,0x80000000,0x00000000,0x80000000)); return Packet2df(_mm_xor_ps(a.v,mask)); } template<> EIGEN_STRONG_INLINE Packet2df pconj(const Packet2df& a) { return a; } template<> EIGEN_STRONG_INLINE Packet2df pmul(const Packet2df& a, const Packet2df& b) { #if defined(EIGEN_VECTORIZE_SSE3) const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000,0xffffffff,0x00000000,0xffffffff)); return Packet2df(_mm_add_ps(_mm_and_ps(mask, _mm_mul_ps(a.v, _mm_moveldup_ps(b.v))), _mm_mul_ps(b.v, _mm_moveldup_ps(a.v)))); #else //TODO-use avx instructions instead? const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000,0xffffffff,0x00000000,0xffffffff)); return Packet2df(_mm_add_ps(_mm_and_ps(mask, _mm_mul_ps(a.v, _mm_moveldup_ps(b.v))), _mm_mul_ps(b.v, _mm_moveldup_ps(a.v)))); #endif } template<> EIGEN_STRONG_INLINE Packet2df pand (const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_and_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df por (const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_or_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df pxor (const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_xor_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df pandnot(const Packet2df& a, const Packet2df& b) { return Packet2df(_mm_andnot_ps(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet2df pload (const duals::dual* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet2df(pload(&numext::real_ref(*from))); } template<> EIGEN_STRONG_INLINE Packet2df ploadu(const duals::dual* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet2df(ploadu(&numext::real_ref(*from))); } template<> EIGEN_STRONG_INLINE Packet2df pset1(const duals::dual& from) { Packet2df res; #if EIGEN_GNUC_AT_MOST(4,2) // Workaround annoying "may be used uninitialized in this function" warning with gcc 4.2 res.v = _mm_loadl_pi(_mm_set1_ps(0.0f), reinterpret_cast(&from)); #elif EIGEN_GNUC_AT_LEAST(4,6) // Suppress annoying "may be used uninitialized in this function" warning with gcc >= 4.6 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wuninitialized" #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" res.v = _mm_loadl_pi(res.v, (const __m64*)&from); #pragma GCC diagnostic pop #else res.v = _mm_loadl_pi(res.v, (const __m64*)&from); #endif return Packet2df(_mm_movelh_ps(res.v,res.v)); } template<> EIGEN_STRONG_INLINE Packet2df ploaddup(const duals::dual* from) { return pset1(*from); } template<> EIGEN_STRONG_INLINE void pstore >(duals::dual * to, const Packet2df& from) { EIGEN_DEBUG_ALIGNED_STORE pstore(&numext::real_ref(*to), Packet4f(from.v)); } template<> EIGEN_STRONG_INLINE void pstoreu >(duals::dual * to, const Packet2df& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu(&numext::real_ref(*to), Packet4f(from.v)); } template<> EIGEN_DEVICE_FUNC inline Packet2df pgather, Packet2df>(const duals::dual* from, Index stride) { return Packet2df(_mm_set_ps(duals::dpart(from[1*stride]), duals::rpart(from[1*stride]), duals::dpart(from[0*stride]), duals::rpart(from[0*stride]))); } template<> EIGEN_DEVICE_FUNC inline void pscatter, Packet2df>(duals::dual* to, const Packet2df& from, Index stride) { to[stride*0] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 0)), _mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 1))); to[stride*1] = duals::dual(_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 2)), _mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 3))); } template<> EIGEN_STRONG_INLINE void prefetch >(const duals::dual * addr) { _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0); } template<> EIGEN_STRONG_INLINE duals::dual pfirst(const Packet2df& a) { #if EIGEN_GNUC_AT_MOST(4,3) // Workaround gcc 4.2 ICE - this is not performance wise ideal, but who cares... // This workaround also fix invalid code generation with gcc 4.3 EIGEN_ALIGN16 duals::dual res[2]; _mm_store_ps((float*)res, a.v); return res[0]; #else duals::dual res; _mm_storel_pi((__m64*)&res, a.v); return res; #endif } template<> EIGEN_STRONG_INLINE Packet2df preverse(const Packet2df& a) { return Packet2df(_mm_castpd_ps(preverse(Packet2d(_mm_castps_pd(a.v))))); } template<> EIGEN_STRONG_INLINE duals::dual predux(const Packet2df& a) { return pfirst(Packet2df(_mm_add_ps(a.v, _mm_movehl_ps(a.v,a.v)))); } template<> EIGEN_STRONG_INLINE Packet2df preduxp(const Packet2df* vecs) { return Packet2df(_mm_add_ps(_mm_movelh_ps(vecs[0].v,vecs[1].v), _mm_movehl_ps(vecs[1].v,vecs[0].v))); } template<> EIGEN_STRONG_INLINE duals::dual predux_mul(const Packet2df& a) { return pfirst(pmul(a, Packet2df(_mm_movehl_ps(a.v,a.v)))); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet2df& first, const Packet2df& second) { if (Offset==1) { first.v = _mm_movehl_ps(first.v, first.v); first.v = _mm_movelh_ps(first.v, second.v); } } }; #if 0 // TODO template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2df pmadd(const Packet2df& x, const Packet2df& y, const Packet2df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2df pmul(const Packet2df& a, const Packet2df& b) const { return internal::pmul(a, pdconj(b)); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2df pmadd(const Packet2df& x, const Packet2df& y, const Packet2df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2df pmul(const Packet2df& a, const Packet2df& b) const { return internal::pmul(pdconj(a), b); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet2df pmadd(const Packet2df& x, const Packet2df& y, const Packet2df& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet2df pmul(const Packet2df& a, const Packet2df& b) const { return pdconj(internal::pmul(a, b)); } }; EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL(Packet2df,Packet4f) #endif template<> EIGEN_STRONG_INLINE Packet2df pdiv(const Packet2df& a, const Packet2df& b) { // TODO optimize it for SSE3 and 4 const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0xffffffff,0x00000000,0xffffffff,0x00000000)); return Packet2df(_mm_div_ps(_mm_add_ps(_mm_and_ps(mask, a.v), _mm_andnot_ps(mask, _mm_sub_ps(_mm_mul_ps(a.v, vec4f_swizzle1(b.v, 0, 0, 2, 2)), _mm_mul_ps(b.v, vec4f_swizzle1(a.v, 0, 0, 2, 2))))), _mm_add_ps(_mm_and_ps(mask, b.v), _mm_andnot_ps(mask, _mm_mul_ps(vec4f_swizzle1(b.v, 0, 0, 2, 2), vec4f_swizzle1(b.v, 0, 0, 2, 2)))))); } //---------- double ---------- struct Packet1dd { EIGEN_STRONG_INLINE Packet1dd() {} EIGEN_STRONG_INLINE explicit Packet1dd(const __m128d& a) : v(a) {} __m128d v; }; // Use the packet_traits defined in AVX/PacketMath.h instead if we're going // to leverage AVX instructions. #ifndef EIGEN_VECTORIZE_AVX template<> struct packet_traits > : default_packet_traits { typedef Packet1dd type; typedef Packet1dd half; enum { Vectorizable = 1, AlignedOnScalar = 0, size = 1, HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; #endif template<> struct unpacket_traits { typedef duals::dual type; enum {size=1, alignment=Aligned16, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet1dd half; }; template<> EIGEN_STRONG_INLINE Packet1dd padd(const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_add_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet1dd psub(const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_sub_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet1dd pnegate(const Packet1dd& a) { return Packet1dd(pnegate(Packet2d(a.v))); } template<> EIGEN_STRONG_INLINE Packet1dd pdconj(const Packet1dd& a) { const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x80000000,0x0,0x0,0x0)); return Packet1dd(_mm_xor_pd(a.v,mask)); } template<> EIGEN_STRONG_INLINE Packet1dd pconj(const Packet1dd& a) { return a; } template<> EIGEN_STRONG_INLINE Packet1dd pmul(const Packet1dd& a, const Packet1dd& b) { //#ifdef EIGEN_VECTORIZE_SSE3 //TODO const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0xffffffff,0xffffffff,0x00000000,0x00000000)); return Packet1dd(_mm_add_pd(_mm_and_pd(mask, _mm_mul_pd(vec2d_swizzle1(a.v, 0, 1), vec2d_swizzle1(b.v, 0, 0))), _mm_mul_pd(vec2d_swizzle1(a.v, 0, 0), vec2d_swizzle1(b.v, 0, 1)))); //#else //#endif } template<> EIGEN_STRONG_INLINE Packet1dd pand (const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_and_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet1dd por (const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_or_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet1dd pxor (const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_xor_pd(a.v,b.v)); } template<> EIGEN_STRONG_INLINE Packet1dd pandnot(const Packet1dd& a, const Packet1dd& b) { return Packet1dd(_mm_andnot_pd(a.v,b.v)); } // FIXME force unaligned load, this is a temporary fix template<> EIGEN_STRONG_INLINE Packet1dd pload (const duals::dual* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet1dd(pload((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet1dd ploadu(const duals::dual* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet1dd(ploadu((const double*)from)); } template<> EIGEN_STRONG_INLINE Packet1dd pset1(const duals::dual& from) { /* here we really have to use unaligned loads :( */ return ploadu(&from); } template<> EIGEN_STRONG_INLINE Packet1dd ploaddup(const duals::dual* from) { return pset1(*from); } // FIXME force unaligned store, this is a temporary fix template<> EIGEN_STRONG_INLINE void pstore >(duals::dual * to, const Packet1dd& from) { EIGEN_DEBUG_ALIGNED_STORE pstore((double*)to, Packet2d(from.v)); } template<> EIGEN_STRONG_INLINE void pstoreu >(duals::dual * to, const Packet1dd& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((double*)to, Packet2d(from.v)); } template<> EIGEN_STRONG_INLINE void prefetch >(const duals::dual * addr) { _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0); } template<> EIGEN_STRONG_INLINE duals::dual pfirst(const Packet1dd& a) { EIGEN_ALIGN16 double res[2]; _mm_store_pd(res, a.v); return duals::dual(res[0],res[1]); } template<> EIGEN_STRONG_INLINE Packet1dd preverse(const Packet1dd& a) { return a; } template<> EIGEN_STRONG_INLINE duals::dual predux(const Packet1dd& a) { return pfirst(a); } template<> EIGEN_STRONG_INLINE Packet1dd preduxp(const Packet1dd* vecs) { return vecs[0]; } template<> EIGEN_STRONG_INLINE duals::dual predux_mul(const Packet1dd& a) { return pfirst(a); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet1dd& /*first*/, const Packet1dd& /*second*/) { // FIXME is it sure we never have to align a Packet1dd? // Even though a duals::dual has 16 bytes, it is not necessarily aligned on a 16 bytes boundary... } }; #if 0 // TODO template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet1dd pmadd(const Packet1dd& x, const Packet1dd& y, const Packet1dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1dd pmul(const Packet1dd& a, const Packet1dd& b) const { return internal::pmul(a, pdconj(b)); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet1dd pmadd(const Packet1dd& x, const Packet1dd& y, const Packet1dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1dd pmul(const Packet1dd& a, const Packet1dd& b) const { return internal::pmul(pdconj(a), b); } }; template<> struct dconj_helper { EIGEN_STRONG_INLINE Packet1dd pmadd(const Packet1dd& x, const Packet1dd& y, const Packet1dd& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1dd pmul(const Packet1dd& a, const Packet1dd& b) const { return pdconj(internal::pmul(a, b)); } }; EIGEN_MAKE_DCONJ_HELPER_DUAL_REAL(Packet1dd,Packet2d) #endif template<> EIGEN_STRONG_INLINE Packet1dd pdiv(const Packet1dd& a, const Packet1dd& b) { // TODO optimize it for SSE3 and 4 //const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x0,0x0,0x80000000,0x0)); //return Packet1cd(_mm_add_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 0, 0), b.v), // _mm_xor_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 1, 1), // vec2d_swizzle1(b.v, 1, 0)), mask))); // TODO optimize it for SSE3 and 4 const __m128d mask = _mm_castsi128_pd(_mm_setr_epi32(0xffffffff,0xffffffff,0x00000000,0x00000000)); return Packet1dd(_mm_div_pd(_mm_add_pd(_mm_and_pd(mask, a.v), _mm_andnot_pd(mask, _mm_sub_pd(_mm_mul_pd(vec2d_swizzle1(a.v, 0, 1), vec2d_swizzle1(b.v, 0, 0)), _mm_mul_pd(vec2d_swizzle1(a.v, 0, 0), vec2d_swizzle1(b.v, 0, 1))))), _mm_add_pd(_mm_and_pd(mask, b.v), _mm_andnot_pd(mask, _mm_mul_pd(vec2d_swizzle1(b.v, 0, 0), vec2d_swizzle1(b.v, 0, 0)))))); } EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock& kernel) { __m128d w1 = _mm_castps_pd(kernel.packet[0].v); __m128d w2 = _mm_castps_pd(kernel.packet[1].v); __m128 tmp = _mm_castpd_ps(_mm_unpackhi_pd(w1, w2)); kernel.packet[0].v = _mm_castpd_ps(_mm_unpacklo_pd(w1, w2)); kernel.packet[1].v = tmp; } template<> EIGEN_STRONG_INLINE Packet2df pblend(const Selector<2>& ifPacket, const Packet2df& thenPacket, const Packet2df& elsePacket) { __m128d result = pblend(ifPacket, _mm_castps_pd(thenPacket.v), _mm_castps_pd(elsePacket.v)); return Packet2df(_mm_castpd_ps(result)); } template<> EIGEN_STRONG_INLINE Packet2df pinsertfirst(const Packet2df& a, duals::dual b) { return Packet2df(_mm_loadl_pi(a.v, reinterpret_cast(&b))); } template<> EIGEN_STRONG_INLINE Packet1dd pinsertfirst(const Packet1dd&, duals::dual b) { return pset1(b); } template<> EIGEN_STRONG_INLINE Packet2df pinsertlast(const Packet2df& a, duals::dual b) { return Packet2df(_mm_loadh_pi(a.v, reinterpret_cast(&b))); } template<> EIGEN_STRONG_INLINE Packet1dd pinsertlast(const Packet1dd&, duals::dual b) { return pset1(b); } } // end namespace internal } // end namespace Eigen #endif // EIGEN_COMPLEX_SSE_H tmp_ns50wwy/src/include/cppduals/duals/arch/SSE/ComplexDual.h0000644000175000017500000002261614163340332024252 0ustar carstencarsten// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2010 Gael Guennebaud // Copyright (C) 2019 Michael Tesch // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_CDUAL_SSE_H #define EIGEN_CDUAL_SSE_H namespace Eigen { namespace internal { //---------- float ---------- struct Packet1cdf { EIGEN_STRONG_INLINE Packet1cdf() {} EIGEN_STRONG_INLINE explicit Packet1cdf(const __m128 & a) : v(a) {} EIGEN_STRONG_INLINE explicit Packet1cdf(const Packet2df & a) : v(a) {} //__m128 v; Packet2df v; }; // Use the packet_traits defined in AVX/ComplexDual.h instead if we're // going to leverage AVX instructions. #if !defined(CPPDUALS_DONT_VECTORIZE_CDUAL) #if !defined(EIGEN_VECTORIZE_AVX) template<> struct packet_traits > > : default_packet_traits { typedef Packet1cdf type; typedef Packet1cdf half; enum { Vectorizable = 1, AlignedOnScalar = 0, size = 1, HasHalfPacket = 0, HasAdd = 1, HasSub = 1, HasMul = 1, HasDiv = 1, HasNegate = 1, HasAbs = 0, HasAbs2 = 0, HasMin = 0, HasMax = 0, HasSetLinear = 0 }; }; #endif #endif template<> struct unpacket_traits { typedef std::complex > type; enum {size=1, alignment=Aligned16, masked_load_available=false, masked_store_available=false, vectorizable=true}; typedef Packet1cdf half; }; template<> EIGEN_STRONG_INLINE Packet1cdf padd(const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_add_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf psub(const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_sub_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf pnegate(const Packet1cdf& a) { return Packet1cdf(pnegate(a.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf pconj(const Packet1cdf& a) { const __m128 mask = _mm_castsi128_ps(_mm_set_epi32(0x80000000,0x80000000,0x0,0x0)); return Packet1cdf(_mm_xor_ps(a.v.v,mask)); } template<> EIGEN_STRONG_INLINE Packet1cdf pmul(const Packet1cdf& a, const Packet1cdf& b) { #if 1 // defined(EIGEN_VECTORIZE_SSE3) const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000,0x00000000,0xffffffff,0xffffffff)); return Packet1cdf(vec4f_swizzle1 (_mm_addsub_ps(_mm_add_ps(_mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 0, 0, 0), vec4f_swizzle1(b.v.v, 0, 2, 1, 3)), _mm_and_ps(mask, _mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 0, 1, 1), vec4f_swizzle1(b.v.v, 0, 0, 0, 2)))), _mm_add_ps(_mm_mul_ps(vec4f_swizzle1(a.v.v, 2, 2, 2, 2), vec4f_swizzle1(b.v.v, 2, 0, 3, 1)), _mm_and_ps(mask, _mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 0, 3, 3), vec4f_swizzle1(b.v.v, 0, 0, 2, 0))))), 0,2,1,3)); #else const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000,0xffffffff,0x00000000,0xffffffff)); const __m128 nega = _mm_castsi128_ps(_mm_setr_epi32(0x80000000,0x80000000,0x00000000,0x00000000)); return Packet1cdf(_mm_add_ps(_mm_add_ps(_mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 0, 0, 0), vec4f_swizzle1(b.v.v, 0, 1, 2, 3)), _mm_and_ps(mask, _mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 1, 0, 1), vec4f_swizzle1(b.v.v, 0, 0, 0, 2)))), _mm_xor_ps (nega, _mm_add_ps(_mm_mul_ps(vec4f_swizzle1(a.v.v, 2, 2, 2, 2), vec4f_swizzle1(b.v.v, 2, 3, 0, 1)), _mm_and_ps(mask, _mm_mul_ps(vec4f_swizzle1(a.v.v, 0, 3, 0, 3), vec4f_swizzle1(b.v.v, 0, 2, 0, 0))))))); #endif return a; } template<> EIGEN_STRONG_INLINE Packet1cdf pand (const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_and_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf por (const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_or_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf pxor (const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_xor_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf pandnot(const Packet1cdf& a, const Packet1cdf& b) { return Packet1cdf(_mm_andnot_ps(a.v.v,b.v.v)); } template<> EIGEN_STRONG_INLINE Packet1cdf pload (const std::complex >* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet1cdf(ploadu((const float*)from)); } template<> EIGEN_STRONG_INLINE Packet1cdf ploadu(const std::complex >* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet1cdf(ploadu((const float*)from)); } template<> EIGEN_STRONG_INLINE Packet1cdf pset1(const std::complex >& from) { /* here we really have to use unaligned loads :( */ return ploadu(&from); } template<> EIGEN_STRONG_INLINE Packet1cdf ploaddup(const std::complex >* from) { return pset1(*from); } // FIXME force unaligned store, this is a temporary fix template<> EIGEN_STRONG_INLINE void pstore > >(std::complex > * to, const Packet1cdf& from) { EIGEN_DEBUG_ALIGNED_STORE pstoreu((float*)to, from.v.v); } template<> EIGEN_STRONG_INLINE void pstoreu > >(std::complex > * to, const Packet1cdf& from) { EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, from.v.v); } template<> EIGEN_STRONG_INLINE void prefetch > >(const std::complex > * addr) { _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0); } template<> EIGEN_STRONG_INLINE std::complex > pfirst(const Packet1cdf& a) { EIGEN_ALIGN16 float res[4]; _mm_store_ps(res, a.v.v); return std::complex >(duals::dual(res[0],res[1]), duals::dual(res[2],res[3])); } template<> EIGEN_STRONG_INLINE Packet1cdf preverse(const Packet1cdf& a) { return a; } template<> EIGEN_STRONG_INLINE std::complex > predux(const Packet1cdf& a) { return pfirst(a); } template<> EIGEN_STRONG_INLINE Packet1cdf preduxp(const Packet1cdf* vecs) { return vecs[0]; } template<> EIGEN_STRONG_INLINE std::complex > predux_mul(const Packet1cdf& a) { return pfirst(a); } template struct palign_impl { static EIGEN_STRONG_INLINE void run(Packet1cdf& /*first*/, const Packet1cdf& /*second*/) { // FIXME is it sure we never have to align a Packet1cdf? // Even though a std::complex > has 16 bytes, it is not necessarily aligned on a 16 bytes boundary... } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdf pmadd(const Packet1cdf& x, const Packet1cdf& y, const Packet1cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdf pmul(const Packet1cdf& a, const Packet1cdf& b) const { return internal::pmul(a, pconj(b)); } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdf pmadd(const Packet1cdf& x, const Packet1cdf& y, const Packet1cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdf pmul(const Packet1cdf& a, const Packet1cdf& b) const { return internal::pmul(pconj(a), b); } }; template<> struct conj_helper { EIGEN_STRONG_INLINE Packet1cdf pmadd(const Packet1cdf& x, const Packet1cdf& y, const Packet1cdf& c) const { return padd(pmul(x,y),c); } EIGEN_STRONG_INLINE Packet1cdf pmul(const Packet1cdf& a, const Packet1cdf& b) const { return pconj(internal::pmul(a, b)); } }; //TODO EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cdf,Packet2df) template<> EIGEN_STRONG_INLINE Packet1cdf pdiv(const Packet1cdf& a, const Packet1cdf& b) { Packet1cdf res = conj_helper().pmul(a,b); Packet2df s = pmul(b.v, b.v); return Packet1cdf(pdiv(res.v, padd(s, Packet2df(_mm_castpd_ps(_mm_shuffle_pd(_mm_castps_pd(s.v), _mm_castps_pd(s.v), 0x1)))))); } EIGEN_STRONG_INLINE Packet1cdf pcplxflip/* */(const Packet1cdf& x) { return Packet1cdf(vec4f_swizzle1(x.v.v, 2, 3, 0, 1)); } } // end namespace internal } // end namespace Eigen #endif // EIGEN_CDUAL_SSE_H tmp_ns50wwy/src/include/cppduals/duals/dual0000644000175000017500000013741414163340332021170 0ustar carstencarsten//===-- duals/dual - Dual number class --------------------------*- C++ -*-===// // // Part of the cppduals project. // https://tesch1.gitlab.io/cppduals // // (c)2019 Michael Tesch. tesch1@gmail.com // // See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for // license information. // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef CPPDUALS_DUAL #define CPPDUALS_DUAL #ifndef PARSED_BY_DOXYGEN #include #include #include #include #include #include #include #endif #if !defined(CPPDUALS_IGNORE_COMPILER_VERSION) && !defined(_WIN32) #if __cplusplus < 201103L #error CPPDUALS needs at least a C++11 compliant compiler #endif #endif /// Configure whether system has POSIX extern int signgam; #ifndef CPPDUALS_HAVE_SIGNGAM #ifndef _WIN32 #ifndef __CYGWIN__ #define CPPDUALS_HAVE_SIGNGAM 1 #endif #endif #endif namespace duals { /** \file dual \brief Dual number class. \mainpage cppduals \ref duals/dual is a single-header [Dual number](https://en.wikipedia.org/wiki/Dual_number) C++ template library that implements numbers of the type \f$(a + b \cdot \epsilon)\f$ where \f$ \epsilon \ne 0\f$, and \f$\epsilon^2 = 0\f$. `duals::dual<>` can be used for "automatic" differentiation, it can also recursively nest with itself for higher orders of differentiation (ie for the second derivative use `duals::dual>`). It can also be used to differentiate parts of complex functions as `std::complex>`. This file can be used stand-alone for dual number support, but for Eigen vectorization support rather the file \ref duals/dual_eigen should be included. ``` #include using namespace duals::literals; template T f(T x) { return pow(x,pow(x,x)); } template T df(T x) { return pow(x,-1. + x + pow(x,x)) * (1. + x*log(x) + x*pow(log(x),2.)); } template T ddf(T x) { return (pow(x,pow(x,x)) * pow(pow(x,x - 1.) + pow(x,x)*log(x)*(log(x) + 1.), 2.) + pow(x,pow(x,x)) * (pow(x,x - 1.) * log(x) + pow(x,x - 1.) * (log(x) + 1.) + pow(x,x - 1.) * ((x - 1.)/x + log(x)) + pow(x,x) * log(x) * pow(log(x) + 1., 2.) )); } int main() { std::cout << " f(2.) = " << f(2.) << "\n"; std::cout << " df(2.) = " << df(2.) << "\n"; std::cout << "ddf(2.) = " << ddf(2.) << "\n"; std::cout << " f(2+1_e) = " << f(2+1_e) << "\n"; std::cout << " f(2+1_e).dpart() = " << f(2+1_e).dpart() << "\n"; duals::hyperduald x(2+1_e,1+0_e); std::cout << " f((2+1_e) + (1+0_e)_e).dpart().dpart() = " << f(x).dpart().dpart() << "\n"; } ``` Produces (notice the derivative in the dual-part): ``` f(2.) = 16 df(2.) = 107.11 ddf(2.) = 958.755 f(2+1_e) = (16+107.11_e) f(2+1_e).dpart() = 107.11 f((2+1_e) + (1+0_e)_e).dpart().dpart() = 958.755 ``` How this works can be seen by inspecting the infinite [Taylor series](https://en.wikipedia.org/wiki/Taylor_series) expansion of a function \f$ f(x) \f$ at \f$ a \f$ with \f$ x = a + b\epsilon \f$. The series truncates itself due to the property \f$ \epsilon^2 = 0 \f$, leaving the function's derivative at \f$ a \f$ in the "dual part" of the result (when \f$ b = 1 \f$): \f[ \begin{split} f(a + b \epsilon) &= f(a) + f'(a)(b \epsilon) + \frac{f''(a)}{2!}(b \epsilon)^2 + \frac{f'''(a)}{3!}(b \epsilon)^3 + \ldots \\ \ &= f(a) + f'(a)(b \epsilon) \end{split} \f] The class is contained in a single c++11 header `#include `, for extended [Eigen](http://eigen.tuxfamily.org) support, instead include the header \ref duals/dual_eigen "#include ". Type X in the templates below can be any value which can be assigned to value_type. Type X also indicates a limitation to dual numbers of the same depth but (possibly) different value_type as `duals::dual`. For example, you can assign (or add/sub/mul/div) `duals::dual` and `duals::dual`, but you can not assign `duals::dual>` to `duals::dual`. Here is a synopsis of the class: ``` namespace duals { template class dual { typedef T value_type; dual(const & re = T(), const & du = T()); dual(const dual &); template dual(const dual &); T rpart() const; T dpart() const; void rpart(T); void dpart(T); dual operator-() const; dual operator+() const; dual & operator= (const T &); dual & operator+=(const T &); dual & operator-=(const T &); dual & operator*=(const T &); dual & operator/=(const T &); dual & operator=(const dual &); template dual & operator= (const dual &); template dual & operator+=(const dual &); template dual & operator-=(const dual &); template dual & operator*=(const dual &); template dual & operator/=(const dual &); // The comparison operators are not strictly well-defined, // they are implemented as comparison of the real part. bool operator ==(const X &b) const; bool operator !=(const X &b) const; bool operator <(const X &b) const; bool operator >(const X &b) const; bool operator <=(const X &b) const; bool operator >=(const X &b) const; bool operator <(const dual &b) const; bool operator >(const dual &b) const; bool operator <=(const dual &b) const; bool operator >=(const dual &b) const; }; // Non-member functions: T rpart(dual) // Real part T dpart(dual) // Dual part dual dconj(dual) // Dual-conjugate dual random(dual low = {0,0}, dual high = {1,0}) dual exp(dual) dual log(dual) dual log10(dual) dual pow(dual, U) dual pow(U, dual) dual pow(dual, dual) dual sqrt(dual) dual cbrt(dual) dual sin(dual) dual cos(dual) dual tan(dual) dual asin(dual) dual acos(dual) dual atan(dual) // TODO: dual sinh(dual) dual cosh(dual) dual tanh(dual) dual asinh(dual) dual acosh(dual) dual atanh(dual) // Non-differentiable operations on the real part. T frexp(duals::dual arg, int* exp ); duals::dual ldexp(duals::dual arg, int exp ); T trunc(duals::dual d); T floor(duals::dual d); T ceil(duals::dual d); T round(duals::dual d); int fpclassify(duals::dual d); bool isfinite(duals::dual d); bool isnormal(duals::dual d); bool isinf(duals::dual d); bool isnan(duals::dual d); // Stream IO template operator>>(basic_istream &, dual &); template operator<<(basic_ostream &, const dual &); } ``` Some useful typedefs: ``` typedef dual dualf; typedef dual duald; typedef dual dualld; typedef dual hyperdualf; typedef dual hyperduald; typedef dual hyperdualld; typedef std::complex cdualf; typedef std::complex cduald; typedef std::complex cdualld; ``` There are also literals for dual parts defined in the inline namespace duals::literals. They are available with `using namespace duals;` or `using namespace duals::literals`. ``` using namespace duals::literals; dualf x = 3 + 4_ef; duald y = 3 + 4_e; dualld z = 3 + 4_el; ``` And in case you dislike iostreams, there are some formatters for the [`{fmt}`](https://github.com/fmtlib/fmt) formatting library. These are disabled by default, but can be enabled by `#define CPPDUALS_LIBFMT` for the `dual<>` formatter, and/or `#define CPPDUALS_LIBFMT_COMPLEX` for the std::complex<> formatter. There are three custom formatting flags that control how the dual numbers are printed, these must come before the normal `{fmt}` formatting spec: '$', '*', ','. For me these are about 3x faster than iostreams. ``` #define CPPDUALS_LIBFMT #define CPPDUALS_LIBFMT_COMPLEX #inlcude using namespace duals::literals; ... string s = fmt::format("{:}", 1 + 2_e); // s = "(1.0+2.0_e)" string s = fmt::format("{:g}", 1 + 2_e); // s = "(1+2_e)" string s = fmt::format("{:*}", 1 + 2_e); // s = "(1.0+2.0*e)" string s = fmt::format("{:,}", 1 + 2_e); // s = "(1.0,2.0)" string s = fmt::format("{:*,g}", complexd(1,2_e)); // s = "((1)+(0,2)*i)" ``` The "archaic Greek epsilon" logo is from [Wikimedia commons](https://commons.wikimedia.org/wiki/File:Greek_Epsilon_archaic.svg) Some casual reading material: - [ON QUATERNIONS, William Rowan Hamilton, Proceedings of the Royal Irish Academy, 3 (1847), pp. 1–16.](https://www.maths.tcd.ie/pub/HistMath/People/Hamilton/Quatern2/) - [Basic Space-Time Transformations Expressed by Means of Two-Component Number Systems](https://doi.org/10.12693%2Faphyspola.86.291) */ #ifndef PARSED_BY_DOXYGEN template class dual; #endif /// Check if T is dual<>, match non-duals. template struct is_dual : std::false_type {}; #ifndef PARSED_BY_DOXYGEN /// Check if T is dual<>, match dual<>. template struct is_dual > : std::true_type {}; #endif /// Check if T is std::complex<>, match non- std::complex<>. template struct is_complex : std::false_type {}; #ifndef PARSED_BY_DOXYGEN /// Check if T is std::complex<>, match std::complex<>. template struct is_complex > : std::true_type {}; #endif /// Dual_traits helper class. template struct dual_traits { /// Depth of T - for T=scalar this is 0. for dual_traits it /// is 1. enum { depth = 0 }; // -Wenum-compare /// The real storage type. typedef T real_type; }; #ifndef PARSED_BY_DOXYGEN /// dual_traits for dual<> types template struct dual_traits> { /// Depth to which this dual<> type is nested. One (1) is a /// first-level dual, whereas non-duals have a depth of 0. enum { depth = dual_traits::depth + 1 }; /// The real storage type. typedef typename dual_traits::real_type real_type; }; template struct dual_traits>> { /// complex> have the same 'depth' as their dual. enum { depth = dual_traits::depth }; /// The real storage type. typedef typename dual_traits::real_type real_type; }; namespace detail { template struct Void { typedef void type; }; template struct has_member_type : std::false_type {}; template struct has_member_type::type > : std::true_type { struct wrap { typedef typename T::type type; typedef typename T::type ReturnType; }; }; } // namespace detail /// Promote two types - default according to common_type template struct promote : std::common_type {}; /// Can types A and B be promoted to a common type? template using can_promote = detail::has_member_type>; template struct promote, dual, typename std::enable_if<(can_promote::value && (int)dual_traits::depth == (int)dual_traits::depth)>::type> { typedef dual::type> type; }; template struct promote, U, typename std::enable_if<(can_promote::value && (int)dual_traits::depth >= (int)dual_traits::depth && !is_complex::value)>::type> { typedef dual::type> type; }; template struct promote, typename std::enable_if<(can_promote::value && (int)dual_traits::depth >= (int)dual_traits::depth && !is_complex::value)>::type> { typedef dual::type> type; }; // ///////////////////////////////////////////////// template struct promote, std::complex, typename std::enable_if<(can_promote::value && (is_dual::value || is_dual::value))>::type> { typedef std::complex::type> type; }; template struct promote, U, typename std::enable_if<(can_promote::value && (is_dual::value || is_dual::value) && !is_complex::value)>::type> { typedef std::complex::type> type; }; template struct promote, typename std::enable_if<(can_promote::value && (is_dual::value || is_dual::value) && !is_complex::value)>::type> { typedef std::complex::type> type; }; // ///////////////////////////////////////////////// #endif // PARSED_BY_DOXYGEN } // namespace duals #ifndef PARSED_BY_DOXYGEN #define NOMACRO // thwart macroification #ifdef EIGEN_PI #define MY_PI EIGEN_PI #else #define MY_PI M_PI #endif #endif // PARSED_BY_DOXYGEN #ifdef _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_BEGIN_NAMESPACE_STD #else namespace std { #endif #ifdef CPPDUALS_ENABLE_STD_IS_ARITHMETIC /// Duals are as arithmetic as their value_type is arithmetic. template struct is_arithmetic> : is_arithmetic {}; #endif // CPPDUALS_ENABLE_IS_ARITHMETIC /// Duals are compound types. template struct is_compound> : true_type {}; // Modification of std::numeric_limits<> per // C++03 17.4.3.1/1, and C++11 18.3.2.3/1. template struct numeric_limits> : numeric_limits { static constexpr bool is_specialized = true; static constexpr duals::dual min NOMACRO () { return numeric_limits::min NOMACRO (); } static constexpr duals::dual lowest() { return numeric_limits::lowest(); } static constexpr duals::dual max NOMACRO () { return numeric_limits::max NOMACRO (); } static constexpr duals::dual epsilon() { return numeric_limits::epsilon(); } static constexpr duals::dual round_error() { return numeric_limits::round_error(); } static constexpr duals::dual infinity() { return numeric_limits::infinity(); } static constexpr duals::dual quiet_NaN() { return numeric_limits::quiet_NaN(); } static constexpr duals::dual signaling_NaN() { return numeric_limits::signaling_NaN(); } static constexpr duals::dual denorm_min() { return numeric_limits::denorm_min(); } }; #ifdef _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD #else } // namespace std #endif namespace duals { #ifndef PARSED_BY_DOXYGEN // T and X are wrapped in a dual<> #define CPPDUALS_ONLY_SAME_DEPTH_AS_T(T,X) \ typename std::enable_if<(int)duals::dual_traits::depth == \ (int)duals::dual_traits::depth, int>::type = 0, \ typename std::enable_if::value,int>::type = 0 // Both T and U are wrapped in a dual<> #define CPPDUALS_ENABLE_SAME_DEPTH_AND_COMMON_T(T,U) \ typename std::enable_if<(int)duals::dual_traits::depth == \ (int)duals::dual_traits::depth, int>::type = 0, \ typename std::enable_if::value,int>::type = 0, \ typename common_t = dual::type> // T is wrapped in a dual<>, U may or may not be. #define CPPDUALS_ENABLE_LEQ_DEPTH_AND_COMMON_T(T,U) \ typename std::enable_if<((int)duals::dual_traits::depth >= \ (int)duals::dual_traits::depth), int>::type = 0, \ typename std::enable_if,U>::value,int>::type = 0, \ typename common_t = typename duals::promote, U>::type // T is wrapped in complex> #define CPPDUALS_ENABLE_LEQ_DEPTH_AND_CX_COMMON_T(T,U) \ typename std::enable_if<((int)duals::dual_traits::depth >= \ (int)duals::dual_traits::depth), int>::type = 0, \ typename std::enable_if>,U>::value,int>::type = 0, \ typename common_t = typename duals::promote >,U>::type #define CPPDUALS_ENABLE_IF(...) typename std::enable_if< (__VA_ARGS__) , int>::type = 0 #endif /*! \page user Background TODO: Add text here... */ /// Abstract dual number class. Can nest with other dual numbers and /// complex numbers. template class dual { public: /// Class type of rpart() and dpart(). This type can be nested /// dual<> or std::complex<>. typedef T value_type; private: /// The real part. value_type _real; /// The dual part. value_type _dual; public: /// Construct dual from optional real and dual parts. constexpr dual(const value_type re = value_type(), const value_type du = value_type()) : _real(re), _dual(du) {} /// Copy construct from a dual of equal depth. #if defined (_MSC_VER) #pragma warning (disable : 4244) /* floats are not used in HICUM */ #endif template::value)> dual(const dual & x) : _real(x.rpart()), _dual(x.dpart()) {} /// Cast to a complex> with real part equal to *this. operator std::complex>() { return std::complex>(*this); } /// Explicit cast to an arithmetic type retains the rpart() template ::value && !is_dual::value)> explicit operator X() const { return X(_real); } /// Get the real part. T rpart() const { return _real; } /// Get the dual part. T dpart() const { return _dual; } /// Set the real part. void rpart(value_type re) { _real = re; } /// Get the dual part. void dpart(value_type du) { _dual = du; } /// Unary negation dual operator-() const { return dual(-_real, -_dual); } /// Unary nothing dual operator+() const { return *this; } /// Assignment of `value_type` assigns the real part and zeros the dual part. dual & operator= (const T & x) { _real = x; _dual = value_type(); return *this; } /// Add a relatively-scalar to this dual. dual & operator+=(const T & x) { _real += x; return *this; } /// Subtract a relatively-scalar from this dual. dual & operator-=(const T & x) { _real -= x; return *this; } /// Multiply a relatively-scalar with this dual. dual & operator*=(const T & x) { _real *= x; _dual *= x; return *this; } /// Divide this dual by relatively-scalar. dual & operator/=(const T & x) { _real /= x; _dual /= x; return *this; } //dua & operator=(const dual & x) { _real = x.rpart(); _dual = x.dpart(); } template dual & operator= (const dual & x) { _real = x.rpart(); _dual = x.dpart(); return *this; } /// Add a dual of the same depth to this dual. template dual & operator+=(const dual & x) { _real += x.rpart(); _dual += x.dpart(); return *this; } /// Subtract a dual of the same depth from this dual. template dual & operator-=(const dual & x) { _real -= x.rpart(); _dual -= x.dpart(); return *this; } /// Multiply this dual with a dual of same of lower depth. template dual & operator*=(const dual & x) { _dual = _real * x.dpart() + _dual * x.rpart(); _real = _real * x.rpart(); return *this; } /// Divide this dual by another dual of the same or lower depth. template dual & operator/=(const dual & x) { _dual = (_dual * x.rpart() - _real * x.dpart()) / (x.rpart() * x.rpart()); _real = _real / x.rpart(); return *this; } //The following comparison operators are not strictly well-defined, //they are implemented as comparison of the real parts. #if 0 /// Compare this dual with another dual, comparing real parts for equality. template bool operator ==(const dual &b) const { return _real == b.rpart(); } /// Compare this dual with another dual, comparing real parts for inequality. template bool operator !=(const dual &b) const { return _real != b.rpart(); } /// Compare real part against real part of b template bool operator <(const dual &b) const { return _real < b.rpart(); } /// Compare real part against real part of b template bool operator >(const dual &b) const { return _real > b.rpart(); } /// Compare real part against real part of b template bool operator <=(const dual &b) const { return _real <= b.rpart(); } /// Compare real part against real part of b template bool operator >=(const dual &b) const { return _real >= b.rpart(); } #endif }; /// Get the dual's real part. template T rpart(const dual & x) { return x.rpart(); } /// Get the dual's dual part. template T dpart(const dual & x) { return x.dpart(); } /// R-part of complex> is non-dual complex<> (not to be confused with real()) template std::complex rpart(const std::complex> & x) { return std::complex(x.real().rpart(), x.imag().rpart()); } /// Dual part of complex> is complex<> template std::complex dpart(const std::complex> & x) { return std::complex(x.real().dpart(), x.imag().dpart()); } /// Get a non-dual's real part. template ::value && !std::is_compound::value) || is_complex::value)> T rpart(const T & x) { return x; } /// Get a non-dual's dual part := zero. template ::value && !std::is_compound::value) || is_complex::value)> T dpart(const T & ) { return T(0); } #ifndef PARSED_BY_DOXYGEN /// Dual +-*/ ops with another entity #define CPPDUALS_BINARY_OP(op) \ template \ common_t \ operator op(const dual & z, const dual & w) { \ common_t x(z); \ return x op##= w; \ } \ template>>::value)> \ common_t \ operator op(const dual & z, const U & w) { \ common_t x(z); \ return x op##= w; \ } \ template>>::value)> \ common_t \ operator op(const U & z, const dual & w) { \ common_t x(z); \ return x op##= w; \ } \ template>>::value)> \ common_t \ operator op(const std::complex> & z, const U & w) { \ common_t x(z); \ return x op##= w; \ } \ template>>::value)> \ common_t \ operator op(const U & z, const std::complex> & w) { \ common_t x(z); \ return x op##= w; \ } CPPDUALS_BINARY_OP(+) CPPDUALS_BINARY_OP(-) CPPDUALS_BINARY_OP(*) CPPDUALS_BINARY_OP(/) /// Dual compared to a non-complex lower rank thing #define CPPDUALS_LHS_COMPARISON(op) \ template \ bool \ operator op(const dual & a, const dual & b) { \ return a.rpart() op b.rpart(); \ } \ template::value)> \ bool \ operator op(const U & a, const dual & b) { \ return a op b.rpart(); \ } \ template::value)> \ bool \ operator op(const dual & a, const U & b) { \ return a.rpart() op b; \ } CPPDUALS_LHS_COMPARISON(<) CPPDUALS_LHS_COMPARISON(>) CPPDUALS_LHS_COMPARISON(<=) CPPDUALS_LHS_COMPARISON(>=) CPPDUALS_LHS_COMPARISON(==) CPPDUALS_LHS_COMPARISON(!=) #endif // PARSED_BY_DOXYGEN namespace randos { // Random real value between a and b. template, CPPDUALS_ENABLE_IF(!is_complex::value && !is_dual::value)> T random(T a = T(0), T b = T(1)) { static std::default_random_engine generator; dist distribution(a, b); return distribution(generator); } template, CPPDUALS_ENABLE_IF(!is_complex::value && !is_dual::value)> T random2(T a = T(0), T b = T(1)) { return random(a,b); } // Helper class for testing - also random value in dual part. template ::value)> DT random2(DT a = DT(0,0), DT b = DT(1,1)) { using randos::random; return DT(a.rpart() + random2() * (b.rpart() - a.rpart()), a.dpart() + random2() * (b.dpart() - a.dpart())); } // Helper class for testing - also random value in dual part of the complex. template::value)> CT random2(CT a = CT(0,0), CT b = CT(1,1)) { return CT(a.real() + random2() * (b.real() - a.real()), a.imag() + random2() * (b.imag() - a.imag())); } } // randos /// Random real and dual parts, used by Eigen's Random(), by default // the returned value has zero dual part and is in the range [0+0_e, // 1+0_e]. template , CPPDUALS_ENABLE_IF(is_dual
::value)> DT random(DT a = DT(0,0), DT b = DT(1,0)) { using randos::random; return DT(random(a.rpart(),b.rpart()), random(a.dpart(),b.dpart())); } /// Complex Conjugate of a dual is just the dual. template dual conj(const dual & x) { return x; } /// Conjugate a thing that's not dual and not complex -- it has no /// complex value so just return it. This is different from /// std::conj() which promotes the T to a std::complex. template::value && !is_complex::value && std::is_arithmetic::value)> T conj(const T & x) { return x; } /// Dual Conjugate, such that x*dconj(x) = rpart(x)^2. Different /// function name from complex conjugate conj(). template dual dconj(const dual & x) { return dual(x.rpart(), - x.dpart()); } /// Dual Conjugate of a complex, such that x*dconj(x) = rpart(x)^2. /// Different function name from complex conjugate conj(). template std::complex dconj(const std::complex & x) { return std::complex(dconj(x.real()), dconj(x.imag())); } /// Conjugate a thing that's not dual and not complex. template::value && !is_complex::value && std::is_arithmetic::value)> T dconj(const T & x) { return x; } /// Exponential e^x template dual exp(const dual & x) { using std::exp; T v = exp(x.rpart()); return dual(v, v * x.dpart()); } /// Natural log ln(x) template dual log(const dual & x) { using std::log; T v = log(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / x.rpart()); } template dual log10(const dual & x) { using std::log; return log(x) / log(static_cast(10)); } template dual log2(const dual & x) { using std::log; return log(x) / log(static_cast(2)); } template common_t pow(const dual & x, const dual & y) { using std::pow; using std::log; T v = pow(x.rpart(), y.rpart()); return common_t(v, x.dpart() * y.rpart() * pow(x.rpart(), y.rpart() - T(1)) + y.dpart() * log(x.rpart()) * v); } template common_t pow(const dual & x, const U & y) { using std::pow; return common_t(pow(x.rpart(), y), x.dpart() * y * pow(x.rpart(), y - U(1))); } template common_t pow(const U & x, const dual & y) { return pow(common_t(x), y); } namespace utils { template int sgn(T val) { return (T(0) < val) - (val < T(0)); } } template dual abs(const dual & x) { using std::abs; return dual(abs(x.rpart()), x.dpart() * utils::sgn(x.rpart())); } template dual fabs(const dual & x) { using std::fabs; return dual(fabs(x.rpart()), x.dpart() * utils::sgn(x.rpart())); } #if 0 template dual abs2(const dual & x) { using std::abs; return dual(x.rpart() * x.rpart(), xxx x.dpart() * utils::sgn(x.rpart())); } #endif template duals::dual copysign(const duals::dual & x, const duals::dual & y) { using std::copysign; T r = copysign(x.rpart(), y.rpart()); return duals::dual(r, r == x.rpart() ? x.dpart() : -x.dpart()); } template duals::dual hypot(const duals::dual & x, const duals::dual & y) { return sqrt(x*x + y*y); } template duals::dual scalbn(const duals::dual & arg, int ex) { return arg * std::pow((T)2, ex); } template duals::dual (fmax)(const duals::dual & x, const duals::dual & y) { return x.rpart() > y.rpart() ? x : y; } template duals::dual (fmin)(const duals::dual & x, const duals::dual & y) { return x.rpart() <= y.rpart() ? x : y; } template duals::dual logb(const duals::dual & x) { return duals::log2(x); } template int (fpclassify)(const duals::dual & d) { using std::fpclassify; return (fpclassify)(d.rpart()); } template bool (isfinite)(const duals::dual & d) { using std::isfinite; return (isfinite)(d.rpart()); } template bool (isnormal)(const duals::dual & d) { using std::isnormal; return (isnormal)(d.rpart()); } template bool (isinf)(const duals::dual & d) { using std::isinf; return (isinf)(d.rpart()); } template bool (isnan)(const duals::dual & d) { using std::isnan; return (isnan)(d.rpart()); } template bool (signbit)(const duals::dual & d) { using std::signbit; return (signbit)(d.rpart()); } template dual sqrt(const dual & x) { using std::sqrt; T v = sqrt(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / (T(2) * v) ); } template dual cbrt(const dual & x) { using std::cbrt; T v = cbrt(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / (T(3) * v * v) ); } template dual sin(const dual & x) { using std::sin; using std::cos; return dual(sin(x.rpart()), x.dpart() * cos(x.rpart())); } template dual cos(const dual & x) { using std::cos; using std::sin; return dual(cos(x.rpart()), -sin(x.rpart()) * x.dpart()); } template dual tan(const dual & x) { using std::tan; T v = tan(x.rpart()); return dual(v, x.dpart() * (v*v + 1)); } template dual asin(const dual & x) { using std::asin; using std::sqrt; T v = asin(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / sqrt(1 - x.rpart()*x.rpart())); } template dual acos(const dual & x) { using std::acos; using std::sqrt; T v = acos(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, -x.dpart() / sqrt(1 - x.rpart()*x.rpart())); } template dual atan(const dual & x) { using std::atan; T v = atan(x.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / (1 + x.rpart()*x.rpart())); } template dual atan2(const dual & x, const dual & y) { using std::atan2; T v = atan2(x.rpart(), y.rpart()); if (x.dpart() == T(0)) return v; else return dual(v, x.dpart() / (1 + x.rpart()*x.rpart())); } // TODO template dual sinh(const dual & x); template dual cosh(const dual & x); template dual tanh(const dual & x); template dual asinh(const dual & x); template dual acosh(const dual & x); template dual atanh(const dual & x); template dual log1p(const dual & x); template dual expm1(const dual & x); /// The error function. Make sure to `#include ` before /// `#include ` to use this function. template dual erf(const dual & x) { using std::erf; using std::sqrt; using std::pow; using std::exp; return dual(erf(x.rpart()), x.dpart() * T(2)/sqrt(T(MY_PI)) * exp(-pow(x.rpart(),T(2)))); } /// Error function complement (1 - erf()). template dual erfc(const dual & x) { using std::erfc; using std::sqrt; using std::pow; using std::exp; return dual(erfc(x.rpart()), x.dpart() * -T(2)/sqrt(T(MY_PI)) * exp(-pow(x.rpart(),T(2)))); } /// Gamma function. Approximation of the dual part. // TODO specialize for integers template dual tgamma(const dual & x) { using std::tgamma; T v = tgamma(x.rpart()); if (x.dpart() == T(0)) return v; else { int errno_saved = errno; T h(T(1) / (1ull << (std::numeric_limits::digits / 3))); T w((tgamma(x.rpart()+h) - tgamma(x.rpart()-h))/(2*h)); errno = errno_saved; return dual(v, x.dpart() * w); } } /// Log of absolute value of gamma function. Approximation of the dual part. template dual lgamma(const dual & x) { using std::lgamma; T v = lgamma(x.rpart()); if (x.dpart() == T(0)) return v; else { #if CPPDUALS_HAVE_SIGNGAM int signgam_saved = signgam; #endif int errno_saved = errno; T h(T(1) / (1ull << (std::numeric_limits::digits / 3))); T w((lgamma(x.rpart()+h) - lgamma(x.rpart()-h))/(2*h)); #if CPPDUALS_HAVE_SIGNGAM signgam = signgam_saved; #endif errno = errno_saved; return dual(v, x.dpart() * w); } } /// Putto operator template std::basic_ostream<_CharT, _Traits> & operator<<(std::basic_ostream<_CharT, _Traits> & os, const dual & x) { std::basic_ostringstream<_CharT, _Traits> s; s.flags(os.flags()); s.imbue(os.getloc()); s.precision(os.precision()); s << '(' << x.rpart() << (x.dpart() < 0 ? "" : "+") << x.dpart() << "_e" << (std::is_same::type,float>::value ? "f" : std::is_same::type,double>::value ? "" : std::is_same::type,long double>::value ? "l" : "") << ")"; return os << s.str(); } /// Stream reader template std::basic_istream & operator>>(std::basic_istream & is, dual & x) { if (is.good()) { ws(is); if (is.peek() == CharT('(')) { is.get(); T r; is >> r; if (!is.fail()) { CharT c = is.peek(); if (c != CharT('_')) { ws(is); c = is.peek(); } if (c == CharT('+') || c == CharT('-') || c == CharT('_')) { if (c == CharT('+')) is.get(); T d; if (c == CharT('_')) { d = r; r = 0; } else is >> d; if (!is.fail()) { ws(is); c = is.peek(); if (c == CharT('_')) { is.get(); c = is.peek(); if (c == CharT('e')) { is.get(); c = is.peek(); if ((c == 'f' && !std::is_same::type,float>::value) || (c == 'l' && !std::is_same::type,long double>::value)) is.setstate(std::ios_base::failbit); else { if (c == 'f' || c == 'l') is.get(); ws(is); c = is.peek(); if (c == ')') { is.get(); x = dual(r, d); } else is.setstate(std::ios_base::failbit); } } else is.setstate(std::ios_base::failbit); } else is.setstate(std::ios_base::failbit); } else is.setstate(std::ios_base::failbit); } else if (c == CharT(')')) { is.get(); x = dual(r, T(0)); } else is.setstate(std::ios_base::failbit); } else is.setstate(std::ios_base::failbit); } else { T r; is >> r; if (!is.fail()) x = dual(r, T(0)); else is.setstate(std::ios_base::failbit); } } else is.setstate(std::ios_base::failbit); return is; } #if __cpp_user_defined_literals >= 200809 /// Dual number literals in namespace duals::literals inline namespace literals { using duals::dual; constexpr dual operator""_ef(long double du) { return { 0.0f, static_cast(du) }; } constexpr dual operator""_ef(unsigned long long du) { return { 0.0f, static_cast(du) }; } constexpr dual operator""_e(long double du) { return { 0.0, static_cast(du) }; } constexpr dual operator""_e(unsigned long long du) { return { 0.0, static_cast(du) }; } constexpr dual operator""_el(long double du) { return { 0.0l, du }; } constexpr dual operator""_el(unsigned long long du) { return { 0.0l, static_cast(du) }; } } #endif typedef dual dualf; typedef dual duald; typedef dual dualld; typedef dual hyperdualf; typedef dual hyperduald; typedef dual hyperdualld; typedef std::complex cdualf; typedef std::complex cduald; typedef std::complex cdualld; } // namespace duals #ifdef CPPDUALS_LIBFMT #include /// duals::dual<> Formatter for libfmt https://github.com/fmtlib/fmt /// /// Formats a dual number (r,d) as (r+d_e), offering the same /// formatting options as the underlying type - with the addition of /// three optional format options, only one of which may appear /// directly after the ':' in the format spec: '$', '*', and ',". The /// '*' flag changes the separating _ to a *, producing (r+d*e), where /// r and d are the formatted value_type values. The ',' flag simply /// prints the real and dual parts separated by a comma. As a /// concrete exmple, this formatter can produce either (3+5.4_e) or /// (3+5.4*e) or (3,5.4) for a dual using the specs {:g}, /// {:*g}, or {:,g}, respectively. When the '*' is NOT specified, the /// output should be compatible with the input operator>> and the dual /// literals below. (this implementation is a bit hacky - glad for /// cleanups). template struct fmt::formatter,Char> : public fmt::formatter { typedef fmt::formatter base; enum style { expr, star, pair } style_ = expr; internal::dynamic_format_specs specs_; FMT_CONSTEXPR auto parse(format_parse_context & ctx) -> decltype(ctx.begin()) { using handler_type = internal::dynamic_specs_handler; auto type = internal::type_constant::value; internal::specs_checker handler(handler_type(specs_, ctx), type); auto it = ctx.begin(); switch (*it) { case '$': style_ = style::expr; ctx.advance_to(++it); break; case '*': style_ = style::star; ctx.advance_to(++it); break; case ',': style_ = style::pair; ctx.advance_to(++it); break; default: break; } parse_format_specs(ctx.begin(), ctx.end(), handler); return base::parse(ctx); } template auto format(const duals::dual & x, FormatCtx & ctx) -> decltype(ctx.out()) { format_to(ctx.out(), "("); if (style_ == style::pair) { base::format(x.rpart(), ctx); format_to(ctx.out(), ","); base::format(x.dpart(), ctx); return format_to(ctx.out(), ")"); } if (x.rpart() || !x.dpart()) base::format(x.rpart(), ctx); if (x.dpart()) { if (x.rpart() && x.dpart() >= 0 && specs_.sign != sign::plus) format_to(ctx.out(), "+"); base::format(x.dpart(), ctx); if (style_ == style::star) format_to(ctx.out(), "*e"); else format_to(ctx.out(), "_e"); if (std::is_same::type,float>::value) format_to(ctx.out(), "f"); if (std::is_same::type,long double>::value) format_to(ctx.out(), "l"); } return format_to(ctx.out(), ")"); } }; #endif #ifdef CPPDUALS_LIBFMT_COMPLEX #ifndef CPPDUALS_LIBFMT #include #endif /// std::complex<> Formatter for libfmt https://github.com/fmtlib/fmt /// /// libfmt does not provide a formatter for std::complex<>, although /// one is proposed for c++20. Anyway, at the expense of a k or two, /// you can define CPPDUALS_LIBFMT_COMPLEX and get this one. /// /// The standard iostreams formatting of complex numbers is (a,b), /// where a and b are the real and imaginary parts. This formats a /// complex number (a+bi) as (a+bi), offering the same formatting /// options as the underlying type - with the addition of three /// optional format options, only one of which may appear directly /// after the ':' in the format spec (before any fill or align): '$' /// (the default if no flag is specified), '*', and ',". The '*' flag /// adds a * before the 'i', producing (a+b*i), where a and b are the /// formatted value_type values. The ',' flag simply prints the real /// and complex parts separated by a comma (same as iostreams' format). /// As a concrete exmple, this formatter can produce either (3+5.4i) /// or (3+5.4*i) or (3,5.4) for a complex using the specs {:g} /// | {:$g}, {:*g}, or {:,g}, respectively. (this implementation is a /// bit hacky - glad for cleanups). /// template struct fmt::formatter,Char> : public fmt::formatter { typedef fmt::formatter base; enum style { expr, star, pair } style_ = expr; internal::dynamic_format_specs specs_; FMT_CONSTEXPR auto parse(format_parse_context & ctx) -> decltype(ctx.begin()) { using handler_type = internal::dynamic_specs_handler; auto type = internal::type_constant::value; internal::specs_checker handler(handler_type(specs_, ctx), type); auto it = ctx.begin(); switch (*it) { case '$': style_ = style::expr; ctx.advance_to(++it); break; case '*': style_ = style::star; ctx.advance_to(++it); break; case ',': style_ = style::pair; ctx.advance_to(++it); break; default: break; } parse_format_specs(ctx.begin(), ctx.end(), handler); //todo: fixup alignment return base::parse(ctx); } template auto format(const std::complex & x, FormatCtx & ctx) -> decltype(ctx.out()) { format_to(ctx.out(), "("); if (style_ == style::pair) { base::format(x.real(), ctx); format_to(ctx.out(), ","); base::format(x.imag(), ctx); return format_to(ctx.out(), ")"); } if (x.real() || !x.imag()) base::format(x.real(), ctx); if (x.imag()) { if (x.real() && x.imag() >= 0 && specs_.sign != sign::plus) format_to(ctx.out(), "+"); base::format(x.imag(), ctx); if (style_ == style::star) format_to(ctx.out(), "*i"); else format_to(ctx.out(), "i"); if (std::is_same::type,float>::value) format_to(ctx.out(), "f"); if (std::is_same::type,long double>::value) format_to(ctx.out(), "l"); } return format_to(ctx.out(), ")"); } }; #endif #ifdef _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_BEGIN_NAMESPACE_STD #else namespace std { #endif #ifndef PARSED_BY_DOXYGEN #define make_math(T) \ inline T (frexp)(const duals::dual & arg, int* exp ) { return (frexp)(arg.rpart(), exp); } \ inline duals::dual (ldexp)(const duals::dual & arg, int exp ) { return arg * std::pow((T)2,exp); } \ inline T (trunc)(const duals::dual & d) { return (trunc)(d.rpart()); } \ inline T (floor)(const duals::dual & d) { return (floor)(d.rpart()); } \ inline T (ceil)(const duals::dual & d) { return (ceil)(d.rpart()); } \ inline T (round)(const duals::dual & d) { return (round)(d.rpart()); } \ inline int (fpclassify)(const duals::dual & d) { return (fpclassify)(d.rpart()); } \ inline bool (isfinite)(const duals::dual & d) { return (isfinite)(d.rpart()); } \ inline bool (isnormal)(const duals::dual & d) { return (isnormal)(d.rpart()); } \ inline bool (isinf)(const duals::dual & d) { return (isinf)(d.rpart()); } \ inline bool (isnan)(const duals::dual & d) { return (isnan)(d.rpart()); } \ make_math(float) make_math(double) make_math(long double) #undef make_math #endif // PARSED_BY_DOXYGEN #ifdef _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_END_NAMESPACE_STD #else } // namespace std #endif #endif // CPPDUALS_DUAL tmp_ns50wwy/src/include/cppduals/LICENSE.txt0000644000175000017500000004052614163340332021030 0ustar carstencarstenMozilla Public License Version 2.0 ================================== 1. Definitions -------------- 1.1. "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software. 1.2. "Contributor Version" means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor's Contribution. 1.3. "Contribution" means Covered Software of a particular Contributor. 1.4. "Covered Software" means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof. 1.5. "Incompatible With Secondary Licenses" means (a) that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or (b) that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License. 1.6. "Executable Form" means any form of the work other than Source Code Form. 1.7. "Larger Work" means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software. 1.8. "License" means this document. 1.9. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License. 1.10. "Modifications" means any of the following: (a) any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or (b) any new file in Source Code Form that contains any Covered Software. 1.11. "Patent Claims" of a Contributor means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version. 1.12. "Secondary License" means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses. 1.13. "Source Code Form" means the form of the work preferred for making modifications. 1.14. "You" (or "Your") means an individual or a legal entity exercising rights under this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. License Grants and Conditions -------------------------------- 2.1. Grants Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: (a) under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and (b) under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version. 2.2. Effective Date The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution. 2.3. Limitations on Grant Scope The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor: (a) for any code that a Contributor has removed from Covered Software; or (b) for infringements caused by: (i) Your and any other third party's modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or (c) under Patent Claims infringed by Covered Software in the absence of its Contributions. This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4). 2.4. Subsequent Licenses No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3). 2.5. Representation Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License. 2.6. Fair Use This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents. 2.7. Conditions Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1. 3. Responsibilities ------------------- 3.1. Distribution of Source Form All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients' rights in the Source Code Form. 3.2. Distribution of Executable Form If You distribute Covered Software in Executable Form then: (a) such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and (b) You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients' rights in the Source Code Form under this License. 3.3. Distribution of a Larger Work You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s). 3.4. Notices You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies. 3.5. Application of Additional Terms You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction. 4. Inability to Comply Due to Statute or Regulation --------------------------------------------------- If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Termination -------------- 5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice. 5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate. 5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination. ************************************************************************ * * * 6. Disclaimer of Warranty * * ------------------------- * * * * Covered Software is provided under this License on an "as is" * * basis, without warranty of any kind, either expressed, implied, or * * statutory, including, without limitation, warranties that the * * Covered Software is free of defects, merchantable, fit for a * * particular purpose or non-infringing. The entire risk as to the * * quality and performance of the Covered Software is with You. * * Should any Covered Software prove defective in any respect, You * * (not any Contributor) assume the cost of any necessary servicing, * * repair, or correction. This disclaimer of warranty constitutes an * * essential part of this License. No use of any Covered Software is * * authorized under this License except under this disclaimer. * * * ************************************************************************ ************************************************************************ * * * 7. Limitation of Liability * * -------------------------- * * * * Under no circumstances and under no legal theory, whether tort * * (including negligence), contract, or otherwise, shall any * * Contributor, or anyone who distributes Covered Software as * * permitted above, be liable to You for any direct, indirect, * * special, incidental, or consequential damages of any character * * including, without limitation, damages for lost profits, loss of * * goodwill, work stoppage, computer failure or malfunction, or any * * and all other commercial damages or losses, even if such party * * shall have been informed of the possibility of such damages. This * * limitation of liability shall not apply to liability for death or * * personal injury resulting from such party's negligence to the * * extent applicable law prohibits such limitation. Some * * jurisdictions do not allow the exclusion or limitation of * * incidental or consequential damages, so this exclusion and * * limitation may not apply to You. * * * ************************************************************************ 8. Litigation ------------- Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party's ability to bring cross-claims or counter-claims. 9. Miscellaneous ---------------- This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor. 10. Versions of the License --------------------------- 10.1. New Versions Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number. 10.2. Effect of New Versions You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward. 10.3. Modified Versions If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License). 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached. Exhibit A - Source Code Form License Notice ------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice. You may add additional accurate notices of copyright ownership. Exhibit B - "Incompatible With Secondary Licenses" Notice --------------------------------------------------------- This Source Code Form is "Incompatible With Secondary Licenses", as defined by the Mozilla Public License, v. 2.0. tmp_ns50wwy/src/include/cppduals/paper/0000755000175000017500000000000014163340332020305 5ustar carstencarstentmp_ns50wwy/src/include/cppduals/paper/paper.bib0000644000175000017500000000700214163340332022071 0ustar carstencarsten% % biber --tool --output_align --output_indent=2 --output_fieldcase=lower paper.bib % @misc{eigenweb, author = {Guennebaud, Gaël and Jacob, Benoît and others}, date = {2010}, howpublished = {\url{http://eigen.tuxfamily.org}}, title = {Eigen v3}, } @misc{autodiff, author = {Leal, Allan}, date = {2019}, howpublished = {\url{https://github.com/autodiff/autodiff}}, title = {Autodiff}, } @misc{autodifforg, author = {Bücker, Martin and Hovland, Paul}, date = {2019}, howpublished = {\url{http://www.autodiff.org}}, title = {autodiff.org}, } @misc{spindrops, author = {Tesch, Michael and Glaser, Niklas and Glaser, Steffen J.}, date = {2019}, howpublished = {\url{https://spindrops.org/}}, title = {SpinDrops 2.0}, } @inproceedings{openblas, address = {Denver, Colorado}, author = {Wang, Qian and Zhang, Xianyi and Zhang, Yunquan and Yi, Qing}, booktitle = {Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis ({SC13})}, doi = {10.1145/2503210.2503219}, isbn = {978-1-4503-2378-9}, language = {en}, pages = {1-12}, publisher = {{ACM Press}}, title = {{AUGEM}: Automatically Generate High Performance Dense Linear Algebra Kernels on {X86 CPUs}}, year = {2013} } @incollection{FAD, abstract = {This work deals with an implementation of automatic differentiation of C++ computer programs in forward mode using operator overloading and expression templates. In conjunction with a careful reuse of data, this technique also improves performance of programs involving linear algebra computations mixed or not with automatic differentiation. We give a broad view of implementation and explain some important concepts regarding code optimization. We conclude with some benchmarks applied to our optimal control software.}, author = {Aubert, Pierre and Di C{é}sar{é}, Nicolas}, editor = {Corliss, George and Faure, Christ{è}le and Griewank, Andreas and Hasco{ë}t, Laurent and Naumann, Uwe}, location = {New York, NY}, publisher = {Springer}, booktitle = {Automatic Differentiation of Algorithms: From Simulation to Optimization}, chapter = {37}, crossref = {Corliss2002ADo}, doi = {10.1007/978-1-4613-0075-5}, date = {2002}, pages = {311--315}, series = {Computer and Information Science}, title = {Expression Templates and Forward Mode Automatic Differentiation}, } @misc{audi, abstract = {Header only, C++ library (and the Python pyaudi package) implementing the algebra of Taylor truncated polynomials and a few algorithms useful for its applications (Differential Intelligence, automatic differentiation, Taylor Models, etc.)}, author = {Izzo, Dario and Biscani, Francesco and Sánchez, Carlos and Müller, Jörg and Heddes, Mike}, date = {2019-05}, doi = {10.5281/zenodo.2677671}, howpublished = {Zenodo}, shorttitle = {Darioizzo/Audi}, title = {Darioizzo/Audi: {{Update}} Third Party Dependencies}, } @inproceedings{adolc, author = {Walther, Andrea}, booktitle = {Combinatorial Scientific Computing}, editor = {Uwe Naumann and Olaf Schenk}, publisher = {Chapman-Hall CRC Computational Science}, year = {2012}, title = {Getting started with {ADOL-C}}, isbn = {9781439827352}, } @misc{ceres, author = {Agarwal, Sameer and Mierle, Keir and others}, howpublished = {\url{http://ceres-solver.org}}, title = {Ceres Solver}, } tmp_ns50wwy/src/include/cppduals/paper/benchmark.png0000644000175000017500000003520714163340332022754 0ustar carstencarsten‰PNG  IHDRbÛAnj% pHYsÆÆêÕÍ’:9IDATxœí \TUûÇÙwD!—@EÑ·Ë=AQK÷\R4HK-}\^5M}ÁrKÓ7—Ê¿KðšZb ji ˆ"¨€ ÈŽ€0lÿ‡¹u›†™af83òû~ø çž9sιÏ=÷üÎsï¹çêÕÕÕi@zš®Ð|LRLRLRLRLRLRLRLRLRLRa&“}ô‘§§g¿~ý(\VVæëë3pàÀ¯¾úªsçάJÔ 3™Üµk׬Y³¸ðÚµkI?~|ôèÑ%K–DFF²*P'Ìd²  ÀÞÞ^KèJ;v,99ÙÜÜ|Ñ¢E6l`U f˜ÉdÇŽIÃÃÃ'OžLI‘:::Ïž=cU f˜ÉäÚµkGŒѹsçòòò+W®p‘¿ÿþ;çb-f29sæÌaÆeeeõïßßÀÀ€‹Ô××ÿôÓOY¨–„¼ D4ÆÒÒòÂ… C‡eX  6TòÜdmm-©ãçŸ;nܸ€€U”ÒJèÖ­[ZZZÃøñãÇŸ9sfùòåÅÅÅû÷ïWÅ8"##CBBîÝ»çàà˜˜¨¯¯/-%íHPPÐÒ¥K›RܼyóJKKOž<);ÙÎ;ƒƒƒEc,,,ŠŠŠ( q‹É@νkH3Ù©ŒŒŒ7R³,,,¤Ã½bÅŠÙ³gs_qG„jèçç'ú“BÖ®]+-ϯ¿þz×®]¿þúë³gÏ:uê4iÒ¤U«VÑø[¥;"Ú~ŒŒŒhô?vìØ5kÖX[[sßnذáñãÇÒ~îããóûï¿'%%‰FVUUmݺõСCd%j½zõ¢ÓRªtGËäÝ»wI©e§¦¦ž8q‚†††l‹hmP§YQQA›7oÒ€ãìÙ³\Ñ®];útrr*//×Tݨk~óÍ7©¦Oêßeh¤ú!+‘­øM=½?›ºf-Æ”Ì;÷êÕ«| Ãj˜¹œÔÕÕMœ8‘ÔqÏž=]ºtùþûïIõ}}}¹ÚÚÚï¿ÿ>¥±±±‘3Ï•+WnÛ¶mÁ‚ï¾û®¹¹yJJJxxxTTÔ•+W:vì¨h ÂÊÊŠv%%%4þ[¿~}BB‚Lù¼ôÒK”†²jéí°õÀL&?ýôÓ#GŽPg4gÎj4ìš `kkË»páBÔŠƒFEtªÓ ¸}ûö¬µºˆ]ð§~ÊÍÍ­abÍZŒ 4 %Ma¸S 3—RÁK—.‘ºp›ýúõ»~ý: /“#G޼ÿþÒ¥K¿úê+y2ŒÝ²e µI¶¹˜áÇϘ1ÃÝÝýí·ß¦z*QIù¡FÅŸzÆ #½'#µmÛVö¿üòKÚ÷®]»’ã(*“G%”wRáG¶ ˜ÉäþýûMMM©%y{{›˜˜°ÊÈFô2…íìì èXРu×®]OŸ>¥!yRR‰ë’%KD¯yÒ˜7$$äÎ;4º§Ñº´Ë¡çÏŸ§Ó›ÔÔSŒ7ŽF÷Ü@~õêÕ»wï¦@‡è“Fǯ¾úªè©ÔÍeffvïÞ}ãÆüÄ.bìØ±ÔìÝ»—éÙ³§ŸŸ¸µ„ãñ 6Põè·”99¡¡¡ª°gœÓ§Oggg×ÖÖòÕæ. J³å`ooߦM>~üØÁÁL1}út‰e9::2äwÞIKK‹‰‰¡.^F΢H3)gv’%ú¤ø€Æ¼¿ýöõ–––sæÌË~5a„÷Þ{ï“O>¡¡4\ò ~ùåQïC£{‡ZXXˆ¾ùæ›ÀÀÀuëÖQ¡ééé¤FYYYrîõG”çöíÛI_©ž‹-"ÉŸ4i’¢Öàüo!b HBÈV×®]#+mÚ´‰Jüõ×_©ÐFíCv&oàòåËäFS‚7ß|³†u 4Ôƒ“ÂuéÒ…ö¢Ñœ5õ¼FFFñññÑÑÑ”L¬ã¦šPÝèWÜÎÒ9xüøñÅ‹ËY®ÄÌe´Ùö§|¸ÆÆQYYIKÎ%í Év£ƒé¸¸8þÖ¦(¯½öí×?þÈ­‚ùŸÿü‡’QÿC5§}§6OQ=Ýe9¢@   7oÞÔè-$&$$DFFÒ¨´¦¦æÌ™3üE5:踸¹¹Ñ°Iv& ¹ÁòÞ$µ0j4š£y34ž¢&2cÆ n¡W ÌÍÍ©§ãî’PwF›®®®´I=ÝàÁƒ/]ºÄõ\ÔÙ?žœ< “ r÷î]ò]vÖäCP¿FÇ”Û|ùå—©o¢ÁuÆB(’ºKk‹ýðÃ?¤CO#t SÿN"A¥È¹mÛ¶=qâ¦VôùçŸSŸ(&“ÔqžAý%ãÆdGåRæääˆÞ+5k}%VugÔõsö†……QÉG¡¬µí8y!Üîlݺ• +Q&©§&Eá/ß5šs£F Bi¿HÚœÛÍU«VQ×O‡ž6øáp«HÊS®ÄÌe´†àùúë¯é;vŒ¡ÃDŸ;vì Ÿò$£Éø9ANžØ…t“Qõ²³³¹M üñÇœÓFûH®3åÌÍfjÊA¤öÃÝϦjÓ……2æñY†J­]KxY•Ô——Ijio½õÖ+BhIž+¿4sØ':ö¯ ÉÍÍýâ‹/ȧ¡áóR€Dz÷îÍk7+OtŒB1tòk 'ÝÑP]ô‘VêûH$ÊÊÊD]G_¿~Æà| õP#FŒˆ•ÝEÜàß$¥äæ)uÊ………b‘¤|»êÙ³çùóç¹[¶üÅ@r©ÇäÓ‹]ä(--å»*RY’î¶\£ö¡ÎTÔ£¢¥Í{8p ¨FÊiy9Ð’|:@$NœLR€FEô[¥ËU® ܹsÇÏÏÍݺuã#9ÛÚÙÙ‘V½ûî»3gÎìß¿?ÿmmm-•Å…õ„Ȩ•è•*:¢×óGŹÂM<ˆÔ`h)ðìÙ3ÚM›6‘LWȪ««©Ç[¿~=wƒ„¼ç'Ožpw%h{òäI3‘¨/X°€ÜÓÓ§O;88ÈØMÐLPáp¦}ûöK—.Åš®ê¤áDynÕ@®«*))¡3™ú¾wÞy‡‹çFúÔM8::ò‰Ÿ>}JñbÓsèœOMM•]¢¢¢ŠŠ ±6:÷‡FýÔ‰óDÂ@yÊíÍ7ßKC=£hܵkW1σúÙAƒÉ.ˆ\ rn† Br»é“óPµ7EÚm§N:‰nÊiy9 ‘Ù³g/[¶lçΤúÔ/Sÿ®P¹b(ÑÒÓÓ=<<¨Òt”ªAn–¿¿ÿµk×ø+áÇŸ1c&_“\7›‡6üyqq1IÉ-·)Ö®HÞ¸±`"µÞ³‹UÈiyÛS9snŠ|||/^üý÷ßÓH‚¤‚›hªô)Ú²³³GM5ˆˆ–'Õ„,OÂóÉ'Ÿðwû¨b7nÜàœ¾òÊ+´ûœÌ‹rñâE2‡OÌÉ&ä®+0<ˆ5}}}r+eÈäçŸîííý¯ý‹Ù½{7‰¢¨LrШnÑ¢E4šQ¢&@ýàâxk„ú&ê¤E/¦5„z™áÇóÍ7¼C¾ÅåË—½IC½Ä©;ã§RÿB]?Ÿ€êjùÍäççsá[·n‘drs^´„²(Fþ'킼êûHĦ“Èi%3gÙF066–ñFRú7ÞxãÔ©S$o$®4d‘¿Ü†™+ÔÈ’¤‘Æ Û·oŸìé{4(¡šÐöîÝ›‹!=óþIHFŽIÞÿ†>-á°›|ÍI“&ñj÷Ë/¿”——sG°®®îÿû7;—íALJJªªª’±B5µgò&ÉÝÝ rdû÷ïŸ z჎/wh@ó‡™LÒi,1^¹g°€ªù÷¿ÿ=nÜ8ê¹xÒÓÓ³²²>!°aÃêtV¯^=mÚ4Ò¹°°0++«ùóç7šÿûï¿O½[Ïž=iôýðáÃ+VˆÎ3fÌÂ… øáò¨hþÛîÝ»“´wïÞàà`êJ>úè£ÊÊJÙe‰Îhå¡NTß”x öæÍ›Tõ³d &ñ=—œöQyr–m„¾}ûR&§OŸîׯ_›6mÞô%I#ó’PíÙ³G¡r%f.g ¯è°êêê’ÿzþüy>žQâcµ”-iùO?ý$íá*ôƒ>˜7o^||<é=É? ¶¶oß.víÚÅ'£Ý¤=¢Z‘ûHßÒ‹›B»,nh¢%œ ›œœ¼~ýú_|‘ÆÜ·Ôº¨õò‰©uQc£q̨Q£D3!u$3’—DêîááAmŒºÄ¸¸¸Í›7sÜ@ó‡™LJ{䈛^š4ê§¾Œ|‚Ï>ûŒ6é앸¦ ››Û… BBBÂÃÃIɨG;räˆØýN‰L:•Æ×Ôm­Zµªk×®+W®};÷Ì™3ïÝ»7{ölò?^xáê ùY:t8zô(õ ÔÒྡྷ:Pÿ¨èðSaµD«eðàÁëÖ­ãZ Îî½÷Þã¦tÊi%'gÙF _Š~BúQSSÃ;O¢xzzÖ!‘P¨\‰™ËÙ¨z4ìÐÞñ'Ot„ ¢vìØÁ/> Ò:F;wî$kp‹Õ‘à‰-VGîÕ«µ¨Ç;;;Ÿ9s†ïsšróóó¹xHø©\R8j*üUj]¢KUSë¢FN£“†‘%7mÚD£FÒ]: 4è!Ùvrr¢*Qå¬ Ð,*÷&+^}õÕ†®9 T%†µ„ùÄÒS"º9RH£åRwÀ¿Mž*ñ¼-„ßõ?È"ñÛ)B$æ)¶Ò";Ҁŋ_½zuÀ€ÔR/L]*õÂsçÎ¥ÞVKº}ÖAÔ±§¶òä,Ãd½]B¤DzÏMc‘³\Ù™kÉl<¤¦2ƒÄ#âããÓèÕ&!2”••} Dâ·ÊDí§ÑoÅX*„ÿ÷ÿ'çO@sC…÷&åYØ MqòäIr¶ÈYá6iŒOý)‰„è=TÐüÁm j˜ÉdvvöòåËÓÒÒ&L˜°dÉ’Q£FýöÛo;wŽŠŠÂò 2pàÀ­[·ÆÄÄ7)¸ûOäGò Z eòwÞ±µµ øâ‹/¦M›6þ| ”øªq åÂL&Geoo?kÖ,___¬Qàù€™Lþþûï×®]ûâ‹/Ö­[7hÐ ÒË &pOR-–÷&Ý„„‡‡ÿý÷¤—K–,ñðð ½|íµ×–¨ öSxôôôÆ )//?}úôŽ;T*“ûöí{ï½÷6oÞ,ÿ«m9QáLW“éBTWÄ¢E‹JJJz÷î­º"´fZö!óçÏNbž%.ºÔDai…ÍÔUb—Åþê×ÌŒõŸþo¹ªÕŒ‘¡‘mL ‹K+ÕY¶<«¬®¨ª®ÿÔïã3A}€Û|&¨ªÔ<«¬ª¨~ j„ ªDü•¸ªúϬþŠTEUËäýû÷·oßž‘‘Q[û÷™@F¶¥pÔÔÔ˜ššR ªªêòåËË—/_¸pá'Ÿ|¢Š²M‡º3q¡ôY•:+d ªa¼ü(¡aUð)mÔHmÍÆ29}úôQ£F‡„„„……8p`êÔ©l‹àÑÕÕmž{@ÕÔ §YüòÇãÚÚºâ²z·’>)²”$«¦–Ó$R£§Ï*)aQi}WYR.¨©­-«¨"™ªÔ”WV è«Â§õ Zœ€©Æ2™››ûá‡R€|Ê &Œ2cÆ ¶¥ZüU5ñÈ^[kxµ­a­?=žš&«w‰äß ™ÐU’#IÕ`W1J…ò6èíÿÊNÖœ12Ð36Ыÿ4ÔÛ4Ò~JH od kl¨o¤/ü¤p}Ìß ú,ÜϼžŒeÒÈȨ¨¨ˆ{CÈÓ§OÍÌÌžýÚµk¤gÜæo¿ý¶nÝ:åòŒ544  °««ëĉ©”°°0>ÁƒªªªH#)ܹsçž={Þºu 2ÙšT×<ÌýSëoæ— u±ÞGTh©žî íëå°£¥™•Y½"ÖëbÛ®¶¸#@kƒñ½CÒE^#‰þýû'%)ù.é””ggg~ÓÉÉI,+бµµ%G–¼Õ»w殮¥q’ ž{ªªks‹Ë¹I4¿BNÓsŠšSª¯§cÝÆD(„m…Êa 9ïš›<-HüêÆÝGx€çÆ2ibbrñâÅÑ£Gs›—/_677W.«²²2cccÑœ)F4ùšŸ}ö™··w```QQѶmÛºuë¦tÍAó„Ÿ\**‡OJ]Y´™Ñ_Zø·vîЦ‰o*(‰Z&º‰Çxþ`,“Ÿ~úé”)S,--;vìøäÉ“ÜÜÜãÇ+—•™™Yyùß“éKKKEŸ6Ñ.ñ3}úôèèh77·¬¬¬1cÆØØØˆ¾Û2>>>??_,[êÈ”«OëDmæ*­¬y\,àþrJKù¥UT+öÄ¡™¡®­…÷gÓÆÀ¶¥™¾M}C=^Ë´jË*²&gk%3ß 40ÅÅæR?Œeòå—_NMMMHHÈÉÉ!ÑêׯŸrY9;;‡‡‡ó›III...¢ bbb¸›‘öööãÆ;þ¼¨Lº»»‹å‰Á¾lòKžÅ%?ä7oܸ1xð`~sØK¹Wí4Qïú0%3_Ñ÷.ñÞ¡ðö¡9vzÁÒÌXÉöÆ40EÅæR&£ öÏ5êëë‹ö­J3|øðÚÚÚÝ»w^¹r…¼Æ-[¶P|dd¤““‰hŸ>}’““SRRzöìY\\|éÒ¥yóæ5½ÜÖÌÍûO^ûç³=ߤóA3ƒ§ÿ¼Æ(’ÃúÙ¤N¢)ätñ÷‡OŸI¾“' ’ÃŽVÂy4M.¥¿îöí¸·¼€ªi¾ÿëééEEE-^¼8$$„œÅC‡‘ïHñëÖ­óóó#™$?rûöí>>>A}Ïëíí¤éZ?Ï”Jš«R!¨&9}Ö‚þR³ ‹Ë{ôÐÈ@ïÏ©4"rèØ±mSÚ€¦Ó|e’pqq‰‹‹‹LHHàÃþBÔZ§ÖÍ÷¿>•CîéC…rhøè!ÿÜ…Šê MAµ2YSSSUUed‡à9aÌʯäLIÞaW‹®¶õŸ6m_´åÂm;´5Qi €-ª•Éû÷ï÷ïßßËËkΜ9ãÇWiY@ êê´ÒŸßÍÌOþ]»“­hzº;´“ÃmëDUTÔŒje²[·n·nÝJHHˆ‡Ljn‘šÛé¹Ééù÷ÞNÏK¼÷¤T‘95»Û*ý$>´DT"“UUUùùù¶¶¶î"ä7ÞPEA@9…ew2òï>Ì¿›Yp'3>Ós[³­!?ïz‹Uõ EÀX&322üýýcbb,,,ž*JÎÈ{VY-Ïo;Zšõîjí`[/н»´'u|Ѷ-¿šwLbºÌ_@«ƒ½7)úŒ¿¶¶v]Ó®òìüRÎA¼ý —äDQÎ×?èév³o×»‹u½§ØÙºw×ö.RãÖÓ^ÆZÞXÈÐ a,“vvvÑÑÑÜæ‰'ÄV˜2hÊnñ6ÞG¤@¯ÎVоõÉØPOt-o¬ŒŒerÿþý>>>úúú>tuu­¬¬ŒŠŠb[Äs·º)ï#’(ÞÍÌ—ç=Pzº:;´á}DÛ¶}:àyDPŒeÒÉÉ馬¬,ò,ûöí«««Ë¶ˆ–«)6œ§Ø»‹µ‘A³^> žØ÷¶¥¥¥zzzöööZÂ×zh לc^JsFuSl¨Æ2±iÓ¦®]»êèüý¶Ûk×®)—Û7‚ƒƒSSS­¬¬Ö¬Y3sæL±ÅÅÅß}÷A@@Àúõ땯º²¨sŠ 5ÃX&<˜––fnnÞô¬··whh¨¿¿ÿõë×=== Ô£GÑ4ô•©©ivvv^^ÞÔ©S}}}ûöí+šà‹K· Jžñ›·nåݯþ™ ÷y±ýÈ~]«’¦§ØP3ŒeÒÒÒ’‰F±±±†††ä#RØÕÕuâĉǎ ãäççŸ>}:33ÓØØ¸S§Nñññ 3™óÑ7µb“b®<âƒf†E_¿'­ §Ø¼ôb{›v¦rì4€æc™ôòòÚ°aÔ)S,,,øHnÕ:EIIIqvvæ7œœ¸;<‰‰‰vvv{÷î=|ø°žž ê’%KÄ2×Hz¹ì?—À…1Å€D÷æ«W¯Þ·oŸè½É(‘UYY¹‰ü¦‰‰ ň&(,,ÌÈÈ =¾{÷îíÛ·GÕ­[7ÑÖ%ú—<דRésèÛ» 2 *Õr-ƒ`iªßÙÊжA'KÃΖF¶6m þºtZ¬URü¨DëÑ]ù÷²¹sæÌMW¡…‹) ,¦0—úa,“{öìIOOïØ±cÓ³233+//ç7KKK)F4AÛ¶m ƒ‚‚´µµûôé3mÚ´o¿ýVT&ÝÝݵ´b¥åŸ˜Yÿ>áþ(––ÀÄPß©“¥Ó V=;YõìlåôB}ØØ°¹‰X^@Q`1EÅæR&£ ƾ££#$œÃÃÃùͤ¤$±K¨¬ŠŠ ’RSÓúÛ~uuu¢.¬¢`Š €†0–É#FìÝ»wÊ”)–––ÚMÓ˜áÇ×ÖÖîÞ½;00ðÊ•+ÑÑÑ[¶l¡øÈÈH'''Ñ®]»Ž=zõêÕ[·n½ÿþñãÇ9"þöÖæYyO?]:SlHƒ±LîÚµ+''géÒ¥¢‘äó)‘•žž^TTÔâÅ‹CBBìíí:äàà@ñëÖ­óóóãf÷|ùå—sçε¶¶n×®饧§§üù{½ì¸ÿ\‚¿—‹uÐJ`,“éé,ßÄäââ'™À‡­¬¬pC€ê`&“ÀÀ+Èx®`&“½zõÚ·oŸèDSå.º2ÁÂ̰¸´RâWûÏ%àŠdÃL&SSSµµµ5¨ˆ[dÓ©(3™ä济92&&F4¾_¿~‰‰‰¬JÔ 3™,RXX˜——ÇG¦¤¤°*P3ÌdòêÕ«aaaÉÉÉü"ä_Z[[GDD°*P3ÌdÒÓÓÓÃÃcÅŠÛ¶mc•' YX>7Iî#4ÀóD+ZÈPÈ$ ö2yåÊ•?þø£ªªŠ T.«7n§¦¦ZYY­Y³fæÌ™“÷éÓgüøñ{÷îU® @"Œe’Tí§Ÿ~8p ®®n³ÞÞÞ¡¡¡þþþׯ_÷ôô4hP=¦\ºt)ÖÉ  Ëd\\¹€Myï#Oll¬¡¡a@@…]]]'NœxìØ±°°0±dgÏžMNNž3gΣGš^( c™lß¾=Ô.MÀ½-‹ÃÉÉ)))I,Maa!ù¯¤”§NbR( c™3fÌöíÛÉ·³¶¶nâk™ËÊÊŒùMŠKCØ«W¯¦Hƒ±L~üñÇ999!!!¢‘Ê­‡nffV^^Îo–––RŒh‚¨¨¨´´´C‡IË!>>>??_,ï§T˜KQ`1EÅæR?Í÷µÌÎÎÎáááüfRR¿ DZcǨ8GGG-ád×êêê?þøãâÅ‹|www±<ñ†…€¹SXL!`.Ea2ª`ÿ@Hffæ©S§²²²ìíí}||:uê¤\>ǯ­­Ý½{w``à•+W¢££·lÙBñ‘‘‘NNN$¢$“|â 6<|ø„` c™<þ¼ŸŸŸ··7iä½{÷ÈŸ;x𠇇‡25ÓÓ‹ŠŠZ¼xqHHåvèÐ!Š_·n!:»PŒerÅŠ111ݺuã6ƒ‚‚¦NªœL...qqqb‘ S®^½Z¹"0–É’’^#‰=z4œD´Ëd×®]Eo2GEEQ Û"µÁX&÷ìÙãíí½zõj;;»ìììÊÊJRJ¶Ejƒ±LöêÕëöíÛ‰‰‰YYY¶¶¶dµ( ~˜É¤@ àÖ×ÕÕ „U΀¦`&“äGîÛ·oüøñ ¿Rn@ã0“ÉÔÔTmmm("€ç f2É-t>räȘ˜Ñø~ýú%&&²*P'Ìd²\Haaa^^™’’RPPÀª@Í0“É«W¯†……%''ó ”“immÁª@Í0“IOOO+VlÛ¶Už€faùÜ$¹nnn'Ož‹÷õõU.Ã7n§¦¦ZYY­Y³fæÌ™b âââ–-[–’’baa±dÉ’wß}W¹‚‰0^^€_s§®®.77÷êÕ«Ó¦MSN&··whh¨¿¿ÿõë×É[4hP=øEEE^^^;vì˜;wþ:lØ0WW×!C†0Ù@‹¹L=zTt3--tN¹¬bcc (Lú7qâÄcÇŽ………ñ HG#""H#)<`Àggç;wî@&0„ýk™EqttÌÉÉQî·)))¢/•trrJJJMСC‡yóæqáÌÌÌäädr(•­) ÕÊ$I—Ò„”••ó›&&&#1eVVÖøñã7nÜØ½{wÑøøøø†¯ñ:sæŒrõiÀ\Š‹) ,¦0—úa,“fff|¸®®®}ûö»víR:«òòr~³´´T4sžŸþÙ××744tÁ‚b_¹»»‹Åˆ¾ä 4 Ì¥(°˜¢Àb s) “Qc™][@OˆÒY9;;‡‡‡ó›IIIü™|èêêZYY‰B´\Ø?rSHVVy–}ûöÕÕÕe[ 6ˤŸŸßöíÛ]„h oU|ûí·lKá¹qãFpppjjª••Õš5kfΜ©¢‚´NËd×®] 1a„O?ýtË–-k×®e[@ ðöö õ÷÷¿~ýº§§ç Aƒ”{ Æ2¹zõêiӦ͛7oéÒ¥ýúõ#õjß¾=Û"xbcc É[¥°««ëĉ;¦¢â´BËd]]ÝåË—ŸÙÚÚêèè¼ûî»l‹à!ç7“’’Ä–2pwwû µ° &¨¨>Ï0—¢ÀbŠ‹)Ì¥(LF-xéóáÇ×ÖÖîÞ½;00ðÊ•+ÑÑÑ[¶lQEAZ--xés==½¨¨¨Å‹‡„„ØÛÛ:tÈÁÁAhµ´ì¥Ï]\\âââT—?€V–>¤Òº–>2dˆ¦«Ð’€¹SXL!`.Eab±Öµô¹¥¥¥¦«Ð’€¹SXL!`.Eab1Æ2IèèèðKŸ-ö2 <7@&©¨D&ùUxT‘¹BìÛ·ï½÷ÞÛ¼ysPPS\\øÝw߬_¿^³5l>MV®\™žžneeEF[¼x1EÆÅÅ-[¶,%%ÅÂÂbÉ’%ª[S©%"£-ÑW}úô?~üÞ½{5XÃfBÃÓPb»ºtéµÀ’’}}}ŠôóóÓh­5†D㘚šÖÔÔðinÞ¼Ù£GôfZR,£%w«“‡¼ O£,Z´ˆN9n¡ª™5;;;//oêÔ©¾¾¾}ûöÕHõšd2ʼn'Æ÷óÏ?6lðàÁÝ»w÷òòÚ±cÇܹsýõWŠtuuÅ\;miéÒ¥Ôsi¶zÍ„†§aQQQÃvE£ŠI“&>}zĈÔ%)ÆÍÍMƒ5×C'cyyyNNN‡D£7#—L¢eäluröf-xžF™?>5¯×^{!—ÎÃÌÌLccãN:ÅÇÇk¤bͺººC‡‘FRxРA$4ÄéÒ¥KDDµ*Š0`€³³ó;w “2Úµÿääd:=z¤Á6ž† a»233£.4’";wîܳgÏ[·nµB™”h:i³mÛ¶¢)Ñ›i ÅO«e´änuš‘I5¯Â#2“XLbb¢ÝÞ½{>¬§§@®·FêÖܰ··÷ññ¡@MMMTTOGŽI4þhÒÙH]? Á4YËæ„´¶TXXLJyêÔ)M×±YÐð4”Ø®HmmmOž}úL›6íÛo¿mm K3f̘:uêO?ýDr+'OžL‘?ÿü3 ðCCC,X é 6#$¶¥ªª*rƒ:¤éÚµÄÚÙmúôé4Èvss£Žl̘1666Ô5]MÍ fœ.]ºYõâÅ‹š®l³£a»Š‰‰qppànFÚÛÛ7îüùó­S&'''‡r›4300@o¦%Å2Ò+Ý›1–IgggjÙ4*lžƒš®]»Ž=zõêÕ[·n½ÿþñãÇÉdš®T³ ¨¨ˆb4:t胨‡Z¾|94D=|ø04²!Û’§§'Ÿ`Æ tã†HlWäÑX-%%¥gÏž4¸té’è,‡ÖƒD㤦¦Ž;–\mr˜®_¿N£±S§N¡7Ó’b‰)›Ò›1–I:NÜCíÚµ#½¤jÑÀmrRSSà ²h|qùòeêô.\øÉ'Ÿ|ùå—sçε¶¶¦R í×Z3äAîܹÓßßÿñãÇd7:vŽŒŒ$߈›þʱhÑ¢ððp Ö³Y¶Ô(OÃáÇKlWÛ·o÷ññãííÍ?îÖª8wîœDãìØ±cΜ9¹¹¹;v¤07‡-ð•W^ih…Z<¥0–ÉB6oÞüÛo¿‘ª“OIÇ/&&†m)ò ««[QQÑ0ÞÊÊêÌ™3ê¯OógžÑ___ NTnþÈnKÔm©³2Íi§¡Ävå/Dõ•jÖH;éæ ‹Do¦%É2 µ:yPÕbuÕBHÕ[áårÏ Œeòúõë'Nœ8yò$7KíÂ… ÍaÉ:@9Ëä‚ H/]ºôâ‹/²ÍP?ÌdR $%%±ÊÐ8Ìd²W¯^ûöí“øˆÄ»©@ó‡™L¦¦¦jkkC2%%¥  €U€ša&“W¯^ KNNæ_ Bþ¥µµuDD«"5ÃL&====<B#F 888ÄÆÆvëÖ­aú[·nõéÓGbVJ¼™K¹_qŒ1‚~Û³gOn355•F½K—.U.7Z"Œe277÷Ã?¤ù”&L%¤u¾[ŽDGG‹ÊäéÓ§]]]%&®««;~ü¸4™Ü°aƒø+î ®FqqqÙ¸qãáÇåLÀóc™422***jÛ¶-…Ÿ>}jfföäɶEв¨­­µµµÍÊÊâß½zùòe777.üñÇÿþûïúúú555&×D´¼¼œÜ8h®ZµŠâ霢±&y¥k׮ݹsç… |øÉ“'ù§M¢¢¢¾ùæSSSRбcÇŠþŠ„pÑ¢Eä8Ò·uuuþþþI’¹bÅŠ%K–ikk¿üòËTIiõïÞ½;fäVc™ÌÈÈ Ó/&&ÆÂÂâÉ“')));…°-€¿úÿ`!\˜¿zùù矋¥_¼x1;w¸Í™3gò1bSä& ËÏä!bß’òíÙ³§ÑÊs¬ZµJZJžWËä¼yóæÌ™söìÙÞ½{k ÏÀÈÈHÈ$€ {o’”’ßÔÖÖæ&”-Æ2iggíááÁmž8q7ü´\Ëäþýû}||ôõõ>|èêêZYYŶ@m0–I''§›B²²²È³ìÛ·/žÐra&“ÕÕÕûöí»{÷îèÑ£_ýu—ªª*ŠY¿~ý£GX•¨f2¹|ùòß~ûÍËË‹t±²²²¶¶võêÕ]ºtùúë¯Y¨f2yòäÉ„„kkë3f888¼úê«6l«üõÃL&KKKI#)йsçvíÚÅÆÆ²ÊÐÌd²¶¶öÖ­[\¸®®ŽÒ^Å4s˜É$9‘üj¶¶¶¢+CŠJ&Ђ`&“ÐBÏ*|-3ÐÒLRLRLRLRLRLRLRLRLRù¯Œb('ñÑÆIEND®B`‚tmp_ns50wwy/src/include/cppduals/paper/paper.md0000644000175000017500000001703214163340332021741 0ustar carstencarsten--- title: 'cppduals: a nestable vectorized templated dual number library for C++11' tags: - C++ - dual numbers - autodiff - differentiation - vectorization - Eigen authors: - name: Michael Tesch orcid: 0000-0003-4096-1562 affiliation: "1" affiliations: - name: Department of Chemistry, Technische Universität München, 85747 Garching, Germany index: 1 date: 09 May 2019 bibliography: paper.bib --- # Summary Mathematical algorithms in the field of optimization often require the simultaneous computation of a function and its derivative. The derivative of many functions can be found automatically, a process referred to as automatic differentiation. Dual numbers, close relatives of the complex numbers, are of particular use in automatic differentiation. This library provides an extremely fast implementation of dual numbers for C++, ``duals::dual<>``, which, when replacing scalar types, can be used to automatically calculate a derivative. A real function's value can be made to carry the derivative of the function with respect to a real argument by replacing the real argument with a dual number having a unit dual part. This property is recursive: replacing the real part of a dual number with more dual numbers results in the dual part's dual part holding the function's second derivative. The ``dual<>`` type in this library allows this nesting (although we note here that it may not be the fastest solution for calculating higher order derivatives.) There are a large number of automatic differentiation libraries and classes for C++: adolc [@adolc], FAD [@FAD], autodiff [@autodiff], ceres [@ceres], AuDi [@audi], to name a few, with another 30-some listed at [autodiff.org @autodifforg]. But there were no simple single-file stand-alone header libraries that were explicitly vectorized. *Cppduals* can be copied and used as a single header file ``duals/dual`` with no dependencies other than the standard library, and the vectorization support is contained in a small number of additional auxiliary files. The interface generally follows the conventions of the C++11 standard library's ``std::complex`` type, and has very liberal licensing. In order to fully utilize the computing resources of modern CPUs it is often necessary to use their special data-parallel capabilities. However, compilers often struggle to find the best sequence of instructions to achieve maximum performance due to difficulties in automatically detecting parallel data operations in programs and then mapping those parallel operations onto the CPU's data-parallel instructions. Some intervention from the programmer to exploit these special data-parallel instructions, combined with cache-optimized algorithms, can improve program execution speed significantly. This is done by *cppduals* through providing template specializations for selected C++ data types. Template specializations that map the dual arithmetic directly to vector machine language are provided for the types typically used to calculate first-order derivatives: ``dual``, ``dual``, ``std::complex>``, and ``std::complex>``. These types and their algebras are expressed in hand-coded assembly for use with the Eigen [@eigenweb] matrix library. The vector operations for the ``dual<>`` type are then picked up automatically by Eigen's cache-optimized algorithms. The integration lets us achieve extremely fast performance for automatic forward, first-order differentiation of matrix expressions. Furthermore, by piggy-backing on Eigen's algorithms, the library inherits future improvements and adaptations to other hardware platforms. The vector specializations are currently available for the x86_64 SSE and AVX instruction sets, though support for other vector machine architectures (such as GPUs) can easily be added. # Mathematics A dual number has a *real part* and a *dual part*, the *dual part* is multiplied by the dual unit $\epsilon$, with the property that $\epsilon^2 = 0$. Formally the dual space, $\mathbb{D} = \{ x = a + b \epsilon \; | \; a, b \in \mathbb{R}, \epsilon^2 = 0 \}$. The property can be used to differentiate functions of real values by expanding $f(x)$ as its Taylor series at $a$: $$f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \frac{f'''(a)}{3!}(x-a)^3 + ... $$ Setting $x = a + b\epsilon$ in this expansion gives $$\begin{split} f(a + b \epsilon) &= f(a) + f'(a)(b \epsilon) + \frac{f''(a)}{2!}(b \epsilon)^2 + \frac{f'''(a)}{3!}(b \epsilon)^3 + ...\\ &= f(a) + f'(a)(b \epsilon) \end{split}$$ Because the $\epsilon^2$ terms are zero, the Taylor expansion truncates after the $f'$ term. Thus to evaluate $f'(a)$: set $x = a + b\epsilon$ with $b=1$, and take the dual part of the evaluated function $\mathfrak{Du}(f(x))$. A matrix representation of the dual numbers is $\bigl( \begin{smallmatrix}a & b \\ 0 & a\end{smallmatrix}\bigr)$. This form can be used to calculate Fréchet derivatives of matrix functions $D_B f(\mathbf{A})$ by doubling the size of the calculation and embedding the parameter ($A$) and with-regard-to parts ($B$) into this doubled matrix, zeroing the lower left quadrant: $D_B f(\mathbf{A}) = C$ where $f\bigl( \begin{smallmatrix}A & B \\ 0 & A\end{smallmatrix}\bigr) = \bigl( \begin{smallmatrix}F & C \\ 0 & F\end{smallmatrix}\bigr)$. # Benchmarks The above blocking method of computing matrix function derivatives requires twice as much memory as using dual numbers, and furthermore does not take advantage of the relative sparsity of dual number arithmetic. However, the blocking method *does* permit the use of highly optimized complex-valued BLAS libraries, which are often significantly faster than "regularly" compiled code, being hand-tuned for a specific CPU architecture and memory heirarchy. We compared using ``dual<>`` to calculate the derivative of the matrix-matrix product with using the blocking method implemented with OpenBLAS [@openblas]. All benchmarks were performed single-threaded on an *Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz* running *Fedora 30*, using *Eigen v3.3.7*, *OpenBLAS v0.3.6*, and compiled using *clang v8.0.0*. The *cppduals* vectorized type reduced the time of a 32x32 matrix-multiplication derivative by 40% over the 2Nx2N (in this case 64x64) multiplication performed by OpenBLAS (even with a suspected performance bug in Eigen's GEMM algorithm, described below). In the current implementation, this advantage diminishes as the matrix size grows, as shown in Figure 1 ![Figure 1.](benchmark.png), we suspect this is due to a bug in Eigen's cache optimization for non-scalar valued matrix-matrix multiplication. We note that the Eigen scalar-valued matrix multiplications are roughly as fast as OpenBLAS, demonstrating the validity of Eigen's approach to optimization, but complex-valued multiplications take roughly twice as much time as their OpenBLAS equivalents, indicating a performance bug in Eigen's current optimizations, though only for complex-valued (and consequently, dual-valued) matrices. We hope to achieve further speed improvements with tuning and more debugging of the integration with Eigen. In general, dual-valued operations should be marginally faster than corresponding complex-valued operations, as they require slightly fewer floating point operations. # Usage *Cppduals* is used in the SpinDrops [@spindrops] NMR and quantum computing software for optimization of pulse quality functions. # Acknowledgments We acknowledge first of all the Eigen project and its contributors, upon which the vectorization was based. Some funding was provided by the TUM School of Education. # References tmp_ns50wwy/src/include/cppduals/README.md0000644000175000017500000003112314163340332020455 0ustar carstencarstencppduals ======== Header-only dual number library for C++11. The `dual<>` type can be used for automatic (forward) differentiation. It can be used in conjunction with Eigen to produced very fast vectorized computations of real and complex matrix functions and their derivatives. There is a small paper on cppduals here: [![DOI](https://joss.theoj.org/papers/10.21105/joss.01487/status.svg)](https://doi.org/10.21105/joss.01487) Documentation ============= [Full documentation is here](https://tesch1.gitlab.io/cppduals/). The dual number space is closely related to the complex number space, and as such, the dual class `duals::dual<>` is similar to `std::complex<>`. When compiling with Eigen it is possible to disable the vectorization templates by `#define CPPDUALS_DONT_VECTORIZE`. This may be useful if your compiler is particularly good at optimizing Eigen expressions, I have had mixed results, sometimes there are differences between the compiler's best (GCC and Clang) and the vectorized code of 30% or more, in either direction. Examples ======== Here we calculate a function $`f(x)`$, with its derivative $`f'(x)`$, calculated explicitly as `df()`, and calculated by using the dual class (`1_e` returns the dual number $`0 + 1 \epsilon`$, it is equivalent to `dual(0,1)`): ```cpp #include using namespace duals::literals; template T f(T x) { return pow(x,pow(x,x)); } template T df(T x) { return pow(x,-1. + x + pow(x,x)) * (1. + x*log(x) + x*pow(log(x),2.)); } template T ddf(T x) { return (pow(x,pow(x,x)) * pow(pow(x,x - 1.) + pow(x,x)*log(x)*(log(x) + 1.), 2.) + pow(x,pow(x,x)) * (pow(x,x - 1.) * log(x) + pow(x,x - 1.) * (log(x) + 1.) + pow(x,x - 1.) * ((x - 1.)/x + log(x)) + pow(x,x) * log(x) * pow(log(x) + 1., 2.) )); } int main() { std::cout << " f(2.) = " << f(2.) << "\n"; std::cout << " df(2.) = " << df(2.) << "\n"; std::cout << "ddf(2.) = " << ddf(2.) << "\n"; std::cout << " f(2+1_e) = " << f(2+1_e) << "\n"; std::cout << " f(2+1_e).dpart() = " << f(2+1_e).dpart() << "\n"; duals::hyperduald x(2+1_e,1+0_e); std::cout << " f((2+1_e) + (1+0_e)_e).dpart().dpart() = " << f(x).dpart().dpart() << "\n"; } ``` Produces: ``` f(2.) = 16 df(2.) = 107.11 ddf(2.) = 958.755 f(2+1_e) = (16+107.11_e) f(2+1_e).dpart() = 107.11 f((2+1_e) + (1+0_e)_e).dpart().dpart() = 958.755 ``` Installation ============ Copy the [duals/](./duals/) directory (or just [dual](./duals/dual) ) somewhere your `#include`s can find it. Then just `#include ` from your source. Alternatively, `cppduals` supports building with CMake. If using CMake v3.14+, the ``FetchContent`` pattern is straightforward and enables using CMake targets to specify library dependencies: ```cmake include(FetchContent) # Have CMake download the library set (CPPDUALS_TAG v0.4.1) set (CPPDUALS_MD5 7efe49496b8d0e3d3ffbcd3c68f542f3) FetchContent_Declare (cppduals URL https://gitlab.com/tesch1/cppduals/-/archive/${CPPDUALS_TAG}/cppduals-${CPPDUALS_TAG}.tar.bz2 URL_HASH MD5=${CPPDUALS_MD5} ) FetchContent_MakeAvailable (cppduals) # Link to cppduals target_link_libraries (your_target PRIVATE cppduals::duals) ``` Older versions of CMake can achieve a similar result using the ``ExternalProject`` family of commands and modifying the global preprocessor search path: ```cmake include(ExternalProject) # Have CMake download the library headers only set (CPPDUALS_TAG v0.4.1) set (CPPDUALS_MD5 7efe49496b8d0e3d3ffbcd3c68f542f3) ExternalProject_Add (cppduals URL https://gitlab.com/tesch1/cppduals/-/archive/${CPPDUALS_TAG}/cppduals-${CPPDUALS_TAG}.tar.bz2 URL_HASH MD5=${CPPDUALS_MD5} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) # Make include directory globally visible ExternalProject_Get_Property (cppduals source_dir) include_directories (${source_dir}/) ``` Alternatively, `cppduals` supports installation and discovery via the `find_package` utility. First, download and install the library to a location of your choosing: ```sh CPPDUALS_PREFIX= git clone https://gitlab.com/tesch1/cppduals.git && cd cppduals mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX="$CPPDUALS_PREFIX" .. cmake --build . --target install ``` Then, in your project's `CMakeLists.txt`, find and link to the library in the standard manner: ```cmake find_package(cppduals REQUIRED) target_link_libraries(your_target PRIVATE cppduals::cppduals) ``` If you installed `cppduals` to a location that is not on `find_package`'s default search path, you can specify the location by setting the `cppduals_DIR` environment variable when configuring your project: ```sh cd your_build_dir cppduals_DIR="${CPPDUALS_PREFIX}" cmake .. ``` Benchmarks ========== The benchmark compares cppduals against a local BLAS implementation, by default OpenBLAS (whose development package is required; RedHat-flavor: `openblas-devel`, Debian-flavor: `openblas-dev`). If you wish to build the benchmarks against a different installation of BLAS, the following CMake variables can be set at configuration time: - [BLA_VENDOR](https://cmake.org/cmake/help/latest/module/FindBLAS.html) - BLAS_DIR - LAPACK_DIR For example, to build and run the tests shown below: ```sh cmake -Bbuild-bench -H. -DCPPDUALS_BENCHMARK=ON -DBLAS_DIR=/opt/local -DLAPACK_DIR=/opt/local cmake --build build-bench --target bench_gemm ./build-bench/tests/bench_gemm ``` The first performance goal of this project is to make the `duals::dual<>` type at least as fast as `std::complex<>`. This is considered to be an upper-bound for performance because complex math operations are usually highly optimized for scientific computing and have a similar algebraic structure. The second goal is to make the compound type `std::complex>` as fast as possible for use in calculation that require the derivative of complex functions (ie comprising quantum-mechanical wave functions). The first goal is measured by comparing the speed of matrix-matrix operations (nominally matrix multiplication) on `duals::dual<>`-valued Eigen matrices with highly optimtimized BLAS implementations of equivalent operations on complex-valued matrices. This can be done by running the [./tests/bench_gemm](./tests/bench_gemm.cpp) program. In the *ideal* case, the results of the `B_MatMat` type should be nearly as fast, or faster than equivalently sized `B_MatMat`, and double-sized `B_MatMatBLAS<{float,double}>` operations. This is very difficult to achieve in reality, as the BLAS libraries typically use hand-tuned assembly, where the Eigen libraries must strive to express the calculation in a general form that the compiler can turn into optimal code. Comparing Eigen 3.3.7 and OpenBLAS 0.3.6 on an `Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz` is still sub-optimal, only achieving about half the performance of the BLAS equivalent, and 90% of `std::complex`: B_MatMat/32 5433 ns 5427 ns B_MatMat/64 38478 ns 38433 ns B_MatMat/128 299450 ns 298981 ns B_MatMat/256 2365347 ns 2361566 ns B_MatMat/512 18888220 ns 18857342 ns B_MatMat/1024 151079955 ns 150856120 ns B_MatMat/32 4963 ns 4955 ns B_MatMat/64 36716 ns 36671 ns B_MatMat/128 280870 ns 280346 ns B_MatMat/256 2173791 ns 2170886 ns B_MatMat/512 17493222 ns 17459890 ns B_MatMat/1024 138498432 ns 138286283 ns B_MatMatBLAS/32 4877 ns 4870 ns B_MatMatBLAS/64 27722 ns 27691 ns B_MatMatBLAS/128 177084 ns 176756 ns B_MatMatBLAS/256 1268715 ns 1266445 ns B_MatMatBLAS/512 9772184 ns 9726621 ns B_MatMatBLAS/1024 75915016 ns 75432354 ns The second benchmark of interest measures how well the nested specializations `std::complex>` perform as matrix values relative to using a BLAS library with an extended matrix to compute the same value function. This comparison is also made with the [./tests/bench_gemm](./tests/bench_gemm.cpp) program. The relevant measures are `B_MatMat` and `B_MatMatBLAS` of twice the size. On the same machine as above, using `std::complex>` (`cdualf`) shows a speed advantage over the BLAS approach, while using only half the memory. However, notice that the advantage decreases as the matrices get larger, which ideally should not happen: B_MatMat/16 2810 ns 2808 ns B_MatMat/32 19900 ns 19878 ns B_MatMat/64 151837 ns 151646 ns B_MatMat/128 1174699 ns 1172931 ns B_MatMat/256 9122903 ns 9110123 ns B_MatMat/512 72575352 ns 72467264 ns B_MatMatBLAS/32 4877 ns 4870 ns B_MatMatBLAS/64 27722 ns 27691 ns B_MatMatBLAS/128 177084 ns 176756 ns B_MatMatBLAS/256 1268715 ns 1266445 ns B_MatMatBLAS/512 9772184 ns 9726621 ns B_MatMatBLAS/1024 75915016 ns 75432354 ns Contributions ============= Questions, bug reports, bug fixes, and contributions are welcome. Simply submit an [Issue](https://gitlab.com/tesch1/cppduals/issues) or [Merge Request](https://gitlab.com/tesch1/cppduals/merge_requests). Contributors ------------ - [Nestor Demeure](https://gitlab.com/nestordemeure) - [Jeff](https://github.com/flying-tiger) Compiler notes ============== XCode 11 (Apple Clang 11) is known to work. Also various version of g++. Clang 8.0 appears to have some trouble with compiling the optimized templates for Eigen, as evidenced by its propensity to segfault when compiling the cppduals test programs. Please submit issues if you experience similar problems, with specifics of your compiler and compilation flags. License ======= The primary header file `duals/dual` and testing and benchmarking code is licensed under the following: ``` Part of the cppduals project. https://tesch1.gitlab.io/cppduals (c)2019 Michael Tesch. tesch1@gmail.com See https://gitlab.com/tesch1/cppduals/blob/master/LICENSE.txt for license information. This Source Code Form is subject to the terms of the Mozilla Public License v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ``` Eigen-derived ------------- The support for Eigen vectorization, including `duals/dual_eigen` and the architecture-specific vectorization files under `duals/arch` are derived from the [Eigen project](http://eigen.tuxfamily.org/index.php?title=Main_Page), and thus licensed under [MPL-2](http://www.mozilla.org/MPL/2.0/FAQ.html) . ChangeLog ========= v0.4.1 ====== - changed constexpr to FMT_CONSTEXPR in the dual<> and complex<> formatters to work with more compilers / lang standards. v0.4.0 ====== - cleaned-up release with fixes from v0.3.2. - improved docs v0.3.3+ ======= - ignore these, will be, trying to cleanup release tarballs, next stable will be v0.4.0 v0.3.2 ====== - not actually tagged release - fixed a bug in the `{fmt}` support, added docs for the same. - added benchmarking for `{fmt}` vs iostreams. v0.3.1 ====== - forgot to bump the CMakeLists package version number in 0.3.0. v0.3.0 ====== - vastly improved cmake support, thanks to [Jeff](https://gitlab.com/flying-tiger). The improvements required changing some CMake target names. - Added basic optional [libfmt](https://github.com/fmtlib/fmt) support for duals::dual<> and std::complex<>, enabled with `#define`\ s v0.2.0 ====== - fixed build on VS2017 - save and restore signam and errno in {t,l}gamma - fixes from Nestor D. for https://gitlab.com/tesch1/cppduals/issues/5 (spurious nan) Todo ==== - Add multi-variate differentiation capability. - Non-x86_64 (CUDA/AltiVec/HIP/NEON/...) vectorization. - Higher-order derivatives. tmp_ns50wwy/src/include/cppduals/.editorconfig0000644000175000017500000000042214163340332021651 0ustar carstencarstenroot = true [*] end_of_line = lf insert_final_newline = true charset = utf-8 [*.{cpp,hpp,h}] indent_style = space indent_size = 2 [{duals/**,tests/**}] trim_trailing_whitespace = true [CMakeLists.txt] trim_trailing_whitespace = true indent_style = space indent_size = 2 tmp_ns50wwy/src/include/ngspice/0000755000175000017500000000000014163340332017013 5ustar carstencarstentmp_ns50wwy/src/include/ngspice/fteoptdefs.h0000644000175000017500000000145114163340332021330 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 FTESTATnetPrepTime; /* total time required to do subcircuit and numparam expansion */ double FTESTATnetParseTime; /* total time required to parse the netlist */ } FTESTATistics; enum { FTEOPT_NLDECK = 1, FTEOPT_NLT, FTEOPT_PRT, FTEOPT_NPT, }; #endif tmp_ns50wwy/src/include/ngspice/evtproto.h0000644000175000017500000000504014163340332021045 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 EVTunsetup(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 tmp_ns50wwy/src/include/ngspice/dstring.h0000644000175000017500000001720514163340332020643 0ustar carstencarsten/* dstring.h */ #ifndef DSTRING_H #define DSTRING_H #include #include #include #include #include "ngspice/memory.h" /* Error codes */ #define DS_E_OK 0 #define DS_E_INVALID (-1) #define DS_E_NO_MEMORY (-2) /* Macros to create and initialize the most common type of dstring, which is * one that uses the stack for the initial buffer and begins empty. * * Example: * * DS_CREATE(ds1, 50); // Creates dstring ds1 backed by 50 bytes of stack * // memory and initialized to "". * Note that each DS_CREATE macro must be on a separate line due to the use * of the __LINE__ macro. Using __COUNTER__ in its place would resolve this * issue, but __COUNTER__ is not part of the ANSI standard. */ #undef DS_CONCAT #undef DS_CONCAT2 #define DS_CONCAT2(a, b) a##b #define DS_CONCAT(a, b) DS_CONCAT2(a, b) #define DS_CREATE(ds_name, n) \ char DS_CONCAT(ds_buf___, __LINE__)[n]; \ DSTRING ds_name; \ ds_init(&ds_name, DS_CONCAT(ds_buf___, __LINE__), 0,\ sizeof DS_CONCAT(ds_buf___, __LINE__), ds_buf_type_stack) /* Structure for maintaining a dynamic string */ typedef struct Dstring { char *p_buf; /* Active data buffer */ size_t length; /* Number of characters in the string excluding the * terminating NULL. */ size_t n_byte_alloc; /* Allocated size of current buffer */ char *p_stack_buf; /* address of stack-based buffer backing dstring * or NULL if none */ size_t n_byte_stack_buf; /* size of stack_buffer or 0 if none */ } DSTRING, *DSTRINGPTR; /* Enumeration defining buffer types used during initialization */ typedef enum ds_buf_type { ds_buf_type_stack, /* Buffer allocated from stack */ ds_buf_type_heap /* Buffer allocated from heap */ } ds_buf_type_t; /* Enumeration defining case conversion */ typedef enum ds_case { ds_case_as_is, /* Leave characters as they are */ ds_case_lower, /* Losercase chars */ ds_case_upper /* Uppercase chars */ } ds_case_t; /* General initialization */ int ds_init(DSTRING *p_ds, char *p_buf, size_t length_string, size_t n_byte_buf, ds_buf_type_t type_buffer); /* Free all memory used */ void ds_free(DSTRING *p_ds); /* Concatenate string */ int ds_cat_str_case(DSTRING *p_ds, const char *sz, ds_case_t case_type); inline int ds_cat_str(DSTRING *p_ds, const char *sz) { return ds_cat_str_case(p_ds, sz, ds_case_as_is); } /* end of function ds_cat_str */ /* Concatenate character */ int ds_cat_char_case(DSTRING *p_ds, char c, ds_case_t case_type); inline int ds_cat_char(DSTRING *p_ds, char c) { return ds_cat_char_case(p_ds, c, ds_case_as_is); } /* end of function ds_cat_char */ /* Concatenate another dstring */ int ds_cat_ds_case(DSTRING *p_ds_dst, const DSTRING *p_ds_src, ds_case_t case_type); inline int ds_cat_ds(DSTRING *p_ds_dst, const DSTRING *p_ds_src) { return ds_cat_ds_case(p_ds_dst, p_ds_src, ds_case_as_is); } /* end of function ds_cat_ds */ /* General concatenation of a memory buffer */ int ds_cat_mem_case(DSTRING *p_ds, const char *p_src, size_t n_char, ds_case_t type_case); inline int ds_cat_mem(DSTRING *p_ds, const char *p_src, size_t n_char) { return ds_cat_mem_case(p_ds, p_src, n_char, ds_case_as_is); } /* end of function ds_cat_mem */ /* Ensure minimum internal buffer size */ int ds_reserve(DSTRING *p_ds, size_t n_byte_alloc_min); /* Concatenate the result of a printf-style format */ int ds_cat_printf(DSTRING *p_ds, const char *sz_fmt, ...); /* Concatenate the result of a printf-style format using va_list */ int ds_cat_vprintf(DSTRING *p_ds, const char *sz_fmt, va_list p_arg); /* Reallocate/free to eliminate unused buffer space */ int ds_compact(DSTRING *p_ds); /* This function sets the length of the buffer to some size less than * the current allocated size * * Return codes * DS_E_OK: length set OK * DS_E_INVALID: length to large for current allocation */ inline int ds_set_length(DSTRING *p_ds, size_t length) { if (length >= p_ds->n_byte_alloc) { return DS_E_INVALID; } p_ds->length = length; p_ds->p_buf[p_ds->length] = '\0'; return DS_E_OK; } /* end of function ds_set_length */ /* Sets the length of the data in the buffer to 0. It is equivalent to * ds_set_length(p_ds, 0), except that the check for a valid length can * be skipped since 0 is always valid. */ inline void ds_clear(DSTRING *p_ds) { p_ds->length = 0; p_ds->p_buf[0] = '\0'; } /* end of function ds_clear */ /* This function, if successful, returns an allocated buffer with the * string to the caller and frees any other resources used by the DSTRING. * If the buffer is not allocated and the DS_FREE_MOVE_OPT_FORCE_ALLOC * option is not selected, NULL is returned. * * Parameters * p_ds: Address of DSTRING to free * opt: Bitwise options * DS_FREE_MOVE_OPT_FORCE_ALLOC -- Force allocation in all cases. * If fails, the DSTRING is unchanged. * DS_FREE_MOVE_OPT_COMPACT -- Resize allocation to minimum size * if one already exists. * * Return values * The data string is returned as an allocation to be freed by the caller * NULL is returned if either the allocation was stack-based and * DS_FREE_MOVE_OPT_FORCE_ALLOC was not selected or if * DS_FREE_MOVE_OPT_COMPACT or DS_FREE_MOVE_OPT_FORCE_ALLOC * options were given and there was an allocation failure. * In any case when NULL is returned, the DSTRING is unchanged * on return. * * Remarks * To force freeing of resources if this function fails, either it can * be called again with no options or equivalently ds_free() can be used. */ #define DS_FREE_MOVE_OPT_FORCE_ALLOC 1 #define DS_FREE_MOVE_OPT_COMPACT 2 inline char *ds_free_move(DSTRING *p_ds, unsigned int opt) { char * const p_buf_active = p_ds->p_buf; /* If the buffer is from the stack, allocate if requested. Note that the * compaction option is meaningless in this case since it is allocated * to the minimum size required */ if (p_buf_active == p_ds->p_stack_buf) { /* not allocated */ if (opt & DS_FREE_MOVE_OPT_FORCE_ALLOC) { /* Allocate to minimum size */ size_t n_byte_alloc = p_ds->length + 1; char * const p_ret = TMALLOC(char, n_byte_alloc); if (p_ret == (char *) NULL) { return (char *) NULL; } return memcpy(p_ret, p_buf_active, n_byte_alloc); } return (char *) NULL; } /* Else allocated */ if (opt & DS_FREE_MOVE_OPT_COMPACT) { /* Allocate to minimum size */ size_t n_byte_alloc = p_ds->length + 1; char * const p_ret = TREALLOC(char, p_buf_active, n_byte_alloc); if (p_ret == (char *) NULL) { /* Realloc to smaller size somehow failed! */ return (char *) NULL; } return p_ret; /* Return resized allocation */ } return p_buf_active; /* Return unchanged */ } /* end of function ds_free_move */ /* Returns the address of the buffer. The caller should never attempt * to free the buffer. With care (not changing the length), it can * be modified. */ inline char *ds_get_buf(DSTRING *p_ds) { return p_ds->p_buf; } /* end of function ds_get_buffer */ /* Returns the current dstring length */ inline size_t ds_get_length(const DSTRING *p_ds) { return p_ds->length; } /* end of function ds_get_length */ /* Returns the allocated dstring buffer size */ inline size_t ds_get_buf_size(const DSTRING *p_ds) { return p_ds->n_byte_alloc; } /* end of function ds_get_buf_size */ #ifdef DSTRING_UNIT_TEST #include int ds_test(FILE *fp); #endif /* UNIT_TEST_DSTRING */ #endif /* include guard */ tmp_ns50wwy/src/include/ngspice/fteinp.h0000644000175000017500000000055014163340332020451 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 #define LS_RUNABLE 4 #endif tmp_ns50wwy/src/include/ngspice/twodev.h0000644000175000017500000001064614163340332020503 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 tmp_ns50wwy/src/include/ngspice/opdefs.h0000644000175000017500000000072314163340332020446 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 tmp_ns50wwy/src/include/ngspice/cm.h0000644000175000017500000000370714163340332017572 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 tmp_ns50wwy/src/include/ngspice/dvec.h0000644000175000017500000000630114163340332020105 0ustar carstencarsten#ifndef ngspice_DVEC_H #define ngspice_DVEC_H #include "ngspice/bool.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_RETLIN } 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 dveclist *next; struct dvec *vector; /* Flag that this list owns the vector in the sense that it is * responsible for freeing it. Depending on how the entry was created, * it either made its own copy or "borrowed" one from anothe use. */ bool f_own_vector; }; struct dvec *dvec_alloc(/* NOT CONST -- assigned to const */ 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 tmp_ns50wwy/src/include/ngspice/meshdefs.h0000644000175000017500000000176114163340332020767 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 tmp_ns50wwy/src/include/ngspice/missing_math.h0000644000175000017500000000146714163340332021656 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 tmp_ns50wwy/src/include/ngspice/fteparse.h0000644000175000017500000000505714163340332021004 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 tmp_ns50wwy/src/include/ngspice/ipc.h0000644000175000017500000000532114163340332017740 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 tmp_ns50wwy/src/include/ngspice/twomesh.h0000644000175000017500000001747214163340332020665 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 tmp_ns50wwy/src/include/ngspice/noisedef.h0000644000175000017500000001243514163340332020765 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 tmp_ns50wwy/src/include/ngspice/ipcproto.h0000644000175000017500000000517414163340332021032 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 tmp_ns50wwy/src/include/ngspice/tskdefs.h0000644000175000017500000000521514163340332020632 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 TSKcshunt; /* shunt capacitor to ground */ 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 */ unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */ double TSKabsDv; /* abs limit for iter-iter voltage change */ double TSKrelDv; /* rel limit for iter-iter voltage change */ double TSKepsmin; /* minimum value for log */ }; #endif tmp_ns50wwy/src/include/ngspice/Makefile.am0000644000175000017500000000344214163340332021052 0ustar carstencarsten## Process this file with automake to produce Makefile.in noinst_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 \ wincolornames.h \ wstdio.h if SHARED_MODULE pkginclude_HEADERS = \ sharedspice.h endif SHARED_MODULE MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/src/include/ngspice/memory.h0000644000175000017500000000400414163340332020472 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 tmp_ns50wwy/src/include/ngspice/iferrmsg.h0000644000175000017500000000523314163340332021005 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 tmp_ns50wwy/src/include/ngspice/mobdefs.h0000644000175000017500000000270214163340332020604 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 tmp_ns50wwy/src/include/ngspice/carddefs.h0000644000175000017500000000124214163340332020736 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 tmp_ns50wwy/src/include/ngspice/stringutil.h0000644000175000017500000001002614163340332021367 0ustar carstencarsten/************* * Header file for string.c * 1999 E. Rouat ************/ #ifndef ngspice_STRINGUTIL_H #define ngspice_STRINGUTIL_H #include #include #include "ngspice/config.h" #include "ngspice/bool.h" #ifdef __GNUC__ #define ATTR_TPRINTF __attribute__ ((format (__printf__, 1, 2))) #else #define ATTR_TPRINTF #endif /* Structure for storing state to find substring matches in a string */ struct substring_match_info { /* Input data */ size_t n_char_pattern; /* length of pattern being located */ const char *p_pattern; /* pattern to find */ size_t n_char_string; /* length of string to search */ const char *p_string; /* String to search. Final null not required */ bool f_overlap; /* flag that substring matches can overlap */ /* Intermediate results */ size_t n_char_pattern_1; /* length of pattern being located - 1 */ size_t msb_factor; /* constant related to updating hash */ size_t h_pattern; /* hash value of pattern */ size_t h_string; /* current hash value of string */ const char *p_last; /* last possible substring match location */ bool f_done; /* flag that last match was found */ }; void appendc(char *s, char c); int cieq(const char *p, const char *s); int cieqn(const char *p, const char *s, size_t n); int ciprefix(const char *p, const char *s); char *dup_string(const char *str, size_t n_char); char *find_first_of(const char *haystack, unsigned int n_needle, const char *p_needle); int get_comma_separated_values(char *values[], char *str); int get_int_n(const char *str, size_t n, int *p_value); #ifdef COMPILE_UNUSED_FUNCTIONS size_t get_substring_matches(size_t n_char_pattern, const char *p_pattern, size_t n_char_string, const char *p_string, size_t n_elem_buf, char *p_match_buf, bool f_overlap); #endif char *gettok(char **s); char *gettok_char(char **s, char p, bool inc_p, bool nested); char *gettok_instance(char **); bool has_escape_or_quote(size_t n, const char *str); bool is_arith_char(char c); bool isquote(char ch); int model_name_match(const char *token, const char *model_name); int prefix(const char *p, const char *s); int prefix_n(size_t n_char_prefix, const char *prefix, size_t n_char_string, const char *string); int scannum_adv(char **p_str); bool str_has_arith_char(char *s); char *stripWhiteSpacesInsideParens(const char *str); void strtolower(char *str); void strtoupper(char *str); void substring_match_init(size_t n_char_pattern, const char *p_pattern, size_t n_char_string, const char *p_string, bool f_overlap, struct substring_match_info *p_scan_state); char *substring_match_next(struct substring_match_info *p_scan_state); int substring_n(size_t n_char_pattern, const char *p_pattern, size_t n_char_str, const char *p_str); char *tprintf(const char *fmt, ...) ATTR_TPRINTF; char *tvprintf(const char *fmt, va_list args); /* Allocate and create a copy of a string if the argument is not null or * returns null if it is. */ inline char *copy(const char *str) { return str == (char *) NULL ? (char *) NULL : dup_string(str, strlen(str)); } /* end of function copy */ /* Allocate a buffer and copy a substring, from 'str' to 'end' * including *str, excluding *end */ inline char *copy_substring(const char *str, const char *end) { return dup_string(str, (size_t) (end - str)); } /* end of function copy_substring */ /* Try to identify an unsigned integer that begins a string. Stop when a * non- numeric character is reached. There is no way to distinguish * between a value of 0 and a string that does not contain a numeric * value. */ inline int scannum(const char *str) { return scannum_adv((char **) &str); } /* end of function scannum */ /* Determine whether sub is a substring of str. */ inline int substring(const char *sub, const char *str) { return strstr(str, sub) != (char *) NULL; } /* end of function substring */ #ifdef CIDER /* cider integration */ int cinprefix(char *p, char *s, int n); int cimatch(char *p, char *s); #endif #endif /* include guard */ tmp_ns50wwy/src/include/ngspice/wincolornames.h0000644000175000017500000001645414163340332022056 0ustar carstencarsten/* list of available colors according to https://www.codeproject.com/Articles/1276/Naming-Common-Colors */ #if !defined(__ID_COLOR_NAMES_H) #define __ID_COLOR_NAMES_H struct colortable { COLORREF rgbc; char name[32]; int R; int G; int B; }; static struct colortable ctable[] = { { 0, "AliceBlue ",240,248,255 }, { 0, "AntiqueWhite ",250,235,215 }, { 0, "Aqua ", 0,255,255 }, { 0, "Aquamarine ",127,255,212 }, { 0, "Azure ",240,255,255 }, { 0, "Beige ",245,245,220 }, { 0, "Bisque ",255,228,196 }, { 0, "Black ", 0, 0, 0 }, { 0, "BlanchedAlmond ",255,255,205 }, { 0, "Blue ", 0, 0,255 }, { 0, "BlueViolet ",138, 43,226 }, { 0, "Brown ",165, 42, 42 }, { 0, "Burlywood ",222,184,135 }, { 0, "CadetBlue ", 95,158,160 }, { 0, "Chartreuse ",127,255, 0 }, { 0, "Chocolate ",210,105, 30 }, { 0, "Coral ",255,127, 80 }, { 0, "CornflowerBlue ",100,149,237 }, { 0, "Cornsilk ",255,248,220 }, { 0, "Crimson ",220, 20, 60 }, { 0, "Cyan ", 0,255,255 }, { 0, "DarkBlue ", 0, 0,139 }, { 0, "DarkCyan ", 0,139,139 }, { 0, "DarkGoldenRod ",184,134, 11 }, { 0, "DarkGray ",169,169,169 }, { 0, "DarkGreen ", 0,100, 0 }, { 0, "DarkKhaki ",189,183,107 }, { 0, "DarkMagenta ",139, 0,139 }, { 0, "DarkOliveGreen ", 85,107, 47 }, { 0, "DarkOrange ",255,140, 0 }, { 0, "DarkOrchid ",153, 50,204 }, { 0, "DarkRed ",139, 0, 0 }, { 0, "DarkSalmon ",233,150,122 }, { 0, "DarkSeaGreen ",143,188,143 }, { 0, "DarkSlateBlue ", 72, 61,139 }, { 0, "DarkSlateGray ", 47, 79, 79 }, { 0, "DarkTurquoise ", 0,206,209 }, { 0, "DarkViolet ",148, 0,211 }, { 0, "DeepPink ",255, 20,147 }, { 0, "DeepSkyBlue ", 0,191,255 }, { 0, "DimGray ",105,105,105 }, { 0, "DodgerBlue ", 30,144,255 }, { 0, "FireBrick ",178, 34, 34 }, { 0, "FloralWhite ",255,250,240 }, { 0, "ForestGreen ", 34,139, 34 }, { 0, "Fuchsia ",255, 0,255 }, { 0, "Gainsboro ",220,220,220 }, { 0, "GhostWhite ",248,248,255 }, { 0, "Gold ",255,215, 0 }, { 0, "GoldenRod ",218,165, 32 }, { 0, "Gray ",127,127,127 }, { 0, "Green ", 0,255, 0 }, { 0, "GreenYellow ",173,255, 47 }, { 0, "HoneyDew ",240,255,240 }, { 0, "HotPink ",255,105,180 }, { 0, "IndianRed ",205, 92, 92 }, { 0, "Indigo ", 75, 0,130 }, { 0, "Ivory ",255,255,240 }, { 0, "Khaki ",240,230,140 }, { 0, "Lavender ",230,230,250 }, { 0, "LavenderBlush ",255,240,245 }, { 0, "Lawngreen ",124,252, 0 }, { 0, "LemonChiffon ",255,250,205 }, { 0, "LightBlue ",173,216,230 }, { 0, "LightCoral ",240,128,128 }, { 0, "LightCyan ",224,255,255 }, { 0, "LightGoldenRodYellow ",250,250,210 }, { 0, "LightGreen ",144,238,144 }, { 0, "LightGrey ",211,211,211 }, { 0, "LightPink ",255,182,193 }, { 0, "LightSalmon ",255,160,122 }, { 0, "LightSeaGreen ", 32,178,170 }, { 0, "LightSkyBlue ",135,206,250 }, { 0, "LightSlateGray ",119,136,153 }, { 0, "LightSteelBlue ",176,196,222 }, { 0, "Light Violet ",128, 0,255 }, { 0, "LightYellow ",255,255,224 }, { 0, "Lime ", 0,255, 0 }, { 0, "LimeGreen ", 50,205, 50 }, { 0, "Linen ",250,240,230 }, { 0, "Magenta ",255, 0,255 }, { 0, "Maroon ",128, 0, 0 }, { 0, "MediumAquamarine ",102,205,170 }, { 0, "MediumBlue ", 0, 0,205 }, { 0, "MediumOrchid ",186, 85,211 }, { 0, "MediumPurple ",147,112,219 }, { 0, "MediumSeaGreen ", 60,179,113 }, { 0, "MediumSlateBlue ",123,104,238 }, { 0, "MediumSpringGreen ", 0,250,154 }, { 0, "MediumTurquoise ", 72,209,204 }, { 0, "MediumVioletRed ",199, 21,133 }, { 0, "MidnightBlue ", 25, 25,112 }, { 0, "MintCream ",245,255,250 }, { 0, "MistyRose ",255,228,225 }, { 0, "Moccasin ",255,228,181 }, { 0, "NavajoWhite ",255,222,173 }, { 0, "Navy ", 0, 0,128 }, { 0, "Navyblue ",159,175,223 }, { 0, "OldLace ",253,245,230 }, { 0, "Olive ",128,128, 0 }, { 0, "OliveDrab ",107,142, 35 }, { 0, "Orange ",255,165, 0 }, { 0, "OrangeRed ",255, 69, 0 }, { 0, "Orchid ",218,112,214 }, { 0, "PaleGoldenRod ",238,232,170 }, { 0, "PaleGreen ",152,251,152 }, { 0, "PaleTurquoise ",175,238,238 }, { 0, "PaleVioletRed ",219,112,147 }, { 0, "PapayaWhip ",255,239,213 }, { 0, "PeachPuff ",255,218,185 }, { 0, "Peru ",205,133, 63 }, { 0, "Pink ",255,192,203 }, { 0, "Plum ",221,160,221 }, { 0, "PowderBlue ",176,224,230 }, { 0, "Purple ",128, 0,128 }, { 0, "Red ",255, 0, 0 }, { 0, "RosyBrown ",188,143,143 }, { 0, "RoyalBlue ", 65,105,225 }, { 0, "SaddleBrown ",139, 69, 19 }, { 0, "Salmon ",250,128,114 }, { 0, "SandyBrown ",244,164, 96 }, { 0, "SeaGreen ", 46,139, 87 }, { 0, "SeaShell ",255,245,238 }, { 0, "Sienna ",160, 82, 45 }, { 0, "Silver ",192,192,192 }, { 0, "SkyBlue ",135,206,235 }, { 0, "SlateBlue ",106, 90,205 }, { 0, "SlateGray ",112,128,144 }, { 0, "Snow ",255,250,250 }, { 0, "SpringGreen ", 0,255,127 }, { 0, "SteelBlue ", 70,130,180 }, { 0, "Tan ",210,180,140 }, { 0, "Teal ", 0,128,128 }, { 0, "Thistle ",216,191,216 }, { 0, "Tomato ",255, 99, 71 }, { 0, "Turquoise ", 64,224,208 }, { 0, "Violet ",238,130,238 }, { 0, "WebGreen ", 0,128, 0 }, { 0, "Wheat ",245,222,179 }, { 0, "White ",255,255,255 }, { 0, "WhiteSmoke ",245,245,245 }, { 0, "Yellow ",255,255, 0 }, { 0, "YellowGreen ",139,205, 50 } }; char* stdcolornames[] = { "black", "white", "green", "red", "blue", "yellow", "violet", "azure", "orange", "brown", "light violet", "pink", "white", "green", "red", "blue", "yellow", "violet", "azure", "orange", "brown", "light violet", "pink" }; #endif // __ID_COLOR_NAMES tmp_ns50wwy/src/include/ngspice/evttypes.h0000644000175000017500000000225114163340332021047 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 tmp_ns50wwy/src/include/ngspice/miftypes.h0000644000175000017500000001045614163340332021032 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 Mif_Complex { 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 tmp_ns50wwy/src/include/ngspice/cmtypes.h0000644000175000017500000000242414163340332020652 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 tmp_ns50wwy/src/include/ngspice/trcvdefs.h0000644000175000017500000000330014163340332021000 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 tmp_ns50wwy/src/include/ngspice/gendev.h0000644000175000017500000001124314163340332020435 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 tmp_ns50wwy/src/include/ngspice/multi_line.h0000644000175000017500000000176014163340332021331 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; tmp_ns50wwy/src/include/ngspice/dgen.h0000644000175000017500000000105514163340332020102 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 tmp_ns50wwy/src/include/ngspice/randnumb.h0000644000175000017500000000106514163340332020774 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 tmp_ns50wwy/src/include/ngspice/complex.h0000644000175000017500000004371114163340332020641 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)) {\ (void) fprintf(cp_err, "Error: argument out of range for %s\n",\ name);\ xrc = -1;\ goto EXITPOINT;\ } #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 tmp_ns50wwy/src/include/ngspice/lsort.h0000644000175000017500000000557214163340332020340 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; } tmp_ns50wwy/src/include/ngspice/wstdio.h0000644000175000017500000000650314163340332020501 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 tmp_ns50wwy/src/include/ngspice/optdefs.h0000644000175000017500000000742014163340332020633 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, OPT_CSHUNT, }; #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 tmp_ns50wwy/src/include/ngspice/enh.h0000644000175000017500000000514614163340332017744 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 tmp_ns50wwy/src/include/ngspice/plot.h0000644000175000017500000000222114163340332020137 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 */ int pl_xdim2d; /* 2D Cider plot x dimension */ int pl_ydim2d; /* 2D Cider plot y dimension */ } ; #endif tmp_ns50wwy/src/include/ngspice/mifparse.h0000644000175000017500000001101514163340332020770 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 tmp_ns50wwy/src/include/ngspice/tfdefs.h0000644000175000017500000000144614163340332020444 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 tmp_ns50wwy/src/include/ngspice/sharedspice.h0000644000175000017500000003632214163340332021464 0ustar carstencarsten/* header file for shared ngspice */ /* Copyright 2021 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(). All boolean signals (NG_BOOL) are of type _Bool, if ngspice is compiled. They are of type bool if sharedspice.h is used externally. */ #ifndef NGSPICE_PACKAGE_VERSION #define NGSPICE_PACKAGE_VERSION "36" #endif /* we have NG_BOOL instead of BOOL */ #ifndef HAS_NG_BOOL #define HAS_NG_BOOL 1 #endif #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 /* NG_BOOL is the boolean variable at the ngspice interface. When ompiling ngspice shared module, typedef to _BOOL, which is boolean in C, when used externally, keep it to be of type bool, as has been available in the past. */ #ifndef SHARED_MODULE typedef bool NG_BOOL; #else typedef _Bool NG_BOOL; #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 */ NG_BOOL is_scale; /* if 'name' is the scale vector */ NG_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 */ NG_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, NG_BOOL, NG_BOOL, int, void*); /* int exit status NG_BOOL if true: immediate unloading dll, if false: just set flag, unload is done when function has returned NG_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)(NG_BOOL, int, void*); /* NG_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-but-one entry of the array has to be a .end card, followed by the last entry 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 NG_BOOL ngSpice_running(void); /* set a breakpoint in ngspice */ IMPEXP NG_BOOL ngSpice_SetBkpt(double time); #ifdef __cplusplus } #endif #endif tmp_ns50wwy/src/include/ngspice/ciderinp.h0000644000175000017500000000254614163340332020770 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 tmp_ns50wwy/src/include/ngspice/hash.h0000644000175000017500000004206514163340332020116 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_delete_special(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 tmp_ns50wwy/src/include/ngspice/smpdefs.h0000644000175000017500000000321714163340332020630 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 tmp_ns50wwy/src/include/ngspice/grid.h0000644000175000017500000000063514163340332020115 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 tmp_ns50wwy/src/include/ngspice/optndefs.h0000644000175000017500000000253414163340332021012 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 tmp_ns50wwy/src/include/ngspice/numconst.h0000644000175000017500000001602114163340332021032 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 tmp_ns50wwy/src/include/ngspice/cpdefs.h0000644000175000017500000000432414163340332020433 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)(const wordlist *wl, const 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; } ; #define CT_ALIASES 1 #define CT_LABEL 15 /* Get all the extern definitions... */ #include "ngspice/cpextern.h" #endif tmp_ns50wwy/src/include/ngspice/contdefs.h0000644000175000017500000000130614163340332020771 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 tmp_ns50wwy/src/include/ngspice/methdefs.h0000644000175000017500000000206614163340332020767 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 tmp_ns50wwy/src/include/ngspice/sensgen.h0000644000175000017500000000106514163340332020630 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 *); tmp_ns50wwy/src/include/ngspice/fteext.h0000644000175000017500000003274214163340332020473 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_conj(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_integ(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 */ int inp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse, struct card *options, char *filename); extern void inp_source(const char *file); int 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); struct card *inp_readall(FILE *fp, const char *dir_name, bool comfile, bool intfile, bool *expr_w_temper_p); extern FILE *inp_pathopen(const char *name, const 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; int ft_numparse(char **s, bool whole, double *p_val); /* 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); extern struct pnode* ft_getpnames_quotes(wordlist* wl, bool check); /* 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(const 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(const char *name); extern struct plot *get_plot(const char *name); extern void plot_new(struct plot *pl); extern char *vec_basename(struct dvec *v); extern void vec_transpose(struct dvec *v); extern struct dvec* copycut(struct dvec* ov, struct dvec* newscalevec, int istart, int istop); /* main.c */ extern bool ft_intrpt; extern bool ft_setflag; /* error.c */ #endif tmp_ns50wwy/src/include/ngspice/bool.h0000644000175000017500000000035514163340332020122 0ustar carstencarsten#ifndef ngspice_BOOL_H #define ngspice_BOOL_H //typedef unsigned char bool; #ifndef __cplusplus typedef int bool; #endif typedef int BOOL; #define BOOLEAN int #define TRUE 1 #define FALSE 0 #define NO 0 #define YES 1 #endif tmp_ns50wwy/src/include/ngspice/wallace.h0000644000175000017500000000124714163340332020600 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); void destroy_wallace(void); tmp_ns50wwy/src/include/ngspice/jobdefs.h0000644000175000017500000000100114163340332020570 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 tmp_ns50wwy/src/include/ngspice/swec.h0000644000175000017500000002725214163340332020135 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 tmp_ns50wwy/src/include/ngspice/fteinput.h0000644000175000017500000000204614163340332021024 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 tmp_ns50wwy/src/include/ngspice/mif.h0000644000175000017500000000434714163340332017747 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 tmp_ns50wwy/src/include/ngspice/numgen.h0000644000175000017500000000231614163340332020457 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 tmp_ns50wwy/src/include/ngspice/meshext.h0000644000175000017500000000130414163340332020637 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 tmp_ns50wwy/src/include/ngspice/elctdefs.h0000644000175000017500000000211414163340332020753 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 tmp_ns50wwy/src/include/ngspice/ifsim.h0000644000175000017500000004335014163340332020300 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 tmp_ns50wwy/src/include/ngspice/suffix.h0000644000175000017500000000002014163340332020460 0ustar carstencarsten/* Null file */ tmp_ns50wwy/src/include/ngspice/cluster.h0000644000175000017500000000122114163340332020641 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 tmp_ns50wwy/src/include/ngspice/enhtypes.h0000644000175000017500000000132014163340332021017 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 tmp_ns50wwy/src/include/ngspice/cmconstants.h0000644000175000017500000000164014163340332021521 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 tmp_ns50wwy/src/include/ngspice/ftedebug.h0000644000175000017500000000354214163340332020755 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 tmp_ns50wwy/src/include/ngspice/domndefs.h0000644000175000017500000000227314163340332020767 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 tmp_ns50wwy/src/include/ngspice/hlpdefs.h0000644000175000017500000000636314163340332020621 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; tmp_ns50wwy/src/include/ngspice/ChangeLog0000644000175000017500000001015314163340332020565 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 tmp_ns50wwy/src/include/ngspice/matldefs.h0000644000175000017500000000425714163340332020773 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 tmp_ns50wwy/src/include/ngspice/profile.h0000644000175000017500000000300614163340332020623 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 tmp_ns50wwy/src/include/ngspice/ftedbgra.h0000644000175000017500000000055214163340332020744 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*); tmp_ns50wwy/src/include/ngspice/graph.h0000644000175000017500000000752314163340332020274 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; bool nolegend, nounits; 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; char ticchar[2]; 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; /* colors used */ unsigned long colorarray[25]; /* we have a mother graph */ int mgraphid; /* linewidths */ int graphwidth; int gridwidth; /* Space here is allocated by NewViewport and de-allocated by DestroyGraph. */ void *devdep; size_t n_byte_devdep; /* Size of devdep. Needed to allow copying */ }; /* 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 tmp_ns50wwy/src/include/ngspice/1-f-code.h0000644000175000017500000000471114163340332020462 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; } } tmp_ns50wwy/src/include/ngspice/bdrydefs.h0000644000175000017500000000265714163340332021000 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 tmp_ns50wwy/src/include/ngspice/mifcmdat.h0000644000175000017500000002613314163340332020755 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 tmp_ns50wwy/src/include/ngspice/trandefs.h0000644000175000017500000000123214163340332020770 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 tmp_ns50wwy/src/include/ngspice/numenum.h0000644000175000017500000000373214163340332020655 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 #ifdef _MSC_VER #undef INTERFACE #endif /* 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 tmp_ns50wwy/src/include/ngspice/devdefs.h0000644000175000017500000002105114163340332020603 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); double DEVlimitlog(double, double, double, int*); 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 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 tmp_ns50wwy/src/include/ngspice/pssdefs.h0000644000175000017500000000133514163340332020635 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 tmp_ns50wwy/src/include/ngspice/distodef.h0000644000175000017500000001460514163340332020773 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 tmp_ns50wwy/src/include/ngspice/inpptree.h0000644000175000017500000001153514163340332021017 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 /* limits for exp function */ #define EXPARGMAX 14. #define EXPMAX 1202604.284 /* And in IFeval.c */ extern int IFeval(IFparseTree *tree, double gmin, double *result, double *vals, double *derivs); #endif tmp_ns50wwy/src/include/ngspice/defines.h0000644000175000017500000000640314163340332020604 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 /* Floating point and integral limits */ #include #include /* * Physical constants (const.h) */ /* For definitions of CHARGE, CONSTCtoK CONSTboltz, CONSTepsZero, * CONSTepsSi02, CONSTmuZero, REFTEMP */ #include "ngspice/const.h" /* These constants are defined by GCC in math.h, but they are not part of * the ANSI C standard. The #ifndefs will prevent warnings regarding macro * redefinitions if this file is included AFTER math.h. However, if the * order is reversed, the warnings will occur. Thus, they introduce a header * order dependency. A better solution would be to rename the macros to * something like NGM_* (ngspice math) throughout the source code. Then there * would be no header ordering dependency. */ #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 */ /* Largest exponent such that exp(MAX_EXP_ARG) <= DBL_MAX * Actual max is ln(DBL_MAX) = 709.78. Unsure if there was any reason * for setting the value lower */ #define MAX_EXP_ARG 709.0 /* 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 TEMPFORMAT2 "%s%d_%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 TEMPFORMAT2 "/tmp/%s%d_%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 LBSIZE_SP 4096 #define EXIT_NORMAL 0 #define EXIT_BAD 1 #define EXIT_INFO 2 #define EXIT_SEGV 3 #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 tmp_ns50wwy/src/include/ngspice/tclspice.h0000644000175000017500000000206314163340332020773 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 tmp_ns50wwy/src/include/ngspice/FastNorm3.h0000644000175000017500000000214714163340332021004 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); tmp_ns50wwy/src/include/ngspice/onedev.h0000644000175000017500000000621214163340332020445 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 tmp_ns50wwy/src/include/ngspice/stringskip.h0000644000175000017500000000105214163340332021357 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 tmp_ns50wwy/src/include/ngspice/outpdefs.h0000644000175000017500000000453214163340332021021 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 tmp_ns50wwy/src/include/ngspice/cktdefs.h0000644000175000017500000004566514163340332020627 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; /* Current transient simulation time */ double CKTdelta; /* next time step in transient simulation */ double CKTdeltaOld[7]; /* Memory for the 7 most recent CKTdelta */ double CKTtemp; /* Actual temperature of CKT, initialzed to 300.15 K in cktinit.c*/ double CKTnomTemp; /* Reference temperature 300.15 K set in cktinit.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 CKTcshunt; /* .options CSHUNT */ 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 *); extern int OPtran(CKTcircuit *, int); #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 #ifdef __cplusplus extern "C" { #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 __cplusplus } #endif #ifdef PREDICTOR extern int NIpred(CKTcircuit *ckt); #endif extern IFfrontEnd *SPfrontEnd; struct circ; extern void inp_evaluate_temper(struct circ *ckt); #endif tmp_ns50wwy/src/include/ngspice/mifdefs.h0000644000175000017500000000657414163340332020615 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 tmp_ns50wwy/src/include/ngspice/numglobs.h0000644000175000017500000000233214163340332021012 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 tmp_ns50wwy/src/include/ngspice/ftedev.h0000644000175000017500000000450014163340332020440 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 #include "ngspice/bool.h" #include "ngspice/typedefs.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, bool isgrid); typedef int disp_fn_Arc_t (int x0, int y0, int radius, double theta, double delta_theta); typedef int disp_fn_Text_t (const 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_Finalize_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; disp_fn_Finalize_t *Finalize; 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 tmp_ns50wwy/src/include/ngspice/numcards.h0000644000175000017500000000242114163340332020777 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 tmp_ns50wwy/src/include/ngspice/cpstd.h0000644000175000017500000000145314163340332020304 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 #include /* 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/dstring.h" #include "ngspice/wordlist.h" #include "ngspice/complex.h" /* Externs defined in std.c */ extern void printnum(char *buf, double num); int printnum_ds(DSTRING *p_ds, double num); extern int cp_numdgt; extern void cp_printword(char *string, FILE *fp); #endif tmp_ns50wwy/src/include/ngspice/sensdefs.h0000644000175000017500000000342314163340332021000 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*/ tmp_ns50wwy/src/include/ngspice/spmatrix.h0000644000175000017500000002530214163340332021035 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 */ tmp_ns50wwy/src/include/ngspice/inpdefs.h0000644000175000017500000001135414163340332020620 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; float w; float l; float nf; }; /* 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); double INPevaluateRKM_R(char **, int *, int); double INPevaluateRKM_C(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); void INPpas4(CKTcircuit *, INPtables *); int INPpName(char *, IFvalue *, CKTcircuit *, int, GENinstance *); int INPtermInsert(CKTcircuit *, char **, INPtables *, CKTnode **); int INPtermSearch(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 INPremTerm(char *token, INPtables *tab); #endif tmp_ns50wwy/src/include/ngspice/ipctiein.h0000644000175000017500000000502614163340332020773 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 tmp_ns50wwy/src/include/ngspice/sperror.h0000644000175000017500000000305114163340332020657 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 tmp_ns50wwy/src/include/ngspice/dllitf.h0000644000175000017500000000745614163340332020456 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 tmp_ns50wwy/src/include/ngspice/mifproto.h0000644000175000017500000000504114163340332021023 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 *); #ifndef CM_IGNORE #define CM_IGNORE(x) (void) (x) #endif #endif /* include guard */ tmp_ns50wwy/src/include/ngspice/acdefs.h0000644000175000017500000000167314163340332020420 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 tmp_ns50wwy/src/include/ngspice/evt.h0000644000175000017500000003522214163340332017766 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 */ int cur_job; /* job selected for plotting etc */ char **job_name; /* Names of different jobs */ char **job_plot; /* Names of different plots created by the job */ 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 tmp_ns50wwy/src/include/ngspice/modldefs.h0000644000175000017500000000260414163340332020763 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 tmp_ns50wwy/src/include/ngspice/cpextern.h0000644000175000017500000001054614163340332021022 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 bool cp_no_histsubst; /* controlled by "no_histsubst" true/false */ 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(bool warn); extern void cp_toplevel(void); extern void cp_popcontrol(void); extern void cp_pushcontrol(void); /* glob.c */ extern char *cp_tildexpand(const 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); /* 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); void cp_vset(const char *varname, enum cp_types type, const 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(const char *word, int *tbfreed); extern struct variable *cp_usrvars(void); int cp_usrset(struct variable *var, bool isset); extern void fatal(void); #endif tmp_ns50wwy/src/include/ngspice/ftedefs.h0000644000175000017500000000572614163340332020616 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 tmp_ns50wwy/src/include/ngspice/typedefs.h0000644000175000017500000000165614163340332021017 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 tmp_ns50wwy/src/include/ngspice/fftext.h0000644000175000017500000001163314163340332020470 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 tmp_ns50wwy/src/include/ngspice/ngspice.h0000644000175000017500000001651214163340332020621 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(const 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(__APPLE__) && defined(__MACH__) #define finite isfinite #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 #ifndef EXT_ASC #if defined(__MINGW32__) || defined(_MSC_VER) #define fopen newfopen extern FILE *newfopen(const char *fn, const char* md); #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 void findtok_noparen(char **p_str, char **p_token, char **p_token_end); 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 *nexttok_noparens(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(const 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 tmp_ns50wwy/src/include/ngspice/compatmode.h0000644000175000017500000000067614163340332021325 0ustar carstencarsten#ifndef ngspice_COMPATMODE_H #define ngspice_COMPATMODE_H #include "ngspice/config.h" struct compat { bool isset; /* at least one mode is set */ bool hs; /* HSPICE */ bool s3; /* spice3 */ bool ll; /* all */ bool ps; /* PSPICE */ bool lt; /* LTSPICE */ bool ki; /* KiCad */ bool a; /* whole netlist */ bool spe; /* spectre */ bool eg; /* EAGLE */ bool mc; /* to be set for 'make check' */ }; extern struct compat newcompat; #endif tmp_ns50wwy/src/include/ngspice/pnode.h0000644000175000017500000000100114163340332020261 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 tmp_ns50wwy/src/include/ngspice/evtudn.h0000644000175000017500000001060614163340332020474 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 tmp_ns50wwy/src/include/ngspice/material.h0000644000175000017500000000521714163340332020767 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 tmp_ns50wwy/src/include/ngspice/macros.h0000644000175000017500000000560114163340332020452 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 tmp_ns50wwy/src/include/ngspice/evtshared.h0000644000175000017500000000166714163340332021163 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 tmp_ns50wwy/src/include/ngspice/inpmacs.h0000644000175000017500000000370414163340332020622 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) tmp_ns50wwy/src/include/ngspice/sim.h0000644000175000017500000000066014163340332017756 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 tmp_ns50wwy/src/include/ngspice/cmproto.h0000644000175000017500000000637214163340332020657 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); #define CM_IGNORE(x) (void) (x) #endif /* include guard */ tmp_ns50wwy/src/include/ngspice/wordlist.h0000644000175000017500000000220214163340332021027 0ustar carstencarsten#ifndef ngspice_WORDLIST_H #define ngspice_WORDLIST_H #include /* 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); #endif tmp_ns50wwy/src/include/ngspice/gendefs.h0000644000175000017500000000316214163340332020601 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 tmp_ns50wwy/src/include/ngspice/dopdefs.h0000644000175000017500000000352514163340332020615 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 tmp_ns50wwy/src/include/ngspice/const.h0000644000175000017500000000407214163340332020315 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 */ tmp_ns50wwy/src/include/ngspice/sen2defs.h0000644000175000017500000000460314163340332020700 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 tmp_ns50wwy/src/include/ngspice/cidersupt.h0000644000175000017500000000570414163340332021174 0ustar carstencarsten/* * cidersupt.h * * CIDER support library header */ #ifndef ngspice_CIDERSUPT_H #define ngspice_CIDERSUPT_H #include #include "ngspice/bool.h" #include "ngspice/gendev.h" #include "ngspice/material.h" #include "ngspice/numglobs.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 int readAsciiData(const char *, int, DOPtable **); extern int readSupremData(const char *, int, int, DOPtable ** ); /* externals for suprmitf.c */ extern int SUPbinRead(const char *, float *, float *, int *, int *); extern int SUPascRead(const 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 ); extern BOOLEAN compareFiletypeVar(char *); #endif tmp_ns50wwy/src/include/ngspice/onemesh.h0000644000175000017500000001170214163340332020623 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 tmp_ns50wwy/src/include/ngspice/pzdefs.h0000644000175000017500000000177414163340332020470 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 tmp_ns50wwy/autogen.sh0000755000175000017500000001370014163340332015153 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 || (awk -W 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 https://sourceforge.net/projects/mot-adms/" echo "(version 2.3.6, tested for ngspice under MINGW on MS Windows)" 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/ngspice-adms-va.7z" 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 tmp_ns50wwy/compile_macos_shared.sh0000644000175000017500000000654514163340332017657 0ustar carstencarsten#!/bin/bash # ngspice build script for MINGW in MSYS2, release or debug version, 64 bit # compile_min_shared.sh #Procedure: # Install MSYS2, plus gcc 64 bit, bison, flex, autoconf, automake, libtool # See https://github.com/orlp/dev-on-windows/wiki/Installing-GCC--&-MSYS2 # start compiling with # './compile_min_shared.sh' for release or './compile_min_shared.sh d' # for debug version of shared ngspice # 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 a 32 bit executable, replace -m64 by -m32 ./configure lines. # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug-sh" ]; then mkdir debug-sh if [ $? -ne 0 ]; then echo "mkdir debug-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" = "d"; then cd debug-sh if [ $? -ne 0 ]; then echo "cd debug-sh failed"; exit 1 ; fi echo "configuring for 64 bit debug" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp CFLAGS="-O0" LDFLAGS=" -lomp" else cd release-sh if [ $? -ne 0 ]; then echo "cd release-sh failed"; exit 1 ; fi echo "configuring for 64 bit release" echo # You may add --enable-adms to the following command for adding adms generated devices # ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug CFLAGS="-O2" LDFLAGS="-lomp" ../configure --with-ngshared --enable-xspice --enable-cider --disable-debug --enable-openmp CC="gcc-11" CXX="g++-11" CFLAGS="-m64 -O2 -I/usr/local/include" LDFLAGS="-m64 -L/usr/local/lib" 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 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/Makefile.am0000644000175000017500000000211514163340332015204 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 README.utf8 \ examples m4 visualc \ cross-compile.sh cross-compile-shared.sh \ compile_min.sh compile_linux.sh compile_min_shared.sh \ compile_linux_shared.sh \ compile_macos_clang.sh compile_macos_gcc.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 ngspice.pc 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` tmp_ns50wwy/README.tcl0000644000175000017500000001140514163340332014613 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. tmp_ns50wwy/FAQ0000644000175000017500000003262414163340332013512 0ustar carstencarsten Ngspice F.A.Q.Version 2.7 (ngspice-36 release) Maintained by Holger Vogt Last update: 12-18-2021 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? 1.14 Are there some (official) tutorials available? 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 over 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 1.14 Are there some (official) tutorials available? Yes, they are, for ngspice, ngspice within KiCAD and on eletro-thermal simulation. You may find them at: http://ngspice.sourceforge.net/tutorials.html 2. DEVELOPMENT 2.1. What is the current version? The latest version released is: * ngspice-36 (released on 01/01/2022) 2.2. What are the latest features in the current release? - New features: + Add function 'integ' to control language. + New dot command .probe for current and differential voltage measurements. + Allow math characters in node names. + Enable x/y contour plots for 2d Cider using gnuplot. + Update to bipolar model, incl. IBE and IBC parameters. + Add garbage collector to cpl code to remove any mem leakage. + Enable .save within subcircuits. + New compile scripts for macOS, for Apple clang and Homebrew gcc. gcc allows compiling a fully featured ngspice (incl. OpenMP) on MAC. + Add RKM notation (e.g. 4k7) if compat mode LT. + Add 'µ' as special character in netlists. + Add parameter 'r' to command 'listing' for (runable). + Fix several issues with CIDER. + New command 'wrnodev' to print matrix RHS in form of .ic = V(node_xx). + Transient operating pointadded to gmin and source stepping. + More SOA parameters on more devices (V, I, T, P). - Bug fixes: + many bugs fixed and code improvements (see bugs 557 and up) + making error messages more verbose + memory leaks removed 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. You may use a GNU C compiler and a LINUX environment to compile it. Ngspice can be compiled under Windows using the mingw or cygwin environment as well as MS Visual Studio. It will readily compile on macOS. FreeBSD or Solaris will do, but are not officially supported. 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, 2022 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. tmp_ns50wwy/NEWS0000644000175000017500000011342114163340332013652 0ustar carstencarstenNgspice-36, January 1st, 2022 ============ - New features: + Add function 'integ' to control language. + New dot command .probe for current and differential voltage measurements. + Allow math characters in node names. + Enable x/y contour plots for 2d Cider using gnuplot. + Update to bipolar model, incl. IBE and IBC parameters. + Add garbage collector to cpl code to remove any mem leakage. + Enable .save within subcircuits. + New compile scripts for macOS, for Apple clang and Homebrew gcc. gcc allows compiling a fully featured ngspice (incl. OpenMP) on MAC. + Add RKM notation (e.g. 4k7) if compat mode LT. + Add 'µ' as special character in netlists. + Add parameter 'r' to command 'listing' for (runable). + Fix several issues with CIDER. + New command 'wrnodev' to print matrix RHS in form of .ic = V(node_xx). + Transient operating pointadded to gmin and source stepping. + More SOA parameters on more devices (V, I, T, P). - Bug fixes: + many bugs fixed and code improvements (see bugs 557 and up) + making error messages more verbose + memory leaks removed Ngspice-35, August 8th, 2021 ============ - New features: + Libtool version info for shared ngspice + Version info in sharedspice.h. + Replace double braces {{...}} by {(...)} in netlist (PSLT mode). + Add plotting of graphics in SVG format. + Setting variable 'nounits' allows suppressing the unit in a graph. + Update of macOS configure script. + In sharedspice API, convert all boolean variables to type integer for C++ compatibility. + Add geometry scaling to diode device model (level 3). + In PS mode exp function is limited to exp(14). + Speed enhancement for using SkyWater PDK under Linux. + Add option Cshunt which adds a capacitor to each circuit voltage node. + Diode device model now has a self heating option. + Allow opening files with names containing ANSI special characters. + Enable using parameters in .options lines. + For C and R devices enable value tokens like 4k7 or 1u2 in addition to 4.7k and 1.2u. + New XSPICE pswitch for internally replacing the vswitch. + Within a single run, allow multiple PS or SVG plots with different names. + Don't replace a device model name by a parameter, if both have the same names. + Analog delay code model 'delay'. + B source (ASRC) will acknowledge temp and dtemp instance parameters. + In CIDER printing of either ASCII or binary is supported. + PSP models now support NMOS and PMOS, update to parameters and examples. + E and G source TABLE function replaces by a B source pwl. + re-enable making the old help system for Linux/Cygwin by --enable-help --enable-oldapps. + Enable the m parameter in E, G, B, R behavioral source/devices. - Bug fixes: + many bugs fixed and code improvements (see bugs 539 and up) + memory leaks removed Ngspice-34, Jan 31st, 2021 ============ - New features: + Improved VBIC model + Get the vector type automatically, if db, ph, cph are applied. + Enable finding 'spinit' if its path contains spaces. + Increase buffer size for command 'listing' to 4096 bytes. + Add compatibility modes for EAGLE (ea) and Spectre (spe). + Add parameter 'plain' to 'plot' command. + Add variables 'plainplot', 'plainwrite', 'plainlet' + Add RF bipolar model HICUM 2.4 to the ngspice C sources. + Add charge formulation for non-linear capacitors. + Remove outdated code from contrib and unsupported directories. + When installing ngspice executable, do not install the headers. + Add support for tc1, tc2, and m for behavioral resistors, which use the B source internally. + Add supporting E_constant Vconst 0 TABLE {Max(V(DP)-V(GN),0)}=((20,120)). + Remove the XSPICE limitation of the current source flag "current". + Remove the XSPICE dependency of the phase parameter for the independent current source. + Drastically reduce the memory requirements if there is a PDK with a lot of binning models (e.g. the SkyWater PDK). + Update to admst: Enhance the Verilog A compatibility. + Add most recent PSP102, Mextram504, BSIMBULK, and BSIMCMG models to the ngspice adms sources. + Model checking for BSIM4.5 will only write to file if an excursion is detected (still to be added to the other BSIM models) + Many code updates not visible to the user, but enhancing stability and efficiency - Bug fixes: + many bugs fixed and code improvements (see bugs 523 and up) + memory leaks removed Ngspice-33, Oct 18th, 2020 ============ - New features: + try first storing the temporary file in user directory, only then in current directory. + Add adding the ngspice icon to the MINGW executable. + Do not print transient initial conditions, if uic is selected. + Enable node names with special characters like '/'. + Do not print "Units" on a graph, if unknown type or settype notype is given. + Unify batch mode and control mode raw file output. + Make PPerror message more verbose. + Make the pwl parameter r adjustable by .param. + Enable flags xdelta, ydelta for 'gnuplot' command. + Enable special characters for cpl model names and parameters. + New command 'cutout': Cut out part of each vector of the current tran plot and copy into a new plot + Compatibility switches KiCad 'ki', and Spectre 'spe' + Remove vceo= and icrating= from bjt model cards. + The tests of cmaths function will be done only on request. + Add alternative temperature model for certain jfet parameters. + Add BJT Kull Quasi-Saturation model. + Improve self heating tempaerature handling in VDMOS model. + Use W/nf for selecting binning model. + Add wnflag as an instance parameter. + Add PSPICE compatible ISWITCH. + Add a limit capability to the code model aswitch. + Add a new code model pswitch. + Many conde updates not visible to the user, but enhancing stability and efficiency - Bug fixes: + many bugs fixed and code improvements (see bugs 484 and up) + memory leaks removed Ngspice-32, Apr 25th, 2020 ============ - New features: + Add resource info on memory used and available for macOS + redesign of memory monitoring + Replace B source pwl by XSPICE PWL Controlled Source that has smooth rounded and stepless differentiable corners. + Get a variable directly from an input file with i/o redirection + Make 64 bit compilation the standard + On Windows VisualStudio compilation we support only VS2019 + Add function 'conj' + Improved error messages for 'meas' command + Improved PSPICE compatibility + VDMOS model now allows electro-thermal simulation Optionally (instance flag 'thermal') 2 thermal nodes tj and tcase are added to the device instance + Enable utf-8 and UNICODE for string handling (maybe switch off by --disable-utf8) + Vastly redisigned plotting capability: vertical text for labeling y axis, independent color selection for background, grid/text and graphs, independent width selection for grid and graph, access to UNICODE fonts, characters may become ticmarks (variable 'ticchar'), RGB color tables included, variable 'nolegend' switches off the legend + Add variables 'oscompiled' + Command 'let' to allow default low and high indices + Upon calculating the operating point, true gmin stepping added + Free the internal control structure memory by sending ngSpice_Command(NULL) + No interrupt handling (SIGINT) in shared ngspice + Limit the exp function to exp(14) + Event simulation output data may be selected by command 'setplot' + Many code updates not directly visible to the user, enhancing stability and efficiency - Bug fixes: + many bugs fixed and code improvements (see bugs 427 and up) + memory leaks removed Ngspice-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. tmp_ns50wwy/Stuarts_Poly_Notes0000644000175000017500000000647514163340332016730 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). tmp_ns50wwy/tests/0000755000175000017500000000000014163340332014313 5ustar carstencarstentmp_ns50wwy/tests/bsim3soidd/0000755000175000017500000000000014163340332016353 5ustar carstencarstentmp_ns50wwy/tests/bsim3soidd/RampVg2.out0000644000175000017500000013701414163340332020370 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 tmp_ns50wwy/tests/bsim3soidd/Makefile.am0000644000175000017500000000060514163340332020410 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 tmp_ns50wwy/tests/bsim3soidd/lib.h0000644000175000017500000001042514163340332017274 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 tmp_ns50wwy/tests/bsim3soidd/inv2.cir0000644000175000017500000000046314163340332017733 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 tmp_ns50wwy/tests/bsim3soidd/nmosdd.mod0000644000175000017500000000405514163340332020344 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 tmp_ns50wwy/tests/bsim3soidd/t5.cir0000644000175000017500000000042414163340332017402 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 tmp_ns50wwy/tests/bsim3soidd/t3.out0000644000175000017500000024625314163340332017446 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. tmp_ns50wwy/tests/bsim3soidd/t4.cir0000644000175000017500000000044414163340332017403 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 tmp_ns50wwy/tests/bsim3soidd/t5.out0000644000175000017500000013114414163340332017440 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 tmp_ns50wwy/tests/bsim3soidd/pmosdd.mod0000644000175000017500000000403214163340332020341 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 tmp_ns50wwy/tests/bsim3soidd/RampVg2.cir0000644000175000017500000000047014163340332020331 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 tmp_ns50wwy/tests/bsim3soidd/ring51.cir0000644000175000017500000000064514163340332020164 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 tmp_ns50wwy/tests/bsim3soidd/t3.cir0000644000175000017500000000043414163340332017401 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 tmp_ns50wwy/tests/bsim3soidd/inv2.out0000644000175000017500000002735514163340332017776 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 tmp_ns50wwy/tests/bsim3soidd/t4.out0000644000175000017500000013114414163340332017437 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 tmp_ns50wwy/tests/hisimhv2/0000755000175000017500000000000014163340332016044 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/Makefile.am0000644000175000017500000000050714163340332020102 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 tmp_ns50wwy/tests/hisimhv2/nmos/0000755000175000017500000000000014163340332017020 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/nmos/parameters/0000755000175000017500000000000014163340332021163 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/nmos/parameters/nmosParameters0000644000175000017500000002102214163340332024103 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 ) tmp_ns50wwy/tests/hisimhv2/nmos/parameters/pmosParameters0000644000175000017500000002100114163340332024102 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 ) tmp_ns50wwy/tests/hisimhv2/nmos/reference/0000755000175000017500000000000014163340332020756 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000041614163340332024516 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_coadov.standard0000644000175000017500000000713314163340332025240 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000041614163340332024532 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_rdrbb.standard0000644000175000017500000001112214163340332024550 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_corsrd1.standard0000644000175000017500000000544114163340332025016 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_corg.standard0000644000175000017500000000544214163340332024374 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVg_QOVADD.standard0000644000175000017500000000263414163340332024423 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_rs2m.standard0000644000175000017500000001415214163340332024346 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_coisti.standard0000644000175000017500000001112214163340332024747 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000041614163340332024474 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001112214163340332024644 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_corbnet.standard0000644000175000017500000001112214163340332025111 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_isub.standard0000644000175000017500000001605714163340332024433 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001112214163340332024646 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_RDRIFT_REVS.standard0000644000175000017500000000043014163340332025306 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746514163340332024666 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_conqs.standard0000644000175000017500000000711714163340332025112 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001112214163340332024641 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_codfm.standard0000644000175000017500000000545114163340332024532 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001112214163340332024643 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_corsrd0.standard0000644000175000017500000001112214163340332025031 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_nover.standard0000644000175000017500000000711714163340332025120 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746514163340332025342 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_coisti.standard0000644000175000017500000000545014163340332024733 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_corg.standard0000644000175000017500000001112214163340332024407 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_corbnet.standard0000644000175000017500000000544214163340332025076 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_corsrd2.standard0000644000175000017500000001112214163340332025033 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000041614163340332024533 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_ptl.standard0000644000175000017500000001112214163340332024254 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_ld2.standard0000644000175000017500000001112214163340332024136 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_codfm.standard0000644000175000017500000001112214163340332024545 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_coovlp.standard0000644000175000017500000000712014163340332025263 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_cosym.standard0000644000175000017500000003371414163340332024622 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_coadov.standard0000644000175000017500000000544214163340332024715 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_gidl.standard0000644000175000017500000001605714163340332024410 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_lg2.standard0000644000175000017500000001112214163340332024141 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_corsrd1.standard0000644000175000017500000001112214163340332025032 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq.standard0000644000175000017500000000713114163340332023703 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_she.standard0000644000175000017500000001112214163340332024234 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/noise2.standard0000644000175000017500000000424414163340332023703 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVg_LOVER.standard0000644000175000017500000000263614163340332024336 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001112214163340332025316 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000041614163340332024710 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_rdrbb.standard0000644000175000017500000000545214163340332024536 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/noise1.standard0000644000175000017500000000423314163340332023700 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000041614163340332024531 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_corsrd2.standard0000644000175000017500000000547214163340332025023 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_cosym.standard0000644000175000017500000000544214163340332024574 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_cosym.standard0000644000175000017500000000713114163340332025115 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd_cvdsover.standard0000644000175000017500000000544614163340332025301 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001112214163340332024642 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acVd.standard0000644000175000017500000000544214163340332023362 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 tmp_ns50wwy/tests/hisimhv2/nmos/reference/acFreq_coiigs.standard0000644000175000017500000000712514163340332025243 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 tmp_ns50wwy/tests/hisimhv2/nmos/qaSpec0000644000175000017500000004766714163340332020203 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 tmp_ns50wwy/tests/hisimhv2/nmos/run0000755000175000017500000000023614163340332017553 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/hisimhv2/pmos/0000755000175000017500000000000014163340332017022 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/pmos/parameters/0000755000175000017500000000000014163340332021165 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/pmos/parameters/nmosParameters0000644000175000017500000002102214163340332024105 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 ) tmp_ns50wwy/tests/hisimhv2/pmos/parameters/pmosParameters0000644000175000017500000002100114163340332024104 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 ) tmp_ns50wwy/tests/hisimhv2/pmos/reference/0000755000175000017500000000000014163340332020760 5ustar carstencarstentmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000044214163340332024517 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_coadov.standard0000644000175000017500000000713314163340332025242 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000044214163340332024533 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_rdrbb.standard0000644000175000017500000001167214163340332024564 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_corsrd1.standard0000644000175000017500000000551414163340332025021 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_corg.standard0000644000175000017500000000550714163340332024400 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVg_QOVADD.standard0000644000175000017500000000265314163340332024426 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_rs2m.standard0000644000175000017500000001511214163340332024345 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_coisti.standard0000644000175000017500000001167214163340332024763 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000044214163340332024475 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001167214163340332024660 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_corbnet.standard0000644000175000017500000001167214163340332025125 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_isub.standard0000644000175000017500000001634314163340332024433 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001167214163340332024662 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_RDRIFT_REVS.standard0000644000175000017500000000043014163340332025310 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746514163340332024670 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_conqs.standard0000644000175000017500000000707714163340332025121 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001167214163340332024655 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_codfm.standard0000644000175000017500000000550714163340332024536 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001167214163340332024657 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_corsrd0.standard0000644000175000017500000001167214163340332025045 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_nover.standard0000644000175000017500000000710414163340332025116 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746514163340332025344 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_coisti.standard0000644000175000017500000000550614163340332024737 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_corg.standard0000644000175000017500000001167214163340332024423 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_corbnet.standard0000644000175000017500000000550714163340332025102 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_corsrd2.standard0000644000175000017500000001167214163340332025047 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000044214163340332024534 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_ptl.standard0000644000175000017500000001167214163340332024270 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_ld2.standard0000644000175000017500000001167214163340332024152 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_codfm.standard0000644000175000017500000001167214163340332024561 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_coovlp.standard0000644000175000017500000000712314163340332025270 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_cosym.standard0000644000175000017500000003602614163340332024623 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_coadov.standard0000644000175000017500000000550714163340332024721 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_gidl.standard0000644000175000017500000001634314163340332024410 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_lg2.standard0000644000175000017500000001167214163340332024155 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_corsrd1.standard0000644000175000017500000001167214163340332025046 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq.standard0000644000175000017500000000711714163340332023711 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_she.standard0000644000175000017500000001167214163340332024250 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/noise2.standard0000644000175000017500000000423614163340332023706 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVg_LOVER.standard0000644000175000017500000000265314163340332024337 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001167214163340332025332 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000044214163340332024711 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_rdrbb.standard0000644000175000017500000000551214163340332024535 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/noise1.standard0000644000175000017500000000413514163340332023703 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000044214163340332024532 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_corsrd2.standard0000644000175000017500000000553514163340332025025 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_cosym.standard0000644000175000017500000000550114163340332024572 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_cosym.standard0000644000175000017500000000711614163340332025122 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd_cvdsover.standard0000644000175000017500000000551314163340332025276 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001167214163340332024656 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acVd.standard0000644000175000017500000000550014163340332023357 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 tmp_ns50wwy/tests/hisimhv2/pmos/reference/acFreq_coiigs.standard0000644000175000017500000000713314163340332025244 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 tmp_ns50wwy/tests/hisimhv2/pmos/qaSpec0000644000175000017500000005024514163340332020167 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 tmp_ns50wwy/tests/hisimhv2/pmos/run0000755000175000017500000000023614163340332017555 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/regression/0000755000175000017500000000000014163340332016473 5ustar carstencarstentmp_ns50wwy/tests/regression/Makefile.am0000644000175000017500000000026514163340332020532 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 tmp_ns50wwy/tests/regression/pipe/0000755000175000017500000000000014163340332017430 5ustar carstencarstentmp_ns50wwy/tests/regression/pipe/alter-1.cmd0000644000175000017500000000357714163340332021376 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 tmp_ns50wwy/tests/regression/pipe/alter-1.cir0000644000175000017500000000004614163340332021374 0ustar carstencarsten* v1 1 0 dc=0 sin(0v, 0.1v, 100Meg) tmp_ns50wwy/tests/regression/pipe/Makefile.am0000644000175000017500000000046114163340332021465 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 tmp_ns50wwy/tests/regression/sens/0000755000175000017500000000000014163340332017443 5ustar carstencarstentmp_ns50wwy/tests/regression/sens/sens-dc-2.out0000644000175000017500000000015714163340332021672 0ustar carstencarsten Circuit: * test "sens dc" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 7 tests failed tmp_ns50wwy/tests/regression/sens/Makefile.am0000644000175000017500000000050314163340332021475 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 tmp_ns50wwy/tests/regression/sens/sens-ac-1.out0000644000175000017500000000015714163340332021666 0ustar carstencarsten Circuit: * test "sens ac" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 3 tests failed tmp_ns50wwy/tests/regression/sens/sens-ac-1.cir0000644000175000017500000000204314163340332021630 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 tmp_ns50wwy/tests/regression/sens/sens-ac-2.out0000644000175000017500000000015714163340332021667 0ustar carstencarsten Circuit: * test "sens ac" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 6 tests failed tmp_ns50wwy/tests/regression/sens/sens-ac-2.cir0000644000175000017500000000245514163340332021640 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 tmp_ns50wwy/tests/regression/sens/sens-dc-1.cir0000644000175000017500000000255214163340332021640 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 tmp_ns50wwy/tests/regression/sens/sens-dc-1.out0000644000175000017500000000015714163340332021671 0ustar carstencarsten Circuit: * test "sens dc" Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 INFO: 0 of 5 tests failed tmp_ns50wwy/tests/regression/sens/sens-dc-2.cir0000644000175000017500000000223514163340332021637 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 tmp_ns50wwy/tests/regression/model/0000755000175000017500000000000014163340332017573 5ustar carstencarstentmp_ns50wwy/tests/regression/model/Makefile.am0000644000175000017500000000050314163340332021625 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 tmp_ns50wwy/tests/regression/model/special-names-1.out0000644000175000017500000000001614163340332023200 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/model/binning-1.out0000644000175000017500000000021114163340332022100 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 tmp_ns50wwy/tests/regression/model/instance-defaults.cir0000644000175000017500000000035614163340332023707 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 tmp_ns50wwy/tests/regression/model/instance-defaults.out0000644000175000017500000000022514163340332023734 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 tmp_ns50wwy/tests/regression/model/binning-1.cir0000644000175000017500000000201514163340332022052 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 tmp_ns50wwy/tests/regression/model/special-names-1.cir0000644000175000017500000000157014163340332023154 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 tmp_ns50wwy/tests/regression/lib-processing/0000755000175000017500000000000014163340332021413 5ustar carstencarstentmp_ns50wwy/tests/regression/lib-processing/scope-1.out0000644000175000017500000000021314163340332023407 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 tmp_ns50wwy/tests/regression/lib-processing/ex1b.out0000644000175000017500000000016414163340332023004 0ustar carstencarsten Circuit: ex1b lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmp_ns50wwy/tests/regression/lib-processing/Makefile.am0000644000175000017500000000057114163340332023452 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 tmp_ns50wwy/tests/regression/lib-processing/ex3a.out0000644000175000017500000000016414163340332023005 0ustar carstencarsten Circuit: ex3a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmp_ns50wwy/tests/regression/lib-processing/scope-2.out0000644000175000017500000000021314163340332023410 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 tmp_ns50wwy/tests/regression/lib-processing/ex2a.cir0000644000175000017500000000111114163340332022743 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 let n_pass = 0 echo "Note: v(check1) = $&v(check1)" echo "Note: v(check2) = $&v(check2)" if abs(v(check1)) <= 1e-9 let n_pass = n_pass + 1 else echo "ERROR: Test 1 failed" end if abs(v(check2)) <= 1e-9 let n_pass = n_pass + 1 else echo "ERROR: Test 2 failed" end if n_pass = 2 echo "INFO: ok" quit 0 end echo ERROR: $&n_pass of 2 tests passed quit 1 .endc .end tmp_ns50wwy/tests/regression/lib-processing/ex2a.out0000644000175000017500000000016414163340332023004 0ustar carstencarsten Circuit: ex2a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmp_ns50wwy/tests/regression/lib-processing/ex1a.out0000644000175000017500000000016414163340332023003 0ustar carstencarsten Circuit: ex1a lib problem Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 INFO: ok tmp_ns50wwy/tests/regression/lib-processing/scope-1.cir0000644000175000017500000000205214163340332023360 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 tmp_ns50wwy/tests/regression/lib-processing/ex1.lib0000644000175000017500000000012714163340332022600 0ustar carstencarsten* -*- spice -*- .LIB RES .subckt sub_in_lib n1 n2 R3 n1 n2 2k .ends .ENDL RES tmp_ns50wwy/tests/regression/lib-processing/ex1a.cir0000644000175000017500000000051014163340332022744 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 echo "INFO: ok" quit 0 end echo ERROR: Test failure quit 1 .endc .end tmp_ns50wwy/tests/regression/lib-processing/scope-3.cir0000644000175000017500000000262414163340332023367 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 tmp_ns50wwy/tests/regression/lib-processing/ex1b.cir0000644000175000017500000000061514163340332022753 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 echo "INFO: ok" quit 0 end echo ERROR: Test failure quit 1 .endc .end tmp_ns50wwy/tests/regression/lib-processing/scope-2.cir0000644000175000017500000000225114163340332023362 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 tmp_ns50wwy/tests/regression/lib-processing/scope-3.out0000644000175000017500000000021314163340332023411 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 tmp_ns50wwy/tests/regression/lib-processing/ex2.lib0000644000175000017500000000050214163340332022576 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 tmp_ns50wwy/tests/regression/lib-processing/extra3.lib0000644000175000017500000000013014163340332023303 0ustar carstencarsten* -*- spice -*- .LIB RES .subckt sub3_in_lib n1 n2 R3 n1 n2 4k .ends .ENDL RES tmp_ns50wwy/tests/regression/lib-processing/ex3a.cir0000644000175000017500000000111114163340332022744 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 let n_pass = 0 echo "Note: v(check1) = $&v(check1)" echo "Note: v(check2) = $&v(check2)" if abs(v(check1)) <= 1e-9 let n_pass = n_pass + 1 else echo "ERROR: Test 1 failed" end if abs(v(check2)) <= 1e-9 let n_pass = n_pass + 1 else echo "ERROR: Test 2 failed" end if n_pass = 2 echo "INFO: ok" quit 0 end echo ERROR: $&n_pass of 2 tests passed quit 1 .endc .end tmp_ns50wwy/tests/regression/lib-processing/ex3.lib0000644000175000017500000000037614163340332022610 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 tmp_ns50wwy/tests/regression/misc/0000755000175000017500000000000014163340332017426 5ustar carstencarstentmp_ns50wwy/tests/regression/misc/resume-1.cir0000644000175000017500000000236114163340332021565 0ustar carstencarstenregression test for "alter" with "stop" and "resume" * (exec-spice "ngspice %s" t) * check whether 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 tmp_ns50wwy/tests/regression/misc/Makefile.am0000644000175000017500000000070114163340332021460 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 tmp_ns50wwy/tests/regression/misc/dollar-1.out0000644000175000017500000000073314163340332021575 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 tmp_ns50wwy/tests/regression/misc/alter-vec.cir0000644000175000017500000000143314163340332022010 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 tmp_ns50wwy/tests/regression/misc/test-noise-3.cir0000644000175000017500000000117214163340332022360 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 tmp_ns50wwy/tests/regression/misc/asrc-tc-1.out0000644000175000017500000000001614163340332021646 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/test-noise-2.cir0000644000175000017500000000210214163340332022351 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 tmp_ns50wwy/tests/regression/misc/empty-1.cir0000644000175000017500000000046014163340332021421 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 tmp_ns50wwy/tests/regression/misc/if-elseif.out0000644000175000017500000000022314163340332022017 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. tmp_ns50wwy/tests/regression/misc/ac-zero.out0000644000175000017500000000001614163340332021514 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/resume-1.out0000644000175000017500000000002114163340332021606 0ustar carstencarsten INFO: success tmp_ns50wwy/tests/regression/misc/alter-vec.out0000644000175000017500000000001614163340332022036 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/log-functions-1.cir0000644000175000017500000000217414163340332023056 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 tmp_ns50wwy/tests/regression/misc/bugs-1.cir0000644000175000017500000000245214163340332021226 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 tmp_ns50wwy/tests/regression/misc/bugs-2.cir0000644000175000017500000000127014163340332021224 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 tmp_ns50wwy/tests/regression/misc/test-noise-3.out0000644000175000017500000000001614163340332022406 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/dollar-1.cir0000644000175000017500000000135514163340332021544 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 tmp_ns50wwy/tests/regression/misc/asrc-tc-2.cir0000644000175000017500000000163714163340332021627 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 tmp_ns50wwy/tests/regression/misc/empty-1.out0000644000175000017500000000070214163340332021452 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 tmp_ns50wwy/tests/regression/misc/if-elseif.cir0000644000175000017500000000122714163340332021772 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 tmp_ns50wwy/tests/regression/misc/asrc-tc-1.cir0000644000175000017500000000150514163340332021620 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 tmp_ns50wwy/tests/regression/misc/bugs-1.out0000644000175000017500000000023614163340332021256 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 tmp_ns50wwy/tests/regression/misc/bugs-2.out0000644000175000017500000000017314163340332021257 0ustar carstencarsten Circuit: parser test Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 5 INFO: 0 tests failed tmp_ns50wwy/tests/regression/misc/ac-zero.cir0000644000175000017500000000053314163340332021466 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 tmp_ns50wwy/tests/regression/misc/log-functions-1.out0000644000175000017500000000001614163340332023101 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/test-noise-2.out0000644000175000017500000000001614163340332022405 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/misc/asrc-tc-2.out0000644000175000017500000000001614163340332021647 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/func/0000755000175000017500000000000014163340332017426 5ustar carstencarstentmp_ns50wwy/tests/regression/func/Makefile.am0000644000175000017500000000042614163340332021464 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 tmp_ns50wwy/tests/regression/func/func-1.cir0000644000175000017500000000455614163340332021230 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 tmp_ns50wwy/tests/regression/func/func-1.out0000644000175000017500000000023314163340332021246 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 tmp_ns50wwy/tests/regression/pz/0000755000175000017500000000000014163340332017124 5ustar carstencarstentmp_ns50wwy/tests/regression/pz/Makefile.am0000644000175000017500000000043514163340332021162 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 tmp_ns50wwy/tests/regression/pz/ac-resistance.out0000644000175000017500000000007414163340332022377 0ustar carstencarstenINFO: [op], success INFO: [ac], success INFO: [pz], success tmp_ns50wwy/tests/regression/pz/ac-resistance.cir0000644000175000017500000000205014163340332022341 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 tmp_ns50wwy/tests/regression/temper/0000755000175000017500000000000014163340332017767 5ustar carstencarstentmp_ns50wwy/tests/regression/temper/Makefile.am0000644000175000017500000000050314163340332022021 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 tmp_ns50wwy/tests/regression/temper/temper-2.out0000644000175000017500000000001614163340332022150 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/temper/temper-2.cir0000644000175000017500000000117614163340332022126 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 tmp_ns50wwy/tests/regression/temper/temper-res-1.out0000644000175000017500000000001614163340332022736 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/temper/temper-3.out0000644000175000017500000000001614163340332022151 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/temper/temper-1.cir0000644000175000017500000000072614163340332022125 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 tmp_ns50wwy/tests/regression/temper/temper-res-1.cir0000644000175000017500000000213114163340332022704 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 tmp_ns50wwy/tests/regression/temper/temper-1.out0000644000175000017500000000001614163340332022147 0ustar carstencarstenINFO: success tmp_ns50wwy/tests/regression/temper/temper-3.cir0000644000175000017500000000115014163340332022117 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 tmp_ns50wwy/tests/regression/subckt-processing/0000755000175000017500000000000014163340332022140 5ustar carstencarstentmp_ns50wwy/tests/regression/subckt-processing/model-scope-5.out0000644000175000017500000000025714163340332025246 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 tmp_ns50wwy/tests/regression/subckt-processing/Makefile.am0000644000175000017500000000045214163340332024175 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 tmp_ns50wwy/tests/regression/subckt-processing/global-1.out0000644000175000017500000000025714163340332024273 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 tmp_ns50wwy/tests/regression/subckt-processing/model-scope-5.cir0000644000175000017500000000260214163340332025210 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 tmp_ns50wwy/tests/regression/subckt-processing/global-1.cir0000644000175000017500000000240414163340332024235 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 tmp_ns50wwy/tests/regression/parser/0000755000175000017500000000000014163340332017767 5ustar carstencarstentmp_ns50wwy/tests/regression/parser/minus-minus.cir0000644000175000017500000000104014163340332022745 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 tmp_ns50wwy/tests/regression/parser/Makefile.am0000644000175000017500000000052414163340332022024 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 tmp_ns50wwy/tests/regression/parser/xpressn-2.cir0000644000175000017500000001567214163340332022342 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 tmp_ns50wwy/tests/regression/parser/bxpressn-1.cir0000644000175000017500000003027014163340332022472 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 tmp_ns50wwy/tests/regression/parser/xpressn-1.out0000644000175000017500000000023314163340332022356 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 tmp_ns50wwy/tests/regression/parser/xpressn-1.cir0000644000175000017500000002177014163340332022335 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 tmp_ns50wwy/tests/regression/parser/xpressn-3.out0000644000175000017500000000023214163340332022357 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 tmp_ns50wwy/tests/regression/parser/bxpressn-1.out0000644000175000017500000000022514163340332022521 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 tmp_ns50wwy/tests/regression/parser/xpressn-3.cir0000644000175000017500000000727514163340332022343 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 tmp_ns50wwy/tests/regression/parser/xpressn-2.out0000644000175000017500000000017514163340332022364 0ustar carstencarsten Circuit: check precision of some functions Doing analysis at TEMP = 27.000000 and TNOM = 27.000000 No. of Data Rows : 1 tmp_ns50wwy/tests/regression/parser/minus-minus.out0000644000175000017500000000030414163340332023001 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 -- tmp_ns50wwy/tests/Makefile.am0000644000175000017500000000140014163340332016342 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 \ hicum2 \ hisimhv1 \ hisimhv2 DIST_SUBDIRS = \ bsim1 \ bsim2 \ bsim3 \ bsim3soidd \ bsim3soifd \ bsim3soipd \ bsim4 \ bsimsoi \ filters \ general \ hfet \ hicum2 \ 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 tmp_ns50wwy/tests/transmission/0000755000175000017500000000000014163340332017044 5ustar carstencarstentmp_ns50wwy/tests/transmission/Makefile.am0000644000175000017500000000054714163340332021106 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 tmp_ns50wwy/tests/transmission/cpl3_4_line.out0000644000175000017500000016732514163340332021706 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 tmp_ns50wwy/tests/transmission/txl2_3_line.cir0000644000175000017500000000161214163340332021665 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 tmp_ns50wwy/tests/transmission/cpl_ibm2.out0000644000175000017500000002422214163340332021266 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 tmp_ns50wwy/tests/transmission/txl1_1_line.cir0000644000175000017500000000120514163340332021660 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 tmp_ns50wwy/tests/transmission/cpl3_4_line.cir0000644000175000017500000000176414163340332021646 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 tmp_ns50wwy/tests/transmission/cpl_ibm2.cir0000644000175000017500000000055714163340332021241 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 tmp_ns50wwy/tests/transmission/ltra2_2_line.out0000644000175000017500000013523614163340332022063 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 tmp_ns50wwy/tests/transmission/ltra1_1_line.out0000644000175000017500000005563514163340332022065 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 tmp_ns50wwy/tests/transmission/txl2_3_line.out0000644000175000017500000015000114163340332021714 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 tmp_ns50wwy/tests/transmission/txl1_1_line.out0000644000175000017500000005531114163340332021721 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 tmp_ns50wwy/tests/transmission/ltra1_1_line.cir0000644000175000017500000000127514163340332022022 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 tmp_ns50wwy/tests/transmission/ltra2_2_line.cir0000644000175000017500000000156614163340332022027 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 tmp_ns50wwy/tests/hfet/0000755000175000017500000000000014163340332015241 5ustar carstencarstentmp_ns50wwy/tests/hfet/id_vgs.out0000644000175000017500000000706414163340332017254 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 tmp_ns50wwy/tests/hfet/Makefile.am0000644000175000017500000000042214163340332017273 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 tmp_ns50wwy/tests/hfet/inverter.out0000644000175000017500000014763614163340332017651 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 tmp_ns50wwy/tests/hfet/id_vgs.cir0000644000175000017500000000045714163340332017221 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 tmp_ns50wwy/tests/hfet/inverter.cir0000644000175000017500000000114614163340332017600 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 tmp_ns50wwy/tests/xspice/0000755000175000017500000000000014163340332015606 5ustar carstencarstentmp_ns50wwy/tests/xspice/Makefile.am0000644000175000017500000000016114163340332017640 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = digital MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/tests/xspice/digital/0000755000175000017500000000000014163340332017223 5ustar carstencarstentmp_ns50wwy/tests/xspice/digital/d_ram.cir0000644000175000017500000000076114163340332021010 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 tmp_ns50wwy/tests/xspice/digital/d_state-stimulus.txt0000644000175000017500000000011214163340332023264 0ustar carstencarsten* time, enable, reset, up 0 0s 1s 1s 1n 1s 0s 1s 9n 1s 0s 0s tmp_ns50wwy/tests/xspice/digital/Makefile.am0000644000175000017500000000067414163340332021266 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 tmp_ns50wwy/tests/xspice/digital/d_source.out0000644000175000017500000000313214163340332021556 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 tmp_ns50wwy/tests/xspice/digital/d_source-stimulus.txt0000644000175000017500000000105714163340332023455 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 tmp_ns50wwy/tests/xspice/digital/spinit.in0000644000175000017500000000016514163340332021063 0ustar carstencarstencodemodel @top_builddir@/src/xspice/icm/digital/digital.cm set sourcepath = ( $ngspice_vpath . ) set filetype=binary tmp_ns50wwy/tests/xspice/digital/d_ram-stimulus.txt0000644000175000017500000000254014163340332022732 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 tmp_ns50wwy/tests/xspice/digital/d_state.out0000644000175000017500000000376414163340332021411 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 tmp_ns50wwy/tests/xspice/digital/d_source.cir0000644000175000017500000000054014163340332021524 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 tmp_ns50wwy/tests/xspice/digital/d_ram.out0000644000175000017500000001666614163340332021055 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 tmp_ns50wwy/tests/xspice/digital/d_state-updn.txt0000644000175000017500000000051314163340332022352 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 tmp_ns50wwy/tests/xspice/digital/d_state.cir0000644000175000017500000000120114163340332021337 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 tmp_ns50wwy/tests/mes/0000755000175000017500000000000014163340332015077 5ustar carstencarstentmp_ns50wwy/tests/mes/Makefile.am0000644000175000017500000000037514163340332017140 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 tmp_ns50wwy/tests/mes/subth.out0000644000175000017500000000455214163340332016763 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 tmp_ns50wwy/tests/mes/subth.cir0000644000175000017500000000040314163340332016720 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 tmp_ns50wwy/tests/bsimsoi/0000755000175000017500000000000014163340332015760 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/Makefile.am0000644000175000017500000000053014163340332020012 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 tmp_ns50wwy/tests/bsimsoi/nmos/0000755000175000017500000000000014163340332016734 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/nmos/parameters/0000755000175000017500000000000014163340332021077 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/nmos/parameters/nmosParameters0000644000175000017500000001176014163340332024027 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) tmp_ns50wwy/tests/bsimsoi/nmos/reference/0000755000175000017500000000000014163340332020672 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/nmos/reference/noise03.standard0000644000175000017500000000634714163340332023706 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/noise02.standard0000644000175000017500000000635214163340332023701 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/dcSweep02.standard0000644000175000017500000000725214163340332024156 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/acVd01.standard0000644000175000017500000000333014163340332023431 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/acFreq02.standard0000644000175000017500000000710514163340332023762 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/dcSweep01.standard0000644000175000017500000000725214163340332024155 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/noise01.standard0000644000175000017500000000634414163340332023701 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/acVd02.standard0000644000175000017500000000332414163340332023435 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/acFreq01.standard0000644000175000017500000000712114163340332023757 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 tmp_ns50wwy/tests/bsimsoi/nmos/reference/dcSweep03.standard0000644000175000017500000000725214163340332024157 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 tmp_ns50wwy/tests/bsimsoi/nmos/qaSpec0000644000175000017500000001126714163340332020102 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 tmp_ns50wwy/tests/bsimsoi/nmos/run0000755000175000017500000000023614163340332017467 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsimsoi/pmos/0000755000175000017500000000000014163340332016736 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/pmos/parameters/0000755000175000017500000000000014163340332021101 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/pmos/parameters/pmosParameters0000644000175000017500000001176014163340332024033 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) tmp_ns50wwy/tests/bsimsoi/pmos/reference/0000755000175000017500000000000014163340332020674 5ustar carstencarstentmp_ns50wwy/tests/bsimsoi/pmos/reference/noise03.standard0000644000175000017500000000635014163340332023702 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/noise02.standard0000644000175000017500000000634414163340332023704 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/dcSweep02.standard0000644000175000017500000000771214163340332024161 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/acVd01.standard0000644000175000017500000000335614163340332023443 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/acFreq02.standard0000644000175000017500000000710514163340332023764 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/dcSweep01.standard0000644000175000017500000000771214163340332024160 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/noise01.standard0000644000175000017500000000634414163340332023703 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/acVd02.standard0000644000175000017500000000335614163340332023444 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/acFreq01.standard0000644000175000017500000000712114163340332023761 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 tmp_ns50wwy/tests/bsimsoi/pmos/reference/dcSweep03.standard0000644000175000017500000000771214163340332024162 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 tmp_ns50wwy/tests/bsimsoi/pmos/qaSpec0000644000175000017500000001132514163340332020077 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 tmp_ns50wwy/tests/bsimsoi/pmos/run0000755000175000017500000000023614163340332017471 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsim3/0000755000175000017500000000000014163340332015330 5ustar carstencarstentmp_ns50wwy/tests/bsim3/Makefile.am0000644000175000017500000000052614163340332017367 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 b3v33check.log tmp_ns50wwy/tests/bsim3/nmos/0000755000175000017500000000000014163340332016304 5ustar carstencarstentmp_ns50wwy/tests/bsim3/nmos/parameters/0000755000175000017500000000000014163340332020447 5ustar carstencarstentmp_ns50wwy/tests/bsim3/nmos/parameters/nmosParameters0000644000175000017500000000424414163340332023376 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) tmp_ns50wwy/tests/bsim3/nmos/reference/0000755000175000017500000000000014163340332020242 5ustar carstencarstentmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_lw4.standard0000644000175000017500000003054614163340332024154 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000713314163340332025056 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acFreq_mobmod.standard0000644000175000017500000000711214163340332024523 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 tmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_nrd_nrs.standard0000644000175000017500000003054614163340332025113 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acFreq_capmod.standard0000644000175000017500000000713214163340332024513 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 tmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_lw2.standard0000644000175000017500000003054614163340332024152 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 tmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_lw3.standard0000644000175000017500000003054614163340332024153 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acFreq.standard0000644000175000017500000000714014163340332023167 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 tmp_ns50wwy/tests/bsim3/nmos/reference/noise2.standard0000644000175000017500000000635314163340332023172 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 tmp_ns50wwy/tests/bsim3/nmos/reference/noise1.standard0000644000175000017500000000635414163340332023172 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acFreq_xpart.standard0000644000175000017500000000714014163340332024405 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 tmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_lw1.standard0000644000175000017500000003054614163340332024151 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 tmp_ns50wwy/tests/bsim3/nmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000003054614163340332024721 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 tmp_ns50wwy/tests/bsim3/nmos/reference/acVd.standard0000644000175000017500000000506414163340332022646 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 tmp_ns50wwy/tests/bsim3/nmos/qaSpec0000644000175000017500000001370414163340332017450 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 tmp_ns50wwy/tests/bsim3/nmos/run0000755000175000017500000000023614163340332017037 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsim3/pmos/0000755000175000017500000000000014163340332016306 5ustar carstencarstentmp_ns50wwy/tests/bsim3/pmos/parameters/0000755000175000017500000000000014163340332020451 5ustar carstencarstentmp_ns50wwy/tests/bsim3/pmos/parameters/pmosParameters0000644000175000017500000000424514163340332023403 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) tmp_ns50wwy/tests/bsim3/pmos/reference/0000755000175000017500000000000014163340332020244 5ustar carstencarstentmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_lw4.standard0000644000175000017500000003054614163340332024156 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000712614163340332025062 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acFreq_mobmod.standard0000644000175000017500000000712614163340332024532 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 tmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_nrd_nrs.standard0000644000175000017500000003054614163340332025115 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acFreq_capmod.standard0000644000175000017500000000712114163340332024513 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 tmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_lw2.standard0000644000175000017500000003054614163340332024154 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 tmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_lw3.standard0000644000175000017500000003054614163340332024155 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acFreq.standard0000644000175000017500000000712614163340332023175 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 tmp_ns50wwy/tests/bsim3/pmos/reference/noise2.standard0000644000175000017500000000637214163340332023175 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 tmp_ns50wwy/tests/bsim3/pmos/reference/noise1.standard0000644000175000017500000000637214163340332023174 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acFreq_xpart.standard0000644000175000017500000000712614163340332024413 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 tmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_lw1.standard0000644000175000017500000003054614163340332024153 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 tmp_ns50wwy/tests/bsim3/pmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000003054614163340332024723 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 tmp_ns50wwy/tests/bsim3/pmos/reference/acVd.standard0000644000175000017500000000507414163340332022651 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 tmp_ns50wwy/tests/bsim3/pmos/qaSpec0000644000175000017500000001370714163340332017455 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 tmp_ns50wwy/tests/bsim3/pmos/run0000755000175000017500000000023614163340332017041 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsim3soipd/0000755000175000017500000000000014163340332016367 5ustar carstencarstentmp_ns50wwy/tests/bsim3soipd/RampVg2.out0000644000175000017500000010425314163340332020403 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 tmp_ns50wwy/tests/bsim3soipd/Makefile.am0000644000175000017500000000060514163340332020424 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 tmp_ns50wwy/tests/bsim3soipd/lib.h0000644000175000017500000001042514163340332017310 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 tmp_ns50wwy/tests/bsim3soipd/inv2.cir0000644000175000017500000000046314163340332017747 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 tmp_ns50wwy/tests/bsim3soipd/t5.cir0000644000175000017500000000042414163340332017416 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 tmp_ns50wwy/tests/bsim3soipd/t3.out0000644000175000017500000024573314163340332017464 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 tmp_ns50wwy/tests/bsim3soipd/t4.cir0000644000175000017500000000044514163340332017420 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 tmp_ns50wwy/tests/bsim3soipd/t5.out0000644000175000017500000013114414163340332017454 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 tmp_ns50wwy/tests/bsim3soipd/pmospd.mod0000644000175000017500000000403214163340332020371 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 tmp_ns50wwy/tests/bsim3soipd/RampVg2.cir0000644000175000017500000000050614163340332020345 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 tmp_ns50wwy/tests/bsim3soipd/ring51.cir0000644000175000017500000000071614163340332020177 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 tmp_ns50wwy/tests/bsim3soipd/t3.cir0000644000175000017500000000043414163340332017415 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 tmp_ns50wwy/tests/bsim3soipd/inv2.out0000644000175000017500000002735514163340332020012 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 tmp_ns50wwy/tests/bsim3soipd/nmospd.mod0000644000175000017500000000410614163340332020371 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 tmp_ns50wwy/tests/bsim3soipd/t4.out0000644000175000017500000013114414163340332017453 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 tmp_ns50wwy/tests/transient/0000755000175000017500000000000014163340332016322 5ustar carstencarstentmp_ns50wwy/tests/transient/fourbitadder.cir0000644000175000017500000000270514163340332021477 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 tmp_ns50wwy/tests/transient/Makefile.am0000644000175000017500000000040414163340332020354 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 tmp_ns50wwy/tests/transient/fourbitadder.out0000644000175000017500000003553714163340332021542 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 tmp_ns50wwy/tests/hisim/0000755000175000017500000000000014163340332015424 5ustar carstencarstentmp_ns50wwy/tests/hisim/Makefile.am0000644000175000017500000000050714163340332017462 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 tmp_ns50wwy/tests/hisim/nmos/0000755000175000017500000000000014163340332016400 5ustar carstencarstentmp_ns50wwy/tests/hisim/nmos/parameters/0000755000175000017500000000000014163340332020543 5ustar carstencarstentmp_ns50wwy/tests/hisim/nmos/parameters/nmosParameters0000644000175000017500000000700714163340332023472 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 ) tmp_ns50wwy/tests/hisim/nmos/reference/0000755000175000017500000000000014163340332020336 5ustar carstencarstentmp_ns50wwy/tests/hisim/nmos/reference/7_dcSweep_COISUB=1.standard0000644000175000017500000003372714163340332025136 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 tmp_ns50wwy/tests/hisim/nmos/reference/69_acFreq_CODFM=0.standard0000644000175000017500000002533014163340332024667 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 tmp_ns50wwy/tests/hisim/nmos/reference/22_dcSweep_CORBNET=1.standard0000644000175000017500000003372714163340332025323 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 tmp_ns50wwy/tests/hisim/nmos/reference/13_dcSweep_COISTI=0.standard0000644000175000017500000002211414163340332025204 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 tmp_ns50wwy/tests/hisim/nmos/reference/62_acFreq_COFLICK=0.standard0000644000175000017500000002533014163340332025102 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 tmp_ns50wwy/tests/hisim/nmos/reference/23_dcSweep_CODFM=0.standard0000644000175000017500000002211414163340332025043 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 tmp_ns50wwy/tests/hisim/nmos/reference/25_dcSweep_VFBCL.standard0000644000175000017500000002211414163340332024674 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 tmp_ns50wwy/tests/hisim/nmos/reference/51_acFreq_COGIDL=1.standard0000644000175000017500000002533014163340332024770 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 tmp_ns50wwy/tests/hisim/nmos/reference/54_acFreq_COADOV=0.standard0000644000175000017500000002530314163340332025004 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 tmp_ns50wwy/tests/hisim/nmos/reference/19_dcSweep_CORG=0.standard0000644000175000017500000002211414163340332024752 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 tmp_ns50wwy/tests/hisim/nmos/reference/47_acFreq_COISUB=1.standard0000644000175000017500000002533014163340332025020 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 tmp_ns50wwy/tests/hisim/nmos/reference/16_dcSweep_WPE.standard0000644000175000017500000002211414163340332024473 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 tmp_ns50wwy/tests/hisim/nmos/reference/14_dcSweep_COISTI=1_NSUBC.standard0000644000175000017500000002211414163340332026140 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 tmp_ns50wwy/tests/hisim/nmos/reference/21_dcSweep_CORBNET=0.standard0000644000175000017500000003372714163340332025321 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 tmp_ns50wwy/tests/hisim/nmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard0000644000175000017500000002211414163340332025774 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 tmp_ns50wwy/tests/hisim/nmos/reference/12_dcSweep_COGIDL=1.standard0000644000175000017500000002211414163340332025153 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 tmp_ns50wwy/tests/hisim/nmos/reference/24_dcSweep_CODFM=1.standard0000644000175000017500000002211414163340332025045 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 tmp_ns50wwy/tests/hisim/nmos/reference/58_acFreq_CORG=0.standard0000644000175000017500000002533014163340332024567 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 tmp_ns50wwy/tests/hisim/nmos/reference/45_acFreq_COOVLP=1.standard0000644000175000017500000002533014163340332025034 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 tmp_ns50wwy/tests/hisim/nmos/reference/36_acVd_CORSRD=-1_GDLD.standard0000644000175000017500000000714614163340332025356 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 tmp_ns50wwy/tests/hisim/nmos/reference/11_dcSweep_COGIDL=1.standard0000644000175000017500000003372714163340332025166 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 tmp_ns50wwy/tests/hisim/nmos/reference/48_acFreq_COIIGS=0.standard0000644000175000017500000002533014163340332025011 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 tmp_ns50wwy/tests/hisim/nmos/reference/35_acVd_CORSRD=0.standard0000644000175000017500000000715314163340332024503 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 tmp_ns50wwy/tests/hisim/nmos/reference/6_dcSweep_COISUB=0.standard0000644000175000017500000002266114163340332025127 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 tmp_ns50wwy/tests/hisim/nmos/reference/10_dcSweep_COGIDL=0.standard0000644000175000017500000003372714163340332025164 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 tmp_ns50wwy/tests/hisim/nmos/reference/50_acFreq_COGIDL=0.standard0000644000175000017500000002533014163340332024766 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 tmp_ns50wwy/tests/hisim/nmos/reference/4_dcSweep_NSUBPFAC.standard0000644000175000017500000002211414163340332025156 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 tmp_ns50wwy/tests/hisim/nmos/reference/68_acFreq_WPE.standard0000644000175000017500000002526414163340332024322 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 tmp_ns50wwy/tests/hisim/nmos/reference/64_acFreq_COTHRML=0.standard0000644000175000017500000002533014163340332025142 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 tmp_ns50wwy/tests/hisim/nmos/reference/38_acVd_WPE.standard0000644000175000017500000000714514163340332023771 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 tmp_ns50wwy/tests/hisim/nmos/reference/5_dcSweep_NSUBPDLT.standard0000644000175000017500000002211414163340332025211 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 tmp_ns50wwy/tests/hisim/nmos/reference/66_acFreq_COIGN=0.standard0000644000175000017500000002533014163340332024673 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 tmp_ns50wwy/tests/hisim/nmos/reference/60_acFreq_CORBNET=0.standard0000644000175000017500000002533014163340332025122 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 tmp_ns50wwy/tests/hisim/nmos/reference/77_noise_COIGN=1_T150.standard0000644000175000017500000000710014163340332025316 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 tmp_ns50wwy/tests/hisim/nmos/reference/76_noise_COIGN=1_T-55.standard0000644000175000017500000000710014163340332025316 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 tmp_ns50wwy/tests/hisim/nmos/reference/1_dcSweep_CORSRD=0.standard0000644000175000017500000002211414163340332025123 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 tmp_ns50wwy/tests/hisim/nmos/reference/65_acFreq_COTHRML=1.standard0000644000175000017500000002533014163340332025144 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 tmp_ns50wwy/tests/hisim/nmos/reference/55_acFreq_COADOV=1.standard0000644000175000017500000002533014163340332025006 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 tmp_ns50wwy/tests/hisim/nmos/reference/49_acFreq_COIIGS=1.standard0000644000175000017500000002533014163340332025013 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 tmp_ns50wwy/tests/hisim/nmos/reference/53_acFreq_COSTI=1.standard0000644000175000017500000002533014163340332024712 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 tmp_ns50wwy/tests/hisim/nmos/reference/61_acFreq_CORBNET=1.standard0000644000175000017500000002533014163340332025124 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 tmp_ns50wwy/tests/hisim/nmos/reference/80_noise_COIGN=0_T150.standard0000644000175000017500000000353214163340332025314 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 tmp_ns50wwy/tests/hisim/nmos/reference/75_noise_COIGN=1_T27.standard0000644000175000017500000000712014163340332025241 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 tmp_ns50wwy/tests/hisim/nmos/reference/15_dcSweep_COISTI=1_NSUBP.standard0000644000175000017500000002211414163340332026156 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 tmp_ns50wwy/tests/hisim/nmos/reference/70_acFreq_CODFM=1.standard0000644000175000017500000002527314163340332024666 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 tmp_ns50wwy/tests/hisim/nmos/reference/56_acFreq_CONQS=0.standard0000644000175000017500000002533014163340332024716 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 tmp_ns50wwy/tests/hisim/nmos/reference/46_acFreq_COISUB=0.standard0000644000175000017500000002533014163340332025016 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 tmp_ns50wwy/tests/hisim/nmos/reference/20_dcSweep_CORG=1.standard0000644000175000017500000002211414163340332024743 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 tmp_ns50wwy/tests/hisim/nmos/reference/67_acFreq_COIGN=1.standard0000644000175000017500000002533014163340332024675 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 tmp_ns50wwy/tests/hisim/nmos/reference/57_acFreq_CONQS=1.standard0000644000175000017500000002533014163340332024720 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 tmp_ns50wwy/tests/hisim/nmos/reference/9_dcSweep_COIIGS=1.standard0000644000175000017500000002221114163340332025113 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 tmp_ns50wwy/tests/hisim/nmos/reference/8_dcSweep_COIIGS=0.standard0000644000175000017500000002211414163340332025113 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 tmp_ns50wwy/tests/hisim/nmos/reference/78_noise_COIGN=0_T27.standard0000644000175000017500000000353214163340332025246 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 tmp_ns50wwy/tests/hisim/nmos/reference/37_acVd_CORSRD=-1_PT.standard0000644000175000017500000000715114163340332025164 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 tmp_ns50wwy/tests/hisim/nmos/reference/63_acFreq_COFLICK=1.standard0000644000175000017500000002533014163340332025104 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 tmp_ns50wwy/tests/hisim/nmos/reference/52_acFreq_COSTI=0.standard0000644000175000017500000002533014163340332024710 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 tmp_ns50wwy/tests/hisim/nmos/reference/59_acFreq_CORG=1.standard0000644000175000017500000002530114163340332024567 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 tmp_ns50wwy/tests/hisim/nmos/reference/39_acVd_VFBCL.standard0000644000175000017500000000720014163340332024163 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 tmp_ns50wwy/tests/hisim/nmos/reference/79_noise_COIGN=0_T-55.standard0000644000175000017500000000353214163340332025325 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 tmp_ns50wwy/tests/hisim/nmos/reference/3_dcSweep_CORSRD=-1_PT.standard0000644000175000017500000002211414163340332025606 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 tmp_ns50wwy/tests/hisim/nmos/qaSpec0000644000175000017500000006355314163340332017553 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 tmp_ns50wwy/tests/hisim/nmos/run0000755000175000017500000000023614163340332017133 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/hisim/pmos/0000755000175000017500000000000014163340332016402 5ustar carstencarstentmp_ns50wwy/tests/hisim/pmos/parameters/0000755000175000017500000000000014163340332020545 5ustar carstencarstentmp_ns50wwy/tests/hisim/pmos/parameters/pmosParameters0000644000175000017500000000732514163340332023501 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 ) tmp_ns50wwy/tests/hisim/pmos/reference/0000755000175000017500000000000014163340332020340 5ustar carstencarstentmp_ns50wwy/tests/hisim/pmos/reference/7_dcSweep_COISUB=1.standard0000644000175000017500000003447414163340332025140 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 tmp_ns50wwy/tests/hisim/pmos/reference/69_acFreq_CODFM=0.standard0000644000175000017500000002530214163340332024670 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 tmp_ns50wwy/tests/hisim/pmos/reference/22_dcSweep_CORBNET=1.standard0000644000175000017500000003447414163340332025325 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 tmp_ns50wwy/tests/hisim/pmos/reference/13_dcSweep_COISTI=0.standard0000644000175000017500000002342614163340332025215 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 tmp_ns50wwy/tests/hisim/pmos/reference/62_acFreq_COFLICK=0.standard0000644000175000017500000002530214163340332025103 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 tmp_ns50wwy/tests/hisim/pmos/reference/23_dcSweep_CODFM=0.standard0000644000175000017500000002342614163340332025054 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 tmp_ns50wwy/tests/hisim/pmos/reference/25_dcSweep_VFBCL.standard0000644000175000017500000002342614163340332024705 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 tmp_ns50wwy/tests/hisim/pmos/reference/51_acFreq_COGIDL=1.standard0000644000175000017500000002530214163340332024771 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 tmp_ns50wwy/tests/hisim/pmos/reference/54_acFreq_COADOV=0.standard0000644000175000017500000002530514163340332025010 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 tmp_ns50wwy/tests/hisim/pmos/reference/19_dcSweep_CORG=0.standard0000644000175000017500000002342614163340332024763 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 tmp_ns50wwy/tests/hisim/pmos/reference/47_acFreq_COISUB=1.standard0000644000175000017500000002530214163340332025021 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 tmp_ns50wwy/tests/hisim/pmos/reference/16_dcSweep_WPE.standard0000644000175000017500000002342614163340332024504 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 tmp_ns50wwy/tests/hisim/pmos/reference/14_dcSweep_COISTI=1_NSUBC.standard0000644000175000017500000002342614163340332026151 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 tmp_ns50wwy/tests/hisim/pmos/reference/21_dcSweep_CORBNET=0.standard0000644000175000017500000003447414163340332025323 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 tmp_ns50wwy/tests/hisim/pmos/reference/2_dcSweep_CORSRD=-1_GDLD.standard0000644000175000017500000002342614163340332026005 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 tmp_ns50wwy/tests/hisim/pmos/reference/12_dcSweep_COGIDL=1.standard0000644000175000017500000002342614163340332025164 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 tmp_ns50wwy/tests/hisim/pmos/reference/24_dcSweep_CODFM=1.standard0000644000175000017500000002342614163340332025056 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 tmp_ns50wwy/tests/hisim/pmos/reference/58_acFreq_CORG=0.standard0000644000175000017500000002530214163340332024570 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 tmp_ns50wwy/tests/hisim/pmos/reference/45_acFreq_COOVLP=1.standard0000644000175000017500000002530214163340332025035 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 tmp_ns50wwy/tests/hisim/pmos/reference/36_acVd_CORSRD=-1_GDLD.standard0000644000175000017500000000723114163340332025353 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 tmp_ns50wwy/tests/hisim/pmos/reference/11_dcSweep_COGIDL=1.standard0000644000175000017500000003447414163340332025170 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 tmp_ns50wwy/tests/hisim/pmos/reference/48_acFreq_COIIGS=0.standard0000644000175000017500000002530214163340332025012 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 tmp_ns50wwy/tests/hisim/pmos/reference/35_acVd_CORSRD=0.standard0000644000175000017500000000723714163340332024510 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 tmp_ns50wwy/tests/hisim/pmos/reference/6_dcSweep_COISUB=0.standard0000644000175000017500000002266114163340332025131 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 tmp_ns50wwy/tests/hisim/pmos/reference/10_dcSweep_COGIDL=0.standard0000644000175000017500000003447414163340332025166 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 tmp_ns50wwy/tests/hisim/pmos/reference/50_acFreq_COGIDL=0.standard0000644000175000017500000002530214163340332024767 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 tmp_ns50wwy/tests/hisim/pmos/reference/4_dcSweep_NSUBPFAC.standard0000644000175000017500000002342614163340332025167 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 tmp_ns50wwy/tests/hisim/pmos/reference/68_acFreq_WPE.standard0000644000175000017500000002525314163340332024322 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 tmp_ns50wwy/tests/hisim/pmos/reference/64_acFreq_COTHRML=0.standard0000644000175000017500000002530214163340332025143 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 tmp_ns50wwy/tests/hisim/pmos/reference/38_acVd_WPE.standard0000644000175000017500000000723014163340332023766 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 tmp_ns50wwy/tests/hisim/pmos/reference/5_dcSweep_NSUBPDLT.standard0000644000175000017500000002342614163340332025222 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 tmp_ns50wwy/tests/hisim/pmos/reference/66_acFreq_COIGN=0.standard0000644000175000017500000002530214163340332024674 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 tmp_ns50wwy/tests/hisim/pmos/reference/60_acFreq_CORBNET=0.standard0000644000175000017500000002530214163340332025123 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 tmp_ns50wwy/tests/hisim/pmos/reference/77_noise_COIGN=1_T150.standard0000644000175000017500000000712014163340332025322 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 tmp_ns50wwy/tests/hisim/pmos/reference/76_noise_COIGN=1_T-55.standard0000644000175000017500000000710014163340332025320 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 tmp_ns50wwy/tests/hisim/pmos/reference/1_dcSweep_CORSRD=0.standard0000644000175000017500000002342614163340332025134 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 tmp_ns50wwy/tests/hisim/pmos/reference/65_acFreq_COTHRML=1.standard0000644000175000017500000002530214163340332025145 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 tmp_ns50wwy/tests/hisim/pmos/reference/55_acFreq_COADOV=1.standard0000644000175000017500000002530214163340332025007 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 tmp_ns50wwy/tests/hisim/pmos/reference/49_acFreq_COIIGS=1.standard0000644000175000017500000002530214163340332025014 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 tmp_ns50wwy/tests/hisim/pmos/reference/53_acFreq_COSTI=1.standard0000644000175000017500000002530214163340332024713 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 tmp_ns50wwy/tests/hisim/pmos/reference/61_acFreq_CORBNET=1.standard0000644000175000017500000002530214163340332025125 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 tmp_ns50wwy/tests/hisim/pmos/reference/80_noise_COIGN=0_T150.standard0000644000175000017500000000353214163340332025316 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 tmp_ns50wwy/tests/hisim/pmos/reference/75_noise_COIGN=1_T27.standard0000644000175000017500000000710014163340332025241 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 tmp_ns50wwy/tests/hisim/pmos/reference/15_dcSweep_COISTI=1_NSUBP.standard0000644000175000017500000002342614163340332026167 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 tmp_ns50wwy/tests/hisim/pmos/reference/70_acFreq_CODFM=1.standard0000644000175000017500000002530714163340332024666 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 tmp_ns50wwy/tests/hisim/pmos/reference/56_acFreq_CONQS=0.standard0000644000175000017500000002530214163340332024717 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 tmp_ns50wwy/tests/hisim/pmos/reference/46_acFreq_COISUB=0.standard0000644000175000017500000002530214163340332025017 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 tmp_ns50wwy/tests/hisim/pmos/reference/20_dcSweep_CORG=1.standard0000644000175000017500000002342614163340332024754 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 tmp_ns50wwy/tests/hisim/pmos/reference/67_acFreq_COIGN=1.standard0000644000175000017500000002530214163340332024676 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 tmp_ns50wwy/tests/hisim/pmos/reference/57_acFreq_CONQS=1.standard0000644000175000017500000002530314163340332024722 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 tmp_ns50wwy/tests/hisim/pmos/reference/9_dcSweep_COIIGS=1.standard0000644000175000017500000002333514163340332025125 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 tmp_ns50wwy/tests/hisim/pmos/reference/8_dcSweep_COIIGS=0.standard0000644000175000017500000002266114163340332025124 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 tmp_ns50wwy/tests/hisim/pmos/reference/78_noise_COIGN=0_T27.standard0000644000175000017500000000353214163340332025250 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 tmp_ns50wwy/tests/hisim/pmos/reference/37_acVd_CORSRD=-1_PT.standard0000644000175000017500000000723114163340332025165 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 tmp_ns50wwy/tests/hisim/pmos/reference/63_acFreq_COFLICK=1.standard0000644000175000017500000002530214163340332025105 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 tmp_ns50wwy/tests/hisim/pmos/reference/52_acFreq_COSTI=0.standard0000644000175000017500000002530214163340332024711 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 tmp_ns50wwy/tests/hisim/pmos/reference/59_acFreq_CORG=1.standard0000644000175000017500000002530214163340332024572 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 tmp_ns50wwy/tests/hisim/pmos/reference/39_acVd_VFBCL.standard0000644000175000017500000000725114163340332024173 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 tmp_ns50wwy/tests/hisim/pmos/reference/79_noise_COIGN=0_T-55.standard0000644000175000017500000000353214163340332025327 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 tmp_ns50wwy/tests/hisim/pmos/reference/3_dcSweep_CORSRD=-1_PT.standard0000644000175000017500000002342614163340332025617 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 tmp_ns50wwy/tests/hisim/pmos/qaSpec0000644000175000017500000006425714163340332017557 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 tmp_ns50wwy/tests/hisim/pmos/run0000755000175000017500000000023614163340332017135 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bin/0000755000175000017500000000000014163340332015063 5ustar carstencarstentmp_ns50wwy/tests/bin/check.sh0000644000175000017500000000361314163340332016477 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 tmp_ns50wwy/tests/bin/hspice.pm0000644000175000017500000006177514163340332016714 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; tmp_ns50wwy/tests/bin/ngspice.pm0000644000175000017500000004270114163340332017055 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-13 abstol=1e-13 reltol=1e-3"; 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; tmp_ns50wwy/tests/bin/ads.pm0000644000175000017500000006252414163340332016201 0ustar carstencarsten # # ads DC, AC and noise test routines # # # Rel Date Who Comments # ==== ========== ============= ======== # 1.3 06/21/07 Colin McAndrew Verilog-A model support added # 1.2 06/30/06 Colin McAndrew Floating node support added # Noise simulation added # 1.0 04/13/06 Rick Poore/ Initial version # Colin McAndrew # package simulate; $simulatorCommand="hpeesofsim_local"; $netlistFile="adsCkt"; $mFactorVerilogaName="m"; # for LRM2.1 #$mFactorVerilogaName="_M"; # for LRM2.2 use strict; sub version { my($version,@Field); if (!open(SIMULATE,"$simulate::simulatorCommand -version 2>/dev/null|")) { die("ERROR: cannot run $main::simulatorName, stopped"); } $version="unknown"; while () { chomp;s/^\s+//;s/\s+$//; if (/HPEESOFSIM/i) { @Field=split; $version=$Field[2]; } } close(SIMULATE); if (! $main::debug) { unlink($simulate::netlistFile); } return($version); } sub runNoiseTest { my($variant,$outputFile)=@_; my($i,@Field,$arg,$name,$value,$type,$pin,$noisePin); my(@BiasList,$realVal,$imagVal); my($start,$stop,$step,$sign,$inResults,%Index,$iVariables); my(@X,@Noise,$temperature,$biasVoltage,$sweepVoltage); my(@realAdsResults,@imagAdsResults); # # 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]; ($start,$stop,$step)=split(/\s+/,$main::biasSweepSpec); foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if ($main::fMin == $main::fMax) { push(@X,@main::BiasSweepList); } if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "; Noise simulation for $main::simulatorName"; print OF "Options UseNutmegFormat=yes ASCII_Rawfile=yes"; print OF "Options Temp=$temperature"; print OF "Vsweep = 0 V"; &generateCommonNetlistInfo($variant); foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "I_Source:i_$pin $pin 0 Idc=0"; } elsif ($pin eq $main::biasListPin) { print OF "V_Source:v_$pin $pin 0 Vdc=$biasVoltage"; } elsif ($pin eq $main::biasSweepPin) { if ($stop < $start) { # flip polarity as ADS always does lo->hi sweep print OF "V_Source:v_$pin 0 $pin Vdc=Vsweep"; } else { print OF "V_Source:v_$pin $pin 0 Vdc=Vsweep"; } } else { print OF "V_Source:v_$pin $pin 0 Vdc=$main::BiasFor{$pin}"; } } print OF "mysub:x_$noisePin ".join(" ",@main::Pin); print OF "SDD:fn_$noisePin 0 n_$noisePin I[1,0]=_c1 C[1]=\"v_$noisePin\""; print OF "R:r_$noisePin n_$noisePin 0 R=1 Noise=no"; print OF "OutputPlan:noiseOutput Type=\"Output\""; if ($main::fType eq "lin") { print OF "SweepPlan:noisePlan Start=$main::fMin Stop=$main::fMax Lin=$main::fSteps"; } elsif ($main::fType eq "dec") { print OF "SweepPlan:noisePlan Start=$main::fMin Stop=$main::fMax Dec=$main::fSteps"; } else { # octal sweep print OF "SweepPlan:noisePlan Start=$main::fMin Stop=$main::fMax Dec=".(int($main::fSteps*log(10)/log(2))); } if ($stop < $start) { $sign=-1; print OF "SweepPlan:dcPlan Start=".(-1)*$start." Stop=".(-1)*$stop." Step=".(-1)*$step; } else { $sign=1; print OF "SweepPlan:dcPlan Start=$start Stop=$stop Step=$step"; } print OF "AC:AC1 CalcNoise=yes OutputPlan=\"noiseOutput\" SweepVar=\"freq\" \\"; print OF "SweepPlan=\"noisePlan\" NoiseNode=\"n_$noisePin\""; print OF "ParamSweep:Vsweep SimInstanceName=\"AC1\" SweepVar=\"Vsweep\" SweepPlan=\"dcPlan\""; 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"); } $inResults=0; while () { chomp; } close(SIMULATE); if (!open(SIMULATE,"spectra.raw")) { die("ERROR: cannot open ADS spectra.raw file, stopped"); } while () { chomp;s/^\s+//;s/\s+$//; next if (/^$/); if (/Plotname:\s*AC/) { $inResults=0;next; } if (/Plotname:\s*CT/) { while () { chomp;s/^\s+//;s/\s+$//; last if (/^$/); } next; } if (s/^Variables:\s*//) { $iVariables=0; @Field=split; $Index{$Field[1]}=$Field[0]; while () { chomp;s/^\s+//;s/\s+$//; if (/^Values:/) { $inResults=1;last; } ++$iVariables; @Field=split; $Index{$Field[1]}=$Field[0]; } @realAdsResults=();@imagAdsResults=(); next; } next if (!$inResults); s/,/ /; @Field=split; shift(@Field) if ($#Field == 2); push(@realAdsResults,$Field[0]); push(@imagAdsResults,$Field[1]); if ($#realAdsResults == $iVariables) { if ($main::fMin != $main::fMax) { push(@X,1*$realAdsResults[$Index{"freq"}]); } push(@Noise,$realAdsResults[$Index{"n_$noisePin.noise"}]**2); @realAdsResults=();@imagAdsResults=(); } } 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); unlink("$simulate::netlistFile.ds"); unlink(".spiceinit"); unlink("spectra.raw"); } } sub runAcTest { my($variant,$outputFile)=@_; my($i,@Field,$arg,$name,$value,$type,$pin,$mPin,$fPin,%NextPin); my(@BiasList,$acStim,$realVal,$imagVal); my($start,$stop,$step,$sign,$inResults,%Index,$iVariables); my(@X,$omega,%g,%c,$temperature,$biasVoltage,$sweepVoltage,$twoPi); my(@realAdsResults,@imagAdsResults,$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=(); ($start,$stop,$step)=split(/\s+/,$main::biasSweepSpec); foreach $temperature (@main::Temperature) { foreach $biasVoltage (split(/\s+/,$main::biasListSpec)) { if ($main::fMin == $main::fMax) { push(@X,@main::BiasSweepList); } if (!open(OF,">$simulate::netlistFile")) { die("ERROR: cannot open file $simulate::netlistFile, stopped"); } print OF "; AC simulation for $main::simulatorName"; print OF "Options UseNutmegFormat=yes ASCII_Rawfile=yes"; print OF "Options Temp=$temperature"; print OF "Vsweep = 0 V"; &generateCommonNetlistInfo($variant); foreach $fPin (@main::Pin) { foreach $mPin (@main::Pin) { if ($mPin eq $fPin) { $acStim=" Vac=1"; } else { $acStim=""; } if ($main::isFloatingPin{$mPin}) { print OF "I_Source:i_${mPin}_$fPin ${mPin}_$fPin 0 Idc=0"; } elsif ($mPin eq $main::biasListPin) { print OF "V_Source:v_${mPin}_$fPin ${mPin}_$fPin 0 Vdc=$biasVoltage$acStim"; } elsif ($mPin eq $main::biasSweepPin) { if ($stop < $start) { # flip polarity as ADS always does lo->hi sweep $acStim=~s/1/-1/; print OF "V_Source:v_${mPin}_$fPin 0 ${mPin}_$fPin Vdc=Vsweep$acStim"; } else { print OF "V_Source:v_${mPin}_$fPin ${mPin}_$fPin 0 Vdc=Vsweep$acStim"; } } else { print OF "V_Source:v_${mPin}_$fPin ${mPin}_$fPin 0 Vdc=$main::BiasFor{$mPin}$acStim"; } } print OF "mysub:x_$fPin ".join("_$fPin ",@main::Pin)."_$fPin "; } if ($main::fType eq "lin") { print OF "SweepPlan:acPlan Start=$main::fMin Stop=$main::fMax Lin=$main::fSteps"; } elsif ($main::fType eq "dec") { print OF "SweepPlan:acPlan Start=$main::fMin Stop=$main::fMax Dec=$main::fSteps"; } else { # octal sweep print OF "SweepPlan:acPlan Start=$main::fMin Stop=$main::fMax Dec=".(int($main::fSteps*log(10)/log(2))); } if ($stop < $start) { $sign=-1; print OF "SweepPlan:dcPlan Start=".(-1)*$start." Stop=".(-1)*$stop." Step=".(-1)*$step; } else { $sign=1; print OF "SweepPlan:dcPlan Start=$start Stop=$stop Step=$step"; } print OF "OutputPlan:acOutput Type=\"Output\" UseNodeNestLevel=yes NodeNestLevel=2 UseEquationNestLevel=yes EquationNestLevel=2"; print OF "AC:AC1 OutputPlan=\"acOutput\" SweepVar=\"freq\" SweepPlan=\"acPlan\""; print OF "ParamSweep:Vsweep SimInstanceName=\"AC1\" SweepVar=\"Vsweep\" SweepPlan=\"dcPlan\""; 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"); } $inResults=0; while () { chomp; } close(SIMULATE); if (!open(SIMULATE,"spectra.raw")) { die("ERROR: cannot open ADS spectra.raw file, stopped"); } while () { chomp;s/^\s+//;s/\s+$//; next if (/^$/); if (/Plotname:\s*AC/) { $inResults=0;next; } if (/Plotname:\s*CT/) { while () { chomp;s/^\s+//;s/\s+$//; last if (/^$/); } next; } if (s/^Variables:\s*//) { $iVariables=0; @Field=split; $Index{$Field[1]}=$Field[0]; while () { chomp;s/^\s+//;s/\s+$//; if (/^Values:/) { $inResults=1;last; } ++$iVariables; @Field=split; $Index{$Field[1]}=$Field[0]; } @realAdsResults=();@imagAdsResults=(); next; } next if (!$inResults); s/,/ /; @Field=split; shift(@Field) if ($#Field == 2); push(@realAdsResults,$Field[0]); push(@imagAdsResults,$Field[1]); if ($#realAdsResults == $iVariables) { if ($main::fMin != $main::fMax) { push(@X,1*$realAdsResults[$Index{"freq"}]); } $omega=$twoPi*$realAdsResults[$Index{"freq"}]; foreach (@main::Outputs) { ($type,$mPin,$fPin)=split(/\s+/,$_); push(@{$g{$mPin,$fPin}},1*$realAdsResults[$Index{"v_${mPin}_${fPin}.i"}]); if ($mPin eq $fPin) { push(@{$c{$mPin,$fPin}},$imagAdsResults[$Index{"v_${mPin}_${fPin}.i"}]/$omega); } else { push(@{$c{$mPin,$fPin}},-1*$imagAdsResults[$Index{"v_${mPin}_${fPin}.i"}]/$omega); } } @realAdsResults=();@imagAdsResults=(); } } 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); unlink("$simulate::netlistFile.ds"); unlink(".spiceinit"); unlink("spectra.raw"); } } sub runDcTest { my($variant,$outputFile)=@_; my($i,$arg,$name,$value,$pin); my($start,$stop,$step); my(@V,%DC,$temperature,$biasVoltage); my($inData,$inResults,$iVariables,@Field,%Index,@AdsResults,$sign); if (!defined($main::biasSweepPin)) { die("ERROR: biasSweep must be specified for a DC I(V) test, stopped"); } # # 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"; print OF "Options UseNutmegFormat=yes ASCII_Rawfile=yes"; print OF "Options Temp=$temperature"; &generateCommonNetlistInfo($variant); foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { print OF "I_Source:i_$pin $pin 0 Idc=0"; } elsif ($pin eq $main::biasListPin) { print OF "V_Source:v_$pin $pin 0 Vdc=$biasVoltage"; } elsif ($pin eq $main::biasSweepPin) { if ($stop < $start) { # flip polarity as ADS always does lo->hi sweep print OF "V_Source:v_$pin 0 $pin Vdc=".(-1)*$start; } else { print OF "V_Source:v_$pin $pin 0 Vdc=$start"; } } else { print OF "V_Source:v_$pin $pin 0 Vdc=$main::BiasFor{$pin}"; } } print OF "mysub:x1 ".join(" ",@main::Pin); if ($stop < $start) { $sign=-1; print OF "SweepPlan:dcPlan Start=".(-1)*$start." Stop=".(-1)*$stop." Step=".(-1)*$step; } else { $sign=1; print OF "SweepPlan:dcPlan Start=$start Stop=$stop Step=$step"; } print OF "DC:DC1 SweepVar=\"v_$main::biasSweepPin.Vdc\" SweepPlan=\"dcPlan\""; 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"); } $inResults=0; while () { chomp; } close(SIMULATE); if (!open(SIMULATE,"spectra.raw")) { die("ERROR: cannot open ADS spectra.raw file, stopped"); } while () { chomp;s/^\s+//;s/\s+$//; if (s/^Variables:\s*//) { $iVariables=0; @Field=split; $Index{$Field[1]}=$Field[0]; while () { chomp;s/^\s+//;s/\s+$//; if (/^Values:/) { $inResults=1;last; } ++$iVariables; @Field=split; $Index{$Field[1]}=$Field[0]; } @AdsResults=(); next; } next if (!$inResults); @Field=split; shift(@Field) if ($#Field == 2); push(@AdsResults,@Field); if ($#AdsResults == $iVariables) { push(@V,$sign*$AdsResults[$Index{"v_$main::biasSweepPin.Vdc"}]); foreach $pin (@main::Outputs) { if ($pin eq $main::biasSweepPin) { push(@{$DC{$pin}},$sign*$AdsResults[$Index{"v_$pin.i"}]); } elsif ($main::isFloatingPin{$pin}) { push(@{$DC{$pin}},1*$AdsResults[$Index{"$pin"}]); } else { push(@{$DC{$pin}},1*$AdsResults[$Index{"v_$pin.i"}]); } } @AdsResults=(); } } 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.ds"); unlink(".spiceinit"); unlink("spectra.raw"); } } sub generateCommonNetlistInfo { my($variant)=$_[0]; my(@Pin_x,$arg,$name,$value,$eFactor,$fFactor,$pin,@Args); foreach $pin (@main::Pin) {push(@Pin_x,"${pin}_x")} if ($variant=~/^scale$/) { die("ERROR: there is no scale or shrink option for ads, stopped"); } if ($variant=~/^shrink$/) { die("ERROR: there is no scale or shrink option for ads, 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)) { print OF ""; print OF "#load \"veriloga\", \"$main::verilogaFile\";"; } print OF " "; print OF "define mysub (".join(" ",@Pin_x).")"; foreach $pin (@main::Pin) { if ($main::isFloatingPin{$pin}) { # assumed "dt" thermal pin, no scaling sign change print OF "V_Source:v_$pin ${pin} ${pin}_x Vdc=0"; } elsif ($variant=~/^Flip/ && defined($main::flipPin{$pin})) { print OF "#uselib \"ckt\", \"VCVS\""; print OF "VCVS:e_$pin $main::flipPin{$pin}_x 0 ${pin}_v 0 G=$eFactor"; print OF "V_Source:v_$pin ${pin}_v ${pin} Vdc=0"; print OF "SDD:f_$pin $main::flipPin{$pin}_x 0 C[1]=\"v_$pin\" I[1]=_c1*$fFactor"; } else { print OF "#uselib \"ckt\", \"VCVS\""; print OF "VCVS:e_$pin ${pin}_x 0 ${pin}_v 0 G=$eFactor"; print OF "V_Source:v_$pin ${pin}_v ${pin} Vdc=0"; print OF "SDD:f_$pin ${pin}_x 0 C[1]=\"v_$pin\" I[1]=_c1*$fFactor"; } } print OF " "; if (defined($main::verilogaFile)) { if ($variant=~/_P/) { @Args=split(/\s+/,$main::pTypeSelectionArguments); } else { @Args=split(/\s+/,$main::nTypeSelectionArguments); } print OF "$Args[0]:${main::keyLetter}1 ".join(" ",@main::Pin)." \\"; foreach $arg (@Args[1..$#Args]) { ($name,$value)=split(/=/,$arg); print OF " ".$name."=$value \\"; } 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 " $simulate::mFactorVerilogaName=$main::mFactor \\"; } foreach $arg (@main::ModelParameters) { print OF " ".$arg." \\"; } } else { print OF "mymodel:${main::keyLetter}1 ".join(" ",@main::Pin)." \\"; 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 " ".ucfirst($name)."=$value \\"; } if ($variant eq "m") { print OF " _M=$main::mFactor \\"; } print OF " "; if ($variant=~/_P/) { print OF "model mymodel $main::pTypeSelectionArguments \\"; } else { print OF "model mymodel $main::nTypeSelectionArguments \\"; } foreach $arg (@main::ModelParameters) { print OF " ".ucfirst($arg)." \\"; } } print OF " "; print OF "end mysub"; print OF " "; } 1; tmp_ns50wwy/tests/bin/spinit0000644000175000017500000000022014163340332016306 0ustar carstencarsten* due to a broken implementation of the ngspice frontend * this environment variable must be lower-case set sourcepath = ( $ngspice_vpath . ) tmp_ns50wwy/tests/bin/runQaTests.pl0000755000175000017500000003006014163340332017533 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); } } } tmp_ns50wwy/tests/bin/compareSimulationResults.pl0000755000175000017500000002214614163340332022505 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\%)"); } } tmp_ns50wwy/tests/bin/run_cmc_check0000755000175000017500000001136114163340332017576 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 # uncomment this to preserve netlist after test: # 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 ads run tests and compare results ads 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 } ads() { run_test ads } ##### ##### clean ##### clean() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* rm -rf ${qaResultsDirectory}/hspice hspiceCkt* rm -rf ${qaResultsDirectory}/ads adsCkt* } clean_ngspice() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* } clean_hspice() { rm -rf ${qaResultsDirectory}/hspice hspiceCkt* } clean_ads() { rm -rf ${qaResultsDirectory}/ads adsCkt* } all() { ngspice hspice ads } 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 | clean_ads | ads) "$arg" ;; *) help ;; esac done tmp_ns50wwy/tests/bin/check_cmc.sh0000755000175000017500000000105114163340332017316 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 tmp_ns50wwy/tests/bin/modelQaTestRoutines.pm0000644000175000017500000007360514163340332021407 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; tmp_ns50wwy/tests/bin/maketest.sh0000644000175000017500000000043614163340332017237 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 tmp_ns50wwy/tests/polezero/0000755000175000017500000000000014163340332016152 5ustar carstencarstentmp_ns50wwy/tests/polezero/Makefile.am0000644000175000017500000000053014163340332020204 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 tmp_ns50wwy/tests/polezero/pzt.out0000644000175000017500000000140114163340332017514 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 tmp_ns50wwy/tests/polezero/pzt.cir0000644000175000017500000000042114163340332017463 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 tmp_ns50wwy/tests/polezero/pz2.cir0000644000175000017500000000045514163340332017370 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 tmp_ns50wwy/tests/polezero/filt_multistage.cir0000644000175000017500000000026614163340332022051 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 tmp_ns50wwy/tests/polezero/pz2.out0000644000175000017500000000147514163340332017425 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 tmp_ns50wwy/tests/polezero/filt_rc.out0000644000175000017500000000060014163340332020321 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 tmp_ns50wwy/tests/polezero/filt_rc.cir0000644000175000017500000000014514163340332020273 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 tmp_ns50wwy/tests/polezero/simplepz.out0000644000175000017500000000076614163340332020557 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 tmp_ns50wwy/tests/polezero/filt_bridge_t.cir0000644000175000017500000000020514163340332021443 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 tmp_ns50wwy/tests/polezero/filt_bridge_t.out0000644000175000017500000000605214163340332021503 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 tmp_ns50wwy/tests/polezero/filt_multistage.out0000644000175000017500000000134514163340332022102 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 tmp_ns50wwy/tests/polezero/simplepz.cir0000644000175000017500000000021214163340332020507 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 tmp_ns50wwy/tests/hisimhv1/0000755000175000017500000000000014163340332016043 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/Makefile.am0000644000175000017500000000050714163340332020101 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 tmp_ns50wwy/tests/hisimhv1/nmos/0000755000175000017500000000000014163340332017017 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/nmos/parameters/0000755000175000017500000000000014163340332021162 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/nmos/parameters/nmosParameters0000644000175000017500000002007414163340332024110 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 ) tmp_ns50wwy/tests/hisimhv1/nmos/parameters/pmosParameters0000644000175000017500000002007014163340332024106 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 ) tmp_ns50wwy/tests/hisimhv1/nmos/reference/0000755000175000017500000000000014163340332020755 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000041614163340332024515 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_coadov.standard0000644000175000017500000000712614163340332025241 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000041614163340332024531 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_corsrd1.standard0000644000175000017500000000544114163340332025015 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_corg.standard0000644000175000017500000000545014163340332024372 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVg_QOVADD.standard0000644000175000017500000000263014163340332024416 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_rs2m.standard0000644000175000017500000001415214163340332024345 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_coisti.standard0000644000175000017500000001112214163340332024746 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000041614163340332024473 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001112214163340332024643 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_corbnet.standard0000644000175000017500000001112214163340332025110 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_isub.standard0000644000175000017500000001605714163340332024432 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001112214163340332024645 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746514163340332024665 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_conqs.standard0000644000175000017500000000711514163340332025107 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001112214163340332024640 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_codfm.standard0000644000175000017500000000546614163340332024537 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001112214163340332024642 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_corsrd0.standard0000644000175000017500000001112214163340332025030 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_nover.standard0000644000175000017500000000711714163340332025117 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746514163340332025341 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_coisti.standard0000644000175000017500000000545014163340332024732 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_corg.standard0000644000175000017500000001112214163340332024406 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_corbnet.standard0000644000175000017500000000545014163340332025074 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_corsrd2.standard0000644000175000017500000001112214163340332025032 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000041614163340332024532 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_ptl.standard0000644000175000017500000001112214163340332024253 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_ld2.standard0000644000175000017500000001112214163340332024135 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_codfm.standard0000644000175000017500000001112214163340332024544 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_coovlp.standard0000644000175000017500000000712014163340332025262 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_cosym.standard0000644000175000017500000003371414163340332024621 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_coadov.standard0000644000175000017500000000545014163340332024713 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_gidl.standard0000644000175000017500000001605714163340332024407 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_lg2.standard0000644000175000017500000001112214163340332024140 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_corsrd1.standard0000644000175000017500000001112214163340332025031 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq.standard0000644000175000017500000000711614163340332023705 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_she.standard0000644000175000017500000001112214163340332024233 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/noise2.standard0000644000175000017500000000424114163340332023677 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVg_LOVER.standard0000644000175000017500000000263614163340332024335 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001112214163340332025315 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000041614163340332024707 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/noise1.standard0000644000175000017500000000425014163340332023676 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000041614163340332024530 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_corsrd2.standard0000644000175000017500000000547214163340332025022 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_cosym.standard0000644000175000017500000000544214163340332024573 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_cosym.standard0000644000175000017500000000713114163340332025114 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd_cvdsover.standard0000644000175000017500000000545314163340332025276 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001112214163340332024641 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acVd.standard0000644000175000017500000000543714163340332023365 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 tmp_ns50wwy/tests/hisimhv1/nmos/reference/acFreq_coiigs.standard0000644000175000017500000000711614163340332025242 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 tmp_ns50wwy/tests/hisimhv1/nmos/qaSpec0000644000175000017500000004541514163340332020167 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 tmp_ns50wwy/tests/hisimhv1/nmos/run0000755000175000017500000000023614163340332017552 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/hisimhv1/pmos/0000755000175000017500000000000014163340332017021 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/pmos/parameters/0000755000175000017500000000000014163340332021164 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/pmos/parameters/nmosParameters0000644000175000017500000002007414163340332024112 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 ) tmp_ns50wwy/tests/hisimhv1/pmos/parameters/pmosParameters0000644000175000017500000002007014163340332024110 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 ) tmp_ns50wwy/tests/hisimhv1/pmos/reference/0000755000175000017500000000000014163340332020757 5ustar carstencarstentmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_NF_RD23.standard0000644000175000017500000000044214163340332024516 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_coadov.standard0000644000175000017500000000711614163340332025242 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_COTEMP2.standard0000644000175000017500000000044214163340332024532 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_corsrd1.standard0000644000175000017500000000551414163340332025020 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_corg.standard0000644000175000017500000000551014163340332024371 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVg_QOVADD.standard0000644000175000017500000000265514163340332024427 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_rs2m.standard0000644000175000017500000001511214163340332024344 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_coisti.standard0000644000175000017500000001167214163340332024762 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_NF_RDS.standard0000644000175000017500000000044214163340332024474 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0.standard0000644000175000017500000001167214163340332024657 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_corbnet.standard0000644000175000017500000001167214163340332025124 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_isub.standard0000644000175000017500000001634314163340332024432 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb2.standard0000644000175000017500000001167214163340332024661 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb1.standard0000644000175000017500000002746514163340332024667 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_conqs.standard0000644000175000017500000000711614163340332025112 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Id1_vb0.standard0000644000175000017500000001167214163340332024654 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_codfm.standard0000644000175000017500000000551214163340332024531 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Id1_vb2.standard0000644000175000017500000001167214163340332024656 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_corsrd0.standard0000644000175000017500000001167214163340332025044 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_nover.standard0000644000175000017500000000712314163340332025116 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Ig1_vb0_jd.standard0000644000175000017500000002746514163340332025343 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_coisti.standard0000644000175000017500000000550714163340332024737 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_corg.standard0000644000175000017500000001167214163340332024422 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_corbnet.standard0000644000175000017500000000551014163340332025073 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_corsrd2.standard0000644000175000017500000001167214163340332025046 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_COTEMP3.standard0000644000175000017500000000044214163340332024533 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_ptl.standard0000644000175000017500000001167214163340332024267 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_ld2.standard0000644000175000017500000001167214163340332024151 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_codfm.standard0000644000175000017500000001167214163340332024560 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_coovlp.standard0000644000175000017500000000710514163340332025267 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_cosym.standard0000644000175000017500000003602614163340332024622 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_coadov.standard0000644000175000017500000000551014163340332024712 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_gidl.standard0000644000175000017500000001634314163340332024407 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_lg2.standard0000644000175000017500000001167214163340332024154 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_corsrd1.standard0000644000175000017500000001167214163340332025045 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq.standard0000644000175000017500000000711114163340332023702 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_she.standard0000644000175000017500000001167214163340332024247 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/noise2.standard0000644000175000017500000000424714163340332023707 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVg_LOVER.standard0000644000175000017500000000264614163340332024340 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Id1_vb0_jd.standard0000644000175000017500000001167214163340332025331 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_NF_RTH0W.standard0000644000175000017500000000044214163340332024710 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/noise1.standard0000644000175000017500000000425114163340332023701 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_COTEMP1.standard0000644000175000017500000000044214163340332024531 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_corsrd2.standard0000644000175000017500000000553514163340332025024 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_cosym.standard0000644000175000017500000000550114163340332024571 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_cosym.standard0000644000175000017500000000711614163340332025121 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd_cvdsover.standard0000644000175000017500000000551014163340332025272 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/dcSw_Id1_vb1.standard0000644000175000017500000001167214163340332024655 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acVd.standard0000644000175000017500000000550514163340332023363 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 tmp_ns50wwy/tests/hisimhv1/pmos/reference/acFreq_coiigs.standard0000644000175000017500000000713214163340332025242 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 tmp_ns50wwy/tests/hisimhv1/pmos/qaSpec0000644000175000017500000004576014163340332020174 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 tmp_ns50wwy/tests/hisimhv1/pmos/run0000755000175000017500000000023614163340332017554 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/ChangeLog0000644000175000017500000000125014163340332016063 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. tmp_ns50wwy/tests/bsim1/0000755000175000017500000000000014163340332015326 5ustar carstencarstentmp_ns50wwy/tests/bsim1/Makefile.am0000644000175000017500000000037614163340332017370 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 tmp_ns50wwy/tests/bsim1/test.out0000644000175000017500000015035614163340332017050 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 tmp_ns50wwy/tests/bsim1/test.cir0000644000175000017500000000660614163340332017014 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 tmp_ns50wwy/tests/mos6/0000755000175000017500000000000014163340332015177 5ustar carstencarstentmp_ns50wwy/tests/mos6/Makefile.am0000644000175000017500000000042414163340332017233 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 tmp_ns50wwy/tests/mos6/simpleinv.out0000644000175000017500000006224714163340332017751 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. tmp_ns50wwy/tests/mos6/simpleinv.cir0000644000175000017500000000245114163340332017706 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 tmp_ns50wwy/tests/mos6/mos6inv.cir0000644000175000017500000000704314163340332017303 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 tmp_ns50wwy/tests/mos6/mos6inv.out0000644000175000017500000022272014163340332017336 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. tmp_ns50wwy/tests/bsimbulk/0000755000175000017500000000000014163340332016123 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/Makefile.am0000644000175000017500000000052414163340332020160 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 bsimbulk.out tmp_ns50wwy/tests/bsimbulk/nmos/0000755000175000017500000000000014163340332017077 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/nmos/parameters/0000755000175000017500000000000014163340332021242 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/nmos/parameters/nmosParameters0000644000175000017500000000543514163340332024174 0ustar carstencarsten+ LLONG =2E-06 + WWIDE =1E-05 + TYPE =1 + GEOMOD =0 + RGEOMOD =0 + COVMOD =1 + RDSMOD =2 + XL =-1.7E-08 + XW =1.1E-08 + LINT =0 + WINT =0 + DLC =0 + DWC =0 + TOXE =1.74E-09 + TOXP =1.7E-09 + NDEP =4.6E+23 + NSD =1E+26 + NGATE =8.5E+25 + VFB =-1.02 + EPSROX =3.9 + EPSRSUB =11.9 + NI0SUB =1.1E+16 + XJ =1.5E-07 + DMCG =0 + DMDG =0 + DMCGT =0 + CIT =1E-08 + CDSCD =0.001 + CDSCB =0 + CDSCBL =0.007 + CDSCBLEXP =1 + NFACTOR =0.002 + NFACTORL =2.1E-08 + NFACTORLEXP =6.264 + NDEPL1 =0.096 + NDEPLEXP1 =1 + NDEPL2 =-0.0032 + NDEPLEXP2 =2.05 + DVTP0 =7.5E-07 + DVTP1 =-4.4E-07 + NDEPW =-0.1548 + NDEPWEXP =0.7441 + NDEPWL =0 + NDEPWLEXP =0.2 + K2W =0 + GIDLMOD =1 + AGIDL =3.728E-08 + AGIDLL =-0.04815 + AGIDLW =-0.0341 + BGIDL =8.123E+09 + CGIDL =1.21E-06 + EGIDL =-2.952 + PHIN =0.05 + K2L =0.001636 + K2 =-0.014 + ETA0 =8.416E-06 + ETAB =-5.561E-05 + ETABEXP =2.155 + DSUB =3 + VSAT =6.4E+04 + VSATW =0.05 + VSATWEXP =1 + DELTA =0.15 + DELTAL =0.1 + DELTALEXP =1E-05 + U0 =0.04546 + ETAMOB =1.5 + U0L =0.025 + U0LEXP =0.95 + UA =0.4007 + UAW =0.05 + UAWEXP =1 + UAL =0.00475 + UALEXP =1.118 + EUW =-0.02 + EUWEXP =1 + EUL =0.001 + EULEXP =1 + EU =1.9 + UDL =1E-15 + UDLEXP =1 + UD =1.042E-05 + UCS =2 + UCW =0 + UCWEXP =1 + UC =1E-07 + UCL =2.5E+04 + UCLEXP =1 + PCLM =0.15 + PCLML =0.01 + PCLMLEXP =0.4 + PCLMG =0 + PSCBE1 =5 + PSCBE2 =1.29E-12 + PDITS =0 + PDITSL =0 + PDITSD =0 + RSWMIN =0 + RSW =100 + RDWMIN =0 + RDW =100 + RDSW =20 + RDSWMIN =0 + PRWG =1 + PRWB =0 + WR =1 + RSH =0 + PDIBLCB =0 + PDIBLC =0.01 + PDIBLCL =1E-05 + PDIBLCLEXP =1E-06 + PVAG =0 + PTWG =0.2 + PTWGL =3E+04 + PTWGLEXP =5E-06 + FPROUT =0 + CF =0 + CFRCOEFF =1 + CGSO =2.5E-10 + CGDO =2.5E-10 + CGSL =1.2E-10 + CGDL =1.2E-10 + CKAPPAS =1.25 + CKAPPAD =1.25 + CGBO =0 + ADOS =0 + BDOS =1 + QM0 =0.001 + ETAQM =0.54 + NDEPCV =8E+23 + VFBCV =-0.95 + VSATCV =1E+05 + PCLMCV =0 + PSAT =0.46 + PSATL =6 + PSATLEXP =0.06 + TNFACTOR =0 + TETA0 =0 + UTE =-1.4 + UTEL =-0.001 + UA1 =-0.0011 + UA1L =0 + UC1 =0 + UD1 =0 + UD1L =0 + UCSTE =-0.005 + PRT =0 + AT =-0.05 + ATL =-0.1 + TDELTA =-0.0048 + PTWGT =-0.002 + PTWGTL =0.01 + KT1 =-0.115 + KT1EXP =1 + KT1L =1.286E-09 + KT2 =-0.003157 + K2LEXP =1.698 + K2WEXP =0.005 + TBGASUB =0 + IGCMOD =0 + IGBMOD =0 + AIGS=0.0136 + BIGS=0.00171 + CIGS=0.075 + AIGSL=0 + AIGD=0.0136 + BIGD=0.00171 + CIGD=0.075 + AIGDL=0 + AIGC=0.01285 + LAIGC=2.132E-06 + BIGC=0.0013 + CIGC=0.013 + AIGCL=-0.01227 + PIGCD=1 + PIGCDL=6.196 + AIGBINV=0.015 + BIGBINV=0.000949 + CIGBINV=0.006 + EIGBINV=1.1 + NIGBINV=3 + AIGBACC=0.01751 + BIGBACC=8.307 + CIGBACC=-898.7 + NIGBACC=1 + LPSAT=0 + WPSAT=0 + PPSAT=0 + PSATB=0 + PSATX=3 + WVSAT=0 + PVSAT=0 + WPTWG=0 + PPTWG=0 + TNOM=25 + WDVTP0=0 + WDVTP1=0 + LUTE=0.04574 + LUA1=8.365E-05 + LAT=0 + DVTP2=0 + DVTP3=0 + DVTP4=0 + DVTP5=0 + VSATL=1350 + VSATLEXP=0.00033 + SHMOD = 0 + RTH0 = 10m + MOBSCALE = 1 tmp_ns50wwy/tests/bsimbulk/nmos/reference/0000755000175000017500000000000014163340332021035 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_diode_lt.standard0000644000175000017500000000711514163340332025667 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_diode_st.standard0000644000175000017500000001562714163340332025474 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 6.909367e-16 0. -1.3819e-15 6.909367e-16 0.1 8.833804e-07 0. -1.3819e-15 -8.833804e-07 0.2 1.0333e-06 0. -1.3819e-15 -1.0333e-06 0.3 1.1694e-06 0. -1.3819e-15 -1.1694e-06 0.4 1.3038e-06 0. -1.3819e-15 -1.3038e-06 0.5 1.4402e-06 0. -1.3819e-15 -1.4402e-06 0.6 1.5805e-06 0. -1.3819e-15 -1.5805e-06 0.7 1.7258e-06 0. -1.3819e-15 -1.7258e-06 0.8 1.8768e-06 0. -1.3819e-15 -1.8768e-06 0.9 2.0341e-06 0. -1.3819e-15 -2.0341e-06 1.00000 2.1981e-06 0. -1.3819e-15 -2.1981e-06 1.10000 2.3692e-06 0. -1.3819e-15 -2.3692e-06 1.20000 2.5476e-06 0. -1.3819e-15 -2.5476e-06 0. 6.909367e-16 0. -1.3819e-15 6.909367e-16 0.1 4.28937e-05 0. -1.3819e-15 -4.28937e-05 0.2 5.37603e-05 0. -1.3819e-15 -5.37603e-05 0.3 5.81948e-05 0. -1.3819e-15 -5.81948e-05 0.4 6.16746e-05 0. -1.3819e-15 -6.16746e-05 0.5 6.47085e-05 0. -1.3819e-15 -6.47085e-05 0.6 6.7474e-05 0. -1.3819e-15 -6.7474e-05 0.7 7.00612e-05 0. -1.3819e-15 -7.00612e-05 0.8 7.25228e-05 0. -1.3819e-15 -7.25228e-05 0.9 7.48924e-05 0. -1.3819e-15 -7.48924e-05 1.00000 7.71926e-05 0. -1.3819e-15 -7.71926e-05 1.10000 7.94392e-05 0. -1.3819e-15 -7.94392e-05 1.20000 8.16441e-05 0. -1.3819e-15 -8.16441e-05 0. 6.909367e-16 0. -1.3819e-15 6.909367e-16 0.1 0.0001087783 0. -1.3819e-15 -0.0001087783 0.2 0.0001674103 0. -1.3819e-15 -0.0001674103 0.3 0.0001866831 0. -1.3819e-15 -0.0001866831 0.4 0.0001973605 0. -1.3819e-15 -0.0001973605 0.5 0.0002055861 0. -1.3819e-15 -0.0002055861 0.6 0.0002125443 0. -1.3819e-15 -0.0002125443 0.7 0.0002186904 0. -1.3819e-15 -0.0002186904 0.8 0.0002242656 0. -1.3819e-15 -0.0002242656 0.9 0.0002294169 0. -1.3819e-15 -0.0002294169 1.00000 0.0002342414 0. -1.3819e-15 -0.0002342414 1.10000 0.0002388066 0. -1.3819e-15 -0.0002388066 1.20000 0.0002431616 0. -1.3819e-15 -0.0002431616 0. 6.909367e-16 0. -1.3819e-15 6.909367e-16 0.1 0.0001562509 0. -1.3819e-15 -0.0001562509 0.2 0.000267805 0. -1.3819e-15 -0.000267805 0.3 0.0003198847 0. -1.3819e-15 -0.0003198847 0.4 0.0003429339 0. -1.3819e-15 -0.0003429339 0.5 0.0003580214 0. -1.3819e-15 -0.0003580214 0.6 0.0003699535 0. -1.3819e-15 -0.0003699535 0.7 0.0003800938 0. -1.3819e-15 -0.0003800938 0.8 0.0003890332 0. -1.3819e-15 -0.0003890332 0.9 0.0003970993 0. -1.3819e-15 -0.0003970993 1.00000 0.0004044985 0. -1.3819e-15 -0.0004044985 1.10000 0.0004113714 0. -1.3819e-15 -0.0004113714 1.20000 0.0004178182 0. -1.3819e-15 -0.0004178182 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 1.44382e-07 0. -9.447e-23 -1.44382e-07 0.2 1.752965e-07 0. -9.447e-23 -1.752965e-07 0.3 2.064914e-07 0. -9.447e-23 -2.064914e-07 0.4 2.395128e-07 0. -9.447e-23 -2.395128e-07 0.5 2.750405e-07 0. -9.447e-23 -2.750405e-07 0.6 3.135168e-07 0. -9.447e-23 -3.135168e-07 0.7 3.552958e-07 0. -9.447e-23 -3.552958e-07 0.8 4.006949e-07 0. -9.447e-23 -4.006949e-07 0.9 4.500171e-07 0. -9.447e-23 -4.500171e-07 1.00000 5.035617e-07 0. -9.447e-23 -5.035617e-07 1.10000 5.616296e-07 0. -9.447e-23 -5.616296e-07 1.20000 6.245266e-07 0. -9.447e-23 -6.245266e-07 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 4.57638e-05 0. -9.447e-23 -4.57638e-05 0.2 5.40462e-05 0. -9.447e-23 -5.40462e-05 0.3 5.85745e-05 0. -9.447e-23 -5.85745e-05 0.4 6.22968e-05 0. -9.447e-23 -6.22968e-05 0.5 6.56027e-05 0. -9.447e-23 -6.56027e-05 0.6 6.86581e-05 0. -9.447e-23 -6.86581e-05 0.7 7.15496e-05 0. -9.447e-23 -7.15496e-05 0.8 7.43277e-05 0. -9.447e-23 -7.43277e-05 0.9 7.70246e-05 0. -9.447e-23 -7.70246e-05 1.00000 7.96618e-05 0. -9.447e-23 -7.96618e-05 1.10000 8.22545e-05 0. -9.447e-23 -8.22545e-05 1.20000 8.48137e-05 0. -9.447e-23 -8.48137e-05 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0001327106 0. -9.447e-23 -0.0001327106 0.2 0.0001936955 0. -9.447e-23 -0.0001936955 0.3 0.0002115913 0. -9.447e-23 -0.0002115913 0.4 0.0002232798 0. -9.447e-23 -0.0002232798 0.5 0.0002326174 0. -9.447e-23 -0.0002326174 0.6 0.0002405899 0. -9.447e-23 -0.0002405899 0.7 0.0002476649 0. -9.447e-23 -0.0002476649 0.8 0.0002541059 0. -9.447e-23 -0.0002541059 0.9 0.0002600765 0. -9.447e-23 -0.0002600765 1.00000 0.0002656853 0. -9.447e-23 -0.0002656853 1.10000 0.0002710078 0. -9.447e-23 -0.0002710078 1.20000 0.0002760986 0. -9.447e-23 -0.0002760986 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0001940993 0. -9.447e-23 -0.0001940993 0.2 0.0003223242 0. -9.447e-23 -0.0003223242 0.3 0.000372805 0. -9.447e-23 -0.000372805 0.4 0.0003960832 0. -9.447e-23 -0.0003960832 0.5 0.0004129205 0. -9.447e-23 -0.0004129205 0.6 0.0004266314 0. -9.447e-23 -0.0004266314 0.7 0.0004383777 0. -9.447e-23 -0.0004383777 0.8 0.0004487619 0. -9.447e-23 -0.0004487619 0.9 0.0004581455 0. -9.447e-23 -0.0004581455 1.00000 0.0004667632 0. -9.447e-23 -0.0004667632 1.10000 0.0004747767 0. -9.447e-23 -0.0004747767 1.20000 0.0004823016 0. -9.447e-23 -0.0004823016 0. 9.933017e-10 0. -1.9866e-09 9.933017e-10 0.1 4.3857e-06 0. -1.9876e-09 -4.3837e-06 0.2 5.2468e-06 0. -1.9876e-09 -5.2448e-06 0.3 5.788e-06 0. -1.9877e-09 -5.786e-06 0.4 6.2536e-06 0. -1.9877e-09 -6.2516e-06 0.5 6.6877e-06 0. -1.9877e-09 -6.6857e-06 0.6 7.1065e-06 0. -1.9877e-09 -7.1045e-06 0.7 7.5176e-06 0. -1.9877e-09 -7.5157e-06 0.8 7.9255e-06 0. -1.9877e-09 -7.9235e-06 0.9 8.3327e-06 0. -1.9877e-09 -8.3307e-06 1.00000 8.7412e-06 0. -1.9877e-09 -8.7392e-06 1.10000 9.1521e-06 0. -1.9877e-09 -9.1501e-06 1.20000 9.5663e-06 0. -1.9877e-09 -9.5643e-06 0. 9.933017e-10 0. -1.9866e-09 9.933017e-10 0.1 4.07186e-05 0. -1.9876e-09 -4.07166e-05 0.2 5.62899e-05 0. -1.9876e-09 -5.62879e-05 0.3 6.31629e-05 0. -1.9877e-09 -6.31609e-05 0.4 6.75615e-05 0. -1.9877e-09 -6.75595e-05 0.5 7.09687e-05 0. -1.9877e-09 -7.09667e-05 0.6 7.38659e-05 0. -1.9877e-09 -7.38639e-05 0.7 7.64571e-05 0. -1.9877e-09 -7.64551e-05 0.8 7.88455e-05 0. -1.9877e-09 -7.88435e-05 0.9 8.10901e-05 0. -1.9877e-09 -8.10881e-05 1.00000 8.32279e-05 0. -1.9877e-09 -8.32259e-05 1.10000 8.52834e-05 0. -1.9877e-09 -8.52814e-05 1.20000 8.7274e-05 0. -1.9877e-09 -8.7272e-05 0. 9.933017e-10 0. -1.9866e-09 9.933017e-10 0.1 8.62803e-05 0. -1.9876e-09 -8.62783e-05 0.2 0.0001353264 0. -1.9876e-09 -0.0001353244 0.3 0.0001596389 0. -1.9877e-09 -0.0001596369 0.4 0.0001737506 0. -1.9877e-09 -0.0001737486 0.5 0.0001834416 0. -1.9877e-09 -0.0001834396 0.6 0.0001908976 0. -1.9877e-09 -0.0001908956 0.7 0.0001970653 0. -1.9877e-09 -0.0001970633 0.8 0.0002024126 0. -1.9877e-09 -0.0002024106 0.9 0.0002071968 0. -1.9877e-09 -0.0002071948 1.00000 0.0002115724 0. -1.9877e-09 -0.0002115704 1.10000 0.0002156384 0. -1.9877e-09 -0.0002156364 1.20000 0.000219462 0. -1.9877e-09 -0.00021946 0. 9.933017e-10 0. -1.9866e-09 9.933017e-10 0.1 0.0001203982 0. -1.9876e-09 -0.0001203962 0.2 0.0002037731 0. -1.9876e-09 -0.0002037711 0.3 0.0002518288 0. -1.9877e-09 -0.0002518268 0.4 0.0002804193 0. -1.9877e-09 -0.0002804173 0.5 0.0002993827 0. -1.9877e-09 -0.0002993807 0.6 0.0003132615 0. -1.9877e-09 -0.0003132595 0.7 0.0003241989 0. -1.9877e-09 -0.0003241969 0.8 0.0003332891 0. -1.9877e-09 -0.0003332871 0.9 0.000341137 0. -1.9877e-09 -0.0003411351 1.00000 0.0003481021 0. -1.9877e-09 -0.0003481002 1.10000 0.0003544113 0. -1.9877e-09 -0.0003544093 1.20000 0.0003602154 0. -1.9877e-09 -0.0003602134 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_gidl_lw.standard0000644000175000017500000000537714163340332025327 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 3.42e-06 0. -5.10217e-11 -3.4199e-06 0.35 1.90905e-05 0. -2.70177e-11 -1.90905e-05 0.45 4.33727e-05 0. -1.36293e-11 -4.33727e-05 0.55 6.87222e-05 0. -6.5114e-12 -6.87222e-05 0.65 9.22912e-05 0. -2.9259e-12 -9.22912e-05 0.75 0.0001130699 0. -1.2267e-12 -0.0001130699 0.85 0.0001307702 0. -4.752871e-13 -0.0001307702 0.95 0.0001454459 0. -1.68248e-13 -0.0001454459 1.05000 0.0001573217 0. -5.36753e-14 -0.0001573217 1.15000 0.0001666996 0. -1.51779e-14 -0.0001666996 0.25 6.6802e-06 0. -2.2036e-09 -6.678e-06 0.35 4.13385e-05 0. -1.5489e-09 -4.13369e-05 0.45 0.000121251 0. -1.0685e-09 -0.00012125 0.55 0.000247388 0. -7.222504e-10 -0.0002473873 0.65 0.0004141939 0. -4.774208e-10 -0.0004141934 0.75 0.0006140477 0. -3.079548e-10 -0.0006140474 0.85 0.0008392195 0. -1.933709e-10 -0.0008392193 0.95 0.0010827 0. -1.178759e-10 -0.0010827 1.05000 0.0013381 0. -6.95412e-11 -0.0013381 1.15000 0.0016 0. -3.95651e-11 -0.0016 0.25 7.662709e-07 0. -5.06853e-11 -7.662202e-07 0.35 1.55479e-05 0. -2.68263e-11 -1.55479e-05 0.45 5.1769e-05 0. -1.35252e-11 -5.1769e-05 0.55 9.13103e-05 0. -6.4576e-12 -9.13103e-05 0.65 0.0001277406 0. -2.8998e-12 -0.0001277406 0.75 0.0001593757 0. -1.2148e-12 -0.0001593757 0.85 0.0001858957 0. -4.702311e-13 -0.0001858957 0.95 0.000207528 0. -1.662846e-13 -0.000207528 1.05000 0.0002247405 0. -5.29849e-14 -0.0002247405 1.15000 0.0002380899 0. -1.49617e-14 -0.0002380899 0.25 1.642e-06 0. -2.1955e-09 -1.6398e-06 0.35 3.03831e-05 0. -1.5428e-09 -3.03815e-05 0.45 0.0001284268 0. -1.0641e-09 -0.0001284257 0.55 0.0003003478 0. -7.191215e-10 -0.0003003471 0.65 0.0005347863 0. -4.752328e-10 -0.0005347858 0.75 0.0008173565 0. -3.064587e-10 -0.0008173562 0.85 0.0011349 0. -1.923729e-10 -0.0011349 0.95 0.0014765 0. -1.172281e-10 -0.0014765 1.05000 0.0018336 0. -6.91334e-11 -0.0018336 1.15000 0.0021993 0. -3.93169e-11 -0.0021993 0.25 9.6032e-06 0. -5.15632e-11 -9.6031e-06 0.35 2.24782e-05 0. -2.73261e-11 -2.24782e-05 0.45 3.75293e-05 0. -1.3797e-11 -3.75293e-05 0.55 5.26268e-05 0. -6.598e-12 -5.26268e-05 0.65 6.67382e-05 0. -2.9682e-12 -6.67382e-05 0.75 7.9381e-05 0. -1.246e-12 -7.9381e-05 0.85 9.03673e-05 0. -4.834659e-13 -9.03673e-05 0.95 9.96783e-05 0. -1.714283e-13 -9.96783e-05 1.05000 0.0001073931 0. -5.47951e-14 -0.0001073931 1.15000 0.0001136443 0. -1.55293e-14 -0.0001136443 0.25 2.14804e-05 0. -2.2167e-09 -2.14781e-05 0.35 6.1537e-05 0. -1.5586e-09 -6.15354e-05 0.45 0.0001285629 0. -1.0756e-09 -0.0001285618 0.55 0.000221928 0. -7.272728e-10 -0.0002219273 0.65 0.0003386161 0. -4.80934e-10 -0.0003386156 0.75 0.0004743839 0. -3.103578e-10 -0.0004743836 0.85 0.0006244478 0. -1.949745e-10 -0.0006244476 0.95 0.0007839046 0. -1.18917e-10 -0.0007839045 1.05000 0.0009479969 0. -7.0197e-11 -0.0009479968 1.15000 0.0011123 0. -3.99645e-11 -0.0011123 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_ig_sw.standard0000644000175000017500000001775314163340332025014 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -1.01114e-11 2.71266e-11 -6.9038e-12 -1.01114e-11 0.1 8.350198e-07 1.16933e-11 -6.9041e-12 -8.350246e-07 0.2 1.0153e-06 1.17195e-11 -6.8962e-12 -1.0153e-06 0.3 1.2007e-06 1.20118e-11 -6.8876e-12 -1.2007e-06 0.4 1.4008e-06 1.23756e-11 -6.8789e-12 -1.4008e-06 0.5 1.6199e-06 1.27883e-11 -6.8699e-12 -1.6199e-06 0.6 1.8611e-06 1.32432e-11 -6.861e-12 -1.8611e-06 0.7 2.1272e-06 1.37384e-11 -6.8519e-12 -2.1272e-06 0.8 2.4211e-06 1.4274e-11 -6.8428e-12 -2.4212e-06 0.9 2.7457e-06 1.48509e-11 -6.8336e-12 -2.7457e-06 1.00000 3.1037e-06 1.54706e-11 -6.8244e-12 -3.1037e-06 1.10000 3.4984e-06 1.6135e-11 -6.8151e-12 -3.4984e-06 1.20000 3.9329e-06 1.68462e-11 -6.8057e-12 -3.9329e-06 0. -5.4968e-09 1.09988e-08 -5.2597e-12 -5.4968e-09 0.1 0.0003454378 2.2075e-09 -5.8516e-12 -0.00034544 0.2 0.0004065017 1.7439e-09 -5.8831e-12 -0.0004065034 0.3 0.0004469876 1.7415e-09 -5.8576e-12 -0.0004469893 0.4 0.0004833611 1.7515e-09 -5.8308e-12 -0.0004833629 0.5 0.0005178125 1.7645e-09 -5.8039e-12 -0.0005178142 0.6 0.0005512706 1.779e-09 -5.777e-12 -0.0005512724 0.7 0.0005842282 1.7941e-09 -5.7502e-12 -0.00058423 0.8 0.0006169765 1.8097e-09 -5.7234e-12 -0.0006169783 0.9 0.0006497001 1.8255e-09 -5.6968e-12 -0.0006497019 1.00000 0.0006825224 1.8414e-09 -5.6703e-12 -0.0006825242 1.10000 0.0007155289 1.8574e-09 -5.6439e-12 -0.0007155308 1.20000 0.0007487805 1.8733e-09 -5.6177e-12 -0.0007487824 0. -4.20584e-08 8.41203e-08 -3.4552e-12 -4.20584e-08 0.1 0.0016046 1.94572e-08 -3.7602e-12 -0.0016046 0.2 0.0023275 7.6431e-09 -3.9762e-12 -0.0023275 0.3 0.0025592 7.0038e-09 -3.991e-12 -0.0025592 0.4 0.0027105 6.9586e-09 -3.9808e-12 -0.0027105 0.5 0.0028353 6.959e-09 -3.9688e-12 -0.0028353 0.6 0.0029454 6.9681e-09 -3.9567e-12 -0.0029454 0.7 0.0030459 6.9804e-09 -3.9446e-12 -0.0030459 0.8 0.0031396 6.9943e-09 -3.9325e-12 -0.0031396 0.9 0.0032283 7.0092e-09 -3.9206e-12 -0.0032283 1.00000 0.0033132 7.0248e-09 -3.9087e-12 -0.0033133 1.10000 0.0033951 7.0408e-09 -3.8969e-12 -0.0033952 1.20000 0.0034746 7.0573e-09 -3.8851e-12 -0.0034746 0. -1.444287e-07 2.888603e-07 -2.9005e-12 -1.444287e-07 0.1 0.0026351 7.21852e-08 -3.0296e-12 -0.0026352 0.2 0.0043979 2.29118e-08 -3.1692e-12 -0.004398 0.3 0.0051266 1.67884e-08 -3.2264e-12 -0.0051266 0.4 0.0054675 1.61374e-08 -3.2299e-12 -0.0054675 0.5 0.0057092 1.60473e-08 -3.2259e-12 -0.0057092 0.6 0.0059082 1.60376e-08 -3.2208e-12 -0.0059082 0.7 0.0060817 1.6046e-08 -3.2155e-12 -0.0060817 0.8 0.0062378 1.60606e-08 -3.2102e-12 -0.0062378 0.9 0.0063811 1.60779e-08 -3.2049e-12 -0.0063811 1.00000 0.0065146 1.60969e-08 -3.1996e-12 -0.0065146 1.10000 0.0066404 1.61169e-08 -3.1943e-12 -0.0066404 1.20000 0.0067599 1.61377e-08 -3.1891e-12 -0.00676 0. -2.888364e-13 2.9561e-12 -2.3785e-12 -2.888364e-13 0.1 5.03325e-08 2.5564e-12 -2.3768e-12 -5.03326e-08 0.2 6.41112e-08 2.5663e-12 -2.3743e-12 -6.41114e-08 0.3 7.9691e-08 2.5839e-12 -2.3715e-12 -7.96912e-08 0.4 9.77026e-08 2.6059e-12 -2.3686e-12 -9.77029e-08 0.5 1.186514e-07 2.632e-12 -2.3657e-12 -1.186517e-07 0.6 1.43049e-07 2.6619e-12 -2.3628e-12 -1.430493e-07 0.7 1.714478e-07 2.6962e-12 -2.3599e-12 -1.714482e-07 0.8 2.04459e-07 2.7349e-12 -2.357e-12 -2.044594e-07 0.9 2.427643e-07 2.7787e-12 -2.3542e-12 -2.427647e-07 1.00000 2.871274e-07 2.828e-12 -2.3513e-12 -2.871278e-07 1.10000 3.384041e-07 2.8833e-12 -2.3484e-12 -3.384046e-07 1.20000 3.975535e-07 2.9453e-12 -2.3455e-12 -3.975541e-07 0. -2.0603e-09 4.1226e-09 -1.9372e-12 -2.0603e-09 0.1 0.0002955485 9.601409e-10 -2.1298e-12 -0.0002955495 0.2 0.0003429906 9.330357e-10 -2.1219e-12 -0.0003429915 0.3 0.0003821629 9.404318e-10 -2.1112e-12 -0.0003821638 0.4 0.0004187965 9.513957e-10 -2.1003e-12 -0.0004187974 0.5 0.0004544432 9.637928e-10 -2.0894e-12 -0.0004544442 0.6 0.0004897968 9.768481e-10 -2.0784e-12 -0.0004897978 0.7 0.0005252224 9.902151e-10 -2.0674e-12 -0.0005252233 0.8 0.0005609321 1.0037e-09 -2.0565e-12 -0.0005609331 0.9 0.0005970574 1.0173e-09 -2.0456e-12 -0.0005970584 1.00000 0.0006336835 1.0308e-09 -2.0347e-12 -0.0006336846 1.10000 0.0006708671 1.0442e-09 -2.0239e-12 -0.0006708682 1.20000 0.0007086464 1.0576e-09 -2.0131e-12 -0.0007086475 0. -1.94687e-08 3.89385e-08 -1.2285e-12 -1.94687e-08 0.1 0.0019396 8.8585e-09 -1.3422e-12 -0.0019396 0.2 0.002649 4.1626e-09 -1.4025e-12 -0.002649 0.3 0.0028796 4.0918e-09 -1.3993e-12 -0.0028796 0.4 0.0030497 4.0917e-09 -1.3944e-12 -0.0030497 0.5 0.0031928 4.0974e-09 -1.3895e-12 -0.0031928 0.6 0.00332 4.1055e-09 -1.3846e-12 -0.00332 0.7 0.0034366 4.1149e-09 -1.3798e-12 -0.0034366 0.8 0.0035458 4.1252e-09 -1.3749e-12 -0.0035458 0.9 0.0036495 4.1359e-09 -1.3702e-12 -0.0036495 1.00000 0.0037491 4.1471e-09 -1.3654e-12 -0.0037491 1.10000 0.0038455 4.1585e-09 -1.3607e-12 -0.0038455 1.20000 0.0039392 4.1701e-09 -1.356e-12 -0.0039392 0. -6.90319e-08 1.380649e-07 -1.0169e-12 -6.90319e-08 0.1 0.0032726 3.43434e-08 -1.0661e-12 -0.0032727 0.2 0.005272 1.09855e-08 -1.1172e-12 -0.005272 0.3 0.0059577 9.1511e-09 -1.1278e-12 -0.0059577 0.4 0.0063166 9.0829e-09 -1.1262e-12 -0.0063166 0.5 0.0065915 9.0841e-09 -1.124e-12 -0.0065915 0.6 0.0068219 9.0931e-09 -1.1218e-12 -0.0068219 0.7 0.0070238 9.1049e-09 -1.1197e-12 -0.0070238 0.8 0.0072059 9.1181e-09 -1.1175e-12 -0.0072059 0.9 0.0073733 9.1323e-09 -1.1154e-12 -0.0073733 1.00000 0.0075295 9.1472e-09 -1.1132e-12 -0.0075295 1.10000 0.0076769 9.1627e-09 -1.1111e-12 -0.0076769 1.20000 0.0078171 9.1785e-09 -1.109e-12 -0.0078171 0. -3.351681e-10 6.938781e-10 -2.35418e-11 -3.351681e-10 0.1 1.16282e-05 1.750604e-10 -2.37763e-11 -1.16284e-05 0.2 1.4037e-05 1.313642e-10 -2.37553e-11 -1.40371e-05 0.3 1.59478e-05 1.271618e-10 -2.37153e-11 -1.59479e-05 0.4 1.78016e-05 1.284504e-10 -2.36717e-11 -1.78017e-05 0.5 1.96821e-05 1.313066e-10 -2.36268e-11 -1.96822e-05 0.6 2.16232e-05 1.348367e-10 -2.3581e-11 -2.16233e-05 0.7 2.36437e-05 1.387468e-10 -2.35346e-11 -2.36438e-05 0.8 2.57562e-05 1.429157e-10 -2.34876e-11 -2.57563e-05 0.9 2.79701e-05 1.472855e-10 -2.34401e-11 -2.79702e-05 1.00000 3.02931e-05 1.518248e-10 -2.3392e-11 -3.02932e-05 1.10000 3.2732e-05 1.565153e-10 -2.33434e-11 -3.27322e-05 1.20000 3.52929e-05 1.613455e-10 -2.32944e-11 -3.5293e-05 0. -1.91136e-08 3.82433e-08 -1.60821e-11 -1.91136e-08 0.1 0.0004181559 9.2365e-09 -1.78081e-11 -0.0004181651 0.2 0.0005421773 4.7661e-09 -1.83809e-11 -0.000542182 0.3 0.0006028323 4.0699e-09 -1.84681e-11 -0.0006028363 0.4 0.0006481673 3.8777e-09 -1.8448e-11 -0.0006481712 0.5 0.0006874052 3.8102e-09 -1.83983e-11 -0.000687409 0.6 0.0007235094 3.7861e-09 -1.83383e-11 -0.0007235131 0.7 0.0007577727 3.7808e-09 -1.8274e-11 -0.0007577764 0.8 0.0007908715 3.7847e-09 -1.82079e-11 -0.0007908753 0.9 0.000823204 3.7937e-09 -1.81409e-11 -0.0008232078 1.00000 0.0008550241 3.8057e-09 -1.80737e-11 -0.0008550279 1.10000 0.0008865035 3.8196e-09 -1.80064e-11 -0.0008865073 1.20000 0.0009177638 3.8347e-09 -1.79393e-11 -0.0009177677 0. -1.101853e-07 2.203819e-07 -1.1211e-11 -1.101853e-07 0.1 0.0012952 5.64505e-08 -1.20606e-11 -0.0012952 0.2 0.001956 2.27037e-08 -1.26613e-11 -0.0019561 0.3 0.0022696 1.67497e-08 -1.29192e-11 -0.0022696 0.4 0.002458 1.49553e-08 -1.30091e-11 -0.002458 0.5 0.0025946 1.42364e-08 -1.30335e-11 -0.0025946 0.6 0.0027054 1.38962e-08 -1.3031e-11 -0.0027054 0.7 0.0028012 1.37177e-08 -1.30161e-11 -0.0028012 0.8 0.0028873 1.36185e-08 -1.29951e-11 -0.0028873 0.9 0.0029668 1.35621e-08 -1.29709e-11 -0.0029668 1.00000 0.0030415 1.35306e-08 -1.29448e-11 -0.0030415 1.10000 0.0031125 1.35145e-08 -1.29177e-11 -0.0031126 1.20000 0.0031807 1.35085e-08 -1.28899e-11 -0.0031807 0. -3.554549e-07 7.109195e-07 -9.7474e-12 -3.554549e-07 0.1 0.0020316 1.868392e-07 -1.00917e-11 -0.0020318 0.2 0.0033625 6.79222e-08 -1.04197e-11 -0.0033626 0.3 0.0040949 4.53019e-08 -1.06263e-11 -0.0040949 0.4 0.0045279 3.80716e-08 -1.07294e-11 -0.004528 0.5 0.0048204 3.50634e-08 -1.07765e-11 -0.0048204 0.6 0.0050401 3.35916e-08 -1.07962e-11 -0.0050402 0.7 0.0052182 3.27877e-08 -1.08022e-11 -0.0052182 0.8 0.0053701 3.23129e-08 -1.0801e-11 -0.0053701 0.9 0.0055043 3.20162e-08 -1.07956e-11 -0.0055043 1.00000 0.0056258 3.18231e-08 -1.07879e-11 -0.0056259 1.10000 0.005738 3.16939e-08 -1.07786e-11 -0.005738 1.20000 0.0058429 3.1606e-08 -1.07685e-11 -0.0058429 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_diode_sw.standard0000644000175000017500000000710614163340332025701 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258.93 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584.89 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995.26 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511.89 1.75123216809258e-14 1.31203652818349e-14 3.96400600451493e-15 3162.28 1.75123283034693e-14 1.31203729905505e-14 3.96401137195977e-15 3981.07 1.75123528093895e-14 1.31203892665247e-14 3.96401577911747e-15 5011.87 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309.57 1.75123534704896e-14 1.31203916980709e-14 3.96401516076056e-15 7943.28 1.75123493857524e-14 1.31203908214922e-14 3.96401456366612e-15 10000 1.75118183884012e-14 1.31203849591705e-14 3.96401328026089e-15 12589.25 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848.93 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952.62 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118.86 1.7512273535172e-14 1.31201073878507e-14 3.96401421773492e-15 31622.78 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810.72 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118.72 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095.73 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432.82 1.75124331366568e-14 1.31204496308788e-14 3.9640055510179e-15 100000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 125892.54 1.75123794760688e-14 1.3120378267772e-14 3.9640652222836e-15 158489.32 1.75123406932017e-14 1.31203724576972e-14 3.96397828169714e-15 199526.23 1.75123200499053e-14 1.31203806208689e-14 3.96399255223323e-15 251188.64 1.75123341071921e-14 1.31203587414666e-14 3.96403702996212e-15 316227.77 1.75123511064457e-14 1.31203724674684e-14 3.96402935384323e-15 398107.17 1.75123253422953e-14 1.31203916594299e-14 3.96401008860928e-15 501187.23 1.75123484155246e-14 1.31203920593492e-14 3.96401807588318e-15 630957.34 1.75123389888465e-14 1.31203745382247e-14 3.96400797982497e-15 794328.23 1.751235232957e-14 1.31203890260877e-14 3.96400540130628e-15 1000000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258930 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584890 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995260 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511890 1.75123153448624e-14 1.31203652818349e-14 3.96400600451493e-15 3162280 1.75123283034693e-14 1.31203780234679e-14 3.96401137195977e-15 3981070 1.75123488115964e-14 1.31203932643179e-14 3.96401577911747e-15 5011870 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309570 1.75123534704896e-14 1.31203942205082e-14 3.96401516076055e-15 7943280 1.75123473821098e-14 1.31203888178495e-14 3.96401456366612e-15 10000000 1.75118183884012e-14 1.31203865507199e-14 3.96401328026089e-15 12589250 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848930 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952620 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118860 1.7512273535172e-14 1.31201073878507e-14 3.96401358412757e-15 31622780 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810720 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118720 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095730 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432820 1.75124331366568e-14 1.31204496308787e-14 3.9640055510179e-15 100000000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_ig_lw.standard0000644000175000017500000001653014163340332025024 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0008788774 1.08943802116446e-13 1.64298003191809e-14 8.69533016892376e-14 0 -1.51986e-08 6.98459013568929e-14 3.07753005978703e-14 3.07753005978703e-14 0.2 0.0001136946 4.75692009241246e-14 3.21678006249223e-14 5.69190011057627e-15 0.4 0.0001257705 4.67441009080954e-14 3.13939006098878e-14 5.69310011059958e-15 0.6 0.0001370891 4.59004008917049e-14 3.07460005973011e-14 5.55130010784484e-15 0.8 0.000147893 4.51025008762041e-14 3.01302005853379e-14 5.42300010535236e-15 1 0.0001582933 4.43481008615484e-14 2.95348005737711e-14 5.31740010330087e-15 1.2 0.0001683509 4.36282008475629e-14 2.89573005625521e-14 5.22830010156993e-15 -0.2 -0.0009159262 1.42591402770116e-13 5.77593011220871e-14 8.17923015889751e-14 0 -1.413495e-07 1.44021502797899e-13 7.04399013684325e-14 7.04399013684325e-14 0.2 0.0009486193 1.1658080226481e-13 8.7701201703767e-14 2.40665004675387e-14 0.4 0.0011358 1.02386301989054e-13 8.95266017392289e-14 7.27890014140684e-15 0.6 0.0011849 1.01030501962715e-13 8.84855017190035e-14 6.98060013561178e-15 0.8 0.0012265 9.98894019405465e-14 8.75699017012162e-14 6.78630013183712e-15 1 0.0012639 9.88092019195616e-14 8.66839016840039e-14 6.62390012868219e-15 1.2 0.0012982 9.77761018994916e-14 8.5814701667118e-14 6.49140012610811e-15 -0.2 -0.000616733 1.46898402853788e-13 6.94221013486598e-14 7.50331014576644e-14 0 -4.129427e-07 1.49614002906544e-13 7.35692014292253e-14 7.35692014292253e-14 0.2 0.0008609424 1.4387540279506e-13 8.03447015608526e-14 6.0680801178843e-14 0.4 0.0017674 1.19254602316753e-13 9.50960018474254e-14 2.00294003891102e-14 0.6 0.0020022 1.0924820212236e-13 9.56199018576032e-14 9.04680017575175e-15 0.8 0.0020795 1.07437702087187e-13 9.46204018381859e-14 8.22080015970509e-15 1 0.0021376 1.06283902064772e-13 9.37754018217702e-14 7.93470015414704e-15 1.2 0.0021879 1.05259302044867e-13 9.29813018063432e-14 7.73140015019753e-15 -0.2 -0.0003525982 1.45266302822081e-13 7.31636014213457e-14 6.98958013578623e-14 0 -9.658304e-07 1.47963802874486e-13 7.28645014155351e-14 7.28645014155351e-14 0.2 0.0005620411 1.46576102847527e-13 7.39437014365007e-14 7.02586013649104e-14 0.4 0.0013955 1.37115402663734e-13 8.4680501645084e-14 4.95877009633379e-14 0.6 0.0021978 1.17330202279368e-13 9.429220183181e-14 1.93436003757872e-14 0.8 0.0024578 1.09318002123716e-13 9.45527018368707e-14 1.07754002093332e-14 1 0.0025569 1.07123502081083e-13 9.36551018194331e-14 9.44460018347979e-15 1.2 0.0026238 1.05881002056945e-13 9.28603018039926e-14 9.00890017501547e-15 -0.2 -0.0011921 1.05738902054185e-13 8.19150015913587e-15 9.17595017826074e-14 0 -2.4194e-09 3.76404007312382e-14 1.36475002651293e-14 1.36475002651293e-14 0.2 3.8063e-05 2.86866005572932e-14 1.22366002377198e-14 5.59470010868797e-15 0.4 4.46382e-05 2.83010005498022e-14 1.1920400231577e-14 5.60520010889195e-15 0.6 5.09202e-05 2.78834005416895e-14 1.17264002278082e-14 5.46240010611778e-15 0.8 5.70221e-05 2.75057005343519e-14 1.15560002244979e-14 5.33540010365056e-15 1 6.29853e-05 2.71626005276865e-14 1.13958002213857e-14 5.23180010163793e-15 1.2 6.88293e-05 2.68440005214971e-14 1.12424002184056e-14 5.14500009995167e-15 -0.2 -0.0014071 1.45304602822825e-13 5.6742201102328e-14 8.56458016638368e-14 0 -6.35116e-08 1.48380502882581e-13 7.27168014126658e-14 7.27168014126658e-14 0.2 0.001378 1.11876102173412e-13 9.39337018248455e-14 1.28287002492225e-14 0.4 0.0015209 1.05820402055768e-13 9.35393018171835e-14 6.90470013413727e-15 0.6 0.0015991 1.04714702034287e-13 9.25752017984539e-14 6.79450013199642e-15 0.8 0.0016655 1.03585402012349e-13 9.16614017807016e-14 6.61090012842963e-15 1 0.0017244 1.02503001991321e-13 9.07692017633689e-14 6.45210012534463e-15 1.2 0.0017783 1.01466201971179e-13 8.98925017463373e-14 6.32290012283467e-15 -0.2 -0.00091297 1.49621702906694e-13 6.99945013597798e-14 7.73324015023328e-14 0 -1.917116e-07 1.53030302972912e-13 7.53632014640773e-14 7.53632014640773e-14 0.2 0.0013146 1.46795802851795e-13 8.37827016276425e-14 6.0300301171451e-14 0.4 0.0026009 1.17380502280345e-13 1.00558201953539e-13 1.26716002461706e-14 0.6 0.0028165 1.1267800218899e-13 1.00177601946145e-13 8.19560015921553e-15 0.8 0.0029287 1.11566702167401e-13 9.93038019291701e-14 7.9796001550193e-15 1 0.0030206 1.10498902146657e-13 9.84775019131176e-14 7.76430015083668e-15 1.2 0.0031002 1.09476802126801e-13 9.7670701897444e-14 7.5751001471611e-15 -0.2 -0.0004997722 1.47365502862862e-13 7.37481014327008e-14 7.1545501389911e-14 0 -4.543517e-07 1.50422402922249e-13 7.41660014408193e-14 7.41660014408193e-14 0.2 0.00082728 1.49178202898078e-13 7.60955014783036e-14 7.08524013764462e-14 0.4 0.0021059 1.38182202684459e-13 8.79793017091696e-14 4.74459009217292e-14 0.6 0.0032062 1.15603702245828e-13 9.88122019196198e-14 1.32012002564591e-14 0.8 0.0034497 1.11559202167255e-13 9.84530019126417e-14 9.42000018300188e-15 1 0.003574 1.10404302144819e-13 9.76688018974071e-14 9.06240017605481e-15 1.2 0.003673 1.09396202125235e-13 9.69283018830214e-14 8.81550017125829e-15 -0.2 -0.0005582909 1.17735802287248e-13 2.90659005646618e-14 8.37724016274424e-14 0 -7.38915e-08 1.0066120195554e-13 4.7231600917566e-14 4.7231600917566e-14 0.2 0.000220631 7.0910201377569e-14 5.48578010657198e-14 7.84870015247631e-15 0.4 0.0002391901 6.77374013159312e-14 5.32909010352797e-14 6.13150011911635e-15 0.6 0.0002512829 6.63823012896057e-14 5.2205101014186e-14 5.88180011426544e-15 0.8 0.0002625265 6.52443012674979e-14 5.12509009956488e-14 5.72940011130478e-15 1 0.0002732475 6.41879012469752e-14 5.03458009780654e-14 5.612100109026e-15 1.2 0.0002835544 6.31792012273793e-14 4.94695009610416e-14 5.5142001071241e-15 -0.2 -0.0005517195 1.38287602686507e-13 5.43205010552817e-14 8.07404015685398e-14 0 -3.822351e-07 1.3933890270693e-13 6.80023013210774e-14 6.80023013210774e-14 0.2 0.0005737487 1.22471302379244e-13 8.41522016348207e-14 3.39434006594168e-14 0.4 0.0008172567 1.04761202035191e-13 8.77200017041322e-14 1.1632600225986e-14 0.6 0.0008789978 9.95006019329934e-14 8.56503016639242e-14 8.20170015933403e-15 0.8 0.0009105431 9.72734018897256e-14 8.41802016353647e-14 7.40320014382161e-15 1 0.0009349283 9.5796501861034e-14 8.3045401613319e-14 7.06610013727278e-15 1.2 0.0009562734 9.45867018375312e-14 8.2055901594096e-14 6.86520013336991e-15 -0.2 -0.0003967378 1.42475702767869e-13 6.55828012740739e-14 7.42220014419072e-14 0 -1.0539e-06 1.44891402814798e-13 7.10916013810931e-14 7.10916013810931e-14 0.2 0.0005238465 1.39290702705994e-13 7.94723015439045e-14 5.67644011027593e-14 0.4 0.0010221 1.24153602411926e-13 9.20006017872912e-14 2.83070005499187e-14 0.6 0.0012725 1.12663502188708e-13 9.33206018129348e-14 1.49208002898657e-14 0.8 0.0013794 1.07104602080716e-13 9.17204017818478e-14 1.07217002082899e-14 1 0.0014373 1.04150802023333e-13 9.01974017522605e-14 9.20430017881149e-15 1.2 0.0014774 1.02257301986548e-13 8.89666017283498e-14 8.51540016542826e-15 -0.2 -0.0002441554 1.41756202753891e-13 7.05034013696662e-14 6.88383013373183e-14 0 -2.4052e-06 1.44225602801864e-13 7.08896013771688e-14 7.08896013771688e-14 0.2 0.000364019 1.42322002764883e-13 7.30885014198868e-14 6.66403012946179e-14 0.4 0.000850822 1.33763902598625e-13 8.5544201661863e-14 4.52212008785101e-14 0.6 0.0012638 1.22359602377074e-13 9.20374017880061e-14 2.68140005209143e-14 0.8 0.0015086 1.13906102212848e-13 9.27578018020013e-14 1.7277800335655e-14 1 0.0016427 1.08784402113349e-13 9.16428017803402e-14 1.30745002539977e-14 1.2 0.0017234 1.05572102050944e-13 9.03207017546559e-14 1.10878002154022e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_core_st.standard0000644000175000017500000000427314163340332025336 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 9.50415e-08 0. 0. -9.50415e-08 0.35 1.694e-06 0. 0. -1.694e-06 0.45 1.00047e-05 0. 0. -1.00047e-05 0.55 2.32464e-05 0. 0. -2.32464e-05 0.65 3.69357e-05 0. 0. -3.69357e-05 0.75 4.94938e-05 0. 0. -4.94938e-05 0.85 6.04692e-05 0. 0. -6.04692e-05 0.95 6.97947e-05 0. 0. -6.97947e-05 1.05000 7.75556e-05 0. 0. -7.75556e-05 1.15000 8.38992e-05 0. 0. -8.38992e-05 0.25 4.066959e-07 0. 0. -4.066959e-07 0.35 5.6402e-06 0. 0. -5.6402e-06 0.45 2.87726e-05 0. 0. -2.87726e-05 0.55 7.23274e-05 0. 0. -7.23274e-05 0.65 0.0001290358 0. 0. -0.0001290358 0.75 0.0001926038 0. 0. -0.0001926038 0.85 0.0002591894 0. 0. -0.0002591894 0.95 0.0003264522 0. 0. -0.0003264522 1.05000 0.0003928885 0. 0. -0.0003928885 1.15000 0.0004575116 0. 0. -0.0004575116 0.25 7.9972e-09 0. 0. -7.9972e-09 0.35 5.161143e-07 0. 0. -5.161143e-07 0.45 8.6001e-06 0. 0. -8.6001e-06 0.55 2.61873e-05 0. 0. -2.61873e-05 0.65 4.45887e-05 0. 0. -4.45887e-05 0.75 6.12255e-05 0. 0. -6.12255e-05 0.85 7.55827e-05 0. 0. -7.55827e-05 0.95 8.76659e-05 0. 0. -8.76659e-05 1.05000 9.76507e-05 0. 0. -9.76507e-05 1.15000 0.000105769 0. 0. -0.000105769 0.25 5.09167e-08 0. 0. -5.09167e-08 0.35 2.4204e-06 0. 0. -2.4204e-06 0.45 2.49749e-05 0. 0. -2.49749e-05 0.55 7.57847e-05 0. 0. -7.57847e-05 0.65 0.000143175 0. 0. -0.000143175 0.75 0.000218537 0. 0. -0.000218537 0.85 0.0002972966 0. 0. -0.0002972966 0.95 0.000376752 0. 0. -0.000376752 1.05000 0.0004551535 0. 0. -0.0004551535 1.15000 0.0005313539 0. 0. -0.0005313539 0.25 8.971936e-07 0. 0. -8.971936e-07 0.35 4.5773e-06 0. 0. -4.5773e-06 0.45 1.21859e-05 0. 0. -1.21859e-05 0.55 2.15979e-05 0. 0. -2.15979e-05 0.65 3.10797e-05 0. 0. -3.10797e-05 0.75 3.98541e-05 0. 0. -3.98541e-05 0.85 4.76181e-05 0. 0. -4.76181e-05 0.95 5.42895e-05 0. 0. -5.42895e-05 1.05000 5.98943e-05 0. 0. -5.98943e-05 1.15000 6.45116e-05 0. 0. -6.45116e-05 0.25 2.9243e-06 0. 0. -2.9243e-06 0.35 1.37888e-05 0. 0. -1.37888e-05 0.45 3.8712e-05 0. 0. -3.8712e-05 0.55 7.66819e-05 0. 0. -7.66819e-05 0.65 0.000123453 0. 0. -0.000123453 0.75 0.0001751073 0. 0. -0.0001751073 0.85 0.0002288787 0. 0. -0.0002288787 0.95 0.0002829279 0. 0. -0.0002829279 1.05000 0.0003360327 0. 0. -0.0003360327 1.15000 0.000387382 0. 0. -0.000387382 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_gidl_lt.standard0000644000175000017500000001662314163340332025344 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.04585e-05 6.02750011709595e-15 1.2882000250258e-15 4.50810008757864e-15 0 -6.4451e-12 4.97640009667628e-15 2.33950004544935e-15 2.33950004544935e-15 0.2 1.2458e-05 3.35060006509194e-15 2.67070005188356e-15 2.9214670567552e-16 0.4 1.34987e-05 3.2903000639205e-15 2.61550005081119e-15 2.88506305604798e-16 0.6 1.44606e-05 3.23270006280151e-15 2.56690004986704e-15 2.812639054641e-16 0.8 1.53715e-05 3.1774000617272e-15 2.51990004895398e-15 2.74684805336288e-16 1 1.62442e-05 3.12450006069951e-15 2.47410004806422e-15 2.69253605230777e-16 1.2 1.70861e-05 3.07330005970485e-15 2.42930004719389e-15 2.6465760514149e-16 -0.2 -4.54461e-05 7.3931001436254e-15 3.12130006063734e-15 4.13070008024691e-15 0 -1.3948e-12 7.49100014552729e-15 3.67340007136296e-15 3.67340007136296e-15 0.2 5.18758e-05 6.40720012447236e-15 4.47280008689287e-15 1.73350003367662e-15 0.4 6.86039e-05 5.35570010404493e-15 4.71490009159613e-15 3.89396107564779e-16 0.6 7.15768e-05 5.26700010232175e-15 4.65820009049463e-15 3.57106006937481e-16 0.8 7.3957e-05 5.20790010117362e-15 4.6113000895835e-15 3.46458506730633e-16 1 7.60774e-05 5.15310010010903e-15 4.56630008870929e-15 3.38094606568148e-16 1.2 7.8017e-05 5.10080009909299e-15 4.5223000878545e-15 3.31325406436643e-16 -0.2 -2.97885e-05 7.52710014622861e-15 3.60150006996617e-15 3.80620007394286e-15 0 -2.111713e-13 7.66720014895033e-15 3.77320007330177e-15 3.77320007330177e-15 0.2 4.24502e-05 7.4383001445035e-15 4.06090007889091e-15 3.24320006300549e-15 0.4 9.25303e-05 6.3253001228813e-15 4.81300009350192e-15 1.32880002581453e-15 0.6 0.0001103412 5.62680010931157e-15 4.91920009556506e-15 4.96129109638276e-16 0.8 0.0001150633 5.50330010691234e-15 4.8666000945432e-15 4.23324408223903e-16 1 0.0001182718 5.4402001056865e-15 4.82230009368259e-15 4.05364707875e-16 1.2 0.0001210026 5.38720010465687e-15 4.78160009289191e-15 3.9442830766254e-16 -0.2 -1.67936e-05 7.42390014422375e-15 3.76230007309002e-15 3.5517000689987e-15 0 -1.94763e-14 7.56120014689107e-15 3.7250000723654e-15 3.7250000723654e-15 0.2 2.70951e-05 7.50710014584007e-15 3.75200007288992e-15 3.63850007068496e-15 0.4 6.78196e-05 7.11150013815477e-15 4.24550008247712e-15 2.73230005308026e-15 0.6 0.0001132255 6.14000011928148e-15 4.77420009274815e-15 1.19650002324435e-15 0.8 0.0001312815 5.61220010902794e-15 4.83230009387686e-15 5.93442011528769e-16 1 0.0001374086 5.46650010619743e-15 4.7872000930007e-15 4.90141009521946e-16 1.2 0.0001411385 5.39560010482006e-15 4.74540009218866e-15 4.61309508961837e-16 -0.2 -7.36283e-05 5.76090011191673e-15 6.77187613155691e-16 4.83620009395262e-15 0 -6.4066e-12 3.69530007178842e-15 1.66260003229925e-15 1.66260003229925e-15 0.2 7.4531e-06 2.48370004825072e-15 1.77020003438959e-15 2.78962105419383e-16 0.4 8.4677e-06 2.44060004741342e-15 1.7290000335892e-15 2.79520905430239e-16 0.6 9.415e-06 2.39490004652561e-15 1.69290003288789e-15 2.72261505289211e-16 0.8 1.03197e-05 2.35150004568248e-15 1.65830003221571e-15 2.65811305163903e-16 1 1.11918e-05 2.31030004488209e-15 1.62470003156297e-15 2.60560905061904e-16 1.2 1.20361e-05 2.27100004411861e-15 1.59210003092965e-15 2.56164704976499e-16 -0.2 -6.96679e-05 7.54580014659189e-15 3.09830006019052e-15 4.31260008378067e-15 0 -1.3846e-12 7.71630014990419e-15 3.79040007363592e-15 3.79040007363592e-15 0.2 7.92456e-05 6.20790012060057e-15 4.82090009365539e-15 1.17450002281695e-15 0.4 9.33773e-05 5.52250010728534e-15 4.92680009571271e-15 3.53070106859076e-16 0.6 9.79812e-05 5.46450010615858e-15 4.87720009474913e-15 3.46081506723309e-16 0.8 0.0001018372 5.40710010504347e-15 4.83070009384578e-15 3.36696206540981e-16 1 0.0001052298 5.35220010397693e-15 4.78540009296574e-15 3.28602406383743e-16 1.2 0.0001083018 5.29960010295507e-15 4.74090009210124e-15 3.22020806255883e-16 -0.2 -4.39985e-05 7.6648001489037e-15 3.63150007054897e-15 3.92070007616725e-15 0 -2.092596e-13 7.83680015224514e-15 3.861800075023e-15 3.861800075023e-15 0.2 6.4652e-05 7.59420014753216e-15 4.22550008208858e-15 3.24110006296469e-15 0.4 0.0001393148 6.18370012013044e-15 5.10940009926007e-15 8.87872617248658e-16 0.6 0.0001557135 5.76900011207408e-15 5.14520009995555e-15 4.23851208234137e-16 0.8 0.0001620072 5.7058001108463e-15 5.09990009907551e-15 4.066979079009e-16 1 0.0001670388 5.65110010978365e-15 5.05770009825569e-15 3.95394407681308e-16 1.2 0.0001713835 5.59910010877345e-15 5.01670009745919e-15 3.85718207493329e-16 -0.2 -2.37613e-05 7.53030014629078e-15 3.79140007365534e-15 3.63540007062474e-15 0 -1.92511e-14 7.68480014929224e-15 3.79010007363009e-15 3.79010007363009e-15 0.2 3.97441e-05 7.63840014839083e-15 3.85940007497638e-15 3.66900007127749e-15 0.4 0.0001017315 7.19600013979635e-15 4.38930008527072e-15 2.67800005202538e-15 0.6 0.0001680752 6.00440011664719e-15 5.01010009733097e-15 8.27692516079542e-16 0.8 0.0001853006 5.6866001104733e-15 5.02130009754855e-15 4.91349709545427e-16 1 0.0001923442 5.61710010912313e-15 4.98100009676565e-15 4.62495008984868e-16 1.2 0.00019769 5.56470010810516e-15 4.94310009602937e-15 4.48835908719513e-16 -0.2 -3.03715e-05 6.32060012278999e-15 1.79000003477424e-15 4.32020008392832e-15 0 -6.5068e-12 5.82750011321056e-15 2.79150005423034e-15 2.79150005423034e-15 0.2 1.63948e-05 4.23750008232171e-15 3.3861000657816e-15 5.14387509992981e-16 0.4 1.80941e-05 3.96550007703758e-15 3.29480006400792e-15 3.22285406261023e-16 0.6 1.88994e-05 3.88110007539794e-15 3.22980006274517e-15 3.02949405885383e-16 0.8 1.96175e-05 3.81670007414685e-15 3.17550006169029e-15 2.93986205711256e-16 1 2.02949e-05 3.75810007300843e-15 3.1247000607034e-15 2.87616805587518e-16 1.2 2.09429e-05 3.70260007193023e-15 3.07580005975342e-15 2.82438705486923e-16 -0.2 -2.75466e-05 7.15440013898818e-15 2.92970005691514e-15 4.0740000791454e-15 0 -1.4111e-12 7.2322001404996e-15 3.53910006875393e-15 3.53910006875393e-15 0.2 3.05926e-05 6.52740012680748e-15 4.30500008363303e-15 2.03150003946585e-15 0.4 4.68899e-05 5.56420010809544e-15 4.61290008961459e-15 7.12169713835286e-16 0.6 5.14433e-05 5.21430010129795e-15 4.51210008765635e-15 4.4815160870622e-16 0.8 5.34756e-05 5.07440009858012e-15 4.42900008604197e-15 3.88192507541397e-16 1 5.49195e-05 4.98970009693466e-15 4.36660008482973e-15 3.6560600710261e-16 1.2 5.61396e-05 4.92400009565831e-15 4.31390008380593e-15 3.53389006865271e-16 -0.2 -1.92255e-05 7.30460014190611e-15 3.42210006648097e-15 3.75260007290158e-15 0 -2.142575e-13 7.42910014432477e-15 3.64880007088506e-15 3.64880007088506e-15 0.2 2.60253e-05 7.19430013976332e-15 4.00940007789042e-15 3.04080005907347e-15 0.4 5.29952e-05 6.48750012603235e-15 4.67410009080352e-15 1.63800003182135e-15 0.6 6.84125e-05 5.8660001139585e-15 4.80280009330376e-15 8.61288716732214e-16 0.8 7.53107e-05 5.53750010757674e-15 4.73420009197107e-15 5.88886311440266e-16 1 7.89083e-05 5.36250010417703e-15 4.65450009042275e-15 4.88623509492465e-16 1.2 8.12728e-05 5.25380010206532e-15 4.58840008913862e-15 4.44334808632071e-16 -0.2 -1.16095e-05 7.24710014078906e-15 3.63840007068302e-15 3.48900006778063e-15 0 -1.98411e-14 7.37230014322132e-15 3.62560007043436e-15 3.62560007043436e-15 0.2 1.76845e-05 7.29360014169241e-15 3.69660007181367e-15 3.47020006741541e-15 0.4 4.21365e-05 6.90580013415864e-15 4.30620008365634e-15 2.45720004773591e-15 0.6 6.4649e-05 6.34360012323681e-15 4.67300009078215e-15 1.50710002927836e-15 0.8 7.90381e-05 5.88950011441503e-15 4.7434000921498e-15 9.66070318767801e-16 1 8.7157e-05 5.60030010879676e-15 4.69830009127365e-15 7.12415513840061e-16 1.2 9.19923e-05 5.41720010523968e-15 4.63230008999147e-15 5.90346711468637e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_ig_st.standard0000644000175000017500000002104214163340332024631 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -1.62961e-11 3.27793e-11 -1.871236e-13 -1.62961e-11 0.1 1.8848e-06 7.4455e-12 -1.985279e-13 -1.8848e-06 0.2 2.1784e-06 7.0487e-12 -1.979546e-13 -2.1784e-06 0.3 2.4297e-06 7.0619e-12 -1.972692e-13 -2.4297e-06 0.4 2.6688e-06 7.1327e-12 -1.965743e-13 -2.6688e-06 0.5 2.9044e-06 7.2279e-12 -1.958752e-13 -2.9045e-06 0.6 3.1408e-06 7.3359e-12 -1.951737e-13 -3.1408e-06 0.7 3.38e-06 7.4516e-12 -1.944707e-13 -3.38e-06 0.8 3.6235e-06 7.5723e-12 -1.937665e-13 -3.6236e-06 0.9 3.8723e-06 7.6963e-12 -1.930615e-13 -3.8723e-06 1.00000 4.1269e-06 7.8228e-12 -1.92356e-13 -4.1269e-06 1.10000 4.3878e-06 7.9512e-12 -1.9165e-13 -4.3878e-06 1.20000 4.6554e-06 8.0811e-12 -1.909437e-13 -4.6554e-06 0. -5.990972e-10 1.1983e-09 -1.021476e-13 -5.990972e-10 0.1 5.08104e-05 2.514929e-10 -1.23699e-13 -5.08106e-05 0.2 6.49605e-05 1.340098e-10 -1.32406e-13 -6.49606e-05 0.3 7.02204e-05 1.301087e-10 -1.323845e-13 -7.02206e-05 0.4 7.41827e-05 1.294134e-10 -1.32024e-13 -7.41829e-05 0.5 7.75584e-05 1.2909e-10 -1.31645e-13 -7.75586e-05 0.6 8.05814e-05 1.288952e-10 -1.312657e-13 -8.05815e-05 0.7 8.33685e-05 1.287676e-10 -1.308882e-13 -8.33687e-05 0.8 8.59879e-05 1.28681e-10 -1.30513e-13 -8.5988e-05 0.9 8.84826e-05 1.286217e-10 -1.301399e-13 -8.84828e-05 1.00000 9.08819e-05 1.285815e-10 -1.29769e-13 -9.0882e-05 1.10000 9.3206e-05 1.285555e-10 -1.294003e-13 -9.32061e-05 1.20000 9.54701e-05 1.285401e-10 -1.290338e-13 -9.54702e-05 0. -2.8763e-09 5.7526e-09 -7.8223e-14 -2.8763e-09 0.1 0.0001165364 1.3797e-09 -8.5948e-14 -0.0001165378 0.2 0.0001809147 4.734493e-10 -9.32973e-14 -0.0001809152 0.3 0.0002023956 3.979475e-10 -9.49224e-14 -0.000202396 0.4 0.0002139213 3.907542e-10 -9.49783e-14 -0.0002139217 0.5 0.0002226436 3.890415e-10 -9.48947e-14 -0.0002226439 0.6 0.0002299367 3.88189e-10 -9.47933e-14 -0.0002299371 0.7 0.0002363188 3.875851e-10 -9.4689e-14 -0.0002363192 0.8 0.0002420615 3.870919e-10 -9.45842e-14 -0.0002420619 0.9 0.0002473295 3.866625e-10 -9.44795e-14 -0.0002473299 1.00000 0.0002522315 3.862751e-10 -9.4375e-14 -0.0002522319 1.10000 0.0002568427 3.85918e-10 -9.42709e-14 -0.0002568431 1.20000 0.0002612179 3.855839e-10 -9.4167e-14 -0.0002612183 0. -8.7347e-09 1.74694e-08 -7.50226e-14 -8.7347e-09 0.1 0.00016291 4.4237e-09 -7.86599e-14 -0.0001629144 0.2 0.0002799008 1.3681e-09 -8.28467e-14 -0.0002799022 0.3 0.0003354186 9.071012e-10 -8.53357e-14 -0.0003354195 0.4 0.000359908 8.452423e-10 -8.5797e-14 -0.0003599088 0.5 0.0003757025 8.345855e-10 -8.58369e-14 -0.0003757033 0.6 0.0003880725 8.313927e-10 -8.58126e-14 -0.0003880733 0.7 0.0003985117 8.297899e-10 -8.57757e-14 -0.0003985125 0.8 0.0004076614 8.286659e-10 -8.57358e-14 -0.0004076622 0.9 0.000415875 8.277356e-10 -8.56949e-14 -0.0004158759 1.00000 0.0004233746 8.269048e-10 -8.56538e-14 -0.0004233754 1.10000 0.0004303107 8.261347e-10 -8.56126e-14 -0.0004303115 1.20000 0.0004367906 8.254065e-10 -8.55714e-14 -0.0004367914 0. -1.8821e-12 3.8321e-12 -6.79666e-14 -1.8821e-12 0.1 4.217612e-07 1.196e-12 -6.88948e-14 -4.217624e-07 0.2 5.035159e-07 1.1972e-12 -6.87289e-14 -5.035171e-07 0.3 5.81992e-07 1.228e-12 -6.85534e-14 -5.819932e-07 0.4 6.620429e-07 1.2694e-12 -6.83736e-14 -6.620441e-07 0.5 7.454912e-07 1.3164e-12 -6.81911e-14 -7.454925e-07 0.6 8.333081e-07 1.3671e-12 -6.80062e-14 -8.333094e-07 0.7 9.261298e-07 1.4206e-12 -6.78193e-14 -9.261312e-07 0.8 1.0244e-06 1.4765e-12 -6.76306e-14 -1.0244e-06 0.9 1.1286e-06 1.5345e-12 -6.744e-14 -1.1286e-06 1.00000 1.239e-06 1.5945e-12 -6.72476e-14 -1.239e-06 1.10000 1.356e-06 1.6564e-12 -6.70534e-14 -1.356e-06 1.20000 1.4798e-06 1.7201e-12 -6.68575e-14 -1.4798e-06 0. -2.569062e-10 5.138499e-10 -3.7542e-14 -2.569062e-10 0.1 5.56188e-05 1.051042e-10 -4.60729e-14 -5.5619e-05 0.2 6.66433e-05 7.64416e-11 -4.75244e-14 -6.66434e-05 0.3 7.19763e-05 7.5851e-11 -4.73512e-14 -7.19764e-05 0.4 7.62154e-05 7.56367e-11 -4.71709e-14 -7.62155e-05 0.5 7.98914e-05 7.55464e-11 -4.69911e-14 -7.98915e-05 0.6 8.32258e-05 7.55192e-11 -4.68123e-14 -8.32259e-05 0.7 8.63333e-05 7.55286e-11 -4.66347e-14 -8.63333e-05 0.8 8.9281e-05 7.55608e-11 -4.64583e-14 -8.9281e-05 0.9 9.21114e-05 7.56083e-11 -4.62831e-14 -9.21114e-05 1.00000 9.4853e-05 7.56664e-11 -4.61091e-14 -9.48531e-05 1.10000 9.75258e-05 7.57322e-11 -4.59363e-14 -9.75259e-05 1.20000 0.0001001445 7.58036e-11 -4.57648e-14 -0.0001001446 0. -1.3428e-09 2.6856e-09 -2.77548e-14 -1.3428e-09 0.1 0.0001422215 6.375521e-10 -3.05976e-14 -0.0001422221 0.2 0.0002097043 2.391236e-10 -3.29874e-14 -0.0002097045 0.3 0.0002294793 2.255943e-10 -3.31171e-14 -0.0002294795 0.4 0.0002419981 2.246423e-10 -3.30697e-14 -0.0002419983 0.5 0.0002518585 2.242356e-10 -3.30176e-14 -0.0002518588 0.6 0.0002601861 2.239714e-10 -3.29653e-14 -0.0002601863 0.7 0.0002675076 2.23781e-10 -3.29133e-14 -0.0002675078 0.8 0.000274119 2.236367e-10 -3.28614e-14 -0.0002741193 0.9 0.0002802034 2.235234e-10 -3.28098e-14 -0.0002802036 1.00000 0.0002858818 2.234322e-10 -3.27583e-14 -0.000285882 1.10000 0.0002912387 2.233574e-10 -3.27071e-14 -0.000291239 1.20000 0.0002963351 2.232953e-10 -3.2656e-14 -0.0002963353 0. -4.1759e-09 8.3518e-09 -2.63144e-14 -4.1759e-09 0.1 0.0002021988 2.1075e-09 -2.76754e-14 -0.0002022009 0.2 0.0003366093 6.457375e-10 -2.92207e-14 -0.0003366099 0.3 0.0003907439 4.740846e-10 -2.98646e-14 -0.0003907443 0.4 0.0004153399 4.643871e-10 -2.9887e-14 -0.0004153404 0.5 0.0004328878 4.631497e-10 -2.98672e-14 -0.0004328882 0.6 0.0004470626 4.626517e-10 -2.98445e-14 -0.0004470631 0.7 0.0004591282 4.623266e-10 -2.98215e-14 -0.0004591286 0.8 0.0004697343 4.620814e-10 -2.97985e-14 -0.0004697348 0.9 0.0004792693 4.618854e-10 -2.97756e-14 -0.0004792697 1.00000 0.000487985 4.617233e-10 -2.97527e-14 -0.0004879854 1.10000 0.0004960543 4.615863e-10 -2.97299e-14 -0.0004960548 1.20000 0.0005036012 4.614683e-10 -2.97071e-14 -0.0005036016 0. -1.33727e-10 2.679716e-10 -5.174884e-13 -1.33727e-10 0.1 6.8993e-06 5.9993e-11 -6.037622e-13 -6.8993e-06 0.2 8.3041e-06 3.71275e-11 -6.16007e-13 -8.3041e-06 0.3 9.1086e-06 3.35572e-11 -6.162826e-13 -9.1086e-06 0.4 9.7671e-06 3.25033e-11 -6.147892e-13 -9.7671e-06 0.5 1.03618e-05 3.20957e-11 -6.128635e-13 -1.03618e-05 0.6 1.09219e-05 3.19256e-11 -6.107967e-13 -1.0922e-05 0.7 1.14613e-05 3.18633e-11 -6.086773e-13 -1.14613e-05 0.8 1.19875e-05 3.18575e-11 -6.065384e-13 -1.19876e-05 0.9 1.25054e-05 3.18842e-11 -6.043944e-13 -1.25054e-05 1.00000 1.3018e-05 3.19312e-11 -6.022524e-13 -1.30181e-05 1.10000 1.35276e-05 3.19913e-11 -6.001159e-13 -1.35276e-05 1.20000 1.40357e-05 3.20604e-11 -5.97987e-13 -1.40357e-05 0. -1.7614e-09 3.5231e-09 -3.090647e-13 -1.7614e-09 0.1 4.67725e-05 8.696029e-10 -3.616038e-13 -4.67733e-05 0.2 6.55825e-05 3.817044e-10 -3.941134e-13 -6.55829e-05 0.3 7.38374e-05 2.997629e-10 -4.056338e-13 -7.38377e-05 0.4 7.89565e-05 2.752629e-10 -4.094854e-13 -7.89568e-05 0.5 8.28114e-05 2.651561e-10 -4.107836e-13 -8.28117e-05 0.6 8.60177e-05 2.60053e-10 -4.111057e-13 -8.60179e-05 0.7 8.88356e-05 2.57085e-10 -4.109982e-13 -8.88358e-05 0.8 9.13963e-05 2.551653e-10 -4.106795e-13 -9.13966e-05 0.9 9.37746e-05 2.538156e-10 -4.102477e-13 -9.37748e-05 1.00000 9.60167e-05 2.528012e-10 -4.097512e-13 -9.60169e-05 1.10000 9.81535e-05 2.519966e-10 -4.092158e-13 -9.81537e-05 1.20000 0.0001002066 2.5133e-10 -4.086561e-13 -0.0001002068 0. -7.3815e-09 1.47632e-08 -2.53997e-13 -7.3815e-09 0.1 9.22911e-05 3.8124e-09 -2.759715e-13 -9.22949e-05 0.2 0.0001455984 1.4465e-09 -2.944298e-13 -0.0001455998 0.3 0.0001722361 1.0126e-09 -3.045685e-13 -0.0001722371 0.4 0.0001876163 8.772663e-10 -3.092837e-13 -0.0001876172 0.5 0.0001980639 8.210181e-10 -3.1151e-13 -0.0001980647 0.6 0.0002060083 7.929405e-10 -3.126234e-13 -0.0002060091 0.7 0.0002125089 7.76959e-10 -3.132054e-13 -0.0002125097 0.8 0.0002180905 7.66899e-10 -3.135126e-13 -0.0002180912 0.9 0.0002230419 7.600332e-10 -3.136674e-13 -0.0002230426 1.00000 0.0002275361 7.550243e-10 -3.137324e-13 -0.0002275369 1.10000 0.0002316842 7.511612e-10 -3.137415e-13 -0.0002316849 1.20000 0.0002355611 7.480403e-10 -3.137145e-13 -0.0002355618 0. -2.1413e-08 4.28263e-08 -2.516925e-13 -2.1413e-08 0.1 0.0001256376 1.12854e-08 -2.617589e-13 -0.0001256489 0.2 0.0002131856 3.9827e-09 -2.719559e-13 -0.0002131896 0.3 0.0002639105 2.5609e-09 -2.792211e-13 -0.0002639131 0.4 0.0002941017 2.0948e-09 -2.834154e-13 -0.0002941038 0.5 0.0003140577 1.8965e-09 -2.857112e-13 -0.0003140596 0.6 0.0003285839 1.7971e-09 -2.869994e-13 -0.0003285857 0.7 0.0003399622 1.7409e-09 -2.877575e-13 -0.0003399639 0.8 0.0003493617 1.7061e-09 -2.882259e-13 -0.0003493634 0.9 0.0003574303 1.683e-09 -2.885277e-13 -0.000357432 1.00000 0.0003645531 1.6666e-09 -2.88729e-13 -0.0003645548 1.10000 0.0003709733 1.6543e-09 -2.888669e-13 -0.0003709749 1.20000 0.0003768526 1.6448e-09 -2.889634e-13 -0.0003768542 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_core_lw.standard0000644000175000017500000000626414163340332025363 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 2.60826005067054e-14 2.91750005667813e-15 2.91750005667813e-15 -0.8 0. 2.24198004355484e-14 3.04060005906959e-15 3.04060005906959e-15 -0.4 0. 2.04751003977688e-14 3.22580006266746e-15 3.22580006266746e-15 1.11022302462516e-16 0. 1.95403003796085e-14 3.54670006890157e-15 3.54670006890157e-15 0.4 0. 1.33195502587583e-13 6.4626301255492e-14 6.4626301255492e-14 0.8 0. 1.49544002905184e-13 7.35659014291612e-14 7.35659014291612e-14 1.2 0. 1.45411802824908e-13 7.1646601391875e-14 7.1646601391875e-14 -1.2 1.999e-23 2.52171004898914e-14 1.57800003065573e-15 4.1391000804101e-15 -0.8 2.8931e-18 2.16405004204089e-14 1.44890002814771e-15 4.45630008657232e-15 -0.4 5.494771e-13 1.96656003820427e-14 1.41710002752993e-15 4.74130009210901e-15 1.11022302462516e-16 1.236127e-07 1.8562100360605e-14 1.55040003011955e-15 5.02030009752913e-15 0.4 0.0007991706 8.90153017292959e-14 7.66382014888466e-14 6.08840011827905e-15 0.8 0.0022547 1.06732202073481e-13 9.40792018276721e-14 8.20640015942534e-15 1.2 0.0026316 1.0694010207752e-13 9.17263017819624e-14 1.15358002241054e-14 -1.2 0. 2.55426004962149e-14 2.92940005690931e-15 2.92940005690931e-15 -0.8 0. 2.21250004298213e-14 3.04950005924249e-15 3.04950005924249e-15 -0.4 0. 2.02840003940563e-14 3.23330006281316e-15 3.23330006281316e-15 1.11022302462516e-16 0. 1.93646003761951e-14 3.53220006861988e-15 3.53220006861988e-15 0.4 0. 1.35167302625889e-13 6.5635001275088e-14 6.5635001275088e-14 0.8 0. 1.52733202967141e-13 7.52429014617402e-14 7.52429014617402e-14 1.2 0. 1.47362402862802e-13 7.26878014121024e-14 7.26878014121024e-14 -1.2 0. 2.46904004796592e-14 1.57970003068876e-15 4.16030008082195e-15 -0.8 9.317e-24 2.13529004148218e-14 1.44850002813994e-15 4.47350008690647e-15 -0.4 1.270064e-16 1.94791003784195e-14 1.41640002751633e-15 4.75620009239847e-15 1.11022302462516e-16 2.1351e-09 1.84053003575589e-14 1.52390002960473e-15 5.03380009779139e-15 0.4 0.0009801814 9.03535017552931e-14 7.82252015196772e-14 5.91420011489488e-15 0.8 0.0031798 1.10869502153856e-13 9.87260019179452e-14 8.0269001559382e-15 1.2 0.0036848 1.08346302104838e-13 9.47898018414769e-14 1.01900001979606e-14 -1.2 0. 2.70428005253592e-14 2.89680005627599e-15 2.89680005627599e-15 -0.8 0. 2.29255004453726e-14 3.02570005878013e-15 3.02570005878013e-15 -0.4 0. 2.07972004040262e-14 3.21350006242851e-15 3.21350006242851e-15 1.11022302462516e-16 0. 2.19152004257455e-14 4.69200009115126e-15 4.69200009115126e-15 0.4 0. 1.31728302559079e-13 6.39001012413842e-14 6.39001012413842e-14 0.8 0. 1.45023602817366e-13 7.11913013830299e-14 7.11913013830299e-14 1.2 0. 1.42311102764671e-13 6.99973013598342e-14 6.99973013598342e-14 -1.2 3.64482e-17 2.61550005081119e-14 1.57240003054694e-15 4.10480007974375e-15 -0.8 1.507081e-13 2.21340004299962e-14 1.44830002813605e-15 4.42830008602837e-15 -0.4 7.807919e-10 1.99803003881563e-14 1.41790002754547e-15 4.71730009164276e-15 1.11022302462516e-16 4.5448e-06 1.98839003862836e-14 2.73790005318905e-15 4.99710009707842e-15 0.4 0.0006706172 8.85788017208161e-14 7.58145014728446e-14 6.45120012532715e-15 0.8 0.0015027 1.05202902043772e-13 9.07897017637671e-14 9.81160019060948e-15 1.2 0.0016064 1.11937902174612e-13 9.06087017602508e-14 1.77220003442844e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_gidl_st.standard0000644000175000017500000001606014163340332025317 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 4.112714e-13 0. -8.225429e-13 4.112714e-13 0.1 4.282006e-07 0. -1.1638e-12 -4.281995e-07 0.2 5.06853e-07 0. -1.7338e-12 -5.068513e-07 0.3 5.815685e-07 0. -2.6524e-12 -5.815658e-07 0.4 6.576924e-07 0. -4.0863e-12 -6.576883e-07 0.5 7.369819e-07 0. -6.2603e-12 -7.369757e-07 0.6 8.204027e-07 0. -9.471e-12 -8.203932e-07 0.7 9.086032e-07 0. -1.41002e-11 -9.085891e-07 0.8 1.0021e-06 0. -2.06305e-11 -1.0021e-06 0.9 1.1013e-06 0. -2.96601e-11 -1.1012e-06 1.00000 1.2065e-06 0. -4.19185e-11 -1.2065e-06 1.10000 1.3182e-06 0. -5.82822e-11 -1.3181e-06 1.20000 1.4366e-06 0. -7.9789e-11 -1.4365e-06 0. 7.37202e-14 0. -1.474405e-13 7.37202e-14 0.1 3.61142e-05 0. -2.262072e-13 -3.61142e-05 0.2 4.44867e-05 0. -3.727754e-13 -4.44867e-05 0.3 4.82744e-05 0. -6.330096e-13 -4.82744e-05 0.4 5.13598e-05 0. -1.0761e-12 -5.13598e-05 0.5 5.411e-05 0. -1.8028e-12 -5.411e-05 0.6 5.66595e-05 0. -2.9548e-12 -5.66595e-05 0.7 5.90777e-05 0. -4.7265e-12 -5.90777e-05 0.8 6.14053e-05 0. -7.3768e-12 -6.14053e-05 0.9 6.36683e-05 0. -1.12431e-11 -6.36683e-05 1.00000 6.5884e-05 0. -1.67557e-11 -6.5884e-05 1.10000 6.8065e-05 0. -2.4453e-11 -6.80649e-05 1.20000 7.02199e-05 0. -3.4997e-11 -7.02199e-05 0. 9.0546e-15 0. -1.81093e-14 9.0546e-15 0.1 0.0001019125 0. -3.11471e-14 -0.0001019125 0.2 0.0001554726 0. -5.91967e-14 -0.0001554726 0.3 0.0001728973 0. -1.158308e-13 -0.0001728973 0.4 0.0001828705 0. -2.239462e-13 -0.0001828705 0.5 0.0001906864 0. -4.203296e-13 -0.0001906864 0.6 0.0001973728 0. -7.615866e-13 -0.0001973728 0.7 0.0002033325 0. -1.3315e-12 -0.0002033325 0.8 0.0002087808 0. -2.2502e-12 -0.0002087808 0.9 0.0002138496 0. -3.6841e-12 -0.0002138496 1.00000 0.000218626 0. -5.8581e-12 -0.000218626 1.10000 0.000223171 0. -9.0687e-12 -0.000223171 1.20000 0.0002275285 0. -1.3698e-11 -0.0002275285 0. 6.602097e-16 0. -1.3204e-15 6.602097e-16 0.1 0.0001503664 0. -2.6878e-15 -0.0001503664 0.2 0.0002570454 0. -6.2843e-15 -0.0002570454 0.3 0.0003060689 0. -1.49408e-14 -0.0003060689 0.4 0.0003278819 0. -3.42265e-14 -0.0003278819 0.5 0.0003423738 0. -7.43811e-14 -0.0003423738 0.6 0.0003539437 0. -1.531479e-13 -0.0003539437 0.7 0.0003638434 0. -2.997162e-13 -0.0003638434 0.8 0.0003726201 0. -5.599506e-13 -0.0003726201 0.9 0.0003805789 0. -1.003e-12 -0.0003805789 1.00000 0.0003879128 0. -1.7297e-12 -0.0003879128 1.10000 0.0003947533 0. -2.8818e-12 -0.0003947533 1.20000 0.0004011943 0. -4.6535e-12 -0.0004011943 0. 4.085041e-13 0. -8.170082e-13 4.085041e-13 0.1 5.37564e-08 0. -1.1563e-12 -5.37552e-08 0.2 6.6258e-08 0. -1.7232e-12 -6.62562e-08 0.3 7.93934e-08 0. -2.6373e-12 -7.93907e-08 0.4 9.37285e-08 0. -4.0645e-12 -9.37244e-08 0.5 1.09566e-07 0. -6.2292e-12 -1.095598e-07 0.6 1.271429e-07 0. -9.4268e-12 -1.271335e-07 0.7 1.466773e-07 0. -1.40383e-11 -1.466633e-07 0.8 1.683855e-07 0. -2.05452e-11 -1.68365e-07 0.9 1.924899e-07 0. -2.95441e-11 -1.924603e-07 1.00000 2.192225e-07 0. -4.17634e-11 -2.191808e-07 1.10000 2.488281e-07 0. -5.80775e-11 -2.4877e-07 1.20000 2.815651e-07 0. -7.95227e-11 -2.814856e-07 0. 7.31218e-14 0. -1.462435e-13 7.31218e-14 0.1 3.73264e-05 0. -2.24463e-13 -3.73264e-05 0.2 4.36334e-05 0. -3.700907e-13 -4.36334e-05 0.3 4.75081e-05 0. -6.287788e-13 -4.75081e-05 0.4 5.07989e-05 0. -1.0694e-12 -5.07989e-05 0.5 5.37902e-05 0. -1.7924e-12 -5.37902e-05 0.6 5.66049e-05 0. -2.9389e-12 -5.66049e-05 0.7 5.93075e-05 0. -4.7027e-12 -5.93075e-05 0.8 6.19358e-05 0. -7.3418e-12 -6.19358e-05 0.9 6.45136e-05 0. -1.11929e-11 -6.45136e-05 1.00000 6.7057e-05 0. -1.6685e-11 -6.7057e-05 1.10000 6.95771e-05 0. -2.43555e-11 -6.95771e-05 1.20000 7.2082e-05 0. -3.48648e-11 -7.2082e-05 0. 8.9641e-15 0. -1.79282e-14 8.9641e-15 0.1 0.0001242344 0. -3.08539e-14 -0.0001242344 0.2 0.0001794823 0. -5.86826e-14 -0.0001794823 0.3 0.0001958263 0. -1.149066e-13 -0.0001958263 0.4 0.0002068203 0. -2.223004e-13 -0.0002068203 0.5 0.0002157247 0. -4.174717e-13 -0.0002157247 0.6 0.000223409 0. -7.567757e-13 -0.000223409 0.7 0.00023029 0. -1.3237e-12 -0.00023029 0.8 0.0002366037 0. -2.2378e-12 -0.0002366037 0.9 0.0002424968 0. -3.665e-12 -0.0002424968 1.00000 0.000248067 0. -5.8296e-12 -0.0002480669 1.10000 0.000253382 0. -9.0272e-12 -0.000253382 1.20000 0.0002584911 0. -1.36388e-11 -0.0002584911 0. 6.518707e-16 0. -1.3037e-15 6.518707e-16 0.1 0.0001869016 0. -2.6562e-15 -0.0001869016 0.2 0.000309524 0. -6.2172e-15 -0.000309524 0.3 0.0003567717 0. -1.47957e-14 -0.0003567717 0.4 0.0003789293 0. -3.39228e-14 -0.0003789293 0.5 0.0003951678 0. -7.37742e-14 -0.0003951678 0.6 0.0004084949 0. -1.519938e-13 -0.0004084949 0.7 0.0004199848 0. -2.976217e-13 -0.0004199848 0.8 0.0004301988 0. -5.563099e-13 -0.0004301988 0.9 0.0004394746 0. -9.969631e-13 -0.0004394746 1.00000 0.0004480322 0. -1.7199e-12 -0.0004480322 1.10000 0.000456023 0. -2.8664e-12 -0.000456023 1.20000 0.0004635557 0. -4.6302e-12 -0.0004635557 0. 4.157264e-13 0. -8.314528e-13 4.157264e-13 0.1 2.8004e-06 0. -1.1758e-12 -2.8004e-06 0.2 3.3478e-06 0. -1.7507e-12 -3.3478e-06 0.3 3.7201e-06 0. -2.6766e-12 -3.7201e-06 0.4 4.0538e-06 0. -4.1212e-12 -4.0538e-06 0.5 4.3736e-06 0. -6.3103e-12 -4.3736e-06 0.6 4.6887e-06 0. -9.5419e-12 -4.6887e-06 0.7 5.0034e-06 0. -1.41995e-11 -5.0034e-06 0.8 5.3205e-06 0. -2.07674e-11 -5.3205e-06 0.9 5.6415e-06 0. -2.98461e-11 -5.6415e-06 1.00000 5.9675e-06 0. -4.21674e-11 -5.9675e-06 1.10000 6.2993e-06 0. -5.86104e-11 -6.2993e-06 1.20000 6.6375e-06 0. -8.02158e-11 -6.6374e-06 0. 7.46853e-14 0. -1.493707e-13 7.46853e-14 0.1 3.55607e-05 0. -2.290187e-13 -3.55607e-05 0.2 4.85048e-05 0. -3.770999e-13 -4.85048e-05 0.3 5.42906e-05 0. -6.398205e-13 -5.42906e-05 0.4 5.81221e-05 0. -1.0868e-12 -5.81221e-05 0.5 6.11745e-05 0. -1.8195e-12 -6.11745e-05 0.6 6.38257e-05 0. -2.9804e-12 -6.38257e-05 0.7 6.6236e-05 0. -4.7649e-12 -6.6236e-05 0.8 6.84871e-05 0. -7.433e-12 -6.84871e-05 0.9 7.0626e-05 0. -1.13237e-11 -7.0626e-05 1.00000 7.26822e-05 0. -1.6869e-11 -7.26821e-05 1.10000 7.46753e-05 0. -2.46094e-11 -7.46753e-05 1.20000 7.66194e-05 0. -3.5209e-11 -7.66194e-05 0. 9.201e-15 0. -1.84019e-14 9.201e-15 0.1 8.10231e-05 0. -3.16207e-14 -8.10231e-05 0.2 0.0001263526 0. -6.00265e-14 -0.0001263526 0.3 0.0001486656 0. -1.173209e-13 -0.0001486656 0.4 0.0001617021 0. -2.265978e-13 -0.0001617021 0.5 0.0001707602 0. -4.249309e-13 -0.0001707602 0.6 0.0001778137 0. -7.693278e-13 -0.0001778137 0.7 0.0001837123 0. -1.3442e-12 -0.0001837123 0.8 0.0001888752 0. -2.2701e-12 -0.0001888752 0.9 0.0001935328 0. -3.7146e-12 -0.0001935328 1.00000 0.0001978237 0. -5.9038e-12 -0.0001978237 1.10000 0.0002018368 0. -9.1354e-12 -0.0002018368 1.20000 0.0002056324 0. -1.3793e-11 -0.0002056324 0. 6.737331e-16 0. -1.3475e-15 6.737331e-16 0.1 0.0001158119 0. -2.739e-15 -0.0001158119 0.2 0.000195504 0. -6.3929e-15 -0.000195504 0.3 0.0002412036 0. -1.51752e-14 -0.0002412036 0.4 0.0002683926 0. -3.47168e-14 -0.0002683926 0.5 0.0002864973 0. -7.53597e-14 -0.0002864973 0.6 0.0002998241 0. -1.550078e-13 -0.0002998241 0.7 0.0003103926 0. -3.030892e-13 -0.0003103926 0.8 0.00031923 0. -5.6581e-13 -0.00031923 0.9 0.0003269036 0. -1.0128e-12 -0.0003269036 1.00000 0.0003337499 0. -1.7455e-12 -0.0003337499 1.10000 0.0003399815 0. -2.9064e-12 -0.0003399815 1.20000 0.0003457398 0. -4.6908e-12 -0.0003457398 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_gidl_lw.standard0000644000175000017500000001603014163340332025310 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 2.16203e-11 0. -4.32407e-11 2.16203e-11 0.1 4.2044e-06 0. -6.11803e-11 -4.2044e-06 0.2 4.5381e-06 0. -9.11425e-11 -4.538e-06 0.3 4.8249e-06 0. -1.394345e-10 -4.8248e-06 0.4 5.1038e-06 0. -2.148116e-10 -5.1036e-06 0.5 5.3765e-06 0. -3.290991e-10 -5.3762e-06 0.6 5.6444e-06 0. -4.978797e-10 -5.6439e-06 0.7 5.9082e-06 0. -7.412347e-10 -5.9075e-06 0.8 6.1686e-06 0. -1.0845e-09 -6.1675e-06 0.9 6.4258e-06 0. -1.5592e-09 -6.4242e-06 1.00000 6.6802e-06 0. -2.2036e-09 -6.678e-06 1.10000 6.9322e-06 0. -3.0638e-09 -6.9291e-06 1.20000 7.1818e-06 0. -4.1944e-09 -7.1776e-06 0. 3.8754e-12 0. -7.7509e-12 3.8754e-12 0.1 9.83393e-05 0. -1.18916e-11 -9.83393e-05 0.2 0.0001417724 0. -1.95965e-11 -0.0001417724 0.3 0.0001516504 0. -3.32768e-11 -0.0001516504 0.4 0.0001564254 0. -5.657e-11 -0.0001564254 0.5 0.0001606282 0. -9.47695e-11 -0.0001606281 0.6 0.0001645737 0. -1.553332e-10 -0.0001645736 0.7 0.0001683334 0. -2.484693e-10 -0.0001683331 0.8 0.0001719433 0. -3.877922e-10 -0.0001719429 0.9 0.0001754279 0. -5.910386e-10 -0.0001754273 1.00000 0.0001788054 0. -8.808302e-10 -0.0001788045 1.10000 0.00018209 0. -1.2855e-09 -0.0001820887 1.20000 0.000185293 0. -1.8398e-09 -0.0001852911 0. 4.759979e-13 0. -9.519959e-13 4.759979e-13 0.1 0.0002148605 0. -1.6374e-12 -0.0002148605 0.2 0.0003806516 0. -3.1119e-12 -0.0003806516 0.3 0.0004885396 0. -6.0891e-12 -0.0004885395 0.4 0.000538957 0. -1.17727e-11 -0.000538957 0.5 0.000560161 0. -2.20964e-11 -0.000560161 0.6 0.0005736701 0. -4.00359e-11 -0.00057367 0.7 0.0005849713 0. -6.99982e-11 -0.0005849712 0.8 0.0005952604 0. -1.182902e-10 -0.0005952603 0.9 0.0006049002 0. -1.936673e-10 -0.0006049 1.00000 0.0006140477 0. -3.079548e-10 -0.0006140474 1.10000 0.0006227928 0. -4.767354e-10 -0.0006227923 1.20000 0.000631196 0. -7.200905e-10 -0.0006311953 0. 3.47069e-14 0. -6.94138e-14 3.47069e-14 0.1 0.0002959867 0. -1.412954e-13 -0.0002959867 0.2 0.0005584903 0. -3.303618e-13 -0.0005584903 0.3 0.0007793801 0. -7.854251e-13 -0.0007793801 0.4 0.0009478808 0. -1.7993e-12 -0.0009478808 0.5 0.0010559 0. -3.9101e-12 -0.0010559 0.6 0.0011145 0. -8.0509e-12 -0.0011145 0.7 0.0011481 0. -1.57558e-11 -0.0011481 0.8 0.0011719 0. -2.94361e-11 -0.0011719 0.9 0.0011916 0. -5.27293e-11 -0.0011916 1.00000 0.0012092 0. -9.09288e-11 -0.0012092 1.10000 0.0012255 0. -1.514925e-10 -0.0012255 1.20000 0.0012409 0. -2.446286e-10 -0.0012409 0. 2.14749e-11 0. -4.29497e-11 2.14749e-11 0.1 8.539108e-07 0. -6.07866e-11 -8.5385e-07 0.2 9.462905e-07 0. -9.05895e-11 -9.461999e-07 0.3 1.0361e-06 0. -1.38642e-10 -1.036e-06 0.4 1.1243e-06 0. -2.136701e-10 -1.1241e-06 0.5 1.2115e-06 0. -3.274623e-10 -1.2112e-06 0.6 1.2981e-06 0. -4.955569e-10 -1.2976e-06 0.7 1.3843e-06 0. -7.379827e-10 -1.3835e-06 0.8 1.4703e-06 0. -1.08e-09 -1.4692e-06 0.9 1.5561e-06 0. -1.5531e-09 -1.5546e-06 1.00000 1.642e-06 0. -2.1955e-09 -1.6398e-06 1.10000 1.7279e-06 0. -3.0531e-09 -1.7248e-06 1.20000 1.8139e-06 0. -4.1804e-09 -1.8097e-06 0. 3.844e-12 0. -7.688e-12 3.844e-12 0.1 0.000121711 0. -1.17999e-11 -0.000121711 0.2 0.0001614214 0. -1.94554e-11 -0.0001614214 0.3 0.0001693552 0. -3.30544e-11 -0.0001693551 0.4 0.0001755756 0. -5.62191e-11 -0.0001755755 0.5 0.000181284 0. -9.42225e-11 -0.0001812839 0.6 0.0001866299 0. -1.54496e-10 -0.0001866298 0.7 0.0001916962 0. -2.47215e-10 -0.000191696 0.8 0.0001965391 0. -3.859534e-10 -0.0001965387 0.9 0.0002011992 0. -5.883992e-10 -0.0002011986 1.00000 0.0002057067 0. -8.771175e-10 -0.0002057058 1.10000 0.0002100846 0. -1.2803e-09 -0.0002100833 1.20000 0.0002143509 0. -1.8328e-09 -0.0002143491 0. 4.712388e-13 0. -9.424777e-13 4.712388e-13 0.1 0.0003015915 0. -1.622e-12 -0.0003015915 0.2 0.0005279336 0. -3.0849e-12 -0.0005279336 0.3 0.0006638339 0. -6.0405e-12 -0.0006638339 0.4 0.0007146391 0. -1.16861e-11 -0.0007146391 0.5 0.0007381917 0. -2.19461e-11 -0.0007381917 0.6 0.000756874 0. -3.9783e-11 -0.0007568739 0.7 0.0007736441 0. -6.95859e-11 -0.000773644 0.8 0.000789141 0. -1.176384e-10 -0.0007891408 0.9 0.0008036507 0. -1.926665e-10 -0.0008036505 1.00000 0.0008173565 0. -3.064587e-10 -0.0008173562 1.10000 0.0008303915 0. -4.745533e-10 -0.000830391 1.20000 0.0008428576 0. -7.169791e-10 -0.0008428569 0. 3.42685e-14 0. -6.85371e-14 3.42685e-14 0.1 0.0004223757 0. -1.396351e-13 -0.0004223757 0.2 0.000794883 0. -3.268329e-13 -0.000794883 0.3 0.0011046 0. -7.778005e-13 -0.0011046 0.4 0.0013336 0. -1.7833e-12 -0.0013336 0.5 0.0014645 0. -3.8782e-12 -0.0014645 0.6 0.0015273 0. -7.9902e-12 -0.0015273 0.7 0.0015667 0. -1.56457e-11 -0.0015667 0.8 0.0015987 0. -2.92447e-11 -0.0015987 0.9 0.0016273 0. -5.24095e-11 -0.0016273 1.00000 0.0016536 0. -9.04128e-11 -0.0016536 1.10000 0.0016782 0. -1.506863e-10 -0.0016782 1.20000 0.0017015 0. -2.434053e-10 -0.0017015 0. 2.18545e-11 0. -4.37091e-11 2.18545e-11 0.1 1.41513e-05 0. -6.18137e-11 -1.41513e-05 0.2 1.67164e-05 0. -9.20321e-11 -1.67163e-05 0.3 1.75188e-05 0. -1.407087e-10 -1.75187e-05 0.4 1.81395e-05 0. -2.166462e-10 -1.81393e-05 0.5 1.87264e-05 0. -3.317286e-10 -1.87261e-05 0.6 1.92978e-05 0. -5.016098e-10 -1.92973e-05 0.7 1.98576e-05 0. -7.464554e-10 -1.98569e-05 0.8 2.04074e-05 0. -1.0917e-09 -2.04063e-05 0.9 2.0948e-05 0. -1.569e-09 -2.09465e-05 1.00000 2.14804e-05 0. -2.2167e-09 -2.14781e-05 1.10000 2.2005e-05 0. -3.0811e-09 -2.20019e-05 1.20000 2.25225e-05 0. -4.2169e-09 -2.25182e-05 0. 3.9262e-12 0. -7.8523e-12 3.9262e-12 0.1 8.11628e-05 0. -1.20394e-11 -8.11628e-05 0.2 0.000125489 0. -1.98239e-11 -0.0001254889 0.3 0.0001441859 0. -3.36349e-11 -0.0001441858 0.4 0.0001523334 0. -5.71346e-11 -0.0001523333 0.5 0.0001570899 0. -9.56492e-11 -0.0001570899 0.6 0.0001607029 0. -1.566787e-10 -0.0001607027 0.7 0.0001638431 0. -2.504844e-10 -0.0001638429 0.8 0.0001667371 0. -3.907455e-10 -0.0001667367 0.9 0.0001694757 0. -5.95276e-10 -0.0001694751 1.00000 0.0001721022 0. -8.867889e-10 -0.0001721014 1.10000 0.0001746409 0. -1.2937e-09 -0.0001746396 1.20000 0.0001771066 0. -1.8509e-09 -0.0001771047 0. 4.836904e-13 0. -9.673808e-13 4.836904e-13 0.1 0.0001512449 0. -1.6623e-12 -0.0001512449 0.2 0.0002676645 0. -3.1555e-12 -0.0002676645 0.3 0.0003457122 0. -6.1675e-12 -0.0003457122 0.4 0.0003927667 0. -1.19121e-11 -0.0003927667 0.5 0.0004204906 0. -2.23382e-11 -0.0004204906 0.6 0.000437888 0. -4.04429e-11 -0.000437888 0.7 0.0004500441 0. -7.06613e-11 -0.000450044 0.8 0.0004594739 0. -1.193379e-10 -0.0004594738 0.9 0.0004673874 0. -1.952754e-10 -0.0004673872 1.00000 0.0004743839 0. -3.103578e-10 -0.0004743836 1.10000 0.0004807781 0. -4.802391e-10 -0.0004807777 1.20000 0.0004867465 0. -7.250846e-10 -0.0004867457 0. 3.54178e-14 0. -7.08357e-14 3.54178e-14 0.1 0.00020227 0. -1.43985e-13 -0.00020227 0.2 0.0003792398 0. -3.360712e-13 -0.0003792398 0.3 0.0005231419 0. -7.977454e-13 -0.0005231419 0.4 0.0006316377 0. -1.825e-12 -0.0006316377 0.5 0.000708883 0. -3.9616e-12 -0.000708883 0.6 0.0007625373 0. -8.1486e-12 -0.0007625373 0.7 0.0008001994 0. -1.59331e-11 -0.0008001994 0.8 0.0008276426 0. -2.97441e-11 -0.0008276425 0.9 0.0008486786 0. -5.32439e-11 -0.0008486786 1.00000 0.0008656578 0. -9.17584e-11 -0.0008656577 1.10000 0.0008799953 0. -1.52788e-10 -0.0008799952 1.20000 0.0008925471 0. -2.465937e-10 -0.0008925469 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1d_sw.standard0000644000175000017500000004502714163340332025146 0ustar carstencarstenFreq N(d) 100.00000 3.224247593161e-20 125.89254 2.561251352881e-20 158.48932 2.034611254404e-20 199.52623 1.616290139556e-20 251.18864 1.284003993321e-20 316.22777 1.0200596004e-20 398.10717 8.10399649284e-21 501.18723 6.43863412921e-21 630.95734 5.11576840516e-21 794.32823 4.06499330329e-21 1000 3.230330896e-21 1258.93 2.56732729344e-21 1584.89 2.040690276e-21 1995.26 1.62236561796e-21 2511.89 1.29008117329e-21 3162.28 1.02613871556e-21 3981.07 8.1647919081e-22 5011.87 6.49944036e-22 6309.57 5.1765805441e-22 7943.28 4.12577344e-22 10000 3.2911402225e-22 12589.25 2.6281273225e-22 15848.93 2.1014851225e-22 19952.62 1.6831689169e-22 25118.86 1.3508715529e-22 31622.78 1.0869313536e-22 39810.72 8.772757569e-23 50118.72 7.107333025e-23 63095.73 5.784515136e-23 79432.82 4.733715204e-23 100000 3.899128249e-23 125892.54 3.236130769e-23 158489.32 2.709514809e-23 199526.23 2.291153956e-23 251188.64 1.958859081e-23 316227.77 1.694886561e-23 398107.17 1.485254521e-23 501187.23 1.318706596e-23 630957.34 1.186458025e-23 794328.23 1.081357456e-23 1000000 9.979281e-24 1258930 9.31592484e-24 1584890 8.78944609e-24 1995260 8.37118489e-24 2511890 8.03892609e-24 3162280 7.77461689e-24 3981070 7.56525025e-24 5011870 7.3984e-24 6309570 7.26625936e-24 7943280 7.160976e-24 10000000 7.07772816e-24 12589250 7.01137441e-24 15848930 6.959044e-24 19952620 6.9169e-24 25118860 6.88380169e-24 31622780 6.85758969e-24 39810720 6.83613316e-24 50118720 6.81993225e-24 63095730 6.80635921e-24 79432820 6.79592761e-24 100000000 6.78758809e-24 100.00000 2.504502025e-17 125.89254 1.989427609e-17 158.48932 1.580221504e-17 199.52623 1.255214041e-17 251.18864 9.97043776e-18 316.22777 7.92028449e-18 398.10717 6.29106724e-18 501.18723 4.99746025e-18 630.95734 3.96965776e-18 794.32823 3.15311049e-18 1000 2.50462276e-18 1258.93 1.98951025e-18 1584.89 1.58030041e-18 1995.26 1.25529616e-18 2511.89 9.9718338612649e-19 3162.28 7.9211726609409e-19 3981.07 6.2922731788225e-19 5011.87 4.9983924344761e-19 6309.57 3.9706268266681e-19 7943.28 3.1542443782756e-19 10000 2.5057683235225e-19 12589.25 1.9906650885969e-19 15848.93 1.5815041636969e-19 19952.62 1.2564961894681e-19 25118.86 9.983331248881e-20 31622.78 7.932666617001e-20 39810.72 6.303770154361e-20 50118.72 5.009888405284e-20 63095.73 3.982124016676e-20 79432.82 3.165741238009e-20 100000 2.517264654921e-20 125892.54 2.002162740484e-20 158489.32 1.592999903881e-20 199526.23 1.267993106704e-20 251188.64 1.009830039409e-20 316227.77 8.04763291396e-21 398107.17 6.418733689e-21 501187.23 5.12485606161e-21 630957.34 4.09708807225e-21 794328.23 3.28070055076e-21 1000000 2.63222354704e-21 1258930 2.11712254884e-21 1584890 1.70796225625e-21 1995260 1.38295478161e-21 2511890 1.12479073641e-21 3162280 9.19726929e-22 3981070 7.5683861449e-22 5011870 6.2744739121e-22 6309570 5.2467109249e-22 7943280 4.4303514256e-22 10000000 3.78185809e-22 12589250 3.2667670564e-22 15848930 2.8576212025e-22 19952620 2.5325857881e-22 25118860 2.2744259344e-22 31622780 2.0693685609e-22 39810720 1.9064705625e-22 50118720 1.7771022864e-22 63095730 1.6743066025e-22 79432820 1.5926692401e-22 100000000 1.5278196025e-22 100.00000 1.6148055625e-16 125.89254 1.2826921536e-16 158.48932 1.0188681721e-16 199.52623 8.093161444e-17 251.18864 6.428672041e-17 316.22777 5.1065316e-17 398.10717 4.056161344e-17 501.18723 3.221924644e-17 630.95734 2.5593481e-17 794.32823 2.032927744e-17 1000 1.614834225e-17 1258.93 1.282714225e-17 1584.89 1.0188864e-17 1995.26 8.09345601e-18 2511.89 6.42876025e-18 3162.28 5.10669604e-18 3981.07 4.05659881e-18 5011.87 3.22238401e-18 6309.57 2.55968001e-18 7943.28 2.03319081e-18 10000 1.61518681e-18 12589.25 1.28300929e-18 15848.93 1.01909025e-18 19952.62 8.0958407340721e-19 25118.86 6.4313053889764e-19 31622.78 5.1091173500481e-19 39810.72 4.0588672613776e-19 50118.72 3.2246225387776e-19 63095.73 2.56195920964e-19 79432.82 2.0355870015504e-19 100000 1.6174746542656e-19 125892.54 1.2853558654596e-19 158489.32 1.0215451530244e-19 199526.23 8.119923804304e-20 251188.64 6.455390236516e-20 316227.77 5.133201641649e-20 398107.17 4.082949638161e-20 501187.23 3.248707041889e-20 630957.34 2.586043501924e-20 794328.23 2.059669874025e-20 1000000 1.641558000289e-20 1258930 1.309438510249e-20 1584890 1.0456289536e-20 1995260 8.36076154384e-21 2511890 6.69621436416e-21 3162280 5.37403354084e-21 3981070 4.32378578025e-21 5011870 3.48953662729e-21 6309570 2.82687875856e-21 7943280 2.30050692496e-21 10000000 1.88238838225e-21 12589250 1.55027250225e-21 15848930 1.28646320929e-21 19952620 1.07690954569e-21 25118860 9.1045217169e-22 31622780 7.7823702961e-22 39810720 6.7321048369e-22 50118720 5.8978551025e-22 63095730 5.2352185636e-22 79432820 4.7088132004e-22 100000000 4.29069796e-22 100.00000 3.9121279681e-16 125.89254 3.1074990961e-16 158.48932 2.4683866321e-16 199.52623 1.9607000625e-16 251.18864 1.5574540804e-16 316.22777 1.2371223076e-16 398.10717 9.8267569e-17 501.18723 7.8057225e-17 630.95734 6.200302564e-17 794.32823 4.925092041e-17 1000 3.912127209e-17 1258.93 3.107505025e-17 1584.89 2.468400489e-17 1995.26 1.9607184e-17 2511.89 1.557486225e-17 3162.28 1.237139929e-17 3981.07 9.82697104e-18 5011.87 7.80587721e-18 6309.57 6.20059801e-18 7943.28 4.92529249e-18 10000 3.912484e-18 12589.25 3.10781641e-18 15848.93 2.46866944e-18 19952.62 1.96112016e-18 25118.86 1.55775361e-18 31622.78 1.23743376e-18 39810.72 9.8303953077225e-19 50118.72 7.8093046198729e-19 63095.73 6.2038952943361e-19 79432.82 4.9286732243401e-19 100000 3.9157282426084e-19 125892.54 3.1111172352121e-19 158489.32 2.4719918879569e-19 199526.23 1.9643164707721e-19 251188.64 1.56105590404e-19 316227.77 1.2407344028836e-19 398107.17 9.862941243024e-20 501187.23 7.841853709561e-20 630957.34 6.236442360369e-20 794328.23 4.9612216644e-20 1000000 3.948276298729e-20 1258930 3.143663749444e-20 1584890 2.504540465476e-20 1995260 1.996865741025e-20 2511890 1.5936032644e-20 3162280 1.273282046404e-20 3981070 1.018841928129e-20 5011870 8.16733335289e-21 6309570 6.56192343249e-21 7943280 5.28670047409e-21 10000000 4.273759876e-21 12589250 3.46915110025e-21 15848930 2.830027204e-21 19952620 2.32235320464e-21 25118860 1.91908829476e-21 31622780 1.59876823716e-21 39810720 1.34432955801e-21 50118720 1.14221693089e-21 63095730 9.8167542489e-22 79432820 8.5415323081e-22 100000000 7.5286030689e-22 100.00000 2.23008728644e-21 125.89254 1.77171120889e-21 158.48932 1.40760782761e-21 199.52623 1.11839411776e-21 251.18864 8.8865994816e-22 316.22777 7.06177476e-22 398.10717 5.6123031409e-22 501.18723 4.4608819264e-22 630.95734 3.5463292489e-22 794.32823 2.8198469776e-22 1000 2.2427758081e-22 1258.93 1.7844150724e-22 1584.89 1.4202918976e-22 1995.26 1.1310960609e-22 2511.89 9.0136036e-23 3162.28 7.188665796e-23 3981.07 5.739274564e-23 5011.87 4.587894756e-23 6309.57 3.673208449e-23 7943.28 2.946752656e-23 10000 2.3697424e-23 12589.25 1.911350961e-23 15848.93 1.547242225e-23 19952.62 1.258049961e-23 25118.86 1.028292489e-23 31622.78 8.45820889e-24 39810.72 7.00872676e-24 50118.72 5.85736804e-24 63095.73 4.94261824e-24 79432.82 4.21604089e-24 100000 3.63893776e-24 125892.54 3.18051556e-24 158489.32 2.81669089e-24 199526.23 2.52746404e-24 251188.64 2.29764964e-24 316227.77 2.11498849e-24 398107.17 1.97009296e-24 501187.23 1.855044e-24 630957.34 1.763584e-24 794328.23 1.69078009e-24 1000000 1.633284e-24 1258930 1.58734801e-24 1584890 1.55102116e-24 1995260 1.52201569e-24 2511890 1.49915536e-24 3162280 1.48084561e-24 3981070 1.46627881e-24 5011870 1.45491844e-24 6309570 1.44576576e-24 7943280 1.43832049e-24 10000000 1.43256961e-24 12589250 1.428025e-24 15848930 1.42444225e-24 19952620 1.42157929e-24 25118860 1.41919569e-24 31622780 1.41729025e-24 39810720 1.41586201e-24 50118720 1.41467236e-24 63095730 1.41395881e-24 79432820 1.41324544e-24 100000000 1.41253225e-24 100.00000 2.894655204e-17 125.89254 2.299298401e-17 158.48932 1.826451169e-17 199.52623 1.450771921e-17 251.18864 1.152398809e-17 316.22777 9.15365025e-18 398.10717 7.27111225e-18 501.18723 5.77585089e-18 630.95734 4.58773561e-18 794.32823 3.644281e-18 1000 2.89476196e-18 1258.93 2.29946896e-18 1584.89 1.82655225e-18 1995.26 1.45082025e-18 2511.89 1.15240225e-18 3162.28 9.1548461065216e-19 3981.07 7.2721803733264e-19 5011.87 5.7767250627529e-19 6309.57 4.588843081e-19 7943.28 3.6452746587321e-19 10000 2.8957711650169e-19 12589.25 2.30042059129e-19 15848.93 1.8275163302916e-19 19952.62 1.4518744260409e-19 25118.86 1.15349216161e-19 31622.78 9.1647874756e-20 39810.72 7.2821181316e-20 50118.72 5.786661180304e-20 63095.73 4.598781603529e-20 79432.82 3.655212483321e-20 100000 2.905708888996e-20 125892.54 2.310357440196e-20 158489.32 1.837453447729e-20 199526.23 1.461811574916e-20 251188.64 1.163429733376e-20 316227.77 9.26415875025e-21 398107.17 7.38150750649e-21 501187.23 5.88605046436e-21 630957.34 4.69815655761e-21 794328.23 3.75458886009e-21 1000000 3.00508986969e-21 1258930 2.40973973881e-21 1584890 1.93683609025e-21 1995260 1.561198144e-21 2511890 1.26281440321e-21 3162280 1.02579918961e-21 3981070 8.3752938801e-22 5011870 6.8798667025e-22 6309570 5.6919939241e-22 7943280 4.7483896464e-22 10000000 3.9989200729e-22 12589250 3.4035453169e-22 15848930 2.9306358481e-22 19952620 2.5550104336e-22 25118860 2.2566348841e-22 31622780 2.0196104769e-22 39810720 1.8313396929e-22 50118720 1.6817939856e-22 63095730 1.5630250441e-22 79432820 1.4686531344e-22 100000000 1.3936983025e-22 100.00000 1.9281821881e-16 125.89254 1.5316042564e-16 158.48932 1.2165869401e-16 199.52623 9.663676416e-17 251.18864 7.676212996e-17 316.22777 6.097423396e-17 398.10717 4.843324836e-17 501.18723 3.847224676e-17 630.95734 3.055988961e-17 794.32823 2.427434361e-17 1000 1.928175921e-17 1258.93 1.531626496e-17 1584.89 1.2166144e-17 1995.26 9.66401569e-18 2511.89 7.67622436e-18 3162.28 6.09744249e-18 3981.07 4.84352064e-18 5011.87 3.84748225e-18 6309.57 3.05620324e-18 7943.28 2.42767561e-18 10000 1.92848769e-18 12589.25 1.53190129e-18 15848.93 1.21682961e-18 19952.62 9.6661656335556e-19 25118.86 7.6786067970756e-19 31622.78 6.0998333680449e-19 39810.72 4.8457692856336e-19 50118.72 3.8496304202521e-19 63095.73 3.0583687183504e-19 79432.82 2.4298471705104e-19 100000 1.9305952973316e-19 125892.54 1.5340256888896e-19 158489.32 1.2190188188025e-19 199526.23 9.687998628025e-20 251188.64 7.700441851089e-20 316227.77 6.12166564e-20 398107.17 4.867600837696e-20 501187.23 3.871461565609e-20 630957.34 3.0802005025e-20 794328.23 2.451679534656e-20 1000000 1.952427727849e-20 1258930 1.5558570756e-20 1584890 1.240851184225e-20 1995260 9.90632043025e-21 2511890 7.91875735876e-21 3162280 6.339981376e-21 3981070 5.08592906649e-21 5011870 4.08978156196e-21 6309570 3.29852651584e-21 7943280 2.67000591841e-21 10000000 2.17074923569e-21 12589250 1.774178641e-21 15848930 1.45917124081e-21 19952620 1.2089529e-21 25118860 1.01019722896e-21 31622780 8.5231883025e-22 39810720 7.2691708996e-22 50118720 6.27302116e-22 63095730 5.4817325161e-22 79432820 4.853209e-22 100000000 4.3539830244e-22 100.00000 4.6068183225e-16 125.89254 3.6593394436e-16 158.48932 2.9067181081e-16 199.52623 2.30888025e-16 251.18864 1.8340201476e-16 316.22777 1.4568007204e-16 398.10717 1.1571735184e-16 501.18723 9.191823876e-17 630.95734 7.301360704e-17 794.32823 5.799736336e-17 1000 4.606879876e-17 1258.93 3.659403049e-17 1584.89 2.906719396e-17 1995.26 2.308898601e-17 2511.89 1.834066276e-17 3162.28 1.456796224e-17 3981.07 1.157224324e-17 5011.87 9.19241761e-18 6309.57 7.30188484e-18 7943.28 5.79990889e-18 10000 4.60703296e-18 12589.25 3.659569e-18 15848.93 2.907025e-18 19952.62 2.30918416e-18 25118.86 1.83439936e-18 31622.78 1.45709041e-18 39810.72 1.15756081e-18 50118.72 9.1950474424561e-19 63095.73 7.3045550995561e-19 79432.82 5.8028820052225e-19 100000 4.6100623585536e-19 125892.54 3.6625711478724e-19 158489.32 2.9099529782404e-19 199526.23 2.3121258720849e-19 251188.64 1.8372556287684e-19 316227.77 1.4600530092096e-19 398107.17 1.1604303567081e-19 501187.23 9.224310494025e-20 630957.34 7.333816442404e-20 794328.23 5.832147720256e-20 1000000 4.6393282881e-20 1258930 3.691835602225e-20 1584890 2.939215363396e-20 1995260 2.3413896256e-20 2511890 1.866521566849e-20 3162280 1.489317581376e-20 3981070 1.189694114361e-20 5011870 9.51695851401e-21 6309570 7.62645903616e-21 7943280 6.124784121e-21 10000000 4.931971984e-21 12589250 3.98447525529e-21 15848930 3.23185428036e-21 19952620 2.63402979984e-21 25118860 2.15916350224e-21 31622780 1.78196269689e-21 39810720 1.48233470121e-21 50118720 1.24433973504e-21 63095730 1.05528821904e-21 79432820 9.0511925904e-22 100000000 7.8583787584e-22 100.00000 3.6956964442176e-19 125.89254 2.9356533639889e-19 158.48932 2.3319298948036e-19 199.52623 1.8523753189929e-19 251.18864 1.4714520074401e-19 316.22777 1.1688733616641e-19 398.10717 9.285269386276e-20 501.18723 7.376123673604e-20 630.95734 5.8596432489e-20 794.32823 4.655056523364e-20 1000 3.698217455625e-20 1258.93 2.9381730921e-20 1584.89 2.334450907881e-20 1995.26 1.854896906916e-20 2511.89 1.473973249329e-20 3162.28 1.1713949361e-20 3981.07 9.31047448464e-21 5011.87 7.401332961e-21 6309.57 5.88483834129e-21 7943.28 4.68025647376e-21 10000 3.72341599204e-21 12589.25 2.96337608161e-21 15848.93 2.35965692169e-21 19952.62 1.88009827201e-21 25118.86 1.49917644864e-21 31622.78 1.19659954561e-21 39810.72 9.5625048289e-22 50118.72 7.6533562609e-22 63095.73 6.1368666529e-22 79432.82 4.9323079744e-22 100000 3.9754776996e-22 125892.54 3.2154227856e-22 158489.32 2.6117145664e-22 199526.23 2.1321548361e-22 251188.64 1.7512287556e-22 316227.77 1.44865296e-22 398107.17 1.2083065929e-22 501187.23 1.0173748225e-22 630957.34 8.657372025e-23 794328.23 7.452696241e-23 1000000 6.495876409e-23 1258930 5.735941696e-23 1584890 5.132146321e-23 1995260 4.6526041e-23 2511890 4.271668164e-23 3162280 3.969126001e-23 3981070 3.728689969e-23 5011870 3.5378704e-23 6309570 3.386192481e-23 7943280 3.265665316e-23 10000000 3.170027809e-23 12589250 3.094029376e-23 15848930 3.033696241e-23 19952620 2.985748164e-23 25118860 2.947621264e-23 31622780 2.917404169e-23 39810720 2.8933641e-23 50118720 2.874246544e-23 63095730 2.8590409e-23 79432820 2.846969449e-23 100000000 2.837479824e-23 100.00000 2.492405776e-17 125.89254 1.979805025e-17 158.48932 1.572598336e-17 199.52623 1.249127649e-17 251.18864 9.9225e-18 316.22777 7.88149476e-18 398.10717 6.26050441e-18 501.18723 4.9729e-18 630.95734 3.95015625e-18 794.32823 3.13785796e-18 1000 2.49260944e-18 1258.93 1.97993041e-18 1584.89 1.57276681e-18 1995.26 1.24925329e-18 2511.89 9.9239013286884e-19 3162.28 7.8831722110729e-19 3981.07 6.2621630504689e-19 5011.87 4.9745500196401e-19 6309.57 3.9517630553025e-19 7943.28 3.1393340056576e-19 10000 2.4939986060025e-19 12589.25 1.9813911443524e-19 15848.93 1.5742119557956e-19 19952.62 1.2507780049956e-19 25118.86 9.938653468969e-20 31622.78 7.897926605625e-20 39810.72 6.276918922884e-20 50118.72 4.989304005625e-20 63095.73 3.966518358544e-20 79432.82 3.154087200625e-20 100000 2.508755049025e-20 125892.54 1.9961451225e-20 158489.32 1.588966133764e-20 199526.23 1.265532751681e-20 251188.64 1.008620498601e-20 316227.77 8.04548005156e-21 398107.17 6.42447134784e-21 501187.23 5.13684691524e-21 630957.34 4.114067881e-21 794328.23 3.30164010801e-21 1000000 2.65629944449e-21 1258930 2.14369e-21 1584890 1.73651391225e-21 1995260 1.413083281e-21 2511890 1.15617000625e-21 3162280 9.52092736e-22 3981070 7.8999220624e-22 5011870 6.6123551025e-22 6309570 5.5895362084e-22 7943280 4.7771096356e-22 10000000 4.1317879824e-22 12589250 3.6191638081e-22 15848930 3.21198084e-22 19952620 2.8885721764e-22 25118860 2.6316626176e-22 31622780 2.4275821249e-22 39810720 2.2654765225e-22 50118720 2.1367130625e-22 63095730 2.0344457956e-22 79432820 1.9532019049e-22 100000000 1.8886730041e-22 100.00000 1.3053519504e-16 125.89254 1.0368737929e-16 158.48932 8.236288516e-17 199.52623 6.542221456e-17 251.18864 5.196679744e-17 316.22777 4.127934001e-17 398.10717 3.278936644e-17 501.18723 2.604571225e-17 630.95734 2.068885225e-17 794.32823 1.643329444e-17 1000 1.3053769e-17 1258.93 1.036904401e-17 1584.89 8.23632601e-18 1995.26 6.54234084e-18 2511.89 5.19703209e-18 3162.28 4.12821124e-18 3981.07 3.27935881e-18 5011.87 2.60467321e-18 6309.57 2.06928225e-18 7943.28 1.643524e-18 10000 1.30576329e-18 12589.25 1.03713856e-18 15848.93 8.2392854856601e-19 19952.62 6.5453310063684e-19 25118.86 5.1997742214916e-19 31622.78 4.1309606835025e-19 39810.72 3.28197223225e-19 50118.72 2.6075964370369e-19 63095.73 2.0719210970896e-19 79432.82 1.6464190796881e-19 100000 1.3084309466176e-19 125892.54 1.0399567226896e-19 158489.32 8.2670050576e-20 199526.23 6.573049929616e-20 251188.64 5.227496922384e-20 316227.77 4.158683311225e-20 398107.17 3.309692393536e-20 501187.23 2.635317169956e-20 630957.34 2.099641572196e-20 794328.23 1.674140980996e-20 1000000 1.3361510464e-20 1258930 1.067677891225e-20 1584890 8.54421073801e-21 1995260 6.85026041569e-21 2511890 5.50470511969e-21 3162280 4.43589300625e-21 3981070 3.58690792464e-21 5011870 2.91253423041e-21 6309570 2.376855009e-21 7943280 1.95135111081e-21 10000000 1.61336378889e-21 12589250 1.34488692529e-21 15848930 1.13163614404e-21 19952620 9.622404e-22 25118860 8.2768413025e-22 31622780 7.2079899529e-22 39810720 6.3590213241e-22 50118720 5.6846480625e-22 63095730 5.1489509569e-22 79432820 4.7234502225e-22 100000000 4.3854642225e-22 100.00000 3.0619050289e-16 125.89254 2.4321650116e-16 158.48932 1.9319332036e-16 199.52623 1.5346006641e-16 251.18864 1.2189705649e-16 316.22777 9.68256e-17 398.10717 7.691114601e-17 501.18723 6.109298244e-17 630.95734 4.852794244e-17 794.32823 3.854795569e-17 1000 3.061962225e-17 1258.93 2.432166489e-17 1584.89 1.931954116e-17 1995.26 1.534602276e-17 2511.89 1.218987396e-17 3162.28 9.68329924e-18 3981.07 7.69174756e-18 5011.87 6.10979524e-18 6309.57 4.853209e-18 7943.28 3.85493956e-18 10000 3.06215001e-18 12589.25 2.43266409e-18 15848.93 1.93237801e-18 19952.62 1.535121e-18 25118.86 1.21947849e-18 31622.78 9.6867030831025e-19 39810.72 7.6952668319289e-19 50118.72 6.1134133844224e-19 63095.73 4.8569037784201e-19 79432.82 3.8588210987481e-19 100000 3.0660174088569e-19 125892.54 2.4362694196164e-19 158489.32 1.93604400025e-19 199526.23 1.5387002581129e-19 251188.64 1.2230792535025e-19 316227.77 9.723720050944e-20 398107.17 7.732286928601e-20 501187.23 6.150434720049e-20 630957.34 4.893921752841e-20 794328.23 3.895839068944e-20 1000000 3.103037263936e-20 1258930 2.473287783561e-20 1584890 1.973064096964e-20 1995260 1.575720346729e-20 2511890 1.260098296681e-20 3162280 1.009391949225e-20 3981070 8.10248419044e-21 5011870 6.52062710016e-21 6309570 5.26411193764e-21 7943280 4.26603616201e-21 10000000 3.47322814281e-21 12589250 2.84348097049e-21 15848930 2.34325701184e-21 19952620 1.94591265625e-21 25118860 1.63028597824e-21 31622780 1.37958016329e-21 39810720 1.18043780625e-21 50118720 1.02225354529e-21 63095730 8.9660121489e-22 79432820 7.9679740176e-22 100000000 7.1751658225e-22 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_diode_lt.standard0000644000175000017500000002036014163340332025311 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 3.377162e-07 0. -6.76515e-16 -3.377162e-07 0.2 3.646881e-07 0. -6.906776e-16 -3.646881e-07 0.3 3.86638e-07 0. -6.909741e-16 -3.86638e-07 0.4 4.079611e-07 0. -6.909803e-16 -4.079611e-07 0.5 4.28797e-07 0. -6.909805e-16 -4.28797e-07 0.6 4.492469e-07 0. -6.909805e-16 -4.492469e-07 0.7 4.693741e-07 0. -6.909805e-16 -4.693741e-07 0.8 4.892215e-07 0. -6.909805e-16 -4.892215e-07 0.9 5.088195e-07 0. -6.909805e-16 -5.088195e-07 1.00000 5.281907e-07 0. -6.909805e-16 -5.281907e-07 1.10000 5.473526e-07 0. -6.909805e-16 -5.473526e-07 1.20000 5.663189e-07 0. -6.909805e-16 -5.663189e-07 0. 0. 0. 0. 0. 0.1 1.8014e-06 0. -6.76515e-16 -1.8014e-06 0.2 2.069e-06 0. -6.906776e-16 -2.069e-06 0.3 2.1593e-06 0. -6.909741e-16 -2.1593e-06 0.4 2.2431e-06 0. -6.909803e-16 -2.2431e-06 0.5 2.3236e-06 0. -6.909805e-16 -2.3236e-06 0.6 2.4014e-06 0. -6.909805e-16 -2.4014e-06 0.7 2.4771e-06 0. -6.909805e-16 -2.4771e-06 0.8 2.5509e-06 0. -6.909805e-16 -2.5509e-06 0.9 2.6232e-06 0. -6.909805e-16 -2.6232e-06 1.00000 2.6941e-06 0. -6.909805e-16 -2.6941e-06 1.10000 2.7638e-06 0. -6.909805e-16 -2.7638e-06 1.20000 2.8324e-06 0. -6.909805e-16 -2.8324e-06 0. 0. 0. 0. 0. 0.1 8.4562e-06 0. -6.76515e-16 -8.4562e-06 0.2 1.37524e-05 0. -6.906776e-16 -1.37524e-05 0.3 1.59393e-05 0. -6.909741e-16 -1.59393e-05 0.4 1.66373e-05 0. -6.909803e-16 -1.66373e-05 0.5 1.70757e-05 0. -6.909805e-16 -1.70757e-05 0.6 1.74578e-05 0. -6.909805e-16 -1.74578e-05 0.7 1.78129e-05 0. -6.909805e-16 -1.78129e-05 0.8 1.8149e-05 0. -6.909805e-16 -1.8149e-05 0.9 1.847e-05 0. -6.909805e-16 -1.847e-05 1.00000 1.87785e-05 0. -6.909805e-16 -1.87785e-05 1.10000 1.90761e-05 0. -6.909805e-16 -1.90761e-05 1.20000 1.93645e-05 0. -6.909805e-16 -1.93645e-05 0. 0. 0. 0. 0. 0.1 1.42571e-05 0. -6.76515e-16 -1.42571e-05 0.2 2.60488e-05 0. -6.906776e-16 -2.60488e-05 0.3 3.48793e-05 0. -6.909741e-16 -3.48793e-05 0.4 4.02652e-05 0. -6.909803e-16 -4.02652e-05 0.5 4.28359e-05 0. -6.909805e-16 -4.28359e-05 0.6 4.41687e-05 0. -6.909805e-16 -4.41687e-05 0.7 4.5113e-05 0. -6.909805e-16 -4.5113e-05 0.8 4.59139e-05 0. -6.909805e-16 -4.59139e-05 0.9 4.66418e-05 0. -6.909805e-16 -4.66418e-05 1.00000 4.73219e-05 0. -6.909805e-16 -4.73219e-05 1.10000 4.7966e-05 0. -6.909805e-16 -4.7966e-05 1.20000 4.85808e-05 0. -6.909805e-16 -4.85808e-05 0. 0. 0. 0. 0. 0.1 1.80258e-05 0. -6.76515e-16 -1.80258e-05 0.2 3.44312e-05 0. -6.906776e-16 -3.44312e-05 0.3 4.88009e-05 0. -6.909741e-16 -4.88009e-05 0.4 6.05927e-05 0. -6.909803e-16 -6.05927e-05 0.5 6.91884e-05 0. -6.909805e-16 -6.91884e-05 0.6 7.45336e-05 0. -6.909805e-16 -7.45336e-05 0.7 7.76153e-05 0. -6.909805e-16 -7.76153e-05 0.8 7.95835e-05 0. -6.909805e-16 -7.95835e-05 0.9 8.10658e-05 0. -6.909805e-16 -8.10658e-05 1.00000 8.23179e-05 0. -6.909805e-16 -8.23179e-05 1.10000 8.3442e-05 0. -6.909805e-16 -8.3442e-05 1.20000 8.44831e-05 0. -6.909805e-16 -8.44831e-05 0. 0. 0. 0. 0. 0.1 7.13584e-08 0. -4.697e-23 -7.13584e-08 0.2 7.88495e-08 0. -4.723e-23 -7.88495e-08 0.3 8.6116e-08 0. -4.723e-23 -8.6116e-08 0.4 9.32318e-08 0. -4.723e-23 -9.32318e-08 0.5 1.002553e-07 0. -4.723e-23 -1.002553e-07 0.6 1.072157e-07 0. -4.723e-23 -1.072157e-07 0.7 1.141298e-07 0. -4.723e-23 -1.141298e-07 0.8 1.210083e-07 0. -4.723e-23 -1.210083e-07 0.9 1.278581e-07 0. -4.723e-23 -1.278581e-07 1.00000 1.346839e-07 0. -4.723e-23 -1.346839e-07 1.10000 1.414891e-07 0. -4.723e-23 -1.414891e-07 1.20000 1.482761e-07 0. -4.723e-23 -1.482761e-07 0. 0. 0. 0. 0. 0.1 1.2753e-06 0. -4.697e-23 -1.2753e-06 0.2 1.3771e-06 0. -4.723e-23 -1.3771e-06 0.3 1.4593e-06 0. -4.723e-23 -1.4593e-06 0.4 1.5369e-06 0. -4.723e-23 -1.5369e-06 0.5 1.6115e-06 0. -4.723e-23 -1.6115e-06 0.6 1.6837e-06 0. -4.723e-23 -1.6837e-06 0.7 1.7541e-06 0. -4.723e-23 -1.7541e-06 0.8 1.8229e-06 0. -4.723e-23 -1.8229e-06 0.9 1.8904e-06 0. -4.723e-23 -1.8904e-06 1.00000 1.9568e-06 0. -4.723e-23 -1.9568e-06 1.10000 2.0221e-06 0. -4.723e-23 -2.0221e-06 1.20000 2.0866e-06 0. -4.723e-23 -2.0866e-06 0. 0. 0. 0. 0. 0.1 1.13009e-05 0. -4.697e-23 -1.13009e-05 0.2 1.76632e-05 0. -4.723e-23 -1.76632e-05 0.3 1.95584e-05 0. -4.723e-23 -1.95584e-05 0.4 2.0281e-05 0. -4.723e-23 -2.0281e-05 0.5 2.088e-05 0. -4.723e-23 -2.088e-05 0.6 2.14263e-05 0. -4.723e-23 -2.14263e-05 0.7 2.19348e-05 0. -4.723e-23 -2.19348e-05 0.8 2.24136e-05 0. -4.723e-23 -2.24136e-05 0.9 2.28685e-05 0. -4.723e-23 -2.28685e-05 1.00000 2.33035e-05 0. -4.723e-23 -2.33035e-05 1.10000 2.37217e-05 0. -4.723e-23 -2.37217e-05 1.20000 2.41257e-05 0. -4.723e-23 -2.41257e-05 0. 0. 0. 0. 0. 0.1 2.02165e-05 0. -4.697e-23 -2.02165e-05 0.2 3.66611e-05 0. -4.723e-23 -3.66611e-05 0.3 4.85087e-05 0. -4.723e-23 -4.85087e-05 0.4 5.48078e-05 0. -4.723e-23 -5.48078e-05 0.5 5.73731e-05 0. -4.723e-23 -5.73731e-05 0.6 5.89419e-05 0. -4.723e-23 -5.89419e-05 0.7 6.02476e-05 0. -4.723e-23 -6.02476e-05 0.8 6.14263e-05 0. -4.723e-23 -6.14263e-05 0.9 6.25172e-05 0. -4.723e-23 -6.25172e-05 1.00000 6.35391e-05 0. -4.723e-23 -6.35391e-05 1.10000 6.45044e-05 0. -4.723e-23 -6.45044e-05 1.20000 6.5422e-05 0. -4.723e-23 -6.5422e-05 0. 0. 0. 0. 0. 0.1 2.57813e-05 0. -4.697e-23 -2.57813e-05 0.2 4.91621e-05 0. -4.723e-23 -4.91621e-05 0.3 6.94672e-05 0. -4.723e-23 -6.94672e-05 0.4 8.58334e-05 0. -4.723e-23 -8.58334e-05 0.5 9.7017e-05 0. -4.723e-23 -9.7017e-05 0.6 0.0001030401 0. -4.723e-23 -0.0001030401 0.7 0.0001063517 0. -4.723e-23 -0.0001063517 0.8 0.0001087132 0. -4.723e-23 -0.0001087132 0.9 0.0001107052 0. -4.723e-23 -0.0001107052 1.00000 0.0001125011 0. -4.723e-23 -0.0001125011 1.10000 0.0001141638 0. -4.723e-23 -0.0001141638 1.20000 0.0001157232 0. -4.723e-23 -0.0001157232 0. 0. 0. 0. 0. 0.1 1.0158e-06 0. -9.303029e-10 -1.0149e-06 0.2 1.2314e-06 0. -9.902234e-10 -1.2305e-06 0.3 1.2947e-06 0. -9.940829e-10 -1.2937e-06 0.4 1.3399e-06 0. -9.943315e-10 -1.3389e-06 0.5 1.3816e-06 0. -9.943475e-10 -1.3806e-06 0.6 1.422e-06 0. -9.943485e-10 -1.421e-06 0.7 1.4615e-06 0. -9.943486e-10 -1.4605e-06 0.8 1.5002e-06 0. -9.943486e-10 -1.4992e-06 0.9 1.5383e-06 0. -9.943486e-10 -1.5373e-06 1.00000 1.5758e-06 0. -9.943486e-10 -1.5748e-06 1.10000 1.6128e-06 0. -9.943486e-10 -1.6118e-06 1.20000 1.6492e-06 0. -9.943486e-10 -1.6482e-06 0. 0. 0. 0. 0. 0.1 2.3147e-06 0. -9.303029e-10 -2.3138e-06 0.2 3.1367e-06 0. -9.902234e-10 -3.1357e-06 0.3 3.3803e-06 0. -9.940829e-10 -3.3793e-06 0.4 3.5013e-06 0. -9.943315e-10 -3.5003e-06 0.5 3.5957e-06 0. -9.943475e-10 -3.5947e-06 0.6 3.6817e-06 0. -9.943485e-10 -3.6807e-06 0.7 3.7636e-06 0. -9.943486e-10 -3.7626e-06 0.8 3.8427e-06 0. -9.943486e-10 -3.8417e-06 0.9 3.9197e-06 0. -9.943486e-10 -3.9187e-06 1.00000 3.9949e-06 0. -9.943486e-10 -3.9939e-06 1.10000 4.0686e-06 0. -9.943486e-10 -4.0676e-06 1.20000 4.141e-06 0. -9.943486e-10 -4.14e-06 0. 0. 0. 0. 0. 0.1 6.3586e-06 0. -9.303029e-10 -6.3577e-06 0.2 1.05873e-05 0. -9.902234e-10 -1.05863e-05 0.3 1.28981e-05 0. -9.940829e-10 -1.28971e-05 0.4 1.40582e-05 0. -9.943315e-10 -1.40572e-05 0.5 1.46941e-05 0. -9.943475e-10 -1.46931e-05 0.6 1.51121e-05 0. -9.943485e-10 -1.51111e-05 0.7 1.54349e-05 0. -9.943486e-10 -1.5434e-05 0.8 1.57108e-05 0. -9.943486e-10 -1.57098e-05 0.9 1.59599e-05 0. -9.943486e-10 -1.59589e-05 1.00000 1.61919e-05 0. -9.943486e-10 -1.61909e-05 1.10000 1.64118e-05 0. -9.943486e-10 -1.64108e-05 1.20000 1.66223e-05 0. -9.943486e-10 -1.66213e-05 0. 0. 0. 0. 0. 0.1 9.8575e-06 0. -9.303029e-10 -9.8566e-06 0.2 1.79414e-05 0. -9.902234e-10 -1.79404e-05 0.3 2.3917e-05 0. -9.940829e-10 -2.3916e-05 0.4 2.7939e-05 0. -9.943315e-10 -2.79381e-05 0.5 3.05179e-05 0. -9.943475e-10 -3.05169e-05 0.6 3.2189e-05 0. -9.943485e-10 -3.2188e-05 0.7 3.33357e-05 0. -9.943486e-10 -3.33347e-05 0.8 3.41856e-05 0. -9.943486e-10 -3.41846e-05 0.9 3.48636e-05 0. -9.943486e-10 -3.48626e-05 1.00000 3.54371e-05 0. -9.943486e-10 -3.54361e-05 1.10000 3.59431e-05 0. -9.943486e-10 -3.59421e-05 1.20000 3.64028e-05 0. -9.943486e-10 -3.64018e-05 0. 0. 0. 0. 0. 0.1 1.22534e-05 0. -9.303029e-10 -1.22525e-05 0.2 2.3267e-05 0. -9.902234e-10 -2.3266e-05 0.3 3.26085e-05 0. -9.940829e-10 -3.26075e-05 0.4 4.00481e-05 0. -9.943315e-10 -4.00471e-05 0.5 4.56632e-05 0. -9.943475e-10 -4.56622e-05 0.6 4.97642e-05 0. -9.943485e-10 -4.97632e-05 0.7 5.27383e-05 0. -9.943486e-10 -5.27373e-05 0.8 5.49313e-05 0. -9.943486e-10 -5.49303e-05 0.9 5.66019e-05 0. -9.943486e-10 -5.66009e-05 1.00000 5.79265e-05 0. -9.943486e-10 -5.79256e-05 1.10000 5.90196e-05 0. -9.943486e-10 -5.90186e-05 1.20000 5.9954e-05 0. -9.943486e-10 -5.9953e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_ig_lt.standard0000644000175000017500000002035514163340332024772 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -6.33859e-11 1.331532e-10 -6.3814e-12 -6.33859e-11 0.1 5.730815e-07 5.91981e-11 -7.2941e-12 -5.731334e-07 0.2 6.209712e-07 4.89081e-11 -7.3755e-12 -6.210128e-07 0.3 6.538436e-07 4.76622e-11 -7.3833e-12 -6.538839e-07 0.4 6.855906e-07 4.70283e-11 -7.3903e-12 -6.856303e-07 0.5 7.164402e-07 4.65528e-11 -7.3975e-12 -7.164794e-07 0.6 7.465694e-07 4.61536e-11 -7.4048e-12 -7.466082e-07 0.7 7.760907e-07 4.5799e-11 -7.4122e-12 -7.761291e-07 0.8 8.050807e-07 4.54733e-11 -7.4196e-12 -8.051188e-07 0.9 8.335946e-07 4.51676e-11 -7.427e-12 -8.336323e-07 1.00000 8.616738e-07 4.48766e-11 -7.4344e-12 -8.617113e-07 1.10000 8.893505e-07 4.4597e-11 -7.4418e-12 -8.893877e-07 1.20000 9.166501e-07 4.43264e-11 -7.4492e-12 -9.16687e-07 0. -1.1053e-09 2.2133e-09 -2.6953e-12 -1.1053e-09 0.1 6.2795e-06 1.3532e-09 -3.1373e-12 -6.2808e-06 0.2 9.6276e-06 7.647446e-10 -3.6588e-12 -9.6284e-06 0.3 1.06154e-05 5.50653e-10 -3.9642e-12 -1.06159e-05 0.4 1.09661e-05 5.118904e-10 -4.0261e-12 -1.09666e-05 0.5 1.12451e-05 5.034539e-10 -4.0413e-12 -1.12456e-05 0.6 1.15029e-05 4.997963e-10 -4.0498e-12 -1.15034e-05 0.7 1.17472e-05 4.972375e-10 -4.057e-12 -1.17477e-05 0.8 1.19811e-05 4.950513e-10 -4.064e-12 -1.19815e-05 0.9 1.22063e-05 4.93038e-10 -4.0708e-12 -1.22067e-05 1.00000 1.24241e-05 4.911249e-10 -4.0777e-12 -1.24246e-05 1.10000 1.26355e-05 4.892784e-10 -4.0846e-12 -1.2636e-05 1.20000 1.28413e-05 4.874805e-10 -4.0914e-12 -1.28418e-05 0. -4.6767e-09 9.3553e-09 -1.8778e-12 -4.6767e-09 0.1 1.21066e-05 6.4575e-09 -2.0259e-12 -1.21131e-05 0.2 2.18157e-05 4.0049e-09 -2.2077e-12 -2.18198e-05 0.3 2.86575e-05 2.5183e-09 -2.4197e-12 -2.866e-05 0.4 3.23538e-05 1.7659e-09 -2.6138e-12 -3.23556e-05 0.5 3.39503e-05 1.4822e-09 -2.7199e-12 -3.39518e-05 0.6 3.4838e-05 1.3939e-09 -2.7591e-12 -3.48394e-05 0.7 3.55275e-05 1.364e-09 -2.7741e-12 -3.55289e-05 0.8 3.61394e-05 1.3511e-09 -2.7818e-12 -3.61407e-05 0.9 3.67074e-05 1.3439e-09 -2.787e-12 -3.67088e-05 1.00000 3.72444e-05 1.3386e-09 -2.7914e-12 -3.72458e-05 1.10000 3.77569e-05 1.3343e-09 -2.7954e-12 -3.77582e-05 1.20000 3.82488e-05 1.3303e-09 -2.7993e-12 -3.82501e-05 0. -1.35197e-08 2.7041e-08 -1.6749e-12 -1.35197e-08 0.1 1.60316e-05 1.95512e-08 -1.7248e-12 -1.60512e-05 0.2 3.04722e-05 1.26737e-08 -1.7977e-12 -3.04849e-05 0.3 4.29107e-05 8.231e-09 -1.8899e-12 -4.29189e-05 0.4 5.2827e-05 5.5303e-09 -1.9974e-12 -5.28325e-05 0.5 5.96959e-05 3.9754e-09 -2.1071e-12 -5.96999e-05 0.6 6.37048e-05 3.1784e-09 -2.1939e-12 -6.3708e-05 0.7 6.59595e-05 2.8215e-09 -2.2448e-12 -6.59623e-05 0.8 6.74446e-05 2.6704e-09 -2.2699e-12 -6.74473e-05 0.9 6.8611e-05 2.6035e-09 -2.2822e-12 -6.86136e-05 1.00000 6.96255e-05 2.5705e-09 -2.2891e-12 -6.9628e-05 1.10000 7.05525e-05 2.5518e-09 -2.2935e-12 -7.0555e-05 1.20000 7.14205e-05 2.5394e-09 -2.2969e-12 -7.1423e-05 0. -1.09059e-11 2.44712e-11 -2.6593e-12 -1.09059e-11 0.1 2.041985e-07 1.14969e-11 -2.8172e-12 -2.042071e-07 0.2 2.229664e-07 1.09587e-11 -2.8186e-12 -2.229745e-07 0.3 2.409188e-07 1.07809e-11 -2.8195e-12 -2.409268e-07 0.4 2.582816e-07 1.06646e-11 -2.8205e-12 -2.582894e-07 0.5 2.752361e-07 1.05751e-11 -2.8217e-12 -2.752439e-07 0.6 2.918747e-07 1.05e-11 -2.8229e-12 -2.918824e-07 0.7 3.082515e-07 1.04333e-11 -2.8241e-12 -3.082591e-07 0.8 3.244012e-07 1.03723e-11 -2.8253e-12 -3.244088e-07 0.9 3.403477e-07 1.03152e-11 -2.8266e-12 -3.403552e-07 1.00000 3.56108e-07 1.02609e-11 -2.8278e-12 -3.561154e-07 1.10000 3.716946e-07 1.0209e-11 -2.829e-12 -3.71702e-07 1.20000 3.871171e-07 1.01588e-11 -2.8302e-12 -3.871244e-07 0. -4.565869e-10 9.141961e-10 -1.0223e-12 -4.565869e-10 0.1 8.0726e-06 5.369986e-10 -1.2122e-12 -8.0732e-06 0.2 1.16177e-05 2.976335e-10 -1.4253e-12 -1.1618e-05 0.3 1.23487e-05 2.522029e-10 -1.4823e-12 -1.23489e-05 0.4 1.27796e-05 2.486061e-10 -1.4867e-12 -1.27798e-05 0.5 1.31677e-05 2.471481e-10 -1.4889e-12 -1.3168e-05 0.6 1.35292e-05 2.460113e-10 -1.491e-12 -1.35294e-05 0.7 1.38701e-05 2.450083e-10 -1.4931e-12 -1.38703e-05 0.8 1.41947e-05 2.440846e-10 -1.4952e-12 -1.41949e-05 0.9 1.45058e-05 2.432138e-10 -1.4973e-12 -1.45061e-05 1.00000 1.48058e-05 2.423805e-10 -1.4995e-12 -1.48061e-05 1.10000 1.50963e-05 2.415752e-10 -1.5016e-12 -1.50966e-05 1.20000 1.53786e-05 2.407915e-10 -1.5038e-12 -1.53789e-05 0. -2.0949e-09 4.1905e-09 -6.798515e-13 -2.0949e-09 0.1 1.70577e-05 2.8656e-09 -7.375022e-13 -1.70605e-05 0.2 3.04406e-05 1.7554e-09 -8.09122e-13 -3.04424e-05 0.3 3.93757e-05 1.0894e-09 -8.936101e-13 -3.93768e-05 0.4 4.34017e-05 8.073924e-10 -9.564253e-13 -4.34025e-05 0.5 4.50326e-05 7.489317e-10 -9.734977e-13 -4.50334e-05 0.6 4.61784e-05 7.381777e-10 -9.77126e-13 -4.61792e-05 0.7 4.71813e-05 7.344729e-10 -9.786953e-13 -4.71821e-05 0.8 4.81028e-05 7.320927e-10 -9.799104e-13 -4.81035e-05 0.9 4.89637e-05 7.300699e-10 -9.810518e-13 -4.89644e-05 1.00000 4.97759e-05 7.281877e-10 -9.821763e-13 -4.97766e-05 1.10000 5.05474e-05 7.263812e-10 -9.832973e-13 -5.05481e-05 1.20000 5.12845e-05 7.246247e-10 -9.844185e-13 -5.12852e-05 0. -6.2232e-09 1.2447e-08 -5.880356e-13 -6.2232e-09 0.1 2.28903e-05 8.9643e-09 -6.112342e-13 -2.28992e-05 0.2 4.34054e-05 5.7845e-09 -6.41383e-13 -4.34112e-05 0.3 6.09071e-05 3.7324e-09 -6.7787e-13 -6.09108e-05 0.4 7.45694e-05 2.4857e-09 -7.199578e-13 -7.45719e-05 0.5 8.33179e-05 1.8098e-09 -7.599691e-13 -8.33197e-05 0.6 8.77405e-05 1.5458e-09 -7.826666e-13 -8.7742e-05 0.7 9.02466e-05 1.4706e-09 -7.904235e-13 -9.02481e-05 0.8 9.21356e-05 1.4486e-09 -7.930127e-13 -9.21371e-05 0.9 9.37772e-05 1.44e-09 -7.942342e-13 -9.37786e-05 1.00000 9.52779e-05 1.4351e-09 -7.950785e-13 -9.52794e-05 1.10000 9.66781e-05 1.4313e-09 -7.958071e-13 -9.66795e-05 1.20000 9.79982e-05 1.428e-09 -7.964967e-13 -9.79996e-05 0. -3.760223e-10 7.676542e-10 -1.56096e-11 -3.760223e-10 0.1 1.2219e-06 3.921157e-10 -1.88103e-11 -1.2222e-06 0.2 1.514e-06 2.628216e-10 -2.02794e-11 -1.5143e-06 0.3 1.5943e-06 2.261974e-10 -2.06513e-11 -1.5945e-06 0.4 1.6464e-06 2.123764e-10 -2.07806e-11 -1.6466e-06 0.5 1.6934e-06 2.055786e-10 -2.08527e-11 -1.6936e-06 0.6 1.7385e-06 2.014982e-10 -2.09067e-11 -1.7386e-06 0.7 1.7824e-06 1.98659e-10 -2.09533e-11 -1.7825e-06 0.8 1.8253e-06 1.964619e-10 -2.09966e-11 -1.8255e-06 0.9 1.8674e-06 1.946305e-10 -2.10381e-11 -1.8676e-06 1.00000 1.9088e-06 1.930243e-10 -2.10786e-11 -1.909e-06 1.10000 1.9495e-06 1.915657e-10 -2.11185e-11 -1.9497e-06 1.20000 1.9896e-06 1.902092e-10 -2.11579e-11 -1.9898e-06 0. -3.3671e-09 6.7421e-09 -7.92e-12 -3.3671e-09 0.1 4.9546e-06 4.3554e-09 -8.9621e-12 -4.959e-06 0.2 7.955e-06 2.7142e-09 -1.00911e-11 -7.9577e-06 0.3 9.39e-06 1.9209e-09 -1.10071e-11 -9.3919e-06 0.4 1.00442e-05 1.5608e-09 -1.15801e-11 -1.00457e-05 0.5 1.04032e-05 1.3888e-09 -1.18997e-11 -1.04046e-05 0.6 1.06549e-05 1.2984e-09 -1.20818e-11 -1.06562e-05 0.7 1.08624e-05 1.2459e-09 -1.21949e-11 -1.08637e-05 0.8 1.10483e-05 1.2125e-09 -1.22725e-11 -1.10495e-05 0.9 1.12214e-05 1.1896e-09 -1.23308e-11 -1.12225e-05 1.00000 1.13858e-05 1.1729e-09 -1.23779e-11 -1.1387e-05 1.10000 1.15439e-05 1.1599e-09 -1.24183e-11 -1.1545e-05 1.20000 1.16968e-05 1.1493e-09 -1.24544e-11 -1.16979e-05 0. -1.26647e-08 2.53353e-08 -5.97e-12 -1.26647e-08 0.1 8.4584e-06 1.77833e-08 -6.3692e-12 -8.4762e-06 0.2 1.52154e-05 1.14773e-08 -6.8323e-12 -1.52268e-05 0.3 1.99953e-05 7.7939e-09 -7.3115e-12 -2.00031e-05 0.4 2.30475e-05 5.7745e-09 -7.7472e-12 -2.30533e-05 0.5 2.49158e-05 4.6578e-09 -8.0999e-12 -2.49205e-05 0.6 2.60949e-05 4.0176e-09 -8.3632e-12 -2.6099e-05 0.7 2.69017e-05 3.633e-09 -8.5524e-12 -2.69053e-05 0.8 2.75082e-05 3.3902e-09 -8.6877e-12 -2.75116e-05 0.9 2.80025e-05 3.2292e-09 -8.7861e-12 -2.80057e-05 1.00000 2.84296e-05 3.1177e-09 -8.8598e-12 -2.84327e-05 1.10000 2.88136e-05 3.0372e-09 -8.917e-12 -2.88167e-05 1.20000 2.9168e-05 2.9769e-09 -8.9628e-12 -2.9171e-05 0. -3.49658e-08 6.99373e-08 -5.6734e-12 -3.49658e-08 0.1 1.09263e-05 5.09555e-08 -5.7504e-12 -1.09773e-05 0.2 2.06719e-05 3.36225e-08 -5.9056e-12 -2.07056e-05 0.3 2.87959e-05 2.27507e-08 -6.1134e-12 -2.88187e-05 0.4 3.51198e-05 1.63163e-08 -6.3452e-12 -3.51361e-05 0.5 3.97719e-05 1.24851e-08 -6.5745e-12 -3.97844e-05 0.6 4.30879e-05 1.01447e-08 -6.7823e-12 -4.30981e-05 0.7 4.54474e-05 8.6677e-09 -6.9592e-12 -4.54561e-05 0.8 4.71673e-05 7.703e-09 -7.1039e-12 -4.7175e-05 0.9 4.84729e-05 7.0511e-09 -7.2196e-12 -4.848e-05 1.00000 4.9511e-05 6.5962e-09 -7.3115e-12 -4.95176e-05 1.10000 5.03735e-05 6.2691e-09 -7.3847e-12 -5.03797e-05 1.20000 5.11174e-05 6.0271e-09 -7.4435e-12 -5.11234e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_ig_lt.standard0000644000175000017500000002031114163340332024620 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -1.386172e-10 2.790085e-10 -1.7741e-12 -1.386172e-10 0.1 1.8013e-06 1.274563e-10 -2.4935e-12 -1.8014e-06 0.2 2.0689e-06 8.79034e-11 -2.7435e-12 -2.069e-06 0.3 2.1592e-06 8.39066e-11 -2.7606e-12 -2.1593e-06 0.4 2.2431e-06 8.26221e-11 -2.7678e-12 -2.2432e-06 0.5 2.3236e-06 8.17583e-11 -2.7746e-12 -2.3236e-06 0.6 2.4014e-06 8.10612e-11 -2.7814e-12 -2.4014e-06 0.7 2.477e-06 8.04556e-11 -2.7884e-12 -2.4771e-06 0.8 2.5509e-06 7.99074e-11 -2.7954e-12 -2.5509e-06 0.9 2.6231e-06 7.93983e-11 -2.8024e-12 -2.6232e-06 1.00000 2.6941e-06 7.89172e-11 -2.8094e-12 -2.6941e-06 1.10000 2.7638e-06 7.84571e-11 -2.8165e-12 -2.7638e-06 1.20000 2.8323e-06 7.80133e-11 -2.8235e-12 -2.8324e-06 0. -1.3588e-09 2.7186e-09 -9.554594e-13 -1.3588e-09 0.1 8.4554e-06 1.7262e-09 -1.1321e-12 -8.4571e-06 0.2 1.3752e-05 9.994612e-10 -1.367e-12 -1.3753e-05 0.3 1.5939e-05 6.634859e-10 -1.5793e-12 -1.59397e-05 0.4 1.66371e-05 5.781396e-10 -1.6538e-12 -1.66377e-05 0.5 1.70755e-05 5.601345e-10 -1.6713e-12 -1.70761e-05 0.6 1.74576e-05 5.542641e-10 -1.6782e-12 -1.74582e-05 0.7 1.78127e-05 5.510393e-10 -1.6828e-12 -1.78132e-05 0.8 1.81488e-05 5.485943e-10 -1.6869e-12 -1.81493e-05 0.9 1.84698e-05 5.464543e-10 -1.6909e-12 -1.84704e-05 1.00000 1.87783e-05 5.444657e-10 -1.6948e-12 -1.87788e-05 1.10000 1.90759e-05 5.425672e-10 -1.6987e-12 -1.90765e-05 1.20000 1.93643e-05 5.407296e-10 -1.7026e-12 -1.93648e-05 0. -5.1786e-09 1.03581e-08 -8.248427e-13 -5.1786e-09 0.1 1.42536e-05 7.2277e-09 -8.936168e-13 -1.42609e-05 0.2 2.60468e-05 4.5388e-09 -9.791655e-13 -2.60514e-05 0.3 3.48782e-05 2.877e-09 -1.0826e-12 -3.48811e-05 0.4 4.02646e-05 1.9806e-09 -1.1888e-12 -4.02665e-05 0.5 4.28354e-05 1.5978e-09 -1.2604e-12 -4.2837e-05 0.6 4.41683e-05 1.4663e-09 -1.2916e-12 -4.41697e-05 0.7 4.51126e-05 1.4211e-09 -1.3038e-12 -4.5114e-05 0.8 4.59135e-05 1.4026e-09 -1.3096e-12 -4.59149e-05 0.9 4.66414e-05 1.3931e-09 -1.3131e-12 -4.66427e-05 1.00000 4.73215e-05 1.3868e-09 -1.3159e-12 -4.73229e-05 1.10000 4.79656e-05 1.3818e-09 -1.3183e-12 -4.7967e-05 1.20000 4.85804e-05 1.3776e-09 -1.3206e-12 -4.85818e-05 0. -1.43794e-08 2.87597e-08 -8.43911e-13 -1.43794e-08 0.1 1.80159e-05 2.08878e-08 -8.727701e-13 -1.80368e-05 0.2 3.44254e-05 1.36106e-08 -9.126738e-13 -3.4439e-05 0.3 4.87976e-05 8.8884e-09 -9.624049e-13 -4.88065e-05 0.4 6.05907e-05 5.993e-09 -1.0208e-12 -6.05967e-05 0.5 6.91872e-05 4.2881e-09 -1.0827e-12 -6.91915e-05 0.6 7.45327e-05 3.3743e-09 -1.1357e-12 -7.45361e-05 0.7 7.76146e-05 2.9429e-09 -1.1697e-12 -7.76176e-05 0.8 7.95828e-05 2.7535e-09 -1.1876e-12 -7.95856e-05 0.9 8.10652e-05 2.6688e-09 -1.1965e-12 -8.10679e-05 1.00000 8.23173e-05 2.6273e-09 -1.2014e-12 -8.23199e-05 1.10000 8.34414e-05 2.6043e-09 -1.2045e-12 -8.3444e-05 1.20000 8.44825e-05 2.5897e-09 -1.2067e-12 -8.44851e-05 0. -4.0056e-11 8.09421e-11 -8.300558e-13 -4.0056e-11 0.1 1.2753e-06 3.32363e-11 -1.1195e-12 -1.2753e-06 0.2 1.3771e-06 2.92409e-11 -1.1372e-12 -1.3771e-06 0.3 1.4592e-06 2.86298e-11 -1.1389e-12 -1.4593e-06 0.4 1.5369e-06 2.82489e-11 -1.1408e-12 -1.537e-06 0.5 1.6115e-06 2.79645e-11 -1.1428e-12 -1.6115e-06 0.6 1.6837e-06 2.77304e-11 -1.1448e-12 -1.6837e-06 0.7 1.7541e-06 2.7526e-11 -1.1469e-12 -1.7541e-06 0.8 1.8229e-06 2.73406e-11 -1.149e-12 -1.8229e-06 0.9 1.8904e-06 2.71683e-11 -1.151e-12 -1.8904e-06 1.00000 1.9568e-06 2.70054e-11 -1.1531e-12 -1.9568e-06 1.10000 2.0221e-06 2.68496e-11 -1.1552e-12 -2.0222e-06 1.20000 2.0866e-06 2.66994e-11 -1.1573e-12 -2.0866e-06 0. -5.758125e-10 1.152e-09 -3.626064e-13 -5.758125e-10 0.1 1.13006e-05 7.119453e-10 -4.38635e-13 -1.13013e-05 0.2 1.7663e-05 4.000205e-10 -5.417629e-13 -1.76634e-05 0.3 1.95583e-05 2.964467e-10 -6.039136e-13 -1.95586e-05 0.4 2.02809e-05 2.864216e-10 -6.109565e-13 -2.02812e-05 0.5 2.08799e-05 2.843539e-10 -6.125664e-13 -2.08802e-05 0.6 2.14262e-05 2.830574e-10 -6.138034e-13 -2.14265e-05 0.7 2.19347e-05 2.819626e-10 -6.150086e-13 -2.1935e-05 0.8 2.24135e-05 2.809675e-10 -6.162156e-13 -2.24138e-05 0.9 2.28684e-05 2.800355e-10 -6.17428e-13 -2.28687e-05 1.00000 2.33033e-05 2.791477e-10 -6.186451e-13 -2.33036e-05 1.10000 2.37216e-05 2.782925e-10 -6.198663e-13 -2.37219e-05 1.20000 2.41256e-05 2.774624e-10 -6.21091e-13 -2.41258e-05 0. -2.3334e-09 4.6672e-09 -2.984457e-13 -2.3334e-09 0.1 2.0215e-05 3.2315e-09 -3.250782e-13 -2.02182e-05 0.2 3.66602e-05 2.0092e-09 -3.586264e-13 -3.66622e-05 0.3 4.85082e-05 1.2579e-09 -3.998981e-13 -4.85094e-05 0.4 5.48075e-05 8.951721e-10 -4.373795e-13 -5.48084e-05 0.5 5.73729e-05 8.002104e-10 -4.514236e-13 -5.73737e-05 0.6 5.89416e-05 7.821921e-10 -4.545317e-13 -5.89424e-05 0.7 6.02473e-05 7.769765e-10 -4.556254e-13 -6.02481e-05 0.8 6.1426e-05 7.741431e-10 -4.563568e-13 -6.14268e-05 0.9 6.25169e-05 7.719039e-10 -4.570107e-13 -6.25177e-05 1.00000 6.35389e-05 7.698705e-10 -4.576458e-13 -6.35396e-05 1.10000 6.45042e-05 7.679349e-10 -4.582762e-13 -6.45049e-05 1.20000 6.54217e-05 7.660586e-10 -4.58906e-13 -6.54225e-05 0. -6.6365e-09 1.32732e-08 -2.969879e-13 -6.6365e-09 0.1 2.57768e-05 9.6064e-09 -3.096607e-13 -2.57864e-05 0.2 4.91594e-05 6.2345e-09 -3.257406e-13 -4.91656e-05 0.3 6.94657e-05 4.0486e-09 -3.451441e-13 -6.94698e-05 0.4 8.58325e-05 2.7083e-09 -3.678109e-13 -8.58352e-05 0.5 9.70164e-05 1.9532e-09 -3.906699e-13 -9.70184e-05 0.6 0.0001030396 1.6309e-09 -4.054286e-13 -0.0001030413 0.7 0.0001063513 1.532e-09 -4.110425e-13 -0.0001063528 0.8 0.0001087128 1.5028e-09 -4.129276e-13 -0.0001087143 0.9 0.0001107048 1.4919e-09 -4.137588e-13 -0.0001107063 1.00000 0.0001125007 1.4861e-09 -4.14293e-13 -0.0001125022 1.10000 0.0001141634 1.4819e-09 -4.147355e-13 -0.0001141649 1.20000 0.0001157228 1.4783e-09 -4.151468e-13 -0.0001157243 0. -5.91582e-10 1.1871e-09 -3.891e-12 -5.91582e-10 0.1 2.3135e-06 6.446492e-10 -5.2057e-12 -2.3141e-06 0.2 3.1356e-06 3.998869e-10 -6.3049e-12 -3.136e-06 0.3 3.3791e-06 3.188626e-10 -6.7774e-12 -3.3795e-06 0.4 3.5001e-06 2.887942e-10 -6.9532e-12 -3.5004e-06 0.5 3.5946e-06 2.748829e-10 -7.0367e-12 -3.5949e-06 0.6 3.6806e-06 2.671421e-10 -7.0885e-12 -3.6809e-06 0.7 3.7625e-06 2.621706e-10 -7.1275e-12 -3.7627e-06 0.8 3.8416e-06 2.586037e-10 -7.1605e-12 -3.8418e-06 0.9 3.9186e-06 2.558196e-10 -7.1903e-12 -3.9188e-06 1.00000 3.9938e-06 2.535056e-10 -7.2185e-12 -3.9941e-06 1.10000 4.0675e-06 2.514916e-10 -7.2456e-12 -4.0678e-06 1.20000 4.1399e-06 2.496789e-10 -7.272e-12 -4.1401e-06 0. -3.9949e-09 7.9927e-09 -2.7946e-12 -3.9949e-09 0.1 6.3552e-06 5.2818e-09 -3.2069e-12 -6.3604e-06 0.2 1.05848e-05 3.3217e-09 -3.6922e-12 -1.05881e-05 0.3 1.28962e-05 2.3104e-09 -4.1502e-12 -1.28985e-05 0.4 1.40565e-05 1.8203e-09 -4.4937e-12 -1.40584e-05 0.5 1.46926e-05 1.5754e-09 -4.7162e-12 -1.46941e-05 0.6 1.51106e-05 1.4439e-09 -4.8545e-12 -1.51121e-05 0.7 1.54335e-05 1.3674e-09 -4.9431e-12 -1.54349e-05 0.8 1.57093e-05 1.3194e-09 -5.0034e-12 -1.57106e-05 0.9 1.59585e-05 1.2871e-09 -5.0474e-12 -1.59598e-05 1.00000 1.61905e-05 1.264e-09 -5.0816e-12 -1.61918e-05 1.10000 1.64104e-05 1.2466e-09 -5.1097e-12 -1.64116e-05 1.20000 1.66209e-05 1.233e-09 -5.1339e-12 -1.66221e-05 0. -1.38817e-08 2.77661e-08 -2.6204e-12 -1.38817e-08 0.1 9.8472e-06 1.9649e-08 -2.8073e-12 -9.8669e-06 0.2 1.79349e-05 1.27582e-08 -3.0278e-12 -1.79477e-05 0.3 2.39127e-05 8.6593e-09 -3.2641e-12 -2.39214e-05 0.4 2.79358e-05 6.3655e-09 -3.4906e-12 -2.79422e-05 0.5 3.05153e-05 5.0716e-09 -3.6855e-12 -3.05203e-05 0.6 3.21867e-05 4.3172e-09 -3.8401e-12 -3.2191e-05 0.7 3.33336e-05 3.8581e-09 -3.957e-12 -3.33374e-05 0.8 3.41836e-05 3.5656e-09 -4.0438e-12 -3.41872e-05 0.9 3.48617e-05 3.371e-09 -4.1086e-12 -3.48651e-05 1.00000 3.54352e-05 3.2359e-09 -4.1579e-12 -3.54384e-05 1.10000 3.59412e-05 3.1385e-09 -4.1962e-12 -3.59443e-05 1.20000 3.6401e-05 3.0659e-09 -4.227e-12 -3.64041e-05 0. -3.70112e-08 7.40253e-08 -2.8452e-12 -3.70112e-08 0.1 1.22268e-05 5.41345e-08 -2.8991e-12 -1.22809e-05 0.2 2.32507e-05 3.58372e-08 -2.9904e-12 -2.32866e-05 0.3 3.25983e-05 2.42822e-08 -3.1079e-12 -3.26226e-05 0.4 4.00412e-05 1.73898e-08 -3.2385e-12 -4.00586e-05 0.5 4.56582e-05 1.32521e-08 -3.3694e-12 -4.56714e-05 0.6 4.97602e-05 1.07047e-08 -3.4908e-12 -4.97709e-05 0.7 5.27349e-05 9.0857e-09 -3.5967e-12 -5.2744e-05 0.8 5.49283e-05 8.0218e-09 -3.6854e-12 -5.49363e-05 0.9 5.65992e-05 7.2995e-09 -3.758e-12 -5.66065e-05 1.00000 5.7924e-05 6.7935e-09 -3.8166e-12 -5.79308e-05 1.10000 5.90171e-05 6.4287e-09 -3.8639e-12 -5.90235e-05 1.20000 5.99517e-05 6.1585e-09 -3.9024e-12 -5.99578e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_gidl_st.standard0000644000175000017500000000543514163340332025164 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.5505e-06 0. -5.539243e-13 -1.5505e-06 0.35 9.4647e-06 0. -2.961867e-13 -9.4647e-06 0.45 2.30214e-05 0. -1.510247e-13 -2.30214e-05 0.55 3.75796e-05 0. -7.30136e-14 -3.75796e-05 0.65 5.11877e-05 0. -3.32443e-14 -5.11877e-05 0.75 6.31815e-05 0. -1.41436e-14 -6.31815e-05 0.85 7.33851e-05 0. -5.5702e-15 -7.33851e-05 0.95 8.18385e-05 0. -2.0081e-15 -8.18385e-05 1.05000 8.86815e-05 0. -6.538813e-16 -8.86815e-05 1.15000 9.40957e-05 0. -1.891895e-16 -9.40957e-05 0.25 4.1269e-06 0. -4.15072e-11 -4.1269e-06 0.35 2.36523e-05 0. -2.92488e-11 -2.36523e-05 0.45 6.43923e-05 0. -2.02192e-11 -6.43923e-05 0.55 0.0001201776 0. -1.36889e-11 -0.0001201776 0.65 0.0001842588 0. -9.0597e-12 -0.0001842588 0.75 0.0002522315 0. -5.849e-12 -0.0002522315 0.85 0.0003213405 0. -3.675e-12 -0.0003213405 0.95 0.0003897885 0. -2.2411e-12 -0.0003897885 1.05000 0.0004563858 0. -1.3225e-12 -0.0004563858 1.15000 0.0005203675 0. -7.525317e-13 -0.0005203675 0.25 3.673379e-07 0. -5.503268e-13 -3.673373e-07 0.35 7.1484e-06 0. -2.941206e-13 -7.1484e-06 0.45 2.48285e-05 0. -1.498899e-13 -2.48285e-05 0.55 4.44818e-05 0. -7.24208e-14 -4.44818e-05 0.65 6.26241e-05 0. -3.29518e-14 -6.26241e-05 0.75 7.84067e-05 0. -1.40082e-14 -7.84067e-05 0.85 9.16981e-05 0. -5.5119e-15 -9.16981e-05 0.95 0.0001026272 0. -1.9851e-15 -0.0001026272 1.05000 0.0001114258 0. -6.456222e-16 -0.0001114258 1.15000 0.0001183601 0. -1.865431e-16 -0.0001183601 0.25 1.2391e-06 0. -4.13549e-11 -1.239e-06 0.35 1.76709e-05 0. -2.91356e-11 -1.76709e-05 0.45 6.36452e-05 0. -2.01366e-11 -6.36452e-05 0.55 0.0001295447 0. -1.36298e-11 -0.0001295447 0.65 0.0002054591 0. -9.0183e-12 -0.0002054591 0.75 0.0002858819 0. -5.8207e-12 -0.0002858818 0.85 0.0003675548 0. -3.656e-12 -0.0003675548 0.95 0.0004483622 0. -2.2288e-12 -0.0004483622 1.05000 0.0005269145 0. -1.3147e-12 -0.0005269145 1.15000 0.0006023385 0. -7.478114e-13 -0.0006023385 0.25 4.935e-06 0. -5.59714e-13 -4.935e-06 0.35 1.26832e-05 0. -2.99514e-13 -1.26832e-05 0.45 2.24463e-05 0. -1.528534e-13 -2.24463e-05 0.55 3.24927e-05 0. -7.39694e-14 -3.24927e-05 0.65 4.19242e-05 0. -3.37165e-14 -4.19242e-05 0.75 5.03307e-05 0. -1.43623e-14 -5.03307e-05 0.85 5.75612e-05 0. -5.6643e-15 -5.75612e-05 0.95 6.36077e-05 0. -2.0454e-15 -6.36077e-05 1.05000 6.85395e-05 0. -6.67275e-16 -6.85395e-05 1.15000 7.24642e-05 0. -1.934885e-16 -7.24642e-05 0.25 1.30181e-05 0. -4.17516e-11 -1.3018e-05 0.35 3.66262e-05 0. -2.94303e-11 -3.66261e-05 0.45 7.36338e-05 0. -2.03517e-11 -7.36338e-05 0.55 0.0001202733 0. -1.37838e-11 -0.0001202733 0.65 0.0001725728 0. -9.1262e-12 -0.0001725728 0.75 0.0002275362 0. -5.8946e-12 -0.0002275362 0.85 0.0002830886 0. -3.7054e-12 -0.0002830886 0.95 0.0003378138 0. -2.2609e-12 -0.0003378138 1.05000 0.0003907554 0. -1.335e-12 -0.0003907554 1.15000 0.0004412878 0. -7.601266e-13 -0.0004412878 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_gidl_sw.standard0000644000175000017500000001620514163340332025210 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0072574 1.62406003155054e-14 3.86070007500163e-15 1.1648200226289e-14 0 0. 1.1063600214932e-14 4.82580009375058e-15 4.82580009375058e-15 0.2 0.0006055619 1.0182300197811e-14 4.9235000956486e-15 3.74490007275199e-15 0.4 0.0007376943 1.00753001957324e-14 4.95880009633437e-15 3.61660007025951e-15 0.6 0.0008626232 9.95720019343805e-15 5.00240009718138e-15 3.46880006738821e-15 0.8 0.000988505 9.87960019193051e-15 5.04700009804782e-15 3.3601000652765e-15 1 0.0011179 9.83230019101162e-15 5.09150009891232e-15 3.28150006374954e-15 1.2 0.0012519 9.80410019046378e-15 5.13550009976711e-15 3.22210006259558e-15 -0.2 -0.009263 1.81944003534617e-14 5.06320009836254e-15 1.27153002470195e-14 0 0. 1.85535003604379e-14 9.07720017634232e-15 9.07720017634232e-15 0.2 0.007759 1.6506400320669e-14 1.19723002325853e-14 3.90200007580397e-15 0.4 0.0088047 1.63555003177375e-14 1.19024002312273e-14 3.80210007386321e-15 0.6 0.0094163 1.61663003140619e-14 1.18145002295197e-14 3.68640007161551e-15 0.8 0.0098825 1.59400003096656e-14 1.17293002278645e-14 3.53100006859657e-15 1 0.0102717 1.57517003060075e-14 1.16456002262385e-14 3.41230006629059e-15 1.2 0.0106127 1.55985003030313e-14 1.15632002246377e-14 3.32750006464318e-15 -0.2 -0.007136 1.88866003669091e-14 7.46330014498917e-15 1.11289002162006e-14 0 0. 1.93232003753909e-14 9.5280001851e-15 9.5280001851e-15 0.2 0.0090428 1.82748003550237e-14 1.25436002436839e-14 5.3526001039847e-15 0.4 0.0114389 1.77397003446283e-14 1.33488002593265e-14 3.95610007685496e-15 0.6 0.0122526 1.76205003423126e-14 1.32424002572595e-14 3.92240007620028e-15 0.8 0.0127972 1.74389003387847e-14 1.31358002551886e-14 3.82700007434694e-15 1 0.013213 1.71955003340561e-14 1.30315002531623e-14 3.66800007125806e-15 1.2 0.0135515 1.69819003299065e-14 1.2929100251173e-14 3.53710006871507e-15 -0.2 -0.004436 1.89556003682495e-14 8.8017001709902e-15 9.90840019249001e-15 0 0. 1.9251400373996e-14 9.51180018478528e-15 9.51180018478528e-15 0.2 0.0067133 1.88894003669635e-14 1.08969002116935e-14 7.71400014985951e-15 0.4 0.0108859 1.79014003477696e-14 1.33820002599715e-14 4.15780008077338e-15 0.6 0.0118893 1.77709003452344e-14 1.33237002588389e-14 4.06160007890451e-15 0.8 0.0124744 1.7666900343214e-14 1.32214002568515e-14 4.03850007845574e-15 1 0.0129015 1.75123003402106e-14 1.31204002548894e-14 3.96400007700844e-15 1.2 0.013239 1.72785003356686e-14 1.30212002529622e-14 3.80870007399143e-15 -0.2 -0.0084624 1.65792003220833e-14 3.79760007377579e-15 1.20913002348971e-14 0 0. 9.55850018569252e-15 3.99570007762427e-15 3.99570007762427e-15 0.2 0.0001574768 9.26770018004316e-15 3.92350007622164e-15 3.75550007295792e-15 0.4 0.0002071189 9.14830017772358e-15 3.94560007665098e-15 3.6278000704771e-15 0.6 0.0002606819 9.01950017522139e-15 3.97910007730178e-15 3.47980006760191e-15 0.8 0.0003203861 8.93350017355067e-15 4.01620007802252e-15 3.37070006548243e-15 1 0.0003873213 8.88030017251716e-15 4.05600007879572e-15 3.29190006395158e-15 1.2 0.0004622777 8.84860017190132e-15 4.09810007961359e-15 3.23220006279179e-15 -0.2 -0.0115421 1.8302100355554e-14 4.25030008257037e-15 1.36475002651293e-14 0 0. 1.89891003689003e-14 9.31330018092903e-15 9.31330018092903e-15 0.2 0.009195 1.68881003280843e-14 1.24884002426115e-14 3.80690007395646e-15 0.4 0.0103582 1.6785600326093e-14 1.23966002408282e-14 3.78150007346302e-15 0.6 0.0110844 1.66017003225204e-14 1.23125002391943e-14 3.6667000712328e-15 0.8 0.011645 1.63793003181999e-14 1.22305002376013e-14 3.51130006821386e-15 1 0.012117 1.61947003146137e-14 1.21498002360336e-14 3.39270006590982e-15 1.2 0.0125333 1.60449003117035e-14 1.20700002344833e-14 3.30790006426241e-15 -0.2 -0.0091354 1.89982003690771e-14 7.00910013616545e-15 1.17057002274061e-14 0 0. 1.96327003814035e-14 9.69520018834818e-15 9.69520018834818e-15 0.2 0.0113529 1.83401003562922e-14 1.35299002628447e-14 4.4389000862343e-15 0.4 0.013551 1.80757003511558e-14 1.37467002670565e-14 3.92330007621776e-15 0.6 0.0144897 1.79629003489644e-14 1.36349002648845e-14 3.90100007578454e-15 0.8 0.0151251 1.77818003454462e-14 1.35268002627845e-14 3.80680007395452e-15 1 0.0156093 1.75381003407118e-14 1.34210002607291e-14 3.64810007087146e-15 1.2 0.0160025 1.73239003365506e-14 1.33170002587087e-14 3.51740006833236e-15 -0.2 -0.0057216 1.91288003716143e-14 8.89830017286685e-15 1.00012001942928e-14 0 0. 1.94585003780193e-14 9.62440018697275e-15 9.62440018697275e-15 0.2 0.0085905 1.90255003696075e-14 1.13470002204376e-14 7.41250014400228e-15 0.4 0.0129177 1.80812003512626e-14 1.36831002658209e-14 4.05100007869858e-15 0.6 0.0140111 1.79857003494073e-14 1.3580000263818e-14 4.036300078413e-15 0.8 0.0146956 1.78842003474355e-14 1.34756002617898e-14 4.01750007804778e-15 1 0.015196 1.77304003444476e-14 1.33737002598102e-14 3.94420007662378e-15 1.2 0.0155894 1.74969003399114e-14 1.32736002578656e-14 3.78950007361843e-15 -0.2 -0.0056944 1.64365003193111e-14 4.50720008756116e-15 1.12223002180151e-14 0 0. 1.36406002649953e-14 6.27090012182447e-15 6.27090012182447e-15 0.2 0.0016617 1.19802002327388e-14 6.87610013358166e-15 3.77970007342805e-15 0.4 0.0019384 1.17813002288747e-14 6.84230013292503e-15 3.61290007018763e-15 0.6 0.0021428 1.16139002256227e-14 6.82880013266277e-15 3.46330006728136e-15 0.8 0.0023241 1.14910002232351e-14 6.81900013247238e-15 3.35490006517548e-15 1 0.0024942 1.13993002214537e-14 6.80980013229366e-15 3.27690006366018e-15 1.2 0.0026578 1.13269002200471e-14 6.80060013211493e-15 3.21810006251787e-15 -0.2 -0.006281 1.81375003523563e-14 5.8571001137856e-15 1.18613002304289e-14 0 0. 1.81199003520144e-14 8.84300017179253e-15 8.84300017179253e-15 0.2 0.0058773 1.66500003234587e-14 1.14031002215275e-14 4.63350009001478e-15 0.4 0.0073093 1.61210003131819e-14 1.15222002238412e-14 3.9227000762061e-15 0.6 0.0079297 1.58519003079541e-14 1.14141002217412e-14 3.73910007263932e-15 0.8 0.0083428 1.55976003030138e-14 1.13124002197654e-14 3.56980006935033e-15 1 0.0086656 1.53944002990663e-14 1.1217200217916e-14 3.44680006696082e-15 1.2 0.0089378 1.52307002958861e-14 1.11259002161423e-14 3.3601000652765e-15 -0.2 -0.0049245 1.85861003610713e-14 7.01440013626841e-15 1.12529002186095e-14 0 0. 1.88943003670587e-14 9.29620018059683e-15 9.29620018059683e-15 0.2 0.0061116 1.81849003532772e-14 1.17967002291739e-14 6.00360011663165e-15 0.4 0.0087004 1.75230003404185e-14 1.27412002475227e-14 4.32630008404682e-15 0.6 0.0097134 1.72618003353442e-14 1.27271002472488e-14 4.04680007861699e-15 0.8 0.0102869 1.70324003308876e-14 1.26276002453158e-14 3.89350007563884e-15 1 0.0106848 1.67696003257822e-14 1.25217002432585e-14 3.71600007219055e-15 1.2 0.0109924 1.65469003214558e-14 1.24176002412361e-14 3.57790006950769e-15 -0.2 -0.0032308 1.86168003616677e-14 7.85330015256568e-15 1.04907002038023e-14 0 0. 1.89312003677755e-14 9.33820018141276e-15 9.33820018141276e-15 0.2 0.004675 1.85705003607682e-14 1.11364002163463e-14 7.13150013854331e-15 0.4 0.0077938 1.79079003478959e-14 1.26986002466951e-14 4.84330009409056e-15 0.6 0.0091279 1.75934003417861e-14 1.28841002502988e-14 4.30700008367188e-15 0.8 0.0098385 1.74113003382485e-14 1.28298002492439e-14 4.15330008068596e-15 1 0.0102984 1.72223003345768e-14 1.27375002474508e-14 4.03410007837027e-15 1.2 0.0106345 1.69716003297065e-14 1.2639400245545e-14 3.86050007499775e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2g_sw.standard0000644000175000017500000004604714163340332025155 0ustar carstencarstenFreq N(g) 100.00000 4.510734244e-29 125.89254 4.510734244e-29 158.48932 4.510734244e-29 199.52623 4.510734244e-29 251.18864 4.510734244e-29 316.22777 4.510734244e-29 398.10717 4.510734244e-29 501.18723 4.510734244e-29 630.95734 4.510734244e-29 794.32823 4.510734244e-29 1000 4.510734244e-29 1258.93 4.510734244e-29 1584.89 4.510734244e-29 1995.26 4.510734244e-29 2511.89 4.510734244e-29 3162.28 4.510734244e-29 3981.07 4.510734244e-29 5011.87 4.510734244e-29 6309.57 4.510734244e-29 7943.28 4.510734244e-29 10000 4.510734244e-29 12589.25 4.510734244e-29 15848.93 4.510734244e-29 19952.62 4.510734244e-29 25118.86 4.510734244e-29 31622.78 4.510734244e-29 39810.72 4.510734244e-29 50118.72 4.510734244e-29 63095.73 4.510734244e-29 79432.82 4.510734244e-29 100000 4.510734244e-29 125892.54 4.510734244e-29 158489.32 4.510734244e-29 199526.23 4.510734244e-29 251188.64 4.510734244e-29 316227.77 4.510734244e-29 398107.17 4.510734244e-29 501187.23 4.510734244e-29 630957.34 4.510734244e-29 794328.23 4.510734244e-29 1000000 4.510734244e-29 1258930 4.510734244e-29 1584890 4.510734244e-29 1995260 4.510734244e-29 2511890 4.510734244e-29 3162280 4.510734244e-29 3981070 4.510734244e-29 5011870 4.510734244e-29 6309570 4.510734244e-29 7943280 4.510734244e-29 10000000 4.510734244e-29 12589250 4.510734244e-29 15848930 4.510734244e-29 19952620 4.510734244e-29 25118860 4.510734244e-29 31622780 4.510734244e-29 39810720 4.510734244e-29 50118720 4.510734244e-29 63095730 4.510734244e-29 79432820 4.510734244e-29 100000000 4.510734244e-29 100.00000 3.49871067001e-27 125.89254 3.49871067001e-27 158.48932 3.49871067001e-27 199.52623 3.49871067001e-27 251.18864 3.49871067001e-27 316.22777 3.49871067001e-27 398.10717 3.49871067001e-27 501.18723 3.49871067001e-27 630.95734 3.49871067001e-27 794.32823 3.49871067001e-27 1000 3.49871067001e-27 1258.93 3.49871067001e-27 1584.89 3.49871067001e-27 1995.26 3.49871067001e-27 2511.89 3.49871067001e-27 3162.28 3.49871067001e-27 3981.07 3.49871067001e-27 5011.87 3.49871067001e-27 6309.57 3.49871067001e-27 7943.28 3.49871067001e-27 10000 3.49871067001e-27 12589.25 3.49871067001e-27 15848.93 3.49871067001e-27 19952.62 3.49871067001e-27 25118.86 3.49871067001e-27 31622.78 3.49871067001e-27 39810.72 3.49871067001e-27 50118.72 3.49871067001e-27 63095.73 3.49871067001e-27 79432.82 3.49871067001e-27 100000 3.49871067001e-27 125892.54 3.49871067001e-27 158489.32 3.49871067001e-27 199526.23 3.49871067001e-27 251188.64 3.49871067001e-27 316227.77 3.49871067001e-27 398107.17 3.49871067001e-27 501187.23 3.49871067001e-27 630957.34 3.49871067001e-27 794328.23 3.49871067001e-27 1000000 3.49871067001e-27 1258930 3.49871067001e-27 1584890 3.49871067001e-27 1995260 3.49871067001e-27 2511890 3.49871067001e-27 3162280 3.49871067001e-27 3981070 3.49871067001e-27 5011870 3.49871067001e-27 6309570 3.49871067001e-27 7943280 3.49871067001e-27 10000000 3.49871067001e-27 12589250 3.49871067001e-27 15848930 3.49871067001e-27 19952620 3.49871067001e-27 25118860 3.49871067001e-27 31622780 3.49871067001e-27 39810720 3.49871067001e-27 50118720 3.49871067001e-27 63095730 3.49871067001e-27 79432820 3.49871067001e-27 100000000 3.49871067001e-27 100.00000 1.968414612004e-26 125.89254 1.968414612004e-26 158.48932 1.968414612004e-26 199.52623 1.968414612004e-26 251.18864 1.968414612004e-26 316.22777 1.968414612004e-26 398.10717 1.968414612004e-26 501.18723 1.968414612004e-26 630.95734 1.968414612004e-26 794.32823 1.968414612004e-26 1000 1.968414612004e-26 1258.93 1.968414612004e-26 1584.89 1.968414612004e-26 1995.26 1.968414612004e-26 2511.89 1.968414612004e-26 3162.28 1.968414612004e-26 3981.07 1.968414612004e-26 5011.87 1.968414612004e-26 6309.57 1.968414612004e-26 7943.28 1.968414612004e-26 10000 1.968414612004e-26 12589.25 1.968414612004e-26 15848.93 1.968414612004e-26 19952.62 1.968414612004e-26 25118.86 1.968414612004e-26 31622.78 1.968414612004e-26 39810.72 1.968414612004e-26 50118.72 1.968414612004e-26 63095.73 1.968414612004e-26 79432.82 1.968414612004e-26 100000 1.968414612004e-26 125892.54 1.968414612004e-26 158489.32 1.968414612004e-26 199526.23 1.968414612004e-26 251188.64 1.968414612004e-26 316227.77 1.968414612004e-26 398107.17 1.968414612004e-26 501187.23 1.968414612004e-26 630957.34 1.968414612004e-26 794328.23 1.968414612004e-26 1000000 1.968414612004e-26 1258930 1.968414612004e-26 1584890 1.968414612004e-26 1995260 1.968414612004e-26 2511890 1.968414612004e-26 3162280 1.968414612004e-26 3981070 1.968414612004e-26 5011870 1.968414612004e-26 6309570 1.968414612004e-26 7943280 1.968414612004e-26 10000000 1.968414612004e-26 12589250 1.968414612004e-26 15848930 1.968414612004e-26 19952620 1.968414612004e-26 25118860 1.968414612004e-26 31622780 1.968414612004e-26 39810720 1.968414612004e-26 50118720 1.968414612004e-26 63095730 1.968414612004e-26 79432820 1.968414612004e-26 100000000 1.968414612004e-26 100.00000 6.295387101721e-26 125.89254 6.295387101721e-26 158.48932 6.295387101721e-26 199.52623 6.295387101721e-26 251.18864 6.295387101721e-26 316.22777 6.295387101721e-26 398.10717 6.295387101721e-26 501.18723 6.295387101721e-26 630.95734 6.295387101721e-26 794.32823 6.295387101721e-26 1000 6.295387101721e-26 1258.93 6.295387101721e-26 1584.89 6.295387101721e-26 1995.26 6.295387101721e-26 2511.89 6.295387101721e-26 3162.28 6.295387101721e-26 3981.07 6.295387101721e-26 5011.87 6.295387101721e-26 6309.57 6.295387101721e-26 7943.28 6.295387101721e-26 10000 6.295387101721e-26 12589.25 6.295387101721e-26 15848.93 6.295387101721e-26 19952.62 6.295387101721e-26 25118.86 6.295387101721e-26 31622.78 6.295387101721e-26 39810.72 6.295387101721e-26 50118.72 6.295387101721e-26 63095.73 6.295387101721e-26 79432.82 6.295387101721e-26 100000 6.295387101721e-26 125892.54 6.295387101721e-26 158489.32 6.295387101721e-26 199526.23 6.295387101721e-26 251188.64 6.295387101721e-26 316227.77 6.295387101721e-26 398107.17 6.295387101721e-26 501187.23 6.295387101721e-26 630957.34 6.295387101721e-26 794328.23 6.295387101721e-26 1000000 6.295387101721e-26 1258930 6.295387101721e-26 1584890 6.295387101721e-26 1995260 6.295387101721e-26 2511890 6.295387101721e-26 3162280 6.295387101721e-26 3981070 6.295387101721e-26 5011870 6.295387101721e-26 6309570 6.295387101721e-26 7943280 6.295387101721e-26 10000000 6.295387101721e-26 12589250 6.295387101721e-26 15848930 6.295387101721e-26 19952620 6.295387101721e-26 25118860 6.295387101721e-26 31622780 6.295387101721e-26 39810720 6.295387101721e-26 50118720 6.295387101721e-26 63095730 6.295387101721e-26 79432820 6.295387101721e-26 100000000 6.295387101721e-26 100.00000 3.90339049e-30 125.89254 3.90339049e-30 158.48932 3.90339049e-30 199.52623 3.90339049e-30 251.18864 3.90339049e-30 316.22777 3.90339049e-30 398.10717 3.90339049e-30 501.18723 3.90339049e-30 630.95734 3.90339049e-30 794.32823 3.90339049e-30 1000 3.90339049e-30 1258.93 3.90339049e-30 1584.89 3.90339049e-30 1995.26 3.90339049e-30 2511.89 3.90339049e-30 3162.28 3.90339049e-30 3981.07 3.90339049e-30 5011.87 3.90339049e-30 6309.57 3.90339049e-30 7943.28 3.90339049e-30 10000 3.90339049e-30 12589.25 3.90339049e-30 15848.93 3.90339049e-30 19952.62 3.90339049e-30 25118.86 3.90339049e-30 31622.78 3.90339049e-30 39810.72 3.90339049e-30 50118.72 3.90339049e-30 63095.73 3.90339049e-30 79432.82 3.90339049e-30 100000 3.90339049e-30 125892.54 3.90339049e-30 158489.32 3.90339049e-30 199526.23 3.90339049e-30 251188.64 3.90339049e-30 316227.77 3.90339049e-30 398107.17 3.90339049e-30 501187.23 3.90339049e-30 630957.34 3.90339049e-30 794328.23 3.90339049e-30 1000000 3.90339049e-30 1258930 3.90339049e-30 1584890 3.90339049e-30 1995260 3.90339049e-30 2511890 3.90339049e-30 3162280 3.90339049e-30 3981070 3.90339049e-30 5011870 3.90339049e-30 6309570 3.90339049e-30 7943280 3.90339049e-30 10000000 3.90339049e-30 12589250 3.90339049e-30 15848930 3.90339049e-30 19952620 3.90339049e-30 25118860 3.90339049e-30 31622780 3.90339049e-30 39810720 3.90339049e-30 50118720 3.90339049e-30 63095730 3.90339049e-30 79432820 3.90339049e-30 100000000 3.90339049e-30 100.00000 1.43938289664e-27 125.89254 1.43938289664e-27 158.48932 1.43938289664e-27 199.52623 1.43938289664e-27 251.18864 1.43938289664e-27 316.22777 1.43938289664e-27 398.10717 1.43938289664e-27 501.18723 1.43938289664e-27 630.95734 1.43938289664e-27 794.32823 1.43938289664e-27 1000 1.43938289664e-27 1258.93 1.43938289664e-27 1584.89 1.43938289664e-27 1995.26 1.43938289664e-27 2511.89 1.43938289664e-27 3162.28 1.43938289664e-27 3981.07 1.43938289664e-27 5011.87 1.43938289664e-27 6309.57 1.43938289664e-27 7943.28 1.43938289664e-27 10000 1.43938289664e-27 12589.25 1.43938289664e-27 15848.93 1.43938289664e-27 19952.62 1.43938289664e-27 25118.86 1.43938289664e-27 31622.78 1.43938289664e-27 39810.72 1.43938289664e-27 50118.72 1.43938289664e-27 63095.73 1.43938289664e-27 79432.82 1.43938289664e-27 100000 1.43938289664e-27 125892.54 1.43938289664e-27 158489.32 1.43938289664e-27 199526.23 1.43938289664e-27 251188.64 1.43938289664e-27 316227.77 1.43938289664e-27 398107.17 1.43938289664e-27 501187.23 1.43938289664e-27 630957.34 1.43938289664e-27 794328.23 1.43938289664e-27 1000000 1.43938289664e-27 1258930 1.43938289664e-27 1584890 1.43938289664e-27 1995260 1.43938289664e-27 2511890 1.43938289664e-27 3162280 1.43938289664e-27 3981070 1.43938289664e-27 5011870 1.43938289664e-27 6309570 1.43938289664e-27 7943280 1.43938289664e-27 10000000 1.43938289664e-27 12589250 1.43938289664e-27 15848930 1.43938289664e-27 19952620 1.43938289664e-27 25118860 1.43938289664e-27 31622780 1.43938289664e-27 39810720 1.43938289664e-27 50118720 1.43938289664e-27 63095730 1.43938289664e-27 79432820 1.43938289664e-27 100000000 1.43938289664e-27 100.00000 9.15175395904e-27 125.89254 9.15175395904e-27 158.48932 9.15175395904e-27 199.52623 9.15175395904e-27 251.18864 9.15175395904e-27 316.22777 9.15175395904e-27 398.10717 9.15175395904e-27 501.18723 9.15175395904e-27 630.95734 9.15175395904e-27 794.32823 9.15175395904e-27 1000 9.15175395904e-27 1258.93 9.15175395904e-27 1584.89 9.15175395904e-27 1995.26 9.15175395904e-27 2511.89 9.15175395904e-27 3162.28 9.15175395904e-27 3981.07 9.15175395904e-27 5011.87 9.15175395904e-27 6309.57 9.15175395904e-27 7943.28 9.15175395904e-27 10000 9.15175395904e-27 12589.25 9.15175395904e-27 15848.93 9.15175395904e-27 19952.62 9.15175395904e-27 25118.86 9.15175395904e-27 31622.78 9.15175395904e-27 39810.72 9.15175395904e-27 50118.72 9.15175395904e-27 63095.73 9.15175395904e-27 79432.82 9.15175395904e-27 100000 9.15175395904e-27 125892.54 9.15175395904e-27 158489.32 9.15175395904e-27 199526.23 9.15175395904e-27 251188.64 9.15175395904e-27 316227.77 9.15175395904e-27 398107.17 9.15175395904e-27 501187.23 9.15175395904e-27 630957.34 9.15175395904e-27 794328.23 9.15175395904e-27 1000000 9.15175395904e-27 1258930 9.15175395904e-27 1584890 9.15175395904e-27 1995260 9.15175395904e-27 2511890 9.15175395904e-27 3162280 9.15175395904e-27 3981070 9.15175395904e-27 5011870 9.15175395904e-27 6309570 9.15175395904e-27 7943280 9.15175395904e-27 10000000 9.15175395904e-27 12589250 9.15175395904e-27 15848930 9.15175395904e-27 19952620 9.15175395904e-27 25118860 9.15175395904e-27 31622780 9.15175395904e-27 39810720 9.15175395904e-27 50118720 9.15175395904e-27 63095730 9.15175395904e-27 79432820 9.15175395904e-27 100000000 9.15175395904e-27 100.00000 3.009923117569e-26 125.89254 3.009923117569e-26 158.48932 3.009923117569e-26 199.52623 3.009923117569e-26 251.18864 3.009923117569e-26 316.22777 3.009923117569e-26 398.10717 3.009923117569e-26 501.18723 3.009923117569e-26 630.95734 3.009923117569e-26 794.32823 3.009923117569e-26 1000 3.009923117569e-26 1258.93 3.009923117569e-26 1584.89 3.009923117569e-26 1995.26 3.009923117569e-26 2511.89 3.009923117569e-26 3162.28 3.009923117569e-26 3981.07 3.009923117569e-26 5011.87 3.009923117569e-26 6309.57 3.009923117569e-26 7943.28 3.009923117569e-26 10000 3.009923117569e-26 12589.25 3.009923117569e-26 15848.93 3.009923117569e-26 19952.62 3.009923117569e-26 25118.86 3.009923117569e-26 31622.78 3.009923117569e-26 39810.72 3.009923117569e-26 50118.72 3.009923117569e-26 63095.73 3.009923117569e-26 79432.82 3.009923117569e-26 100000 3.009923117569e-26 125892.54 3.009923117569e-26 158489.32 3.009923117569e-26 199526.23 3.009923117569e-26 251188.64 3.009923117569e-26 316227.77 3.009923117569e-26 398107.17 3.009923117569e-26 501187.23 3.009923117569e-26 630957.34 3.009923117569e-26 794328.23 3.009923117569e-26 1000000 3.009923117569e-26 1258930 3.009923117569e-26 1584890 3.009923117569e-26 1995260 3.009923117569e-26 2511890 3.009923117569e-26 3162280 3.009923117569e-26 3981070 3.009923117569e-26 5011870 3.009923117569e-26 6309570 3.009923117569e-26 7943280 3.009923117569e-26 10000000 3.009923117569e-26 12589250 3.009923117569e-26 15848930 3.009923117569e-26 19952620 3.009923117569e-26 25118860 3.009923117569e-26 31622780 3.009923117569e-26 39810720 3.009923117569e-26 50118720 3.009923117569e-26 63095730 3.009923117569e-26 79432820 3.009923117569e-26 100000000 3.009923117569e-26 100.00000 5.688225e-28 125.89254 5.688225e-28 158.48932 5.688225e-28 199.52623 5.688225e-28 251.18864 5.688225e-28 316.22777 5.688225e-28 398.10717 5.688225e-28 501.18723 5.688225e-28 630.95734 5.688225e-28 794.32823 5.688225e-28 1000 5.688225e-28 1258.93 5.688225e-28 1584.89 5.688225e-28 1995.26 5.688225e-28 2511.89 5.688225e-28 3162.28 5.688225e-28 3981.07 5.688225e-28 5011.87 5.688225e-28 6309.57 5.688225e-28 7943.28 5.688225e-28 10000 5.688225e-28 12589.25 5.688225e-28 15848.93 5.688225e-28 19952.62 5.688225e-28 25118.86 5.688225e-28 31622.78 5.688225e-28 39810.72 5.688225e-28 50118.72 5.688225e-28 63095.73 5.688225e-28 79432.82 5.688225e-28 100000 5.688225e-28 125892.54 5.688225e-28 158489.32 5.688225e-28 199526.23 5.688225e-28 251188.64 5.688225e-28 316227.77 5.688225e-28 398107.17 5.688225e-28 501187.23 5.688225e-28 630957.34 5.688225e-28 794328.23 5.688225e-28 1000000 5.688225e-28 1258930 5.688225e-28 1584890 5.688225e-28 1995260 5.688225e-28 2511890 5.688225e-28 3162280 5.688225e-28 3981070 5.688225e-28 5011870 5.688225e-28 6309570 5.688225e-28 7943280 5.688225e-28 10000000 5.688225e-28 12589250 5.688225e-28 15848930 5.688225e-28 19952620 5.688225e-28 25118860 5.688225e-28 31622780 5.688225e-28 39810720 5.688225e-28 50118720 5.688225e-28 63095730 5.688225e-28 79432820 5.688225e-28 100000000 5.688225e-28 100.00000 1.102875932041e-26 125.89254 1.102875932041e-26 158.48932 1.102875932041e-26 199.52623 1.102875932041e-26 251.18864 1.102875932041e-26 316.22777 1.102875932041e-26 398.10717 1.102875932041e-26 501.18723 1.102875932041e-26 630.95734 1.102875932041e-26 794.32823 1.102875932041e-26 1000 1.102875932041e-26 1258.93 1.102875932041e-26 1584.89 1.102875932041e-26 1995.26 1.102875932041e-26 2511.89 1.102875932041e-26 3162.28 1.102875932041e-26 3981.07 1.102875932041e-26 5011.87 1.102875932041e-26 6309.57 1.102875932041e-26 7943.28 1.102875932041e-26 10000 1.102875932041e-26 12589.25 1.102875932041e-26 15848.93 1.102875932041e-26 19952.62 1.102875932041e-26 25118.86 1.102875932041e-26 31622.78 1.102875932041e-26 39810.72 1.102875932041e-26 50118.72 1.102875932041e-26 63095.73 1.102875932041e-26 79432.82 1.102875932041e-26 100000 1.102875932041e-26 125892.54 1.102875932041e-26 158489.32 1.102875932041e-26 199526.23 1.102875932041e-26 251188.64 1.102875932041e-26 316227.77 1.102875932041e-26 398107.17 1.102875932041e-26 501187.23 1.102875932041e-26 630957.34 1.102875932041e-26 794328.23 1.102875932041e-26 1000000 1.102875932041e-26 1258930 1.102875932041e-26 1584890 1.102875932041e-26 1995260 1.102875932041e-26 2511890 1.102875932041e-26 3162280 1.102875932041e-26 3981070 1.102875932041e-26 5011870 1.102875932041e-26 6309570 1.102875932041e-26 7943280 1.102875932041e-26 10000000 1.102875932041e-26 12589250 1.102875932041e-26 15848930 1.102875932041e-26 19952620 1.102875932041e-26 25118860 1.102875932041e-26 31622780 1.102875932041e-26 39810720 1.102875932041e-26 50118720 1.102875932041e-26 63095730 1.102875932041e-26 79432820 1.102875932041e-26 100000000 1.102875932041e-26 100.00000 5.129559111609e-26 125.89254 5.129559111609e-26 158.48932 5.129559111609e-26 199.52623 5.129559111609e-26 251.18864 5.129559111609e-26 316.22777 5.129559111609e-26 398.10717 5.129559111609e-26 501.18723 5.129559111609e-26 630.95734 5.129559111609e-26 794.32823 5.129559111609e-26 1000 5.129559111609e-26 1258.93 5.129559111609e-26 1584.89 5.129559111609e-26 1995.26 5.129559111609e-26 2511.89 5.129559111609e-26 3162.28 5.129559111609e-26 3981.07 5.129559111609e-26 5011.87 5.129559111609e-26 6309.57 5.129559111609e-26 7943.28 5.129559111609e-26 10000 5.129559111609e-26 12589.25 5.129559111609e-26 15848.93 5.129559111609e-26 19952.62 5.129559111609e-26 25118.86 5.129559111609e-26 31622.78 5.129559111609e-26 39810.72 5.129559111609e-26 50118.72 5.129559111609e-26 63095.73 5.129559111609e-26 79432.82 5.129559111609e-26 100000 5.129559111609e-26 125892.54 5.129559111609e-26 158489.32 5.129559111609e-26 199526.23 5.129559111609e-26 251188.64 5.129559111609e-26 316227.77 5.129559111609e-26 398107.17 5.129559111609e-26 501187.23 5.129559111609e-26 630957.34 5.129559111609e-26 794328.23 5.129559111609e-26 1000000 5.129559111609e-26 1258930 5.129559111609e-26 1584890 5.129559111609e-26 1995260 5.129559111609e-26 2511890 5.129559111609e-26 3162280 5.129559111609e-26 3981070 5.129559111609e-26 5011870 5.129559111609e-26 6309570 5.129559111609e-26 7943280 5.129559111609e-26 10000000 5.129559111609e-26 12589250 5.129559111609e-26 15848930 5.129559111609e-26 19952620 5.129559111609e-26 25118860 5.129559111609e-26 31622780 5.129559111609e-26 39810720 5.129559111609e-26 50118720 5.129559111609e-26 63095730 5.129559111609e-26 79432820 5.129559111609e-26 100000000 5.129559111609e-26 100.00000 1.5507647100625e-25 125.89254 1.5507647100625e-25 158.48932 1.5507647100625e-25 199.52623 1.5507647100625e-25 251.18864 1.5507647100625e-25 316.22777 1.5507647100625e-25 398.10717 1.5507647100625e-25 501.18723 1.5507647100625e-25 630.95734 1.5507647100625e-25 794.32823 1.5507647100625e-25 1000 1.5507647100625e-25 1258.93 1.5507647100625e-25 1584.89 1.5507647100625e-25 1995.26 1.5507647100625e-25 2511.89 1.5507647100625e-25 3162.28 1.5507647100625e-25 3981.07 1.5507647100625e-25 5011.87 1.5507647100625e-25 6309.57 1.5507647100625e-25 7943.28 1.5507647100625e-25 10000 1.5507647100625e-25 12589.25 1.5507647100625e-25 15848.93 1.5507647100625e-25 19952.62 1.5507647100625e-25 25118.86 1.5507647100625e-25 31622.78 1.5507647100625e-25 39810.72 1.5507647100625e-25 50118.72 1.5507647100625e-25 63095.73 1.5507647100625e-25 79432.82 1.5507647100625e-25 100000 1.5507647100625e-25 125892.54 1.5507647100625e-25 158489.32 1.5507647100625e-25 199526.23 1.5507647100625e-25 251188.64 1.5507647100625e-25 316227.77 1.5507647100625e-25 398107.17 1.5507647100625e-25 501187.23 1.5507647100625e-25 630957.34 1.5507647100625e-25 794328.23 1.5507647100625e-25 1000000 1.5507647100625e-25 1258930 1.5507647100625e-25 1584890 1.5507647100625e-25 1995260 1.5507647100625e-25 2511890 1.5507647100625e-25 3162280 1.5507647100625e-25 3981070 1.5507647100625e-25 5011870 1.5507647100625e-25 6309570 1.5507647100625e-25 7943280 1.5507647100625e-25 10000000 1.5507647100625e-25 12589250 1.5507647100625e-25 15848930 1.5507647100625e-25 19952620 1.5507647100625e-25 25118860 1.5507647100625e-25 31622780 1.5507647100625e-25 39810720 1.5507647100625e-25 50118720 1.5507647100625e-25 63095730 1.5507647100625e-25 79432820 1.5507647100625e-25 100000000 1.5507647100625e-25 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2g_st.standard0000644000175000017500000004536614163340332025155 0ustar carstencarstenFreq N(g) 100.00000 4.05780736e-30 125.89254 4.05780736e-30 158.48932 4.05780736e-30 199.52623 4.05780736e-30 251.18864 4.05780736e-30 316.22777 4.05780736e-30 398.10717 4.05780736e-30 501.18723 4.05780736e-30 630.95734 4.05780736e-30 794.32823 4.05780736e-30 1000 4.05780736e-30 1258.93 4.05780736e-30 1584.89 4.05780736e-30 1995.26 4.05780736e-30 2511.89 4.05780736e-30 3162.28 4.05780736e-30 3981.07 4.05780736e-30 5011.87 4.05780736e-30 6309.57 4.05780736e-30 7943.28 4.05780736e-30 10000 4.05780736e-30 12589.25 4.05780736e-30 15848.93 4.05780736e-30 19952.62 4.05780736e-30 25118.86 4.05780736e-30 31622.78 4.05780736e-30 39810.72 4.05780736e-30 50118.72 4.05780736e-30 63095.73 4.05780736e-30 79432.82 4.05780736e-30 100000 4.05780736e-30 125892.54 4.05780736e-30 158489.32 4.05780736e-30 199526.23 4.05780736e-30 251188.64 4.05780736e-30 316227.77 4.05780736e-30 398107.17 4.05780736e-30 501187.23 4.05780736e-30 630957.34 4.05780736e-30 794328.23 4.05780736e-30 1000000 4.05780736e-30 1258930 4.05780736e-30 1584890 4.05780736e-30 1995260 4.05780736e-30 2511890 4.05780736e-30 3162280 4.05780736e-30 3981070 4.05780736e-30 5011870 4.05780736e-30 6309570 4.05780736e-30 7943280 4.05780736e-30 10000000 4.05780736e-30 12589250 4.05780736e-30 15848930 4.05780736e-30 19952620 4.05780736e-30 25118860 4.05780736e-30 31622780 4.05780736e-30 39810720 4.05780736e-30 50118720 4.05780736e-30 63095730 4.05780736e-30 79432820 4.05780736e-30 100000000 4.05780736e-30 100.00000 2.0610334969e-28 125.89254 2.0610334969e-28 158.48932 2.0610334969e-28 199.52623 2.0610334969e-28 251.18864 2.0610334969e-28 316.22777 2.0610334969e-28 398.10717 2.0610334969e-28 501.18723 2.0610334969e-28 630.95734 2.0610334969e-28 794.32823 2.0610334969e-28 1000 2.0610334969e-28 1258.93 2.0610334969e-28 1584.89 2.0610334969e-28 1995.26 2.0610334969e-28 2511.89 2.0610334969e-28 3162.28 2.0610334969e-28 3981.07 2.0610334969e-28 5011.87 2.0610334969e-28 6309.57 2.0610334969e-28 7943.28 2.0610334969e-28 10000 2.0610334969e-28 12589.25 2.0610334969e-28 15848.93 2.0610334969e-28 19952.62 2.0610334969e-28 25118.86 2.0610334969e-28 31622.78 2.0610334969e-28 39810.72 2.0610334969e-28 50118.72 2.0610334969e-28 63095.73 2.0610334969e-28 79432.82 2.0610334969e-28 100000 2.0610334969e-28 125892.54 2.0610334969e-28 158489.32 2.0610334969e-28 199526.23 2.0610334969e-28 251188.64 2.0610334969e-28 316227.77 2.0610334969e-28 398107.17 2.0610334969e-28 501187.23 2.0610334969e-28 630957.34 2.0610334969e-28 794328.23 2.0610334969e-28 1000000 2.0610334969e-28 1258930 2.0610334969e-28 1584890 2.0610334969e-28 1995260 2.0610334969e-28 2511890 2.0610334969e-28 3162280 2.0610334969e-28 3981070 2.0610334969e-28 5011870 2.0610334969e-28 6309570 2.0610334969e-28 7943280 2.0610334969e-28 10000000 2.0610334969e-28 12589250 2.0610334969e-28 15848930 2.0610334969e-28 19952620 2.0610334969e-28 25118860 2.0610334969e-28 31622780 2.0610334969e-28 39810720 2.0610334969e-28 50118720 2.0610334969e-28 63095730 2.0610334969e-28 79432820 2.0610334969e-28 100000000 2.0610334969e-28 100.00000 1.07469886276e-27 125.89254 1.07469886276e-27 158.48932 1.07469886276e-27 199.52623 1.07469886276e-27 251.18864 1.07469886276e-27 316.22777 1.07469886276e-27 398.10717 1.07469886276e-27 501.18723 1.07469886276e-27 630.95734 1.07469886276e-27 794.32823 1.07469886276e-27 1000 1.07469886276e-27 1258.93 1.07469886276e-27 1584.89 1.07469886276e-27 1995.26 1.07469886276e-27 2511.89 1.07469886276e-27 3162.28 1.07469886276e-27 3981.07 1.07469886276e-27 5011.87 1.07469886276e-27 6309.57 1.07469886276e-27 7943.28 1.07469886276e-27 10000 1.07469886276e-27 12589.25 1.07469886276e-27 15848.93 1.07469886276e-27 19952.62 1.07469886276e-27 25118.86 1.07469886276e-27 31622.78 1.07469886276e-27 39810.72 1.07469886276e-27 50118.72 1.07469886276e-27 63095.73 1.07469886276e-27 79432.82 1.07469886276e-27 100000 1.07469886276e-27 125892.54 1.07469886276e-27 158489.32 1.07469886276e-27 199526.23 1.07469886276e-27 251188.64 1.07469886276e-27 316227.77 1.07469886276e-27 398107.17 1.07469886276e-27 501187.23 1.07469886276e-27 630957.34 1.07469886276e-27 794328.23 1.07469886276e-27 1000000 1.07469886276e-27 1258930 1.07469886276e-27 1584890 1.07469886276e-27 1995260 1.07469886276e-27 2511890 1.07469886276e-27 3162280 1.07469886276e-27 3981070 1.07469886276e-27 5011870 1.07469886276e-27 6309570 1.07469886276e-27 7943280 1.07469886276e-27 10000000 1.07469886276e-27 12589250 1.07469886276e-27 15848930 1.07469886276e-27 19952620 1.07469886276e-27 25118860 1.07469886276e-27 31622780 1.07469886276e-27 39810720 1.07469886276e-27 50118720 1.07469886276e-27 63095730 1.07469886276e-27 79432820 1.07469886276e-27 100000000 1.07469886276e-27 100.00000 3.35935000801e-27 125.89254 3.35935000801e-27 158.48932 3.35935000801e-27 199.52623 3.35935000801e-27 251.18864 3.35935000801e-27 316.22777 3.35935000801e-27 398.10717 3.35935000801e-27 501.18723 3.35935000801e-27 630.95734 3.35935000801e-27 794.32823 3.35935000801e-27 1000 3.35935000801e-27 1258.93 3.35935000801e-27 1584.89 3.35935000801e-27 1995.26 3.35935000801e-27 2511.89 3.35935000801e-27 3162.28 3.35935000801e-27 3981.07 3.35935000801e-27 5011.87 3.35935000801e-27 6309.57 3.35935000801e-27 7943.28 3.35935000801e-27 10000 3.35935000801e-27 12589.25 3.35935000801e-27 15848.93 3.35935000801e-27 19952.62 3.35935000801e-27 25118.86 3.35935000801e-27 31622.78 3.35935000801e-27 39810.72 3.35935000801e-27 50118.72 3.35935000801e-27 63095.73 3.35935000801e-27 79432.82 3.35935000801e-27 100000 3.35935000801e-27 125892.54 3.35935000801e-27 158489.32 3.35935000801e-27 199526.23 3.35935000801e-27 251188.64 3.35935000801e-27 316227.77 3.35935000801e-27 398107.17 3.35935000801e-27 501187.23 3.35935000801e-27 630957.34 3.35935000801e-27 794328.23 3.35935000801e-27 1000000 3.35935000801e-27 1258930 3.35935000801e-27 1584890 3.35935000801e-27 1995260 3.35935000801e-27 2511890 3.35935000801e-27 3162280 3.35935000801e-27 3981070 3.35935000801e-27 5011870 3.35935000801e-27 6309570 3.35935000801e-27 7943280 3.35935000801e-27 10000000 3.35935000801e-27 12589250 3.35935000801e-27 15848930 3.35935000801e-27 19952620 3.35935000801e-27 25118860 3.35935000801e-27 31622780 3.35935000801e-27 39810720 3.35935000801e-27 50118720 3.35935000801e-27 63095730 3.35935000801e-27 79432820 3.35935000801e-27 100000000 3.35935000801e-27 100.00000 4.4979127395904e-31 125.89254 4.4979127395904e-31 158.48932 4.4979127395904e-31 199.52623 4.4979127395904e-31 251.18864 4.4979127395904e-31 316.22777 4.4979127395904e-31 398.10717 4.4979127395904e-31 501.18723 4.4979127395904e-31 630.95734 4.4979127395904e-31 794.32823 4.4979127395904e-31 1000 4.4979127395904e-31 1258.93 4.4979127395904e-31 1584.89 4.4979127395904e-31 1995.26 4.4979127395904e-31 2511.89 4.4979127395904e-31 3162.28 4.4979127395904e-31 3981.07 4.4979127395904e-31 5011.87 4.4979127395904e-31 6309.57 4.4979127395904e-31 7943.28 4.4979127395904e-31 10000 4.4979127395904e-31 12589.25 4.4979127395904e-31 15848.93 4.4979127395904e-31 19952.62 4.4979127395904e-31 25118.86 4.4979127395904e-31 31622.78 4.4979127395904e-31 39810.72 4.4979127395904e-31 50118.72 4.4979127395904e-31 63095.73 4.4979127395904e-31 79432.82 4.4979127395904e-31 100000 4.4979127395904e-31 125892.54 4.4979127395904e-31 158489.32 4.4979127395904e-31 199526.23 4.4979127395904e-31 251188.64 4.4979127395904e-31 316227.77 4.4979127395904e-31 398107.17 4.4979127395904e-31 501187.23 4.4979127395904e-31 630957.34 4.4979127395904e-31 794328.23 4.4979127395904e-31 1000000 4.4979127395904e-31 1258930 4.4979127395904e-31 1584890 4.4979127395904e-31 1995260 4.4979127395904e-31 2511890 4.4979127395904e-31 3162280 4.4979127395904e-31 3981070 4.4979127395904e-31 5011870 4.4979127395904e-31 6309570 4.4979127395904e-31 7943280 4.4979127395904e-31 10000000 4.4979127395904e-31 12589250 4.4979127395904e-31 15848930 4.4979127395904e-31 19952620 4.4979127395904e-31 25118860 4.4979127395904e-31 31622780 4.4979127395904e-31 39810720 4.4979127395904e-31 50118720 4.4979127395904e-31 63095730 4.4979127395904e-31 79432820 4.4979127395904e-31 100000000 4.4979127395904e-31 100.00000 8.640632025e-29 125.89254 8.640632025e-29 158.48932 8.640632025e-29 199.52623 8.640632025e-29 251.18864 8.640632025e-29 316.22777 8.640632025e-29 398.10717 8.640632025e-29 501.18723 8.640632025e-29 630.95734 8.640632025e-29 794.32823 8.640632025e-29 1000 8.640632025e-29 1258.93 8.640632025e-29 1584.89 8.640632025e-29 1995.26 8.640632025e-29 2511.89 8.640632025e-29 3162.28 8.640632025e-29 3981.07 8.640632025e-29 5011.87 8.640632025e-29 6309.57 8.640632025e-29 7943.28 8.640632025e-29 10000 8.640632025e-29 12589.25 8.640632025e-29 15848.93 8.640632025e-29 19952.62 8.640632025e-29 25118.86 8.640632025e-29 31622.78 8.640632025e-29 39810.72 8.640632025e-29 50118.72 8.640632025e-29 63095.73 8.640632025e-29 79432.82 8.640632025e-29 100000 8.640632025e-29 125892.54 8.640632025e-29 158489.32 8.640632025e-29 199526.23 8.640632025e-29 251188.64 8.640632025e-29 316227.77 8.640632025e-29 398107.17 8.640632025e-29 501187.23 8.640632025e-29 630957.34 8.640632025e-29 794328.23 8.640632025e-29 1000000 8.640632025e-29 1258930 8.640632025e-29 1584890 8.640632025e-29 1995260 8.640632025e-29 2511890 8.640632025e-29 3162280 8.640632025e-29 3981070 8.640632025e-29 5011870 8.640632025e-29 6309570 8.640632025e-29 7943280 8.640632025e-29 10000000 8.640632025e-29 12589250 8.640632025e-29 15848930 8.640632025e-29 19952620 8.640632025e-29 25118860 8.640632025e-29 31622780 8.640632025e-29 39810720 8.640632025e-29 50118720 8.640632025e-29 63095730 8.640632025e-29 79432820 8.640632025e-29 100000000 8.640632025e-29 100.00000 4.9969237444e-28 125.89254 4.9969237444e-28 158.48932 4.9969237444e-28 199.52623 4.9969237444e-28 251.18864 4.9969237444e-28 316.22777 4.9969237444e-28 398.10717 4.9969237444e-28 501.18723 4.9969237444e-28 630.95734 4.9969237444e-28 794.32823 4.9969237444e-28 1000 4.9969237444e-28 1258.93 4.9969237444e-28 1584.89 4.9969237444e-28 1995.26 4.9969237444e-28 2511.89 4.9969237444e-28 3162.28 4.9969237444e-28 3981.07 4.9969237444e-28 5011.87 4.9969237444e-28 6309.57 4.9969237444e-28 7943.28 4.9969237444e-28 10000 4.9969237444e-28 12589.25 4.9969237444e-28 15848.93 4.9969237444e-28 19952.62 4.9969237444e-28 25118.86 4.9969237444e-28 31622.78 4.9969237444e-28 39810.72 4.9969237444e-28 50118.72 4.9969237444e-28 63095.73 4.9969237444e-28 79432.82 4.9969237444e-28 100000 4.9969237444e-28 125892.54 4.9969237444e-28 158489.32 4.9969237444e-28 199526.23 4.9969237444e-28 251188.64 4.9969237444e-28 316227.77 4.9969237444e-28 398107.17 4.9969237444e-28 501187.23 4.9969237444e-28 630957.34 4.9969237444e-28 794328.23 4.9969237444e-28 1000000 4.9969237444e-28 1258930 4.9969237444e-28 1584890 4.9969237444e-28 1995260 4.9969237444e-28 2511890 4.9969237444e-28 3162280 4.9969237444e-28 3981070 4.9969237444e-28 5011870 4.9969237444e-28 6309570 4.9969237444e-28 7943280 4.9969237444e-28 10000000 4.9969237444e-28 12589250 4.9969237444e-28 15848930 4.9969237444e-28 19952620 4.9969237444e-28 25118860 4.9969237444e-28 31622780 4.9969237444e-28 39810720 4.9969237444e-28 50118720 4.9969237444e-28 63095730 4.9969237444e-28 79432820 4.9969237444e-28 100000000 4.9969237444e-28 100.00000 1.60357799809e-27 125.89254 1.60357799809e-27 158.48932 1.60357799809e-27 199.52623 1.60357799809e-27 251.18864 1.60357799809e-27 316.22777 1.60357799809e-27 398.10717 1.60357799809e-27 501.18723 1.60357799809e-27 630.95734 1.60357799809e-27 794.32823 1.60357799809e-27 1000 1.60357799809e-27 1258.93 1.60357799809e-27 1584.89 1.60357799809e-27 1995.26 1.60357799809e-27 2511.89 1.60357799809e-27 3162.28 1.60357799809e-27 3981.07 1.60357799809e-27 5011.87 1.60357799809e-27 6309.57 1.60357799809e-27 7943.28 1.60357799809e-27 10000 1.60357799809e-27 12589.25 1.60357799809e-27 15848.93 1.60357799809e-27 19952.62 1.60357799809e-27 25118.86 1.60357799809e-27 31622.78 1.60357799809e-27 39810.72 1.60357799809e-27 50118.72 1.60357799809e-27 63095.73 1.60357799809e-27 79432.82 1.60357799809e-27 100000 1.60357799809e-27 125892.54 1.60357799809e-27 158489.32 1.60357799809e-27 199526.23 1.60357799809e-27 251188.64 1.60357799809e-27 316227.77 1.60357799809e-27 398107.17 1.60357799809e-27 501187.23 1.60357799809e-27 630957.34 1.60357799809e-27 794328.23 1.60357799809e-27 1000000 1.60357799809e-27 1258930 1.60357799809e-27 1584890 1.60357799809e-27 1995260 1.60357799809e-27 2511890 1.60357799809e-27 3162280 1.60357799809e-27 3981070 1.60357799809e-27 5011870 1.60357799809e-27 6309570 1.60357799809e-27 7943280 1.60357799809e-27 10000000 1.60357799809e-27 12589250 1.60357799809e-27 15848930 1.60357799809e-27 19952620 1.60357799809e-27 25118860 1.60357799809e-27 31622780 1.60357799809e-27 39810720 1.60357799809e-27 50118720 1.60357799809e-27 63095730 1.60357799809e-27 79432820 1.60357799809e-27 100000000 1.60357799809e-27 100.00000 4.000309504e-29 125.89254 4.000309504e-29 158.48932 4.000309504e-29 199.52623 4.000309504e-29 251.18864 4.000309504e-29 316.22777 4.000309504e-29 398.10717 4.000309504e-29 501.18723 4.000309504e-29 630.95734 4.000309504e-29 794.32823 4.000309504e-29 1000 4.000309504e-29 1258.93 4.000309504e-29 1584.89 4.000309504e-29 1995.26 4.000309504e-29 2511.89 4.000309504e-29 3162.28 4.000309504e-29 3981.07 4.000309504e-29 5011.87 4.000309504e-29 6309.57 4.000309504e-29 7943.28 4.000309504e-29 10000 4.000309504e-29 12589.25 4.000309504e-29 15848.93 4.000309504e-29 19952.62 4.000309504e-29 25118.86 4.000309504e-29 31622.78 4.000309504e-29 39810.72 4.000309504e-29 50118.72 4.000309504e-29 63095.73 4.000309504e-29 79432.82 4.000309504e-29 100000 4.000309504e-29 125892.54 4.000309504e-29 158489.32 4.000309504e-29 199526.23 4.000309504e-29 251188.64 4.000309504e-29 316227.77 4.000309504e-29 398107.17 4.000309504e-29 501187.23 4.000309504e-29 630957.34 4.000309504e-29 794328.23 4.000309504e-29 1000000 4.000309504e-29 1258930 4.000309504e-29 1584890 4.000309504e-29 1995260 4.000309504e-29 2511890 4.000309504e-29 3162280 4.000309504e-29 3981070 4.000309504e-29 5011870 4.000309504e-29 6309570 4.000309504e-29 7943280 4.000309504e-29 10000000 4.000309504e-29 12589250 4.000309504e-29 15848930 4.000309504e-29 19952620 4.000309504e-29 25118860 4.000309504e-29 31622780 4.000309504e-29 39810720 4.000309504e-29 50118720 4.000309504e-29 63095730 4.000309504e-29 79432820 4.000309504e-29 100000000 4.000309504e-29 100.00000 6.3164255625e-28 125.89254 6.3164255625e-28 158.48932 6.3164255625e-28 199.52623 6.3164255625e-28 251.18864 6.3164255625e-28 316.22777 6.3164255625e-28 398.10717 6.3164255625e-28 501.18723 6.3164255625e-28 630.95734 6.3164255625e-28 794.32823 6.3164255625e-28 1000 6.3164255625e-28 1258.93 6.3164255625e-28 1584.89 6.3164255625e-28 1995.26 6.3164255625e-28 2511.89 6.3164255625e-28 3162.28 6.3164255625e-28 3981.07 6.3164255625e-28 5011.87 6.3164255625e-28 6309.57 6.3164255625e-28 7943.28 6.3164255625e-28 10000 6.3164255625e-28 12589.25 6.3164255625e-28 15848.93 6.3164255625e-28 19952.62 6.3164255625e-28 25118.86 6.3164255625e-28 31622.78 6.3164255625e-28 39810.72 6.3164255625e-28 50118.72 6.3164255625e-28 63095.73 6.3164255625e-28 79432.82 6.3164255625e-28 100000 6.3164255625e-28 125892.54 6.3164255625e-28 158489.32 6.3164255625e-28 199526.23 6.3164255625e-28 251188.64 6.3164255625e-28 316227.77 6.3164255625e-28 398107.17 6.3164255625e-28 501187.23 6.3164255625e-28 630957.34 6.3164255625e-28 794328.23 6.3164255625e-28 1000000 6.3164255625e-28 1258930 6.3164255625e-28 1584890 6.3164255625e-28 1995260 6.3164255625e-28 2511890 6.3164255625e-28 3162280 6.3164255625e-28 3981070 6.3164255625e-28 5011870 6.3164255625e-28 6309570 6.3164255625e-28 7943280 6.3164255625e-28 10000000 6.3164255625e-28 12589250 6.3164255625e-28 15848930 6.3164255625e-28 19952620 6.3164255625e-28 25118860 6.3164255625e-28 31622780 6.3164255625e-28 39810720 6.3164255625e-28 50118720 6.3164255625e-28 63095730 6.3164255625e-28 79432820 6.3164255625e-28 100000000 6.3164255625e-28 100.00000 2.79246719844e-27 125.89254 2.79246719844e-27 158.48932 2.79246719844e-27 199.52623 2.79246719844e-27 251.18864 2.79246719844e-27 316.22777 2.79246719844e-27 398.10717 2.79246719844e-27 501.18723 2.79246719844e-27 630.95734 2.79246719844e-27 794.32823 2.79246719844e-27 1000 2.79246719844e-27 1258.93 2.79246719844e-27 1584.89 2.79246719844e-27 1995.26 2.79246719844e-27 2511.89 2.79246719844e-27 3162.28 2.79246719844e-27 3981.07 2.79246719844e-27 5011.87 2.79246719844e-27 6309.57 2.79246719844e-27 7943.28 2.79246719844e-27 10000 2.79246719844e-27 12589.25 2.79246719844e-27 15848.93 2.79246719844e-27 19952.62 2.79246719844e-27 25118.86 2.79246719844e-27 31622.78 2.79246719844e-27 39810.72 2.79246719844e-27 50118.72 2.79246719844e-27 63095.73 2.79246719844e-27 79432.82 2.79246719844e-27 100000 2.79246719844e-27 125892.54 2.79246719844e-27 158489.32 2.79246719844e-27 199526.23 2.79246719844e-27 251188.64 2.79246719844e-27 316227.77 2.79246719844e-27 398107.17 2.79246719844e-27 501187.23 2.79246719844e-27 630957.34 2.79246719844e-27 794328.23 2.79246719844e-27 1000000 2.79246719844e-27 1258930 2.79246719844e-27 1584890 2.79246719844e-27 1995260 2.79246719844e-27 2511890 2.79246719844e-27 3162280 2.79246719844e-27 3981070 2.79246719844e-27 5011870 2.79246719844e-27 6309570 2.79246719844e-27 7943280 2.79246719844e-27 10000000 2.79246719844e-27 12589250 2.79246719844e-27 15848930 2.79246719844e-27 19952620 2.79246719844e-27 25118860 2.79246719844e-27 31622780 2.79246719844e-27 39810720 2.79246719844e-27 50118720 2.79246719844e-27 63095730 2.79246719844e-27 79432820 2.79246719844e-27 100000000 2.79246719844e-27 100.00000 8.28360280449e-27 125.89254 8.28360280449e-27 158.48932 8.28360280449e-27 199.52623 8.28360280449e-27 251.18864 8.28360280449e-27 316.22777 8.28360280449e-27 398.10717 8.28360280449e-27 501.18723 8.28360280449e-27 630.95734 8.28360280449e-27 794.32823 8.28360280449e-27 1000 8.28360280449e-27 1258.93 8.28360280449e-27 1584.89 8.28360280449e-27 1995.26 8.28360280449e-27 2511.89 8.28360280449e-27 3162.28 8.28360280449e-27 3981.07 8.28360280449e-27 5011.87 8.28360280449e-27 6309.57 8.28360280449e-27 7943.28 8.28360280449e-27 10000 8.28360280449e-27 12589.25 8.28360280449e-27 15848.93 8.28360280449e-27 19952.62 8.28360280449e-27 25118.86 8.28360280449e-27 31622.78 8.28360280449e-27 39810.72 8.28360280449e-27 50118.72 8.28360280449e-27 63095.73 8.28360280449e-27 79432.82 8.28360280449e-27 100000 8.28360280449e-27 125892.54 8.28360280449e-27 158489.32 8.28360280449e-27 199526.23 8.28360280449e-27 251188.64 8.28360280449e-27 316227.77 8.28360280449e-27 398107.17 8.28360280449e-27 501187.23 8.28360280449e-27 630957.34 8.28360280449e-27 794328.23 8.28360280449e-27 1000000 8.28360280449e-27 1258930 8.28360280449e-27 1584890 8.28360280449e-27 1995260 8.28360280449e-27 2511890 8.28360280449e-27 3162280 8.28360280449e-27 3981070 8.28360280449e-27 5011870 8.28360280449e-27 6309570 8.28360280449e-27 7943280 8.28360280449e-27 10000000 8.28360280449e-27 12589250 8.28360280449e-27 15848930 8.28360280449e-27 19952620 8.28360280449e-27 25118860 8.28360280449e-27 31622780 8.28360280449e-27 39810720 8.28360280449e-27 50118720 8.28360280449e-27 63095730 8.28360280449e-27 79432820 8.28360280449e-27 100000000 8.28360280449e-27 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_diode_sw.standard0000644000175000017500000001623614163340332025523 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0039266 1.38939002699161e-14 3.78300007349216e-15 9.36210018187707e-15 0 0. 8.68390016870171e-15 3.74580007276948e-15 3.74580007276948e-15 0.2 3.15361e-05 8.57840016665216e-15 3.5873000696903e-15 3.79980007381853e-15 0.4 4.30899e-05 8.44300016402175e-15 3.58580006966116e-15 3.67460007138628e-15 0.6 5.6664e-05 8.29850016121456e-15 3.59800006989817e-15 3.52690006851692e-15 0.8 7.29447e-05 8.19650015923301e-15 3.61420007021289e-15 3.41770006639549e-15 1 9.25054e-05 8.12740015789061e-15 3.63330007058394e-15 3.33850006485688e-15 1.2 0.0001159296 8.07990015696783e-15 3.65500007100551e-15 3.27820006368543e-15 -0.2 -0.0088812 1.74794003395715e-14 4.39260008533483e-15 1.26814002463609e-14 0 0. 1.70968003321387e-14 8.32250016168081e-15 8.32250016168081e-15 0.2 0.0050661 1.47094002857588e-14 1.02804001997168e-14 3.78620007355432e-15 0.4 0.0058217 1.46754002850983e-14 1.02758001996275e-14 3.75090007286855e-15 0.6 0.0063918 1.45648002829497e-14 1.02759001996294e-14 3.63440007060531e-15 0.8 0.0068876 1.44137002800143e-14 1.02744001996003e-14 3.47850006757665e-15 1 0.0073414 1.42977002777607e-14 1.02706001995265e-14 3.35950006526484e-15 1.2 0.0077668 1.42137002761289e-14 1.02645001994079e-14 3.2746000636155e-15 -0.2 -0.0076676 1.85940003612247e-14 6.77850013168559e-15 1.15282002239578e-14 0 0. 1.90668003704098e-14 9.40150018264249e-15 9.40150018264249e-15 0.2 0.008884 1.76785003434394e-14 1.26550002458481e-14 4.65100009035475e-15 0.4 0.0107149 1.72939003359678e-14 1.30324002531798e-14 3.8522000748365e-15 0.6 0.0114605 1.71914003339765e-14 1.29386002513576e-14 3.82460007430032e-15 0.8 0.0119863 1.70233003307108e-14 1.28462002495625e-14 3.7304000724703e-15 1 0.0124015 1.67931003262387e-14 1.27554002477985e-14 3.57270006940667e-15 1.2 0.0127486 1.65922003223359e-14 1.26660002460618e-14 3.44330006689282e-15 -0.2 -0.0050913 1.88349003659047e-14 8.46110016437338e-15 1.01341001968747e-14 0 0. 1.91491003720086e-14 9.46340018384502e-15 9.46340018384502e-15 0.2 0.0072515 1.8647600362266e-14 1.1255600218662e-14 7.11850013829076e-15 0.4 0.0109442 1.77169003441854e-14 1.33593002595305e-14 4.01840007806526e-15 0.6 0.011854 1.75998003419105e-14 1.32835002580579e-14 3.95470007682777e-15 0.8 0.0124096 1.74984003399406e-14 1.31820002560861e-14 3.93420007642951e-15 1 0.0128209 1.7345900336978e-14 1.30819002541414e-14 3.86130007501329e-15 1.2 0.0131483 1.71140003324729e-14 1.29837002522337e-14 3.70750007202542e-15 -0.2 -0.0038944 1.37865002678297e-14 3.76970007323378e-15 9.26220017993631e-15 0 0. 8.55500016619757e-15 3.68480007158443e-15 3.68480007158443e-15 0.2 2.7052e-06 8.49490016503001e-15 3.51120006821191e-15 3.80330007388653e-15 0.4 4.0877e-06 8.34980016221116e-15 3.49850006796519e-15 3.67890007146981e-15 0.6 5.9326e-06 8.19350015917473e-15 3.49790006795353e-15 3.53130006860239e-15 0.8 8.4044e-06 8.07830015693674e-15 3.49990006799239e-15 3.42220006648291e-15 1 1.16977e-05 7.99440015530682e-15 3.50310006805455e-15 3.34320006494819e-15 1.2 1.60519e-05 7.93070015406933e-15 3.50740006813809e-15 3.28320006378257e-15 -0.2 -0.0108904 1.77320003444787e-14 3.9152000760604e-15 1.34310002609234e-14 0 0. 1.73606003372635e-14 8.46250016440058e-15 8.46250016440058e-15 0.2 0.00557 1.48938002893411e-14 1.05065002041093e-14 3.7592000730298e-15 0.4 0.0064744 1.48991002894441e-14 1.05353002046688e-14 3.73210007250333e-15 0.6 0.0071952 1.48176002878608e-14 1.05661002052671e-14 3.61530007023426e-15 0.8 0.0078379 1.46927002854344e-14 1.0592400205778e-14 3.45880006719394e-15 1 0.0084342 1.46005002836432e-14 1.06139002061957e-14 3.33930006487242e-15 1.2 0.0089973 1.45383002824349e-14 1.06307002065221e-14 3.25380006321142e-15 -0.2 -0.0098257 1.86501003623146e-14 6.03410011722417e-15 1.23355002396412e-14 0 0. 1.94152003771782e-14 9.58700018624619e-15 9.58700018624619e-15 0.2 0.0109925 1.78577003469207e-14 1.34885002620404e-14 4.0110000779215e-15 0.4 0.012718 1.76999003438551e-14 1.34973002622114e-14 3.82060007422261e-15 0.6 0.0135847 1.75992003418988e-14 1.33990002603017e-14 3.79850007379328e-15 0.8 0.0141986 1.7429600338604e-14 1.33030002584367e-14 3.70540007198463e-15 1 0.014682 1.71972003340892e-14 1.32085002566009e-14 3.54800006892683e-15 1.2 0.0150851 1.69937003301358e-14 1.31153002547903e-14 3.41860006641298e-15 -0.2 -0.0064955 1.90096003692986e-14 8.51430016540689e-15 1.02695001995051e-14 0 0. 1.93732003763622e-14 9.58360018618013e-15 9.58360018618013e-15 0.2 0.0092942 1.87358003639795e-14 1.19167002315052e-14 6.55420012732813e-15 0.4 0.0129726 1.79352003484263e-14 1.36741002656461e-14 3.93680007648002e-15 0.6 0.0139824 1.78429003466332e-14 1.35690002636043e-14 3.92800007630907e-15 0.8 0.0146328 1.77424003446807e-14 1.34647002615781e-14 3.91040007596715e-15 1 0.0151138 1.75895003417104e-14 1.33626002595946e-14 3.8386000745723e-15 1.2 0.0154947 1.73568003371897e-14 1.32623002576461e-14 3.68540007159609e-15 -0.2 -0.0039139 1.4447300280667e-14 4.03660007841883e-15 9.70560018855022e-15 0 0. 9.71200018867455e-15 4.29110008336299e-15 4.29110008336299e-15 0.2 0.0002901503 9.20360017879789e-15 4.24790008252375e-15 3.79010007363009e-15 0.4 0.0003626466 9.09550017669784e-15 4.28120008317067e-15 3.65860007107545e-15 0.6 0.0004335183 8.98560017456282e-15 4.33040008412647e-15 3.51020006819249e-15 0.8 0.0005079313 8.91890017326704e-15 4.38360008515999e-15 3.40070006606523e-15 1 0.0005874056 8.88440017259681e-15 4.43900008623624e-15 3.32110006451885e-15 1.2 0.0006726756 8.87050017232678e-15 4.49570008733775e-15 3.26050006334158e-15 -0.2 -0.0061331 1.75147003402572e-14 5.32070010336498e-15 1.17918002290787e-14 0 0. 1.69813003298949e-14 8.26330016053073e-15 8.26330016053073e-15 0.2 0.0044847 1.50522002924184e-14 1.02826001997596e-14 4.15300008068013e-15 0.4 0.0053879 1.47068002857083e-14 1.02468001990641e-14 3.81290007407302e-15 0.6 0.0058865 1.4518900282058e-14 1.01908001979762e-14 3.66960007128914e-15 0.8 0.0062762 1.43242002782755e-14 1.0147500197135e-14 3.50890006816723e-15 1 0.0066143 1.41740002753576e-14 1.01085001963773e-14 3.38900006583794e-15 1.2 0.0069216 1.4059900273141e-14 1.00710001956488e-14 3.30380006418276e-15 -0.2 -0.005244 1.83450003563874e-14 6.62750012875212e-15 1.14139002217373e-14 0 0. 1.86104003615433e-14 9.15880017792756e-15 9.15880017792756e-15 0.2 0.0060642 1.76803003434743e-14 1.17921002290846e-14 5.51570010715324e-15 0.4 0.0082878 1.70188003306234e-14 1.24537002419374e-14 4.1363000803557e-15 0.6 0.0091669 1.67848003260775e-14 1.24017002409272e-14 3.92800007630907e-15 0.8 0.0096913 1.65741003219842e-14 1.23063002390739e-14 3.79260007367866e-15 1 0.0100722 1.6326700317178e-14 1.22115002372322e-14 3.62180007036053e-15 1.2 0.010377 1.61179003131217e-14 1.21198002354508e-14 3.48730006774761e-15 -0.2 -0.0036934 1.84935003592723e-14 7.56930014704843e-15 1.06619002071282e-14 0 0. 1.88089003653996e-14 9.28150018031125e-15 9.28150018031125e-15 0.2 0.0050017 1.83669003568129e-14 1.12985002194954e-14 6.77700013165645e-15 0.4 0.0079696 1.76801003434704e-14 1.2705800246835e-14 4.62790008990599e-15 0.6 0.0091976 1.73786003376132e-14 1.28310002492672e-14 4.16940008099873e-15 0.8 0.0098567 1.72051003342426e-14 1.27639002479637e-14 4.03950007847517e-15 1 0.0102895 1.70217003306797e-14 1.26694002461278e-14 3.92940007633626e-15 1.2 0.0106096 1.6775200325891e-14 1.25720002442356e-14 3.76040007305311e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_ig_sw.standard0000644000175000017500000000616114163340332024644 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.63228e-05 1.40767e-10 -3.2562e-12 -1.63229e-05 0.35 0.000132452 1.5482e-09 -3.1459e-12 -0.0001324535 0.45 0.0003813832 6.5394e-09 -2.4718e-12 -0.0003813898 0.55 0.0006681567 1.68247e-08 -2.0055e-12 -0.0006681735 0.65 0.0009427886 3.42695e-08 -1.7498e-12 -0.0009428228 0.75 0.0011878 6.14288e-08 -1.6123e-12 -0.0011879 0.85 0.0013978 1.016725e-07 -1.5409e-12 -0.0013979 0.95 0.0015726 1.593694e-07 -1.5106e-12 -0.0015727 1.05000 0.0017143 2.401395e-07 -1.5149e-12 -0.0017145 1.15000 0.0018264 3.511745e-07 -1.5756e-12 -0.0018267 0.25 4.53657e-05 9.79511e-11 -3.1869e-12 -4.53658e-05 0.35 0.0003273124 6.828131e-10 -3.1754e-12 -0.0003273131 0.45 0.001023 1.7736e-09 -2.7044e-12 -0.001023 0.55 0.0020441 3.2621e-09 -2.2824e-12 -0.0020441 0.65 0.0032511 5.2209e-09 -2.0043e-12 -0.0032511 0.75 0.0045489 7.706e-09 -1.836e-12 -0.0045489 0.85 0.0058782 1.07766e-08 -1.7384e-12 -0.0058782 0.95 0.0072003 1.45167e-08 -1.6859e-12 -0.0072004 1.05000 0.0084898 1.90406e-08 -1.6647e-12 -0.0084898 1.15000 0.0097298 2.44925e-08 -1.6718e-12 -0.0097298 0.25 2.8946e-06 1.21816e-11 -1.1065e-12 -2.8946e-06 0.35 8.37757e-05 3.840919e-10 -1.1868e-12 -8.3776e-05 0.45 0.0003953981 2.478e-09 -9.29847e-13 -0.0003954006 0.55 0.0007821229 7.259e-09 -7.307298e-13 -0.0007821301 0.65 0.0011487 1.5542e-08 -6.264576e-13 -0.0011487 0.75 0.0014713 2.85602e-08 -5.722106e-13 -0.0014713 0.85 0.0017448 4.79672e-08 -5.443372e-13 -0.0017449 0.95 0.0019706 7.59157e-08 -5.317023e-13 -0.0019707 1.05000 0.0021527 1.151799e-07 -5.300041e-13 -0.0021528 1.15000 0.002296 1.693149e-07 -5.454673e-13 -0.0022962 0.25 1.03918e-05 1.49555e-11 -1.0861e-12 -1.03918e-05 0.35 0.0002162826 3.006854e-10 -1.1534e-12 -0.0002162829 0.45 0.0009795068 1.0114e-09 -9.715894e-13 -0.0009795078 0.55 0.0021821 1.932e-09 -8.031142e-13 -0.0021821 0.65 0.0036114 3.0821e-09 -6.977858e-13 -0.0036114 0.75 0.0051457 4.484e-09 -6.370326e-13 -0.0051457 0.85 0.006715 6.1694e-09 -6.030158e-13 -0.006715 0.95 0.008274 8.1897e-09 -5.852101e-13 -0.008274 1.05000 0.0097928 1.06128e-08 -5.779431e-13 -0.0097928 1.15000 0.0112523 1.35222e-08 -5.792705e-13 -0.0112523 0.25 6.9034e-05 1.7751e-09 -1.02633e-11 -6.90358e-05 0.35 0.000203438 8.0386e-09 -8.8468e-12 -0.000203446 0.45 0.0003892213 2.27491e-08 -7.2091e-12 -0.0003892441 0.55 0.0005881026 4.96616e-08 -6.1588e-12 -0.0005881523 0.65 0.0007785468 9.34246e-08 -5.5557e-12 -0.0007786403 0.75 0.0009503229 1.600796e-07 -5.2233e-12 -0.000950483 0.85 0.0010992 2.574571e-07 -5.0597e-12 -0.0010995 0.95 0.0012243 3.956442e-07 -5.0188e-12 -0.0012247 1.05000 0.0013265 5.875686e-07 -5.1046e-12 -0.0013271 1.15000 0.0014078 8.497265e-07 -5.3924e-12 -0.0014086 0.25 0.000180647 5.130895e-10 -1.04601e-11 -0.0001806475 0.35 0.0005670062 1.6842e-09 -9.7764e-12 -0.0005670079 0.45 0.0012236 3.5987e-09 -8.4542e-12 -0.0012236 0.55 0.0020867 6.3454e-09 -7.3481e-12 -0.0020867 0.65 0.0030762 1.00825e-08 -6.5918e-12 -0.0030762 0.75 0.004129 1.49631e-08 -6.1136e-12 -0.004129 0.85 0.0052011 2.11544e-08 -5.8285e-12 -0.0052011 0.95 0.0062621 2.88646e-08 -5.6779e-12 -0.0062621 1.05000 0.0072913 3.83597e-08 -5.6319e-12 -0.0072914 1.15000 0.0082752 4.99749e-08 -5.6913e-12 -0.0082753 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_core_st.standard0000644000175000017500000001653114163340332025220 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0003997359 8.42107516359582e-16 1.98965203865287e-16 6.09900711848512e-16 0 0. 6.20575212055884e-16 2.80395405447228e-16 2.80395405447228e-16 0.2 5.36347e-05 5.52959010742308e-16 2.95160905734077e-16 1.9048640370057e-16 0.4 6.42727e-05 5.47663110639425e-16 2.97021305770218e-16 1.83905103572716e-16 0.6 7.39548e-05 5.41739010524337e-16 2.9919620581247e-16 1.76365103426236e-16 0.8 8.3437e-05 5.37823510448271e-16 3.01356805854444e-16 1.70824203318593e-16 1 9.29535e-05 5.35412810401439e-16 3.0345520589521e-16 1.66825303240907e-16 1.2 0.0001026006 5.33928510372603e-16 3.0547920593453e-16 1.63802103182175e-16 -0.2 -0.0004702468 9.35429518172544e-16 2.76508405371715e-16 6.39386712421335e-16 0 0. 9.57020418591989e-16 4.69372109118469e-16 4.69372109118469e-16 0.2 0.0004230113 8.55644116622557e-16 6.24515612132434e-16 2.02298203930037e-16 0.4 0.0004826198 8.46214416439366e-16 6.22163612086742e-16 1.9406750377014e-16 0.6 0.0005156198 8.3632421624723e-16 6.17388111993969e-16 1.88147003655123e-16 0.8 0.0005403508 8.24553016018551e-16 6.12751511903894e-16 1.80214303501015e-16 1 0.0005607267 8.14733915827796e-16 6.0820091181549e-16 1.74157603383351e-16 1.2 0.0005783955 8.06704415671807e-16 6.03724511728527e-16 1.69827603299233e-16 -0.2 -0.0003494232 9.67923918803811e-16 3.97824507728517e-16 5.55844510798364e-16 0 0. 9.88294919199557e-16 4.87635709473275e-16 4.87635709473275e-16 0.2 0.0004560441 9.40090218263087e-16 6.28474512209344e-16 2.93766005706978e-16 0.4 0.0005951395 9.0707851762177e-16 6.837717132836e-16 2.02337303930797e-16 0.6 0.0006385584 9.0082171750022e-16 6.78444013180099e-16 2.00316003891529e-16 0.8 0.0006672403 8.91523217319578e-16 6.72979113073933e-16 1.95432303796654e-16 1 0.0006890417 8.79085317077948e-16 6.67627812969973e-16 1.87311503638891e-16 1.2 0.0007067326 8.68165816865815e-16 6.62372712867882e-16 1.80629203509075e-16 -0.2 -0.0002148711 9.68851718821835e-16 4.56231508863187e-16 5.00434309721913e-16 0 0. 9.83208419100742e-16 4.85943209440395e-16 4.85943209440395e-16 0.2 0.0003274955 9.67814418801684e-16 5.44963710586983e-16 4.0928500795116e-16 0.4 0.000558564 9.14181817759766e-16 6.8214561325201e-16 2.14309004163371e-16 0.6 0.0006131566 9.06774517615864e-16 6.80279813215763e-16 2.0750810403125e-16 0.8 0.0006439429 9.01419817511839e-16 6.75099113115118e-16 2.06236904006554e-16 1 0.0006662862 8.93533017358622e-16 6.69950313015092e-16 2.02424503932491e-16 1.2 0.0006839104 8.81604417126886e-16 6.6489331291685e-16 1.94495203778449e-16 -0.2 -0.0004715559 8.60329816713586e-16 1.93899103766868e-16 6.35132412338686e-16 0 0. 5.20271110107282e-16 2.25088504372783e-16 2.25088504372783e-16 0.2 1.91946e-05 4.90137209521872e-16 2.26212604394621e-16 1.91056403711643e-16 0.4 2.47812e-05 4.85438809430596e-16 2.28833004445528e-16 1.8448650358401e-16 0.6 3.06045e-05 4.80278109330339e-16 2.31998804507029e-16 1.76916403436946e-16 0.8 3.69006e-05 4.77287609272243e-16 2.3533030457175e-16 1.71342203328657e-16 1 4.37579e-05 4.7595270924631e-16 2.38759404638367e-16 1.67312703250376e-16 1.2 5.12231e-05 4.75681309241038e-16 2.42258904706352e-16 1.64260203191075e-16 -0.2 -0.0005927724 9.38575218233655e-16 2.27953904428449e-16 6.91396913431734e-16 0 0. 9.79323919025278e-16 4.81353209351225e-16 4.81353209351225e-16 0.2 0.0005056011 8.74744316993615e-16 6.53116012688053e-16 1.94536003779241e-16 0.4 0.0005701421 8.69052416883039e-16 6.4817531259207e-16 1.92938003748197e-16 0.6 0.0006091188 8.59372716694992e-16 6.43513312501502e-16 1.87078203634359e-16 0.8 0.0006386196 8.47737416468953e-16 6.3896491241314e-16 1.79151803480373e-16 1 0.0006630875 8.3803831628053e-16 6.34488912326185e-16 1.73097203362751e-16 1.2 0.0006844105 8.30125016126798e-16 6.30076912240473e-16 1.68774203278768e-16 -0.2 -0.0004487173 9.75430618949643e-16 3.8297570744005e-16 5.78837211245042e-16 0 0. 1.00370001949883e-15 4.9591310963408e-16 4.9591310963408e-16 0.2 0.0005791673 9.41795418296214e-16 6.81680113242966e-16 2.42465804710371e-16 0.4 0.0007058944 9.23563117942016e-16 7.03547113667776e-16 2.00325703891718e-16 0.6 0.0007557826 9.17778217829633e-16 6.97824413556601e-16 1.99165003869169e-16 0.8 0.0007893158 9.08519417649763e-16 6.9228411344897e-16 1.94357703775778e-16 1 0.0008147552 8.96069317407895e-16 6.86858913343575e-16 1.86258103618427e-16 1.2 0.000835341 8.85120617195195e-16 6.81528213240015e-16 1.79581203488715e-16 -0.2 -0.0002782253 9.77763518994964e-16 4.6148000896515e-16 5.04872109808126e-16 0 0. 9.93641419303423e-16 4.91579509549891e-16 4.91579509549891e-16 0.2 0.0004200096 9.76273918966026e-16 5.62291410923608e-16 4.01094007792034e-16 0.4 0.0006653809 9.22586117923036e-16 6.98280013565452e-16 2.07209204025443e-16 0.6 0.0007236151 9.17552517825248e-16 6.93230113467348e-16 2.06078604003479e-16 0.8 0.0007596301 9.12376917724702e-16 6.87908613363967e-16 2.05111403984689e-16 1 0.0007858801 9.04534717572352e-16 6.82710213262978e-16 2.01368603911978e-16 1.2 0.0008064869 8.92617917340845e-16 6.77607313163844e-16 1.9347140375856e-16 -0.2 -0.0003034567 8.51625916544495e-16 2.37903304621736e-16 5.81704311300741e-16 0 0. 7.3786411433445e-16 3.45765306717166e-16 3.45765306717166e-16 0.2 0.0001113976 6.42027412472635e-16 3.8970860757085e-16 1.93936703767599e-16 0.4 0.0001296452 6.2989451223693e-16 3.86891307516119e-16 1.84183403578122e-16 0.6 0.0001423791 6.20580212055982e-16 3.8530030748521e-16 1.76457403428029e-16 0.8 0.0001533741 6.13688811922103e-16 3.83988507459726e-16 1.70915503320367e-16 1 0.0001635036 6.08431911819977e-16 3.82750007435666e-16 1.66938503243106e-16 1.2 0.0001731152 6.04179611737368e-16 3.81534307412048e-16 1.63940003184854e-16 -0.2 -0.0003164255 9.30541418077583e-16 3.09151906005879e-16 6.01564211686559e-16 0 0. 9.33382818132783e-16 4.56695708872205e-16 4.56695708872205e-16 0.2 0.0003111142 8.62965116764781e-16 5.89629611454706e-16 2.45458604768512e-16 0.4 0.0003937886 8.33011416182872e-16 6.00166811659411e-16 2.01649303917431e-16 0.6 0.000428415 8.18407915899171e-16 5.94693611553084e-16 1.91271203715816e-16 0.8 0.0004508538 8.05064315639945e-16 5.89291911448145e-16 1.82416003543787e-16 1 0.0004680926 7.94471715434163e-16 5.84222011349653e-16 1.76073703420575e-16 1.2 0.0004824531 7.85939615268411e-16 5.79364811255292e-16 1.71620203334057e-16 -0.2 -0.0002424709 9.50929818473667e-16 3.67118707131997e-16 5.68297811040294e-16 0 0. 9.66657518779209e-16 4.7602220924766e-16 4.7602220924766e-16 0.2 0.0003067027 9.33079718126894e-16 5.97762611612705e-16 3.17026306158855e-16 0.4 0.0004476513 8.9779451744141e-16 6.5185421266354e-16 2.24152404354598e-16 0.6 0.0005031762 8.8346801716309e-16 6.52368712673535e-16 2.07627804033575e-16 0.8 0.0005341618 8.71380916928275e-16 6.47466412578299e-16 1.99230503870441e-16 1 0.0005554079 8.57802216664482e-16 6.42065612473377e-16 1.89982903690789e-16 1.2 0.0005716839 8.46345616441915e-16 6.36726712369659e-16 1.82857003552354e-16 -0.2 -0.0001575395 9.51416218483117e-16 4.07822307922744e-16 5.30103910298303e-16 0 0. 9.67012118786097e-16 4.7720920927072e-16 4.7720920927072e-16 0.2 0.0002296068 9.50178518459072e-16 5.62346410924676e-16 3.7304770724718e-16 0.4 0.0003943053 9.16008717795257e-16 6.45745712544871e-16 2.52404904903458e-16 0.6 0.0004666529 8.98879317462485e-16 6.5743411277194e-16 2.21738304307699e-16 0.8 0.0005050445 8.89081717272147e-16 6.55203912728615e-16 2.12841204134856e-16 1 0.0005296731 8.79205017080273e-16 6.50628812639734e-16 2.06388104009492e-16 1.2 0.0005475326 8.66291216829397e-16 6.4565661254314e-16 1.97371403834325e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_diode_lw.standard0000644000175000017500000001631714163340332025352 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.001057 1.26862802464557e-13 3.24106006296392e-14 8.89625017282702e-14 0 0. 1.16396702261233e-13 5.48652010658636e-14 5.48652010658636e-14 0.2 0.0003837728 8.18013015891499e-14 6.59897012819787e-14 5.74990011170303e-15 0.4 0.0004124642 8.03619015611868e-14 6.48470012597795e-14 5.46590010618577e-15 0.6 0.0004377965 7.91723015380764e-14 6.38412012402399e-14 5.32430010343492e-15 0.8 0.0004613269 7.80297015158792e-14 6.28672012213181e-14 5.19770010097547e-15 1 0.0004836049 7.69301014945173e-14 6.19130012027809e-14 5.09370009895506e-15 1.2 0.0005049431 7.58650014738257e-14 6.09762011845817e-14 5.0062000972552e-15 -0.2 -0.0009076088 1.46669002849332e-13 6.25913012159582e-14 8.09656015729148e-14 0 0. 1.48751002889779e-13 7.27933014141519e-14 7.27933014141519e-14 0.2 0.0010583 1.31260002549982e-13 8.78393017064498e-14 3.87492007527788e-14 0.4 0.0014769 1.09069302118884e-13 9.48038018417488e-14 7.79850015150108e-15 0.6 0.0015477 1.07008202078843e-13 9.3660501819538e-14 6.83640013281041e-15 0.8 0.0016008 1.05812002055605e-13 9.27194018012553e-14 6.6148001285054e-15 1 0.0016469 1.0471640203432e-13 9.18245017838701e-14 6.45170012533686e-15 1.2 0.0016885 1.03673302014056e-13 9.09495017668715e-14 6.32130012280359e-15 -0.2 -0.0005846756 1.4825640288017e-13 7.09369013780877e-14 7.4798201453101e-14 0 0. 1.51000802933485e-13 7.42286014420354e-14 7.42286014420354e-14 0.2 0.000849335 1.47013102856016e-13 7.97233015487807e-14 6.43813012507324e-14 0.4 0.0018651 1.26766802462693e-13 9.52649018507066e-14 2.71769005279643e-14 0.6 0.002248 1.13153802198233e-13 9.81990019077072e-14 9.76730018974887e-15 0.8 0.0023529 1.10640702149412e-13 9.72044018883852e-14 8.17410015879785e-15 1 0.0024223 1.09366002124648e-13 9.63162018711302e-14 7.80400015160793e-15 1.2 0.0024804 1.08300102103941e-13 9.5494501855167e-14 7.58810014741365e-15 -0.2 -0.0003118174 1.4598380283602e-13 7.38579014348339e-14 6.98623013572115e-14 0 0. 1.48678802888376e-13 7.31956014219674e-14 7.31956014219674e-14 0.2 0.000532405 1.47723802869823e-13 7.37794014333088e-14 7.15104013892291e-14 0.4 0.0013541 1.40235702724352e-13 8.37226016264749e-14 5.35874010410398e-14 0.6 0.0022637 1.21740002365037e-13 9.48024018417216e-14 2.29987004467946e-14 0.8 0.0026211 1.12005902175933e-13 9.61522018679441e-14 1.14431002223045e-14 1 0.0027482 1.092760021229e-13 9.53123018516274e-14 9.47690018410728e-15 1.2 0.0028266 1.07897202096114e-13 9.4491101835674e-14 8.9228001733428e-15 -0.2 -0.001609 1.22891202387401e-13 2.04787003978387e-14 9.64629018739801e-14 0 0. 1.05904902057409e-13 4.9060500953096e-14 4.9060500953096e-14 0.2 0.0003251781 7.3480801427508e-14 5.73963011150351e-14 5.27510010247911e-15 0.4 0.0003606849 7.23885014062879e-14 5.63432010945766e-14 5.2835001026423e-15 0.6 0.0003927712 7.1245301384079e-14 5.53874010760084e-14 5.14280009990893e-15 0.8 0.0004229056 7.01455013627132e-14 5.44582010579568e-14 5.01840009749221e-15 1 0.0004517175 6.90893013421945e-14 5.35485010402841e-14 4.91760009553398e-15 1.2 0.0004795367 6.80685013223635e-14 5.2657001022965e-14 4.83350009390017e-15 -0.2 -0.0013889 1.49778602909742e-13 6.24609012134249e-14 8.43831016393064e-14 0 0. 1.53175602975735e-13 7.51297014595411e-14 7.51297014595411e-14 0.2 0.0016402 1.29178002509535e-13 9.48103018418751e-14 2.94417005719625e-14 0.4 0.0020365 1.12432102184213e-13 9.94695019323892e-14 6.79390013198477e-15 0.6 0.0021413 1.11232802160914e-13 9.84714019129991e-14 6.62320012866859e-15 0.8 0.0022261 1.10081502138548e-13 9.7539801894901e-14 6.44040012511734e-15 1 0.0022991 1.08979502117139e-13 9.66311018772477e-14 6.28380012207508e-15 1.2 0.0023642 1.07924102096636e-13 9.5738801859913e-14 6.15700011961174e-15 -0.2 -0.0008614271 1.50911002931741e-13 7.15840013906589e-14 7.69773014954343e-14 0 0. 1.54256402996732e-13 7.59538014755508e-14 7.59538014755508e-14 0.2 0.0012915 1.50114402916265e-13 8.28453016094316e-14 6.45328012536756e-14 0.4 0.0028113 1.24189702412627e-13 1.01955301980681e-13 1.78337003464544e-14 0.6 0.0031623 1.16223702257872e-13 1.03220202005254e-13 8.20020015930489e-15 0.8 0.0032972 1.1496040223333e-13 1.02320501987775e-13 7.85080015251711e-15 1 0.0034031 1.13859502211943e-13 1.01467601971206e-13 7.62980014822376e-15 1.2 0.0034933 1.12812302191599e-13 1.00636401955058e-13 7.4416001445676e-15 -0.2 -0.0004374716 1.48024302875661e-13 7.44522014463793e-14 7.14586013882228e-14 0 0. 1.51050402934449e-13 7.4461401446558e-14 7.4461401446558e-14 0.2 0.0007787527 1.50261202919117e-13 7.5831301473171e-14 7.21566014017828e-14 0.4 0.0020366 1.41746002753693e-13 8.67511016853094e-14 5.21890010138732e-14 0.6 0.0033486 1.19129102314315e-13 1.00021801943119e-13 1.52751002967486e-14 0.8 0.0036777 1.13737002209563e-13 1.00259801947742e-13 9.46780018393049e-15 1 0.0038221 1.12441402184394e-13 9.94712019324222e-14 8.96720017420536e-15 1.2 0.0039324 1.11404302164246e-13 9.87150019177315e-14 8.70700016915047e-15 -0.2 -0.0006217003 1.29251702510967e-13 3.87613007530139e-14 8.53926016589179e-14 0 0. 1.23431502397898e-13 5.88208011427088e-14 5.88208011427088e-14 0.2 0.0003935792 9.49509018446066e-14 7.3451001426929e-14 1.27467002476295e-14 0.4 0.0004480353 8.75070016999943e-14 7.17312013935186e-14 6.36480012364866e-15 0.6 0.0004684663 8.55498016619718e-14 7.03119013659459e-14 5.78240011233441e-15 0.8 0.0004854374 8.42090016359242e-14 6.91995013443353e-14 5.57330010827223e-15 1 0.0005010423 8.3033201613082e-14 6.81882013246889e-14 5.44120010570593e-15 1.2 0.0005157585 8.1930201591654e-14 6.72238013059535e-14 5.33910010372244e-15 -0.2 -0.0005506865 1.41831702755358e-13 5.8345901133483e-14 8.00845015557977e-14 0 0. 1.43492502787622e-13 7.0018601360248e-14 7.0018601360248e-14 0.2 0.0006191329 1.31489402554438e-13 8.48711016487868e-14 4.21142008181505e-14 0.4 0.0009740999 1.13504402205044e-13 9.22971017930513e-14 1.5171500294736e-14 0.6 0.0010827 1.06156002062287e-13 9.0552501759159e-14 9.01490017513203e-15 0.8 0.0011309 1.0313350200357e-13 8.8839001725871e-14 7.56180014690272e-15 1 0.0011639 1.01340201968731e-13 8.75431017006956e-14 7.03360013664141e-15 1.2 0.0011909 9.99813019423319e-14 8.64611016796756e-14 6.76320013138836e-15 -0.2 -0.0003786529 1.43940802796331e-13 6.7226501306006e-14 7.39196014360325e-14 0 0. 1.46388202843876e-13 7.17839013945424e-14 7.17839013945424e-14 0.2 0.0005211083 1.42149502761531e-13 7.89292015333538e-14 6.00395011663845e-14 0.4 0.0010649 1.29181302509599e-13 9.23651017943723e-14 3.27071006353992e-14 0.6 0.0013815 1.17538402283413e-13 9.53646018526435e-14 1.72565003352412e-14 0.8 0.0015278 1.11185202159989e-13 9.42025018300674e-14 1.1667400226662e-14 1 0.001606 1.0770860209245e-13 9.26645018001888e-14 9.56170018575468e-15 1.2 0.0016577 1.05519302049918e-13 9.1346601774586e-14 8.62420016754192e-15 -0.2 -0.0002186336 1.42567802769658e-13 7.12962013850678e-14 6.87715013360206e-14 0 0. 1.45036202817611e-13 7.1254001384248e-14 7.1254001384248e-14 0.2 0.0003489461 1.43568102789091e-13 7.28678014155992e-14 6.80137013212989e-14 0.4 0.0008397029 1.36206902646085e-13 8.50756016527596e-14 4.79859009322198e-14 0.6 0.0012893 1.25617302440361e-13 9.24604017962237e-14 2.93892005709426e-14 0.8 0.0015763 1.17099502274886e-13 9.39822018257877e-14 1.88663003665147e-14 1 0.0017402 1.11634702168722e-13 9.31873018103452e-14 1.39117002702619e-14 1.2 0.0018398 1.08123402100508e-13 9.19336017859896e-14 1.15030002234682e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_gidl_lw.standard0000644000175000017500000000712214163340332025523 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288983e-15 1258.93 1.0927564006002e-13 9.53119059792933e-14 9.47688274884048e-15 1584.89 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995.26 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511.89 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162.28 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981.07 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011.87 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309.57 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943.28 1.09276664567897e-13 9.53132791854431e-14 9.4769250142676e-15 10000 1.09275783926895e-13 9.53115292200125e-14 9.47692246669211e-15 12589.25 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848.93 1.09276031582681e-13 9.5312631632698e-14 9.47692490115591e-15 19952.62 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118.86 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622.78 1.09275780162271e-13 9.53124450565604e-14 9.47698962083786e-15 39810.72 1.0927602238714e-13 9.53121377669757e-14 9.47676386157643e-15 50118.72 1.09276059717827e-13 9.53121749406823e-14 9.4768201715675e-15 63095.73 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432.82 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 125892.54 1.09276014059111e-13 9.53122795246647e-14 9.47691737651631e-15 158489.32 1.09276017792978e-13 9.53122179251379e-14 9.47693475144662e-15 199526.23 1.09276015634006e-13 9.53122645884509e-14 9.47688956928716e-15 251188.64 1.09276024555722e-13 9.53122712055276e-14 9.47692697934026e-15 316227.77 1.09276042175139e-13 9.53122527818468e-14 9.47694019069255e-15 398107.17 1.09276030621809e-13 9.53122648831165e-14 9.47692448737011e-15 501187.23 1.09276053176795e-13 9.53122645022573e-14 9.47691487106397e-15 630957.34 1.09276033737846e-13 9.53122575399747e-14 9.47691770957772e-15 794328.23 1.09276051870338e-13 9.53122497661945e-14 9.47692627748105e-15 1000000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288984e-15 1258930 1.0927564006002e-13 9.53119059792933e-14 9.47688274884049e-15 1584890 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995260 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511890 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162280 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981070 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011870 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309570 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943280 1.09276664567897e-13 9.5313279185443e-14 9.47692701791021e-15 10000000 1.09275783926895e-13 9.53115292200124e-14 9.47692405824154e-15 12589250 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848930 1.09276031582681e-13 9.53126316326979e-14 9.47692389695599e-15 19952620 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118860 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622780 1.09276283454338e-13 9.53124450565603e-14 9.47698962083786e-15 39810720 1.0927602238714e-13 9.53121377669757e-14 9.47676386157642e-15 50118720 1.09276059717827e-13 9.53121749406823e-14 9.47682017156749e-15 63095730 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432820 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_core_st.standard0000644000175000017500000000711514163340332025542 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_diode_st.standard0000644000175000017500000001653014163340332025515 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0002581651 7.48325714537687e-16 1.92697903743533e-16 5.22960910159536e-16 0 0. 4.49638708735109e-16 1.96906503825293e-16 1.96906503825293e-16 0.2 4.2928e-06 4.40058808549001e-16 1.90669503704127e-16 1.93287203754981e-16 0.4 5.7943e-06 4.34038408432043e-16 1.91568603721594e-16 1.86829203629522e-16 0.6 7.5229e-06 4.27660108308132e-16 1.93230903753887e-16 1.7926540348258e-16 0.8 9.5561e-06 4.23549608228278e-16 1.95193403792013e-16 1.73672503373927e-16 1 1.19512e-05 4.21207508182778e-16 1.97393903834762e-16 1.69610203295009e-16 1.2 1.47618e-05 4.20062708160538e-16 1.99821803881928e-16 1.66516203234902e-16 -0.2 -0.0004618633 9.04245417566732e-16 2.39375504650336e-16 6.45996512549743e-16 0 0. 9.04964917580709e-16 4.42732408600941e-16 4.42732408600941e-16 0.2 0.0003134119 7.83318615217493e-16 5.61408810906462e-16 1.93492203758964e-16 0.4 0.0003579843 7.7979861514911e-16 5.60032610879726e-16 1.9081840370702e-16 0.6 0.0003893329 7.7302041501743e-16 5.58698910853816e-16 1.84884703591746e-16 0.8 0.0004156346 7.64231114846681e-16 5.57341110827439e-16 1.76950103437601e-16 1 0.0004391009 7.57279714711636e-16 5.55923210799893e-16 1.70903403320132e-16 1.2 0.0004606899 7.52005414609173e-16 5.5444211077112e-16 1.66588903236315e-16 -0.2 -0.0003765672 9.55717718566682e-16 3.68086907150806e-16 5.73778011146758e-16 0 0. 9.77859818996835e-16 4.82552409374522e-16 4.82552409374522e-16 0.2 0.0004566842 9.14267017761421e-16 6.40183112436806e-16 2.56652404985974e-16 0.4 0.0005663636 8.88499917260845e-16 6.72123113057303e-16 1.96805603823333e-16 0.6 0.0006063037 8.82985417153715e-16 6.67211512961886e-16 1.95203303792205e-16 0.8 0.0006339789 8.74242616983869e-16 6.62301612866501e-16 1.90391503698726e-16 1 0.0006556186 8.62337816752595e-16 6.57479112772815e-16 1.82341903542347e-16 1.2 0.0006735714 8.51937416550547e-16 6.52731712680587e-16 1.75734303413982e-16 -0.2 -0.0002458339 9.63691718721592e-16 4.41409708575245e-16 5.10398509915487e-16 0 0. 9.78739819013931e-16 4.83845709399647e-16 4.83845709399647e-16 0.2 0.0003542694 9.57806218607255e-16 5.60736610893403e-16 3.83802007456103e-16 0.4 0.0005642628 9.05844017597788e-16 6.82464713258209e-16 2.06748804016499e-16 0.6 0.0006139079 8.992095174689e-16 6.79411613198896e-16 2.02000703924258e-16 0.8 0.0006432217 8.9397351736718e-16 6.74226313098162e-16 2.00880003902486e-16 1 0.0006647662 8.86166517215514e-16 6.69096912998513e-16 1.97150703830037e-16 1.2 0.0006818546 8.74313916985254e-16 6.64057512900613e-16 1.89301703677555e-16 -0.2 -0.000278484 7.5479881466344e-16 1.91361603717573e-16 5.31273910321032e-16 0 0. 4.33919608429735e-16 1.88858003668935e-16 1.88858003668935e-16 0.2 5.029574e-07 4.30364808360676e-16 1.80779503511995e-16 1.93581703760702e-16 0.4 7.519116e-07 4.23197308221433e-16 1.80401603504653e-16 1.87183003636395e-16 0.6 1.0793e-06 4.15508608072065e-16 1.80657503509625e-16 1.79641003489877e-16 0.8 1.5119e-06 4.09972407964514e-16 1.81097503518172e-16 1.74068903381628e-16 1 2.0802e-06 4.06102807889339e-16 1.81668603529267e-16 1.70032303303209e-16 1.2 2.8209e-06 4.03336507835599e-16 1.82370403542901e-16 1.66967603243672e-16 -0.2 -0.0005730027 9.13018917737174e-16 2.05166403985758e-16 6.89630113397411e-16 0 0. 9.24427117958801e-16 4.53021008800817e-16 4.53021008800817e-16 0.2 0.0003593361 7.98638315515108e-16 5.80184611271218e-16 1.91062703711766e-16 0.4 0.0004118927 7.97132715485859e-16 5.79660511261037e-16 1.89643703684199e-16 0.6 0.0004508408 7.91282515372207e-16 5.79263511253324e-16 1.83715303569028e-16 0.8 0.0004841119 7.8331231521737e-16 5.78746211243275e-16 1.75763903414557e-16 1 0.0005140833 7.77105215096785e-16 5.7808711123047e-16 1.69699403296742e-16 1.2 0.000541782 7.7251491500761e-16 5.77290311214991e-16 1.65373803212709e-16 -0.2 -0.0004842527 9.60759718664632e-16 3.40092806606966e-16 6.07239211796807e-16 0 0. 9.94858519327068e-16 4.9155680954945e-16 4.9155680954945e-16 0.2 0.0005725708 9.19463717862377e-16 6.88392813373374e-16 2.14079004158902e-16 0.4 0.0006723184 9.08057617640791e-16 6.94707013496039e-16 1.94967903787632e-16 0.6 0.0007186118 9.02749317537667e-16 6.89495613394798e-16 1.9383430376561e-16 0.8 0.0007509675 8.93939117366512e-16 6.84407013295942e-16 1.89081603673279e-16 1 0.0007762008 8.81924217133099e-16 6.79401413198698e-16 1.8105210351729e-16 1.2 0.0007970751 8.71397516928597e-16 6.74469013102877e-16 1.74450603389043e-16 -0.2 -0.000314504 9.72827518899073e-16 4.45617308656986e-16 5.15996710024243e-16 0 0. 9.89872019230195e-16 4.89788509515098e-16 4.89788509515098e-16 0.2 0.0004547964 9.6449411873718e-16 5.86418911392332e-16 3.65315607096969e-16 0.4 0.0006708635 9.1599601779501e-16 6.98796613575488e-16 2.01220503909101e-16 0.6 0.0007248794 9.11158717701036e-16 6.93540313473374e-16 2.0052400389557e-16 0.8 0.0007592143 9.06011217601036e-16 6.88199713369622e-16 1.99621303878033e-16 1 0.0007844847 8.98195017449191e-16 6.82969713268019e-16 1.95952703806764e-16 1.2 0.0008044263 8.86305617218216e-16 6.77831313168196e-16 1.88134703654884e-16 -0.2 -0.0002319172 7.68950214938358e-16 2.12037304119238e-16 5.25823710215152e-16 0 0. 5.3726081043734e-16 2.43635704733099e-16 2.43635704733099e-16 0.2 2.79646e-05 4.93848809593977e-16 2.47977904817455e-16 1.92741103744372e-16 0.4 3.44421e-05 4.88928809498396e-16 2.50533604867104e-16 1.85711803607814e-16 0.6 4.05223e-05 4.84208109406687e-16 2.53913704932769e-16 1.78102103459981e-16 0.8 4.67213e-05 4.81663409357252e-16 2.57446405001399e-16 1.72504003351227e-16 1 5.31725e-05 4.80708609338703e-16 2.61013705070701e-16 1.68442003272315e-16 1.2 5.99289e-05 4.80742709339365e-16 2.64576505139915e-16 1.65351803212281e-16 -0.2 -0.0003141608 9.04696617575497e-16 2.83793105513235e-16 6.021068116971e-16 0 0. 8.90232617294506e-16 4.35017708451068e-16 4.35017708451068e-16 0.2 0.0002573794 7.9732481548959e-16 5.50064610686078e-16 2.19887204271738e-16 0.4 0.0003138737 7.74756815051163e-16 5.50269610690061e-16 1.95238503792889e-16 0.6 0.0003424032 7.63720414836759e-16 5.46521210617241e-16 1.87195203636632e-16 0.8 0.0003636781 7.52926914627075e-16 5.43463810557845e-16 1.78851803474545e-16 1 0.0003816348 7.44571014464745e-16 5.4069471050405e-16 1.72693403354906e-16 1.2 0.0003976407 7.38127514339567e-16 5.3804891045265e-16 1.68337003270275e-16 -0.2 -0.0002591038 9.40620918273397e-16 3.49144006782804e-16 5.76727711204061e-16 0 0. 9.55024518553215e-16 4.70471109139819e-16 4.70471109139819e-16 0.2 0.0003083354 9.12230417721856e-16 6.00562111667091e-16 2.94115205713762e-16 0.4 0.0004330203 8.7646331702701e-16 6.4180221246826e-16 2.1429250416305e-16 0.6 0.0004820345 8.63323916771752e-16 6.40162812436412e-16 2.01406103912707e-16 0.8 0.0005105435 8.52060916552946e-16 6.35289812341744e-16 1.93954203767939e-16 1 0.0005308487 8.39147716302082e-16 6.30303812244882e-16 1.85061303595177e-16 1.2 0.0005468788 8.28288816091127e-16 6.25461012150801e-16 1.78122203460371e-16 -0.2 -0.0001797537 9.45984618377597e-16 3.94542807664764e-16 5.38465310460739e-16 0 0. 9.61719418683276e-16 4.74783809223602e-16 4.74783809223602e-16 0.2 0.0002462543 9.41472018289931e-16 5.70671311086404e-16 3.56584906927358e-16 0.4 0.0004048802 9.05982717600482e-16 6.47564712580208e-16 2.41527604692145e-16 0.6 0.0004722415 8.89417117278663e-16 6.56239312748729e-16 2.1466520417029e-16 0.8 0.0005081131 8.80017017096048e-16 6.53297012691569e-16 2.06984004021068e-16 1 0.0005313805 8.7039441690911e-16 6.48567712599693e-16 2.01001203904841e-16 1.2 0.0005484156 8.57670616661925e-16 6.43591712503025e-16 1.92223103734309e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_core_lt.standard0000644000175000017500000000416114163340332025323 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 4.381406e-07 0. 0. -4.381406e-07 0.35 1.517e-06 0. 0. -1.517e-06 0.45 2.8393e-06 0. 0. -2.8393e-06 0.55 4.1351e-06 0. 0. -4.1351e-06 0.65 5.3094e-06 0. 0. -5.3094e-06 0.75 6.3294e-06 0. 0. -6.3294e-06 0.85 7.1894e-06 0. 0. -7.1894e-06 0.95 7.8971e-06 0. 0. -7.8971e-06 1.05000 8.4666e-06 0. 0. -8.4666e-06 1.15000 8.9145e-06 0. 0. -8.9145e-06 0.25 8.616908e-07 0. 0. -8.616908e-07 0.35 3.6473e-06 0. 0. -3.6473e-06 0.45 8.9012e-06 0. 0. -8.9012e-06 0.55 1.64937e-05 0. 0. -1.64937e-05 0.65 2.60768e-05 0. 0. -2.60768e-05 0.75 3.72449e-05 0. 0. -3.72449e-05 0.85 4.96065e-05 0. 0. -4.96065e-05 0.95 6.2809e-05 0. 0. -6.2809e-05 1.05000 7.65378e-05 0. 0. -7.65378e-05 1.15000 9.05013e-05 0. 0. -9.05013e-05 0.25 1.8015e-07 0. 0. -1.8015e-07 0.35 1.5207e-06 0. 0. -1.5207e-06 0.45 3.5645e-06 0. 0. -3.5645e-06 0.55 5.5873e-06 0. 0. -5.5873e-06 0.65 7.3977e-06 0. 0. -7.3977e-06 0.75 8.9459e-06 0. 0. -8.9459e-06 0.85 1.02305e-05 0. 0. -1.02305e-05 0.95 1.12705e-05 0. 0. -1.12705e-05 1.05000 1.20933e-05 0. 0. -1.20933e-05 1.15000 1.27286e-05 0. 0. -1.27286e-05 0.25 3.561115e-07 0. 0. -3.561115e-07 0.35 3.2011e-06 0. 0. -3.2011e-06 0.45 9.9841e-06 0. 0. -9.9841e-06 0.55 2.04766e-05 0. 0. -2.04766e-05 0.65 3.39866e-05 0. 0. -3.39866e-05 0.75 4.97761e-05 0. 0. -4.97761e-05 0.85 6.71994e-05 0. 0. -6.71994e-05 0.95 8.57313e-05 0. 0. -8.57313e-05 1.05000 0.0001049515 0. 0. -0.0001049515 1.15000 0.0001245139 0. 0. -0.0001245139 0.25 7.838015e-07 0. 0. -7.838015e-07 0.35 1.5254e-06 0. 0. -1.5254e-06 0.45 2.3204e-06 0. 0. -2.3204e-06 0.55 3.0893e-06 0. 0. -3.0893e-06 0.65 3.7936e-06 0. 0. -3.7936e-06 0.75 4.4164e-06 0. 0. -4.4164e-06 0.85 4.9525e-06 0. 0. -4.9525e-06 0.95 5.4038e-06 0. 0. -5.4038e-06 1.05000 5.7759e-06 0. 0. -5.7759e-06 1.15000 6.0763e-06 0. 0. -6.0763e-06 0.25 1.9089e-06 0. 0. -1.9089e-06 0.35 4.6434e-06 0. 0. -4.6434e-06 0.45 8.8e-06 0. 0. -8.8e-06 0.55 1.42838e-05 0. 0. -1.42838e-05 0.65 2.09061e-05 0. 0. -2.09061e-05 0.75 2.84305e-05 0. 0. -2.84305e-05 0.85 3.66015e-05 0. 0. -3.66015e-05 0.95 4.51629e-05 0. 0. -4.51629e-05 1.05000 5.38692e-05 0. 0. -5.38692e-05 1.15000 6.24946e-05 0. 0. -6.24946e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_ig_lw.standard0000644000175000017500000002072314163340332024774 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -5.868844e-10 1.2844e-09 -1.10583e-10 -5.868844e-10 0.1 4.2042e-06 5.891077e-10 -1.169836e-10 -4.2046e-06 0.2 4.5379e-06 5.175808e-10 -1.172646e-10 -4.5383e-06 0.3 4.8246e-06 5.072616e-10 -1.173088e-10 -4.825e-06 0.4 5.1034e-06 5.014357e-10 -1.173554e-10 -5.1038e-06 0.5 5.376e-06 4.970379e-10 -1.174046e-10 -5.3764e-06 0.6 5.6437e-06 4.933602e-10 -1.174551e-10 -5.6441e-06 0.7 5.9073e-06 4.901088e-10 -1.175063e-10 -5.9077e-06 0.8 6.1673e-06 4.871354e-10 -1.175577e-10 -6.1677e-06 0.9 6.4241e-06 4.843568e-10 -1.176091e-10 -6.4244e-06 1.00000 6.6779e-06 4.817223e-10 -1.176605e-10 -6.6782e-06 1.10000 6.929e-06 4.791996e-10 -1.177118e-10 -6.9293e-06 1.20000 7.1774e-06 4.767669e-10 -1.177628e-10 -7.1778e-06 0. -1.80825e-08 3.62181e-08 -5.31314e-11 -1.80825e-08 0.1 9.83292e-05 2.13162e-08 -6.15327e-11 -9.83505e-05 0.2 0.0001417673 1.19985e-08 -7.01294e-11 -0.0001417792 0.3 0.0001516465 9.5005e-09 -7.3229e-11 -0.000151656 0.4 0.0001564217 9.1394e-09 -7.36846e-11 -0.0001564308 0.5 0.0001606245 9.0423e-09 -7.38355e-11 -0.0001606335 0.6 0.00016457 8.9866e-09 -7.39471e-11 -0.0001645789 0.7 0.0001683296 8.9418e-09 -7.40519e-11 -0.0001683384 0.8 0.0001719394 8.9014e-09 -7.41553e-11 -0.0001719482 0.9 0.0001754238 8.8635e-09 -7.42586e-11 -0.0001754326 1.00000 0.000178801 8.8271e-09 -7.4362e-11 -0.0001788098 1.10000 0.0001820852 8.7919e-09 -7.44655e-11 -0.0001820939 1.20000 0.0001852876 8.7575e-09 -7.45691e-11 -0.0001852963 0. -8.31961e-08 1.664292e-07 -3.70233e-11 -8.31961e-08 0.1 0.0002148066 1.13603e-07 -3.99565e-11 -0.0002149202 0.2 0.000380622 6.95914e-08 -4.35242e-11 -0.0003806915 0.3 0.0004885231 4.36857e-08 -4.75105e-11 -0.0004885667 0.4 0.0005389461 3.18704e-08 -5.06064e-11 -0.0005389779 0.5 0.0005601517 2.80963e-08 -5.19179e-11 -0.0005601798 0.6 0.0005736612 2.70185e-08 -5.23444e-11 -0.0005736882 0.7 0.0005849626 2.66438e-08 -5.25156e-11 -0.0005849892 0.8 0.0005952517 2.64647e-08 -5.26152e-11 -0.0005952781 0.9 0.0006048914 2.63489e-08 -5.26921e-11 -0.0006049177 1.00000 0.0006140389 2.62571e-08 -5.2761e-11 -0.0006140651 1.10000 0.0006227838 2.61758e-08 -5.28267e-11 -0.0006228099 1.20000 0.0006311868 2.60998e-08 -5.28912e-11 -0.0006312129 0. -2.47724e-07 4.954808e-07 -3.28889e-11 -2.47724e-07 0.1 0.0002958174 3.564274e-07 -3.39135e-11 -0.0002961738 0.2 0.0005583925 2.297289e-07 -3.53746e-11 -0.0005586222 0.3 0.0007793246 1.483865e-07 -3.7199e-11 -0.000779473 0.4 0.0009478482 9.97224e-08 -3.92741e-11 -0.0009479479 0.5 0.0010558 7.29754e-08 -4.12402e-11 -0.0010559 0.6 0.0011145 6.03853e-08 -4.25948e-11 -0.0011146 0.7 0.0011481 5.52104e-08 -4.32855e-11 -0.0011482 0.8 0.0011719 5.31158e-08 -4.36021e-11 -0.001172 0.9 0.0011916 5.21879e-08 -4.37588e-11 -0.0011917 1.00000 0.0012092 5.17122e-08 -4.38508e-11 -0.0012093 1.10000 0.0012255 5.14238e-08 -4.39156e-11 -0.0012256 1.20000 0.0012408 5.1219e-08 -4.39682e-11 -0.0012409 0. -5.68143e-11 1.55671e-10 -4.20424e-11 -5.68143e-11 0.1 8.538494e-07 8.84227e-11 -4.25599e-11 -8.538953e-07 0.2 9.462005e-07 8.61417e-11 -4.25606e-11 -9.462441e-07 0.3 1.036e-06 8.53627e-11 -4.25635e-11 -1.036e-06 0.4 1.1241e-06 8.49029e-11 -4.25676e-11 -1.1241e-06 0.5 1.2112e-06 8.45829e-11 -4.25723e-11 -1.2112e-06 0.6 1.2976e-06 8.43364e-11 -4.25772e-11 -1.2976e-06 0.7 1.3835e-06 8.41334e-11 -4.25823e-11 -1.3836e-06 0.8 1.4692e-06 8.39584e-11 -4.25875e-11 -1.4692e-06 0.9 1.5546e-06 8.38026e-11 -4.25928e-11 -1.5546e-06 1.00000 1.6398e-06 8.36607e-11 -4.2598e-11 -1.6398e-06 1.10000 1.7248e-06 8.35294e-11 -4.26033e-11 -1.7248e-06 1.20000 1.8097e-06 8.34064e-11 -4.26087e-11 -1.8097e-06 0. -7.3226e-09 1.46652e-08 -2.00997e-11 -7.3226e-09 0.1 0.0001217071 8.1744e-09 -2.3669e-11 -0.0001217153 0.2 0.0001614193 4.7267e-09 -2.67134e-11 -0.000161424 0.3 0.0001693533 4.3917e-09 -2.70456e-11 -0.0001693576 0.4 0.0001755737 4.3519e-09 -2.7084e-11 -0.000175578 0.5 0.0001812821 4.3271e-09 -2.71148e-11 -0.0001812864 0.6 0.000186628 4.3064e-09 -2.71458e-11 -0.0001866322 0.7 0.0001916941 4.2879e-09 -2.7177e-11 -0.0001916984 0.8 0.0001965369 4.2708e-09 -2.72085e-11 -0.0001965412 0.9 0.0002011968 4.2545e-09 -2.72401e-11 -0.000201201 1.00000 0.000205704 4.239e-09 -2.72718e-11 -0.0002057082 1.10000 0.0002100815 4.2239e-09 -2.73035e-11 -0.0002100857 1.20000 0.0002143473 4.2092e-09 -2.73353e-11 -0.0002143515 0. -3.72423e-08 7.4498e-08 -1.33851e-11 -3.72423e-08 0.1 0.0003015676 5.03051e-08 -1.45227e-11 -0.0003016179 0.2 0.0005279207 3.03654e-08 -1.59251e-11 -0.000527951 0.3 0.0006638268 1.89207e-08 -1.74779e-11 -0.0006638457 0.4 0.0007146337 1.51037e-08 -1.83108e-11 -0.0007146488 0.5 0.0007381866 1.45071e-08 -1.84679e-11 -0.0007382011 0.6 0.0007568689 1.43858e-08 -1.85058e-11 -0.0007568833 0.7 0.000773639 1.43295e-08 -1.85279e-11 -0.0007736533 0.8 0.0007891358 1.42863e-08 -1.85475e-11 -0.0007891501 0.9 0.0008036455 1.42474e-08 -1.85665e-11 -0.0008036598 1.00000 0.0008173512 1.42104e-08 -1.85855e-11 -0.0008173654 1.10000 0.0008303861 1.41747e-08 -1.86045e-11 -0.0008304002 1.20000 0.0008428519 1.41399e-08 -1.86234e-11 -0.000842866 0. -1.14253e-07 2.285176e-07 -1.15492e-11 -1.14253e-07 0.1 0.0004222979 1.636931e-07 -1.20134e-11 -0.0004224616 0.2 0.0007948384 1.049758e-07 -1.2611e-11 -0.0007949433 0.3 0.0011046 6.72977e-08 -1.33297e-11 -0.0011047 0.4 0.0013336 4.48893e-08 -1.41351e-11 -0.0013337 0.5 0.0014645 3.38994e-08 -1.4799e-11 -0.0014645 0.6 0.0015273 3.03681e-08 -1.50874e-11 -0.0015273 0.7 0.0015667 2.94723e-08 -1.51719e-11 -0.0015667 0.8 0.0015987 2.91992e-08 -1.52021e-11 -0.0015987 0.9 0.0016273 2.90744e-08 -1.5219e-11 -0.0016273 1.00000 0.0016536 2.89905e-08 -1.52325e-11 -0.0016536 1.10000 0.0016782 2.892e-08 -1.52448e-11 -0.0016783 1.20000 0.0017015 2.88549e-08 -1.52568e-11 -0.0017015 0. -4.9789e-09 1.02515e-08 -2.938e-10 -4.9789e-09 0.1 1.41491e-05 5.0115e-09 -3.354761e-10 -1.41537e-05 0.2 1.67149e-05 3.5712e-09 -3.475165e-10 -1.67181e-05 0.3 1.75175e-05 3.1778e-09 -3.50016e-10 -1.75203e-05 0.4 1.81381e-05 3.0245e-09 -3.509806e-10 -1.81408e-05 0.5 1.8725e-05 2.9458e-09 -3.51603e-10 -1.87276e-05 0.6 1.92963e-05 2.8961e-09 -3.521172e-10 -1.92988e-05 0.7 1.98559e-05 2.86e-09 -3.525878e-10 -1.98584e-05 0.8 2.04053e-05 2.8309e-09 -3.530378e-10 -2.04077e-05 0.9 2.09454e-05 2.8059e-09 -3.534764e-10 -2.09479e-05 1.00000 2.14771e-05 2.7836e-09 -3.53908e-10 -2.14796e-05 1.10000 2.20009e-05 2.7629e-09 -3.543349e-10 -2.20033e-05 1.20000 2.25173e-05 2.7435e-09 -3.547581e-10 -2.25197e-05 0. -5.65952e-08 1.133472e-07 -1.567802e-10 -5.65952e-08 0.1 8.11288e-05 7.16291e-08 -1.769236e-10 -8.12003e-05 0.2 0.0001254697 4.44825e-08 -1.971162e-10 -0.000125514 0.3 0.0001441729 3.22732e-08 -2.112455e-10 -0.0001442049 0.4 0.000152323 2.70652e-08 -2.187955e-10 -0.0001523498 0.5 0.0001570807 2.46528e-08 -2.226119e-10 -0.0001571051 0.6 0.0001606942 2.33904e-08 -2.247199e-10 -0.0001607173 0.7 0.0001638347 2.26491e-08 -2.260457e-10 -0.0001638571 0.8 0.0001667287 2.21687e-08 -2.269867e-10 -0.0001667507 0.9 0.0001694673 2.18304e-08 -2.27723e-10 -0.0001694889 1.00000 0.0001720937 2.15751e-08 -2.283426e-10 -0.000172115 1.10000 0.000174632 2.13711e-08 -2.288917e-10 -0.0001746531 1.20000 0.0001770972 2.12003e-08 -2.293961e-10 -0.0001771182 0. -2.259421e-07 4.52002e-07 -1.179023e-10 -2.259421e-07 0.1 0.0001510955 3.145982e-07 -1.258559e-10 -0.00015141 0.2 0.0002675778 2.020978e-07 -1.349204e-10 -0.0002677797 0.3 0.0003456589 1.379026e-07 -1.43938e-10 -0.0003457967 0.4 0.0003927299 1.036115e-07 -1.51666e-10 -0.0003928334 0.5 0.0004204623 8.50885e-08 -1.575188e-10 -0.0004205472 0.6 0.0004378642 7.4657e-08 -1.616383e-10 -0.0004379387 0.7 0.0004500229 6.84592e-08 -1.644706e-10 -0.0004500912 0.8 0.0004594543 6.45661e-08 -1.66441e-10 -0.0004595187 0.9 0.0004673687 6.19877e-08 -1.678552e-10 -0.0004674305 1.00000 0.0004743658 6.01952e-08 -1.689113e-10 -0.0004744259 1.10000 0.0004807604 5.88933e-08 -1.697334e-10 -0.0004808191 1.20000 0.0004867288 5.791e-08 -1.70399e-10 -0.0004867866 0. -6.395177e-07 1.2791e-06 -1.112581e-10 -6.395177e-07 0.1 0.0002018293 9.279508e-07 -1.130056e-10 -0.0002027571 0.2 0.000378979 6.104342e-07 -1.162139e-10 -0.0003795893 0.3 0.0005229848 4.133303e-07 -1.203461e-10 -0.000523398 0.4 0.0006315363 2.980835e-07 -1.247981e-10 -0.0006318342 0.5 0.0007088115 2.303075e-07 -1.290409e-10 -0.0007090417 0.6 0.0007624828 1.89369e-07 -1.327398e-10 -0.000762672 0.7 0.0008001548 1.637725e-07 -1.357753e-10 -0.0008003185 0.8 0.0008276041 1.471705e-07 -1.381796e-10 -0.0008277512 0.9 0.0008486442 1.360062e-07 -1.400551e-10 -0.0008487801 1.00000 0.000865626 1.282365e-07 -1.41517e-10 -0.0008657541 1.10000 0.0008799654 1.226537e-07 -1.426666e-10 -0.0008800879 1.20000 0.0008925185 1.185223e-07 -1.435843e-10 -0.0008926369 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_ig_st.standard0000644000175000017500000000655014163340332025034 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.540e-28 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 3.053e-23 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 5.6522e-18 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 -2.105093e-13 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 -4.6257e-09 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 -2.67554e-08 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 -9.37338e-08 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 2.473e-24 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 4.196e-19 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 9.12097e-14 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.30939e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26076e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.0001237622 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391901 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 0. 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 0. 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 4.828e-22 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 -1.2134e-15 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 -2.014e-09 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 -1.24325e-08 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 -4.42635e-08 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 0. 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 1.760e-24 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 2.86759e-17 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 5.646713e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79726e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744505 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960638 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 1.271e-21 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 5.9204e-18 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 2.43614e-14 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 -2.81117e-11 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 -1.30895e-08 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 -6.80502e-08 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 -2.31506e-07 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 3.7661e-18 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 1.75002e-14 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 1.000298e-10 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.136918e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.16076e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.18156e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.3521e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_gidl_st.standard0000644000175000017500000000540114163340332025317 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 9.50421e-08 0. -9.70565e-13 -9.50411e-08 0.35 1.694e-06 0. -5.139475e-13 -1.694e-06 0.45 1.00047e-05 0. -2.59264e-13 -1.00047e-05 0.55 2.32464e-05 0. -1.238631e-13 -2.32464e-05 0.65 3.69357e-05 0. -5.56589e-14 -3.69357e-05 0.75 4.94938e-05 0. -2.33353e-14 -4.94938e-05 0.85 6.04692e-05 0. -9.0412e-15 -6.04692e-05 0.95 6.97947e-05 0. -3.2005e-15 -6.97947e-05 1.05000 7.75556e-05 0. -1.021e-15 -7.75556e-05 1.15000 8.38992e-05 0. -2.887232e-16 -8.38992e-05 0.25 4.067374e-07 0. -4.19186e-11 -4.066955e-07 0.35 5.6403e-06 0. -2.94637e-11 -5.6402e-06 0.45 2.87726e-05 0. -2.0326e-11 -2.87726e-05 0.55 7.23274e-05 0. -1.37391e-11 -7.23274e-05 0.65 0.0001290358 0. -9.0818e-12 -0.0001290358 0.75 0.0001926039 0. -5.8581e-12 -0.0001926038 0.85 0.0002591894 0. -3.6784e-12 -0.0002591894 0.95 0.0003264522 0. -2.2423e-12 -0.0003264522 1.05000 0.0003928885 0. -1.3229e-12 -0.0003928885 1.15000 0.0004575116 0. -7.526302e-13 -0.0004575116 0.25 7.9977e-09 0. -9.641654e-13 -7.9968e-09 0.35 5.161146e-07 0. -5.103061e-13 -5.161141e-07 0.45 8.6001e-06 0. -2.572845e-13 -8.6001e-06 0.55 2.61873e-05 0. -1.22841e-13 -2.61873e-05 0.65 4.45887e-05 0. -5.51609e-14 -4.45887e-05 0.75 6.12255e-05 0. -2.31081e-14 -6.12255e-05 0.85 7.55827e-05 0. -8.945e-15 -7.55827e-05 0.95 8.76659e-05 0. -3.1632e-15 -8.76659e-05 1.05000 9.76507e-05 0. -1.0079e-15 -9.76507e-05 1.15000 0.000105769 0. -2.8461e-16 -0.000105769 0.25 5.09581e-08 0. -4.17634e-11 -5.09163e-08 0.35 2.4204e-06 0. -2.9349e-11 -2.4204e-06 0.45 2.49749e-05 0. -2.02426e-11 -2.49749e-05 0.55 7.57847e-05 0. -1.36796e-11 -7.57847e-05 0.65 0.000143175 0. -9.0402e-12 -0.000143175 0.75 0.000218537 0. -5.8296e-12 -0.000218537 0.85 0.0002972966 0. -3.6594e-12 -0.0002972966 0.95 0.000376752 0. -2.23e-12 -0.000376752 1.05000 0.0004551535 0. -1.3151e-12 -0.0004551535 1.15000 0.0005313539 0. -7.479084e-13 -0.0005313539 0.25 8.971942e-07 0. -9.808658e-13 -8.971932e-07 0.35 4.5773e-06 0. -5.198123e-13 -4.5773e-06 0.45 1.21859e-05 0. -2.624541e-13 -1.21859e-05 0.55 2.15979e-05 0. -1.255116e-13 -2.15979e-05 0.65 3.10797e-05 0. -5.64629e-14 -3.10797e-05 0.75 3.98541e-05 0. -2.37025e-14 -3.98541e-05 0.85 4.76181e-05 0. -9.1968e-15 -4.76181e-05 0.95 5.42895e-05 0. -3.261e-15 -5.42895e-05 1.05000 5.98943e-05 0. -1.0423e-15 -5.98943e-05 1.15000 6.45116e-05 0. -2.954074e-16 -6.45116e-05 0.25 2.9244e-06 0. -4.21674e-11 -2.9243e-06 0.35 1.37888e-05 0. -2.96477e-11 -1.37888e-05 0.45 3.8712e-05 0. -2.04598e-11 -3.8712e-05 0.55 7.66819e-05 0. -1.38346e-11 -7.66819e-05 0.65 0.000123453 0. -9.1486e-12 -0.000123453 0.75 0.0001751073 0. -5.9038e-12 -0.0001751073 0.85 0.0002288787 0. -3.7089e-12 -0.0002288787 0.95 0.0002829279 0. -2.2621e-12 -0.0002829279 1.05000 0.0003360327 0. -1.3353e-12 -0.0003360327 1.15000 0.000387382 0. -7.602274e-13 -0.000387382 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1g_lt.standard0000644000175000017500000004451314163340332025136 0ustar carstencarstenFreq N(g) 100.00000 2.528782369e-29 125.89254 2.528782369e-29 158.48932 2.528782369e-29 199.52623 2.528782369e-29 251.18864 2.528782369e-29 316.22777 2.528782369e-29 398.10717 2.528782369e-29 501.18723 2.528782369e-29 630.95734 2.528782369e-29 794.32823 2.528782369e-29 1000 2.528782369e-29 1258.93 2.528782369e-29 1584.89 2.528782369e-29 1995.26 2.528782369e-29 2511.89 2.528782369e-29 3162.28 2.528782369e-29 3981.07 2.528782369e-29 5011.87 2.528782369e-29 6309.57 2.528782369e-29 7943.28 2.528782369e-29 10000 2.528782369e-29 12589.25 2.528782369e-29 15848.93 2.528782369e-29 19952.62 2.528782369e-29 25118.86 2.528782369e-29 31622.78 2.528782369e-29 39810.72 2.528782369e-29 50118.72 2.528782369e-29 63095.73 2.528782369e-29 79432.82 2.528782369e-29 100000 2.528782369e-29 125892.54 2.528782369e-29 158489.32 2.528782369e-29 199526.23 2.528782369e-29 251188.64 2.528782369e-29 316227.77 2.528782369e-29 398107.17 2.528782369e-29 501187.23 2.528782369e-29 630957.34 2.528782369e-29 794328.23 2.528782369e-29 1000000 2.528782369e-29 1258930 2.528782369e-29 1584890 2.528782369e-29 1995260 2.528782369e-29 2511890 2.528782369e-29 3162280 2.528782369e-29 3981070 2.528782369e-29 5011870 2.528782369e-29 6309570 2.528782369e-29 7943280 2.528782369e-29 10000000 2.528782369e-29 12589250 2.528782369e-29 15848930 2.528782369e-29 19952620 2.528782369e-29 25118860 2.528782369e-29 31622780 2.528782369e-29 39810720 2.528782369e-29 50118720 2.528782369e-29 63095730 2.528782369e-29 79432820 2.528782369e-29 100000000 2.528782369e-29 100.00000 1.7446711396e-28 125.89254 1.7446711396e-28 158.48932 1.7446711396e-28 199.52623 1.7446711396e-28 251.18864 1.7446711396e-28 316.22777 1.7446711396e-28 398.10717 1.7446711396e-28 501.18723 1.7446711396e-28 630.95734 1.7446711396e-28 794.32823 1.7446711396e-28 1000 1.7446711396e-28 1258.93 1.7446711396e-28 1584.89 1.7446711396e-28 1995.26 1.7446711396e-28 2511.89 1.7446711396e-28 3162.28 1.7446711396e-28 3981.07 1.7446711396e-28 5011.87 1.7446711396e-28 6309.57 1.7446711396e-28 7943.28 1.7446711396e-28 10000 1.7446711396e-28 12589.25 1.7446711396e-28 15848.93 1.7446711396e-28 19952.62 1.7446711396e-28 25118.86 1.7446711396e-28 31622.78 1.7446711396e-28 39810.72 1.7446711396e-28 50118.72 1.7446711396e-28 63095.73 1.7446711396e-28 79432.82 1.7446711396e-28 100000 1.7446711396e-28 125892.54 1.7446711396e-28 158489.32 1.7446711396e-28 199526.23 1.7446711396e-28 251188.64 1.7446711396e-28 316227.77 1.7446711396e-28 398107.17 1.7446711396e-28 501187.23 1.7446711396e-28 630957.34 1.7446711396e-28 794328.23 1.7446711396e-28 1000000 1.7446711396e-28 1258930 1.7446711396e-28 1584890 1.7446711396e-28 1995260 1.7446711396e-28 2511890 1.7446711396e-28 3162280 1.7446711396e-28 3981070 1.7446711396e-28 5011870 1.7446711396e-28 6309570 1.7446711396e-28 7943280 1.7446711396e-28 10000000 1.7446711396e-28 12589250 1.7446711396e-28 15848930 1.7446711396e-28 19952620 1.7446711396e-28 25118860 1.7446711396e-28 31622780 1.7446711396e-28 39810720 1.7446711396e-28 50118720 1.7446711396e-28 63095730 1.7446711396e-28 79432820 1.7446711396e-28 100000000 1.7446711396e-28 100.00000 4.4437483204e-28 125.89254 4.4437483204e-28 158.48932 4.4437483204e-28 199.52623 4.4437483204e-28 251.18864 4.4437483204e-28 316.22777 4.4437483204e-28 398.10717 4.4437483204e-28 501.18723 4.4437483204e-28 630.95734 4.4437483204e-28 794.32823 4.4437483204e-28 1000 4.4437483204e-28 1258.93 4.4437483204e-28 1584.89 4.4437483204e-28 1995.26 4.4437483204e-28 2511.89 4.4437483204e-28 3162.28 4.4437483204e-28 3981.07 4.4437483204e-28 5011.87 4.4437483204e-28 6309.57 4.4437483204e-28 7943.28 4.4437483204e-28 10000 4.4437483204e-28 12589.25 4.4437483204e-28 15848.93 4.4437483204e-28 19952.62 4.4437483204e-28 25118.86 4.4437483204e-28 31622.78 4.4437483204e-28 39810.72 4.4437483204e-28 50118.72 4.4437483204e-28 63095.73 4.4437483204e-28 79432.82 4.4437483204e-28 100000 4.4437483204e-28 125892.54 4.4437483204e-28 158489.32 4.4437483204e-28 199526.23 4.4437483204e-28 251188.64 4.4437483204e-28 316227.77 4.4437483204e-28 398107.17 4.4437483204e-28 501187.23 4.4437483204e-28 630957.34 4.4437483204e-28 794328.23 4.4437483204e-28 1000000 4.4437483204e-28 1258930 4.4437483204e-28 1584890 4.4437483204e-28 1995260 4.4437483204e-28 2511890 4.4437483204e-28 3162280 4.4437483204e-28 3981070 4.4437483204e-28 5011870 4.4437483204e-28 6309570 4.4437483204e-28 7943280 4.4437483204e-28 10000000 4.4437483204e-28 12589250 4.4437483204e-28 15848930 4.4437483204e-28 19952620 4.4437483204e-28 25118860 4.4437483204e-28 31622780 4.4437483204e-28 39810720 4.4437483204e-28 50118720 4.4437483204e-28 63095730 4.4437483204e-28 79432820 4.4437483204e-28 100000000 4.4437483204e-28 100.00000 8.4188763409e-28 125.89254 8.4188763409e-28 158.48932 8.4188763409e-28 199.52623 8.4188763409e-28 251.18864 8.4188763409e-28 316.22777 8.4188763409e-28 398.10717 8.4188763409e-28 501.18723 8.4188763409e-28 630.95734 8.4188763409e-28 794.32823 8.4188763409e-28 1000 8.4188763409e-28 1258.93 8.4188763409e-28 1584.89 8.4188763409e-28 1995.26 8.4188763409e-28 2511.89 8.4188763409e-28 3162.28 8.4188763409e-28 3981.07 8.4188763409e-28 5011.87 8.4188763409e-28 6309.57 8.4188763409e-28 7943.28 8.4188763409e-28 10000 8.4188763409e-28 12589.25 8.4188763409e-28 15848.93 8.4188763409e-28 19952.62 8.4188763409e-28 25118.86 8.4188763409e-28 31622.78 8.4188763409e-28 39810.72 8.4188763409e-28 50118.72 8.4188763409e-28 63095.73 8.4188763409e-28 79432.82 8.4188763409e-28 100000 8.4188763409e-28 125892.54 8.4188763409e-28 158489.32 8.4188763409e-28 199526.23 8.4188763409e-28 251188.64 8.4188763409e-28 316227.77 8.4188763409e-28 398107.17 8.4188763409e-28 501187.23 8.4188763409e-28 630957.34 8.4188763409e-28 794328.23 8.4188763409e-28 1000000 8.4188763409e-28 1258930 8.4188763409e-28 1584890 8.4188763409e-28 1995260 8.4188763409e-28 2511890 8.4188763409e-28 3162280 8.4188763409e-28 3981070 8.4188763409e-28 5011870 8.4188763409e-28 6309570 8.4188763409e-28 7943280 8.4188763409e-28 10000000 8.4188763409e-28 12589250 8.4188763409e-28 15848930 8.4188763409e-28 19952620 8.4188763409e-28 25118860 8.4188763409e-28 31622780 8.4188763409e-28 39810720 8.4188763409e-28 50118720 8.4188763409e-28 63095730 8.4188763409e-28 79432820 8.4188763409e-28 100000000 8.4188763409e-28 100.00000 8.65359889e-30 125.89254 8.65359889e-30 158.48932 8.65359889e-30 199.52623 8.65359889e-30 251.18864 8.65359889e-30 316.22777 8.65359889e-30 398.10717 8.65359889e-30 501.18723 8.65359889e-30 630.95734 8.65359889e-30 794.32823 8.65359889e-30 1000 8.65359889e-30 1258.93 8.65359889e-30 1584.89 8.65359889e-30 1995.26 8.65359889e-30 2511.89 8.65359889e-30 3162.28 8.65359889e-30 3981.07 8.65359889e-30 5011.87 8.65359889e-30 6309.57 8.65359889e-30 7943.28 8.65359889e-30 10000 8.65359889e-30 12589.25 8.65359889e-30 15848.93 8.65359889e-30 19952.62 8.65359889e-30 25118.86 8.65359889e-30 31622.78 8.65359889e-30 39810.72 8.65359889e-30 50118.72 8.65359889e-30 63095.73 8.65359889e-30 79432.82 8.65359889e-30 100000 8.65359889e-30 125892.54 8.65359889e-30 158489.32 8.65359889e-30 199526.23 8.65359889e-30 251188.64 8.65359889e-30 316227.77 8.65359889e-30 398107.17 8.65359889e-30 501187.23 8.65359889e-30 630957.34 8.65359889e-30 794328.23 8.65359889e-30 1000000 8.65359889e-30 1258930 8.65359889e-30 1584890 8.65359889e-30 1995260 8.65359889e-30 2511890 8.65359889e-30 3162280 8.65359889e-30 3981070 8.65359889e-30 5011870 8.65359889e-30 6309570 8.65359889e-30 7943280 8.65359889e-30 10000000 8.65359889e-30 12589250 8.65359889e-30 15848930 8.65359889e-30 19952620 8.65359889e-30 25118860 8.65359889e-30 31622780 8.65359889e-30 39810720 8.65359889e-30 50118720 8.65359889e-30 63095730 8.65359889e-30 79432820 8.65359889e-30 100000000 8.65359889e-30 100.00000 8.944998084e-29 125.89254 8.944998084e-29 158.48932 8.944998084e-29 199.52623 8.944998084e-29 251.18864 8.944998084e-29 316.22777 8.944998084e-29 398.10717 8.944998084e-29 501.18723 8.944998084e-29 630.95734 8.944998084e-29 794.32823 8.944998084e-29 1000 8.944998084e-29 1258.93 8.944998084e-29 1584.89 8.944998084e-29 1995.26 8.944998084e-29 2511.89 8.944998084e-29 3162.28 8.944998084e-29 3981.07 8.944998084e-29 5011.87 8.944998084e-29 6309.57 8.944998084e-29 7943.28 8.944998084e-29 10000 8.944998084e-29 12589.25 8.944998084e-29 15848.93 8.944998084e-29 19952.62 8.944998084e-29 25118.86 8.944998084e-29 31622.78 8.944998084e-29 39810.72 8.944998084e-29 50118.72 8.944998084e-29 63095.73 8.944998084e-29 79432.82 8.944998084e-29 100000 8.944998084e-29 125892.54 8.944998084e-29 158489.32 8.944998084e-29 199526.23 8.944998084e-29 251188.64 8.944998084e-29 316227.77 8.944998084e-29 398107.17 8.944998084e-29 501187.23 8.944998084e-29 630957.34 8.944998084e-29 794328.23 8.944998084e-29 1000000 8.944998084e-29 1258930 8.944998084e-29 1584890 8.944998084e-29 1995260 8.944998084e-29 2511890 8.944998084e-29 3162280 8.944998084e-29 3981070 8.944998084e-29 5011870 8.944998084e-29 6309570 8.944998084e-29 7943280 8.944998084e-29 10000000 8.944998084e-29 12589250 8.944998084e-29 15848930 8.944998084e-29 19952620 8.944998084e-29 25118860 8.944998084e-29 31622780 8.944998084e-29 39810720 8.944998084e-29 50118720 8.944998084e-29 63095730 8.944998084e-29 79432820 8.944998084e-29 100000000 8.944998084e-29 100.00000 2.4669728356e-28 125.89254 2.4669728356e-28 158.48932 2.4669728356e-28 199.52623 2.4669728356e-28 251.18864 2.4669728356e-28 316.22777 2.4669728356e-28 398.10717 2.4669728356e-28 501.18723 2.4669728356e-28 630.95734 2.4669728356e-28 794.32823 2.4669728356e-28 1000 2.4669728356e-28 1258.93 2.4669728356e-28 1584.89 2.4669728356e-28 1995.26 2.4669728356e-28 2511.89 2.4669728356e-28 3162.28 2.4669728356e-28 3981.07 2.4669728356e-28 5011.87 2.4669728356e-28 6309.57 2.4669728356e-28 7943.28 2.4669728356e-28 10000 2.4669728356e-28 12589.25 2.4669728356e-28 15848.93 2.4669728356e-28 19952.62 2.4669728356e-28 25118.86 2.4669728356e-28 31622.78 2.4669728356e-28 39810.72 2.4669728356e-28 50118.72 2.4669728356e-28 63095.73 2.4669728356e-28 79432.82 2.4669728356e-28 100000 2.4669728356e-28 125892.54 2.4669728356e-28 158489.32 2.4669728356e-28 199526.23 2.4669728356e-28 251188.64 2.4669728356e-28 316227.77 2.4669728356e-28 398107.17 2.4669728356e-28 501187.23 2.4669728356e-28 630957.34 2.4669728356e-28 794328.23 2.4669728356e-28 1000000 2.4669728356e-28 1258930 2.4669728356e-28 1584890 2.4669728356e-28 1995260 2.4669728356e-28 2511890 2.4669728356e-28 3162280 2.4669728356e-28 3981070 2.4669728356e-28 5011870 2.4669728356e-28 6309570 2.4669728356e-28 7943280 2.4669728356e-28 10000000 2.4669728356e-28 12589250 2.4669728356e-28 15848930 2.4669728356e-28 19952620 2.4669728356e-28 25118860 2.4669728356e-28 31622780 2.4669728356e-28 39810720 2.4669728356e-28 50118720 2.4669728356e-28 63095730 2.4669728356e-28 79432820 2.4669728356e-28 100000000 2.4669728356e-28 100.00000 4.7619095524e-28 125.89254 4.7619095524e-28 158.48932 4.7619095524e-28 199.52623 4.7619095524e-28 251.18864 4.7619095524e-28 316.22777 4.7619095524e-28 398.10717 4.7619095524e-28 501.18723 4.7619095524e-28 630.95734 4.7619095524e-28 794.32823 4.7619095524e-28 1000 4.7619095524e-28 1258.93 4.7619095524e-28 1584.89 4.7619095524e-28 1995.26 4.7619095524e-28 2511.89 4.7619095524e-28 3162.28 4.7619095524e-28 3981.07 4.7619095524e-28 5011.87 4.7619095524e-28 6309.57 4.7619095524e-28 7943.28 4.7619095524e-28 10000 4.7619095524e-28 12589.25 4.7619095524e-28 15848.93 4.7619095524e-28 19952.62 4.7619095524e-28 25118.86 4.7619095524e-28 31622.78 4.7619095524e-28 39810.72 4.7619095524e-28 50118.72 4.7619095524e-28 63095.73 4.7619095524e-28 79432.82 4.7619095524e-28 100000 4.7619095524e-28 125892.54 4.7619095524e-28 158489.32 4.7619095524e-28 199526.23 4.7619095524e-28 251188.64 4.7619095524e-28 316227.77 4.7619095524e-28 398107.17 4.7619095524e-28 501187.23 4.7619095524e-28 630957.34 4.7619095524e-28 794328.23 4.7619095524e-28 1000000 4.7619095524e-28 1258930 4.7619095524e-28 1584890 4.7619095524e-28 1995260 4.7619095524e-28 2511890 4.7619095524e-28 3162280 4.7619095524e-28 3981070 4.7619095524e-28 5011870 4.7619095524e-28 6309570 4.7619095524e-28 7943280 4.7619095524e-28 10000000 4.7619095524e-28 12589250 4.7619095524e-28 15848930 4.7619095524e-28 19952620 4.7619095524e-28 25118860 4.7619095524e-28 31622780 4.7619095524e-28 39810720 4.7619095524e-28 50118720 4.7619095524e-28 63095730 4.7619095524e-28 79432820 4.7619095524e-28 100000000 4.7619095524e-28 100.00000 8.123236641e-29 125.89254 8.123236641e-29 158.48932 8.123236641e-29 199.52623 8.123236641e-29 251.18864 8.123236641e-29 316.22777 8.123236641e-29 398.10717 8.123236641e-29 501.18723 8.123236641e-29 630.95734 8.123236641e-29 794.32823 8.123236641e-29 1000 8.123236641e-29 1258.93 8.123236641e-29 1584.89 8.123236641e-29 1995.26 8.123236641e-29 2511.89 8.123236641e-29 3162.28 8.123236641e-29 3981.07 8.123236641e-29 5011.87 8.123236641e-29 6309.57 8.123236641e-29 7943.28 8.123236641e-29 10000 8.123236641e-29 12589.25 8.123236641e-29 15848.93 8.123236641e-29 19952.62 8.123236641e-29 25118.86 8.123236641e-29 31622.78 8.123236641e-29 39810.72 8.123236641e-29 50118.72 8.123236641e-29 63095.73 8.123236641e-29 79432.82 8.123236641e-29 100000 8.123236641e-29 125892.54 8.123236641e-29 158489.32 8.123236641e-29 199526.23 8.123236641e-29 251188.64 8.123236641e-29 316227.77 8.123236641e-29 398107.17 8.123236641e-29 501187.23 8.123236641e-29 630957.34 8.123236641e-29 794328.23 8.123236641e-29 1000000 8.123236641e-29 1258930 8.123236641e-29 1584890 8.123236641e-29 1995260 8.123236641e-29 2511890 8.123236641e-29 3162280 8.123236641e-29 3981070 8.123236641e-29 5011870 8.123236641e-29 6309570 8.123236641e-29 7943280 8.123236641e-29 10000000 8.123236641e-29 12589250 8.123236641e-29 15848930 8.123236641e-29 19952620 8.123236641e-29 25118860 8.123236641e-29 31622780 8.123236641e-29 39810720 8.123236641e-29 50118720 8.123236641e-29 63095730 8.123236641e-29 79432820 8.123236641e-29 100000000 8.123236641e-29 100.00000 4.0503977536e-28 125.89254 4.0503977536e-28 158.48932 4.0503977536e-28 199.52623 4.0503977536e-28 251.18864 4.0503977536e-28 316.22777 4.0503977536e-28 398.10717 4.0503977536e-28 501.18723 4.0503977536e-28 630.95734 4.0503977536e-28 794.32823 4.0503977536e-28 1000 4.0503977536e-28 1258.93 4.0503977536e-28 1584.89 4.0503977536e-28 1995.26 4.0503977536e-28 2511.89 4.0503977536e-28 3162.28 4.0503977536e-28 3981.07 4.0503977536e-28 5011.87 4.0503977536e-28 6309.57 4.0503977536e-28 7943.28 4.0503977536e-28 10000 4.0503977536e-28 12589.25 4.0503977536e-28 15848.93 4.0503977536e-28 19952.62 4.0503977536e-28 25118.86 4.0503977536e-28 31622.78 4.0503977536e-28 39810.72 4.0503977536e-28 50118.72 4.0503977536e-28 63095.73 4.0503977536e-28 79432.82 4.0503977536e-28 100000 4.0503977536e-28 125892.54 4.0503977536e-28 158489.32 4.0503977536e-28 199526.23 4.0503977536e-28 251188.64 4.0503977536e-28 316227.77 4.0503977536e-28 398107.17 4.0503977536e-28 501187.23 4.0503977536e-28 630957.34 4.0503977536e-28 794328.23 4.0503977536e-28 1000000 4.0503977536e-28 1258930 4.0503977536e-28 1584890 4.0503977536e-28 1995260 4.0503977536e-28 2511890 4.0503977536e-28 3162280 4.0503977536e-28 3981070 4.0503977536e-28 5011870 4.0503977536e-28 6309570 4.0503977536e-28 7943280 4.0503977536e-28 10000000 4.0503977536e-28 12589250 4.0503977536e-28 15848930 4.0503977536e-28 19952620 4.0503977536e-28 25118860 4.0503977536e-28 31622780 4.0503977536e-28 39810720 4.0503977536e-28 50118720 4.0503977536e-28 63095730 4.0503977536e-28 79432820 4.0503977536e-28 100000000 4.0503977536e-28 100.00000 1.03689796081e-27 125.89254 1.03689796081e-27 158.48932 1.03689796081e-27 199.52623 1.03689796081e-27 251.18864 1.03689796081e-27 316.22777 1.03689796081e-27 398.10717 1.03689796081e-27 501.18723 1.03689796081e-27 630.95734 1.03689796081e-27 794.32823 1.03689796081e-27 1000 1.03689796081e-27 1258.93 1.03689796081e-27 1584.89 1.03689796081e-27 1995.26 1.03689796081e-27 2511.89 1.03689796081e-27 3162.28 1.03689796081e-27 3981.07 1.03689796081e-27 5011.87 1.03689796081e-27 6309.57 1.03689796081e-27 7943.28 1.03689796081e-27 10000 1.03689796081e-27 12589.25 1.03689796081e-27 15848.93 1.03689796081e-27 19952.62 1.03689796081e-27 25118.86 1.03689796081e-27 31622.78 1.03689796081e-27 39810.72 1.03689796081e-27 50118.72 1.03689796081e-27 63095.73 1.03689796081e-27 79432.82 1.03689796081e-27 100000 1.03689796081e-27 125892.54 1.03689796081e-27 158489.32 1.03689796081e-27 199526.23 1.03689796081e-27 251188.64 1.03689796081e-27 316227.77 1.03689796081e-27 398107.17 1.03689796081e-27 501187.23 1.03689796081e-27 630957.34 1.03689796081e-27 794328.23 1.03689796081e-27 1000000 1.03689796081e-27 1258930 1.03689796081e-27 1584890 1.03689796081e-27 1995260 1.03689796081e-27 2511890 1.03689796081e-27 3162280 1.03689796081e-27 3981070 1.03689796081e-27 5011870 1.03689796081e-27 6309570 1.03689796081e-27 7943280 1.03689796081e-27 10000000 1.03689796081e-27 12589250 1.03689796081e-27 15848930 1.03689796081e-27 19952620 1.03689796081e-27 25118860 1.03689796081e-27 31622780 1.03689796081e-27 39810720 1.03689796081e-27 50118720 1.03689796081e-27 63095730 1.03689796081e-27 79432820 1.03689796081e-27 100000000 1.03689796081e-27 100.00000 2.17691297476e-27 125.89254 2.17691297476e-27 158.48932 2.17691297476e-27 199.52623 2.17691297476e-27 251.18864 2.17691297476e-27 316.22777 2.17691297476e-27 398.10717 2.17691297476e-27 501.18723 2.17691297476e-27 630.95734 2.17691297476e-27 794.32823 2.17691297476e-27 1000 2.17691297476e-27 1258.93 2.17691297476e-27 1584.89 2.17691297476e-27 1995.26 2.17691297476e-27 2511.89 2.17691297476e-27 3162.28 2.17691297476e-27 3981.07 2.17691297476e-27 5011.87 2.17691297476e-27 6309.57 2.17691297476e-27 7943.28 2.17691297476e-27 10000 2.17691297476e-27 12589.25 2.17691297476e-27 15848.93 2.17691297476e-27 19952.62 2.17691297476e-27 25118.86 2.17691297476e-27 31622.78 2.17691297476e-27 39810.72 2.17691297476e-27 50118.72 2.17691297476e-27 63095.73 2.17691297476e-27 79432.82 2.17691297476e-27 100000 2.17691297476e-27 125892.54 2.17691297476e-27 158489.32 2.17691297476e-27 199526.23 2.17691297476e-27 251188.64 2.17691297476e-27 316227.77 2.17691297476e-27 398107.17 2.17691297476e-27 501187.23 2.17691297476e-27 630957.34 2.17691297476e-27 794328.23 2.17691297476e-27 1000000 2.17691297476e-27 1258930 2.17691297476e-27 1584890 2.17691297476e-27 1995260 2.17691297476e-27 2511890 2.17691297476e-27 3162280 2.17691297476e-27 3981070 2.17691297476e-27 5011870 2.17691297476e-27 6309570 2.17691297476e-27 7943280 2.17691297476e-27 10000000 2.17691297476e-27 12589250 2.17691297476e-27 15848930 2.17691297476e-27 19952620 2.17691297476e-27 25118860 2.17691297476e-27 31622780 2.17691297476e-27 39810720 2.17691297476e-27 50118720 2.17691297476e-27 63095730 2.17691297476e-27 79432820 2.17691297476e-27 100000000 2.17691297476e-27 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_ig_lw.standard0000644000175000017500000000655114163340332025031 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.253e-27 2.60826005067054e-14 2.91750005667813e-15 2.91750005667813e-15 -0.8 2.124e-22 2.24198004355484e-14 3.04060005906959e-15 3.04060005906959e-15 -0.4 3.44281e-17 2.04751003977688e-14 3.22580006266746e-15 3.22580006266746e-15 1.11022302462516e-16 -1.1524e-12 1.95403003796085e-14 3.54670006890157e-15 3.54670006890157e-15 0.4 -7.88615e-08 1.33195502587583e-13 6.4626301255492e-14 6.4626301255492e-14 0.8 -4.952885e-07 1.49544002905184e-13 7.35659014291612e-14 7.35659014291612e-14 1.2 -1.7643e-06 1.45411802824908e-13 7.1646601391875e-14 7.1646601391875e-14 -1.2 1.999e-23 2.52171004898914e-14 1.57800003065573e-15 4.1391000804101e-15 -0.8 2.8934e-18 2.16405004204089e-14 1.44890002814771e-15 4.45630008657232e-15 -0.4 5.495072e-13 1.96656003820427e-14 1.41710002752993e-15 4.74130009210901e-15 1.11022302462516e-16 1.236129e-07 1.8562100360605e-14 1.55040003011955e-15 5.02030009752913e-15 0.4 0.0007991547 8.90153017292959e-14 7.66382014888466e-14 6.08840011827905e-15 0.8 0.0022546 1.06732202073481e-13 9.40792018276721e-14 8.20640015942534e-15 1.2 0.0026316 1.0694010207752e-13 9.17263017819624e-14 1.15358002241054e-14 -1.2 0. 2.55426004962149e-14 2.92940005690931e-15 2.92940005690931e-15 -0.8 1.520e-28 2.21250004298213e-14 3.04950005924249e-15 3.04950005924249e-15 -0.4 2.131e-21 2.02840003940563e-14 3.23330006281316e-15 3.23330006281316e-15 1.11022302462516e-16 -4.6182e-15 1.93646003761951e-14 3.53220006861988e-15 3.53220006861988e-15 0.4 -3.3836e-08 1.35167302625889e-13 6.5635001275088e-14 6.5635001275088e-14 0.8 -2.307156e-07 1.52733202967141e-13 7.52429014617402e-14 7.52429014617402e-14 1.2 -8.354608e-07 1.47362402862802e-13 7.26878014121024e-14 7.26878014121024e-14 -1.2 0. 2.46904004796592e-14 1.57970003068876e-15 4.16030008082195e-15 -0.8 9.318e-24 2.13529004148218e-14 1.44850002813994e-15 4.47350008690647e-15 -0.4 1.270095e-16 1.94791003784195e-14 1.41640002751633e-15 4.75620009239847e-15 1.11022302462516e-16 2.1351e-09 1.84053003575589e-14 1.52390002960473e-15 5.03380009779139e-15 0.4 0.0009801724 9.03535017552931e-14 7.82252015196772e-14 5.91420011489488e-15 0.8 0.0031798 1.10869502153856e-13 9.87260019179452e-14 8.0269001559382e-15 1.2 0.0036847 1.08346302104838e-13 9.47898018414769e-14 1.01900001979606e-14 -1.2 1.249e-20 2.70428005253592e-14 2.89680005627599e-15 2.89680005627599e-15 -0.8 5.1999e-17 2.29255004453726e-14 3.02570005878013e-15 3.02570005878013e-15 -0.4 1.945861e-13 2.07972004040262e-14 3.21350006242851e-15 3.21350006242851e-15 1.11022302462516e-16 -2.140232e-10 2.19152004257455e-14 4.69200009115126e-15 4.69200009115126e-15 0.4 -2.272827e-07 1.31728302559079e-13 6.39001012413842e-14 6.39001012413842e-14 0.8 -1.2562e-06 1.45023602817366e-13 7.11913013830299e-14 7.11913013830299e-14 1.2 -4.3404e-06 1.42311102764671e-13 6.99973013598342e-14 6.99973013598342e-14 -1.2 3.64604e-17 2.61550005081119e-14 1.57240003054694e-15 4.10480007974375e-15 -0.8 1.507444e-13 2.21340004299962e-14 1.44830002813605e-15 4.42830008602837e-15 -0.4 7.808924e-10 1.99803003881563e-14 1.41790002754547e-15 4.71730009164276e-15 1.11022302462516e-16 4.5448e-06 1.98839003862836e-14 2.73790005318905e-15 4.99710009707842e-15 0.4 0.0006705876 8.85788017208161e-14 7.58145014728446e-14 6.45120012532715e-15 0.8 0.0015026 1.05202902043772e-13 9.07897017637671e-14 9.81160019060948e-15 1.2 0.0016063 1.11937902174612e-13 9.06087017602508e-14 1.77220003442844e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_core_lw.standard0000644000175000017500000000425314163340332025166 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.57914e-05 0. 0. -1.57914e-05 0.35 3.99737e-05 0. 0. -3.99737e-05 0.45 6.69675e-05 0. 0. -6.69675e-05 0.55 9.3005e-05 0. 0. -9.3005e-05 0.65 0.0001165222 0. 0. -0.0001165222 0.75 0.0001368899 0. 0. -0.0001368899 0.85 0.0001539632 0. 0. -0.0001539632 0.95 0.0001678681 0. 0. -0.0001678681 1.05000 0.0001788764 0. 0. -0.0001788764 1.15000 0.0001873257 0. 0. -0.0001873257 0.25 3.3061e-05 0. 0. -3.3061e-05 0.35 0.0001050804 0. 0. -0.0001050804 0.45 0.000225211 0. 0. -0.000225211 0.55 0.0003895926 0. 0. -0.0003895926 0.65 0.0005909979 0. 0. -0.0005909979 0.75 0.0008213646 0. 0. -0.0008213646 0.85 0.001073 0. 0. -0.001073 0.95 0.0013392 0. 0. -0.0013392 1.05000 0.0016138 0. 0. -0.0016138 1.15000 0.0018913 0. 0. -0.0018913 0.25 1.0177e-05 0. 0. -1.0177e-05 0.35 4.45138e-05 0. 0. -4.45138e-05 0.45 8.6701e-05 0. 0. -8.6701e-05 0.55 0.0001273259 0. 0. -0.0001273259 0.65 0.0001635247 0. 0. -0.0001635247 0.75 0.0001943828 0. 0. -0.0001943828 0.85 0.0002198207 0. 0. -0.0002198207 0.95 0.0002401769 0. 0. -0.0002401769 1.05000 0.0002559893 0. 0. -0.0002559893 1.15000 0.0002678678 0. 0. -0.0002678678 0.25 1.97597e-05 0. 0. -1.97597e-05 0.35 0.0001024349 0. 0. -0.0001024349 0.45 0.0002625827 0. 0. -0.0002625827 0.55 0.0004918675 0. 0. -0.0004918675 0.65 0.000775867 0. 0. -0.000775867 0.75 0.0011002 0. 0. -0.0011002 0.85 0.0014529 0. 0. -0.0014529 0.95 0.001824 0. 0. -0.001824 1.05000 0.0022059 0. 0. -0.0022059 1.15000 0.0025924 0. 0. -0.0025924 0.25 2.13978e-05 0. 0. -2.13978e-05 0.35 3.67966e-05 0. 0. -3.67966e-05 0.45 5.28435e-05 0. 0. -5.28435e-05 0.55 6.8267e-05 0. 0. -6.8267e-05 0.65 8.23742e-05 0. 0. -8.23742e-05 0.75 9.48195e-05 0. 0. -9.48195e-05 0.85 0.0001054794 0. 0. -0.0001054794 0.95 0.0001143717 0. 0. -0.0001143717 1.05000 0.0001216014 0. 0. -0.0001216014 1.15000 0.000127321 0. 0. -0.000127321 0.25 5.6993e-05 0. 0. -5.6993e-05 0.35 0.000120843 0. 0. -0.000120843 0.45 0.0002119769 0. 0. -0.0002119769 0.55 0.0003282023 0. 0. -0.0003282023 0.65 0.0004656703 0. 0. -0.0004656703 0.75 0.0006196718 0. 0. -0.0006196718 0.85 0.0007851818 0. 0. -0.0007851818 0.95 0.0009572176 0. 0. -0.0009572176 1.05000 0.0011311 0. 0. -0.0011311 1.15000 0.0013024 0. 0. -0.0013024 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_core_sw.standard0000644000175000017500000001620514163340332025221 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0072574 1.62406003155054e-14 3.86070007500163e-15 1.1648200226289e-14 0 0. 1.1063600214932e-14 4.82580009375058e-15 4.82580009375058e-15 0.2 0.0006055621 1.0182300197811e-14 4.9235000956486e-15 3.74490007275199e-15 0.4 0.0007376947 1.00753001957324e-14 4.95880009633437e-15 3.61660007025951e-15 0.6 0.0008626241 9.95720019343805e-15 5.00240009718138e-15 3.46880006738821e-15 0.8 0.0009885067 9.87960019193051e-15 5.04700009804782e-15 3.3601000652765e-15 1 0.0011179 9.83230019101162e-15 5.09150009891232e-15 3.28150006374954e-15 1.2 0.0012519 9.80410019046378e-15 5.13550009976711e-15 3.22210006259558e-15 -0.2 -0.009263 1.81944003534617e-14 5.06320009836254e-15 1.27153002470195e-14 0 0. 1.85535003604379e-14 9.07720017634232e-15 9.07720017634232e-15 0.2 0.007759 1.6506400320669e-14 1.19723002325853e-14 3.90200007580397e-15 0.4 0.0088047 1.63555003177375e-14 1.19024002312273e-14 3.80210007386321e-15 0.6 0.0094163 1.61663003140619e-14 1.18145002295197e-14 3.68640007161551e-15 0.8 0.0098825 1.59400003096656e-14 1.17293002278645e-14 3.53100006859657e-15 1 0.0102717 1.57517003060075e-14 1.16456002262385e-14 3.41230006629059e-15 1.2 0.0106127 1.55985003030313e-14 1.15632002246377e-14 3.32750006464318e-15 -0.2 -0.007136 1.88866003669091e-14 7.46330014498917e-15 1.11289002162006e-14 0 0. 1.93232003753909e-14 9.5280001851e-15 9.5280001851e-15 0.2 0.0090428 1.82748003550237e-14 1.25436002436839e-14 5.3526001039847e-15 0.4 0.0114389 1.77397003446283e-14 1.33488002593265e-14 3.95610007685496e-15 0.6 0.0122526 1.76205003423126e-14 1.32424002572595e-14 3.92240007620028e-15 0.8 0.0127972 1.74389003387847e-14 1.31358002551886e-14 3.82700007434694e-15 1 0.013213 1.71955003340561e-14 1.30315002531623e-14 3.66800007125806e-15 1.2 0.0135515 1.69819003299065e-14 1.2929100251173e-14 3.53710006871507e-15 -0.2 -0.004436 1.89556003682495e-14 8.8017001709902e-15 9.90840019249001e-15 0 0. 1.9251400373996e-14 9.51180018478528e-15 9.51180018478528e-15 0.2 0.0067133 1.88894003669635e-14 1.08969002116935e-14 7.71400014985951e-15 0.4 0.0108859 1.79014003477696e-14 1.33820002599715e-14 4.15780008077338e-15 0.6 0.0118893 1.77709003452344e-14 1.33237002588389e-14 4.06160007890451e-15 0.8 0.0124744 1.7666900343214e-14 1.32214002568515e-14 4.03850007845574e-15 1 0.0129015 1.75123003402106e-14 1.31204002548894e-14 3.96400007700844e-15 1.2 0.013239 1.72785003356686e-14 1.30212002529622e-14 3.80870007399143e-15 -0.2 -0.0084624 1.65792003220833e-14 3.79760007377579e-15 1.20913002348971e-14 0 0. 9.55850018569252e-15 3.99570007762427e-15 3.99570007762427e-15 0.2 0.000157477 9.26770018004316e-15 3.92350007622164e-15 3.75550007295792e-15 0.4 0.0002071193 9.14830017772358e-15 3.94560007665098e-15 3.6278000704771e-15 0.6 0.0002606828 9.01950017522139e-15 3.97910007730178e-15 3.47980006760191e-15 0.8 0.0003203879 8.93350017355067e-15 4.01620007802252e-15 3.37070006548243e-15 1 0.0003873246 8.88030017251716e-15 4.05600007879572e-15 3.29190006395158e-15 1.2 0.0004622834 8.84860017190132e-15 4.09810007961359e-15 3.23220006279179e-15 -0.2 -0.0115421 1.8302100355554e-14 4.25030008257037e-15 1.36475002651293e-14 0 0. 1.89891003689003e-14 9.31330018092903e-15 9.31330018092903e-15 0.2 0.009195 1.68881003280843e-14 1.24884002426115e-14 3.80690007395646e-15 0.4 0.0103582 1.6785600326093e-14 1.23966002408282e-14 3.78150007346302e-15 0.6 0.0110844 1.66017003225204e-14 1.23125002391943e-14 3.6667000712328e-15 0.8 0.011645 1.63793003181999e-14 1.22305002376013e-14 3.51130006821386e-15 1 0.012117 1.61947003146137e-14 1.21498002360336e-14 3.39270006590982e-15 1.2 0.0125333 1.60449003117035e-14 1.20700002344833e-14 3.30790006426241e-15 -0.2 -0.0091354 1.89982003690771e-14 7.00910013616545e-15 1.17057002274061e-14 0 0. 1.96327003814035e-14 9.69520018834818e-15 9.69520018834818e-15 0.2 0.0113529 1.83401003562922e-14 1.35299002628447e-14 4.4389000862343e-15 0.4 0.013551 1.80757003511558e-14 1.37467002670565e-14 3.92330007621776e-15 0.6 0.0144897 1.79629003489644e-14 1.36349002648845e-14 3.90100007578454e-15 0.8 0.0151251 1.77818003454462e-14 1.35268002627845e-14 3.80680007395452e-15 1 0.0156093 1.75381003407118e-14 1.34210002607291e-14 3.64810007087146e-15 1.2 0.0160025 1.73239003365506e-14 1.33170002587087e-14 3.51740006833236e-15 -0.2 -0.0057216 1.91288003716143e-14 8.89830017286685e-15 1.00012001942928e-14 0 0. 1.94585003780193e-14 9.62440018697275e-15 9.62440018697275e-15 0.2 0.0085905 1.90255003696075e-14 1.13470002204376e-14 7.41250014400228e-15 0.4 0.0129177 1.80812003512626e-14 1.36831002658209e-14 4.05100007869858e-15 0.6 0.0140111 1.79857003494073e-14 1.3580000263818e-14 4.036300078413e-15 0.8 0.0146956 1.78842003474355e-14 1.34756002617898e-14 4.01750007804778e-15 1 0.015196 1.77304003444476e-14 1.33737002598102e-14 3.94420007662378e-15 1.2 0.0155894 1.74969003399114e-14 1.32736002578656e-14 3.78950007361843e-15 -0.2 -0.0056944 1.64365003193111e-14 4.50720008756116e-15 1.12223002180151e-14 0 0. 1.36406002649953e-14 6.27090012182447e-15 6.27090012182447e-15 0.2 0.0016617 1.19802002327388e-14 6.87610013358166e-15 3.77970007342805e-15 0.4 0.0019384 1.17813002288747e-14 6.84230013292503e-15 3.61290007018763e-15 0.6 0.0021428 1.16139002256227e-14 6.82880013266277e-15 3.46330006728136e-15 0.8 0.0023241 1.14910002232351e-14 6.81900013247238e-15 3.35490006517548e-15 1 0.0024942 1.13993002214537e-14 6.80980013229366e-15 3.27690006366018e-15 1.2 0.0026578 1.13269002200471e-14 6.80060013211493e-15 3.21810006251787e-15 -0.2 -0.006281 1.81375003523563e-14 5.8571001137856e-15 1.18613002304289e-14 0 0. 1.81199003520144e-14 8.84300017179253e-15 8.84300017179253e-15 0.2 0.0058773 1.66500003234587e-14 1.14031002215275e-14 4.63350009001478e-15 0.4 0.0073093 1.61210003131819e-14 1.15222002238412e-14 3.9227000762061e-15 0.6 0.0079297 1.58519003079541e-14 1.14141002217412e-14 3.73910007263932e-15 0.8 0.0083428 1.55976003030138e-14 1.13124002197654e-14 3.56980006935033e-15 1 0.0086656 1.53944002990663e-14 1.1217200217916e-14 3.44680006696082e-15 1.2 0.0089378 1.52307002958861e-14 1.11259002161423e-14 3.3601000652765e-15 -0.2 -0.0049245 1.85861003610713e-14 7.01440013626841e-15 1.12529002186095e-14 0 0. 1.88943003670587e-14 9.29620018059683e-15 9.29620018059683e-15 0.2 0.0061116 1.81849003532772e-14 1.17967002291739e-14 6.00360011663165e-15 0.4 0.0087004 1.75230003404185e-14 1.27412002475227e-14 4.32630008404682e-15 0.6 0.0097134 1.72618003353442e-14 1.27271002472488e-14 4.04680007861699e-15 0.8 0.0102869 1.70324003308876e-14 1.26276002453158e-14 3.89350007563884e-15 1 0.0106848 1.67696003257822e-14 1.25217002432585e-14 3.71600007219055e-15 1.2 0.0109924 1.65469003214558e-14 1.24176002412361e-14 3.57790006950769e-15 -0.2 -0.0032308 1.86168003616677e-14 7.85330015256568e-15 1.04907002038023e-14 0 0. 1.89312003677755e-14 9.33820018141276e-15 9.33820018141276e-15 0.2 0.004675 1.85705003607682e-14 1.11364002163463e-14 7.13150013854331e-15 0.4 0.0077938 1.79079003478959e-14 1.26986002466951e-14 4.84330009409056e-15 0.6 0.0091279 1.75934003417861e-14 1.28841002502988e-14 4.30700008367188e-15 0.8 0.0098385 1.74113003382485e-14 1.28298002492439e-14 4.15330008068596e-15 1 0.0102984 1.72223003345768e-14 1.27375002474508e-14 4.03410007837027e-15 1.2 0.0106345 1.69716003297065e-14 1.2639400245545e-14 3.86050007499775e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_core_lw.standard0000644000175000017500000000425514163340332025332 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 3.42e-06 0. 0. -3.42e-06 0.35 1.90905e-05 0. 0. -1.90905e-05 0.45 4.33727e-05 0. 0. -4.33727e-05 0.55 6.87222e-05 0. 0. -6.87222e-05 0.65 9.22912e-05 0. 0. -9.22912e-05 0.75 0.0001130699 0. 0. -0.0001130699 0.85 0.0001307702 0. 0. -0.0001307702 0.95 0.0001454459 0. 0. -0.0001454459 1.05000 0.0001573217 0. 0. -0.0001573217 1.15000 0.0001666996 0. 0. -0.0001666996 0.25 6.6781e-06 0. 0. -6.6781e-06 0.35 4.13369e-05 0. 0. -4.13369e-05 0.45 0.00012125 0. 0. -0.00012125 0.55 0.0002473873 0. 0. -0.0002473873 0.65 0.0004141934 0. 0. -0.0004141934 0.75 0.0006140474 0. 0. -0.0006140474 0.85 0.0008392193 0. 0. -0.0008392193 0.95 0.0010827 0. 0. -0.0010827 1.05000 0.0013381 0. 0. -0.0013381 1.15000 0.0016 0. 0. -0.0016 0.25 7.662416e-07 0. 0. -7.662416e-07 0.35 1.55479e-05 0. 0. -1.55479e-05 0.45 5.1769e-05 0. 0. -5.1769e-05 0.55 9.13103e-05 0. 0. -9.13103e-05 0.65 0.0001277406 0. 0. -0.0001277406 0.75 0.0001593757 0. 0. -0.0001593757 0.85 0.0001858957 0. 0. -0.0001858957 0.95 0.000207528 0. 0. -0.000207528 1.05000 0.0002247405 0. 0. -0.0002247405 1.15000 0.0002380899 0. 0. -0.0002380899 0.25 1.6398e-06 0. 0. -1.6398e-06 0.35 3.03815e-05 0. 0. -3.03815e-05 0.45 0.0001284257 0. 0. -0.0001284257 0.55 0.0003003471 0. 0. -0.0003003471 0.65 0.0005347858 0. 0. -0.0005347858 0.75 0.0008173562 0. 0. -0.0008173562 0.85 0.0011349 0. 0. -0.0011349 0.95 0.0014765 0. 0. -0.0014765 1.05000 0.0018336 0. 0. -0.0018336 1.15000 0.0021993 0. 0. -0.0021993 0.25 9.6032e-06 0. 0. -9.6032e-06 0.35 2.24782e-05 0. 0. -2.24782e-05 0.45 3.75293e-05 0. 0. -3.75293e-05 0.55 5.26268e-05 0. 0. -5.26268e-05 0.65 6.67382e-05 0. 0. -6.67382e-05 0.75 7.9381e-05 0. 0. -7.9381e-05 0.85 9.03673e-05 0. 0. -9.03673e-05 0.95 9.96783e-05 0. 0. -9.96783e-05 1.05000 0.0001073931 0. 0. -0.0001073931 1.15000 0.0001136443 0. 0. -0.0001136443 0.25 2.14782e-05 0. 0. -2.14782e-05 0.35 6.15354e-05 0. 0. -6.15354e-05 0.45 0.0001285618 0. 0. -0.0001285618 0.55 0.0002219273 0. 0. -0.0002219273 0.65 0.0003386156 0. 0. -0.0003386156 0.75 0.0004743836 0. 0. -0.0004743836 0.85 0.0006244476 0. 0. -0.0006244476 0.95 0.0007839045 0. 0. -0.0007839045 1.05000 0.0009479968 0. 0. -0.0009479968 1.15000 0.0011123 0. 0. -0.0011123 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_core_sw.standard0000644000175000017500000000625414163340332025371 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 8.22620015980999e-15 3.04120005908125e-15 3.04120005908125e-15 -0.8 0. 7.98730015516889e-15 3.14060006101228e-15 3.14060006101228e-15 -0.4 0. 8.07690015690955e-15 3.31170006433624e-15 3.31170006433624e-15 1.11022302462516e-16 0. 8.48750016488625e-15 3.60170006997005e-15 3.60170006997005e-15 0.4 0. 1.32395002572031e-14 6.23080012104545e-15 6.23080012104545e-15 0.8 0. 1.91342003717192e-14 9.44130018341568e-15 9.44130018341568e-15 1.2 0. 1.89901003689198e-14 9.39190018245599e-15 9.39190018245599e-15 -1.2 2.980e-23 7.99050015523106e-15 2.93730005706279e-15 2.99780005823812e-15 -0.8 2.6619e-18 7.72580015008874e-15 3.00590005839547e-15 3.07550005974759e-15 -0.4 3.314021e-13 7.71480014987505e-15 3.15210006123569e-15 3.15790006134837e-15 1.11022302462516e-16 5.07003e-08 7.92300015391974e-15 3.42080006645572e-15 3.25890006331049e-15 0.4 0.0030722 1.15155002237111e-14 7.30020014182063e-15 3.33760006483939e-15 0.8 0.012693 1.69790003298502e-14 1.29018002506426e-14 3.63010007052178e-15 1.2 0.0120455 1.737020033745e-14 1.29792002521463e-14 4.01260007795259e-15 -1.2 0. 8.14960015832188e-15 3.04280005911233e-15 3.04280005911233e-15 -0.8 0. 7.94710015438793e-15 3.14200006103948e-15 3.14200006103948e-15 -0.4 0. 8.05190015642387e-15 3.31310006436343e-15 3.31310006436343e-15 1.11022302462516e-16 0. 8.47020016455017e-15 3.60300006999531e-15 3.60300006999531e-15 0.4 0. 1.16854002270117e-14 5.39470010480258e-15 5.39470010480258e-15 0.8 0. 1.94513003778795e-14 9.61030018669883e-15 9.61030018669883e-15 1.2 0. 1.91569003721602e-14 9.48220018421024e-15 9.48220018421024e-15 -1.2 0. 7.91830015382843e-15 2.93740005706473e-15 3.00150005831e-15 -0.8 5.580e-24 7.68730014934081e-15 3.0062000584013e-15 3.07800005979616e-15 -0.4 4.39744e-17 7.69040014940103e-15 3.15270006124735e-15 3.15990006138722e-15 1.11022302462516e-16 4.463651e-10 7.90590015358754e-15 3.42130006646543e-15 3.26070006334546e-15 0.4 0.0024703 1.08168002101375e-14 6.55290012730287e-15 3.3451000649851e-15 0.8 0.0150068 1.73435003369313e-14 1.33121002586135e-14 3.60600007005359e-15 1.2 0.0141764 1.75495003409333e-14 1.31923002562862e-14 3.99000007751354e-15 -1.2 0. 8.36800016256473e-15 3.03830005902491e-15 3.03830005902491e-15 -0.8 0. 8.05790015654043e-15 3.13840006096955e-15 3.13840006096955e-15 -0.4 0. 8.11970015774102e-15 3.30940006429155e-15 3.30940006429155e-15 1.11022302462516e-16 0. 8.52220016556037e-15 3.60250006998559e-15 3.60250006998559e-15 0.4 0. 1.47675002868875e-14 7.05650013708628e-15 7.05650013708628e-15 0.8 0. 1.87008003632995e-14 9.21060017893388e-15 9.21060017893388e-15 1.2 0. 1.87218003637075e-14 9.24740017964879e-15 9.24740017964879e-15 -1.2 7.39602e-17 8.12400015782456e-15 2.93670005705113e-15 2.99160005811767e-15 -0.8 2.10105e-13 7.79360015140589e-15 3.00540005838576e-15 3.07140005966794e-15 -0.4 7.904501e-10 7.75660015068709e-15 3.15110006121627e-15 3.15460006128426e-15 1.11022302462516e-16 3.5162e-06 7.95720015458414e-15 3.42570006655091e-15 3.25590006325221e-15 0.4 0.0038656 1.23303002395401e-14 8.16280015857832e-15 3.34000006488602e-15 0.8 0.0102815 1.65353003212305e-14 1.23792002404901e-14 3.68210007153198e-15 1.2 0.0095552 1.71473003331198e-14 1.26468002456888e-14 4.10660007977872e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_diode_sw.standard0000644000175000017500000001620514163340332025355 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0072574 1.62406003155054e-14 3.86070007500163e-15 1.1648200226289e-14 0 0. 1.1063600214932e-14 4.82580009375058e-15 4.82580009375058e-15 0.2 0.0006055621 1.0182300197811e-14 4.9235000956486e-15 3.74490007275199e-15 0.4 0.0007376947 1.00753001957324e-14 4.95880009633437e-15 3.61660007025951e-15 0.6 0.0008626241 9.95720019343805e-15 5.00240009718138e-15 3.46880006738821e-15 0.8 0.0009885067 9.87960019193051e-15 5.04700009804782e-15 3.3601000652765e-15 1 0.0011179 9.83230019101162e-15 5.09150009891232e-15 3.28150006374954e-15 1.2 0.0012519 9.80410019046378e-15 5.13550009976711e-15 3.22210006259558e-15 -0.2 -0.009263 1.81944003534617e-14 5.06320009836254e-15 1.27153002470195e-14 0 0. 1.85535003604379e-14 9.07720017634232e-15 9.07720017634232e-15 0.2 0.007759 1.6506400320669e-14 1.19723002325853e-14 3.90200007580397e-15 0.4 0.0088047 1.63555003177375e-14 1.19024002312273e-14 3.80210007386321e-15 0.6 0.0094163 1.61663003140619e-14 1.18145002295197e-14 3.68640007161551e-15 0.8 0.0098825 1.59400003096656e-14 1.17293002278645e-14 3.53100006859657e-15 1 0.0102717 1.57517003060075e-14 1.16456002262385e-14 3.41230006629059e-15 1.2 0.0106127 1.55985003030313e-14 1.15632002246377e-14 3.32750006464318e-15 -0.2 -0.007136 1.88866003669091e-14 7.46330014498917e-15 1.11289002162006e-14 0 0. 1.93232003753909e-14 9.5280001851e-15 9.5280001851e-15 0.2 0.0090428 1.82748003550237e-14 1.25436002436839e-14 5.3526001039847e-15 0.4 0.0114389 1.77397003446283e-14 1.33488002593265e-14 3.95610007685496e-15 0.6 0.0122526 1.76205003423126e-14 1.32424002572595e-14 3.92240007620028e-15 0.8 0.0127972 1.74389003387847e-14 1.31358002551886e-14 3.82700007434694e-15 1 0.013213 1.71955003340561e-14 1.30315002531623e-14 3.66800007125806e-15 1.2 0.0135515 1.69819003299065e-14 1.2929100251173e-14 3.53710006871507e-15 -0.2 -0.004436 1.89556003682495e-14 8.8017001709902e-15 9.90840019249001e-15 0 0. 1.9251400373996e-14 9.51180018478528e-15 9.51180018478528e-15 0.2 0.0067133 1.88894003669635e-14 1.08969002116935e-14 7.71400014985951e-15 0.4 0.0108859 1.79014003477696e-14 1.33820002599715e-14 4.15780008077338e-15 0.6 0.0118893 1.77709003452344e-14 1.33237002588389e-14 4.06160007890451e-15 0.8 0.0124744 1.7666900343214e-14 1.32214002568515e-14 4.03850007845574e-15 1 0.0129015 1.75123003402106e-14 1.31204002548894e-14 3.96400007700844e-15 1.2 0.013239 1.72785003356686e-14 1.30212002529622e-14 3.80870007399143e-15 -0.2 -0.0084624 1.65792003220833e-14 3.79760007377579e-15 1.20913002348971e-14 0 0. 9.55850018569252e-15 3.99570007762427e-15 3.99570007762427e-15 0.2 0.000157477 9.26770018004316e-15 3.92350007622164e-15 3.75550007295792e-15 0.4 0.0002071193 9.14830017772358e-15 3.94560007665098e-15 3.6278000704771e-15 0.6 0.0002606828 9.01950017522139e-15 3.97910007730178e-15 3.47980006760191e-15 0.8 0.0003203879 8.93350017355067e-15 4.01620007802252e-15 3.37070006548243e-15 1 0.0003873246 8.88030017251716e-15 4.05600007879572e-15 3.29190006395158e-15 1.2 0.0004622834 8.84860017190132e-15 4.09810007961359e-15 3.23220006279179e-15 -0.2 -0.0115421 1.8302100355554e-14 4.25030008257037e-15 1.36475002651293e-14 0 0. 1.89891003689003e-14 9.31330018092903e-15 9.31330018092903e-15 0.2 0.009195 1.68881003280843e-14 1.24884002426115e-14 3.80690007395646e-15 0.4 0.0103582 1.6785600326093e-14 1.23966002408282e-14 3.78150007346302e-15 0.6 0.0110844 1.66017003225204e-14 1.23125002391943e-14 3.6667000712328e-15 0.8 0.011645 1.63793003181999e-14 1.22305002376013e-14 3.51130006821386e-15 1 0.012117 1.61947003146137e-14 1.21498002360336e-14 3.39270006590982e-15 1.2 0.0125333 1.60449003117035e-14 1.20700002344833e-14 3.30790006426241e-15 -0.2 -0.0091354 1.89982003690771e-14 7.00910013616545e-15 1.17057002274061e-14 0 0. 1.96327003814035e-14 9.69520018834818e-15 9.69520018834818e-15 0.2 0.0113529 1.83401003562922e-14 1.35299002628447e-14 4.4389000862343e-15 0.4 0.013551 1.80757003511558e-14 1.37467002670565e-14 3.92330007621776e-15 0.6 0.0144897 1.79629003489644e-14 1.36349002648845e-14 3.90100007578454e-15 0.8 0.0151251 1.77818003454462e-14 1.35268002627845e-14 3.80680007395452e-15 1 0.0156093 1.75381003407118e-14 1.34210002607291e-14 3.64810007087146e-15 1.2 0.0160025 1.73239003365506e-14 1.33170002587087e-14 3.51740006833236e-15 -0.2 -0.0057216 1.91288003716143e-14 8.89830017286685e-15 1.00012001942928e-14 0 0. 1.94585003780193e-14 9.62440018697275e-15 9.62440018697275e-15 0.2 0.0085905 1.90255003696075e-14 1.13470002204376e-14 7.41250014400228e-15 0.4 0.0129177 1.80812003512626e-14 1.36831002658209e-14 4.05100007869858e-15 0.6 0.0140111 1.79857003494073e-14 1.3580000263818e-14 4.036300078413e-15 0.8 0.0146956 1.78842003474355e-14 1.34756002617898e-14 4.01750007804778e-15 1 0.015196 1.77304003444476e-14 1.33737002598102e-14 3.94420007662378e-15 1.2 0.0155894 1.74969003399114e-14 1.32736002578656e-14 3.78950007361843e-15 -0.2 -0.0056944 1.64365003193111e-14 4.50720008756116e-15 1.12223002180151e-14 0 0. 1.36406002649953e-14 6.27090012182447e-15 6.27090012182447e-15 0.2 0.0016617 1.19802002327388e-14 6.87610013358166e-15 3.77970007342805e-15 0.4 0.0019384 1.17813002288747e-14 6.84230013292503e-15 3.61290007018763e-15 0.6 0.0021428 1.16139002256227e-14 6.82880013266277e-15 3.46330006728136e-15 0.8 0.0023241 1.14910002232351e-14 6.81900013247238e-15 3.35490006517548e-15 1 0.0024942 1.13993002214537e-14 6.80980013229366e-15 3.27690006366018e-15 1.2 0.0026578 1.13269002200471e-14 6.80060013211493e-15 3.21810006251787e-15 -0.2 -0.006281 1.81375003523563e-14 5.8571001137856e-15 1.18613002304289e-14 0 0. 1.81199003520144e-14 8.84300017179253e-15 8.84300017179253e-15 0.2 0.0058773 1.66500003234587e-14 1.14031002215275e-14 4.63350009001478e-15 0.4 0.0073093 1.61210003131819e-14 1.15222002238412e-14 3.9227000762061e-15 0.6 0.0079297 1.58519003079541e-14 1.14141002217412e-14 3.73910007263932e-15 0.8 0.0083428 1.55976003030138e-14 1.13124002197654e-14 3.56980006935033e-15 1 0.0086656 1.53944002990663e-14 1.1217200217916e-14 3.44680006696082e-15 1.2 0.0089378 1.52307002958861e-14 1.11259002161423e-14 3.3601000652765e-15 -0.2 -0.0049245 1.85861003610713e-14 7.01440013626841e-15 1.12529002186095e-14 0 0. 1.88943003670587e-14 9.29620018059683e-15 9.29620018059683e-15 0.2 0.0061116 1.81849003532772e-14 1.17967002291739e-14 6.00360011663165e-15 0.4 0.0087004 1.75230003404185e-14 1.27412002475227e-14 4.32630008404682e-15 0.6 0.0097134 1.72618003353442e-14 1.27271002472488e-14 4.04680007861699e-15 0.8 0.0102869 1.70324003308876e-14 1.26276002453158e-14 3.89350007563884e-15 1 0.0106848 1.67696003257822e-14 1.25217002432585e-14 3.71600007219055e-15 1.2 0.0109924 1.65469003214558e-14 1.24176002412361e-14 3.57790006950769e-15 -0.2 -0.0032308 1.86168003616677e-14 7.85330015256568e-15 1.04907002038023e-14 0 0. 1.89312003677755e-14 9.33820018141276e-15 9.33820018141276e-15 0.2 0.004675 1.85705003607682e-14 1.11364002163463e-14 7.13150013854331e-15 0.4 0.0077938 1.79079003478959e-14 1.26986002466951e-14 4.84330009409056e-15 0.6 0.0091279 1.75934003417861e-14 1.28841002502988e-14 4.30700008367188e-15 0.8 0.0098385 1.74113003382485e-14 1.28298002492439e-14 4.15330008068596e-15 1 0.0102984 1.72223003345768e-14 1.27375002474508e-14 4.03410007837027e-15 1.2 0.0106345 1.69716003297065e-14 1.2639400245545e-14 3.86050007499775e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_gidl_lt.standard0000644000175000017500000002031214163340332025141 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 3.377195e-07 0. -3.3075e-12 -3.377162e-07 0.2 3.646937e-07 0. -5.611e-12 -3.646881e-07 0.3 3.866473e-07 0. -9.2018e-12 -3.86638e-07 0.4 4.079758e-07 0. -1.46458e-11 -4.079611e-07 0.5 4.288197e-07 0. -2.26853e-11 -4.28797e-07 0.6 4.492811e-07 0. -3.4277e-11 -4.492469e-07 0.7 4.694248e-07 0. -5.0629e-11 -4.693741e-07 0.8 4.892948e-07 0. -7.32392e-11 -4.892215e-07 0.9 5.089234e-07 0. -1.039345e-10 -5.088195e-07 1.00000 5.283356e-07 0. -1.449092e-10 -5.281907e-07 1.10000 5.475514e-07 0. -1.987625e-10 -5.473526e-07 1.20000 5.665874e-07 0. -2.685338e-10 -5.663189e-07 0. 0. 0. 0. 0. 0.1 1.8014e-06 0. -1.8821e-12 -1.8014e-06 0.2 2.069e-06 0. -3.311e-12 -2.069e-06 0.3 2.1593e-06 0. -5.6116e-12 -2.1593e-06 0.4 2.2432e-06 0. -9.2021e-12 -2.2431e-06 0.5 2.3236e-06 0. -1.46459e-11 -2.3236e-06 0.6 2.4014e-06 0. -2.26854e-11 -2.4014e-06 0.7 2.4771e-06 0. -3.42771e-11 -2.4771e-06 0.8 2.5509e-06 0. -5.0629e-11 -2.5509e-06 0.9 2.6232e-06 0. -7.32392e-11 -2.6232e-06 1.00000 2.6942e-06 0. -1.039345e-10 -2.6941e-06 1.10000 2.7639e-06 0. -1.449093e-10 -2.7638e-06 1.20000 2.8326e-06 0. -1.987625e-10 -2.8324e-06 0. 0. 0. 0. 0. 0.1 8.4562e-06 0. -3.813694e-13 -8.4562e-06 0.2 1.37524e-05 0. -7.487265e-13 -1.37524e-05 0.3 1.59393e-05 0. -1.4004e-12 -1.59393e-05 0.4 1.66373e-05 0. -2.5099e-12 -1.66373e-05 0.5 1.70757e-05 0. -4.3295e-12 -1.70757e-05 0.6 1.74579e-05 0. -7.2143e-12 -1.74578e-05 0.7 1.78129e-05 0. -1.16506e-11 -1.78129e-05 0.8 1.8149e-05 0. -1.8287e-11 -1.8149e-05 0.9 1.84701e-05 0. -2.79682e-11 -1.847e-05 1.00000 1.87785e-05 0. -4.17717e-11 -1.87785e-05 1.10000 1.90762e-05 0. -6.10459e-11 -1.90761e-05 1.20000 1.93645e-05 0. -8.74482e-11 -1.93645e-05 0. 0. 0. 0. 0. 0.1 1.42571e-05 0. -5.52532e-14 -1.42571e-05 0.2 2.60488e-05 0. -1.255378e-13 -2.60488e-05 0.3 3.48793e-05 0. -2.673572e-13 -3.48793e-05 0.4 4.02652e-05 0. -5.380814e-13 -4.02652e-05 0.5 4.28359e-05 0. -1.0298e-12 -4.28359e-05 0.6 4.41687e-05 0. -1.8843e-12 -4.41687e-05 0.7 4.5113e-05 0. -3.3115e-12 -4.5113e-05 0.8 4.59139e-05 0. -5.6118e-12 -4.59139e-05 0.9 4.66418e-05 0. -9.2022e-12 -4.66418e-05 1.00000 4.73219e-05 0. -1.46461e-11 -4.73219e-05 1.10000 4.7966e-05 0. -2.26855e-11 -4.7966e-05 1.20000 4.85809e-05 0. -3.42772e-11 -4.85808e-05 0. 0. 0. 0. 0. 0.1 1.80258e-05 0. -5.071e-15 -1.80258e-05 0.2 3.44312e-05 0. -1.40807e-14 -3.44312e-05 0.3 4.88009e-05 0. -3.57572e-14 -4.88009e-05 0.4 6.05927e-05 0. -8.4049e-14 -6.05927e-05 0.5 6.91884e-05 0. -1.845962e-13 -6.91884e-05 0.6 7.45336e-05 0. -3.818291e-13 -7.45336e-05 0.7 7.76153e-05 0. -7.488372e-13 -7.76153e-05 0.8 7.95835e-05 0. -1.4005e-12 -7.95835e-05 0.9 8.10658e-05 0. -2.51e-12 -8.10658e-05 1.00000 8.23179e-05 0. -4.3295e-12 -8.23179e-05 1.10000 8.3442e-05 0. -7.2143e-12 -8.3442e-05 1.20000 8.44831e-05 0. -1.16507e-11 -8.44831e-05 0. 0. 0. 0. 0. 0.1 7.13617e-08 0. -3.2881e-12 -7.13584e-08 0.2 7.88551e-08 0. -5.5802e-12 -7.88495e-08 0.3 8.61252e-08 0. -9.1544e-12 -8.6116e-08 0.4 9.32464e-08 0. -1.45748e-11 -9.32318e-08 0.5 1.002779e-07 0. -2.25816e-11 -1.002553e-07 0.6 1.072498e-07 0. -3.41291e-11 -1.072157e-07 0.7 1.141803e-07 0. -5.04222e-11 -1.141298e-07 0.8 1.210813e-07 0. -7.29558e-11 -1.210083e-07 0.9 1.279617e-07 0. -1.03553e-10 -1.278581e-07 1.00000 1.348283e-07 0. -1.444037e-10 -1.346839e-07 1.10000 1.416872e-07 0. -1.981027e-10 -1.414891e-07 1.20000 1.485438e-07 0. -2.676845e-10 -1.482761e-07 0. 0. 0. 0. 0. 0.1 1.2753e-06 0. -1.8703e-12 -1.2753e-06 0.2 1.3771e-06 0. -3.2916e-12 -1.3771e-06 0.3 1.4593e-06 0. -5.5807e-12 -1.4593e-06 0.4 1.5369e-06 0. -9.1546e-12 -1.5369e-06 0.5 1.6115e-06 0. -1.45749e-11 -1.6115e-06 0.6 1.6837e-06 0. -2.25817e-11 -1.6837e-06 0.7 1.7541e-06 0. -3.41291e-11 -1.7541e-06 0.8 1.8229e-06 0. -5.04223e-11 -1.8229e-06 0.9 1.8905e-06 0. -7.29559e-11 -1.8904e-06 1.00000 1.9569e-06 0. -1.03553e-10 -1.9568e-06 1.10000 2.0223e-06 0. -1.444038e-10 -2.0221e-06 1.20000 2.0868e-06 0. -1.981028e-10 -2.0866e-06 0. 0. 0. 0. 0. 0.1 1.13009e-05 0. -3.785037e-13 -1.13009e-05 0.2 1.76632e-05 0. -7.435035e-13 -1.76632e-05 0.3 1.95584e-05 0. -1.3913e-12 -1.95584e-05 0.4 2.0281e-05 0. -2.4947e-12 -2.0281e-05 0.5 2.088e-05 0. -4.3049e-12 -2.088e-05 0.6 2.14263e-05 0. -7.1759e-12 -2.14263e-05 0.7 2.19348e-05 0. -1.15924e-11 -2.19348e-05 0.8 2.24137e-05 0. -1.82009e-11 -2.24136e-05 0.9 2.28685e-05 0. -2.78439e-11 -2.28685e-05 1.00000 2.33035e-05 0. -4.15964e-11 -2.33035e-05 1.10000 2.37218e-05 0. -6.08033e-11 -2.37217e-05 1.20000 2.41258e-05 0. -8.71187e-11 -2.41257e-05 0. 0. 0. 0. 0. 0.1 2.02165e-05 0. -5.47463e-14 -2.02165e-05 0.2 3.66611e-05 0. -1.244772e-13 -3.66611e-05 0.3 4.85087e-05 0. -2.652699e-13 -4.85087e-05 0.4 5.48078e-05 0. -5.341872e-13 -5.48078e-05 0.5 5.73731e-05 0. -1.0229e-12 -5.73731e-05 0.6 5.89419e-05 0. -1.8725e-12 -5.89419e-05 0.7 6.02476e-05 0. -3.2921e-12 -6.02476e-05 0.8 6.14263e-05 0. -5.581e-12 -6.14263e-05 0.9 6.25172e-05 0. -9.1548e-12 -6.25172e-05 1.00000 6.35391e-05 0. -1.4575e-11 -6.35391e-05 1.10000 6.45044e-05 0. -2.25818e-11 -6.45044e-05 1.20000 6.5422e-05 0. -3.41292e-11 -6.5422e-05 0. 0. 0. 0. 0. 0.1 2.57813e-05 0. -5.0128e-15 -2.57813e-05 0.2 4.91621e-05 0. -1.39335e-14 -4.91621e-05 0.3 6.94672e-05 0. -3.54149e-14 -6.94672e-05 0.4 8.58334e-05 0. -8.33094e-14 -8.58334e-05 0.5 9.7017e-05 0. -1.830976e-13 -9.7017e-05 0.6 0.0001030401 0. -3.7896e-13 -0.0001030401 0.7 0.0001063517 0. -7.436134e-13 -0.0001063517 0.8 0.0001087132 0. -1.3914e-12 -0.0001087132 0.9 0.0001107052 0. -2.4948e-12 -0.0001107052 1.00000 0.0001125011 0. -4.305e-12 -0.0001125011 1.10000 0.0001141638 0. -7.176e-12 -0.0001141638 1.20000 0.0001157232 0. -1.15924e-11 -0.0001157232 0. 0. 0. 0. 0. 0.1 1.0149e-06 0. -3.3387e-12 -1.0149e-06 0.2 1.2305e-06 0. -5.6605e-12 -1.2305e-06 0.3 1.2937e-06 0. -9.2781e-12 -1.2937e-06 0.4 1.3389e-06 0. -1.47599e-11 -1.3389e-06 0.5 1.3806e-06 0. -2.28519e-11 -1.3806e-06 0.6 1.421e-06 0. -3.45146e-11 -1.421e-06 0.7 1.4605e-06 0. -5.09607e-11 -1.4605e-06 0.8 1.4993e-06 0. -7.36937e-11 -1.4992e-06 0.9 1.5374e-06 0. -1.045465e-10 -1.5373e-06 1.00000 1.5749e-06 0. -1.457198e-10 -1.5748e-06 1.10000 1.612e-06 0. -1.998202e-10 -1.6118e-06 1.20000 1.6485e-06 0. -2.698951e-10 -1.6482e-06 0. 0. 0. 0. 0. 0.1 2.3138e-06 0. -1.9011e-12 -2.3138e-06 0.2 3.1357e-06 0. -3.3422e-12 -3.1357e-06 0.3 3.3793e-06 0. -5.6611e-12 -3.3793e-06 0.4 3.5003e-06 0. -9.2783e-12 -3.5003e-06 0.5 3.5948e-06 0. -1.476e-11 -3.5947e-06 0.6 3.6808e-06 0. -2.28519e-11 -3.6807e-06 0.7 3.7626e-06 0. -3.45146e-11 -3.7626e-06 0.8 3.8417e-06 0. -5.09608e-11 -3.8417e-06 0.9 3.9187e-06 0. -7.36938e-11 -3.9187e-06 1.00000 3.994e-06 0. -1.045465e-10 -3.9939e-06 1.10000 4.0678e-06 0. -1.457199e-10 -4.0676e-06 1.20000 4.1402e-06 0. -1.998203e-10 -4.14e-06 0. 0. 0. 0. 0. 0.1 6.3577e-06 0. -3.85987e-13 -6.3577e-06 0.2 1.05863e-05 0. -7.571374e-13 -1.05863e-05 0.3 1.28971e-05 0. -1.415e-12 -1.28971e-05 0.4 1.40572e-05 0. -2.5344e-12 -1.40572e-05 0.5 1.46931e-05 0. -4.369e-12 -1.46931e-05 0.6 1.51112e-05 0. -7.276e-12 -1.51111e-05 0.7 1.5434e-05 0. -1.17442e-11 -1.5434e-05 0.8 1.57098e-05 0. -1.84252e-11 -1.57098e-05 0.9 1.5959e-05 0. -2.81676e-11 -1.59589e-05 1.00000 1.6191e-05 0. -4.20531e-11 -1.61909e-05 1.10000 1.64108e-05 0. -6.14351e-11 -1.64108e-05 1.20000 1.66214e-05 0. -8.79768e-11 -1.66213e-05 0. 0. 0. 0. 0. 0.1 9.8566e-06 0. -5.60717e-14 -9.8566e-06 0.2 1.79404e-05 0. -1.272488e-13 -1.79404e-05 0.3 2.3916e-05 0. -2.70722e-13 -2.3916e-05 0.4 2.79381e-05 0. -5.443546e-13 -2.79381e-05 0.5 3.05169e-05 0. -1.041e-12 -3.05169e-05 0.6 3.2188e-05 0. -1.9034e-12 -3.2188e-05 0.7 3.33347e-05 0. -3.3427e-12 -3.33347e-05 0.8 3.41846e-05 0. -5.6613e-12 -3.41846e-05 0.9 3.48626e-05 0. -9.2785e-12 -3.48626e-05 1.00000 3.54361e-05 0. -1.47601e-11 -3.54361e-05 1.10000 3.59421e-05 0. -2.28521e-11 -3.59421e-05 1.20000 3.64019e-05 0. -3.45147e-11 -3.64018e-05 0. 0. 0. 0. 0. 0.1 1.22525e-05 0. -5.1651e-15 -1.22525e-05 0.2 2.3266e-05 0. -1.43188e-14 -2.3266e-05 0.3 3.26075e-05 0. -3.63102e-14 -3.26075e-05 0.4 4.00471e-05 0. -8.52427e-14 -4.00471e-05 0.5 4.56622e-05 0. -1.870129e-13 -4.56622e-05 0.6 4.97632e-05 0. -3.864523e-13 -4.97632e-05 0.7 5.27373e-05 0. -7.572494e-13 -5.27373e-05 0.8 5.49303e-05 0. -1.4151e-12 -5.49303e-05 0.9 5.66009e-05 0. -2.5345e-12 -5.66009e-05 1.00000 5.79256e-05 0. -4.369e-12 -5.79256e-05 1.10000 5.90186e-05 0. -7.276e-12 -5.90186e-05 1.20000 5.99531e-05 0. -1.17442e-11 -5.9953e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_gidl_lw.standard0000644000175000017500000001653114163340332025345 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0008788336 1.08943802116446e-13 1.64298003191809e-14 8.69533016892376e-14 0 -1.353072e-10 6.98459013568929e-14 3.07753005978703e-14 3.07753005978703e-14 0.2 0.0001136989 4.75692009241246e-14 3.21678006249223e-14 5.69190011057627e-15 0.4 0.0001257742 4.67441009080954e-14 3.13939006098878e-14 5.69310011059958e-15 0.6 0.0001370915 4.59004008917049e-14 3.07460005973011e-14 5.55130010784484e-15 0.8 0.0001478933 4.51025008762041e-14 3.01302005853379e-14 5.42300010535236e-15 1 0.0001582902 4.43481008615484e-14 2.95348005737711e-14 5.31740010330087e-15 1.2 0.0001683423 4.36282008475629e-14 2.89573005625521e-14 5.22830010156993e-15 -0.2 -0.0009157424 1.42591402770116e-13 5.77593011220871e-14 8.17923015889751e-14 0 -2.92817e-11 1.44021502797899e-13 7.04399013684325e-14 7.04399013684325e-14 0.2 0.0009486639 1.1658080226481e-13 8.7701201703767e-14 2.40665004675387e-14 0.4 0.0011358 1.02386301989054e-13 8.95266017392289e-14 7.27890014140684e-15 0.6 0.0011849 1.01030501962715e-13 8.84855017190035e-14 6.98060013561178e-15 0.8 0.0012265 9.98894019405465e-14 8.75699017012162e-14 6.78630013183712e-15 1 0.0012639 9.88092019195616e-14 8.66839016840039e-14 6.62390012868219e-15 1.2 0.0012982 9.77761018994916e-14 8.5814701667118e-14 6.49140012610811e-15 -0.2 -0.0006162631 1.46898402853788e-13 6.94221013486598e-14 7.50331014576644e-14 0 -4.4333e-12 1.49614002906544e-13 7.35692014292253e-14 7.35692014292253e-14 0.2 0.0008611076 1.4387540279506e-13 8.03447015608526e-14 6.0680801178843e-14 0.4 0.0017674 1.19254602316753e-13 9.50960018474254e-14 2.00294003891102e-14 0.6 0.0020022 1.0924820212236e-13 9.56199018576032e-14 9.04680017575175e-15 0.8 0.0020796 1.07437702087187e-13 9.46204018381859e-14 8.22080015970509e-15 1 0.0021376 1.06283902064772e-13 9.37754018217702e-14 7.93470015414704e-15 1.2 0.0021879 1.05259302044867e-13 9.29813018063432e-14 7.73140015019753e-15 -0.2 -0.0003515643 1.45266302822081e-13 7.31636014213457e-14 6.98958013578623e-14 0 -4.088853e-13 1.47963802874486e-13 7.28645014155351e-14 7.28645014155351e-14 0.2 0.0005624493 1.46576102847527e-13 7.39437014365007e-14 7.02586013649104e-14 0.4 0.0013956 1.37115402663734e-13 8.4680501645084e-14 4.95877009633379e-14 0.6 0.0021978 1.17330202279368e-13 9.429220183181e-14 1.93436003757872e-14 0.8 0.0024579 1.09318002123716e-13 9.45527018368707e-14 1.07754002093332e-14 1 0.0025569 1.07123502081083e-13 9.36551018194331e-14 9.44460018347979e-15 1.2 0.0026238 1.05881002056945e-13 9.28603018039926e-14 9.00890017501547e-15 -0.2 -0.0011921 1.05738902054185e-13 8.19150015913587e-15 9.17595017826074e-14 0 -1.345007e-10 3.76404007312382e-14 1.36475002651293e-14 1.36475002651293e-14 0.2 3.80635e-05 2.86866005572932e-14 1.22366002377198e-14 5.59470010868797e-15 0.4 4.46381e-05 2.83010005498022e-14 1.1920400231577e-14 5.60520010889195e-15 0.6 5.0919e-05 2.78834005416895e-14 1.17264002278082e-14 5.46240010611778e-15 0.8 5.7019e-05 2.75057005343519e-14 1.15560002244979e-14 5.33540010365056e-15 1 6.29787e-05 2.71626005276865e-14 1.13958002213857e-14 5.23180010163793e-15 1.2 6.88173e-05 2.68440005214971e-14 1.12424002184056e-14 5.14500009995167e-15 -0.2 -0.001407 1.45304602822825e-13 5.6742201102328e-14 8.56458016638368e-14 0 -2.90688e-11 1.48380502882581e-13 7.27168014126658e-14 7.27168014126658e-14 0.2 0.001378 1.11876102173412e-13 9.39337018248455e-14 1.28287002492225e-14 0.4 0.0015209 1.05820402055768e-13 9.35393018171835e-14 6.90470013413727e-15 0.6 0.0015991 1.04714702034287e-13 9.25752017984539e-14 6.79450013199642e-15 0.8 0.0016655 1.03585402012349e-13 9.16614017807016e-14 6.61090012842963e-15 1 0.0017244 1.02503001991321e-13 9.07692017633689e-14 6.45210012534463e-15 1.2 0.0017783 1.01466201971179e-13 8.98925017463373e-14 6.32290012283467e-15 -0.2 -0.0009127503 1.49621702906694e-13 6.99945013597798e-14 7.73324015023328e-14 0 -4.3932e-12 1.53030302972912e-13 7.53632014640773e-14 7.53632014640773e-14 0.2 0.0013147 1.46795802851795e-13 8.37827016276425e-14 6.0300301171451e-14 0.4 0.0026009 1.17380502280345e-13 1.00558201953539e-13 1.26716002461706e-14 0.6 0.0028166 1.1267800218899e-13 1.00177601946145e-13 8.19560015921553e-15 0.8 0.0029287 1.11566702167401e-13 9.93038019291701e-14 7.9796001550193e-15 1 0.0030206 1.10498902146657e-13 9.84775019131176e-14 7.76430015083668e-15 1.2 0.0031002 1.09476802126801e-13 9.7670701897444e-14 7.5751001471611e-15 -0.2 -0.0004992835 1.47365502862862e-13 7.37481014327008e-14 7.1545501389911e-14 0 -4.041566e-13 1.50422402922249e-13 7.41660014408193e-14 7.41660014408193e-14 0.2 0.0008274713 1.49178202898078e-13 7.60955014783036e-14 7.08524013764462e-14 0.4 0.0021059 1.38182202684459e-13 8.79793017091696e-14 4.74459009217292e-14 0.6 0.0032062 1.15603702245828e-13 9.88122019196198e-14 1.32012002564591e-14 0.8 0.0034498 1.11559202167255e-13 9.84530019126417e-14 9.42000018300188e-15 1 0.003574 1.10404302144819e-13 9.76688018974071e-14 9.06240017605481e-15 1.2 0.003673 1.09396202125235e-13 9.69283018830214e-14 8.81550017125829e-15 -0.2 -0.0005581439 1.17735802287248e-13 2.90659005646618e-14 8.37724016274424e-14 0 -1.36604e-10 1.0066120195554e-13 4.7231600917566e-14 4.7231600917566e-14 0.2 0.0002206527 7.0910201377569e-14 5.48578010657198e-14 7.84870015247631e-15 0.4 0.0002392056 6.77374013159312e-14 5.32909010352797e-14 6.13150011911635e-15 0.6 0.0002512963 6.63823012896057e-14 5.2205101014186e-14 5.88180011426544e-15 0.8 0.0002625373 6.52443012674979e-14 5.12509009956488e-14 5.72940011130478e-15 1 0.0002732546 6.41879012469752e-14 5.03458009780654e-14 5.612100109026e-15 1.2 0.0002835558 6.31792012273793e-14 4.94695009610416e-14 5.5142001071241e-15 -0.2 -0.0005512346 1.38287602686507e-13 5.43205010552817e-14 8.07404015685398e-14 0 -2.96246e-11 1.3933890270693e-13 6.80023013210774e-14 6.80023013210774e-14 0.2 0.0005738916 1.22471302379244e-13 8.41522016348207e-14 3.39434006594168e-14 0.4 0.0008173179 1.04761202035191e-13 8.77200017041322e-14 1.1632600225986e-14 0.6 0.0008790402 9.95006019329934e-14 8.56503016639242e-14 8.20170015933403e-15 0.8 0.0009105789 9.72734018897256e-14 8.41802016353647e-14 7.40320014382161e-15 1 0.00093496 9.5796501861034e-14 8.3045401613319e-14 7.06610013727278e-15 1.2 0.0009563009 9.45867018375312e-14 8.2055901594096e-14 6.86520013336991e-15 -0.2 -0.0003955517 1.42475702767869e-13 6.55828012740739e-14 7.42220014419072e-14 0 -4.4981e-12 1.44891402814798e-13 7.10916013810931e-14 7.10916013810931e-14 0.2 0.0005242795 1.39290702705994e-13 7.94723015439045e-14 5.67644011027593e-14 0.4 0.0010222 1.24153602411926e-13 9.20006017872912e-14 2.83070005499187e-14 0.6 0.0012725 1.12663502188708e-13 9.33206018129348e-14 1.49208002898657e-14 0.8 0.0013794 1.07104602080716e-13 9.17204017818478e-14 1.07217002082899e-14 1 0.0014373 1.04150802023333e-13 9.01974017522605e-14 9.20430017881149e-15 1.2 0.0014774 1.02257301986548e-13 8.89666017283498e-14 8.51540016542826e-15 -0.2 -0.000241598 1.41756202753891e-13 7.05034013696662e-14 6.88383013373183e-14 0 -4.165427e-13 1.44225602801864e-13 7.08896013771688e-14 7.08896013771688e-14 0.2 0.000365047 1.42322002764883e-13 7.30885014198868e-14 6.66403012946179e-14 0.4 0.0008512016 1.33763902598625e-13 8.5544201661863e-14 4.52212008785101e-14 0.6 0.001264 1.22359602377074e-13 9.20374017880061e-14 2.68140005209143e-14 0.8 0.0015087 1.13906102212848e-13 9.27578018020013e-14 1.7277800335655e-14 1 0.0016428 1.08784402113349e-13 9.16428017803402e-14 1.30745002539977e-14 1.2 0.0017235 1.05572102050944e-13 9.03207017546559e-14 1.10878002154022e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_ig_sw.standard0000644000175000017500000001750014163340332024640 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -1.82681e-10 3.685333e-10 -3.1714e-12 -1.82681e-10 0.1 1.96197e-05 8.79287e-11 -3.2657e-12 -1.96198e-05 0.2 2.28027e-05 8.4436e-11 -3.2579e-12 -2.28028e-05 0.3 2.55944e-05 8.50783e-11 -3.2493e-12 -2.55945e-05 0.4 2.82913e-05 8.64142e-11 -3.2406e-12 -2.82914e-05 0.5 3.09827e-05 8.80578e-11 -3.2317e-12 -3.09828e-05 0.6 3.37111e-05 8.98715e-11 -3.2228e-12 -3.37112e-05 0.7 3.65005e-05 9.17936e-11 -3.2139e-12 -3.65006e-05 0.8 3.93662e-05 9.37919e-11 -3.2049e-12 -3.93663e-05 0.9 4.23187e-05 9.58482e-11 -3.1959e-12 -4.23188e-05 1.00000 4.53657e-05 9.79511e-11 -3.1869e-12 -4.53658e-05 1.10000 4.85133e-05 1.000932e-10 -3.1778e-12 -4.85134e-05 1.20000 5.17664e-05 1.022692e-10 -3.1687e-12 -5.17665e-05 0. -1.03344e-08 2.06707e-08 -2.0077e-12 -1.03344e-08 0.1 0.0008561589 4.2809e-09 -2.4088e-12 -0.0008561631 0.2 0.0010642 2.5389e-09 -2.5292e-12 -0.0010642 0.3 0.0011496 2.4854e-09 -2.5257e-12 -0.0011496 0.4 0.0012158 2.4743e-09 -2.5186e-12 -0.0012158 0.5 0.0012729 2.4691e-09 -2.5113e-12 -0.0012729 0.6 0.0013244 2.4663e-09 -2.5041e-12 -0.0013244 0.7 0.0013722 2.4647e-09 -2.4969e-12 -0.0013722 0.8 0.0014174 2.4639e-09 -2.4897e-12 -0.0014174 0.9 0.0014606 2.4635e-09 -2.4826e-12 -0.0014606 1.00000 0.0015024 2.4636e-09 -2.4756e-12 -0.0015024 1.10000 0.0015431 2.4639e-09 -2.4685e-12 -0.0015431 1.20000 0.0015828 2.4644e-09 -2.4615e-12 -0.0015828 0. -5.29047e-08 1.058109e-07 -1.54e-12 -5.29047e-08 0.1 0.0021732 2.51852e-08 -1.6922e-12 -0.0021733 0.2 0.0032916 9.0551e-09 -1.8259e-12 -0.0032916 0.3 0.0036511 7.8961e-09 -1.8486e-12 -0.0036511 0.4 0.0038547 7.7861e-09 -1.8485e-12 -0.0038547 0.5 0.0040113 7.7572e-09 -1.8466e-12 -0.0040113 0.6 0.0041431 7.7417e-09 -1.8445e-12 -0.0041431 0.7 0.0042588 7.7304e-09 -1.8424e-12 -0.0042588 0.8 0.0043633 7.7212e-09 -1.8403e-12 -0.0043633 0.9 0.0044593 7.7132e-09 -1.8382e-12 -0.0044593 1.00000 0.0045489 7.706e-09 -1.836e-12 -0.0045489 1.10000 0.0046334 7.6994e-09 -1.8339e-12 -0.0046334 1.20000 0.0047137 7.6932e-09 -1.8318e-12 -0.0047137 0. -1.63995e-07 3.279914e-07 -1.4739e-12 -1.63995e-07 0.1 0.0031267 8.27494e-08 -1.546e-12 -0.0031268 0.2 0.005291 2.58695e-08 -1.6272e-12 -0.005291 0.3 0.0062516 1.79469e-08 -1.6691e-12 -0.0062516 0.4 0.0066825 1.69793e-08 -1.6755e-12 -0.0066825 0.5 0.0069694 1.68109e-08 -1.6758e-12 -0.0069694 0.6 0.0071968 1.67569e-08 -1.6751e-12 -0.0071968 0.7 0.0073895 1.67278e-08 -1.6744e-12 -0.0073895 0.8 0.0075589 1.67065e-08 -1.6735e-12 -0.0075589 0.9 0.0077111 1.66885e-08 -1.6727e-12 -0.0077112 1.00000 0.0078504 1.66724e-08 -1.6718e-12 -0.0078504 1.10000 0.0079793 1.66574e-08 -1.671e-12 -0.0079793 1.20000 0.0080999 1.66432e-08 -1.6701e-12 -0.0080999 0. -1.55813e-11 3.22638e-11 -1.1012e-12 -1.55813e-11 0.1 3.3262e-06 1.06745e-11 -1.1058e-12 -3.3262e-06 0.2 3.997e-06 1.0748e-11 -1.1038e-12 -3.9971e-06 0.3 4.6509e-06 1.10815e-11 -1.1017e-12 -4.6509e-06 0.4 5.3265e-06 1.15145e-11 -1.0995e-12 -5.3265e-06 0.5 6.039e-06 1.20034e-11 -1.0973e-12 -6.039e-06 0.6 6.797e-06 1.25325e-11 -1.0951e-12 -6.797e-06 0.7 7.6065e-06 1.30947e-11 -1.0929e-12 -7.6065e-06 0.8 8.4726e-06 1.36869e-11 -1.0906e-12 -8.4726e-06 0.9 9.3996e-06 1.43075e-11 -1.0884e-12 -9.3997e-06 1.00000 1.03918e-05 1.49555e-11 -1.0861e-12 -1.03918e-05 1.10000 1.14531e-05 1.56307e-11 -1.0838e-12 -1.14531e-05 1.20000 1.25874e-05 1.63329e-11 -1.0815e-12 -1.25875e-05 0. -4.3733e-09 8.7473e-09 -7.363582e-13 -4.3733e-09 0.1 0.000908816 1.7972e-09 -8.9124e-13 -0.0009088178 0.2 0.0010668 1.4522e-09 -9.057711e-13 -0.0010668 0.3 0.0011535 1.4428e-09 -9.024663e-13 -0.0011535 0.4 0.0012236 1.4395e-09 -8.990997e-13 -0.0012236 0.5 0.0012852 1.4386e-09 -8.957428e-13 -0.0012852 0.6 0.0013416 1.4389e-09 -8.924032e-13 -0.0013416 0.7 0.0013946 1.4399e-09 -8.890836e-13 -0.0013946 0.8 0.0014451 1.4413e-09 -8.857851e-13 -0.0014451 0.9 0.001494 1.443e-09 -8.825084e-13 -0.001494 1.00000 0.0015415 1.4449e-09 -8.792536e-13 -0.0015415 1.10000 0.0015881 1.4469e-09 -8.760209e-13 -0.0015881 1.20000 0.0016338 1.449e-09 -8.728102e-13 -0.0016338 0. -2.47062e-08 4.94129e-08 -5.457544e-13 -2.47062e-08 0.1 0.002643 1.16261e-08 -6.016474e-13 -0.002643 0.2 0.003789 4.7043e-09 -6.430845e-13 -0.003789 0.3 0.0041277 4.5227e-09 -6.441786e-13 -0.0041277 0.4 0.0043509 4.5064e-09 -6.431949e-13 -0.0043509 0.5 0.0045281 4.4987e-09 -6.421612e-13 -0.0045281 0.6 0.0046784 4.4937e-09 -6.411277e-13 -0.0046784 0.7 0.004811 4.4902e-09 -6.400978e-13 -0.004811 0.8 0.0049311 4.4875e-09 -6.39072e-13 -0.0049311 0.9 0.005042 4.4855e-09 -6.380502e-13 -0.005042 1.00000 0.0051457 4.484e-09 -6.370326e-13 -0.0051457 1.10000 0.0052438 4.4827e-09 -6.36019e-13 -0.0052438 1.20000 0.0053373 4.4817e-09 -6.350094e-13 -0.0053373 0. -7.85333e-08 1.570672e-07 -5.166866e-13 -7.85333e-08 0.1 0.0038738 3.94775e-08 -5.435496e-13 -0.0038738 0.2 0.0063358 1.22744e-08 -5.732685e-13 -0.0063358 0.3 0.0072589 9.5319e-09 -5.830793e-13 -0.0072589 0.4 0.0077008 9.3941e-09 -5.831818e-13 -0.0077008 0.5 0.0080221 9.3736e-09 -5.827604e-13 -0.0080222 0.6 0.008283 9.3642e-09 -5.823045e-13 -0.008283 0.7 0.0085056 9.3578e-09 -5.818458e-13 -0.0085056 0.8 0.0087016 9.353e-09 -5.813877e-13 -0.0087017 0.9 0.0088782 9.3491e-09 -5.809307e-13 -0.0088782 1.00000 0.0090398 9.346e-09 -5.804748e-13 -0.0090398 1.10000 0.0091897 9.3434e-09 -5.800201e-13 -0.0091897 1.20000 0.00933 9.3411e-09 -5.795666e-13 -0.00933 0. -1.9427e-09 3.8949e-09 -9.4847e-12 -1.9427e-09 0.1 9.41525e-05 8.827431e-10 -1.05863e-11 -9.41534e-05 0.2 0.0001124455 5.749699e-10 -1.06966e-11 -0.000112446 0.3 0.0001235594 5.27385e-10 -1.06859e-11 -0.0001235599 0.4 0.0001328922 5.139814e-10 -1.06584e-11 -0.0001328927 0.5 0.0001414495 5.094676e-10 -1.06269e-11 -0.00014145 0.6 0.0001495961 5.082565e-10 -1.0594e-11 -0.0001495966 0.7 0.0001575077 5.085617e-10 -1.05606e-11 -0.0001575082 0.8 0.0001652828 5.096661e-10 -1.05271e-11 -0.0001652833 0.9 0.0001729824 5.11234e-10 -1.04936e-11 -0.0001729829 1.00000 0.000180647 5.130895e-10 -1.04601e-11 -0.0001806475 1.10000 0.0001883045 5.151325e-10 -1.04267e-11 -0.000188305 1.20000 0.0001959753 5.173022e-10 -1.03934e-11 -0.0001959758 0. -3.10056e-08 6.20172e-08 -6.1004e-12 -3.10056e-08 0.1 0.0008170522 1.53216e-08 -7.097e-12 -0.0008170676 0.2 0.0011221 7.0188e-09 -7.6484e-12 -0.0011221 0.3 0.0012557 5.6436e-09 -7.8228e-12 -0.0012557 0.4 0.0013404 5.2341e-09 -7.876e-12 -0.0013404 0.5 0.0014055 5.0652e-09 -7.8911e-12 -0.0014055 0.6 0.0014603 4.9797e-09 -7.8918e-12 -0.0014603 0.7 0.001509 4.93e-09 -7.8863e-12 -0.001509 0.8 0.0015535 4.8977e-09 -7.8779e-12 -0.0015535 0.9 0.0015951 4.8751e-09 -7.8678e-12 -0.0015951 1.00000 0.0016345 4.8581e-09 -7.8568e-12 -0.0016345 1.10000 0.0016722 4.8446e-09 -7.8452e-12 -0.0016723 1.20000 0.0017086 4.8335e-09 -7.8334e-12 -0.0017086 0. -1.359717e-07 2.719484e-07 -5.0095e-12 -1.359717e-07 0.1 0.0017283 7.03005e-08 -5.4421e-12 -0.0017284 0.2 0.0026825 2.73226e-08 -5.7891e-12 -0.0026826 0.3 0.0031469 1.95405e-08 -5.9673e-12 -0.0031469 0.4 0.0034153 1.71337e-08 -6.0461e-12 -0.0034154 0.5 0.0035993 1.6137e-08 -6.082e-12 -0.0035993 0.6 0.0037405 1.56394e-08 -6.0992e-12 -0.0037405 0.7 0.003857 1.53556e-08 -6.1078e-12 -0.003857 0.8 0.0039576 1.51763e-08 -6.1119e-12 -0.0039576 0.9 0.0040473 1.50533e-08 -6.1135e-12 -0.0040473 1.00000 0.004129 1.49631e-08 -6.1136e-12 -0.004129 1.10000 0.0042047 1.48932e-08 -6.1129e-12 -0.0042047 1.20000 0.0042757 1.48363e-08 -6.1116e-12 -0.0042757 0. -4.014225e-07 8.028499e-07 -4.9473e-12 -4.014225e-07 0.1 0.0024139 2.117e-07 -5.1484e-12 -0.0024141 0.2 0.004045 7.58205e-08 -5.3458e-12 -0.0040451 0.3 0.004963 4.96282e-08 -5.4799e-12 -0.0049631 0.4 0.0055043 4.11286e-08 -5.5539e-12 -0.0055044 0.5 0.0058626 3.75338e-08 -5.5932e-12 -0.0058626 0.6 0.0061247 3.57352e-08 -5.6148e-12 -0.0061247 0.7 0.0063312 3.47195e-08 -5.6272e-12 -0.0063313 0.8 0.0065027 3.409e-08 -5.6348e-12 -0.0065028 0.9 0.0066506 3.36692e-08 -5.6395e-12 -0.0066507 1.00000 0.0067817 3.33699e-08 -5.6426e-12 -0.0067817 1.10000 0.0069001 3.31452e-08 -5.6446e-12 -0.0069002 1.20000 0.0070089 3.29689e-08 -5.6459e-12 -0.007009 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_diode_lw.standard0000644000175000017500000002047614163340332025324 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 2.908e-06 0. -6.76515e-16 -2.908e-06 0.2 3.1482e-06 0. -6.906776e-16 -3.1482e-06 0.3 3.3636e-06 0. -6.909741e-16 -3.3636e-06 0.4 3.574e-06 0. -6.909803e-16 -3.574e-06 0.5 3.7807e-06 0. -6.909805e-16 -3.7807e-06 0.6 3.9848e-06 0. -6.909805e-16 -3.9848e-06 0.7 4.1866e-06 0. -6.909805e-16 -4.1866e-06 0.8 4.3866e-06 0. -6.909805e-16 -4.3866e-06 0.9 4.585e-06 0. -6.909805e-16 -4.585e-06 1.00000 4.782e-06 0. -6.909805e-16 -4.782e-06 1.10000 4.9777e-06 0. -6.909805e-16 -4.9777e-06 1.20000 5.1722e-06 0. -6.909805e-16 -5.1722e-06 0. 0. 0. 0. 0. 0.1 2.21863e-05 0. -6.76515e-16 -2.21863e-05 0.2 2.45997e-05 0. -6.906776e-16 -2.45997e-05 0.3 2.57915e-05 0. -6.909741e-16 -2.57915e-05 0.4 2.69209e-05 0. -6.909803e-16 -2.69209e-05 0.5 2.80088e-05 0. -6.909805e-16 -2.80088e-05 0.6 2.90646e-05 0. -6.909805e-16 -2.90646e-05 0.7 3.00941e-05 0. -6.909805e-16 -3.00941e-05 0.8 3.11014e-05 0. -6.909805e-16 -3.11014e-05 0.9 3.20897e-05 0. -6.909805e-16 -3.20897e-05 1.00000 3.3061e-05 0. -6.909805e-16 -3.3061e-05 1.10000 3.40173e-05 0. -6.909805e-16 -3.40173e-05 1.20000 3.49598e-05 0. -6.909805e-16 -3.49598e-05 0. 0. 0. 0. 0. 0.1 0.0001453855 0. -6.76515e-16 -0.0001453855 0.2 0.0002285978 0. -6.906776e-16 -0.0002285978 0.3 0.0002570121 0. -6.909741e-16 -0.0002570121 0.4 0.0002666445 0. -6.909803e-16 -0.0002666445 0.5 0.0002737066 0. -6.909805e-16 -0.0002737066 0.6 0.0002800685 0. -6.909805e-16 -0.0002800685 0.7 0.0002860244 0. -6.909805e-16 -0.0002860244 0.8 0.0002916766 0. -6.909805e-16 -0.0002916766 0.9 0.0002970823 0. -6.909805e-16 -0.0002970823 1.00000 0.0003022809 0. -6.909805e-16 -0.0003022809 1.10000 0.000307302 0. -6.909805e-16 -0.000307302 1.20000 0.0003121692 0. -6.909805e-16 -0.0003121692 0. 0. 0. 0. 0. 0.1 0.0002621886 0. -6.76515e-16 -0.0002621886 0.2 0.0004737011 0. -6.906776e-16 -0.0004737011 0.3 0.0006246332 0. -6.909741e-16 -0.0006246332 0.4 0.000708233 0. -6.909803e-16 -0.000708233 0.5 0.0007455618 0. -6.909805e-16 -0.0007455618 0.6 0.0007664362 0. -6.909805e-16 -0.0007664362 0.7 0.000782414 0. -6.909805e-16 -0.000782414 0.8 0.0007964115 0. -6.909805e-16 -0.0007964115 0.9 0.0008092836 0. -6.909805e-16 -0.0008092836 1.00000 0.0008213646 0. -6.909805e-16 -0.0008213646 1.10000 0.0008328248 0. -6.909805e-16 -0.0008328248 1.20000 0.0008437702 0. -6.909805e-16 -0.0008437702 0. 0. 0. 0. 0. 0.1 0.0003399254 0. -6.76515e-16 -0.0003399254 0.2 0.0006459126 0. -6.906776e-16 -0.0006459126 0.3 0.0009093975 0. -6.909741e-16 -0.0009093975 0.4 0.0011189 0. -6.909803e-16 -0.0011189 0.5 0.0012632 0. -6.909805e-16 -0.0012632 0.6 0.0013474 0. -6.909805e-16 -0.0013474 0.7 0.0013955 0. -6.909805e-16 -0.0013955 0.8 0.0014279 0. -6.909805e-16 -0.0014279 0.9 0.0014535 0. -6.909805e-16 -0.0014535 1.00000 0.0014758 0. -6.909805e-16 -0.0014758 1.10000 0.001496 0. -6.909805e-16 -0.001496 1.20000 0.0015149 0. -6.909805e-16 -0.0015149 0. 0. 0. 0. 0. 0.1 4.003764e-07 0. -4.697e-23 -4.003764e-07 0.2 4.46622e-07 0. -4.723e-23 -4.46622e-07 0.3 4.919977e-07 0. -4.723e-23 -4.919977e-07 0.4 5.369611e-07 0. -4.723e-23 -5.369611e-07 0.5 5.818278e-07 0. -4.723e-23 -5.818278e-07 0.6 6.267578e-07 0. -4.723e-23 -6.267578e-07 0.7 6.718431e-07 0. -4.723e-23 -6.718431e-07 0.8 7.171402e-07 0. -4.723e-23 -7.171402e-07 0.9 7.626855e-07 0. -4.723e-23 -7.626855e-07 1.00000 8.085032e-07 0. -4.723e-23 -8.085032e-07 1.10000 8.546094e-07 0. -4.723e-23 -8.546094e-07 1.20000 9.010151e-07 0. -4.723e-23 -9.010151e-07 0. 0. 0. 0. 0. 0.1 1.21708e-05 0. -4.697e-23 -1.21708e-05 0.2 1.31786e-05 0. -4.723e-23 -1.31786e-05 0.3 1.40936e-05 0. -4.723e-23 -1.40936e-05 0.4 1.49656e-05 0. -4.723e-23 -1.49656e-05 0.5 1.58082e-05 0. -4.723e-23 -1.58082e-05 0.6 1.66287e-05 0. -4.723e-23 -1.66287e-05 0.7 1.74314e-05 0. -4.723e-23 -1.74314e-05 0.8 1.82196e-05 0. -4.723e-23 -1.82196e-05 0.9 1.89952e-05 0. -4.723e-23 -1.89952e-05 1.00000 1.97597e-05 0. -4.723e-23 -1.97597e-05 1.10000 2.05142e-05 0. -4.723e-23 -2.05142e-05 1.20000 2.12596e-05 0. -4.723e-23 -2.12596e-05 0. 0. 0. 0. 0. 0.1 0.0001913874 0. -4.697e-23 -0.0001913874 0.2 0.0002859078 0. -4.723e-23 -0.0002859078 0.3 0.0003084662 0. -4.723e-23 -0.0003084662 0.4 0.000319693 0. -4.723e-23 -0.000319693 0.5 0.0003294799 0. -4.723e-23 -0.0003294799 0.6 0.0003384554 0. -4.723e-23 -0.0003384554 0.7 0.000346828 0. -4.723e-23 -0.000346828 0.8 0.0003547267 0. -4.723e-23 -0.0003547267 0.9 0.0003622422 0. -4.723e-23 -0.0003622422 1.00000 0.0003694411 0. -4.723e-23 -0.0003694411 1.10000 0.0003763741 0. -4.723e-23 -0.0003763741 1.20000 0.0003830804 0. -4.723e-23 -0.0003830804 0. 0. 0. 0. 0. 0.1 0.000371198 0. -4.697e-23 -0.000371198 0.2 0.0006646868 0. -4.723e-23 -0.0006646868 0.3 0.0008635132 0. -4.723e-23 -0.0008635132 0.4 0.0009552708 0. -4.723e-23 -0.0009552708 0.5 0.0009931286 0. -4.723e-23 -0.0009931286 0.6 0.0010195 0. -4.723e-23 -0.0010195 0.7 0.0010423 0. -4.723e-23 -0.0010423 0.8 0.001063 0. -4.723e-23 -0.001063 0.9 0.0010822 0. -4.723e-23 -0.0010822 1.00000 0.0011002 0. -4.723e-23 -0.0011002 1.10000 0.0011173 0. -4.723e-23 -0.0011173 1.20000 0.0011334 0. -4.723e-23 -0.0011334 0. 0. 0. 0. 0. 0.1 0.0004862697 0. -4.697e-23 -0.0004862697 0.2 0.0009220607 0. -4.723e-23 -0.0009220607 0.3 0.0012934 0. -4.723e-23 -0.0012934 0.4 0.0015815 0. -4.723e-23 -0.0015815 0.5 0.001762 0. -4.723e-23 -0.001762 0.6 0.0018525 0. -4.723e-23 -0.0018525 0.7 0.0019054 0. -4.723e-23 -0.0019054 0.8 0.0019462 0. -4.723e-23 -0.0019462 0.9 0.0019817 0. -4.723e-23 -0.0019817 1.00000 0.002014 0. -4.723e-23 -0.002014 1.10000 0.0020441 0. -4.723e-23 -0.0020441 1.20000 0.0020723 0. -4.723e-23 -0.0020723 0. 0. 0. 0. 0. 0.1 1.29539e-05 0. -9.303029e-10 -1.2953e-05 0.2 1.51988e-05 0. -9.902234e-10 -1.51978e-05 0.3 1.59504e-05 0. -9.940829e-10 -1.59494e-05 0.4 1.65525e-05 0. -9.943315e-10 -1.65515e-05 0.5 1.71257e-05 0. -9.943475e-10 -1.71247e-05 0.6 1.76851e-05 0. -9.943485e-10 -1.76841e-05 0.7 1.8234e-05 0. -9.943486e-10 -1.82331e-05 0.8 1.8774e-05 0. -9.943486e-10 -1.87731e-05 0.9 1.9306e-05 0. -9.943486e-10 -1.9305e-05 1.00000 1.98307e-05 0. -9.943486e-10 -1.98297e-05 1.10000 2.03487e-05 0. -9.943486e-10 -2.03477e-05 1.20000 2.08603e-05 0. -9.943486e-10 -2.08593e-05 0. 0. 0. 0. 0. 0.1 3.46306e-05 0. -9.303029e-10 -3.46297e-05 0.2 4.48821e-05 0. -9.902234e-10 -4.48811e-05 0.3 4.77777e-05 0. -9.940829e-10 -4.77767e-05 0.4 4.94308e-05 0. -9.943315e-10 -4.94298e-05 0.5 5.08298e-05 0. -9.943475e-10 -5.08289e-05 0.6 5.21401e-05 0. -9.943485e-10 -5.21391e-05 0.7 5.34008e-05 0. -9.943486e-10 -5.33998e-05 0.8 5.4626e-05 0. -9.943486e-10 -5.4625e-05 0.9 5.58224e-05 0. -9.943486e-10 -5.58214e-05 1.00000 5.6994e-05 0. -9.943486e-10 -5.6993e-05 1.10000 5.81439e-05 0. -9.943486e-10 -5.81429e-05 1.20000 5.92741e-05 0. -9.943486e-10 -5.92731e-05 0. 0. 0. 0. 0. 0.1 0.0001115461 0. -9.303029e-10 -0.0001115452 0.2 0.0001814113 0. -9.902234e-10 -0.0001814103 0.3 0.0002166613 0. -9.940829e-10 -0.0002166603 0.4 0.0002334937 0. -9.943315e-10 -0.0002334927 0.5 0.0002428367 0. -9.943475e-10 -0.0002428357 0.6 0.0002492753 0. -9.943485e-10 -0.0002492744 0.7 0.0002544671 0. -9.943486e-10 -0.0002544661 0.8 0.0002590305 0. -9.943486e-10 -0.0002590295 0.9 0.0002632231 0. -9.943486e-10 -0.0002632221 1.00000 0.0002671667 0. -9.943486e-10 -0.0002671657 1.10000 0.0002709265 0. -9.943486e-10 -0.0002709255 1.20000 0.0002745416 0. -9.943486e-10 -0.0002745406 0. 0. 0. 0. 0. 0.1 0.0001818709 0. -9.303029e-10 -0.00018187 0.2 0.0003273746 0. -9.902234e-10 -0.0003273736 0.3 0.0004309582 0. -9.940829e-10 -0.0004309572 0.4 0.0004978281 0. -9.943315e-10 -0.0004978271 0.5 0.0005393911 0. -9.943475e-10 -0.0005393901 0.6 0.0005660488 0. -9.943485e-10 -0.0005660478 0.7 0.0005845154 0. -9.943486e-10 -0.0005845145 0.8 0.0005984814 0. -9.943486e-10 -0.0005984804 0.9 0.000609866 0. -9.943486e-10 -0.000609865 1.00000 0.0006196727 0. -9.943486e-10 -0.0006196718 1.10000 0.0006284468 0. -9.943486e-10 -0.0006284458 1.20000 0.0006365 0. -9.943486e-10 -0.000636499 0. 0. 0. 0. 0. 0.1 0.0002310903 0. -9.303029e-10 -0.0002310894 0.2 0.0004362651 0. -9.902234e-10 -0.0004362641 0.3 0.0006069493 0. -9.940829e-10 -0.0006069483 0.4 0.0007395338 0. -9.943315e-10 -0.0007395328 0.5 0.000837039 0. -9.943475e-10 -0.000837038 0.6 0.0009067552 0. -9.943485e-10 -0.0009067542 0.7 0.0009567009 0. -9.943486e-10 -0.0009566999 0.8 0.0009934494 0. -9.943486e-10 -0.0009934484 0.9 0.0010216 0. -9.943486e-10 -0.0010216 1.00000 0.0010442 0. -9.943486e-10 -0.0010442 1.10000 0.0010631 0. -9.943486e-10 -0.0010631 1.20000 0.0010794 0. -9.943486e-10 -0.0010794 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_gidl_lw.standard0000644000175000017500000000662714163340332025355 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -2.36102e-08 2.60826005067054e-14 2.91750005667813e-15 2.91750005667813e-15 -0.8 -8.5795e-09 2.24198004355484e-14 3.04060005906959e-15 3.04060005906959e-15 -0.4 -2.423e-09 2.04751003977688e-14 3.22580006266746e-15 3.22580006266746e-15 1.11022302462516e-16 -4.793008e-10 1.95403003796085e-14 3.54670006890157e-15 3.54670006890157e-15 0.4 -5.60441e-11 1.33195502587583e-13 6.4626301255492e-14 6.4626301255492e-14 0.8 -2.8797e-12 1.49544002905184e-13 7.35659014291612e-14 7.35659014291612e-14 1.2 -3.68248e-14 1.45411802824908e-13 7.1646601391875e-14 7.1646601391875e-14 -1.2 -1.453932e-07 2.52171004898914e-14 1.57800003065573e-15 4.1391000804101e-15 -0.8 -7.73584e-08 2.16405004204089e-14 1.44890002814771e-15 4.45630008657232e-15 -0.4 -3.64262e-08 1.96656003820427e-14 1.41710002752993e-15 4.74130009210901e-15 1.11022302462516e-16 1.089956e-07 1.8562100360605e-14 1.55040003011955e-15 5.02030009752913e-15 0.4 0.0007991659 8.90153017292959e-14 7.66382014888466e-14 6.08840011827905e-15 0.8 0.0022547 1.06732202073481e-13 9.40792018276721e-14 8.20640015942534e-15 1.2 0.0026316 1.0694010207752e-13 9.17263017819624e-14 1.15358002241054e-14 -1.2 -2.35523e-08 2.55426004962149e-14 2.92940005690931e-15 2.92940005690931e-15 -0.8 -8.5535e-09 2.21250004298213e-14 3.04950005924249e-15 3.04950005924249e-15 -0.4 -2.4138e-09 2.02840003940563e-14 3.23330006281316e-15 3.23330006281316e-15 1.11022302462516e-16 -4.769187e-10 1.93646003761951e-14 3.53220006861988e-15 3.53220006861988e-15 0.4 -5.56686e-11 1.35167302625889e-13 6.5635001275088e-14 6.5635001275088e-14 0.8 -2.8523e-12 1.52733202967141e-13 7.52429014617402e-14 7.52429014617402e-14 1.2 -3.62948e-14 1.47362402862802e-13 7.26878014121024e-14 7.26878014121024e-14 -1.2 -1.451661e-07 2.46904004796592e-14 1.57970003068876e-15 4.16030008082195e-15 -0.8 -7.72152e-08 2.13529004148218e-14 1.44850002813994e-15 4.47350008690647e-15 -0.4 -3.63457e-08 1.94791003784195e-14 1.41640002751633e-15 4.75620009239847e-15 1.11022302462516e-16 -1.24422e-08 1.84053003575589e-14 1.52390002960473e-15 5.03380009779139e-15 0.4 0.0009801767 9.03535017552931e-14 7.82252015196772e-14 5.91420011489488e-15 0.8 0.0031798 1.10869502153856e-13 9.87260019179452e-14 8.0269001559382e-15 1.2 0.0036848 1.08346302104838e-13 9.47898018414769e-14 1.01900001979606e-14 -1.2 -2.37029e-08 2.70428005253592e-14 2.89680005627599e-15 2.89680005627599e-15 -0.8 -8.6211e-09 2.29255004453726e-14 3.02570005878013e-15 3.02570005878013e-15 -0.4 -2.4379e-09 2.07972004040262e-14 3.21350006242851e-15 3.21350006242851e-15 1.11022302462516e-16 -4.831267e-10 2.19152004257455e-14 4.69200009115126e-15 4.69200009115126e-15 0.4 -5.66484e-11 1.31728302559079e-13 6.39001012413842e-14 6.39001012413842e-14 0.8 -2.9238e-12 1.45023602817366e-13 7.11913013830299e-14 7.11913013830299e-14 1.2 -3.76862e-14 1.42311102764671e-13 6.99973013598342e-14 6.99973013598342e-14 -1.2 -1.457564e-07 2.61550005081119e-14 1.57240003054694e-15 4.10480007974375e-15 -0.8 -7.75873e-08 2.21340004299962e-14 1.44830002813605e-15 4.42830008602837e-15 -0.4 -3.57756e-08 1.99803003881563e-14 1.41790002754547e-15 4.71730009164276e-15 1.11022302462516e-16 4.5301e-06 1.98839003862836e-14 2.73790005318905e-15 4.99710009707842e-15 0.4 0.0006706125 8.85788017208161e-14 7.58145014728446e-14 6.45120012532715e-15 0.8 0.0015027 1.05202902043772e-13 9.07897017637671e-14 9.81160019060948e-15 1.2 0.0016064 1.11937902174612e-13 9.06087017602508e-14 1.77220003442844e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_diode_lw.standard0000644000175000017500000000712214163340332025670 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288983e-15 1258.93 1.0927564006002e-13 9.53119059792933e-14 9.47688274884048e-15 1584.89 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995.26 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511.89 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162.28 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981.07 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011.87 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309.57 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943.28 1.09276664567897e-13 9.53132791854431e-14 9.4769250142676e-15 10000 1.09275783926895e-13 9.53115292200125e-14 9.47692246669211e-15 12589.25 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848.93 1.09276031582681e-13 9.5312631632698e-14 9.47692490115591e-15 19952.62 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118.86 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622.78 1.09275780162271e-13 9.53124450565604e-14 9.47698962083786e-15 39810.72 1.0927602238714e-13 9.53121377669757e-14 9.47676386157643e-15 50118.72 1.09276059717827e-13 9.53121749406823e-14 9.4768201715675e-15 63095.73 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432.82 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 125892.54 1.09276014059111e-13 9.53122795246647e-14 9.47691737651631e-15 158489.32 1.09276017792978e-13 9.53122179251379e-14 9.47693475144662e-15 199526.23 1.09276015634006e-13 9.53122645884509e-14 9.47688956928716e-15 251188.64 1.09276024555722e-13 9.53122712055276e-14 9.47692697934026e-15 316227.77 1.09276042175139e-13 9.53122527818468e-14 9.47694019069255e-15 398107.17 1.09276030621809e-13 9.53122648831165e-14 9.47692448737011e-15 501187.23 1.09276053176795e-13 9.53122645022573e-14 9.47691487106397e-15 630957.34 1.09276033737846e-13 9.53122575399747e-14 9.47691770957772e-15 794328.23 1.09276051870338e-13 9.53122497661945e-14 9.47692627748105e-15 1000000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288984e-15 1258930 1.0927564006002e-13 9.53119059792933e-14 9.47688274884049e-15 1584890 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995260 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511890 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162280 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981070 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011870 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309570 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943280 1.09276664567897e-13 9.5313279185443e-14 9.47692701791021e-15 10000000 1.09275783926895e-13 9.53115292200124e-14 9.47692405824154e-15 12589250 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848930 1.09276031582681e-13 9.53126316326979e-14 9.47692389695599e-15 19952620 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118860 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622780 1.09276283454338e-13 9.53124450565603e-14 9.47698962083786e-15 39810720 1.0927602238714e-13 9.53121377669757e-14 9.47676386157642e-15 50118720 1.09276059717827e-13 9.53121749406823e-14 9.47682017156749e-15 63095730 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432820 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1g_st.standard0000644000175000017500000004422414163340332025144 0ustar carstencarstenFreq N(g) 100.00000 2.50683889e-30 125.89254 2.50683889e-30 158.48932 2.50683889e-30 199.52623 2.50683889e-30 251.18864 2.50683889e-30 316.22777 2.50683889e-30 398.10717 2.50683889e-30 501.18723 2.50683889e-30 630.95734 2.50683889e-30 794.32823 2.50683889e-30 1000 2.50683889e-30 1258.93 2.50683889e-30 1584.89 2.50683889e-30 1995.26 2.50683889e-30 2511.89 2.50683889e-30 3162.28 2.50683889e-30 3981.07 2.50683889e-30 5011.87 2.50683889e-30 6309.57 2.50683889e-30 7943.28 2.50683889e-30 10000 2.50683889e-30 12589.25 2.50683889e-30 15848.93 2.50683889e-30 19952.62 2.50683889e-30 25118.86 2.50683889e-30 31622.78 2.50683889e-30 39810.72 2.50683889e-30 50118.72 2.50683889e-30 63095.73 2.50683889e-30 79432.82 2.50683889e-30 100000 2.50683889e-30 125892.54 2.50683889e-30 158489.32 2.50683889e-30 199526.23 2.50683889e-30 251188.64 2.50683889e-30 316227.77 2.50683889e-30 398107.17 2.50683889e-30 501187.23 2.50683889e-30 630957.34 2.50683889e-30 794328.23 2.50683889e-30 1000000 2.50683889e-30 1258930 2.50683889e-30 1584890 2.50683889e-30 1995260 2.50683889e-30 2511890 2.50683889e-30 3162280 2.50683889e-30 3981070 2.50683889e-30 5011870 2.50683889e-30 6309570 2.50683889e-30 7943280 2.50683889e-30 10000000 2.50683889e-30 12589250 2.50683889e-30 15848930 2.50683889e-30 19952620 2.50683889e-30 25118860 2.50683889e-30 31622780 2.50683889e-30 39810720 2.50683889e-30 50118720 2.50683889e-30 63095730 2.50683889e-30 79432820 2.50683889e-30 100000000 2.50683889e-30 100.00000 4.120227721e-29 125.89254 4.120227721e-29 158.48932 4.120227721e-29 199.52623 4.120227721e-29 251.18864 4.120227721e-29 316.22777 4.120227721e-29 398.10717 4.120227721e-29 501.18723 4.120227721e-29 630.95734 4.120227721e-29 794.32823 4.120227721e-29 1000 4.120227721e-29 1258.93 4.120227721e-29 1584.89 4.120227721e-29 1995.26 4.120227721e-29 2511.89 4.120227721e-29 3162.28 4.120227721e-29 3981.07 4.120227721e-29 5011.87 4.120227721e-29 6309.57 4.120227721e-29 7943.28 4.120227721e-29 10000 4.120227721e-29 12589.25 4.120227721e-29 15848.93 4.120227721e-29 19952.62 4.120227721e-29 25118.86 4.120227721e-29 31622.78 4.120227721e-29 39810.72 4.120227721e-29 50118.72 4.120227721e-29 63095.73 4.120227721e-29 79432.82 4.120227721e-29 100000 4.120227721e-29 125892.54 4.120227721e-29 158489.32 4.120227721e-29 199526.23 4.120227721e-29 251188.64 4.120227721e-29 316227.77 4.120227721e-29 398107.17 4.120227721e-29 501187.23 4.120227721e-29 630957.34 4.120227721e-29 794328.23 4.120227721e-29 1000000 4.120227721e-29 1258930 4.120227721e-29 1584890 4.120227721e-29 1995260 4.120227721e-29 2511890 4.120227721e-29 3162280 4.120227721e-29 3981070 4.120227721e-29 5011870 4.120227721e-29 6309570 4.120227721e-29 7943280 4.120227721e-29 10000000 4.120227721e-29 12589250 4.120227721e-29 15848930 4.120227721e-29 19952620 4.120227721e-29 25118860 4.120227721e-29 31622780 4.120227721e-29 39810720 4.120227721e-29 50118720 4.120227721e-29 63095730 4.120227721e-29 79432820 4.120227721e-29 100000000 4.120227721e-29 100.00000 1.2377675025e-28 125.89254 1.2377675025e-28 158.48932 1.2377675025e-28 199.52623 1.2377675025e-28 251.18864 1.2377675025e-28 316.22777 1.2377675025e-28 398.10717 1.2377675025e-28 501.18723 1.2377675025e-28 630.95734 1.2377675025e-28 794.32823 1.2377675025e-28 1000 1.2377675025e-28 1258.93 1.2377675025e-28 1584.89 1.2377675025e-28 1995.26 1.2377675025e-28 2511.89 1.2377675025e-28 3162.28 1.2377675025e-28 3981.07 1.2377675025e-28 5011.87 1.2377675025e-28 6309.57 1.2377675025e-28 7943.28 1.2377675025e-28 10000 1.2377675025e-28 12589.25 1.2377675025e-28 15848.93 1.2377675025e-28 19952.62 1.2377675025e-28 25118.86 1.2377675025e-28 31622.78 1.2377675025e-28 39810.72 1.2377675025e-28 50118.72 1.2377675025e-28 63095.73 1.2377675025e-28 79432.82 1.2377675025e-28 100000 1.2377675025e-28 125892.54 1.2377675025e-28 158489.32 1.2377675025e-28 199526.23 1.2377675025e-28 251188.64 1.2377675025e-28 316227.77 1.2377675025e-28 398107.17 1.2377675025e-28 501187.23 1.2377675025e-28 630957.34 1.2377675025e-28 794328.23 1.2377675025e-28 1000000 1.2377675025e-28 1258930 1.2377675025e-28 1584890 1.2377675025e-28 1995260 1.2377675025e-28 2511890 1.2377675025e-28 3162280 1.2377675025e-28 3981070 1.2377675025e-28 5011870 1.2377675025e-28 6309570 1.2377675025e-28 7943280 1.2377675025e-28 10000000 1.2377675025e-28 12589250 1.2377675025e-28 15848930 1.2377675025e-28 19952620 1.2377675025e-28 25118860 1.2377675025e-28 31622780 1.2377675025e-28 39810720 1.2377675025e-28 50118720 1.2377675025e-28 63095730 1.2377675025e-28 79432820 1.2377675025e-28 100000000 1.2377675025e-28 100.00000 2.64973284e-28 125.89254 2.64973284e-28 158.48932 2.64973284e-28 199.52623 2.64973284e-28 251.18864 2.64973284e-28 316.22777 2.64973284e-28 398.10717 2.64973284e-28 501.18723 2.64973284e-28 630.95734 2.64973284e-28 794.32823 2.64973284e-28 1000 2.64973284e-28 1258.93 2.64973284e-28 1584.89 2.64973284e-28 1995.26 2.64973284e-28 2511.89 2.64973284e-28 3162.28 2.64973284e-28 3981.07 2.64973284e-28 5011.87 2.64973284e-28 6309.57 2.64973284e-28 7943.28 2.64973284e-28 10000 2.64973284e-28 12589.25 2.64973284e-28 15848.93 2.64973284e-28 19952.62 2.64973284e-28 25118.86 2.64973284e-28 31622.78 2.64973284e-28 39810.72 2.64973284e-28 50118.72 2.64973284e-28 63095.73 2.64973284e-28 79432.82 2.64973284e-28 100000 2.64973284e-28 125892.54 2.64973284e-28 158489.32 2.64973284e-28 199526.23 2.64973284e-28 251188.64 2.64973284e-28 316227.77 2.64973284e-28 398107.17 2.64973284e-28 501187.23 2.64973284e-28 630957.34 2.64973284e-28 794328.23 2.64973284e-28 1000000 2.64973284e-28 1258930 2.64973284e-28 1584890 2.64973284e-28 1995260 2.64973284e-28 2511890 2.64973284e-28 3162280 2.64973284e-28 3981070 2.64973284e-28 5011870 2.64973284e-28 6309570 2.64973284e-28 7943280 2.64973284e-28 10000000 2.64973284e-28 12589250 2.64973284e-28 15848930 2.64973284e-28 19952620 2.64973284e-28 25118860 2.64973284e-28 31622780 2.64973284e-28 39810720 2.64973284e-28 50118720 2.64973284e-28 63095730 2.64973284e-28 79432820 2.64973284e-28 100000000 2.64973284e-28 100.00000 5.1093217794304e-31 125.89254 5.1093217794304e-31 158.48932 5.1093217794304e-31 199.52623 5.1093217794304e-31 251.18864 5.1093217794304e-31 316.22777 5.1093217794304e-31 398.10717 5.1093217794304e-31 501.18723 5.1093217794304e-31 630.95734 5.1093217794304e-31 794.32823 5.1093217794304e-31 1000 5.1093217794304e-31 1258.93 5.1093217794304e-31 1584.89 5.1093217794304e-31 1995.26 5.1093217794304e-31 2511.89 5.1093217794304e-31 3162.28 5.1093217794304e-31 3981.07 5.1093217794304e-31 5011.87 5.1093217794304e-31 6309.57 5.1093217794304e-31 7943.28 5.1093217794304e-31 10000 5.1093217794304e-31 12589.25 5.1093217794304e-31 15848.93 5.1093217794304e-31 19952.62 5.1093217794304e-31 25118.86 5.1093217794304e-31 31622.78 5.1093217794304e-31 39810.72 5.1093217794304e-31 50118.72 5.1093217794304e-31 63095.73 5.1093217794304e-31 79432.82 5.1093217794304e-31 100000 5.1093217794304e-31 125892.54 5.1093217794304e-31 158489.32 5.1093217794304e-31 199526.23 5.1093217794304e-31 251188.64 5.1093217794304e-31 316227.77 5.1093217794304e-31 398107.17 5.1093217794304e-31 501187.23 5.1093217794304e-31 630957.34 5.1093217794304e-31 794328.23 5.1093217794304e-31 1000000 5.1093217794304e-31 1258930 5.1093217794304e-31 1584890 5.1093217794304e-31 1995260 5.1093217794304e-31 2511890 5.1093217794304e-31 3162280 5.1093217794304e-31 3981070 5.1093217794304e-31 5011870 5.1093217794304e-31 6309570 5.1093217794304e-31 7943280 5.1093217794304e-31 10000000 5.1093217794304e-31 12589250 5.1093217794304e-31 15848930 5.1093217794304e-31 19952620 5.1093217794304e-31 25118860 5.1093217794304e-31 31622780 5.1093217794304e-31 39810720 5.1093217794304e-31 50118720 5.1093217794304e-31 63095730 5.1093217794304e-31 79432820 5.1093217794304e-31 100000000 5.1093217794304e-31 100.00000 2.424676081e-29 125.89254 2.424676081e-29 158.48932 2.424676081e-29 199.52623 2.424676081e-29 251.18864 2.424676081e-29 316.22777 2.424676081e-29 398.10717 2.424676081e-29 501.18723 2.424676081e-29 630.95734 2.424676081e-29 794.32823 2.424676081e-29 1000 2.424676081e-29 1258.93 2.424676081e-29 1584.89 2.424676081e-29 1995.26 2.424676081e-29 2511.89 2.424676081e-29 3162.28 2.424676081e-29 3981.07 2.424676081e-29 5011.87 2.424676081e-29 6309.57 2.424676081e-29 7943.28 2.424676081e-29 10000 2.424676081e-29 12589.25 2.424676081e-29 15848.93 2.424676081e-29 19952.62 2.424676081e-29 25118.86 2.424676081e-29 31622.78 2.424676081e-29 39810.72 2.424676081e-29 50118.72 2.424676081e-29 63095.73 2.424676081e-29 79432.82 2.424676081e-29 100000 2.424676081e-29 125892.54 2.424676081e-29 158489.32 2.424676081e-29 199526.23 2.424676081e-29 251188.64 2.424676081e-29 316227.77 2.424676081e-29 398107.17 2.424676081e-29 501187.23 2.424676081e-29 630957.34 2.424676081e-29 794328.23 2.424676081e-29 1000000 2.424676081e-29 1258930 2.424676081e-29 1584890 2.424676081e-29 1995260 2.424676081e-29 2511890 2.424676081e-29 3162280 2.424676081e-29 3981070 2.424676081e-29 5011870 2.424676081e-29 6309570 2.424676081e-29 7943280 2.424676081e-29 10000000 2.424676081e-29 12589250 2.424676081e-29 15848930 2.424676081e-29 19952620 2.424676081e-29 25118860 2.424676081e-29 31622780 2.424676081e-29 39810720 2.424676081e-29 50118720 2.424676081e-29 63095730 2.424676081e-29 79432820 2.424676081e-29 100000000 2.424676081e-29 100.00000 7.159698225e-29 125.89254 7.159698225e-29 158.48932 7.159698225e-29 199.52623 7.159698225e-29 251.18864 7.159698225e-29 316.22777 7.159698225e-29 398.10717 7.159698225e-29 501.18723 7.159698225e-29 630.95734 7.159698225e-29 794.32823 7.159698225e-29 1000 7.159698225e-29 1258.93 7.159698225e-29 1584.89 7.159698225e-29 1995.26 7.159698225e-29 2511.89 7.159698225e-29 3162.28 7.159698225e-29 3981.07 7.159698225e-29 5011.87 7.159698225e-29 6309.57 7.159698225e-29 7943.28 7.159698225e-29 10000 7.159698225e-29 12589.25 7.159698225e-29 15848.93 7.159698225e-29 19952.62 7.159698225e-29 25118.86 7.159698225e-29 31622.78 7.159698225e-29 39810.72 7.159698225e-29 50118.72 7.159698225e-29 63095.73 7.159698225e-29 79432.82 7.159698225e-29 100000 7.159698225e-29 125892.54 7.159698225e-29 158489.32 7.159698225e-29 199526.23 7.159698225e-29 251188.64 7.159698225e-29 316227.77 7.159698225e-29 398107.17 7.159698225e-29 501187.23 7.159698225e-29 630957.34 7.159698225e-29 794328.23 7.159698225e-29 1000000 7.159698225e-29 1258930 7.159698225e-29 1584890 7.159698225e-29 1995260 7.159698225e-29 2511890 7.159698225e-29 3162280 7.159698225e-29 3981070 7.159698225e-29 5011870 7.159698225e-29 6309570 7.159698225e-29 7943280 7.159698225e-29 10000000 7.159698225e-29 12589250 7.159698225e-29 15848930 7.159698225e-29 19952620 7.159698225e-29 25118860 7.159698225e-29 31622780 7.159698225e-29 39810720 7.159698225e-29 50118720 7.159698225e-29 63095730 7.159698225e-29 79432820 7.159698225e-29 100000000 7.159698225e-29 100.00000 1.4795316496e-28 125.89254 1.4795316496e-28 158.48932 1.4795316496e-28 199.52623 1.4795316496e-28 251.18864 1.4795316496e-28 316.22777 1.4795316496e-28 398.10717 1.4795316496e-28 501.18723 1.4795316496e-28 630.95734 1.4795316496e-28 794.32823 1.4795316496e-28 1000 1.4795316496e-28 1258.93 1.4795316496e-28 1584.89 1.4795316496e-28 1995.26 1.4795316496e-28 2511.89 1.4795316496e-28 3162.28 1.4795316496e-28 3981.07 1.4795316496e-28 5011.87 1.4795316496e-28 6309.57 1.4795316496e-28 7943.28 1.4795316496e-28 10000 1.4795316496e-28 12589.25 1.4795316496e-28 15848.93 1.4795316496e-28 19952.62 1.4795316496e-28 25118.86 1.4795316496e-28 31622.78 1.4795316496e-28 39810.72 1.4795316496e-28 50118.72 1.4795316496e-28 63095.73 1.4795316496e-28 79432.82 1.4795316496e-28 100000 1.4795316496e-28 125892.54 1.4795316496e-28 158489.32 1.4795316496e-28 199526.23 1.4795316496e-28 251188.64 1.4795316496e-28 316227.77 1.4795316496e-28 398107.17 1.4795316496e-28 501187.23 1.4795316496e-28 630957.34 1.4795316496e-28 794328.23 1.4795316496e-28 1000000 1.4795316496e-28 1258930 1.4795316496e-28 1584890 1.4795316496e-28 1995260 1.4795316496e-28 2511890 1.4795316496e-28 3162280 1.4795316496e-28 3981070 1.4795316496e-28 5011870 1.4795316496e-28 6309570 1.4795316496e-28 7943280 1.4795316496e-28 10000000 1.4795316496e-28 12589250 1.4795316496e-28 15848930 1.4795316496e-28 19952620 1.4795316496e-28 25118860 1.4795316496e-28 31622780 1.4795316496e-28 39810720 1.4795316496e-28 50118720 1.4795316496e-28 63095730 1.4795316496e-28 79432820 1.4795316496e-28 100000000 1.4795316496e-28 100.00000 1.023168169e-29 125.89254 1.023168169e-29 158.48932 1.023168169e-29 199.52623 1.023168169e-29 251.18864 1.023168169e-29 316.22777 1.023168169e-29 398.10717 1.023168169e-29 501.18723 1.023168169e-29 630.95734 1.023168169e-29 794.32823 1.023168169e-29 1000 1.023168169e-29 1258.93 1.023168169e-29 1584.89 1.023168169e-29 1995.26 1.023168169e-29 2511.89 1.023168169e-29 3162.28 1.023168169e-29 3981.07 1.023168169e-29 5011.87 1.023168169e-29 6309.57 1.023168169e-29 7943.28 1.023168169e-29 10000 1.023168169e-29 12589.25 1.023168169e-29 15848.93 1.023168169e-29 19952.62 1.023168169e-29 25118.86 1.023168169e-29 31622.78 1.023168169e-29 39810.72 1.023168169e-29 50118.72 1.023168169e-29 63095.73 1.023168169e-29 79432.82 1.023168169e-29 100000 1.023168169e-29 125892.54 1.023168169e-29 158489.32 1.023168169e-29 199526.23 1.023168169e-29 251188.64 1.023168169e-29 316227.77 1.023168169e-29 398107.17 1.023168169e-29 501187.23 1.023168169e-29 630957.34 1.023168169e-29 794328.23 1.023168169e-29 1000000 1.023168169e-29 1258930 1.023168169e-29 1584890 1.023168169e-29 1995260 1.023168169e-29 2511890 1.023168169e-29 3162280 1.023168169e-29 3981070 1.023168169e-29 5011870 1.023168169e-29 6309570 1.023168169e-29 7943280 1.023168169e-29 10000000 1.023168169e-29 12589250 1.023168169e-29 15848930 1.023168169e-29 19952620 1.023168169e-29 25118860 1.023168169e-29 31622780 1.023168169e-29 39810720 1.023168169e-29 50118720 1.023168169e-29 63095730 1.023168169e-29 79432820 1.023168169e-29 100000000 1.023168169e-29 100.00000 8.100720016e-29 125.89254 8.100720016e-29 158.48932 8.100720016e-29 199.52623 8.100720016e-29 251.18864 8.100720016e-29 316.22777 8.100720016e-29 398.10717 8.100720016e-29 501.18723 8.100720016e-29 630.95734 8.100720016e-29 794.32823 8.100720016e-29 1000 8.100720016e-29 1258.93 8.100720016e-29 1584.89 8.100720016e-29 1995.26 8.100720016e-29 2511.89 8.100720016e-29 3162.28 8.100720016e-29 3981.07 8.100720016e-29 5011.87 8.100720016e-29 6309.57 8.100720016e-29 7943.28 8.100720016e-29 10000 8.100720016e-29 12589.25 8.100720016e-29 15848.93 8.100720016e-29 19952.62 8.100720016e-29 25118.86 8.100720016e-29 31622.78 8.100720016e-29 39810.72 8.100720016e-29 50118.72 8.100720016e-29 63095.73 8.100720016e-29 79432.82 8.100720016e-29 100000 8.100720016e-29 125892.54 8.100720016e-29 158489.32 8.100720016e-29 199526.23 8.100720016e-29 251188.64 8.100720016e-29 316227.77 8.100720016e-29 398107.17 8.100720016e-29 501187.23 8.100720016e-29 630957.34 8.100720016e-29 794328.23 8.100720016e-29 1000000 8.100720016e-29 1258930 8.100720016e-29 1584890 8.100720016e-29 1995260 8.100720016e-29 2511890 8.100720016e-29 3162280 8.100720016e-29 3981070 8.100720016e-29 5011870 8.100720016e-29 6309570 8.100720016e-29 7943280 8.100720016e-29 10000000 8.100720016e-29 12589250 8.100720016e-29 15848930 8.100720016e-29 19952620 8.100720016e-29 25118860 8.100720016e-29 31622780 8.100720016e-29 39810720 8.100720016e-29 50118720 8.100720016e-29 63095730 8.100720016e-29 79432820 8.100720016e-29 100000000 8.100720016e-29 100.00000 2.4193935936e-28 125.89254 2.4193935936e-28 158.48932 2.4193935936e-28 199.52623 2.4193935936e-28 251.18864 2.4193935936e-28 316.22777 2.4193935936e-28 398.10717 2.4193935936e-28 501.18723 2.4193935936e-28 630.95734 2.4193935936e-28 794.32823 2.4193935936e-28 1000 2.4193935936e-28 1258.93 2.4193935936e-28 1584.89 2.4193935936e-28 1995.26 2.4193935936e-28 2511.89 2.4193935936e-28 3162.28 2.4193935936e-28 3981.07 2.4193935936e-28 5011.87 2.4193935936e-28 6309.57 2.4193935936e-28 7943.28 2.4193935936e-28 10000 2.4193935936e-28 12589.25 2.4193935936e-28 15848.93 2.4193935936e-28 19952.62 2.4193935936e-28 25118.86 2.4193935936e-28 31622.78 2.4193935936e-28 39810.72 2.4193935936e-28 50118.72 2.4193935936e-28 63095.73 2.4193935936e-28 79432.82 2.4193935936e-28 100000 2.4193935936e-28 125892.54 2.4193935936e-28 158489.32 2.4193935936e-28 199526.23 2.4193935936e-28 251188.64 2.4193935936e-28 316227.77 2.4193935936e-28 398107.17 2.4193935936e-28 501187.23 2.4193935936e-28 630957.34 2.4193935936e-28 794328.23 2.4193935936e-28 1000000 2.4193935936e-28 1258930 2.4193935936e-28 1584890 2.4193935936e-28 1995260 2.4193935936e-28 2511890 2.4193935936e-28 3162280 2.4193935936e-28 3981070 2.4193935936e-28 5011870 2.4193935936e-28 6309570 2.4193935936e-28 7943280 2.4193935936e-28 10000000 2.4193935936e-28 12589250 2.4193935936e-28 15848930 2.4193935936e-28 19952620 2.4193935936e-28 25118860 2.4193935936e-28 31622780 2.4193935936e-28 39810720 2.4193935936e-28 50118720 2.4193935936e-28 63095730 2.4193935936e-28 79432820 2.4193935936e-28 100000000 2.4193935936e-28 100.00000 5.3403974649e-28 125.89254 5.3403974649e-28 158.48932 5.3403974649e-28 199.52623 5.3403974649e-28 251.18864 5.3403974649e-28 316.22777 5.3403974649e-28 398.10717 5.3403974649e-28 501.18723 5.3403974649e-28 630.95734 5.3403974649e-28 794.32823 5.3403974649e-28 1000 5.3403974649e-28 1258.93 5.3403974649e-28 1584.89 5.3403974649e-28 1995.26 5.3403974649e-28 2511.89 5.3403974649e-28 3162.28 5.3403974649e-28 3981.07 5.3403974649e-28 5011.87 5.3403974649e-28 6309.57 5.3403974649e-28 7943.28 5.3403974649e-28 10000 5.3403974649e-28 12589.25 5.3403974649e-28 15848.93 5.3403974649e-28 19952.62 5.3403974649e-28 25118.86 5.3403974649e-28 31622.78 5.3403974649e-28 39810.72 5.3403974649e-28 50118.72 5.3403974649e-28 63095.73 5.3403974649e-28 79432.82 5.3403974649e-28 100000 5.3403974649e-28 125892.54 5.3403974649e-28 158489.32 5.3403974649e-28 199526.23 5.3403974649e-28 251188.64 5.3403974649e-28 316227.77 5.3403974649e-28 398107.17 5.3403974649e-28 501187.23 5.3403974649e-28 630957.34 5.3403974649e-28 794328.23 5.3403974649e-28 1000000 5.3403974649e-28 1258930 5.3403974649e-28 1584890 5.3403974649e-28 1995260 5.3403974649e-28 2511890 5.3403974649e-28 3162280 5.3403974649e-28 3981070 5.3403974649e-28 5011870 5.3403974649e-28 6309570 5.3403974649e-28 7943280 5.3403974649e-28 10000000 5.3403974649e-28 12589250 5.3403974649e-28 15848930 5.3403974649e-28 19952620 5.3403974649e-28 25118860 5.3403974649e-28 31622780 5.3403974649e-28 39810720 5.3403974649e-28 50118720 5.3403974649e-28 63095730 5.3403974649e-28 79432820 5.3403974649e-28 100000000 5.3403974649e-28 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_gidl_sw.standard0000644000175000017500000000627214163340332025216 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.79170003480727e-14 2.96570005761451e-15 2.96570005761451e-15 -0.8 0. 1.13918002213079e-14 3.11410006049747e-15 3.11410006049747e-15 -0.4 0. 9.17520017824617e-15 3.30320006417111e-15 3.30320006417111e-15 1.11022302462516e-16 0. 9.10180017682023e-15 3.59790006989623e-15 3.59790006989623e-15 0.4 0. 1.71857003338658e-14 8.30290016130004e-15 8.30290016130004e-15 0.8 0. 1.93381003756803e-14 9.54090018535061e-15 9.54090018535061e-15 1.2 0. 1.90553003701864e-14 9.42220018304463e-15 9.42220018304463e-15 -1.2 -6.39e-08 1.71192003325739e-14 3.02650005879567e-15 2.66840005183888e-15 -0.8 -3.39988e-08 1.08535002108504e-14 3.04160005908902e-15 2.95750005745521e-15 -0.4 -1.59913e-08 8.75620017010627e-15 3.19290006202831e-15 3.08970006002345e-15 1.11022302462516e-16 1.1826e-06 8.5101001653253e-15 3.45920006720171e-15 3.20680006229835e-15 0.4 0.0070101 1.42208002762668e-14 9.99710019421318e-15 3.33790006484522e-15 0.8 0.0133081 1.73042003361679e-14 1.30987002544678e-14 3.72810007242562e-15 1.2 0.0118055 1.74775003395345e-14 1.29632002518355e-14 4.11610007996328e-15 -1.2 0. 1.82920003553578e-14 2.96790005765725e-15 2.96790005765725e-15 -0.8 0. 1.07170002081986e-14 3.12150006064123e-15 3.12150006064123e-15 -0.4 0. 9.04780017577118e-15 3.30580006422162e-15 3.30580006422162e-15 1.11022302462516e-16 0. 9.04500017571678e-15 3.59870006991177e-15 3.59870006991177e-15 0.4 0. 1.73378003368206e-14 8.38370016286973e-15 8.38370016286973e-15 0.8 0. 1.96223003812015e-14 9.69450018833458e-15 9.69450018833458e-15 1.2 0. 1.92122003732345e-14 9.50820018471534e-15 9.50820018471534e-15 -1.2 -6.38002e-08 1.74720003394277e-14 3.01900005864997e-15 2.67630005199235e-15 -0.8 -3.39359e-08 1.02366001988659e-14 3.0493000592386e-15 2.9699000576961e-15 -0.4 -1.59739e-08 8.63440016774007e-15 3.19490006206717e-15 3.09360006009922e-15 1.11022302462516e-16 1.86335e-08 8.45500016425488e-15 3.45860006719006e-15 3.2095000623508e-15 0.4 0.0077273 1.43678002791226e-14 1.01777001977217e-14 3.32300006455576e-15 0.8 0.015711 1.76142003421902e-14 1.34522002613352e-14 3.70840007204291e-15 1.2 0.013892 1.76461003428099e-14 1.31640002557364e-14 4.09560007956502e-15 -1.2 0. 1.74834003396492e-14 2.96130005752903e-15 2.96130005752903e-15 -0.8 0. 1.24025002409428e-14 3.10170006025658e-15 3.10170006025658e-15 -0.4 0. 9.42680018313399e-15 3.29840006407786e-15 3.29840006407786e-15 1.11022302462516e-16 0. 9.27690018022189e-15 3.63920007069856e-15 3.63920007069856e-15 0.4 0. 1.71550003332694e-14 8.29120016107274e-15 8.29120016107274e-15 0.8 0. 1.89326003678027e-14 9.32170018109222e-15 9.32170018109222e-15 1.2 0. 1.88001003652286e-14 9.28290018033845e-15 9.28290018033845e-15 -1.2 -6.40593e-08 1.67130003246826e-14 3.03740005900742e-15 2.6537000515533e-15 -0.8 -3.40702e-08 1.17973002291856e-14 3.03060005887532e-15 2.93550005702782e-15 -0.4 2.5333e-09 8.9968001747804e-15 3.18840006194089e-15 3.08310005989523e-15 1.11022302462516e-16 3.96508e-05 8.66090016825489e-15 3.5210000684023e-15 3.20170006219927e-15 0.4 0.0065963 1.42546002769234e-14 1.00005001942792e-14 3.36440006536004e-15 0.8 0.0107329 1.69053003284184e-14 1.26156002450827e-14 3.77950007342416e-15 1.2 0.0093013 1.72752003356045e-14 1.26459002456713e-14 4.21480008188072e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_diode_lt.standard0000644000175000017500000001643514163340332025512 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.04585e-05 6.02750011709595e-15 1.2882000250258e-15 4.50810008757864e-15 0 0. 4.97640009667628e-15 2.33950004544935e-15 2.33950004544935e-15 0.2 1.2458e-05 3.35060006509194e-15 2.67070005188356e-15 2.9214670567552e-16 0.4 1.34987e-05 3.2903000639205e-15 2.61550005081119e-15 2.88506305604798e-16 0.6 1.44607e-05 3.23270006280151e-15 2.56690004986704e-15 2.812639054641e-16 0.8 1.53717e-05 3.1774000617272e-15 2.51990004895398e-15 2.74684805336288e-16 1 1.62446e-05 3.12450006069951e-15 2.47410004806422e-15 2.69253605230777e-16 1.2 1.70867e-05 3.07330005970485e-15 2.42930004719389e-15 2.6465760514149e-16 -0.2 -4.54461e-05 7.3931001436254e-15 3.12130006063734e-15 4.13070008024691e-15 0 0. 7.49100014552729e-15 3.67340007136296e-15 3.67340007136296e-15 0.2 5.18758e-05 6.40720012447236e-15 4.47280008689287e-15 1.73350003367662e-15 0.4 6.86039e-05 5.35570010404493e-15 4.71490009159613e-15 3.89396107564779e-16 0.6 7.15768e-05 5.26700010232175e-15 4.65820009049463e-15 3.57106006937481e-16 0.8 7.3957e-05 5.20790010117362e-15 4.6113000895835e-15 3.46458506730633e-16 1 7.60776e-05 5.15310010010903e-15 4.56630008870929e-15 3.38094606568148e-16 1.2 7.80173e-05 5.10080009909299e-15 4.5223000878545e-15 3.31325406436643e-16 -0.2 -2.97885e-05 7.52710014622861e-15 3.60150006996617e-15 3.80620007394286e-15 0 0. 7.66720014895033e-15 3.77320007330177e-15 3.77320007330177e-15 0.2 4.24502e-05 7.4383001445035e-15 4.06090007889091e-15 3.24320006300549e-15 0.4 9.25303e-05 6.3253001228813e-15 4.81300009350192e-15 1.32880002581453e-15 0.6 0.0001103412 5.62680010931157e-15 4.91920009556506e-15 4.96129109638276e-16 0.8 0.0001150634 5.50330010691234e-15 4.8666000945432e-15 4.23324408223903e-16 1 0.0001182719 5.4402001056865e-15 4.82230009368259e-15 4.05364707875e-16 1.2 0.0001210027 5.38720010465687e-15 4.78160009289191e-15 3.9442830766254e-16 -0.2 -1.67936e-05 7.42390014422375e-15 3.76230007309002e-15 3.5517000689987e-15 0 0. 7.56120014689107e-15 3.7250000723654e-15 3.7250000723654e-15 0.2 2.70951e-05 7.50710014584007e-15 3.75200007288992e-15 3.63850007068496e-15 0.4 6.78196e-05 7.11150013815477e-15 4.24550008247712e-15 2.73230005308026e-15 0.6 0.0001132255 6.14000011928148e-15 4.77420009274815e-15 1.19650002324435e-15 0.8 0.0001312815 5.61220010902794e-15 4.83230009387686e-15 5.93442011528769e-16 1 0.0001374086 5.46650010619743e-15 4.7872000930007e-15 4.90141009521946e-16 1.2 0.0001411385 5.39560010482006e-15 4.74540009218866e-15 4.61309508961837e-16 -0.2 -7.36283e-05 5.76090011191673e-15 6.77187613155691e-16 4.83620009395262e-15 0 0. 3.69530007178842e-15 1.66260003229925e-15 1.66260003229925e-15 0.2 7.4531e-06 2.48370004825072e-15 1.77020003438959e-15 2.78962105419383e-16 0.4 8.4677e-06 2.44060004741342e-15 1.7290000335892e-15 2.79520905430239e-16 0.6 9.4151e-06 2.39490004652561e-15 1.69290003288789e-15 2.72261505289211e-16 0.8 1.03199e-05 2.35150004568248e-15 1.65830003221571e-15 2.65811305163903e-16 1 1.11921e-05 2.31030004488209e-15 1.62470003156297e-15 2.60560905061904e-16 1.2 1.20367e-05 2.27100004411861e-15 1.59210003092965e-15 2.56164704976499e-16 -0.2 -6.96679e-05 7.54580014659189e-15 3.09830006019052e-15 4.31260008378067e-15 0 0. 7.71630014990419e-15 3.79040007363592e-15 3.79040007363592e-15 0.2 7.92456e-05 6.20790012060057e-15 4.82090009365539e-15 1.17450002281695e-15 0.4 9.33773e-05 5.52250010728534e-15 4.92680009571271e-15 3.53070106859076e-16 0.6 9.79813e-05 5.46450010615858e-15 4.87720009474913e-15 3.46081506723309e-16 0.8 0.0001018373 5.40710010504347e-15 4.83070009384578e-15 3.36696206540981e-16 1 0.00010523 5.35220010397693e-15 4.78540009296574e-15 3.28602406383743e-16 1.2 0.0001083021 5.29960010295507e-15 4.74090009210124e-15 3.22020806255883e-16 -0.2 -4.39985e-05 7.6648001489037e-15 3.63150007054897e-15 3.92070007616725e-15 0 0. 7.83680015224514e-15 3.861800075023e-15 3.861800075023e-15 0.2 6.4652e-05 7.59420014753216e-15 4.22550008208858e-15 3.24110006296469e-15 0.4 0.0001393148 6.18370012013044e-15 5.10940009926007e-15 8.87872617248658e-16 0.6 0.0001557135 5.76900011207408e-15 5.14520009995555e-15 4.23851208234137e-16 0.8 0.0001620073 5.7058001108463e-15 5.09990009907551e-15 4.066979079009e-16 1 0.0001670388 5.65110010978365e-15 5.05770009825569e-15 3.95394407681308e-16 1.2 0.0001713836 5.59910010877345e-15 5.01670009745919e-15 3.85718207493329e-16 -0.2 -2.37613e-05 7.53030014629078e-15 3.79140007365534e-15 3.63540007062474e-15 0 0. 7.68480014929224e-15 3.79010007363009e-15 3.79010007363009e-15 0.2 3.97441e-05 7.63840014839083e-15 3.85940007497638e-15 3.66900007127749e-15 0.4 0.0001017315 7.19600013979635e-15 4.38930008527072e-15 2.67800005202538e-15 0.6 0.0001680752 6.00440011664719e-15 5.01010009733097e-15 8.27692516079542e-16 0.8 0.0001853006 5.6866001104733e-15 5.02130009754855e-15 4.91349709545427e-16 1 0.0001923443 5.61710010912313e-15 4.98100009676565e-15 4.62495008984868e-16 1.2 0.00019769 5.56470010810516e-15 4.94310009602937e-15 4.48835908719513e-16 -0.2 -3.03715e-05 6.32060012278999e-15 1.79000003477424e-15 4.32020008392832e-15 0 0. 5.82750011321056e-15 2.79150005423034e-15 2.79150005423034e-15 0.2 1.63949e-05 4.23750008232171e-15 3.3861000657816e-15 5.14387509992981e-16 0.4 1.80942e-05 3.96550007703758e-15 3.29480006400792e-15 3.22285406261023e-16 0.6 1.88995e-05 3.88110007539794e-15 3.22980006274517e-15 3.02949405885383e-16 0.8 1.96177e-05 3.81670007414685e-15 3.17550006169029e-15 2.93986205711256e-16 1 2.02953e-05 3.75810007300843e-15 3.1247000607034e-15 2.87616805587518e-16 1.2 2.09436e-05 3.70260007193023e-15 3.07580005975342e-15 2.82438705486923e-16 -0.2 -2.75466e-05 7.15440013898818e-15 2.92970005691514e-15 4.0740000791454e-15 0 0. 7.2322001404996e-15 3.53910006875393e-15 3.53910006875393e-15 0.2 3.05926e-05 6.52740012680748e-15 4.30500008363303e-15 2.03150003946585e-15 0.4 4.68899e-05 5.56420010809544e-15 4.61290008961459e-15 7.12169713835286e-16 0.6 5.14433e-05 5.21430010129795e-15 4.51210008765635e-15 4.4815160870622e-16 0.8 5.34757e-05 5.07440009858012e-15 4.42900008604197e-15 3.88192507541397e-16 1 5.49196e-05 4.98970009693466e-15 4.36660008482973e-15 3.6560600710261e-16 1.2 5.61399e-05 4.92400009565831e-15 4.31390008380593e-15 3.53389006865271e-16 -0.2 -1.92255e-05 7.30460014190611e-15 3.42210006648097e-15 3.75260007290158e-15 0 0. 7.42910014432477e-15 3.64880007088506e-15 3.64880007088506e-15 0.2 2.60253e-05 7.19430013976332e-15 4.00940007789042e-15 3.04080005907347e-15 0.4 5.29952e-05 6.48750012603235e-15 4.67410009080352e-15 1.63800003182135e-15 0.6 6.84125e-05 5.8660001139585e-15 4.80280009330376e-15 8.61288716732214e-16 0.8 7.53107e-05 5.53750010757674e-15 4.73420009197107e-15 5.88886311440266e-16 1 7.89084e-05 5.36250010417703e-15 4.65450009042275e-15 4.88623509492465e-16 1.2 8.1273e-05 5.25380010206532e-15 4.58840008913862e-15 4.44334808632071e-16 -0.2 -1.16095e-05 7.24710014078906e-15 3.63840007068302e-15 3.48900006778063e-15 0 0. 7.37230014322132e-15 3.62560007043436e-15 3.62560007043436e-15 0.2 1.76845e-05 7.29360014169241e-15 3.69660007181367e-15 3.47020006741541e-15 0.4 4.21365e-05 6.90580013415864e-15 4.30620008365634e-15 2.45720004773591e-15 0.6 6.4649e-05 6.34360012323681e-15 4.67300009078215e-15 1.50710002927836e-15 0.8 7.90381e-05 5.88950011441503e-15 4.7434000921498e-15 9.66070318767801e-16 1 8.7157e-05 5.60030010879676e-15 4.69830009127365e-15 7.12415513840061e-16 1.2 9.19924e-05 5.41720010523968e-15 4.63230008999147e-15 5.90346711468637e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_ig_sw.standard0000644000175000017500000000655314163340332024700 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 7.458e-24 1.79170003480727e-14 2.96570005761451e-15 2.96570005761451e-15 -0.8 2.977e-21 1.13918002213079e-14 3.11410006049747e-15 3.11410006049747e-15 -0.4 4.55923e-17 9.17520017824617e-15 3.30320006417111e-15 3.30320006417111e-15 1.11022302462516e-16 -4.826134e-13 9.10180017682023e-15 3.59790006989623e-15 3.59790006989623e-15 0.4 -4.64836e-08 1.71857003338658e-14 8.30290016130004e-15 8.30290016130004e-15 0.8 -3.314896e-07 1.93381003756803e-14 9.54090018535061e-15 9.54090018535061e-15 1.2 -1.2184e-06 1.90553003701864e-14 9.42220018304463e-15 9.42220018304463e-15 -1.2 1.9869e-18 1.71192003325739e-14 3.02650005879567e-15 2.66840005183888e-15 -0.8 9.49369e-16 1.08535002108504e-14 3.04160005908902e-15 2.95750005745521e-15 -0.4 1.81452e-11 8.75620017010627e-15 3.19290006202831e-15 3.08970006002345e-15 1.11022302462516e-16 1.189e-06 8.5101001653253e-15 3.45920006720171e-15 3.20680006229835e-15 0.4 0.0070101 1.42208002762668e-14 9.99710019421318e-15 3.33790006484522e-15 0.8 0.0133081 1.73042003361679e-14 1.30987002544678e-14 3.72810007242562e-15 1.2 0.0118055 1.74775003395345e-14 1.29632002518355e-14 4.11610007996328e-15 -1.2 0. 1.82920003553578e-14 2.96790005765725e-15 2.96790005765725e-15 -0.8 5.674e-27 1.07170002081986e-14 3.12150006064123e-15 3.12150006064123e-15 -0.4 4.908e-21 9.04780017577118e-15 3.30580006422162e-15 3.30580006422162e-15 1.11022302462516e-16 -2.4526e-15 9.04500017571678e-15 3.59870006991177e-15 3.59870006991177e-15 0.4 -2.06363e-08 1.73378003368206e-14 8.38370016286973e-15 8.38370016286973e-15 0.8 -1.600174e-07 1.96223003812015e-14 9.69450018833458e-15 9.69450018833458e-15 1.2 -5.957899e-07 1.92122003732345e-14 9.50820018471534e-15 9.50820018471534e-15 -1.2 1.525e-24 1.74720003394277e-14 3.01900005864997e-15 2.67630005199235e-15 -0.8 7.307e-21 1.02366001988659e-14 3.0493000592386e-15 2.9699000576961e-15 -0.4 6.7937e-15 8.63440016774007e-15 3.19490006206717e-15 3.09360006009922e-15 1.11022302462516e-16 2.50402e-08 8.45500016425488e-15 3.45860006719006e-15 3.2095000623508e-15 0.4 0.0077273 1.43678002791226e-14 1.01777001977217e-14 3.32300006455576e-15 0.8 0.015711 1.76142003421902e-14 1.34522002613352e-14 3.70840007204291e-15 1.2 0.013892 1.76461003428099e-14 1.31640002557364e-14 4.09560007956502e-15 -1.2 5.2085e-18 1.74834003396492e-14 2.96130005752903e-15 2.96130005752903e-15 -0.8 3.739916e-16 1.24025002409428e-14 3.10170006025658e-15 3.10170006025658e-15 -0.4 1.648936e-13 9.42680018313399e-15 3.29840006407786e-15 3.29840006407786e-15 1.11022302462516e-16 -7.52609e-11 9.27690018022189e-15 3.63920007069856e-15 3.63920007069856e-15 0.4 -1.290934e-07 1.71550003332694e-14 8.29120016107274e-15 8.29120016107274e-15 0.8 -7.984739e-07 1.89326003678027e-14 9.32170018109222e-15 9.32170018109222e-15 1.2 -2.8562e-06 1.88001003652286e-14 9.28290018033845e-15 9.28290018033845e-15 -1.2 3.345221e-13 1.67130003246826e-14 3.03740005900742e-15 2.6537000515533e-15 -0.8 2.9293e-11 1.17973002291856e-14 3.03060005887532e-15 2.93550005702782e-15 -0.4 1.85998e-08 8.9968001747804e-15 3.18840006194089e-15 3.08310005989523e-15 1.11022302462516e-16 3.96572e-05 8.66090016825489e-15 3.5210000684023e-15 3.20170006219927e-15 0.4 0.0065963 1.42546002769234e-14 1.00005001942792e-14 3.36440006536004e-15 0.8 0.0107329 1.69053003284184e-14 1.26156002450827e-14 3.77950007342416e-15 1.2 0.0093013 1.72752003356045e-14 1.26459002456713e-14 4.21480008188072e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_gidl_sw.standard0000644000175000017500000000520114163340332025156 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.63229e-05 0. -1.27979e-11 -1.63229e-05 0.35 0.0001324527 0. -6.8431e-12 -0.0001324527 0.45 0.000381386 0. -3.4893e-12 -0.000381386 0.55 0.0006681639 0. -1.6869e-12 -0.0006681639 0.65 0.0009428032 0. -7.68077e-13 -0.0009428032 0.75 0.0011879 0. -3.267736e-13 -0.0011879 0.85 0.0013979 0. -1.286931e-13 -0.0013979 0.95 0.0015726 0. -4.6396e-14 -0.0015726 1.05000 0.0017144 0. -1.51073e-14 -0.0017144 1.15000 0.0018265 0. -4.371e-15 -0.0018265 0.25 4.53667e-05 0. -9.589836e-10 -4.53658e-05 0.35 0.0003273133 0. -6.757641e-10 -0.0003273126 0.45 0.001023 0. -4.671446e-10 -0.001023 0.55 0.0020441 0. -3.162689e-10 -0.0020441 0.65 0.0032511 0. -2.093149e-10 -0.0032511 0.75 0.0045489 0. -1.351362e-10 -0.0045489 0.85 0.0058782 0. -8.49071e-11 -0.0058782 0.95 0.0072003 0. -5.17791e-11 -0.0072003 1.05000 0.0084898 0. -3.05548e-11 -0.0084898 1.15000 0.0097298 0. -1.73865e-11 -0.0097298 0.25 2.8947e-06 0. -1.27148e-11 -2.8946e-06 0.35 8.37758e-05 0. -6.7954e-12 -8.37758e-05 0.45 0.0003953992 0. -3.4631e-12 -0.0003953992 0.55 0.000782126 0. -1.6732e-12 -0.000782126 0.65 0.0011487 0. -7.613181e-13 -0.0011487 0.75 0.0014713 0. -3.236456e-13 -0.0014713 0.85 0.0017449 0. -1.273478e-13 -0.0017449 0.95 0.0019707 0. -4.58641e-14 -0.0019707 1.05000 0.0021527 0. -1.49165e-14 -0.0021527 1.15000 0.0022961 0. -4.3099e-15 -0.0022961 0.25 1.03928e-05 0. -9.554632e-10 -1.03918e-05 0.35 0.0002162834 0. -6.731497e-10 -0.0002162827 0.45 0.0009795076 0. -4.65237e-10 -0.0009795071 0.55 0.0021821 0. -3.149035e-10 -0.0021821 0.65 0.0036114 0. -2.08358e-10 -0.0036114 0.75 0.0051457 0. -1.344808e-10 -0.0051457 0.85 0.006715 0. -8.44694e-11 -0.006715 0.95 0.008274 0. -5.14947e-11 -0.008274 1.05000 0.0097928 0. -3.03757e-11 -0.0097928 1.15000 0.0112523 0. -1.72774e-11 -0.0112523 0.25 6.90348e-05 0. -1.29316e-11 -6.90348e-05 0.35 0.0002034414 0. -6.92e-12 -0.0002034414 0.45 0.0003892311 0. -3.5315e-12 -0.0003892311 0.55 0.0005881239 0. -1.709e-12 -0.0005881239 0.65 0.0007785868 0. -7.789855e-13 -0.0007785868 0.75 0.0009503914 0. -3.31827e-13 -0.0009503914 0.85 0.0010993 0. -1.308688e-13 -0.0010993 0.95 0.0012244 0. -4.72573e-14 -0.0012244 1.05000 0.0013267 0. -1.54167e-14 -0.0013267 1.15000 0.0014081 0. -4.4704e-15 -0.0014081 0.25 0.0001806481 0. -9.6463e-10 -0.0001806471 0.35 0.0005670072 0. -6.799583e-10 -0.0005670065 0.45 0.0012236 0. -4.702056e-10 -0.0012236 0.55 0.0020867 0. -3.184604e-10 -0.0020867 0.65 0.0030762 0. -2.108514e-10 -0.0030762 0.75 0.004129 0. -1.36189e-10 -0.004129 0.85 0.0052011 0. -8.56105e-11 -0.0052011 0.95 0.0062621 0. -5.22361e-11 -0.0062621 1.05000 0.0072913 0. -3.08429e-11 -0.0072913 1.15000 0.0082752 0. -1.7562e-11 -0.0082752 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_core_lt.standard0000644000175000017500000001240714163340332025322 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 5.731061e-07 0. 0. -5.731061e-07 0.2 6.209901e-07 0. 0. -6.209901e-07 0.3 6.538619e-07 0. 0. -6.538619e-07 0.4 6.856086e-07 0. 0. -6.856086e-07 0.5 7.16458e-07 0. 0. -7.16458e-07 0.6 7.46587e-07 0. 0. -7.46587e-07 0.7 7.761081e-07 0. 0. -7.761081e-07 0.8 8.05098e-07 0. 0. -8.05098e-07 0.9 8.336117e-07 0. 0. -8.336117e-07 1.00000 8.616908e-07 0. 0. -8.616908e-07 1.10000 8.893673e-07 0. 0. -8.893673e-07 1.20000 9.166668e-07 0. 0. -9.166668e-07 0. 0. 0. 0. 0. 0.1 6.2801e-06 0. 0. -6.2801e-06 0.2 9.6279e-06 0. 0. -9.6279e-06 0.3 1.06156e-05 0. 0. -1.06156e-05 0.4 1.09663e-05 0. 0. -1.09663e-05 0.5 1.12453e-05 0. 0. -1.12453e-05 0.6 1.15031e-05 0. 0. -1.15031e-05 0.7 1.17474e-05 0. 0. -1.17474e-05 0.8 1.19812e-05 0. 0. -1.19812e-05 0.9 1.22064e-05 0. 0. -1.22064e-05 1.00000 1.24243e-05 0. 0. -1.24243e-05 1.10000 1.26357e-05 0. 0. -1.26357e-05 1.20000 1.28415e-05 0. 0. -1.28415e-05 0. 0. 0. 0. 0. 0.1 1.21097e-05 0. 0. -1.21097e-05 0.2 2.18175e-05 0. 0. -2.18175e-05 0.3 2.86584e-05 0. 0. -2.86584e-05 0.4 3.23544e-05 0. 0. -3.23544e-05 0.5 3.39508e-05 0. 0. -3.39508e-05 0.6 3.48384e-05 0. 0. -3.48384e-05 0.7 3.55279e-05 0. 0. -3.55279e-05 0.8 3.61398e-05 0. 0. -3.61398e-05 0.9 3.67078e-05 0. 0. -3.67078e-05 1.00000 3.72449e-05 0. 0. -3.72449e-05 1.10000 3.77573e-05 0. 0. -3.77573e-05 1.20000 3.82492e-05 0. 0. -3.82492e-05 0. 0. 0. 0. 0. 0.1 1.60409e-05 0. 0. -1.60409e-05 0.2 3.04776e-05 0. 0. -3.04776e-05 0.3 4.29137e-05 0. 0. -4.29137e-05 0.4 5.28288e-05 0. 0. -5.28288e-05 0.5 5.96971e-05 0. 0. -5.96971e-05 0.6 6.37056e-05 0. 0. -6.37056e-05 0.7 6.59602e-05 0. 0. -6.59602e-05 0.8 6.74453e-05 0. 0. -6.74453e-05 0.9 6.86117e-05 0. 0. -6.86117e-05 1.00000 6.96261e-05 0. 0. -6.96261e-05 1.10000 7.05531e-05 0. 0. -7.05531e-05 1.20000 7.14211e-05 0. 0. -7.14211e-05 0. 0. 0. 0. 0. 0.1 2.042026e-07 0. 0. -2.042026e-07 0.2 2.229703e-07 0. 0. -2.229703e-07 0.3 2.409226e-07 0. 0. -2.409226e-07 0.4 2.582853e-07 0. 0. -2.582853e-07 0.5 2.752398e-07 0. 0. -2.752398e-07 0.6 2.918784e-07 0. 0. -2.918784e-07 0.7 3.082551e-07 0. 0. -3.082551e-07 0.8 3.244048e-07 0. 0. -3.244048e-07 0.9 3.403513e-07 0. 0. -3.403513e-07 1.00000 3.561115e-07 0. 0. -3.561115e-07 1.10000 3.716981e-07 0. 0. -3.716981e-07 1.20000 3.871206e-07 0. 0. -3.871206e-07 0. 0. 0. 0. 0. 0.1 8.0729e-06 0. 0. -8.0729e-06 0.2 1.16178e-05 0. 0. -1.16178e-05 0.3 1.23488e-05 0. 0. -1.23488e-05 0.4 1.27797e-05 0. 0. -1.27797e-05 0.5 1.31678e-05 0. 0. -1.31678e-05 0.6 1.35293e-05 0. 0. -1.35293e-05 0.7 1.38702e-05 0. 0. -1.38702e-05 0.8 1.41948e-05 0. 0. -1.41948e-05 0.9 1.45059e-05 0. 0. -1.45059e-05 1.00000 1.48059e-05 0. 0. -1.48059e-05 1.10000 1.50964e-05 0. 0. -1.50964e-05 1.20000 1.53787e-05 0. 0. -1.53787e-05 0. 0. 0. 0. 0. 0.1 1.7059e-05 0. 0. -1.7059e-05 0.2 3.04414e-05 0. 0. -3.04414e-05 0.3 3.93761e-05 0. 0. -3.93761e-05 0.4 4.34019e-05 0. 0. -4.34019e-05 0.5 4.50329e-05 0. 0. -4.50329e-05 0.6 4.61787e-05 0. 0. -4.61787e-05 0.7 4.71816e-05 0. 0. -4.71816e-05 0.8 4.8103e-05 0. 0. -4.8103e-05 0.9 4.89639e-05 0. 0. -4.89639e-05 1.00000 4.97761e-05 0. 0. -4.97761e-05 1.10000 5.05477e-05 0. 0. -5.05477e-05 1.20000 5.12848e-05 0. 0. -5.12848e-05 0. 0. 0. 0. 0. 0.1 2.28945e-05 0. 0. -2.28945e-05 0.2 4.34079e-05 0. 0. -4.34079e-05 0.3 6.09085e-05 0. 0. -6.09085e-05 0.4 7.45702e-05 0. 0. -7.45702e-05 0.5 8.33184e-05 0. 0. -8.33184e-05 0.6 8.77409e-05 0. 0. -8.77409e-05 0.7 9.0247e-05 0. 0. -9.0247e-05 0.8 9.2136e-05 0. 0. -9.2136e-05 0.9 9.37776e-05 0. 0. -9.37776e-05 1.00000 9.52783e-05 0. 0. -9.52783e-05 1.10000 9.66784e-05 0. 0. -9.66784e-05 1.20000 9.79986e-05 0. 0. -9.79986e-05 0. 0. 0. 0. 0. 0.1 1.222e-06 0. 0. -1.222e-06 0.2 1.5141e-06 0. 0. -1.5141e-06 0.3 1.5943e-06 0. 0. -1.5943e-06 0.4 1.6465e-06 0. 0. -1.6465e-06 0.5 1.6935e-06 0. 0. -1.6935e-06 0.6 1.7385e-06 0. 0. -1.7385e-06 0.7 1.7824e-06 0. 0. -1.7824e-06 0.8 1.8254e-06 0. 0. -1.8254e-06 0.9 1.8675e-06 0. 0. -1.8675e-06 1.00000 1.9089e-06 0. 0. -1.9089e-06 1.10000 1.9496e-06 0. 0. -1.9496e-06 1.20000 1.9897e-06 0. 0. -1.9897e-06 0. 0. 0. 0. 0. 0.1 4.9567e-06 0. 0. -4.9567e-06 0.2 7.9562e-06 0. 0. -7.9562e-06 0.3 9.3908e-06 0. 0. -9.3908e-06 0.4 1.00447e-05 0. 0. -1.00447e-05 0.5 1.04037e-05 0. 0. -1.04037e-05 0.6 1.06553e-05 0. 0. -1.06553e-05 0.7 1.08629e-05 0. 0. -1.08629e-05 0.8 1.10487e-05 0. 0. -1.10487e-05 0.9 1.12218e-05 0. 0. -1.12218e-05 1.00000 1.13862e-05 0. 0. -1.13862e-05 1.10000 1.15443e-05 0. 0. -1.15443e-05 1.20000 1.16972e-05 0. 0. -1.16972e-05 0. 0. 0. 0. 0. 0.1 8.4669e-06 0. 0. -8.4669e-06 0.2 1.52203e-05 0. 0. -1.52203e-05 0.3 1.99983e-05 0. 0. -1.99983e-05 0.4 2.30495e-05 0. 0. -2.30495e-05 0.5 2.49174e-05 0. 0. -2.49174e-05 0.6 2.60962e-05 0. 0. -2.60962e-05 0.7 2.69028e-05 0. 0. -2.69028e-05 0.8 2.75092e-05 0. 0. -2.75092e-05 0.9 2.80034e-05 0. 0. -2.80034e-05 1.00000 2.84305e-05 0. 0. -2.84305e-05 1.10000 2.88145e-05 0. 0. -2.88145e-05 1.20000 2.91689e-05 0. 0. -2.91689e-05 0. 0. 0. 0. 0. 0.1 1.09505e-05 0. 0. -1.09505e-05 0.2 2.06863e-05 0. 0. -2.06863e-05 0.3 2.88045e-05 0. 0. -2.88045e-05 0.4 3.51253e-05 0. 0. -3.51253e-05 0.5 3.97757e-05 0. 0. -3.97757e-05 0.6 4.30908e-05 0. 0. -4.30908e-05 0.7 4.54497e-05 0. 0. -4.54497e-05 0.8 4.71693e-05 0. 0. -4.71693e-05 0.9 4.84747e-05 0. 0. -4.84747e-05 1.00000 4.95126e-05 0. 0. -4.95126e-05 1.10000 5.03749e-05 0. 0. -5.03749e-05 1.20000 5.11188e-05 0. 0. -5.11188e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_gidl_lw.standard0000644000175000017500000001631614163340332025204 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.001057 1.26862802464557e-13 3.24106006296392e-14 8.89625017282702e-14 0 0. 1.16396702261233e-13 5.48652010658636e-14 5.48652010658636e-14 0.2 0.0003837724 8.18013015891499e-14 6.59897012819787e-14 5.74990011170303e-15 0.4 0.0004124632 8.03619015611868e-14 6.48470012597795e-14 5.46590010618577e-15 0.6 0.0004377944 7.91723015380764e-14 6.38412012402399e-14 5.32430010343492e-15 0.8 0.0004613229 7.80297015158792e-14 6.28672012213181e-14 5.19770010097547e-15 1 0.0004835975 7.69301014945173e-14 6.19130012027809e-14 5.09370009895506e-15 1.2 0.0005049303 7.58650014738257e-14 6.09762011845817e-14 5.0062000972552e-15 -0.2 -0.0009076088 1.46669002849332e-13 6.25913012159582e-14 8.09656015729148e-14 0 0. 1.48751002889779e-13 7.27933014141519e-14 7.27933014141519e-14 0.2 0.0010583 1.31260002549982e-13 8.78393017064498e-14 3.87492007527788e-14 0.4 0.0014769 1.09069302118884e-13 9.48038018417488e-14 7.79850015150108e-15 0.6 0.0015477 1.07008202078843e-13 9.3660501819538e-14 6.83640013281041e-15 0.8 0.0016008 1.05812002055605e-13 9.27194018012553e-14 6.6148001285054e-15 1 0.0016469 1.0471640203432e-13 9.18245017838701e-14 6.45170012533686e-15 1.2 0.0016885 1.03673302014056e-13 9.09495017668715e-14 6.32130012280359e-15 -0.2 -0.0005846756 1.4825640288017e-13 7.09369013780877e-14 7.4798201453101e-14 0 0. 1.51000802933485e-13 7.42286014420354e-14 7.42286014420354e-14 0.2 0.000849335 1.47013102856016e-13 7.97233015487807e-14 6.43813012507324e-14 0.4 0.0018651 1.26766802462693e-13 9.52649018507066e-14 2.71769005279643e-14 0.6 0.002248 1.13153802198233e-13 9.81990019077072e-14 9.76730018974887e-15 0.8 0.0023529 1.10640702149412e-13 9.72044018883852e-14 8.17410015879785e-15 1 0.0024223 1.09366002124648e-13 9.63162018711302e-14 7.80400015160793e-15 1.2 0.0024804 1.08300102103941e-13 9.5494501855167e-14 7.58810014741365e-15 -0.2 -0.0003118174 1.4598380283602e-13 7.38579014348339e-14 6.98623013572115e-14 0 0. 1.48678802888376e-13 7.31956014219674e-14 7.31956014219674e-14 0.2 0.000532405 1.47723802869823e-13 7.37794014333088e-14 7.15104013892291e-14 0.4 0.0013541 1.40235702724352e-13 8.37226016264749e-14 5.35874010410398e-14 0.6 0.0022637 1.21740002365037e-13 9.48024018417216e-14 2.29987004467946e-14 0.8 0.0026211 1.12005902175933e-13 9.61522018679441e-14 1.14431002223045e-14 1 0.0027482 1.092760021229e-13 9.53123018516274e-14 9.47690018410728e-15 1.2 0.0028266 1.07897202096114e-13 9.4491101835674e-14 8.9228001733428e-15 -0.2 -0.001609 1.22891202387401e-13 2.04787003978387e-14 9.64629018739801e-14 0 0. 1.05904902057409e-13 4.9060500953096e-14 4.9060500953096e-14 0.2 0.0003251777 7.3480801427508e-14 5.73963011150351e-14 5.27510010247911e-15 0.4 0.000360684 7.23885014062879e-14 5.63432010945766e-14 5.2835001026423e-15 0.6 0.0003927692 7.1245301384079e-14 5.53874010760084e-14 5.14280009990893e-15 0.8 0.0004229016 7.01455013627132e-14 5.44582010579568e-14 5.01840009749221e-15 1 0.0004517101 6.90893013421945e-14 5.35485010402841e-14 4.91760009553398e-15 1.2 0.0004795238 6.80685013223635e-14 5.2657001022965e-14 4.83350009390017e-15 -0.2 -0.0013889 1.49778602909742e-13 6.24609012134249e-14 8.43831016393064e-14 0 0. 1.53175602975735e-13 7.51297014595411e-14 7.51297014595411e-14 0.2 0.0016402 1.29178002509535e-13 9.48103018418751e-14 2.94417005719625e-14 0.4 0.0020365 1.12432102184213e-13 9.94695019323892e-14 6.79390013198477e-15 0.6 0.0021413 1.11232802160914e-13 9.84714019129991e-14 6.62320012866859e-15 0.8 0.0022261 1.10081502138548e-13 9.7539801894901e-14 6.44040012511734e-15 1 0.0022991 1.08979502117139e-13 9.66311018772477e-14 6.28380012207508e-15 1.2 0.0023642 1.07924102096636e-13 9.5738801859913e-14 6.15700011961174e-15 -0.2 -0.0008614271 1.50911002931741e-13 7.15840013906589e-14 7.69773014954343e-14 0 0. 1.54256402996732e-13 7.59538014755508e-14 7.59538014755508e-14 0.2 0.0012915 1.50114402916265e-13 8.28453016094316e-14 6.45328012536756e-14 0.4 0.0028113 1.24189702412627e-13 1.01955301980681e-13 1.78337003464544e-14 0.6 0.0031623 1.16223702257872e-13 1.03220202005254e-13 8.20020015930489e-15 0.8 0.0032972 1.1496040223333e-13 1.02320501987775e-13 7.85080015251711e-15 1 0.0034031 1.13859502211943e-13 1.01467601971206e-13 7.62980014822376e-15 1.2 0.0034933 1.12812302191599e-13 1.00636401955058e-13 7.4416001445676e-15 -0.2 -0.0004374716 1.48024302875661e-13 7.44522014463793e-14 7.14586013882228e-14 0 0. 1.51050402934449e-13 7.4461401446558e-14 7.4461401446558e-14 0.2 0.0007787527 1.50261202919117e-13 7.5831301473171e-14 7.21566014017828e-14 0.4 0.0020366 1.41746002753693e-13 8.67511016853094e-14 5.21890010138732e-14 0.6 0.0033486 1.19129102314315e-13 1.00021801943119e-13 1.52751002967486e-14 0.8 0.0036777 1.13737002209563e-13 1.00259801947742e-13 9.46780018393049e-15 1 0.0038221 1.12441402184394e-13 9.94712019324222e-14 8.96720017420536e-15 1.2 0.0039324 1.11404302164246e-13 9.87150019177315e-14 8.70700016915047e-15 -0.2 -0.0006217003 1.29251702510967e-13 3.87613007530139e-14 8.53926016589179e-14 0 0. 1.23431502397898e-13 5.88208011427088e-14 5.88208011427088e-14 0.2 0.0003935788 9.49509018446066e-14 7.3451001426929e-14 1.27467002476295e-14 0.4 0.0004480344 8.75070016999943e-14 7.17312013935186e-14 6.36480012364866e-15 0.6 0.0004684643 8.55498016619718e-14 7.03119013659459e-14 5.78240011233441e-15 0.8 0.0004854334 8.42090016359242e-14 6.91995013443353e-14 5.57330010827223e-15 1 0.0005010348 8.3033201613082e-14 6.81882013246889e-14 5.44120010570593e-15 1.2 0.0005157455 8.1930201591654e-14 6.72238013059535e-14 5.33910010372244e-15 -0.2 -0.0005506865 1.41831702755358e-13 5.8345901133483e-14 8.00845015557977e-14 0 0. 1.43492502787622e-13 7.0018601360248e-14 7.0018601360248e-14 0.2 0.0006191328 1.31489402554438e-13 8.48711016487868e-14 4.21142008181505e-14 0.4 0.0009740996 1.13504402205044e-13 9.22971017930513e-14 1.5171500294736e-14 0.6 0.0010827 1.06156002062287e-13 9.0552501759159e-14 9.01490017513203e-15 0.8 0.0011309 1.0313350200357e-13 8.8839001725871e-14 7.56180014690272e-15 1 0.0011639 1.01340201968731e-13 8.75431017006956e-14 7.03360013664141e-15 1.2 0.0011909 9.99813019423319e-14 8.64611016796756e-14 6.76320013138836e-15 -0.2 -0.0003786529 1.43940802796331e-13 6.7226501306006e-14 7.39196014360325e-14 0 0. 1.46388202843876e-13 7.17839013945424e-14 7.17839013945424e-14 0.2 0.0005211083 1.42149502761531e-13 7.89292015333538e-14 6.00395011663845e-14 0.4 0.0010649 1.29181302509599e-13 9.23651017943723e-14 3.27071006353992e-14 0.6 0.0013815 1.17538402283413e-13 9.53646018526435e-14 1.72565003352412e-14 0.8 0.0015278 1.11185202159989e-13 9.42025018300674e-14 1.1667400226662e-14 1 0.001606 1.0770860209245e-13 9.26645018001888e-14 9.56170018575468e-15 1.2 0.0016577 1.05519302049918e-13 9.1346601774586e-14 8.62420016754192e-15 -0.2 -0.0002186336 1.42567802769658e-13 7.12962013850678e-14 6.87715013360206e-14 0 0. 1.45036202817611e-13 7.1254001384248e-14 7.1254001384248e-14 0.2 0.0003489461 1.43568102789091e-13 7.28678014155992e-14 6.80137013212989e-14 0.4 0.0008397029 1.36206902646085e-13 8.50756016527596e-14 4.79859009322198e-14 0.6 0.0012893 1.25617302440361e-13 9.24604017962237e-14 2.93892005709426e-14 0.8 0.0015763 1.17099502274886e-13 9.39822018257877e-14 1.88663003665147e-14 1 0.0017402 1.11634702168722e-13 9.31873018103452e-14 1.39117002702619e-14 1.2 0.0018398 1.08123402100508e-13 9.19336017859896e-14 1.15030002234682e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_core_lt.standard0000644000175000017500000000711514163340332025533 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_gidl_sw.standard0000644000175000017500000001762414163340332025167 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 1.1067e-06 0. -3.05179e-11 -1.1066e-06 0.2 1.3059e-06 0. -5.17713e-11 -1.3059e-06 0.3 1.4919e-06 0. -8.49034e-11 -1.4918e-06 0.4 1.6792e-06 0. -1.351338e-10 -1.6791e-06 0.5 1.8728e-06 0. -2.093131e-10 -1.8726e-06 0.6 2.0754e-06 0. -3.162675e-10 -2.0751e-06 0.7 2.2885e-06 0. -4.671435e-10 -2.2881e-06 0.8 2.5136e-06 0. -6.757633e-10 -2.5129e-06 0.9 2.7516e-06 0. -9.589832e-10 -2.7507e-06 1.00000 3.0036e-06 0. -1.337e-09 -3.0023e-06 1.10000 3.2705e-06 0. -1.8339e-09 -3.2687e-06 1.20000 3.5531e-06 0. -2.4777e-09 -3.5506e-06 0. 0. 0. 0. 0. 0.1 1.96197e-05 0. -1.73655e-11 -1.96197e-05 0.2 2.28027e-05 0. -3.05503e-11 -2.28027e-05 0.3 2.55945e-05 0. -5.17768e-11 -2.55944e-05 0.4 2.82914e-05 0. -8.49056e-11 -2.82913e-05 0.5 3.09828e-05 0. -1.351351e-10 -3.09827e-05 0.6 3.37113e-05 0. -2.09314e-10 -3.37111e-05 0.7 3.65009e-05 0. -3.162681e-10 -3.65005e-05 0.8 3.93667e-05 0. -4.671441e-10 -3.93663e-05 0.9 4.23194e-05 0. -6.757638e-10 -4.23187e-05 1.00000 4.53667e-05 0. -9.589836e-10 -4.53658e-05 1.10000 4.85147e-05 0. -1.337e-09 -4.85133e-05 1.20000 5.17683e-05 0. -1.8339e-09 -5.17664e-05 0. 0. 0. 0. 0. 0.1 0.0008561601 0. -3.5188e-12 -0.0008561601 0.2 0.0010642 0. -6.9084e-12 -0.0010642 0.3 0.0011496 0. -1.29213e-11 -0.0011496 0.4 0.0012158 0. -2.31588e-11 -0.0012158 0.5 0.0012729 0. -3.99474e-11 -0.0012729 0.6 0.0013244 0. -6.6565e-11 -0.0013244 0.7 0.0013722 0. -1.074982e-10 -0.0013722 0.8 0.0014174 0. -1.687304e-10 -0.0014174 0.9 0.0014606 0. -2.580567e-10 -0.0014606 1.00000 0.0015024 0. -3.854195e-10 -0.0015024 1.10000 0.0015431 0. -5.632584e-10 -0.0015431 1.20000 0.0015828 0. -8.068675e-10 -0.0015828 0. 0. 0. 0. 0. 0.1 0.0021732 0. -5.098106e-13 -0.0021732 0.2 0.0032916 0. -1.1583e-12 -0.0032916 0.3 0.0036511 0. -2.4669e-12 -0.0036511 0.4 0.0038547 0. -4.9648e-12 -0.0038547 0.5 0.0040113 0. -9.502e-12 -0.0040113 0.6 0.0041431 0. -1.73864e-11 -0.0041431 0.7 0.0042588 0. -3.05548e-11 -0.0042588 0.8 0.0043633 0. -5.1779e-11 -0.0043633 0.9 0.0044593 0. -8.49071e-11 -0.0044593 1.00000 0.0045489 0. -1.351362e-10 -0.0045489 1.10000 0.0046334 0. -2.09315e-10 -0.0046334 1.20000 0.0047137 0. -3.16269e-10 -0.0047137 0. 0. 0. 0. 0. 0.1 0.0031267 0. -4.67888e-14 -0.0031267 0.2 0.005291 0. -1.299202e-13 -0.005291 0.3 0.0062516 0. -3.299246e-13 -0.0062516 0.4 0.0066825 0. -7.755034e-13 -0.0066825 0.5 0.0069694 0. -1.7032e-12 -0.0069694 0.6 0.0071968 0. -3.5231e-12 -0.0071968 0.7 0.0073895 0. -6.9094e-12 -0.0073895 0.8 0.0075589 0. -1.29218e-11 -0.0075589 0.9 0.0077111 0. -2.31592e-11 -0.0077111 1.00000 0.0078504 0. -3.99477e-11 -0.0078504 1.10000 0.0079793 0. -6.65653e-11 -0.0079793 1.20000 0.0080999 0. -1.074985e-10 -0.0080999 0. 0. 0. 0. 0. 0.1 5.8768e-08 0. -3.0339e-11 -5.87377e-08 0.2 7.18461e-08 0. -5.1487e-11 -7.17946e-08 0.3 8.52199e-08 0. -8.44657e-11 -8.51354e-08 0.4 9.95592e-08 0. -1.344784e-10 -9.94247e-08 0.5 1.151806e-07 0. -2.083562e-10 -1.149723e-07 0.6 1.323108e-07 0. -3.149021e-10 -1.319959e-07 0.7 1.511481e-07 0. -4.65236e-10 -1.506828e-07 0.8 1.718844e-07 0. -6.731489e-10 -1.712112e-07 0.9 1.947148e-07 0. -9.554627e-10 -1.937593e-07 1.00000 2.19843e-07 0. -1.3324e-09 -2.185106e-07 1.10000 2.474841e-07 0. -1.8279e-09 -2.456562e-07 1.20000 2.778671e-07 0. -2.4699e-09 -2.753972e-07 0. 0. 0. 0. 0. 0.1 3.3262e-06 0. -1.72566e-11 -3.3262e-06 0.2 3.9971e-06 0. -3.03712e-11 -3.997e-06 0.3 4.651e-06 0. -5.14925e-11 -4.6509e-06 0.4 5.3266e-06 0. -8.44679e-11 -5.3265e-06 0.5 6.0392e-06 0. -1.344796e-10 -6.039e-06 0.6 6.7972e-06 0. -2.083571e-10 -6.797e-06 0.7 7.6068e-06 0. -3.149028e-10 -7.6065e-06 0.8 8.4731e-06 0. -4.652365e-10 -8.4726e-06 0.9 9.4003e-06 0. -6.731494e-10 -9.3996e-06 1.00000 1.03928e-05 0. -9.554632e-10 -1.03918e-05 1.10000 1.14544e-05 0. -1.3324e-09 -1.14531e-05 1.20000 1.25893e-05 0. -1.8279e-09 -1.25875e-05 0. 0. 0. 0. 0. 0.1 0.0009088165 0. -3.4924e-12 -0.0009088165 0.2 0.0010668 0. -6.8602e-12 -0.0010668 0.3 0.0011535 0. -1.28374e-11 -0.0011535 0.4 0.0012236 0. -2.30184e-11 -0.0012236 0.5 0.0012852 0. -3.97208e-11 -0.0012852 0.6 0.0013416 0. -6.62109e-11 -0.0013416 0.7 0.0013946 0. -1.069607e-10 -0.0013946 0.8 0.0014451 0. -1.67936e-10 -0.0014451 0.9 0.001494 0. -2.569105e-10 -0.001494 1.00000 0.0015415 0. -3.838017e-10 -0.0015415 1.10000 0.0015881 0. -5.6102e-10 -0.0015881 1.20000 0.0016338 0. -8.038273e-10 -0.0016338 0. 0. 0. 0. 0. 0.1 0.002643 0. -5.051337e-13 -0.002643 0.2 0.003789 0. -1.1485e-12 -0.003789 0.3 0.0041277 0. -2.4476e-12 -0.0041277 0.4 0.0043509 0. -4.9288e-12 -0.0043509 0.5 0.0045281 0. -9.4381e-12 -0.0045281 0.6 0.0046784 0. -1.72774e-11 -0.0046784 0.7 0.004811 0. -3.03757e-11 -0.004811 0.8 0.0049311 0. -5.14947e-11 -0.0049311 0.9 0.005042 0. -8.44693e-11 -0.005042 1.00000 0.0051457 0. -1.344808e-10 -0.0051457 1.10000 0.0052438 0. -2.08358e-10 -0.0052438 1.20000 0.0053373 0. -3.149037e-10 -0.0053373 0. 0. 0. 0. 0. 0.1 0.0038738 0. -4.62524e-14 -0.0038738 0.2 0.0063358 0. -1.285621e-13 -0.0063358 0.3 0.0072589 0. -3.267664e-13 -0.0072589 0.4 0.0077008 0. -7.686792e-13 -0.0077008 0.5 0.0080221 0. -1.6894e-12 -0.0080221 0.6 0.008283 0. -3.4966e-12 -0.008283 0.7 0.0085056 0. -6.8612e-12 -0.0085056 0.8 0.0087016 0. -1.28379e-11 -0.0087016 0.9 0.0088782 0. -2.30188e-11 -0.0088782 1.00000 0.0090398 0. -3.97211e-11 -0.0090398 1.10000 0.0091897 0. -6.62112e-11 -0.0091897 1.20000 0.00933 0. -1.069611e-10 -0.00933 0. 0. 0. 0. 0. 0.1 1.7049e-05 0. -3.08056e-11 -1.70489e-05 0.2 2.01993e-05 0. -5.22283e-11 -2.01992e-05 0.3 2.24245e-05 0. -8.56067e-11 -2.24245e-05 0.4 2.44309e-05 0. -1.361865e-10 -2.44308e-05 0.5 2.63574e-05 0. -2.108496e-10 -2.63571e-05 0.6 2.82572e-05 0. -3.18459e-10 -2.82569e-05 0.7 3.01573e-05 0. -4.702045e-10 -3.01568e-05 0.8 3.2073e-05 0. -6.799575e-10 -3.20724e-05 0.9 3.40146e-05 0. -9.646295e-10 -3.40136e-05 1.00000 3.59887e-05 0. -1.3445e-09 -3.59873e-05 1.10000 3.80004e-05 0. -1.8437e-09 -3.79986e-05 1.20000 4.00535e-05 0. -2.4903e-09 -4.00511e-05 0. 0. 0. 0. 0. 0.1 9.41528e-05 0. -1.75408e-11 -9.41528e-05 0.2 0.0001124456 0. -3.08383e-11 -0.0001124456 0.3 0.0001235595 0. -5.22339e-11 -0.0001235595 0.4 0.0001328925 0. -8.5609e-11 -0.0001328924 0.5 0.0001414498 0. -1.361878e-10 -0.0001414496 0.6 0.0001495964 0. -2.108504e-10 -0.0001495962 0.7 0.0001575081 0. -3.184597e-10 -0.0001575078 0.8 0.0001652834 0. -4.702051e-10 -0.0001652829 0.9 0.0001729832 0. -6.79958e-10 -0.0001729825 1.00000 0.0001806481 0. -9.6463e-10 -0.0001806471 1.10000 0.000188306 0. -1.3445e-09 -0.0001883046 1.20000 0.0001959773 0. -1.8437e-09 -0.0001959754 0. 0. 0. 0. 0. 0.1 0.0008170568 0. -3.5614e-12 -0.0008170568 0.2 0.0011221 0. -6.986e-12 -0.0011221 0.3 0.0012557 0. -1.30563e-11 -0.0012557 0.4 0.0013404 0. -2.33846e-11 -0.0013404 0.5 0.0014055 0. -4.03117e-11 -0.0014055 0.6 0.0014603 0. -6.71341e-11 -0.0014603 0.7 0.001509 0. -1.083615e-10 -0.001509 0.8 0.0015535 0. -1.70006e-10 -0.0015535 0.9 0.0015951 0. -2.598967e-10 -0.0015951 1.00000 0.0016345 0. -3.880161e-10 -0.0016345 1.10000 0.0016722 0. -5.668497e-10 -0.0016722 1.20000 0.0017086 0. -8.117441e-10 -0.0017086 0. 0. 0. 0. 0. 0.1 0.0017283 0. -5.173623e-13 -0.0017283 0.2 0.0026825 0. -1.1741e-12 -0.0026825 0.3 0.0031469 0. -2.4979e-12 -0.0031469 0.4 0.0034153 0. -5.0227e-12 -0.0034153 0.5 0.0035993 0. -9.6049e-12 -0.0035993 0.6 0.0037405 0. -1.75619e-11 -0.0037405 0.7 0.003857 0. -3.08428e-11 -0.003857 0.8 0.0039576 0. -5.22361e-11 -0.0039576 0.9 0.0040473 0. -8.56104e-11 -0.0040473 1.00000 0.004129 0. -1.36189e-10 -0.004129 1.10000 0.0042047 0. -2.108514e-10 -0.0042047 1.20000 0.0042757 0. -3.184606e-10 -0.0042757 0. 0. 0. 0. 0. 0.1 0.002414 0. -4.76574e-14 -0.002414 0.2 0.004045 0. -1.321167e-13 -0.004045 0.3 0.004963 0. -3.350267e-13 -0.004963 0.4 0.0055043 0. -7.865175e-13 -0.0055043 0.5 0.0058626 0. -1.7255e-12 -0.0058626 0.6 0.0061247 0. -3.5657e-12 -0.0061247 0.7 0.0063312 0. -6.987e-12 -0.0063312 0.8 0.0065027 0. -1.30569e-11 -0.0065027 0.9 0.0066506 0. -2.3385e-11 -0.0066506 1.00000 0.0067817 0. -4.03121e-11 -0.0067817 1.10000 0.0069001 0. -6.71344e-11 -0.0069001 1.20000 0.0070089 0. -1.083618e-10 -0.0070089 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_gidl_st.standard0000644000175000017500000000711514163340332025531 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2d_lw.standard0000644000175000017500000004346514163340332025144 0ustar carstencarstenFreq N(d) 100.00000 2.6975763049e-22 125.89254 2.1533214564e-22 158.48932 1.7210291344e-22 199.52623 1.3776421129e-22 251.18864 1.1048952996e-22 316.22777 8.882308516e-23 398.10717 7.161221376e-23 501.18723 5.7942544e-23 630.95734 4.708292689e-23 794.32823 3.845736196e-23 1000 3.1606884e-23 1258.93 2.616424801e-23 1584.89 2.184160225e-23 1995.26 1.840753216e-23 2511.89 1.568001604e-23 3162.28 1.3512976e-23 3981.07 1.1792356e-23 5011.87 1.042514944e-23 6309.57 9.339136e-24 7943.28 8.47683225e-24 10000 7.79135569e-24 12589.25 7.24740241e-24 15848.93 6.81523236e-24 19952.62 6.47142721e-24 25118.86 6.19910404e-24 31622.78 5.98242681e-24 39810.72 5.81002816e-24 50118.72 5.67344761e-24 63095.73 5.564881e-24 79432.82 5.47840836e-24 100000 5.410276e-24 125892.54 5.35552164e-24 158489.32 5.31256401e-24 199526.23 5.27804676e-24 251188.64 5.25097225e-24 316227.77 5.22899689e-24 398107.17 5.212089e-24 501187.23 5.1984e-24 630957.34 5.18746176e-24 794328.23 5.17881049e-24 1000000 5.17198564e-24 1258930 5.166529e-24 1584890 5.161984e-24 1995260 5.15880369e-24 2511890 5.15607849e-24 3162280 5.15380804e-24 3981070 5.15199204e-24 5011870 5.15063025e-24 6309570 5.14972249e-24 7943280 5.14881481e-24 10000000 5.14790721e-24 12589250 5.14745344e-24 15848930 5.14699969e-24 19952620 5.14699969e-24 25118860 5.14654596e-24 31622780 5.14609225e-24 39810720 5.14609225e-24 50118720 5.14609225e-24 63095730 5.14609225e-24 79432820 5.14563856e-24 100000000 5.14563856e-24 100.00000 3.69312659521e-21 125.89254 2.93870241604e-21 158.48932 2.33944407684e-21 199.52623 1.86343305625e-21 251.18864 1.4853316e-21 316.22777 1.18499112169e-21 398.10717 9.46423696e-22 501.18723 7.5692114884e-22 630.95734 6.06390625e-22 794.32823 4.8682450881e-22 1000 3.9184994304e-22 1258.93 3.1640582884e-22 1584.89 2.56480225e-22 1995.26 2.0888053729e-22 2511.89 1.7107070436e-22 3162.28 1.4103462564e-22 3981.07 1.1717846001e-22 5011.87 9.8227921e-23 6309.57 8.317622401e-23 7943.28 7.121840881e-23 10000 6.172144969e-23 12589.25 5.417696025e-23 15848.93 4.818442225e-23 19952.62 4.342414609e-23 25118.86 3.964339369e-23 31622.78 3.664001961e-23 39810.72 3.425409729e-23 50118.72 3.235903225e-23 63095.73 3.085358116e-23 79432.82 2.965782681e-23 100000 2.8708164e-23 125892.54 2.795448384e-23 158489.32 2.735499204e-23 199526.23 2.687904025e-23 251188.64 2.650087441e-23 316227.77 2.620006596e-23 398107.17 2.596208209e-23 501187.23 2.577186756e-23 630957.34 2.562181924e-23 794328.23 2.55025e-23 1000000 2.540764836e-23 1258930 2.533209561e-23 1584890 2.527173441e-23 1995260 2.522450176e-23 2511890 2.518634596e-23 3162280 2.515624336e-23 3981070 2.513217424e-23 5011870 2.511412996e-23 6309570 2.509909801e-23 7943280 2.508707569e-23 10000000 2.507705929e-23 12589250 2.5070049e-23 15848930 2.506404096e-23 19952620 2.505903481e-23 25118860 2.505503025e-23 31622780 2.505202704e-23 39810720 2.5050025e-23 50118720 2.504802304e-23 63095730 2.504602116e-23 79432820 2.504502025e-23 100000000 2.504401936e-23 100.00000 8.45849929401e-21 125.89254 6.72751005796e-21 158.48932 5.352531921e-21 199.52623 4.26035565796e-21 251.18864 3.39279455529e-21 316.22777 2.70367760961e-21 398.10717 2.15629280881e-21 501.18723 1.72148648464e-21 630.95734 1.37610579681e-21 794.32823 1.10176197184e-21 1000 8.8384317025e-22 1258.93 7.1074493604e-22 1584.89 5.7324809476e-22 1995.26 4.6402760569e-22 2511.89 3.7727235225e-22 3162.28 3.0836062404e-22 3981.07 2.5362155025e-22 5011.87 2.1013981444e-22 6309.57 1.7560225225e-22 7943.28 1.4816975625e-22 10000 1.2637806724e-22 12589.25 1.0906669225e-22 15848.93 9.531812161e-23 19952.62 8.439545689e-23 25118.86 7.571958289e-23 31622.78 6.882859369e-23 39810.72 6.335523216e-23 50118.72 5.900697856e-23 63095.73 5.555317156e-23 79432.82 5.2809289e-23 100000 5.063034025e-23 125892.54 4.889925184e-23 158489.32 4.752447844e-23 199526.23 4.643195881e-23 251188.64 4.556520004e-23 316227.77 4.487526121e-23 398107.17 4.432763241e-23 501187.23 4.389327504e-23 630957.34 4.354812081e-23 794328.23 4.327403089e-23 1000000 4.305590689e-23 1258930 4.288285225e-23 1584890 4.2745444e-23 1995260 4.263567616e-23 2511890 4.2549529e-23 3162280 4.248041329e-23 3981070 4.242568225e-23 5011870 4.238270404e-23 6309570 4.234755625e-23 7943280 4.232022916e-23 10000000 4.229811369e-23 12589250 4.228120576e-23 15848930 4.226690169e-23 19952620 4.225650025e-23 25118860 4.224740004e-23 31622780 4.224090049e-23 39810720 4.223570121e-23 50118720 4.223050225e-23 63095730 4.222790289e-23 79432820 4.222530361e-23 100000000 4.222270441e-23 100.00000 1.210246412544e-20 125.89254 9.62427709156e-21 158.48932 7.65579500676e-21 199.52623 6.09216153529e-21 251.18864 4.85013352041e-21 316.22777 3.86355480625e-21 398.10717 3.07988371089e-21 501.18723 2.45739309841e-21 630.95734 1.96292416401e-21 794.32823 1.57016440009e-21 1000 1.25817765264e-21 1258.93 1.01035615321e-21 1584.89 8.1351018841e-22 1995.26 6.5714809801e-22 2511.89 5.3294492736e-22 3162.28 4.3428476025e-22 3981.07 3.5591840964e-22 5011.87 2.9366991424e-22 6309.57 2.4422188176e-22 7943.28 2.0494499281e-22 10000 1.7374666969e-22 12589.25 1.4896446601e-22 15848.93 1.2928144804e-22 19952.62 1.1364412816e-22 25118.86 1.01223721e-22 31622.78 9.135727561e-23 39810.72 8.3521321e-23 50118.72 7.729574724e-23 63095.73 7.2352036e-23 79432.82 6.842432961e-23 100000 6.530417721e-23 125892.54 6.282623169e-23 158489.32 6.085716121e-23 199526.23 5.929462009e-23 251188.64 5.805220864e-23 316227.77 5.706593764e-23 398107.17 5.628150441e-23 501187.23 5.565906025e-23 630957.34 5.516478529e-23 794328.23 5.477184064e-23 1000000 5.445997209e-23 1258930 5.421229641e-23 1584890 5.401515025e-23 1995260 5.385945321e-23 2511890 5.373476416e-23 3162280 5.363658169e-23 3981070 5.355751489e-23 5011870 5.349605881e-23 6309570 5.344633449e-23 7943280 5.3406864e-23 10000000 5.337617481e-23 12589250 5.335133764e-23 15848930 5.333088784e-23 19952620 5.331628324e-23 25118860 5.330314081e-23 31622780 5.329292004e-23 39810720 5.328562009e-23 50118720 5.327978049e-23 63095730 5.327394121e-23 79432820 5.327102169e-23 100000000 5.326664256e-23 100.00000 1.5394605625e-22 125.89254 1.2282845584e-22 158.48932 9.811298704e-23 199.52623 7.847833744e-23 251.18864 6.288331401e-23 316.22777 5.0495236e-23 398.10717 4.065592644e-23 501.18723 3.283977636e-23 630.95734 2.663076025e-23 794.32823 2.169882724e-23 1000 1.778140224e-23 1258.93 1.466966601e-23 1584.89 1.219825476e-23 1995.26 1.023488064e-23 2511.89 8.67538116e-24 3162.28 7.436529e-24 3981.07 6.45261604e-24 5011.87 5.67106596e-24 6309.57 5.04990784e-24 7943.28 4.55694409e-24 10000 4.16527281e-24 12589.25 3.85415424e-24 15848.93 3.60696064e-24 19952.62 3.41067024e-24 25118.86 3.254416e-24 31622.78 3.13077636e-24 39810.72 3.03212569e-24 50118.72 2.95392969e-24 63095.73 2.89204036e-24 79432.82 2.842596e-24 100000 2.80361536e-24 125892.54 2.77255801e-24 158489.32 2.74763776e-24 199526.23 2.72811289e-24 251188.64 2.712609e-24 316227.77 2.70010624e-24 398107.17 2.69025604e-24 501187.23 2.68238884e-24 630957.34 2.67616881e-24 794328.23 2.67126336e-24 1000000 2.66734224e-24 1258930 2.66407684e-24 1584890 2.66179225e-24 1995260 2.65983481e-24 2511890 2.65820416e-24 3162280 2.6569e-24 3981070 2.65592209e-24 5011870 2.65527025e-24 6309570 2.65461849e-24 7943280 2.65396681e-24 10000000 2.653641e-24 12589250 2.65331521e-24 15848930 2.65331521e-24 19952620 2.65298944e-24 25118860 2.65266369e-24 31622780 2.65266369e-24 39810720 2.65266369e-24 50118720 2.65266369e-24 63095730 2.65233796e-24 79432820 2.65233796e-24 100000000 2.65233796e-24 100.00000 6.12406414096e-21 125.89254 4.86959730625e-21 158.48932 3.87314543716e-21 199.52623 3.08163765625e-21 251.18864 2.45291382361e-21 316.22777 1.95350740225e-21 398.10717 1.55680750096e-21 501.18723 1.24170254884e-21 630.95734 9.9140597956e-22 794.32823 7.92591409e-22 1000 6.3466205625e-22 1258.93 5.0921532964e-22 1584.89 4.0956854884e-22 1995.26 3.3041787076e-22 2511.89 2.6754817761e-22 3162.28 2.1760675225e-22 3981.07 1.7793692449e-22 5011.87 1.4642694049e-22 6309.57 1.21396324e-22 7943.28 1.0151570025e-22 10000 8.572167396e-23 12589.25 7.317775936e-23 15848.93 6.321363049e-23 19952.62 5.529855769e-23 25118.86 4.901120064e-23 31622.78 4.401659025e-23 39810.72 4.004991225e-23 50118.72 3.689833536e-23 63095.73 3.439587904e-23 79432.82 3.240797184e-23 100000 3.082803529e-23 125892.54 2.957401924e-23 158489.32 2.857757764e-23 199526.23 2.778554944e-23 251188.64 2.715660544e-23 316227.77 2.665760161e-23 398107.17 2.626050025e-23 501187.23 2.594577969e-23 630957.34 2.569577481e-23 794328.23 2.549644036e-23 1000000 2.533914244e-23 1258930 2.521345369e-23 1584890 2.511412996e-23 1995260 2.503501225e-23 2511890 2.497200784e-23 3162280 2.492206084e-23 3981070 2.488213924e-23 5011870 2.4850225e-23 6309570 2.482530625e-23 7943280 2.480538025e-23 10000000 2.478944521e-23 12589250 2.477749729e-23 15848930 2.476754289e-23 19952620 2.475958081e-23 25118860 2.475361009e-23 31622780 2.474863504e-23 39810720 2.474465536e-23 50118720 2.4740676e-23 63095730 2.473868644e-23 79432820 2.473669696e-23 100000000 2.473470756e-23 100.00000 1.456482095104e-20 125.89254 1.157834104729e-20 158.48932 9.20607627289e-21 199.52623 7.32174571584e-21 251.18864 5.82495609796e-21 316.22777 4.63601659689e-21 398.10717 3.69160747396e-21 501.18723 2.941435225e-21 630.95734 2.34555207481e-21 794.32823 1.87222366864e-21 1000 1.49625070596e-21 1258.93 1.19760292096e-21 1584.89 9.603801e-22 1995.26 7.7194509921e-22 2511.89 6.2226300304e-22 3162.28 5.0336960881e-22 3981.07 4.08929284e-22 5011.87 3.3391349289e-22 6309.57 2.7432634384e-22 7943.28 2.2699339569e-22 10000 1.8939539641e-22 12589.25 1.5952953025e-22 15848.93 1.3580639296e-22 19952.62 1.16964225e-22 25118.86 1.0199586049e-22 31622.78 9.010755625e-23 39810.72 8.066195344e-23 50118.72 7.316065156e-23 63095.73 6.720228529e-23 79432.82 6.246847369e-23 100000 5.870930884e-23 125892.54 5.572323904e-23 158489.32 5.334987681e-23 199526.23 5.1466276e-23 251188.64 4.996934721e-23 316227.77 4.878044649e-23 398107.17 4.783658896e-23 501187.23 4.708567161e-23 630957.34 4.648921489e-23 794328.23 4.601587225e-23 1000000 4.564083364e-23 1258930 4.534136896e-23 1584890 4.5104656e-23 1995260 4.4916804e-23 2511890 4.476680464e-23 3162280 4.464778761e-23 3981070 4.455295504e-23 5011870 4.447822864e-23 6309570 4.441822609e-23 7943280 4.437158544e-23 10000000 4.433429056e-23 12589250 4.430366721e-23 15848930 4.427970849e-23 19952620 4.426107841e-23 25118860 4.424644324e-23 31622780 4.423447081e-23 39810720 4.422516004e-23 50118720 4.421718016e-23 63095730 4.421186064e-23 79432820 4.420654144e-23 100000000 4.420255225e-23 100.00000 2.063684521809e-20 125.89254 1.6403974084e-20 158.48932 1.304170852009e-20 199.52623 1.037095787641e-20 251.18864 8.24950759824e-21 316.22777 6.56437003264e-21 398.10717 5.22582964201e-21 501.18723 4.16258522761e-21 630.95734 3.31802496529e-21 794.32823 2.64716424036e-21 1000 2.11427994969e-21 1258.93 1.69099421089e-21 1584.89 1.35476261041e-21 1995.26 1.08768699601e-21 2511.89 8.7554442816e-22 3162.28 7.0703341801e-22 3981.07 5.7317626921e-22 5011.87 4.6685380624e-22 6309.57 3.8239411401e-22 7943.28 3.15311049e-22 10000 2.6202220641e-22 12589.25 2.19691684e-22 15848.93 1.8606869649e-22 19952.62 1.5936285121e-22 25118.86 1.3814711296e-22 31622.78 1.2129718225e-22 39810.72 1.07910544e-22 50118.72 9.7278769e-23 63095.73 8.883251001e-23 79432.82 8.212528129e-23 100000 7.679542689e-23 125892.54 7.256313856e-23 158489.32 6.920076969e-23 199526.23 6.653012356e-23 251188.64 6.440865025e-23 316227.77 6.272323204e-23 398107.17 6.138409104e-23 501187.23 6.032162889e-23 630957.34 5.947648641e-23 794328.23 5.880589225e-23 1000000 5.827337569e-23 1258930 5.784971481e-23 1584890 5.751402244e-23 1995260 5.724586921e-23 2511890 5.703421441e-23 3162280 5.686517281e-23 3981070 5.673253041e-23 5011870 5.6625625e-23 6309570 5.654137636e-23 7943280 5.647372201e-23 10000000 5.642112996e-23 12589250 5.637907396e-23 15848930 5.634453969e-23 19952620 5.631752025e-23 25118860 5.629650961e-23 31622780 5.6280004e-23 39810720 5.626650121e-23 50118720 5.625600016e-23 63095730 5.624700004e-23 79432820 5.624100036e-23 100000000 5.6235001e-23 100.00000 3.6820620769e-22 125.89254 2.9448276025e-22 158.48932 2.3592345604e-22 199.52623 1.8940915876e-22 251.18864 1.5246075625e-22 316.22777 1.2311012025e-22 398.10717 9.979810201e-23 501.18723 8.127924025e-23 630.95734 6.6569281e-23 794.32823 5.488587225e-23 1000 4.560435961e-23 1258.93 3.823319889e-23 1584.89 3.237723801e-23 1995.26 2.772549025e-23 2511.89 2.403058441e-23 3162.28 2.1095649e-23 3981.07 1.876449124e-23 5011.87 1.691265625e-23 6309.57 1.544175616e-23 7943.28 1.4273284e-23 10000 1.334513961e-23 12589.25 1.260747049e-23 15848.93 1.202216929e-23 19952.62 1.155660025e-23 25118.86 1.118768704e-23 31622.78 1.089396036e-23 39810.72 1.066087801e-23 50118.72 1.047557956e-23 63095.73 1.032851044e-23 79432.82 1.021185936e-23 100000 1.0118761e-23 125892.54 1.004509636e-23 158489.32 9.98686404e-24 199526.23 9.94014784e-24 251188.64 9.90297961e-24 316227.77 9.87404929e-24 398107.17 9.85018225e-24 501187.23 9.83198736e-24 630957.34 9.81694224e-24 794328.23 9.80566596e-24 1000000 9.79627401e-24 1258930 9.78876369e-24 1584890 9.78313284e-24 1995260 9.778129e-24 2511890 9.77500225e-24 3162280 9.771876e-24 3981070 9.76937536e-24 5011870 9.76750009e-24 6309570 9.76625001e-24 7943280 9.76500001e-24 10000000 9.76375009e-24 12589250 9.76312516e-24 15848930 9.76250025e-24 19952620 9.76250025e-24 25118860 9.76187536e-24 31622780 9.76125049e-24 39810720 9.76125049e-24 50118720 9.76125049e-24 63095730 9.76125049e-24 79432820 9.76062564e-24 100000000 9.76062564e-24 100.00000 2.14963904164e-21 125.89254 1.71308243236e-21 158.48932 1.36631511769e-21 199.52623 1.09086860089e-21 251.18864 8.7206814864e-22 316.22777 6.9827534001e-22 398.10717 5.6022629481e-22 501.18723 4.5056854756e-22 630.95734 3.6346278609e-22 794.32823 2.9427343936e-22 1000 2.3931471204e-22 1258.93 1.9565854884e-22 1584.89 1.6098280641e-22 1995.26 1.3343715225e-22 2511.89 1.1155795641e-22 3162.28 9.417732025e-23 3981.07 8.037301801e-23 5011.87 6.940722721e-23 6309.57 6.069656464e-23 7943.28 5.377728889e-23 10000 4.828165225e-23 12589.25 4.3917129e-23 15848.93 4.044832801e-23 19952.62 3.769468816e-23 25118.86 3.550610569e-23 31622.78 3.376888321e-23 39810.72 3.2387481e-23 50118.72 3.129171721e-23 63095.73 3.042074025e-23 79432.82 2.972866576e-23 100000 2.917836289e-23 125892.54 2.874246544e-23 158489.32 2.839504369e-23 199526.23 2.811968784e-23 251188.64 2.790163684e-23 316227.77 2.772759649e-23 398107.17 2.758980676e-23 501187.23 2.747961241e-23 630957.34 2.739266244e-23 794328.23 2.732361984e-23 1000000 2.726823961e-23 1258930 2.722439329e-23 1584890 2.718996736e-23 1995260 2.716285924e-23 2511890 2.714097409e-23 3162280 2.7123264e-23 3981070 2.710972489e-23 5011870 2.709827136e-23 6309570 2.708994304e-23 7943280 2.708265681e-23 10000000 2.707745296e-23 12589250 2.707329024e-23 15848930 2.706912784e-23 19952620 2.706704676e-23 25118860 2.706496576e-23 31622780 2.706288484e-23 39810720 2.706184441e-23 50118720 2.7060804e-23 63095730 2.705976361e-23 79432820 2.705872324e-23 100000000 2.705872324e-23 100.00000 4.51742605924e-21 125.89254 3.59690466564e-21 158.48932 2.86570714329e-21 199.52623 2.28489736036e-21 251.18864 1.82353766841e-21 316.22777 1.45707104656e-21 398.10717 1.16597663296e-21 501.18723 9.3475724644e-22 630.95734 7.51088836e-22 794.32823 6.0519444049e-22 1000 4.8930767209e-22 1258.93 3.9725671969e-22 1584.89 3.2413681444e-22 1995.26 2.6605524544e-22 2511.89 2.1992000209e-22 3162.28 1.8327202884e-22 3981.07 1.5416450569e-22 5011.87 1.3104067729e-22 6309.57 1.1267397904e-22 7943.28 9.808525444e-23 10000 8.649744016e-23 12589.25 7.729047225e-23 15848.93 6.997991716e-23 19952.62 6.417131449e-23 25118.86 5.955826276e-23 31622.78 5.589356644e-23 39810.72 5.298238521e-23 50118.72 5.067019489e-23 63095.73 4.883354161e-23 79432.82 4.737431241e-23 100000 4.621552324e-23 125892.54 4.529424601e-23 158489.32 4.456363536e-23 199526.23 4.3983424e-23 251188.64 4.352172841e-23 316227.77 4.315570249e-23 398107.17 4.286451841e-23 501187.23 4.263306436e-23 630957.34 4.244913409e-23 794328.23 4.230331681e-23 1000000 4.218762304e-23 1258930 4.209544161e-23 1584890 4.202150976e-23 1995260 4.1964484e-23 2511890 4.191785536e-23 3162280 4.188160656e-23 3981070 4.185184249e-23 5011870 4.182855625e-23 6309570 4.181044921e-23 7943280 4.1796225e-23 10000000 4.178458881e-23 12589250 4.177553956e-23 15848930 4.176778384e-23 19952620 4.176261376e-23 25118860 4.1757444e-23 31622780 4.175356689e-23 39810720 4.175098225e-23 50118720 4.174839769e-23 63095730 4.174710544e-23 79432820 4.174581321e-23 100000000 4.1744521e-23 100.00000 6.45822784161e-21 125.89254 5.14057452484e-21 158.48932 4.09393945921e-21 199.52623 3.26256873721e-21 251.18864 2.60218333456e-21 316.22777 2.07761844481e-21 398.10717 1.66094557209e-21 501.18723 1.32996607969e-21 630.95734 1.067067556e-21 794.32823 8.5823217936e-22 1000 6.9235291876e-22 1258.93 5.6058612289e-22 1584.89 4.5592498576e-22 1995.26 3.7278727929e-22 2511.89 3.0674720164e-22 3162.28 2.5429086225e-22 3981.07 2.1262305856e-22 5011.87 1.7952784144e-22 6309.57 1.5323716521e-22 7943.28 1.3235352025e-22 10000 1.1576468836e-22 12589.25 1.0258853796e-22 15848.93 9.2121604e-23 19952.62 8.380853209e-23 25118.86 7.720433956e-23 31622.78 7.195959241e-23 39810.72 6.779216896e-23 50118.72 6.448250601e-23 63095.73 6.185350609e-23 79432.82 5.976526864e-23 100000 5.810707984e-23 125892.54 5.678828164e-23 158489.32 5.574264921e-23 199526.23 5.491106404e-23 251188.64 5.425059025e-23 316227.77 5.372596804e-23 398107.17 5.330898169e-23 501187.23 5.297801796e-23 630957.34 5.271486025e-23 794328.23 5.250596521e-23 1000000 5.234088409e-23 1258930 5.220929536e-23 1584890 5.210385489e-23 1995260 5.202159876e-23 2511890 5.1955264e-23 3162280 5.190193849e-23 3981070 5.186160225e-23 5011870 5.182848064e-23 6309570 5.180112729e-23 7943280 5.178097681e-23 10000000 5.176370809e-23 12589250 5.175075844e-23 15848930 5.174068761e-23 19952620 5.173205625e-23 25118860 5.1724864e-23 31622780 5.172054889e-23 39810720 5.171623396e-23 50118720 5.171335744e-23 63095730 5.1710481e-23 79432820 5.170760464e-23 100000000 5.170616649e-23 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_diode_lt.standard0000644000175000017500000001643114163340332025344 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.55044e-05 6.7326001307939e-15 2.00050003886362e-15 4.50010008742323e-15 0 0. 6.43970012510374e-15 3.08870006000403e-15 3.08870006000403e-15 0.2 2.71461e-05 4.56290008864324e-15 3.81710007415462e-15 3.23603106286622e-16 0.4 2.90059e-05 4.46080008665975e-15 3.75690007298511e-15 2.79909205437783e-16 0.6 3.05592e-05 4.3984000854475e-15 3.70380007195354e-15 2.72538705294596e-16 0.8 3.19874e-05 4.33860008428577e-15 3.652400070955e-15 2.66051905168577e-16 1 3.33295e-05 4.28110008316872e-15 3.60200006997588e-15 2.60722605065045e-16 1.2 3.46078e-05 4.22520008208276e-15 3.55250006901425e-15 2.56228104977731e-16 -0.2 -4.48424e-05 7.53930014646562e-15 3.29300006397295e-15 4.10020007965439e-15 0 0. 7.65330014868029e-15 3.75280007290546e-15 3.75280007290546e-15 0.2 5.47176e-05 6.93470013472008e-15 4.43220008610414e-15 2.30170004471501e-15 0.4 8.33761e-05 5.643500109636e-15 4.90920009537079e-15 4.42731208600918e-16 0.6 8.7727e-05 5.4978001068055e-15 4.84960009421294e-15 3.51673206831938e-16 0.8 9.06552e-05 5.43430010557188e-15 4.80070009326297e-15 3.38414606574364e-16 1 9.31807e-05 5.37830010448397e-15 4.75500009237516e-15 3.29883406408629e-16 1.2 9.54498e-05 5.32530010345435e-15 4.71050009151066e-15 3.23185806278515e-16 -0.2 -2.82899e-05 7.58110014727766e-15 3.6592000710871e-15 3.79870007379716e-15 0 0. 7.72140015000327e-15 3.79860007379522e-15 3.79860007379522e-15 0.2 4.17499e-05 7.55180014670846e-15 4.03880007846157e-15 3.37500006556596e-15 0.4 9.49616e-05 6.64410012907461e-15 4.78710009299876e-15 1.66440003233422e-15 0.6 0.0001206758 5.80810011283368e-15 5.02010009752524e-15 5.49077510666902e-16 0.8 0.0001270932 5.63990010956606e-15 4.97160009658303e-15 4.23655708230339e-16 1 0.000130889 5.56900010818869e-15 4.92530009568357e-15 3.99605607763119e-16 1.2 0.0001339885 5.51370010711438e-15 4.88310009486375e-15 3.87707907531983e-16 -0.2 -1.4979e-05 7.45460014482015e-15 3.79000007362815e-15 3.55220006900842e-15 0 0. 7.59170014748359e-15 3.73900007263737e-15 3.73900007263737e-15 0.2 2.56861e-05 7.55320014673565e-15 3.74740007280056e-15 3.68630007161357e-15 0.4 6.56938e-05 7.22770014041218e-15 4.20940008177581e-15 2.88010005595156e-15 0.6 0.0001147294 6.33850012313773e-15 4.77890009283946e-15 1.37920002679365e-15 0.8 0.0001379753 5.73850011148156e-15 4.89550009510464e-15 6.36742612369968e-16 1 0.0001457683 5.56160010804494e-15 4.85580009433339e-15 4.94391809604526e-16 1.2 0.000150123 5.48230010650438e-15 4.81300009350192e-15 4.57853908894706e-16 -0.2 -8.62171e-05 6.61610012853066e-15 1.50630002926282e-15 4.86320009447715e-15 0 0. 6.26120012163603e-15 2.98850005805745e-15 2.98850005805745e-15 0.2 2.70544e-05 4.36500008479864e-15 3.65750007105408e-15 2.6940560523373e-16 0.4 2.9511e-05 4.30450008362331e-15 3.59870006991177e-15 2.69499505235554e-16 0.6 3.1681e-05 4.24220008241302e-15 3.54550006887826e-15 2.62359405096843e-16 0.8 3.3689e-05 4.18200008124351e-15 3.49360006787e-15 2.56004704973391e-16 1 3.55903e-05 4.12410008011869e-15 3.44260006687922e-15 2.50842304873101e-16 1.2 3.7415e-05 4.06780007902495e-15 3.39250006590593e-15 2.46530404789334e-16 -0.2 -6.85228e-05 7.70240014963415e-15 3.2971000640526e-15 4.26750008290452e-15 0 0. 7.87690015302415e-15 3.8700000751823e-15 3.8700000751823e-15 0.2 8.54739e-05 6.92450013452193e-15 4.748300092245e-15 1.97030003827692e-15 0.4 0.0001160003 5.78220011233052e-15 5.14890010002743e-15 3.52766406853176e-16 0.6 0.0001219223 5.7147001110192e-15 5.09700009901917e-15 3.38054406567366e-16 0.8 0.000126625 5.65600010987884e-15 5.04950009809639e-15 3.28624306384168e-16 1 0.0001306602 5.59990010878899e-15 5.00310009719498e-15 3.20625906228784e-16 1.2 0.000134242 5.54620010774576e-15 4.95760009631106e-15 3.14153306103041e-16 -0.2 -4.1577e-05 7.71620014990224e-15 3.69220007172819e-15 3.90870007593413e-15 0 0. 7.8852001531854e-15 3.88480007546982e-15 3.88480007546982e-15 0.2 6.33752e-05 7.71220014982454e-15 4.19240008144555e-15 3.38970006585154e-15 0.4 0.0001453367 6.52050012667344e-15 5.11570009938246e-15 1.20840002347553e-15 0.6 0.0001707928 5.92180011504252e-15 5.26820010234507e-15 4.2972980834834e-16 0.8 0.0001783359 5.84700011358939e-15 5.22240010145531e-15 4.0086630778761e-16 1 0.0001840284 5.79050011249176e-15 5.17910010061413e-15 3.89006707557214e-16 1.2 0.0001888663 5.73740011146019e-15 5.13690009979431e-15 3.79346007369536e-16 -0.2 -2.09413e-05 7.55880014684444e-15 3.81960007420318e-15 3.63380007059366e-15 0 0. 7.71200014982065e-15 3.80290007387875e-15 3.80290007387875e-15 0.2 3.74684e-05 7.68210014923979e-15 3.85100007481319e-15 3.71900007224883e-15 0.4 9.82562e-05 7.32460014229465e-15 4.3450000844101e-15 2.84750005531824e-15 0.6 0.0001724277 6.18120012008187e-15 5.04230009795652e-15 9.6125271867421e-16 0.8 0.0001951983 5.78360011235772e-15 5.09530009898615e-15 4.98194409678399e-16 1 0.000203425 5.70410011081328e-15 5.05550009821295e-15 4.58371808904767e-16 1.2 0.0002093288 5.64990010976033e-15 5.01690009746307e-15 4.43640208618577e-16 -0.2 -3.24125e-05 6.74310013099788e-15 2.1815000423799e-15 4.33790008427217e-15 0 0. 6.56090012745829e-15 3.15910006137168e-15 3.15910006137168e-15 0.2 2.37326e-05 5.19990010101821e-15 3.99190007755045e-15 8.4374331639136e-16 0.4 2.80562e-05 4.68080009093368e-15 3.92750007629935e-15 3.46451806730502e-16 0.6 2.93486e-05 4.5579000885461e-15 3.84590007471411e-15 3.01062005848717e-16 0.8 3.03378e-05 4.48360008710268e-15 3.78530007353684e-15 2.87694205589021e-16 1 3.1229e-05 4.4211000858885e-15 3.7318000724975e-15 2.80165505442762e-16 1.2 3.20623e-05 4.3635000847695e-15 3.68130007151644e-15 2.7463290533528e-16 -0.2 -2.73412e-05 7.28680014156031e-15 3.08190005987192e-15 4.04530007858785e-15 0 0. 7.37940014335925e-15 3.60920007011575e-15 3.60920007011575e-15 0.2 3.19862e-05 6.85280013312901e-15 4.30180008357086e-15 2.35090004567082e-15 0.4 5.30557e-05 5.93280011525622e-15 4.76570009258302e-15 8.99680917478058e-16 0.6 6.0201e-05 5.49370010672585e-15 4.69850009127753e-15 4.98316709680774e-16 0.8 6.31855e-05 5.3123001032018e-15 4.60690008949802e-15 3.99991907770623e-16 1 6.50911e-05 5.2102001012183e-15 4.5368000881362e-15 3.65830607106973e-16 1.2 6.66018e-05 5.13620009978071e-15 4.47930008701915e-15 3.49358806786977e-16 -0.2 -1.84061e-05 7.36280014303676e-15 3.48520006770681e-15 3.74200007269565e-15 0 0. 7.48740014545736e-15 3.67530007139988e-15 3.67530007139988e-15 0.2 2.57471e-05 7.30100014183618e-15 3.98690007745331e-15 3.1636000614591e-15 0.4 5.43357e-05 6.68730012991386e-15 4.6736000907938e-15 1.82570003546779e-15 0.6 7.26697e-05 6.0747001180129e-15 4.87500009470639e-15 9.75188218944934e-16 0.8 8.15347e-05 5.71530011103086e-15 4.83230009387686e-15 6.38780812409564e-16 1 8.61855e-05 5.51630010716489e-15 4.75470009236933e-15 5.086027098806e-16 1.2 8.91484e-05 5.39330010477538e-15 4.68550009102498e-15 4.51157208764609e-16 -0.2 -1.05555e-05 7.28130014145346e-15 3.66970007129108e-15 3.48810006776315e-15 0 0. 7.40630014388183e-15 3.6407000707277e-15 3.6407000707277e-15 0.2 1.69167e-05 7.34340014265988e-15 3.68950007167574e-15 3.52270006843532e-15 0.4 4.1397e-05 7.00240013603529e-15 4.28470008323866e-15 2.56830004989424e-15 0.6 6.5331e-05 6.47890012586528e-15 4.6832000909803e-15 1.62000003147166e-15 0.8 8.15975e-05 6.02770011709984e-15 4.78890009303373e-15 1.0411000202254e-15 1 9.11554e-05 5.72560011123095e-15 4.76020009247618e-15 7.53927014646503e-16 1.2 9.69272e-05 5.52940010741939e-15 4.69880009128336e-15 6.11625711882023e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_ig_lt.standard0000644000175000017500000000711514163340332025202 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_diode_sw.standard0000644000175000017500000001464314163340332025474 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 3.5957e-06 0. -1.382e-15 -3.5957e-06 0.2 4.28e-06 0. -1.382e-15 -4.28e-06 0.3 4.9395e-06 0. -1.382e-15 -4.9395e-06 0.4 5.6189e-06 0. -1.382e-15 -5.6189e-06 0.5 6.3337e-06 0. -1.382e-15 -6.3337e-06 0.6 7.0929e-06 0. -1.382e-15 -7.0929e-06 0.7 7.9028e-06 0. -1.382e-15 -7.9028e-06 0.8 8.7688e-06 0. -1.382e-15 -8.7688e-06 0.9 9.6956e-06 0. -1.382e-15 -9.6956e-06 1.00000 1.06876e-05 0. -1.382e-15 -1.06876e-05 1.10000 1.1749e-05 0. -1.382e-15 -1.1749e-05 1.20000 1.28841e-05 0. -1.382e-15 -1.28841e-05 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 0.0005561393 0. -1.382e-15 -0.0005561393 0.2 0.0006669258 0. -1.382e-15 -0.0006669258 0.3 0.0007249564 0. -1.382e-15 -0.0007249564 0.4 0.000773657 0. -1.382e-15 -0.000773657 0.5 0.0008177523 0. -1.382e-15 -0.0008177523 0.6 0.0008591148 0. -1.382e-15 -0.0008591148 0.7 0.0008987224 0. -1.382e-15 -0.0008987224 0.8 0.0009371516 0. -1.382e-15 -0.0009371516 0.9 0.00097477 0. -1.382e-15 -0.00097477 1.00000 0.0010118 0. -1.382e-15 -0.0010118 1.10000 0.0010485 0. -1.382e-15 -0.0010485 1.20000 0.0010849 0. -1.382e-15 -0.0010849 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 0.0018585 0. -1.382e-15 -0.0018585 0.2 0.0027552 0. -1.382e-15 -0.0027552 0.3 0.0030396 0. -1.382e-15 -0.0030396 0.4 0.0032126 0. -1.382e-15 -0.0032126 0.5 0.0033506 0. -1.382e-15 -0.0033506 0.6 0.0034695 0. -1.382e-15 -0.0034695 0.7 0.0035761 0. -1.382e-15 -0.0035761 0.8 0.0036739 0. -1.382e-15 -0.0036739 0.9 0.0037653 0. -1.382e-15 -0.0037653 1.00000 0.0038516 0. -1.382e-15 -0.0038516 1.10000 0.003934 0. -1.382e-15 -0.003934 1.20000 0.0040133 0. -1.382e-15 -0.0040133 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 0.0028545 0. -1.382e-15 -0.0028545 0.2 0.0047989 0. -1.382e-15 -0.0047989 0.3 0.0056304 0. -1.382e-15 -0.0056304 0.4 0.0060097 0. -1.382e-15 -0.0060097 0.5 0.0062704 0. -1.382e-15 -0.0062704 0.6 0.0064811 0. -1.382e-15 -0.0064811 0.7 0.0066623 0. -1.382e-15 -0.0066623 0.8 0.0068235 0. -1.382e-15 -0.0068235 0.9 0.00697 0. -1.382e-15 -0.00697 1.00000 0.0071052 0. -1.382e-15 -0.0071052 1.10000 0.0072316 0. -1.382e-15 -0.0072316 1.20000 0.0073507 0. -1.382e-15 -0.0073507 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 3.404183e-07 0. -9.447e-23 -3.404183e-07 0.2 4.217106e-07 0. -9.447e-23 -4.217106e-07 0.3 5.078992e-07 0. -9.447e-23 -5.078992e-07 0.4 6.027299e-07 0. -9.447e-23 -6.027299e-07 0.5 7.083026e-07 0. -9.447e-23 -7.083026e-07 0.6 8.263353e-07 0. -9.447e-23 -8.263353e-07 0.7 9.584625e-07 0. -9.447e-23 -9.584625e-07 0.8 1.1063e-06 0. -9.447e-23 -1.1063e-06 0.9 1.2717e-06 0. -9.447e-23 -1.2717e-06 1.00000 1.4564e-06 0. -9.447e-23 -1.4564e-06 1.10000 1.6625e-06 0. -9.447e-23 -1.6625e-06 1.20000 1.892e-06 0. -9.447e-23 -1.892e-06 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0005412604 0. -9.447e-23 -0.0005412604 0.2 0.000625126 0. -9.447e-23 -0.000625126 0.3 0.0006835382 0. -9.447e-23 -0.0006835382 0.4 0.0007344518 0. -9.447e-23 -0.0007344518 0.5 0.0007815785 0. -9.447e-23 -0.0007815785 0.6 0.0008265465 0. -9.447e-23 -0.0008265465 0.7 0.0008702113 0. -9.447e-23 -0.0008702113 0.8 0.0009130745 0. -9.447e-23 -0.0009130745 0.9 0.0009554532 0. -9.447e-23 -0.0009554532 1.00000 0.0009975586 0. -9.447e-23 -0.0009975586 1.10000 0.0010395 0. -9.447e-23 -0.0010395 1.20000 0.0010815 0. -9.447e-23 -0.0010815 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0022559 0. -9.447e-23 -0.0022559 0.2 0.0031561 0. -9.447e-23 -0.0031561 0.3 0.0034311 0. -9.447e-23 -0.0034311 0.4 0.0036235 0. -9.447e-23 -0.0036235 0.5 0.0037808 0. -9.447e-23 -0.0037808 0.6 0.0039174 0. -9.447e-23 -0.0039174 0.7 0.0040404 0. -9.447e-23 -0.0040404 0.8 0.0041537 0. -9.447e-23 -0.0041537 0.9 0.0042599 0. -9.447e-23 -0.0042599 1.00000 0.0043606 0. -9.447e-23 -0.0043606 1.10000 0.004457 0. -9.447e-23 -0.004457 1.20000 0.0045499 0. -9.447e-23 -0.0045499 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0035424 0. -9.447e-23 -0.0035424 0.2 0.0057531 0. -9.447e-23 -0.0057531 0.3 0.0065428 0. -9.447e-23 -0.0065428 0.4 0.006937 0. -9.447e-23 -0.006937 0.5 0.0072314 0. -9.447e-23 -0.0072314 0.6 0.0074744 0. -9.447e-23 -0.0074744 0.7 0.0076846 0. -9.447e-23 -0.0076846 0.8 0.0078719 0. -9.447e-23 -0.0078719 0.9 0.0080425 0. -9.447e-23 -0.0080425 1.00000 0.0082002 0. -9.447e-23 -0.0082002 1.10000 0.0083477 0. -9.447e-23 -0.0083477 1.20000 0.0084869 0. -9.447e-23 -0.0084869 0. 9.943475e-10 0. -1.9887e-09 9.943475e-10 0.1 3.18976e-05 0. -1.9887e-09 -3.18956e-05 0.2 3.8094e-05 0. -1.9887e-09 -3.8092e-05 0.3 4.25231e-05 0. -1.9887e-09 -4.25211e-05 0.4 4.65767e-05 0. -1.9887e-09 -4.65747e-05 0.5 5.05164e-05 0. -1.9887e-09 -5.05144e-05 0.6 5.44414e-05 0. -1.9887e-09 -5.44394e-05 0.7 5.84012e-05 0. -1.9887e-09 -5.83992e-05 0.8 6.24247e-05 0. -1.9887e-09 -6.24228e-05 0.9 6.65309e-05 0. -1.9887e-09 -6.65289e-05 1.00000 7.07328e-05 0. -1.9887e-09 -7.07308e-05 1.10000 7.504e-05 0. -1.9887e-09 -7.5038e-05 1.20000 7.946e-05 0. -1.9887e-09 -7.9458e-05 0. 9.943475e-10 0. -1.9887e-09 9.943475e-10 0.1 0.0005857177 0. -1.9887e-09 -0.0005857157 0.2 0.0007797416 0. -1.9887e-09 -0.0007797396 0.3 0.0008679375 0. -1.9887e-09 -0.0008679355 0.4 0.0009285176 0. -1.9887e-09 -0.0009285156 0.5 0.0009779962 0. -1.9887e-09 -0.0009779942 0.6 0.0010217 0. -1.9887e-09 -0.0010217 0.7 0.0010619 0. -1.9887e-09 -0.0010619 0.8 0.0010998 0. -1.9887e-09 -0.0010998 0.9 0.001136 0. -1.9887e-09 -0.001136 1.00000 0.0011711 0. -1.9887e-09 -0.0011711 1.10000 0.0012052 0. -1.9887e-09 -0.0012052 1.20000 0.0012387 0. -1.9887e-09 -0.0012387 0. 9.943475e-10 0. -1.9887e-09 9.943475e-10 0.1 0.0014863 0. -1.9887e-09 -0.0014863 0.2 0.0022755 0. -1.9887e-09 -0.0022755 0.3 0.0026536 0. -1.9887e-09 -0.0026536 0.4 0.0028758 0. -1.9887e-09 -0.0028758 0.5 0.0030322 0. -1.9887e-09 -0.0030322 0.6 0.0031555 0. -1.9887e-09 -0.0031555 0.7 0.0032596 0. -1.9887e-09 -0.0032596 0.8 0.0033514 0. -1.9887e-09 -0.0033514 0.9 0.0034348 0. -1.9887e-09 -0.0034348 1.00000 0.003512 0. -1.9887e-09 -0.003512 1.10000 0.0035845 0. -1.9887e-09 -0.0035845 1.20000 0.0036533 0. -1.9887e-09 -0.0036533 0. 9.943475e-10 0. -1.9887e-09 9.943475e-10 0.1 0.0022006 0. -1.9887e-09 -0.0022006 0.2 0.0036652 0. -1.9887e-09 -0.0036652 0.3 0.0044799 0. -1.9887e-09 -0.0044799 0.4 0.0049604 0. -1.9887e-09 -0.0049604 0.5 0.0052813 0. -1.9887e-09 -0.0052813 0.6 0.0055192 0. -1.9887e-09 -0.0055192 0.7 0.0057091 0. -1.9887e-09 -0.0057091 0.8 0.005869 0. -1.9887e-09 -0.005869 0.9 0.0060085 0. -1.9887e-09 -0.0060085 1.00000 0.0061335 0. -1.9887e-09 -0.0061335 1.10000 0.0062478 0. -1.9887e-09 -0.0062478 1.20000 0.0063536 0. -1.9887e-09 -0.0063536 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2d_st.standard0000644000175000017500000004521214163340332025140 0ustar carstencarstenFreq N(d) 100.00000 8.1567931201e-22 125.89254 6.4802830096e-22 158.48932 5.1485879025e-22 199.52623 4.0907894049e-22 251.18864 3.2505565849e-22 316.22777 2.5831239841e-22 398.10717 2.0529731524e-22 501.18723 1.6318529536e-22 630.95734 1.2973437801e-22 794.32823 1.0316261761e-22 1000 8.205823396e-23 1258.93 6.529286416e-23 1584.89 5.197544836e-23 1995.26 4.139764281e-23 2511.89 3.299583364e-23 3162.28 2.632100416e-23 3981.07 2.101947409e-23 5011.87 1.680836004e-23 6309.57 1.346376249e-23 7943.28 1.080634129e-23 10000 8.69601121e-24 12589.25 7.01932036e-24 15848.93 5.68774801e-24 19952.62 4.62981289e-24 25118.86 3.78964089e-24 31622.78 3.122289e-24 39810.72 2.5921e-24 50118.72 2.17090756e-24 63095.73 1.83629601e-24 79432.82 1.57076089e-24 100000 1.359556e-24 125892.54 1.19202724e-24 158489.32 1.058841e-24 199526.23 9.5298069257329e-25 251188.64 8.6895675586225e-25 316227.77 8.0221418002881e-25 398107.17 7.4919861451876e-25 501187.23 7.0708691051716e-25 630957.34 6.7363647191296e-25 794328.23 6.4706563433521e-25 1000000 6.2595977944644e-25 1258930 6.0919492348836e-25 1584890 5.9587793191969e-25 1995260 5.85299972401e-25 2511890 5.7689751772129e-25 3162280 5.7022328023969e-25 3981070 5.6492180112384e-25 5011870 5.6071057539721e-25 6309570 5.5736557038864e-25 7943280 5.5470842015625e-25 10000000 5.5259791618249e-25 12589250 5.5092140518464e-25 15848930 5.4958974018624e-25 19952620 5.4853190814436e-25 25118860 5.4769161583161e-25 31622780 5.4702428339881e-25 39810720 5.4649411090576e-25 50118720 5.4607296605625e-25 63095730 5.4573841282921e-25 79432820 5.4547279385769e-25 100000000 5.4526173345856e-25 100.00000 1.79104164849e-19 125.89254 1.4226942947044e-19 158.48932 1.1301053783616e-19 199.52623 8.976932799409e-20 251.18864 7.1308225296e-20 316.22777 5.664404760001e-20 398.10717 4.499587015729e-20 501.18723 3.574338110464e-20 630.95734 2.839390132401e-20 794.32823 2.255598478225e-20 1000 1.791874054881e-20 1258.93 1.423528175689e-20 1584.89 1.130938663936e-20 1995.26 8.98527680649e-21 2511.89 7.13915154225e-21 3162.28 5.67274086976e-21 3981.07 4.50792730921e-21 5011.87 3.58266890916e-21 6309.57 2.84772716881e-21 7943.28 2.26393252864e-21 10000 1.80021155521e-21 12589.25 1.43185803201e-21 15848.93 1.13927175961e-21 19952.62 9.0685901881e-22 25118.86 7.2224950009e-22 31622.78 5.7560646724e-22 39810.72 4.5912489984e-22 50118.72 3.6659995024e-22 63095.73 2.9310467209e-22 79432.82 2.3472691264e-22 100000 1.8835366564e-22 125892.54 1.5151886649e-22 158489.32 1.2226167184e-22 199526.23 9.902041081e-23 251188.64 8.055960025e-23 316227.77 6.589380625e-23 398107.17 5.424617104e-23 501187.23 4.499458084e-23 630957.34 3.764436025e-23 794328.23 3.180621609e-23 1000000 2.716911376e-23 1258930 2.348565444e-23 1584890 2.055987649e-23 1995260 1.823546209e-23 2511890 1.638954256e-23 3162280 1.492354161e-23 3981070 1.375816464e-23 5011870 1.283287329e-23 6309570 1.209857089e-23 7943280 1.151448489e-23 10000000 1.105097049e-23 12589250 1.068243856e-23 15848930 1.038966289e-23 19952620 1.015760641e-23 25118860 9.972964e-24 31622780 9.82634409e-24 39810720 9.709456e-24 50118720 9.61744144e-24 63095730 9.54377449e-24 79432820 9.48516804e-24 100000000 9.43902729e-24 100.00000 5.6558567014849e-19 125.89254 4.49264553984e-19 158.48932 3.5686740450244e-19 199.52623 2.8347371850625e-19 251.18864 2.2517501958121e-19 316.22777 1.7886673981696e-19 398.10717 1.4208270816996e-19 501.18723 1.1286414944676e-19 630.95734 8.965503120025e-20 794.32823 7.121938340416e-20 1000 5.657542916481e-20 1258.93 4.494332160256e-20 1584.89 3.5703614116e-20 1995.26 2.836421852224e-20 2511.89 2.253436311025e-20 3162.28 1.790353717681e-20 3981.07 1.422514206864e-20 5011.87 1.130328322561e-20 6309.57 8.98237644516e-21 7943.28 7.13881357225e-21 10000 5.67441304369e-21 12589.25 4.51120439025e-21 15848.93 3.58723134225e-21 19952.62 2.85329042244e-21 25118.86 2.27030331529e-21 31622.78 1.80721912996e-21 39810.72 1.43938289664e-21 50118.72 1.14719722209e-21 63095.73 9.1510485049e-22 79432.82 7.3075064976e-22 100000 5.8430975625e-22 125892.54 4.67986689e-22 158489.32 3.7559215204e-22 199526.23 3.0219650244e-22 251188.64 2.4389693584e-22 316227.77 1.9759081489e-22 398107.17 1.6080522481e-22 501187.23 1.3158842944e-22 630957.34 1.0837851025e-22 794328.23 8.994246244e-23 1000000 7.529900625e-23 1258930 6.366603681e-23 1584890 5.442603076e-23 1995260 4.7087044e-23 2511890 4.125749824e-23 3162280 3.6626704e-23 3981070 3.294874801e-23 5011870 3.002601616e-23 6309570 2.770548496e-23 7943280 2.586231025e-23 10000000 2.439767236e-23 12589250 2.323432804e-23 15848930 2.231050756e-23 19952620 2.1576025e-23 25118860 2.099380761e-23 31622780 2.0529961e-23 39810720 2.016279409e-23 50118720 1.987019776e-23 63095730 1.963819225e-23 79432820 1.945427449e-23 100000000 1.9307236e-23 100.00000 8.7483061084644e-19 125.89254 6.9490779948769e-19 158.48932 5.5199000737609e-19 199.52623 4.38466460224e-19 251.18864 3.4829142230884e-19 316.22777 2.7666285015625e-19 398.10717 2.1976631429776e-19 501.18723 1.7457171399684e-19 630.95734 1.3867237567876e-19 794.32823 1.1015654792256e-19 1000 8.750562678225e-20 1258.93 6.951332625444e-20 1584.89 5.522156905329e-20 1995.26 4.386917683009e-20 2511.89 3.485169993321e-20 3162.28 2.768882688016e-20 3981.07 2.199917836944e-20 5011.87 1.747972207881e-20 6309.57 1.388977745401e-20 7943.28 1.103819194384e-20 10000 8.77309475904e-21 12589.25 6.97386999409e-21 15848.93 5.54469369129e-21 19952.62 4.40946465444e-21 25118.86 3.50770723081e-21 31622.78 2.79142098921e-21 39810.72 2.22245302041e-21 50118.72 1.77050759076e-21 63095.73 1.41151992804e-21 79432.82 1.12636085769e-21 100000 8.9985000625e-22 125892.54 7.1992939225e-22 158489.32 5.77008441e-22 199526.23 4.6348492369e-22 251188.64 3.7331263369e-22 316227.77 3.01682161e-22 398107.17 2.4478479936e-22 501187.23 1.9959190729e-22 630957.34 1.6369155364e-22 794328.23 1.3517550225e-22 1000000 1.1252542084e-22 1258930 9.453283984e-23 1584890 8.024038929e-23 1995260 6.888834001e-23 2511890 5.987045376e-23 3162280 5.27076e-23 3981070 4.7018449e-23 5011870 4.249866481e-23 6309570 3.890890129e-23 7943280 3.605762304e-23 10000000 3.379213161e-23 12589250 3.199372969e-23 15848930 3.056431225e-23 19952620 2.942845504e-23 25118860 2.852734921e-23 31622780 2.781085696e-23 39810720 2.724213636e-23 50118720 2.678994081e-23 63095730 2.643090921e-23 79432820 2.614583689e-23 100000000 2.591929921e-23 100.00000 6.224263236e-23 125.89254 4.9463089e-23 158.48932 3.931415401e-23 199.52623 3.125145409e-23 251.18864 2.484723409e-23 316.22777 1.975980304e-23 398.10717 1.571963904e-23 501.18723 1.250966161e-23 630.95734 9.960336e-24 794.32823 7.93492561e-24 1000 6.32623104e-24 1258.93 5.04855961e-24 1584.89 4.03326889e-24 1995.26 3.22705296e-24 2511.89 2.58662889e-24 3162.28 2.07792225e-24 3981.07 1.67391844e-24 5011.87 1.35303424e-24 6309.57 1.09809441e-24 7943.28 8.9548690742289e-25 10000 7.3462041e-25 12589.25 6.0683959780081e-25 15848.93 5.0533971125625e-25 19952.62 4.24715496804e-25 25118.86 3.6067339460881e-25 31622.78 3.0980289208036e-25 39810.72 2.6939504747584e-25 50118.72 2.3729797512976e-25 63095.73 2.1180235635601e-25 79432.82 1.9155038962609e-25 100000 1.75463805456e-25 125892.54 1.6268565631761e-25 158489.32 1.5253570758724e-25 199526.23 1.4447327329296e-25 251188.64 1.3806909535225e-25 316227.77 1.32982020889e-25 398107.17 1.2894124723921e-25 501187.23 1.2573151506496e-25 630957.34 1.2318197653441e-25 794328.23 1.2115676254564e-25 1000000 1.1954811050329e-25 1258930 1.1827030512025e-25 1584890 1.1725529153536e-25 1995260 1.1644903726369e-25 2511890 1.1580865006489e-25 3162280 1.1529990701056e-25 3981070 1.1489584757641e-25 5011870 1.1457487081881e-25 6309570 1.1431992741129e-25 7943280 1.1411742028129e-25 10000000 1.1395654305025e-25 12589250 1.1382877317904e-25 15848930 1.1372724288409e-25 19952620 1.1364665807104e-25 25118860 1.1358261520804e-25 31622780 1.1353173085809e-25 39810720 1.1349130109409e-25 50118720 1.1345923193641e-25 63095730 1.1343370112064e-25 79432820 1.1341349406864e-25 100000000 1.1339739707209e-25 100.00000 2.4621930278401e-19 125.89254 1.9558055157601e-19 158.48932 1.5535674507024e-19 199.52623 1.2340585848889e-19 251.18864 9.802641260889e-20 316.22777 7.786672592521e-20 398.10717 6.185333143089e-20 501.18723 4.913346592449e-20 630.95734 3.902971652836e-20 794.32823 3.100399032025e-20 1000 2.462897087044e-20 1258.93 1.956509955009e-20 1584.89 1.554270863616e-20 1995.26 1.234760995204e-20 2511.89 9.80967431844e-21 3162.28 7.79369386761e-21 3981.07 6.19236791056e-21 5011.87 4.92037714116e-21 6309.57 3.9100009e-21 7943.28 3.10742698249e-21 10000 2.46992102289e-21 12589.25 1.96353561924e-21 15848.93 1.56130087689e-21 19952.62 1.241787121e-21 25118.86 9.8799576976e-22 31622.78 7.8639863184e-22 39810.72 6.2626564009e-22 50118.72 4.9906666404e-22 63095.73 3.9803043049e-22 79432.82 3.1777340644e-22 100000 2.54019844e-22 125892.54 2.0338182544e-22 158489.32 1.6315974756e-22 199526.23 1.3120786116e-22 251188.64 1.0582854129e-22 316227.77 8.566798249e-23 398107.17 6.9655716e-23 501187.23 5.693607936e-23 630957.34 4.683212356e-23 794328.23 3.880542436e-23 1000000 3.243074704e-23 1258930 2.736649969e-23 1584890 2.334435856e-23 1995260 2.014932544e-23 2511890 1.761145156e-23 3162280 1.559539081e-23 3981070 1.399433281e-23 5011870 1.272206224e-23 6309570 1.171213729e-23 7943280 1.090914841e-23 10000000 1.0272025e-23 12589250 9.765625e-24 15848930 9.36298801e-24 19952620 9.04385329e-24 25118860 8.79003904e-24 31622780 8.58841636e-24 39810720 8.42798961e-24 50118720 8.30073721e-24 63095730 8.20020496e-24 79432820 8.11965025e-24 100000000 8.05594689e-24 100.00000 8.0659780004241e-19 125.89254 6.4070691509889e-19 158.48932 5.0893499425024e-19 199.52623 4.0426503777856e-19 251.18864 3.2112259565824e-19 316.22777 2.5508024999209e-19 398.10717 2.0262097806336e-19 501.18723 1.60951008969e-19 630.95734 1.2785144199424e-19 794.32823 1.0155955559281e-19 1000 8.067508592896e-20 1258.93 6.408603636484e-20 1584.89 5.090885177401e-20 1995.26 4.044181330225e-20 2511.89 3.212758701889e-20 3162.28 2.552335345609e-20 3981.07 2.027741824144e-20 5011.87 1.611043794361e-20 6309.57 1.280047857664e-20 7943.28 1.017128726784e-20 10000 8.08283710116e-21 12589.25 6.42392632036e-21 15848.93 5.10621718084e-21 19952.62 4.05951202449e-21 25118.86 3.22809194569e-21 31622.78 2.56766171841e-21 39810.72 2.04307616016e-21 50118.72 1.62637178089e-21 63095.73 1.29538087396e-21 79432.82 1.03245899761e-21 100000 8.2361538169e-22 125892.54 6.5772244521e-22 158489.32 5.2595459569e-22 199526.23 4.2128383504e-22 251188.64 3.3814060996e-22 316227.77 2.7209822116e-22 398107.17 2.1963832804e-22 501187.23 1.7796894025e-22 630957.34 1.4486770321e-22 794328.23 1.1857685449e-22 1000000 9.769147921e-23 1258930 8.110263249e-23 1584890 6.792561889e-23 1995260 5.745943204e-23 2511890 4.914430609e-23 3162280 4.254039729e-23 3981070 3.729422761e-23 5011870 3.312808249e-23 6309570 2.981815236e-23 7943280 2.718892449e-23 10000000 2.51001e-23 12589250 2.344109056e-23 15848930 2.212385296e-23 19952620 2.1077281e-23 25118860 2.024550025e-23 31622780 1.958505025e-23 39810720 1.906020964e-23 50118720 1.864339684e-23 63095730 1.831240849e-23 79432820 1.804975225e-23 100000000 1.784133121e-23 100.00000 1.23143409e-18 125.89254 9.7816748355225e-19 158.48932 7.7699077125264e-19 199.52623 6.1719045685609e-19 251.18864 4.9025651356224e-19 316.22777 3.8942941623184e-19 398.10717 3.0933941825241e-19 501.18723 2.4572176163089e-19 630.95734 1.9518847704196e-19 794.32823 1.55048512644e-19 1000 1.2316414775625e-19 1258.93 9.783745898404e-20 1584.89 7.771979381929e-20 1995.26 6.173977593001e-20 2511.89 4.904639188164e-20 3162.28 3.896364114241e-20 3981.07 3.095467247236e-20 5011.87 2.459288876944e-20 6309.57 1.9539566656e-20 7943.28 1.552555872256e-20 10000 1.233712247076e-20 12589.25 9.80446530625e-21 15848.93 7.79270514169e-21 19952.62 6.19469740096e-21 25118.86 4.92535872481e-21 31622.78 3.91708249956e-21 39810.72 3.11618499984e-21 50118.72 2.48001012009e-21 63095.73 1.97467363129e-21 79432.82 1.57327256025e-21 100000 1.254434724e-21 125892.54 1.00116553744e-21 158489.32 7.9999031281e-22 199526.23 6.4018614361e-22 251188.64 5.1325355601e-22 316227.77 4.1242704889e-22 398107.17 3.3233654601e-22 501187.23 2.6872061329e-22 630957.34 2.1818539521e-22 794328.23 1.7804632356e-22 1000000 1.4616326404e-22 1258930 1.2083505625e-22 1584890 1.0071728164e-22 1995260 8.473754809e-23 2511890 7.204444641e-23 3162280 6.196208656e-23 3981070 5.395196304e-23 5011870 4.759068196e-23 6309570 4.253778841e-23 7943280 3.852312489e-23 10000000 3.533470249e-23 12589250 3.280196529e-23 15848930 3.079029121e-23 19952620 2.9192409e-23 25118860 2.792382649e-23 31622780 2.6915344e-23 39810720 2.611414404e-23 50118720 2.547826576e-23 63095730 2.497300729e-23 79432820 2.457085761e-23 100000000 2.425267009e-23 100.00000 5.70425220225e-21 125.89254 4.53152463556e-21 158.48932 3.59998800001e-21 199.52623 2.86004622436e-21 251.18864 2.27229542596e-21 316.22777 1.80541709604e-21 398.10717 1.43456865049e-21 501.18723 1.13999419044e-21 630.95734 9.0600398001e-22 794.32823 7.2013869316e-22 1000 5.72501329e-22 1258.93 4.5522916321e-22 1584.89 3.6207620089e-22 1995.26 2.8807933441e-22 2511.89 2.2930439184e-22 3162.28 1.8261738496e-22 3981.07 1.4553285769e-22 5011.87 1.1607476644e-22 6309.57 9.267720361e-23 7943.28 7.409077776e-23 10000 5.932696576e-23 12589.25 4.759896064e-23 15848.93 3.828391876e-23 19952.62 3.088469476e-23 25118.86 2.500700049e-23 31622.78 2.033829604e-23 39810.72 1.662926841e-23 50118.72 1.368408064e-23 63095.73 1.134409761e-23 79432.82 9.48516804e-24 100000 8.0089e-24 125892.54 6.83613316e-24 158489.32 5.90441401e-24 199526.23 5.16471076e-24 251188.64 4.57703236e-24 316227.77 4.10994529e-24 398107.17 3.73919569e-24 501187.23 3.444736e-24 630957.34 3.21054724e-24 794328.23 3.02481664e-24 1000000 2.87709444e-24 1258930 2.75991769e-24 1584890 2.666689e-24 1995260 2.59274404e-24 2511890 2.53382724e-24 3162280 2.48724441e-24 3981070 2.45016409e-24 5011870 2.42082481e-24 6309570 2.39723289e-24 7943280 2.37868929e-24 10000000 2.36390625e-24 12589250 2.35223569e-24 15848930 2.34304249e-24 19952620 2.33539524e-24 25118860 2.32959169e-24 31622780 2.32501504e-24 39810720 2.32135696e-24 50118720 2.31831076e-24 63095730 2.31587524e-24 79432820 2.31404944e-24 100000000 2.31252849e-24 100.00000 1.3005991129924e-19 125.89254 1.03312744929e-19 158.48932 8.206672243441e-20 199.52623 6.519039604081e-20 251.18864 5.178510101956e-20 316.22777 4.113684481284e-20 398.10717 3.267866060176e-20 501.18723 2.596007331369e-20 630.95734 2.062331510724e-20 794.32823 1.638417920049e-20 1000 1.301689319056e-20 1258.93 1.034217811225e-20 1584.89 8.21758567081e-21 1995.26 6.52994902561e-21 2511.89 5.18941581376e-21 3162.28 4.124593729e-21 3981.07 3.27877631236e-21 5011.87 2.60690915241e-21 6309.57 2.07323587584e-21 7943.28 1.64932642161e-21 10000 1.31259840804e-21 12589.25 1.04512544656e-21 15848.93 8.3266296481e-22 19952.62 6.6390221569e-22 25118.86 5.2984673856e-22 31622.78 4.2336766081e-22 39810.72 3.3878451721e-22 50118.72 2.7159699204e-22 63095.73 2.1822971076e-22 79432.82 1.7583820816e-22 100000 1.4216746756e-22 125892.54 1.1542064356e-22 158489.32 9.417343849e-23 199526.23 7.729750561e-23 251188.64 6.389124624e-23 316227.77 5.324329024e-23 398107.17 4.478554084e-23 501187.23 3.806643204e-23 630957.34 3.2729841e-23 794328.23 2.849104129e-23 1000000 2.512415376e-23 1258930 2.2448644e-23 1584890 2.032476889e-23 1995260 1.8636489e-23 2511890 1.729644921e-23 3162280 1.623122944e-23 3981070 1.538600625e-23 5011870 1.471412881e-23 6309570 1.418049649e-23 7943280 1.375593921e-23 10000000 1.341976689e-23 12589250 1.315222756e-23 15848930 1.293984784e-23 19952620 1.277061696e-23 25118860 1.263660304e-23 31622780 1.253018404e-23 39810720 1.244537284e-23 50118720 1.237843489e-23 63095730 1.232501449e-23 79432820 1.228292209e-23 100000000 1.224930001e-23 100.00000 3.6037149579025e-19 125.89254 2.8625763593025e-19 158.48932 2.2738697157121e-19 199.52623 1.8062432000064e-19 251.18864 1.4347943985424e-19 316.22777 1.1397416512036e-19 398.10717 9.053731959364e-20 501.18723 7.192078058025e-20 630.95734 5.713314184516e-20 794.32823 4.5386893764e-20 1000 3.605654108736e-20 1258.93 2.864515630144e-20 1584.89 2.275807582084e-20 1995.26 1.808183127969e-20 2511.89 1.436733055044e-20 3162.28 1.141681565025e-20 3981.07 9.07311495841e-21 5011.87 7.21147433616e-21 6309.57 5.73270065316e-21 7943.28 4.55807268225e-21 10000 3.62503938889e-21 12589.25 2.883904804e-21 15848.93 2.29519562724e-21 19952.62 1.82757105001e-21 25118.86 1.45611691281e-21 31622.78 1.16106473536e-21 39810.72 9.2669709889e-22 50118.72 7.4053104129e-22 63095.73 5.9265468025e-22 79432.82 4.75196401e-22 100000 3.81889764e-22 125892.54 3.0777790096e-22 158489.32 2.4890741824e-22 199526.23 2.0214299329e-22 251188.64 1.6499916304e-22 316227.77 1.3549425604e-22 398107.17 1.1205704449e-22 501187.23 9.343928896e-23 630957.34 7.865206596e-23 794328.23 6.690585616e-23 1000000 5.757622641e-23 1258930 5.016463929e-23 1584890 4.427704681e-23 1995260 3.960059041e-23 2511890 3.588609025e-23 3162280 3.2936121e-23 3981070 3.0591961e-23 5011870 2.873067201e-23 6309570 2.725153209e-23 7943280 2.607736356e-23 10000000 2.514420736e-23 12589250 2.44036e-23 15848930 2.38144e-23 19952620 2.334725761e-23 25118860 2.297572489e-23 31622780 2.268045376e-23 39810720 2.244580129e-23 50118720 2.2259524e-23 63095730 2.211162529e-23 79432820 2.199422404e-23 100000000 2.190146401e-23 100.00000 5.53534512001e-19 125.89254 4.3969378545481e-19 158.48932 3.4926693434161e-19 199.52623 2.7743838286564e-19 251.18864 2.2038283305025e-19 316.22777 1.7506207457764e-19 398.10717 1.3906246475664e-19 501.18723 1.1046702500964e-19 630.95734 8.7752805361e-20 794.32823 6.9710256729e-20 1000 5.537856160225e-20 1258.93 4.399451715169e-20 1584.89 3.495183550681e-20 1995.26 2.776895625604e-20 2511.89 2.206341861376e-20 3162.28 1.7531348836e-20 3981.07 1.393138777969e-20 5011.87 1.107183763984e-20 6309.57 8.80040991025e-21 7943.28 6.99616817761e-21 10000 5.56299681025e-21 12589.25 4.42459110976e-21 15848.93 3.52032182329e-21 19952.62 2.80202952964e-21 25118.86 2.23147588225e-21 31622.78 1.77827516416e-21 39810.72 1.4182756e-21 50118.72 1.1323225e-21 63095.73 9.0517943044e-22 79432.82 7.2475639369e-22 100000 5.81436769e-22 125892.54 4.67597376e-22 158489.32 3.7717135681e-22 199526.23 3.05340676e-22 251188.64 2.4828620041e-22 316227.77 2.0296561156e-22 398107.17 1.6696516225e-22 501187.23 1.3837052161e-22 630957.34 1.1565496849e-22 794328.23 9.761242401e-23 1000000 8.328205081e-23 1258930 7.189683264e-23 1584890 6.285476961e-23 1995260 5.567099769e-23 2511890 4.996651969e-23 3162280 4.543434025e-23 3981070 4.183373041e-23 5011870 3.8975049e-23 6309570 3.670299889e-23 7943280 3.489855625e-23 10000000 3.3466225e-23 12589250 3.232718449e-23 15848930 3.142275136e-23 19952620 3.070489744e-23 25118860 3.013461025e-23 31622780 2.9680704e-23 39810720 2.932114201e-23 50118720 2.903485456e-23 63095730 2.880790929e-23 79432820 2.862785025e-23 100000000 2.848463641e-23 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_gidl_st.standard0000644000175000017500000000663214163340332025355 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -1.1246e-09 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 -4.086657e-10 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 -1.154151e-10 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 -2.28304e-11 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 -2.6695e-12 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 -1.371662e-13 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 -1.7541e-15 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 -6.9255e-09 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 -3.6848e-09 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 -1.735e-09 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.23976e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26082e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.000123763 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391912 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 -1.1219e-09 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 -4.07428e-10 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 -1.149736e-10 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 -2.2717e-11 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 -2.6516e-12 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 -1.35865e-13 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 -1.7288e-15 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 -6.9147e-09 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 -3.678e-09 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 -1.7312e-09 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 -1.296871e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79729e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744511 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960642 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 -1.129e-09 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 -4.106489e-10 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 -1.161231e-10 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 -2.30127e-11 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 -2.6983e-12 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 -1.392679e-13 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 -1.7951e-15 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 -6.9428e-09 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 -3.6957e-09 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 -1.6413e-09 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.129925e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.16088e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.18179e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.35261e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_core_sw.standard0000644000175000017500000001420414163340332025167 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 1.1066e-06 0. 0. -1.1066e-06 0.2 1.3059e-06 0. 0. -1.3059e-06 0.3 1.4918e-06 0. 0. -1.4918e-06 0.4 1.6791e-06 0. 0. -1.6791e-06 0.5 1.8726e-06 0. 0. -1.8726e-06 0.6 2.0751e-06 0. 0. -2.0751e-06 0.7 2.2881e-06 0. 0. -2.2881e-06 0.8 2.5129e-06 0. 0. -2.5129e-06 0.9 2.7507e-06 0. 0. -2.7507e-06 1.00000 3.0023e-06 0. 0. -3.0023e-06 1.10000 3.2687e-06 0. 0. -3.2687e-06 1.20000 3.5506e-06 0. 0. -3.5506e-06 0. 0. 0. 0. 0. 0.1 1.96197e-05 0. 0. -1.96197e-05 0.2 2.28027e-05 0. 0. -2.28027e-05 0.3 2.55944e-05 0. 0. -2.55944e-05 0.4 2.82913e-05 0. 0. -2.82913e-05 0.5 3.09827e-05 0. 0. -3.09827e-05 0.6 3.37111e-05 0. 0. -3.37111e-05 0.7 3.65005e-05 0. 0. -3.65005e-05 0.8 3.93663e-05 0. 0. -3.93663e-05 0.9 4.23187e-05 0. 0. -4.23187e-05 1.00000 4.53658e-05 0. 0. -4.53658e-05 1.10000 4.85133e-05 0. 0. -4.85133e-05 1.20000 5.17664e-05 0. 0. -5.17664e-05 0. 0. 0. 0. 0. 0.1 0.0008561601 0. 0. -0.0008561601 0.2 0.0010642 0. 0. -0.0010642 0.3 0.0011496 0. 0. -0.0011496 0.4 0.0012158 0. 0. -0.0012158 0.5 0.0012729 0. 0. -0.0012729 0.6 0.0013244 0. 0. -0.0013244 0.7 0.0013722 0. 0. -0.0013722 0.8 0.0014174 0. 0. -0.0014174 0.9 0.0014606 0. 0. -0.0014606 1.00000 0.0015024 0. 0. -0.0015024 1.10000 0.0015431 0. 0. -0.0015431 1.20000 0.0015828 0. 0. -0.0015828 0. 0. 0. 0. 0. 0.1 0.0021732 0. 0. -0.0021732 0.2 0.0032916 0. 0. -0.0032916 0.3 0.0036511 0. 0. -0.0036511 0.4 0.0038547 0. 0. -0.0038547 0.5 0.0040113 0. 0. -0.0040113 0.6 0.0041431 0. 0. -0.0041431 0.7 0.0042588 0. 0. -0.0042588 0.8 0.0043633 0. 0. -0.0043633 0.9 0.0044593 0. 0. -0.0044593 1.00000 0.0045489 0. 0. -0.0045489 1.10000 0.0046334 0. 0. -0.0046334 1.20000 0.0047137 0. 0. -0.0047137 0. 0. 0. 0. 0. 0.1 0.0031267 0. 0. -0.0031267 0.2 0.005291 0. 0. -0.005291 0.3 0.0062516 0. 0. -0.0062516 0.4 0.0066825 0. 0. -0.0066825 0.5 0.0069694 0. 0. -0.0069694 0.6 0.0071968 0. 0. -0.0071968 0.7 0.0073895 0. 0. -0.0073895 0.8 0.0075589 0. 0. -0.0075589 0.9 0.0077111 0. 0. -0.0077111 1.00000 0.0078504 0. 0. -0.0078504 1.10000 0.0079793 0. 0. -0.0079793 1.20000 0.0080999 0. 0. -0.0080999 0. 0. 0. 0. 0. 0.1 5.87377e-08 0. 0. -5.87377e-08 0.2 7.17946e-08 0. 0. -7.17946e-08 0.3 8.51354e-08 0. 0. -8.51354e-08 0.4 9.94247e-08 0. 0. -9.94247e-08 0.5 1.149723e-07 0. 0. -1.149723e-07 0.6 1.319959e-07 0. 0. -1.319959e-07 0.7 1.506828e-07 0. 0. -1.506828e-07 0.8 1.712112e-07 0. 0. -1.712112e-07 0.9 1.937593e-07 0. 0. -1.937593e-07 1.00000 2.185106e-07 0. 0. -2.185106e-07 1.10000 2.456562e-07 0. 0. -2.456562e-07 1.20000 2.753972e-07 0. 0. -2.753972e-07 0. 0. 0. 0. 0. 0.1 3.3262e-06 0. 0. -3.3262e-06 0.2 3.997e-06 0. 0. -3.997e-06 0.3 4.6509e-06 0. 0. -4.6509e-06 0.4 5.3265e-06 0. 0. -5.3265e-06 0.5 6.039e-06 0. 0. -6.039e-06 0.6 6.797e-06 0. 0. -6.797e-06 0.7 7.6065e-06 0. 0. -7.6065e-06 0.8 8.4726e-06 0. 0. -8.4726e-06 0.9 9.3996e-06 0. 0. -9.3996e-06 1.00000 1.03918e-05 0. 0. -1.03918e-05 1.10000 1.14531e-05 0. 0. -1.14531e-05 1.20000 1.25875e-05 0. 0. -1.25875e-05 0. 0. 0. 0. 0. 0.1 0.0009088165 0. 0. -0.0009088165 0.2 0.0010668 0. 0. -0.0010668 0.3 0.0011535 0. 0. -0.0011535 0.4 0.0012236 0. 0. -0.0012236 0.5 0.0012852 0. 0. -0.0012852 0.6 0.0013416 0. 0. -0.0013416 0.7 0.0013946 0. 0. -0.0013946 0.8 0.0014451 0. 0. -0.0014451 0.9 0.001494 0. 0. -0.001494 1.00000 0.0015415 0. 0. -0.0015415 1.10000 0.0015881 0. 0. -0.0015881 1.20000 0.0016338 0. 0. -0.0016338 0. 0. 0. 0. 0. 0.1 0.002643 0. 0. -0.002643 0.2 0.003789 0. 0. -0.003789 0.3 0.0041277 0. 0. -0.0041277 0.4 0.0043509 0. 0. -0.0043509 0.5 0.0045281 0. 0. -0.0045281 0.6 0.0046784 0. 0. -0.0046784 0.7 0.004811 0. 0. -0.004811 0.8 0.0049311 0. 0. -0.0049311 0.9 0.005042 0. 0. -0.005042 1.00000 0.0051457 0. 0. -0.0051457 1.10000 0.0052438 0. 0. -0.0052438 1.20000 0.0053373 0. 0. -0.0053373 0. 0. 0. 0. 0. 0.1 0.0038738 0. 0. -0.0038738 0.2 0.0063358 0. 0. -0.0063358 0.3 0.0072589 0. 0. -0.0072589 0.4 0.0077008 0. 0. -0.0077008 0.5 0.0080221 0. 0. -0.0080221 0.6 0.008283 0. 0. -0.008283 0.7 0.0085056 0. 0. -0.0085056 0.8 0.0087016 0. 0. -0.0087016 0.9 0.0088782 0. 0. -0.0088782 1.00000 0.0090398 0. 0. -0.0090398 1.10000 0.0091897 0. 0. -0.0091897 1.20000 0.00933 0. 0. -0.00933 0. 0. 0. 0. 0. 0.1 1.70489e-05 0. 0. -1.70489e-05 0.2 2.01992e-05 0. 0. -2.01992e-05 0.3 2.24245e-05 0. 0. -2.24245e-05 0.4 2.44308e-05 0. 0. -2.44308e-05 0.5 2.63571e-05 0. 0. -2.63571e-05 0.6 2.82569e-05 0. 0. -2.82569e-05 0.7 3.01568e-05 0. 0. -3.01568e-05 0.8 3.20724e-05 0. 0. -3.20724e-05 0.9 3.40136e-05 0. 0. -3.40136e-05 1.00000 3.59873e-05 0. 0. -3.59873e-05 1.10000 3.79986e-05 0. 0. -3.79986e-05 1.20000 4.00511e-05 0. 0. -4.00511e-05 0. 0. 0. 0. 0. 0.1 9.41528e-05 0. 0. -9.41528e-05 0.2 0.0001124456 0. 0. -0.0001124456 0.3 0.0001235595 0. 0. -0.0001235595 0.4 0.0001328924 0. 0. -0.0001328924 0.5 0.0001414496 0. 0. -0.0001414496 0.6 0.0001495962 0. 0. -0.0001495962 0.7 0.0001575078 0. 0. -0.0001575078 0.8 0.0001652829 0. 0. -0.0001652829 0.9 0.0001729825 0. 0. -0.0001729825 1.00000 0.0001806471 0. 0. -0.0001806471 1.10000 0.0001883046 0. 0. -0.0001883046 1.20000 0.0001959754 0. 0. -0.0001959754 0. 0. 0. 0. 0. 0.1 0.0008170568 0. 0. -0.0008170568 0.2 0.0011221 0. 0. -0.0011221 0.3 0.0012557 0. 0. -0.0012557 0.4 0.0013404 0. 0. -0.0013404 0.5 0.0014055 0. 0. -0.0014055 0.6 0.0014603 0. 0. -0.0014603 0.7 0.001509 0. 0. -0.001509 0.8 0.0015535 0. 0. -0.0015535 0.9 0.0015951 0. 0. -0.0015951 1.00000 0.0016345 0. 0. -0.0016345 1.10000 0.0016722 0. 0. -0.0016722 1.20000 0.0017086 0. 0. -0.0017086 0. 0. 0. 0. 0. 0.1 0.0017283 0. 0. -0.0017283 0.2 0.0026825 0. 0. -0.0026825 0.3 0.0031469 0. 0. -0.0031469 0.4 0.0034153 0. 0. -0.0034153 0.5 0.0035993 0. 0. -0.0035993 0.6 0.0037405 0. 0. -0.0037405 0.7 0.003857 0. 0. -0.003857 0.8 0.0039576 0. 0. -0.0039576 0.9 0.0040473 0. 0. -0.0040473 1.00000 0.004129 0. 0. -0.004129 1.10000 0.0042047 0. 0. -0.0042047 1.20000 0.0042757 0. 0. -0.0042757 0. 0. 0. 0. 0. 0.1 0.002414 0. 0. -0.002414 0.2 0.004045 0. 0. -0.004045 0.3 0.004963 0. 0. -0.004963 0.4 0.0055043 0. 0. -0.0055043 0.5 0.0058626 0. 0. -0.0058626 0.6 0.0061247 0. 0. -0.0061247 0.7 0.0063312 0. 0. -0.0063312 0.8 0.0065027 0. 0. -0.0065027 0.9 0.0066506 0. 0. -0.0066506 1.00000 0.0067817 0. 0. -0.0067817 1.10000 0.0069001 0. 0. -0.0069001 1.20000 0.0070089 0. 0. -0.0070089 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_gidl_lw.standard0000644000175000017500000002046614163340332025156 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 2.908e-06 0. -6.94381e-11 -2.908e-06 0.2 3.1484e-06 0. -1.177964e-10 -3.1482e-06 0.3 3.3638e-06 0. -1.931827e-10 -3.3636e-06 0.4 3.5743e-06 0. -3.07473e-10 -3.574e-06 0.5 3.7812e-06 0. -4.762549e-10 -3.7807e-06 0.6 3.9855e-06 0. -7.196105e-10 -3.9848e-06 0.7 4.1877e-06 0. -1.0629e-09 -4.1866e-06 0.8 4.3881e-06 0. -1.5376e-09 -4.3866e-06 0.9 4.5872e-06 0. -2.182e-09 -4.585e-06 1.00000 4.785e-06 0. -3.0422e-09 -4.782e-06 1.10000 4.9818e-06 0. -4.1728e-09 -4.9777e-06 1.20000 5.1778e-06 0. -5.6376e-09 -5.1722e-06 0. 0. 0. 0. 0. 0.1 2.21864e-05 0. -3.95121e-11 -2.21863e-05 0.2 2.45998e-05 0. -6.95117e-11 -2.45997e-05 0.3 2.57916e-05 0. -1.178089e-10 -2.57915e-05 0.4 2.69211e-05 0. -1.931877e-10 -2.69209e-05 0.5 2.80091e-05 0. -3.074759e-10 -2.80088e-05 0.6 2.9065e-05 0. -4.762568e-10 -2.90646e-05 0.7 3.00948e-05 0. -7.19612e-10 -3.00941e-05 0.8 3.11025e-05 0. -1.0629e-09 -3.11014e-05 0.9 3.20912e-05 0. -1.5376e-09 -3.20897e-05 1.00000 3.30632e-05 0. -2.182e-09 -3.3061e-05 1.10000 3.40203e-05 0. -3.0422e-09 -3.40173e-05 1.20000 3.49639e-05 0. -4.1728e-09 -3.49598e-05 0. 0. 0. 0. 0. 0.1 0.0001453855 0. -8.0065e-12 -0.0001453855 0.2 0.0002285979 0. -1.57187e-11 -0.0002285978 0.3 0.0002570121 0. -2.94001e-11 -0.0002570121 0.4 0.0002666446 0. -5.26936e-11 -0.0002666445 0.5 0.0002737067 0. -9.08932e-11 -0.0002737066 0.6 0.0002800686 0. -1.514569e-10 -0.0002800685 0.7 0.0002860247 0. -2.44593e-10 -0.0002860244 0.8 0.000291677 0. -3.83916e-10 -0.0002916766 0.9 0.0002970829 0. -5.871623e-10 -0.0002970823 1.00000 0.0003022817 0. -8.769538e-10 -0.0003022809 1.10000 0.0003073033 0. -1.2816e-09 -0.000307302 1.20000 0.000312171 0. -1.8359e-09 -0.0003121692 0. 0. 0. 0. 0. 0.1 0.0002621886 0. -1.16e-12 -0.0002621886 0.2 0.0004737011 0. -2.6355e-12 -0.0004737011 0.3 0.0006246332 0. -5.6129e-12 -0.0006246332 0.4 0.000708233 0. -1.12965e-11 -0.000708233 0.5 0.0007455619 0. -2.16202e-11 -0.0007455618 0.6 0.0007664363 0. -3.95597e-11 -0.0007664362 0.7 0.0007824141 0. -6.9522e-11 -0.000782414 0.8 0.0007964116 0. -1.178139e-10 -0.0007964115 0.9 0.0008092838 0. -1.93191e-10 -0.0008092836 1.00000 0.0008213649 0. -3.074785e-10 -0.0008213646 1.10000 0.0008328253 0. -4.762591e-10 -0.0008328248 1.20000 0.0008437709 0. -7.196141e-10 -0.0008437702 0. 0. 0. 0. 0. 0.1 0.0003399254 0. -1.064596e-13 -0.0003399254 0.2 0.0006459126 0. -2.956104e-13 -0.0006459126 0.3 0.0009093975 0. -7.506849e-13 -0.0009093975 0.4 0.0011189 0. -1.7645e-12 -0.0011189 0.5 0.0012632 0. -3.8754e-12 -0.0012632 0.6 0.0013474 0. -8.0161e-12 -0.0013474 0.7 0.0013955 0. -1.57211e-11 -0.0013955 0.8 0.0014279 0. -2.94013e-11 -0.0014279 0.9 0.0014535 0. -5.26945e-11 -0.0014535 1.00000 0.0014758 0. -9.0894e-11 -0.0014758 1.10000 0.001496 0. -1.514576e-10 -0.001496 1.20000 0.0015149 0. -2.445937e-10 -0.0015149 0. 0. 0. 0. 0. 0.1 4.004454e-07 0. -6.90311e-11 -4.003764e-07 0.2 4.467391e-07 0. -1.171495e-10 -4.46622e-07 0.3 4.921899e-07 0. -1.921867e-10 -4.919977e-07 0.4 5.372671e-07 0. -3.059817e-10 -5.369611e-07 0.5 5.823018e-07 0. -4.740776e-10 -5.818278e-07 0.6 6.274743e-07 0. -7.16504e-10 -6.267578e-07 0.7 6.729017e-07 0. -1.0586e-09 -6.718431e-07 0.8 7.186718e-07 0. -1.5316e-09 -7.171402e-07 0.9 7.648595e-07 0. -2.174e-09 -7.626855e-07 1.00000 8.115348e-07 0. -3.0316e-09 -8.085032e-07 1.10000 8.587684e-07 0. -4.159e-09 -8.546094e-07 1.20000 9.066349e-07 0. -5.6198e-09 -9.010151e-07 0. 0. 0. 0. 0. 0.1 1.21708e-05 0. -3.92643e-11 -1.21708e-05 0.2 1.31787e-05 0. -6.91042e-11 -1.31786e-05 0.3 1.40937e-05 0. -1.17162e-10 -1.40936e-05 0.4 1.49658e-05 0. -1.921917e-10 -1.49656e-05 0.5 1.58085e-05 0. -3.059845e-10 -1.58082e-05 0.6 1.66291e-05 0. -4.740795e-10 -1.66287e-05 0.7 1.74322e-05 0. -7.165055e-10 -1.74314e-05 0.8 1.82206e-05 0. -1.0586e-09 -1.82196e-05 0.9 1.89967e-05 0. -1.5316e-09 -1.89952e-05 1.00000 1.97618e-05 0. -2.174e-09 -1.97597e-05 1.10000 2.05172e-05 0. -3.0316e-09 -2.05142e-05 1.20000 2.12638e-05 0. -4.159e-09 -2.12596e-05 0. 0. 0. 0. 0. 0.1 0.0001913874 0. -7.9463e-12 -0.0001913874 0.2 0.0002859079 0. -1.56091e-11 -0.0002859078 0.3 0.0003084662 0. -2.92091e-11 -0.0003084662 0.4 0.000319693 0. -5.23742e-11 -0.000319693 0.5 0.00032948 0. -9.03777e-11 -0.0003294799 0.6 0.0003384555 0. -1.506512e-10 -0.0003384554 0.7 0.0003468282 0. -2.433702e-10 -0.000346828 0.8 0.0003547271 0. -3.821086e-10 -0.0003547267 0.9 0.0003622428 0. -5.845544e-10 -0.0003622422 1.00000 0.000369442 0. -8.732726e-10 -0.0003694411 1.10000 0.0003763754 0. -1.2765e-09 -0.0003763741 1.20000 0.0003830822 0. -1.829e-09 -0.0003830804 0. 0. 0. 0. 0. 0.1 0.000371198 0. -1.1493e-12 -0.000371198 0.2 0.0006646868 0. -2.6133e-12 -0.0006646868 0.3 0.0008635132 0. -5.5691e-12 -0.0008635132 0.4 0.0009552708 0. -1.12147e-11 -0.0009552708 0.5 0.0009931287 0. -2.14747e-11 -0.0009931286 0.6 0.0010195 0. -3.93116e-11 -0.0010195 0.7 0.0010423 0. -6.91144e-11 -0.0010423 0.8 0.001063 0. -1.17167e-10 -0.001063 0.9 0.0010822 0. -1.92195e-10 -0.0010822 1.00000 0.0011002 0. -3.059871e-10 -0.0011002 1.10000 0.0011173 0. -4.740817e-10 -0.0011173 1.20000 0.0011335 0. -7.165075e-10 -0.0011334 0. 0. 0. 0. 0. 0.1 0.0004862697 0. -1.052392e-13 -0.0004862697 0.2 0.0009220607 0. -2.925203e-13 -0.0009220607 0.3 0.0012934 0. -7.43499e-13 -0.0012934 0.4 0.0015815 0. -1.749e-12 -0.0015815 0.5 0.001762 0. -3.8439e-12 -0.001762 0.6 0.0018525 0. -7.9559e-12 -0.0018525 0.7 0.0019054 0. -1.56114e-11 -0.0019054 0.8 0.0019462 0. -2.92104e-11 -0.0019462 0.9 0.0019817 0. -5.23751e-11 -0.0019817 1.00000 0.002014 0. -9.03784e-11 -0.002014 1.10000 0.0020441 0. -1.506519e-10 -0.0020441 1.20000 0.0020723 0. -2.433709e-10 -0.0020723 0. 0. 0. 0. 0. 0.1 1.29531e-05 0. -7.00927e-11 -1.2953e-05 0.2 1.51979e-05 0. -1.188362e-10 -1.51978e-05 0.3 1.59496e-05 0. -1.94783e-10 -1.59494e-05 0.4 1.65519e-05 0. -3.098683e-10 -1.65515e-05 0.5 1.71252e-05 0. -4.797508e-10 -1.71247e-05 0.6 1.76848e-05 0. -7.24597e-10 -1.76841e-05 0.7 1.82341e-05 0. -1.0699e-09 -1.82331e-05 0.8 1.87746e-05 0. -1.5471e-09 -1.87731e-05 0.9 1.93072e-05 0. -2.1948e-09 -1.9305e-05 1.00000 1.98328e-05 0. -3.0592e-09 -1.98297e-05 1.10000 2.03519e-05 0. -4.195e-09 -2.03477e-05 1.20000 2.0865e-05 0. -5.6662e-09 -2.08593e-05 0. 0. 0. 0. 0. 0.1 3.46297e-05 0. -3.99109e-11 -3.46297e-05 0.2 4.48811e-05 0. -7.0167e-11 -4.48811e-05 0.3 4.77768e-05 0. -1.188489e-10 -4.77767e-05 0.4 4.943e-05 0. -1.94788e-10 -4.94298e-05 0.5 5.08292e-05 0. -3.098712e-10 -5.08289e-05 0.6 5.21395e-05 0. -4.797528e-10 -5.21391e-05 0.7 5.34006e-05 0. -7.245985e-10 -5.33998e-05 0.8 5.46261e-05 0. -1.0699e-09 -5.4625e-05 0.9 5.58229e-05 0. -1.5471e-09 -5.58214e-05 1.00000 5.69952e-05 0. -2.1948e-09 -5.6993e-05 1.10000 5.81459e-05 0. -3.0592e-09 -5.81429e-05 1.20000 5.92773e-05 0. -4.195e-09 -5.92731e-05 0. 0. 0. 0. 0. 0.1 0.0001115452 0. -8.1034e-12 -0.0001115452 0.2 0.0001814103 0. -1.58953e-11 -0.0001814103 0.3 0.0002166603 0. -2.97074e-11 -0.0002166603 0.4 0.0002334928 0. -5.32075e-11 -0.0002334927 0.5 0.0002428358 0. -9.17222e-11 -0.0002428357 0.6 0.0002492745 0. -1.527517e-10 -0.0002492744 0.7 0.0002544663 0. -2.465574e-10 -0.0002544661 0.8 0.0002590299 0. -3.868185e-10 -0.0002590295 0.9 0.0002632227 0. -5.913489e-10 -0.0002632221 1.00000 0.0002671665 0. -8.828618e-10 -0.0002671657 1.10000 0.0002709268 0. -1.2898e-09 -0.0002709255 1.20000 0.0002745425 0. -1.847e-09 -0.0002745406 0. 0. 0. 0. 0. 0.1 0.00018187 0. -1.1772e-12 -0.00018187 0.2 0.0003273736 0. -2.6715e-12 -0.0003273736 0.3 0.0004309573 0. -5.6835e-12 -0.0004309572 0.4 0.0004978271 0. -1.14282e-11 -0.0004978271 0.5 0.0005393901 0. -2.18544e-11 -0.0005393901 0.6 0.0005660478 0. -3.9959e-11 -0.0005660478 0.7 0.0005845145 0. -7.01774e-11 -0.0005845145 0.8 0.0005984805 0. -1.188539e-10 -0.0005984804 0.9 0.0006098652 0. -1.947914e-10 -0.000609865 1.00000 0.0006196721 0. -3.098738e-10 -0.0006196718 1.10000 0.0006284463 0. -4.79755e-10 -0.0006284458 1.20000 0.0006364997 0. -7.246005e-10 -0.000636499 0. 0. 0. 0. 0. 0.1 0.0002310894 0. -1.08436e-13 -0.0002310894 0.2 0.0004362641 0. -3.00608e-13 -0.0004362641 0.3 0.0006069483 0. -7.622938e-13 -0.0006069483 0.4 0.0007395328 0. -1.7896e-12 -0.0007395328 0.5 0.000837038 0. -3.9261e-12 -0.000837038 0.6 0.0009067542 0. -8.1132e-12 -0.0009067542 0.7 0.0009566999 0. -1.58977e-11 -0.0009566999 0.8 0.0009934484 0. -2.97086e-11 -0.0009934484 0.9 0.0010216 0. -5.32084e-11 -0.0010216 1.00000 0.0010442 0. -9.17229e-11 -0.0010442 1.10000 0.0010631 0. -1.527524e-10 -0.0010631 1.20000 0.0010794 0. -2.465581e-10 -0.0010794 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2g_lw.standard0000644000175000017500000004701714163340332025144 0ustar carstencarstenFreq N(g) 100.00000 8.1924750625e-28 125.89254 8.1924750625e-28 158.48932 8.1924750625e-28 199.52623 8.1924750625e-28 251.18864 8.1924750625e-28 316.22777 8.1924750625e-28 398.10717 8.1924750625e-28 501.18723 8.1924750625e-28 630.95734 8.1924750625e-28 794.32823 8.1924750625e-28 1000 8.1924750625e-28 1258.93 8.1924750625e-28 1584.89 8.1924750625e-28 1995.26 8.1924750625e-28 2511.89 8.1924750625e-28 3162.28 8.1924750625e-28 3981.07 8.1924750625e-28 5011.87 8.1924750625e-28 6309.57 8.1924750625e-28 7943.28 8.1924750625e-28 10000 8.1924750625e-28 12589.25 8.1924750625e-28 15848.93 8.1924750625e-28 19952.62 8.1924750625e-28 25118.86 8.1924750625e-28 31622.78 8.1924750625e-28 39810.72 8.1924750625e-28 50118.72 8.1924750625e-28 63095.73 8.1924750625e-28 79432.82 8.1924750625e-28 100000 8.1924750625e-28 125892.54 8.1924750625e-28 158489.32 8.1924750625e-28 199526.23 8.1924750625e-28 251188.64 8.1924750625e-28 316227.77 8.1924750625e-28 398107.17 8.1924750625e-28 501187.23 8.1924750625e-28 630957.34 8.1924750625e-28 794328.23 8.1924750625e-28 1000000 8.1924750625e-28 1258930 8.1924750625e-28 1584890 8.1924750625e-28 1995260 8.1924750625e-28 2511890 8.1924750625e-28 3162280 8.1924750625e-28 3981070 8.1924750625e-28 5011870 8.1924750625e-28 6309570 8.1924750625e-28 7943280 8.1924750625e-28 10000000 8.1924750625e-28 12589250 8.1924750625e-28 15848930 8.1924750625e-28 19952620 8.1924750625e-28 25118860 8.1924750625e-28 31622780 8.1924750625e-28 39810720 8.1924750625e-28 50118720 8.1924750625e-28 63095730 8.1924750625e-28 79432820 8.1924750625e-28 100000000 8.1924750625e-28 100.00000 1.236448369849e-26 125.89254 1.236448369849e-26 158.48932 1.236448369849e-26 199.52623 1.236448369849e-26 251.18864 1.236448369849e-26 316.22777 1.236448369849e-26 398.10717 1.236448369849e-26 501.18723 1.236448369849e-26 630.95734 1.236448369849e-26 794.32823 1.236448369849e-26 1000 1.236448369849e-26 1258.93 1.236448369849e-26 1584.89 1.236448369849e-26 1995.26 1.236448369849e-26 2511.89 1.236448369849e-26 3162.28 1.236448369849e-26 3981.07 1.236448369849e-26 5011.87 1.236448369849e-26 6309.57 1.236448369849e-26 7943.28 1.236448369849e-26 10000 1.236448369849e-26 12589.25 1.236448369849e-26 15848.93 1.236448369849e-26 19952.62 1.236448369849e-26 25118.86 1.236448369849e-26 31622.78 1.236448369849e-26 39810.72 1.236448369849e-26 50118.72 1.236448369849e-26 63095.73 1.236448369849e-26 79432.82 1.236448369849e-26 100000 1.236448369849e-26 125892.54 1.236448369849e-26 158489.32 1.236448369849e-26 199526.23 1.236448369849e-26 251188.64 1.236448369849e-26 316227.77 1.236448369849e-26 398107.17 1.236448369849e-26 501187.23 1.236448369849e-26 630957.34 1.236448369849e-26 794328.23 1.236448369849e-26 1000000 1.236448369849e-26 1258930 1.236448369849e-26 1584890 1.236448369849e-26 1995260 1.236448369849e-26 2511890 1.236448369849e-26 3162280 1.236448369849e-26 3981070 1.236448369849e-26 5011870 1.236448369849e-26 6309570 1.236448369849e-26 7943280 1.236448369849e-26 10000000 1.236448369849e-26 12589250 1.236448369849e-26 15848930 1.236448369849e-26 19952620 1.236448369849e-26 25118860 1.236448369849e-26 31622780 1.236448369849e-26 39810720 1.236448369849e-26 50118720 1.236448369849e-26 63095730 1.236448369849e-26 79432820 1.236448369849e-26 100000000 1.236448369849e-26 100.00000 5.1999961225e-26 125.89254 5.1999961225e-26 158.48932 5.1999961225e-26 199.52623 5.1999961225e-26 251.18864 5.1999961225e-26 316.22777 5.1999961225e-26 398.10717 5.1999961225e-26 501.18723 5.1999961225e-26 630.95734 5.1999961225e-26 794.32823 5.1999961225e-26 1000 5.1999961225e-26 1258.93 5.1999961225e-26 1584.89 5.1999961225e-26 1995.26 5.1999961225e-26 2511.89 5.1999961225e-26 3162.28 5.1999961225e-26 3981.07 5.1999961225e-26 5011.87 5.1999961225e-26 6309.57 5.1999961225e-26 7943.28 5.1999961225e-26 10000 5.1999961225e-26 12589.25 5.1999961225e-26 15848.93 5.1999961225e-26 19952.62 5.1999961225e-26 25118.86 5.1999961225e-26 31622.78 5.1999961225e-26 39810.72 5.1999961225e-26 50118.72 5.1999961225e-26 63095.73 5.1999961225e-26 79432.82 5.1999961225e-26 100000 5.1999961225e-26 125892.54 5.1999961225e-26 158489.32 5.1999961225e-26 199526.23 5.1999961225e-26 251188.64 5.1999961225e-26 316227.77 5.1999961225e-26 398107.17 5.1999961225e-26 501187.23 5.1999961225e-26 630957.34 5.1999961225e-26 794328.23 5.1999961225e-26 1000000 5.1999961225e-26 1258930 5.1999961225e-26 1584890 5.1999961225e-26 1995260 5.1999961225e-26 2511890 5.1999961225e-26 3162280 5.1999961225e-26 3981070 5.1999961225e-26 5011870 5.1999961225e-26 6309570 5.1999961225e-26 7943280 5.1999961225e-26 10000000 5.1999961225e-26 12589250 5.1999961225e-26 15848930 5.1999961225e-26 19952620 5.1999961225e-26 25118860 5.1999961225e-26 31622780 5.1999961225e-26 39810720 5.1999961225e-26 50118720 5.1999961225e-26 63095730 5.1999961225e-26 79432820 5.1999961225e-26 100000000 5.1999961225e-26 100.00000 1.5036541779204e-25 125.89254 1.5036541779204e-25 158.48932 1.5036541779204e-25 199.52623 1.5036541779204e-25 251.18864 1.5036541779204e-25 316.22777 1.5036541779204e-25 398.10717 1.5036541779204e-25 501.18723 1.5036541779204e-25 630.95734 1.5036541779204e-25 794.32823 1.5036541779204e-25 1000 1.5036541779204e-25 1258.93 1.5036541779204e-25 1584.89 1.5036541779204e-25 1995.26 1.5036541779204e-25 2511.89 1.5036541779204e-25 3162.28 1.5036541779204e-25 3981.07 1.5036541779204e-25 5011.87 1.5036541779204e-25 6309.57 1.5036541779204e-25 7943.28 1.5036541779204e-25 10000 1.5036541779204e-25 12589.25 1.5036541779204e-25 15848.93 1.5036541779204e-25 19952.62 1.5036541779204e-25 25118.86 1.5036541779204e-25 31622.78 1.5036541779204e-25 39810.72 1.5036541779204e-25 50118.72 1.5036541779204e-25 63095.73 1.5036541779204e-25 79432.82 1.5036541779204e-25 100000 1.5036541779204e-25 125892.54 1.5036541779204e-25 158489.32 1.5036541779204e-25 199526.23 1.5036541779204e-25 251188.64 1.5036541779204e-25 316227.77 1.5036541779204e-25 398107.17 1.5036541779204e-25 501187.23 1.5036541779204e-25 630957.34 1.5036541779204e-25 794328.23 1.5036541779204e-25 1000000 1.5036541779204e-25 1258930 1.5036541779204e-25 1584890 1.5036541779204e-25 1995260 1.5036541779204e-25 2511890 1.5036541779204e-25 3162280 1.5036541779204e-25 3981070 1.5036541779204e-25 5011870 1.5036541779204e-25 6309570 1.5036541779204e-25 7943280 1.5036541779204e-25 10000000 1.5036541779204e-25 12589250 1.5036541779204e-25 15848930 1.5036541779204e-25 19952620 1.5036541779204e-25 25118860 1.5036541779204e-25 31622780 1.5036541779204e-25 39810720 1.5036541779204e-25 50118720 1.5036541779204e-25 63095730 1.5036541779204e-25 79432820 1.5036541779204e-25 100000000 1.5036541779204e-25 100.00000 1.7518640164e-28 125.89254 1.7518640164e-28 158.48932 1.7518640164e-28 199.52623 1.7518640164e-28 251.18864 1.7518640164e-28 316.22777 1.7518640164e-28 398.10717 1.7518640164e-28 501.18723 1.7518640164e-28 630.95734 1.7518640164e-28 794.32823 1.7518640164e-28 1000 1.7518640164e-28 1258.93 1.7518640164e-28 1584.89 1.7518640164e-28 1995.26 1.7518640164e-28 2511.89 1.7518640164e-28 3162.28 1.7518640164e-28 3981.07 1.7518640164e-28 5011.87 1.7518640164e-28 6309.57 1.7518640164e-28 7943.28 1.7518640164e-28 10000 1.7518640164e-28 12589.25 1.7518640164e-28 15848.93 1.7518640164e-28 19952.62 1.7518640164e-28 25118.86 1.7518640164e-28 31622.78 1.7518640164e-28 39810.72 1.7518640164e-28 50118.72 1.7518640164e-28 63095.73 1.7518640164e-28 79432.82 1.7518640164e-28 100000 1.7518640164e-28 125892.54 1.7518640164e-28 158489.32 1.7518640164e-28 199526.23 1.7518640164e-28 251188.64 1.7518640164e-28 316227.77 1.7518640164e-28 398107.17 1.7518640164e-28 501187.23 1.7518640164e-28 630957.34 1.7518640164e-28 794328.23 1.7518640164e-28 1000000 1.7518640164e-28 1258930 1.7518640164e-28 1584890 1.7518640164e-28 1995260 1.7518640164e-28 2511890 1.7518640164e-28 3162280 1.7518640164e-28 3981070 1.7518640164e-28 5011870 1.7518640164e-28 6309570 1.7518640164e-28 7943280 1.7518640164e-28 10000000 1.7518640164e-28 12589250 1.7518640164e-28 15848930 1.7518640164e-28 19952620 1.7518640164e-28 25118860 1.7518640164e-28 31622780 1.7518640164e-28 39810720 1.7518640164e-28 50118720 1.7518640164e-28 63095730 1.7518640164e-28 79432820 1.7518640164e-28 100000000 1.7518640164e-28 100.00000 5.12489901456e-27 125.89254 5.12489901456e-27 158.48932 5.12489901456e-27 199.52623 5.12489901456e-27 251.18864 5.12489901456e-27 316.22777 5.12489901456e-27 398.10717 5.12489901456e-27 501.18723 5.12489901456e-27 630.95734 5.12489901456e-27 794.32823 5.12489901456e-27 1000 5.12489901456e-27 1258.93 5.12489901456e-27 1584.89 5.12489901456e-27 1995.26 5.12489901456e-27 2511.89 5.12489901456e-27 3162.28 5.12489901456e-27 3981.07 5.12489901456e-27 5011.87 5.12489901456e-27 6309.57 5.12489901456e-27 7943.28 5.12489901456e-27 10000 5.12489901456e-27 12589.25 5.12489901456e-27 15848.93 5.12489901456e-27 19952.62 5.12489901456e-27 25118.86 5.12489901456e-27 31622.78 5.12489901456e-27 39810.72 5.12489901456e-27 50118.72 5.12489901456e-27 63095.73 5.12489901456e-27 79432.82 5.12489901456e-27 100000 5.12489901456e-27 125892.54 5.12489901456e-27 158489.32 5.12489901456e-27 199526.23 5.12489901456e-27 251188.64 5.12489901456e-27 316227.77 5.12489901456e-27 398107.17 5.12489901456e-27 501187.23 5.12489901456e-27 630957.34 5.12489901456e-27 794328.23 5.12489901456e-27 1000000 5.12489901456e-27 1258930 5.12489901456e-27 1584890 5.12489901456e-27 1995260 5.12489901456e-27 2511890 5.12489901456e-27 3162280 5.12489901456e-27 3981070 5.12489901456e-27 5011870 5.12489901456e-27 6309570 5.12489901456e-27 7943280 5.12489901456e-27 10000000 5.12489901456e-27 12589250 5.12489901456e-27 15848930 5.12489901456e-27 19952620 5.12489901456e-27 25118860 5.12489901456e-27 31622780 5.12489901456e-27 39810720 5.12489901456e-27 50118720 5.12489901456e-27 63095730 5.12489901456e-27 79432820 5.12489901456e-27 100000000 5.12489901456e-27 100.00000 2.3358231556e-26 125.89254 2.3358231556e-26 158.48932 2.3358231556e-26 199.52623 2.3358231556e-26 251.18864 2.3358231556e-26 316.22777 2.3358231556e-26 398.10717 2.3358231556e-26 501.18723 2.3358231556e-26 630.95734 2.3358231556e-26 794.32823 2.3358231556e-26 1000 2.3358231556e-26 1258.93 2.3358231556e-26 1584.89 2.3358231556e-26 1995.26 2.3358231556e-26 2511.89 2.3358231556e-26 3162.28 2.3358231556e-26 3981.07 2.3358231556e-26 5011.87 2.3358231556e-26 6309.57 2.3358231556e-26 7943.28 2.3358231556e-26 10000 2.3358231556e-26 12589.25 2.3358231556e-26 15848.93 2.3358231556e-26 19952.62 2.3358231556e-26 25118.86 2.3358231556e-26 31622.78 2.3358231556e-26 39810.72 2.3358231556e-26 50118.72 2.3358231556e-26 63095.73 2.3358231556e-26 79432.82 2.3358231556e-26 100000 2.3358231556e-26 125892.54 2.3358231556e-26 158489.32 2.3358231556e-26 199526.23 2.3358231556e-26 251188.64 2.3358231556e-26 316227.77 2.3358231556e-26 398107.17 2.3358231556e-26 501187.23 2.3358231556e-26 630957.34 2.3358231556e-26 794328.23 2.3358231556e-26 1000000 2.3358231556e-26 1258930 2.3358231556e-26 1584890 2.3358231556e-26 1995260 2.3358231556e-26 2511890 2.3358231556e-26 3162280 2.3358231556e-26 3981070 2.3358231556e-26 5011870 2.3358231556e-26 6309570 2.3358231556e-26 7943280 2.3358231556e-26 10000000 2.3358231556e-26 12589250 2.3358231556e-26 15848930 2.3358231556e-26 19952620 2.3358231556e-26 25118860 2.3358231556e-26 31622780 2.3358231556e-26 39810720 2.3358231556e-26 50118720 2.3358231556e-26 63095730 2.3358231556e-26 79432820 2.3358231556e-26 100000000 2.3358231556e-26 100.00000 6.943441071681e-26 125.89254 6.943441071681e-26 158.48932 6.943441071681e-26 199.52623 6.943441071681e-26 251.18864 6.943441071681e-26 316.22777 6.943441071681e-26 398.10717 6.943441071681e-26 501.18723 6.943441071681e-26 630.95734 6.943441071681e-26 794.32823 6.943441071681e-26 1000 6.943441071681e-26 1258.93 6.943441071681e-26 1584.89 6.943441071681e-26 1995.26 6.943441071681e-26 2511.89 6.943441071681e-26 3162.28 6.943441071681e-26 3981.07 6.943441071681e-26 5011.87 6.943441071681e-26 6309.57 6.943441071681e-26 7943.28 6.943441071681e-26 10000 6.943441071681e-26 12589.25 6.943441071681e-26 15848.93 6.943441071681e-26 19952.62 6.943441071681e-26 25118.86 6.943441071681e-26 31622.78 6.943441071681e-26 39810.72 6.943441071681e-26 50118.72 6.943441071681e-26 63095.73 6.943441071681e-26 79432.82 6.943441071681e-26 100000 6.943441071681e-26 125892.54 6.943441071681e-26 158489.32 6.943441071681e-26 199526.23 6.943441071681e-26 251188.64 6.943441071681e-26 316227.77 6.943441071681e-26 398107.17 6.943441071681e-26 501187.23 6.943441071681e-26 630957.34 6.943441071681e-26 794328.23 6.943441071681e-26 1000000 6.943441071681e-26 1258930 6.943441071681e-26 1584890 6.943441071681e-26 1995260 6.943441071681e-26 2511890 6.943441071681e-26 3162280 6.943441071681e-26 3981070 6.943441071681e-26 5011870 6.943441071681e-26 6309570 6.943441071681e-26 7943280 6.943441071681e-26 10000000 6.943441071681e-26 12589250 6.943441071681e-26 15848930 6.943441071681e-26 19952620 6.943441071681e-26 25118860 6.943441071681e-26 31622780 6.943441071681e-26 39810720 6.943441071681e-26 50118720 6.943441071681e-26 63095730 6.943441071681e-26 79432820 6.943441071681e-26 100000000 6.943441071681e-26 100.00000 4.41811466721e-27 125.89254 4.41811466721e-27 158.48932 4.41811466721e-27 199.52623 4.41811466721e-27 251.18864 4.41811466721e-27 316.22777 4.41811466721e-27 398.10717 4.41811466721e-27 501.18723 4.41811466721e-27 630.95734 4.41811466721e-27 794.32823 4.41811466721e-27 1000 4.41811466721e-27 1258.93 4.41811466721e-27 1584.89 4.41811466721e-27 1995.26 4.41811466721e-27 2511.89 4.41811466721e-27 3162.28 4.41811466721e-27 3981.07 4.41811466721e-27 5011.87 4.41811466721e-27 6309.57 4.41811466721e-27 7943.28 4.41811466721e-27 10000 4.41811466721e-27 12589.25 4.41811466721e-27 15848.93 4.41811466721e-27 19952.62 4.41811466721e-27 25118.86 4.41811466721e-27 31622.78 4.41811466721e-27 39810.72 4.41811466721e-27 50118.72 4.41811466721e-27 63095.73 4.41811466721e-27 79432.82 4.41811466721e-27 100000 4.41811466721e-27 125892.54 4.41811466721e-27 158489.32 4.41811466721e-27 199526.23 4.41811466721e-27 251188.64 4.41811466721e-27 316227.77 4.41811466721e-27 398107.17 4.41811466721e-27 501187.23 4.41811466721e-27 630957.34 4.41811466721e-27 794328.23 4.41811466721e-27 1000000 4.41811466721e-27 1258930 4.41811466721e-27 1584890 4.41811466721e-27 1995260 4.41811466721e-27 2511890 4.41811466721e-27 3162280 4.41811466721e-27 3981070 4.41811466721e-27 5011870 4.41811466721e-27 6309570 4.41811466721e-27 7943280 4.41811466721e-27 10000000 4.41811466721e-27 12589250 4.41811466721e-27 15848930 4.41811466721e-27 19952620 4.41811466721e-27 25118860 4.41811466721e-27 31622780 4.41811466721e-27 39810720 4.41811466721e-27 50118720 4.41811466721e-27 63095730 4.41811466721e-27 79432820 4.41811466721e-27 100000000 4.41811466721e-27 100.00000 3.751322069889e-26 125.89254 3.751322069889e-26 158.48932 3.751322069889e-26 199.52623 3.751322069889e-26 251.18864 3.751322069889e-26 316.22777 3.751322069889e-26 398.10717 3.751322069889e-26 501.18723 3.751322069889e-26 630.95734 3.751322069889e-26 794.32823 3.751322069889e-26 1000 3.751322069889e-26 1258.93 3.751322069889e-26 1584.89 3.751322069889e-26 1995.26 3.751322069889e-26 2511.89 3.751322069889e-26 3162.28 3.751322069889e-26 3981.07 3.751322069889e-26 5011.87 3.751322069889e-26 6309.57 3.751322069889e-26 7943.28 3.751322069889e-26 10000 3.751322069889e-26 12589.25 3.751322069889e-26 15848.93 3.751322069889e-26 19952.62 3.751322069889e-26 25118.86 3.751322069889e-26 31622.78 3.751322069889e-26 39810.72 3.751322069889e-26 50118.72 3.751322069889e-26 63095.73 3.751322069889e-26 79432.82 3.751322069889e-26 100000 3.751322069889e-26 125892.54 3.751322069889e-26 158489.32 3.751322069889e-26 199526.23 3.751322069889e-26 251188.64 3.751322069889e-26 316227.77 3.751322069889e-26 398107.17 3.751322069889e-26 501187.23 3.751322069889e-26 630957.34 3.751322069889e-26 794328.23 3.751322069889e-26 1000000 3.751322069889e-26 1258930 3.751322069889e-26 1584890 3.751322069889e-26 1995260 3.751322069889e-26 2511890 3.751322069889e-26 3162280 3.751322069889e-26 3981070 3.751322069889e-26 5011870 3.751322069889e-26 6309570 3.751322069889e-26 7943280 3.751322069889e-26 10000000 3.751322069889e-26 12589250 3.751322069889e-26 15848930 3.751322069889e-26 19952620 3.751322069889e-26 25118860 3.751322069889e-26 31622780 3.751322069889e-26 39810720 3.751322069889e-26 50118720 3.751322069889e-26 63095730 3.751322069889e-26 79432820 3.751322069889e-26 100000000 3.751322069889e-26 100.00000 1.4032875618304e-25 125.89254 1.4032875618304e-25 158.48932 1.4032875618304e-25 199.52623 1.4032875618304e-25 251.18864 1.4032875618304e-25 316.22777 1.4032875618304e-25 398.10717 1.4032875618304e-25 501.18723 1.4032875618304e-25 630.95734 1.4032875618304e-25 794.32823 1.4032875618304e-25 1000 1.4032875618304e-25 1258.93 1.4032875618304e-25 1584.89 1.4032875618304e-25 1995.26 1.4032875618304e-25 2511.89 1.4032875618304e-25 3162.28 1.4032875618304e-25 3981.07 1.4032875618304e-25 5011.87 1.4032875618304e-25 6309.57 1.4032875618304e-25 7943.28 1.4032875618304e-25 10000 1.4032875618304e-25 12589.25 1.4032875618304e-25 15848.93 1.4032875618304e-25 19952.62 1.4032875618304e-25 25118.86 1.4032875618304e-25 31622.78 1.4032875618304e-25 39810.72 1.4032875618304e-25 50118.72 1.4032875618304e-25 63095.73 1.4032875618304e-25 79432.82 1.4032875618304e-25 100000 1.4032875618304e-25 125892.54 1.4032875618304e-25 158489.32 1.4032875618304e-25 199526.23 1.4032875618304e-25 251188.64 1.4032875618304e-25 316227.77 1.4032875618304e-25 398107.17 1.4032875618304e-25 501187.23 1.4032875618304e-25 630957.34 1.4032875618304e-25 794328.23 1.4032875618304e-25 1000000 1.4032875618304e-25 1258930 1.4032875618304e-25 1584890 1.4032875618304e-25 1995260 1.4032875618304e-25 2511890 1.4032875618304e-25 3162280 1.4032875618304e-25 3981070 1.4032875618304e-25 5011870 1.4032875618304e-25 6309570 1.4032875618304e-25 7943280 1.4032875618304e-25 10000000 1.4032875618304e-25 12589250 1.4032875618304e-25 15848930 1.4032875618304e-25 19952620 1.4032875618304e-25 25118860 1.4032875618304e-25 31622780 1.4032875618304e-25 39810720 1.4032875618304e-25 50118720 1.4032875618304e-25 63095730 1.4032875618304e-25 79432820 1.4032875618304e-25 100000000 1.4032875618304e-25 100.00000 3.8724820447329e-25 125.89254 3.8724820447329e-25 158.48932 3.8724820447329e-25 199.52623 3.8724820447329e-25 251.18864 3.8724820447329e-25 316.22777 3.8724820447329e-25 398.10717 3.8724820447329e-25 501.18723 3.8724820447329e-25 630.95734 3.8724820447329e-25 794.32823 3.8724820447329e-25 1000 3.8724820447329e-25 1258.93 3.8724820447329e-25 1584.89 3.8724820447329e-25 1995.26 3.8724820447329e-25 2511.89 3.8724820447329e-25 3162.28 3.8724820447329e-25 3981.07 3.8724820447329e-25 5011.87 3.8724820447329e-25 6309.57 3.8724820447329e-25 7943.28 3.8724820447329e-25 10000 3.8724820447329e-25 12589.25 3.8724820447329e-25 15848.93 3.8724820447329e-25 19952.62 3.8724820447329e-25 25118.86 3.8724820447329e-25 31622.78 3.8724820447329e-25 39810.72 3.8724820447329e-25 50118.72 3.8724820447329e-25 63095.73 3.8724820447329e-25 79432.82 3.8724820447329e-25 100000 3.8724820447329e-25 125892.54 3.8724820447329e-25 158489.32 3.8724820447329e-25 199526.23 3.8724820447329e-25 251188.64 3.8724820447329e-25 316227.77 3.8724820447329e-25 398107.17 3.8724820447329e-25 501187.23 3.8724820447329e-25 630957.34 3.8724820447329e-25 794328.23 3.8724820447329e-25 1000000 3.8724820447329e-25 1258930 3.8724820447329e-25 1584890 3.8724820447329e-25 1995260 3.8724820447329e-25 2511890 3.8724820447329e-25 3162280 3.8724820447329e-25 3981070 3.8724820447329e-25 5011870 3.8724820447329e-25 6309570 3.8724820447329e-25 7943280 3.8724820447329e-25 10000000 3.8724820447329e-25 12589250 3.8724820447329e-25 15848930 3.8724820447329e-25 19952620 3.8724820447329e-25 25118860 3.8724820447329e-25 31622780 3.8724820447329e-25 39810720 3.8724820447329e-25 50118720 3.8724820447329e-25 63095730 3.8724820447329e-25 79432820 3.8724820447329e-25 100000000 3.8724820447329e-25 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_core_st.standard0000644000175000017500000000431514163340332025171 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.5505e-06 0. 0. -1.5505e-06 0.35 9.4647e-06 0. 0. -9.4647e-06 0.45 2.30214e-05 0. 0. -2.30214e-05 0.55 3.75796e-05 0. 0. -3.75796e-05 0.65 5.11877e-05 0. 0. -5.11877e-05 0.75 6.31815e-05 0. 0. -6.31815e-05 0.85 7.33851e-05 0. 0. -7.33851e-05 0.95 8.18385e-05 0. 0. -8.18385e-05 1.05000 8.86815e-05 0. 0. -8.86815e-05 1.15000 9.40957e-05 0. 0. -9.40957e-05 0.25 4.1269e-06 0. 0. -4.1269e-06 0.35 2.36523e-05 0. 0. -2.36523e-05 0.45 6.43923e-05 0. 0. -6.43923e-05 0.55 0.0001201776 0. 0. -0.0001201776 0.65 0.0001842588 0. 0. -0.0001842588 0.75 0.0002522315 0. 0. -0.0002522315 0.85 0.0003213405 0. 0. -0.0003213405 0.95 0.0003897885 0. 0. -0.0003897885 1.05000 0.0004563858 0. 0. -0.0004563858 1.15000 0.0005203675 0. 0. -0.0005203675 0.25 3.673373e-07 0. 0. -3.673373e-07 0.35 7.1484e-06 0. 0. -7.1484e-06 0.45 2.48285e-05 0. 0. -2.48285e-05 0.55 4.44818e-05 0. 0. -4.44818e-05 0.65 6.26241e-05 0. 0. -6.26241e-05 0.75 7.84067e-05 0. 0. -7.84067e-05 0.85 9.16981e-05 0. 0. -9.16981e-05 0.95 0.0001026272 0. 0. -0.0001026272 1.05000 0.0001114258 0. 0. -0.0001114258 1.15000 0.0001183601 0. 0. -0.0001183601 0.25 1.239e-06 0. 0. -1.239e-06 0.35 1.76709e-05 0. 0. -1.76709e-05 0.45 6.36452e-05 0. 0. -6.36452e-05 0.55 0.0001295447 0. 0. -0.0001295447 0.65 0.0002054591 0. 0. -0.0002054591 0.75 0.0002858818 0. 0. -0.0002858818 0.85 0.0003675548 0. 0. -0.0003675548 0.95 0.0004483622 0. 0. -0.0004483622 1.05000 0.0005269145 0. 0. -0.0005269145 1.15000 0.0006023385 0. 0. -0.0006023385 0.25 4.935e-06 0. 0. -4.935e-06 0.35 1.26832e-05 0. 0. -1.26832e-05 0.45 2.24463e-05 0. 0. -2.24463e-05 0.55 3.24927e-05 0. 0. -3.24927e-05 0.65 4.19242e-05 0. 0. -4.19242e-05 0.75 5.03307e-05 0. 0. -5.03307e-05 0.85 5.75612e-05 0. 0. -5.75612e-05 0.95 6.36077e-05 0. 0. -6.36077e-05 1.05000 6.85395e-05 0. 0. -6.85395e-05 1.15000 7.24642e-05 0. 0. -7.24642e-05 0.25 1.3018e-05 0. 0. -1.3018e-05 0.35 3.66261e-05 0. 0. -3.66261e-05 0.45 7.36338e-05 0. 0. -7.36338e-05 0.55 0.0001202733 0. 0. -0.0001202733 0.65 0.0001725728 0. 0. -0.0001725728 0.75 0.0002275362 0. 0. -0.0002275362 0.85 0.0002830886 0. 0. -0.0002830886 0.95 0.0003378138 0. 0. -0.0003378138 1.05000 0.0003907554 0. 0. -0.0003907554 1.15000 0.0004412878 0. 0. -0.0004412878 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_ig_lw.standard0000644000175000017500000000653214163340332024666 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.838e-23 1.37174602664884e-13 2.137700041529e-15 2.137700041529e-15 -0.8 2.701e-20 4.93137009580149e-14 2.85190005540372e-15 2.85190005540372e-15 -0.4 1.0318e-15 3.01819005863423e-14 3.15770006134449e-15 3.15770006134449e-15 1.11022302462516e-16 -1.84232e-11 2.57805005008365e-14 3.86590007510265e-15 3.86590007510265e-15 0.4 -9.61061e-08 1.43545802788657e-13 6.9879001357536e-14 6.9879001357536e-14 0.8 -5.261904e-07 1.50720302928036e-13 7.4121201439949e-14 7.4121201439949e-14 1.2 -1.8204e-06 1.45926902834915e-13 7.18834013964753e-14 7.18834013964753e-14 -1.2 2.733e-19 1.30365002532595e-13 2.42000004701322e-15 1.81680003529489e-15 -0.8 4.021307e-16 4.75765009242664e-14 1.99590003877425e-15 3.54410006885106e-15 -0.4 1.7963e-11 2.90163005636983e-14 1.97250003831966e-15 4.05430007876269e-15 1.11022302462516e-16 2.0447e-06 2.43008004720905e-14 2.44050004741148e-15 4.44460008634503e-15 0.4 0.0012031 9.93221019295257e-14 8.6169101674003e-14 5.91580011492596e-15 0.8 0.0025195 1.09566002128533e-13 9.64033018728223e-14 8.09300015722232e-15 1.2 0.0027516 1.08851302114649e-13 9.28616018040178e-14 1.197100023256e-14 -1.2 0. 1.42874602775618e-13 2.15370004183983e-15 2.15370004183983e-15 -0.8 6.699e-26 4.5032900874852e-14 2.89800005629931e-15 2.89800005629931e-15 -0.4 1.720e-19 2.93105005694137e-14 3.17370006165532e-15 3.17370006165532e-15 1.11022302462516e-16 -1.710979e-13 2.47177004801896e-14 3.50660006812255e-15 3.50660006812255e-15 0.4 -4.23836e-08 1.47786802871047e-13 7.21106014008891e-14 7.21106014008891e-14 0.8 -2.456488e-07 1.5376680298722e-13 7.57375014713488e-14 7.57375014713488e-14 1.2 -8.63269e-07 1.478204028717e-13 7.29020014162636e-14 7.29020014162636e-14 -1.2 2.014e-25 1.3595390264117e-13 2.29530004459068e-15 1.96910003825361e-15 -0.8 4.244e-21 4.34358008438252e-14 2.04230003967566e-15 3.58680006968059e-15 -0.4 1.07232e-14 2.81656005471718e-14 1.97770003842068e-15 4.07970007925614e-15 1.11022302462516e-16 7.97319e-08 2.35486004574775e-14 2.0363000395591e-15 4.46570008675494e-15 0.4 0.0016056 1.02743901996001e-13 9.00597017495854e-14 5.7435001115787e-15 0.8 0.0035301 1.13905902212844e-13 1.01430001970476e-13 7.89900015345349e-15 1.2 0.0038553 1.09800202133083e-13 9.59835018646668e-14 1.02021001981957e-14 -1.2 1.54377e-17 1.3058250253682e-13 2.10260004084711e-15 2.10260004084711e-15 -0.8 2.3824e-15 5.69288011059531e-14 2.76490005371358e-15 2.76490005371358e-15 -0.4 2.5566e-12 3.18045006178645e-14 3.13130006083161e-15 3.13130006083161e-15 1.11022302462516e-16 -1.546e-09 4.09020007946012e-14 1.20155002334245e-14 1.20155002334245e-14 0.4 -2.672237e-07 1.39205202704333e-13 6.7606901313396e-14 6.7606901313396e-14 0.8 -1.3289e-06 1.46314802842451e-13 7.17841013945462e-14 7.17841013945462e-14 1.2 -4.4674e-06 1.42897302776059e-13 7.02588013649143e-14 7.02588013649143e-14 -1.2 4.61037e-14 1.23908302407161e-13 2.59360005038574e-15 1.58000003069458e-15 -0.8 7.9789e-12 5.47775010641599e-14 1.91820003726478e-15 3.45630006714537e-15 -0.4 1.16167e-08 3.06023005945094e-14 1.96180003811179e-15 4.01300007796036e-15 1.11022302462516e-16 3.34763e-05 3.20921006234517e-14 1.04838002036683e-14 4.42690008600117e-15 0.4 0.0009122767 9.66903018783978e-14 8.28458016094414e-14 6.33950012315716e-15 0.8 0.0016571 1.08590702109586e-13 9.30499018076759e-14 1.02674001994643e-14 1.2 0.0016515 1.14311002220714e-13 9.15499017785355e-14 1.88276003657629e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_core_lt.standard0000644000175000017500000000631014163340332025206 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 0. 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 0. 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 0. 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 0. 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 0. 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 0. 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 1.742e-20 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 3.53468e-17 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 2.0315e-12 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.734942e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09896e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.0001354951 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440626 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 0. 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 0. 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 0. 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 0. 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 0. 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 0. 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 1.273e-26 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 4.174e-22 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 1.4616e-15 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.37409e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63207e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900562 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034134 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 0. 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 0. 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 0. 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 0. 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 0. 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 0. 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 0. 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 2.9617e-15 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 6.370562e-13 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 1.1219e-09 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1941e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25259e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84377e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51706e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_ig_st.standard0000644000175000017500000001671214163340332024670 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0003997365 8.42107516359582e-16 1.98965203865287e-16 6.09900711848512e-16 0 -4.339978e-10 6.20575212055884e-16 2.80395405447228e-16 2.80395405447228e-16 0.2 5.36346e-05 5.52959010742308e-16 2.95160905734077e-16 1.9048640370057e-16 0.4 6.42727e-05 5.47663110639425e-16 2.97021305770218e-16 1.83905103572716e-16 0.6 7.39548e-05 5.41739010524337e-16 2.9919620581247e-16 1.76365103426236e-16 0.8 8.34369e-05 5.37823510448271e-16 3.01356805854444e-16 1.70824203318593e-16 1 9.29535e-05 5.35412810401439e-16 3.0345520589521e-16 1.66825303240907e-16 1.2 0.0001026006 5.33928510372603e-16 3.0547920593453e-16 1.63802103182175e-16 -0.2 -0.0004702485 9.35429518172544e-16 2.76508405371715e-16 6.39386712421335e-16 0 -4.8567e-09 9.57020418591989e-16 4.69372109118469e-16 4.69372109118469e-16 0.2 0.0004230112 8.55644116622557e-16 6.24515612132434e-16 2.02298203930037e-16 0.4 0.0004826197 8.46214416439366e-16 6.22163612086742e-16 1.9406750377014e-16 0.6 0.0005156197 8.3632421624723e-16 6.17388111993969e-16 1.88147003655123e-16 0.8 0.0005403507 8.24553016018551e-16 6.12751511903894e-16 1.80214303501015e-16 1 0.0005607266 8.14733915827796e-16 6.0820091181549e-16 1.74157603383351e-16 1.2 0.0005783954 8.06704415671807e-16 6.03724511728527e-16 1.69827603299233e-16 -0.2 -0.0003494274 9.67923918803811e-16 3.97824507728517e-16 5.55844510798364e-16 0 -1.45749e-08 9.88294919199557e-16 4.87635709473275e-16 4.87635709473275e-16 0.2 0.0004560439 9.40090218263087e-16 6.28474512209344e-16 2.93766005706978e-16 0.4 0.0005951394 9.0707851762177e-16 6.837717132836e-16 2.02337303930797e-16 0.6 0.0006385582 9.0082171750022e-16 6.78444013180099e-16 2.00316003891529e-16 0.8 0.0006672402 8.91523217319578e-16 6.72979113073933e-16 1.95432303796654e-16 1 0.0006890416 8.79085317077948e-16 6.67627812969973e-16 1.87311503638891e-16 1.2 0.0007067325 8.68165816865815e-16 6.62372712867882e-16 1.80629203509075e-16 -0.2 -0.0002148805 9.68851718821835e-16 4.56231508863187e-16 5.00434309721913e-16 0 -3.45932e-08 9.83208419100742e-16 4.85943209440395e-16 4.85943209440395e-16 0.2 0.000327495 9.67814418801684e-16 5.44963710586983e-16 4.0928500795116e-16 0.4 0.0005585639 9.14181817759766e-16 6.8214561325201e-16 2.14309004163371e-16 0.6 0.0006131565 9.06774517615864e-16 6.80279813215763e-16 2.0750810403125e-16 0.8 0.0006439427 9.01419817511839e-16 6.75099113115118e-16 2.06236904006554e-16 1 0.000666286 8.93533017358622e-16 6.69950313015092e-16 2.02424503932491e-16 1.2 0.0006839104 8.81604417126886e-16 6.6489331291685e-16 1.94495203778449e-16 -0.2 -0.0004715562 8.60329816713586e-16 1.93899103766868e-16 6.35132412338686e-16 0 -7.74107e-11 5.20271110107282e-16 2.25088504372783e-16 2.25088504372783e-16 0.2 1.91946e-05 4.90137209521872e-16 2.26212604394621e-16 1.91056403711643e-16 0.4 2.47812e-05 4.85438809430596e-16 2.28833004445528e-16 1.8448650358401e-16 0.6 3.06044e-05 4.80278109330339e-16 2.31998804507029e-16 1.76916403436946e-16 0.8 3.69006e-05 4.77287609272243e-16 2.3533030457175e-16 1.71342203328657e-16 1 4.37578e-05 4.7595270924631e-16 2.38759404638367e-16 1.67312703250376e-16 1.2 5.12231e-05 4.75681309241038e-16 2.42258904706352e-16 1.64260203191075e-16 -0.2 -0.0005927731 9.38575218233655e-16 2.27953904428449e-16 6.91396913431734e-16 0 -2.2764e-09 9.79323919025278e-16 4.81353209351225e-16 4.81353209351225e-16 0.2 0.000505601 8.74744316993615e-16 6.53116012688053e-16 1.94536003779241e-16 0.4 0.0005701421 8.69052416883039e-16 6.4817531259207e-16 1.92938003748197e-16 0.6 0.0006091188 8.59372716694992e-16 6.43513312501502e-16 1.87078203634359e-16 0.8 0.0006386196 8.47737416468953e-16 6.3896491241314e-16 1.79151803480373e-16 1 0.0006630875 8.3803831628053e-16 6.34488912326185e-16 1.73097203362751e-16 1.2 0.0006844105 8.30125016126798e-16 6.30076912240473e-16 1.68774203278768e-16 -0.2 -0.0004487192 9.75430618949643e-16 3.8297570744005e-16 5.78837211245042e-16 0 -7.0042e-09 1.00370001949883e-15 4.9591310963408e-16 4.9591310963408e-16 0.2 0.0005791672 9.41795418296214e-16 6.81680113242966e-16 2.42465804710371e-16 0.4 0.0007058943 9.23563117942016e-16 7.03547113667776e-16 2.00325703891718e-16 0.6 0.0007557826 9.17778217829633e-16 6.97824413556601e-16 1.99165003869169e-16 0.8 0.0007893158 9.08519417649763e-16 6.9228411344897e-16 1.94357703775778e-16 1 0.0008147552 8.96069317407895e-16 6.86858913343575e-16 1.86258103618427e-16 1.2 0.0008353409 8.85120617195195e-16 6.81528213240015e-16 1.79581203488715e-16 -0.2 -0.0002782299 9.77763518994964e-16 4.6148000896515e-16 5.04872109808126e-16 0 -1.67943e-08 9.93641419303423e-16 4.91579509549891e-16 4.91579509549891e-16 0.2 0.0004200093 9.76273918966026e-16 5.62291410923608e-16 4.01094007792034e-16 0.4 0.0006653808 9.22586117923036e-16 6.98280013565452e-16 2.07209204025443e-16 0.6 0.000723615 9.17552517825248e-16 6.93230113467348e-16 2.06078604003479e-16 0.8 0.0007596301 9.12376917724702e-16 6.87908613363967e-16 2.05111403984689e-16 1 0.0007858801 9.04534717572352e-16 6.82710213262978e-16 2.01368603911978e-16 1.2 0.0008064869 8.92617917340845e-16 6.77607313163844e-16 1.9347140375856e-16 -0.2 -0.0003034585 8.51625916544495e-16 2.37903304621736e-16 5.81704311300741e-16 0 -2.1153e-09 7.3786411433445e-16 3.45765306717166e-16 3.45765306717166e-16 0.2 0.0001113975 6.42027412472635e-16 3.8970860757085e-16 1.93936703767599e-16 0.4 0.0001296451 6.2989451223693e-16 3.86891307516119e-16 1.84183403578122e-16 0.6 0.000142379 6.20580212055982e-16 3.8530030748521e-16 1.76457403428029e-16 0.8 0.000153374 6.13688811922103e-16 3.83988507459726e-16 1.70915503320367e-16 1 0.0001635035 6.08431911819977e-16 3.82750007435666e-16 1.66938503243106e-16 1.2 0.0001731152 6.04179611737368e-16 3.81534307412048e-16 1.63940003184854e-16 -0.2 -0.0003164304 9.30541418077583e-16 3.09151906005879e-16 6.01564211686559e-16 0 -1.24221e-08 9.33382818132783e-16 4.56695708872205e-16 4.56695708872205e-16 0.2 0.0003111139 8.62965116764781e-16 5.89629611454706e-16 2.45458604768512e-16 0.4 0.0003937884 8.33011416182872e-16 6.00166811659411e-16 2.01649303917431e-16 0.6 0.0004284149 8.18407915899171e-16 5.94693611553084e-16 1.91271203715816e-16 0.8 0.0004508537 8.05064315639945e-16 5.89291911448145e-16 1.82416003543787e-16 1 0.0004680924 7.94471715434163e-16 5.84222011349653e-16 1.76073703420575e-16 1.2 0.000482453 7.85939615268411e-16 5.79364811255292e-16 1.71620203334057e-16 -0.2 -0.0002424821 9.50929818473667e-16 3.67118707131997e-16 5.68297811040294e-16 0 -3.53744e-08 9.66657518779209e-16 4.7602220924766e-16 4.7602220924766e-16 0.2 0.0003067019 9.33079718126894e-16 5.97762611612705e-16 3.17026306158855e-16 0.4 0.0004476511 8.9779451744141e-16 6.5185421266354e-16 2.24152404354598e-16 0.6 0.000503176 8.8346801716309e-16 6.52368712673535e-16 2.07627804033575e-16 0.8 0.0005341616 8.71380916928275e-16 6.47466412578299e-16 1.99230503870441e-16 1 0.0005554078 8.57802216664482e-16 6.42065612473377e-16 1.89982903690789e-16 1.2 0.0005716837 8.46345616441915e-16 6.36726712369659e-16 1.82857003552354e-16 -0.2 -0.0001575632 9.51416218483117e-16 4.07822307922744e-16 5.30103910298303e-16 0 -8.21836e-08 9.67012118786097e-16 4.7720920927072e-16 4.7720920927072e-16 0.2 0.0002296051 9.50178518459072e-16 5.62346410924676e-16 3.7304770724718e-16 0.4 0.0003943049 9.16008717795257e-16 6.45745712544871e-16 2.52404904903458e-16 0.6 0.0004666527 8.98879317462485e-16 6.5743411277194e-16 2.21738304307699e-16 0.8 0.0005050443 8.89081717272147e-16 6.55203912728615e-16 2.12841204134856e-16 1 0.0005296729 8.79205017080273e-16 6.50628812639734e-16 2.06388104009492e-16 1.2 0.0005475324 8.66291216829397e-16 6.4565661254314e-16 1.97371403834325e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_gidl_lw.standard0000644000175000017500000000540614163340332025156 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.57915e-05 0. -2.91193e-11 -1.57914e-05 0.35 3.99737e-05 0. -1.55703e-11 -3.99737e-05 0.45 6.69676e-05 0. -7.9392e-12 -6.69675e-05 0.55 9.3005e-05 0. -3.8383e-12 -9.3005e-05 0.65 0.0001165222 0. -1.7476e-12 -0.0001165222 0.75 0.0001368899 0. -7.435154e-13 -0.0001368899 0.85 0.0001539632 0. -2.928183e-13 -0.0001539632 0.95 0.0001678681 0. -1.055658e-13 -0.0001678681 1.05000 0.0001788764 0. -3.43739e-14 -0.0001788764 1.15000 0.0001873257 0. -9.9455e-15 -0.0001873257 0.25 3.30632e-05 0. -2.182e-09 -3.3061e-05 0.35 0.000105082 0. -1.5376e-09 -0.0001050804 0.45 0.0002252121 0. -1.0629e-09 -0.000225211 0.55 0.0003895934 0. -7.196137e-10 -0.0003895926 0.65 0.0005909984 0. -4.762589e-10 -0.0005909979 0.75 0.0008213649 0. -3.074785e-10 -0.0008213646 0.85 0.001073 0. -1.931911e-10 -0.001073 0.95 0.0013392 0. -1.178141e-10 -0.0013392 1.05000 0.0016138 0. -6.95221e-11 -0.0016138 1.15000 0.0018913 0. -3.95599e-11 -0.0018913 0.25 1.01771e-05 0. -2.89302e-11 -1.0177e-05 0.35 4.45138e-05 0. -1.54616e-11 -4.45138e-05 0.45 8.6701e-05 0. -7.8796e-12 -8.6701e-05 0.55 0.0001273259 0. -3.8071e-12 -0.0001273259 0.65 0.0001635247 0. -1.7322e-12 -0.0001635247 0.75 0.0001943828 0. -7.363982e-13 -0.0001943828 0.85 0.0002198207 0. -2.897574e-13 -0.0002198207 0.95 0.0002401769 0. -1.043556e-13 -0.0002401769 1.05000 0.0002559893 0. -3.39398e-14 -0.0002559893 1.15000 0.0002678678 0. -9.8064e-15 -0.0002678678 0.25 1.97618e-05 0. -2.174e-09 -1.97597e-05 0.35 0.0001024364 0. -1.5316e-09 -0.0001024349 0.45 0.0002625837 0. -1.0586e-09 -0.0002625827 0.55 0.0004918682 0. -7.165071e-10 -0.0004918675 0.65 0.0007758675 0. -4.740816e-10 -0.000775867 0.75 0.0011002 0. -3.059871e-10 -0.0011002 0.85 0.0014529 0. -1.921951e-10 -0.0014529 0.95 0.001824 0. -1.171671e-10 -0.001824 1.05000 0.0022059 0. -6.91146e-11 -0.0022059 1.15000 0.0025924 0. -3.93118e-11 -0.0025924 0.25 2.13978e-05 0. -2.94237e-11 -2.13978e-05 0.35 3.67966e-05 0. -1.57452e-11 -3.67966e-05 0.45 5.28435e-05 0. -8.0354e-12 -5.28435e-05 0.55 6.8267e-05 0. -3.8885e-12 -6.8267e-05 0.65 8.23742e-05 0. -1.7724e-12 -8.23742e-05 0.75 9.48195e-05 0. -7.550134e-13 -9.48195e-05 0.85 0.0001054794 0. -2.977688e-13 -0.0001054794 0.95 0.0001143717 0. -1.075256e-13 -0.0001143717 1.05000 0.0001216014 0. -3.5078e-14 -0.0001216014 1.15000 0.000127321 0. -1.01715e-14 -0.000127321 0.25 5.69952e-05 0. -2.1948e-09 -5.6993e-05 0.35 0.0001208446 0. -1.5471e-09 -0.000120843 0.45 0.000211978 0. -1.0699e-09 -0.0002119769 0.55 0.000328203 0. -7.246001e-10 -0.0003282023 0.65 0.0004656708 0. -4.797549e-10 -0.0004656703 0.75 0.0006196721 0. -3.098738e-10 -0.0006196718 0.85 0.000785182 0. -1.947915e-10 -0.0007851818 0.95 0.0009572177 0. -1.188541e-10 -0.0009572176 1.05000 0.0011311 0. -7.01775e-11 -0.0011311 1.15000 0.0013024 0. -3.99592e-11 -0.0013024 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_gidl_sw.standard0000644000175000017500000000710614163340332025534 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258.93 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584.89 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995.26 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511.89 1.75123216809258e-14 1.31203652818349e-14 3.96400600451493e-15 3162.28 1.75123283034693e-14 1.31203729905505e-14 3.96401137195977e-15 3981.07 1.75123528093895e-14 1.31203892665247e-14 3.96401577911747e-15 5011.87 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309.57 1.75123534704896e-14 1.31203916980709e-14 3.96401516076056e-15 7943.28 1.75123493857524e-14 1.31203908214922e-14 3.96401456366612e-15 10000 1.75118183884012e-14 1.31203849591705e-14 3.96401328026089e-15 12589.25 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848.93 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952.62 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118.86 1.7512273535172e-14 1.31201073878507e-14 3.96401421773492e-15 31622.78 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810.72 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118.72 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095.73 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432.82 1.75124331366568e-14 1.31204496308788e-14 3.9640055510179e-15 100000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 125892.54 1.75123794760688e-14 1.3120378267772e-14 3.9640652222836e-15 158489.32 1.75123406932017e-14 1.31203724576972e-14 3.96397828169714e-15 199526.23 1.75123200499053e-14 1.31203806208689e-14 3.96399255223323e-15 251188.64 1.75123341071921e-14 1.31203587414666e-14 3.96403702996212e-15 316227.77 1.75123511064457e-14 1.31203724674684e-14 3.96402935384323e-15 398107.17 1.75123253422953e-14 1.31203916594299e-14 3.96401008860928e-15 501187.23 1.75123484155246e-14 1.31203920593492e-14 3.96401807588318e-15 630957.34 1.75123389888465e-14 1.31203745382247e-14 3.96400797982497e-15 794328.23 1.751235232957e-14 1.31203890260877e-14 3.96400540130628e-15 1000000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258930 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584890 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995260 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511890 1.75123153448624e-14 1.31203652818349e-14 3.96400600451493e-15 3162280 1.75123283034693e-14 1.31203780234679e-14 3.96401137195977e-15 3981070 1.75123488115964e-14 1.31203932643179e-14 3.96401577911747e-15 5011870 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309570 1.75123534704896e-14 1.31203942205082e-14 3.96401516076055e-15 7943280 1.75123473821098e-14 1.31203888178495e-14 3.96401456366612e-15 10000000 1.75118183884012e-14 1.31203865507199e-14 3.96401328026089e-15 12589250 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848930 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952620 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118860 1.7512273535172e-14 1.31201073878507e-14 3.96401358412757e-15 31622780 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810720 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118720 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095730 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432820 1.75124331366568e-14 1.31204496308787e-14 3.9640055510179e-15 100000000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_gidl_st.standard0000644000175000017500000001533114163340332025155 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 1.8848e-06 0. -7.516224e-13 -1.8848e-06 0.2 2.1784e-06 0. -1.3223e-12 -2.1784e-06 0.3 2.4297e-06 0. -2.241e-12 -2.4297e-06 0.4 2.6688e-06 0. -3.6749e-12 -2.6688e-06 0.5 2.9045e-06 0. -5.849e-12 -2.9045e-06 0.6 3.1408e-06 0. -9.0596e-12 -3.1408e-06 0.7 3.38e-06 0. -1.36889e-11 -3.38e-06 0.8 3.6236e-06 0. -2.02192e-11 -3.6235e-06 0.9 3.8723e-06 0. -2.92488e-11 -3.8723e-06 1.00000 4.1269e-06 0. -4.15072e-11 -4.1269e-06 1.10000 4.3879e-06 0. -5.78709e-11 -4.3878e-06 1.20000 4.6555e-06 0. -7.93777e-11 -4.6554e-06 0. 0. 0. 0. 0. 0.1 5.08104e-05 0. -1.523034e-13 -5.08104e-05 0.2 6.49605e-05 0. -2.990109e-13 -6.49605e-05 0.3 7.02204e-05 0. -5.592656e-13 -7.02204e-05 0.4 7.41828e-05 0. -1.0024e-12 -7.41828e-05 0.5 7.75585e-05 0. -1.729e-12 -7.75585e-05 0.6 8.05814e-05 0. -2.8811e-12 -8.05814e-05 0.7 8.33686e-05 0. -4.6528e-12 -8.33686e-05 0.8 8.59879e-05 0. -7.3031e-12 -8.59879e-05 0.9 8.84827e-05 0. -1.11693e-11 -8.84827e-05 1.00000 9.08819e-05 0. -1.66819e-11 -9.08819e-05 1.10000 9.32061e-05 0. -2.43792e-11 -9.3206e-05 1.20000 9.54701e-05 0. -3.49233e-11 -9.54701e-05 0. 0. 0. 0. 0. 0.1 0.0001165368 0. -2.20659e-14 -0.0001165368 0.2 0.0001809148 0. -5.01347e-14 -0.0001809148 0.3 0.0002023956 0. -1.067716e-13 -0.0002023956 0.4 0.0002139213 0. -2.148878e-13 -0.0002139213 0.5 0.0002226436 0. -4.112714e-13 -0.0002226436 0.6 0.0002299367 0. -7.525284e-13 -0.0002299367 0.7 0.0002363188 0. -1.3225e-12 -0.0002363188 0.8 0.0002420615 0. -2.2411e-12 -0.0002420615 0.9 0.0002473296 0. -3.675e-12 -0.0002473296 1.00000 0.0002522315 0. -5.849e-12 -0.0002522315 1.10000 0.0002568428 0. -9.0597e-12 -0.0002568428 1.20000 0.000261218 0. -1.36889e-11 -0.000261218 0. 0. 0. 0. 0. 0.1 0.0001629112 0. -2.0251e-15 -0.0001629112 0.2 0.000279901 0. -5.6233e-15 -0.000279901 0.3 0.0003354186 0. -1.428e-14 -0.0003354186 0.4 0.0003599081 0. -3.35657e-14 -0.0003599081 0.5 0.0003757025 0. -7.37202e-14 -0.0003757025 0.6 0.0003880726 0. -1.52487e-13 -0.0003880726 0.7 0.0003985118 0. -2.990551e-13 -0.0003985118 0.8 0.0004076615 0. -5.592894e-13 -0.0004076615 0.9 0.0004158751 0. -1.0024e-12 -0.0004158751 1.00000 0.0004233747 0. -1.729e-12 -0.0004233747 1.10000 0.0004303107 0. -2.8811e-12 -0.0004303107 1.20000 0.0004367906 0. -4.6528e-12 -0.0004367906 0. 0. 0. 0. 0. 0.1 4.217624e-07 0. -7.469078e-13 -4.217617e-07 0.2 5.035177e-07 0. -1.3145e-12 -5.035164e-07 0.3 5.819947e-07 0. -2.2287e-12 -5.819925e-07 0.4 6.620471e-07 0. -3.656e-12 -6.620434e-07 0.5 7.454976e-07 0. -5.8206e-12 -7.454917e-07 0.6 8.333177e-07 0. -9.0182e-12 -8.333086e-07 0.7 9.26144e-07 0. -1.36298e-11 -9.261304e-07 0.8 1.0245e-06 0. -2.01366e-11 -1.0244e-06 0.9 1.1287e-06 0. -2.91356e-11 -1.1286e-06 1.00000 1.2391e-06 0. -4.13549e-11 -1.239e-06 1.10000 1.3561e-06 0. -5.7669e-11 -1.356e-06 1.20000 1.4799e-06 0. -7.91142e-11 -1.4798e-06 0. 0. 0. 0. 0. 0.1 5.56189e-05 0. -1.51159e-13 -5.56189e-05 0.2 6.66433e-05 0. -2.96925e-13 -6.66433e-05 0.3 7.19763e-05 0. -5.556334e-13 -7.19763e-05 0.4 7.62155e-05 0. -9.962928e-13 -7.62155e-05 0.5 7.98915e-05 0. -1.7192e-12 -7.98915e-05 0.6 8.32258e-05 0. -2.8658e-12 -8.32258e-05 0.7 8.63333e-05 0. -4.6295e-12 -8.63333e-05 0.8 8.9281e-05 0. -7.2687e-12 -8.9281e-05 0.9 9.21114e-05 0. -1.11197e-11 -9.21114e-05 1.00000 9.4853e-05 0. -1.66119e-11 -9.4853e-05 1.10000 9.75259e-05 0. -2.42824e-11 -9.75259e-05 1.20000 0.0001001446 0. -3.47917e-11 -0.0001001445 0. 0. 0. 0. 0. 0.1 0.0001422216 0. -2.18635e-14 -0.0001422216 0.2 0.0002097043 0. -4.97111e-14 -0.0002097043 0.3 0.0002294793 0. -1.05938e-13 -0.0002294793 0.4 0.0002419981 0. -2.133326e-13 -0.0002419981 0.5 0.0002518586 0. -4.085041e-13 -0.0002518586 0.6 0.0002601861 0. -7.478081e-13 -0.0002601861 0.7 0.0002675077 0. -1.3147e-12 -0.0002675077 0.8 0.0002741191 0. -2.2288e-12 -0.0002741191 0.9 0.0002802034 0. -3.656e-12 -0.0002802034 1.00000 0.0002858819 0. -5.8207e-12 -0.0002858818 1.10000 0.0002912388 0. -9.0183e-12 -0.0002912388 1.20000 0.0002963352 0. -1.36298e-11 -0.0002963351 0. 0. 0. 0. 0. 0.1 0.0002021993 0. -2.0019e-15 -0.0002021993 0.2 0.0003366094 0. -5.5645e-15 -0.0003366094 0.3 0.0003907439 0. -1.41433e-14 -0.0003907439 0.4 0.0004153399 0. -3.32704e-14 -0.0004153399 0.5 0.0004328878 0. -7.31218e-14 -0.0004328878 0.6 0.0004470627 0. -1.513412e-13 -0.0004470627 0.7 0.0004591282 0. -2.969689e-13 -0.0004591282 0.8 0.0004697343 0. -5.55657e-13 -0.0004697343 0.9 0.0004792693 0. -9.9631e-13 -0.0004792693 1.00000 0.000487985 0. -1.7192e-12 -0.000487985 1.10000 0.0004960544 0. -2.8658e-12 -0.0004960544 1.20000 0.0005036012 0. -4.6295e-12 -0.0005036012 0. 0. 0. 0. 0. 0.1 6.8993e-06 0. -7.592081e-13 -6.8993e-06 0.2 8.3041e-06 0. -1.3348e-12 -8.3041e-06 0.3 9.1086e-06 0. -2.2608e-12 -9.1086e-06 0.4 9.7671e-06 0. -3.7054e-12 -9.7671e-06 0.5 1.03618e-05 0. -5.8946e-12 -1.03618e-05 0.6 1.0922e-05 0. -9.1261e-12 -1.09219e-05 0.7 1.14613e-05 0. -1.37837e-11 -1.14613e-05 0.8 1.19875e-05 0. -2.03517e-11 -1.19875e-05 0.9 1.25054e-05 0. -2.94303e-11 -1.25054e-05 1.00000 1.30181e-05 0. -4.17516e-11 -1.3018e-05 1.10000 1.35277e-05 0. -5.81946e-11 -1.35276e-05 1.20000 1.40358e-05 0. -7.98001e-11 -1.40357e-05 0. 0. 0. 0. 0. 0.1 4.67727e-05 0. -1.541475e-13 -4.67727e-05 0.2 6.55825e-05 0. -3.023699e-13 -6.55825e-05 0.3 7.38374e-05 0. -5.651112e-13 -7.38374e-05 0.4 7.89565e-05 0. -1.0121e-12 -7.89565e-05 0.5 8.28115e-05 0. -1.7448e-12 -8.28115e-05 0.6 8.60177e-05 0. -2.9057e-12 -8.60177e-05 0.7 8.88356e-05 0. -4.6902e-12 -8.88356e-05 0.8 9.13964e-05 0. -7.3583e-12 -9.13964e-05 0.9 9.37746e-05 0. -1.1249e-11 -9.37746e-05 1.00000 9.60167e-05 0. -1.67943e-11 -9.60167e-05 1.10000 9.81535e-05 0. -2.45347e-11 -9.81535e-05 1.20000 0.0001002067 0. -3.51343e-11 -0.0001002066 0. 0. 0. 0. 0. 0.1 9.22922e-05 0. -2.23927e-14 -9.22922e-05 0.2 0.0001455986 0. -5.0818e-14 -0.0001455986 0.3 0.0001722362 0. -1.081153e-13 -0.0001722362 0.4 0.0001876164 0. -2.173931e-13 -0.0001876164 0.5 0.000198064 0. -4.157264e-13 -0.000198064 0.6 0.0002060083 0. -7.601232e-13 -0.0002060083 0.7 0.000212509 0. -1.335e-12 -0.000212509 0.8 0.0002180905 0. -2.2609e-12 -0.0002180905 0.9 0.000223042 0. -3.7054e-12 -0.0002230419 1.00000 0.0002275362 0. -5.8946e-12 -0.0002275362 1.10000 0.0002316843 0. -9.1262e-12 -0.0002316843 1.20000 0.0002355611 0. -1.37838e-11 -0.0002355611 0. 0. 0. 0. 0. 0.1 0.0001256408 0. -2.0627e-15 -0.0001256408 0.2 0.0002131861 0. -5.7183e-15 -0.0002131861 0.3 0.0002639107 0. -1.45008e-14 -0.0002639107 0.4 0.0002941019 0. -3.40425e-14 -0.0002941019 0.5 0.0003140578 0. -7.46853e-14 -0.0003140578 0.6 0.000328584 0. -1.543333e-13 -0.000328584 0.7 0.0003399623 0. -3.024146e-13 -0.0003399623 0.8 0.0003493618 0. -5.651352e-13 -0.0003493618 0.9 0.0003574304 0. -1.0122e-12 -0.0003574304 1.00000 0.0003645532 0. -1.7448e-12 -0.0003645532 1.10000 0.0003709734 0. -2.9057e-12 -0.0003709734 1.20000 0.0003768527 0. -4.6902e-12 -0.0003768527 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_ig_lw.standard0000644000175000017500000000647114163340332025003 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 3.4196e-06 7.668099e-10 -1.155541e-10 -3.4203e-06 0.35 1.90878e-05 5.3909e-09 -8.89421e-11 -1.90932e-05 0.45 4.33637e-05 1.81766e-08 -6.50353e-11 -4.33818e-05 0.55 6.87014e-05 4.22026e-08 -5.11528e-11 -6.87435e-05 0.65 9.2251e-05 8.14842e-08 -4.31977e-11 -9.23325e-05 0.75 0.0001130003 1.413953e-07 -3.84133e-11 -0.0001131416 0.85 0.0001306573 2.289303e-07 -3.54491e-11 -0.0001308862 0.95 0.0001452718 3.53094e-07 -3.37317e-11 -0.0001456249 1.05000 0.0001570626 5.25408e-07 -3.33817e-11 -0.000157588 1.15000 0.0001663247 7.605481e-07 -3.57915e-11 -0.0001670852 0.25 6.6779e-06 4.817223e-10 -1.176605e-10 -6.6782e-06 0.35 4.13359e-05 2.4301e-09 -9.96264e-11 -4.13382e-05 0.45 0.0001212474 6.3042e-09 -8.15572e-11 -0.0001212536 0.55 0.0002473828 1.16886e-08 -6.83404e-11 -0.0002473944 0.65 0.0004141869 1.83579e-08 -5.91514e-11 -0.0004142052 0.75 0.0006140389 2.62571e-08 -5.2761e-11 -0.0006140651 0.85 0.0008392088 3.54124e-08 -4.82715e-11 -0.0008392442 0.95 0.0010826 4.59095e-08 -4.50846e-11 -0.0010827 1.05000 0.0013381 5.79299e-08 -4.28074e-11 -0.0013381 1.15000 0.0016 7.18353e-08 -4.11876e-11 -0.0016 0.25 7.662139e-07 9.86944e-11 -4.25149e-11 -7.662701e-07 0.35 1.55472e-05 1.4036e-09 -3.5687e-11 -1.55486e-05 0.45 5.17657e-05 6.6932e-09 -2.53071e-11 -5.17724e-05 0.55 9.13018e-05 1.74079e-08 -1.9204e-11 -9.13192e-05 0.65 0.0001277232 3.53225e-08 -1.58664e-11 -0.0001277585 0.75 0.0001593447 6.29713e-08 -1.3923e-11 -0.0001594077 0.85 0.0001858446 1.036885e-07 -1.27291e-11 -0.0001859483 0.95 0.0002074483 1.617807e-07 -1.19904e-11 -0.00020761 1.05000 0.0002246208 2.427699e-07 -1.16583e-11 -0.0002248635 1.15000 0.0002379156 3.537008e-07 -1.22618e-11 -0.0002382693 0.25 1.6398e-06 8.36607e-11 -4.2598e-11 -1.6398e-06 0.35 3.03812e-05 8.292916e-10 -3.75655e-11 -3.03819e-05 0.45 0.0001284245 2.8538e-09 -3.02442e-11 -0.0001284273 0.55 0.0003003447 5.8366e-09 -2.48024e-11 -0.0003003505 0.65 0.0005347821 9.6328e-09 -2.10961e-11 -0.0005347917 0.75 0.0008173512 1.42104e-08 -1.85855e-11 -0.0008173654 0.85 0.0011349 1.95564e-08 -1.6869e-11 -0.0011349 0.95 0.0014765 2.56579e-08 -1.56825e-11 -0.0014765 1.05000 0.0018336 3.25129e-08 -1.48569e-11 -0.0018337 1.15000 0.0021993 4.01517e-08 -1.42851e-11 -0.0021993 0.25 9.5999e-06 6.9881e-09 -3.183777e-10 -9.6065e-06 0.35 2.24659e-05 2.52958e-08 -2.373291e-10 -2.24909e-05 0.45 3.74982e-05 6.33389e-08 -1.84263e-10 -3.75613e-05 0.55 5.25632e-05 1.290548e-07 -1.526823e-10 -5.26921e-05 0.65 6.66235e-05 2.326227e-07 -1.335446e-10 -6.6856e-05 0.75 7.91901e-05 3.872259e-07 -1.216916e-10 -7.95772e-05 0.85 9.00667e-05 6.098405e-07 -1.146225e-10 -9.06764e-05 0.95 9.92237e-05 9.22209e-07 -1.116284e-10 -0.0001001458 1.05000 0.0001067266 1.3521e-06 -1.138254e-10 -0.0001080785 1.15000 0.0001126906 1.9346e-06 -1.246955e-10 -0.0001146251 0.25 2.14771e-05 2.7836e-09 -3.53908e-10 -2.14796e-05 0.35 6.15324e-05 7.9477e-09 -2.948168e-10 -6.154e-05 0.45 0.0001285558 1.62866e-08 -2.471702e-10 -0.0001285718 0.55 0.0002219178 2.76088e-08 -2.123553e-10 -0.0002219452 0.65 0.0003386022 4.20651e-08 -1.872212e-10 -0.0003386441 0.75 0.0004743658 6.01952e-08 -1.689113e-10 -0.0004744259 0.85 0.0006244249 8.2881e-08 -1.554292e-10 -0.0006245076 0.95 0.000783876 1.113471e-07 -1.454583e-10 -0.0007839872 1.05000 0.0009479616 1.472143e-07 -1.381791e-10 -0.0009481087 1.15000 0.0011122 1.925924e-07 -1.331935e-10 -0.0011124 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_ig_sw.standard0000644000175000017500000000652114163340332025035 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 8.22620015980999e-15 3.04120005908125e-15 3.04120005908125e-15 -0.8 6.311e-24 7.98730015516889e-15 3.14060006101228e-15 3.14060006101228e-15 -0.4 6.605e-19 8.07690015690955e-15 3.31170006433624e-15 3.31170006433624e-15 1.11022302462516e-16 -1.53838e-14 8.48750016488625e-15 3.60170006997005e-15 3.60170006997005e-15 0.4 -2.33853e-08 1.32395002572031e-14 6.23080012104545e-15 6.23080012104545e-15 0.8 -3.007966e-07 1.91342003717192e-14 9.44130018341568e-15 9.44130018341568e-15 1.2 -1.1603e-06 1.89901003689198e-14 9.39190018245599e-15 9.39190018245599e-15 -1.2 2.980e-23 7.99050015523106e-15 2.93730005706279e-15 2.99780005823812e-15 -0.8 2.6619e-18 7.72580015008874e-15 3.00590005839547e-15 3.07550005974759e-15 -0.4 3.314027e-13 7.71480014987505e-15 3.15210006123569e-15 3.15790006134837e-15 1.11022302462516e-16 5.07003e-08 7.92300015391974e-15 3.42080006645572e-15 3.25890006331049e-15 0.4 0.0030722 1.15155002237111e-14 7.30020014182063e-15 3.33760006483939e-15 0.8 0.012693 1.69790003298502e-14 1.29018002506426e-14 3.63010007052178e-15 1.2 0.0120455 1.737020033745e-14 1.29792002521463e-14 4.01260007795259e-15 -1.2 0. 8.14960015832188e-15 3.04280005911233e-15 3.04280005911233e-15 -0.8 0. 7.94710015438793e-15 3.14200006103948e-15 3.14200006103948e-15 -0.4 2.113e-23 8.05190015642387e-15 3.31310006436343e-15 3.31310006436343e-15 1.11022302462516e-16 -2.79552e-17 8.47020016455017e-15 3.60300006999531e-15 3.60300006999531e-15 0.4 -6.9762e-09 1.16854002270117e-14 5.39470010480258e-15 5.39470010480258e-15 0.8 -1.450751e-07 1.94513003778795e-14 9.61030018669883e-15 9.61030018669883e-15 1.2 -5.669271e-07 1.91569003721602e-14 9.48220018421024e-15 9.48220018421024e-15 -1.2 0. 7.91830015382843e-15 2.93740005706473e-15 3.00150005831e-15 -0.8 5.580e-24 7.68730014934081e-15 3.0062000584013e-15 3.07800005979616e-15 -0.4 4.39745e-17 7.69040014940103e-15 3.15270006124735e-15 3.15990006138722e-15 1.11022302462516e-16 4.463651e-10 7.90590015358754e-15 3.42130006646543e-15 3.26070006334546e-15 0.4 0.0024703 1.08168002101375e-14 6.55290012730287e-15 3.3451000649851e-15 0.8 0.0150068 1.73435003369313e-14 1.33121002586135e-14 3.60600007005359e-15 1.2 0.0141764 1.75495003409333e-14 1.31923002562862e-14 3.99000007751354e-15 -1.2 8.497e-22 8.36800016256473e-15 3.03830005902491e-15 3.03830005902491e-15 -0.8 2.4045e-18 8.05790015654043e-15 3.13840006096955e-15 3.13840006096955e-15 -0.4 6.5066e-15 8.11970015774102e-15 3.30940006429155e-15 3.30940006429155e-15 1.11022302462516e-16 -5.6372e-12 8.52220016556037e-15 3.60250006998559e-15 3.60250006998559e-15 0.4 -8.48374e-08 1.47675002868875e-14 7.05650013708628e-15 7.05650013708628e-15 0.8 -7.270608e-07 1.87008003632995e-14 9.21060017893388e-15 9.21060017893388e-15 1.2 -2.7248e-06 1.87218003637075e-14 9.24740017964879e-15 9.24740017964879e-15 -1.2 7.39606e-17 8.12400015782456e-15 2.93670005705113e-15 2.99160005811767e-15 -0.8 2.101059e-13 7.79360015140589e-15 3.00540005838576e-15 3.07140005966794e-15 -0.4 7.904519e-10 7.75660015068709e-15 3.15110006121627e-15 3.15460006128426e-15 1.11022302462516e-16 3.5162e-06 7.95720015458414e-15 3.42570006655091e-15 3.25590006325221e-15 0.4 0.0038656 1.23303002395401e-14 8.16280015857832e-15 3.34000006488602e-15 0.8 0.0102815 1.65353003212305e-14 1.23792002404901e-14 3.68210007153198e-15 1.2 0.0095552 1.71473003331198e-14 1.26468002456888e-14 4.10660007977872e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_diode_sw.standard0000644000175000017500000001760714163340332025335 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 1.1066e-06 0. -6.76515e-16 -1.1066e-06 0.2 1.3059e-06 0. -6.906776e-16 -1.3059e-06 0.3 1.4918e-06 0. -6.909741e-16 -1.4918e-06 0.4 1.6791e-06 0. -6.909803e-16 -1.6791e-06 0.5 1.8726e-06 0. -6.909805e-16 -1.8726e-06 0.6 2.0751e-06 0. -6.909805e-16 -2.0751e-06 0.7 2.2881e-06 0. -6.909805e-16 -2.2881e-06 0.8 2.5129e-06 0. -6.909805e-16 -2.5129e-06 0.9 2.7507e-06 0. -6.909805e-16 -2.7507e-06 1.00000 3.0023e-06 0. -6.909805e-16 -3.0023e-06 1.10000 3.2687e-06 0. -6.909805e-16 -3.2687e-06 1.20000 3.5506e-06 0. -6.909805e-16 -3.5506e-06 0. 0. 0. 0. 0. 0.1 1.96197e-05 0. -6.76515e-16 -1.96197e-05 0.2 2.28027e-05 0. -6.906776e-16 -2.28027e-05 0.3 2.55944e-05 0. -6.909741e-16 -2.55944e-05 0.4 2.82913e-05 0. -6.909803e-16 -2.82913e-05 0.5 3.09827e-05 0. -6.909805e-16 -3.09827e-05 0.6 3.37111e-05 0. -6.909805e-16 -3.37111e-05 0.7 3.65005e-05 0. -6.909805e-16 -3.65005e-05 0.8 3.93663e-05 0. -6.909805e-16 -3.93663e-05 0.9 4.23187e-05 0. -6.909805e-16 -4.23187e-05 1.00000 4.53658e-05 0. -6.909805e-16 -4.53658e-05 1.10000 4.85133e-05 0. -6.909805e-16 -4.85133e-05 1.20000 5.17664e-05 0. -6.909805e-16 -5.17664e-05 0. 0. 0. 0. 0. 0.1 0.0008561601 0. -6.76515e-16 -0.0008561601 0.2 0.0010642 0. -6.906776e-16 -0.0010642 0.3 0.0011496 0. -6.909741e-16 -0.0011496 0.4 0.0012158 0. -6.909803e-16 -0.0012158 0.5 0.0012729 0. -6.909805e-16 -0.0012729 0.6 0.0013244 0. -6.909805e-16 -0.0013244 0.7 0.0013722 0. -6.909805e-16 -0.0013722 0.8 0.0014174 0. -6.909805e-16 -0.0014174 0.9 0.0014606 0. -6.909805e-16 -0.0014606 1.00000 0.0015024 0. -6.909805e-16 -0.0015024 1.10000 0.0015431 0. -6.909805e-16 -0.0015431 1.20000 0.0015828 0. -6.909805e-16 -0.0015828 0. 0. 0. 0. 0. 0.1 0.0021732 0. -6.76515e-16 -0.0021732 0.2 0.0032916 0. -6.906776e-16 -0.0032916 0.3 0.0036511 0. -6.909741e-16 -0.0036511 0.4 0.0038547 0. -6.909803e-16 -0.0038547 0.5 0.0040113 0. -6.909805e-16 -0.0040113 0.6 0.0041431 0. -6.909805e-16 -0.0041431 0.7 0.0042588 0. -6.909805e-16 -0.0042588 0.8 0.0043633 0. -6.909805e-16 -0.0043633 0.9 0.0044593 0. -6.909805e-16 -0.0044593 1.00000 0.0045489 0. -6.909805e-16 -0.0045489 1.10000 0.0046334 0. -6.909805e-16 -0.0046334 1.20000 0.0047137 0. -6.909805e-16 -0.0047137 0. 0. 0. 0. 0. 0.1 0.0031267 0. -6.76515e-16 -0.0031267 0.2 0.005291 0. -6.906776e-16 -0.005291 0.3 0.0062516 0. -6.909741e-16 -0.0062516 0.4 0.0066825 0. -6.909803e-16 -0.0066825 0.5 0.0069694 0. -6.909805e-16 -0.0069694 0.6 0.0071968 0. -6.909805e-16 -0.0071968 0.7 0.0073895 0. -6.909805e-16 -0.0073895 0.8 0.0075589 0. -6.909805e-16 -0.0075589 0.9 0.0077111 0. -6.909805e-16 -0.0077111 1.00000 0.0078504 0. -6.909805e-16 -0.0078504 1.10000 0.0079793 0. -6.909805e-16 -0.0079793 1.20000 0.0080999 0. -6.909805e-16 -0.0080999 0. 0. 0. 0. 0. 0.1 5.87377e-08 0. -4.697e-23 -5.87377e-08 0.2 7.17946e-08 0. -4.723e-23 -7.17946e-08 0.3 8.51354e-08 0. -4.723e-23 -8.51354e-08 0.4 9.94247e-08 0. -4.723e-23 -9.94247e-08 0.5 1.149723e-07 0. -4.723e-23 -1.149723e-07 0.6 1.319959e-07 0. -4.723e-23 -1.319959e-07 0.7 1.506828e-07 0. -4.723e-23 -1.506828e-07 0.8 1.712112e-07 0. -4.723e-23 -1.712112e-07 0.9 1.937593e-07 0. -4.723e-23 -1.937593e-07 1.00000 2.185106e-07 0. -4.723e-23 -2.185106e-07 1.10000 2.456562e-07 0. -4.723e-23 -2.456562e-07 1.20000 2.753972e-07 0. -4.723e-23 -2.753972e-07 0. 0. 0. 0. 0. 0.1 3.3262e-06 0. -4.697e-23 -3.3262e-06 0.2 3.997e-06 0. -4.723e-23 -3.997e-06 0.3 4.6509e-06 0. -4.723e-23 -4.6509e-06 0.4 5.3265e-06 0. -4.723e-23 -5.3265e-06 0.5 6.039e-06 0. -4.723e-23 -6.039e-06 0.6 6.797e-06 0. -4.723e-23 -6.797e-06 0.7 7.6065e-06 0. -4.723e-23 -7.6065e-06 0.8 8.4726e-06 0. -4.723e-23 -8.4726e-06 0.9 9.3996e-06 0. -4.723e-23 -9.3996e-06 1.00000 1.03918e-05 0. -4.723e-23 -1.03918e-05 1.10000 1.14531e-05 0. -4.723e-23 -1.14531e-05 1.20000 1.25875e-05 0. -4.723e-23 -1.25875e-05 0. 0. 0. 0. 0. 0.1 0.0009088165 0. -4.697e-23 -0.0009088165 0.2 0.0010668 0. -4.723e-23 -0.0010668 0.3 0.0011535 0. -4.723e-23 -0.0011535 0.4 0.0012236 0. -4.723e-23 -0.0012236 0.5 0.0012852 0. -4.723e-23 -0.0012852 0.6 0.0013416 0. -4.723e-23 -0.0013416 0.7 0.0013946 0. -4.723e-23 -0.0013946 0.8 0.0014451 0. -4.723e-23 -0.0014451 0.9 0.001494 0. -4.723e-23 -0.001494 1.00000 0.0015415 0. -4.723e-23 -0.0015415 1.10000 0.0015881 0. -4.723e-23 -0.0015881 1.20000 0.0016338 0. -4.723e-23 -0.0016338 0. 0. 0. 0. 0. 0.1 0.002643 0. -4.697e-23 -0.002643 0.2 0.003789 0. -4.723e-23 -0.003789 0.3 0.0041277 0. -4.723e-23 -0.0041277 0.4 0.0043509 0. -4.723e-23 -0.0043509 0.5 0.0045281 0. -4.723e-23 -0.0045281 0.6 0.0046784 0. -4.723e-23 -0.0046784 0.7 0.004811 0. -4.723e-23 -0.004811 0.8 0.0049311 0. -4.723e-23 -0.0049311 0.9 0.005042 0. -4.723e-23 -0.005042 1.00000 0.0051457 0. -4.723e-23 -0.0051457 1.10000 0.0052438 0. -4.723e-23 -0.0052438 1.20000 0.0053373 0. -4.723e-23 -0.0053373 0. 0. 0. 0. 0. 0.1 0.0038738 0. -4.697e-23 -0.0038738 0.2 0.0063358 0. -4.723e-23 -0.0063358 0.3 0.0072589 0. -4.723e-23 -0.0072589 0.4 0.0077008 0. -4.723e-23 -0.0077008 0.5 0.0080221 0. -4.723e-23 -0.0080221 0.6 0.008283 0. -4.723e-23 -0.008283 0.7 0.0085056 0. -4.723e-23 -0.0085056 0.8 0.0087016 0. -4.723e-23 -0.0087016 0.9 0.0088782 0. -4.723e-23 -0.0088782 1.00000 0.0090398 0. -4.723e-23 -0.0090398 1.10000 0.0091897 0. -4.723e-23 -0.0091897 1.20000 0.00933 0. -4.723e-23 -0.00933 0. 0. 0. 0. 0. 0.1 1.70499e-05 0. -9.303029e-10 -1.70489e-05 0.2 2.02002e-05 0. -9.902234e-10 -2.01992e-05 0.3 2.24254e-05 0. -9.940829e-10 -2.24245e-05 0.4 2.44318e-05 0. -9.943315e-10 -2.44308e-05 0.5 2.63581e-05 0. -9.943475e-10 -2.63571e-05 0.6 2.82579e-05 0. -9.943485e-10 -2.82569e-05 0.7 3.01578e-05 0. -9.943486e-10 -3.01568e-05 0.8 3.20734e-05 0. -9.943486e-10 -3.20724e-05 0.9 3.40146e-05 0. -9.943486e-10 -3.40136e-05 1.00000 3.59883e-05 0. -9.943486e-10 -3.59873e-05 1.10000 3.79996e-05 0. -9.943486e-10 -3.79986e-05 1.20000 4.0052e-05 0. -9.943486e-10 -4.00511e-05 0. 0. 0. 0. 0. 0.1 9.41537e-05 0. -9.303029e-10 -9.41528e-05 0.2 0.0001124466 0. -9.902234e-10 -0.0001124456 0.3 0.0001235605 0. -9.940829e-10 -0.0001235595 0.4 0.0001328934 0. -9.943315e-10 -0.0001328924 0.5 0.0001414506 0. -9.943475e-10 -0.0001414496 0.6 0.0001495972 0. -9.943485e-10 -0.0001495962 0.7 0.0001575088 0. -9.943486e-10 -0.0001575078 0.8 0.0001652839 0. -9.943486e-10 -0.0001652829 0.9 0.0001729835 0. -9.943486e-10 -0.0001729825 1.00000 0.0001806481 0. -9.943486e-10 -0.0001806471 1.10000 0.0001883056 0. -9.943486e-10 -0.0001883046 1.20000 0.0001959764 0. -9.943486e-10 -0.0001959754 0. 0. 0. 0. 0. 0.1 0.0008170578 0. -9.303029e-10 -0.0008170568 0.2 0.0011221 0. -9.902234e-10 -0.0011221 0.3 0.0012557 0. -9.940829e-10 -0.0012557 0.4 0.0013404 0. -9.943315e-10 -0.0013404 0.5 0.0014055 0. -9.943475e-10 -0.0014055 0.6 0.0014603 0. -9.943485e-10 -0.0014603 0.7 0.001509 0. -9.943486e-10 -0.001509 0.8 0.0015535 0. -9.943486e-10 -0.0015535 0.9 0.0015951 0. -9.943486e-10 -0.0015951 1.00000 0.0016345 0. -9.943486e-10 -0.0016345 1.10000 0.0016722 0. -9.943486e-10 -0.0016722 1.20000 0.0017086 0. -9.943486e-10 -0.0017086 0. 0. 0. 0. 0. 0.1 0.0017283 0. -9.303029e-10 -0.0017283 0.2 0.0026825 0. -9.902234e-10 -0.0026825 0.3 0.0031469 0. -9.940829e-10 -0.0031469 0.4 0.0034153 0. -9.943315e-10 -0.0034153 0.5 0.0035993 0. -9.943475e-10 -0.0035993 0.6 0.0037405 0. -9.943485e-10 -0.0037405 0.7 0.003857 0. -9.943486e-10 -0.003857 0.8 0.0039576 0. -9.943486e-10 -0.0039576 0.9 0.0040473 0. -9.943486e-10 -0.0040473 1.00000 0.004129 0. -9.943486e-10 -0.004129 1.10000 0.0042047 0. -9.943486e-10 -0.0042047 1.20000 0.0042757 0. -9.943486e-10 -0.0042757 0. 0. 0. 0. 0. 0.1 0.002414 0. -9.303029e-10 -0.002414 0.2 0.004045 0. -9.902234e-10 -0.004045 0.3 0.0049631 0. -9.940829e-10 -0.004963 0.4 0.0055043 0. -9.943315e-10 -0.0055043 0.5 0.0058626 0. -9.943475e-10 -0.0058626 0.6 0.0061247 0. -9.943485e-10 -0.0061247 0.7 0.0063312 0. -9.943486e-10 -0.0063312 0.8 0.0065027 0. -9.943486e-10 -0.0065027 0.9 0.0066506 0. -9.943486e-10 -0.0066506 1.00000 0.0067817 0. -9.943486e-10 -0.0067817 1.10000 0.0069001 0. -9.943486e-10 -0.0069001 1.20000 0.0070089 0. -9.943486e-10 -0.0070089 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_gidl_lt.standard0000644000175000017500000000632014163340332025176 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 0. 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 0. 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 0. 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 0. 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 0. 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 0. 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 -6.9255e-09 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 -3.6848e-09 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 -1.7331e-09 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.72798e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09894e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.000135495 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440625 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 0. 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 0. 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 0. 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 0. 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 0. 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 0. 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 -6.9147e-09 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 -3.678e-09 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 -1.7312e-09 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.30465e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63205e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900561 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034134 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 0. 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 0. 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 0. 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 0. 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 0. 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 0. 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 0. 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 -6.9428e-09 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 -3.6951e-09 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 -6.193551e-10 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1934e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25256e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84376e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51706e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_ig_lt.standard0000644000175000017500000000626314163340332024777 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 4.381033e-07 8.25278e-11 -6.9985e-12 -4.381789e-07 0.35 1.5168e-06 4.167048e-10 -4.7094e-12 -1.5172e-06 0.45 2.8387e-06 1.1836e-09 -3.3211e-12 -2.8399e-06 0.55 4.1339e-06 2.5454e-09 -2.5938e-12 -4.1364e-06 0.65 5.3071e-06 4.7194e-09 -2.1889e-12 -5.3118e-06 0.75 6.3254e-06 7.9906e-09 -1.9479e-12 -6.3334e-06 0.85 7.1831e-06 1.27283e-08 -1.7995e-12 -7.1958e-06 0.95 7.8875e-06 1.94064e-08 -1.7147e-12 -7.9069e-06 1.05000 8.4525e-06 2.86304e-08 -1.7015e-12 -8.4811e-06 1.15000 8.8942e-06 4.11707e-08 -1.8356e-12 -8.9354e-06 0.25 8.616738e-07 4.48766e-11 -7.4344e-12 -8.617113e-07 0.35 3.6472e-06 1.645825e-10 -5.7843e-12 -3.6474e-06 0.45 8.901e-06 3.655229e-10 -4.535e-12 -8.9014e-06 0.55 1.64935e-05 6.318154e-10 -3.7072e-12 -1.64941e-05 0.65 2.60764e-05 9.565066e-10 -3.1602e-12 -2.60774e-05 0.75 3.72444e-05 1.3386e-09 -2.7914e-12 -3.72458e-05 0.85 4.9606e-05 1.7806e-09 -2.5371e-12 -4.96078e-05 0.95 6.28084e-05 2.2884e-09 -2.3582e-12 -6.28107e-05 1.05000 7.65371e-05 2.8746e-09 -2.2304e-12 -7.654e-05 1.15000 9.05005e-05 3.563e-09 -2.1382e-12 -9.05041e-05 0.25 1.801445e-07 1.39253e-11 -2.7955e-12 -1.801557e-07 0.35 1.5206e-06 1.292686e-10 -1.9486e-12 -1.5207e-06 0.45 3.5643e-06 4.571252e-10 -1.2992e-12 -3.5647e-06 0.55 5.5868e-06 1.0663e-09 -9.761102e-13 -5.5879e-06 0.65 7.3967e-06 2.0567e-09 -8.054362e-13 -7.3987e-06 0.75 8.9442e-06 3.5634e-09 -7.070825e-13 -8.9477e-06 0.85 1.02277e-05 5.7618e-09 -6.469251e-13 -1.02335e-05 0.95 1.12661e-05 8.8782e-09 -6.09886e-13 -1.1275e-05 1.05000 1.20868e-05 1.32018e-08 -5.93936e-13 -1.21e-05 1.15000 1.27192e-05 1.91017e-08 -6.280242e-13 -1.27383e-05 0.25 3.56108e-07 1.02609e-11 -2.8278e-12 -3.561154e-07 0.35 3.201e-06 6.50448e-11 -2.2188e-12 -3.2011e-06 0.45 9.984e-06 1.727916e-10 -1.6908e-12 -9.9842e-06 0.55 2.04764e-05 3.214361e-10 -1.3467e-12 -2.04768e-05 0.65 3.39864e-05 5.069211e-10 -1.1263e-12 -3.39869e-05 0.75 4.97759e-05 7.281877e-10 -9.821763e-13 -4.97766e-05 0.85 6.71991e-05 9.84668e-10 -8.857723e-13 -6.72001e-05 0.95 8.57309e-05 1.2761e-09 -8.199382e-13 -8.57322e-05 1.05000 0.0001049511 1.6032e-09 -7.743408e-13 -0.0001049527 1.15000 0.0001245134 1.9691e-09 -7.426126e-13 -0.0001245154 0.25 7.83541e-07 5.456716e-10 -1.732e-11 -7.840693e-07 0.35 1.5246e-06 1.6956e-09 -1.22049e-11 -1.5263e-06 0.45 2.3185e-06 3.9112e-09 -9.3353e-12 -2.3224e-06 0.55 3.0855e-06 7.6126e-09 -7.7137e-12 -3.0931e-06 0.65 3.787e-06 1.33416e-08 -6.7502e-12 -3.8003e-06 0.75 4.4056e-06 2.17974e-08 -6.1597e-12 -4.4274e-06 0.85 4.9358e-06 3.38782e-08 -5.8123e-12 -4.9697e-06 0.95 5.3788e-06 5.07329e-08 -5.6752e-12 -5.4295e-06 1.05000 5.7395e-06 7.3824e-08 -5.8119e-12 -5.8133e-06 1.15000 6.0246e-06 1.050078e-07 -6.4095e-12 -6.1296e-06 0.25 1.9088e-06 1.930243e-10 -2.10786e-11 -1.909e-06 0.35 4.6432e-06 4.774615e-10 -1.66677e-11 -4.6436e-06 0.45 8.7996e-06 9.060415e-10 -1.35474e-11 -8.8005e-06 0.55 1.42833e-05 1.476e-09 -1.14073e-11 -1.42848e-05 0.65 2.09054e-05 2.2024e-09 -9.9184e-12 -2.09076e-05 0.75 2.84296e-05 3.1177e-09 -8.8598e-12 -2.84327e-05 0.85 3.66004e-05 4.2707e-09 -8.0932e-12 -3.66047e-05 0.95 4.51615e-05 5.7275e-09 -7.5323e-12 -4.51672e-05 1.05000 5.38674e-05 7.5753e-09 -7.1246e-12 -5.3875e-05 1.15000 6.24925e-05 9.9268e-09 -6.8437e-12 -6.25024e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_ig_lw.standard0000644000175000017500000001650314163340332024662 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0010571 1.26862802464557e-13 3.24106006296392e-14 8.89625017282702e-14 0 -3.15667e-08 1.16396702261233e-13 5.48652010658636e-14 5.48652010658636e-14 0.2 0.000383764 8.18013015891499e-14 6.59897012819787e-14 5.74990011170303e-15 0.4 0.000412456 8.03619015611868e-14 6.48470012597795e-14 5.46590010618577e-15 0.6 0.0004377884 7.91723015380764e-14 6.38412012402399e-14 5.32430010343492e-15 0.8 0.0004613189 7.80297015158792e-14 6.28672012213181e-14 5.19770010097547e-15 1 0.0004835971 7.69301014945173e-14 6.19130012027809e-14 5.09370009895506e-15 1.2 0.0005049353 7.58650014738257e-14 6.09762011845817e-14 5.0062000972552e-15 -0.2 -0.0009078117 1.46669002849332e-13 6.25913012159582e-14 8.09656015729148e-14 0 -1.607686e-07 1.48751002889779e-13 7.27933014141519e-14 7.27933014141519e-14 0.2 0.0010583 1.31260002549982e-13 8.78393017064498e-14 3.87492007527788e-14 0.4 0.0014768 1.09069302118884e-13 9.48038018417488e-14 7.79850015150108e-15 0.6 0.0015477 1.07008202078843e-13 9.3660501819538e-14 6.83640013281041e-15 0.8 0.0016007 1.05812002055605e-13 9.27194018012553e-14 6.6148001285054e-15 1 0.0016469 1.0471640203432e-13 9.18245017838701e-14 6.45170012533686e-15 1.2 0.0016885 1.03673302014056e-13 9.09495017668715e-14 6.32130012280359e-15 -0.2 -0.000585173 1.4825640288017e-13 7.09369013780877e-14 7.4798201453101e-14 0 -4.41506e-07 1.51000802933485e-13 7.42286014420354e-14 7.42286014420354e-14 0.2 0.0008491559 1.47013102856016e-13 7.97233015487807e-14 6.43813012507324e-14 0.4 0.0018651 1.26766802462693e-13 9.52649018507066e-14 2.71769005279643e-14 0.6 0.002248 1.13153802198233e-13 9.81990019077072e-14 9.76730018974887e-15 0.8 0.0023529 1.10640702149412e-13 9.72044018883852e-14 8.17410015879785e-15 1 0.0024223 1.09366002124648e-13 9.63162018711302e-14 7.80400015160793e-15 1.2 0.0024803 1.08300102103941e-13 9.5494501855167e-14 7.58810014741365e-15 -0.2 -0.0003128914 1.4598380283602e-13 7.38579014348339e-14 6.98623013572115e-14 0 -1.0078e-06 1.48678802888376e-13 7.31956014219674e-14 7.31956014219674e-14 0.2 0.000531977 1.47723802869823e-13 7.37794014333088e-14 7.15104013892291e-14 0.4 0.0013539 1.40235702724352e-13 8.37226016264749e-14 5.35874010410398e-14 0.6 0.0022637 1.21740002365037e-13 9.48024018417216e-14 2.29987004467946e-14 0.8 0.002621 1.12005902175933e-13 9.61522018679441e-14 1.14431002223045e-14 1 0.0027481 1.092760021229e-13 9.53123018516274e-14 9.47690018410728e-15 1.2 0.0028266 1.07897202096114e-13 9.4491101835674e-14 8.9228001733428e-15 -0.2 -0.001609 1.22891202387401e-13 2.04787003978387e-14 9.64629018739801e-14 0 -1.12839e-08 1.05904902057409e-13 4.9060500953096e-14 4.9060500953096e-14 0.2 0.0003251743 7.3480801427508e-14 5.73963011150351e-14 5.27510010247911e-15 0.4 0.0003606812 7.23885014062879e-14 5.63432010945766e-14 5.2835001026423e-15 0.6 0.0003927676 7.1245301384079e-14 5.53874010760084e-14 5.14280009990893e-15 0.8 0.000422902 7.01455013627132e-14 5.44582010579568e-14 5.01840009749221e-15 1 0.000451714 6.90893013421945e-14 5.35485010402841e-14 4.91760009553398e-15 1.2 0.0004795332 6.80685013223635e-14 5.2657001022965e-14 4.83350009390017e-15 -0.2 -0.001389 1.49778602909742e-13 6.24609012134249e-14 8.43831016393064e-14 0 -7.28188e-08 1.53175602975735e-13 7.51297014595411e-14 7.51297014595411e-14 0.2 0.0016401 1.29178002509535e-13 9.48103018418751e-14 2.94417005719625e-14 0.4 0.0020365 1.12432102184213e-13 9.94695019323892e-14 6.79390013198477e-15 0.6 0.0021413 1.11232802160914e-13 9.84714019129991e-14 6.62320012866859e-15 0.8 0.0022261 1.10081502138548e-13 9.7539801894901e-14 6.44040012511734e-15 1 0.0022991 1.08979502117139e-13 9.66311018772477e-14 6.28380012207508e-15 1.2 0.0023642 1.07924102096636e-13 9.5738801859913e-14 6.15700011961174e-15 -0.2 -0.0008616602 1.50911002931741e-13 7.15840013906589e-14 7.69773014954343e-14 0 -2.05476e-07 1.54256402996732e-13 7.59538014755508e-14 7.59538014755508e-14 0.2 0.0012915 1.50114402916265e-13 8.28453016094316e-14 6.45328012536756e-14 0.4 0.0028113 1.24189702412627e-13 1.01955301980681e-13 1.78337003464544e-14 0.6 0.0031623 1.16223702257872e-13 1.03220202005254e-13 8.20020015930489e-15 0.8 0.0032972 1.1496040223333e-13 1.02320501987775e-13 7.85080015251711e-15 1 0.0034031 1.13859502211943e-13 1.01467601971206e-13 7.62980014822376e-15 1.2 0.0034933 1.12812302191599e-13 1.00636401955058e-13 7.4416001445676e-15 -0.2 -0.0004379799 1.48024302875661e-13 7.44522014463793e-14 7.14586013882228e-14 0 -4.748933e-07 1.51050402934449e-13 7.4461401446558e-14 7.4461401446558e-14 0.2 0.0007785516 1.50261202919117e-13 7.5831301473171e-14 7.21566014017828e-14 0.4 0.0020366 1.41746002753693e-13 8.67511016853094e-14 5.21890010138732e-14 0.6 0.0033486 1.19129102314315e-13 1.00021801943119e-13 1.52751002967486e-14 0.8 0.0036777 1.13737002209563e-13 1.00259801947742e-13 9.46780018393049e-15 1 0.0038221 1.12441402184394e-13 9.94712019324222e-14 8.96720017420536e-15 1.2 0.0039324 1.11404302164246e-13 9.87150019177315e-14 8.70700016915047e-15 -0.2 -0.0006218784 1.29251702510967e-13 3.87613007530139e-14 8.53926016589179e-14 0 -1.064063e-07 1.23431502397898e-13 5.88208011427088e-14 5.88208011427088e-14 0.2 0.0003935457 9.49509018446066e-14 7.3451001426929e-14 1.27467002476295e-14 0.4 0.0004480144 8.75070016999943e-14 7.17312013935186e-14 6.36480012364866e-15 0.6 0.0004684477 8.55498016619718e-14 7.03119013659459e-14 5.78240011233441e-15 0.8 0.0004854195 8.42090016359242e-14 6.91995013443353e-14 5.57330010827223e-15 1 0.0005010248 8.3033201613082e-14 6.81882013246889e-14 5.44120010570593e-15 1.2 0.0005157412 8.1930201591654e-14 6.72238013059535e-14 5.33910010372244e-15 -0.2 -0.0005512161 1.41831702755358e-13 5.8345901133483e-14 8.00845015557977e-14 0 -4.284478e-07 1.43492502787622e-13 7.0018601360248e-14 7.0018601360248e-14 0.2 0.0006189674 1.31489402554438e-13 8.48711016487868e-14 4.21142008181505e-14 0.4 0.0009740316 1.13504402205044e-13 9.22971017930513e-14 1.5171500294736e-14 0.6 0.0010827 1.06156002062287e-13 9.0552501759159e-14 9.01490017513203e-15 0.8 0.0011309 1.0313350200357e-13 8.8839001725871e-14 7.56180014690272e-15 1 0.0011639 1.01340201968731e-13 8.75431017006956e-14 7.03360013664141e-15 1.2 0.0011909 9.99813019423319e-14 8.64611016796756e-14 6.76320013138836e-15 -0.2 -0.0003799039 1.43940802796331e-13 6.7226501306006e-14 7.39196014360325e-14 0 -1.1214e-06 1.46388202843876e-13 7.17839013945424e-14 7.17839013945424e-14 0.2 0.000520643 1.42149502761531e-13 7.89292015333538e-14 6.00395011663845e-14 0.4 0.0010648 1.29181302509599e-13 9.23651017943723e-14 3.27071006353992e-14 0.6 0.0013814 1.17538402283413e-13 9.53646018526435e-14 1.72565003352412e-14 0.8 0.0015278 1.11185202159989e-13 9.42025018300674e-14 1.1667400226662e-14 1 0.0016059 1.0770860209245e-13 9.26645018001888e-14 9.56170018575468e-15 1.2 0.0016576 1.05519302049918e-13 9.1346601774586e-14 8.62420016754192e-15 -0.2 -0.0002212835 1.42567802769658e-13 7.12962013850678e-14 6.87715013360206e-14 0 -2.5024e-06 1.45036202817611e-13 7.1254001384248e-14 7.1254001384248e-14 0.2 0.0003478719 1.43568102789091e-13 7.28678014155992e-14 6.80137013212989e-14 0.4 0.0008393052 1.36206902646085e-13 8.50756016527596e-14 4.79859009322198e-14 0.6 0.0012891 1.25617302440361e-13 9.24604017962237e-14 2.93892005709426e-14 0.8 0.0015762 1.17099502274886e-13 9.39822018257877e-14 1.88663003665147e-14 1 0.0017402 1.11634702168722e-13 9.31873018103452e-14 1.39117002702619e-14 1.2 0.0018397 1.08123402100508e-13 9.19336017859896e-14 1.15030002234682e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_ig_lw.standard0000644000175000017500000000712214163340332025203 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288983e-15 1258.93 1.0927564006002e-13 9.53119059792933e-14 9.47688274884048e-15 1584.89 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995.26 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511.89 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162.28 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981.07 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011.87 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309.57 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943.28 1.09276664567897e-13 9.53132791854431e-14 9.4769250142676e-15 10000 1.09275783926895e-13 9.53115292200125e-14 9.47692246669211e-15 12589.25 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848.93 1.09276031582681e-13 9.5312631632698e-14 9.47692490115591e-15 19952.62 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118.86 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622.78 1.09275780162271e-13 9.53124450565604e-14 9.47698962083786e-15 39810.72 1.0927602238714e-13 9.53121377669757e-14 9.47676386157643e-15 50118.72 1.09276059717827e-13 9.53121749406823e-14 9.4768201715675e-15 63095.73 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432.82 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 125892.54 1.09276014059111e-13 9.53122795246647e-14 9.47691737651631e-15 158489.32 1.09276017792978e-13 9.53122179251379e-14 9.47693475144662e-15 199526.23 1.09276015634006e-13 9.53122645884509e-14 9.47688956928716e-15 251188.64 1.09276024555722e-13 9.53122712055276e-14 9.47692697934026e-15 316227.77 1.09276042175139e-13 9.53122527818468e-14 9.47694019069255e-15 398107.17 1.09276030621809e-13 9.53122648831165e-14 9.47692448737011e-15 501187.23 1.09276053176795e-13 9.53122645022573e-14 9.47691487106397e-15 630957.34 1.09276033737846e-13 9.53122575399747e-14 9.47691770957772e-15 794328.23 1.09276051870338e-13 9.53122497661945e-14 9.47692627748105e-15 1000000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288984e-15 1258930 1.0927564006002e-13 9.53119059792933e-14 9.47688274884049e-15 1584890 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995260 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511890 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162280 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981070 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011870 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309570 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943280 1.09276664567897e-13 9.5313279185443e-14 9.47692701791021e-15 10000000 1.09275783926895e-13 9.53115292200124e-14 9.47692405824154e-15 12589250 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848930 1.09276031582681e-13 9.53126316326979e-14 9.47692389695599e-15 19952620 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118860 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622780 1.09276283454338e-13 9.53124450565603e-14 9.47698962083786e-15 39810720 1.0927602238714e-13 9.53121377669757e-14 9.47676386157642e-15 50118720 1.09276059717827e-13 9.53121749406823e-14 9.47682017156749e-15 63095730 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432820 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_diode_st.standard0000644000175000017500000001653114163340332025354 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0003997359 8.42107516359582e-16 1.98965203865287e-16 6.09900711848512e-16 0 0. 6.20575212055884e-16 2.80395405447228e-16 2.80395405447228e-16 0.2 5.36347e-05 5.52959010742308e-16 2.95160905734077e-16 1.9048640370057e-16 0.4 6.42727e-05 5.47663110639425e-16 2.97021305770218e-16 1.83905103572716e-16 0.6 7.39548e-05 5.41739010524337e-16 2.9919620581247e-16 1.76365103426236e-16 0.8 8.3437e-05 5.37823510448271e-16 3.01356805854444e-16 1.70824203318593e-16 1 9.29535e-05 5.35412810401439e-16 3.0345520589521e-16 1.66825303240907e-16 1.2 0.0001026006 5.33928510372603e-16 3.0547920593453e-16 1.63802103182175e-16 -0.2 -0.0004702468 9.35429518172544e-16 2.76508405371715e-16 6.39386712421335e-16 0 0. 9.57020418591989e-16 4.69372109118469e-16 4.69372109118469e-16 0.2 0.0004230113 8.55644116622557e-16 6.24515612132434e-16 2.02298203930037e-16 0.4 0.0004826198 8.46214416439366e-16 6.22163612086742e-16 1.9406750377014e-16 0.6 0.0005156198 8.3632421624723e-16 6.17388111993969e-16 1.88147003655123e-16 0.8 0.0005403508 8.24553016018551e-16 6.12751511903894e-16 1.80214303501015e-16 1 0.0005607267 8.14733915827796e-16 6.0820091181549e-16 1.74157603383351e-16 1.2 0.0005783955 8.06704415671807e-16 6.03724511728527e-16 1.69827603299233e-16 -0.2 -0.0003494232 9.67923918803811e-16 3.97824507728517e-16 5.55844510798364e-16 0 0. 9.88294919199557e-16 4.87635709473275e-16 4.87635709473275e-16 0.2 0.0004560441 9.40090218263087e-16 6.28474512209344e-16 2.93766005706978e-16 0.4 0.0005951395 9.0707851762177e-16 6.837717132836e-16 2.02337303930797e-16 0.6 0.0006385584 9.0082171750022e-16 6.78444013180099e-16 2.00316003891529e-16 0.8 0.0006672403 8.91523217319578e-16 6.72979113073933e-16 1.95432303796654e-16 1 0.0006890417 8.79085317077948e-16 6.67627812969973e-16 1.87311503638891e-16 1.2 0.0007067326 8.68165816865815e-16 6.62372712867882e-16 1.80629203509075e-16 -0.2 -0.0002148711 9.68851718821835e-16 4.56231508863187e-16 5.00434309721913e-16 0 0. 9.83208419100742e-16 4.85943209440395e-16 4.85943209440395e-16 0.2 0.0003274955 9.67814418801684e-16 5.44963710586983e-16 4.0928500795116e-16 0.4 0.000558564 9.14181817759766e-16 6.8214561325201e-16 2.14309004163371e-16 0.6 0.0006131566 9.06774517615864e-16 6.80279813215763e-16 2.0750810403125e-16 0.8 0.0006439429 9.01419817511839e-16 6.75099113115118e-16 2.06236904006554e-16 1 0.0006662862 8.93533017358622e-16 6.69950313015092e-16 2.02424503932491e-16 1.2 0.0006839104 8.81604417126886e-16 6.6489331291685e-16 1.94495203778449e-16 -0.2 -0.0004715559 8.60329816713586e-16 1.93899103766868e-16 6.35132412338686e-16 0 0. 5.20271110107282e-16 2.25088504372783e-16 2.25088504372783e-16 0.2 1.91946e-05 4.90137209521872e-16 2.26212604394621e-16 1.91056403711643e-16 0.4 2.47812e-05 4.85438809430596e-16 2.28833004445528e-16 1.8448650358401e-16 0.6 3.06045e-05 4.80278109330339e-16 2.31998804507029e-16 1.76916403436946e-16 0.8 3.69006e-05 4.77287609272243e-16 2.3533030457175e-16 1.71342203328657e-16 1 4.37579e-05 4.7595270924631e-16 2.38759404638367e-16 1.67312703250376e-16 1.2 5.12231e-05 4.75681309241038e-16 2.42258904706352e-16 1.64260203191075e-16 -0.2 -0.0005927724 9.38575218233655e-16 2.27953904428449e-16 6.91396913431734e-16 0 0. 9.79323919025278e-16 4.81353209351225e-16 4.81353209351225e-16 0.2 0.0005056011 8.74744316993615e-16 6.53116012688053e-16 1.94536003779241e-16 0.4 0.0005701421 8.69052416883039e-16 6.4817531259207e-16 1.92938003748197e-16 0.6 0.0006091188 8.59372716694992e-16 6.43513312501502e-16 1.87078203634359e-16 0.8 0.0006386196 8.47737416468953e-16 6.3896491241314e-16 1.79151803480373e-16 1 0.0006630875 8.3803831628053e-16 6.34488912326185e-16 1.73097203362751e-16 1.2 0.0006844105 8.30125016126798e-16 6.30076912240473e-16 1.68774203278768e-16 -0.2 -0.0004487173 9.75430618949643e-16 3.8297570744005e-16 5.78837211245042e-16 0 0. 1.00370001949883e-15 4.9591310963408e-16 4.9591310963408e-16 0.2 0.0005791673 9.41795418296214e-16 6.81680113242966e-16 2.42465804710371e-16 0.4 0.0007058944 9.23563117942016e-16 7.03547113667776e-16 2.00325703891718e-16 0.6 0.0007557826 9.17778217829633e-16 6.97824413556601e-16 1.99165003869169e-16 0.8 0.0007893158 9.08519417649763e-16 6.9228411344897e-16 1.94357703775778e-16 1 0.0008147552 8.96069317407895e-16 6.86858913343575e-16 1.86258103618427e-16 1.2 0.000835341 8.85120617195195e-16 6.81528213240015e-16 1.79581203488715e-16 -0.2 -0.0002782253 9.77763518994964e-16 4.6148000896515e-16 5.04872109808126e-16 0 0. 9.93641419303423e-16 4.91579509549891e-16 4.91579509549891e-16 0.2 0.0004200096 9.76273918966026e-16 5.62291410923608e-16 4.01094007792034e-16 0.4 0.0006653809 9.22586117923036e-16 6.98280013565452e-16 2.07209204025443e-16 0.6 0.0007236151 9.17552517825248e-16 6.93230113467348e-16 2.06078604003479e-16 0.8 0.0007596301 9.12376917724702e-16 6.87908613363967e-16 2.05111403984689e-16 1 0.0007858801 9.04534717572352e-16 6.82710213262978e-16 2.01368603911978e-16 1.2 0.0008064869 8.92617917340845e-16 6.77607313163844e-16 1.9347140375856e-16 -0.2 -0.0003034567 8.51625916544495e-16 2.37903304621736e-16 5.81704311300741e-16 0 0. 7.3786411433445e-16 3.45765306717166e-16 3.45765306717166e-16 0.2 0.0001113976 6.42027412472635e-16 3.8970860757085e-16 1.93936703767599e-16 0.4 0.0001296452 6.2989451223693e-16 3.86891307516119e-16 1.84183403578122e-16 0.6 0.0001423791 6.20580212055982e-16 3.8530030748521e-16 1.76457403428029e-16 0.8 0.0001533741 6.13688811922103e-16 3.83988507459726e-16 1.70915503320367e-16 1 0.0001635036 6.08431911819977e-16 3.82750007435666e-16 1.66938503243106e-16 1.2 0.0001731152 6.04179611737368e-16 3.81534307412048e-16 1.63940003184854e-16 -0.2 -0.0003164255 9.30541418077583e-16 3.09151906005879e-16 6.01564211686559e-16 0 0. 9.33382818132783e-16 4.56695708872205e-16 4.56695708872205e-16 0.2 0.0003111142 8.62965116764781e-16 5.89629611454706e-16 2.45458604768512e-16 0.4 0.0003937886 8.33011416182872e-16 6.00166811659411e-16 2.01649303917431e-16 0.6 0.000428415 8.18407915899171e-16 5.94693611553084e-16 1.91271203715816e-16 0.8 0.0004508538 8.05064315639945e-16 5.89291911448145e-16 1.82416003543787e-16 1 0.0004680926 7.94471715434163e-16 5.84222011349653e-16 1.76073703420575e-16 1.2 0.0004824531 7.85939615268411e-16 5.79364811255292e-16 1.71620203334057e-16 -0.2 -0.0002424709 9.50929818473667e-16 3.67118707131997e-16 5.68297811040294e-16 0 0. 9.66657518779209e-16 4.7602220924766e-16 4.7602220924766e-16 0.2 0.0003067027 9.33079718126894e-16 5.97762611612705e-16 3.17026306158855e-16 0.4 0.0004476513 8.9779451744141e-16 6.5185421266354e-16 2.24152404354598e-16 0.6 0.0005031762 8.8346801716309e-16 6.52368712673535e-16 2.07627804033575e-16 0.8 0.0005341618 8.71380916928275e-16 6.47466412578299e-16 1.99230503870441e-16 1 0.0005554079 8.57802216664482e-16 6.42065612473377e-16 1.89982903690789e-16 1.2 0.0005716839 8.46345616441915e-16 6.36726712369659e-16 1.82857003552354e-16 -0.2 -0.0001575395 9.51416218483117e-16 4.07822307922744e-16 5.30103910298303e-16 0 0. 9.67012118786097e-16 4.7720920927072e-16 4.7720920927072e-16 0.2 0.0002296068 9.50178518459072e-16 5.62346410924676e-16 3.7304770724718e-16 0.4 0.0003943053 9.16008717795257e-16 6.45745712544871e-16 2.52404904903458e-16 0.6 0.0004666529 8.98879317462485e-16 6.5743411277194e-16 2.21738304307699e-16 0.8 0.0005050445 8.89081717272147e-16 6.55203912728615e-16 2.12841204134856e-16 1 0.0005296731 8.79205017080273e-16 6.50628812639734e-16 2.06388104009492e-16 1.2 0.0005475326 8.66291216829397e-16 6.4565661254314e-16 1.97371403834325e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_gidl_st.standard0000644000175000017500000001671114163340332025351 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0002581651 7.48325714537687e-16 1.92697903743533e-16 5.22960910159536e-16 0 -2.5739e-12 4.49638708735109e-16 1.96906503825293e-16 1.96906503825293e-16 0.2 4.2928e-06 4.40058808549001e-16 1.90669503704127e-16 1.93287203754981e-16 0.4 5.7943e-06 4.34038408432043e-16 1.91568603721594e-16 1.86829203629522e-16 0.6 7.5228e-06 4.27660108308132e-16 1.93230903753887e-16 1.7926540348258e-16 0.8 9.556e-06 4.23549608228278e-16 1.95193403792013e-16 1.73672503373927e-16 1 1.19511e-05 4.21207508182778e-16 1.97393903834762e-16 1.69610203295009e-16 1.2 1.47615e-05 4.20062708160538e-16 1.99821803881928e-16 1.66516203234902e-16 -0.2 -0.0004618633 9.04245417566732e-16 2.39375504650336e-16 6.45996512549743e-16 0 -5.57013e-13 9.04964917580709e-16 4.42732408600941e-16 4.42732408600941e-16 0.2 0.0003134119 7.83318615217493e-16 5.61408810906462e-16 1.93492203758964e-16 0.4 0.0003579843 7.7979861514911e-16 5.60032610879726e-16 1.9081840370702e-16 0.6 0.0003893328 7.7302041501743e-16 5.58698910853816e-16 1.84884703591746e-16 0.8 0.0004156346 7.64231114846681e-16 5.57341110827439e-16 1.76950103437601e-16 1 0.0004391009 7.57279714711636e-16 5.55923210799893e-16 1.70903403320132e-16 1.2 0.0004606897 7.52005414609173e-16 5.5444211077112e-16 1.66588903236315e-16 -0.2 -0.0003765672 9.55717718566682e-16 3.68086907150806e-16 5.73778011146758e-16 0 -8.43332e-14 9.77859818996835e-16 4.82552409374522e-16 4.82552409374522e-16 0.2 0.0004566842 9.14267017761421e-16 6.40183112436806e-16 2.56652404985974e-16 0.4 0.0005663636 8.88499917260845e-16 6.72123113057303e-16 1.96805603823333e-16 0.6 0.0006063037 8.82985417153715e-16 6.67211512961886e-16 1.95203303792205e-16 0.8 0.0006339789 8.74242616983869e-16 6.62301612866501e-16 1.90391503698726e-16 1 0.0006556186 8.62337816752595e-16 6.57479112772815e-16 1.82341903542347e-16 1.2 0.0006735713 8.51937416550547e-16 6.52731712680587e-16 1.75734303413982e-16 -0.2 -0.0002458339 9.63691718721592e-16 4.41409708575245e-16 5.10398509915487e-16 0 -7.7781e-15 9.78739819013931e-16 4.83845709399647e-16 4.83845709399647e-16 0.2 0.0003542694 9.57806218607255e-16 5.60736610893403e-16 3.83802007456103e-16 0.4 0.0005642628 9.05844017597788e-16 6.82464713258209e-16 2.06748804016499e-16 0.6 0.0006139079 8.992095174689e-16 6.79411613198896e-16 2.02000703924258e-16 0.8 0.0006432217 8.9397351736718e-16 6.74226313098162e-16 2.00880003902486e-16 1 0.0006647662 8.86166517215514e-16 6.69096912998513e-16 1.97150703830037e-16 1.2 0.0006818546 8.74313916985254e-16 6.64057512900613e-16 1.89301703677555e-16 -0.2 -0.000278484 7.5479881466344e-16 1.91361603717573e-16 5.31273910321032e-16 0 -2.5586e-12 4.33919608429735e-16 1.88858003668935e-16 1.88858003668935e-16 0.2 5.029502e-07 4.30364808360676e-16 1.80779503511995e-16 1.93581703760702e-16 0.4 7.518941e-07 4.23197308221433e-16 1.80401603504653e-16 1.87183003636395e-16 0.6 1.0793e-06 4.15508608072065e-16 1.80657503509625e-16 1.79641003489877e-16 0.8 1.5118e-06 4.09972407964514e-16 1.81097503518172e-16 1.74068903381628e-16 1 2.08e-06 4.06102807889339e-16 1.81668603529267e-16 1.70032303303209e-16 1.2 2.8207e-06 4.03336507835599e-16 1.82370403542901e-16 1.66967603243672e-16 -0.2 -0.0005730027 9.13018917737174e-16 2.05166403985758e-16 6.89630113397411e-16 0 -5.529634e-13 9.24427117958801e-16 4.53021008800817e-16 4.53021008800817e-16 0.2 0.0003593361 7.98638315515108e-16 5.80184611271218e-16 1.91062703711766e-16 0.4 0.0004118927 7.97132715485859e-16 5.79660511261037e-16 1.89643703684199e-16 0.6 0.0004508408 7.91282515372207e-16 5.79263511253324e-16 1.83715303569028e-16 0.8 0.0004841118 7.8331231521737e-16 5.78746211243275e-16 1.75763903414557e-16 1 0.0005140832 7.77105215096785e-16 5.7808711123047e-16 1.69699403296742e-16 1.2 0.0005417819 7.7251491500761e-16 5.77290311214991e-16 1.65373803212709e-16 -0.2 -0.0004842527 9.60759718664632e-16 3.40092806606966e-16 6.07239211796807e-16 0 -8.35698e-14 9.94858519327068e-16 4.9155680954945e-16 4.9155680954945e-16 0.2 0.0005725708 9.19463717862377e-16 6.88392813373374e-16 2.14079004158902e-16 0.4 0.0006723184 9.08057617640791e-16 6.94707013496039e-16 1.94967903787632e-16 0.6 0.0007186118 9.02749317537667e-16 6.89495613394798e-16 1.9383430376561e-16 0.8 0.0007509675 8.93939117366512e-16 6.84407013295942e-16 1.89081603673279e-16 1 0.0007762008 8.81924217133099e-16 6.79401413198698e-16 1.8105210351729e-16 1.2 0.000797075 8.71397516928597e-16 6.74469013102877e-16 1.74450603389043e-16 -0.2 -0.000314504 9.72827518899073e-16 4.45617308656986e-16 5.15996710024243e-16 0 -7.6881e-15 9.89872019230195e-16 4.89788509515098e-16 4.89788509515098e-16 0.2 0.0004547964 9.6449411873718e-16 5.86418911392332e-16 3.65315607096969e-16 0.4 0.0006708635 9.1599601779501e-16 6.98796613575488e-16 2.01220503909101e-16 0.6 0.0007248794 9.11158717701036e-16 6.93540313473374e-16 2.0052400389557e-16 0.8 0.0007592143 9.06011217601036e-16 6.88199713369622e-16 1.99621303878033e-16 1 0.0007844847 8.98195017449191e-16 6.82969713268019e-16 1.95952703806764e-16 1.2 0.0008044263 8.86305617218216e-16 6.77831313168196e-16 1.88134703654884e-16 -0.2 -0.0002319172 7.68950214938358e-16 2.12037304119238e-16 5.25823710215152e-16 0 -2.5986e-12 5.3726081043734e-16 2.43635704733099e-16 2.43635704733099e-16 0.2 2.79646e-05 4.93848809593977e-16 2.47977904817455e-16 1.92741103744372e-16 0.4 3.44421e-05 4.88928809498396e-16 2.50533604867104e-16 1.85711803607814e-16 0.6 4.05223e-05 4.84208109406687e-16 2.53913704932769e-16 1.78102103459981e-16 0.8 4.67213e-05 4.81663409357252e-16 2.57446405001399e-16 1.72504003351227e-16 1 5.31723e-05 4.80708609338703e-16 2.61013705070701e-16 1.68442003272315e-16 1.2 5.99287e-05 4.80742709339365e-16 2.64576505139915e-16 1.65351803212281e-16 -0.2 -0.0003141608 9.04696617575497e-16 2.83793105513235e-16 6.021068116971e-16 0 -5.635358e-13 8.90232617294506e-16 4.35017708451068e-16 4.35017708451068e-16 0.2 0.0002573794 7.9732481548959e-16 5.50064610686078e-16 2.19887204271738e-16 0.4 0.0003138737 7.74756815051163e-16 5.50269610690061e-16 1.95238503792889e-16 0.6 0.0003424032 7.63720414836759e-16 5.46521210617241e-16 1.87195203636632e-16 0.8 0.0003636781 7.52926914627075e-16 5.43463810557845e-16 1.78851803474545e-16 1 0.0003816347 7.44571014464745e-16 5.4069471050405e-16 1.72693403354906e-16 1.2 0.0003976406 7.38127514339567e-16 5.3804891045265e-16 1.68337003270275e-16 -0.2 -0.0002591038 9.40620918273397e-16 3.49144006782804e-16 5.76727711204061e-16 0 -8.55657e-14 9.55024518553215e-16 4.70471109139819e-16 4.70471109139819e-16 0.2 0.0003083354 9.12230417721856e-16 6.00562111667091e-16 2.94115205713762e-16 0.4 0.0004330203 8.7646331702701e-16 6.4180221246826e-16 2.1429250416305e-16 0.6 0.0004820345 8.63323916771752e-16 6.40162812436412e-16 2.01406103912707e-16 0.8 0.0005105435 8.52060916552946e-16 6.35289812341744e-16 1.93954203767939e-16 1 0.0005308487 8.39147716302082e-16 6.30303812244882e-16 1.85061303595177e-16 1.2 0.0005468788 8.28288816091127e-16 6.25461012150801e-16 1.78122203460371e-16 -0.2 -0.0001797537 9.45984618377597e-16 3.94542807664764e-16 5.38465310460739e-16 0 -7.9237e-15 9.61719418683276e-16 4.74783809223602e-16 4.74783809223602e-16 0.2 0.0002462543 9.41472018289931e-16 5.70671311086404e-16 3.56584906927358e-16 0.4 0.0004048802 9.05982717600482e-16 6.47564712580208e-16 2.41527604692145e-16 0.6 0.0004722415 8.89417117278663e-16 6.56239312748729e-16 2.1466520417029e-16 0.8 0.0005081131 8.80017017096048e-16 6.53297012691569e-16 2.06984004021068e-16 1 0.0005313805 8.7039441690911e-16 6.48567712599693e-16 2.01001203904841e-16 1.2 0.0005484156 8.57670616661925e-16 6.43591712503025e-16 1.92223103734309e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_core_st.standard0000644000175000017500000000631014163340332025215 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 0. 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 0. 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 0. 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 0. 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 0. 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 0. 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 1.742e-20 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 3.53468e-17 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 2.0315e-12 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.734942e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09896e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.0001354951 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440626 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 0. 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 0. 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 0. 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 0. 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 0. 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 0. 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 1.273e-26 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 4.174e-22 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 1.4616e-15 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.37409e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63207e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900562 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034134 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 0. 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 0. 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 0. 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 0. 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 0. 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 0. 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 0. 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 2.9617e-15 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 6.370562e-13 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 1.1219e-09 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1941e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25259e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84377e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51706e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_core_st.standard0000644000175000017500000000627514163340332025371 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 0. 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 0. 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 0. 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 0. 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 0. 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 0. 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 2.473e-24 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 4.196e-19 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 9.12051e-14 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.30938e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26084e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.0001237631 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391912 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 0. 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 0. 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 0. 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 0. 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 0. 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 0. 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 0. 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 0. 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 1.760e-24 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 2.86752e-17 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 5.646706e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79731e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744511 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960642 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 0. 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 0. 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 0. 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 0. 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 0. 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 0. 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 0. 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 3.7649e-18 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 1.74963e-14 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 1.000179e-10 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.136918e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.1609e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.1818e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.35262e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_core_lt.standard0000644000175000017500000001643114163340332025210 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.55044e-05 6.7326001307939e-15 2.00050003886362e-15 4.50010008742323e-15 0 0. 6.43970012510374e-15 3.08870006000403e-15 3.08870006000403e-15 0.2 2.71461e-05 4.56290008864324e-15 3.81710007415462e-15 3.23603106286622e-16 0.4 2.90059e-05 4.46080008665975e-15 3.75690007298511e-15 2.79909205437783e-16 0.6 3.05592e-05 4.3984000854475e-15 3.70380007195354e-15 2.72538705294596e-16 0.8 3.19874e-05 4.33860008428577e-15 3.652400070955e-15 2.66051905168577e-16 1 3.33295e-05 4.28110008316872e-15 3.60200006997588e-15 2.60722605065045e-16 1.2 3.46078e-05 4.22520008208276e-15 3.55250006901425e-15 2.56228104977731e-16 -0.2 -4.48424e-05 7.53930014646562e-15 3.29300006397295e-15 4.10020007965439e-15 0 0. 7.65330014868029e-15 3.75280007290546e-15 3.75280007290546e-15 0.2 5.47176e-05 6.93470013472008e-15 4.43220008610414e-15 2.30170004471501e-15 0.4 8.33761e-05 5.643500109636e-15 4.90920009537079e-15 4.42731208600918e-16 0.6 8.7727e-05 5.4978001068055e-15 4.84960009421294e-15 3.51673206831938e-16 0.8 9.06552e-05 5.43430010557188e-15 4.80070009326297e-15 3.38414606574364e-16 1 9.31807e-05 5.37830010448397e-15 4.75500009237516e-15 3.29883406408629e-16 1.2 9.54498e-05 5.32530010345435e-15 4.71050009151066e-15 3.23185806278515e-16 -0.2 -2.82899e-05 7.58110014727766e-15 3.6592000710871e-15 3.79870007379716e-15 0 0. 7.72140015000327e-15 3.79860007379522e-15 3.79860007379522e-15 0.2 4.17499e-05 7.55180014670846e-15 4.03880007846157e-15 3.37500006556596e-15 0.4 9.49616e-05 6.64410012907461e-15 4.78710009299876e-15 1.66440003233422e-15 0.6 0.0001206758 5.80810011283368e-15 5.02010009752524e-15 5.49077510666902e-16 0.8 0.0001270932 5.63990010956606e-15 4.97160009658303e-15 4.23655708230339e-16 1 0.000130889 5.56900010818869e-15 4.92530009568357e-15 3.99605607763119e-16 1.2 0.0001339885 5.51370010711438e-15 4.88310009486375e-15 3.87707907531983e-16 -0.2 -1.4979e-05 7.45460014482015e-15 3.79000007362815e-15 3.55220006900842e-15 0 0. 7.59170014748359e-15 3.73900007263737e-15 3.73900007263737e-15 0.2 2.56861e-05 7.55320014673565e-15 3.74740007280056e-15 3.68630007161357e-15 0.4 6.56938e-05 7.22770014041218e-15 4.20940008177581e-15 2.88010005595156e-15 0.6 0.0001147294 6.33850012313773e-15 4.77890009283946e-15 1.37920002679365e-15 0.8 0.0001379753 5.73850011148156e-15 4.89550009510464e-15 6.36742612369968e-16 1 0.0001457683 5.56160010804494e-15 4.85580009433339e-15 4.94391809604526e-16 1.2 0.000150123 5.48230010650438e-15 4.81300009350192e-15 4.57853908894706e-16 -0.2 -8.62171e-05 6.61610012853066e-15 1.50630002926282e-15 4.86320009447715e-15 0 0. 6.26120012163603e-15 2.98850005805745e-15 2.98850005805745e-15 0.2 2.70544e-05 4.36500008479864e-15 3.65750007105408e-15 2.6940560523373e-16 0.4 2.9511e-05 4.30450008362331e-15 3.59870006991177e-15 2.69499505235554e-16 0.6 3.1681e-05 4.24220008241302e-15 3.54550006887826e-15 2.62359405096843e-16 0.8 3.3689e-05 4.18200008124351e-15 3.49360006787e-15 2.56004704973391e-16 1 3.55903e-05 4.12410008011869e-15 3.44260006687922e-15 2.50842304873101e-16 1.2 3.7415e-05 4.06780007902495e-15 3.39250006590593e-15 2.46530404789334e-16 -0.2 -6.85228e-05 7.70240014963415e-15 3.2971000640526e-15 4.26750008290452e-15 0 0. 7.87690015302415e-15 3.8700000751823e-15 3.8700000751823e-15 0.2 8.54739e-05 6.92450013452193e-15 4.748300092245e-15 1.97030003827692e-15 0.4 0.0001160003 5.78220011233052e-15 5.14890010002743e-15 3.52766406853176e-16 0.6 0.0001219223 5.7147001110192e-15 5.09700009901917e-15 3.38054406567366e-16 0.8 0.000126625 5.65600010987884e-15 5.04950009809639e-15 3.28624306384168e-16 1 0.0001306602 5.59990010878899e-15 5.00310009719498e-15 3.20625906228784e-16 1.2 0.000134242 5.54620010774576e-15 4.95760009631106e-15 3.14153306103041e-16 -0.2 -4.1577e-05 7.71620014990224e-15 3.69220007172819e-15 3.90870007593413e-15 0 0. 7.8852001531854e-15 3.88480007546982e-15 3.88480007546982e-15 0.2 6.33752e-05 7.71220014982454e-15 4.19240008144555e-15 3.38970006585154e-15 0.4 0.0001453367 6.52050012667344e-15 5.11570009938246e-15 1.20840002347553e-15 0.6 0.0001707928 5.92180011504252e-15 5.26820010234507e-15 4.2972980834834e-16 0.8 0.0001783359 5.84700011358939e-15 5.22240010145531e-15 4.0086630778761e-16 1 0.0001840284 5.79050011249176e-15 5.17910010061413e-15 3.89006707557214e-16 1.2 0.0001888663 5.73740011146019e-15 5.13690009979431e-15 3.79346007369536e-16 -0.2 -2.09413e-05 7.55880014684444e-15 3.81960007420318e-15 3.63380007059366e-15 0 0. 7.71200014982065e-15 3.80290007387875e-15 3.80290007387875e-15 0.2 3.74684e-05 7.68210014923979e-15 3.85100007481319e-15 3.71900007224883e-15 0.4 9.82562e-05 7.32460014229465e-15 4.3450000844101e-15 2.84750005531824e-15 0.6 0.0001724277 6.18120012008187e-15 5.04230009795652e-15 9.6125271867421e-16 0.8 0.0001951983 5.78360011235772e-15 5.09530009898615e-15 4.98194409678399e-16 1 0.000203425 5.70410011081328e-15 5.05550009821295e-15 4.58371808904767e-16 1.2 0.0002093288 5.64990010976033e-15 5.01690009746307e-15 4.43640208618577e-16 -0.2 -3.24125e-05 6.74310013099788e-15 2.1815000423799e-15 4.33790008427217e-15 0 0. 6.56090012745829e-15 3.15910006137168e-15 3.15910006137168e-15 0.2 2.37326e-05 5.19990010101821e-15 3.99190007755045e-15 8.4374331639136e-16 0.4 2.80562e-05 4.68080009093368e-15 3.92750007629935e-15 3.46451806730502e-16 0.6 2.93486e-05 4.5579000885461e-15 3.84590007471411e-15 3.01062005848717e-16 0.8 3.03378e-05 4.48360008710268e-15 3.78530007353684e-15 2.87694205589021e-16 1 3.1229e-05 4.4211000858885e-15 3.7318000724975e-15 2.80165505442762e-16 1.2 3.20623e-05 4.3635000847695e-15 3.68130007151644e-15 2.7463290533528e-16 -0.2 -2.73412e-05 7.28680014156031e-15 3.08190005987192e-15 4.04530007858785e-15 0 0. 7.37940014335925e-15 3.60920007011575e-15 3.60920007011575e-15 0.2 3.19862e-05 6.85280013312901e-15 4.30180008357086e-15 2.35090004567082e-15 0.4 5.30557e-05 5.93280011525622e-15 4.76570009258302e-15 8.99680917478058e-16 0.6 6.0201e-05 5.49370010672585e-15 4.69850009127753e-15 4.98316709680774e-16 0.8 6.31855e-05 5.3123001032018e-15 4.60690008949802e-15 3.99991907770623e-16 1 6.50911e-05 5.2102001012183e-15 4.5368000881362e-15 3.65830607106973e-16 1.2 6.66018e-05 5.13620009978071e-15 4.47930008701915e-15 3.49358806786977e-16 -0.2 -1.84061e-05 7.36280014303676e-15 3.48520006770681e-15 3.74200007269565e-15 0 0. 7.48740014545736e-15 3.67530007139988e-15 3.67530007139988e-15 0.2 2.57471e-05 7.30100014183618e-15 3.98690007745331e-15 3.1636000614591e-15 0.4 5.43357e-05 6.68730012991386e-15 4.6736000907938e-15 1.82570003546779e-15 0.6 7.26697e-05 6.0747001180129e-15 4.87500009470639e-15 9.75188218944934e-16 0.8 8.15347e-05 5.71530011103086e-15 4.83230009387686e-15 6.38780812409564e-16 1 8.61855e-05 5.51630010716489e-15 4.75470009236933e-15 5.086027098806e-16 1.2 8.91484e-05 5.39330010477538e-15 4.68550009102498e-15 4.51157208764609e-16 -0.2 -1.05555e-05 7.28130014145346e-15 3.66970007129108e-15 3.48810006776315e-15 0 0. 7.40630014388183e-15 3.6407000707277e-15 3.6407000707277e-15 0.2 1.69167e-05 7.34340014265988e-15 3.68950007167574e-15 3.52270006843532e-15 0.4 4.1397e-05 7.00240013603529e-15 4.28470008323866e-15 2.56830004989424e-15 0.6 6.5331e-05 6.47890012586528e-15 4.6832000909803e-15 1.62000003147166e-15 0.8 8.15975e-05 6.02770011709984e-15 4.78890009303373e-15 1.0411000202254e-15 1 9.11554e-05 5.72560011123095e-15 4.76020009247618e-15 7.53927014646503e-16 1.2 9.69272e-05 5.52940010741939e-15 4.69880009128336e-15 6.11625711882023e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_diode_lw.standard0000644000175000017500000001543214163340332025462 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 4.2044e-06 0. -1.382e-15 -4.2044e-06 0.2 4.5381e-06 0. -1.382e-15 -4.5381e-06 0.3 4.8248e-06 0. -1.382e-15 -4.8248e-06 0.4 5.1036e-06 0. -1.382e-15 -5.1036e-06 0.5 5.3762e-06 0. -1.382e-15 -5.3762e-06 0.6 5.6439e-06 0. -1.382e-15 -5.6439e-06 0.7 5.9075e-06 0. -1.382e-15 -5.9075e-06 0.8 6.1675e-06 0. -1.382e-15 -6.1675e-06 0.9 6.4242e-06 0. -1.382e-15 -6.4242e-06 1.00000 6.6781e-06 0. -1.382e-15 -6.6781e-06 1.10000 6.9291e-06 0. -1.382e-15 -6.9291e-06 1.20000 7.1776e-06 0. -1.382e-15 -7.1776e-06 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 9.83393e-05 0. -1.382e-15 -9.83393e-05 0.2 0.0001417724 0. -1.382e-15 -0.0001417724 0.3 0.0001516504 0. -1.382e-15 -0.0001516504 0.4 0.0001564254 0. -1.382e-15 -0.0001564254 0.5 0.0001606281 0. -1.382e-15 -0.0001606281 0.6 0.0001645736 0. -1.382e-15 -0.0001645736 0.7 0.0001683331 0. -1.382e-15 -0.0001683331 0.8 0.0001719429 0. -1.382e-15 -0.0001719429 0.9 0.0001754273 0. -1.382e-15 -0.0001754273 1.00000 0.0001788045 0. -1.382e-15 -0.0001788045 1.10000 0.0001820887 0. -1.382e-15 -0.0001820887 1.20000 0.0001852911 0. -1.382e-15 -0.0001852911 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 0.0002148605 0. -1.382e-15 -0.0002148605 0.2 0.0003806516 0. -1.382e-15 -0.0003806516 0.3 0.0004885395 0. -1.382e-15 -0.0004885395 0.4 0.000538957 0. -1.382e-15 -0.000538957 0.5 0.000560161 0. -1.382e-15 -0.000560161 0.6 0.00057367 0. -1.382e-15 -0.00057367 0.7 0.0005849712 0. -1.382e-15 -0.0005849712 0.8 0.0005952603 0. -1.382e-15 -0.0005952603 0.9 0.0006049 0. -1.382e-15 -0.0006049 1.00000 0.0006140474 0. -1.382e-15 -0.0006140474 1.10000 0.0006227923 0. -1.382e-15 -0.0006227923 1.20000 0.0006311953 0. -1.382e-15 -0.0006311953 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 0.0002959867 0. -1.382e-15 -0.0002959867 0.2 0.0005584903 0. -1.382e-15 -0.0005584903 0.3 0.0007793801 0. -1.382e-15 -0.0007793801 0.4 0.0009478808 0. -1.382e-15 -0.0009478808 0.5 0.0010559 0. -1.382e-15 -0.0010559 0.6 0.0011145 0. -1.382e-15 -0.0011145 0.7 0.0011481 0. -1.382e-15 -0.0011481 0.8 0.0011719 0. -1.382e-15 -0.0011719 0.9 0.0011916 0. -1.382e-15 -0.0011916 1.00000 0.0012092 0. -1.382e-15 -0.0012092 1.10000 0.0012255 0. -1.382e-15 -0.0012255 1.20000 0.0012409 0. -1.382e-15 -0.0012409 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 8.538715e-07 0. -9.447e-23 -8.538715e-07 0.2 9.462214e-07 0. -9.447e-23 -9.462214e-07 0.3 1.036e-06 0. -9.447e-23 -1.036e-06 0.4 1.1241e-06 0. -9.447e-23 -1.1241e-06 0.5 1.2112e-06 0. -9.447e-23 -1.2112e-06 0.6 1.2976e-06 0. -9.447e-23 -1.2976e-06 0.7 1.3836e-06 0. -9.447e-23 -1.3836e-06 0.8 1.4692e-06 0. -9.447e-23 -1.4692e-06 0.9 1.5546e-06 0. -9.447e-23 -1.5546e-06 1.00000 1.6398e-06 0. -9.447e-23 -1.6398e-06 1.10000 1.7248e-06 0. -9.447e-23 -1.7248e-06 1.20000 1.8097e-06 0. -9.447e-23 -1.8097e-06 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.000121711 0. -9.447e-23 -0.000121711 0.2 0.0001614214 0. -9.447e-23 -0.0001614214 0.3 0.0001693551 0. -9.447e-23 -0.0001693551 0.4 0.0001755755 0. -9.447e-23 -0.0001755755 0.5 0.0001812839 0. -9.447e-23 -0.0001812839 0.6 0.0001866298 0. -9.447e-23 -0.0001866298 0.7 0.000191696 0. -9.447e-23 -0.000191696 0.8 0.0001965387 0. -9.447e-23 -0.0001965387 0.9 0.0002011986 0. -9.447e-23 -0.0002011986 1.00000 0.0002057058 0. -9.447e-23 -0.0002057058 1.10000 0.0002100833 0. -9.447e-23 -0.0002100833 1.20000 0.0002143491 0. -9.447e-23 -0.0002143491 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0003015915 0. -9.447e-23 -0.0003015915 0.2 0.0005279336 0. -9.447e-23 -0.0005279336 0.3 0.0006638339 0. -9.447e-23 -0.0006638339 0.4 0.0007146391 0. -9.447e-23 -0.0007146391 0.5 0.0007381917 0. -9.447e-23 -0.0007381917 0.6 0.0007568739 0. -9.447e-23 -0.0007568739 0.7 0.000773644 0. -9.447e-23 -0.000773644 0.8 0.0007891408 0. -9.447e-23 -0.0007891408 0.9 0.0008036505 0. -9.447e-23 -0.0008036505 1.00000 0.0008173562 0. -9.447e-23 -0.0008173562 1.10000 0.0008303911 0. -9.447e-23 -0.0008303911 1.20000 0.0008428569 0. -9.447e-23 -0.0008428569 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 0.0004223757 0. -9.447e-23 -0.0004223757 0.2 0.000794883 0. -9.447e-23 -0.000794883 0.3 0.0011046 0. -9.447e-23 -0.0011046 0.4 0.0013336 0. -9.447e-23 -0.0013336 0.5 0.0014645 0. -9.447e-23 -0.0014645 0.6 0.0015273 0. -9.447e-23 -0.0015273 0.7 0.0015667 0. -9.447e-23 -0.0015667 0.8 0.0015987 0. -9.447e-23 -0.0015987 0.9 0.0016273 0. -9.447e-23 -0.0016273 1.00000 0.0016536 0. -9.447e-23 -0.0016536 1.10000 0.0016782 0. -9.447e-23 -0.0016782 1.20000 0.0017015 0. -9.447e-23 -0.0017015 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 1.41523e-05 0. -1.9887e-09 -1.41503e-05 0.2 1.67173e-05 0. -1.9887e-09 -1.67153e-05 0.3 1.75197e-05 0. -1.9887e-09 -1.75177e-05 0.4 1.81403e-05 0. -1.9887e-09 -1.81383e-05 0.5 1.87271e-05 0. -1.9887e-09 -1.87251e-05 0.6 1.92983e-05 0. -1.9887e-09 -1.92964e-05 0.7 1.98579e-05 0. -1.9887e-09 -1.98559e-05 0.8 2.04073e-05 0. -1.9887e-09 -2.04053e-05 0.9 2.09475e-05 0. -1.9887e-09 -2.09455e-05 1.00000 2.14792e-05 0. -1.9887e-09 -2.14772e-05 1.10000 2.20029e-05 0. -1.9887e-09 -2.20009e-05 1.20000 2.25193e-05 0. -1.9887e-09 -2.25173e-05 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 8.11638e-05 0. -1.9887e-09 -8.11618e-05 0.2 0.0001254899 0. -1.9887e-09 -0.0001254879 0.3 0.0001441868 0. -1.9887e-09 -0.0001441848 0.4 0.0001523343 0. -1.9887e-09 -0.0001523323 0.5 0.0001570908 0. -1.9887e-09 -0.0001570889 0.6 0.0001607037 0. -1.9887e-09 -0.0001607017 0.7 0.0001638439 0. -1.9887e-09 -0.0001638419 0.8 0.0001667377 0. -1.9887e-09 -0.0001667357 0.9 0.0001694761 0. -1.9887e-09 -0.0001694741 1.00000 0.0001721024 0. -1.9887e-09 -0.0001721004 1.10000 0.0001746406 0. -1.9887e-09 -0.0001746386 1.20000 0.0001771057 0. -1.9887e-09 -0.0001771037 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 0.0001512459 0. -1.9887e-09 -0.0001512439 0.2 0.0002676654 0. -1.9887e-09 -0.0002676635 0.3 0.0003457132 0. -1.9887e-09 -0.0003457112 0.4 0.0003927677 0. -1.9887e-09 -0.0003927657 0.5 0.0004204916 0. -1.9887e-09 -0.0004204896 0.6 0.000437889 0. -1.9887e-09 -0.000437887 0.7 0.000450045 0. -1.9887e-09 -0.0004500431 0.8 0.0004594748 0. -1.9887e-09 -0.0004594728 0.9 0.0004673882 0. -1.9887e-09 -0.0004673862 1.00000 0.0004743846 0. -1.9887e-09 -0.0004743826 1.10000 0.0004807787 0. -1.9887e-09 -0.0004807767 1.20000 0.0004867467 0. -1.9887e-09 -0.0004867447 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 0.000202271 0. -1.9887e-09 -0.000202269 0.2 0.0003792408 0. -1.9887e-09 -0.0003792388 0.3 0.0005231428 0. -1.9887e-09 -0.0005231409 0.4 0.0006316387 0. -1.9887e-09 -0.0006316367 0.5 0.000708884 0. -1.9887e-09 -0.000708882 0.6 0.0007625383 0. -1.9887e-09 -0.0007625363 0.7 0.0008002004 0. -1.9887e-09 -0.0008001984 0.8 0.0008276435 0. -1.9887e-09 -0.0008276415 0.9 0.0008486796 0. -1.9887e-09 -0.0008486776 1.00000 0.0008656587 0. -1.9887e-09 -0.0008656567 1.10000 0.0008799962 0. -1.9887e-09 -0.0008799942 1.20000 0.0008925479 0. -1.9887e-09 -0.0008925459 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_core_lt.standard0000644000175000017500000000415114163340332025160 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.2019e-06 0. 0. -1.2019e-06 0.35 2.5389e-06 0. 0. -2.5389e-06 0.45 3.9351e-06 0. 0. -3.9351e-06 0.55 5.2461e-06 0. 0. -5.2461e-06 0.65 6.4113e-06 0. 0. -6.4113e-06 0.75 7.4092e-06 0. 0. -7.4092e-06 0.85 8.2386e-06 0. 0. -8.2386e-06 0.95 8.9101e-06 0. 0. -8.9101e-06 1.05000 9.4395e-06 0. 0. -9.4395e-06 1.15000 9.845e-06 0. 0. -9.845e-06 0.25 2.6941e-06 0. 0. -2.6941e-06 0.35 7.2946e-06 0. 0. -7.2946e-06 0.45 1.43813e-05 0. 0. -1.43813e-05 0.55 2.36824e-05 0. 0. -2.36824e-05 0.65 3.48013e-05 0. 0. -3.48013e-05 0.75 4.73219e-05 0. 0. -4.73219e-05 0.85 6.08571e-05 0. 0. -6.08571e-05 0.95 7.5062e-05 0. 0. -7.5062e-05 1.05000 8.96267e-05 0. 0. -8.96267e-05 1.15000 0.0001042567 0. 0. -0.0001042567 0.25 9.879855e-07 0. 0. -9.879855e-07 0.35 2.9993e-06 0. 0. -2.9993e-06 0.45 5.1911e-06 0. 0. -5.1911e-06 0.55 7.2342e-06 0. 0. -7.2342e-06 0.65 9.0241e-06 0. 0. -9.0241e-06 0.75 1.05324e-05 0. 0. -1.05324e-05 0.85 1.17652e-05 0. 0. -1.17652e-05 0.95 1.27456e-05 0. 0. -1.27456e-05 1.05000 1.35039e-05 0. 0. -1.35039e-05 1.15000 1.40722e-05 0. 0. -1.40722e-05 0.25 1.9568e-06 0. 0. -1.9568e-06 0.35 7.5624e-06 0. 0. -7.5624e-06 0.45 1.71682e-05 0. 0. -1.71682e-05 0.55 3.02014e-05 0. 0. -3.02014e-05 0.65 4.5898e-05 0. 0. -4.5898e-05 0.75 6.35391e-05 0. 0. -6.35391e-05 0.85 8.25249e-05 0. 0. -8.25249e-05 0.95 0.0001023751 0. 0. -0.0001023751 1.05000 0.0001227042 0. 0. -0.0001227042 1.15000 0.0001431866 0. 0. -0.0001431866 0.25 1.3849e-06 0. 0. -1.3849e-06 0.35 2.2036e-06 0. 0. -2.2036e-06 0.45 3.0278e-06 0. 0. -3.0278e-06 0.55 3.8042e-06 0. 0. -3.8042e-06 0.65 4.5046e-06 0. 0. -4.5046e-06 0.75 5.1163e-06 0. 0. -5.1163e-06 0.85 5.6363e-06 0. 0. -5.6363e-06 0.95 6.0677e-06 0. 0. -6.0677e-06 1.05000 6.4172e-06 0. 0. -6.4172e-06 1.15000 6.6933e-06 0. 0. -6.6933e-06 0.25 3.9939e-06 0. 0. -3.9939e-06 0.35 7.839e-06 0. 0. -7.839e-06 0.45 1.30852e-05 0. 0. -1.30852e-05 0.55 1.95851e-05 0. 0. -1.95851e-05 0.65 2.712e-05 0. 0. -2.712e-05 0.75 3.54361e-05 0. 0. -3.54361e-05 0.85 4.4269e-05 0. 0. -4.4269e-05 0.95 5.336e-05 0. 0. -5.336e-05 1.05000 6.24664e-05 0. 0. -6.24664e-05 1.15000 7.13694e-05 0. 0. -7.13694e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_ig_st.standard0000644000175000017500000001671014163340332025030 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0002581657 7.48325714537687e-16 1.92697903743533e-16 5.22960910159536e-16 0 -4.66633e-11 4.49638708735109e-16 1.96906503825293e-16 1.96906503825293e-16 0.2 4.2928e-06 4.40058808549001e-16 1.90669503704127e-16 1.93287203754981e-16 0.4 5.7943e-06 4.34038408432043e-16 1.91568603721594e-16 1.86829203629522e-16 0.6 7.5229e-06 4.27660108308132e-16 1.93230903753887e-16 1.7926540348258e-16 0.8 9.5561e-06 4.23549608228278e-16 1.95193403792013e-16 1.73672503373927e-16 1 1.19512e-05 4.21207508182778e-16 1.97393903834762e-16 1.69610203295009e-16 1.2 1.47617e-05 4.20062708160538e-16 1.99821803881928e-16 1.66516203234902e-16 -0.2 -0.0004618648 9.04245417566732e-16 2.39375504650336e-16 6.45996512549743e-16 0 -3.9198e-09 9.04964917580709e-16 4.42732408600941e-16 4.42732408600941e-16 0.2 0.0003134118 7.83318615217493e-16 5.61408810906462e-16 1.93492203758964e-16 0.4 0.0003579842 7.7979861514911e-16 5.60032610879726e-16 1.9081840370702e-16 0.6 0.0003893327 7.7302041501743e-16 5.58698910853816e-16 1.84884703591746e-16 0.8 0.0004156345 7.64231114846681e-16 5.57341110827439e-16 1.76950103437601e-16 1 0.0004391008 7.57279714711636e-16 5.55923210799893e-16 1.70903403320132e-16 1.2 0.0004606898 7.52005414609173e-16 5.5444211077112e-16 1.66588903236315e-16 -0.2 -0.0003765711 9.55717718566682e-16 3.68086907150806e-16 5.73778011146758e-16 0 -1.329e-08 9.77859818996835e-16 4.82552409374522e-16 4.82552409374522e-16 0.2 0.000456684 9.14267017761421e-16 6.40183112436806e-16 2.56652404985974e-16 0.4 0.0005663635 8.88499917260845e-16 6.72123113057303e-16 1.96805603823333e-16 0.6 0.0006063036 8.82985417153715e-16 6.67211512961886e-16 1.95203303792205e-16 0.8 0.0006339788 8.74242616983869e-16 6.62301612866501e-16 1.90391503698726e-16 1 0.0006556185 8.62337816752595e-16 6.57479112772815e-16 1.82341903542347e-16 1.2 0.0006735713 8.51937416550547e-16 6.52731712680587e-16 1.75734303413982e-16 -0.2 -0.0002458428 9.63691718721592e-16 4.41409708575245e-16 5.10398509915487e-16 0 -3.26929e-08 9.78739819013931e-16 4.83845709399647e-16 4.83845709399647e-16 0.2 0.0003542689 9.57806218607255e-16 5.60736610893403e-16 3.83802007456103e-16 0.4 0.0005642627 9.05844017597788e-16 6.82464713258209e-16 2.06748804016499e-16 0.6 0.0006139078 8.992095174689e-16 6.79411613198896e-16 2.02000703924258e-16 0.8 0.0006432215 8.9397351736718e-16 6.74226313098162e-16 2.00880003902486e-16 1 0.0006647662 8.86166517215514e-16 6.69096912998513e-16 1.97150703830037e-16 1.2 0.0006818546 8.74313916985254e-16 6.64057512900613e-16 1.89301703677555e-16 -0.2 -0.0002784843 7.5479881466344e-16 1.91361603717573e-16 5.31273910321032e-16 0 -2.4233e-12 4.33919608429735e-16 1.88858003668935e-16 1.88858003668935e-16 0.2 5.029567e-07 4.30364808360676e-16 1.80779503511995e-16 1.93581703760702e-16 0.4 7.519108e-07 4.23197308221433e-16 1.80401603504653e-16 1.87183003636395e-16 0.6 1.0793e-06 4.15508608072065e-16 1.80657503509625e-16 1.79641003489877e-16 0.8 1.5119e-06 4.09972407964514e-16 1.81097503518172e-16 1.74068903381628e-16 1 2.0802e-06 4.06102807889339e-16 1.81668603529267e-16 1.70032303303209e-16 1.2 2.8209e-06 4.03336507835599e-16 1.82370403542901e-16 1.66967603243672e-16 -0.2 -0.0005730034 9.13018917737174e-16 2.05166403985758e-16 6.89630113397411e-16 0 -1.8142e-09 9.24427117958801e-16 4.53021008800817e-16 4.53021008800817e-16 0.2 0.000359336 7.98638315515108e-16 5.80184611271218e-16 1.91062703711766e-16 0.4 0.0004118926 7.97132715485859e-16 5.79660511261037e-16 1.89643703684199e-16 0.6 0.0004508407 7.91282515372207e-16 5.79263511253324e-16 1.83715303569028e-16 0.8 0.0004841118 7.8331231521737e-16 5.78746211243275e-16 1.75763903414557e-16 1 0.0005140832 7.77105215096785e-16 5.7808711123047e-16 1.69699403296742e-16 1.2 0.0005417819 7.7251491500761e-16 5.77290311214991e-16 1.65373803212709e-16 -0.2 -0.0004842545 9.60759718664632e-16 3.40092806606966e-16 6.07239211796807e-16 0 -6.3799e-09 9.94858519327068e-16 4.9155680954945e-16 4.9155680954945e-16 0.2 0.0005725708 9.19463717862377e-16 6.88392813373374e-16 2.14079004158902e-16 0.4 0.0006723184 9.08057617640791e-16 6.94707013496039e-16 1.94967903787632e-16 0.6 0.0007186118 9.02749317537667e-16 6.89495613394798e-16 1.9383430376561e-16 0.8 0.0007509674 8.93939117366512e-16 6.84407013295942e-16 1.89081603673279e-16 1 0.0007762008 8.81924217133099e-16 6.79401413198698e-16 1.8105210351729e-16 1.2 0.000797075 8.71397516928597e-16 6.74469013102877e-16 1.74450603389043e-16 -0.2 -0.0003145083 9.72827518899073e-16 4.45617308656986e-16 5.15996710024243e-16 0 -1.58582e-08 9.89872019230195e-16 4.89788509515098e-16 4.89788509515098e-16 0.2 0.0004547962 9.6449411873718e-16 5.86418911392332e-16 3.65315607096969e-16 0.4 0.0006708635 9.1599601779501e-16 6.98796613575488e-16 2.01220503909101e-16 0.6 0.0007248794 9.11158717701036e-16 6.93540313473374e-16 2.0052400389557e-16 0.8 0.0007592143 9.06011217601036e-16 6.88199713369622e-16 1.99621303878033e-16 1 0.0007844846 8.98195017449191e-16 6.82969713268019e-16 1.95952703806764e-16 1.2 0.0008044263 8.86305617218216e-16 6.77831313168196e-16 1.88134703654884e-16 -0.2 -0.0002319186 7.68950214938358e-16 2.12037304119238e-16 5.25823710215152e-16 0 -7.333544e-10 5.3726081043734e-16 2.43635704733099e-16 2.43635704733099e-16 0.2 2.79645e-05 4.93848809593977e-16 2.47977904817455e-16 1.92741103744372e-16 0.4 3.44421e-05 4.88928809498396e-16 2.50533604867104e-16 1.85711803607814e-16 0.6 4.05223e-05 4.84208109406687e-16 2.53913704932769e-16 1.78102103459981e-16 0.8 4.67213e-05 4.81663409357252e-16 2.57446405001399e-16 1.72504003351227e-16 1 5.31724e-05 4.80708609338703e-16 2.61013705070701e-16 1.68442003272315e-16 1.2 5.99289e-05 4.80742709339365e-16 2.64576505139915e-16 1.65351803212281e-16 -0.2 -0.0003141653 9.04696617575497e-16 2.83793105513235e-16 6.021068116971e-16 0 -1.02978e-08 8.90232617294506e-16 4.35017708451068e-16 4.35017708451068e-16 0.2 0.0002573791 7.9732481548959e-16 5.50064610686078e-16 2.19887204271738e-16 0.4 0.0003138735 7.74756815051163e-16 5.50269610690061e-16 1.95238503792889e-16 0.6 0.0003424031 7.63720414836759e-16 5.46521210617241e-16 1.87195203636632e-16 0.8 0.000363678 7.52926914627075e-16 5.43463810557845e-16 1.78851803474545e-16 1 0.0003816347 7.44571014464745e-16 5.4069471050405e-16 1.72693403354906e-16 1.2 0.0003976406 7.38127514339567e-16 5.3804891045265e-16 1.68337003270275e-16 -0.2 -0.0002591144 9.40620918273397e-16 3.49144006782804e-16 5.76727711204061e-16 0 -3.23776e-08 9.55024518553215e-16 4.70471109139819e-16 4.70471109139819e-16 0.2 0.0003083347 9.12230417721856e-16 6.00562111667091e-16 2.94115205713762e-16 0.4 0.0004330201 8.7646331702701e-16 6.4180221246826e-16 2.1429250416305e-16 0.6 0.0004820344 8.63323916771752e-16 6.40162812436412e-16 2.01406103912707e-16 0.8 0.0005105434 8.52060916552946e-16 6.35289812341744e-16 1.93954203767939e-16 1 0.0005308486 8.39147716302082e-16 6.30303812244882e-16 1.85061303595177e-16 1.2 0.0005468787 8.28288816091127e-16 6.25461012150801e-16 1.78122203460371e-16 -0.2 -0.0001797765 9.45984618377597e-16 3.94542807664764e-16 5.38465310460739e-16 0 -7.783e-08 9.61719418683276e-16 4.74783809223602e-16 4.74783809223602e-16 0.2 0.0002462527 9.41472018289931e-16 5.70671311086404e-16 3.56584906927358e-16 0.4 0.0004048798 9.05982717600482e-16 6.47564712580208e-16 2.41527604692145e-16 0.6 0.0004722412 8.89417117278663e-16 6.56239312748729e-16 2.1466520417029e-16 0.8 0.0005081128 8.80017017096048e-16 6.53297012691569e-16 2.06984004021068e-16 1 0.0005313803 8.7039441690911e-16 6.48567712599693e-16 2.01001203904841e-16 1.2 0.0005484155 8.57670616661925e-16 6.43591712503025e-16 1.92223103734309e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_core_lw.standard0000644000175000017500000000712214163340332025534 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288983e-15 1258.93 1.0927564006002e-13 9.53119059792933e-14 9.47688274884048e-15 1584.89 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995.26 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511.89 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162.28 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981.07 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011.87 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309.57 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943.28 1.09276664567897e-13 9.53132791854431e-14 9.4769250142676e-15 10000 1.09275783926895e-13 9.53115292200125e-14 9.47692246669211e-15 12589.25 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848.93 1.09276031582681e-13 9.5312631632698e-14 9.47692490115591e-15 19952.62 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118.86 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622.78 1.09275780162271e-13 9.53124450565604e-14 9.47698962083786e-15 39810.72 1.0927602238714e-13 9.53121377669757e-14 9.47676386157643e-15 50118.72 1.09276059717827e-13 9.53121749406823e-14 9.4768201715675e-15 63095.73 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432.82 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 125892.54 1.09276014059111e-13 9.53122795246647e-14 9.47691737651631e-15 158489.32 1.09276017792978e-13 9.53122179251379e-14 9.47693475144662e-15 199526.23 1.09276015634006e-13 9.53122645884509e-14 9.47688956928716e-15 251188.64 1.09276024555722e-13 9.53122712055276e-14 9.47692697934026e-15 316227.77 1.09276042175139e-13 9.53122527818468e-14 9.47694019069255e-15 398107.17 1.09276030621809e-13 9.53122648831165e-14 9.47692448737011e-15 501187.23 1.09276053176795e-13 9.53122645022573e-14 9.47691487106397e-15 630957.34 1.09276033737846e-13 9.53122575399747e-14 9.47691770957772e-15 794328.23 1.09276051870338e-13 9.53122497661945e-14 9.47692627748105e-15 1000000 1.09276054490299e-13 9.53122613327507e-14 9.47692883288984e-15 1258930 1.0927564006002e-13 9.53119059792933e-14 9.47688274884049e-15 1584890 1.09277242630467e-13 9.53124404930008e-14 9.47694384399998e-15 1995260 1.09280129925873e-13 9.53130125900914e-14 9.47693240020806e-15 2511890 1.09278085565288e-13 9.53134018182079e-14 9.47690706109884e-15 3162280 1.09274704466753e-13 9.53133913592191e-14 9.47691819914045e-15 3981070 1.09275677505642e-13 9.53113860910227e-14 9.47692853421471e-15 5011870 1.09277373548761e-13 9.53112603072336e-14 9.4769287468004e-15 6309570 1.09277025924541e-13 9.53128133877643e-14 9.47692786122179e-15 7943280 1.09276664567897e-13 9.5313279185443e-14 9.47692701791021e-15 10000000 1.09275783926895e-13 9.53115292200124e-14 9.47692405824154e-15 12589250 1.09276048779532e-13 9.53128154935939e-14 9.47692670869584e-15 15848930 1.09276031582681e-13 9.53126316326979e-14 9.47692389695599e-15 19952620 1.09276032064331e-13 9.53121193863637e-14 9.47705052707268e-15 25118860 1.09276358760827e-13 9.53122863833296e-14 9.4768651277386e-15 31622780 1.09276283454338e-13 9.53124450565603e-14 9.47698962083786e-15 39810720 1.0927602238714e-13 9.53121377669757e-14 9.47676386157642e-15 50118720 1.09276059717827e-13 9.53121749406823e-14 9.47682017156749e-15 63095730 1.09275964992399e-13 9.53122635823651e-14 9.47704443217568e-15 79432820 1.09276035961029e-13 9.5312253365925e-14 9.47682645329785e-15 100000000 1.09276102236782e-13 9.53123249947279e-14 9.47688108640691e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_ig_lt.standard0000644000175000017500000000657414163340332024671 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.167e-24 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 2.348e-21 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 1.148919e-16 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 -2.3939e-12 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 -5.3449e-09 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 -2.80357e-08 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 -9.59209e-08 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 1.742e-20 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 3.53495e-17 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 2.0316e-12 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.734947e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09889e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.0001354942 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440615 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 6.528e-27 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 2.321e-20 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 -2.87893e-14 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 -2.3626e-09 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 -1.30538e-08 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 -4.536e-08 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 1.273e-26 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 4.174e-22 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 1.4617e-15 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.37409e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63202e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900556 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034129 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 9.887e-19 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 1.881601e-16 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 2.422412e-13 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 -1.464222e-10 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 -1.47878e-08 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 -7.10424e-08 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 -2.36349e-07 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 2.9624e-15 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 6.371693e-13 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 1.122e-09 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1941e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25245e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84353e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51653e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_core_sw.standard0000644000175000017500000001167114163340332025336 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 3.5957e-06 0. 0. -3.5957e-06 0.2 4.28e-06 0. 0. -4.28e-06 0.3 4.9395e-06 0. 0. -4.9395e-06 0.4 5.6189e-06 0. 0. -5.6189e-06 0.5 6.3337e-06 0. 0. -6.3337e-06 0.6 7.0929e-06 0. 0. -7.0929e-06 0.7 7.9028e-06 0. 0. -7.9028e-06 0.8 8.7688e-06 0. 0. -8.7688e-06 0.9 9.6956e-06 0. 0. -9.6956e-06 1.00000 1.06876e-05 0. 0. -1.06876e-05 1.10000 1.1749e-05 0. 0. -1.1749e-05 1.20000 1.28841e-05 0. 0. -1.28841e-05 0. 0. 0. 0. 0. 0.1 0.0005561393 0. 0. -0.0005561393 0.2 0.0006669258 0. 0. -0.0006669258 0.3 0.0007249564 0. 0. -0.0007249564 0.4 0.000773657 0. 0. -0.000773657 0.5 0.0008177523 0. 0. -0.0008177523 0.6 0.0008591148 0. 0. -0.0008591148 0.7 0.0008987224 0. 0. -0.0008987224 0.8 0.0009371516 0. 0. -0.0009371516 0.9 0.00097477 0. 0. -0.00097477 1.00000 0.0010118 0. 0. -0.0010118 1.10000 0.0010485 0. 0. -0.0010485 1.20000 0.0010849 0. 0. -0.0010849 0. 0. 0. 0. 0. 0.1 0.0018585 0. 0. -0.0018585 0.2 0.0027552 0. 0. -0.0027552 0.3 0.0030396 0. 0. -0.0030396 0.4 0.0032126 0. 0. -0.0032126 0.5 0.0033506 0. 0. -0.0033506 0.6 0.0034695 0. 0. -0.0034695 0.7 0.0035761 0. 0. -0.0035761 0.8 0.0036739 0. 0. -0.0036739 0.9 0.0037653 0. 0. -0.0037653 1.00000 0.0038516 0. 0. -0.0038516 1.10000 0.003934 0. 0. -0.003934 1.20000 0.0040133 0. 0. -0.0040133 0. 0. 0. 0. 0. 0.1 0.0028545 0. 0. -0.0028545 0.2 0.0047989 0. 0. -0.0047989 0.3 0.0056304 0. 0. -0.0056304 0.4 0.0060097 0. 0. -0.0060097 0.5 0.0062704 0. 0. -0.0062704 0.6 0.0064811 0. 0. -0.0064811 0.7 0.0066623 0. 0. -0.0066623 0.8 0.0068235 0. 0. -0.0068235 0.9 0.00697 0. 0. -0.00697 1.00000 0.0071052 0. 0. -0.0071052 1.10000 0.0072316 0. 0. -0.0072316 1.20000 0.0073507 0. 0. -0.0073507 0. 0. 0. 0. 0. 0.1 3.404183e-07 0. 0. -3.404183e-07 0.2 4.217106e-07 0. 0. -4.217106e-07 0.3 5.078992e-07 0. 0. -5.078992e-07 0.4 6.027299e-07 0. 0. -6.027299e-07 0.5 7.083026e-07 0. 0. -7.083026e-07 0.6 8.263353e-07 0. 0. -8.263353e-07 0.7 9.584625e-07 0. 0. -9.584625e-07 0.8 1.1063e-06 0. 0. -1.1063e-06 0.9 1.2717e-06 0. 0. -1.2717e-06 1.00000 1.4564e-06 0. 0. -1.4564e-06 1.10000 1.6625e-06 0. 0. -1.6625e-06 1.20000 1.892e-06 0. 0. -1.892e-06 0. 0. 0. 0. 0. 0.1 0.0005412604 0. 0. -0.0005412604 0.2 0.000625126 0. 0. -0.000625126 0.3 0.0006835382 0. 0. -0.0006835382 0.4 0.0007344518 0. 0. -0.0007344518 0.5 0.0007815785 0. 0. -0.0007815785 0.6 0.0008265465 0. 0. -0.0008265465 0.7 0.0008702113 0. 0. -0.0008702113 0.8 0.0009130745 0. 0. -0.0009130745 0.9 0.0009554532 0. 0. -0.0009554532 1.00000 0.0009975586 0. 0. -0.0009975586 1.10000 0.0010395 0. 0. -0.0010395 1.20000 0.0010815 0. 0. -0.0010815 0. 0. 0. 0. 0. 0.1 0.0022559 0. 0. -0.0022559 0.2 0.0031561 0. 0. -0.0031561 0.3 0.0034311 0. 0. -0.0034311 0.4 0.0036235 0. 0. -0.0036235 0.5 0.0037808 0. 0. -0.0037808 0.6 0.0039174 0. 0. -0.0039174 0.7 0.0040404 0. 0. -0.0040404 0.8 0.0041537 0. 0. -0.0041537 0.9 0.0042599 0. 0. -0.0042599 1.00000 0.0043606 0. 0. -0.0043606 1.10000 0.004457 0. 0. -0.004457 1.20000 0.0045499 0. 0. -0.0045499 0. 0. 0. 0. 0. 0.1 0.0035424 0. 0. -0.0035424 0.2 0.0057531 0. 0. -0.0057531 0.3 0.0065428 0. 0. -0.0065428 0.4 0.006937 0. 0. -0.006937 0.5 0.0072314 0. 0. -0.0072314 0.6 0.0074744 0. 0. -0.0074744 0.7 0.0076846 0. 0. -0.0076846 0.8 0.0078719 0. 0. -0.0078719 0.9 0.0080425 0. 0. -0.0080425 1.00000 0.0082002 0. 0. -0.0082002 1.10000 0.0083477 0. 0. -0.0083477 1.20000 0.0084869 0. 0. -0.0084869 0. 0. 0. 0. 0. 0.1 3.18966e-05 0. 0. -3.18966e-05 0.2 3.8093e-05 0. 0. -3.8093e-05 0.3 4.25221e-05 0. 0. -4.25221e-05 0.4 4.65757e-05 0. 0. -4.65757e-05 0.5 5.05154e-05 0. 0. -5.05154e-05 0.6 5.44404e-05 0. 0. -5.44404e-05 0.7 5.84002e-05 0. 0. -5.84002e-05 0.8 6.24237e-05 0. 0. -6.24237e-05 0.9 6.65299e-05 0. 0. -6.65299e-05 1.00000 7.07318e-05 0. 0. -7.07318e-05 1.10000 7.5039e-05 0. 0. -7.5039e-05 1.20000 7.9459e-05 0. 0. -7.9459e-05 0. 0. 0. 0. 0. 0.1 0.0005857167 0. 0. -0.0005857167 0.2 0.0007797406 0. 0. -0.0007797406 0.3 0.0008679365 0. 0. -0.0008679365 0.4 0.0009285166 0. 0. -0.0009285166 0.5 0.0009779952 0. 0. -0.0009779952 0.6 0.0010217 0. 0. -0.0010217 0.7 0.0010619 0. 0. -0.0010619 0.8 0.0010998 0. 0. -0.0010998 0.9 0.001136 0. 0. -0.001136 1.00000 0.0011711 0. 0. -0.0011711 1.10000 0.0012052 0. 0. -0.0012052 1.20000 0.0012387 0. 0. -0.0012387 0. 0. 0. 0. 0. 0.1 0.0014863 0. 0. -0.0014863 0.2 0.0022755 0. 0. -0.0022755 0.3 0.0026536 0. 0. -0.0026536 0.4 0.0028758 0. 0. -0.0028758 0.5 0.0030322 0. 0. -0.0030322 0.6 0.0031555 0. 0. -0.0031555 0.7 0.0032596 0. 0. -0.0032596 0.8 0.0033514 0. 0. -0.0033514 0.9 0.0034348 0. 0. -0.0034348 1.00000 0.003512 0. 0. -0.003512 1.10000 0.0035845 0. 0. -0.0035845 1.20000 0.0036533 0. 0. -0.0036533 0. 0. 0. 0. 0. 0.1 0.0022006 0. 0. -0.0022006 0.2 0.0036652 0. 0. -0.0036652 0.3 0.0044799 0. 0. -0.0044799 0.4 0.0049604 0. 0. -0.0049604 0.5 0.0052813 0. 0. -0.0052813 0.6 0.0055192 0. 0. -0.0055192 0.7 0.0057091 0. 0. -0.0057091 0.8 0.005869 0. 0. -0.005869 0.9 0.0060085 0. 0. -0.0060085 1.00000 0.0061335 0. 0. -0.0061335 1.10000 0.0062478 0. 0. -0.0062478 1.20000 0.0063536 0. 0. -0.0063536 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_gidl_lt.standard0000644000175000017500000000711514163340332025522 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_ig_lt.standard0000644000175000017500000000655014163340332025025 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.540e-28 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 3.053e-23 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 5.6522e-18 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 -2.105093e-13 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 -4.6257e-09 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 -2.67554e-08 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 -9.37338e-08 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 2.473e-24 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 4.196e-19 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 9.12097e-14 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.30939e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26076e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.0001237622 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391901 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 0. 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 0. 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 4.828e-22 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 -1.2134e-15 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 -2.014e-09 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 -1.24325e-08 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 -4.42635e-08 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 0. 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 1.760e-24 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 2.86759e-17 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 5.646713e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79726e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744505 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960638 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 1.271e-21 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 5.9204e-18 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 2.43614e-14 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 -2.81117e-11 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 -1.30895e-08 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 -6.80502e-08 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 -2.31506e-07 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 3.7661e-18 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 1.75002e-14 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 1.000298e-10 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.136918e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.16076e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.18156e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.3521e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_ig_lt.standard0000644000175000017500000001661514163340332025025 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.04612e-05 6.02750011709595e-15 1.2882000250258e-15 4.50810008757864e-15 0 -1.2743e-09 4.97640009667628e-15 2.33950004544935e-15 2.33950004544935e-15 0.2 1.24576e-05 3.35060006509194e-15 2.67070005188356e-15 2.9214670567552e-16 0.4 1.34984e-05 3.2903000639205e-15 2.61550005081119e-15 2.88506305604798e-16 0.6 1.44604e-05 3.23270006280151e-15 2.56690004986704e-15 2.812639054641e-16 0.8 1.53713e-05 3.1774000617272e-15 2.51990004895398e-15 2.74684805336288e-16 1 1.62442e-05 3.12450006069951e-15 2.47410004806422e-15 2.69253605230777e-16 1.2 1.70864e-05 3.07330005970485e-15 2.42930004719389e-15 2.6465760514149e-16 -0.2 -4.54562e-05 7.3931001436254e-15 3.12130006063734e-15 4.13070008024691e-15 0 -7.947e-09 7.49100014552729e-15 3.67340007136296e-15 3.67340007136296e-15 0.2 5.18731e-05 6.40720012447236e-15 4.47280008689287e-15 1.73350003367662e-15 0.4 6.86029e-05 5.35570010404493e-15 4.71490009159613e-15 3.89396107564779e-16 0.6 7.1576e-05 5.26700010232175e-15 4.65820009049463e-15 3.57106006937481e-16 0.8 7.39561e-05 5.20790010117362e-15 4.6113000895835e-15 3.46458506730633e-16 1 7.60767e-05 5.15310010010903e-15 4.56630008870929e-15 3.38094606568148e-16 1.2 7.80164e-05 5.10080009909299e-15 4.5223000878545e-15 3.31325406436643e-16 -0.2 -2.98138e-05 7.52710014622861e-15 3.60150006996617e-15 3.80620007394286e-15 0 -2.23888e-08 7.66720014895033e-15 3.77320007330177e-15 3.77320007330177e-15 0.2 4.24411e-05 7.4383001445035e-15 4.06090007889091e-15 3.24320006300549e-15 0.4 9.25276e-05 6.3253001228813e-15 4.81300009350192e-15 1.32880002581453e-15 0.6 0.0001103401 5.62680010931157e-15 4.91920009556506e-15 4.96129109638276e-16 0.8 0.0001150625 5.50330010691234e-15 4.8666000945432e-15 4.23324408223903e-16 1 0.000118271 5.4402001056865e-15 4.82230009368259e-15 4.05364707875e-16 1.2 0.0001210018 5.38720010465687e-15 4.78160009289191e-15 3.9442830766254e-16 -0.2 -1.68487e-05 7.42390014422375e-15 3.76230007309002e-15 3.5517000689987e-15 0 -5.16416e-08 7.56120014689107e-15 3.7250000723654e-15 3.7250000723654e-15 0.2 2.70732e-05 7.50710014584007e-15 3.75200007288992e-15 3.63850007068496e-15 0.4 6.78121e-05 7.11150013815477e-15 4.24550008247712e-15 2.73230005308026e-15 0.6 0.000113223 6.14000011928148e-15 4.77420009274815e-15 1.19650002324435e-15 0.8 0.0001312804 5.61220010902794e-15 4.83230009387686e-15 5.93442011528769e-16 1 0.0001374078 5.46650010619743e-15 4.7872000930007e-15 4.90141009521946e-16 1.2 0.0001411377 5.39560010482006e-15 4.74540009218866e-15 4.61309508961837e-16 -0.2 -7.36293e-05 5.76090011191673e-15 6.77187613155691e-16 4.83620009395262e-15 0 -3.584259e-10 3.69530007178842e-15 1.66260003229925e-15 1.66260003229925e-15 0.2 7.453e-06 2.48370004825072e-15 1.77020003438959e-15 2.78962105419383e-16 0.4 8.4676e-06 2.44060004741342e-15 1.7290000335892e-15 2.79520905430239e-16 0.6 9.415e-06 2.39490004652561e-15 1.69290003288789e-15 2.72261505289211e-16 0.8 1.03198e-05 2.35150004568248e-15 1.65830003221571e-15 2.65811305163903e-16 1 1.1192e-05 2.31030004488209e-15 1.62470003156297e-15 2.60560905061904e-16 1.2 1.20366e-05 2.27100004411861e-15 1.59210003092965e-15 2.56164704976499e-16 -0.2 -6.96726e-05 7.54580014659189e-15 3.09830006019052e-15 4.31260008378067e-15 0 -3.5745e-09 7.71630014990419e-15 3.79040007363592e-15 3.79040007363592e-15 0.2 7.92445e-05 6.20790012060057e-15 4.82090009365539e-15 1.17450002281695e-15 0.4 9.33767e-05 5.52250010728534e-15 4.92680009571271e-15 3.53070106859076e-16 0.6 9.79807e-05 5.46450010615858e-15 4.87720009474913e-15 3.46081506723309e-16 0.8 0.0001018367 5.40710010504347e-15 4.83070009384578e-15 3.36696206540981e-16 1 0.0001052294 5.35220010397693e-15 4.78540009296574e-15 3.28602406383743e-16 1.2 0.0001083015 5.29960010295507e-15 4.74090009210124e-15 3.22020806255883e-16 -0.2 -4.40103e-05 7.6648001489037e-15 3.63150007054897e-15 3.92070007616725e-15 0 -1.03699e-08 7.83680015224514e-15 3.861800075023e-15 3.861800075023e-15 0.2 6.46478e-05 7.59420014753216e-15 4.22550008208858e-15 3.24110006296469e-15 0.4 0.0001393137 6.18370012013044e-15 5.10940009926007e-15 8.87872617248658e-16 0.6 0.0001557129 5.76900011207408e-15 5.14520009995555e-15 4.23851208234137e-16 0.8 0.0001620067 5.7058001108463e-15 5.09990009907551e-15 4.066979079009e-16 1 0.0001670382 5.65110010978365e-15 5.05770009825569e-15 3.95394407681308e-16 1.2 0.0001713831 5.59910010877345e-15 5.01670009745919e-15 3.85718207493329e-16 -0.2 -2.37872e-05 7.53030014629078e-15 3.79140007365534e-15 3.63540007062474e-15 0 -2.42277e-08 7.68480014929224e-15 3.79010007363009e-15 3.79010007363009e-15 0.2 3.97338e-05 7.63840014839083e-15 3.85940007497638e-15 3.66900007127749e-15 0.4 0.000101728 7.19600013979635e-15 4.38930008527072e-15 2.67800005202538e-15 0.6 0.0001680742 6.00440011664719e-15 5.01010009733097e-15 8.27692516079542e-16 0.8 0.0001853 5.6866001104733e-15 5.02130009754855e-15 4.91349709545427e-16 1 0.0001923437 5.61710010912313e-15 4.98100009676565e-15 4.62495008984868e-16 1.2 0.0001976895 5.56470010810516e-15 4.94310009602937e-15 4.48835908719513e-16 -0.2 -3.038e-05 6.32060012278999e-15 1.79000003477424e-15 4.32020008392832e-15 0 -4.8124e-09 5.82750011321056e-15 2.79150005423034e-15 2.79150005423034e-15 0.2 1.63934e-05 4.23750008232171e-15 3.3861000657816e-15 5.14387509992981e-16 0.4 1.80932e-05 3.96550007703758e-15 3.29480006400792e-15 3.22285406261023e-16 0.6 1.88986e-05 3.88110007539794e-15 3.22980006274517e-15 3.02949405885383e-16 0.8 1.96168e-05 3.81670007414685e-15 3.17550006169029e-15 2.93986205711256e-16 1 2.02945e-05 3.75810007300843e-15 3.1247000607034e-15 2.87616805587518e-16 1.2 2.09427e-05 3.70260007193023e-15 3.07580005975342e-15 2.82438705486923e-16 -0.2 -2.75732e-05 7.15440013898818e-15 2.92970005691514e-15 4.0740000791454e-15 0 -2.14066e-08 7.2322001404996e-15 3.53910006875393e-15 3.53910006875393e-15 0.2 3.05844e-05 6.52740012680748e-15 4.30500008363303e-15 2.03150003946585e-15 0.4 4.68866e-05 5.56420010809544e-15 4.61290008961459e-15 7.12169713835286e-16 0.6 5.14412e-05 5.21430010129795e-15 4.51210008765635e-15 4.4815160870622e-16 0.8 5.34739e-05 5.07440009858012e-15 4.42900008604197e-15 3.88192507541397e-16 1 5.4918e-05 4.98970009693466e-15 4.36660008482973e-15 3.6560600710261e-16 1.2 5.61383e-05 4.92400009565831e-15 4.31390008380593e-15 3.53389006865271e-16 -0.2 -1.92894e-05 7.30460014190611e-15 3.42210006648097e-15 3.75260007290158e-15 0 -5.72798e-08 7.42910014432477e-15 3.64880007088506e-15 3.64880007088506e-15 0.2 2.60016e-05 7.19430013976332e-15 4.00940007789042e-15 3.04080005907347e-15 0.4 5.29864e-05 6.48750012603235e-15 4.67410009080352e-15 1.63800003182135e-15 0.6 6.84081e-05 5.8660001139585e-15 4.80280009330376e-15 8.61288716732214e-16 0.8 7.53078e-05 5.53750010757674e-15 4.73420009197107e-15 5.88886311440266e-16 1 7.89062e-05 5.36250010417703e-15 4.65450009042275e-15 4.88623509492465e-16 1.2 8.1271e-05 5.25380010206532e-15 4.58840008913862e-15 4.44334808632071e-16 -0.2 -1.17461e-05 7.24710014078906e-15 3.63840007068302e-15 3.48900006778063e-15 0 -1.290697e-07 7.37230014322132e-15 3.62560007043436e-15 3.62560007043436e-15 0.2 1.76291e-05 7.29360014169241e-15 3.69660007181367e-15 3.47020006741541e-15 0.4 4.21161e-05 6.90580013415864e-15 4.30620008365634e-15 2.45720004773591e-15 0.6 6.46398e-05 6.34360012323681e-15 4.67300009078215e-15 1.50710002927836e-15 0.8 7.9033e-05 5.88950011441503e-15 4.7434000921498e-15 9.66070318767801e-16 1 8.71536e-05 5.60030010879676e-15 4.69830009127365e-15 7.12415513840061e-16 1.2 9.19898e-05 5.41720010523968e-15 4.63230008999147e-15 5.90346711468637e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_diode_st.standard0000644000175000017500000000711514163340332025676 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_core_lw.standard0000644000175000017500000001507414163340332025166 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 2.908e-06 0. 0. -2.908e-06 0.2 3.1482e-06 0. 0. -3.1482e-06 0.3 3.3636e-06 0. 0. -3.3636e-06 0.4 3.574e-06 0. 0. -3.574e-06 0.5 3.7807e-06 0. 0. -3.7807e-06 0.6 3.9848e-06 0. 0. -3.9848e-06 0.7 4.1866e-06 0. 0. -4.1866e-06 0.8 4.3866e-06 0. 0. -4.3866e-06 0.9 4.585e-06 0. 0. -4.585e-06 1.00000 4.782e-06 0. 0. -4.782e-06 1.10000 4.9777e-06 0. 0. -4.9777e-06 1.20000 5.1722e-06 0. 0. -5.1722e-06 0. 0. 0. 0. 0. 0.1 2.21863e-05 0. 0. -2.21863e-05 0.2 2.45997e-05 0. 0. -2.45997e-05 0.3 2.57915e-05 0. 0. -2.57915e-05 0.4 2.69209e-05 0. 0. -2.69209e-05 0.5 2.80088e-05 0. 0. -2.80088e-05 0.6 2.90646e-05 0. 0. -2.90646e-05 0.7 3.00941e-05 0. 0. -3.00941e-05 0.8 3.11014e-05 0. 0. -3.11014e-05 0.9 3.20897e-05 0. 0. -3.20897e-05 1.00000 3.3061e-05 0. 0. -3.3061e-05 1.10000 3.40173e-05 0. 0. -3.40173e-05 1.20000 3.49598e-05 0. 0. -3.49598e-05 0. 0. 0. 0. 0. 0.1 0.0001453855 0. 0. -0.0001453855 0.2 0.0002285978 0. 0. -0.0002285978 0.3 0.0002570121 0. 0. -0.0002570121 0.4 0.0002666445 0. 0. -0.0002666445 0.5 0.0002737066 0. 0. -0.0002737066 0.6 0.0002800685 0. 0. -0.0002800685 0.7 0.0002860244 0. 0. -0.0002860244 0.8 0.0002916766 0. 0. -0.0002916766 0.9 0.0002970823 0. 0. -0.0002970823 1.00000 0.0003022809 0. 0. -0.0003022809 1.10000 0.000307302 0. 0. -0.000307302 1.20000 0.0003121692 0. 0. -0.0003121692 0. 0. 0. 0. 0. 0.1 0.0002621886 0. 0. -0.0002621886 0.2 0.0004737011 0. 0. -0.0004737011 0.3 0.0006246332 0. 0. -0.0006246332 0.4 0.000708233 0. 0. -0.000708233 0.5 0.0007455618 0. 0. -0.0007455618 0.6 0.0007664362 0. 0. -0.0007664362 0.7 0.000782414 0. 0. -0.000782414 0.8 0.0007964115 0. 0. -0.0007964115 0.9 0.0008092836 0. 0. -0.0008092836 1.00000 0.0008213646 0. 0. -0.0008213646 1.10000 0.0008328248 0. 0. -0.0008328248 1.20000 0.0008437702 0. 0. -0.0008437702 0. 0. 0. 0. 0. 0.1 0.0003399254 0. 0. -0.0003399254 0.2 0.0006459126 0. 0. -0.0006459126 0.3 0.0009093975 0. 0. -0.0009093975 0.4 0.0011189 0. 0. -0.0011189 0.5 0.0012632 0. 0. -0.0012632 0.6 0.0013474 0. 0. -0.0013474 0.7 0.0013955 0. 0. -0.0013955 0.8 0.0014279 0. 0. -0.0014279 0.9 0.0014535 0. 0. -0.0014535 1.00000 0.0014758 0. 0. -0.0014758 1.10000 0.001496 0. 0. -0.001496 1.20000 0.0015149 0. 0. -0.0015149 0. 0. 0. 0. 0. 0.1 4.003764e-07 0. 0. -4.003764e-07 0.2 4.46622e-07 0. 0. -4.46622e-07 0.3 4.919977e-07 0. 0. -4.919977e-07 0.4 5.369611e-07 0. 0. -5.369611e-07 0.5 5.818278e-07 0. 0. -5.818278e-07 0.6 6.267578e-07 0. 0. -6.267578e-07 0.7 6.718431e-07 0. 0. -6.718431e-07 0.8 7.171402e-07 0. 0. -7.171402e-07 0.9 7.626855e-07 0. 0. -7.626855e-07 1.00000 8.085032e-07 0. 0. -8.085032e-07 1.10000 8.546094e-07 0. 0. -8.546094e-07 1.20000 9.010151e-07 0. 0. -9.010151e-07 0. 0. 0. 0. 0. 0.1 1.21708e-05 0. 0. -1.21708e-05 0.2 1.31786e-05 0. 0. -1.31786e-05 0.3 1.40936e-05 0. 0. -1.40936e-05 0.4 1.49656e-05 0. 0. -1.49656e-05 0.5 1.58082e-05 0. 0. -1.58082e-05 0.6 1.66287e-05 0. 0. -1.66287e-05 0.7 1.74314e-05 0. 0. -1.74314e-05 0.8 1.82196e-05 0. 0. -1.82196e-05 0.9 1.89952e-05 0. 0. -1.89952e-05 1.00000 1.97597e-05 0. 0. -1.97597e-05 1.10000 2.05142e-05 0. 0. -2.05142e-05 1.20000 2.12596e-05 0. 0. -2.12596e-05 0. 0. 0. 0. 0. 0.1 0.0001913874 0. 0. -0.0001913874 0.2 0.0002859078 0. 0. -0.0002859078 0.3 0.0003084662 0. 0. -0.0003084662 0.4 0.000319693 0. 0. -0.000319693 0.5 0.0003294799 0. 0. -0.0003294799 0.6 0.0003384554 0. 0. -0.0003384554 0.7 0.000346828 0. 0. -0.000346828 0.8 0.0003547267 0. 0. -0.0003547267 0.9 0.0003622422 0. 0. -0.0003622422 1.00000 0.0003694411 0. 0. -0.0003694411 1.10000 0.0003763741 0. 0. -0.0003763741 1.20000 0.0003830804 0. 0. -0.0003830804 0. 0. 0. 0. 0. 0.1 0.000371198 0. 0. -0.000371198 0.2 0.0006646868 0. 0. -0.0006646868 0.3 0.0008635132 0. 0. -0.0008635132 0.4 0.0009552708 0. 0. -0.0009552708 0.5 0.0009931286 0. 0. -0.0009931286 0.6 0.0010195 0. 0. -0.0010195 0.7 0.0010423 0. 0. -0.0010423 0.8 0.001063 0. 0. -0.001063 0.9 0.0010822 0. 0. -0.0010822 1.00000 0.0011002 0. 0. -0.0011002 1.10000 0.0011173 0. 0. -0.0011173 1.20000 0.0011334 0. 0. -0.0011334 0. 0. 0. 0. 0. 0.1 0.0004862697 0. 0. -0.0004862697 0.2 0.0009220607 0. 0. -0.0009220607 0.3 0.0012934 0. 0. -0.0012934 0.4 0.0015815 0. 0. -0.0015815 0.5 0.001762 0. 0. -0.001762 0.6 0.0018525 0. 0. -0.0018525 0.7 0.0019054 0. 0. -0.0019054 0.8 0.0019462 0. 0. -0.0019462 0.9 0.0019817 0. 0. -0.0019817 1.00000 0.002014 0. 0. -0.002014 1.10000 0.0020441 0. 0. -0.0020441 1.20000 0.0020723 0. 0. -0.0020723 0. 0. 0. 0. 0. 0.1 1.2953e-05 0. 0. -1.2953e-05 0.2 1.51978e-05 0. 0. -1.51978e-05 0.3 1.59494e-05 0. 0. -1.59494e-05 0.4 1.65515e-05 0. 0. -1.65515e-05 0.5 1.71247e-05 0. 0. -1.71247e-05 0.6 1.76841e-05 0. 0. -1.76841e-05 0.7 1.82331e-05 0. 0. -1.82331e-05 0.8 1.87731e-05 0. 0. -1.87731e-05 0.9 1.9305e-05 0. 0. -1.9305e-05 1.00000 1.98297e-05 0. 0. -1.98297e-05 1.10000 2.03477e-05 0. 0. -2.03477e-05 1.20000 2.08593e-05 0. 0. -2.08593e-05 0. 0. 0. 0. 0. 0.1 3.46297e-05 0. 0. -3.46297e-05 0.2 4.48811e-05 0. 0. -4.48811e-05 0.3 4.77767e-05 0. 0. -4.77767e-05 0.4 4.94298e-05 0. 0. -4.94298e-05 0.5 5.08289e-05 0. 0. -5.08289e-05 0.6 5.21391e-05 0. 0. -5.21391e-05 0.7 5.33998e-05 0. 0. -5.33998e-05 0.8 5.4625e-05 0. 0. -5.4625e-05 0.9 5.58214e-05 0. 0. -5.58214e-05 1.00000 5.6993e-05 0. 0. -5.6993e-05 1.10000 5.81429e-05 0. 0. -5.81429e-05 1.20000 5.92731e-05 0. 0. -5.92731e-05 0. 0. 0. 0. 0. 0.1 0.0001115452 0. 0. -0.0001115452 0.2 0.0001814103 0. 0. -0.0001814103 0.3 0.0002166603 0. 0. -0.0002166603 0.4 0.0002334927 0. 0. -0.0002334927 0.5 0.0002428357 0. 0. -0.0002428357 0.6 0.0002492744 0. 0. -0.0002492744 0.7 0.0002544661 0. 0. -0.0002544661 0.8 0.0002590295 0. 0. -0.0002590295 0.9 0.0002632221 0. 0. -0.0002632221 1.00000 0.0002671657 0. 0. -0.0002671657 1.10000 0.0002709255 0. 0. -0.0002709255 1.20000 0.0002745406 0. 0. -0.0002745406 0. 0. 0. 0. 0. 0.1 0.00018187 0. 0. -0.00018187 0.2 0.0003273736 0. 0. -0.0003273736 0.3 0.0004309572 0. 0. -0.0004309572 0.4 0.0004978271 0. 0. -0.0004978271 0.5 0.0005393901 0. 0. -0.0005393901 0.6 0.0005660478 0. 0. -0.0005660478 0.7 0.0005845145 0. 0. -0.0005845145 0.8 0.0005984804 0. 0. -0.0005984804 0.9 0.000609865 0. 0. -0.000609865 1.00000 0.0006196718 0. 0. -0.0006196718 1.10000 0.0006284458 0. 0. -0.0006284458 1.20000 0.000636499 0. 0. -0.000636499 0. 0. 0. 0. 0. 0.1 0.0002310894 0. 0. -0.0002310894 0.2 0.0004362641 0. 0. -0.0004362641 0.3 0.0006069483 0. 0. -0.0006069483 0.4 0.0007395328 0. 0. -0.0007395328 0.5 0.000837038 0. 0. -0.000837038 0.6 0.0009067542 0. 0. -0.0009067542 0.7 0.0009566999 0. 0. -0.0009566999 0.8 0.0009934484 0. 0. -0.0009934484 0.9 0.0010216 0. 0. -0.0010216 1.00000 0.0010442 0. 0. -0.0010442 1.10000 0.0010631 0. 0. -0.0010631 1.20000 0.0010794 0. 0. -0.0010794 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_diode_st.standard0000644000175000017500000002016714163340332025325 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 8.55551e-08 0. -1.006765e-13 -8.5555e-08 0.2 1.000043e-07 0. -2.006907e-13 -1.000041e-07 0.3 1.137527e-07 0. -3.00691e-13 -1.137523e-07 0.4 1.276876e-07 0. -4.00691e-13 -1.276872e-07 0.5 1.420992e-07 0. -5.00691e-13 -1.420987e-07 0.6 1.571501e-07 0. -6.00691e-13 -1.571495e-07 0.7 1.729498e-07 0. -7.00691e-13 -1.729491e-07 0.8 1.895811e-07 0. -8.00691e-13 -1.895803e-07 0.9 2.071131e-07 0. -9.00691e-13 -2.071122e-07 1.00000 2.256067e-07 0. -1.0007e-12 -2.256057e-07 1.10000 2.451184e-07 0. -1.1007e-12 -2.451173e-07 1.20000 2.657018e-07 0. -1.2007e-12 -2.657006e-07 0. 0. 0. 0. 0. 0.1 1.4156e-06 0. -1.006765e-13 -1.4156e-06 0.2 1.6263e-06 0. -2.006907e-13 -1.6263e-06 0.3 1.8119e-06 0. -3.00691e-13 -1.8119e-06 0.4 1.9911e-06 0. -4.00691e-13 -1.9911e-06 0.5 2.1692e-06 0. -5.00691e-13 -2.1692e-06 0.6 2.3487e-06 0. -6.00691e-13 -2.3487e-06 0.7 2.531e-06 0. -7.00691e-13 -2.531e-06 0.8 2.7171e-06 0. -8.00691e-13 -2.7171e-06 0.9 2.9075e-06 0. -9.00691e-13 -2.9075e-06 1.00000 3.1027e-06 0. -1.0007e-12 -3.1027e-06 1.10000 3.303e-06 0. -1.1007e-12 -3.303e-06 1.20000 3.5088e-06 0. -1.2007e-12 -3.5088e-06 0. 0. 0. 0. 0. 0.1 3.88132e-05 0. -1.006765e-13 -3.88132e-05 0.2 5.08806e-05 0. -2.006907e-13 -5.08806e-05 0.3 5.49628e-05 0. -3.00691e-13 -5.49628e-05 0.4 5.80358e-05 0. -4.00691e-13 -5.80358e-05 0.5 6.06892e-05 0. -5.00691e-13 -6.06892e-05 0.6 6.30893e-05 0. -6.00691e-13 -6.30893e-05 0.7 6.53184e-05 0. -7.00691e-13 -6.53184e-05 0.8 6.7425e-05 0. -8.00691e-13 -6.7425e-05 0.9 6.94401e-05 0. -9.00691e-13 -6.94401e-05 1.00000 7.13848e-05 0. -1.0007e-12 -7.13848e-05 1.10000 7.32744e-05 0. -1.1007e-12 -7.32744e-05 1.20000 7.51197e-05 0. -1.2007e-12 -7.51197e-05 0. 0. 0. 0. 0. 0.1 8.91989e-05 0. -1.006765e-13 -8.91989e-05 0.2 0.0001446482 0. -2.006907e-13 -0.0001446482 0.3 0.0001648523 0. -3.00691e-13 -0.0001648523 0.4 0.0001744956 0. -4.00691e-13 -0.0001744956 0.5 0.0001816178 0. -5.00691e-13 -0.0001816178 0.6 0.0001875911 0. -6.00691e-13 -0.0001875911 0.7 0.0001928498 0. -7.00691e-13 -0.0001928498 0.8 0.0001976076 0. -8.00691e-13 -0.0001976076 0.9 0.0002019922 0. -9.00691e-13 -0.0002019922 1.00000 0.0002060877 0. -1.0007e-12 -0.0002060877 1.10000 0.0002099527 0. -1.1007e-12 -0.0002099527 1.20000 0.0002136302 0. -1.2007e-12 -0.0002136302 0. 0. 0. 0. 0. 0.1 0.0001245592 0. -1.006765e-13 -0.0001245592 0.2 0.0002215971 0. -2.006907e-13 -0.0002215971 0.3 0.0002753897 0. -3.00691e-13 -0.0002753897 0.4 0.0002984105 0. -4.00691e-13 -0.0002984105 0.5 0.0003119374 0. -5.00691e-13 -0.0003119374 0.6 0.0003222617 0. -6.00691e-13 -0.0003222617 0.7 0.0003309572 0. -7.00691e-13 -0.0003309572 0.8 0.0003386041 0. -8.00691e-13 -0.0003386041 0.9 0.0003454972 0. -9.00691e-13 -0.0003454972 1.00000 0.0003518154 0. -1.0007e-12 -0.0003518154 1.10000 0.000357679 0. -1.1007e-12 -0.000357679 1.20000 0.0003631735 0. -1.2007e-12 -0.0003631735 0. 0. 0. 0. 0. 0.1 5.5788e-09 0. -1e-13 -5.5787e-09 0.2 6.7665e-09 0. -2e-13 -6.7663e-09 0.3 7.9996e-09 0. -3e-13 -7.9993e-09 0.4 9.3238e-09 0. -4e-13 -9.3234e-09 0.5 1.07633e-08 0. -5e-13 -1.07628e-08 0.6 1.2336e-08 0. -6e-13 -1.23354e-08 0.7 1.40576e-08 0. -7e-13 -1.40569e-08 0.8 1.59432e-08 0. -8e-13 -1.59424e-08 0.9 1.80079e-08 0. -9e-13 -1.8007e-08 1.00000 2.02669e-08 0. -1e-12 -2.02659e-08 1.10000 2.27364e-08 0. -1.1e-12 -2.27353e-08 1.20000 2.5433e-08 0. -1.2e-12 -2.54318e-08 0. 0. 0. 0. 0. 0.1 3.152073e-07 0. -1e-13 -3.152072e-07 0.2 3.74714e-07 0. -2e-13 -3.747138e-07 0.3 4.332934e-07 0. -3e-13 -4.332931e-07 0.4 4.936325e-07 0. -4e-13 -4.936321e-07 0.5 5.568545e-07 0. -5e-13 -5.56854e-07 0.6 6.236015e-07 0. -6e-13 -6.236009e-07 0.7 6.943157e-07 0. -7e-13 -6.94315e-07 0.8 7.693424e-07 0. -8e-13 -7.693416e-07 0.9 8.489752e-07 0. -9e-13 -8.489743e-07 1.00000 9.334782e-07 0. -1e-12 -9.334772e-07 1.10000 1.0231e-06 0. -1.1e-12 -1.0231e-06 1.20000 1.1181e-06 0. -1.2e-12 -1.1181e-06 0. 0. 0. 0. 0. 0.1 4.29658e-05 0. -1e-13 -4.29658e-05 0.2 5.25248e-05 0. -2e-13 -5.25248e-05 0.3 5.66485e-05 0. -3e-13 -5.66485e-05 0.4 5.99939e-05 0. -4e-13 -5.99939e-05 0.5 6.29332e-05 0. -5e-13 -6.29332e-05 0.6 6.56223e-05 0. -6e-13 -6.56223e-05 0.7 6.81438e-05 0. -7e-13 -6.81438e-05 0.8 7.05468e-05 0. -8e-13 -7.05468e-05 0.9 7.28626e-05 0. -9e-13 -7.28626e-05 1.00000 7.51127e-05 0. -1e-12 -7.51127e-05 1.10000 7.73119e-05 0. -1.1e-12 -7.73119e-05 1.20000 7.94714e-05 0. -1.2e-12 -7.94714e-05 0. 0. 0. 0. 0. 0.1 0.0001099755 0. -1e-13 -0.0001099755 0.2 0.0001712297 0. -2e-13 -0.0001712297 0.3 0.0001890073 0. -3e-13 -0.0001890073 0.4 0.0001992507 0. -4e-13 -0.0001992507 0.5 0.0002073745 0. -5e-13 -0.0002073745 0.6 0.0002142948 0. -6e-13 -0.0002142948 0.7 0.0002204186 0. -7e-13 -0.0002204186 0.8 0.0002259757 0. -8e-13 -0.0002259757 0.9 0.0002311098 0. -9e-13 -0.0002311098 1.00000 0.0002359166 0. -1e-12 -0.0002359166 1.10000 0.0002404635 0. -1.1e-12 -0.0002404635 1.20000 0.0002447991 0. -1.2e-12 -0.0002447991 0. 0. 0. 0. 0. 0.1 0.0001559962 0. -1e-13 -0.0001559962 0.2 0.0002716024 0. -2e-13 -0.0002716024 0.3 0.0003263495 0. -3e-13 -0.0003263495 0.4 0.0003478723 0. -4e-13 -0.0003478723 0.5 0.0003624781 0. -5e-13 -0.0003624781 0.6 0.0003743138 0. -6e-13 -0.0003743138 0.7 0.0003844556 0. -7e-13 -0.0003844556 0.8 0.0003934209 0. -8e-13 -0.0003934209 0.9 0.0004015169 0. -9e-13 -0.0004015169 1.00000 0.0004089444 0. -1e-12 -0.0004089444 1.10000 0.0004158421 0. -1.1e-12 -0.0004158421 1.20000 0.0004223099 0. -1.2e-12 -0.0004223099 0. 0. 0. 0. 0. 0.1 1.0627e-06 0. -9.304029e-10 -1.0617e-06 0.2 1.2497e-06 0. -9.904234e-10 -1.2487e-06 0.3 1.3789e-06 0. -9.943829e-10 -1.3779e-06 0.4 1.4962e-06 0. -9.947315e-10 -1.4952e-06 0.5 1.609e-06 0. -9.948475e-10 -1.608e-06 0.6 1.7202e-06 0. -9.949485e-10 -1.7192e-06 0.7 1.8312e-06 0. -9.950486e-10 -1.8302e-06 0.8 1.9428e-06 0. -9.951486e-10 -1.9418e-06 0.9 2.0556e-06 0. -9.952486e-10 -2.0546e-06 1.00000 2.1699e-06 0. -9.953486e-10 -2.1689e-06 1.10000 2.286e-06 0. -9.954486e-10 -2.285e-06 1.20000 2.404e-06 0. -9.955486e-10 -2.403e-06 0. 0. 0. 0. 0. 0.1 5.2187e-06 0. -9.304029e-10 -5.2177e-06 0.2 6.2533e-06 0. -9.904234e-10 -6.2523e-06 0.3 6.838e-06 0. -9.943829e-10 -6.837e-06 0.4 7.326e-06 0. -9.947315e-10 -7.325e-06 0.5 7.7727e-06 0. -9.948475e-10 -7.7717e-06 0.6 8.1971e-06 0. -9.949485e-10 -8.1961e-06 0.7 8.6082e-06 0. -9.950486e-10 -8.6072e-06 0.8 9.0111e-06 0. -9.951486e-10 -9.0101e-06 0.9 9.4089e-06 0. -9.952486e-10 -9.4079e-06 1.00000 9.8038e-06 0. -9.953486e-10 -9.8028e-06 1.10000 1.01972e-05 0. -9.954486e-10 -1.01962e-05 1.20000 1.05901e-05 0. -9.955486e-10 -1.05891e-05 0. 0. 0. 0. 0. 0.1 3.57072e-05 0. -9.304029e-10 -3.57063e-05 0.2 5.09106e-05 0. -9.904234e-10 -5.09096e-05 0.3 5.75053e-05 0. -9.943829e-10 -5.75043e-05 0.4 6.15354e-05 0. -9.947315e-10 -6.15344e-05 0.5 6.45696e-05 0. -9.948475e-10 -6.45686e-05 0.6 6.71033e-05 0. -9.949485e-10 -6.71023e-05 0.7 6.93407e-05 0. -9.950486e-10 -6.93397e-05 0.8 7.13828e-05 0. -9.951486e-10 -7.13818e-05 0.9 7.32869e-05 0. -9.952486e-10 -7.32859e-05 1.00000 7.50881e-05 0. -9.953486e-10 -7.50871e-05 1.10000 7.681e-05 0. -9.954486e-10 -7.6809e-05 1.20000 7.84687e-05 0. -9.955486e-10 -7.84678e-05 0. 0. 0. 0. 0. 0.1 7.04882e-05 0. -9.304029e-10 -7.04872e-05 0.2 0.0001142922 0. -9.904234e-10 -0.0001142912 0.3 0.0001372393 0. -9.943829e-10 -0.0001372383 0.4 0.0001504496 0. -9.947315e-10 -0.0001504486 0.5 0.0001593196 0. -9.948475e-10 -0.0001593186 0.6 0.0001660061 0. -9.949485e-10 -0.0001660051 0.7 0.0001714491 0. -9.950486e-10 -0.0001714481 0.8 0.0001761102 0. -9.951486e-10 -0.0001761092 0.9 0.0001802407 0. -9.952486e-10 -0.0001802397 1.00000 0.0001839898 0. -9.953486e-10 -0.0001839888 1.10000 0.0001874521 0. -9.954486e-10 -0.0001874511 1.20000 0.000190691 0. -9.955486e-10 -0.00019069 0. 0. 0. 0. 0. 0.1 9.57405e-05 0. -9.304029e-10 -9.57396e-05 0.2 0.0001669061 0. -9.904234e-10 -0.0001669051 0.3 0.0002111109 0. -9.943829e-10 -0.0002111099 0.4 0.0002380529 0. -9.947315e-10 -0.0002380519 0.5 0.0002558101 0. -9.948475e-10 -0.0002558091 0.6 0.0002686122 0. -9.949485e-10 -0.0002686112 0.7 0.0002785448 0. -9.950486e-10 -0.0002785438 0.8 0.0002866874 0. -9.951486e-10 -0.0002866864 0.9 0.0002936379 0. -9.952486e-10 -0.0002936369 1.00000 0.00029975 0. -9.953486e-10 -0.000299749 1.10000 0.0003052453 0. -9.954486e-10 -0.0003052443 1.20000 0.0003102699 0. -9.955486e-10 -0.0003102689 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_gidl_sw.standard0000644000175000017500000001642514163340332025356 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0039266 1.38939002699161e-14 3.78300007349216e-15 9.36210018187707e-15 0 -5.94672e-11 8.68390016870171e-15 3.74580007276948e-15 3.74580007276948e-15 0.2 3.15359e-05 8.57840016665216e-15 3.5873000696903e-15 3.79980007381853e-15 0.4 4.30895e-05 8.44300016402175e-15 3.58580006966116e-15 3.67460007138628e-15 0.6 5.66631e-05 8.29850016121456e-15 3.59800006989817e-15 3.52690006851692e-15 0.8 7.29429e-05 8.19650015923301e-15 3.61420007021289e-15 3.41770006639549e-15 1 9.25021e-05 8.12740015789061e-15 3.63330007058394e-15 3.33850006485688e-15 1.2 0.0001159239 8.07990015696783e-15 3.65500007100551e-15 3.27820006368543e-15 -0.2 -0.0088812 1.74794003395715e-14 4.39260008533483e-15 1.26814002463609e-14 0 -1.28692e-11 1.70968003321387e-14 8.32250016168081e-15 8.32250016168081e-15 0.2 0.0050661 1.47094002857588e-14 1.02804001997168e-14 3.78620007355432e-15 0.4 0.0058217 1.46754002850983e-14 1.02758001996275e-14 3.75090007286855e-15 0.6 0.0063918 1.45648002829497e-14 1.02759001996294e-14 3.63440007060531e-15 0.8 0.0068876 1.44137002800143e-14 1.02744001996003e-14 3.47850006757665e-15 1 0.0073414 1.42977002777607e-14 1.02706001995265e-14 3.35950006526484e-15 1.2 0.0077668 1.42137002761289e-14 1.02645001994079e-14 3.2746000636155e-15 -0.2 -0.0076676 1.85940003612247e-14 6.77850013168559e-15 1.15282002239578e-14 0 -1.9484e-12 1.90668003704098e-14 9.40150018264249e-15 9.40150018264249e-15 0.2 0.008884 1.76785003434394e-14 1.26550002458481e-14 4.65100009035475e-15 0.4 0.0107149 1.72939003359678e-14 1.30324002531798e-14 3.8522000748365e-15 0.6 0.0114605 1.71914003339765e-14 1.29386002513576e-14 3.82460007430032e-15 0.8 0.0119863 1.70233003307108e-14 1.28462002495625e-14 3.7304000724703e-15 1 0.0124015 1.67931003262387e-14 1.27554002477985e-14 3.57270006940667e-15 1.2 0.0127486 1.65922003223359e-14 1.26660002460618e-14 3.44330006689282e-15 -0.2 -0.0050913 1.88349003659047e-14 8.46110016437338e-15 1.01341001968747e-14 0 -1.797043e-13 1.91491003720086e-14 9.46340018384502e-15 9.46340018384502e-15 0.2 0.0072515 1.8647600362266e-14 1.1255600218662e-14 7.11850013829076e-15 0.4 0.0109442 1.77169003441854e-14 1.33593002595305e-14 4.01840007806526e-15 0.6 0.011854 1.75998003419105e-14 1.32835002580579e-14 3.95470007682777e-15 0.8 0.0124096 1.74984003399406e-14 1.31820002560861e-14 3.93420007642951e-15 1 0.0128209 1.7345900336978e-14 1.30819002541414e-14 3.86130007501329e-15 1.2 0.0131483 1.71140003324729e-14 1.29837002522337e-14 3.70750007202542e-15 -0.2 -0.0038944 1.37865002678297e-14 3.76970007323378e-15 9.26220017993631e-15 0 -5.91128e-11 8.55500016619757e-15 3.68480007158443e-15 3.68480007158443e-15 0.2 2.705e-06 8.49490016503001e-15 3.51120006821191e-15 3.80330007388653e-15 0.4 4.0873e-06 8.34980016221116e-15 3.49850006796519e-15 3.67890007146981e-15 0.6 5.9317e-06 8.19350015917473e-15 3.49790006795353e-15 3.53130006860239e-15 0.8 8.4027e-06 8.07830015693674e-15 3.49990006799239e-15 3.42220006648291e-15 1 1.16944e-05 7.99440015530682e-15 3.50310006805455e-15 3.34320006494819e-15 1.2 1.60462e-05 7.93070015406933e-15 3.50740006813809e-15 3.28320006378257e-15 -0.2 -0.0108904 1.77320003444787e-14 3.9152000760604e-15 1.34310002609234e-14 0 -1.27757e-11 1.73606003372635e-14 8.46250016440058e-15 8.46250016440058e-15 0.2 0.00557 1.48938002893411e-14 1.05065002041093e-14 3.7592000730298e-15 0.4 0.0064744 1.48991002894441e-14 1.05353002046688e-14 3.73210007250333e-15 0.6 0.0071952 1.48176002878608e-14 1.05661002052671e-14 3.61530007023426e-15 0.8 0.0078379 1.46927002854344e-14 1.0592400205778e-14 3.45880006719394e-15 1 0.0084342 1.46005002836432e-14 1.06139002061957e-14 3.33930006487242e-15 1.2 0.0089973 1.45383002824349e-14 1.06307002065221e-14 3.25380006321142e-15 -0.2 -0.0098257 1.86501003623146e-14 6.03410011722417e-15 1.23355002396412e-14 0 -1.9308e-12 1.94152003771782e-14 9.58700018624619e-15 9.58700018624619e-15 0.2 0.0109925 1.78577003469207e-14 1.34885002620404e-14 4.0110000779215e-15 0.4 0.012718 1.76999003438551e-14 1.34973002622114e-14 3.82060007422261e-15 0.6 0.0135847 1.75992003418988e-14 1.33990002603017e-14 3.79850007379328e-15 0.8 0.0141986 1.7429600338604e-14 1.33030002584367e-14 3.70540007198463e-15 1 0.014682 1.71972003340892e-14 1.32085002566009e-14 3.54800006892683e-15 1.2 0.0150851 1.69937003301358e-14 1.31153002547903e-14 3.41860006641298e-15 -0.2 -0.0064955 1.90096003692986e-14 8.51430016540689e-15 1.02695001995051e-14 0 -1.77626e-13 1.93732003763622e-14 9.58360018618013e-15 9.58360018618013e-15 0.2 0.0092942 1.87358003639795e-14 1.19167002315052e-14 6.55420012732813e-15 0.4 0.0129726 1.79352003484263e-14 1.36741002656461e-14 3.93680007648002e-15 0.6 0.0139824 1.78429003466332e-14 1.35690002636043e-14 3.92800007630907e-15 0.8 0.0146328 1.77424003446807e-14 1.34647002615781e-14 3.91040007596715e-15 1 0.0151138 1.75895003417104e-14 1.33626002595946e-14 3.8386000745723e-15 1.2 0.0154947 1.73568003371897e-14 1.32623002576461e-14 3.68540007159609e-15 -0.2 -0.0039139 1.4447300280667e-14 4.03660007841883e-15 9.70560018855022e-15 0 -6.00372e-11 9.71200018867455e-15 4.29110008336299e-15 4.29110008336299e-15 0.2 0.0002901502 9.20360017879789e-15 4.24790008252375e-15 3.79010007363009e-15 0.4 0.0003626462 9.09550017669784e-15 4.28120008317067e-15 3.65860007107545e-15 0.6 0.0004335174 8.98560017456282e-15 4.33040008412647e-15 3.51020006819249e-15 0.8 0.0005079295 8.91890017326704e-15 4.38360008515999e-15 3.40070006606523e-15 1 0.0005874024 8.88440017259681e-15 4.43900008623624e-15 3.32110006451885e-15 1.2 0.0006726699 8.87050017232678e-15 4.49570008733775e-15 3.26050006334158e-15 -0.2 -0.0061331 1.75147003402572e-14 5.32070010336498e-15 1.17918002290787e-14 0 -1.30199e-11 1.69813003298949e-14 8.26330016053073e-15 8.26330016053073e-15 0.2 0.0044847 1.50522002924184e-14 1.02826001997596e-14 4.15300008068013e-15 0.4 0.0053879 1.47068002857083e-14 1.02468001990641e-14 3.81290007407302e-15 0.6 0.0058865 1.4518900282058e-14 1.01908001979762e-14 3.66960007128914e-15 0.8 0.0062762 1.43242002782755e-14 1.0147500197135e-14 3.50890006816723e-15 1 0.0066143 1.41740002753576e-14 1.01085001963773e-14 3.38900006583794e-15 1.2 0.0069216 1.4059900273141e-14 1.00710001956488e-14 3.30380006418276e-15 -0.2 -0.005244 1.83450003563874e-14 6.62750012875212e-15 1.14139002217373e-14 0 -1.9769e-12 1.86104003615433e-14 9.15880017792756e-15 9.15880017792756e-15 0.2 0.0060642 1.76803003434743e-14 1.17921002290846e-14 5.51570010715324e-15 0.4 0.0082878 1.70188003306234e-14 1.24537002419374e-14 4.1363000803557e-15 0.6 0.0091669 1.67848003260775e-14 1.24017002409272e-14 3.92800007630907e-15 0.8 0.0096913 1.65741003219842e-14 1.23063002390739e-14 3.79260007367866e-15 1 0.0100722 1.6326700317178e-14 1.22115002372322e-14 3.62180007036053e-15 1.2 0.010377 1.61179003131217e-14 1.21198002354508e-14 3.48730006774761e-15 -0.2 -0.0036934 1.84935003592723e-14 7.56930014704843e-15 1.06619002071282e-14 0 -1.830697e-13 1.88089003653996e-14 9.28150018031125e-15 9.28150018031125e-15 0.2 0.0050017 1.83669003568129e-14 1.12985002194954e-14 6.77700013165645e-15 0.4 0.0079696 1.76801003434704e-14 1.2705800246835e-14 4.62790008990599e-15 0.6 0.0091976 1.73786003376132e-14 1.28310002492672e-14 4.16940008099873e-15 0.8 0.0098567 1.72051003342426e-14 1.27639002479637e-14 4.03950007847517e-15 1 0.0102895 1.70217003306797e-14 1.26694002461278e-14 3.92940007633626e-15 1.2 0.0106096 1.6775200325891e-14 1.25720002442356e-14 3.76040007305311e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1g_lw.standard0000644000175000017500000004565514163340332025151 0ustar carstencarstenFreq N(g) 100.00000 3.810304e-28 125.89254 3.810304e-28 158.48932 3.810304e-28 199.52623 3.810304e-28 251.18864 3.810304e-28 316.22777 3.810304e-28 398.10717 3.810304e-28 501.18723 3.810304e-28 630.95734 3.810304e-28 794.32823 3.810304e-28 1000 3.810304e-28 1258.93 3.810304e-28 1584.89 3.810304e-28 1995.26 3.810304e-28 2511.89 3.810304e-28 3162.28 3.810304e-28 3981.07 3.810304e-28 5011.87 3.810304e-28 6309.57 3.810304e-28 7943.28 3.810304e-28 10000 3.810304e-28 12589.25 3.810304e-28 15848.93 3.810304e-28 19952.62 3.810304e-28 25118.86 3.810304e-28 31622.78 3.810304e-28 39810.72 3.810304e-28 50118.72 3.810304e-28 63095.73 3.810304e-28 79432.82 3.810304e-28 100000 3.810304e-28 125892.54 3.810304e-28 158489.32 3.810304e-28 199526.23 3.810304e-28 251188.64 3.810304e-28 316227.77 3.810304e-28 398107.17 3.810304e-28 501187.23 3.810304e-28 630957.34 3.810304e-28 794328.23 3.810304e-28 1000000 3.810304e-28 1258930 3.810304e-28 1584890 3.810304e-28 1995260 3.810304e-28 2511890 3.810304e-28 3162280 3.810304e-28 3981070 3.810304e-28 5011870 3.810304e-28 6309570 3.810304e-28 7943280 3.810304e-28 10000000 3.810304e-28 12589250 3.810304e-28 15848930 3.810304e-28 19952620 3.810304e-28 25118860 3.810304e-28 31622780 3.810304e-28 39810720 3.810304e-28 50118720 3.810304e-28 63095730 3.810304e-28 79432820 3.810304e-28 100000000 3.810304e-28 100.00000 3.31064445924e-27 125.89254 3.31064445924e-27 158.48932 3.31064445924e-27 199.52623 3.31064445924e-27 251.18864 3.31064445924e-27 316.22777 3.31064445924e-27 398.10717 3.31064445924e-27 501.18723 3.31064445924e-27 630.95734 3.31064445924e-27 794.32823 3.31064445924e-27 1000 3.31064445924e-27 1258.93 3.31064445924e-27 1584.89 3.31064445924e-27 1995.26 3.31064445924e-27 2511.89 3.31064445924e-27 3162.28 3.31064445924e-27 3981.07 3.31064445924e-27 5011.87 3.31064445924e-27 6309.57 3.31064445924e-27 7943.28 3.31064445924e-27 10000 3.31064445924e-27 12589.25 3.31064445924e-27 15848.93 3.31064445924e-27 19952.62 3.31064445924e-27 25118.86 3.31064445924e-27 31622.78 3.31064445924e-27 39810.72 3.31064445924e-27 50118.72 3.31064445924e-27 63095.73 3.31064445924e-27 79432.82 3.31064445924e-27 100000 3.31064445924e-27 125892.54 3.31064445924e-27 158489.32 3.31064445924e-27 199526.23 3.31064445924e-27 251188.64 3.31064445924e-27 316227.77 3.31064445924e-27 398107.17 3.31064445924e-27 501187.23 3.31064445924e-27 630957.34 3.31064445924e-27 794328.23 3.31064445924e-27 1000000 3.31064445924e-27 1258930 3.31064445924e-27 1584890 3.31064445924e-27 1995260 3.31064445924e-27 2511890 3.31064445924e-27 3162280 3.31064445924e-27 3981070 3.31064445924e-27 5011870 3.31064445924e-27 6309570 3.31064445924e-27 7943280 3.31064445924e-27 10000000 3.31064445924e-27 12589250 3.31064445924e-27 15848930 3.31064445924e-27 19952620 3.31064445924e-27 25118860 3.31064445924e-27 31622780 3.31064445924e-27 39810720 3.31064445924e-27 50118720 3.31064445924e-27 63095730 3.31064445924e-27 79432820 3.31064445924e-27 100000000 3.31064445924e-27 100.00000 8.86540882969e-27 125.89254 8.86540882969e-27 158.48932 8.86540882969e-27 199.52623 8.86540882969e-27 251.18864 8.86540882969e-27 316.22777 8.86540882969e-27 398.10717 8.86540882969e-27 501.18723 8.86540882969e-27 630.95734 8.86540882969e-27 794.32823 8.86540882969e-27 1000 8.86540882969e-27 1258.93 8.86540882969e-27 1584.89 8.86540882969e-27 1995.26 8.86540882969e-27 2511.89 8.86540882969e-27 3162.28 8.86540882969e-27 3981.07 8.86540882969e-27 5011.87 8.86540882969e-27 6309.57 8.86540882969e-27 7943.28 8.86540882969e-27 10000 8.86540882969e-27 12589.25 8.86540882969e-27 15848.93 8.86540882969e-27 19952.62 8.86540882969e-27 25118.86 8.86540882969e-27 31622.78 8.86540882969e-27 39810.72 8.86540882969e-27 50118.72 8.86540882969e-27 63095.73 8.86540882969e-27 79432.82 8.86540882969e-27 100000 8.86540882969e-27 125892.54 8.86540882969e-27 158489.32 8.86540882969e-27 199526.23 8.86540882969e-27 251188.64 8.86540882969e-27 316227.77 8.86540882969e-27 398107.17 8.86540882969e-27 501187.23 8.86540882969e-27 630957.34 8.86540882969e-27 794328.23 8.86540882969e-27 1000000 8.86540882969e-27 1258930 8.86540882969e-27 1584890 8.86540882969e-27 1995260 8.86540882969e-27 2511890 8.86540882969e-27 3162280 8.86540882969e-27 3981070 8.86540882969e-27 5011870 8.86540882969e-27 6309570 8.86540882969e-27 7943280 8.86540882969e-27 10000000 8.86540882969e-27 12589250 8.86540882969e-27 15848930 8.86540882969e-27 19952620 8.86540882969e-27 25118860 8.86540882969e-27 31622780 8.86540882969e-27 39810720 8.86540882969e-27 50118720 8.86540882969e-27 63095730 8.86540882969e-27 79432820 8.86540882969e-27 100000000 8.86540882969e-27 100.00000 1.709535330064e-26 125.89254 1.709535330064e-26 158.48932 1.709535330064e-26 199.52623 1.709535330064e-26 251.18864 1.709535330064e-26 316.22777 1.709535330064e-26 398.10717 1.709535330064e-26 501.18723 1.709535330064e-26 630.95734 1.709535330064e-26 794.32823 1.709535330064e-26 1000 1.709535330064e-26 1258.93 1.709535330064e-26 1584.89 1.709535330064e-26 1995.26 1.709535330064e-26 2511.89 1.709535330064e-26 3162.28 1.709535330064e-26 3981.07 1.709535330064e-26 5011.87 1.709535330064e-26 6309.57 1.709535330064e-26 7943.28 1.709535330064e-26 10000 1.709535330064e-26 12589.25 1.709535330064e-26 15848.93 1.709535330064e-26 19952.62 1.709535330064e-26 25118.86 1.709535330064e-26 31622.78 1.709535330064e-26 39810.72 1.709535330064e-26 50118.72 1.709535330064e-26 63095.73 1.709535330064e-26 79432.82 1.709535330064e-26 100000 1.709535330064e-26 125892.54 1.709535330064e-26 158489.32 1.709535330064e-26 199526.23 1.709535330064e-26 251188.64 1.709535330064e-26 316227.77 1.709535330064e-26 398107.17 1.709535330064e-26 501187.23 1.709535330064e-26 630957.34 1.709535330064e-26 794328.23 1.709535330064e-26 1000000 1.709535330064e-26 1258930 1.709535330064e-26 1584890 1.709535330064e-26 1995260 1.709535330064e-26 2511890 1.709535330064e-26 3162280 1.709535330064e-26 3981070 1.709535330064e-26 5011870 1.709535330064e-26 6309570 1.709535330064e-26 7943280 1.709535330064e-26 10000000 1.709535330064e-26 12589250 1.709535330064e-26 15848930 1.709535330064e-26 19952620 1.709535330064e-26 25118860 1.709535330064e-26 31622780 1.709535330064e-26 39810720 1.709535330064e-26 50118720 1.709535330064e-26 63095730 1.709535330064e-26 79432820 1.709535330064e-26 100000000 1.709535330064e-26 100.00000 1.0982411209e-28 125.89254 1.0982411209e-28 158.48932 1.0982411209e-28 199.52623 1.0982411209e-28 251.18864 1.0982411209e-28 316.22777 1.0982411209e-28 398.10717 1.0982411209e-28 501.18723 1.0982411209e-28 630.95734 1.0982411209e-28 794.32823 1.0982411209e-28 1000 1.0982411209e-28 1258.93 1.0982411209e-28 1584.89 1.0982411209e-28 1995.26 1.0982411209e-28 2511.89 1.0982411209e-28 3162.28 1.0982411209e-28 3981.07 1.0982411209e-28 5011.87 1.0982411209e-28 6309.57 1.0982411209e-28 7943.28 1.0982411209e-28 10000 1.0982411209e-28 12589.25 1.0982411209e-28 15848.93 1.0982411209e-28 19952.62 1.0982411209e-28 25118.86 1.0982411209e-28 31622.78 1.0982411209e-28 39810.72 1.0982411209e-28 50118.72 1.0982411209e-28 63095.73 1.0982411209e-28 79432.82 1.0982411209e-28 100000 1.0982411209e-28 125892.54 1.0982411209e-28 158489.32 1.0982411209e-28 199526.23 1.0982411209e-28 251188.64 1.0982411209e-28 316227.77 1.0982411209e-28 398107.17 1.0982411209e-28 501187.23 1.0982411209e-28 630957.34 1.0982411209e-28 794328.23 1.0982411209e-28 1000000 1.0982411209e-28 1258930 1.0982411209e-28 1584890 1.0982411209e-28 1995260 1.0982411209e-28 2511890 1.0982411209e-28 3162280 1.0982411209e-28 3981070 1.0982411209e-28 5011870 1.0982411209e-28 6309570 1.0982411209e-28 7943280 1.0982411209e-28 10000000 1.0982411209e-28 12589250 1.0982411209e-28 15848930 1.0982411209e-28 19952620 1.0982411209e-28 25118860 1.0982411209e-28 31622780 1.0982411209e-28 39810720 1.0982411209e-28 50118720 1.0982411209e-28 63095730 1.0982411209e-28 79432820 1.0982411209e-28 100000000 1.0982411209e-28 100.00000 1.67437274481e-27 125.89254 1.67437274481e-27 158.48932 1.67437274481e-27 199.52623 1.67437274481e-27 251.18864 1.67437274481e-27 316.22777 1.67437274481e-27 398.10717 1.67437274481e-27 501.18723 1.67437274481e-27 630.95734 1.67437274481e-27 794.32823 1.67437274481e-27 1000 1.67437274481e-27 1258.93 1.67437274481e-27 1584.89 1.67437274481e-27 1995.26 1.67437274481e-27 2511.89 1.67437274481e-27 3162.28 1.67437274481e-27 3981.07 1.67437274481e-27 5011.87 1.67437274481e-27 6309.57 1.67437274481e-27 7943.28 1.67437274481e-27 10000 1.67437274481e-27 12589.25 1.67437274481e-27 15848.93 1.67437274481e-27 19952.62 1.67437274481e-27 25118.86 1.67437274481e-27 31622.78 1.67437274481e-27 39810.72 1.67437274481e-27 50118.72 1.67437274481e-27 63095.73 1.67437274481e-27 79432.82 1.67437274481e-27 100000 1.67437274481e-27 125892.54 1.67437274481e-27 158489.32 1.67437274481e-27 199526.23 1.67437274481e-27 251188.64 1.67437274481e-27 316227.77 1.67437274481e-27 398107.17 1.67437274481e-27 501187.23 1.67437274481e-27 630957.34 1.67437274481e-27 794328.23 1.67437274481e-27 1000000 1.67437274481e-27 1258930 1.67437274481e-27 1584890 1.67437274481e-27 1995260 1.67437274481e-27 2511890 1.67437274481e-27 3162280 1.67437274481e-27 3981070 1.67437274481e-27 5011870 1.67437274481e-27 6309570 1.67437274481e-27 7943280 1.67437274481e-27 10000000 1.67437274481e-27 12589250 1.67437274481e-27 15848930 1.67437274481e-27 19952620 1.67437274481e-27 25118860 1.67437274481e-27 31622780 1.67437274481e-27 39810720 1.67437274481e-27 50118720 1.67437274481e-27 63095730 1.67437274481e-27 79432820 1.67437274481e-27 100000000 1.67437274481e-27 100.00000 4.91567852161e-27 125.89254 4.91567852161e-27 158.48932 4.91567852161e-27 199.52623 4.91567852161e-27 251.18864 4.91567852161e-27 316.22777 4.91567852161e-27 398.10717 4.91567852161e-27 501.18723 4.91567852161e-27 630.95734 4.91567852161e-27 794.32823 4.91567852161e-27 1000 4.91567852161e-27 1258.93 4.91567852161e-27 1584.89 4.91567852161e-27 1995.26 4.91567852161e-27 2511.89 4.91567852161e-27 3162.28 4.91567852161e-27 3981.07 4.91567852161e-27 5011.87 4.91567852161e-27 6309.57 4.91567852161e-27 7943.28 4.91567852161e-27 10000 4.91567852161e-27 12589.25 4.91567852161e-27 15848.93 4.91567852161e-27 19952.62 4.91567852161e-27 25118.86 4.91567852161e-27 31622.78 4.91567852161e-27 39810.72 4.91567852161e-27 50118.72 4.91567852161e-27 63095.73 4.91567852161e-27 79432.82 4.91567852161e-27 100000 4.91567852161e-27 125892.54 4.91567852161e-27 158489.32 4.91567852161e-27 199526.23 4.91567852161e-27 251188.64 4.91567852161e-27 316227.77 4.91567852161e-27 398107.17 4.91567852161e-27 501187.23 4.91567852161e-27 630957.34 4.91567852161e-27 794328.23 4.91567852161e-27 1000000 4.91567852161e-27 1258930 4.91567852161e-27 1584890 4.91567852161e-27 1995260 4.91567852161e-27 2511890 4.91567852161e-27 3162280 4.91567852161e-27 3981070 4.91567852161e-27 5011870 4.91567852161e-27 6309570 4.91567852161e-27 7943280 4.91567852161e-27 10000000 4.91567852161e-27 12589250 4.91567852161e-27 15848930 4.91567852161e-27 19952620 4.91567852161e-27 25118860 4.91567852161e-27 31622780 4.91567852161e-27 39810720 4.91567852161e-27 50118720 4.91567852161e-27 63095730 4.91567852161e-27 79432820 4.91567852161e-27 100000000 4.91567852161e-27 100.00000 9.738531856e-27 125.89254 9.738531856e-27 158.48932 9.738531856e-27 199.52623 9.738531856e-27 251.18864 9.738531856e-27 316.22777 9.738531856e-27 398.10717 9.738531856e-27 501.18723 9.738531856e-27 630.95734 9.738531856e-27 794.32823 9.738531856e-27 1000 9.738531856e-27 1258.93 9.738531856e-27 1584.89 9.738531856e-27 1995.26 9.738531856e-27 2511.89 9.738531856e-27 3162.28 9.738531856e-27 3981.07 9.738531856e-27 5011.87 9.738531856e-27 6309.57 9.738531856e-27 7943.28 9.738531856e-27 10000 9.738531856e-27 12589.25 9.738531856e-27 15848.93 9.738531856e-27 19952.62 9.738531856e-27 25118.86 9.738531856e-27 31622.78 9.738531856e-27 39810.72 9.738531856e-27 50118.72 9.738531856e-27 63095.73 9.738531856e-27 79432.82 9.738531856e-27 100000 9.738531856e-27 125892.54 9.738531856e-27 158489.32 9.738531856e-27 199526.23 9.738531856e-27 251188.64 9.738531856e-27 316227.77 9.738531856e-27 398107.17 9.738531856e-27 501187.23 9.738531856e-27 630957.34 9.738531856e-27 794328.23 9.738531856e-27 1000000 9.738531856e-27 1258930 9.738531856e-27 1584890 9.738531856e-27 1995260 9.738531856e-27 2511890 9.738531856e-27 3162280 9.738531856e-27 3981070 9.738531856e-27 5011870 9.738531856e-27 6309570 9.738531856e-27 7943280 9.738531856e-27 10000000 9.738531856e-27 12589250 9.738531856e-27 15848930 9.738531856e-27 19952620 9.738531856e-27 25118860 9.738531856e-27 31622780 9.738531856e-27 39810720 9.738531856e-27 50118720 9.738531856e-27 63095730 9.738531856e-27 79432820 9.738531856e-27 100000000 9.738531856e-27 100.00000 1.38679525609e-27 125.89254 1.38679525609e-27 158.48932 1.38679525609e-27 199.52623 1.38679525609e-27 251.18864 1.38679525609e-27 316.22777 1.38679525609e-27 398.10717 1.38679525609e-27 501.18723 1.38679525609e-27 630.95734 1.38679525609e-27 794.32823 1.38679525609e-27 1000 1.38679525609e-27 1258.93 1.38679525609e-27 1584.89 1.38679525609e-27 1995.26 1.38679525609e-27 2511.89 1.38679525609e-27 3162.28 1.38679525609e-27 3981.07 1.38679525609e-27 5011.87 1.38679525609e-27 6309.57 1.38679525609e-27 7943.28 1.38679525609e-27 10000 1.38679525609e-27 12589.25 1.38679525609e-27 15848.93 1.38679525609e-27 19952.62 1.38679525609e-27 25118.86 1.38679525609e-27 31622.78 1.38679525609e-27 39810.72 1.38679525609e-27 50118.72 1.38679525609e-27 63095.73 1.38679525609e-27 79432.82 1.38679525609e-27 100000 1.38679525609e-27 125892.54 1.38679525609e-27 158489.32 1.38679525609e-27 199526.23 1.38679525609e-27 251188.64 1.38679525609e-27 316227.77 1.38679525609e-27 398107.17 1.38679525609e-27 501187.23 1.38679525609e-27 630957.34 1.38679525609e-27 794328.23 1.38679525609e-27 1000000 1.38679525609e-27 1258930 1.38679525609e-27 1584890 1.38679525609e-27 1995260 1.38679525609e-27 2511890 1.38679525609e-27 3162280 1.38679525609e-27 3981070 1.38679525609e-27 5011870 1.38679525609e-27 6309570 1.38679525609e-27 7943280 1.38679525609e-27 10000000 1.38679525609e-27 12589250 1.38679525609e-27 15848930 1.38679525609e-27 19952620 1.38679525609e-27 25118860 1.38679525609e-27 31622780 1.38679525609e-27 39810720 1.38679525609e-27 50118720 1.38679525609e-27 63095730 1.38679525609e-27 79432820 1.38679525609e-27 100000000 1.38679525609e-27 100.00000 7.73539599121e-27 125.89254 7.73539599121e-27 158.48932 7.73539599121e-27 199.52623 7.73539599121e-27 251.18864 7.73539599121e-27 316.22777 7.73539599121e-27 398.10717 7.73539599121e-27 501.18723 7.73539599121e-27 630.95734 7.73539599121e-27 794.32823 7.73539599121e-27 1000 7.73539599121e-27 1258.93 7.73539599121e-27 1584.89 7.73539599121e-27 1995.26 7.73539599121e-27 2511.89 7.73539599121e-27 3162.28 7.73539599121e-27 3981.07 7.73539599121e-27 5011.87 7.73539599121e-27 6309.57 7.73539599121e-27 7943.28 7.73539599121e-27 10000 7.73539599121e-27 12589.25 7.73539599121e-27 15848.93 7.73539599121e-27 19952.62 7.73539599121e-27 25118.86 7.73539599121e-27 31622.78 7.73539599121e-27 39810.72 7.73539599121e-27 50118.72 7.73539599121e-27 63095.73 7.73539599121e-27 79432.82 7.73539599121e-27 100000 7.73539599121e-27 125892.54 7.73539599121e-27 158489.32 7.73539599121e-27 199526.23 7.73539599121e-27 251188.64 7.73539599121e-27 316227.77 7.73539599121e-27 398107.17 7.73539599121e-27 501187.23 7.73539599121e-27 630957.34 7.73539599121e-27 794328.23 7.73539599121e-27 1000000 7.73539599121e-27 1258930 7.73539599121e-27 1584890 7.73539599121e-27 1995260 7.73539599121e-27 2511890 7.73539599121e-27 3162280 7.73539599121e-27 3981070 7.73539599121e-27 5011870 7.73539599121e-27 6309570 7.73539599121e-27 7943280 7.73539599121e-27 10000000 7.73539599121e-27 12589250 7.73539599121e-27 15848930 7.73539599121e-27 19952620 7.73539599121e-27 25118860 7.73539599121e-27 31622780 7.73539599121e-27 39810720 7.73539599121e-27 50118720 7.73539599121e-27 63095730 7.73539599121e-27 79432820 7.73539599121e-27 100000000 7.73539599121e-27 100.00000 2.029921111009e-26 125.89254 2.029921111009e-26 158.48932 2.029921111009e-26 199.52623 2.029921111009e-26 251.18864 2.029921111009e-26 316.22777 2.029921111009e-26 398.10717 2.029921111009e-26 501.18723 2.029921111009e-26 630.95734 2.029921111009e-26 794.32823 2.029921111009e-26 1000 2.029921111009e-26 1258.93 2.029921111009e-26 1584.89 2.029921111009e-26 1995.26 2.029921111009e-26 2511.89 2.029921111009e-26 3162.28 2.029921111009e-26 3981.07 2.029921111009e-26 5011.87 2.029921111009e-26 6309.57 2.029921111009e-26 7943.28 2.029921111009e-26 10000 2.029921111009e-26 12589.25 2.029921111009e-26 15848.93 2.029921111009e-26 19952.62 2.029921111009e-26 25118.86 2.029921111009e-26 31622.78 2.029921111009e-26 39810.72 2.029921111009e-26 50118.72 2.029921111009e-26 63095.73 2.029921111009e-26 79432.82 2.029921111009e-26 100000 2.029921111009e-26 125892.54 2.029921111009e-26 158489.32 2.029921111009e-26 199526.23 2.029921111009e-26 251188.64 2.029921111009e-26 316227.77 2.029921111009e-26 398107.17 2.029921111009e-26 501187.23 2.029921111009e-26 630957.34 2.029921111009e-26 794328.23 2.029921111009e-26 1000000 2.029921111009e-26 1258930 2.029921111009e-26 1584890 2.029921111009e-26 1995260 2.029921111009e-26 2511890 2.029921111009e-26 3162280 2.029921111009e-26 3981070 2.029921111009e-26 5011870 2.029921111009e-26 6309570 2.029921111009e-26 7943280 2.029921111009e-26 10000000 2.029921111009e-26 12589250 2.029921111009e-26 15848930 2.029921111009e-26 19952620 2.029921111009e-26 25118860 2.029921111009e-26 31622780 2.029921111009e-26 39810720 2.029921111009e-26 50118720 2.029921111009e-26 63095730 2.029921111009e-26 79432820 2.029921111009e-26 100000000 2.029921111009e-26 100.00000 4.272001201924e-26 125.89254 4.272001201924e-26 158.48932 4.272001201924e-26 199.52623 4.272001201924e-26 251.18864 4.272001201924e-26 316.22777 4.272001201924e-26 398.10717 4.272001201924e-26 501.18723 4.272001201924e-26 630.95734 4.272001201924e-26 794.32823 4.272001201924e-26 1000 4.272001201924e-26 1258.93 4.272001201924e-26 1584.89 4.272001201924e-26 1995.26 4.272001201924e-26 2511.89 4.272001201924e-26 3162.28 4.272001201924e-26 3981.07 4.272001201924e-26 5011.87 4.272001201924e-26 6309.57 4.272001201924e-26 7943.28 4.272001201924e-26 10000 4.272001201924e-26 12589.25 4.272001201924e-26 15848.93 4.272001201924e-26 19952.62 4.272001201924e-26 25118.86 4.272001201924e-26 31622.78 4.272001201924e-26 39810.72 4.272001201924e-26 50118.72 4.272001201924e-26 63095.73 4.272001201924e-26 79432.82 4.272001201924e-26 100000 4.272001201924e-26 125892.54 4.272001201924e-26 158489.32 4.272001201924e-26 199526.23 4.272001201924e-26 251188.64 4.272001201924e-26 316227.77 4.272001201924e-26 398107.17 4.272001201924e-26 501187.23 4.272001201924e-26 630957.34 4.272001201924e-26 794328.23 4.272001201924e-26 1000000 4.272001201924e-26 1258930 4.272001201924e-26 1584890 4.272001201924e-26 1995260 4.272001201924e-26 2511890 4.272001201924e-26 3162280 4.272001201924e-26 3981070 4.272001201924e-26 5011870 4.272001201924e-26 6309570 4.272001201924e-26 7943280 4.272001201924e-26 10000000 4.272001201924e-26 12589250 4.272001201924e-26 15848930 4.272001201924e-26 19952620 4.272001201924e-26 25118860 4.272001201924e-26 31622780 4.272001201924e-26 39810720 4.272001201924e-26 50118720 4.272001201924e-26 63095730 4.272001201924e-26 79432820 4.272001201924e-26 100000000 4.272001201924e-26 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_core_lt.standard0000644000175000017500000001643514163340332025356 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.04585e-05 6.02750011709595e-15 1.2882000250258e-15 4.50810008757864e-15 0 0. 4.97640009667628e-15 2.33950004544935e-15 2.33950004544935e-15 0.2 1.2458e-05 3.35060006509194e-15 2.67070005188356e-15 2.9214670567552e-16 0.4 1.34987e-05 3.2903000639205e-15 2.61550005081119e-15 2.88506305604798e-16 0.6 1.44607e-05 3.23270006280151e-15 2.56690004986704e-15 2.812639054641e-16 0.8 1.53717e-05 3.1774000617272e-15 2.51990004895398e-15 2.74684805336288e-16 1 1.62446e-05 3.12450006069951e-15 2.47410004806422e-15 2.69253605230777e-16 1.2 1.70867e-05 3.07330005970485e-15 2.42930004719389e-15 2.6465760514149e-16 -0.2 -4.54461e-05 7.3931001436254e-15 3.12130006063734e-15 4.13070008024691e-15 0 0. 7.49100014552729e-15 3.67340007136296e-15 3.67340007136296e-15 0.2 5.18758e-05 6.40720012447236e-15 4.47280008689287e-15 1.73350003367662e-15 0.4 6.86039e-05 5.35570010404493e-15 4.71490009159613e-15 3.89396107564779e-16 0.6 7.15768e-05 5.26700010232175e-15 4.65820009049463e-15 3.57106006937481e-16 0.8 7.3957e-05 5.20790010117362e-15 4.6113000895835e-15 3.46458506730633e-16 1 7.60776e-05 5.15310010010903e-15 4.56630008870929e-15 3.38094606568148e-16 1.2 7.80173e-05 5.10080009909299e-15 4.5223000878545e-15 3.31325406436643e-16 -0.2 -2.97885e-05 7.52710014622861e-15 3.60150006996617e-15 3.80620007394286e-15 0 0. 7.66720014895033e-15 3.77320007330177e-15 3.77320007330177e-15 0.2 4.24502e-05 7.4383001445035e-15 4.06090007889091e-15 3.24320006300549e-15 0.4 9.25303e-05 6.3253001228813e-15 4.81300009350192e-15 1.32880002581453e-15 0.6 0.0001103412 5.62680010931157e-15 4.91920009556506e-15 4.96129109638276e-16 0.8 0.0001150634 5.50330010691234e-15 4.8666000945432e-15 4.23324408223903e-16 1 0.0001182719 5.4402001056865e-15 4.82230009368259e-15 4.05364707875e-16 1.2 0.0001210027 5.38720010465687e-15 4.78160009289191e-15 3.9442830766254e-16 -0.2 -1.67936e-05 7.42390014422375e-15 3.76230007309002e-15 3.5517000689987e-15 0 0. 7.56120014689107e-15 3.7250000723654e-15 3.7250000723654e-15 0.2 2.70951e-05 7.50710014584007e-15 3.75200007288992e-15 3.63850007068496e-15 0.4 6.78196e-05 7.11150013815477e-15 4.24550008247712e-15 2.73230005308026e-15 0.6 0.0001132255 6.14000011928148e-15 4.77420009274815e-15 1.19650002324435e-15 0.8 0.0001312815 5.61220010902794e-15 4.83230009387686e-15 5.93442011528769e-16 1 0.0001374086 5.46650010619743e-15 4.7872000930007e-15 4.90141009521946e-16 1.2 0.0001411385 5.39560010482006e-15 4.74540009218866e-15 4.61309508961837e-16 -0.2 -7.36283e-05 5.76090011191673e-15 6.77187613155691e-16 4.83620009395262e-15 0 0. 3.69530007178842e-15 1.66260003229925e-15 1.66260003229925e-15 0.2 7.4531e-06 2.48370004825072e-15 1.77020003438959e-15 2.78962105419383e-16 0.4 8.4677e-06 2.44060004741342e-15 1.7290000335892e-15 2.79520905430239e-16 0.6 9.4151e-06 2.39490004652561e-15 1.69290003288789e-15 2.72261505289211e-16 0.8 1.03199e-05 2.35150004568248e-15 1.65830003221571e-15 2.65811305163903e-16 1 1.11921e-05 2.31030004488209e-15 1.62470003156297e-15 2.60560905061904e-16 1.2 1.20367e-05 2.27100004411861e-15 1.59210003092965e-15 2.56164704976499e-16 -0.2 -6.96679e-05 7.54580014659189e-15 3.09830006019052e-15 4.31260008378067e-15 0 0. 7.71630014990419e-15 3.79040007363592e-15 3.79040007363592e-15 0.2 7.92456e-05 6.20790012060057e-15 4.82090009365539e-15 1.17450002281695e-15 0.4 9.33773e-05 5.52250010728534e-15 4.92680009571271e-15 3.53070106859076e-16 0.6 9.79813e-05 5.46450010615858e-15 4.87720009474913e-15 3.46081506723309e-16 0.8 0.0001018373 5.40710010504347e-15 4.83070009384578e-15 3.36696206540981e-16 1 0.00010523 5.35220010397693e-15 4.78540009296574e-15 3.28602406383743e-16 1.2 0.0001083021 5.29960010295507e-15 4.74090009210124e-15 3.22020806255883e-16 -0.2 -4.39985e-05 7.6648001489037e-15 3.63150007054897e-15 3.92070007616725e-15 0 0. 7.83680015224514e-15 3.861800075023e-15 3.861800075023e-15 0.2 6.4652e-05 7.59420014753216e-15 4.22550008208858e-15 3.24110006296469e-15 0.4 0.0001393148 6.18370012013044e-15 5.10940009926007e-15 8.87872617248658e-16 0.6 0.0001557135 5.76900011207408e-15 5.14520009995555e-15 4.23851208234137e-16 0.8 0.0001620073 5.7058001108463e-15 5.09990009907551e-15 4.066979079009e-16 1 0.0001670388 5.65110010978365e-15 5.05770009825569e-15 3.95394407681308e-16 1.2 0.0001713836 5.59910010877345e-15 5.01670009745919e-15 3.85718207493329e-16 -0.2 -2.37613e-05 7.53030014629078e-15 3.79140007365534e-15 3.63540007062474e-15 0 0. 7.68480014929224e-15 3.79010007363009e-15 3.79010007363009e-15 0.2 3.97441e-05 7.63840014839083e-15 3.85940007497638e-15 3.66900007127749e-15 0.4 0.0001017315 7.19600013979635e-15 4.38930008527072e-15 2.67800005202538e-15 0.6 0.0001680752 6.00440011664719e-15 5.01010009733097e-15 8.27692516079542e-16 0.8 0.0001853006 5.6866001104733e-15 5.02130009754855e-15 4.91349709545427e-16 1 0.0001923443 5.61710010912313e-15 4.98100009676565e-15 4.62495008984868e-16 1.2 0.00019769 5.56470010810516e-15 4.94310009602937e-15 4.48835908719513e-16 -0.2 -3.03715e-05 6.32060012278999e-15 1.79000003477424e-15 4.32020008392832e-15 0 0. 5.82750011321056e-15 2.79150005423034e-15 2.79150005423034e-15 0.2 1.63949e-05 4.23750008232171e-15 3.3861000657816e-15 5.14387509992981e-16 0.4 1.80942e-05 3.96550007703758e-15 3.29480006400792e-15 3.22285406261023e-16 0.6 1.88995e-05 3.88110007539794e-15 3.22980006274517e-15 3.02949405885383e-16 0.8 1.96177e-05 3.81670007414685e-15 3.17550006169029e-15 2.93986205711256e-16 1 2.02953e-05 3.75810007300843e-15 3.1247000607034e-15 2.87616805587518e-16 1.2 2.09436e-05 3.70260007193023e-15 3.07580005975342e-15 2.82438705486923e-16 -0.2 -2.75466e-05 7.15440013898818e-15 2.92970005691514e-15 4.0740000791454e-15 0 0. 7.2322001404996e-15 3.53910006875393e-15 3.53910006875393e-15 0.2 3.05926e-05 6.52740012680748e-15 4.30500008363303e-15 2.03150003946585e-15 0.4 4.68899e-05 5.56420010809544e-15 4.61290008961459e-15 7.12169713835286e-16 0.6 5.14433e-05 5.21430010129795e-15 4.51210008765635e-15 4.4815160870622e-16 0.8 5.34757e-05 5.07440009858012e-15 4.42900008604197e-15 3.88192507541397e-16 1 5.49196e-05 4.98970009693466e-15 4.36660008482973e-15 3.6560600710261e-16 1.2 5.61399e-05 4.92400009565831e-15 4.31390008380593e-15 3.53389006865271e-16 -0.2 -1.92255e-05 7.30460014190611e-15 3.42210006648097e-15 3.75260007290158e-15 0 0. 7.42910014432477e-15 3.64880007088506e-15 3.64880007088506e-15 0.2 2.60253e-05 7.19430013976332e-15 4.00940007789042e-15 3.04080005907347e-15 0.4 5.29952e-05 6.48750012603235e-15 4.67410009080352e-15 1.63800003182135e-15 0.6 6.84125e-05 5.8660001139585e-15 4.80280009330376e-15 8.61288716732214e-16 0.8 7.53107e-05 5.53750010757674e-15 4.73420009197107e-15 5.88886311440266e-16 1 7.89084e-05 5.36250010417703e-15 4.65450009042275e-15 4.88623509492465e-16 1.2 8.1273e-05 5.25380010206532e-15 4.58840008913862e-15 4.44334808632071e-16 -0.2 -1.16095e-05 7.24710014078906e-15 3.63840007068302e-15 3.48900006778063e-15 0 0. 7.37230014322132e-15 3.62560007043436e-15 3.62560007043436e-15 0.2 1.76845e-05 7.29360014169241e-15 3.69660007181367e-15 3.47020006741541e-15 0.4 4.21365e-05 6.90580013415864e-15 4.30620008365634e-15 2.45720004773591e-15 0.6 6.4649e-05 6.34360012323681e-15 4.67300009078215e-15 1.50710002927836e-15 0.8 7.90381e-05 5.88950011441503e-15 4.7434000921498e-15 9.66070318767801e-16 1 8.7157e-05 5.60030010879676e-15 4.69830009127365e-15 7.12415513840061e-16 1.2 9.19924e-05 5.41720010523968e-15 4.63230008999147e-15 5.90346711468637e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_core_st.standard0000644000175000017500000001256714163340332025340 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 8.833804e-07 0. 0. -8.833804e-07 0.2 1.0333e-06 0. 0. -1.0333e-06 0.3 1.1694e-06 0. 0. -1.1694e-06 0.4 1.3038e-06 0. 0. -1.3038e-06 0.5 1.4402e-06 0. 0. -1.4402e-06 0.6 1.5805e-06 0. 0. -1.5805e-06 0.7 1.7258e-06 0. 0. -1.7258e-06 0.8 1.8768e-06 0. 0. -1.8768e-06 0.9 2.0341e-06 0. 0. -2.0341e-06 1.00000 2.1981e-06 0. 0. -2.1981e-06 1.10000 2.3692e-06 0. 0. -2.3692e-06 1.20000 2.5476e-06 0. 0. -2.5476e-06 0. 0. 0. 0. 0. 0.1 4.28937e-05 0. 0. -4.28937e-05 0.2 5.37603e-05 0. 0. -5.37603e-05 0.3 5.81948e-05 0. 0. -5.81948e-05 0.4 6.16746e-05 0. 0. -6.16746e-05 0.5 6.47085e-05 0. 0. -6.47085e-05 0.6 6.7474e-05 0. 0. -6.7474e-05 0.7 7.00612e-05 0. 0. -7.00612e-05 0.8 7.25228e-05 0. 0. -7.25228e-05 0.9 7.48924e-05 0. 0. -7.48924e-05 1.00000 7.71926e-05 0. 0. -7.71926e-05 1.10000 7.94392e-05 0. 0. -7.94392e-05 1.20000 8.16441e-05 0. 0. -8.16441e-05 0. 0. 0. 0. 0. 0.1 0.0001087783 0. 0. -0.0001087783 0.2 0.0001674103 0. 0. -0.0001674103 0.3 0.0001866831 0. 0. -0.0001866831 0.4 0.0001973605 0. 0. -0.0001973605 0.5 0.0002055861 0. 0. -0.0002055861 0.6 0.0002125443 0. 0. -0.0002125443 0.7 0.0002186904 0. 0. -0.0002186904 0.8 0.0002242656 0. 0. -0.0002242656 0.9 0.0002294169 0. 0. -0.0002294169 1.00000 0.0002342414 0. 0. -0.0002342414 1.10000 0.0002388066 0. 0. -0.0002388066 1.20000 0.0002431616 0. 0. -0.0002431616 0. 0. 0. 0. 0. 0.1 0.0001562509 0. 0. -0.0001562509 0.2 0.000267805 0. 0. -0.000267805 0.3 0.0003198847 0. 0. -0.0003198847 0.4 0.0003429339 0. 0. -0.0003429339 0.5 0.0003580214 0. 0. -0.0003580214 0.6 0.0003699535 0. 0. -0.0003699535 0.7 0.0003800938 0. 0. -0.0003800938 0.8 0.0003890332 0. 0. -0.0003890332 0.9 0.0003970993 0. 0. -0.0003970993 1.00000 0.0004044985 0. 0. -0.0004044985 1.10000 0.0004113714 0. 0. -0.0004113714 1.20000 0.0004178182 0. 0. -0.0004178182 0. 0. 0. 0. 0. 0.1 1.44382e-07 0. 0. -1.44382e-07 0.2 1.752965e-07 0. 0. -1.752965e-07 0.3 2.064914e-07 0. 0. -2.064914e-07 0.4 2.395128e-07 0. 0. -2.395128e-07 0.5 2.750405e-07 0. 0. -2.750405e-07 0.6 3.135168e-07 0. 0. -3.135168e-07 0.7 3.552958e-07 0. 0. -3.552958e-07 0.8 4.006949e-07 0. 0. -4.006949e-07 0.9 4.500171e-07 0. 0. -4.500171e-07 1.00000 5.035617e-07 0. 0. -5.035617e-07 1.10000 5.616296e-07 0. 0. -5.616296e-07 1.20000 6.245266e-07 0. 0. -6.245266e-07 0. 0. 0. 0. 0. 0.1 4.57638e-05 0. 0. -4.57638e-05 0.2 5.40462e-05 0. 0. -5.40462e-05 0.3 5.85745e-05 0. 0. -5.85745e-05 0.4 6.22968e-05 0. 0. -6.22968e-05 0.5 6.56027e-05 0. 0. -6.56027e-05 0.6 6.86581e-05 0. 0. -6.86581e-05 0.7 7.15496e-05 0. 0. -7.15496e-05 0.8 7.43277e-05 0. 0. -7.43277e-05 0.9 7.70246e-05 0. 0. -7.70246e-05 1.00000 7.96618e-05 0. 0. -7.96618e-05 1.10000 8.22545e-05 0. 0. -8.22545e-05 1.20000 8.48137e-05 0. 0. -8.48137e-05 0. 0. 0. 0. 0. 0.1 0.0001327106 0. 0. -0.0001327106 0.2 0.0001936955 0. 0. -0.0001936955 0.3 0.0002115913 0. 0. -0.0002115913 0.4 0.0002232798 0. 0. -0.0002232798 0.5 0.0002326174 0. 0. -0.0002326174 0.6 0.0002405899 0. 0. -0.0002405899 0.7 0.0002476649 0. 0. -0.0002476649 0.8 0.0002541059 0. 0. -0.0002541059 0.9 0.0002600765 0. 0. -0.0002600765 1.00000 0.0002656853 0. 0. -0.0002656853 1.10000 0.0002710078 0. 0. -0.0002710078 1.20000 0.0002760986 0. 0. -0.0002760986 0. 0. 0. 0. 0. 0.1 0.0001940993 0. 0. -0.0001940993 0.2 0.0003223242 0. 0. -0.0003223242 0.3 0.000372805 0. 0. -0.000372805 0.4 0.0003960832 0. 0. -0.0003960832 0.5 0.0004129205 0. 0. -0.0004129205 0.6 0.0004266314 0. 0. -0.0004266314 0.7 0.0004383777 0. 0. -0.0004383777 0.8 0.0004487619 0. 0. -0.0004487619 0.9 0.0004581455 0. 0. -0.0004581455 1.00000 0.0004667632 0. 0. -0.0004667632 1.10000 0.0004747767 0. 0. -0.0004747767 1.20000 0.0004823016 0. 0. -0.0004823016 0. 0. 0. 0. 0. 0.1 4.3847e-06 0. 0. -4.3847e-06 0.2 5.2458e-06 0. 0. -5.2458e-06 0.3 5.787e-06 0. 0. -5.787e-06 0.4 6.2526e-06 0. 0. -6.2526e-06 0.5 6.6867e-06 0. 0. -6.6867e-06 0.6 7.1055e-06 0. 0. -7.1055e-06 0.7 7.5167e-06 0. 0. -7.5167e-06 0.8 7.9245e-06 0. 0. -7.9245e-06 0.9 8.3317e-06 0. 0. -8.3317e-06 1.00000 8.7402e-06 0. 0. -8.7402e-06 1.10000 9.1511e-06 0. 0. -9.1511e-06 1.20000 9.5653e-06 0. 0. -9.5653e-06 0. 0. 0. 0. 0. 0.1 4.07176e-05 0. 0. -4.07176e-05 0.2 5.62889e-05 0. 0. -5.62889e-05 0.3 6.31619e-05 0. 0. -6.31619e-05 0.4 6.75605e-05 0. 0. -6.75605e-05 0.5 7.09677e-05 0. 0. -7.09677e-05 0.6 7.38649e-05 0. 0. -7.38649e-05 0.7 7.64561e-05 0. 0. -7.64561e-05 0.8 7.88445e-05 0. 0. -7.88445e-05 0.9 8.10891e-05 0. 0. -8.10891e-05 1.00000 8.32269e-05 0. 0. -8.32269e-05 1.10000 8.52824e-05 0. 0. -8.52824e-05 1.20000 8.7273e-05 0. 0. -8.7273e-05 0. 0. 0. 0. 0. 0.1 8.62793e-05 0. 0. -8.62793e-05 0.2 0.0001353254 0. 0. -0.0001353254 0.3 0.0001596379 0. 0. -0.0001596379 0.4 0.0001737496 0. 0. -0.0001737496 0.5 0.0001834406 0. 0. -0.0001834406 0.6 0.0001908966 0. 0. -0.0001908966 0.7 0.0001970643 0. 0. -0.0001970643 0.8 0.0002024116 0. 0. -0.0002024116 0.9 0.0002071958 0. 0. -0.0002071958 1.00000 0.0002115714 0. 0. -0.0002115714 1.10000 0.0002156374 0. 0. -0.0002156374 1.20000 0.000219461 0. 0. -0.000219461 0. 0. 0. 0. 0. 0.1 0.0001203972 0. 0. -0.0001203972 0.2 0.0002037721 0. 0. -0.0002037721 0.3 0.0002518278 0. 0. -0.0002518278 0.4 0.0002804183 0. 0. -0.0002804183 0.5 0.0002993817 0. 0. -0.0002993817 0.6 0.0003132605 0. 0. -0.0003132605 0.7 0.0003241979 0. 0. -0.0003241979 0.8 0.0003332881 0. 0. -0.0003332881 0.9 0.000341136 0. 0. -0.000341136 1.00000 0.0003481012 0. 0. -0.0003481012 1.10000 0.0003544103 0. 0. -0.0003544103 1.20000 0.0003602144 0. 0. -0.0003602144 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_core_st.standard0000644000175000017500000001653014163340332025361 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0002581651 7.48325714537687e-16 1.92697903743533e-16 5.22960910159536e-16 0 0. 4.49638708735109e-16 1.96906503825293e-16 1.96906503825293e-16 0.2 4.2928e-06 4.40058808549001e-16 1.90669503704127e-16 1.93287203754981e-16 0.4 5.7943e-06 4.34038408432043e-16 1.91568603721594e-16 1.86829203629522e-16 0.6 7.5229e-06 4.27660108308132e-16 1.93230903753887e-16 1.7926540348258e-16 0.8 9.5561e-06 4.23549608228278e-16 1.95193403792013e-16 1.73672503373927e-16 1 1.19512e-05 4.21207508182778e-16 1.97393903834762e-16 1.69610203295009e-16 1.2 1.47618e-05 4.20062708160538e-16 1.99821803881928e-16 1.66516203234902e-16 -0.2 -0.0004618633 9.04245417566732e-16 2.39375504650336e-16 6.45996512549743e-16 0 0. 9.04964917580709e-16 4.42732408600941e-16 4.42732408600941e-16 0.2 0.0003134119 7.83318615217493e-16 5.61408810906462e-16 1.93492203758964e-16 0.4 0.0003579843 7.7979861514911e-16 5.60032610879726e-16 1.9081840370702e-16 0.6 0.0003893329 7.7302041501743e-16 5.58698910853816e-16 1.84884703591746e-16 0.8 0.0004156346 7.64231114846681e-16 5.57341110827439e-16 1.76950103437601e-16 1 0.0004391009 7.57279714711636e-16 5.55923210799893e-16 1.70903403320132e-16 1.2 0.0004606899 7.52005414609173e-16 5.5444211077112e-16 1.66588903236315e-16 -0.2 -0.0003765672 9.55717718566682e-16 3.68086907150806e-16 5.73778011146758e-16 0 0. 9.77859818996835e-16 4.82552409374522e-16 4.82552409374522e-16 0.2 0.0004566842 9.14267017761421e-16 6.40183112436806e-16 2.56652404985974e-16 0.4 0.0005663636 8.88499917260845e-16 6.72123113057303e-16 1.96805603823333e-16 0.6 0.0006063037 8.82985417153715e-16 6.67211512961886e-16 1.95203303792205e-16 0.8 0.0006339789 8.74242616983869e-16 6.62301612866501e-16 1.90391503698726e-16 1 0.0006556186 8.62337816752595e-16 6.57479112772815e-16 1.82341903542347e-16 1.2 0.0006735714 8.51937416550547e-16 6.52731712680587e-16 1.75734303413982e-16 -0.2 -0.0002458339 9.63691718721592e-16 4.41409708575245e-16 5.10398509915487e-16 0 0. 9.78739819013931e-16 4.83845709399647e-16 4.83845709399647e-16 0.2 0.0003542694 9.57806218607255e-16 5.60736610893403e-16 3.83802007456103e-16 0.4 0.0005642628 9.05844017597788e-16 6.82464713258209e-16 2.06748804016499e-16 0.6 0.0006139079 8.992095174689e-16 6.79411613198896e-16 2.02000703924258e-16 0.8 0.0006432217 8.9397351736718e-16 6.74226313098162e-16 2.00880003902486e-16 1 0.0006647662 8.86166517215514e-16 6.69096912998513e-16 1.97150703830037e-16 1.2 0.0006818546 8.74313916985254e-16 6.64057512900613e-16 1.89301703677555e-16 -0.2 -0.000278484 7.5479881466344e-16 1.91361603717573e-16 5.31273910321032e-16 0 0. 4.33919608429735e-16 1.88858003668935e-16 1.88858003668935e-16 0.2 5.029574e-07 4.30364808360676e-16 1.80779503511995e-16 1.93581703760702e-16 0.4 7.519116e-07 4.23197308221433e-16 1.80401603504653e-16 1.87183003636395e-16 0.6 1.0793e-06 4.15508608072065e-16 1.80657503509625e-16 1.79641003489877e-16 0.8 1.5119e-06 4.09972407964514e-16 1.81097503518172e-16 1.74068903381628e-16 1 2.0802e-06 4.06102807889339e-16 1.81668603529267e-16 1.70032303303209e-16 1.2 2.8209e-06 4.03336507835599e-16 1.82370403542901e-16 1.66967603243672e-16 -0.2 -0.0005730027 9.13018917737174e-16 2.05166403985758e-16 6.89630113397411e-16 0 0. 9.24427117958801e-16 4.53021008800817e-16 4.53021008800817e-16 0.2 0.0003593361 7.98638315515108e-16 5.80184611271218e-16 1.91062703711766e-16 0.4 0.0004118927 7.97132715485859e-16 5.79660511261037e-16 1.89643703684199e-16 0.6 0.0004508408 7.91282515372207e-16 5.79263511253324e-16 1.83715303569028e-16 0.8 0.0004841119 7.8331231521737e-16 5.78746211243275e-16 1.75763903414557e-16 1 0.0005140833 7.77105215096785e-16 5.7808711123047e-16 1.69699403296742e-16 1.2 0.000541782 7.7251491500761e-16 5.77290311214991e-16 1.65373803212709e-16 -0.2 -0.0004842527 9.60759718664632e-16 3.40092806606966e-16 6.07239211796807e-16 0 0. 9.94858519327068e-16 4.9155680954945e-16 4.9155680954945e-16 0.2 0.0005725708 9.19463717862377e-16 6.88392813373374e-16 2.14079004158902e-16 0.4 0.0006723184 9.08057617640791e-16 6.94707013496039e-16 1.94967903787632e-16 0.6 0.0007186118 9.02749317537667e-16 6.89495613394798e-16 1.9383430376561e-16 0.8 0.0007509675 8.93939117366512e-16 6.84407013295942e-16 1.89081603673279e-16 1 0.0007762008 8.81924217133099e-16 6.79401413198698e-16 1.8105210351729e-16 1.2 0.0007970751 8.71397516928597e-16 6.74469013102877e-16 1.74450603389043e-16 -0.2 -0.000314504 9.72827518899073e-16 4.45617308656986e-16 5.15996710024243e-16 0 0. 9.89872019230195e-16 4.89788509515098e-16 4.89788509515098e-16 0.2 0.0004547964 9.6449411873718e-16 5.86418911392332e-16 3.65315607096969e-16 0.4 0.0006708635 9.1599601779501e-16 6.98796613575488e-16 2.01220503909101e-16 0.6 0.0007248794 9.11158717701036e-16 6.93540313473374e-16 2.0052400389557e-16 0.8 0.0007592143 9.06011217601036e-16 6.88199713369622e-16 1.99621303878033e-16 1 0.0007844847 8.98195017449191e-16 6.82969713268019e-16 1.95952703806764e-16 1.2 0.0008044263 8.86305617218216e-16 6.77831313168196e-16 1.88134703654884e-16 -0.2 -0.0002319172 7.68950214938358e-16 2.12037304119238e-16 5.25823710215152e-16 0 0. 5.3726081043734e-16 2.43635704733099e-16 2.43635704733099e-16 0.2 2.79646e-05 4.93848809593977e-16 2.47977904817455e-16 1.92741103744372e-16 0.4 3.44421e-05 4.88928809498396e-16 2.50533604867104e-16 1.85711803607814e-16 0.6 4.05223e-05 4.84208109406687e-16 2.53913704932769e-16 1.78102103459981e-16 0.8 4.67213e-05 4.81663409357252e-16 2.57446405001399e-16 1.72504003351227e-16 1 5.31725e-05 4.80708609338703e-16 2.61013705070701e-16 1.68442003272315e-16 1.2 5.99289e-05 4.80742709339365e-16 2.64576505139915e-16 1.65351803212281e-16 -0.2 -0.0003141608 9.04696617575497e-16 2.83793105513235e-16 6.021068116971e-16 0 0. 8.90232617294506e-16 4.35017708451068e-16 4.35017708451068e-16 0.2 0.0002573794 7.9732481548959e-16 5.50064610686078e-16 2.19887204271738e-16 0.4 0.0003138737 7.74756815051163e-16 5.50269610690061e-16 1.95238503792889e-16 0.6 0.0003424032 7.63720414836759e-16 5.46521210617241e-16 1.87195203636632e-16 0.8 0.0003636781 7.52926914627075e-16 5.43463810557845e-16 1.78851803474545e-16 1 0.0003816348 7.44571014464745e-16 5.4069471050405e-16 1.72693403354906e-16 1.2 0.0003976407 7.38127514339567e-16 5.3804891045265e-16 1.68337003270275e-16 -0.2 -0.0002591038 9.40620918273397e-16 3.49144006782804e-16 5.76727711204061e-16 0 0. 9.55024518553215e-16 4.70471109139819e-16 4.70471109139819e-16 0.2 0.0003083354 9.12230417721856e-16 6.00562111667091e-16 2.94115205713762e-16 0.4 0.0004330203 8.7646331702701e-16 6.4180221246826e-16 2.1429250416305e-16 0.6 0.0004820345 8.63323916771752e-16 6.40162812436412e-16 2.01406103912707e-16 0.8 0.0005105435 8.52060916552946e-16 6.35289812341744e-16 1.93954203767939e-16 1 0.0005308487 8.39147716302082e-16 6.30303812244882e-16 1.85061303595177e-16 1.2 0.0005468788 8.28288816091127e-16 6.25461012150801e-16 1.78122203460371e-16 -0.2 -0.0001797537 9.45984618377597e-16 3.94542807664764e-16 5.38465310460739e-16 0 0. 9.61719418683276e-16 4.74783809223602e-16 4.74783809223602e-16 0.2 0.0002462543 9.41472018289931e-16 5.70671311086404e-16 3.56584906927358e-16 0.4 0.0004048802 9.05982717600482e-16 6.47564712580208e-16 2.41527604692145e-16 0.6 0.0004722415 8.89417117278663e-16 6.56239312748729e-16 2.1466520417029e-16 0.8 0.0005081131 8.80017017096048e-16 6.53297012691569e-16 2.06984004021068e-16 1 0.0005313805 8.7039441690911e-16 6.48567712599693e-16 2.01001203904841e-16 1.2 0.0005484156 8.57670616661925e-16 6.43591712503025e-16 1.92223103734309e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2g_lt.standard0000644000175000017500000004536614163340332025146 0ustar carstencarstenFreq N(g) 100.00000 6.049572841e-29 125.89254 6.049572841e-29 158.48932 6.049572841e-29 199.52623 6.049572841e-29 251.18864 6.049572841e-29 316.22777 6.049572841e-29 398.10717 6.049572841e-29 501.18723 6.049572841e-29 630.95734 6.049572841e-29 794.32823 6.049572841e-29 1000 6.049572841e-29 1258.93 6.049572841e-29 1584.89 6.049572841e-29 1995.26 6.049572841e-29 2511.89 6.049572841e-29 3162.28 6.049572841e-29 3981.07 6.049572841e-29 5011.87 6.049572841e-29 6309.57 6.049572841e-29 7943.28 6.049572841e-29 10000 6.049572841e-29 12589.25 6.049572841e-29 15848.93 6.049572841e-29 19952.62 6.049572841e-29 25118.86 6.049572841e-29 31622.78 6.049572841e-29 39810.72 6.049572841e-29 50118.72 6.049572841e-29 63095.73 6.049572841e-29 79432.82 6.049572841e-29 100000 6.049572841e-29 125892.54 6.049572841e-29 158489.32 6.049572841e-29 199526.23 6.049572841e-29 251188.64 6.049572841e-29 316227.77 6.049572841e-29 398107.17 6.049572841e-29 501187.23 6.049572841e-29 630957.34 6.049572841e-29 794328.23 6.049572841e-29 1000000 6.049572841e-29 1258930 6.049572841e-29 1584890 6.049572841e-29 1995260 6.049572841e-29 2511890 6.049572841e-29 3162280 6.049572841e-29 3981070 6.049572841e-29 5011870 6.049572841e-29 6309570 6.049572841e-29 7943280 6.049572841e-29 10000000 6.049572841e-29 12589250 6.049572841e-29 15848930 6.049572841e-29 19952620 6.049572841e-29 25118860 6.049572841e-29 31622780 6.049572841e-29 39810720 6.049572841e-29 50118720 6.049572841e-29 63095730 6.049572841e-29 79432820 6.049572841e-29 100000000 6.049572841e-29 100.00000 7.1258565249e-28 125.89254 7.1258565249e-28 158.48932 7.1258565249e-28 199.52623 7.1258565249e-28 251.18864 7.1258565249e-28 316.22777 7.1258565249e-28 398.10717 7.1258565249e-28 501.18723 7.1258565249e-28 630.95734 7.1258565249e-28 794.32823 7.1258565249e-28 1000 7.1258565249e-28 1258.93 7.1258565249e-28 1584.89 7.1258565249e-28 1995.26 7.1258565249e-28 2511.89 7.1258565249e-28 3162.28 7.1258565249e-28 3981.07 7.1258565249e-28 5011.87 7.1258565249e-28 6309.57 7.1258565249e-28 7943.28 7.1258565249e-28 10000 7.1258565249e-28 12589.25 7.1258565249e-28 15848.93 7.1258565249e-28 19952.62 7.1258565249e-28 25118.86 7.1258565249e-28 31622.78 7.1258565249e-28 39810.72 7.1258565249e-28 50118.72 7.1258565249e-28 63095.73 7.1258565249e-28 79432.82 7.1258565249e-28 100000 7.1258565249e-28 125892.54 7.1258565249e-28 158489.32 7.1258565249e-28 199526.23 7.1258565249e-28 251188.64 7.1258565249e-28 316227.77 7.1258565249e-28 398107.17 7.1258565249e-28 501187.23 7.1258565249e-28 630957.34 7.1258565249e-28 794328.23 7.1258565249e-28 1000000 7.1258565249e-28 1258930 7.1258565249e-28 1584890 7.1258565249e-28 1995260 7.1258565249e-28 2511890 7.1258565249e-28 3162280 7.1258565249e-28 3981070 7.1258565249e-28 5011870 7.1258565249e-28 6309570 7.1258565249e-28 7943280 7.1258565249e-28 10000000 7.1258565249e-28 12589250 7.1258565249e-28 15848930 7.1258565249e-28 19952620 7.1258565249e-28 25118860 7.1258565249e-28 31622780 7.1258565249e-28 39810720 7.1258565249e-28 50118720 7.1258565249e-28 63095730 7.1258565249e-28 79432820 7.1258565249e-28 100000000 7.1258565249e-28 100.00000 2.84966995329e-27 125.89254 2.84966995329e-27 158.48932 2.84966995329e-27 199.52623 2.84966995329e-27 251.18864 2.84966995329e-27 316.22777 2.84966995329e-27 398.10717 2.84966995329e-27 501.18723 2.84966995329e-27 630.95734 2.84966995329e-27 794.32823 2.84966995329e-27 1000 2.84966995329e-27 1258.93 2.84966995329e-27 1584.89 2.84966995329e-27 1995.26 2.84966995329e-27 2511.89 2.84966995329e-27 3162.28 2.84966995329e-27 3981.07 2.84966995329e-27 5011.87 2.84966995329e-27 6309.57 2.84966995329e-27 7943.28 2.84966995329e-27 10000 2.84966995329e-27 12589.25 2.84966995329e-27 15848.93 2.84966995329e-27 19952.62 2.84966995329e-27 25118.86 2.84966995329e-27 31622.78 2.84966995329e-27 39810.72 2.84966995329e-27 50118.72 2.84966995329e-27 63095.73 2.84966995329e-27 79432.82 2.84966995329e-27 100000 2.84966995329e-27 125892.54 2.84966995329e-27 158489.32 2.84966995329e-27 199526.23 2.84966995329e-27 251188.64 2.84966995329e-27 316227.77 2.84966995329e-27 398107.17 2.84966995329e-27 501187.23 2.84966995329e-27 630957.34 2.84966995329e-27 794328.23 2.84966995329e-27 1000000 2.84966995329e-27 1258930 2.84966995329e-27 1584890 2.84966995329e-27 1995260 2.84966995329e-27 2511890 2.84966995329e-27 3162280 2.84966995329e-27 3981070 2.84966995329e-27 5011870 2.84966995329e-27 6309570 2.84966995329e-27 7943280 2.84966995329e-27 10000000 2.84966995329e-27 12589250 2.84966995329e-27 15848930 2.84966995329e-27 19952620 2.84966995329e-27 25118860 2.84966995329e-27 31622780 2.84966995329e-27 39810720 2.84966995329e-27 50118720 2.84966995329e-27 63095730 2.84966995329e-27 79432820 2.84966995329e-27 100000000 2.84966995329e-27 100.00000 8.07963681424e-27 125.89254 8.07963681424e-27 158.48932 8.07963681424e-27 199.52623 8.07963681424e-27 251.18864 8.07963681424e-27 316.22777 8.07963681424e-27 398.10717 8.07963681424e-27 501.18723 8.07963681424e-27 630.95734 8.07963681424e-27 794.32823 8.07963681424e-27 1000 8.07963681424e-27 1258.93 8.07963681424e-27 1584.89 8.07963681424e-27 1995.26 8.07963681424e-27 2511.89 8.07963681424e-27 3162.28 8.07963681424e-27 3981.07 8.07963681424e-27 5011.87 8.07963681424e-27 6309.57 8.07963681424e-27 7943.28 8.07963681424e-27 10000 8.07963681424e-27 12589.25 8.07963681424e-27 15848.93 8.07963681424e-27 19952.62 8.07963681424e-27 25118.86 8.07963681424e-27 31622.78 8.07963681424e-27 39810.72 8.07963681424e-27 50118.72 8.07963681424e-27 63095.73 8.07963681424e-27 79432.82 8.07963681424e-27 100000 8.07963681424e-27 125892.54 8.07963681424e-27 158489.32 8.07963681424e-27 199526.23 8.07963681424e-27 251188.64 8.07963681424e-27 316227.77 8.07963681424e-27 398107.17 8.07963681424e-27 501187.23 8.07963681424e-27 630957.34 8.07963681424e-27 794328.23 8.07963681424e-27 1000000 8.07963681424e-27 1258930 8.07963681424e-27 1584890 8.07963681424e-27 1995260 8.07963681424e-27 2511890 8.07963681424e-27 3162280 8.07963681424e-27 3981070 8.07963681424e-27 5011870 8.07963681424e-27 6309570 8.07963681424e-27 7943280 8.07963681424e-27 10000000 8.07963681424e-27 12589250 8.07963681424e-27 15848930 8.07963681424e-27 19952620 8.07963681424e-27 25118860 8.07963681424e-27 31622780 8.07963681424e-27 39810720 8.07963681424e-27 50118720 8.07963681424e-27 63095730 8.07963681424e-27 79432820 8.07963681424e-27 100000000 8.07963681424e-27 100.00000 1.562383729e-29 125.89254 1.562383729e-29 158.48932 1.562383729e-29 199.52623 1.562383729e-29 251.18864 1.562383729e-29 316.22777 1.562383729e-29 398.10717 1.562383729e-29 501.18723 1.562383729e-29 630.95734 1.562383729e-29 794.32823 1.562383729e-29 1000 1.562383729e-29 1258.93 1.562383729e-29 1584.89 1.562383729e-29 1995.26 1.562383729e-29 2511.89 1.562383729e-29 3162.28 1.562383729e-29 3981.07 1.562383729e-29 5011.87 1.562383729e-29 6309.57 1.562383729e-29 7943.28 1.562383729e-29 10000 1.562383729e-29 12589.25 1.562383729e-29 15848.93 1.562383729e-29 19952.62 1.562383729e-29 25118.86 1.562383729e-29 31622.78 1.562383729e-29 39810.72 1.562383729e-29 50118.72 1.562383729e-29 63095.73 1.562383729e-29 79432.82 1.562383729e-29 100000 1.562383729e-29 125892.54 1.562383729e-29 158489.32 1.562383729e-29 199526.23 1.562383729e-29 251188.64 1.562383729e-29 316227.77 1.562383729e-29 398107.17 1.562383729e-29 501187.23 1.562383729e-29 630957.34 1.562383729e-29 794328.23 1.562383729e-29 1000000 1.562383729e-29 1258930 1.562383729e-29 1584890 1.562383729e-29 1995260 1.562383729e-29 2511890 1.562383729e-29 3162280 1.562383729e-29 3981070 1.562383729e-29 5011870 1.562383729e-29 6309570 1.562383729e-29 7943280 1.562383729e-29 10000000 1.562383729e-29 12589250 1.562383729e-29 15848930 1.562383729e-29 19952620 1.562383729e-29 25118860 1.562383729e-29 31622780 1.562383729e-29 39810720 1.562383729e-29 50118720 1.562383729e-29 63095730 1.562383729e-29 79432820 1.562383729e-29 100000000 1.562383729e-29 100.00000 2.98218361e-28 125.89254 2.98218361e-28 158.48932 2.98218361e-28 199.52623 2.98218361e-28 251.18864 2.98218361e-28 316.22777 2.98218361e-28 398.10717 2.98218361e-28 501.18723 2.98218361e-28 630.95734 2.98218361e-28 794.32823 2.98218361e-28 1000 2.98218361e-28 1258.93 2.98218361e-28 1584.89 2.98218361e-28 1995.26 2.98218361e-28 2511.89 2.98218361e-28 3162.28 2.98218361e-28 3981.07 2.98218361e-28 5011.87 2.98218361e-28 6309.57 2.98218361e-28 7943.28 2.98218361e-28 10000 2.98218361e-28 12589.25 2.98218361e-28 15848.93 2.98218361e-28 19952.62 2.98218361e-28 25118.86 2.98218361e-28 31622.78 2.98218361e-28 39810.72 2.98218361e-28 50118.72 2.98218361e-28 63095.73 2.98218361e-28 79432.82 2.98218361e-28 100000 2.98218361e-28 125892.54 2.98218361e-28 158489.32 2.98218361e-28 199526.23 2.98218361e-28 251188.64 2.98218361e-28 316227.77 2.98218361e-28 398107.17 2.98218361e-28 501187.23 2.98218361e-28 630957.34 2.98218361e-28 794328.23 2.98218361e-28 1000000 2.98218361e-28 1258930 2.98218361e-28 1584890 2.98218361e-28 1995260 2.98218361e-28 2511890 2.98218361e-28 3162280 2.98218361e-28 3981070 2.98218361e-28 5011870 2.98218361e-28 6309570 2.98218361e-28 7943280 2.98218361e-28 10000000 2.98218361e-28 12589250 2.98218361e-28 15848930 2.98218361e-28 19952620 2.98218361e-28 25118860 2.98218361e-28 31622780 2.98218361e-28 39810720 2.98218361e-28 50118720 2.98218361e-28 63095730 2.98218361e-28 79432820 2.98218361e-28 100000000 2.98218361e-28 100.00000 1.27926398224e-27 125.89254 1.27926398224e-27 158.48932 1.27926398224e-27 199.52623 1.27926398224e-27 251.18864 1.27926398224e-27 316.22777 1.27926398224e-27 398.10717 1.27926398224e-27 501.18723 1.27926398224e-27 630.95734 1.27926398224e-27 794.32823 1.27926398224e-27 1000 1.27926398224e-27 1258.93 1.27926398224e-27 1584.89 1.27926398224e-27 1995.26 1.27926398224e-27 2511.89 1.27926398224e-27 3162.28 1.27926398224e-27 3981.07 1.27926398224e-27 5011.87 1.27926398224e-27 6309.57 1.27926398224e-27 7943.28 1.27926398224e-27 10000 1.27926398224e-27 12589.25 1.27926398224e-27 15848.93 1.27926398224e-27 19952.62 1.27926398224e-27 25118.86 1.27926398224e-27 31622.78 1.27926398224e-27 39810.72 1.27926398224e-27 50118.72 1.27926398224e-27 63095.73 1.27926398224e-27 79432.82 1.27926398224e-27 100000 1.27926398224e-27 125892.54 1.27926398224e-27 158489.32 1.27926398224e-27 199526.23 1.27926398224e-27 251188.64 1.27926398224e-27 316227.77 1.27926398224e-27 398107.17 1.27926398224e-27 501187.23 1.27926398224e-27 630957.34 1.27926398224e-27 794328.23 1.27926398224e-27 1000000 1.27926398224e-27 1258930 1.27926398224e-27 1584890 1.27926398224e-27 1995260 1.27926398224e-27 2511890 1.27926398224e-27 3162280 1.27926398224e-27 3981070 1.27926398224e-27 5011870 1.27926398224e-27 6309570 1.27926398224e-27 7943280 1.27926398224e-27 10000000 1.27926398224e-27 12589250 1.27926398224e-27 15848930 1.27926398224e-27 19952620 1.27926398224e-27 25118860 1.27926398224e-27 31622780 1.27926398224e-27 39810720 1.27926398224e-27 50118720 1.27926398224e-27 63095730 1.27926398224e-27 79432820 1.27926398224e-27 100000000 1.27926398224e-27 100.00000 3.72247634641e-27 125.89254 3.72247634641e-27 158.48932 3.72247634641e-27 199.52623 3.72247634641e-27 251.18864 3.72247634641e-27 316.22777 3.72247634641e-27 398.10717 3.72247634641e-27 501.18723 3.72247634641e-27 630.95734 3.72247634641e-27 794.32823 3.72247634641e-27 1000 3.72247634641e-27 1258.93 3.72247634641e-27 1584.89 3.72247634641e-27 1995.26 3.72247634641e-27 2511.89 3.72247634641e-27 3162.28 3.72247634641e-27 3981.07 3.72247634641e-27 5011.87 3.72247634641e-27 6309.57 3.72247634641e-27 7943.28 3.72247634641e-27 10000 3.72247634641e-27 12589.25 3.72247634641e-27 15848.93 3.72247634641e-27 19952.62 3.72247634641e-27 25118.86 3.72247634641e-27 31622.78 3.72247634641e-27 39810.72 3.72247634641e-27 50118.72 3.72247634641e-27 63095.73 3.72247634641e-27 79432.82 3.72247634641e-27 100000 3.72247634641e-27 125892.54 3.72247634641e-27 158489.32 3.72247634641e-27 199526.23 3.72247634641e-27 251188.64 3.72247634641e-27 316227.77 3.72247634641e-27 398107.17 3.72247634641e-27 501187.23 3.72247634641e-27 630957.34 3.72247634641e-27 794328.23 3.72247634641e-27 1000000 3.72247634641e-27 1258930 3.72247634641e-27 1584890 3.72247634641e-27 1995260 3.72247634641e-27 2511890 3.72247634641e-27 3162280 3.72247634641e-27 3981070 3.72247634641e-27 5011870 3.72247634641e-27 6309570 3.72247634641e-27 7943280 3.72247634641e-27 10000000 3.72247634641e-27 12589250 3.72247634641e-27 15848930 3.72247634641e-27 19952620 3.72247634641e-27 25118860 3.72247634641e-27 31622780 3.72247634641e-27 39810720 3.72247634641e-27 50118720 3.72247634641e-27 63095730 3.72247634641e-27 79432820 3.72247634641e-27 100000000 3.72247634641e-27 100.00000 2.8280476224e-28 125.89254 2.8280476224e-28 158.48932 2.8280476224e-28 199.52623 2.8280476224e-28 251.18864 2.8280476224e-28 316.22777 2.8280476224e-28 398.10717 2.8280476224e-28 501.18723 2.8280476224e-28 630.95734 2.8280476224e-28 794.32823 2.8280476224e-28 1000 2.8280476224e-28 1258.93 2.8280476224e-28 1584.89 2.8280476224e-28 1995.26 2.8280476224e-28 2511.89 2.8280476224e-28 3162.28 2.8280476224e-28 3981.07 2.8280476224e-28 5011.87 2.8280476224e-28 6309.57 2.8280476224e-28 7943.28 2.8280476224e-28 10000 2.8280476224e-28 12589.25 2.8280476224e-28 15848.93 2.8280476224e-28 19952.62 2.8280476224e-28 25118.86 2.8280476224e-28 31622.78 2.8280476224e-28 39810.72 2.8280476224e-28 50118.72 2.8280476224e-28 63095.73 2.8280476224e-28 79432.82 2.8280476224e-28 100000 2.8280476224e-28 125892.54 2.8280476224e-28 158489.32 2.8280476224e-28 199526.23 2.8280476224e-28 251188.64 2.8280476224e-28 316227.77 2.8280476224e-28 398107.17 2.8280476224e-28 501187.23 2.8280476224e-28 630957.34 2.8280476224e-28 794328.23 2.8280476224e-28 1000000 2.8280476224e-28 1258930 2.8280476224e-28 1584890 2.8280476224e-28 1995260 2.8280476224e-28 2511890 2.8280476224e-28 3162280 2.8280476224e-28 3981070 2.8280476224e-28 5011870 2.8280476224e-28 6309570 2.8280476224e-28 7943280 2.8280476224e-28 10000000 2.8280476224e-28 12589250 2.8280476224e-28 15848930 2.8280476224e-28 19952620 2.8280476224e-28 25118860 2.8280476224e-28 31622780 2.8280476224e-28 39810720 2.8280476224e-28 50118720 2.8280476224e-28 63095730 2.8280476224e-28 79432820 2.8280476224e-28 100000000 2.8280476224e-28 100.00000 2.13116106025e-27 125.89254 2.13116106025e-27 158.48932 2.13116106025e-27 199.52623 2.13116106025e-27 251.18864 2.13116106025e-27 316.22777 2.13116106025e-27 398.10717 2.13116106025e-27 501.18723 2.13116106025e-27 630.95734 2.13116106025e-27 794.32823 2.13116106025e-27 1000 2.13116106025e-27 1258.93 2.13116106025e-27 1584.89 2.13116106025e-27 1995.26 2.13116106025e-27 2511.89 2.13116106025e-27 3162.28 2.13116106025e-27 3981.07 2.13116106025e-27 5011.87 2.13116106025e-27 6309.57 2.13116106025e-27 7943.28 2.13116106025e-27 10000 2.13116106025e-27 12589.25 2.13116106025e-27 15848.93 2.13116106025e-27 19952.62 2.13116106025e-27 25118.86 2.13116106025e-27 31622.78 2.13116106025e-27 39810.72 2.13116106025e-27 50118.72 2.13116106025e-27 63095.73 2.13116106025e-27 79432.82 2.13116106025e-27 100000 2.13116106025e-27 125892.54 2.13116106025e-27 158489.32 2.13116106025e-27 199526.23 2.13116106025e-27 251188.64 2.13116106025e-27 316227.77 2.13116106025e-27 398107.17 2.13116106025e-27 501187.23 2.13116106025e-27 630957.34 2.13116106025e-27 794328.23 2.13116106025e-27 1000000 2.13116106025e-27 1258930 2.13116106025e-27 1584890 2.13116106025e-27 1995260 2.13116106025e-27 2511890 2.13116106025e-27 3162280 2.13116106025e-27 3981070 2.13116106025e-27 5011870 2.13116106025e-27 6309570 2.13116106025e-27 7943280 2.13116106025e-27 10000000 2.13116106025e-27 12589250 2.13116106025e-27 15848930 2.13116106025e-27 19952620 2.13116106025e-27 25118860 2.13116106025e-27 31622780 2.13116106025e-27 39810720 2.13116106025e-27 50118720 2.13116106025e-27 63095730 2.13116106025e-27 79432820 2.13116106025e-27 100000000 2.13116106025e-27 100.00000 7.68583602721e-27 125.89254 7.68583602721e-27 158.48932 7.68583602721e-27 199.52623 7.68583602721e-27 251.18864 7.68583602721e-27 316.22777 7.68583602721e-27 398.10717 7.68583602721e-27 501.18723 7.68583602721e-27 630.95734 7.68583602721e-27 794.32823 7.68583602721e-27 1000 7.68583602721e-27 1258.93 7.68583602721e-27 1584.89 7.68583602721e-27 1995.26 7.68583602721e-27 2511.89 7.68583602721e-27 3162.28 7.68583602721e-27 3981.07 7.68583602721e-27 5011.87 7.68583602721e-27 6309.57 7.68583602721e-27 7943.28 7.68583602721e-27 10000 7.68583602721e-27 12589.25 7.68583602721e-27 15848.93 7.68583602721e-27 19952.62 7.68583602721e-27 25118.86 7.68583602721e-27 31622.78 7.68583602721e-27 39810.72 7.68583602721e-27 50118.72 7.68583602721e-27 63095.73 7.68583602721e-27 79432.82 7.68583602721e-27 100000 7.68583602721e-27 125892.54 7.68583602721e-27 158489.32 7.68583602721e-27 199526.23 7.68583602721e-27 251188.64 7.68583602721e-27 316227.77 7.68583602721e-27 398107.17 7.68583602721e-27 501187.23 7.68583602721e-27 630957.34 7.68583602721e-27 794328.23 7.68583602721e-27 1000000 7.68583602721e-27 1258930 7.68583602721e-27 1584890 7.68583602721e-27 1995260 7.68583602721e-27 2511890 7.68583602721e-27 3162280 7.68583602721e-27 3981070 7.68583602721e-27 5011870 7.68583602721e-27 6309570 7.68583602721e-27 7943280 7.68583602721e-27 10000000 7.68583602721e-27 12589250 7.68583602721e-27 15848930 7.68583602721e-27 19952620 7.68583602721e-27 25118860 7.68583602721e-27 31622780 7.68583602721e-27 39810720 7.68583602721e-27 50118720 7.68583602721e-27 63095730 7.68583602721e-27 79432820 7.68583602721e-27 100000000 7.68583602721e-27 100.00000 2.086057373761e-26 125.89254 2.086057373761e-26 158.48932 2.086057373761e-26 199.52623 2.086057373761e-26 251.18864 2.086057373761e-26 316.22777 2.086057373761e-26 398.10717 2.086057373761e-26 501.18723 2.086057373761e-26 630.95734 2.086057373761e-26 794.32823 2.086057373761e-26 1000 2.086057373761e-26 1258.93 2.086057373761e-26 1584.89 2.086057373761e-26 1995.26 2.086057373761e-26 2511.89 2.086057373761e-26 3162.28 2.086057373761e-26 3981.07 2.086057373761e-26 5011.87 2.086057373761e-26 6309.57 2.086057373761e-26 7943.28 2.086057373761e-26 10000 2.086057373761e-26 12589.25 2.086057373761e-26 15848.93 2.086057373761e-26 19952.62 2.086057373761e-26 25118.86 2.086057373761e-26 31622.78 2.086057373761e-26 39810.72 2.086057373761e-26 50118.72 2.086057373761e-26 63095.73 2.086057373761e-26 79432.82 2.086057373761e-26 100000 2.086057373761e-26 125892.54 2.086057373761e-26 158489.32 2.086057373761e-26 199526.23 2.086057373761e-26 251188.64 2.086057373761e-26 316227.77 2.086057373761e-26 398107.17 2.086057373761e-26 501187.23 2.086057373761e-26 630957.34 2.086057373761e-26 794328.23 2.086057373761e-26 1000000 2.086057373761e-26 1258930 2.086057373761e-26 1584890 2.086057373761e-26 1995260 2.086057373761e-26 2511890 2.086057373761e-26 3162280 2.086057373761e-26 3981070 2.086057373761e-26 5011870 2.086057373761e-26 6309570 2.086057373761e-26 7943280 2.086057373761e-26 10000000 2.086057373761e-26 12589250 2.086057373761e-26 15848930 2.086057373761e-26 19952620 2.086057373761e-26 25118860 2.086057373761e-26 31622780 2.086057373761e-26 39810720 2.086057373761e-26 50118720 2.086057373761e-26 63095730 2.086057373761e-26 79432820 2.086057373761e-26 100000000 2.086057373761e-26 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_gidl_lt.standard0000644000175000017500000000527414163340332025320 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 4.38142e-07 0. -2.4303e-12 -4.381395e-07 0.35 1.517e-06 0. -1.2869e-12 -1.517e-06 0.45 2.8393e-06 0. -6.491997e-13 -2.8393e-06 0.55 4.1351e-06 0. -3.101545e-13 -4.1351e-06 0.65 5.3094e-06 0. -1.393706e-13 -5.3094e-06 0.75 6.3294e-06 0. -5.84319e-14 -6.3294e-06 0.85 7.1894e-06 0. -2.26392e-14 -7.1894e-06 0.95 7.8971e-06 0. -8.0141e-15 -7.8971e-06 1.05000 8.4666e-06 0. -2.5567e-15 -8.4666e-06 1.15000 8.9145e-06 0. -7.229661e-16 -8.9145e-06 0.25 8.617947e-07 0. -1.049645e-10 -8.616898e-07 0.35 3.6473e-06 0. -7.37774e-11 -3.6473e-06 0.45 8.9012e-06 0. -5.08965e-11 -8.9012e-06 0.55 1.64938e-05 0. -3.44028e-11 -1.64937e-05 0.65 2.60768e-05 0. -2.27409e-11 -2.60768e-05 0.75 3.72449e-05 0. -1.46687e-11 -3.72449e-05 0.85 4.96065e-05 0. -9.2108e-12 -4.96065e-05 0.95 6.2809e-05 0. -5.6148e-12 -6.2809e-05 1.05000 7.65378e-05 0. -3.3124e-12 -7.65378e-05 1.15000 9.05013e-05 0. -1.8846e-12 -9.05013e-05 0.25 1.801514e-07 0. -2.4143e-12 -1.80149e-07 0.35 1.5207e-06 0. -1.2778e-12 -1.5207e-06 0.45 3.5645e-06 0. -6.442432e-13 -3.5645e-06 0.55 5.5873e-06 0. -3.075951e-13 -5.5873e-06 0.65 7.3977e-06 0. -1.381234e-13 -7.3977e-06 0.75 8.9459e-06 0. -5.78629e-14 -8.9459e-06 0.85 1.02305e-05 0. -2.23984e-14 -1.02305e-05 0.95 1.12705e-05 0. -7.9206e-15 -1.12705e-05 1.05000 1.20933e-05 0. -2.5238e-15 -1.20933e-05 1.15000 1.27286e-05 0. -7.126664e-16 -1.27286e-05 0.25 3.562151e-07 0. -1.04576e-10 -3.561105e-07 0.35 3.2011e-06 0. -7.34902e-11 -3.2011e-06 0.45 9.9841e-06 0. -5.06877e-11 -9.9841e-06 0.55 2.04766e-05 0. -3.42537e-11 -2.04766e-05 0.65 3.39866e-05 0. -2.26367e-11 -3.39866e-05 0.75 4.97761e-05 0. -1.45975e-11 -4.97761e-05 0.85 6.71994e-05 0. -9.1633e-12 -6.71994e-05 0.95 8.57313e-05 0. -5.5839e-12 -8.57313e-05 1.05000 0.0001049515 0. -3.293e-12 -0.0001049515 1.15000 0.0001245139 0. -1.8728e-12 -0.0001245139 0.25 7.838029e-07 0. -2.4561e-12 -7.838005e-07 0.35 1.5254e-06 0. -1.3016e-12 -1.5254e-06 0.45 2.3204e-06 0. -6.571878e-13 -2.3204e-06 0.55 3.0893e-06 0. -3.142824e-13 -3.0893e-06 0.65 3.7936e-06 0. -1.413837e-13 -3.7936e-06 0.75 4.4164e-06 0. -5.93513e-14 -4.4164e-06 0.85 4.9525e-06 0. -2.30288e-14 -4.9525e-06 0.95 5.4038e-06 0. -8.1656e-15 -5.4038e-06 1.05000 5.7759e-06 0. -2.61e-15 -5.7759e-06 1.15000 6.0763e-06 0. -7.397033e-16 -6.0763e-06 0.25 1.909e-06 0. -1.055876e-10 -1.9089e-06 0.35 4.6434e-06 0. -7.42383e-11 -4.6434e-06 0.45 8.8e-06 0. -5.12316e-11 -8.8e-06 0.55 1.42839e-05 0. -3.4642e-11 -1.42838e-05 0.65 2.09061e-05 0. -2.29082e-11 -2.09061e-05 0.75 2.84305e-05 0. -1.47832e-11 -2.84305e-05 0.85 3.66016e-05 0. -9.2872e-12 -3.66015e-05 0.95 4.51629e-05 0. -5.6643e-12 -4.51629e-05 1.05000 5.38692e-05 0. -3.3437e-12 -5.38692e-05 1.15000 6.24946e-05 0. -1.9036e-12 -6.24946e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_ig_sw.standard0000644000175000017500000000710614163340332025214 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258.93 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584.89 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995.26 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511.89 1.75123216809258e-14 1.31203652818349e-14 3.96400600451493e-15 3162.28 1.75123283034693e-14 1.31203729905505e-14 3.96401137195977e-15 3981.07 1.75123528093895e-14 1.31203892665247e-14 3.96401577911747e-15 5011.87 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309.57 1.75123534704896e-14 1.31203916980709e-14 3.96401516076056e-15 7943.28 1.75123493857524e-14 1.31203908214922e-14 3.96401456366612e-15 10000 1.75118183884012e-14 1.31203849591705e-14 3.96401328026089e-15 12589.25 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848.93 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952.62 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118.86 1.7512273535172e-14 1.31201073878507e-14 3.96401421773492e-15 31622.78 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810.72 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118.72 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095.73 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432.82 1.75124331366568e-14 1.31204496308788e-14 3.9640055510179e-15 100000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 125892.54 1.75123794760688e-14 1.3120378267772e-14 3.9640652222836e-15 158489.32 1.75123406932017e-14 1.31203724576972e-14 3.96397828169714e-15 199526.23 1.75123200499053e-14 1.31203806208689e-14 3.96399255223323e-15 251188.64 1.75123341071921e-14 1.31203587414666e-14 3.96403702996212e-15 316227.77 1.75123511064457e-14 1.31203724674684e-14 3.96402935384323e-15 398107.17 1.75123253422953e-14 1.31203916594299e-14 3.96401008860928e-15 501187.23 1.75123484155246e-14 1.31203920593492e-14 3.96401807588318e-15 630957.34 1.75123389888465e-14 1.31203745382247e-14 3.96400797982497e-15 794328.23 1.751235232957e-14 1.31203890260877e-14 3.96400540130628e-15 1000000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258930 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584890 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995260 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511890 1.75123153448624e-14 1.31203652818349e-14 3.96400600451493e-15 3162280 1.75123283034693e-14 1.31203780234679e-14 3.96401137195977e-15 3981070 1.75123488115964e-14 1.31203932643179e-14 3.96401577911747e-15 5011870 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309570 1.75123534704896e-14 1.31203942205082e-14 3.96401516076055e-15 7943280 1.75123473821098e-14 1.31203888178495e-14 3.96401456366612e-15 10000000 1.75118183884012e-14 1.31203865507199e-14 3.96401328026089e-15 12589250 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848930 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952620 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118860 1.7512273535172e-14 1.31201073878507e-14 3.96401358412757e-15 31622780 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810720 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118720 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095730 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432820 1.75124331366568e-14 1.31204496308787e-14 3.9640055510179e-15 100000000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_ig_lt.standard0000644000175000017500000001663014163340332024660 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.55078e-05 6.7326001307939e-15 2.00050003886362e-15 4.50010008742323e-15 0 -1.9302e-09 6.43970012510374e-15 3.08870006000403e-15 3.08870006000403e-15 0.2 2.71456e-05 4.56290008864324e-15 3.81710007415462e-15 3.23603106286622e-16 0.4 2.90054e-05 4.46080008665975e-15 3.75690007298511e-15 2.79909205437783e-16 0.6 3.05587e-05 4.3984000854475e-15 3.70380007195354e-15 2.72538705294596e-16 0.8 3.1987e-05 4.33860008428577e-15 3.652400070955e-15 2.66051905168577e-16 1 3.33291e-05 4.28110008316872e-15 3.60200006997588e-15 2.60722605065045e-16 1.2 3.46074e-05 4.22520008208276e-15 3.55250006901425e-15 2.56228104977731e-16 -0.2 -4.48533e-05 7.53930014646562e-15 3.29300006397295e-15 4.10020007965439e-15 0 -8.768e-09 7.65330014868029e-15 3.75280007290546e-15 3.75280007290546e-15 0.2 5.47144e-05 6.93470013472008e-15 4.43220008610414e-15 2.30170004471501e-15 0.4 8.33752e-05 5.643500109636e-15 4.90920009537079e-15 4.42731208600918e-16 0.6 8.77262e-05 5.4978001068055e-15 4.84960009421294e-15 3.51673206831938e-16 0.8 9.06544e-05 5.43430010557188e-15 4.80070009326297e-15 3.38414606574364e-16 1 9.31799e-05 5.37830010448397e-15 4.75500009237516e-15 3.29883406408629e-16 1.2 9.5449e-05 5.32530010345435e-15 4.71050009151066e-15 3.23185806278515e-16 -0.2 -2.83163e-05 7.58110014727766e-15 3.6592000710871e-15 3.79870007379716e-15 0 -2.35788e-08 7.72140015000327e-15 3.79860007379522e-15 3.79860007379522e-15 0.2 4.17403e-05 7.55180014670846e-15 4.03880007846157e-15 3.37500006556596e-15 0.4 9.49586e-05 6.64410012907461e-15 4.78710009299876e-15 1.66440003233422e-15 0.6 0.0001206747 5.80810011283368e-15 5.02010009752524e-15 5.49077510666902e-16 0.8 0.0001270923 5.63990010956606e-15 4.97160009658303e-15 4.23655708230339e-16 1 0.0001308881 5.56900010818869e-15 4.92530009568357e-15 3.99605607763119e-16 1.2 0.0001339877 5.51370010711438e-15 4.88310009486375e-15 3.87707907531983e-16 -0.2 -1.50356e-05 7.45460014482015e-15 3.79000007362815e-15 3.55220006900842e-15 0 -5.33361e-08 7.59170014748359e-15 3.73900007263737e-15 3.73900007263737e-15 0.2 2.56633e-05 7.55320014673565e-15 3.74740007280056e-15 3.68630007161357e-15 0.4 6.56859e-05 7.22770014041218e-15 4.20940008177581e-15 2.88010005595156e-15 0.6 0.0001147267 6.33850012313773e-15 4.77890009283946e-15 1.37920002679365e-15 0.8 0.0001379741 5.73850011148156e-15 4.89550009510464e-15 6.36742612369968e-16 1 0.0001457674 5.56160010804494e-15 4.85580009433339e-15 4.94391809604526e-16 1.2 0.0001501222 5.48230010650438e-15 4.81300009350192e-15 4.57853908894706e-16 -0.2 -8.62185e-05 6.61610012853066e-15 1.50630002926282e-15 4.86320009447715e-15 0 -7.474648e-10 6.26120012163603e-15 2.98850005805745e-15 2.98850005805745e-15 0.2 2.70542e-05 4.36500008479864e-15 3.65750007105408e-15 2.6940560523373e-16 0.4 2.95108e-05 4.30450008362331e-15 3.59870006991177e-15 2.69499505235554e-16 0.6 3.16808e-05 4.24220008241302e-15 3.54550006887826e-15 2.62359405096843e-16 0.8 3.36888e-05 4.18200008124351e-15 3.49360006787e-15 2.56004704973391e-16 1 3.55901e-05 4.12410008011869e-15 3.44260006687922e-15 2.50842304873101e-16 1.2 3.74148e-05 4.06780007902495e-15 3.39250006590593e-15 2.46530404789334e-16 -0.2 -6.85279e-05 7.70240014963415e-15 3.2971000640526e-15 4.26750008290452e-15 0 -3.967e-09 7.87690015302415e-15 3.8700000751823e-15 3.8700000751823e-15 0.2 8.54725e-05 6.92450013452193e-15 4.748300092245e-15 1.97030003827692e-15 0.4 0.0001159998 5.78220011233052e-15 5.14890010002743e-15 3.52766406853176e-16 0.6 0.0001219218 5.7147001110192e-15 5.09700009901917e-15 3.38054406567366e-16 0.8 0.0001266245 5.65600010987884e-15 5.04950009809639e-15 3.28624306384168e-16 1 0.0001306597 5.59990010878899e-15 5.00310009719498e-15 3.20625906228784e-16 1.2 0.0001342415 5.54620010774576e-15 4.95760009631106e-15 3.14153306103041e-16 -0.2 -4.15894e-05 7.71620014990224e-15 3.69220007172819e-15 3.90870007593413e-15 0 -1.09454e-08 7.8852001531854e-15 3.88480007546982e-15 3.88480007546982e-15 0.2 6.33707e-05 7.71220014982454e-15 4.19240008144555e-15 3.38970006585154e-15 0.4 0.0001453354 6.52050012667344e-15 5.11570009938246e-15 1.20840002347553e-15 0.6 0.0001707922 5.92180011504252e-15 5.26820010234507e-15 4.2972980834834e-16 0.8 0.0001783353 5.84700011358939e-15 5.22240010145531e-15 4.0086630778761e-16 1 0.0001840279 5.79050011249176e-15 5.17910010061413e-15 3.89006707557214e-16 1.2 0.0001888657 5.73740011146019e-15 5.13690009979431e-15 3.79346007369536e-16 -0.2 -2.0968e-05 7.55880014684444e-15 3.81960007420318e-15 3.63380007059366e-15 0 -2.50624e-08 7.71200014982065e-15 3.80290007387875e-15 3.80290007387875e-15 0.2 3.74578e-05 7.68210014923979e-15 3.85100007481319e-15 3.71900007224883e-15 0.4 9.82526e-05 7.32460014229465e-15 4.3450000844101e-15 2.84750005531824e-15 0.6 0.0001724266 6.18120012008187e-15 5.04230009795652e-15 9.6125271867421e-16 0.8 0.0001951977 5.78360011235772e-15 5.09530009898615e-15 4.98194409678399e-16 1 0.0002034245 5.70410011081328e-15 5.05550009821295e-15 4.58371808904767e-16 1.2 0.0002093283 5.64990010976033e-15 5.01690009746307e-15 4.43640208618577e-16 -0.2 -3.24224e-05 6.74310013099788e-15 2.1815000423799e-15 4.33790008427217e-15 0 -6.1862e-09 6.56090012745829e-15 3.15910006137168e-15 3.15910006137168e-15 0.2 2.37306e-05 5.19990010101821e-15 3.99190007755045e-15 8.4374331639136e-16 0.4 2.80551e-05 4.68080009093368e-15 3.92750007629935e-15 3.46451806730502e-16 0.6 2.93477e-05 4.5579000885461e-15 3.84590007471411e-15 3.01062005848717e-16 0.8 3.03368e-05 4.48360008710268e-15 3.78530007353684e-15 2.87694205589021e-16 1 3.12281e-05 4.4211000858885e-15 3.7318000724975e-15 2.80165505442762e-16 1.2 3.20614e-05 4.3635000847695e-15 3.68130007151644e-15 2.7463290533528e-16 -0.2 -2.73697e-05 7.28680014156031e-15 3.08190005987192e-15 4.04530007858785e-15 0 -2.33669e-08 7.37940014335925e-15 3.60920007011575e-15 3.60920007011575e-15 0.2 3.19771e-05 6.85280013312901e-15 4.30180008357086e-15 2.35090004567082e-15 0.4 5.30521e-05 5.93280011525622e-15 4.76570009258302e-15 8.99680917478058e-16 0.6 6.01988e-05 5.49370010672585e-15 4.69850009127753e-15 4.98316709680774e-16 0.8 6.31838e-05 5.3123001032018e-15 4.60690008949802e-15 3.99991907770623e-16 1 6.50896e-05 5.2102001012183e-15 4.5368000881362e-15 3.65830607106973e-16 1.2 6.66003e-05 5.13620009978071e-15 4.47930008701915e-15 3.49358806786977e-16 -0.2 -1.84727e-05 7.36280014303676e-15 3.48520006770681e-15 3.74200007269565e-15 0 -6.00754e-08 7.48740014545736e-15 3.67530007139988e-15 3.67530007139988e-15 0.2 2.5722e-05 7.30100014183618e-15 3.98690007745331e-15 3.1636000614591e-15 0.4 5.43263e-05 6.68730012991386e-15 4.6736000907938e-15 1.82570003546779e-15 0.6 7.26651e-05 6.0747001180129e-15 4.87500009470639e-15 9.75188218944934e-16 0.8 8.15318e-05 5.71530011103086e-15 4.83230009387686e-15 6.38780812409564e-16 1 8.61833e-05 5.51630010716489e-15 4.75470009236933e-15 5.086027098806e-16 1.2 8.91465e-05 5.39330010477538e-15 4.68550009102498e-15 4.51157208764609e-16 -0.2 -1.06958e-05 7.28130014145346e-15 3.66970007129108e-15 3.48810006776315e-15 0 -1.329363e-07 7.40630014388183e-15 3.6407000707277e-15 3.6407000707277e-15 0.2 1.68594e-05 7.34340014265988e-15 3.68950007167574e-15 3.52270006843532e-15 0.4 4.13758e-05 7.00240013603529e-15 4.28470008323866e-15 2.56830004989424e-15 0.6 6.53216e-05 6.47890012586528e-15 4.6832000909803e-15 1.62000003147166e-15 0.8 8.15923e-05 6.02770011709984e-15 4.78890009303373e-15 1.0411000202254e-15 1 9.1152e-05 5.72560011123095e-15 4.76020009247618e-15 7.53927014646503e-16 1.2 9.69246e-05 5.52940010741939e-15 4.69880009128336e-15 6.11625711882023e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_core_lw.standard0000644000175000017500000001245314163340332025326 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 4.2044e-06 0. 0. -4.2044e-06 0.2 4.5381e-06 0. 0. -4.5381e-06 0.3 4.8248e-06 0. 0. -4.8248e-06 0.4 5.1036e-06 0. 0. -5.1036e-06 0.5 5.3762e-06 0. 0. -5.3762e-06 0.6 5.6439e-06 0. 0. -5.6439e-06 0.7 5.9075e-06 0. 0. -5.9075e-06 0.8 6.1675e-06 0. 0. -6.1675e-06 0.9 6.4242e-06 0. 0. -6.4242e-06 1.00000 6.6781e-06 0. 0. -6.6781e-06 1.10000 6.9291e-06 0. 0. -6.9291e-06 1.20000 7.1776e-06 0. 0. -7.1776e-06 0. 0. 0. 0. 0. 0.1 9.83393e-05 0. 0. -9.83393e-05 0.2 0.0001417724 0. 0. -0.0001417724 0.3 0.0001516504 0. 0. -0.0001516504 0.4 0.0001564254 0. 0. -0.0001564254 0.5 0.0001606281 0. 0. -0.0001606281 0.6 0.0001645736 0. 0. -0.0001645736 0.7 0.0001683331 0. 0. -0.0001683331 0.8 0.0001719429 0. 0. -0.0001719429 0.9 0.0001754273 0. 0. -0.0001754273 1.00000 0.0001788045 0. 0. -0.0001788045 1.10000 0.0001820887 0. 0. -0.0001820887 1.20000 0.0001852911 0. 0. -0.0001852911 0. 0. 0. 0. 0. 0.1 0.0002148605 0. 0. -0.0002148605 0.2 0.0003806516 0. 0. -0.0003806516 0.3 0.0004885395 0. 0. -0.0004885395 0.4 0.000538957 0. 0. -0.000538957 0.5 0.000560161 0. 0. -0.000560161 0.6 0.00057367 0. 0. -0.00057367 0.7 0.0005849712 0. 0. -0.0005849712 0.8 0.0005952603 0. 0. -0.0005952603 0.9 0.0006049 0. 0. -0.0006049 1.00000 0.0006140474 0. 0. -0.0006140474 1.10000 0.0006227923 0. 0. -0.0006227923 1.20000 0.0006311953 0. 0. -0.0006311953 0. 0. 0. 0. 0. 0.1 0.0002959867 0. 0. -0.0002959867 0.2 0.0005584903 0. 0. -0.0005584903 0.3 0.0007793801 0. 0. -0.0007793801 0.4 0.0009478808 0. 0. -0.0009478808 0.5 0.0010559 0. 0. -0.0010559 0.6 0.0011145 0. 0. -0.0011145 0.7 0.0011481 0. 0. -0.0011481 0.8 0.0011719 0. 0. -0.0011719 0.9 0.0011916 0. 0. -0.0011916 1.00000 0.0012092 0. 0. -0.0012092 1.10000 0.0012255 0. 0. -0.0012255 1.20000 0.0012409 0. 0. -0.0012409 0. 0. 0. 0. 0. 0.1 8.538715e-07 0. 0. -8.538715e-07 0.2 9.462214e-07 0. 0. -9.462214e-07 0.3 1.036e-06 0. 0. -1.036e-06 0.4 1.1241e-06 0. 0. -1.1241e-06 0.5 1.2112e-06 0. 0. -1.2112e-06 0.6 1.2976e-06 0. 0. -1.2976e-06 0.7 1.3836e-06 0. 0. -1.3836e-06 0.8 1.4692e-06 0. 0. -1.4692e-06 0.9 1.5546e-06 0. 0. -1.5546e-06 1.00000 1.6398e-06 0. 0. -1.6398e-06 1.10000 1.7248e-06 0. 0. -1.7248e-06 1.20000 1.8097e-06 0. 0. -1.8097e-06 0. 0. 0. 0. 0. 0.1 0.000121711 0. 0. -0.000121711 0.2 0.0001614214 0. 0. -0.0001614214 0.3 0.0001693551 0. 0. -0.0001693551 0.4 0.0001755755 0. 0. -0.0001755755 0.5 0.0001812839 0. 0. -0.0001812839 0.6 0.0001866298 0. 0. -0.0001866298 0.7 0.000191696 0. 0. -0.000191696 0.8 0.0001965387 0. 0. -0.0001965387 0.9 0.0002011986 0. 0. -0.0002011986 1.00000 0.0002057058 0. 0. -0.0002057058 1.10000 0.0002100833 0. 0. -0.0002100833 1.20000 0.0002143491 0. 0. -0.0002143491 0. 0. 0. 0. 0. 0.1 0.0003015915 0. 0. -0.0003015915 0.2 0.0005279336 0. 0. -0.0005279336 0.3 0.0006638339 0. 0. -0.0006638339 0.4 0.0007146391 0. 0. -0.0007146391 0.5 0.0007381917 0. 0. -0.0007381917 0.6 0.0007568739 0. 0. -0.0007568739 0.7 0.000773644 0. 0. -0.000773644 0.8 0.0007891408 0. 0. -0.0007891408 0.9 0.0008036505 0. 0. -0.0008036505 1.00000 0.0008173562 0. 0. -0.0008173562 1.10000 0.0008303911 0. 0. -0.0008303911 1.20000 0.0008428569 0. 0. -0.0008428569 0. 0. 0. 0. 0. 0.1 0.0004223757 0. 0. -0.0004223757 0.2 0.000794883 0. 0. -0.000794883 0.3 0.0011046 0. 0. -0.0011046 0.4 0.0013336 0. 0. -0.0013336 0.5 0.0014645 0. 0. -0.0014645 0.6 0.0015273 0. 0. -0.0015273 0.7 0.0015667 0. 0. -0.0015667 0.8 0.0015987 0. 0. -0.0015987 0.9 0.0016273 0. 0. -0.0016273 1.00000 0.0016536 0. 0. -0.0016536 1.10000 0.0016782 0. 0. -0.0016782 1.20000 0.0017015 0. 0. -0.0017015 0. 0. 0. 0. 0. 0.1 1.41513e-05 0. 0. -1.41513e-05 0.2 1.67163e-05 0. 0. -1.67163e-05 0.3 1.75187e-05 0. 0. -1.75187e-05 0.4 1.81393e-05 0. 0. -1.81393e-05 0.5 1.87261e-05 0. 0. -1.87261e-05 0.6 1.92974e-05 0. 0. -1.92974e-05 0.7 1.98569e-05 0. 0. -1.98569e-05 0.8 2.04063e-05 0. 0. -2.04063e-05 0.9 2.09465e-05 0. 0. -2.09465e-05 1.00000 2.14782e-05 0. 0. -2.14782e-05 1.10000 2.20019e-05 0. 0. -2.20019e-05 1.20000 2.25183e-05 0. 0. -2.25183e-05 0. 0. 0. 0. 0. 0.1 8.11628e-05 0. 0. -8.11628e-05 0.2 0.0001254889 0. 0. -0.0001254889 0.3 0.0001441858 0. 0. -0.0001441858 0.4 0.0001523333 0. 0. -0.0001523333 0.5 0.0001570899 0. 0. -0.0001570899 0.6 0.0001607027 0. 0. -0.0001607027 0.7 0.0001638429 0. 0. -0.0001638429 0.8 0.0001667367 0. 0. -0.0001667367 0.9 0.0001694751 0. 0. -0.0001694751 1.00000 0.0001721014 0. 0. -0.0001721014 1.10000 0.0001746396 0. 0. -0.0001746396 1.20000 0.0001771047 0. 0. -0.0001771047 0. 0. 0. 0. 0. 0.1 0.0001512449 0. 0. -0.0001512449 0.2 0.0002676645 0. 0. -0.0002676645 0.3 0.0003457122 0. 0. -0.0003457122 0.4 0.0003927667 0. 0. -0.0003927667 0.5 0.0004204906 0. 0. -0.0004204906 0.6 0.000437888 0. 0. -0.000437888 0.7 0.000450044 0. 0. -0.000450044 0.8 0.0004594738 0. 0. -0.0004594738 0.9 0.0004673872 0. 0. -0.0004673872 1.00000 0.0004743836 0. 0. -0.0004743836 1.10000 0.0004807777 0. 0. -0.0004807777 1.20000 0.0004867457 0. 0. -0.0004867457 0. 0. 0. 0. 0. 0.1 0.00020227 0. 0. -0.00020227 0.2 0.0003792398 0. 0. -0.0003792398 0.3 0.0005231419 0. 0. -0.0005231419 0.4 0.0006316377 0. 0. -0.0006316377 0.5 0.000708883 0. 0. -0.000708883 0.6 0.0007625373 0. 0. -0.0007625373 0.7 0.0008001994 0. 0. -0.0008001994 0.8 0.0008276425 0. 0. -0.0008276425 0.9 0.0008486786 0. 0. -0.0008486786 1.00000 0.0008656577 0. 0. -0.0008656577 1.10000 0.0008799952 0. 0. -0.0008799952 1.20000 0.0008925469 0. 0. -0.0008925469 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_core_sw.standard0000644000175000017500000000406714163340332025342 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 6.917586e-07 0. 0. -6.917586e-07 0.35 1.41817e-05 0. 0. -1.41817e-05 0.45 0.000126249 0. 0. -0.000126249 0.55 0.0003666746 0. 0. -0.0003666746 0.65 0.0006371979 0. 0. -0.0006371979 0.75 0.0008920647 0. 0. -0.0008920647 0.85 0.0011176 0. 0. -0.0011176 0.95 0.0013105 0. 0. -0.0013105 1.05000 0.0014717 0. 0. -0.0014717 1.15000 0.0016037 0. 0. -0.0016037 0.25 3.1037e-06 0. 0. -3.1037e-06 0.35 5.19167e-05 0. 0. -5.19167e-05 0.45 0.0003661092 0. 0. -0.0003661092 0.55 0.0010939 0. 0. -0.0010939 0.65 0.002122 0. 0. -0.002122 0.75 0.0033132 0. 0. -0.0033132 0.85 0.0045804 0. 0. -0.0045804 0.95 0.0058712 0. 0. -0.0058712 1.05000 0.0071524 0. 0. -0.0071524 1.15000 0.0084022 0. 0. -0.0084022 0.25 4.29446e-08 0. 0. -4.29446e-08 0.35 2.9094e-06 0. 0. -2.9094e-06 0.45 8.90723e-05 0. 0. -8.90723e-05 0.55 0.0003969812 0. 0. -0.0003969812 0.65 0.0007611726 0. 0. -0.0007611726 0.75 0.0010996 0. 0. -0.0010996 0.85 0.001395 0. 0. -0.001395 0.95 0.0016451 0. 0. -0.0016451 1.05000 0.0018524 0. 0. -0.0018524 1.15000 0.0020212 0. 0. -0.0020212 0.25 2.871276e-07 0. 0. -2.871276e-07 0.35 1.56604e-05 0. 0. -1.56604e-05 0.45 0.0002827349 0. 0. -0.0002827349 0.55 0.0011148 0. 0. -0.0011148 0.65 0.0023363 0. 0. -0.0023363 0.75 0.0037491 0. 0. -0.0037491 0.85 0.0052474 0. 0. -0.0052474 0.95 0.0067709 0. 0. -0.0067709 1.05000 0.0082812 0. 0. -0.0082812 1.15000 0.0097531 0. 0. -0.0097531 0.25 8.9162e-06 0. 0. -8.9162e-06 0.35 5.54801e-05 0. 0. -5.54801e-05 0.45 0.0001810473 0. 0. -0.0001810473 0.55 0.0003583818 0. 0. -0.0003583818 0.65 0.000546323 0. 0. -0.000546323 0.75 0.0007242287 0. 0. -0.0007242287 0.85 0.0008836131 0. 0. -0.0008836131 0.95 0.0010216 0. 0. -0.0010216 1.05000 0.0011381 0. 0. -0.0011381 1.15000 0.0012342 0. 0. -0.0012342 0.25 3.02932e-05 0. 0. -3.02932e-05 0.35 0.0001691977 0. 0. -0.0001691977 0.45 0.0005563227 0. 0. -0.0005563227 0.55 0.0012143 0. 0. -0.0012143 0.65 0.00207 0. 0. -0.00207 0.75 0.0030415 0. 0. -0.0030415 0.85 0.004068 0. 0. -0.004068 0.95 0.0051088 0. 0. -0.0051088 1.05000 0.0061371 0. 0. -0.0061371 1.15000 0.0071347 0. 0. -0.0071347 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_ig_sw.standard0000644000175000017500000001642614163340332025037 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0039266 1.38939002699161e-14 3.78300007349216e-15 9.36210018187707e-15 0 -3.572459e-10 8.68390016870171e-15 3.74580007276948e-15 3.74580007276948e-15 0.2 3.1536e-05 8.57840016665216e-15 3.5873000696903e-15 3.79980007381853e-15 0.4 4.30899e-05 8.44300016402175e-15 3.58580006966116e-15 3.67460007138628e-15 0.6 5.6664e-05 8.29850016121456e-15 3.59800006989817e-15 3.52690006851692e-15 0.8 7.29446e-05 8.19650015923301e-15 3.61420007021289e-15 3.41770006639549e-15 1 9.25053e-05 8.12740015789061e-15 3.63330007058394e-15 3.33850006485688e-15 1.2 0.0001159295 8.07990015696783e-15 3.65500007100551e-15 3.27820006368543e-15 -0.2 -0.0088812 1.74794003395715e-14 4.39260008533483e-15 1.26814002463609e-14 0 -6.76071e-08 1.70968003321387e-14 8.32250016168081e-15 8.32250016168081e-15 0.2 0.0050661 1.47094002857588e-14 1.02804001997168e-14 3.78620007355432e-15 0.4 0.0058217 1.46754002850983e-14 1.02758001996275e-14 3.75090007286855e-15 0.6 0.0063918 1.45648002829497e-14 1.02759001996294e-14 3.63440007060531e-15 0.8 0.0068876 1.44137002800143e-14 1.02744001996003e-14 3.47850006757665e-15 1 0.0073414 1.42977002777607e-14 1.02706001995265e-14 3.35950006526484e-15 1.2 0.0077668 1.42137002761289e-14 1.02645001994079e-14 3.2746000636155e-15 -0.2 -0.0076676 1.85940003612247e-14 6.77850013168559e-15 1.15282002239578e-14 0 -2.463896e-07 1.90668003704098e-14 9.40150018264249e-15 9.40150018264249e-15 0.2 0.008884 1.76785003434394e-14 1.26550002458481e-14 4.65100009035475e-15 0.4 0.0107149 1.72939003359678e-14 1.30324002531798e-14 3.8522000748365e-15 0.6 0.0114605 1.71914003339765e-14 1.29386002513576e-14 3.82460007430032e-15 0.8 0.0119863 1.70233003307108e-14 1.28462002495625e-14 3.7304000724703e-15 1 0.0124015 1.67931003262387e-14 1.27554002477985e-14 3.57270006940667e-15 1.2 0.0127486 1.65922003223359e-14 1.26660002460618e-14 3.44330006689282e-15 -0.2 -0.0050915 1.88349003659047e-14 8.46110016437338e-15 1.01341001968747e-14 0 -6.1586e-07 1.91491003720086e-14 9.46340018384502e-15 9.46340018384502e-15 0.2 0.0072515 1.8647600362266e-14 1.1255600218662e-14 7.11850013829076e-15 0.4 0.0109442 1.77169003441854e-14 1.33593002595305e-14 4.01840007806526e-15 0.6 0.011854 1.75998003419105e-14 1.32835002580579e-14 3.95470007682777e-15 0.8 0.0124096 1.74984003399406e-14 1.31820002560861e-14 3.93420007642951e-15 1 0.0128209 1.7345900336978e-14 1.30819002541414e-14 3.86130007501329e-15 1.2 0.0131483 1.71140003324729e-14 1.29837002522337e-14 3.70750007202542e-15 -0.2 -0.0038944 1.37865002678297e-14 3.76970007323378e-15 9.26220017993631e-15 0 -1.34636e-11 8.55500016619757e-15 3.68480007158443e-15 3.68480007158443e-15 0.2 2.7052e-06 8.49490016503001e-15 3.51120006821191e-15 3.80330007388653e-15 0.4 4.0877e-06 8.34980016221116e-15 3.49850006796519e-15 3.67890007146981e-15 0.6 5.9326e-06 8.19350015917473e-15 3.49790006795353e-15 3.53130006860239e-15 0.8 8.4044e-06 8.07830015693674e-15 3.49990006799239e-15 3.42220006648291e-15 1 1.16977e-05 7.99440015530682e-15 3.50310006805455e-15 3.34320006494819e-15 1.2 1.60519e-05 7.93070015406933e-15 3.50740006813809e-15 3.28320006378257e-15 -0.2 -0.0108905 1.77320003444787e-14 3.9152000760604e-15 1.34310002609234e-14 0 -3.09143e-08 1.73606003372635e-14 8.46250016440058e-15 8.46250016440058e-15 0.2 0.00557 1.48938002893411e-14 1.05065002041093e-14 3.7592000730298e-15 0.4 0.0064744 1.48991002894441e-14 1.05353002046688e-14 3.73210007250333e-15 0.6 0.0071952 1.48176002878608e-14 1.05661002052671e-14 3.61530007023426e-15 0.8 0.0078379 1.46927002854344e-14 1.0592400205778e-14 3.45880006719394e-15 1 0.0084342 1.46005002836432e-14 1.06139002061957e-14 3.33930006487242e-15 1.2 0.0089973 1.45383002824349e-14 1.06307002065221e-14 3.25380006321142e-15 -0.2 -0.0098257 1.86501003623146e-14 6.03410011722417e-15 1.23355002396412e-14 0 -1.185147e-07 1.94152003771782e-14 9.58700018624619e-15 9.58700018624619e-15 0.2 0.0109925 1.78577003469207e-14 1.34885002620404e-14 4.0110000779215e-15 0.4 0.012718 1.76999003438551e-14 1.34973002622114e-14 3.82060007422261e-15 0.6 0.0135847 1.75992003418988e-14 1.33990002603017e-14 3.79850007379328e-15 0.8 0.0141986 1.7429600338604e-14 1.33030002584367e-14 3.70540007198463e-15 1 0.014682 1.71972003340892e-14 1.32085002566009e-14 3.54800006892683e-15 1.2 0.0150851 1.69937003301358e-14 1.31153002547903e-14 3.41860006641298e-15 -0.2 -0.0064956 1.90096003692986e-14 8.51430016540689e-15 1.02695001995051e-14 0 -2.993343e-07 1.93732003763622e-14 9.58360018618013e-15 9.58360018618013e-15 0.2 0.0092942 1.87358003639795e-14 1.19167002315052e-14 6.55420012732813e-15 0.4 0.0129726 1.79352003484263e-14 1.36741002656461e-14 3.93680007648002e-15 0.6 0.0139824 1.78429003466332e-14 1.35690002636043e-14 3.92800007630907e-15 0.8 0.0146328 1.77424003446807e-14 1.34647002615781e-14 3.91040007596715e-15 1 0.0151138 1.75895003417104e-14 1.33626002595946e-14 3.8386000745723e-15 1.2 0.0154947 1.73568003371897e-14 1.32623002576461e-14 3.68540007159609e-15 -0.2 -0.0039139 1.4447300280667e-14 4.03660007841883e-15 9.70560018855022e-15 0 -8.17e-09 9.71200018867455e-15 4.29110008336299e-15 4.29110008336299e-15 0.2 0.0002901496 9.20360017879789e-15 4.24790008252375e-15 3.79010007363009e-15 0.4 0.000362646 9.09550017669784e-15 4.28120008317067e-15 3.65860007107545e-15 0.6 0.0004335176 8.98560017456282e-15 4.33040008412647e-15 3.51020006819249e-15 0.8 0.0005079306 8.91890017326704e-15 4.38360008515999e-15 3.40070006606523e-15 1 0.0005874049 8.88440017259681e-15 4.43900008623624e-15 3.32110006451885e-15 1.2 0.0006726748 8.87050017232678e-15 4.49570008733775e-15 3.26050006334158e-15 -0.2 -0.0061332 1.75147003402572e-14 5.32070010336498e-15 1.17918002290787e-14 0 -1.810545e-07 1.69813003298949e-14 8.26330016053073e-15 8.26330016053073e-15 0.2 0.0044847 1.50522002924184e-14 1.02826001997596e-14 4.15300008068013e-15 0.4 0.0053879 1.47068002857083e-14 1.02468001990641e-14 3.81290007407302e-15 0.6 0.0058865 1.4518900282058e-14 1.01908001979762e-14 3.66960007128914e-15 0.8 0.0062762 1.43242002782755e-14 1.0147500197135e-14 3.50890006816723e-15 1 0.0066143 1.41740002753576e-14 1.01085001963773e-14 3.38900006583794e-15 1.2 0.0069216 1.4059900273141e-14 1.00710001956488e-14 3.30380006418276e-15 -0.2 -0.0052442 1.83450003563874e-14 6.62750012875212e-15 1.14139002217373e-14 0 -5.994123e-07 1.86104003615433e-14 9.15880017792756e-15 9.15880017792756e-15 0.2 0.0060642 1.76803003434743e-14 1.17921002290846e-14 5.51570010715324e-15 0.4 0.0082878 1.70188003306234e-14 1.24537002419374e-14 4.1363000803557e-15 0.6 0.0091669 1.67848003260775e-14 1.24017002409272e-14 3.92800007630907e-15 0.8 0.0096913 1.65741003219842e-14 1.23063002390739e-14 3.79260007367866e-15 1 0.0100722 1.6326700317178e-14 1.22115002372322e-14 3.62180007036053e-15 1.2 0.010377 1.61179003131217e-14 1.21198002354508e-14 3.48730006774761e-15 -0.2 -0.0036939 1.84935003592723e-14 7.56930014704843e-15 1.06619002071282e-14 0 -1.4626e-06 1.88089003653996e-14 9.28150018031125e-15 9.28150018031125e-15 0.2 0.0050017 1.83669003568129e-14 1.12985002194954e-14 6.77700013165645e-15 0.4 0.0079696 1.76801003434704e-14 1.2705800246835e-14 4.62790008990599e-15 0.6 0.0091976 1.73786003376132e-14 1.28310002492672e-14 4.16940008099873e-15 0.8 0.0098567 1.72051003342426e-14 1.27639002479637e-14 4.03950007847517e-15 1 0.0102895 1.70217003306797e-14 1.26694002461278e-14 3.92940007633626e-15 1.2 0.0106096 1.6775200325891e-14 1.25720002442356e-14 3.76040007305311e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_gidl_st.standard0000644000175000017500000000632014163340332025205 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 0. 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 0. 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 0. 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 0. 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 0. 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 0. 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 -6.9255e-09 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 -3.6848e-09 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 -1.7331e-09 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.72798e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09894e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.000135495 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440625 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 0. 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 0. 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 0. 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 0. 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 0. 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 0. 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 -6.9147e-09 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 -3.678e-09 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 -1.7312e-09 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.30465e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63205e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900561 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034134 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 0. 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 0. 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 0. 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 0. 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 0. 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 0. 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 0. 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 -6.9428e-09 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 -3.6951e-09 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 -6.193551e-10 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1934e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25256e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84376e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51706e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_core_lw.standard0000644000175000017500000000624514163340332025220 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.37174602664884e-13 2.137700041529e-15 2.137700041529e-15 -0.8 0. 4.93137009580149e-14 2.85190005540372e-15 2.85190005540372e-15 -0.4 0. 3.01819005863423e-14 3.15770006134449e-15 3.15770006134449e-15 1.11022302462516e-16 0. 2.57805005008365e-14 3.86590007510265e-15 3.86590007510265e-15 0.4 0. 1.43545802788657e-13 6.9879001357536e-14 6.9879001357536e-14 0.8 0. 1.50720302928036e-13 7.4121201439949e-14 7.4121201439949e-14 1.2 0. 1.45926902834915e-13 7.18834013964753e-14 7.18834013964753e-14 -1.2 2.733e-19 1.30365002532595e-13 2.42000004701322e-15 1.81680003529489e-15 -0.8 4.02099e-16 4.75765009242664e-14 1.99590003877425e-15 3.54410006885106e-15 -0.4 1.79622e-11 2.90163005636983e-14 1.97250003831966e-15 4.05430007876269e-15 1.11022302462516e-16 2.0447e-06 2.43008004720905e-14 2.44050004741148e-15 4.44460008634503e-15 0.4 0.0012031 9.93221019295257e-14 8.6169101674003e-14 5.91580011492596e-15 0.8 0.0025195 1.09566002128533e-13 9.64033018728223e-14 8.09300015722232e-15 1.2 0.0027517 1.08851302114649e-13 9.28616018040178e-14 1.197100023256e-14 -1.2 0. 1.42874602775618e-13 2.15370004183983e-15 2.15370004183983e-15 -0.8 0. 4.5032900874852e-14 2.89800005629931e-15 2.89800005629931e-15 -0.4 0. 2.93105005694137e-14 3.17370006165532e-15 3.17370006165532e-15 1.11022302462516e-16 0. 2.47177004801896e-14 3.50660006812255e-15 3.50660006812255e-15 0.4 0. 1.47786802871047e-13 7.21106014008891e-14 7.21106014008891e-14 0.8 0. 1.5376680298722e-13 7.57375014713488e-14 7.57375014713488e-14 1.2 0. 1.478204028717e-13 7.29020014162636e-14 7.29020014162636e-14 -1.2 2.014e-25 1.3595390264117e-13 2.29530004459068e-15 1.96910003825361e-15 -0.8 4.244e-21 4.34358008438252e-14 2.04230003967566e-15 3.58680006968059e-15 -0.4 1.0723e-14 2.81656005471718e-14 1.97770003842068e-15 4.07970007925614e-15 1.11022302462516e-16 7.97319e-08 2.35486004574775e-14 2.0363000395591e-15 4.46570008675494e-15 0.4 0.0016056 1.02743901996001e-13 9.00597017495854e-14 5.7435001115787e-15 0.8 0.0035301 1.13905902212844e-13 1.01430001970476e-13 7.89900015345349e-15 1.2 0.0038553 1.09800202133083e-13 9.59835018646668e-14 1.02021001981957e-14 -1.2 0. 1.3058250253682e-13 2.10260004084711e-15 2.10260004084711e-15 -0.8 0. 5.69288011059531e-14 2.76490005371358e-15 2.76490005371358e-15 -0.4 0. 3.18045006178645e-14 3.13130006083161e-15 3.13130006083161e-15 1.11022302462516e-16 0. 4.09020007946012e-14 1.20155002334245e-14 1.20155002334245e-14 0.4 0. 1.39205202704333e-13 6.7606901313396e-14 6.7606901313396e-14 0.8 0. 1.46314802842451e-13 7.17841013945462e-14 7.17841013945462e-14 1.2 0. 1.42897302776059e-13 7.02588013649143e-14 7.02588013649143e-14 -1.2 4.60926e-14 1.23908302407161e-13 2.59360005038574e-15 1.58000003069458e-15 -0.8 7.9774e-12 5.47775010641599e-14 1.91820003726478e-15 3.45630006714537e-15 -0.4 1.16154e-08 3.06023005945094e-14 1.96180003811179e-15 4.01300007796036e-15 1.11022302462516e-16 3.34764e-05 3.20921006234517e-14 1.04838002036683e-14 4.42690008600117e-15 0.4 0.0009123046 9.66903018783978e-14 8.28458016094414e-14 6.33950012315716e-15 0.8 0.0016572 1.08590702109586e-13 9.30499018076759e-14 1.02674001994643e-14 1.2 0.0016516 1.14311002220714e-13 9.15499017785355e-14 1.88276003657629e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_core_sw.standard0000644000175000017500000000626114163340332025225 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.79170003480727e-14 2.96570005761451e-15 2.96570005761451e-15 -0.8 0. 1.13918002213079e-14 3.11410006049747e-15 3.11410006049747e-15 -0.4 0. 9.17520017824617e-15 3.30320006417111e-15 3.30320006417111e-15 1.11022302462516e-16 0. 9.10180017682023e-15 3.59790006989623e-15 3.59790006989623e-15 0.4 0. 1.71857003338658e-14 8.30290016130004e-15 8.30290016130004e-15 0.8 0. 1.93381003756803e-14 9.54090018535061e-15 9.54090018535061e-15 1.2 0. 1.90553003701864e-14 9.42220018304463e-15 9.42220018304463e-15 -1.2 1.9869e-18 1.71192003325739e-14 3.02650005879567e-15 2.66840005183888e-15 -0.8 9.493666e-16 1.08535002108504e-14 3.04160005908902e-15 2.95750005745521e-15 -0.4 1.81452e-11 8.75620017010627e-15 3.19290006202831e-15 3.08970006002345e-15 1.11022302462516e-16 1.189e-06 8.5101001653253e-15 3.45920006720171e-15 3.20680006229835e-15 0.4 0.0070101 1.42208002762668e-14 9.99710019421318e-15 3.33790006484522e-15 0.8 0.0133081 1.73042003361679e-14 1.30987002544678e-14 3.72810007242562e-15 1.2 0.0118055 1.74775003395345e-14 1.29632002518355e-14 4.11610007996328e-15 -1.2 0. 1.82920003553578e-14 2.96790005765725e-15 2.96790005765725e-15 -0.8 0. 1.07170002081986e-14 3.12150006064123e-15 3.12150006064123e-15 -0.4 0. 9.04780017577118e-15 3.30580006422162e-15 3.30580006422162e-15 1.11022302462516e-16 0. 9.04500017571678e-15 3.59870006991177e-15 3.59870006991177e-15 0.4 0. 1.73378003368206e-14 8.38370016286973e-15 8.38370016286973e-15 0.8 0. 1.96223003812015e-14 9.69450018833458e-15 9.69450018833458e-15 1.2 0. 1.92122003732345e-14 9.50820018471534e-15 9.50820018471534e-15 -1.2 1.525e-24 1.74720003394277e-14 3.01900005864997e-15 2.67630005199235e-15 -0.8 7.307e-21 1.02366001988659e-14 3.0493000592386e-15 2.9699000576961e-15 -0.4 6.7937e-15 8.63440016774007e-15 3.19490006206717e-15 3.09360006009922e-15 1.11022302462516e-16 2.50402e-08 8.45500016425488e-15 3.45860006719006e-15 3.2095000623508e-15 0.4 0.0077273 1.43678002791226e-14 1.01777001977217e-14 3.32300006455576e-15 0.8 0.015711 1.76142003421902e-14 1.34522002613352e-14 3.70840007204291e-15 1.2 0.013892 1.76461003428099e-14 1.31640002557364e-14 4.09560007956502e-15 -1.2 0. 1.74834003396492e-14 2.96130005752903e-15 2.96130005752903e-15 -0.8 0. 1.24025002409428e-14 3.10170006025658e-15 3.10170006025658e-15 -0.4 0. 9.42680018313399e-15 3.29840006407786e-15 3.29840006407786e-15 1.11022302462516e-16 0. 9.27690018022189e-15 3.63920007069856e-15 3.63920007069856e-15 0.4 0. 1.71550003332694e-14 8.29120016107274e-15 8.29120016107274e-15 0.8 0. 1.89326003678027e-14 9.32170018109222e-15 9.32170018109222e-15 1.2 0. 1.88001003652286e-14 9.28290018033845e-15 9.28290018033845e-15 -1.2 3.345208e-13 1.67130003246826e-14 3.03740005900742e-15 2.6537000515533e-15 -0.8 2.92929e-11 1.17973002291856e-14 3.03060005887532e-15 2.93550005702782e-15 -0.4 1.85998e-08 8.9968001747804e-15 3.18840006194089e-15 3.08310005989523e-15 1.11022302462516e-16 3.96572e-05 8.66090016825489e-15 3.5210000684023e-15 3.20170006219927e-15 0.4 0.0065963 1.42546002769234e-14 1.00005001942792e-14 3.36440006536004e-15 0.8 0.0107329 1.69053003284184e-14 1.26156002450827e-14 3.77950007342416e-15 1.2 0.0093013 1.72752003356045e-14 1.26459002456713e-14 4.21480008188072e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_gidl_lt.standard0000644000175000017500000001570114163340332025311 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 1.0298e-12 0. -2.0597e-12 1.0298e-12 0.1 5.73108e-07 0. -2.9142e-12 -5.731051e-07 0.2 6.209935e-07 0. -4.3414e-12 -6.209891e-07 0.3 6.538675e-07 0. -6.6417e-12 -6.538609e-07 0.4 6.856178e-07 0. -1.02321e-11 -6.856076e-07 0.5 7.164726e-07 0. -1.56759e-11 -7.16457e-07 0.6 7.466097e-07 0. -2.37154e-11 -7.46586e-07 0.7 7.761424e-07 0. -3.53071e-11 -7.761071e-07 0.8 8.051486e-07 0. -5.1659e-11 -8.050969e-07 0.9 8.336849e-07 0. -7.42692e-11 -8.336107e-07 1.00000 8.617947e-07 0. -1.049645e-10 -8.616898e-07 1.10000 8.895122e-07 0. -1.459392e-10 -8.893663e-07 1.20000 9.168655e-07 0. -1.997925e-10 -9.166657e-07 0. 1.845978e-13 0. -3.691956e-13 1.845978e-13 0.1 6.2801e-06 0. -5.664286e-13 -6.2801e-06 0.2 9.6279e-06 0. -9.334372e-13 -9.6279e-06 0.3 1.06156e-05 0. -1.5851e-12 -1.06156e-05 0.4 1.09663e-05 0. -2.6946e-12 -1.09663e-05 0.5 1.12453e-05 0. -4.5141e-12 -1.12453e-05 0.6 1.15031e-05 0. -7.3989e-12 -1.15031e-05 0.7 1.17474e-05 0. -1.18353e-11 -1.17474e-05 0.8 1.19813e-05 0. -1.84716e-11 -1.19812e-05 0.9 1.22065e-05 0. -2.81528e-11 -1.22064e-05 1.00000 1.24243e-05 0. -4.19564e-11 -1.24243e-05 1.10000 1.26357e-05 0. -6.12305e-11 -1.26357e-05 1.20000 1.28416e-05 0. -8.76329e-11 -1.28415e-05 0. 2.26731e-14 0. -4.53462e-14 2.26731e-14 0.1 1.21097e-05 0. -7.79932e-14 -1.21097e-05 0.2 2.18175e-05 0. -1.482298e-13 -2.18175e-05 0.3 2.86584e-05 0. -2.900422e-13 -2.86584e-05 0.4 3.23544e-05 0. -5.607645e-13 -3.23544e-05 0.5 3.39508e-05 0. -1.0525e-12 -3.39508e-05 0.6 3.48385e-05 0. -1.907e-12 -3.48384e-05 0.7 3.55279e-05 0. -3.3342e-12 -3.55279e-05 0.8 3.61398e-05 0. -5.6345e-12 -3.61398e-05 0.9 3.67079e-05 0. -9.2249e-12 -3.67078e-05 1.00000 3.72449e-05 0. -1.46687e-11 -3.72449e-05 1.10000 3.77573e-05 0. -2.27082e-11 -3.77573e-05 1.20000 3.82493e-05 0. -3.42999e-11 -3.82492e-05 0. 1.6532e-15 0. -3.3064e-15 1.6532e-15 0.1 1.60409e-05 0. -6.7303e-15 -1.60409e-05 0.2 3.04776e-05 0. -1.5736e-14 -3.04776e-05 0.3 4.29137e-05 0. -3.7412e-14 -4.29137e-05 0.4 5.28288e-05 0. -8.57037e-14 -5.28288e-05 0.5 5.96971e-05 0. -1.862511e-13 -5.96971e-05 0.6 6.37056e-05 0. -3.834843e-13 -6.37056e-05 0.7 6.59602e-05 0. -7.504929e-13 -6.59602e-05 0.8 6.74453e-05 0. -1.4021e-12 -6.74453e-05 0.9 6.86117e-05 0. -2.5116e-12 -6.86117e-05 1.00000 6.96261e-05 0. -4.3312e-12 -6.96261e-05 1.10000 7.05531e-05 0. -7.216e-12 -7.05531e-05 1.20000 7.14211e-05 0. -1.16523e-11 -7.14211e-05 0. 1.0229e-12 0. -2.0458e-12 1.0229e-12 0.1 2.042045e-07 0. -2.8954e-12 -2.042016e-07 0.2 2.229736e-07 0. -4.315e-12 -2.229693e-07 0.3 2.409282e-07 0. -6.6039e-12 -2.409216e-07 0.4 2.582944e-07 0. -1.01777e-11 -2.582843e-07 0.5 2.752544e-07 0. -1.55979e-11 -2.752388e-07 0.6 2.91901e-07 0. -2.36047e-11 -2.918774e-07 0.7 3.082892e-07 0. -3.51522e-11 -3.082541e-07 0.8 3.244552e-07 0. -5.14453e-11 -3.244038e-07 0.9 3.404242e-07 0. -7.39789e-11 -3.403502e-07 1.00000 3.562151e-07 0. -1.04576e-10 -3.561105e-07 1.10000 3.718425e-07 0. -1.454268e-10 -3.716971e-07 1.20000 3.873187e-07 0. -1.991258e-10 -3.871196e-07 0. 1.830992e-13 0. -3.661984e-13 1.830992e-13 0.1 8.0729e-06 0. -5.620609e-13 -8.0729e-06 0.2 1.16178e-05 0. -9.267147e-13 -1.16178e-05 0.3 1.23488e-05 0. -1.5745e-12 -1.23488e-05 0.4 1.27797e-05 0. -2.6779e-12 -1.27797e-05 0.5 1.31679e-05 0. -4.4881e-12 -1.31678e-05 0.6 1.35293e-05 0. -7.3591e-12 -1.35293e-05 0.7 1.38702e-05 0. -1.17755e-11 -1.38702e-05 0.8 1.41948e-05 0. -1.8384e-11 -1.41948e-05 0.9 1.4506e-05 0. -2.80271e-11 -1.45059e-05 1.00000 1.4806e-05 0. -4.17795e-11 -1.48059e-05 1.10000 1.50965e-05 0. -6.09864e-11 -1.50964e-05 1.20000 1.53788e-05 0. -8.73019e-11 -1.53787e-05 0. 2.24464e-14 0. -4.48928e-14 2.24464e-14 0.1 1.7059e-05 0. -7.7259e-14 -1.7059e-05 0.2 3.04414e-05 0. -1.469423e-13 -3.04414e-05 0.3 3.93761e-05 0. -2.877281e-13 -3.93761e-05 0.4 4.34019e-05 0. -5.566434e-13 -4.34019e-05 0.5 4.50329e-05 0. -1.0454e-12 -4.50329e-05 0.6 4.61787e-05 0. -1.895e-12 -4.61787e-05 0.7 4.71816e-05 0. -3.3146e-12 -4.71816e-05 0.8 4.8103e-05 0. -5.6034e-12 -4.8103e-05 0.9 4.89639e-05 0. -9.1772e-12 -4.89639e-05 1.00000 4.97761e-05 0. -1.45975e-11 -4.97761e-05 1.10000 5.05477e-05 0. -2.26043e-11 -5.05477e-05 1.20000 5.12848e-05 0. -3.41517e-11 -5.12848e-05 0. 1.6323e-15 0. -3.2646e-15 1.6323e-15 0.1 2.28945e-05 0. -6.6512e-15 -2.28945e-05 0.2 4.34079e-05 0. -1.5568e-14 -4.34079e-05 0.3 6.09085e-05 0. -3.70488e-14 -6.09085e-05 0.4 7.45702e-05 0. -8.49432e-14 -7.45702e-05 0.5 8.33184e-05 0. -1.847317e-13 -8.33184e-05 0.6 8.77409e-05 0. -3.805943e-13 -8.77409e-05 0.7 9.0247e-05 0. -7.452482e-13 -9.0247e-05 0.8 9.2136e-05 0. -1.393e-12 -9.2136e-05 0.9 9.37776e-05 0. -2.4964e-12 -9.37776e-05 1.00000 9.52783e-05 0. -4.3066e-12 -9.52783e-05 1.10000 9.66784e-05 0. -7.1776e-12 -9.66784e-05 1.20000 9.79986e-05 0. -1.15941e-11 -9.79986e-05 0. 1.041e-12 0. -2.082e-12 1.041e-12 0.1 1.222e-06 0. -2.9444e-12 -1.222e-06 0.2 1.5141e-06 0. -4.3837e-12 -1.5141e-06 0.3 1.5943e-06 0. -6.7023e-12 -1.5943e-06 0.4 1.6465e-06 0. -1.03195e-11 -1.6465e-06 0.5 1.6935e-06 0. -1.58012e-11 -1.6935e-06 0.6 1.7386e-06 0. -2.38931e-11 -1.7385e-06 0.7 1.7825e-06 0. -3.55557e-11 -1.7824e-06 0.8 1.8254e-06 0. -5.20019e-11 -1.8254e-06 0.9 1.8676e-06 0. -7.47349e-11 -1.8675e-06 1.00000 1.909e-06 0. -1.055876e-10 -1.9089e-06 1.10000 1.9497e-06 0. -1.46761e-10 -1.9496e-06 1.20000 1.9899e-06 0. -2.008614e-10 -1.9897e-06 0. 1.870145e-13 0. -3.740289e-13 1.870145e-13 0.1 4.9567e-06 0. -5.734686e-13 -4.9567e-06 0.2 7.9562e-06 0. -9.44266e-13 -7.9562e-06 0.3 9.3908e-06 0. -1.6021e-12 -9.3908e-06 0.4 1.00447e-05 0. -2.7215e-12 -1.00447e-05 0.5 1.04037e-05 0. -4.556e-12 -1.04037e-05 0.6 1.06553e-05 0. -7.463e-12 -1.06553e-05 0.7 1.08629e-05 0. -1.19313e-11 -1.08629e-05 0.8 1.10487e-05 0. -1.86123e-11 -1.10487e-05 0.9 1.12218e-05 0. -2.83546e-11 -1.12218e-05 1.00000 1.13863e-05 0. -4.22402e-11 -1.13862e-05 1.10000 1.15444e-05 0. -6.16222e-11 -1.15443e-05 1.20000 1.16973e-05 0. -8.81638e-11 -1.16972e-05 0. 2.30395e-14 0. -4.6079e-14 2.30395e-14 0.1 8.4669e-06 0. -7.9179e-14 -8.4669e-06 0.2 1.52203e-05 0. -1.503075e-13 -1.52203e-05 0.3 1.99983e-05 0. -2.937735e-13 -1.99983e-05 0.4 2.30495e-05 0. -5.674041e-13 -2.30495e-05 0.5 2.49174e-05 0. -1.064e-12 -2.49174e-05 0.6 2.60962e-05 0. -1.9264e-12 -2.60962e-05 0.7 2.69028e-05 0. -3.3658e-12 -2.69028e-05 0.8 2.75092e-05 0. -5.6844e-12 -2.75092e-05 0.9 2.80034e-05 0. -9.3015e-12 -2.80034e-05 1.00000 2.84305e-05 0. -1.47832e-11 -2.84305e-05 1.10000 2.88145e-05 0. -2.28751e-11 -2.88145e-05 1.20000 2.91689e-05 0. -3.45378e-11 -2.91689e-05 0. 1.687e-15 0. -3.3741e-15 1.687e-15 0.1 1.09505e-05 0. -6.8584e-15 -1.09505e-05 0.2 2.06863e-05 0. -1.6008e-14 -2.06863e-05 0.3 2.88045e-05 0. -3.79988e-14 -2.88045e-05 0.4 3.51253e-05 0. -8.69313e-14 -3.51253e-05 0.5 3.97757e-05 0. -1.887017e-13 -3.97757e-05 0.6 4.30908e-05 0. -3.881414e-13 -4.30908e-05 0.7 4.54497e-05 0. -7.589389e-13 -4.54497e-05 0.8 4.71693e-05 0. -1.4168e-12 -4.71693e-05 0.9 4.84747e-05 0. -2.5362e-12 -4.84747e-05 1.00000 4.95126e-05 0. -4.3707e-12 -4.95126e-05 1.10000 5.0375e-05 0. -7.2777e-12 -5.03749e-05 1.20000 5.11188e-05 0. -1.17459e-11 -5.11188e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_core_lw.standard0000644000175000017500000001633614163340332025361 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0008788336 1.08943802116446e-13 1.64298003191809e-14 8.69533016892376e-14 0 0. 6.98459013568929e-14 3.07753005978703e-14 3.07753005978703e-14 0.2 0.0001136993 4.75692009241246e-14 3.21678006249223e-14 5.69190011057627e-15 0.4 0.0001257751 4.67441009080954e-14 3.13939006098878e-14 5.69310011059958e-15 0.6 0.0001370935 4.59004008917049e-14 3.07460005973011e-14 5.55130010784484e-15 0.8 0.0001478973 4.51025008762041e-14 3.01302005853379e-14 5.42300010535236e-15 1 0.0001582976 4.43481008615484e-14 2.95348005737711e-14 5.31740010330087e-15 1.2 0.0001683551 4.36282008475629e-14 2.89573005625521e-14 5.22830010156993e-15 -0.2 -0.0009157424 1.42591402770116e-13 5.77593011220871e-14 8.17923015889751e-14 0 0. 1.44021502797899e-13 7.04399013684325e-14 7.04399013684325e-14 0.2 0.000948664 1.1658080226481e-13 8.7701201703767e-14 2.40665004675387e-14 0.4 0.0011358 1.02386301989054e-13 8.95266017392289e-14 7.27890014140684e-15 0.6 0.0011849 1.01030501962715e-13 8.84855017190035e-14 6.98060013561178e-15 0.8 0.0012265 9.98894019405465e-14 8.75699017012162e-14 6.78630013183712e-15 1 0.0012639 9.88092019195616e-14 8.66839016840039e-14 6.62390012868219e-15 1.2 0.0012982 9.77761018994916e-14 8.5814701667118e-14 6.49140012610811e-15 -0.2 -0.0006162631 1.46898402853788e-13 6.94221013486598e-14 7.50331014576644e-14 0 0. 1.49614002906544e-13 7.35692014292253e-14 7.35692014292253e-14 0.2 0.0008611076 1.4387540279506e-13 8.03447015608526e-14 6.0680801178843e-14 0.4 0.0017674 1.19254602316753e-13 9.50960018474254e-14 2.00294003891102e-14 0.6 0.0020022 1.0924820212236e-13 9.56199018576032e-14 9.04680017575175e-15 0.8 0.0020796 1.07437702087187e-13 9.46204018381859e-14 8.22080015970509e-15 1 0.0021376 1.06283902064772e-13 9.37754018217702e-14 7.93470015414704e-15 1.2 0.0021879 1.05259302044867e-13 9.29813018063432e-14 7.73140015019753e-15 -0.2 -0.0003515643 1.45266302822081e-13 7.31636014213457e-14 6.98958013578623e-14 0 0. 1.47963802874486e-13 7.28645014155351e-14 7.28645014155351e-14 0.2 0.0005624493 1.46576102847527e-13 7.39437014365007e-14 7.02586013649104e-14 0.4 0.0013956 1.37115402663734e-13 8.4680501645084e-14 4.95877009633379e-14 0.6 0.0021978 1.17330202279368e-13 9.429220183181e-14 1.93436003757872e-14 0.8 0.0024579 1.09318002123716e-13 9.45527018368707e-14 1.07754002093332e-14 1 0.0025569 1.07123502081083e-13 9.36551018194331e-14 9.44460018347979e-15 1.2 0.0026238 1.05881002056945e-13 9.28603018039926e-14 9.00890017501547e-15 -0.2 -0.0011921 1.05738902054185e-13 8.19150015913587e-15 9.17595017826074e-14 0 0. 3.76404007312382e-14 1.36475002651293e-14 1.36475002651293e-14 0.2 3.80639e-05 2.86866005572932e-14 1.22366002377198e-14 5.59470010868797e-15 0.4 4.46391e-05 2.83010005498022e-14 1.1920400231577e-14 5.60520010889195e-15 0.6 5.0921e-05 2.78834005416895e-14 1.17264002278082e-14 5.46240010611778e-15 0.8 5.7023e-05 2.75057005343519e-14 1.15560002244979e-14 5.33540010365056e-15 1 6.29861e-05 2.71626005276865e-14 1.13958002213857e-14 5.23180010163793e-15 1.2 6.88302e-05 2.68440005214971e-14 1.12424002184056e-14 5.14500009995167e-15 -0.2 -0.001407 1.45304602822825e-13 5.6742201102328e-14 8.56458016638368e-14 0 0. 1.48380502882581e-13 7.27168014126658e-14 7.27168014126658e-14 0.2 0.001378 1.11876102173412e-13 9.39337018248455e-14 1.28287002492225e-14 0.4 0.0015209 1.05820402055768e-13 9.35393018171835e-14 6.90470013413727e-15 0.6 0.0015991 1.04714702034287e-13 9.25752017984539e-14 6.79450013199642e-15 0.8 0.0016655 1.03585402012349e-13 9.16614017807016e-14 6.61090012842963e-15 1 0.0017244 1.02503001991321e-13 9.07692017633689e-14 6.45210012534463e-15 1.2 0.0017783 1.01466201971179e-13 8.98925017463373e-14 6.32290012283467e-15 -0.2 -0.0009127503 1.49621702906694e-13 6.99945013597798e-14 7.73324015023328e-14 0 0. 1.53030302972912e-13 7.53632014640773e-14 7.53632014640773e-14 0.2 0.0013147 1.46795802851795e-13 8.37827016276425e-14 6.0300301171451e-14 0.4 0.0026009 1.17380502280345e-13 1.00558201953539e-13 1.26716002461706e-14 0.6 0.0028166 1.1267800218899e-13 1.00177601946145e-13 8.19560015921553e-15 0.8 0.0029287 1.11566702167401e-13 9.93038019291701e-14 7.9796001550193e-15 1 0.0030206 1.10498902146657e-13 9.84775019131176e-14 7.76430015083668e-15 1.2 0.0031002 1.09476802126801e-13 9.7670701897444e-14 7.5751001471611e-15 -0.2 -0.0004992835 1.47365502862862e-13 7.37481014327008e-14 7.1545501389911e-14 0 0. 1.50422402922249e-13 7.41660014408193e-14 7.41660014408193e-14 0.2 0.0008274713 1.49178202898078e-13 7.60955014783036e-14 7.08524013764462e-14 0.4 0.0021059 1.38182202684459e-13 8.79793017091696e-14 4.74459009217292e-14 0.6 0.0032062 1.15603702245828e-13 9.88122019196198e-14 1.32012002564591e-14 0.8 0.0034498 1.11559202167255e-13 9.84530019126417e-14 9.42000018300188e-15 1 0.003574 1.10404302144819e-13 9.76688018974071e-14 9.06240017605481e-15 1.2 0.003673 1.09396202125235e-13 9.69283018830214e-14 8.81550017125829e-15 -0.2 -0.0005581439 1.17735802287248e-13 2.90659005646618e-14 8.37724016274424e-14 0 0. 1.0066120195554e-13 4.7231600917566e-14 4.7231600917566e-14 0.2 0.000220653 7.0910201377569e-14 5.48578010657198e-14 7.84870015247631e-15 0.4 0.0002392066 6.77374013159312e-14 5.32909010352797e-14 6.13150011911635e-15 0.6 0.0002512983 6.63823012896057e-14 5.2205101014186e-14 5.88180011426544e-15 0.8 0.0002625414 6.52443012674979e-14 5.12509009956488e-14 5.72940011130478e-15 1 0.0002732621 6.41879012469752e-14 5.03458009780654e-14 5.612100109026e-15 1.2 0.0002835687 6.31792012273793e-14 4.94695009610416e-14 5.5142001071241e-15 -0.2 -0.0005512346 1.38287602686507e-13 5.43205010552817e-14 8.07404015685398e-14 0 0. 1.3933890270693e-13 6.80023013210774e-14 6.80023013210774e-14 0.2 0.0005738916 1.22471302379244e-13 8.41522016348207e-14 3.39434006594168e-14 0.4 0.0008173182 1.04761202035191e-13 8.77200017041322e-14 1.1632600225986e-14 0.6 0.000879041 9.95006019329934e-14 8.56503016639242e-14 8.20170015933403e-15 0.8 0.0009105806 9.72734018897256e-14 8.41802016353647e-14 7.40320014382161e-15 1 0.0009349635 9.5796501861034e-14 8.3045401613319e-14 7.06610013727278e-15 1.2 0.0009563073 9.45867018375312e-14 8.2055901594096e-14 6.86520013336991e-15 -0.2 -0.0003955517 1.42475702767869e-13 6.55828012740739e-14 7.42220014419072e-14 0 0. 1.44891402814798e-13 7.10916013810931e-14 7.10916013810931e-14 0.2 0.0005242795 1.39290702705994e-13 7.94723015439045e-14 5.67644011027593e-14 0.4 0.0010222 1.24153602411926e-13 9.20006017872912e-14 2.83070005499187e-14 0.6 0.0012725 1.12663502188708e-13 9.33206018129348e-14 1.49208002898657e-14 0.8 0.0013795 1.07104602080716e-13 9.17204017818478e-14 1.07217002082899e-14 1 0.0014373 1.04150802023333e-13 9.01974017522605e-14 9.20430017881149e-15 1.2 0.0014774 1.02257301986548e-13 8.89666017283498e-14 8.51540016542826e-15 -0.2 -0.000241598 1.41756202753891e-13 7.05034013696662e-14 6.88383013373183e-14 0 0. 1.44225602801864e-13 7.08896013771688e-14 7.08896013771688e-14 0.2 0.000365047 1.42322002764883e-13 7.30885014198868e-14 6.66403012946179e-14 0.4 0.0008512016 1.33763902598625e-13 8.5544201661863e-14 4.52212008785101e-14 0.6 0.001264 1.22359602377074e-13 9.20374017880061e-14 2.68140005209143e-14 0.8 0.0015087 1.13906102212848e-13 9.27578018020013e-14 1.7277800335655e-14 1 0.0016428 1.08784402113349e-13 9.16428017803402e-14 1.30745002539977e-14 1.2 0.0017235 1.05572102050944e-13 9.03207017546559e-14 1.10878002154022e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_core_lt.standard0000644000175000017500000000627514163340332025362 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 0. 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 0. 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 0. 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 0. 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 0. 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 0. 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 2.473e-24 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 4.196e-19 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 9.12051e-14 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.30938e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26084e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.0001237631 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391912 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 0. 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 0. 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 0. 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 0. 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 0. 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 0. 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 0. 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 0. 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 1.760e-24 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 2.86752e-17 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 5.646706e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79731e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744511 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960642 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 0. 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 0. 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 0. 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 0. 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 0. 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 0. 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 0. 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 3.7649e-18 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 1.74963e-14 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 1.000179e-10 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.136918e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.1609e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.1818e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.35262e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_gidl_lt.standard0000644000175000017500000000526414163340332025155 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.2019e-06 0. -1.387e-12 -1.2019e-06 0.35 2.5389e-06 0. -7.416547e-13 -2.5389e-06 0.45 3.9351e-06 0. -3.781675e-13 -3.9351e-06 0.55 5.2461e-06 0. -1.828268e-13 -5.2461e-06 0.65 6.4113e-06 0. -8.32441e-14 -6.4113e-06 0.75 7.4092e-06 0. -3.54157e-14 -7.4092e-06 0.85 8.2386e-06 0. -1.39477e-14 -8.2386e-06 0.95 8.9101e-06 0. -5.0284e-15 -8.9101e-06 1.05000 9.4395e-06 0. -1.6373e-15 -9.4395e-06 1.15000 9.845e-06 0. -4.737324e-16 -9.845e-06 0.25 2.6942e-06 0. -1.039345e-10 -2.6941e-06 0.35 7.2946e-06 0. -7.32393e-11 -7.2946e-06 0.45 1.43813e-05 0. -5.06291e-11 -1.43813e-05 0.55 2.36824e-05 0. -3.42772e-11 -2.36824e-05 0.65 3.48013e-05 0. -2.26855e-11 -3.48013e-05 0.75 4.73219e-05 0. -1.46461e-11 -4.73219e-05 0.85 6.08571e-05 0. -9.2022e-12 -6.08571e-05 0.95 7.5062e-05 0. -5.6118e-12 -7.5062e-05 1.05000 8.96267e-05 0. -3.3115e-12 -8.96267e-05 1.15000 0.0001042567 0. -1.8843e-12 -0.0001042567 0.25 9.879869e-07 0. -1.378e-12 -9.879855e-07 0.35 2.9993e-06 0. -7.36481e-13 -2.9993e-06 0.45 5.1911e-06 0. -3.753259e-13 -5.1911e-06 0.55 7.2342e-06 0. -1.813426e-13 -7.2342e-06 0.65 9.0241e-06 0. -8.25116e-14 -9.0241e-06 0.75 1.05324e-05 0. -3.50767e-14 -1.05324e-05 0.85 1.17652e-05 0. -1.38019e-14 -1.17652e-05 0.95 1.27456e-05 0. -4.9707e-15 -1.27456e-05 1.05000 1.35039e-05 0. -1.6166e-15 -1.35039e-05 1.15000 1.40722e-05 0. -4.671058e-16 -1.40722e-05 0.25 1.9569e-06 0. -1.03553e-10 -1.9568e-06 0.35 7.5625e-06 0. -7.29559e-11 -7.5624e-06 0.45 1.71682e-05 0. -5.04223e-11 -1.71682e-05 0.55 3.02014e-05 0. -3.41292e-11 -3.02014e-05 0.65 4.5898e-05 0. -2.25818e-11 -4.5898e-05 0.75 6.35391e-05 0. -1.4575e-11 -6.35391e-05 0.85 8.25249e-05 0. -9.1548e-12 -8.25249e-05 0.95 0.0001023751 0. -5.581e-12 -0.0001023751 1.05000 0.0001227042 0. -3.2921e-12 -0.0001227042 1.15000 0.0001431866 0. -1.8725e-12 -0.0001431866 0.25 1.3849e-06 0. -1.4015e-12 -1.3849e-06 0.35 2.2036e-06 0. -7.499862e-13 -2.2036e-06 0.45 3.0278e-06 0. -3.827464e-13 -3.0278e-06 0.55 3.8042e-06 0. -1.852203e-13 -3.8042e-06 0.65 4.5046e-06 0. -8.44264e-14 -4.5046e-06 0.75 5.1163e-06 0. -3.59634e-14 -5.1163e-06 0.85 5.6363e-06 0. -1.41835e-14 -5.6363e-06 0.95 6.0677e-06 0. -5.1217e-15 -6.0677e-06 1.05000 6.4172e-06 0. -1.6709e-15 -6.4172e-06 1.15000 6.6933e-06 0. -4.844972e-16 -6.6933e-06 0.25 3.994e-06 0. -1.045465e-10 -3.9939e-06 0.35 7.8391e-06 0. -7.36938e-11 -7.839e-06 0.45 1.30853e-05 0. -5.09608e-11 -1.30852e-05 0.55 1.95851e-05 0. -3.45147e-11 -1.95851e-05 0.65 2.712e-05 0. -2.2852e-11 -2.712e-05 0.75 3.54361e-05 0. -1.47601e-11 -3.54361e-05 0.85 4.4269e-05 0. -9.2785e-12 -4.4269e-05 0.95 5.336e-05 0. -5.6613e-12 -5.336e-05 1.05000 6.24664e-05 0. -3.3427e-12 -6.24664e-05 1.15000 7.13694e-05 0. -1.9034e-12 -7.13694e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_gidl_lt.standard0000644000175000017500000000663214163340332025346 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -1.1246e-09 1.21880002367757e-15 1.49709002908389e-16 1.49709002908389e-16 -0.8 -4.086657e-10 1.05390002047406e-15 1.55840903027514e-16 1.55840903027514e-16 -0.4 -1.154151e-10 9.67839918802179e-16 1.65200203209336e-16 1.65200203209336e-16 1.11022302462516e-16 -2.28304e-11 9.34831918160934e-16 1.84545403585155e-16 1.84545403585155e-16 0.4 -2.6695e-12 7.12260013837041e-15 3.47680006754363e-15 3.47680006754363e-15 0.8 -1.371662e-13 7.65680014874828e-15 3.76920007322407e-15 3.76920007322407e-15 1.2 -1.7541e-15 7.42500014424512e-15 3.65940007109099e-15 3.65940007109099e-15 -1.2 -6.9255e-09 1.17860002289661e-15 8.82738017148908e-17 2.05077203984025e-16 -0.8 -3.6848e-09 1.01740001976498e-15 8.28946016103894e-17 2.19754604269162e-16 -0.4 -1.735e-09 9.29248618052468e-16 8.23436015996851e-17 2.3305820452761e-16 1.11022302462516e-16 2.23976e-08 8.84757917188149e-16 9.34954018163306e-17 2.46208104783073e-16 0.4 5.26082e-05 4.79720009319497e-15 4.21080008180301e-15 3.11054106042833e-16 0.8 0.000123763 5.45610010599539e-15 4.82910009381469e-15 4.19738208154234e-16 1.2 0.0001391912 5.47960010645192e-15 4.68100009093756e-15 6.25205412145835e-16 -1.2 -1.1219e-09 1.19430002320161e-15 1.50251002918919e-16 1.50251002918919e-16 -0.8 -4.07428e-10 1.04060002021569e-15 1.56244603035356e-16 1.56244603035356e-16 -0.4 -1.149736e-10 9.59200518634342e-16 1.65546103216056e-16 1.65546103216056e-16 1.11022302462516e-16 -2.2717e-11 9.21041917893037e-16 1.80795403512304e-16 1.80795403512304e-16 0.4 -2.6516e-12 7.30570014192748e-15 3.57130006937947e-15 3.57130006937947e-15 0.8 -1.35865e-13 7.8154001518294e-15 3.8522000748365e-15 3.8522000748365e-15 1.2 -1.7288e-15 7.5238001461645e-15 3.7119000721109e-15 3.7119000721109e-15 -1.2 -6.9147e-09 1.15480002243424e-15 8.83484017163401e-17 2.06046404002853e-16 -0.8 -3.678e-09 1.00430001951049e-15 8.28733016099756e-17 2.20546504284546e-16 -0.4 -1.7312e-09 9.20811517888561e-16 8.23064015989625e-17 2.33742004540895e-16 1.11022302462516e-16 -1.296871e-10 8.74406516987053e-16 8.88265017256281e-17 2.46839604795341e-16 0.4 6.79729e-05 4.93660009590309e-15 4.36660008482973e-15 3.01456805856387e-16 0.8 0.0001744511 5.66080010997209e-15 5.05980009829649e-15 4.08778207941314e-16 1.2 0.0001960642 5.51740010718626e-15 4.82750009378361e-15 5.29541410287375e-16 -1.2 -1.129e-09 1.26230002452264e-15 1.48767702890103e-16 1.48767702890103e-16 -0.8 -4.106489e-10 1.07680002091894e-15 1.55161503014315e-16 1.55161503014315e-16 -0.4 -1.161231e-10 9.8243001908562e-16 1.64645703198564e-16 1.64645703198564e-16 1.11022302462516e-16 -2.30127e-11 1.23600002401171e-15 3.39169406589028e-16 3.39169406589028e-16 0.4 -2.6983e-12 6.94930013500372e-15 3.38780006581463e-15 3.38780006581463e-15 0.8 -1.392679e-13 7.42900014432283e-15 3.65000007090837e-15 3.65000007090837e-15 1.2 -1.7951e-15 7.26750014118537e-15 3.57590006946884e-15 3.57590006946884e-15 -1.2 -6.9428e-09 1.22120002372419e-15 8.80268017100924e-17 2.03508303953546e-16 -0.8 -3.6957e-09 1.0397000201982e-15 8.28736016099814e-17 2.18476704244336e-16 -0.4 -1.6413e-09 9.43496318329257e-16 8.23982016007459e-17 2.31956504506208e-16 1.11022302462516e-16 6.129925e-07 1.03810002016712e-15 2.46406404786925e-16 2.4531230476567e-16 0.4 4.16088e-05 4.69920009129113e-15 4.08660007939018e-15 3.32175006453148e-16 0.8 8.18179e-05 5.41440010518529e-15 4.67740009086762e-15 5.24057710180844e-16 1.2 8.35261e-05 5.76990011209157e-15 4.62750008989822e-15 9.72849618899502e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_ig_sw.standard0000644000175000017500000000615414163340332025010 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 6.917554e-07 1.4412e-11 -6.9067e-12 -6.917629e-07 0.35 1.41817e-05 2.233427e-10 -6.9372e-12 -1.41819e-05 0.45 0.000126248 2.409e-09 -6.2205e-12 -0.0001262504 0.55 0.0003666705 9.7723e-09 -5.0327e-12 -0.0003666802 0.65 0.0006371876 2.42469e-08 -4.156e-12 -0.0006372118 0.75 0.0008920442 4.80724e-08 -3.6025e-12 -0.0008920923 0.85 0.0011175 8.44459e-08 -3.2532e-12 -0.0011176 0.95 0.0013104 1.376081e-07 -3.0335e-12 -0.0013106 1.05000 0.0014716 2.130578e-07 -2.9162e-12 -0.0014718 1.15000 0.0016036 3.178605e-07 -2.9412e-12 -0.0016039 0.25 3.1037e-06 1.54706e-11 -6.8244e-12 -3.1037e-06 0.35 5.19166e-05 1.994329e-10 -6.795e-12 -5.19168e-05 0.45 0.0003661089 1.1422e-09 -6.1343e-12 -0.00036611 0.55 0.0010939 2.6343e-09 -5.2154e-12 -0.0010939 0.65 0.002122 4.5568e-09 -4.4514e-12 -0.002122 0.75 0.0033132 7.0248e-09 -3.9087e-12 -0.0033133 0.85 0.0045804 1.01137e-08 -3.5393e-12 -0.0045804 0.95 0.0058712 1.39048e-08 -3.2903e-12 -0.0058712 1.05000 0.0071524 1.85087e-08 -3.1282e-12 -0.0071524 1.15000 0.0084022 2.40706e-08 -3.0453e-12 -0.0084022 0.25 4.29445e-08 2.5835e-12 -2.3779e-12 -4.29447e-08 0.35 2.9094e-06 2.23885e-11 -2.4312e-12 -2.9095e-06 0.45 8.9072e-05 6.571685e-10 -2.2884e-12 -8.90726e-05 0.55 0.0003969796 3.8746e-09 -1.8429e-12 -0.0003969835 0.65 0.000761168 1.07051e-08 -1.4955e-12 -0.0007611787 0.75 0.0010996 2.2108e-08 -1.2832e-12 -0.0010997 0.85 0.001395 3.96325e-08 -1.152e-12 -0.001395 0.95 0.001645 6.53634e-08 -1.0691e-12 -0.0016451 1.05000 0.0018524 1.020119e-07 -1.0199e-12 -0.0018525 1.15000 0.0020211 1.530674e-07 -1.0169e-12 -0.0020213 0.25 2.871274e-07 2.828e-12 -2.3513e-12 -2.871278e-07 0.35 1.56604e-05 3.99607e-11 -2.3935e-12 -1.56604e-05 0.45 0.0002827347 5.657399e-10 -2.21e-12 -0.0002827353 0.55 0.0011148 1.5399e-09 -1.858e-12 -0.0011148 0.65 0.0023363 2.7125e-09 -1.5655e-12 -0.0023363 0.75 0.0037491 4.1471e-09 -1.3654e-12 -0.0037491 0.85 0.0052474 5.8804e-09 -1.2332e-12 -0.0052474 0.95 0.0067709 7.9587e-09 -1.1454e-12 -0.0067709 1.05000 0.0082812 1.04484e-08 -1.0874e-12 -0.0082812 1.15000 0.0097531 1.34347e-08 -1.0547e-12 -0.0097531 0.25 8.9161e-06 3.09819e-10 -2.37379e-11 -8.9164e-06 0.35 5.5479e-05 2.5827e-09 -2.23073e-11 -5.54815e-05 0.45 0.0001810423 1.16532e-08 -1.88527e-11 -0.0001810539 0.55 0.0003583678 3.24338e-08 -1.55029e-11 -0.0003584003 0.65 0.0005462933 6.94118e-08 -1.31625e-11 -0.0005463627 0.75 0.0007241739 1.283097e-07 -1.164e-11 -0.0007243022 0.85 0.0008835205 2.166908e-07 -1.06638e-11 -0.0008837372 0.95 0.0010215 3.443963e-07 -1.00759e-11 -0.0010218 1.05000 0.0011378 5.241075e-07 -9.8431e-12 -0.0011384 1.15000 0.0012339 7.720635e-07 -1.00865e-11 -0.0012347 0.25 3.02931e-05 1.518248e-10 -2.3392e-11 -3.02932e-05 0.35 0.0001691975 8.764921e-10 -2.21102e-11 -0.0001691984 0.45 0.0005563222 2.611e-09 -1.94841e-11 -0.0005563248 0.55 0.0012143 5.2179e-09 -1.67533e-11 -0.0012143 0.65 0.00207 8.7906e-09 -1.455e-11 -0.00207 0.75 0.0030415 1.35306e-08 -1.29448e-11 -0.0030415 0.85 0.004068 1.96319e-08 -1.18221e-11 -0.004068 0.95 0.0051088 2.73107e-08 -1.10597e-11 -0.0051089 1.05000 0.0061371 3.68361e-08 -1.0583e-11 -0.0061371 1.15000 0.0071347 4.85486e-08 -1.03847e-11 -0.0071347 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_gidl_sw.standard0000644000175000017500000000522414163340332025325 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 6.917716e-07 0. -2.24239e-11 -6.917491e-07 0.35 1.41818e-05 0. -1.18742e-11 -1.41817e-05 0.45 0.000126249 0. -5.99e-12 -0.000126249 0.55 0.0003666746 0. -2.8617e-12 -0.0003666746 0.65 0.0006371979 0. -1.2859e-12 -0.0006371979 0.75 0.0008920647 0. -5.391392e-13 -0.0008920647 0.85 0.0011176 0. -2.088878e-13 -0.0011176 0.95 0.0013105 0. -7.39447e-14 -0.0013105 1.05000 0.0014717 0. -2.35902e-14 -0.0014717 1.15000 0.0016037 0. -6.6707e-15 -0.0016037 0.25 3.1047e-06 0. -9.684867e-10 -3.1037e-06 0.35 5.19174e-05 0. -6.807297e-10 -5.19167e-05 0.45 0.0003661097 0. -4.696121e-10 -0.0003661092 0.55 0.0010939 0. -3.174277e-10 -0.0010939 0.65 0.002122 0. -2.098255e-10 -0.002122 0.75 0.0033132 0. -1.353456e-10 -0.0033132 0.85 0.0045804 0. -8.49862e-11 -0.0045804 0.95 0.0058712 0. -5.18062e-11 -0.0058712 1.05000 0.0071524 0. -3.05632e-11 -0.0071524 1.15000 0.0084022 0. -1.73888e-11 -0.0084022 0.25 4.29575e-08 0. -2.22761e-11 -4.29352e-08 0.35 2.9095e-06 0. -1.17901e-11 -2.9094e-06 0.45 8.90723e-05 0. -5.9443e-12 -8.90723e-05 0.55 0.0003969812 0. -2.8381e-12 -0.0003969812 0.65 0.0007611726 0. -1.2744e-12 -0.0007611726 0.75 0.0010996 0. -5.338893e-13 -0.0010996 0.85 0.001395 0. -2.066657e-13 -0.001395 0.95 0.0016451 0. -7.30818e-14 -0.0016451 1.05000 0.0018524 0. -2.32868e-14 -0.0018524 1.15000 0.0020212 0. -6.5756e-15 -0.0020212 0.25 2.88083e-07 0. -9.649023e-10 -2.871181e-07 0.35 1.56611e-05 0. -6.780794e-10 -1.56604e-05 0.45 0.0002827354 0. -4.676852e-10 -0.0002827349 0.55 0.0011148 0. -3.160526e-10 -0.0011148 0.65 0.0023363 0. -2.088639e-10 -0.0023363 0.75 0.0037491 0. -1.34688e-10 -0.0037491 0.85 0.0052474 0. -8.45475e-11 -0.0052474 0.95 0.0067709 0. -5.15215e-11 -0.0067709 1.05000 0.0082812 0. -3.0384e-11 -0.0082812 1.15000 0.0097531 0. -1.72797e-11 -0.0097531 0.25 8.9162e-06 0. -2.26619e-11 -8.9162e-06 0.35 5.54801e-05 0. -1.20097e-11 -5.54801e-05 0.45 0.0001810473 0. -6.0637e-12 -0.0001810473 0.55 0.0003583818 0. -2.8998e-12 -0.0003583818 0.65 0.000546323 0. -1.3045e-12 -0.000546323 0.75 0.0007242287 0. -5.476224e-13 -0.0007242287 0.85 0.0008836131 0. -2.124824e-13 -0.0008836131 0.95 0.0010216 0. -7.53424e-14 -0.0010216 1.05000 0.0011381 0. -2.40824e-14 -0.0011381 1.15000 0.0012342 0. -6.8251e-15 -0.0012342 0.25 3.02941e-05 0. -9.74236e-10 -3.02931e-05 0.35 0.0001691984 0. -6.849818e-10 -0.0001691977 0.45 0.0005563231 0. -4.727041e-10 -0.0005563227 0.55 0.0012143 0. -3.19635e-10 -0.0012143 0.65 0.00207 0. -2.113696e-10 -0.00207 0.75 0.0030415 0. -1.364017e-10 -0.0030415 0.85 0.004068 0. -8.56909e-11 -0.004068 0.95 0.0051088 0. -5.22638e-11 -0.0051088 1.05000 0.0061371 0. -3.08514e-11 -0.0061371 1.15000 0.0071347 0. -1.75643e-11 -0.0071347 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_core_sw.standard0000644000175000017500000001623614163340332025367 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0039266 1.38939002699161e-14 3.78300007349216e-15 9.36210018187707e-15 0 0. 8.68390016870171e-15 3.74580007276948e-15 3.74580007276948e-15 0.2 3.15361e-05 8.57840016665216e-15 3.5873000696903e-15 3.79980007381853e-15 0.4 4.30899e-05 8.44300016402175e-15 3.58580006966116e-15 3.67460007138628e-15 0.6 5.6664e-05 8.29850016121456e-15 3.59800006989817e-15 3.52690006851692e-15 0.8 7.29447e-05 8.19650015923301e-15 3.61420007021289e-15 3.41770006639549e-15 1 9.25054e-05 8.12740015789061e-15 3.63330007058394e-15 3.33850006485688e-15 1.2 0.0001159296 8.07990015696783e-15 3.65500007100551e-15 3.27820006368543e-15 -0.2 -0.0088812 1.74794003395715e-14 4.39260008533483e-15 1.26814002463609e-14 0 0. 1.70968003321387e-14 8.32250016168081e-15 8.32250016168081e-15 0.2 0.0050661 1.47094002857588e-14 1.02804001997168e-14 3.78620007355432e-15 0.4 0.0058217 1.46754002850983e-14 1.02758001996275e-14 3.75090007286855e-15 0.6 0.0063918 1.45648002829497e-14 1.02759001996294e-14 3.63440007060531e-15 0.8 0.0068876 1.44137002800143e-14 1.02744001996003e-14 3.47850006757665e-15 1 0.0073414 1.42977002777607e-14 1.02706001995265e-14 3.35950006526484e-15 1.2 0.0077668 1.42137002761289e-14 1.02645001994079e-14 3.2746000636155e-15 -0.2 -0.0076676 1.85940003612247e-14 6.77850013168559e-15 1.15282002239578e-14 0 0. 1.90668003704098e-14 9.40150018264249e-15 9.40150018264249e-15 0.2 0.008884 1.76785003434394e-14 1.26550002458481e-14 4.65100009035475e-15 0.4 0.0107149 1.72939003359678e-14 1.30324002531798e-14 3.8522000748365e-15 0.6 0.0114605 1.71914003339765e-14 1.29386002513576e-14 3.82460007430032e-15 0.8 0.0119863 1.70233003307108e-14 1.28462002495625e-14 3.7304000724703e-15 1 0.0124015 1.67931003262387e-14 1.27554002477985e-14 3.57270006940667e-15 1.2 0.0127486 1.65922003223359e-14 1.26660002460618e-14 3.44330006689282e-15 -0.2 -0.0050913 1.88349003659047e-14 8.46110016437338e-15 1.01341001968747e-14 0 0. 1.91491003720086e-14 9.46340018384502e-15 9.46340018384502e-15 0.2 0.0072515 1.8647600362266e-14 1.1255600218662e-14 7.11850013829076e-15 0.4 0.0109442 1.77169003441854e-14 1.33593002595305e-14 4.01840007806526e-15 0.6 0.011854 1.75998003419105e-14 1.32835002580579e-14 3.95470007682777e-15 0.8 0.0124096 1.74984003399406e-14 1.31820002560861e-14 3.93420007642951e-15 1 0.0128209 1.7345900336978e-14 1.30819002541414e-14 3.86130007501329e-15 1.2 0.0131483 1.71140003324729e-14 1.29837002522337e-14 3.70750007202542e-15 -0.2 -0.0038944 1.37865002678297e-14 3.76970007323378e-15 9.26220017993631e-15 0 0. 8.55500016619757e-15 3.68480007158443e-15 3.68480007158443e-15 0.2 2.7052e-06 8.49490016503001e-15 3.51120006821191e-15 3.80330007388653e-15 0.4 4.0877e-06 8.34980016221116e-15 3.49850006796519e-15 3.67890007146981e-15 0.6 5.9326e-06 8.19350015917473e-15 3.49790006795353e-15 3.53130006860239e-15 0.8 8.4044e-06 8.07830015693674e-15 3.49990006799239e-15 3.42220006648291e-15 1 1.16977e-05 7.99440015530682e-15 3.50310006805455e-15 3.34320006494819e-15 1.2 1.60519e-05 7.93070015406933e-15 3.50740006813809e-15 3.28320006378257e-15 -0.2 -0.0108904 1.77320003444787e-14 3.9152000760604e-15 1.34310002609234e-14 0 0. 1.73606003372635e-14 8.46250016440058e-15 8.46250016440058e-15 0.2 0.00557 1.48938002893411e-14 1.05065002041093e-14 3.7592000730298e-15 0.4 0.0064744 1.48991002894441e-14 1.05353002046688e-14 3.73210007250333e-15 0.6 0.0071952 1.48176002878608e-14 1.05661002052671e-14 3.61530007023426e-15 0.8 0.0078379 1.46927002854344e-14 1.0592400205778e-14 3.45880006719394e-15 1 0.0084342 1.46005002836432e-14 1.06139002061957e-14 3.33930006487242e-15 1.2 0.0089973 1.45383002824349e-14 1.06307002065221e-14 3.25380006321142e-15 -0.2 -0.0098257 1.86501003623146e-14 6.03410011722417e-15 1.23355002396412e-14 0 0. 1.94152003771782e-14 9.58700018624619e-15 9.58700018624619e-15 0.2 0.0109925 1.78577003469207e-14 1.34885002620404e-14 4.0110000779215e-15 0.4 0.012718 1.76999003438551e-14 1.34973002622114e-14 3.82060007422261e-15 0.6 0.0135847 1.75992003418988e-14 1.33990002603017e-14 3.79850007379328e-15 0.8 0.0141986 1.7429600338604e-14 1.33030002584367e-14 3.70540007198463e-15 1 0.014682 1.71972003340892e-14 1.32085002566009e-14 3.54800006892683e-15 1.2 0.0150851 1.69937003301358e-14 1.31153002547903e-14 3.41860006641298e-15 -0.2 -0.0064955 1.90096003692986e-14 8.51430016540689e-15 1.02695001995051e-14 0 0. 1.93732003763622e-14 9.58360018618013e-15 9.58360018618013e-15 0.2 0.0092942 1.87358003639795e-14 1.19167002315052e-14 6.55420012732813e-15 0.4 0.0129726 1.79352003484263e-14 1.36741002656461e-14 3.93680007648002e-15 0.6 0.0139824 1.78429003466332e-14 1.35690002636043e-14 3.92800007630907e-15 0.8 0.0146328 1.77424003446807e-14 1.34647002615781e-14 3.91040007596715e-15 1 0.0151138 1.75895003417104e-14 1.33626002595946e-14 3.8386000745723e-15 1.2 0.0154947 1.73568003371897e-14 1.32623002576461e-14 3.68540007159609e-15 -0.2 -0.0039139 1.4447300280667e-14 4.03660007841883e-15 9.70560018855022e-15 0 0. 9.71200018867455e-15 4.29110008336299e-15 4.29110008336299e-15 0.2 0.0002901503 9.20360017879789e-15 4.24790008252375e-15 3.79010007363009e-15 0.4 0.0003626466 9.09550017669784e-15 4.28120008317067e-15 3.65860007107545e-15 0.6 0.0004335183 8.98560017456282e-15 4.33040008412647e-15 3.51020006819249e-15 0.8 0.0005079313 8.91890017326704e-15 4.38360008515999e-15 3.40070006606523e-15 1 0.0005874056 8.88440017259681e-15 4.43900008623624e-15 3.32110006451885e-15 1.2 0.0006726756 8.87050017232678e-15 4.49570008733775e-15 3.26050006334158e-15 -0.2 -0.0061331 1.75147003402572e-14 5.32070010336498e-15 1.17918002290787e-14 0 0. 1.69813003298949e-14 8.26330016053073e-15 8.26330016053073e-15 0.2 0.0044847 1.50522002924184e-14 1.02826001997596e-14 4.15300008068013e-15 0.4 0.0053879 1.47068002857083e-14 1.02468001990641e-14 3.81290007407302e-15 0.6 0.0058865 1.4518900282058e-14 1.01908001979762e-14 3.66960007128914e-15 0.8 0.0062762 1.43242002782755e-14 1.0147500197135e-14 3.50890006816723e-15 1 0.0066143 1.41740002753576e-14 1.01085001963773e-14 3.38900006583794e-15 1.2 0.0069216 1.4059900273141e-14 1.00710001956488e-14 3.30380006418276e-15 -0.2 -0.005244 1.83450003563874e-14 6.62750012875212e-15 1.14139002217373e-14 0 0. 1.86104003615433e-14 9.15880017792756e-15 9.15880017792756e-15 0.2 0.0060642 1.76803003434743e-14 1.17921002290846e-14 5.51570010715324e-15 0.4 0.0082878 1.70188003306234e-14 1.24537002419374e-14 4.1363000803557e-15 0.6 0.0091669 1.67848003260775e-14 1.24017002409272e-14 3.92800007630907e-15 0.8 0.0096913 1.65741003219842e-14 1.23063002390739e-14 3.79260007367866e-15 1 0.0100722 1.6326700317178e-14 1.22115002372322e-14 3.62180007036053e-15 1.2 0.010377 1.61179003131217e-14 1.21198002354508e-14 3.48730006774761e-15 -0.2 -0.0036934 1.84935003592723e-14 7.56930014704843e-15 1.06619002071282e-14 0 0. 1.88089003653996e-14 9.28150018031125e-15 9.28150018031125e-15 0.2 0.0050017 1.83669003568129e-14 1.12985002194954e-14 6.77700013165645e-15 0.4 0.0079696 1.76801003434704e-14 1.2705800246835e-14 4.62790008990599e-15 0.6 0.0091976 1.73786003376132e-14 1.28310002492672e-14 4.16940008099873e-15 0.8 0.0098567 1.72051003342426e-14 1.27639002479637e-14 4.03950007847517e-15 1 0.0102895 1.70217003306797e-14 1.26694002461278e-14 3.92940007633626e-15 1.2 0.0106096 1.6775200325891e-14 1.25720002442356e-14 3.76040007305311e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_core_sw.standard0000644000175000017500000000404714163340332025176 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.63229e-05 0. 0. -1.63229e-05 0.35 0.0001324527 0. 0. -0.0001324527 0.45 0.000381386 0. 0. -0.000381386 0.55 0.0006681639 0. 0. -0.0006681639 0.65 0.0009428032 0. 0. -0.0009428032 0.75 0.0011879 0. 0. -0.0011879 0.85 0.0013979 0. 0. -0.0013979 0.95 0.0015726 0. 0. -0.0015726 1.05000 0.0017144 0. 0. -0.0017144 1.15000 0.0018265 0. 0. -0.0018265 0.25 4.53658e-05 0. 0. -4.53658e-05 0.35 0.0003273126 0. 0. -0.0003273126 0.45 0.001023 0. 0. -0.001023 0.55 0.0020441 0. 0. -0.0020441 0.65 0.0032511 0. 0. -0.0032511 0.75 0.0045489 0. 0. -0.0045489 0.85 0.0058782 0. 0. -0.0058782 0.95 0.0072003 0. 0. -0.0072003 1.05000 0.0084898 0. 0. -0.0084898 1.15000 0.0097298 0. 0. -0.0097298 0.25 2.8946e-06 0. 0. -2.8946e-06 0.35 8.37758e-05 0. 0. -8.37758e-05 0.45 0.0003953992 0. 0. -0.0003953992 0.55 0.000782126 0. 0. -0.000782126 0.65 0.0011487 0. 0. -0.0011487 0.75 0.0014713 0. 0. -0.0014713 0.85 0.0017449 0. 0. -0.0017449 0.95 0.0019707 0. 0. -0.0019707 1.05000 0.0021527 0. 0. -0.0021527 1.15000 0.0022961 0. 0. -0.0022961 0.25 1.03918e-05 0. 0. -1.03918e-05 0.35 0.0002162827 0. 0. -0.0002162827 0.45 0.0009795071 0. 0. -0.0009795071 0.55 0.0021821 0. 0. -0.0021821 0.65 0.0036114 0. 0. -0.0036114 0.75 0.0051457 0. 0. -0.0051457 0.85 0.006715 0. 0. -0.006715 0.95 0.008274 0. 0. -0.008274 1.05000 0.0097928 0. 0. -0.0097928 1.15000 0.0112523 0. 0. -0.0112523 0.25 6.90348e-05 0. 0. -6.90348e-05 0.35 0.0002034414 0. 0. -0.0002034414 0.45 0.0003892311 0. 0. -0.0003892311 0.55 0.0005881239 0. 0. -0.0005881239 0.65 0.0007785868 0. 0. -0.0007785868 0.75 0.0009503914 0. 0. -0.0009503914 0.85 0.0010993 0. 0. -0.0010993 0.95 0.0012244 0. 0. -0.0012244 1.05000 0.0013267 0. 0. -0.0013267 1.15000 0.0014081 0. 0. -0.0014081 0.25 0.0001806471 0. 0. -0.0001806471 0.35 0.0005670065 0. 0. -0.0005670065 0.45 0.0012236 0. 0. -0.0012236 0.55 0.0020867 0. 0. -0.0020867 0.65 0.0030762 0. 0. -0.0030762 0.75 0.004129 0. 0. -0.004129 0.85 0.0052011 0. 0. -0.0052011 0.95 0.0062621 0. 0. -0.0062621 1.05000 0.0072913 0. 0. -0.0072913 1.15000 0.0082752 0. 0. -0.0082752 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_ig_lw.standard0000644000175000017500000002054314163340332024632 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -1.972e-09 3.978e-09 -3.395e-11 -1.972e-09 0.1 2.21855e-05 1.7271e-09 -4.39086e-11 -2.21872e-05 0.2 2.45991e-05 1.3075e-09 -4.57168e-11 -2.46004e-05 0.3 2.57909e-05 1.2647e-09 -4.5836e-11 -2.57922e-05 0.4 2.69204e-05 1.2464e-09 -4.59148e-11 -2.69216e-05 0.5 2.80083e-05 1.2333e-09 -4.59943e-11 -2.80095e-05 0.6 2.9064e-05 1.2225e-09 -4.60752e-11 -2.90652e-05 0.7 3.00935e-05 1.2131e-09 -4.61571e-11 -3.00947e-05 0.8 3.11009e-05 1.2046e-09 -4.62395e-11 -3.11021e-05 0.9 3.20891e-05 1.1966e-09 -4.63221e-11 -3.20903e-05 1.00000 3.30605e-05 1.1891e-09 -4.64049e-11 -3.30616e-05 1.10000 3.40167e-05 1.1819e-09 -4.64878e-11 -3.40179e-05 1.20000 3.49593e-05 1.1749e-09 -4.65706e-11 -3.49604e-05 0. -2.38065e-08 4.7632e-08 -1.89675e-11 -2.38065e-08 0.1 0.0001453714 2.96366e-08 -2.24649e-11 -0.000145401 0.2 0.0002285906 1.69307e-08 -2.68983e-11 -0.0002286075 0.3 0.0002570074 1.18383e-08 -3.0058e-11 -0.0002570192 0.4 0.0002666404 1.08089e-08 -3.08434e-11 -0.0002666511 0.5 0.0002737026 1.05929e-08 -3.1026e-11 -0.0002737131 0.6 0.0002800645 1.05092e-08 -3.11135e-11 -0.0002800749 0.7 0.0002860204 1.0455e-08 -3.11826e-11 -0.0002860309 0.8 0.0002916727 1.04103e-08 -3.12473e-11 -0.0002916831 0.9 0.0002970784 1.03698e-08 -3.13109e-11 -0.0002970887 1.00000 0.0003022769 1.03316e-08 -3.13742e-11 -0.0003022872 1.10000 0.0003072981 1.02949e-08 -3.14375e-11 -0.0003073084 1.20000 0.0003121653 1.02592e-08 -3.15009e-11 -0.0003121755 0. -9.48267e-08 1.896697e-07 -1.62862e-11 -9.48267e-08 0.1 0.0002621262 1.313935e-07 -1.76576e-11 -0.0002622576 0.2 0.0004736663 8.1849e-08 -1.93575e-11 -0.0004737481 0.3 0.0006246138 5.17203e-08 -2.13698e-11 -0.0006246655 0.4 0.0007082207 3.64184e-08 -2.32495e-11 -0.0007082571 0.5 0.0007455521 3.06225e-08 -2.43007e-11 -0.0007455827 0.6 0.0007664272 2.88085e-08 -2.46962e-11 -0.000766456 0.7 0.0007824053 2.81927e-08 -2.48485e-11 -0.0007824334 0.8 0.0007964029 2.7927e-08 -2.49257e-11 -0.0007964308 0.9 0.000809275 2.77755e-08 -2.49784e-11 -0.0008093027 1.00000 0.000821356 2.76665e-08 -2.50222e-11 -0.0008213836 1.10000 0.0008328163 2.75755e-08 -2.50625e-11 -0.0008328438 1.20000 0.0008437617 2.74931e-08 -2.51014e-11 -0.0008437892 0. -2.680833e-07 5.361831e-07 -1.65837e-11 -2.680833e-07 0.1 0.0003397412 3.87998e-07 -1.71726e-11 -0.0003401291 0.2 0.0006458054 2.517916e-07 -1.79733e-11 -0.0006460572 0.3 0.0009093363 1.63786e-07 -1.89628e-11 -0.0009095001 0.4 0.0011189 1.104078e-07 -2.01062e-11 -0.001119 0.5 0.0012632 7.99822e-08 -2.12568e-11 -0.0012633 0.6 0.0013473 6.47048e-08 -2.21416e-11 -0.0013474 0.7 0.0013955 5.80127e-08 -2.26444e-11 -0.0013956 0.8 0.0014279 5.52124e-08 -2.28881e-11 -0.0014279 0.9 0.0014535 5.39709e-08 -2.30087e-11 -0.0014536 1.00000 0.0014758 5.335e-08 -2.30767e-11 -0.0014758 1.10000 0.001496 5.2989e-08 -2.3122e-11 -0.0014961 1.20000 0.0015149 5.27447e-08 -2.31572e-11 -0.001515 0. -4.826822e-10 9.805767e-10 -1.52122e-11 -4.826822e-10 0.1 1.21706e-05 4.011574e-10 -1.80856e-11 -1.2171e-05 0.2 1.31784e-05 3.712672e-10 -1.81431e-11 -1.31788e-05 0.3 1.40934e-05 3.636688e-10 -1.81586e-11 -1.40938e-05 0.4 1.49655e-05 3.588258e-10 -1.81767e-11 -1.49658e-05 0.5 1.58081e-05 3.551779e-10 -1.8196e-11 -1.58084e-05 0.6 1.66285e-05 3.52157e-10 -1.82159e-11 -1.66288e-05 0.7 1.74313e-05 3.495074e-10 -1.8236e-11 -1.74316e-05 0.8 1.82194e-05 3.470975e-10 -1.82563e-11 -1.82198e-05 0.9 1.8995e-05 3.448532e-10 -1.82767e-11 -1.89953e-05 1.00000 1.97595e-05 3.427294e-10 -1.82971e-11 -1.97598e-05 1.10000 2.0514e-05 3.406972e-10 -1.83175e-11 -2.05144e-05 1.20000 2.12595e-05 3.387371e-10 -1.83378e-11 -2.12598e-05 0. -1.00167e-08 2.00406e-08 -7.1762e-12 -1.00167e-08 0.1 0.0001913817 1.20675e-08 -8.6705e-12 -0.0001913937 0.2 0.000285905 6.7237e-09 -1.05422e-11 -0.0002859117 0.3 0.000308464 5.4562e-09 -1.12494e-11 -0.0003084694 0.4 0.0003196908 5.356e-09 -1.13074e-11 -0.0003196962 0.5 0.0003294777 5.3237e-09 -1.13289e-11 -0.000329483 0.6 0.0003384532 5.2999e-09 -1.13483e-11 -0.0003384585 0.7 0.0003468258 5.2791e-09 -1.13676e-11 -0.0003468311 0.8 0.0003547246 5.2601e-09 -1.13871e-11 -0.0003547298 0.9 0.0003622401 5.2423e-09 -1.14066e-11 -0.0003622453 1.00000 0.000369439 5.2253e-09 -1.14262e-11 -0.0003694442 1.10000 0.000376372 5.2088e-09 -1.14458e-11 -0.0003763772 1.20000 0.0003830783 5.1929e-09 -1.14655e-11 -0.0003830835 0. -4.27689e-08 8.55437e-08 -5.8826e-12 -4.27689e-08 0.1 0.0003711701 5.87587e-08 -6.4113e-12 -0.0003712288 0.2 0.0006646714 3.61948e-08 -7.0753e-12 -0.0006647076 0.3 0.0008635047 2.26222e-08 -7.8695e-12 -0.0008635273 0.4 0.000955265 1.69274e-08 -8.4615e-12 -0.0009552819 0.5 0.0009931233 1.57665e-08 -8.6208e-12 -0.0009931391 0.6 0.0010195 1.5551e-08 -8.655e-12 -0.0010195 0.7 0.0010423 1.54744e-08 -8.6702e-12 -0.0010423 0.8 0.001063 1.5424e-08 -8.6821e-12 -0.001063 0.9 0.0010822 1.53808e-08 -8.6933e-12 -0.0010822 1.00000 0.0011002 1.53405e-08 -8.7043e-12 -0.0011003 1.10000 0.0011173 1.53018e-08 -8.7153e-12 -0.0011173 1.20000 0.0011334 1.52641e-08 -8.7264e-12 -0.0011335 0. -1.240185e-07 2.480429e-07 -5.8358e-12 -1.240185e-07 0.1 0.0004861848 1.788301e-07 -6.0892e-12 -0.0004863636 0.2 0.0009220115 1.155538e-07 -6.4086e-12 -0.000922127 0.3 0.0012934 7.4697e-08 -6.7924e-12 -0.0012935 0.4 0.0015815 4.99911e-08 -7.2328e-12 -0.0015816 0.5 0.001762 3.70202e-08 -7.6344e-12 -0.0017621 0.6 0.0018525 3.23067e-08 -7.8419e-12 -0.0018525 0.7 0.0019054 3.1028e-08 -7.9085e-12 -0.0019054 0.8 0.0019462 3.06484e-08 -7.9313e-12 -0.0019462 0.9 0.0019817 3.04894e-08 -7.9428e-12 -0.0019817 1.00000 0.002014 3.03913e-08 -7.9513e-12 -0.0020141 1.10000 0.0020441 3.03129e-08 -7.9589e-12 -0.0020441 1.20000 0.0020723 3.02421e-08 -7.9661e-12 -0.0020723 0. -9.4503e-09 1.89778e-08 -7.72373e-11 -9.4503e-09 0.1 3.4625e-05 9.9342e-09 -1.005235e-10 -3.46348e-05 0.2 4.48783e-05 6.3233e-09 -1.1567e-10 -4.48845e-05 0.3 4.77745e-05 5.235e-09 -1.206674e-10 -4.77796e-05 0.4 4.94279e-05 4.8339e-09 -1.224091e-10 -4.94326e-05 0.5 5.0827e-05 4.6441e-09 -1.232807e-10 -5.08315e-05 0.6 5.21373e-05 4.535e-09 -1.238655e-10 -5.21417e-05 0.7 5.33981e-05 4.4624e-09 -1.243347e-10 -5.34024e-05 0.8 5.46233e-05 4.4084e-09 -1.247501e-10 -5.46276e-05 0.9 5.58196e-05 4.3649e-09 -1.251374e-10 -5.58239e-05 1.00000 5.69913e-05 4.3278e-09 -1.255091e-10 -5.69955e-05 1.10000 5.81412e-05 4.2948e-09 -1.258713e-10 -5.81454e-05 1.20000 5.92715e-05 4.2646e-09 -1.262276e-10 -5.92756e-05 0. -7.07841e-08 1.416239e-07 -5.56944e-11 -7.07841e-08 0.1 0.0001115013 9.23996e-08 -6.39405e-11 -0.0001115936 0.2 0.0001813853 5.79121e-08 -7.3286e-11 -0.0001814431 0.3 0.0002166441 4.08392e-08 -8.14093e-11 -0.0002166848 0.4 0.0002334804 3.28913e-08 -8.69105e-11 -0.0002335132 0.5 0.0002428252 2.90231e-08 -9.01881e-11 -0.0002428542 0.6 0.0002492648 2.69718e-08 -9.21302e-11 -0.0002492917 0.7 0.0002544571 2.57793e-08 -9.3353e-11 -0.0002544828 0.8 0.0002590209 2.50252e-08 -9.41885e-11 -0.0002590459 0.9 0.0002632137 2.45121e-08 -9.48067e-11 -0.0002632381 1.00000 0.0002671574 2.414e-08 -9.52972e-11 -0.0002671815 1.10000 0.0002709174 2.38552e-08 -9.57091e-11 -0.0002709412 1.20000 0.0002745326 2.36266e-08 -9.60704e-11 -0.0002745561 0. -2.54182e-07 5.084158e-07 -5.18393e-11 -2.54182e-07 0.1 0.0001817 3.577514e-07 -5.55949e-11 -0.0001820577 0.2 0.0003272743 2.315748e-07 -5.99763e-11 -0.0003275059 0.3 0.0004308966 1.577256e-07 -6.45531e-11 -0.0004310542 0.4 0.000497786 1.171455e-07 -6.87643e-11 -0.0004979031 0.5 0.0005393592 9.46376e-08 -7.2219e-11 -0.0005394538 0.6 0.0005660224 8.16875e-08 -7.48364e-11 -0.0005661041 0.7 0.0005844923 7.38762e-08 -7.67435e-11 -0.0005845661 0.8 0.0005984603 6.89254e-08 -7.81243e-11 -0.0005985291 0.9 0.0006098461 6.56344e-08 -7.91388e-11 -0.0006099117 1.00000 0.0006196538 6.33483e-08 -7.9904e-11 -0.0006197171 1.10000 0.0006284285 6.16952e-08 -8.04994e-11 -0.0006284901 1.20000 0.0006364822 6.04556e-08 -8.0978e-11 -0.0006365425 0. -6.881622e-07 1.3764e-06 -5.58513e-11 -6.881622e-07 0.1 0.0002306128 1.0034e-06 -5.70281e-11 -0.0002316161 0.2 0.000435981 6.627996e-07 -5.89111e-11 -0.0004366437 0.3 0.0006067778 4.494398e-07 -6.12622e-11 -0.0006072272 0.4 0.0007394232 3.233655e-07 -6.38066e-11 -0.0007397465 0.5 0.0008369617 2.48413e-07 -6.62849e-11 -0.00083721 0.6 0.0009066966 2.026772e-07 -6.85107e-11 -0.0009068992 0.7 0.0009566535 1.73826e-07 -7.03958e-11 -0.0009568272 0.8 0.0009934088 1.549753e-07 -7.19331e-11 -0.0009935637 0.9 0.0010216 1.422265e-07 -7.31624e-11 -0.0010217 1.00000 0.0010442 1.333176e-07 -7.41395e-11 -0.0010443 1.10000 0.001063 1.268994e-07 -7.49191e-11 -0.0010632 1.20000 0.0010794 1.221438e-07 -7.55477e-11 -0.0010795 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_ig_sw.standard0000644000175000017500000001640714163340332024674 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0072574 1.62406003155054e-14 3.86070007500163e-15 1.1648200226289e-14 0 -5.3615e-09 1.1063600214932e-14 4.82580009375058e-15 4.82580009375058e-15 0.2 0.0006055612 1.0182300197811e-14 4.9235000956486e-15 3.74490007275199e-15 0.4 0.0007376939 1.00753001957324e-14 4.95880009633437e-15 3.61660007025951e-15 0.6 0.0008626233 9.95720019343805e-15 5.00240009718138e-15 3.46880006738821e-15 0.8 0.0009885059 9.87960019193051e-15 5.04700009804782e-15 3.3601000652765e-15 1 0.0011179 9.83230019101162e-15 5.09150009891232e-15 3.28150006374954e-15 1.2 0.0012519 9.80410019046378e-15 5.13550009976711e-15 3.22210006259558e-15 -0.2 -0.0092631 1.81944003534617e-14 5.06320009836254e-15 1.27153002470195e-14 0 -8.90493e-08 1.85535003604379e-14 9.07720017634232e-15 9.07720017634232e-15 0.2 0.007759 1.6506400320669e-14 1.19723002325853e-14 3.90200007580397e-15 0.4 0.0088047 1.63555003177375e-14 1.19024002312273e-14 3.80210007386321e-15 0.6 0.0094163 1.61663003140619e-14 1.18145002295197e-14 3.68640007161551e-15 0.8 0.0098825 1.59400003096656e-14 1.17293002278645e-14 3.53100006859657e-15 1 0.0102717 1.57517003060075e-14 1.16456002262385e-14 3.41230006629059e-15 1.2 0.0106127 1.55985003030313e-14 1.15632002246377e-14 3.32750006464318e-15 -0.2 -0.0071361 1.88866003669091e-14 7.46330014498917e-15 1.11289002162006e-14 0 -2.747426e-07 1.93232003753909e-14 9.5280001851e-15 9.5280001851e-15 0.2 0.0090428 1.82748003550237e-14 1.25436002436839e-14 5.3526001039847e-15 0.4 0.0114389 1.77397003446283e-14 1.33488002593265e-14 3.95610007685496e-15 0.6 0.0122526 1.76205003423126e-14 1.32424002572595e-14 3.92240007620028e-15 0.8 0.0127972 1.74389003387847e-14 1.31358002551886e-14 3.82700007434694e-15 1 0.013213 1.71955003340561e-14 1.30315002531623e-14 3.66800007125806e-15 1.2 0.0135515 1.69819003299065e-14 1.2929100251173e-14 3.53710006871507e-15 -0.2 -0.0044362 1.89556003682495e-14 8.8017001709902e-15 9.90840019249001e-15 0 -6.582417e-07 1.9251400373996e-14 9.51180018478528e-15 9.51180018478528e-15 0.2 0.0067133 1.88894003669635e-14 1.08969002116935e-14 7.71400014985951e-15 0.4 0.0108859 1.79014003477696e-14 1.33820002599715e-14 4.15780008077338e-15 0.6 0.0118893 1.77709003452344e-14 1.33237002588389e-14 4.06160007890451e-15 0.8 0.0124744 1.7666900343214e-14 1.32214002568515e-14 4.03850007845574e-15 1 0.0129015 1.75123003402106e-14 1.31204002548894e-14 3.96400007700844e-15 1.2 0.013239 1.72785003356686e-14 1.30212002529622e-14 3.80870007399143e-15 -0.2 -0.0084624 1.65792003220833e-14 3.79760007377579e-15 1.20913002348971e-14 0 -6.735306e-10 9.55850018569252e-15 3.99570007762427e-15 3.99570007762427e-15 0.2 0.0001574768 9.26770018004316e-15 3.92350007622164e-15 3.75550007295792e-15 0.4 0.0002071191 9.14830017772358e-15 3.94560007665098e-15 3.6278000704771e-15 0.6 0.0002606826 9.01950017522139e-15 3.97910007730178e-15 3.47980006760191e-15 0.8 0.0003203877 8.93350017355067e-15 4.01620007802252e-15 3.37070006548243e-15 1 0.0003873244 8.88030017251716e-15 4.05600007879572e-15 3.29190006395158e-15 1.2 0.0004622831 8.84860017190132e-15 4.09810007961359e-15 3.23220006279179e-15 -0.2 -0.0115421 1.8302100355554e-14 4.25030008257037e-15 1.36475002651293e-14 0 -4.17378e-08 1.89891003689003e-14 9.31330018092903e-15 9.31330018092903e-15 0.2 0.009195 1.68881003280843e-14 1.24884002426115e-14 3.80690007395646e-15 0.4 0.0103582 1.6785600326093e-14 1.23966002408282e-14 3.78150007346302e-15 0.6 0.0110844 1.66017003225204e-14 1.23125002391943e-14 3.6667000712328e-15 0.8 0.011645 1.63793003181999e-14 1.22305002376013e-14 3.51130006821386e-15 1 0.012117 1.61947003146137e-14 1.21498002360336e-14 3.39270006590982e-15 1.2 0.0125333 1.60449003117035e-14 1.20700002344833e-14 3.30790006426241e-15 -0.2 -0.0091355 1.89982003690771e-14 7.00910013616545e-15 1.17057002274061e-14 0 -1.322818e-07 1.96327003814035e-14 9.69520018834818e-15 9.69520018834818e-15 0.2 0.0113529 1.83401003562922e-14 1.35299002628447e-14 4.4389000862343e-15 0.4 0.013551 1.80757003511558e-14 1.37467002670565e-14 3.92330007621776e-15 0.6 0.0144897 1.79629003489644e-14 1.36349002648845e-14 3.90100007578454e-15 0.8 0.0151251 1.77818003454462e-14 1.35268002627845e-14 3.80680007395452e-15 1 0.0156093 1.75381003407118e-14 1.34210002607291e-14 3.64810007087146e-15 1.2 0.0160025 1.73239003365506e-14 1.33170002587087e-14 3.51740006833236e-15 -0.2 -0.0057217 1.91288003716143e-14 8.89830017286685e-15 1.00012001942928e-14 0 -3.201831e-07 1.94585003780193e-14 9.62440018697275e-15 9.62440018697275e-15 0.2 0.0085905 1.90255003696075e-14 1.13470002204376e-14 7.41250014400228e-15 0.4 0.0129177 1.80812003512626e-14 1.36831002658209e-14 4.05100007869858e-15 0.6 0.0140111 1.79857003494073e-14 1.3580000263818e-14 4.036300078413e-15 0.8 0.0146956 1.78842003474355e-14 1.34756002617898e-14 4.01750007804778e-15 1 0.015196 1.77304003444476e-14 1.33737002598102e-14 3.94420007662378e-15 1.2 0.0155894 1.74969003399114e-14 1.32736002578656e-14 3.78950007361843e-15 -0.2 -0.0056945 1.64365003193111e-14 4.50720008756116e-15 1.12223002180151e-14 0 -3.35765e-08 1.36406002649953e-14 6.27090012182447e-15 6.27090012182447e-15 0.2 0.0016617 1.19802002327388e-14 6.87610013358166e-15 3.77970007342805e-15 0.4 0.0019384 1.17813002288747e-14 6.84230013292503e-15 3.61290007018763e-15 0.6 0.0021428 1.16139002256227e-14 6.82880013266277e-15 3.46330006728136e-15 0.8 0.0023241 1.14910002232351e-14 6.81900013247238e-15 3.35490006517548e-15 1 0.0024942 1.13993002214537e-14 6.80980013229366e-15 3.27690006366018e-15 1.2 0.0026578 1.13269002200471e-14 6.80060013211493e-15 3.21810006251787e-15 -0.2 -0.0062811 1.81375003523563e-14 5.8571001137856e-15 1.18613002304289e-14 0 -2.284409e-07 1.81199003520144e-14 8.84300017179253e-15 8.84300017179253e-15 0.2 0.0058773 1.66500003234587e-14 1.14031002215275e-14 4.63350009001478e-15 0.4 0.0073093 1.61210003131819e-14 1.15222002238412e-14 3.9227000762061e-15 0.6 0.0079297 1.58519003079541e-14 1.14141002217412e-14 3.73910007263932e-15 0.8 0.0083428 1.55976003030138e-14 1.13124002197654e-14 3.56980006935033e-15 1 0.0086656 1.53944002990663e-14 1.1217200217916e-14 3.44680006696082e-15 1.2 0.0089378 1.52307002958861e-14 1.11259002161423e-14 3.3601000652765e-15 -0.2 -0.0049247 1.85861003610713e-14 7.01440013626841e-15 1.12529002186095e-14 0 -6.655342e-07 1.88943003670587e-14 9.29620018059683e-15 9.29620018059683e-15 0.2 0.0061115 1.81849003532772e-14 1.17967002291739e-14 6.00360011663165e-15 0.4 0.0087004 1.75230003404185e-14 1.27412002475227e-14 4.32630008404682e-15 0.6 0.0097134 1.72618003353442e-14 1.27271002472488e-14 4.04680007861699e-15 0.8 0.0102869 1.70324003308876e-14 1.26276002453158e-14 3.89350007563884e-15 1 0.0106848 1.67696003257822e-14 1.25217002432585e-14 3.71600007219055e-15 1.2 0.0109924 1.65469003214558e-14 1.24176002412361e-14 3.57790006950769e-15 -0.2 -0.0032313 1.86168003616677e-14 7.85330015256568e-15 1.04907002038023e-14 0 -1.5599e-06 1.89312003677755e-14 9.33820018141276e-15 9.33820018141276e-15 0.2 0.004675 1.85705003607682e-14 1.11364002163463e-14 7.13150013854331e-15 0.4 0.0077938 1.79079003478959e-14 1.26986002466951e-14 4.84330009409056e-15 0.6 0.0091279 1.75934003417861e-14 1.28841002502988e-14 4.30700008367188e-15 0.8 0.0098385 1.74113003382485e-14 1.28298002492439e-14 4.15330008068596e-15 1 0.0102984 1.72223003345768e-14 1.27375002474508e-14 4.03410007837027e-15 1.2 0.0106345 1.69716003297065e-14 1.2639400245545e-14 3.86050007499775e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_core_lt.standard0000644000175000017500000001475414163340332025167 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 3.377162e-07 0. 0. -3.377162e-07 0.2 3.646881e-07 0. 0. -3.646881e-07 0.3 3.86638e-07 0. 0. -3.86638e-07 0.4 4.079611e-07 0. 0. -4.079611e-07 0.5 4.28797e-07 0. 0. -4.28797e-07 0.6 4.492469e-07 0. 0. -4.492469e-07 0.7 4.693741e-07 0. 0. -4.693741e-07 0.8 4.892215e-07 0. 0. -4.892215e-07 0.9 5.088195e-07 0. 0. -5.088195e-07 1.00000 5.281907e-07 0. 0. -5.281907e-07 1.10000 5.473526e-07 0. 0. -5.473526e-07 1.20000 5.663189e-07 0. 0. -5.663189e-07 0. 0. 0. 0. 0. 0.1 1.8014e-06 0. 0. -1.8014e-06 0.2 2.069e-06 0. 0. -2.069e-06 0.3 2.1593e-06 0. 0. -2.1593e-06 0.4 2.2431e-06 0. 0. -2.2431e-06 0.5 2.3236e-06 0. 0. -2.3236e-06 0.6 2.4014e-06 0. 0. -2.4014e-06 0.7 2.4771e-06 0. 0. -2.4771e-06 0.8 2.5509e-06 0. 0. -2.5509e-06 0.9 2.6232e-06 0. 0. -2.6232e-06 1.00000 2.6941e-06 0. 0. -2.6941e-06 1.10000 2.7638e-06 0. 0. -2.7638e-06 1.20000 2.8324e-06 0. 0. -2.8324e-06 0. 0. 0. 0. 0. 0.1 8.4562e-06 0. 0. -8.4562e-06 0.2 1.37524e-05 0. 0. -1.37524e-05 0.3 1.59393e-05 0. 0. -1.59393e-05 0.4 1.66373e-05 0. 0. -1.66373e-05 0.5 1.70757e-05 0. 0. -1.70757e-05 0.6 1.74578e-05 0. 0. -1.74578e-05 0.7 1.78129e-05 0. 0. -1.78129e-05 0.8 1.8149e-05 0. 0. -1.8149e-05 0.9 1.847e-05 0. 0. -1.847e-05 1.00000 1.87785e-05 0. 0. -1.87785e-05 1.10000 1.90761e-05 0. 0. -1.90761e-05 1.20000 1.93645e-05 0. 0. -1.93645e-05 0. 0. 0. 0. 0. 0.1 1.42571e-05 0. 0. -1.42571e-05 0.2 2.60488e-05 0. 0. -2.60488e-05 0.3 3.48793e-05 0. 0. -3.48793e-05 0.4 4.02652e-05 0. 0. -4.02652e-05 0.5 4.28359e-05 0. 0. -4.28359e-05 0.6 4.41687e-05 0. 0. -4.41687e-05 0.7 4.5113e-05 0. 0. -4.5113e-05 0.8 4.59139e-05 0. 0. -4.59139e-05 0.9 4.66418e-05 0. 0. -4.66418e-05 1.00000 4.73219e-05 0. 0. -4.73219e-05 1.10000 4.7966e-05 0. 0. -4.7966e-05 1.20000 4.85808e-05 0. 0. -4.85808e-05 0. 0. 0. 0. 0. 0.1 1.80258e-05 0. 0. -1.80258e-05 0.2 3.44312e-05 0. 0. -3.44312e-05 0.3 4.88009e-05 0. 0. -4.88009e-05 0.4 6.05927e-05 0. 0. -6.05927e-05 0.5 6.91884e-05 0. 0. -6.91884e-05 0.6 7.45336e-05 0. 0. -7.45336e-05 0.7 7.76153e-05 0. 0. -7.76153e-05 0.8 7.95835e-05 0. 0. -7.95835e-05 0.9 8.10658e-05 0. 0. -8.10658e-05 1.00000 8.23179e-05 0. 0. -8.23179e-05 1.10000 8.3442e-05 0. 0. -8.3442e-05 1.20000 8.44831e-05 0. 0. -8.44831e-05 0. 0. 0. 0. 0. 0.1 7.13584e-08 0. 0. -7.13584e-08 0.2 7.88495e-08 0. 0. -7.88495e-08 0.3 8.6116e-08 0. 0. -8.6116e-08 0.4 9.32318e-08 0. 0. -9.32318e-08 0.5 1.002553e-07 0. 0. -1.002553e-07 0.6 1.072157e-07 0. 0. -1.072157e-07 0.7 1.141298e-07 0. 0. -1.141298e-07 0.8 1.210083e-07 0. 0. -1.210083e-07 0.9 1.278581e-07 0. 0. -1.278581e-07 1.00000 1.346839e-07 0. 0. -1.346839e-07 1.10000 1.414891e-07 0. 0. -1.414891e-07 1.20000 1.482761e-07 0. 0. -1.482761e-07 0. 0. 0. 0. 0. 0.1 1.2753e-06 0. 0. -1.2753e-06 0.2 1.3771e-06 0. 0. -1.3771e-06 0.3 1.4593e-06 0. 0. -1.4593e-06 0.4 1.5369e-06 0. 0. -1.5369e-06 0.5 1.6115e-06 0. 0. -1.6115e-06 0.6 1.6837e-06 0. 0. -1.6837e-06 0.7 1.7541e-06 0. 0. -1.7541e-06 0.8 1.8229e-06 0. 0. -1.8229e-06 0.9 1.8904e-06 0. 0. -1.8904e-06 1.00000 1.9568e-06 0. 0. -1.9568e-06 1.10000 2.0221e-06 0. 0. -2.0221e-06 1.20000 2.0866e-06 0. 0. -2.0866e-06 0. 0. 0. 0. 0. 0.1 1.13009e-05 0. 0. -1.13009e-05 0.2 1.76632e-05 0. 0. -1.76632e-05 0.3 1.95584e-05 0. 0. -1.95584e-05 0.4 2.0281e-05 0. 0. -2.0281e-05 0.5 2.088e-05 0. 0. -2.088e-05 0.6 2.14263e-05 0. 0. -2.14263e-05 0.7 2.19348e-05 0. 0. -2.19348e-05 0.8 2.24136e-05 0. 0. -2.24136e-05 0.9 2.28685e-05 0. 0. -2.28685e-05 1.00000 2.33035e-05 0. 0. -2.33035e-05 1.10000 2.37217e-05 0. 0. -2.37217e-05 1.20000 2.41257e-05 0. 0. -2.41257e-05 0. 0. 0. 0. 0. 0.1 2.02165e-05 0. 0. -2.02165e-05 0.2 3.66611e-05 0. 0. -3.66611e-05 0.3 4.85087e-05 0. 0. -4.85087e-05 0.4 5.48078e-05 0. 0. -5.48078e-05 0.5 5.73731e-05 0. 0. -5.73731e-05 0.6 5.89419e-05 0. 0. -5.89419e-05 0.7 6.02476e-05 0. 0. -6.02476e-05 0.8 6.14263e-05 0. 0. -6.14263e-05 0.9 6.25172e-05 0. 0. -6.25172e-05 1.00000 6.35391e-05 0. 0. -6.35391e-05 1.10000 6.45044e-05 0. 0. -6.45044e-05 1.20000 6.5422e-05 0. 0. -6.5422e-05 0. 0. 0. 0. 0. 0.1 2.57813e-05 0. 0. -2.57813e-05 0.2 4.91621e-05 0. 0. -4.91621e-05 0.3 6.94672e-05 0. 0. -6.94672e-05 0.4 8.58334e-05 0. 0. -8.58334e-05 0.5 9.7017e-05 0. 0. -9.7017e-05 0.6 0.0001030401 0. 0. -0.0001030401 0.7 0.0001063517 0. 0. -0.0001063517 0.8 0.0001087132 0. 0. -0.0001087132 0.9 0.0001107052 0. 0. -0.0001107052 1.00000 0.0001125011 0. 0. -0.0001125011 1.10000 0.0001141638 0. 0. -0.0001141638 1.20000 0.0001157232 0. 0. -0.0001157232 0. 0. 0. 0. 0. 0.1 1.0149e-06 0. 0. -1.0149e-06 0.2 1.2305e-06 0. 0. -1.2305e-06 0.3 1.2937e-06 0. 0. -1.2937e-06 0.4 1.3389e-06 0. 0. -1.3389e-06 0.5 1.3806e-06 0. 0. -1.3806e-06 0.6 1.421e-06 0. 0. -1.421e-06 0.7 1.4605e-06 0. 0. -1.4605e-06 0.8 1.4992e-06 0. 0. -1.4992e-06 0.9 1.5373e-06 0. 0. -1.5373e-06 1.00000 1.5748e-06 0. 0. -1.5748e-06 1.10000 1.6118e-06 0. 0. -1.6118e-06 1.20000 1.6482e-06 0. 0. -1.6482e-06 0. 0. 0. 0. 0. 0.1 2.3138e-06 0. 0. -2.3138e-06 0.2 3.1357e-06 0. 0. -3.1357e-06 0.3 3.3793e-06 0. 0. -3.3793e-06 0.4 3.5003e-06 0. 0. -3.5003e-06 0.5 3.5947e-06 0. 0. -3.5947e-06 0.6 3.6807e-06 0. 0. -3.6807e-06 0.7 3.7626e-06 0. 0. -3.7626e-06 0.8 3.8417e-06 0. 0. -3.8417e-06 0.9 3.9187e-06 0. 0. -3.9187e-06 1.00000 3.9939e-06 0. 0. -3.9939e-06 1.10000 4.0676e-06 0. 0. -4.0676e-06 1.20000 4.14e-06 0. 0. -4.14e-06 0. 0. 0. 0. 0. 0.1 6.3577e-06 0. 0. -6.3577e-06 0.2 1.05863e-05 0. 0. -1.05863e-05 0.3 1.28971e-05 0. 0. -1.28971e-05 0.4 1.40572e-05 0. 0. -1.40572e-05 0.5 1.46931e-05 0. 0. -1.46931e-05 0.6 1.51111e-05 0. 0. -1.51111e-05 0.7 1.5434e-05 0. 0. -1.5434e-05 0.8 1.57098e-05 0. 0. -1.57098e-05 0.9 1.59589e-05 0. 0. -1.59589e-05 1.00000 1.61909e-05 0. 0. -1.61909e-05 1.10000 1.64108e-05 0. 0. -1.64108e-05 1.20000 1.66213e-05 0. 0. -1.66213e-05 0. 0. 0. 0. 0. 0.1 9.8566e-06 0. 0. -9.8566e-06 0.2 1.79404e-05 0. 0. -1.79404e-05 0.3 2.3916e-05 0. 0. -2.3916e-05 0.4 2.79381e-05 0. 0. -2.79381e-05 0.5 3.05169e-05 0. 0. -3.05169e-05 0.6 3.2188e-05 0. 0. -3.2188e-05 0.7 3.33347e-05 0. 0. -3.33347e-05 0.8 3.41846e-05 0. 0. -3.41846e-05 0.9 3.48626e-05 0. 0. -3.48626e-05 1.00000 3.54361e-05 0. 0. -3.54361e-05 1.10000 3.59421e-05 0. 0. -3.59421e-05 1.20000 3.64018e-05 0. 0. -3.64018e-05 0. 0. 0. 0. 0. 0.1 1.22525e-05 0. 0. -1.22525e-05 0.2 2.3266e-05 0. 0. -2.3266e-05 0.3 3.26075e-05 0. 0. -3.26075e-05 0.4 4.00471e-05 0. 0. -4.00471e-05 0.5 4.56622e-05 0. 0. -4.56622e-05 0.6 4.97632e-05 0. 0. -4.97632e-05 0.7 5.27373e-05 0. 0. -5.27373e-05 0.8 5.49303e-05 0. 0. -5.49303e-05 0.9 5.66009e-05 0. 0. -5.66009e-05 1.00000 5.79256e-05 0. 0. -5.79256e-05 1.10000 5.90186e-05 0. 0. -5.90186e-05 1.20000 5.9953e-05 0. 0. -5.9953e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_gidl_lt.standard0000644000175000017500000001643614163340332025204 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -5.55044e-05 6.7326001307939e-15 2.00050003886362e-15 4.50010008742323e-15 0 0. 6.43970012510374e-15 3.08870006000403e-15 3.08870006000403e-15 0.2 2.71461e-05 4.56290008864324e-15 3.81710007415462e-15 3.23603106286622e-16 0.4 2.90058e-05 4.46080008665975e-15 3.75690007298511e-15 2.79909205437783e-16 0.6 3.05591e-05 4.3984000854475e-15 3.70380007195354e-15 2.72538705294596e-16 0.8 3.19872e-05 4.33860008428577e-15 3.652400070955e-15 2.66051905168577e-16 1 3.33292e-05 4.28110008316872e-15 3.60200006997588e-15 2.60722605065045e-16 1.2 3.46072e-05 4.22520008208276e-15 3.55250006901425e-15 2.56228104977731e-16 -0.2 -4.48424e-05 7.53930014646562e-15 3.29300006397295e-15 4.10020007965439e-15 0 0. 7.65330014868029e-15 3.75280007290546e-15 3.75280007290546e-15 0.2 5.47176e-05 6.93470013472008e-15 4.43220008610414e-15 2.30170004471501e-15 0.4 8.33761e-05 5.643500109636e-15 4.90920009537079e-15 4.42731208600918e-16 0.6 8.7727e-05 5.4978001068055e-15 4.84960009421294e-15 3.51673206831938e-16 0.8 9.06551e-05 5.43430010557188e-15 4.80070009326297e-15 3.38414606574364e-16 1 9.31805e-05 5.37830010448397e-15 4.75500009237516e-15 3.29883406408629e-16 1.2 9.54495e-05 5.32530010345435e-15 4.71050009151066e-15 3.23185806278515e-16 -0.2 -2.82899e-05 7.58110014727766e-15 3.6592000710871e-15 3.79870007379716e-15 0 0. 7.72140015000327e-15 3.79860007379522e-15 3.79860007379522e-15 0.2 4.17499e-05 7.55180014670846e-15 4.03880007846157e-15 3.37500006556596e-15 0.4 9.49616e-05 6.64410012907461e-15 4.78710009299876e-15 1.66440003233422e-15 0.6 0.0001206758 5.80810011283368e-15 5.02010009752524e-15 5.49077510666902e-16 0.8 0.0001270932 5.63990010956606e-15 4.97160009658303e-15 4.23655708230339e-16 1 0.0001308889 5.56900010818869e-15 4.92530009568357e-15 3.99605607763119e-16 1.2 0.0001339884 5.51370010711438e-15 4.88310009486375e-15 3.87707907531983e-16 -0.2 -1.4979e-05 7.45460014482015e-15 3.79000007362815e-15 3.55220006900842e-15 0 0. 7.59170014748359e-15 3.73900007263737e-15 3.73900007263737e-15 0.2 2.56861e-05 7.55320014673565e-15 3.74740007280056e-15 3.68630007161357e-15 0.4 6.56938e-05 7.22770014041218e-15 4.20940008177581e-15 2.88010005595156e-15 0.6 0.0001147294 6.33850012313773e-15 4.77890009283946e-15 1.37920002679365e-15 0.8 0.0001379753 5.73850011148156e-15 4.89550009510464e-15 6.36742612369968e-16 1 0.0001457683 5.56160010804494e-15 4.85580009433339e-15 4.94391809604526e-16 1.2 0.000150123 5.48230010650438e-15 4.81300009350192e-15 4.57853908894706e-16 -0.2 -8.62171e-05 6.61610012853066e-15 1.50630002926282e-15 4.86320009447715e-15 0 0. 6.26120012163603e-15 2.98850005805745e-15 2.98850005805745e-15 0.2 2.70544e-05 4.36500008479864e-15 3.65750007105408e-15 2.6940560523373e-16 0.4 2.95109e-05 4.30450008362331e-15 3.59870006991177e-15 2.69499505235554e-16 0.6 3.16809e-05 4.24220008241302e-15 3.54550006887826e-15 2.62359405096843e-16 0.8 3.36888e-05 4.18200008124351e-15 3.49360006787e-15 2.56004704973391e-16 1 3.559e-05 4.12410008011869e-15 3.44260006687922e-15 2.50842304873101e-16 1.2 3.74144e-05 4.06780007902495e-15 3.39250006590593e-15 2.46530404789334e-16 -0.2 -6.85228e-05 7.70240014963415e-15 3.2971000640526e-15 4.26750008290452e-15 0 0. 7.87690015302415e-15 3.8700000751823e-15 3.8700000751823e-15 0.2 8.54739e-05 6.92450013452193e-15 4.748300092245e-15 1.97030003827692e-15 0.4 0.0001160003 5.78220011233052e-15 5.14890010002743e-15 3.52766406853176e-16 0.6 0.0001219223 5.7147001110192e-15 5.09700009901917e-15 3.38054406567366e-16 0.8 0.0001266249 5.65600010987884e-15 5.04950009809639e-15 3.28624306384168e-16 1 0.0001306601 5.59990010878899e-15 5.00310009719498e-15 3.20625906228784e-16 1.2 0.0001342417 5.54620010774576e-15 4.95760009631106e-15 3.14153306103041e-16 -0.2 -4.1577e-05 7.71620014990224e-15 3.69220007172819e-15 3.90870007593413e-15 0 0. 7.8852001531854e-15 3.88480007546982e-15 3.88480007546982e-15 0.2 6.33752e-05 7.71220014982454e-15 4.19240008144555e-15 3.38970006585154e-15 0.4 0.0001453367 6.52050012667344e-15 5.11570009938246e-15 1.20840002347553e-15 0.6 0.0001707928 5.92180011504252e-15 5.26820010234507e-15 4.2972980834834e-16 0.8 0.0001783358 5.84700011358939e-15 5.22240010145531e-15 4.0086630778761e-16 1 0.0001840284 5.79050011249176e-15 5.17910010061413e-15 3.89006707557214e-16 1.2 0.0001888661 5.73740011146019e-15 5.13690009979431e-15 3.79346007369536e-16 -0.2 -2.09413e-05 7.55880014684444e-15 3.81960007420318e-15 3.63380007059366e-15 0 0. 7.71200014982065e-15 3.80290007387875e-15 3.80290007387875e-15 0.2 3.74684e-05 7.68210014923979e-15 3.85100007481319e-15 3.71900007224883e-15 0.4 9.82562e-05 7.32460014229465e-15 4.3450000844101e-15 2.84750005531824e-15 0.6 0.0001724277 6.18120012008187e-15 5.04230009795652e-15 9.6125271867421e-16 0.8 0.0001951982 5.78360011235772e-15 5.09530009898615e-15 4.98194409678399e-16 1 0.000203425 5.70410011081328e-15 5.05550009821295e-15 4.58371808904767e-16 1.2 0.0002093288 5.64990010976033e-15 5.01690009746307e-15 4.43640208618577e-16 -0.2 -3.24125e-05 6.74310013099788e-15 2.1815000423799e-15 4.33790008427217e-15 0 0. 6.56090012745829e-15 3.15910006137168e-15 3.15910006137168e-15 0.2 2.37326e-05 5.19990010101821e-15 3.99190007755045e-15 8.4374331639136e-16 0.4 2.80562e-05 4.68080009093368e-15 3.92750007629935e-15 3.46451806730502e-16 0.6 2.93485e-05 4.5579000885461e-15 3.84590007471411e-15 3.01062005848717e-16 0.8 3.03376e-05 4.48360008710268e-15 3.78530007353684e-15 2.87694205589021e-16 1 3.12286e-05 4.4211000858885e-15 3.7318000724975e-15 2.80165505442762e-16 1.2 3.20617e-05 4.3635000847695e-15 3.68130007151644e-15 2.7463290533528e-16 -0.2 -2.73412e-05 7.28680014156031e-15 3.08190005987192e-15 4.04530007858785e-15 0 0. 7.37940014335925e-15 3.60920007011575e-15 3.60920007011575e-15 0.2 3.19862e-05 6.85280013312901e-15 4.30180008357086e-15 2.35090004567082e-15 0.4 5.30557e-05 5.93280011525622e-15 4.76570009258302e-15 8.99680917478058e-16 0.6 6.0201e-05 5.49370010672585e-15 4.69850009127753e-15 4.98316709680774e-16 0.8 6.31854e-05 5.3123001032018e-15 4.60690008949802e-15 3.99991907770623e-16 1 6.5091e-05 5.2102001012183e-15 4.5368000881362e-15 3.65830607106973e-16 1.2 6.66015e-05 5.13620009978071e-15 4.47930008701915e-15 3.49358806786977e-16 -0.2 -1.84061e-05 7.36280014303676e-15 3.48520006770681e-15 3.74200007269565e-15 0 0. 7.48740014545736e-15 3.67530007139988e-15 3.67530007139988e-15 0.2 2.57471e-05 7.30100014183618e-15 3.98690007745331e-15 3.1636000614591e-15 0.4 5.43357e-05 6.68730012991386e-15 4.6736000907938e-15 1.82570003546779e-15 0.6 7.26697e-05 6.0747001180129e-15 4.87500009470639e-15 9.75188218944934e-16 0.8 8.15347e-05 5.71530011103086e-15 4.83230009387686e-15 6.38780812409564e-16 1 8.61855e-05 5.51630010716489e-15 4.75470009236933e-15 5.086027098806e-16 1.2 8.91482e-05 5.39330010477538e-15 4.68550009102498e-15 4.51157208764609e-16 -0.2 -1.05555e-05 7.28130014145346e-15 3.66970007129108e-15 3.48810006776315e-15 0 0. 7.40630014388183e-15 3.6407000707277e-15 3.6407000707277e-15 0.2 1.69167e-05 7.34340014265988e-15 3.68950007167574e-15 3.52270006843532e-15 0.4 4.1397e-05 7.00240013603529e-15 4.28470008323866e-15 2.56830004989424e-15 0.6 6.5331e-05 6.47890012586528e-15 4.6832000909803e-15 1.62000003147166e-15 0.8 8.15975e-05 6.02770011709984e-15 4.78890009303373e-15 1.0411000202254e-15 1 9.11554e-05 5.72560011123095e-15 4.76020009247618e-15 7.53927014646503e-16 1.2 9.69272e-05 5.52940010741939e-15 4.69880009128336e-15 6.11625711882023e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvgb_ig_st.standard0000644000175000017500000000650314163340332025003 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 9.89783e-08 1.4977e-12 -4.676552e-13 -9.89793e-08 0.35 1.7279e-06 2.48787e-11 -4.510561e-13 -1.728e-06 0.45 9.5775e-06 1.808632e-10 -3.695496e-13 -9.5777e-06 0.55 2.15883e-05 5.878216e-10 -2.875176e-13 -2.15888e-05 0.65 3.38796e-05 1.3265e-09 -2.355649e-13 -3.38809e-05 0.75 4.51212e-05 2.509e-09 -2.040723e-13 -4.51237e-05 0.85 5.49307e-05 4.2888e-09 -1.844796e-13 -5.4935e-05 0.95 6.32549e-05 6.8668e-09 -1.722767e-13 -6.32617e-05 1.05000 7.01727e-05 1.05021e-08 -1.65995e-13 -7.01832e-05 1.15000 7.5818e-05 1.55271e-08 -1.682715e-13 -7.58336e-05 0.25 3.526445e-07 1.3722e-12 -4.628886e-13 -3.526454e-07 0.35 4.9878e-06 1.57995e-11 -4.436985e-13 -4.9878e-06 0.45 2.58071e-05 6.24973e-11 -3.791352e-13 -2.58072e-05 0.55 6.56242e-05 1.273851e-10 -3.12281e-13 -6.56243e-05 0.65 0.0001181211 2.117487e-10 -2.623515e-13 -0.0001181213 0.75 0.000177421 3.205727e-10 -2.284755e-13 -0.0001774213 0.85 0.0002398209 4.57286e-10 -2.058782e-13 -0.0002398213 0.95 0.0003030587 6.257513e-10 -1.90764e-13 -0.0003030594 1.05000 0.0003656928 8.310372e-10 -1.808753e-13 -0.0003656936 1.15000 0.0004267818 1.0796e-09 -1.754963e-13 -0.0004267829 0.25 8.68e-09 2.002668e-13 -1.611661e-13 -8.68e-09 0.35 5.626521e-07 3.6154e-12 -1.619903e-13 -5.626556e-07 0.45 8.5249e-06 5.83751e-11 -1.385251e-13 -8.525e-06 0.55 2.47725e-05 2.425655e-10 -1.055713e-13 -2.47727e-05 0.65 4.15444e-05 5.907488e-10 -8.49088e-14 -4.15449e-05 0.75 5.66553e-05 1.1546e-09 -7.28072e-14 -5.66564e-05 0.85 6.9668e-05 2.0087e-09 -6.54243e-14 -6.967e-05 0.95 8.05968e-05 3.2516e-09 -6.07831e-14 -8.06e-05 1.05000 8.96062e-05 5.0106e-09 -5.80753e-14 -8.96112e-05 1.15000 9.69112e-05 7.4493e-09 -5.81478e-14 -9.69187e-05 0.25 4.30089e-08 2.253588e-13 -1.597473e-13 -4.3009e-08 0.35 2.1114e-06 4.4462e-12 -1.589893e-13 -2.1114e-06 0.45 2.24844e-05 3.34914e-11 -1.373737e-13 -2.24844e-05 0.55 6.94151e-05 7.5348e-11 -1.112391e-13 -6.94151e-05 0.65 0.000132473 1.267165e-10 -9.21646e-14 -0.0001324731 0.75 0.0002034217 1.903809e-10 -7.97282e-14 -0.0002034219 0.85 0.0002778127 2.67988e-10 -7.16682e-14 -0.000277813 0.95 0.0003530505 3.617024e-10 -6.63541e-14 -0.0003530509 1.05000 0.0004274712 4.745077e-10 -6.28432e-14 -0.0004274717 1.15000 0.0004999833 6.101721e-10 -6.07786e-14 -0.0004999839 0.25 8.880308e-07 2.91415e-11 -1.5723e-12 -8.880584e-07 0.35 4.3756e-06 2.002339e-10 -1.3742e-12 -4.3758e-06 0.45 1.12767e-05 7.392004e-10 -1.0936e-12 -1.12774e-05 0.55 1.96495e-05 1.8421e-09 -8.803462e-13 -1.96513e-05 0.65 2.80305e-05 3.7196e-09 -7.438251e-13 -2.80343e-05 0.75 3.57698e-05 6.6476e-09 -6.578376e-13 -3.57764e-05 0.85 4.2613e-05 1.09873e-08 -6.03597e-13 -4.2624e-05 0.95 4.84921e-05 1.72062e-08 -5.716189e-13 -4.85093e-05 1.05000 5.34308e-05 2.59049e-08 -5.60367e-13 -5.34567e-05 1.15000 5.74986e-05 3.78509e-08 -5.77658e-13 -5.75364e-05 0.25 2.5748e-06 1.14087e-11 -1.5593e-12 -2.5748e-06 0.35 1.22242e-05 5.28202e-11 -1.4047e-12 -1.22242e-05 0.45 3.45342e-05 1.334454e-10 -1.1893e-12 -3.45343e-05 0.55 6.8917e-05 2.490334e-10 -9.986927e-13 -6.89173e-05 0.65 0.0001117419 4.066707e-10 -8.561391e-13 -0.0001117423 0.75 0.0001594333 6.15534e-10 -7.56084e-13 -0.0001594339 0.85 0.0002093692 8.846208e-10 -6.873117e-13 -0.0002093701 0.95 0.0002597754 1.2241e-09 -6.408272e-13 -0.0002597766 1.05000 0.0003094665 1.6466e-09 -6.113707e-13 -0.0003094682 1.15000 0.0003576533 2.1677e-09 -5.977808e-13 -0.0003576555 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvgb_gidl_sw.standard0000644000175000017500000000660514163340332025360 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -1.03766e-08 8.22620015980999e-15 3.04120005908125e-15 3.04120005908125e-15 -0.8 -3.7707e-09 7.98730015516889e-15 3.14060006101228e-15 3.14060006101228e-15 -0.4 -1.0649e-09 8.07690015690955e-15 3.31170006433624e-15 3.31170006433624e-15 1.11022302462516e-16 -2.106518e-10 8.48750016488625e-15 3.60170006997005e-15 3.60170006997005e-15 0.4 -2.46313e-11 1.32395002572031e-14 6.23080012104545e-15 6.23080012104545e-15 0.8 -1.2656e-12 1.91342003717192e-14 9.44130018341568e-15 9.44130018341568e-15 1.2 -1.61844e-14 1.89901003689198e-14 9.39190018245599e-15 9.39190018245599e-15 -1.2 -6.39e-08 7.99050015523106e-15 2.93730005706279e-15 2.99780005823812e-15 -0.8 -3.39989e-08 7.72580015008874e-15 3.00590005839547e-15 3.07550005974759e-15 -0.4 -1.60092e-08 7.71480014987505e-15 3.15210006123569e-15 3.15790006134837e-15 1.11022302462516e-16 4.42762e-08 7.92300015391974e-15 3.42080006645572e-15 3.25890006331049e-15 0.4 0.0030722 1.15155002237111e-14 7.30020014182063e-15 3.33760006483939e-15 0.8 0.012693 1.69790003298502e-14 1.29018002506426e-14 3.63010007052178e-15 1.2 0.0120455 1.737020033745e-14 1.29792002521463e-14 4.01260007795259e-15 -1.2 -1.03512e-08 8.14960015832188e-15 3.04280005911233e-15 3.04280005911233e-15 -0.8 -3.7593e-09 7.94710015438793e-15 3.14200006103948e-15 3.14200006103948e-15 -0.4 -1.0608e-09 8.05190015642387e-15 3.31310006436343e-15 3.31310006436343e-15 1.11022302462516e-16 -2.096049e-10 8.47020016455017e-15 3.60300006999531e-15 3.60300006999531e-15 0.4 -2.44662e-11 1.16854002270117e-14 5.39470010480258e-15 5.39470010480258e-15 0.8 -1.2536e-12 1.94513003778795e-14 9.61030018669883e-15 9.61030018669883e-15 1.2 -1.59515e-14 1.91569003721602e-14 9.48220018421024e-15 9.48220018421024e-15 -1.2 -6.38002e-08 7.91830015382843e-15 2.93740005706473e-15 3.00150005831e-15 -0.8 -3.39359e-08 7.68730014934081e-15 3.0062000584013e-15 3.07800005979616e-15 -0.4 -1.59739e-08 7.69040014940103e-15 3.15270006124735e-15 3.15990006138722e-15 1.11022302462516e-16 -5.9603e-09 7.90590015358754e-15 3.42130006646543e-15 3.26070006334546e-15 0.4 0.0024703 1.08168002101375e-14 6.55290012730287e-15 3.3451000649851e-15 0.8 0.0150068 1.73435003369313e-14 1.33121002586135e-14 3.60600007005359e-15 1.2 0.0141764 1.75495003409333e-14 1.31923002562862e-14 3.99000007751354e-15 -1.2 -1.04174e-08 8.36800016256473e-15 3.03830005902491e-15 3.03830005902491e-15 -0.8 -3.789e-09 8.05790015654043e-15 3.13840006096955e-15 3.13840006096955e-15 -0.4 -1.0714e-09 8.11970015774102e-15 3.30940006429155e-15 3.30940006429155e-15 1.11022302462516e-16 -2.123333e-10 8.52220016556037e-15 3.60250006998559e-15 3.60250006998559e-15 0.4 -2.48969e-11 1.47675002868875e-14 7.05650013708628e-15 7.05650013708628e-15 0.8 -1.285e-12 1.87008003632995e-14 9.21060017893388e-15 9.21060017893388e-15 1.2 -1.6563e-14 1.87218003637075e-14 9.24740017964879e-15 9.24740017964879e-15 -1.2 -6.40597e-08 8.12400015782456e-15 2.93670005705113e-15 2.99160005811767e-15 -0.8 -3.40993e-08 7.79360015140589e-15 3.00540005838576e-15 3.07140005966794e-15 -0.4 -1.5276e-08 7.75660015068709e-15 3.15110006121627e-15 3.15460006128426e-15 1.11022302462516e-16 3.5098e-06 7.95720015458414e-15 3.42570006655091e-15 3.25590006325221e-15 0.4 0.0038656 1.23303002395401e-14 8.16280015857832e-15 3.34000006488602e-15 0.8 0.0102815 1.65353003212305e-14 1.23792002404901e-14 3.68210007153198e-15 1.2 0.0095552 1.71473003331198e-14 1.26468002456888e-14 4.10660007977872e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_ig_lw.standard0000644000175000017500000000643214163340332024636 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.57902e-05 2.5567e-09 -3.96868e-11 -1.57927e-05 0.35 3.99686e-05 1.03463e-08 -2.86206e-11 -3.99789e-05 0.45 6.69545e-05 2.64465e-08 -2.23984e-11 -6.69809e-05 0.55 9.29783e-05 5.40895e-08 -1.92896e-11 -9.30324e-05 0.65 0.0001164742 9.75246e-08 -1.7711e-11 -0.0001165717 0.75 0.0001368099 1.622778e-07 -1.69338e-11 -0.0001369722 0.85 0.0001538372 2.554737e-07 -1.6627e-11 -0.0001540927 0.95 0.0001676777 3.862457e-07 -1.66715e-11 -0.0001680639 1.05000 0.0001785972 5.662482e-07 -1.71954e-11 -0.0001791635 1.15000 0.0001869262 8.10296e-07 -1.89214e-11 -0.0001877365 0.25 3.30605e-05 1.1891e-09 -4.64049e-11 -3.30616e-05 0.35 0.0001050788 3.7755e-09 -3.96655e-11 -0.0001050826 0.45 0.0002252079 7.8162e-09 -3.36618e-11 -0.0002252157 0.55 0.0003895878 1.31649e-08 -2.95075e-11 -0.000389601 0.65 0.0005909912 1.97782e-08 -2.67776e-11 -0.000591011 0.75 0.000821356 2.76665e-08 -2.50222e-11 -0.0008213836 0.85 0.001073 3.68686e-08 -2.39253e-11 -0.0010731 0.95 0.0013392 4.74707e-08 -2.32774e-11 -0.0013392 1.05000 0.0016137 5.96633e-08 -2.29404e-11 -0.0016138 1.15000 0.0018912 7.38349e-08 -2.28242e-11 -0.0018913 0.25 1.01768e-05 5.467083e-10 -1.73838e-11 -1.01773e-05 0.35 4.4512e-05 3.5395e-09 -1.2034e-11 -4.45156e-05 0.45 8.66958e-05 1.05542e-08 -8.7596e-12 -8.67064e-05 0.55 0.0001273145 2.30163e-08 -7.2392e-12 -0.0001273375 0.65 0.0001635035 4.29199e-08 -6.4982e-12 -0.0001635464 0.75 0.0001943469 7.28947e-08 -6.1317e-12 -0.0001944197 0.85 0.0002197634 1.163457e-07 -5.9672e-12 -0.0002198797 0.95 0.0002400893 1.776481e-07 -5.9293e-12 -0.0002402669 1.05000 0.0002558599 2.623952e-07 -6.0217e-12 -0.0002561223 1.15000 0.0002676816 3.77708e-07 -6.4943e-12 -0.0002680593 0.25 1.97595e-05 3.427294e-10 -1.82971e-11 -1.97598e-05 0.35 0.0001024342 1.6161e-09 -1.52778e-11 -0.0001024358 0.45 0.000262581 3.8133e-09 -1.24632e-11 -0.0002625848 0.55 0.0004918648 6.8415e-09 -1.05992e-11 -0.0004918716 0.65 0.0007758631 1.06859e-08 -9.4276e-12 -0.0007758738 0.75 0.0011002 1.53405e-08 -8.7043e-12 -0.0011003 0.85 0.0014529 2.07865e-08 -8.2694e-12 -0.0014529 0.95 0.001824 2.70006e-08 -8.0236e-12 -0.001824 1.05000 0.0022059 3.39724e-08 -7.9052e-12 -0.002206 1.15000 0.0025924 4.17302e-08 -7.8757e-12 -0.0025924 0.25 2.1391e-05 1.37877e-08 -8.88224e-11 -2.14047e-05 0.35 3.67776e-05 3.86397e-08 -7.23224e-11 -3.68161e-05 0.45 5.2802e-05 8.41285e-08 -6.26161e-11 -5.28861e-05 0.55 6.8189e-05 1.583808e-07 -5.73675e-11 -6.83473e-05 0.65 8.22402e-05 2.718364e-07 -5.47013e-11 -8.25119e-05 0.75 9.46036e-05 4.37928e-07 -5.36227e-11 -9.50415e-05 0.85 0.0001051472 6.738784e-07 -5.37051e-11 -0.000105821 0.95 0.0001138779 1.0017e-06 -5.50157e-11 -0.0001148795 1.05000 0.0001208868 1.4493e-06 -5.83523e-11 -0.0001223361 1.15000 0.0001263092 2.0522e-06 -6.57518e-11 -0.0001283614 0.25 5.69913e-05 4.3278e-09 -1.255091e-10 -5.69955e-05 0.35 0.0001208392 1.0218e-08 -1.124641e-10 -0.0001208493 0.45 0.0002119703 1.88048e-08 -1.00269e-10 -0.000211989 0.55 0.0003281924 3.02183e-08 -9.10615e-11 -0.0003282225 0.65 0.0004656566 4.48491e-08 -8.44851e-11 -0.0004657014 0.75 0.0006196538 6.33483e-08 -7.9904e-11 -0.0006197171 0.85 0.0007851589 8.66327e-08 -7.67981e-11 -0.0007852454 0.95 0.0009571889 1.159286e-07 -7.47999e-11 -0.0009573048 1.05000 0.001131 1.528502e-07 -7.36811e-11 -0.0011312 1.15000 0.0013024 1.995012e-07 -7.33601e-11 -0.0013026 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_gidl_st.standard0000644000175000017500000001653014163340332025206 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0003997359 8.42107516359582e-16 1.98965203865287e-16 6.09900711848512e-16 0 0. 6.20575212055884e-16 2.80395405447228e-16 2.80395405447228e-16 0.2 5.36347e-05 5.52959010742308e-16 2.95160905734077e-16 1.9048640370057e-16 0.4 6.42727e-05 5.47663110639425e-16 2.97021305770218e-16 1.83905103572716e-16 0.6 7.39548e-05 5.41739010524337e-16 2.9919620581247e-16 1.76365103426236e-16 0.8 8.34369e-05 5.37823510448271e-16 3.01356805854444e-16 1.70824203318593e-16 1 9.29534e-05 5.35412810401439e-16 3.0345520589521e-16 1.66825303240907e-16 1.2 0.0001026004 5.33928510372603e-16 3.0547920593453e-16 1.63802103182175e-16 -0.2 -0.0004702468 9.35429518172544e-16 2.76508405371715e-16 6.39386712421335e-16 0 0. 9.57020418591989e-16 4.69372109118469e-16 4.69372109118469e-16 0.2 0.0004230113 8.55644116622557e-16 6.24515612132434e-16 2.02298203930037e-16 0.4 0.0004826198 8.46214416439366e-16 6.22163612086742e-16 1.9406750377014e-16 0.6 0.0005156198 8.3632421624723e-16 6.17388111993969e-16 1.88147003655123e-16 0.8 0.0005403508 8.24553016018551e-16 6.12751511903894e-16 1.80214303501015e-16 1 0.0005607266 8.14733915827796e-16 6.0820091181549e-16 1.74157603383351e-16 1.2 0.0005783954 8.06704415671807e-16 6.03724511728527e-16 1.69827603299233e-16 -0.2 -0.0003494232 9.67923918803811e-16 3.97824507728517e-16 5.55844510798364e-16 0 0. 9.88294919199557e-16 4.87635709473275e-16 4.87635709473275e-16 0.2 0.0004560441 9.40090218263087e-16 6.28474512209344e-16 2.93766005706978e-16 0.4 0.0005951395 9.0707851762177e-16 6.837717132836e-16 2.02337303930797e-16 0.6 0.0006385584 9.0082171750022e-16 6.78444013180099e-16 2.00316003891529e-16 0.8 0.0006672403 8.91523217319578e-16 6.72979113073933e-16 1.95432303796654e-16 1 0.0006890417 8.79085317077948e-16 6.67627812969973e-16 1.87311503638891e-16 1.2 0.0007067326 8.68165816865815e-16 6.62372712867882e-16 1.80629203509075e-16 -0.2 -0.0002148711 9.68851718821835e-16 4.56231508863187e-16 5.00434309721913e-16 0 0. 9.83208419100742e-16 4.85943209440395e-16 4.85943209440395e-16 0.2 0.0003274955 9.67814418801684e-16 5.44963710586983e-16 4.0928500795116e-16 0.4 0.000558564 9.14181817759766e-16 6.8214561325201e-16 2.14309004163371e-16 0.6 0.0006131566 9.06774517615864e-16 6.80279813215763e-16 2.0750810403125e-16 0.8 0.0006439429 9.01419817511839e-16 6.75099113115118e-16 2.06236904006554e-16 1 0.0006662862 8.93533017358622e-16 6.69950313015092e-16 2.02424503932491e-16 1.2 0.0006839104 8.81604417126886e-16 6.6489331291685e-16 1.94495203778449e-16 -0.2 -0.0004715559 8.60329816713586e-16 1.93899103766868e-16 6.35132412338686e-16 0 0. 5.20271110107282e-16 2.25088504372783e-16 2.25088504372783e-16 0.2 1.91946e-05 4.90137209521872e-16 2.26212604394621e-16 1.91056403711643e-16 0.4 2.47812e-05 4.85438809430596e-16 2.28833004445528e-16 1.8448650358401e-16 0.6 3.06044e-05 4.80278109330339e-16 2.31998804507029e-16 1.76916403436946e-16 0.8 3.69005e-05 4.77287609272243e-16 2.3533030457175e-16 1.71342203328657e-16 1 4.37577e-05 4.7595270924631e-16 2.38759404638367e-16 1.67312703250376e-16 1.2 5.12228e-05 4.75681309241038e-16 2.42258904706352e-16 1.64260203191075e-16 -0.2 -0.0005927724 9.38575218233655e-16 2.27953904428449e-16 6.91396913431734e-16 0 0. 9.79323919025278e-16 4.81353209351225e-16 4.81353209351225e-16 0.2 0.0005056011 8.74744316993615e-16 6.53116012688053e-16 1.94536003779241e-16 0.4 0.0005701421 8.69052416883039e-16 6.4817531259207e-16 1.92938003748197e-16 0.6 0.0006091188 8.59372716694992e-16 6.43513312501502e-16 1.87078203634359e-16 0.8 0.0006386196 8.47737416468953e-16 6.3896491241314e-16 1.79151803480373e-16 1 0.0006630875 8.3803831628053e-16 6.34488912326185e-16 1.73097203362751e-16 1.2 0.0006844104 8.30125016126798e-16 6.30076912240473e-16 1.68774203278768e-16 -0.2 -0.0004487173 9.75430618949643e-16 3.8297570744005e-16 5.78837211245042e-16 0 0. 1.00370001949883e-15 4.9591310963408e-16 4.9591310963408e-16 0.2 0.0005791673 9.41795418296214e-16 6.81680113242966e-16 2.42465804710371e-16 0.4 0.0007058944 9.23563117942016e-16 7.03547113667776e-16 2.00325703891718e-16 0.6 0.0007557826 9.17778217829633e-16 6.97824413556601e-16 1.99165003869169e-16 0.8 0.0007893158 9.08519417649763e-16 6.9228411344897e-16 1.94357703775778e-16 1 0.0008147552 8.96069317407895e-16 6.86858913343575e-16 1.86258103618427e-16 1.2 0.0008353409 8.85120617195195e-16 6.81528213240015e-16 1.79581203488715e-16 -0.2 -0.0002782253 9.77763518994964e-16 4.6148000896515e-16 5.04872109808126e-16 0 0. 9.93641419303423e-16 4.91579509549891e-16 4.91579509549891e-16 0.2 0.0004200096 9.76273918966026e-16 5.62291410923608e-16 4.01094007792034e-16 0.4 0.0006653809 9.22586117923036e-16 6.98280013565452e-16 2.07209204025443e-16 0.6 0.0007236151 9.17552517825248e-16 6.93230113467348e-16 2.06078604003479e-16 0.8 0.0007596301 9.12376917724702e-16 6.87908613363967e-16 2.05111403984689e-16 1 0.0007858801 9.04534717572352e-16 6.82710213262978e-16 2.01368603911978e-16 1.2 0.0008064869 8.92617917340845e-16 6.77607313163844e-16 1.9347140375856e-16 -0.2 -0.0003034567 8.51625916544495e-16 2.37903304621736e-16 5.81704311300741e-16 0 0. 7.3786411433445e-16 3.45765306717166e-16 3.45765306717166e-16 0.2 0.0001113976 6.42027412472635e-16 3.8970860757085e-16 1.93936703767599e-16 0.4 0.0001296451 6.2989451223693e-16 3.86891307516119e-16 1.84183403578122e-16 0.6 0.0001423791 6.20580212055982e-16 3.8530030748521e-16 1.76457403428029e-16 0.8 0.000153374 6.13688811922103e-16 3.83988507459726e-16 1.70915503320367e-16 1 0.0001635034 6.08431911819977e-16 3.82750007435666e-16 1.66938503243106e-16 1.2 0.000173115 6.04179611737368e-16 3.81534307412048e-16 1.63940003184854e-16 -0.2 -0.0003164255 9.30541418077583e-16 3.09151906005879e-16 6.01564211686559e-16 0 0. 9.33382818132783e-16 4.56695708872205e-16 4.56695708872205e-16 0.2 0.0003111142 8.62965116764781e-16 5.89629611454706e-16 2.45458604768512e-16 0.4 0.0003937886 8.33011416182872e-16 6.00166811659411e-16 2.01649303917431e-16 0.6 0.000428415 8.18407915899171e-16 5.94693611553084e-16 1.91271203715816e-16 0.8 0.0004508538 8.05064315639945e-16 5.89291911448145e-16 1.82416003543787e-16 1 0.0004680925 7.94471715434163e-16 5.84222011349653e-16 1.76073703420575e-16 1.2 0.000482453 7.85939615268411e-16 5.79364811255292e-16 1.71620203334057e-16 -0.2 -0.0002424709 9.50929818473667e-16 3.67118707131997e-16 5.68297811040294e-16 0 0. 9.66657518779209e-16 4.7602220924766e-16 4.7602220924766e-16 0.2 0.0003067027 9.33079718126894e-16 5.97762611612705e-16 3.17026306158855e-16 0.4 0.0004476513 8.9779451744141e-16 6.5185421266354e-16 2.24152404354598e-16 0.6 0.0005031762 8.8346801716309e-16 6.52368712673535e-16 2.07627804033575e-16 0.8 0.0005341618 8.71380916928275e-16 6.47466412578299e-16 1.99230503870441e-16 1 0.0005554079 8.57802216664482e-16 6.42065612473377e-16 1.89982903690789e-16 1.2 0.0005716839 8.46345616441915e-16 6.36726712369659e-16 1.82857003552354e-16 -0.2 -0.0001575395 9.51416218483117e-16 4.07822307922744e-16 5.30103910298303e-16 0 0. 9.67012118786097e-16 4.7720920927072e-16 4.7720920927072e-16 0.2 0.0002296068 9.50178518459072e-16 5.62346410924676e-16 3.7304770724718e-16 0.4 0.0003943053 9.16008717795257e-16 6.45745712544871e-16 2.52404904903458e-16 0.6 0.0004666529 8.98879317462485e-16 6.5743411277194e-16 2.21738304307699e-16 0.8 0.0005050445 8.89081717272147e-16 6.55203912728615e-16 2.12841204134856e-16 1 0.0005296731 8.79205017080273e-16 6.50628812639734e-16 2.06388104009492e-16 1.2 0.0005475325 8.66291216829397e-16 6.4565661254314e-16 1.97371403834325e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_ig_st.standard0000644000175000017500000000630014163340332024634 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.2019e-06 1.887896e-10 -2.14e-12 -1.202e-06 0.35 2.5386e-06 6.525854e-10 -1.4527e-12 -2.5392e-06 0.45 3.9344e-06 1.5557e-09 -1.1279e-12 -3.9359e-06 0.55 5.2446e-06 3.0698e-09 -9.724335e-13 -5.2476e-06 0.65 6.4087e-06 5.4189e-09 -8.948548e-13 -6.4141e-06 0.75 7.4048e-06 8.893e-09 -8.573056e-13 -7.4137e-06 0.85 8.2318e-06 1.38655e-08 -8.431842e-13 -8.2457e-06 0.95 8.8998e-06 2.08144e-08 -8.468511e-13 -8.9207e-06 1.05000 9.4246e-06 3.0349e-08 -8.758183e-13 -9.4549e-06 1.15000 9.8237e-06 4.32434e-08 -9.694468e-13 -9.867e-06 0.25 2.6941e-06 7.89172e-11 -2.8094e-12 -2.6941e-06 0.35 7.2945e-06 2.166122e-10 -2.243e-12 -7.2947e-06 0.45 1.43811e-05 4.200709e-10 -1.8385e-12 -1.43816e-05 0.55 2.36821e-05 6.83524e-10 -1.5807e-12 -2.36828e-05 0.65 3.4801e-05 1.0055e-09 -1.4182e-12 -3.4802e-05 0.75 4.73215e-05 1.3868e-09 -1.3159e-12 -4.73229e-05 0.85 6.08566e-05 1.8302e-09 -1.2521e-12 -6.08584e-05 0.95 7.50614e-05 2.342e-09 -1.2138e-12 -7.50638e-05 1.05000 8.9626e-05 2.9354e-09 -1.1925e-12 -8.9629e-05 1.15000 0.000104256 3.6358e-09 -1.1828e-12 -0.0001042596 0.25 9.87962e-07 4.87587e-11 -1.0114e-12 -9.880097e-07 0.35 2.9992e-06 2.356922e-10 -6.182119e-13 -2.9995e-06 0.45 5.1908e-06 6.31284e-10 -4.429911e-13 -5.1915e-06 0.55 7.2336e-06 1.3135e-09 -3.659902e-13 -7.2349e-06 0.65 9.0229e-06 2.3879e-09 -3.290638e-13 -9.0253e-06 0.75 1.05304e-05 3.9922e-09 -3.109904e-13 -1.05344e-05 0.85 1.17621e-05 6.3045e-09 -3.030305e-13 -1.17684e-05 0.95 1.27408e-05 9.5532e-09 -3.014332e-13 -1.27504e-05 1.05000 1.3497e-05 1.40298e-08 -3.066139e-13 -1.3511e-05 1.15000 1.40623e-05 2.01054e-08 -3.322842e-13 -1.40824e-05 0.25 1.9568e-06 2.70054e-11 -1.1531e-12 -1.9568e-06 0.35 7.5624e-06 9.73078e-11 -8.755121e-13 -7.5625e-06 0.45 1.71681e-05 2.089659e-10 -6.837174e-13 -1.71683e-05 0.55 3.02012e-05 3.587251e-10 -5.68375e-13 -3.02016e-05 0.65 4.58978e-05 5.458804e-10 -4.992817e-13 -4.58983e-05 0.75 6.35389e-05 7.698705e-10 -4.576458e-13 -6.35396e-05 0.85 8.25246e-05 1.0298e-09 -4.327936e-13 -8.25256e-05 0.95 0.0001023748 1.3251e-09 -4.185963e-13 -0.0001023761 1.05000 0.0001227038 1.6562e-09 -4.114149e-13 -0.0001227055 1.15000 0.0001431861 2.0263e-09 -4.090079e-13 -0.0001431881 0.25 1.3844e-06 8.825562e-10 -4.5173e-12 -1.3853e-06 0.35 2.2025e-06 2.3102e-09 -3.621e-12 -2.2048e-06 0.45 3.0254e-06 4.8417e-09 -3.1357e-12 -3.0302e-06 0.55 3.7998e-06 8.9051e-09 -2.8817e-12 -3.8087e-06 0.65 4.4972e-06 1.50506e-08 -2.7562e-12 -4.5123e-06 0.75 5.1045e-06 2.39854e-08 -2.709e-12 -5.1285e-06 0.85 5.6182e-06 3.66154e-08 -2.7198e-12 -5.6548e-06 0.95 6.041e-06 5.4096e-08 -2.7942e-12 -6.0951e-06 1.05000 6.3788e-06 7.78964e-08 -2.9765e-12 -6.4567e-06 1.15000 6.6391e-06 1.098773e-07 -3.3766e-12 -6.749e-06 0.25 3.9938e-06 2.535056e-10 -7.2185e-12 -3.9941e-06 0.35 7.8388e-06 5.603278e-10 -6.1999e-12 -7.8394e-06 0.45 1.30849e-05 9.956153e-10 -5.3929e-12 -1.30859e-05 0.55 1.95846e-05 1.5693e-09 -4.8222e-12 -1.95861e-05 0.65 2.71193e-05 2.3041e-09 -4.428e-12 -2.71216e-05 0.75 3.54352e-05 3.2359e-09 -4.1579e-12 -3.54384e-05 0.85 4.42679e-05 4.4141e-09 -3.9755e-12 -4.42723e-05 0.95 5.33586e-05 5.9049e-09 -3.8568e-12 -5.33645e-05 1.05000 6.24646e-05 7.7946e-09 -3.7875e-12 -6.24724e-05 1.15000 7.13672e-05 1.01955e-08 -3.7617e-12 -7.13774e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_ig_st.standard0000644000175000017500000000711514163340332025211 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258.93 5.56154194671792e-15 4.85581044908406e-15 4.94393839172531e-16 1584.89 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995.26 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511.89 5.56155568747948e-15 4.85581960105262e-15 4.94390355452444e-16 3162.28 5.56155500760513e-15 4.85582421889652e-15 4.94393550533256e-16 3981.07 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011.87 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309.57 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943.28 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589.25 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848.93 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952.62 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118.86 5.5615620094324e-15 4.8558292344224e-15 4.94391776341312e-16 31622.78 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810.72 5.56172701296145e-15 4.85571710030404e-15 4.94391636810159e-16 50118.72 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095.73 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432.82 5.56150940556024e-15 4.85582665431252e-15 4.94391878333397e-16 100000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 125892.54 5.56152434171132e-15 4.85584083390461e-15 4.94391853005097e-16 158489.32 5.56155973996131e-15 4.85580812209214e-15 4.94391862074763e-16 199526.23 5.56155453706323e-15 4.85586096407586e-15 4.9439183126645e-16 251188.64 5.56155098607732e-15 4.85583923248945e-15 4.94391887695121e-16 316227.77 5.56157918434134e-15 4.85581265188986e-15 4.94391846619808e-16 398107.17 5.56156752041721e-15 4.85583739995712e-15 4.94406865673248e-16 501187.23 5.56154635331435e-15 4.85584196010162e-15 4.94402722311524e-16 630957.34 5.56156751780928e-15 4.85584040829898e-15 4.94397431782179e-16 794328.23 5.56156930477552e-15 4.85582647091881e-15 4.9439867204424e-16 1000000 5.56155807788612e-15 4.85583322922804e-15 4.94398915220664e-16 1258930 5.56154194671792e-15 4.85581044908406e-15 4.94393839172532e-16 1584890 5.56157096912621e-15 4.85583801033335e-15 4.94388642637671e-16 1995260 5.5615689246968e-15 4.85583465497478e-15 4.94392879766831e-16 2511890 5.56155568747948e-15 4.85581960105262e-15 4.94390355452445e-16 3162280 5.56155500760514e-15 4.85582421889652e-15 4.94393550533257e-16 3981070 5.56156189973638e-15 4.8558314779148e-15 4.94391085622768e-16 5011870 5.56156478336703e-15 4.85583148625837e-15 4.94393422517901e-16 6309570 5.56156294742598e-15 4.85583041275029e-15 4.94392653320675e-16 7943280 5.56156290057375e-15 4.85582988058021e-15 4.9439280427098e-16 10000000 5.56156126098498e-15 4.85582845457974e-15 4.9439254902294e-16 12589250 5.56156277096106e-15 4.85583099884014e-15 4.94392010088911e-16 15848930 5.56156144598271e-15 4.85582982305219e-15 4.94391723622821e-16 19952620 5.56156175459246e-15 4.85582978760934e-15 4.94391586535571e-16 25118860 5.5615620094324e-15 4.85582986802975e-15 4.94391776341312e-16 31622780 5.56137733989688e-15 4.85582829657321e-15 4.94391850046891e-16 39810720 5.56172701296145e-15 4.85571710030404e-15 4.94392036589272e-16 50118720 5.56167370856928e-15 4.85574698399754e-15 4.94391955005449e-16 63095730 5.56146697294747e-15 4.85594161358e-15 4.94391913765586e-16 79432820 5.56150940556024e-15 4.85582665431252e-15 4.94391878333398e-16 100000000 5.56151033140319e-15 4.85581731373373e-15 4.94391912403168e-16 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise2d_sw.standard0000644000175000017500000004530714163340332025150 0ustar carstencarstenFreq N(d) 100.00000 4.66942622224e-21 125.89254 3.710271744e-21 158.48932 2.94837054121e-21 199.52623 2.34317956096e-21 251.18864 1.86245759844e-21 316.22777 1.48061035369e-21 398.10717 1.17729275689e-21 501.18723 9.3636612001e-22 630.95734 7.4498427136e-22 794.32823 5.9296633081e-22 1000 4.7221897636e-22 1258.93 3.7630180225e-22 1584.89 3.0011058169e-22 1995.26 2.3959324944e-22 2511.89 1.9152068881e-22 3162.28 1.5333373584e-22 3981.07 1.2300362649e-22 5011.87 9.891098116e-23 6309.57 7.977169225e-23 7943.28 6.457086736e-23 10000 5.249582116e-23 12589.25 4.290381001e-23 15848.93 3.528478801e-23 19952.62 2.923348624e-23 25118.86 2.442534084e-23 31622.78 2.060706025e-23 39810.72 1.757370241e-23 50118.72 1.516479364e-23 63095.73 1.325105604e-23 79432.82 1.1730625e-23 100000 1.0523536e-23 125892.54 9.56417476e-24 158489.32 8.80249561e-24 199526.23 8.196769e-24 251188.64 7.71617284e-24 316227.77 7.33434724e-24 398107.17 7.03098256e-24 501187.23 6.79019364e-24 630957.34 6.59873344e-24 794328.23 6.44702881e-24 1000000 6.32623104e-24 1258930 6.230016e-24 1584890 6.15387249e-24 1995260 6.09349225e-24 2511890 6.04520569e-24 3162280 6.007401e-24 3981070 5.97704704e-24 5011870 5.95262404e-24 6309570 5.93360881e-24 7943280 5.91851584e-24 10000000 5.90635809e-24 12589250 5.89664089e-24 15848930 5.88935824e-24 19952620 5.88305025e-24 25118860 5.87820025e-24 31622780 5.87432169e-24 39810720 5.87141361e-24 50118720 5.86899076e-24 63095730 5.86705284e-24 79432820 5.86559961e-24 100000000 5.86463089e-24 100.00000 2.86354084e-18 125.89254 2.27466724e-18 158.48932 1.80687364e-18 199.52623 1.435204e-18 251.18864 1.13998329e-18 316.22777 9.0560746028281e-19 398.10717 7.1938267979449e-19 501.18723 5.71458890601e-19 630.95734 4.5395900571904e-19 794.32823 3.60625471441e-19 1000 2.8648795936849e-19 1258.93 2.2759845649984e-19 1584.89 1.8082089308416e-19 1995.26 1.4366411993025e-19 2511.89 1.1414944717201e-19 3162.28 9.070511569441e-20 3981.07 7.208263802041e-20 5011.87 5.729028944521e-20 6309.57 4.554028556289e-20 7943.28 3.620693507344e-20 10000 2.879316891025e-20 12589.25 2.290421935396e-20 15848.93 1.822645802916e-20 19952.62 1.451078024449e-20 25118.86 1.155932470449e-20 31622.78 9.21488643364e-21 39810.72 7.35263375625e-21 50118.72 5.87339837161e-21 63095.73 4.69840331601e-21 79432.82 3.76507414404e-21 100000 3.02369114161e-21 125892.54 2.43480072969e-21 158489.32 1.96702007121e-21 199526.23 1.59545922624e-21 251188.64 1.30030917604e-21 316227.77 1.06586578576e-21 398107.17 8.7964441744e-22 501187.23 7.3171873009e-22 630957.34 6.1421691556e-22 794328.23 5.2088476441e-22 1000000 4.4674740496e-22 1258930 3.8785757481e-22 1584890 3.4107810489e-22 1995260 3.0392343556e-22 2511890 2.7440916409e-22 3162280 2.5096262724e-22 3981070 2.3234295184e-22 5011870 2.1754775025e-22 6309570 2.0579910849e-22 7943280 1.9646507556e-22 10000000 1.8905150016e-22 12589250 1.8316374244e-22 15848930 1.7848425604e-22 19952620 1.747684e-22 25118860 1.7181704241e-22 31622780 1.6947353124e-22 39810720 1.6761186225e-22 50118720 1.6613147664e-22 63095730 1.6495806096e-22 79432820 1.6402437184e-22 100000000 1.6328239524e-22 100.00000 1.047687424e-17 125.89254 8.32207104e-18 158.48932 6.61055521e-18 199.52623 5.25097225e-18 251.18864 4.17098929e-18 316.22777 3.31312804e-18 398.10717 2.63185729e-18 501.18723 2.09062681e-18 630.95734 1.66074769e-18 794.32823 1.31928196e-18 1000 1.04796169e-18 1258.93 8.3251080385209e-19 1584.89 6.613592976e-19 1995.26 5.2540882723081e-19 2511.89 4.1741962483204e-19 3162.28 3.3164065380625e-19 3981.07 2.6350399293696e-19 5011.87 2.0938119520761e-19 6309.57 1.6638991544464e-19 7943.28 1.3224066793081e-19 10000 1.0511497716736e-19 12589.25 8.356828709124e-20 15848.93 6.645315778201e-20 19952.62 5.285810229921e-20 25118.86 4.205920095556e-20 31622.78 3.3481314441e-20 39810.72 2.666764118529e-20 50118.72 2.125536558084e-20 63095.73 1.695623269921e-20 79432.82 1.354130196241e-20 100000 1.082873334544e-20 125892.54 8.67407234409e-21 158489.32 6.96255067561e-21 199526.23 5.60304646225e-21 251188.64 4.52315431936e-21 316227.77 3.66537008929e-21 398107.17 2.983999876e-21 501187.23 2.44277131536e-21 630957.34 2.01285925201e-21 794328.23 1.67137062976e-21 1000000 1.40011420761e-21 1258930 1.18464690969e-21 1584890 1.01349269316e-21 1995260 8.7753990289e-22 2511890 7.6955198464e-22 3162280 6.8377543081e-22 3981070 6.15635344e-22 5011870 5.6151463369e-22 6309570 5.1852299521e-22 7943280 4.8437407225e-22 10000000 4.5724979556e-22 12589250 4.3570300225e-22 15848930 4.1858704836e-22 19952620 4.0499147536e-22 25118860 3.9419322849e-22 31622780 3.8561569641e-22 39810720 3.7880058384e-22 50118720 3.7338992289e-22 63095730 3.6908941689e-22 79432820 3.6567383076e-22 100000000 3.6296346256e-22 100.00000 1.693734025e-17 125.89254 1.3454224e-17 158.48932 1.068701481e-17 199.52623 8.48906496e-18 251.18864 6.74337024e-18 316.22777 5.35644736e-18 398.10717 4.25473129e-18 501.18723 3.37971456e-18 630.95734 2.68468225e-18 794.32823 2.13276816e-18 1000 1.69416256e-18 1258.93 1.34583201e-18 1584.89 1.069156e-18 1995.26 8.4933476356096e-19 2511.89 6.7474987347856e-19 3162.28 5.3607217673025e-19 3981.07 4.2591651907984e-19 5011.87 3.38416773696e-19 6309.57 2.6891328919225e-19 7943.28 2.13704647524e-19 10000 1.6985097204804e-19 12589.25 1.3501663640521e-19 15848.93 1.0734685562689e-19 19952.62 8.536786681284e-20 25118.86 6.790938919249e-20 31622.78 5.404164998596e-20 39810.72 4.302608478529e-20 50118.72 3.427611607161e-20 63095.73 2.7325743025e-20 79432.82 2.180489315904e-20 100000 1.7419512289e-20 125892.54 1.393608582144e-20 158489.32 1.1169107856e-20 199526.23 8.97121537225e-21 251188.64 7.22535700441e-21 316227.77 5.83857979236e-21 398107.17 4.73703204121e-21 501187.23 3.86203831209e-21 630957.34 3.16699943121e-21 794328.23 2.61491095044e-21 1000000 2.17637178256e-21 1258930 1.82803278025e-21 1584890 1.551335769e-21 1995260 1.33154199409e-21 2511890 1.15695899881e-21 3162280 1.01828001025e-21 3981070 9.0812425201e-22 5011870 8.2062769156e-22 6309570 7.5112172356e-22 7943280 6.9591495204e-22 10000000 6.5206176025e-22 12589250 6.17224336e-22 15848930 5.8955724864e-22 19952620 5.6757821121e-22 25118860 5.5011826116e-22 31622780 5.3625128041e-22 39810720 5.25234724e-22 50118720 5.1648471169e-22 63095730 5.0953581441e-22 79432820 5.0401597009e-22 100000000 4.9962978576e-22 100.00000 1.9751210521e-22 125.89254 1.57076089e-22 158.48932 1.2495662656e-22 199.52623 9.944277841e-23 251.18864 7.917796324e-23 316.22777 6.308012929e-23 398.10717 5.029362724e-23 501.18723 4.013602609e-23 630.95734 3.206843641e-23 794.32823 2.566030336e-23 1000 2.056985316e-23 1258.93 1.652585104e-23 1584.89 1.331447121e-23 1995.26 1.076299249e-23 2511.89 8.73616249e-24 3162.28 7.12623025e-24 3981.07 5.84769124e-24 5011.87 4.83208324e-24 6309.57 4.02523969e-24 7943.28 3.38449609e-24 10000 2.87539849e-24 12589.25 2.471184e-24 15848.93 2.14974244e-24 19952.62 1.89475225e-24 25118.86 1.69208064e-24 31622.78 1.53115876e-24 39810.72 1.40327716e-24 50118.72 1.30165281e-24 63095.73 1.221025e-24 79432.82 1.15691536e-24 100000 1.10607289e-24 125892.54 1.06564329e-24 158489.32 1.03347556e-24 199526.23 1.008016e-24 251188.64 9.8766984432964e-25 316227.77 9.7157215930896e-25 398107.17 9.5878544314081e-25 501187.23 9.4862846939536e-25 630957.34 9.40560530625e-25 794328.23 9.3415201843716e-25 1000000 9.2906137721089e-25 1258930 9.2501788306225e-25 1584890 9.2180602751329e-25 1995260 9.1925467801729e-25 2511890 9.1722817303209e-25 3162280 9.1561837752025e-25 3981070 9.1433966776321e-25 5011870 9.1332407126401e-25 6309570 9.1251727340929e-25 7943280 9.1187640805284e-25 10000000 9.1136731461136e-25 12589250 9.1096296735844e-25 15848930 9.1064172990025e-25 19952620 9.1038657450724e-25 25118860 9.1018392606736e-25 31622780 9.1002308277169e-25 39810720 9.0989506700964e-25 50118720 9.09793576561e-25 63095730 9.0971288424769e-25 79432820 9.0964879077601e-25 100000000 9.0959786096656e-25 100.00000 3.88405264e-18 125.89254 3.08494096e-18 158.48932 2.45047716e-18 199.52623 1.94658304e-18 251.18864 1.54629225e-18 316.22777 1.22832889e-18 398.10717 9.7568660959225e-19 501.18723 7.7504270929801e-19 630.95734 6.1566557902096e-19 794.32823 4.8906790368921e-19 1000 3.8850775175521e-19 1258.93 3.0863002480704e-19 1584.89 2.4518085077476e-19 1995.26 1.9478143694025e-19 2511.89 1.5474774572401e-19 3162.28 1.2294784857664e-19 3981.07 9.768825262144e-20 5011.87 7.762386643236e-20 6309.57 6.1686166689e-20 7943.28 4.902641784481e-20 10000 3.897039224464e-20 12589.25 3.098261795344e-20 15848.93 2.4637697296e-20 19952.62 1.9597760064e-20 25118.86 1.559439000625e-20 31622.78 1.241439411601e-20 39810.72 9.88843292836e-21 50118.72 7.88199493636e-21 63095.73 6.28823624256e-21 79432.82 5.02225925041e-21 100000 4.01665680441e-21 125892.54 3.21787311169e-21 158489.32 2.583383929e-21 199526.23 2.07938736009e-21 251188.64 1.67905716169e-21 316227.77 1.36105655625e-21 398107.17 1.10845714225e-21 501187.23 9.078169e-22 630957.34 7.4843827776e-22 794328.23 6.2183900689e-22 1000000 5.2128195856e-22 1258930 4.4140329216e-22 1584890 3.77952481e-22 1995260 3.2755208256e-22 2511890 2.8751950096e-22 3162280 2.5571847744e-22 3981070 2.3045972481e-22 5011870 2.10395025e-22 6309570 1.9445744704e-22 7943280 1.8179937889e-22 10000000 1.71741025e-22 12589250 1.6375553089e-22 15848930 1.5740964369e-22 19952620 1.5236939844e-22 25118860 1.4836701636e-22 31622780 1.4518563049e-22 39810720 1.42659136e-22 50118720 1.4065485604e-22 63095730 1.3906069776e-22 79432820 1.3779472996e-22 100000000 1.3678939849e-22 100.00000 1.499548176e-17 125.89254 1.191147169e-17 158.48932 9.46116081e-18 199.52623 7.51582225e-18 251.18864 5.96971489e-18 316.22777 4.74194176e-18 398.10717 3.76670464e-18 501.18723 2.99220804e-18 630.95734 2.37683889e-18 794.32823 1.88815081e-18 1000 1.49989009e-18 1258.93 1.19137225e-18 1584.89 9.46433231104e-19 1995.26 7.5184437442816e-19 2511.89 5.97277028569e-19 3162.28 4.7449985676025e-19 3981.07 3.7697438750976e-19 5011.87 2.9950718925625e-19 6309.57 2.3797284036516e-19 7943.28 1.8909434856004e-19 10000 1.5026872355401e-19 12589.25 1.1942850840649e-19 15848.93 9.493121750281e-20 19952.62 7.547234211729e-20 25118.86 6.001564136481e-20 31622.78 4.77378801e-20 39810.72 3.798534734289e-20 50118.72 3.023863633476e-20 63095.73 2.408520867481e-20 79432.82 1.919734947025e-20 100000 1.531478025841e-20 125892.54 1.223076741184e-20 158489.32 9.78103198081e-21 199526.23 7.83515306896e-21 251188.64 6.28947335844e-21 316227.77 5.06169639936e-21 398107.17 4.08644398009e-21 501187.23 3.311772304e-21 630957.34 2.69643409984e-21 794328.23 2.20764660736e-21 1000000 1.81938930849e-21 1258930 1.51098573796e-21 1584890 1.26601467721e-21 1995260 1.07142964929e-21 2511890 9.1686023209e-22 3162280 7.9408422025e-22 3981070 6.9655877776e-22 5011870 6.1908904225e-22 6309570 5.5755487876e-22 7943280 5.0867840521e-22 10000000 4.6985331121e-22 12589250 4.3901144676e-22 15848930 4.1451331216e-22 19952620 3.95055376e-22 25118860 3.7959897889e-22 31622780 3.6732022336e-22 39810720 3.5756919025e-22 50118720 3.4982091225e-22 63095730 3.4366856689e-22 79432820 3.38780836e-22 100000000 3.3489732004e-22 100.00000 2.390134321e-17 125.89254 1.898519184e-17 158.48932 1.508079556e-17 199.52623 1.197921321e-17 251.18864 9.51537409e-18 316.22777 7.55865049e-18 398.10717 6.00397009e-18 501.18723 4.76941921e-18 630.95734 3.78847296e-18 794.32823 3.00918409e-18 1000 2.39042521e-18 1258.93 1.898884e-18 1584.89 1.50847524e-18 1995.26 1.19836809e-18 2511.89 9.5193721752529e-19 3162.28 7.5624172718656e-19 3981.07 6.0079535707801e-19 5011.87 4.7732001057225e-19 6309.57 3.7923993796516e-19 7943.28 3.0133215933129e-19 10000 2.3944786142281e-19 12589.25 1.90291378176e-19 15848.93 1.5124507672576e-19 19952.62 1.2022939042921e-19 25118.86 9.559282892481e-20 31622.78 7.602328301824e-20 39810.72 6.047866296081e-20 50118.72 4.8131094544e-20 63095.73 3.832311301641e-20 79432.82 3.0532320225e-20 100000 2.434389424009e-20 125892.54 1.942826185609e-20 158489.32 1.552361499844e-20 199526.23 1.242206098849e-20 251188.64 9.95838338889e-21 316227.77 8.00144562064e-21 398107.17 6.446965849e-21 501187.23 5.21221909849e-21 630957.34 4.23142444036e-21 794328.23 3.45233804356e-21 1000000 2.83349677636e-21 1258930 2.34193084225e-21 1584890 1.95146596516e-21 1995260 1.64131127161e-21 2511890 1.394947801e-21 3162280 1.19925075204e-21 3981070 1.043806864e-21 5011870 9.2032750161e-22 6309570 8.2224989001e-22 7943280 7.4434026276e-22 10000000 6.8245815121e-22 12589250 6.3330239025e-22 15848930 5.9425275529e-22 19952620 5.6324104929e-22 25118860 5.3860198084e-22 31622780 5.1903319329e-22 39810720 5.0348628225e-22 50118720 4.9114094689e-22 63095730 4.8133288449e-22 79432820 4.73541121e-22 100000000 4.6735521856e-22 100.00000 5.797491208804e-20 125.89254 4.605779547664e-20 158.48932 3.659171106816e-20 199.52623 2.907250064356e-20 251.18864 2.309980499044e-20 316.22777 1.835553490276e-20 398.10717 1.458701126289e-20 501.18723 1.159356106756e-20 630.95734 9.21578880121e-21 794.32823 7.32705184324e-21 1000 5.82677268889e-21 1258.93 4.63506340969e-21 1584.89 3.68846084929e-21 1995.26 2.93654526201e-21 2511.89 2.339269956e-21 3162.28 1.86484058244e-21 3981.07 1.48799205025e-21 5011.87 1.18864284289e-21 6309.57 9.5087123044e-22 7943.28 7.6199737849e-22 10000 6.11968644e-22 12589.25 4.92795601e-22 15848.93 3.9813418089e-22 19952.62 3.2294246436e-22 25118.86 2.63218176e-22 31622.78 2.1577259664e-22 39810.72 1.78089025e-22 50118.72 1.4815514961e-22 63095.73 1.2437602576e-22 79432.82 1.0548933264e-22 100000 9.048575376e-23 125892.54 7.856872321e-23 158489.32 6.910264384e-23 199526.23 6.158325625e-23 251188.64 5.561132329e-23 316227.77 5.086685041e-23 398107.17 4.709802384e-23 501187.23 4.410553744e-23 630957.34 4.172772409e-23 794328.23 3.983881924e-23 1000000 3.833838724e-23 1258930 3.714658704e-23 1584890 3.619947556e-23 1995260 3.544773444e-23 2511890 3.485131225e-23 3162280 3.437594161e-23 3981070 3.399939481e-23 5011870 3.370034704e-23 6309570 3.346275409e-23 7943280 3.327328489e-23 10000000 3.312347809e-23 12589250 3.300387601e-23 15848930 3.290972689e-23 19952620 3.283404601e-23 25118860 3.277448001e-23 31622780 3.272755264e-23 39810720 3.268980625e-23 50118720 3.266008201e-23 63095730 3.263608384e-23 79432820 3.261666321e-23 100000000 3.260181604e-23 100.00000 2.146225e-18 125.89254 1.70485249e-18 158.48932 1.35419769e-18 199.52623 1.07578384e-18 251.18864 8.54502418449e-19 316.22777 6.7879984022761e-19 398.10717 5.3923423368049e-19 501.18723 4.2837339160576e-19 630.95734 3.4031343982321e-19 794.32823 2.7036495313569e-19 1000 2.1480295779856e-19 1258.93 1.7066846489616e-19 1584.89 1.3561115581764e-19 1995.26 1.0776414735025e-19 2511.89 8.564449074064e-20 3162.28 6.807423682816e-20 3981.07 5.411769395041e-20 5011.87 4.303160252836e-20 6309.57 3.422562900289e-20 7943.28 2.723077530625e-20 10000 2.167455283984e-20 12589.25 1.726109854225e-20 15848.93 1.375537245889e-20 19952.62 1.0970677081e-20 25118.86 8.758713744e-21 31622.78 7.00168971121e-21 39810.72 5.60604100225e-21 50118.72 4.49743255641e-21 63095.73 3.61683162801e-21 79432.82 2.91733935376e-21 100000 2.36171700625e-21 125892.54 1.92037644841e-21 158489.32 1.56979986849e-21 199526.23 1.29133141201e-21 251188.64 1.07013382641e-21 316227.77 8.9443463041e-22 398107.17 7.5487013001e-22 501187.23 6.4400735529e-22 630957.34 5.5595037796e-22 794328.23 4.8599966116e-22 1000000 4.30438009e-22 1258930 3.8630330116e-22 1584890 3.5124757056e-22 1995260 3.2339907889e-22 2511890 3.0127933476e-22 3162280 2.8371022969e-22 3981070 2.6975106081e-22 5011870 2.5866610561e-22 6309570 2.49861249e-22 7943280 2.4286417281e-22 10000000 2.3730786304e-22 12589250 2.3289506881e-22 15848930 2.2938919936e-22 19952620 2.2660485156e-22 25118860 2.2439440804e-22 31622780 2.22636241e-22 39810720 2.2124182564e-22 50118720 2.2013063424e-22 63095730 2.1925021041e-22 79432820 2.1855187225e-22 100000000 2.1799636609e-22 100.00000 6.66569124e-18 125.89254 5.29506121e-18 158.48932 4.20619081e-18 199.52623 3.34121841e-18 251.18864 2.65396681e-18 316.22777 2.108304e-18 398.10717 1.67469481e-18 501.18723 1.33033156e-18 630.95734 1.056784e-18 794.32823 8.3954063396025e-19 1000 6.6695446225984e-19 1258.93 5.2986446914041e-19 1584.89 4.20969987684e-19 1995.26 3.3447206622736e-19 2511.89 2.6576437594756e-19 3162.28 2.1118785688324e-19 3981.07 1.6783614561961e-19 5011.87 1.3340069588836e-19 6309.57 1.0604766198016e-19 7943.28 8.432037017209e-20 10000 6.706178357641e-20 12589.25 5.335277671684e-20 15848.93 4.246331999569e-20 19952.62 3.381350934025e-20 25118.86 2.694272747776e-20 31622.78 2.148508076841e-20 39810.72 1.714991918929e-20 50118.72 1.370636830564e-20 63095.73 1.097107510041e-20 79432.82 8.79834620025e-21 100000 7.07249042361e-21 125892.54 5.70157887744e-21 158489.32 4.61263738896e-21 199526.23 3.74765576761e-21 251188.64 3.06057900625e-21 316227.77 2.51481187441e-21 398107.17 2.08130301369e-21 501187.23 1.73694732289e-21 630957.34 1.46341442116e-21 794328.23 1.24613942049e-21 1000000 1.07355833104e-21 1258930 9.3646404289e-22 1584890 8.2756905625e-22 1995260 7.4107539529e-22 2511890 6.723649e-22 3162280 6.1779090916e-22 3981070 5.7443626276e-22 5011870 5.3999999641e-22 6309570 5.1264657889e-22 7943280 4.9091935489e-22 10000000 4.7366299044e-22 12589250 4.5995236225e-22 15848930 4.4906271921e-22 19952620 4.4041639321e-22 25118860 4.3354319089e-22 31622780 4.2808437604e-22 39810720 4.2375045904e-22 50118720 4.2030740196e-22 63095730 4.1757287716e-22 79432820 4.1539738969e-22 100000000 4.13674921e-22 100.00000 1.068113124e-17 125.89254 8.48440384e-18 158.48932 6.73973521e-18 199.52623 5.35367044e-18 251.18864 4.25266884e-18 316.22777 3.37787641e-18 398.10717 2.68337161e-18 501.18723 2.1316e-18 630.95734 1.69338169e-18 794.32823 1.34513604e-18 1000 1.06853569e-18 1258.93 8.4892783657984e-19 1584.89 6.7443825831561e-19 1995.26 5.3583615126889e-19 2511.89 4.2574072064161e-19 3162.28 3.38288803876e-19 3981.07 2.6882327323489e-19 5011.87 2.1364483241929e-19 6309.57 1.6981503623044e-19 7943.28 1.3499973441361e-19 10000 1.0734502086025e-19 12589.25 8.537809334209e-20 15848.93 6.792914367684e-20 19952.62 5.406894524529e-20 25118.86 4.305940405776e-20 31622.78 3.431419103281e-20 39810.72 2.736764736489e-20 50118.72 2.184980636224e-20 63095.73 1.746682067641e-20 79432.82 1.398528568836e-20 100000 1.121980903696e-20 125892.54 9.02311909801e-21 158489.32 7.27822265625e-21 199526.23 5.89220506449e-21 251188.64 4.79125611721e-21 316227.77 3.91673202244e-21 398107.17 3.22207222689e-21 501187.23 2.67029529001e-21 630957.34 2.231995536e-21 794328.23 1.88384645089e-21 1000000 1.60729629921e-21 1258930 1.38762210064e-21 1584890 1.21313586601e-21 1995260 1.07453495601e-21 2511890 9.6443786916e-22 3162280 8.76988996e-22 3981070 8.0752020561e-22 5011870 7.5234455521e-22 6309570 7.0851260041e-22 7943280 6.7369836249e-22 10000000 6.4604422276e-22 12589250 6.2407534225e-22 15848930 6.0662704804e-22 19952620 5.9276667024e-22 25118860 5.8175510416e-22 31622780 5.7301348129e-22 39810720 5.6606402241e-22 50118720 5.6054824081e-22 63095730 5.5616260561e-22 79432820 5.5268248464e-22 100000000 5.4991657009e-22 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvdb_diode_lw.standard0000644000175000017500000001633614163340332025515 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.0008788336 1.08943802116446e-13 1.64298003191809e-14 8.69533016892376e-14 0 0. 6.98459013568929e-14 3.07753005978703e-14 3.07753005978703e-14 0.2 0.0001136993 4.75692009241246e-14 3.21678006249223e-14 5.69190011057627e-15 0.4 0.0001257751 4.67441009080954e-14 3.13939006098878e-14 5.69310011059958e-15 0.6 0.0001370935 4.59004008917049e-14 3.07460005973011e-14 5.55130010784484e-15 0.8 0.0001478973 4.51025008762041e-14 3.01302005853379e-14 5.42300010535236e-15 1 0.0001582976 4.43481008615484e-14 2.95348005737711e-14 5.31740010330087e-15 1.2 0.0001683551 4.36282008475629e-14 2.89573005625521e-14 5.22830010156993e-15 -0.2 -0.0009157424 1.42591402770116e-13 5.77593011220871e-14 8.17923015889751e-14 0 0. 1.44021502797899e-13 7.04399013684325e-14 7.04399013684325e-14 0.2 0.000948664 1.1658080226481e-13 8.7701201703767e-14 2.40665004675387e-14 0.4 0.0011358 1.02386301989054e-13 8.95266017392289e-14 7.27890014140684e-15 0.6 0.0011849 1.01030501962715e-13 8.84855017190035e-14 6.98060013561178e-15 0.8 0.0012265 9.98894019405465e-14 8.75699017012162e-14 6.78630013183712e-15 1 0.0012639 9.88092019195616e-14 8.66839016840039e-14 6.62390012868219e-15 1.2 0.0012982 9.77761018994916e-14 8.5814701667118e-14 6.49140012610811e-15 -0.2 -0.0006162631 1.46898402853788e-13 6.94221013486598e-14 7.50331014576644e-14 0 0. 1.49614002906544e-13 7.35692014292253e-14 7.35692014292253e-14 0.2 0.0008611076 1.4387540279506e-13 8.03447015608526e-14 6.0680801178843e-14 0.4 0.0017674 1.19254602316753e-13 9.50960018474254e-14 2.00294003891102e-14 0.6 0.0020022 1.0924820212236e-13 9.56199018576032e-14 9.04680017575175e-15 0.8 0.0020796 1.07437702087187e-13 9.46204018381859e-14 8.22080015970509e-15 1 0.0021376 1.06283902064772e-13 9.37754018217702e-14 7.93470015414704e-15 1.2 0.0021879 1.05259302044867e-13 9.29813018063432e-14 7.73140015019753e-15 -0.2 -0.0003515643 1.45266302822081e-13 7.31636014213457e-14 6.98958013578623e-14 0 0. 1.47963802874486e-13 7.28645014155351e-14 7.28645014155351e-14 0.2 0.0005624493 1.46576102847527e-13 7.39437014365007e-14 7.02586013649104e-14 0.4 0.0013956 1.37115402663734e-13 8.4680501645084e-14 4.95877009633379e-14 0.6 0.0021978 1.17330202279368e-13 9.429220183181e-14 1.93436003757872e-14 0.8 0.0024579 1.09318002123716e-13 9.45527018368707e-14 1.07754002093332e-14 1 0.0025569 1.07123502081083e-13 9.36551018194331e-14 9.44460018347979e-15 1.2 0.0026238 1.05881002056945e-13 9.28603018039926e-14 9.00890017501547e-15 -0.2 -0.0011921 1.05738902054185e-13 8.19150015913587e-15 9.17595017826074e-14 0 0. 3.76404007312382e-14 1.36475002651293e-14 1.36475002651293e-14 0.2 3.80639e-05 2.86866005572932e-14 1.22366002377198e-14 5.59470010868797e-15 0.4 4.46391e-05 2.83010005498022e-14 1.1920400231577e-14 5.60520010889195e-15 0.6 5.0921e-05 2.78834005416895e-14 1.17264002278082e-14 5.46240010611778e-15 0.8 5.7023e-05 2.75057005343519e-14 1.15560002244979e-14 5.33540010365056e-15 1 6.29861e-05 2.71626005276865e-14 1.13958002213857e-14 5.23180010163793e-15 1.2 6.88302e-05 2.68440005214971e-14 1.12424002184056e-14 5.14500009995167e-15 -0.2 -0.001407 1.45304602822825e-13 5.6742201102328e-14 8.56458016638368e-14 0 0. 1.48380502882581e-13 7.27168014126658e-14 7.27168014126658e-14 0.2 0.001378 1.11876102173412e-13 9.39337018248455e-14 1.28287002492225e-14 0.4 0.0015209 1.05820402055768e-13 9.35393018171835e-14 6.90470013413727e-15 0.6 0.0015991 1.04714702034287e-13 9.25752017984539e-14 6.79450013199642e-15 0.8 0.0016655 1.03585402012349e-13 9.16614017807016e-14 6.61090012842963e-15 1 0.0017244 1.02503001991321e-13 9.07692017633689e-14 6.45210012534463e-15 1.2 0.0017783 1.01466201971179e-13 8.98925017463373e-14 6.32290012283467e-15 -0.2 -0.0009127503 1.49621702906694e-13 6.99945013597798e-14 7.73324015023328e-14 0 0. 1.53030302972912e-13 7.53632014640773e-14 7.53632014640773e-14 0.2 0.0013147 1.46795802851795e-13 8.37827016276425e-14 6.0300301171451e-14 0.4 0.0026009 1.17380502280345e-13 1.00558201953539e-13 1.26716002461706e-14 0.6 0.0028166 1.1267800218899e-13 1.00177601946145e-13 8.19560015921553e-15 0.8 0.0029287 1.11566702167401e-13 9.93038019291701e-14 7.9796001550193e-15 1 0.0030206 1.10498902146657e-13 9.84775019131176e-14 7.76430015083668e-15 1.2 0.0031002 1.09476802126801e-13 9.7670701897444e-14 7.5751001471611e-15 -0.2 -0.0004992835 1.47365502862862e-13 7.37481014327008e-14 7.1545501389911e-14 0 0. 1.50422402922249e-13 7.41660014408193e-14 7.41660014408193e-14 0.2 0.0008274713 1.49178202898078e-13 7.60955014783036e-14 7.08524013764462e-14 0.4 0.0021059 1.38182202684459e-13 8.79793017091696e-14 4.74459009217292e-14 0.6 0.0032062 1.15603702245828e-13 9.88122019196198e-14 1.32012002564591e-14 0.8 0.0034498 1.11559202167255e-13 9.84530019126417e-14 9.42000018300188e-15 1 0.003574 1.10404302144819e-13 9.76688018974071e-14 9.06240017605481e-15 1.2 0.003673 1.09396202125235e-13 9.69283018830214e-14 8.81550017125829e-15 -0.2 -0.0005581439 1.17735802287248e-13 2.90659005646618e-14 8.37724016274424e-14 0 0. 1.0066120195554e-13 4.7231600917566e-14 4.7231600917566e-14 0.2 0.000220653 7.0910201377569e-14 5.48578010657198e-14 7.84870015247631e-15 0.4 0.0002392066 6.77374013159312e-14 5.32909010352797e-14 6.13150011911635e-15 0.6 0.0002512983 6.63823012896057e-14 5.2205101014186e-14 5.88180011426544e-15 0.8 0.0002625414 6.52443012674979e-14 5.12509009956488e-14 5.72940011130478e-15 1 0.0002732621 6.41879012469752e-14 5.03458009780654e-14 5.612100109026e-15 1.2 0.0002835687 6.31792012273793e-14 4.94695009610416e-14 5.5142001071241e-15 -0.2 -0.0005512346 1.38287602686507e-13 5.43205010552817e-14 8.07404015685398e-14 0 0. 1.3933890270693e-13 6.80023013210774e-14 6.80023013210774e-14 0.2 0.0005738916 1.22471302379244e-13 8.41522016348207e-14 3.39434006594168e-14 0.4 0.0008173182 1.04761202035191e-13 8.77200017041322e-14 1.1632600225986e-14 0.6 0.000879041 9.95006019329934e-14 8.56503016639242e-14 8.20170015933403e-15 0.8 0.0009105806 9.72734018897256e-14 8.41802016353647e-14 7.40320014382161e-15 1 0.0009349635 9.5796501861034e-14 8.3045401613319e-14 7.06610013727278e-15 1.2 0.0009563073 9.45867018375312e-14 8.2055901594096e-14 6.86520013336991e-15 -0.2 -0.0003955517 1.42475702767869e-13 6.55828012740739e-14 7.42220014419072e-14 0 0. 1.44891402814798e-13 7.10916013810931e-14 7.10916013810931e-14 0.2 0.0005242795 1.39290702705994e-13 7.94723015439045e-14 5.67644011027593e-14 0.4 0.0010222 1.24153602411926e-13 9.20006017872912e-14 2.83070005499187e-14 0.6 0.0012725 1.12663502188708e-13 9.33206018129348e-14 1.49208002898657e-14 0.8 0.0013795 1.07104602080716e-13 9.17204017818478e-14 1.07217002082899e-14 1 0.0014373 1.04150802023333e-13 9.01974017522605e-14 9.20430017881149e-15 1.2 0.0014774 1.02257301986548e-13 8.89666017283498e-14 8.51540016542826e-15 -0.2 -0.000241598 1.41756202753891e-13 7.05034013696662e-14 6.88383013373183e-14 0 0. 1.44225602801864e-13 7.08896013771688e-14 7.08896013771688e-14 0.2 0.000365047 1.42322002764883e-13 7.30885014198868e-14 6.66403012946179e-14 0.4 0.0008512016 1.33763902598625e-13 8.5544201661863e-14 4.52212008785101e-14 0.6 0.001264 1.22359602377074e-13 9.20374017880061e-14 2.68140005209143e-14 0.8 0.0015087 1.13906102212848e-13 9.27578018020013e-14 1.7277800335655e-14 1 0.0016428 1.08784402113349e-13 9.16428017803402e-14 1.30745002539977e-14 1.2 0.0017235 1.05572102050944e-13 9.03207017546559e-14 1.10878002154022e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acfreq_core_sw.standard0000644000175000017500000000710614163340332025545 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258.93 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584.89 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995.26 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511.89 1.75123216809258e-14 1.31203652818349e-14 3.96400600451493e-15 3162.28 1.75123283034693e-14 1.31203729905505e-14 3.96401137195977e-15 3981.07 1.75123528093895e-14 1.31203892665247e-14 3.96401577911747e-15 5011.87 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309.57 1.75123534704896e-14 1.31203916980709e-14 3.96401516076056e-15 7943.28 1.75123493857524e-14 1.31203908214922e-14 3.96401456366612e-15 10000 1.75118183884012e-14 1.31203849591705e-14 3.96401328026089e-15 12589.25 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848.93 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952.62 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118.86 1.7512273535172e-14 1.31201073878507e-14 3.96401421773492e-15 31622.78 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810.72 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118.72 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095.73 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432.82 1.75124331366568e-14 1.31204496308788e-14 3.9640055510179e-15 100000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 125892.54 1.75123794760688e-14 1.3120378267772e-14 3.9640652222836e-15 158489.32 1.75123406932017e-14 1.31203724576972e-14 3.96397828169714e-15 199526.23 1.75123200499053e-14 1.31203806208689e-14 3.96399255223323e-15 251188.64 1.75123341071921e-14 1.31203587414666e-14 3.96403702996212e-15 316227.77 1.75123511064457e-14 1.31203724674684e-14 3.96402935384323e-15 398107.17 1.75123253422953e-14 1.31203916594299e-14 3.96401008860928e-15 501187.23 1.75123484155246e-14 1.31203920593492e-14 3.96401807588318e-15 630957.34 1.75123389888465e-14 1.31203745382247e-14 3.96400797982497e-15 794328.23 1.751235232957e-14 1.31203890260877e-14 3.96400540130628e-15 1000000 1.75123435997134e-14 1.31203833676211e-14 3.9640085056126e-15 1258930 1.75122775614044e-14 1.31203429693474e-14 3.96400016967761e-15 1584890 1.75123760518009e-14 1.3120408990634e-14 3.96401641129189e-15 1995260 1.7512364166872e-14 1.3120403721803e-14 3.96402105160965e-15 2511890 1.75123153448624e-14 1.31203652818349e-14 3.96400600451493e-15 3162280 1.75123283034693e-14 1.31203780234679e-14 3.96401137195977e-15 3981070 1.75123488115964e-14 1.31203932643179e-14 3.96401577911747e-15 5011870 1.75123532765659e-14 1.31203917293153e-14 3.96401354389272e-15 6309570 1.75123534704896e-14 1.31203942205082e-14 3.96401516076055e-15 7943280 1.75123473821098e-14 1.31203888178495e-14 3.96401456366612e-15 10000000 1.75118183884012e-14 1.31203865507199e-14 3.96401328026089e-15 12589250 1.75118793550762e-14 1.31200031726091e-14 3.96401464905598e-15 15848930 1.75122424831176e-14 1.31208762133387e-14 3.9640139289148e-15 19952620 1.75127215151823e-14 1.31207814257906e-14 3.964013887518e-15 25118860 1.7512273535172e-14 1.31201073878507e-14 3.96401358412757e-15 31622780 1.75125507619052e-14 1.3120320893554e-14 3.96401287243629e-15 39810720 1.75123240226263e-14 1.31203506928107e-14 3.9640129881279e-15 50118720 1.75122541970121e-14 1.31204563558843e-14 3.96405006874902e-15 63095730 1.75122644259729e-14 1.31204510430816e-14 3.96400823112616e-15 79432820 1.75124331366568e-14 1.31204496308787e-14 3.9640055510179e-15 100000000 1.75122958532305e-14 1.31204151986097e-14 3.96407216758984e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_gidl_sw.standard0000644000175000017500000001537614163340332025333 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 9.5021e-12 0. -1.90042e-11 9.5021e-12 0.1 8.350389e-07 0. -2.68886e-11 -8.35012e-07 0.2 1.0153e-06 0. -4.0057e-11 -1.0153e-06 0.3 1.2007e-06 0. -6.12812e-11 -1.2007e-06 0.4 1.4009e-06 0. -9.44093e-11 -1.4008e-06 0.5 1.62e-06 0. -1.446384e-10 -1.6199e-06 0.6 1.8613e-06 0. -2.188172e-10 -1.8611e-06 0.7 2.1275e-06 0. -3.257713e-10 -2.1272e-06 0.8 2.4216e-06 0. -4.766472e-10 -2.4211e-06 0.9 2.7463e-06 0. -6.852669e-10 -2.7457e-06 1.00000 3.1047e-06 0. -9.684867e-10 -3.1037e-06 1.10000 3.4997e-06 0. -1.3466e-09 -3.4984e-06 1.20000 3.9347e-06 0. -1.8434e-09 -3.9329e-06 0. 1.7032e-12 0. -3.4065e-12 1.7032e-12 0.1 0.0003454385 0. -5.2263e-12 -0.0003454385 0.2 0.0004065021 0. -8.6126e-12 -0.0004065021 0.3 0.000446988 0. -1.46251e-11 -0.000446988 0.4 0.0004833616 0. -2.48624e-11 -0.0004833616 0.5 0.0005178129 0. -4.1651e-11 -0.0005178129 0.6 0.0005512711 0. -6.82686e-11 -0.0005512711 0.7 0.0005842288 0. -1.092018e-10 -0.0005842287 0.8 0.0006169771 0. -1.70434e-10 -0.0006169769 0.9 0.0006497008 0. -2.597603e-10 -0.0006497005 1.00000 0.0006825232 0. -3.871232e-10 -0.0006825229 1.10000 0.0007155299 0. -5.64962e-10 -0.0007155294 1.20000 0.0007487818 0. -8.085712e-10 -0.000748781 0. 2.092002e-13 0. -4.184004e-13 2.092002e-13 0.1 0.0016046 0. -7.196277e-13 -0.0016046 0.2 0.0023275 0. -1.3677e-12 -0.0023275 0.3 0.0025592 0. -2.6762e-12 -0.0025592 0.4 0.0027105 0. -5.1741e-12 -0.0027105 0.5 0.0028353 0. -9.7113e-12 -0.0028353 0.6 0.0029454 0. -1.75957e-11 -0.0029454 0.7 0.0030459 0. -3.07641e-11 -0.0030459 0.8 0.0031396 0. -5.19883e-11 -0.0031396 0.9 0.0032283 0. -8.51164e-11 -0.0032283 1.00000 0.0033132 0. -1.353456e-10 -0.0033132 1.10000 0.0033951 0. -2.095243e-10 -0.0033951 1.20000 0.0034746 0. -3.164784e-10 -0.0034746 0. 1.52536e-14 0. -3.05072e-14 1.52536e-14 0.1 0.0026351 0. -6.20991e-14 -0.0026351 0.2 0.0043979 0. -1.451934e-13 -0.0043979 0.3 0.0051266 0. -3.451928e-13 -0.0051266 0.4 0.0054675 0. -7.907714e-13 -0.0054675 0.5 0.0057092 0. -1.7185e-12 -0.0057092 0.6 0.0059082 0. -3.5383e-12 -0.0059082 0.7 0.0060817 0. -6.9246e-12 -0.0060817 0.8 0.0062378 0. -1.29371e-11 -0.0062378 0.9 0.0063811 0. -2.31744e-11 -0.0063811 1.00000 0.0065146 0. -3.9963e-11 -0.0065146 1.10000 0.0066404 0. -6.65806e-11 -0.0066404 1.20000 0.0067599 0. -1.075138e-10 -0.0067599 0. 9.4382e-12 0. -1.88763e-11 9.4382e-12 0.1 5.03498e-08 0. -2.67156e-11 -5.03231e-08 0.2 6.41416e-08 0. -3.98139e-11 -6.41018e-08 0.3 7.97426e-08 0. -6.09329e-11 -7.96817e-08 0.4 9.77872e-08 0. -9.39076e-11 -9.76933e-08 0.5 1.18786e-07 0. -1.439191e-10 -1.186421e-07 0.6 1.432575e-07 0. -2.177963e-10 -1.430397e-07 0.7 1.717629e-07 0. -3.24342e-10 -1.714385e-07 0.8 2.049244e-07 0. -4.746757e-10 -2.044497e-07 0.9 2.434376e-07 0. -6.825886e-10 -2.42755e-07 1.00000 2.88083e-07 0. -9.649023e-10 -2.871181e-07 1.10000 3.397367e-07 0. -1.3418e-09 -3.383948e-07 1.20000 3.993816e-07 0. -1.8373e-09 -3.975443e-07 0. 1.6894e-12 0. -3.3788e-12 1.6894e-12 0.1 0.0002955488 0. -5.186e-12 -0.0002955488 0.2 0.0003429909 0. -8.5506e-12 -0.0003429909 0.3 0.0003821632 0. -1.45274e-11 -0.0003821632 0.4 0.0004187968 0. -2.47082e-11 -0.0004187968 0.5 0.0004544436 0. -4.14106e-11 -0.0004544435 0.6 0.0004897972 0. -6.79007e-11 -0.0004897971 0.7 0.0005252228 0. -1.086505e-10 -0.0005252227 0.8 0.0005609325 0. -1.696258e-10 -0.0005609324 0.9 0.000597058 0. -2.586003e-10 -0.0005970577 1.00000 0.0006336842 0. -3.854915e-10 -0.0006336838 1.10000 0.000670868 0. -5.627099e-10 -0.0006708674 1.20000 0.0007086476 0. -8.055172e-10 -0.0007086468 0. 2.071086e-13 0. -4.142172e-13 2.071086e-13 0.1 0.0019396 0. -7.128536e-13 -0.0019396 0.2 0.002649 0. -1.3558e-12 -0.002649 0.3 0.0028796 0. -2.6548e-12 -0.0028796 0.4 0.0030497 0. -5.136e-12 -0.0030497 0.5 0.0031928 0. -9.6453e-12 -0.0031928 0.6 0.00332 0. -1.74846e-11 -0.00332 0.7 0.0034366 0. -3.05829e-11 -0.0034366 0.8 0.0035458 0. -5.17019e-11 -0.0035458 0.9 0.0036495 0. -8.46766e-11 -0.0036495 1.00000 0.0037491 0. -1.34688e-10 -0.0037491 1.10000 0.0038455 0. -2.085653e-10 -0.0038455 1.20000 0.0039392 0. -3.15111e-10 -0.0039392 0. 1.5061e-14 0. -3.01219e-14 1.5061e-14 0.1 0.0032726 0. -6.13694e-14 -0.0032726 0.2 0.005272 0. -1.436424e-13 -0.005272 0.3 0.0059577 0. -3.418419e-13 -0.0059577 0.4 0.0063166 0. -7.837544e-13 -0.0063166 0.5 0.0065915 0. -1.7045e-12 -0.0065915 0.6 0.0068219 0. -3.5117e-12 -0.0068219 0.7 0.0070238 0. -6.8763e-12 -0.0070238 0.8 0.0072059 0. -1.2853e-11 -0.0072059 0.9 0.0073733 0. -2.30339e-11 -0.0073733 1.00000 0.0075295 0. -3.97362e-11 -0.0075295 1.10000 0.0076769 0. -6.62264e-11 -0.0076769 1.20000 0.0078171 0. -1.069762e-10 -0.0078171 0. 9.605e-12 0. -1.92101e-11 9.605e-12 0.1 1.16283e-05 0. -2.7167e-11 -1.16283e-05 0.2 1.4037e-05 0. -4.04479e-11 -1.4037e-05 0.3 1.59479e-05 0. -6.18412e-11 -1.59478e-05 0.4 1.78018e-05 0. -9.52156e-11 -1.78017e-05 0.5 1.96823e-05 0. -1.457941e-10 -1.96822e-05 0.6 2.16235e-05 0. -2.204566e-10 -2.16232e-05 0.7 2.36441e-05 0. -3.280657e-10 -2.36437e-05 0.8 2.57567e-05 0. -4.798111e-10 -2.57562e-05 0.9 2.79708e-05 0. -6.89564e-10 -2.79701e-05 1.00000 3.02941e-05 0. -9.74236e-10 -3.02931e-05 1.10000 3.27334e-05 0. -1.3541e-09 -3.27321e-05 1.20000 3.52948e-05 0. -1.8533e-09 -3.52929e-05 0. 1.7255e-12 0. -3.4511e-12 1.7255e-12 0.1 0.0004181587 0. -5.2913e-12 -0.0004181587 0.2 0.0005421782 0. -8.7126e-12 -0.0005421782 0.3 0.0006028331 0. -1.47825e-11 -0.0006028331 0.4 0.000648168 0. -2.51106e-11 -0.000648168 0.5 0.0006874059 0. -4.20376e-11 -0.0006874059 0.6 0.0007235101 0. -6.886e-11 -0.00072351 0.7 0.0007577734 0. -1.100874e-10 -0.0007577733 0.8 0.0007908723 0. -1.717319e-10 -0.0007908722 0.9 0.0008232049 0. -2.616227e-10 -0.0008232046 1.00000 0.0008550251 0. -3.89742e-10 -0.0008550247 1.10000 0.0008865047 0. -5.685757e-10 -0.0008865042 1.20000 0.0009177653 0. -8.134702e-10 -0.0009177645 0. 2.12581e-13 0. -4.251621e-13 2.12581e-13 0.1 0.0012952 0. -7.305694e-13 -0.0012952 0.2 0.001956 0. -1.3869e-12 -0.001956 0.3 0.0022696 0. -2.7106e-12 -0.0022696 0.4 0.002458 0. -5.2353e-12 -0.002458 0.5 0.0025946 0. -9.8176e-12 -0.0025946 0.6 0.0027054 0. -1.77746e-11 -0.0027054 0.7 0.0028012 0. -3.10555e-11 -0.0028012 0.8 0.0028873 0. -5.24488e-11 -0.0028873 0.9 0.0029668 0. -8.58232e-11 -0.0029668 1.00000 0.0030415 0. -1.364017e-10 -0.0030415 1.10000 0.0031125 0. -2.110642e-10 -0.0031125 1.20000 0.0031807 0. -3.186733e-10 -0.0031807 0. 1.55661e-14 0. -3.11321e-14 1.55661e-14 0.1 0.0020316 0. -6.32811e-14 -0.0020316 0.2 0.0033625 0. -1.477026e-13 -0.0033625 0.3 0.0040949 0. -3.506076e-13 -0.0040949 0.4 0.0045279 0. -8.020981e-13 -0.0045279 0.5 0.0048204 0. -1.7411e-12 -0.0048204 0.6 0.0050401 0. -3.5813e-12 -0.0050401 0.7 0.0052182 0. -7.0026e-12 -0.0052182 0.8 0.0053701 0. -1.30725e-11 -0.0053701 0.9 0.0055043 0. -2.34006e-11 -0.0055043 1.00000 0.0056258 0. -4.03277e-11 -0.0056258 1.10000 0.005738 0. -6.715e-11 -0.005738 1.20000 0.0058429 0. -1.083775e-10 -0.0058429 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_diode_lt.standard0000644000175000017500000001536314163340332025462 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 5.731061e-07 0. -1.382e-15 -5.731061e-07 0.2 6.209901e-07 0. -1.382e-15 -6.209901e-07 0.3 6.538619e-07 0. -1.382e-15 -6.538619e-07 0.4 6.856086e-07 0. -1.382e-15 -6.856086e-07 0.5 7.16458e-07 0. -1.382e-15 -7.16458e-07 0.6 7.46587e-07 0. -1.382e-15 -7.46587e-07 0.7 7.761081e-07 0. -1.382e-15 -7.761081e-07 0.8 8.05098e-07 0. -1.382e-15 -8.05098e-07 0.9 8.336117e-07 0. -1.382e-15 -8.336117e-07 1.00000 8.616908e-07 0. -1.382e-15 -8.616908e-07 1.10000 8.893673e-07 0. -1.382e-15 -8.893673e-07 1.20000 9.166668e-07 0. -1.382e-15 -9.166668e-07 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 6.2801e-06 0. -1.382e-15 -6.2801e-06 0.2 9.6279e-06 0. -1.382e-15 -9.6279e-06 0.3 1.06156e-05 0. -1.382e-15 -1.06156e-05 0.4 1.09663e-05 0. -1.382e-15 -1.09663e-05 0.5 1.12453e-05 0. -1.382e-15 -1.12453e-05 0.6 1.15031e-05 0. -1.382e-15 -1.15031e-05 0.7 1.17474e-05 0. -1.382e-15 -1.17474e-05 0.8 1.19812e-05 0. -1.382e-15 -1.19812e-05 0.9 1.22064e-05 0. -1.382e-15 -1.22064e-05 1.00000 1.24243e-05 0. -1.382e-15 -1.24243e-05 1.10000 1.26357e-05 0. -1.382e-15 -1.26357e-05 1.20000 1.28415e-05 0. -1.382e-15 -1.28415e-05 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 1.21097e-05 0. -1.382e-15 -1.21097e-05 0.2 2.18175e-05 0. -1.382e-15 -2.18175e-05 0.3 2.86584e-05 0. -1.382e-15 -2.86584e-05 0.4 3.23544e-05 0. -1.382e-15 -3.23544e-05 0.5 3.39508e-05 0. -1.382e-15 -3.39508e-05 0.6 3.48384e-05 0. -1.382e-15 -3.48384e-05 0.7 3.55279e-05 0. -1.382e-15 -3.55279e-05 0.8 3.61398e-05 0. -1.382e-15 -3.61398e-05 0.9 3.67078e-05 0. -1.382e-15 -3.67078e-05 1.00000 3.72449e-05 0. -1.382e-15 -3.72449e-05 1.10000 3.77573e-05 0. -1.382e-15 -3.77573e-05 1.20000 3.82492e-05 0. -1.382e-15 -3.82492e-05 0. 6.909805e-16 0. -1.382e-15 6.909805e-16 0.1 1.60409e-05 0. -1.382e-15 -1.60409e-05 0.2 3.04776e-05 0. -1.382e-15 -3.04776e-05 0.3 4.29137e-05 0. -1.382e-15 -4.29137e-05 0.4 5.28288e-05 0. -1.382e-15 -5.28288e-05 0.5 5.96971e-05 0. -1.382e-15 -5.96971e-05 0.6 6.37056e-05 0. -1.382e-15 -6.37056e-05 0.7 6.59602e-05 0. -1.382e-15 -6.59602e-05 0.8 6.74453e-05 0. -1.382e-15 -6.74453e-05 0.9 6.86117e-05 0. -1.382e-15 -6.86117e-05 1.00000 6.96261e-05 0. -1.382e-15 -6.96261e-05 1.10000 7.05531e-05 0. -1.382e-15 -7.05531e-05 1.20000 7.14211e-05 0. -1.382e-15 -7.14211e-05 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 2.042026e-07 0. -9.447e-23 -2.042026e-07 0.2 2.229703e-07 0. -9.447e-23 -2.229703e-07 0.3 2.409226e-07 0. -9.447e-23 -2.409226e-07 0.4 2.582853e-07 0. -9.447e-23 -2.582853e-07 0.5 2.752398e-07 0. -9.447e-23 -2.752398e-07 0.6 2.918784e-07 0. -9.447e-23 -2.918784e-07 0.7 3.082551e-07 0. -9.447e-23 -3.082551e-07 0.8 3.244048e-07 0. -9.447e-23 -3.244048e-07 0.9 3.403513e-07 0. -9.447e-23 -3.403513e-07 1.00000 3.561115e-07 0. -9.447e-23 -3.561115e-07 1.10000 3.716981e-07 0. -9.447e-23 -3.716981e-07 1.20000 3.871206e-07 0. -9.447e-23 -3.871206e-07 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 8.0729e-06 0. -9.447e-23 -8.0729e-06 0.2 1.16178e-05 0. -9.447e-23 -1.16178e-05 0.3 1.23488e-05 0. -9.447e-23 -1.23488e-05 0.4 1.27797e-05 0. -9.447e-23 -1.27797e-05 0.5 1.31678e-05 0. -9.447e-23 -1.31678e-05 0.6 1.35293e-05 0. -9.447e-23 -1.35293e-05 0.7 1.38702e-05 0. -9.447e-23 -1.38702e-05 0.8 1.41948e-05 0. -9.447e-23 -1.41948e-05 0.9 1.45059e-05 0. -9.447e-23 -1.45059e-05 1.00000 1.48059e-05 0. -9.447e-23 -1.48059e-05 1.10000 1.50964e-05 0. -9.447e-23 -1.50964e-05 1.20000 1.53787e-05 0. -9.447e-23 -1.53787e-05 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 1.7059e-05 0. -9.447e-23 -1.7059e-05 0.2 3.04414e-05 0. -9.447e-23 -3.04414e-05 0.3 3.93761e-05 0. -9.447e-23 -3.93761e-05 0.4 4.34019e-05 0. -9.447e-23 -4.34019e-05 0.5 4.50329e-05 0. -9.447e-23 -4.50329e-05 0.6 4.61787e-05 0. -9.447e-23 -4.61787e-05 0.7 4.71816e-05 0. -9.447e-23 -4.71816e-05 0.8 4.8103e-05 0. -9.447e-23 -4.8103e-05 0.9 4.89639e-05 0. -9.447e-23 -4.89639e-05 1.00000 4.97761e-05 0. -9.447e-23 -4.97761e-05 1.10000 5.05477e-05 0. -9.447e-23 -5.05477e-05 1.20000 5.12848e-05 0. -9.447e-23 -5.12848e-05 0. 4.723e-23 0. -9.447e-23 4.723e-23 0.1 2.28945e-05 0. -9.447e-23 -2.28945e-05 0.2 4.34079e-05 0. -9.447e-23 -4.34079e-05 0.3 6.09085e-05 0. -9.447e-23 -6.09085e-05 0.4 7.45702e-05 0. -9.447e-23 -7.45702e-05 0.5 8.33184e-05 0. -9.447e-23 -8.33184e-05 0.6 8.77409e-05 0. -9.447e-23 -8.77409e-05 0.7 9.0247e-05 0. -9.447e-23 -9.0247e-05 0.8 9.2136e-05 0. -9.447e-23 -9.2136e-05 0.9 9.37776e-05 0. -9.447e-23 -9.37776e-05 1.00000 9.52783e-05 0. -9.447e-23 -9.52783e-05 1.10000 9.66784e-05 0. -9.447e-23 -9.66784e-05 1.20000 9.79986e-05 0. -9.447e-23 -9.79986e-05 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 1.223e-06 0. -1.9887e-09 -1.221e-06 0.2 1.5151e-06 0. -1.9887e-09 -1.5131e-06 0.3 1.5953e-06 0. -1.9887e-09 -1.5933e-06 0.4 1.6475e-06 0. -1.9887e-09 -1.6455e-06 0.5 1.6945e-06 0. -1.9887e-09 -1.6925e-06 0.6 1.7395e-06 0. -1.9887e-09 -1.7375e-06 0.7 1.7834e-06 0. -1.9887e-09 -1.7814e-06 0.8 1.8264e-06 0. -1.9887e-09 -1.8244e-06 0.9 1.8685e-06 0. -1.9887e-09 -1.8665e-06 1.00000 1.9099e-06 0. -1.9887e-09 -1.9079e-06 1.10000 1.9506e-06 0. -1.9887e-09 -1.9486e-06 1.20000 1.9907e-06 0. -1.9887e-09 -1.9887e-06 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 4.9577e-06 0. -1.9887e-09 -4.9557e-06 0.2 7.9572e-06 0. -1.9887e-09 -7.9552e-06 0.3 9.3918e-06 0. -1.9887e-09 -9.3898e-06 0.4 1.00457e-05 0. -1.9887e-09 -1.00437e-05 0.5 1.04047e-05 0. -1.9887e-09 -1.04027e-05 0.6 1.06563e-05 0. -1.9887e-09 -1.06543e-05 0.7 1.08639e-05 0. -1.9887e-09 -1.08619e-05 0.8 1.10497e-05 0. -1.9887e-09 -1.10477e-05 0.9 1.12228e-05 0. -1.9887e-09 -1.12208e-05 1.00000 1.13872e-05 0. -1.9887e-09 -1.13853e-05 1.10000 1.15453e-05 0. -1.9887e-09 -1.15433e-05 1.20000 1.16982e-05 0. -1.9887e-09 -1.16962e-05 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 8.4679e-06 0. -1.9887e-09 -8.4659e-06 0.2 1.52213e-05 0. -1.9887e-09 -1.52193e-05 0.3 1.99993e-05 0. -1.9887e-09 -1.99973e-05 0.4 2.30505e-05 0. -1.9887e-09 -2.30485e-05 0.5 2.49184e-05 0. -1.9887e-09 -2.49164e-05 0.6 2.60972e-05 0. -1.9887e-09 -2.60952e-05 0.7 2.69038e-05 0. -1.9887e-09 -2.69018e-05 0.8 2.75102e-05 0. -1.9887e-09 -2.75082e-05 0.9 2.80044e-05 0. -1.9887e-09 -2.80024e-05 1.00000 2.84315e-05 0. -1.9887e-09 -2.84295e-05 1.10000 2.88155e-05 0. -1.9887e-09 -2.88135e-05 1.20000 2.91699e-05 0. -1.9887e-09 -2.91679e-05 0. 9.943486e-10 0. -1.9887e-09 9.943486e-10 0.1 1.09515e-05 0. -1.9887e-09 -1.09495e-05 0.2 2.06873e-05 0. -1.9887e-09 -2.06853e-05 0.3 2.88055e-05 0. -1.9887e-09 -2.88035e-05 0.4 3.51263e-05 0. -1.9887e-09 -3.51243e-05 0.5 3.97767e-05 0. -1.9887e-09 -3.97748e-05 0.6 4.30918e-05 0. -1.9887e-09 -4.30898e-05 0.7 4.54507e-05 0. -1.9887e-09 -4.54487e-05 0.8 4.71703e-05 0. -1.9887e-09 -4.71683e-05 0.9 4.84757e-05 0. -1.9887e-09 -4.84737e-05 1.00000 4.95136e-05 0. -1.9887e-09 -4.95116e-05 1.10000 5.03759e-05 0. -1.9887e-09 -5.03739e-05 1.20000 5.11198e-05 0. -1.9887e-09 -5.11178e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvdb_ig_st.standard0000644000175000017500000002116114163340332024775 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. -8.5128e-12 1.73154e-11 -2.898394e-13 -8.5128e-12 0.1 8.83379e-07 4.1717e-12 -2.971693e-13 -8.833829e-07 0.2 1.0333e-06 4.0247e-12 -2.964496e-13 -1.0333e-06 0.3 1.1694e-06 4.0816e-12 -2.956394e-13 -1.1694e-06 0.4 1.3038e-06 4.172e-12 -2.94809e-13 -1.3038e-06 0.5 1.4402e-06 4.2779e-12 -2.939667e-13 -1.4402e-06 0.6 1.5805e-06 4.3927e-12 -2.931153e-13 -1.5805e-06 0.7 1.7258e-06 4.5138e-12 -2.922563e-13 -1.7258e-06 0.8 1.8768e-06 4.6394e-12 -2.913904e-13 -1.8768e-06 0.9 2.0341e-06 4.7688e-12 -2.90518e-13 -2.0341e-06 1.00000 2.1981e-06 4.9015e-12 -2.896395e-13 -2.1981e-06 1.10000 2.3692e-06 5.037e-12 -2.887552e-13 -2.3692e-06 1.20000 2.5476e-06 5.1751e-12 -2.878652e-13 -2.5476e-06 0. -5.29885e-10 1.0599e-09 -1.486325e-13 -5.29885e-10 0.1 4.28937e-05 2.187453e-10 -1.773504e-13 -4.28939e-05 0.2 5.37603e-05 1.247706e-10 -1.866159e-13 -5.37604e-05 0.3 5.81948e-05 1.21946e-10 -1.862537e-13 -5.81949e-05 0.4 6.16746e-05 1.215002e-10 -1.855843e-13 -6.16747e-05 0.5 6.47085e-05 1.213653e-10 -1.848985e-13 -6.47086e-05 0.6 6.7474e-05 1.213462e-10 -1.842138e-13 -6.74741e-05 0.7 7.00612e-05 1.213885e-10 -1.835328e-13 -7.00613e-05 0.8 7.25228e-05 1.214685e-10 -1.82856e-13 -7.25229e-05 0.9 7.48924e-05 1.215734e-10 -1.821838e-13 -7.48925e-05 1.00000 7.71925e-05 1.216955e-10 -1.815161e-13 -7.71927e-05 1.10000 7.94392e-05 1.218301e-10 -1.808529e-13 -7.94393e-05 1.20000 8.1644e-05 1.21974e-10 -1.801944e-13 -8.16442e-05 0. -2.7295e-09 5.4591e-09 -1.033054e-13 -2.7295e-09 0.1 0.0001087779 1.3021e-09 -1.132566e-13 -0.0001087792 0.2 0.0001674102 4.53671e-10 -1.223606e-13 -0.0001674107 0.3 0.0001866831 3.870704e-10 -1.241181e-13 -0.0001866835 0.4 0.0001973604 3.809634e-10 -1.240885e-13 -0.0001973608 0.5 0.0002055861 3.796373e-10 -1.239061e-13 -0.0002055865 0.6 0.0002125443 3.790779e-10 -1.237045e-13 -0.0002125447 0.7 0.0002186904 3.787474e-10 -1.235e-13 -0.0002186907 0.8 0.0002242655 3.785213e-10 -1.232953e-13 -0.0002242659 0.9 0.0002294168 3.783561e-10 -1.230913e-13 -0.0002294172 1.00000 0.0002342413 3.782312e-10 -1.228879e-13 -0.0002342417 1.10000 0.0002388066 3.781354e-10 -1.226854e-13 -0.0002388069 1.20000 0.0002431616 3.780615e-10 -1.224837e-13 -0.0002431619 0. -8.4715e-09 1.69431e-08 -9.33996e-14 -8.4715e-09 0.1 0.0001562497 4.2823e-09 -9.78275e-14 -0.000156254 0.2 0.0002678049 1.3272e-09 -1.028894e-13 -0.0002678062 0.3 0.0003198846 8.912309e-10 -1.057661e-13 -0.0003198855 0.4 0.0003429338 8.345726e-10 -1.062434e-13 -0.0003429347 0.5 0.0003580214 8.251076e-10 -1.062485e-13 -0.0003580222 0.6 0.0003699535 8.224935e-10 -1.061827e-13 -0.0003699543 0.7 0.0003800938 8.213486e-10 -1.06103e-13 -0.0003800946 0.8 0.0003890331 8.206517e-10 -1.060199e-13 -0.000389034 0.9 0.0003970992 8.201388e-10 -1.05936e-13 -0.0003971 1.00000 0.0004044985 8.197215e-10 -1.058519e-13 -0.0004044993 1.10000 0.0004113714 8.193633e-10 -1.057679e-13 -0.0004113722 1.20000 0.0004178181 8.190459e-10 -1.056841e-13 -0.0004178189 0. -6.956415e-13 1.4928e-12 -1.015441e-13 -6.956415e-13 0.1 1.443818e-07 5.232227e-13 -1.018793e-13 -1.443822e-07 0.2 1.752963e-07 5.308726e-13 -1.016992e-13 -1.752967e-07 0.3 2.064912e-07 5.508721e-13 -1.015064e-13 -2.064917e-07 0.4 2.395126e-07 5.759341e-13 -1.013082e-13 -2.395131e-07 0.5 2.750403e-07 6.041229e-13 -1.011064e-13 -2.750408e-07 0.6 3.135166e-07 6.347545e-13 -1.009019e-13 -3.135172e-07 0.7 3.552956e-07 6.675515e-13 -1.006949e-13 -3.552962e-07 0.8 4.006947e-07 7.023981e-13 -1.004854e-13 -4.006953e-07 0.9 4.500169e-07 7.392523e-13 -1.002734e-13 -4.500175e-07 1.00000 5.035614e-07 7.781093e-13 -1.00059e-13 -5.035621e-07 1.10000 5.616293e-07 8.18984e-13 -9.98421e-14 -5.6163e-07 1.20000 6.245263e-07 8.619026e-13 -9.96226e-14 -6.24527e-07 0. -2.240169e-10 4.480885e-10 -5.47131e-14 -2.240169e-10 0.1 4.57638e-05 9.0895e-11 -6.5955e-14 -4.57638e-05 0.2 5.40461e-05 7.11746e-11 -6.71679e-14 -5.40462e-05 0.3 5.85745e-05 7.07724e-11 -6.68673e-14 -5.85745e-05 0.4 6.22968e-05 7.06881e-11 -6.65594e-14 -6.22968e-05 0.5 6.56027e-05 7.07187e-11 -6.6252e-14 -6.56028e-05 0.6 6.86581e-05 7.08077e-11 -6.59463e-14 -6.86582e-05 0.7 7.15495e-05 7.09302e-11 -6.56425e-14 -7.15496e-05 0.8 7.43276e-05 7.10733e-11 -6.53409e-14 -7.43277e-05 0.9 7.70246e-05 7.12299e-11 -6.50416e-14 -7.70246e-05 1.00000 7.96618e-05 7.13957e-11 -6.47447e-14 -7.96619e-05 1.10000 8.22545e-05 7.15679e-11 -6.44501e-14 -8.22546e-05 1.20000 8.48136e-05 7.17446e-11 -6.41579e-14 -8.48137e-05 0. -1.2726e-09 2.5452e-09 -3.66826e-14 -1.2726e-09 0.1 0.0001327104 6.003431e-10 -4.03564e-14 -0.000132711 0.2 0.0001936954 2.318587e-10 -4.32626e-14 -0.0001936957 0.3 0.0002115913 2.207623e-10 -4.33602e-14 -0.0002115915 0.4 0.0002232798 2.200246e-10 -4.32734e-14 -0.00022328 0.5 0.0002326174 2.197675e-10 -4.31817e-14 -0.0002326176 0.6 0.0002405899 2.196468e-10 -4.30899e-14 -0.0002405901 0.7 0.0002476648 2.195983e-10 -4.29985e-14 -0.000247665 0.8 0.0002541058 2.195947e-10 -4.29075e-14 -0.000254106 0.9 0.0002600765 2.196215e-10 -4.28169e-14 -0.0002600767 1.00000 0.0002656853 2.196699e-10 -4.27268e-14 -0.0002656855 1.10000 0.0002710077 2.197343e-10 -4.26372e-14 -0.000271008 1.20000 0.0002760986 2.19811e-10 -4.2548e-14 -0.0002760988 0. -4.0491e-09 8.0983e-09 -3.27612e-14 -4.0491e-09 0.1 0.0001940988 2.0393e-09 -3.44267e-14 -0.0001941008 0.2 0.0003223241 6.270978e-10 -3.62985e-14 -0.0003223248 0.3 0.000372805 4.689696e-10 -3.70159e-14 -0.0003728054 0.4 0.0003960832 4.605719e-10 -3.70241e-14 -0.0003960836 0.5 0.0004129205 4.596248e-10 -3.69874e-14 -0.0004129209 0.6 0.0004266314 4.593467e-10 -3.69478e-14 -0.0004266318 0.7 0.0004383776 4.592335e-10 -3.69079e-14 -0.0004383781 0.8 0.0004487619 4.591988e-10 -3.6868e-14 -0.0004487624 0.9 0.0004581454 4.59213e-10 -3.68283e-14 -0.0004581459 1.00000 0.0004667632 4.592613e-10 -3.67887e-14 -0.0004667637 1.10000 0.0004747767 4.593346e-10 -3.67492e-14 -0.0004747771 1.20000 0.0004823016 4.594271e-10 -3.67098e-14 -0.0004823021 0. -9.3981e-11 1.888259e-10 -8.639593e-13 -9.3981e-11 0.1 4.3847e-06 4.26562e-11 -9.523031e-13 -4.3847e-06 0.2 5.2458e-06 2.77576e-11 -9.603603e-13 -5.2458e-06 0.3 5.787e-06 2.55153e-11 -9.587847e-13 -5.787e-06 0.4 6.2526e-06 2.4938e-11 -9.558509e-13 -6.2526e-06 0.5 6.6867e-06 2.47936e-11 -9.525831e-13 -6.6867e-06 0.6 7.1055e-06 2.48099e-11 -9.492051e-13 -7.1055e-06 0.7 7.5166e-06 2.48997e-11 -9.457859e-13 -7.5167e-06 0.8 7.9245e-06 2.50282e-11 -9.423521e-13 -7.9245e-06 0.9 8.3317e-06 2.51791e-11 -9.389155e-13 -8.3318e-06 1.00000 8.7402e-06 2.53437e-11 -9.354821e-13 -8.7402e-06 1.10000 9.1511e-06 2.55172e-11 -9.320552e-13 -9.1511e-06 1.20000 9.5653e-06 2.56967e-11 -9.286366e-13 -9.5653e-06 0. -1.5904e-09 3.1812e-09 -4.499244e-13 -1.5904e-09 0.1 4.07174e-05 7.812916e-10 -5.206653e-13 -4.07182e-05 0.2 5.62888e-05 3.509847e-10 -5.605849e-13 -5.62892e-05 0.3 6.31618e-05 2.796112e-10 -5.73286e-13 -6.31621e-05 0.4 6.75605e-05 2.584865e-10 -5.769337e-13 -6.75607e-05 0.5 7.09677e-05 2.499031e-10 -5.776857e-13 -7.09679e-05 0.6 7.38649e-05 2.456776e-10 -5.773505e-13 -7.38651e-05 0.7 7.64561e-05 2.433134e-10 -5.765427e-13 -7.64563e-05 0.8 7.88445e-05 2.418642e-10 -5.755057e-13 -7.88447e-05 0.9 8.10891e-05 2.409134e-10 -5.743482e-13 -8.10893e-05 1.00000 8.32268e-05 2.402559e-10 -5.73124e-13 -8.32271e-05 1.10000 8.52824e-05 2.397821e-10 -5.718614e-13 -8.52826e-05 1.20000 8.7273e-05 2.394292e-10 -5.705768e-13 -8.72732e-05 0. -7.0267e-09 1.40537e-08 -3.352348e-13 -7.0267e-09 0.1 8.62783e-05 3.6225e-09 -3.634059e-13 -8.62819e-05 0.2 0.0001353252 1.3841e-09 -3.864641e-13 -0.0001353266 0.3 0.0001596378 9.759381e-10 -3.986688e-13 -0.0001596387 0.4 0.0001737495 8.492775e-10 -4.041091e-13 -0.0001737503 0.5 0.0001834405 7.969614e-10 -4.065246e-13 -0.0001834413 0.6 0.0001908965 7.710693e-10 -4.076056e-13 -0.0001908973 0.7 0.0001970642 7.565163e-10 -4.080541e-13 -0.000197065 0.8 0.0002024115 7.475141e-10 -4.081773e-13 -0.0002024122 0.9 0.0002071957 7.415068e-10 -4.081209e-13 -0.0002071965 1.00000 0.0002115713 7.37241e-10 -4.07959e-13 -0.0002115721 1.10000 0.0002156374 7.3405e-10 -4.07732e-13 -0.0002156381 1.20000 0.0002194609 7.315555e-10 -4.074633e-13 -0.0002194617 0. -2.07848e-08 4.157e-08 -3.134331e-13 -2.07848e-08 0.1 0.0001203942 1.09473e-08 -3.255636e-13 -0.0001204051 0.2 0.0002037716 3.8757e-09 -3.377765e-13 -0.0002037755 0.3 0.0002518276 2.5028e-09 -3.463408e-13 -0.0002518301 0.4 0.0002804181 2.0543e-09 -3.511819e-13 -0.0002804202 0.5 0.0002993815 1.8642e-09 -3.537609e-13 -0.0002993834 0.6 0.0003132604 1.7692e-09 -3.551519e-13 -0.0003132621 0.7 0.0003241978 1.7159e-09 -3.559219e-13 -0.0003241995 0.8 0.000333288 1.6832e-09 -3.563536e-13 -0.0003332897 0.9 0.0003411359 1.6616e-09 -3.565916e-13 -0.0003411376 1.00000 0.000348101 1.6466e-09 -3.567128e-13 -0.0003481027 1.10000 0.0003544102 1.6355e-09 -3.567607e-13 -0.0003544119 1.20000 0.0003602143 1.6271e-09 -3.567606e-13 -0.0003602159 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_ig_st.standard0000644000175000017500000000657414163340332024700 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 1.167e-24 6.8872001337973e-15 1.09923502135479e-16 1.09923502135479e-16 -0.8 2.348e-21 2.28260004434396e-15 1.47216802859974e-16 1.47216802859974e-16 -0.4 1.148919e-16 1.40780002734926e-15 1.62112703149356e-16 1.62112703149356e-16 1.11022302462516e-16 -2.3939e-12 1.27340002473828e-15 2.29836104465015e-16 2.29836104465015e-16 0.4 -5.3449e-09 7.45130014475605e-15 3.64090007073159e-15 3.64090007073159e-15 0.8 -2.80357e-08 7.70360014965746e-15 3.79100007364757e-15 3.79100007364757e-15 1.2 -9.59209e-08 7.44790014468999e-15 3.66990007129497e-15 3.66990007129497e-15 -1.2 1.742e-20 6.53900012703284e-15 1.24326902415293e-16 9.35577018175409e-17 -0.8 3.53495e-17 2.20280004279369e-15 1.07727602092819e-16 1.78231903462503e-16 -0.4 2.0316e-12 1.35300002628467e-15 1.07712602092527e-16 2.01723403918871e-16 1.11022302462516e-16 2.734947e-07 1.17300002278781e-15 1.65366503212567e-16 2.19900004271987e-16 0.4 7.09889e-05 5.15490010014399e-15 4.52800008796524e-15 3.02658005879722e-16 0.8 0.0001354942 5.57550010831497e-15 4.92390009565637e-15 4.15027708062723e-16 1.2 0.0001440615 5.56990010820618e-15 4.72730009183703e-15 6.52662512679243e-16 -1.2 0. 7.19380013975361e-15 1.10587002148368e-16 1.10587002148368e-16 -0.8 6.528e-27 2.08330004047217e-15 1.49351102901437e-16 1.49351102901437e-16 -0.4 2.321e-20 1.36820002657996e-15 1.62842103163526e-16 1.62842103163526e-16 1.11022302462516e-16 -2.87893e-14 1.165700022646e-15 1.80884503514034e-16 1.80884503514034e-16 0.4 -2.3626e-09 7.68040014920676e-15 3.76070007305894e-15 3.76070007305894e-15 0.8 -1.30538e-08 7.85720015264144e-15 3.87200007522116e-15 3.87200007522116e-15 1.2 -4.536e-08 7.54460014656858e-15 3.72170007230129e-15 3.72170007230129e-15 -1.2 1.273e-26 6.83960013287258e-15 1.17908202290597e-16 1.01086201963797e-16 -0.8 4.174e-22 2.0096000390404e-15 1.09928902135583e-16 1.80157803499917e-16 -0.4 1.4617e-15 1.31440002553479e-15 1.07945202097046e-16 2.02882903941396e-16 1.11022302462516e-16 1.37409e-08 1.10860002153672e-15 1.13716602209167e-16 2.20887504291171e-16 0.4 9.63202e-05 5.34640010386425e-15 4.74330009214786e-15 2.93163705695277e-16 0.8 0.0001900556 5.78740011243154e-15 5.17000010043734e-15 4.02706607823362e-16 1.2 0.0002034129 5.5833001084665e-15 4.87730009475107e-15 5.32824110351148e-16 -1.2 9.887e-19 6.53320012692016e-15 1.08339502104706e-16 1.08339502104706e-16 -0.8 1.881601e-16 2.65080005149696e-15 1.43089002779783e-16 1.43089002779783e-16 -0.4 2.422412e-13 1.48170002878491e-15 1.61026003128244e-16 1.61026003128244e-16 1.11022302462516e-16 -1.464222e-10 2.57440005001274e-15 9.37773218218075e-16 9.37773218218075e-16 0.4 -1.47878e-08 7.20260013992456e-15 3.51100006820803e-15 3.51100006820803e-15 0.8 -7.10424e-08 7.48010014531554e-15 3.67310007135714e-15 3.67310007135714e-15 1.2 -2.36349e-07 7.29320014168464e-15 3.58740006969225e-15 3.58740006969225e-15 -1.2 2.9624e-15 6.19240012029946e-15 1.33193202587538e-16 8.18786015906516e-17 -0.8 6.371693e-13 2.55190004957564e-15 1.03801702016551e-16 1.74290103385925e-16 -0.4 1.122e-09 1.42520002768729e-15 1.07379902086064e-16 1.99837703882237e-16 1.11022302462516e-16 3.1941e-06 1.83180003558629e-15 8.64663116797768e-16 2.20927204291942e-16 0.4 5.25245e-05 5.00200009717361e-15 4.33670008424886e-15 3.27824306368627e-16 0.8 8.84353e-05 5.56180010804882e-15 4.76920009265102e-15 5.48672410659032e-16 1.2 8.51653e-05 5.87400011411391e-15 4.66430009061313e-15 1.02480001990874e-15 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvg_ig_lt.standard0000644000175000017500000000630014163340332024625 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) 0.25 1.2019e-06 1.887896e-10 -2.14e-12 -1.202e-06 0.35 2.5386e-06 6.525854e-10 -1.4527e-12 -2.5392e-06 0.45 3.9344e-06 1.5557e-09 -1.1279e-12 -3.9359e-06 0.55 5.2446e-06 3.0698e-09 -9.724335e-13 -5.2476e-06 0.65 6.4087e-06 5.4189e-09 -8.948548e-13 -6.4141e-06 0.75 7.4048e-06 8.893e-09 -8.573056e-13 -7.4137e-06 0.85 8.2318e-06 1.38655e-08 -8.431842e-13 -8.2457e-06 0.95 8.8998e-06 2.08144e-08 -8.468511e-13 -8.9207e-06 1.05000 9.4246e-06 3.0349e-08 -8.758183e-13 -9.4549e-06 1.15000 9.8237e-06 4.32434e-08 -9.694468e-13 -9.867e-06 0.25 2.6941e-06 7.89172e-11 -2.8094e-12 -2.6941e-06 0.35 7.2945e-06 2.166122e-10 -2.243e-12 -7.2947e-06 0.45 1.43811e-05 4.200709e-10 -1.8385e-12 -1.43816e-05 0.55 2.36821e-05 6.83524e-10 -1.5807e-12 -2.36828e-05 0.65 3.4801e-05 1.0055e-09 -1.4182e-12 -3.4802e-05 0.75 4.73215e-05 1.3868e-09 -1.3159e-12 -4.73229e-05 0.85 6.08566e-05 1.8302e-09 -1.2521e-12 -6.08584e-05 0.95 7.50614e-05 2.342e-09 -1.2138e-12 -7.50638e-05 1.05000 8.9626e-05 2.9354e-09 -1.1925e-12 -8.9629e-05 1.15000 0.000104256 3.6358e-09 -1.1828e-12 -0.0001042596 0.25 9.87962e-07 4.87587e-11 -1.0114e-12 -9.880097e-07 0.35 2.9992e-06 2.356922e-10 -6.182119e-13 -2.9995e-06 0.45 5.1908e-06 6.31284e-10 -4.429911e-13 -5.1915e-06 0.55 7.2336e-06 1.3135e-09 -3.659902e-13 -7.2349e-06 0.65 9.0229e-06 2.3879e-09 -3.290638e-13 -9.0253e-06 0.75 1.05304e-05 3.9922e-09 -3.109904e-13 -1.05344e-05 0.85 1.17621e-05 6.3045e-09 -3.030305e-13 -1.17684e-05 0.95 1.27408e-05 9.5532e-09 -3.014332e-13 -1.27504e-05 1.05000 1.3497e-05 1.40298e-08 -3.066139e-13 -1.3511e-05 1.15000 1.40623e-05 2.01054e-08 -3.322842e-13 -1.40824e-05 0.25 1.9568e-06 2.70054e-11 -1.1531e-12 -1.9568e-06 0.35 7.5624e-06 9.73078e-11 -8.755121e-13 -7.5625e-06 0.45 1.71681e-05 2.089659e-10 -6.837174e-13 -1.71683e-05 0.55 3.02012e-05 3.587251e-10 -5.68375e-13 -3.02016e-05 0.65 4.58978e-05 5.458804e-10 -4.992817e-13 -4.58983e-05 0.75 6.35389e-05 7.698705e-10 -4.576458e-13 -6.35396e-05 0.85 8.25246e-05 1.0298e-09 -4.327936e-13 -8.25256e-05 0.95 0.0001023748 1.3251e-09 -4.185963e-13 -0.0001023761 1.05000 0.0001227038 1.6562e-09 -4.114149e-13 -0.0001227055 1.15000 0.0001431861 2.0263e-09 -4.090079e-13 -0.0001431881 0.25 1.3844e-06 8.825562e-10 -4.5173e-12 -1.3853e-06 0.35 2.2025e-06 2.3102e-09 -3.621e-12 -2.2048e-06 0.45 3.0254e-06 4.8417e-09 -3.1357e-12 -3.0302e-06 0.55 3.7998e-06 8.9051e-09 -2.8817e-12 -3.8087e-06 0.65 4.4972e-06 1.50506e-08 -2.7562e-12 -4.5123e-06 0.75 5.1045e-06 2.39854e-08 -2.709e-12 -5.1285e-06 0.85 5.6182e-06 3.66154e-08 -2.7198e-12 -5.6548e-06 0.95 6.041e-06 5.4096e-08 -2.7942e-12 -6.0951e-06 1.05000 6.3788e-06 7.78964e-08 -2.9765e-12 -6.4567e-06 1.15000 6.6391e-06 1.098773e-07 -3.3766e-12 -6.749e-06 0.25 3.9938e-06 2.535056e-10 -7.2185e-12 -3.9941e-06 0.35 7.8388e-06 5.603278e-10 -6.1999e-12 -7.8394e-06 0.45 1.30849e-05 9.956153e-10 -5.3929e-12 -1.30859e-05 0.55 1.95846e-05 1.5693e-09 -4.8222e-12 -1.95861e-05 0.65 2.71193e-05 2.3041e-09 -4.428e-12 -2.71216e-05 0.75 3.54352e-05 3.2359e-09 -4.1579e-12 -3.54384e-05 0.85 4.42679e-05 4.4141e-09 -3.9755e-12 -4.42723e-05 0.95 5.33586e-05 5.9049e-09 -3.8568e-12 -5.33645e-05 1.05000 6.24646e-05 7.7946e-09 -3.7875e-12 -6.24724e-05 1.15000 7.13672e-05 1.01955e-08 -3.7617e-12 -7.13774e-05 tmp_ns50wwy/tests/bsimbulk/nmos/reference/Idvd_core_st.standard0000644000175000017500000001254714163340332025174 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) 0. 0. 0. 0. 0. 0.1 1.8848e-06 0. 0. -1.8848e-06 0.2 2.1784e-06 0. 0. -2.1784e-06 0.3 2.4297e-06 0. 0. -2.4297e-06 0.4 2.6688e-06 0. 0. -2.6688e-06 0.5 2.9045e-06 0. 0. -2.9045e-06 0.6 3.1408e-06 0. 0. -3.1408e-06 0.7 3.38e-06 0. 0. -3.38e-06 0.8 3.6235e-06 0. 0. -3.6235e-06 0.9 3.8723e-06 0. 0. -3.8723e-06 1.00000 4.1269e-06 0. 0. -4.1269e-06 1.10000 4.3878e-06 0. 0. -4.3878e-06 1.20000 4.6554e-06 0. 0. -4.6554e-06 0. 0. 0. 0. 0. 0.1 5.08104e-05 0. 0. -5.08104e-05 0.2 6.49605e-05 0. 0. -6.49605e-05 0.3 7.02204e-05 0. 0. -7.02204e-05 0.4 7.41828e-05 0. 0. -7.41828e-05 0.5 7.75585e-05 0. 0. -7.75585e-05 0.6 8.05814e-05 0. 0. -8.05814e-05 0.7 8.33686e-05 0. 0. -8.33686e-05 0.8 8.59879e-05 0. 0. -8.59879e-05 0.9 8.84827e-05 0. 0. -8.84827e-05 1.00000 9.08819e-05 0. 0. -9.08819e-05 1.10000 9.3206e-05 0. 0. -9.3206e-05 1.20000 9.54701e-05 0. 0. -9.54701e-05 0. 0. 0. 0. 0. 0.1 0.0001165368 0. 0. -0.0001165368 0.2 0.0001809148 0. 0. -0.0001809148 0.3 0.0002023956 0. 0. -0.0002023956 0.4 0.0002139213 0. 0. -0.0002139213 0.5 0.0002226436 0. 0. -0.0002226436 0.6 0.0002299367 0. 0. -0.0002299367 0.7 0.0002363188 0. 0. -0.0002363188 0.8 0.0002420615 0. 0. -0.0002420615 0.9 0.0002473296 0. 0. -0.0002473296 1.00000 0.0002522315 0. 0. -0.0002522315 1.10000 0.0002568428 0. 0. -0.0002568428 1.20000 0.000261218 0. 0. -0.000261218 0. 0. 0. 0. 0. 0.1 0.0001629112 0. 0. -0.0001629112 0.2 0.000279901 0. 0. -0.000279901 0.3 0.0003354186 0. 0. -0.0003354186 0.4 0.0003599081 0. 0. -0.0003599081 0.5 0.0003757025 0. 0. -0.0003757025 0.6 0.0003880726 0. 0. -0.0003880726 0.7 0.0003985118 0. 0. -0.0003985118 0.8 0.0004076615 0. 0. -0.0004076615 0.9 0.0004158751 0. 0. -0.0004158751 1.00000 0.0004233747 0. 0. -0.0004233747 1.10000 0.0004303107 0. 0. -0.0004303107 1.20000 0.0004367906 0. 0. -0.0004367906 0. 0. 0. 0. 0. 0.1 4.217617e-07 0. 0. -4.217617e-07 0.2 5.035164e-07 0. 0. -5.035164e-07 0.3 5.819925e-07 0. 0. -5.819925e-07 0.4 6.620434e-07 0. 0. -6.620434e-07 0.5 7.454917e-07 0. 0. -7.454917e-07 0.6 8.333086e-07 0. 0. -8.333086e-07 0.7 9.261304e-07 0. 0. -9.261304e-07 0.8 1.0244e-06 0. 0. -1.0244e-06 0.9 1.1286e-06 0. 0. -1.1286e-06 1.00000 1.239e-06 0. 0. -1.239e-06 1.10000 1.356e-06 0. 0. -1.356e-06 1.20000 1.4798e-06 0. 0. -1.4798e-06 0. 0. 0. 0. 0. 0.1 5.56189e-05 0. 0. -5.56189e-05 0.2 6.66433e-05 0. 0. -6.66433e-05 0.3 7.19763e-05 0. 0. -7.19763e-05 0.4 7.62155e-05 0. 0. -7.62155e-05 0.5 7.98915e-05 0. 0. -7.98915e-05 0.6 8.32258e-05 0. 0. -8.32258e-05 0.7 8.63333e-05 0. 0. -8.63333e-05 0.8 8.9281e-05 0. 0. -8.9281e-05 0.9 9.21114e-05 0. 0. -9.21114e-05 1.00000 9.4853e-05 0. 0. -9.4853e-05 1.10000 9.75259e-05 0. 0. -9.75259e-05 1.20000 0.0001001445 0. 0. -0.0001001445 0. 0. 0. 0. 0. 0.1 0.0001422216 0. 0. -0.0001422216 0.2 0.0002097043 0. 0. -0.0002097043 0.3 0.0002294793 0. 0. -0.0002294793 0.4 0.0002419981 0. 0. -0.0002419981 0.5 0.0002518586 0. 0. -0.0002518586 0.6 0.0002601861 0. 0. -0.0002601861 0.7 0.0002675077 0. 0. -0.0002675077 0.8 0.0002741191 0. 0. -0.0002741191 0.9 0.0002802034 0. 0. -0.0002802034 1.00000 0.0002858818 0. 0. -0.0002858818 1.10000 0.0002912388 0. 0. -0.0002912388 1.20000 0.0002963351 0. 0. -0.0002963351 0. 0. 0. 0. 0. 0.1 0.0002021993 0. 0. -0.0002021993 0.2 0.0003366094 0. 0. -0.0003366094 0.3 0.0003907439 0. 0. -0.0003907439 0.4 0.0004153399 0. 0. -0.0004153399 0.5 0.0004328878 0. 0. -0.0004328878 0.6 0.0004470627 0. 0. -0.0004470627 0.7 0.0004591282 0. 0. -0.0004591282 0.8 0.0004697343 0. 0. -0.0004697343 0.9 0.0004792693 0. 0. -0.0004792693 1.00000 0.000487985 0. 0. -0.000487985 1.10000 0.0004960544 0. 0. -0.0004960544 1.20000 0.0005036012 0. 0. -0.0005036012 0. 0. 0. 0. 0. 0.1 6.8993e-06 0. 0. -6.8993e-06 0.2 8.3041e-06 0. 0. -8.3041e-06 0.3 9.1086e-06 0. 0. -9.1086e-06 0.4 9.7671e-06 0. 0. -9.7671e-06 0.5 1.03618e-05 0. 0. -1.03618e-05 0.6 1.09219e-05 0. 0. -1.09219e-05 0.7 1.14613e-05 0. 0. -1.14613e-05 0.8 1.19875e-05 0. 0. -1.19875e-05 0.9 1.25054e-05 0. 0. -1.25054e-05 1.00000 1.3018e-05 0. 0. -1.3018e-05 1.10000 1.35276e-05 0. 0. -1.35276e-05 1.20000 1.40357e-05 0. 0. -1.40357e-05 0. 0. 0. 0. 0. 0.1 4.67727e-05 0. 0. -4.67727e-05 0.2 6.55825e-05 0. 0. -6.55825e-05 0.3 7.38374e-05 0. 0. -7.38374e-05 0.4 7.89565e-05 0. 0. -7.89565e-05 0.5 8.28115e-05 0. 0. -8.28115e-05 0.6 8.60177e-05 0. 0. -8.60177e-05 0.7 8.88356e-05 0. 0. -8.88356e-05 0.8 9.13964e-05 0. 0. -9.13964e-05 0.9 9.37746e-05 0. 0. -9.37746e-05 1.00000 9.60167e-05 0. 0. -9.60167e-05 1.10000 9.81535e-05 0. 0. -9.81535e-05 1.20000 0.0001002066 0. 0. -0.0001002066 0. 0. 0. 0. 0. 0.1 9.22922e-05 0. 0. -9.22922e-05 0.2 0.0001455986 0. 0. -0.0001455986 0.3 0.0001722362 0. 0. -0.0001722362 0.4 0.0001876164 0. 0. -0.0001876164 0.5 0.000198064 0. 0. -0.000198064 0.6 0.0002060083 0. 0. -0.0002060083 0.7 0.000212509 0. 0. -0.000212509 0.8 0.0002180905 0. 0. -0.0002180905 0.9 0.0002230419 0. 0. -0.0002230419 1.00000 0.0002275362 0. 0. -0.0002275362 1.10000 0.0002316843 0. 0. -0.0002316843 1.20000 0.0002355611 0. 0. -0.0002355611 0. 0. 0. 0. 0. 0.1 0.0001256408 0. 0. -0.0001256408 0.2 0.0002131861 0. 0. -0.0002131861 0.3 0.0002639107 0. 0. -0.0002639107 0.4 0.0002941019 0. 0. -0.0002941019 0.5 0.0003140578 0. 0. -0.0003140578 0.6 0.000328584 0. 0. -0.000328584 0.7 0.0003399623 0. 0. -0.0003399623 0.8 0.0003493618 0. 0. -0.0003493618 0.9 0.0003574304 0. 0. -0.0003574304 1.00000 0.0003645532 0. 0. -0.0003645532 1.10000 0.0003709734 0. 0. -0.0003709734 1.20000 0.0003768527 0. 0. -0.0003768527 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvg_gidl_lw.standard0000644000175000017500000000626614163340332025212 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.37174602664884e-13 2.137700041529e-15 2.137700041529e-15 -0.8 0. 4.93137009580149e-14 2.85190005540372e-15 2.85190005540372e-15 -0.4 0. 3.01819005863423e-14 3.15770006134449e-15 3.15770006134449e-15 1.11022302462516e-16 0. 2.57805005008365e-14 3.86590007510265e-15 3.86590007510265e-15 0.4 0. 1.43545802788657e-13 6.9879001357536e-14 6.9879001357536e-14 0.8 0. 1.50720302928036e-13 7.4121201439949e-14 7.4121201439949e-14 1.2 0. 1.45926902834915e-13 7.18834013964753e-14 7.18834013964753e-14 -1.2 -1.45393e-07 1.30365002532595e-13 2.42000004701322e-15 1.81680003529489e-15 -0.8 -7.73583e-08 4.75765009242664e-14 1.99590003877425e-15 3.54410006885106e-15 -0.4 -3.64087e-08 2.90163005636983e-14 1.97250003831966e-15 4.05430007876269e-15 1.11022302462516e-16 2.0301e-06 2.43008004720905e-14 2.44050004741148e-15 4.44460008634503e-15 0.4 0.0012031 9.93221019295257e-14 8.6169101674003e-14 5.91580011492596e-15 0.8 0.0025195 1.09566002128533e-13 9.64033018728223e-14 8.09300015722232e-15 1.2 0.0027517 1.08851302114649e-13 9.28616018040178e-14 1.197100023256e-14 -1.2 0. 1.42874602775618e-13 2.15370004183983e-15 2.15370004183983e-15 -0.8 0. 4.5032900874852e-14 2.89800005629931e-15 2.89800005629931e-15 -0.4 0. 2.93105005694137e-14 3.17370006165532e-15 3.17370006165532e-15 1.11022302462516e-16 0. 2.47177004801896e-14 3.50660006812255e-15 3.50660006812255e-15 0.4 0. 1.47786802871047e-13 7.21106014008891e-14 7.21106014008891e-14 0.8 0. 1.5376680298722e-13 7.57375014713488e-14 7.57375014713488e-14 1.2 0. 1.478204028717e-13 7.29020014162636e-14 7.29020014162636e-14 -1.2 -1.45166e-07 1.3595390264117e-13 2.29530004459068e-15 1.96910003825361e-15 -0.8 -7.72151e-08 4.34358008438252e-14 2.04230003967566e-15 3.58680006968059e-15 -0.4 -3.63457e-08 2.81656005471718e-14 1.97770003842068e-15 4.07970007925614e-15 1.11022302462516e-16 6.51546e-08 2.35486004574775e-14 2.0363000395591e-15 4.46570008675494e-15 0.4 0.0016056 1.02743901996001e-13 9.00597017495854e-14 5.7435001115787e-15 0.8 0.0035301 1.13905902212844e-13 1.01430001970476e-13 7.89900015345349e-15 1.2 0.0038553 1.09800202133083e-13 9.59835018646668e-14 1.02021001981957e-14 -1.2 0. 1.3058250253682e-13 2.10260004084711e-15 2.10260004084711e-15 -0.8 0. 5.69288011059531e-14 2.76490005371358e-15 2.76490005371358e-15 -0.4 0. 3.18045006178645e-14 3.13130006083161e-15 3.13130006083161e-15 1.11022302462516e-16 0. 4.09020007946012e-14 1.20155002334245e-14 1.20155002334245e-14 0.4 0. 1.39205202704333e-13 6.7606901313396e-14 6.7606901313396e-14 0.8 0. 1.46314802842451e-13 7.17841013945462e-14 7.17841013945462e-14 1.2 0. 1.42897302776059e-13 7.02588013649143e-14 7.02588013649143e-14 -1.2 -1.457562e-07 1.23908302407161e-13 2.59360005038574e-15 1.58000003069458e-15 -0.8 -7.75794e-08 5.47775010641599e-14 1.91820003726478e-15 3.45630006714537e-15 -0.4 -2.4941e-08 3.06023005945094e-14 1.96180003811179e-15 4.01300007796036e-15 1.11022302462516e-16 3.34617e-05 3.20921006234517e-14 1.04838002036683e-14 4.42690008600117e-15 0.4 0.0009122999 9.66903018783978e-14 8.28458016094414e-14 6.33950012315716e-15 0.8 0.0016572 1.08590702109586e-13 9.30499018076759e-14 1.02674001994643e-14 1.2 0.0016516 1.14311002220714e-13 9.15499017785355e-14 1.88276003657629e-14 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1d_lw.standard0000644000175000017500000004443714163340332025143 0ustar carstencarstenFreq N(d) 100.00000 1.08341039104e-21 125.89254 8.6134619169e-22 158.48932 6.8495788089e-22 199.52623 5.44848964e-22 251.18864 4.33555684e-22 316.22777 3.4515323089e-22 398.10717 2.74929561e-22 501.18723 2.1914953369e-22 630.95734 1.7484508441e-22 794.32823 1.3965094276e-22 1000 1.1169319225e-22 1258.93 8.948781604e-23 1584.89 7.184935696e-23 1995.26 5.783754601e-23 2511.89 4.670902336e-23 3162.28 3.786802369e-23 3981.07 3.084580521e-23 5011.87 2.526771289e-23 6309.57 2.083739904e-23 7943.28 1.731808225e-23 10000 1.452219664e-23 12589.25 1.230185476e-23 15848.93 1.053781444e-23 19952.62 9.13671529e-24 25118.86 8.02418929e-24 31622.78 7.14011841e-24 39810.72 6.43789129e-24 50118.72 5.88014001e-24 63095.73 5.43682489e-24 79432.82 5.085025e-24 100000 4.80530241e-24 125892.54 4.58345281e-24 158489.32 4.40706049e-24 199526.23 4.26670336e-24 251188.64 4.15548225e-24 316227.77 4.06707889e-24 398107.17 3.99680064e-24 501187.23 3.94101904e-24 630957.34 3.896676e-24 794328.23 3.86161801e-24 1000000 3.833764e-24 1258930 3.81147529e-24 1584890 3.79392484e-24 1995260 3.77991364e-24 2511890 3.76864569e-24 3162280 3.759721e-24 3981070 3.75274384e-24 5011870 3.74732164e-24 6309570 3.74267716e-24 7943280 3.73919569e-24 10000000 3.736489e-24 12589250 3.73416976e-24 15848930 3.732624e-24 19952620 3.73107856e-24 25118860 3.72991969e-24 31622780 3.72914721e-24 39810720 3.72837481e-24 50118720 3.72798864e-24 63095730 3.72721636e-24 79432820 3.72721636e-24 100000000 3.72683025e-24 100.00000 5.892722265049e-20 125.89254 4.681113033744e-20 158.48932 3.718695705664e-20 199.52623 2.954221876225e-20 251.18864 2.346978040225e-20 316.22777 1.864628484196e-20 398.10717 1.481483334244e-20 501.18723 1.177140371521e-20 630.95734 9.35392662649e-21 794.32823 7.43364698596e-21 1000 5.90832046336e-21 1258.93 4.69671726276e-21 1584.89 3.73429765921e-21 1995.26 2.96982491521e-21 2511.89 2.36258212096e-21 3162.28 1.88022835456e-21 3981.07 1.49708634084e-21 5011.87 1.19274220321e-21 6309.57 9.5099457924e-22 7943.28 7.5896393049e-22 10000 6.0643495081e-22 12589.25 4.8527243521e-22 15848.93 3.8902828644e-22 19952.62 3.125824e-22 25118.86 2.518569e-22 31622.78 2.0362433809e-22 39810.72 1.6530759184e-22 50118.72 1.3487570496e-22 63095.73 1.1069985796e-22 79432.82 9.149687716e-23 100000 7.624433124e-23 125892.54 6.4128064e-23 158489.32 5.450425929e-23 199526.23 4.685813209e-23 251188.64 4.078610496e-23 316227.77 3.596280961e-23 398107.17 3.213189225e-23 501187.23 2.908768489e-23 630957.34 2.667102736e-23 794328.23 2.4750625e-23 1000000 2.322468864e-23 1258930 2.201298724e-23 1584890 2.105066161e-23 1995260 2.0286016e-23 2511890 1.967898321e-23 3162280 1.919666596e-23 3981070 1.881390625e-23 5011870 1.850892484e-23 6309570 1.826793081e-23 7943280 1.807525225e-23 10000000 1.792336896e-23 12589250 1.780164864e-23 15848930 1.770558084e-23 19952620 1.762908169e-23 25118860 1.756867225e-23 31622780 1.752008449e-23 39810720 1.748159721e-23 50118720 1.745150625e-23 63095730 1.742728516e-23 79432820 1.740808729e-23 100000000 1.739307025e-23 100.00000 3.3809328947241e-19 125.89254 2.6856326571481e-19 158.48932 2.1333368865636e-19 199.52623 1.6946321461281e-19 251.18864 1.3461568338001e-19 316.22777 1.0693527849216e-19 398.10717 8.494794063889e-20 501.18723 6.748284280516e-20 630.95734 5.360975282884e-20 794.32823 4.259002150225e-20 1000 3.383671954576e-20 1258.93 2.688370140625e-20 1584.89 2.136075787024e-20 1995.26 1.697371220224e-20 2511.89 1.348894093561e-20 3162.28 1.072090434724e-20 3981.07 8.52217000336e-21 5011.87 6.77566044736e-21 6309.57 5.38835274916e-21 7943.28 4.28638637025e-21 10000 3.41105057764e-21 12589.25 2.71575434641e-21 15848.93 2.163459169e-21 19952.62 1.72474920601e-21 25118.86 1.37627644324e-21 31622.78 1.09947285889e-21 39810.72 8.79596964e-22 50118.72 7.0494498064e-22 63095.73 5.6621630209e-22 79432.82 4.5601894116e-22 100000 3.68486416e-22 125892.54 2.9895447409e-22 158489.32 2.4372517689e-22 199526.23 1.99854769e-22 251188.64 1.6500687025e-22 316227.77 1.3732792969e-22 398107.17 1.1533900816e-22 501187.23 9.787540624e-23 630957.34 8.400089104e-23 794328.23 7.298114041e-23 1000000 6.422900449e-23 1258930 5.727613761e-23 1584890 5.175219721e-23 1995260 4.736605329e-23 2511890 4.388135049e-23 3162280 4.111246161e-23 3981070 3.891389161e-23 5011870 3.716731225e-23 6309570 3.578073489e-23 7943280 3.467796544e-23 10000000 3.3802596e-23 12589250 3.310736521e-23 15848930 3.255501249e-23 19952620 3.211715584e-23 25118860 3.176787769e-23 31622780 3.149117689e-23 39810720 3.127158241e-23 50118720 3.109735225e-23 63095730 3.0958096e-23 79432820 3.084802681e-23 100000000 3.076033444e-23 100.00000 9.4440009900625e-19 125.89254 7.5017199595009e-19 158.48932 5.9589105482404e-19 199.52623 4.7334138560361e-19 251.18864 3.7599682532164e-19 316.22777 2.986731801e-19 398.10717 2.3725286881321e-19 501.18723 1.8846494975025e-19 630.95734 1.4971141993536e-19 794.32823 1.1892828165604e-19 1000 9.447643984804e-20 1258.93 7.505364326464e-20 1584.89 5.962553283556e-20 1995.26 4.737056484484e-20 2511.89 3.763611640009e-20 3162.28 2.9903747329e-20 3981.07 2.376172922256e-20 5011.87 1.888293719104e-20 6309.57 1.500757302916e-20 7943.28 1.192924868521e-20 10000 9.48407195044e-21 12589.25 7.54179349225e-21 15848.93 5.99898269961e-21 19952.62 4.77348337216e-21 25118.86 3.80004438025e-21 31622.78 3.02680426896e-21 39810.72 2.41259757124e-21 50118.72 1.92471728656e-21 63095.73 1.53718100761e-21 79432.82 1.22935085641e-21 100000 9.8483620041e-22 125892.54 7.9060505329e-22 158489.32 6.3632585025e-22 199526.23 5.1377475556e-22 251188.64 4.1643340489e-22 316227.77 3.3910854201e-22 398107.17 2.77688896e-22 501187.23 2.2889874436e-22 630957.34 1.9014479449e-22 794328.23 1.5936285121e-22 1000000 1.3491054801e-22 1258930 1.1548726225e-22 1584890 1.00060009e-22 1995260 8.780439616e-23 2511890 7.807136164e-23 3162280 7.033841424e-23 3981070 6.419695129e-23 5011870 5.931772324e-23 6309570 5.5442916e-23 7943280 5.236403769e-23 10000000 4.991846409e-23 12589250 4.797640225e-23 15848930 4.643332164e-23 19952620 4.520814169e-23 25118860 4.423447081e-23 31622780 4.346105625e-23 39810720 4.284749764e-23 50118720 4.235927056e-23 63095730 4.197225796e-23 79432820 4.166444304e-23 100000000 4.141952164e-23 100.00000 4.7131975801e-22 125.89254 3.7482121609e-22 158.48932 2.9817000976e-22 199.52623 2.37283216e-22 251.18864 1.8891952704e-22 316.22777 1.50503824e-22 398.10717 1.19990116e-22 501.18723 9.575013904e-23 630.95734 7.649601444e-23 794.32823 6.120245824e-23 1000 4.905461521e-23 1258.93 3.940449529e-23 1584.89 3.173970244e-23 1995.26 2.565118609e-23 2511.89 2.081458129e-23 3162.28 1.697275204e-23 3981.07 1.392185344e-23 5011.87 1.149752464e-23 6309.57 9.57221721e-24 7943.28 8.042896e-24 10000 6.82829161e-24 12589.25 5.86317796e-24 15848.93 5.09675776e-24 19952.62 4.48761856e-24 25118.86 4.004001e-24 31622.78 3.61988676e-24 39810.72 3.31494849e-24 50118.72 3.07230784e-24 63095.73 2.879809e-24 79432.82 2.72712196e-24 100000 2.60564164e-24 125892.54 2.509056e-24 158489.32 2.43235216e-24 199526.23 2.3716e-24 251188.64 2.32318564e-24 316227.77 2.28463225e-24 398107.17 2.25420196e-24 501187.23 2.22994489e-24 630957.34 2.21057424e-24 794328.23 2.19543489e-24 1000000 2.18330176e-24 1258930 2.17356049e-24 1584890 2.16590089e-24 1995260 2.15972416e-24 2511890 2.155024e-24 3162280 2.15120889e-24 3981070 2.14798336e-24 5011870 2.14563904e-24 6309570 2.14388164e-24 7943280 2.14212496e-24 10000000 2.14095424e-24 12589250 2.14007641e-24 15848930 2.13919876e-24 19952620 2.13861376e-24 25118860 2.13832129e-24 31622780 2.13773641e-24 39810720 2.137444e-24 50118720 2.13715161e-24 63095730 2.13715161e-24 79432820 2.13685924e-24 100000000 2.13685924e-24 100.00000 8.345032555729e-20 125.89254 6.629054343025e-20 158.48932 5.266006069284e-20 199.52623 4.183297086721e-20 251.18864 3.323270664256e-20 316.22777 2.640127773409e-20 398.10717 2.097488889441e-20 501.18723 1.666453791744e-20 630.95734 1.324071366489e-20 794.32823 1.052107672729e-20 1000 8.36079811876e-21 1258.93 6.64480934649e-21 1584.89 5.28177190564e-21 1995.26 4.19905296001e-21 2511.89 3.33902532649e-21 3162.28 2.65588714609e-21 3981.07 2.11325009401e-21 5011.87 1.68221381904e-21 6309.57 1.33983085369e-21 7943.28 1.06786475524e-21 10000 8.5184010769e-22 12589.25 6.8023942596e-22 15848.93 5.4393434176e-22 19952.62 4.3566543076e-22 25118.86 3.4966008064e-22 31622.78 2.8134694756e-22 39810.72 2.2708380249e-22 50118.72 1.8397938321e-22 63095.73 1.4974172161e-22 79432.82 1.225449e-22 100000 1.00942209e-22 125892.54 8.378290089e-23 158489.32 7.015235049e-23 199526.23 5.932542529e-23 251188.64 5.072430841e-23 316227.77 4.389327504e-23 398107.17 3.846604441e-23 501187.23 3.415584249e-23 630957.34 3.073260969e-23 794328.23 2.801267329e-23 1000000 2.585214025e-23 1258930 2.413658641e-23 1584890 2.277389284e-23 1995260 2.169044329e-23 2511890 2.083100881e-23 3162280 2.014752996e-23 3981070 1.960541284e-23 5011870 1.917388944e-23 6309570 1.883126025e-23 7943280 1.855972561e-23 10000000 1.834323241e-23 12589250 1.817231641e-23 15848930 1.803531024e-23 19952620 1.792760281e-23 25118860 1.784133121e-23 31622780 1.777296964e-23 39810720 1.771904836e-23 50118720 1.767613849e-23 63095730 1.764168004e-23 79432820 1.761396961e-23 100000000 1.759299136e-23 100.00000 5.1336121595929e-19 125.89254 4.0778403325209e-19 158.48932 3.2392102256836e-19 199.52623 2.5730621471296e-19 251.18864 2.0439223992576e-19 316.22777 1.6236120771649e-19 398.10717 1.2897471603025e-19 501.18723 1.0245491936164e-19 630.95734 8.138947117456e-20 794.32823 6.465658930756e-20 1000 5.136519099321e-20 1258.93 4.080747447396e-20 1584.89 3.242117145744e-20 1995.26 2.575970430289e-20 2511.89 2.046828094276e-20 3162.28 1.6265176225e-20 3981.07 1.292653028601e-20 5011.87 1.027455913225e-20 6309.57 8.16802020441e-21 7943.28 6.49473198201e-21 10000 5.165584384e-21 12589.25 4.10982284241e-21 15848.93 3.27118795249e-21 19952.62 2.60504076816e-21 25118.86 2.075895844e-21 31622.78 1.65558658321e-21 39810.72 1.32172238025e-21 50118.72 1.05652951849e-21 63095.73 8.4587323921e-22 79432.82 6.7854519121e-22 100000 5.4562886569e-22 125892.54 4.4005131076e-22 158489.32 3.56190129e-22 199526.23 2.8957488561e-22 251188.64 2.3666130244e-22 316227.77 1.94630401e-22 398107.17 1.6124428324e-22 501187.23 1.34722449e-22 630957.34 1.13656921e-22 794328.23 9.692599401e-23 1000000 8.363285401e-23 1258930 7.307514256e-23 1584890 6.4689849e-23 1995260 5.802782976e-23 2511890 5.2736644e-23 3162280 4.853351556e-23 3981070 4.519469529e-23 5011870 4.254300625e-23 6309570 4.0436881e-23 7943280 3.8763076e-23 10000000 3.743359489e-23 12589250 3.637778596e-23 15848930 3.553948225e-23 19952620 3.487374916e-23 25118860 3.434428816e-23 31622780 3.392363536e-23 39810720 3.359013849e-23 50118720 3.332521984e-23 63095730 3.311427025e-23 79432820 3.294645201e-23 100000000 3.281456656e-23 100.00000 1.43832049e-18 125.89254 1.14233344e-18 158.48932 9.0747133724641e-19 199.52623 7.2083886589729e-19 251.18864 5.7259156052484e-19 316.22777 4.5483451316164e-19 398.10717 3.6129680575209e-19 501.18723 2.8699709698521e-19 630.95734 2.2797884232369e-19 794.32823 1.8109893047184e-19 1000 1.4386082824201e-19 1258.93 1.1428158869136e-19 1584.89 9.078602877184e-20 1995.26 7.212275482624e-20 2511.89 5.729804477401e-20 3162.28 4.552231891216e-20 3981.07 3.616854650809e-20 5011.87 2.873859000516e-20 6309.57 2.283677081856e-20 7943.28 1.814875091929e-20 10000 1.442494679521e-20 12589.25 1.146702588964e-20 15848.93 9.11748071025e-21 19952.62 7.25115262369e-21 25118.86 5.76867592324e-21 31622.78 4.59110590929e-21 39810.72 3.65572599876e-21 50118.72 2.91272851809e-21 63095.73 2.32254597184e-21 79432.82 1.85375024704e-21 100000 1.48137232996e-21 125892.54 1.18557639684e-21 158489.32 9.5061839041e-22 199526.23 7.6398618409e-22 251188.64 6.1573955881e-22 316227.77 4.9798600336e-22 398107.17 4.0444829881e-22 501187.23 3.3014526601e-22 630957.34 2.71129156e-22 794328.23 2.2424763001e-22 1000000 1.8701109504e-22 1258930 1.5743222784e-22 1584890 1.3393664361e-22 1995260 1.1527243225e-22 2511890 1.0044850176e-22 3162280 8.867235556e-23 3981070 7.931861721e-23 5011870 7.188835369e-23 6309570 6.598637824e-23 7943280 6.129793849e-23 10000000 5.757470884e-23 12589250 5.461653409e-23 15848930 5.226711616e-23 19952620 5.040006049e-23 25118860 4.891883364e-23 31622780 4.774119025e-23 39810720 4.680475396e-23 50118720 4.606201161e-23 63095730 4.547209489e-23 79432820 4.500397225e-23 100000000 4.463041636e-23 100.00000 2.58224552964e-21 125.89254 2.05247959849e-21 158.48932 1.631675236e-21 199.52623 1.29742599204e-21 251.18864 1.03191282756e-21 316.22777 8.2101160089e-22 398.10717 6.5348741956e-22 501.18723 5.2041471876e-22 630.95734 4.1471286025e-22 794.32823 3.3075241956e-22 1000 2.6405925001e-22 1258.93 2.1108312369e-22 1584.89 1.6900260001e-22 1995.26 1.3557807844e-22 2511.89 1.0902701056e-22 3162.28 8.793563076e-23 3981.07 7.118465641e-23 5011.87 5.787709929e-23 6309.57 4.7306884e-23 7943.28 3.891014884e-23 10000 3.224081961e-23 12589.25 2.694336649e-23 15848.93 2.273573124e-23 19952.62 1.939345444e-23 25118.86 1.673791744e-23 31622.78 1.462909504e-23 39810.72 1.295352081e-23 50118.72 1.162332649e-23 63095.73 1.056575025e-23 79432.82 9.72628969e-24 100000 9.05949801e-24 125892.54 8.52990436e-24 158489.32 8.10882576e-24 199526.23 7.77461689e-24 251188.64 7.50924409e-24 316227.77 7.29810225e-24 398107.17 7.13050209e-24 501187.23 6.99761209e-24 630957.34 6.89167504e-24 794328.23 6.80792464e-24 1000000 6.74129296e-24 1258930 6.68843044e-24 1584890 6.646084e-24 1995260 6.61261225e-24 2511890 6.58640896e-24 3162280 6.56538129e-24 3981070 6.548481e-24 5011870 6.53518096e-24 6309570 6.52444849e-24 7943280 6.51627729e-24 10000000 6.50964196e-24 12589250 6.50403009e-24 15848930 6.49995025e-24 19952620 6.49638144e-24 25118860 6.49383289e-24 31622780 6.49179441e-24 39810720 6.49026576e-24 50118720 6.48873729e-24 63095730 6.48771841e-24 79432820 6.48669961e-24 100000000 6.48619024e-24 100.00000 4.485263208336e-20 125.89254 3.5631470169e-20 158.48932 2.830688476225e-20 199.52623 2.248872141376e-20 251.18864 1.786718769124e-20 316.22777 1.419619824484e-20 398.10717 1.128020298889e-20 501.18723 8.96396155524e-21 630.95734 7.12410273936e-21 794.32823 5.66263775025e-21 1000 4.50176586304e-21 1258.93 3.57965283204e-21 1584.89 2.84719355281e-21 1995.26 2.265379216e-21 2511.89 1.80322526736e-21 3162.28 1.43612197444e-21 3981.07 1.14452302864e-21 5011.87 9.1289788164e-22 6309.57 7.2891360256e-22 7943.28 5.8276856836e-22 10000 4.6668096784e-22 12589.25 3.7446894144e-22 15848.93 3.0122379364e-22 19952.62 2.4304186404e-22 25118.86 1.9682687025e-22 31622.78 1.6011612369e-22 39810.72 1.3095826969e-22 50118.72 1.0779422976e-22 63095.73 8.9397025e-23 79432.82 7.478271529e-23 100000 6.317388324e-23 125892.54 5.395196304e-23 158489.32 4.662704656e-23 199526.23 4.080909924e-23 251188.64 3.618744336e-23 316227.77 3.251622529e-23 398107.17 2.960121649e-23 501187.23 2.728495225e-23 630957.34 2.544496249e-23 794328.23 2.398354729e-23 1000000 2.282259529e-23 1258930 2.190052804e-23 1584890 2.116736064e-23 1995260 2.058618384e-23 2511890 2.012329881e-23 3162280 1.975624704e-23 3981070 1.946486161e-23 5011870 1.923348736e-23 6309570 1.904973316e-23 7943280 1.890336484e-23 10000000 1.878702336e-23 12589250 1.869524644e-23 15848930 1.862181409e-23 19952620 1.856317225e-23 25118860 1.851753024e-23 31622780 1.848054121e-23 39810720 1.845132025e-23 50118720 1.842813184e-23 63095730 1.841010649e-23 79432820 1.8395521e-23 100000000 1.838351376e-23 100.00000 2.0617366203225e-19 125.89254 1.6377569580241e-19 158.48932 1.3009778106649e-19 199.52623 1.0334649710025e-19 251.18864 8.209720598121e-20 316.22777 6.521828041369e-20 398.10717 5.18108644e-20 501.18723 4.116094361856e-20 630.95734 3.270144189316e-20 794.32823 2.598182924544e-20 1000 2.0644229761e-20 1258.93 1.640443516804e-20 1584.89 1.303666135524e-20 1995.26 1.036152983056e-20 2511.89 8.23659708249e-21 3162.28 6.548693776e-21 3981.07 5.20796042244e-21 5011.87 4.14296908281e-21 6309.57 3.29702194809e-21 7943.28 2.62505596609e-21 10000 2.09129692249e-21 12589.25 1.66731755584e-21 15848.93 1.33054234756e-21 19952.62 1.06302733681e-21 25118.86 8.5053306321e-22 31622.78 6.8174254404e-22 39810.72 5.4766764529e-22 50118.72 4.4117221681e-22 63095.73 3.5657524224e-22 79432.82 2.8938092544e-22 100000 2.3600333376e-22 125892.54 1.9360496164e-22 158489.32 1.5992890369e-22 199526.23 1.3317621604e-22 251188.64 1.1192793616e-22 316227.77 9.504885049e-23 398107.17 8.164026025e-23 501187.23 7.099073536e-23 630957.34 6.253171929e-23 794328.23 5.581135849e-23 1000000 5.047392025e-23 1258930 4.623456016e-23 1584890 4.286713729e-23 1995260 4.019179609e-23 2511890 3.806643204e-23 3162280 3.637899225e-23 3981070 3.503811249e-23 5011870 3.397257796e-23 6309570 3.312693136e-23 7943280 3.245466961e-23 10000000 3.192137001e-23 12589250 3.149678884e-23 15848930 3.115984041e-23 19952620 3.089247561e-23 25118860 3.0680521e-23 31622780 3.051126169e-23 39810720 3.037773456e-23 50118720 3.027090361e-23 63095730 3.018623364e-23 79432820 3.011924161e-23 100000000 3.006548224e-23 100.00000 5.2557947098596e-19 125.89254 4.1749069667904e-19 158.48932 3.3163282185049e-19 199.52623 2.6343336395776e-19 251.18864 2.0926068548004e-19 316.22777 1.6622972728384e-19 398.10717 1.3204909428736e-19 501.18723 1.0489838395204e-19 630.95734 8.333186999076e-20 794.32823 6.620097432025e-20 1000 5.259339555625e-20 1258.93 4.178451103876e-20 1584.89 3.319869846601e-20 1995.26 2.637876215716e-20 2511.89 2.096150900481e-20 3162.28 1.665841955625e-20 3981.07 1.324034544889e-20 5011.87 1.052528261184e-20 6309.57 8.36862699204e-21 7943.28 6.65552482596e-21 10000 5.29477433104e-21 12589.25 4.21387932736e-21 15848.93 3.355305625e-21 19952.62 2.67331395681e-21 25118.86 2.13158579481e-21 31622.78 1.70127376225e-21 39810.72 1.359470641e-21 50118.72 1.08796404649e-21 63095.73 8.7229850409e-22 79432.82 7.0098916644e-22 100000 5.6491307041e-22 125892.54 4.5682222756e-22 158489.32 3.7096686025e-22 199526.23 3.0276696004e-22 251188.64 2.4859198224e-22 316227.77 2.0556103876e-22 398107.17 1.7138213569e-22 501187.23 1.4423049216e-22 630957.34 1.2266448516e-22 794328.23 1.0553247441e-22 1000000 9.192590884e-23 1258930 8.111704225e-23 1584890 7.253077225e-23 1995260 6.571047844e-23 2511890 6.029367201e-23 3162280 5.599079929e-23 3981070 5.257265049e-23 5011870 4.9857721e-23 6309570 4.770112356e-23 7943280 4.598738596e-23 10000000 4.462640809e-23 12589250 4.354548121e-23 15848930 4.268792896e-23 19952620 4.200595344e-23 25118860 4.146329664e-23 31622780 4.103299249e-23 39810720 4.0691641e-23 50118720 4.042034929e-23 63095730 4.020447649e-23 79432820 4.003345984e-23 100000000 3.989690896e-23 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acnoise1g_sw.standard0000644000175000017500000004527114163340332025152 0ustar carstencarstenFreq N(g) 100.00000 3.138688576e-29 125.89254 3.138688576e-29 158.48932 3.138688576e-29 199.52623 3.138688576e-29 251.18864 3.138688576e-29 316.22777 3.138688576e-29 398.10717 3.138688576e-29 501.18723 3.138688576e-29 630.95734 3.138688576e-29 794.32823 3.138688576e-29 1000 3.138688576e-29 1258.93 3.138688576e-29 1584.89 3.138688576e-29 1995.26 3.138688576e-29 2511.89 3.138688576e-29 3162.28 3.138688576e-29 3981.07 3.138688576e-29 5011.87 3.138688576e-29 6309.57 3.138688576e-29 7943.28 3.138688576e-29 10000 3.138688576e-29 12589.25 3.138688576e-29 15848.93 3.138688576e-29 19952.62 3.138688576e-29 25118.86 3.138688576e-29 31622.78 3.138688576e-29 39810.72 3.138688576e-29 50118.72 3.138688576e-29 63095.73 3.138688576e-29 79432.82 3.138688576e-29 100000 3.138688576e-29 125892.54 3.138688576e-29 158489.32 3.138688576e-29 199526.23 3.138688576e-29 251188.64 3.138688576e-29 316227.77 3.138688576e-29 398107.17 3.138688576e-29 501187.23 3.138688576e-29 630957.34 3.138688576e-29 794328.23 3.138688576e-29 1000000 3.138688576e-29 1258930 3.138688576e-29 1584890 3.138688576e-29 1995260 3.138688576e-29 2511890 3.138688576e-29 3162280 3.138688576e-29 3981070 3.138688576e-29 5011870 3.138688576e-29 6309570 3.138688576e-29 7943280 3.138688576e-29 10000000 3.138688576e-29 12589250 3.138688576e-29 15848930 3.138688576e-29 19952620 3.138688576e-29 25118860 3.138688576e-29 31622780 3.138688576e-29 39810720 3.138688576e-29 50118720 3.138688576e-29 63095730 3.138688576e-29 79432820 3.138688576e-29 100000000 3.138688576e-29 100.00000 7.8942455089e-28 125.89254 7.8942455089e-28 158.48932 7.8942455089e-28 199.52623 7.8942455089e-28 251.18864 7.8942455089e-28 316.22777 7.8942455089e-28 398.10717 7.8942455089e-28 501.18723 7.8942455089e-28 630.95734 7.8942455089e-28 794.32823 7.8942455089e-28 1000 7.8942455089e-28 1258.93 7.8942455089e-28 1584.89 7.8942455089e-28 1995.26 7.8942455089e-28 2511.89 7.8942455089e-28 3162.28 7.8942455089e-28 3981.07 7.8942455089e-28 5011.87 7.8942455089e-28 6309.57 7.8942455089e-28 7943.28 7.8942455089e-28 10000 7.8942455089e-28 12589.25 7.8942455089e-28 15848.93 7.8942455089e-28 19952.62 7.8942455089e-28 25118.86 7.8942455089e-28 31622.78 7.8942455089e-28 39810.72 7.8942455089e-28 50118.72 7.8942455089e-28 63095.73 7.8942455089e-28 79432.82 7.8942455089e-28 100000 7.8942455089e-28 125892.54 7.8942455089e-28 158489.32 7.8942455089e-28 199526.23 7.8942455089e-28 251188.64 7.8942455089e-28 316227.77 7.8942455089e-28 398107.17 7.8942455089e-28 501187.23 7.8942455089e-28 630957.34 7.8942455089e-28 794328.23 7.8942455089e-28 1000000 7.8942455089e-28 1258930 7.8942455089e-28 1584890 7.8942455089e-28 1995260 7.8942455089e-28 2511890 7.8942455089e-28 3162280 7.8942455089e-28 3981070 7.8942455089e-28 5011870 7.8942455089e-28 6309570 7.8942455089e-28 7943280 7.8942455089e-28 10000000 7.8942455089e-28 12589250 7.8942455089e-28 15848930 7.8942455089e-28 19952620 7.8942455089e-28 25118860 7.8942455089e-28 31622780 7.8942455089e-28 39810720 7.8942455089e-28 50118720 7.8942455089e-28 63095730 7.8942455089e-28 79432820 7.8942455089e-28 100000000 7.8942455089e-28 100.00000 2.469294864e-27 125.89254 2.469294864e-27 158.48932 2.469294864e-27 199.52623 2.469294864e-27 251.18864 2.469294864e-27 316.22777 2.469294864e-27 398.10717 2.469294864e-27 501.18723 2.469294864e-27 630.95734 2.469294864e-27 794.32823 2.469294864e-27 1000 2.469294864e-27 1258.93 2.469294864e-27 1584.89 2.469294864e-27 1995.26 2.469294864e-27 2511.89 2.469294864e-27 3162.28 2.469294864e-27 3981.07 2.469294864e-27 5011.87 2.469294864e-27 6309.57 2.469294864e-27 7943.28 2.469294864e-27 10000 2.469294864e-27 12589.25 2.469294864e-27 15848.93 2.469294864e-27 19952.62 2.469294864e-27 25118.86 2.469294864e-27 31622.78 2.469294864e-27 39810.72 2.469294864e-27 50118.72 2.469294864e-27 63095.73 2.469294864e-27 79432.82 2.469294864e-27 100000 2.469294864e-27 125892.54 2.469294864e-27 158489.32 2.469294864e-27 199526.23 2.469294864e-27 251188.64 2.469294864e-27 316227.77 2.469294864e-27 398107.17 2.469294864e-27 501187.23 2.469294864e-27 630957.34 2.469294864e-27 794328.23 2.469294864e-27 1000000 2.469294864e-27 1258930 2.469294864e-27 1584890 2.469294864e-27 1995260 2.469294864e-27 2511890 2.469294864e-27 3162280 2.469294864e-27 3981070 2.469294864e-27 5011870 2.469294864e-27 6309570 2.469294864e-27 7943280 2.469294864e-27 10000000 2.469294864e-27 12589250 2.469294864e-27 15848930 2.469294864e-27 19952620 2.469294864e-27 25118860 2.469294864e-27 31622780 2.469294864e-27 39810720 2.469294864e-27 50118720 2.469294864e-27 63095730 2.469294864e-27 79432820 2.469294864e-27 100000000 2.469294864e-27 100.00000 5.34246970084e-27 125.89254 5.34246970084e-27 158.48932 5.34246970084e-27 199.52623 5.34246970084e-27 251.18864 5.34246970084e-27 316.22777 5.34246970084e-27 398.10717 5.34246970084e-27 501.18723 5.34246970084e-27 630.95734 5.34246970084e-27 794.32823 5.34246970084e-27 1000 5.34246970084e-27 1258.93 5.34246970084e-27 1584.89 5.34246970084e-27 1995.26 5.34246970084e-27 2511.89 5.34246970084e-27 3162.28 5.34246970084e-27 3981.07 5.34246970084e-27 5011.87 5.34246970084e-27 6309.57 5.34246970084e-27 7943.28 5.34246970084e-27 10000 5.34246970084e-27 12589.25 5.34246970084e-27 15848.93 5.34246970084e-27 19952.62 5.34246970084e-27 25118.86 5.34246970084e-27 31622.78 5.34246970084e-27 39810.72 5.34246970084e-27 50118.72 5.34246970084e-27 63095.73 5.34246970084e-27 79432.82 5.34246970084e-27 100000 5.34246970084e-27 125892.54 5.34246970084e-27 158489.32 5.34246970084e-27 199526.23 5.34246970084e-27 251188.64 5.34246970084e-27 316227.77 5.34246970084e-27 398107.17 5.34246970084e-27 501187.23 5.34246970084e-27 630957.34 5.34246970084e-27 794328.23 5.34246970084e-27 1000000 5.34246970084e-27 1258930 5.34246970084e-27 1584890 5.34246970084e-27 1995260 5.34246970084e-27 2511890 5.34246970084e-27 3162280 5.34246970084e-27 3981070 5.34246970084e-27 5011870 5.34246970084e-27 6309570 5.34246970084e-27 7943280 5.34246970084e-27 10000000 5.34246970084e-27 12589250 5.34246970084e-27 15848930 5.34246970084e-27 19952620 5.34246970084e-27 25118860 5.34246970084e-27 31622780 5.34246970084e-27 39810720 5.34246970084e-27 50118720 5.34246970084e-27 63095730 5.34246970084e-27 79432820 5.34246970084e-27 100000000 5.34246970084e-27 100.00000 4.79215881e-30 125.89254 4.79215881e-30 158.48932 4.79215881e-30 199.52623 4.79215881e-30 251.18864 4.79215881e-30 316.22777 4.79215881e-30 398.10717 4.79215881e-30 501.18723 4.79215881e-30 630.95734 4.79215881e-30 794.32823 4.79215881e-30 1000 4.79215881e-30 1258.93 4.79215881e-30 1584.89 4.79215881e-30 1995.26 4.79215881e-30 2511.89 4.79215881e-30 3162.28 4.79215881e-30 3981.07 4.79215881e-30 5011.87 4.79215881e-30 6309.57 4.79215881e-30 7943.28 4.79215881e-30 10000 4.79215881e-30 12589.25 4.79215881e-30 15848.93 4.79215881e-30 19952.62 4.79215881e-30 25118.86 4.79215881e-30 31622.78 4.79215881e-30 39810.72 4.79215881e-30 50118.72 4.79215881e-30 63095.73 4.79215881e-30 79432.82 4.79215881e-30 100000 4.79215881e-30 125892.54 4.79215881e-30 158489.32 4.79215881e-30 199526.23 4.79215881e-30 251188.64 4.79215881e-30 316227.77 4.79215881e-30 398107.17 4.79215881e-30 501187.23 4.79215881e-30 630957.34 4.79215881e-30 794328.23 4.79215881e-30 1000000 4.79215881e-30 1258930 4.79215881e-30 1584890 4.79215881e-30 1995260 4.79215881e-30 2511890 4.79215881e-30 3162280 4.79215881e-30 3981070 4.79215881e-30 5011870 4.79215881e-30 6309570 4.79215881e-30 7943280 4.79215881e-30 10000000 4.79215881e-30 12589250 4.79215881e-30 15848930 4.79215881e-30 19952620 4.79215881e-30 25118860 4.79215881e-30 31622780 4.79215881e-30 39810720 4.79215881e-30 50118720 4.79215881e-30 63095730 4.79215881e-30 79432820 4.79215881e-30 100000000 4.79215881e-30 100.00000 4.6299850276e-28 125.89254 4.6299850276e-28 158.48932 4.6299850276e-28 199.52623 4.6299850276e-28 251.18864 4.6299850276e-28 316.22777 4.6299850276e-28 398.10717 4.6299850276e-28 501.18723 4.6299850276e-28 630.95734 4.6299850276e-28 794.32823 4.6299850276e-28 1000 4.6299850276e-28 1258.93 4.6299850276e-28 1584.89 4.6299850276e-28 1995.26 4.6299850276e-28 2511.89 4.6299850276e-28 3162.28 4.6299850276e-28 3981.07 4.6299850276e-28 5011.87 4.6299850276e-28 6309.57 4.6299850276e-28 7943.28 4.6299850276e-28 10000 4.6299850276e-28 12589.25 4.6299850276e-28 15848.93 4.6299850276e-28 19952.62 4.6299850276e-28 25118.86 4.6299850276e-28 31622.78 4.6299850276e-28 39810.72 4.6299850276e-28 50118.72 4.6299850276e-28 63095.73 4.6299850276e-28 79432.82 4.6299850276e-28 100000 4.6299850276e-28 125892.54 4.6299850276e-28 158489.32 4.6299850276e-28 199526.23 4.6299850276e-28 251188.64 4.6299850276e-28 316227.77 4.6299850276e-28 398107.17 4.6299850276e-28 501187.23 4.6299850276e-28 630957.34 4.6299850276e-28 794328.23 4.6299850276e-28 1000000 4.6299850276e-28 1258930 4.6299850276e-28 1584890 4.6299850276e-28 1995260 4.6299850276e-28 2511890 4.6299850276e-28 3162280 4.6299850276e-28 3981070 4.6299850276e-28 5011870 4.6299850276e-28 6309570 4.6299850276e-28 7943280 4.6299850276e-28 10000000 4.6299850276e-28 12589250 4.6299850276e-28 15848930 4.6299850276e-28 19952620 4.6299850276e-28 25118860 4.6299850276e-28 31622780 4.6299850276e-28 39810720 4.6299850276e-28 50118720 4.6299850276e-28 63095730 4.6299850276e-28 79432820 4.6299850276e-28 100000000 4.6299850276e-28 100.00000 1.43683451136e-27 125.89254 1.43683451136e-27 158.48932 1.43683451136e-27 199.52623 1.43683451136e-27 251.18864 1.43683451136e-27 316.22777 1.43683451136e-27 398.10717 1.43683451136e-27 501.18723 1.43683451136e-27 630.95734 1.43683451136e-27 794.32823 1.43683451136e-27 1000 1.43683451136e-27 1258.93 1.43683451136e-27 1584.89 1.43683451136e-27 1995.26 1.43683451136e-27 2511.89 1.43683451136e-27 3162.28 1.43683451136e-27 3981.07 1.43683451136e-27 5011.87 1.43683451136e-27 6309.57 1.43683451136e-27 7943.28 1.43683451136e-27 10000 1.43683451136e-27 12589.25 1.43683451136e-27 15848.93 1.43683451136e-27 19952.62 1.43683451136e-27 25118.86 1.43683451136e-27 31622.78 1.43683451136e-27 39810.72 1.43683451136e-27 50118.72 1.43683451136e-27 63095.73 1.43683451136e-27 79432.82 1.43683451136e-27 100000 1.43683451136e-27 125892.54 1.43683451136e-27 158489.32 1.43683451136e-27 199526.23 1.43683451136e-27 251188.64 1.43683451136e-27 316227.77 1.43683451136e-27 398107.17 1.43683451136e-27 501187.23 1.43683451136e-27 630957.34 1.43683451136e-27 794328.23 1.43683451136e-27 1000000 1.43683451136e-27 1258930 1.43683451136e-27 1584890 1.43683451136e-27 1995260 1.43683451136e-27 2511890 1.43683451136e-27 3162280 1.43683451136e-27 3981070 1.43683451136e-27 5011870 1.43683451136e-27 6309570 1.43683451136e-27 7943280 1.43683451136e-27 10000000 1.43683451136e-27 12589250 1.43683451136e-27 15848930 1.43683451136e-27 19952620 1.43683451136e-27 25118860 1.43683451136e-27 31622780 1.43683451136e-27 39810720 1.43683451136e-27 50118720 1.43683451136e-27 63095730 1.43683451136e-27 79432820 1.43683451136e-27 100000000 1.43683451136e-27 100.00000 2.99481468001e-27 125.89254 2.99481468001e-27 158.48932 2.99481468001e-27 199.52623 2.99481468001e-27 251.18864 2.99481468001e-27 316.22777 2.99481468001e-27 398.10717 2.99481468001e-27 501.18723 2.99481468001e-27 630.95734 2.99481468001e-27 794.32823 2.99481468001e-27 1000 2.99481468001e-27 1258.93 2.99481468001e-27 1584.89 2.99481468001e-27 1995.26 2.99481468001e-27 2511.89 2.99481468001e-27 3162.28 2.99481468001e-27 3981.07 2.99481468001e-27 5011.87 2.99481468001e-27 6309.57 2.99481468001e-27 7943.28 2.99481468001e-27 10000 2.99481468001e-27 12589.25 2.99481468001e-27 15848.93 2.99481468001e-27 19952.62 2.99481468001e-27 25118.86 2.99481468001e-27 31622.78 2.99481468001e-27 39810.72 2.99481468001e-27 50118.72 2.99481468001e-27 63095.73 2.99481468001e-27 79432.82 2.99481468001e-27 100000 2.99481468001e-27 125892.54 2.99481468001e-27 158489.32 2.99481468001e-27 199526.23 2.99481468001e-27 251188.64 2.99481468001e-27 316227.77 2.99481468001e-27 398107.17 2.99481468001e-27 501187.23 2.99481468001e-27 630957.34 2.99481468001e-27 794328.23 2.99481468001e-27 1000000 2.99481468001e-27 1258930 2.99481468001e-27 1584890 2.99481468001e-27 1995260 2.99481468001e-27 2511890 2.99481468001e-27 3162280 2.99481468001e-27 3981070 2.99481468001e-27 5011870 2.99481468001e-27 6309570 2.99481468001e-27 7943280 2.99481468001e-27 10000000 2.99481468001e-27 12589250 2.99481468001e-27 15848930 2.99481468001e-27 19952620 2.99481468001e-27 25118860 2.99481468001e-27 31622780 2.99481468001e-27 39810720 2.99481468001e-27 50118720 2.99481468001e-27 63095730 2.99481468001e-27 79432820 2.99481468001e-27 100000000 2.99481468001e-27 100.00000 1.6441394176e-28 125.89254 1.6441394176e-28 158.48932 1.6441394176e-28 199.52623 1.6441394176e-28 251.18864 1.6441394176e-28 316.22777 1.6441394176e-28 398.10717 1.6441394176e-28 501.18723 1.6441394176e-28 630.95734 1.6441394176e-28 794.32823 1.6441394176e-28 1000 1.6441394176e-28 1258.93 1.6441394176e-28 1584.89 1.6441394176e-28 1995.26 1.6441394176e-28 2511.89 1.6441394176e-28 3162.28 1.6441394176e-28 3981.07 1.6441394176e-28 5011.87 1.6441394176e-28 6309.57 1.6441394176e-28 7943.28 1.6441394176e-28 10000 1.6441394176e-28 12589.25 1.6441394176e-28 15848.93 1.6441394176e-28 19952.62 1.6441394176e-28 25118.86 1.6441394176e-28 31622.78 1.6441394176e-28 39810.72 1.6441394176e-28 50118.72 1.6441394176e-28 63095.73 1.6441394176e-28 79432.82 1.6441394176e-28 100000 1.6441394176e-28 125892.54 1.6441394176e-28 158489.32 1.6441394176e-28 199526.23 1.6441394176e-28 251188.64 1.6441394176e-28 316227.77 1.6441394176e-28 398107.17 1.6441394176e-28 501187.23 1.6441394176e-28 630957.34 1.6441394176e-28 794328.23 1.6441394176e-28 1000000 1.6441394176e-28 1258930 1.6441394176e-28 1584890 1.6441394176e-28 1995260 1.6441394176e-28 2511890 1.6441394176e-28 3162280 1.6441394176e-28 3981070 1.6441394176e-28 5011870 1.6441394176e-28 6309570 1.6441394176e-28 7943280 1.6441394176e-28 10000000 1.6441394176e-28 12589250 1.6441394176e-28 15848930 1.6441394176e-28 19952620 1.6441394176e-28 25118860 1.6441394176e-28 31622780 1.6441394176e-28 39810720 1.6441394176e-28 50118720 1.6441394176e-28 63095730 1.6441394176e-28 79432820 1.6441394176e-28 100000000 1.6441394176e-28 100.00000 1.55671280704e-27 125.89254 1.55671280704e-27 158.48932 1.55671280704e-27 199.52623 1.55671280704e-27 251.18864 1.55671280704e-27 316.22777 1.55671280704e-27 398.10717 1.55671280704e-27 501.18723 1.55671280704e-27 630.95734 1.55671280704e-27 794.32823 1.55671280704e-27 1000 1.55671280704e-27 1258.93 1.55671280704e-27 1584.89 1.55671280704e-27 1995.26 1.55671280704e-27 2511.89 1.55671280704e-27 3162.28 1.55671280704e-27 3981.07 1.55671280704e-27 5011.87 1.55671280704e-27 6309.57 1.55671280704e-27 7943.28 1.55671280704e-27 10000 1.55671280704e-27 12589.25 1.55671280704e-27 15848.93 1.55671280704e-27 19952.62 1.55671280704e-27 25118.86 1.55671280704e-27 31622.78 1.55671280704e-27 39810.72 1.55671280704e-27 50118.72 1.55671280704e-27 63095.73 1.55671280704e-27 79432.82 1.55671280704e-27 100000 1.55671280704e-27 125892.54 1.55671280704e-27 158489.32 1.55671280704e-27 199526.23 1.55671280704e-27 251188.64 1.55671280704e-27 316227.77 1.55671280704e-27 398107.17 1.55671280704e-27 501187.23 1.55671280704e-27 630957.34 1.55671280704e-27 794328.23 1.55671280704e-27 1000000 1.55671280704e-27 1258930 1.55671280704e-27 1584890 1.55671280704e-27 1995260 1.55671280704e-27 2511890 1.55671280704e-27 3162280 1.55671280704e-27 3981070 1.55671280704e-27 5011870 1.55671280704e-27 6309570 1.55671280704e-27 7943280 1.55671280704e-27 10000000 1.55671280704e-27 12589250 1.55671280704e-27 15848930 1.55671280704e-27 19952620 1.55671280704e-27 25118860 1.55671280704e-27 31622780 1.55671280704e-27 39810720 1.55671280704e-27 50118720 1.55671280704e-27 63095730 1.55671280704e-27 79432820 1.55671280704e-27 100000000 1.55671280704e-27 100.00000 4.79474538481e-27 125.89254 4.79474538481e-27 158.48932 4.79474538481e-27 199.52623 4.79474538481e-27 251.18864 4.79474538481e-27 316.22777 4.79474538481e-27 398.10717 4.79474538481e-27 501.18723 4.79474538481e-27 630.95734 4.79474538481e-27 794.32823 4.79474538481e-27 1000 4.79474538481e-27 1258.93 4.79474538481e-27 1584.89 4.79474538481e-27 1995.26 4.79474538481e-27 2511.89 4.79474538481e-27 3162.28 4.79474538481e-27 3981.07 4.79474538481e-27 5011.87 4.79474538481e-27 6309.57 4.79474538481e-27 7943.28 4.79474538481e-27 10000 4.79474538481e-27 12589.25 4.79474538481e-27 15848.93 4.79474538481e-27 19952.62 4.79474538481e-27 25118.86 4.79474538481e-27 31622.78 4.79474538481e-27 39810.72 4.79474538481e-27 50118.72 4.79474538481e-27 63095.73 4.79474538481e-27 79432.82 4.79474538481e-27 100000 4.79474538481e-27 125892.54 4.79474538481e-27 158489.32 4.79474538481e-27 199526.23 4.79474538481e-27 251188.64 4.79474538481e-27 316227.77 4.79474538481e-27 398107.17 4.79474538481e-27 501187.23 4.79474538481e-27 630957.34 4.79474538481e-27 794328.23 4.79474538481e-27 1000000 4.79474538481e-27 1258930 4.79474538481e-27 1584890 4.79474538481e-27 1995260 4.79474538481e-27 2511890 4.79474538481e-27 3162280 4.79474538481e-27 3981070 4.79474538481e-27 5011870 4.79474538481e-27 6309570 4.79474538481e-27 7943280 4.79474538481e-27 10000000 4.79474538481e-27 12589250 4.79474538481e-27 15848930 4.79474538481e-27 19952620 4.79474538481e-27 25118860 4.79474538481e-27 31622780 4.79474538481e-27 39810720 4.79474538481e-27 50118720 4.79474538481e-27 63095730 4.79474538481e-27 79432820 4.79474538481e-27 100000000 4.79474538481e-27 100.00000 1.069296628624e-26 125.89254 1.069296628624e-26 158.48932 1.069296628624e-26 199.52623 1.069296628624e-26 251.18864 1.069296628624e-26 316.22777 1.069296628624e-26 398.10717 1.069296628624e-26 501.18723 1.069296628624e-26 630.95734 1.069296628624e-26 794.32823 1.069296628624e-26 1000 1.069296628624e-26 1258.93 1.069296628624e-26 1584.89 1.069296628624e-26 1995.26 1.069296628624e-26 2511.89 1.069296628624e-26 3162.28 1.069296628624e-26 3981.07 1.069296628624e-26 5011.87 1.069296628624e-26 6309.57 1.069296628624e-26 7943.28 1.069296628624e-26 10000 1.069296628624e-26 12589.25 1.069296628624e-26 15848.93 1.069296628624e-26 19952.62 1.069296628624e-26 25118.86 1.069296628624e-26 31622.78 1.069296628624e-26 39810.72 1.069296628624e-26 50118.72 1.069296628624e-26 63095.73 1.069296628624e-26 79432.82 1.069296628624e-26 100000 1.069296628624e-26 125892.54 1.069296628624e-26 158489.32 1.069296628624e-26 199526.23 1.069296628624e-26 251188.64 1.069296628624e-26 316227.77 1.069296628624e-26 398107.17 1.069296628624e-26 501187.23 1.069296628624e-26 630957.34 1.069296628624e-26 794328.23 1.069296628624e-26 1000000 1.069296628624e-26 1258930 1.069296628624e-26 1584890 1.069296628624e-26 1995260 1.069296628624e-26 2511890 1.069296628624e-26 3162280 1.069296628624e-26 3981070 1.069296628624e-26 5011870 1.069296628624e-26 6309570 1.069296628624e-26 7943280 1.069296628624e-26 10000000 1.069296628624e-26 12589250 1.069296628624e-26 15848930 1.069296628624e-26 19952620 1.069296628624e-26 25118860 1.069296628624e-26 31622780 1.069296628624e-26 39810720 1.069296628624e-26 50118720 1.069296628624e-26 63095730 1.069296628624e-26 79432820 1.069296628624e-26 100000000 1.069296628624e-26 tmp_ns50wwy/tests/bsimbulk/nmos/reference/acvd_core_lw.standard0000644000175000017500000001631714163340332025216 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -0.2 -0.001057 1.26862802464557e-13 3.24106006296392e-14 8.89625017282702e-14 0 0. 1.16396702261233e-13 5.48652010658636e-14 5.48652010658636e-14 0.2 0.0003837728 8.18013015891499e-14 6.59897012819787e-14 5.74990011170303e-15 0.4 0.0004124642 8.03619015611868e-14 6.48470012597795e-14 5.46590010618577e-15 0.6 0.0004377965 7.91723015380764e-14 6.38412012402399e-14 5.32430010343492e-15 0.8 0.0004613269 7.80297015158792e-14 6.28672012213181e-14 5.19770010097547e-15 1 0.0004836049 7.69301014945173e-14 6.19130012027809e-14 5.09370009895506e-15 1.2 0.0005049431 7.58650014738257e-14 6.09762011845817e-14 5.0062000972552e-15 -0.2 -0.0009076088 1.46669002849332e-13 6.25913012159582e-14 8.09656015729148e-14 0 0. 1.48751002889779e-13 7.27933014141519e-14 7.27933014141519e-14 0.2 0.0010583 1.31260002549982e-13 8.78393017064498e-14 3.87492007527788e-14 0.4 0.0014769 1.09069302118884e-13 9.48038018417488e-14 7.79850015150108e-15 0.6 0.0015477 1.07008202078843e-13 9.3660501819538e-14 6.83640013281041e-15 0.8 0.0016008 1.05812002055605e-13 9.27194018012553e-14 6.6148001285054e-15 1 0.0016469 1.0471640203432e-13 9.18245017838701e-14 6.45170012533686e-15 1.2 0.0016885 1.03673302014056e-13 9.09495017668715e-14 6.32130012280359e-15 -0.2 -0.0005846756 1.4825640288017e-13 7.09369013780877e-14 7.4798201453101e-14 0 0. 1.51000802933485e-13 7.42286014420354e-14 7.42286014420354e-14 0.2 0.000849335 1.47013102856016e-13 7.97233015487807e-14 6.43813012507324e-14 0.4 0.0018651 1.26766802462693e-13 9.52649018507066e-14 2.71769005279643e-14 0.6 0.002248 1.13153802198233e-13 9.81990019077072e-14 9.76730018974887e-15 0.8 0.0023529 1.10640702149412e-13 9.72044018883852e-14 8.17410015879785e-15 1 0.0024223 1.09366002124648e-13 9.63162018711302e-14 7.80400015160793e-15 1.2 0.0024804 1.08300102103941e-13 9.5494501855167e-14 7.58810014741365e-15 -0.2 -0.0003118174 1.4598380283602e-13 7.38579014348339e-14 6.98623013572115e-14 0 0. 1.48678802888376e-13 7.31956014219674e-14 7.31956014219674e-14 0.2 0.000532405 1.47723802869823e-13 7.37794014333088e-14 7.15104013892291e-14 0.4 0.0013541 1.40235702724352e-13 8.37226016264749e-14 5.35874010410398e-14 0.6 0.0022637 1.21740002365037e-13 9.48024018417216e-14 2.29987004467946e-14 0.8 0.0026211 1.12005902175933e-13 9.61522018679441e-14 1.14431002223045e-14 1 0.0027482 1.092760021229e-13 9.53123018516274e-14 9.47690018410728e-15 1.2 0.0028266 1.07897202096114e-13 9.4491101835674e-14 8.9228001733428e-15 -0.2 -0.001609 1.22891202387401e-13 2.04787003978387e-14 9.64629018739801e-14 0 0. 1.05904902057409e-13 4.9060500953096e-14 4.9060500953096e-14 0.2 0.0003251781 7.3480801427508e-14 5.73963011150351e-14 5.27510010247911e-15 0.4 0.0003606849 7.23885014062879e-14 5.63432010945766e-14 5.2835001026423e-15 0.6 0.0003927712 7.1245301384079e-14 5.53874010760084e-14 5.14280009990893e-15 0.8 0.0004229056 7.01455013627132e-14 5.44582010579568e-14 5.01840009749221e-15 1 0.0004517175 6.90893013421945e-14 5.35485010402841e-14 4.91760009553398e-15 1.2 0.0004795367 6.80685013223635e-14 5.2657001022965e-14 4.83350009390017e-15 -0.2 -0.0013889 1.49778602909742e-13 6.24609012134249e-14 8.43831016393064e-14 0 0. 1.53175602975735e-13 7.51297014595411e-14 7.51297014595411e-14 0.2 0.0016402 1.29178002509535e-13 9.48103018418751e-14 2.94417005719625e-14 0.4 0.0020365 1.12432102184213e-13 9.94695019323892e-14 6.79390013198477e-15 0.6 0.0021413 1.11232802160914e-13 9.84714019129991e-14 6.62320012866859e-15 0.8 0.0022261 1.10081502138548e-13 9.7539801894901e-14 6.44040012511734e-15 1 0.0022991 1.08979502117139e-13 9.66311018772477e-14 6.28380012207508e-15 1.2 0.0023642 1.07924102096636e-13 9.5738801859913e-14 6.15700011961174e-15 -0.2 -0.0008614271 1.50911002931741e-13 7.15840013906589e-14 7.69773014954343e-14 0 0. 1.54256402996732e-13 7.59538014755508e-14 7.59538014755508e-14 0.2 0.0012915 1.50114402916265e-13 8.28453016094316e-14 6.45328012536756e-14 0.4 0.0028113 1.24189702412627e-13 1.01955301980681e-13 1.78337003464544e-14 0.6 0.0031623 1.16223702257872e-13 1.03220202005254e-13 8.20020015930489e-15 0.8 0.0032972 1.1496040223333e-13 1.02320501987775e-13 7.85080015251711e-15 1 0.0034031 1.13859502211943e-13 1.01467601971206e-13 7.62980014822376e-15 1.2 0.0034933 1.12812302191599e-13 1.00636401955058e-13 7.4416001445676e-15 -0.2 -0.0004374716 1.48024302875661e-13 7.44522014463793e-14 7.14586013882228e-14 0 0. 1.51050402934449e-13 7.4461401446558e-14 7.4461401446558e-14 0.2 0.0007787527 1.50261202919117e-13 7.5831301473171e-14 7.21566014017828e-14 0.4 0.0020366 1.41746002753693e-13 8.67511016853094e-14 5.21890010138732e-14 0.6 0.0033486 1.19129102314315e-13 1.00021801943119e-13 1.52751002967486e-14 0.8 0.0036777 1.13737002209563e-13 1.00259801947742e-13 9.46780018393049e-15 1 0.0038221 1.12441402184394e-13 9.94712019324222e-14 8.96720017420536e-15 1.2 0.0039324 1.11404302164246e-13 9.87150019177315e-14 8.70700016915047e-15 -0.2 -0.0006217003 1.29251702510967e-13 3.87613007530139e-14 8.53926016589179e-14 0 0. 1.23431502397898e-13 5.88208011427088e-14 5.88208011427088e-14 0.2 0.0003935792 9.49509018446066e-14 7.3451001426929e-14 1.27467002476295e-14 0.4 0.0004480353 8.75070016999943e-14 7.17312013935186e-14 6.36480012364866e-15 0.6 0.0004684663 8.55498016619718e-14 7.03119013659459e-14 5.78240011233441e-15 0.8 0.0004854374 8.42090016359242e-14 6.91995013443353e-14 5.57330010827223e-15 1 0.0005010423 8.3033201613082e-14 6.81882013246889e-14 5.44120010570593e-15 1.2 0.0005157585 8.1930201591654e-14 6.72238013059535e-14 5.33910010372244e-15 -0.2 -0.0005506865 1.41831702755358e-13 5.8345901133483e-14 8.00845015557977e-14 0 0. 1.43492502787622e-13 7.0018601360248e-14 7.0018601360248e-14 0.2 0.0006191329 1.31489402554438e-13 8.48711016487868e-14 4.21142008181505e-14 0.4 0.0009740999 1.13504402205044e-13 9.22971017930513e-14 1.5171500294736e-14 0.6 0.0010827 1.06156002062287e-13 9.0552501759159e-14 9.01490017513203e-15 0.8 0.0011309 1.0313350200357e-13 8.8839001725871e-14 7.56180014690272e-15 1 0.0011639 1.01340201968731e-13 8.75431017006956e-14 7.03360013664141e-15 1.2 0.0011909 9.99813019423319e-14 8.64611016796756e-14 6.76320013138836e-15 -0.2 -0.0003786529 1.43940802796331e-13 6.7226501306006e-14 7.39196014360325e-14 0 0. 1.46388202843876e-13 7.17839013945424e-14 7.17839013945424e-14 0.2 0.0005211083 1.42149502761531e-13 7.89292015333538e-14 6.00395011663845e-14 0.4 0.0010649 1.29181302509599e-13 9.23651017943723e-14 3.27071006353992e-14 0.6 0.0013815 1.17538402283413e-13 9.53646018526435e-14 1.72565003352412e-14 0.8 0.0015278 1.11185202159989e-13 9.42025018300674e-14 1.1667400226662e-14 1 0.001606 1.0770860209245e-13 9.26645018001888e-14 9.56170018575468e-15 1.2 0.0016577 1.05519302049918e-13 9.1346601774586e-14 8.62420016754192e-15 -0.2 -0.0002186336 1.42567802769658e-13 7.12962013850678e-14 6.87715013360206e-14 0 0. 1.45036202817611e-13 7.1254001384248e-14 7.1254001384248e-14 0.2 0.0003489461 1.43568102789091e-13 7.28678014155992e-14 6.80137013212989e-14 0.4 0.0008397029 1.36206902646085e-13 8.50756016527596e-14 4.79859009322198e-14 0.6 0.0012893 1.25617302440361e-13 9.24604017962237e-14 2.93892005709426e-14 0.8 0.0015763 1.17099502274886e-13 9.39822018257877e-14 1.88663003665147e-14 1 0.0017402 1.11634702168722e-13 9.31873018103452e-14 1.39117002702619e-14 1.2 0.0018398 1.08123402100508e-13 9.19336017859896e-14 1.15030002234682e-14 tmp_ns50wwy/tests/bsimbulk/nmos/qaSpec0000644000175000017500000016077114163340332020252 0ustar carstencarsten // // Test specification for bsim6 (version 6.1.1_beta1), now bsimbulk // // // 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 hspice nTypeSelectionArguments nmos level=77 version=6.1.1 pTypeSelectionArguments pmos level=77 version=6.1.1 `endif `ifdef ngspice nTypeSelectionArguments nmos level=77 pTypeSelectionArguments pmos level=77 `endif // // General test-independent information // keyLetter m pins d g s b //verilogaFile code/bsim6.1.1_beta1.va now bsimbulk.va //linearScale w l ps pd //areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s //scaleParameters m // // Specific tests // //Just the core device test Idvg_core_sw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_lw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_lt biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_st biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_sw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_lw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_lt biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_sw biases V(s)=0 V(b)=-0.5 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_st biases V(s)=0 V(b)=-0.25 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_sw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_lw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_lt biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_st biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_sw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_lw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_lt biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_st biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_st temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 //Just the core device with diodes but no vg sweeps test Idvd_diode_sw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_diode_lw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_diode_lt biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_diode_st biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_diode_sw biases V(s)=0 V(b)=-0.5 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_diode_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_diode_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_diode_st biases V(s)=0 V(b)=-0.25 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_diode_sw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_diode_lw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_diode_lt biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_diode_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_diode_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_diode_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_diode_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_diode_st biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_diode_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_diode_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_diode_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_diode_st temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 //core device with gate currents test Idvg_ig_sw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_lw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_lt biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_st biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.11e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_sw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_lw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_lt biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_st biases V(s)=0 V(b)=-0.25 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_sw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_lw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_lt biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_st biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_sw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_lw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_lt biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_st temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 //missing impact ionization //Core with GIDL test Idvg_gidl_sw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvg_gidl_lw biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvg_gidl_lt biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvg_gidl_st biases V(s)=0 V(b)=0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvgb_gidl_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvgb_gidl_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvgb_gidl_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvgb_gidl_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0.05,1.0 biasSweep V(g)=0.25,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvd_gidl_sw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvd_gidl_lw biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvd_gidl_lt biases V(s)=0 V(b)=0 biasList V(g)=0.15,0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvd_gidl_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvdb_gidl_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvdb_gidl_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvdb_gidl_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test Idvdb_gidl_st biases V(s)=0 V(b)=-0.5 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=0,1.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvg_gidl_sw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvg_gidl_lw biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvg_gidl_lt biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvg_gidl_st biases V(s)=0 V(b)=0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvgb_gidl_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvgb_gidl_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvgb_gidl_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvgb_gidl_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0,1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvd_gidl_sw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvd_gidl_lw biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvd_gidl_lt biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvd_gidl_st biases V(s)=0 V(b)=0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvdb_gidl_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvdb_gidl_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvdb_gidl_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acvdb_gidl_st biases V(s)=0 V(b)=-1.0 biasList V(g)=0.25,0.5,0.75,1.0 biasSweep V(d)=-0.2,1.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acfreq_gidl_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acfreq_gidl_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acfreq_gidl_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 test acfreq_gidl_st temperature 27 biases V(s)=0 V(b)=0 V(d)=1.0 V(g)=1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/nmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=1 //core with STI stress no efefct with these parameters, skipping here //noise with everything test acnoise1g_sw biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_sw biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_lw biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_lw biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_lt biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_lt biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_st biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_st biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1d_sw biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_sw biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1d_lw biases V(s)=0 V(b)=0 V(d)=1.0 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_lw biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_st biases V(s)=0 V(b)=0 V(d)=0.05 biasList V(g)=0.25,0.5,0.75,1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/nmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 tmp_ns50wwy/tests/bsimbulk/nmos/run0000644000175000017500000000023614163340332017627 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsimbulk/pmos/0000755000175000017500000000000014163340332017101 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/pmos/parameters/0000755000175000017500000000000014163340332021244 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/pmos/parameters/pmosParameters0000644000175000017500000002752614163340332024205 0ustar carstencarsten+ TYPE = -1.0 + TOXE = 2.34E-009 + TOXP = 1.925E-009 + DTOX = 0 + EPSROX = 3.9 + TNOM = 25 + XL = 0 + XW = 0 + LINT = 0 + LLONG = 1000000 + LL = 0 + LW = 0 + LWL = 0 + LLN = 1 + LWN = 1 + WINT = -9.0134104E-009 + WL = 0 + WW = 0 + WWL = 0 + WLN = 1 + WWN = 1 + WWIDE = 1000000 + DLC = 0 + LLC = 0 + LWC = 0 + LWLC = 0 + DWC = 0 + WLC = 0 + WWC = 0 + WWLC = 0 + GEOMOD = 0 + RGEOMOD = 0 + RGATEMOD= 0 + RBODYMOD= 0 + IGCMOD = 0 + IGBMOD = 0 + COVMOD = 1 + RDSMOD = 2 + GIDLMOD = 0 + TNOIMOD = 0 + GMIN = 1E-012 + JSS = 0.0001 + JSD = 0.0001 + JSWS = 0 + JSWD = 0 + JSWGS = 0 + JSWGD = 0 + NJS = 1 + NJD = 1 + IJTHSFWD= 0.1 + IJTHDFWD= 0.1 + IJTHSREV= 0.1 + IJTHDREV= 0.1 + BVS = 10 + BVD = 10 + XJBVS = 1 + XJBVD = 1 + JTSS = 0 + JTSD = 0 + JTSSWS = 0 + JTSSWD = 0 + JTSSWGS = 0 + JTSSWGD = 0 + JTWEFF = 0 + NJTS = 20 + NJTSD = 20 + NJTSSW = 20 + NJTSSWD = 20 + NJTSSWG = 20 + NJTSSWGD= 20 + VTSS = 10 + VTSD = 10 + VTSSWS = 10 + VTSSWD = 10 + VTSSWGS = 10 + VTSSWGD = 10 + CJS = 0.0005 + CJD = 0.0005 + CJSWS = 5E-010 + CJSWD = 5E-010 + CJSWGS = 0 + CJSWGD = 0 + PBS = 1 + PBD = 1 + PBSWS = 1 + PBSWD = 1 + PBSWGS = 1 + PBSWGD = 1 + MJS = 0.5 + MJD = 0.5 + MJSWS = 0.33 + MJSWD = 0.33 + MJSWGS = 0.33 + MJSWGD = 0.33 + TPB = 0 + TCJ = 0 + TPBSW = 0 + TCJSW = 0 + TPBSWG = 0 + TCJSWG = 0 + XTIS = 3 + XTID = 3 + XTSS = 0.02 + XTSD = 0.02 + XTSSWS = 0.02 + XTSSWD = 0.02 + XTSSWGS = 0.02 + XTSSWGD = 0.02 + TNJTS = 0 + TNJTSD = 0 + TNJTSSW = 0 + TNJTSSWD= 0 + TNJTSSWG= 0 + TNJTSSWGD= 0 + NOIA = 6.25E+040 + NOIB = 3.125E+025 + NOIC = 8.75E+008 + EM = 41000000 + EF = 1 + LINTNOI = 0 + NTNOI = 1 + TNOIA = 0 + TNOIB = 0 + TNOIC = 0 + RNOIA = 0.577 + RNOIB = 0.5164 + RNOIC = 0.395 + DWJ = 0 + DMCG = 0 + DMCI = 0 + DMDG = 0 + DMCGT = 0 + XGW = 0 + XGL = 0 + GBMIN = 1E-012 + RSHG = 0.1 + RBPB = 50 + RBPD = 50 + RBPS = 50 + RBDB = 50 + RBSB = 50 + RBPS0 = 50 + RBPSL = 0 + RBPSW = 0 + RBPSNF = 0 + RBPD0 = 50 + RBPDL = 0 + RBPDW = 0 + RBPDNF = 0 + RBPBX0 = 100 + RBPBXL = 0 + RBPBXW = 0 + RBPBXNF = 0 + RBPBY0 = 100 + RBPBYL = 0 + RBPBYW = 0 + RBPBYNF = 0 + RBSBX0 = 100 + RBSBY0 = 100 + RBDBX0 = 100 + RBDBY0 = 100 + RBSDBXL = 0 + RBSDBXW = 0 + RBSDBXNF= 0 + RBSDBYL = 0 + RBSDBYW = 0 + RBSDBYNF= 0 + XRCRG1 = 12 + XRCRG2 = 1 + NGCON = 1 + NDEP = 8.062E+023 + NDEPL1 = 1.2139 + NDEPLEXP1= 1.9088 + NDEPL2 = -1.1825 + NDEPLEXP2= 1.9173 + NDEPW = 0.065035 + NDEPWEXP= 0.48882 + NDEPWL = 0.00040893 + NDEPWLEXP= 1.3273 + EASUB = 4.05 + NI0SUB = 1.1E+016 + BG0SUB = 1.17 + EPSRSUB = 11.9 + XJ = 1.5E-007 + VFB = -1.2108 + VFBSDOFF= 0 + NSD = 1E+026 + DVTP0 = 1.8335E-007 + DVTP1 = 220.59 + DVTP2 = 9.6351E-010 + DVTP3 = 0.89017 + DVTP4 = 98.728 + DVTP5 = 5.1435E-017 + PHIN = 0.045 + ETA0 = 0.0051075 + ETAB = -0.010908157 + ETABEXP = 0.09999 + DSUB = 1.0667 + K2 = -0.093146 + K2L = 0.065574 + K2LEXP = 0.79778 + K2W = 0.030809 + K2WEXP = 0.87253 + CIT = 1.0136148E-005 + CDSCD = 0.0011509049 + CDSCDL = -0.00048388809 + CDSCDLEXP= 0.13963388 + CDSCB = 9.9995516E-006 + CDSCBL = 1.4756534E-009 + CDSCBLEXP= 1 + NFACTOR = 0.0017201 + NFACTORL= 1.7832E-006 + NFACTORLEXP= 0.99988 + NFACTORW= 0.11149 + NFACTORWEXP= 0.8993 + NFACTORWL= -0.01386 + U0 = 0.04004 + U0L = 0.58676 + U0LEXP = 0.11151 + ETAMOB = 4.0947 + UA = 0.4298 + UAL = -0.0087246 + UALEXP = 1.3647 + UAW = 0.11575 + UAWEXP = 0.4385 + UAWL = -7.027E-005 + EU = 1.3371 + EUL = 0.0021948 + EULEXP = 1.4769 + EUW = -0.0031666 + EUWEXP = 1.9366 + EUWL = -0.00013929 + UD = 0.0093995 + UDL = 0.067484 + UDLEXP = 0.099452 + UCS = 0.9999 + UC = 4.91E-006 + UCL = 0.001096 + UCLEXP = 0.0015937 + VSAT = 9609100 + VSATL = 6.8282 + VSATLEXP= 0.086396 + VSATW = 0.016834 + VSATWEXP= 3.0172 + VSATCVL = 0 + VSATCVLEXP= 1 + VSATCVW = 0 + VSATCVWEXP= 1 + DELTA = 0.1779 + DELTAL = 0.1269 + DELTALEXP= 0.18156 + PCLM = 0 + PCLML = 0 + PCLMLEXP= 1E-013 + PCLMG = 0 + PCLMCVL = 0 + PCLMCVLEXP= 1 + PSCBE1 = 4.24E+008 + PSCBE2 = 1E-008 + PDITS = 0.85536 + PDITSL = 8473.9 + PDITSD = 0 + PDIBLC = 0.005 + PDIBLCL = 0 + PDIBLCLEXP= 1 + PDIBLCB = -0.49995 + PVAG = 1 + FPROUT = 0 + FPROUTL = 0 + FPROUTLEXP= 1 + PTWG = 0.09999 + PTWGL = 0.069993 + PTWGLEXP= 0.0009999 + PSAT = 1E-013 + PSATL = 0 + PSATLEXP= 1 + PSATB = 0.9999 + PSATX = 1E-013 + RSH = 0 + PRWG = 1 + PRWB = 0.010098993 + PRWBL = 0.00070000265 + PRWBLEXP= 1 + WR = 1 + RSWMIN = 0 + RSW = 10 + RSWL = 0 + RSWLEXP = 1 + RDWMIN = 0 + RDW = 10 + RDWL = 0 + RDWLEXP = 1 + RDSWMIN = 0 + RDSW = 0 + RDSWL = 0.0007 + RDSWLEXP= 1E-007 + ALPHA0 = 0 + ALPHA0L = 0 + ALPHA0LEXP= 1 + BETA0 = 0 + AGIDL = 0 + AGIDLL = 0 + AGIDLW = 0 + BGIDL = 2.3E+009 + CGIDL = 0.5 + EGIDL = 0.8 + AGISL = 0 + AGISLL = 0 + AGISLW = 0 + BGISL = 2.3E+009 + CGISL = 0.5 + EGISL = 0.00171 + AIGBACC = 0.00171 + BIGBACC = 0.00171 + CIGBACC = 0.075 + NIGBACC = 1 + AIGBINV = 0.0111 + BIGBINV = 0.000949 + CIGBINV = 0.006 + EIGBINV = 1.1 + NIGBINV = 3 + AIGC = 0.0136 + AIGCL = 3 + AIGCW = 0.0136 + BIGC = 0.00171 + CIGC = 0.075 + AIGS = 0.0136 + AIGSL = 0.075 + AIGSW = 0.0136 + AIGD = 0.0136 + AIGDL = 0 + AIGDW = 0.0136 + BIGS = 0.00171 + BIGD = 0.00171 + CIGS = 0.075 + CIGD = 0.075 + TOXREF = 0.075 + NTOX = 1 + POXEDGE = 1 + PIGCD = 1 + PIGCDL = 1 + NDEPCV = 4.598E+23 + NDEPCVL1= 0 + NDEPCVLEXP1= 1 + NDEPCVL2= 0 + NDEPCVLEXP2= 2 + NDEPCVW = 0 + NDEPCVWEXP= 1 + NDEPCVWL= 0 + NDEPCVWLEXP= 1 + NGATE = 7.764E+25 + CF = 0 + CFRCOEFF= 1 + CGSO = 187.0E-12 + CGDO = 187.0E-12 + CGBO = 0 + CGSL = 130.0E-12 + CGDL = 130.0E-12 + CKAPPAS = 1.6 + CKAPPAD = 1.6 + ADOS = 221.4 + BDOS = 1.350 + QM0 = 405.7E-6 + ETAQM = 848.5E-3 + VFBCV = -996.0E-3 + VFBCVL = 0 + VFBCVLEXP= 1 + VFBCVW = 0 + VFBCVWEXP= 1 + VFBCVWL = 0 + VFBCVWLEXP= 1 + TBGASUB = 0.000473 + TBGBSUB = 636 + TDELTA = 0 + PTWGT = 0 + IIT = 0 + TGIDL = 0 + IGT = 0 + KT1 = -0.11 + KT1L = 0 + KT2 = 0.022 + KT1EXP = 1 + UTE = -1.5 + UA1 = 0.001 + UD1 = 0 + UC1 = -5.6E-011 + UCSTE = -0.004775 + PRT = 0 + AT = -0.00156 + SCA = 0 + SCB = 0 + SCC = 0 + SC = 0 + KU0WE = 0 + KVTH0WE = 0 + K2WE = 0 + WEB = 0 + WEC = 0 + SCREF = 1E-006 + SA = 0 + SB = 0 + SD = 0 + SAREF = 1E-006 + SBREF = 1E-006 + WLOD = 0 + KVSAT = 0 + KU0 = 0 + TKU0 = 0 + LKU0 = 0 + WKU0 = 0 + PKU0 = 0 + LLODKU0 = 0 + WLODKU0 = 0 + KVTH0 = 0 + LKVTH0 = 0 + WKVTH0 = 0 + PKVTH0 = 0 + LLODVTH = 0 + WLODVTH = 0 + STK2 = 0 + LODK2 = 1 + STETA0 = 0 + LODETA0 = 1 + SHMOD = 0 + RTH0 = 10M + MOBSCALE = 1 tmp_ns50wwy/tests/bsimbulk/pmos/reference/0000755000175000017500000000000014163340332021037 5ustar carstencarstentmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_diode_lt.standard0000644000175000017500000001253214163340332025670 0ustar carstencarstenFreq g(d,b) g(s,b) c(d,b) c(s,b) c(b,b) g(b,b) 1000 8.0577e-06 -8.0577e-06 1.0027923245874e-14 1.29109991244894e-14 2.3780724695365e-14 2.69299e-14 1258.93 8.0577e-06 -8.0577e-06 1.00278878241553e-14 1.29109521912715e-14 2.37806382246727e-14 2.69299e-14 1584.89 8.0577e-06 -8.0577e-06 1.00279393435305e-14 1.29110228680381e-14 2.37807745597096e-14 2.69299e-14 1995.26 8.0577e-06 -8.0577e-06 1.00279355779372e-14 1.29110086348918e-14 2.37807521859383e-14 2.69299e-14 2511.89 8.0577e-06 -8.0577e-06 1.00279101430849e-14 1.2910977394453e-14 2.37806905856112e-14 2.69299e-14 3162.28 8.0577e-06 -8.0577e-06 1.00279169726443e-14 1.29109885243599e-14 2.37807062428776e-14 2.69299e-14 3981.07 8.0577e-06 -8.0577e-06 1.0027928370605e-14 1.2911000853375e-14 2.37807325306797e-14 2.69299e-14 5011.87 8.0577e-06 -8.0577e-06 1.00279297033436e-14 1.2911001648615e-14 2.37807342230296e-14 2.69299e-14 6309.57 8.0577e-06 -8.0577e-06 1.00279290509858e-14 1.29110016606991e-14 2.37807361230399e-14 2.69299e-14 7943.28 8.0577e-06 -8.0577e-06 1.00279267333342e-14 1.29110001500338e-14 2.37812341949133e-14 2.69299e-14 10000 8.0577e-06 -8.0577e-06 1.0027923245874e-14 1.29109959413905e-14 2.3780931596791e-14 2.69299e-14 12589.25 8.0577e-06 -8.0577e-06 1.00279276513405e-14 1.29114080171379e-14 2.37811119367845e-14 2.69299e-14 15848.93 8.0577e-06 -8.0577e-06 1.00279253829219e-14 1.29109984291211e-14 2.37804584117614e-14 2.69299e-14 19952.62 8.0577e-06 -8.0577e-06 1.00282366152982e-14 1.29109956932243e-14 2.37807682319348e-14 2.69299e-14 25118.86 8.0577e-06 -8.0577e-06 1.00281035218773e-14 1.29110169624878e-14 2.37805510446136e-14 2.69299e-14 31622.78 8.0577e-06 -8.0577e-06 1.0028094434158e-14 1.29109513936991e-14 2.37805501638125e-14 2.69299e-14 39810.72 8.0577e-06 -8.0577e-06 1.00280592577002e-14 1.29108664378659e-14 2.37808605064701e-14 2.69299e-14 50118.72 8.0577e-06 -8.0577e-06 1.00277796259678e-14 1.29108694740951e-14 2.37808072977976e-14 2.69299e-14 63095.73 8.0577e-06 -8.0577e-06 1.00279444625148e-14 1.29110888520644e-14 2.37807702199097e-14 2.69299e-14 79432.82 8.0577e-06 -8.0577e-06 1.00278280336304e-14 1.29110690303524e-14 2.37806271145199e-14 2.69299e-14 100000 8.0577e-06 -8.0577e-06 1.0027875499391e-14 1.29109672935007e-14 2.37807724418479e-14 2.69299e-14 125892.54 8.0577e-06 -8.0577e-06 1.00279876757871e-14 1.29110246509809e-14 2.37807251169824e-14 2.69299e-14 158489.32 8.0577e-06 -8.0577e-06 1.00279391804802e-14 1.29109967998632e-14 2.37807566708098e-14 2.69299e-14 199526.23 8.0577e-06 -8.0577e-06 1.00279160417859e-14 1.29109937519765e-14 2.37806848899233e-14 2.69299e-14 251188.64 8.0577e-06 -8.0577e-06 1.00279118427987e-14 1.29110149065004e-14 2.3780737339905e-14 2.69299e-14 316227.77 8.0577e-06 -8.0577e-06 1.00279443978721e-14 1.29110029477509e-14 2.37807034074679e-14 2.69299e-14 398107.17 8.0577e-06 -8.0577e-06 1.00279400796378e-14 1.29109873445276e-14 2.37807423647719e-14 2.69299e-14 501187.23 8.0577e-06 -8.0577e-06 1.00279378036576e-14 1.29109957236229e-14 2.37807106075704e-14 2.69299e-14 630957.34 8.0577e-06 -8.0577e-06 1.00279186024272e-14 1.29109871361215e-14 2.37807182635929e-14 2.69299e-14 794328.23 8.0577e-06 -8.0577e-06 1.00279278370035e-14 1.29109883970488e-14 2.37807263984805e-14 2.69299e-14 1000000 8.0577e-06 -8.0577e-06 1.0027923245874e-14 1.29109991244894e-14 2.3780724695365e-14 2.69299e-14 1258930 8.0577e-06 -8.0577e-06 1.00278878241553e-14 1.29109521912715e-14 2.37806382246727e-14 2.69299e-14 1584890 8.0577e-06 -8.0577e-06 1.00279493855488e-14 1.29110228680381e-14 2.37807745597096e-14 2.69299e-14 1995260 8.0577e-06 -8.0577e-06 1.00279355779372e-14 1.29110086348918e-14 2.37807521859383e-14 2.69299e-14 2511890 8.0577e-06 -8.0577e-06 1.00279101430849e-14 1.2910977394453e-14 2.37806905856112e-14 2.69299e-14 3162280 8.0577e-06 -8.0577e-06 1.00279169726443e-14 1.29109885243599e-14 2.37807062428776e-14 2.69299e-14 3981070 8.0577e-06 -8.0577e-06 1.0027928370605e-14 1.2911000853375e-14 2.37807325306797e-14 2.69299e-14 5011870 8.0577e-06 -8.0577e-06 1.00279297033437e-14 1.2911001648615e-14 2.37807342230297e-14 2.69299e-14 6309570 8.0577e-06 -8.0577e-06 1.00279290509858e-14 1.29110016606991e-14 2.37807361230399e-14 2.69299e-14 7943280 8.0577e-06 -8.0577e-06 1.00279267333342e-14 1.29110001500338e-14 2.37812341949133e-14 2.69299e-14 10000000 8.0577e-06 -8.0577e-06 1.00279248374234e-14 1.29109959413905e-14 2.3780931596791e-14 2.69299e-14 12589250 8.0577e-06 -8.0577e-06 1.00279276513405e-14 1.29114080171379e-14 2.37811119367845e-14 2.69299e-14 15848930 8.0577e-06 -8.0577e-06 1.00279263871218e-14 1.29109984291211e-14 2.37804584117614e-14 2.69299e-14 19952620 8.0577e-06 -8.0577e-06 1.00282366152982e-14 1.29109956932243e-14 2.37807682319348e-14 2.69299e-14 25118860 8.0577e-06 -8.0577e-06 1.00281035218773e-14 1.29110169624878e-14 2.37805510446136e-14 2.69299e-14 31622780 8.0577e-06 -8.0577e-06 1.0028094434158e-14 1.29109513936991e-14 2.37805501638125e-14 2.69299e-14 39810720 8.0577e-06 -8.0577e-06 1.00280592577002e-14 1.29108664378659e-14 2.37808605064701e-14 2.69299e-14 50118720 8.0577e-06 -8.0577e-06 1.00277796259678e-14 1.29108694740951e-14 2.37808072977976e-14 2.69299e-14 63095730 8.0577e-06 -8.0577e-06 1.00279444625148e-14 1.29110888520644e-14 2.37807702199097e-14 2.69299e-14 79432820 8.0577e-06 -8.0577e-06 1.00278280336304e-14 1.29110690303524e-14 2.37806271145199e-14 2.69299e-14 100000000 8.0577e-06 -8.0577e-06 1.0027875499391e-14 1.29109672935007e-14 2.37807724418479e-14 2.69299e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_ig_sw.standard0000644000175000017500000001537414163340332025013 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -0.000385634 660.2152 -660.2152 0.000385634 -1.10000 -0.0003491991 660.2082 -660.2082 0.0003491991 -1.00000 -0.0003152066 660.2010 -660.2010 0.0003152066 -0.9 -0.0002835738 660.1938 -660.1938 0.0002835738 -0.8 -0.0002542213 660.1866 -660.1866 0.0002542213 -0.7 -0.000227079 660.1792 -660.1792 0.000227079 -0.6 -0.0002021011 660.1718 -660.1718 0.0002021011 -0.5 -0.0001793129 660.1644 -660.1644 0.0001793129 -0.4 -0.0001589563 660.1568 -660.1568 0.0001589563 -0.3 -0.0001418016 660.1492 -660.1492 0.0001418016 -0.2 -0.000128447 660.1417 -660.1417 0.000128447 -0.1 -0.000110173 660.1402 -660.1402 0.000110173 2.220446e-16 3.724e-19 660.1498 -660.1498 -3.724e-19 -1.20000 -0.0022384 0. 0. 0.0022384 -1.10000 -0.0021075 0. 0. 0.0021075 -1.00000 -0.0019816 0. 0. 0.0019816 -0.9 -0.0018607 0. 0. 0.0018607 -0.8 -0.0017452 0. 0. 0.0017452 -0.7 -0.0016359 0. 0. 0.0016359 -0.6 -0.0015343 0. 0. 0.0015343 -0.5 -0.0014437 0. 0. 0.0014437 -0.4 -0.0013687 0. 0. 0.0013687 -0.3 -0.0013046 0. 0. 0.0013046 -0.2 -0.0011722 0. 0. 0.0011722 -0.1 -0.0007731261 0. 0. 0.0007731261 2.220446e-16 1.7084e-18 0. 0. -1.7084e-18 -1.20000 -0.0054435 -660.6807 660.6807 0.0054435 -1.10000 -0.0051859 -660.6782 660.6782 0.0051859 -1.00000 -0.0049384 -660.6756 660.6756 0.0049384 -0.9 -0.0047035 -660.6730 660.6730 0.0047035 -0.8 -0.0044853 -660.6704 660.6704 0.0044853 -0.7 -0.0042897 -660.6679 660.6679 0.0042897 -0.6 -0.0041233 -660.6659 660.6659 0.0041233 -0.5 -0.0039796 -660.6675 660.6675 0.0039796 -0.4 -0.0037836 -660.6815 660.6815 0.0037836 -0.3 -0.0033654 -660.7084 660.7084 0.0033654 -0.2 -0.0026012 -660.7397 660.7397 0.0026012 -0.1 -0.0014702 -660.7705 660.7705 0.0014702 2.220446e-16 3.6276e-18 -660.7885 660.7885 -3.6276e-18 -1.20000 -0.0093621 -1321.6 1321.6 0.0093621 -1.10000 -0.0089864 -1321.6 1321.6 0.0089864 -1.00000 -0.0086389 -1321.6 1321.6 0.0086389 -0.9 -0.008327 -1321.6 1321.6 0.008327 -0.8 -0.0080556 -1321.6 1321.6 0.0080556 -0.7 -0.0078097 -1321.6 1321.6 0.0078097 -0.6 -0.007514 -1321.6 1321.6 0.007514 -0.5 -0.0070368 -1321.6 1321.6 0.0070368 -0.4 -0.006267 -1321.7 1321.7 0.006267 -0.3 -0.0051595 -1321.7 1321.7 0.0051595 -0.2 -0.0037232 -1321.8 1321.8 0.0037232 -0.1 -0.001991 -1321.8 1321.8 0.001991 2.220446e-16 4.5985e-18 -1321.8 1321.8 -4.5985e-18 -1.20000 -0.0003193783 490.5266 -490.5266 0.0003193783 -1.10000 -0.0002809978 490.5193 -490.5193 0.0002809978 -1.00000 -0.0002459574 490.5119 -490.5119 0.0002459574 -0.9 -0.0002140987 490.5045 -490.5045 0.0002140987 -0.8 -0.0001852625 490.4971 -490.4971 0.0001852625 -0.7 -0.0001592897 490.4897 -490.4897 0.0001592897 -0.6 -0.0001360228 490.4822 -490.4822 0.0001360228 -0.5 -0.0001153102 490.4747 -490.4747 0.0001153102 -0.4 -9.70269e-05 490.4672 -490.4672 9.70269e-05 -0.3 -8.11716e-05 490.4596 -490.4596 8.11716e-05 -0.2 -6.82664e-05 490.4521 -490.4521 6.82664e-05 -0.1 -5.79648e-05 490.4450 -490.4450 5.79648e-05 2.220446e-16 2.910e-19 490.4409 -490.4409 -2.910e-19 -1.20000 -0.0030379 0. 0. 0.0030379 -1.10000 -0.0028488 0. 0. 0.0028488 -1.00000 -0.0026673 0. 0. 0.0026673 -0.9 -0.0024933 0. 0. 0.0024933 -0.8 -0.0023267 0. 0. 0.0023267 -0.7 -0.0021678 0. 0. 0.0021678 -0.6 -0.0020172 0. 0. 0.0020172 -0.5 -0.0018768 0. 0. 0.0018768 -0.4 -0.0017511 0. 0. 0.0017511 -0.3 -0.0016479 0. 0. 0.0016479 -0.2 -0.0015242 0. 0. 0.0015242 -0.1 -0.001068 0. 0. 0.001068 2.220446e-16 3.2526e-18 0. 0. -3.2526e-18 -1.20000 -0.0082664 -491.0096 491.0096 0.0082664 -1.10000 -0.0078625 -491.0068 491.0068 0.0078625 -1.00000 -0.0074715 -491.0040 491.0040 0.0074715 -0.9 -0.0070953 -491.0013 491.0013 0.0070953 -0.8 -0.0067373 -490.9985 490.9985 0.0067373 -0.7 -0.0064037 -490.9957 490.9957 0.0064037 -0.6 -0.006105 -490.9932 490.9932 0.006105 -0.5 -0.0058495 -490.9925 490.9925 0.0058495 -0.4 -0.0055811 -491.0024 491.0024 0.0055811 -0.3 -0.0050466 -491.0284 491.0284 0.0050466 -0.2 -0.0039675 -491.0615 491.0615 0.0039675 -0.1 -0.0022696 -491.0943 491.0943 0.0022696 2.220446e-16 5.1384e-18 -491.1160 491.1160 -5.1384e-18 -1.20000 -0.0148219 -982.2580 982.2580 0.0148219 -1.10000 -0.0141922 -982.2544 982.2544 0.0141922 -1.00000 -0.0135961 -982.2509 982.2509 0.0135961 -0.9 -0.0130441 -982.2477 982.2477 0.0130441 -0.8 -0.0125484 -982.2460 982.2460 0.0125484 -0.7 -0.012105 -982.2505 982.2505 0.012105 -0.6 -0.0116351 -982.2691 982.2691 0.0116351 -0.5 -0.0109451 -982.3022 982.3022 0.0109451 -0.4 -0.0098197 -982.3435 982.3435 0.0098197 -0.3 -0.0081408 -982.3871 982.3871 0.0081408 -0.2 -0.0059058 -982.4295 982.4295 0.0059058 -0.1 -0.0031706 -982.4692 982.4692 0.0031706 2.220446e-16 1.07507e-17 -982.4953 982.4953 -1.07507e-17 -1.20000 -0.0004079534 931.2645 -931.2645 0.0004079534 -1.10000 -0.0003770096 931.2579 -931.2579 0.0003770096 -1.00000 -0.0003477249 931.2511 -931.2511 0.0003477249 -0.9 -0.0003200967 931.2443 -931.2443 0.0003200967 -0.8 -0.0002941599 931.2374 -931.2374 0.0002941599 -0.7 -0.0002700267 931.2305 -931.2305 0.0002700267 -0.6 -0.0002479707 931.2234 -931.2234 0.0002479707 -0.5 -0.0002285435 931.2163 -931.2163 0.0002285435 -0.4 -0.0002124821 931.2092 -931.2092 0.0002124821 -0.3 -0.0001996529 931.2023 -931.2023 0.0001996529 -0.2 -0.0001857059 931.1986 -931.1986 0.0001857059 -0.1 -0.0001451487 931.2158 -931.2158 0.0001451487 2.220446e-16 3.997e-19 931.2295 -931.2295 -3.997e-19 -1.20000 -0.001534 0. 0. 0.001534 -1.10000 -0.0014507 0. 0. 0.0014507 -1.00000 -0.0013709 0. 0. 0.0013709 -0.9 -0.0012952 0. 0. 0.0012952 -0.8 -0.0012245 0. 0. 0.0012245 -0.7 -0.0011603 0. 0. 0.0011603 -0.6 -0.0011047 0. 0. 0.0011047 -0.5 -0.0010594 0. 0. 0.0010594 -0.4 -0.0010214 0. 0. 0.0010214 -0.3 -0.0009681274 0. 0. 0.0009681274 -0.2 -0.0008274579 0. 0. 0.0008274579 -0.1 -0.0005160627 0. 0. 0.0005160627 2.220446e-16 1.0802e-18 0. 0. -1.0802e-18 -1.20000 -0.0032867 -931.7106 931.7106 0.0032867 -1.10000 -0.0031418 -931.7083 931.7083 0.0031418 -1.00000 -0.0030062 -931.7060 931.7060 0.0030062 -0.9 -0.0028826 -931.7036 931.7036 0.0028826 -0.8 -0.0027741 -931.7014 931.7014 0.0027741 -0.7 -0.0026831 -931.6994 931.6994 0.0026831 -0.6 -0.0026071 -931.6988 931.6988 0.0026071 -0.5 -0.0025242 -931.7046 931.7046 0.0025242 -0.4 -0.0023703 -931.7223 931.7223 0.0023703 -0.3 -0.0020653 -931.7485 931.7485 0.0020653 -0.2 -0.0015681 -931.7773 931.7773 0.0015681 -0.1 -0.0008750322 -931.8056 931.8056 0.0008750322 2.220446e-16 2.3403e-18 -931.8188 931.8188 -2.3403e-18 -1.20000 -0.0053906 -1863.6 1863.6 0.0053906 -1.10000 -0.0052028 -1863.6 1863.6 0.0052028 -1.00000 -0.0050367 -1863.6 1863.6 0.0050367 -0.9 -0.0048945 -1863.6 1863.6 0.0048945 -0.8 -0.0047721 -1863.6 1863.6 0.0047721 -0.7 -0.0046462 -1863.6 1863.6 0.0046462 -0.6 -0.0044602 -1863.7 1863.7 0.0044602 -0.5 -0.0041458 -1863.7 1863.7 0.0041458 -0.4 -0.0036598 -1863.7 1863.7 0.0036598 -0.3 -0.0029902 -1863.8 1863.8 0.0029902 -0.2 -0.0021453 -1863.8 1863.8 0.0021453 -0.1 -0.0011422 -1863.9 1863.9 0.0011422 2.220446e-16 3.8038e-18 -1863.9 1863.9 -3.8038e-18 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_ig_lw.standard0000644000175000017500000001723414163340332025030 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0006012178 7.91620015378764e-14 4.87209009464986e-14 5.97690011611295e-15 -1 0.0005600498 8.04834015635471e-14 4.97966009673961e-14 6.11830011885992e-15 -0.8 0.0005201262 8.18525015901446e-14 5.09070009889678e-14 6.27180012184196e-15 -0.6 0.0004841936 8.32759016177969e-14 5.20634010114332e-14 6.43230012495998e-15 -0.4 0.0004632225 8.47548016465274e-14 5.3311401035678e-14 6.55660012737475e-15 -0.2 0.0004404178 8.89268017275766e-14 5.43146010551671e-14 1.00421001950874e-14 -5.55111512312578e-17 3.895e-19 1.16159702256629e-13 4.76254009252163e-14 4.76254009252163e-14 0.2 -0.0005767042 1.20897702348674e-13 4.13318008029509e-14 5.89795011457919e-14 -1.2 0.0011855 9.02971017541974e-14 6.15627011959756e-14 7.61700014797509e-15 -1 0.0011088 9.16256017800061e-14 6.26330012167683e-14 7.81880015189545e-15 -0.8 0.0010451 9.30128018069552e-14 6.37383012382409e-14 8.04410015627234e-15 -0.6 0.0010141 9.44689018352428e-14 6.48970012607509e-14 8.28650016098144e-15 -0.4 0.0009918237 9.79681019032216e-14 6.59219012806616e-14 1.09510002127445e-14 -0.2 0.000563972 1.21546502361278e-13 5.8869401143653e-14 4.41140008570005e-14 -5.55111512312578e-17 1.274e-19 1.32550702575056e-13 5.75403011178326e-14 5.75403011178326e-14 0.2 -0.0004413713 1.32105202566401e-13 5.90117011464174e-14 5.56247010806184e-14 -1.2 0.0014986 9.32160018109027e-14 6.47231012573725e-14 9.22670017924665e-15 -1 0.0014289 9.45242018363171e-14 6.57226012767898e-14 9.50310018461627e-15 -0.8 0.0014045 9.59080018632001e-14 6.67593012969297e-14 9.82100019079209e-15 -0.6 0.0013793 9.95319019336014e-14 6.76915013150395e-14 1.26922002465708e-14 -0.4 0.0009708981 1.18499902302092e-13 6.34527012326925e-14 3.74810007281416e-14 -0.2 0.0004243092 1.31787202560224e-13 5.50544010695392e-14 6.03037011715171e-14 -5.55111512312578e-17 2.657e-19 1.36071402643453e-13 6.00214011660328e-14 6.00214011660328e-14 0.2 -0.0003059039 1.34581402614506e-13 6.66775012953406e-14 5.18607010074953e-14 -1.2 0.0016512 9.37413018211077e-14 6.49693012621555e-14 1.08174002101491e-14 -1 0.0016419 9.5075801847033e-14 6.59023012802808e-14 1.12074002177256e-14 -0.8 0.0016056 9.91828019268195e-14 6.67211012961876e-14 1.46838002852615e-14 -0.6 0.0012235 1.14606302226451e-13 6.40423012441467e-14 3.37864006563668e-14 -0.4 0.0007081921 1.27604902478974e-13 5.72379011119579e-14 5.44915010586037e-14 -0.2 0.0002941262 1.33925702601768e-13 5.12378009953943e-14 6.7320701307836e-14 -5.55111512312578e-17 1.184e-19 1.36015002642357e-13 6.04428011742194e-14 6.04428011742194e-14 0.2 -0.0002060969 1.34243802607948e-13 7.07809013750571e-14 4.83213009387356e-14 -1.2 0.0007911354 7.88832015324601e-14 4.85547009432698e-14 5.81780011302212e-15 -1 0.0007358412 8.01973015579891e-14 4.96205009639751e-14 5.95370011566224e-15 -0.8 0.0006815397 8.1558501584433e-14 5.07203009853408e-14 6.1014001185316e-15 -0.6 0.000628822 8.29719016118911e-14 5.18645010075691e-14 6.25560012152724e-15 -0.4 0.0005827337 8.44288016401942e-14 5.30963010314993e-14 6.36350012362341e-15 -0.2 0.0005632668 8.61471016735755e-14 5.46804010622735e-14 6.42240012476765e-15 -5.55111512312578e-17 2.466e-19 1.15566702245109e-13 4.70577009141877e-14 4.70577009141877e-14 0.2 -0.0010042 1.20029702331811e-13 3.6344300706059e-14 6.23900012120475e-14 -1.2 0.0019027 9.19153017856341e-14 6.31316012264546e-14 7.45340014479684e-15 -1 0.0017753 9.32390018113495e-14 6.41987012471851e-14 7.64930014860258e-15 -0.8 0.0016555 9.46207018381918e-14 6.53009012685974e-14 7.86770015284543e-15 -0.6 0.001564 9.605830186612e-14 6.64564012910453e-14 8.08860015713684e-15 -0.4 0.0015369 9.7895801901817e-14 6.77265013157194e-14 8.63930016783526e-15 -0.2 0.000980867 1.21633202362962e-13 6.20171012048032e-14 4.03431007837435e-14 -5.55111512312578e-17 5.028e-19 1.35080302624198e-13 5.85237011369371e-14 5.85237011369371e-14 0.2 -0.0007797341 1.33983502602891e-13 5.86156011387224e-14 5.72952011130711e-14 -1.2 0.0025038 9.45983018377566e-14 6.59270012807607e-14 9.0570001759499e-15 -1 0.0023518 9.5901101863066e-14 6.69237013001235e-14 9.32650018118546e-15 -0.8 0.0022564 9.72568018894032e-14 6.79570013201974e-14 9.61290018674935e-15 -0.6 0.0022321 9.94427019318685e-14 6.90618013416603e-14 1.07277002084065e-14 -0.4 0.0016876 1.17970302291803e-13 6.61088012842925e-14 3.35450006516771e-14 -0.2 0.0007446157 1.33772002598782e-13 5.65312010982289e-14 6.01333011682067e-14 -5.55111512312578e-17 2.232e-22 1.38255302685879e-13 6.07765011807021e-14 6.07765011807021e-14 0.2 -0.0005439323 1.36425102650324e-13 6.69533013006985e-14 5.27584010249349e-14 -1.2 0.0027476 9.48470018425881e-14 6.58430012791288e-14 1.06408002067183e-14 -1 0.0026761 9.6136801867645e-14 6.67738012972114e-14 1.09808002133235e-14 -0.8 0.0026426 9.90766019247563e-14 6.7767401316514e-14 1.30101002527466e-14 -0.6 0.0021155 1.14073702216104e-13 6.60003012821846e-14 3.05932005943326e-14 -0.4 0.0012444 1.28871202503575e-13 5.87129011406127e-14 5.35691010406843e-14 -0.2 0.0005192825 1.35742002637053e-13 5.20240010106677e-14 6.76316013138758e-14 -5.55111512312578e-17 3.198e-19 1.37768202676416e-13 6.09610011842864e-14 6.09610011842864e-14 0.2 -0.0003700521 1.35801102638201e-13 7.11154013815554e-14 4.88401009488143e-14 -1.2 0.0003983939 7.86811015285339e-14 4.79491009315049e-14 6.16520011977104e-15 -1 0.0003723399 8.00034015542222e-14 4.90284009524724e-14 6.31370012265594e-15 -0.8 0.0003500666 8.13746015808604e-14 5.01432009741295e-14 6.4752001257934e-15 -0.6 0.0003369252 8.28049016086468e-14 5.13052009967036e-14 6.64870012916397e-15 -0.4 0.0003338169 8.44600016408003e-14 5.25326010205483e-14 7.01280013623733e-15 -0.2 0.000275275 9.48095018418596e-14 5.15553010015623e-14 1.98665003859455e-14 -5.55111512312578e-17 1.381e-19 1.15278802239516e-13 4.74675009221488e-14 4.74675009221488e-14 0.2 -0.0002897521 1.20146102334073e-13 4.50266008747296e-14 5.52503010733449e-14 -1.2 0.0006592021 8.79789017091618e-14 5.93028011520726e-14 7.80740015167398e-15 -1 0.0006260131 8.9313601735091e-14 6.03781011729624e-14 8.01750015575558e-15 -0.8 0.0006089179 9.07117017622518e-14 6.14886011945361e-14 8.25660016040057e-15 -0.6 0.0006072538 9.23210017935156e-14 6.26386012168771e-14 8.68990016881827e-15 -0.4 0.0005527724 1.00102901944694e-13 6.25421012150024e-14 1.74170003383592e-14 -0.2 0.0002856844 1.19915602329595e-13 5.53791010758471e-14 4.6865200910448e-14 -5.55111512312578e-17 1.799e-19 1.28912402504375e-13 5.61084010900152e-14 5.61084010900152e-14 0.2 -0.0002186098 1.29188302509735e-13 5.89565011453451e-14 5.35865010410224e-14 -1.2 0.0008113186 9.11538017708405e-14 6.29413012227576e-14 9.42690018313593e-15 -1 0.0007977834 9.24767017965404e-14 6.39477012423089e-14 9.71860018880277e-15 -0.8 0.0008006549 9.40297018267104e-14 6.49810012623827e-14 1.02351001988368e-14 -0.6 0.00074641 1.0067610195583e-13 6.52225012670744e-14 1.72061003342621e-14 -0.4 0.0004915954 1.17801102288516e-13 6.02448011703728e-14 4.10247007969849e-14 -0.2 0.0002128686 1.28724202500719e-13 5.32336010341666e-14 6.00366011663281e-14 -5.55111512312578e-17 2.990e-22 1.3286490258116e-13 5.89059011443621e-14 5.89059011443621e-14 0.2 -0.0001502196 1.31827902561014e-13 6.60296012827539e-14 5.07284009854982e-14 -1.2 0.0009094077 9.20666017885734e-14 6.36691012368965e-14 1.10379002144328e-14 -1 0.0009177711 9.36031018184229e-14 6.45970012549228e-14 1.1660500226528e-14 -0.8 0.000860477 9.98157019391148e-14 6.49182012611627e-14 1.79829003493529e-14 -0.6 0.0006223468 1.14363702221738e-13 6.15105011949615e-14 3.71117007209672e-14 -0.4 0.0003553591 1.25369002435537e-13 5.54833010778714e-14 5.50590010696285e-14 -0.2 0.0001464072 1.31192702548674e-13 5.02497009761985e-14 6.66429012946684e-14 -5.55111512312578e-17 1.571e-19 1.33405802591668e-13 5.96716011592373e-14 5.96716011592373e-14 0.2 -9.98373e-05 1.3191620256273e-13 7.0137201362552e-14 4.768890092645e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_core_st.standard0000644000175000017500000000471514163340332025341 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -6.66361e-05 0. 0. 6.66361e-05 -1.10000 -6.42418e-05 0. 0. 6.42418e-05 -1.00000 -6.13729e-05 0. 0. 6.13729e-05 -0.9 -5.79583e-05 0. 0. 5.79583e-05 -0.8 -5.39254e-05 0. 0. 5.39254e-05 -0.7 -4.92083e-05 0. 0. 4.92083e-05 -0.6 -4.37636e-05 0. 0. 4.37636e-05 -0.5 -3.75969e-05 0. 0. 3.75969e-05 -0.4 -3.08075e-05 0. 0. 3.08075e-05 -0.3 -2.36457e-05 0. 0. 2.36457e-05 -0.2 -1.65932e-05 0. 0. 1.65932e-05 -1.20000 -0.0006761776 0. 0. 0.0006761776 -1.10000 -0.0005953081 0. 0. 0.0005953081 -1.00000 -0.0005167388 0. 0. 0.0005167388 -0.9 -0.000440929 0. 0. 0.000440929 -0.8 -0.0003682312 0. 0. 0.0003682312 -0.7 -0.0002992246 0. 0. 0.0002992246 -0.6 -0.0002348618 0. 0. 0.0002348618 -0.5 -0.0001764769 0. 0. 0.0001764769 -0.4 -0.0001256546 0. 0. 0.0001256546 -0.3 -8.39585e-05 0. 0. 8.39585e-05 -0.2 -5.24658e-05 0. 0. 5.24658e-05 -1.20000 -0.0001066143 0. 0. 0.0001066143 -1.10000 -0.0001021109 0. 0. 0.0001021109 -1.00000 -9.67517e-05 0. 0. 9.67517e-05 -0.9 -9.04074e-05 0. 0. 9.04074e-05 -0.8 -8.29436e-05 0. 0. 8.29436e-05 -0.7 -7.42344e-05 0. 0. 7.42344e-05 -0.6 -6.41898e-05 0. 0. 6.41898e-05 -0.5 -5.2809e-05 0. 0. 5.2809e-05 -0.4 -4.02856e-05 0. 0. 4.02856e-05 -0.3 -2.72212e-05 0. 0. 2.72212e-05 -0.2 -1.50407e-05 0. 0. 1.50407e-05 -1.20000 -0.0010674 0. 0. 0.0010674 -1.10000 -0.0009336662 0. 0. 0.0009336662 -1.00000 -0.0008033093 0. 0. 0.0008033093 -0.9 -0.0006769163 0. 0. 0.0006769163 -0.8 -0.0005552439 0. 0. 0.0005552439 -0.7 -0.0004397188 0. 0. 0.0004397188 -0.6 -0.0003325386 0. 0. 0.0003325386 -0.5 -0.0002365402 0. 0. 0.0002365402 -0.4 -0.0001548777 0. 0. 0.0001548777 -0.3 -9.04946e-05 0. 0. 9.04946e-05 -0.2 -4.52942e-05 0. 0. 4.52942e-05 -1.20000 -3.81339e-05 0. 0. 3.81339e-05 -1.10000 -3.7068e-05 0. 0. 3.7068e-05 -1.00000 -3.57675e-05 0. 0. 3.57675e-05 -0.9 -3.41935e-05 0. 0. 3.41935e-05 -0.8 -3.23068e-05 0. 0. 3.23068e-05 -0.7 -3.00729e-05 0. 0. 3.00729e-05 -0.6 -2.74724e-05 0. 0. 2.74724e-05 -0.5 -2.45153e-05 0. 0. 2.45153e-05 -0.4 -2.1261e-05 0. 0. 2.1261e-05 -0.3 -1.78364e-05 0. 0. 1.78364e-05 -0.2 -1.44126e-05 0. 0. 1.44126e-05 -1.20000 -0.0003946627 0. 0. 0.0003946627 -1.10000 -0.000350608 0. 0. 0.000350608 -1.00000 -0.0003077249 0. 0. 0.0003077249 -0.9 -0.0002665248 0. 0. 0.0002665248 -0.8 -0.0002273151 0. 0. 0.0002273151 -0.7 -0.000190385 0. 0. 0.000190385 -0.6 -0.0001561025 0. 0. 0.0001561025 -0.5 -0.0001249621 0. 0. 0.0001249621 -0.4 -9.7528e-05 0. 0. 9.7528e-05 -0.3 -7.40116e-05 0. 0. 7.40116e-05 -0.2 -5.42154e-05 0. 0. 5.42154e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_ig_st.standard0000644000175000017500000001705714163340332024646 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -6.1502e-06 -34.1526 34.1526 6.1502e-06 -1.10000 -5.2718e-06 -34.1524 34.1524 5.2718e-06 -1.00000 -4.4901e-06 -34.1522 34.1522 4.4901e-06 -0.9 -3.7988e-06 -34.1520 34.1520 3.7988e-06 -0.8 -3.1912e-06 -34.1519 34.1519 3.1912e-06 -0.7 -2.6611e-06 -34.1517 34.1517 2.6611e-06 -0.6 -2.2024e-06 -34.1515 34.1515 2.2024e-06 -0.5 -1.8099e-06 -34.1513 34.1513 1.8099e-06 -0.4 -1.4803e-06 -34.1511 34.1511 1.4803e-06 -0.3 -1.2161e-06 -34.1510 34.1510 1.2161e-06 -0.2 -1.0209e-06 -34.1508 34.1508 1.0209e-06 -0.1 -8.449273e-07 -34.1506 34.1506 8.449273e-07 2.220446e-16 3.619e-21 -34.1503 34.1503 -3.619e-21 -1.20000 -7.19628e-05 -68.3225 68.3225 7.19628e-05 -1.10000 -6.68405e-05 -68.3221 68.3221 6.68405e-05 -1.00000 -6.1962e-05 -68.3218 68.3218 6.1962e-05 -0.9 -5.73261e-05 -68.3215 68.3215 5.73261e-05 -0.8 -5.29358e-05 -68.3211 68.3211 5.29358e-05 -0.7 -4.88024e-05 -68.3208 68.3208 4.88024e-05 -0.6 -4.49569e-05 -68.3204 68.3204 4.49569e-05 -0.5 -4.1474e-05 -68.3201 68.3201 4.1474e-05 -0.4 -3.8497e-05 -68.3197 68.3197 3.8497e-05 -0.3 -3.61207e-05 -68.3194 68.3194 3.61207e-05 -0.2 -3.33702e-05 -68.3197 68.3197 3.33702e-05 -0.1 -2.40116e-05 -68.3221 68.3221 2.40116e-05 2.220446e-16 6.846e-20 -68.3243 68.3243 -6.846e-20 -1.20000 -0.000210699 -102.5031 102.5031 0.000210699 -1.10000 -0.0001995924 -102.5028 102.5028 0.0001995924 -1.00000 -0.0001889338 -102.5024 102.5024 0.0001889338 -0.9 -0.0001787948 -102.5021 102.5021 0.0001787948 -0.8 -0.0001693015 -102.5018 102.5018 0.0001693015 -0.7 -0.0001606621 -102.5014 102.5014 0.0001606621 -0.6 -0.0001531601 -102.5011 102.5011 0.0001531601 -0.5 -0.0001469334 -102.5009 102.5009 0.0001469334 -0.4 -0.0001406341 -102.5015 102.5015 0.0001406341 -0.3 -0.0001280243 -102.5041 102.5041 0.0001280243 -0.2 -0.0001014699 -102.5077 102.5077 0.0001014699 -0.1 -5.8496e-05 -102.5115 102.5115 5.8496e-05 2.220446e-16 1.094e-19 -102.5138 102.5138 -1.094e-19 -1.20000 -0.0003897903 -136.6892 136.6892 0.0003897903 -1.10000 -0.0003728171 -136.6889 136.6889 0.0003728171 -1.00000 -0.0003570024 -136.6886 136.6886 0.0003570024 -0.9 -0.0003426591 -136.6883 136.6883 0.0003426591 -0.8 -0.0003300981 -136.6880 136.6880 0.0003300981 -0.7 -0.0003192208 -136.6881 136.6881 0.0003192208 -0.6 -0.0003079691 -136.6892 136.6892 0.0003079691 -0.5 -0.0002907752 -136.6917 136.6917 0.0002907752 -0.4 -0.0002615678 -136.6951 136.6951 0.0002615678 -0.3 -0.0002172859 -136.6986 136.6986 0.0002172859 -0.2 -0.0001579069 -136.7022 136.7022 0.0001579069 -0.1 -8.48884e-05 -136.7055 136.7055 8.48884e-05 2.220446e-16 1.955e-19 -136.7075 136.7075 -1.955e-19 -1.20000 -3.7264e-06 -25.3787 25.3787 3.7264e-06 -1.10000 -3.0008e-06 -25.3785 25.3785 3.0008e-06 -1.00000 -2.391e-06 -25.3783 25.3783 2.391e-06 -0.9 -1.8843e-06 -25.3781 25.3781 1.8843e-06 -0.8 -1.4682e-06 -25.3780 25.3780 1.4682e-06 -0.7 -1.1308e-06 -25.3778 25.3778 1.1308e-06 -0.6 -8.606623e-07 -25.3777 25.3777 8.606623e-07 -0.5 -6.472633e-07 -25.3775 25.3775 6.472633e-07 -0.4 -4.811385e-07 -25.3774 25.3774 4.811385e-07 -0.3 -3.544749e-07 -25.3772 25.3772 3.544749e-07 -0.2 -2.631194e-07 -25.3771 25.3771 2.631194e-07 -0.1 -2.019218e-07 -25.3770 25.3770 2.019218e-07 2.220446e-16 1.026e-21 -25.3766 25.3766 -1.026e-21 -1.20000 -9.77422e-05 -50.7750 50.7750 9.77422e-05 -1.10000 -9.02551e-05 -50.7746 50.7746 9.02551e-05 -1.00000 -8.31497e-05 -50.7743 50.7743 8.31497e-05 -0.9 -7.64183e-05 -50.7739 50.7739 7.64183e-05 -0.8 -7.00546e-05 -50.7735 50.7735 7.00546e-05 -0.7 -6.40548e-05 -50.7732 50.7732 6.40548e-05 -0.6 -5.84229e-05 -50.7728 50.7728 5.84229e-05 -0.5 -5.31845e-05 -50.7724 50.7724 5.31845e-05 -0.4 -4.84294e-05 -50.7720 50.7720 4.84294e-05 -0.3 -4.43937e-05 -50.7717 50.7717 4.43937e-05 -0.2 -4.10523e-05 -50.7715 50.7715 4.10523e-05 -0.1 -3.18414e-05 -50.7734 50.7734 3.18414e-05 2.220446e-16 9.962e-20 -50.7761 50.7761 -9.962e-20 -1.20000 -0.0003246843 -76.1826 76.1826 0.0003246843 -1.10000 -0.0003070548 -76.1823 76.1823 0.0003070548 -1.00000 -0.0002900529 -76.1819 76.1819 0.0002900529 -0.9 -0.000273725 -76.1815 76.1815 0.000273725 -0.8 -0.0002581649 -76.1812 76.1812 0.0002581649 -0.7 -0.0002435599 -76.1808 76.1808 0.0002435599 -0.6 -0.0002302613 -76.1804 76.1804 0.0002302613 -0.5 -0.0002187766 -76.1801 76.1801 0.0002187766 -0.4 -0.0002087177 -76.1804 76.1804 0.0002087177 -0.3 -0.0001926563 -76.1826 76.1826 0.0001926563 -0.2 -0.0001556528 -76.1864 76.1864 0.0001556528 -0.1 -9.09697e-05 -76.1905 76.1905 9.09697e-05 2.220446e-16 2.081e-19 -76.1932 76.1932 -2.081e-19 -1.20000 -0.0006254469 -101.5958 101.5958 0.0006254469 -1.10000 -0.0005968844 -101.5954 101.5954 0.0005968844 -1.00000 -0.0005697477 -101.5951 101.5951 0.0005697477 -0.9 -0.0005444432 -101.5948 101.5948 0.0005444432 -0.8 -0.0005215185 -101.5945 101.5945 0.0005215185 -0.7 -0.0005013286 -101.5945 101.5945 0.0005013286 -0.6 -0.0004820905 -101.5954 101.5954 0.0004820905 -0.5 -0.0004563189 -101.5977 101.5977 0.0004563189 -0.4 -0.0004132082 -101.6010 101.6010 0.0004132082 -0.3 -0.00034562 -101.6047 101.6047 0.00034562 -0.2 -0.0002524846 -101.6084 101.6084 0.0002524846 -0.1 -0.000136237 -101.6119 101.6119 0.000136237 2.220446e-16 3.453e-19 -101.6143 101.6143 -3.453e-19 -1.20000 -7.8237e-06 -48.1680 48.1680 7.8237e-06 -1.10000 -6.9821e-06 -48.1678 48.1678 6.9821e-06 -1.00000 -6.2084e-06 -48.1676 48.1676 6.2084e-06 -0.9 -5.5001e-06 -48.1674 48.1674 5.5001e-06 -0.8 -4.8551e-06 -48.1672 48.1672 4.8551e-06 -0.7 -4.2724e-06 -48.1670 48.1670 4.2724e-06 -0.6 -3.7533e-06 -48.1668 48.1668 3.7533e-06 -0.5 -3.3034e-06 -48.1666 48.1666 3.3034e-06 -0.4 -2.9323e-06 -48.1665 48.1665 2.9323e-06 -0.3 -2.6403e-06 -48.1663 48.1663 2.6403e-06 -0.2 -2.3852e-06 -48.1661 48.1661 2.3852e-06 -0.1 -1.9488e-06 -48.1660 48.1660 1.9488e-06 2.220446e-16 6.629e-21 -48.1658 48.1658 -6.629e-21 -1.20000 -4.86735e-05 -96.3524 96.3524 4.86735e-05 -1.10000 -4.54812e-05 -96.3521 96.3521 4.54812e-05 -1.00000 -4.24436e-05 -96.3518 96.3518 4.24436e-05 -0.9 -3.95714e-05 -96.3515 96.3515 3.95714e-05 -0.8 -3.68855e-05 -96.3512 96.3512 3.68855e-05 -0.7 -3.4424e-05 -96.3509 96.3509 3.4424e-05 -0.6 -3.22478e-05 -96.3506 96.3506 3.22478e-05 -0.5 -3.0425e-05 -96.3503 96.3503 3.0425e-05 -0.4 -2.89532e-05 -96.3500 96.3500 2.89532e-05 -0.3 -2.75302e-05 -96.3499 96.3499 2.75302e-05 -0.2 -2.46014e-05 -96.3509 96.3509 2.46014e-05 -0.1 -1.64136e-05 -96.3535 96.3535 1.64136e-05 2.220446e-16 3.751e-20 -96.3549 96.3549 -3.751e-20 -1.20000 -0.0001241326 -144.5472 144.5472 0.0001241326 -1.10000 -0.0001179613 -144.5469 144.5469 0.0001179613 -1.00000 -0.0001121561 -144.5465 144.5465 0.0001121561 -0.9 -0.0001068061 -144.5462 144.5462 0.0001068061 -0.8 -0.0001020288 -144.5459 144.5459 0.0001020288 -0.7 -9.79423e-05 -144.5456 144.5456 9.79423e-05 -0.6 -9.4572e-05 -144.5454 144.5454 9.4572e-05 -0.5 -9.15563e-05 -144.5454 144.5454 9.15563e-05 -0.4 -8.71731e-05 -144.5466 144.5466 8.71731e-05 -0.3 -7.77701e-05 -144.5492 144.5492 7.77701e-05 -0.2 -6.04158e-05 -144.5526 144.5526 6.04158e-05 -0.1 -3.43425e-05 -144.5561 144.5561 3.43425e-05 2.220446e-16 6.199e-20 -144.5578 144.5578 -6.199e-20 -1.20000 -0.0002196222 -192.7473 192.7473 0.0002196222 -1.10000 -0.0002111348 -192.7470 192.7470 0.0002111348 -1.00000 -0.0002035396 -192.7467 192.7467 0.0002035396 -0.9 -0.0001969636 -192.7465 192.7465 0.0001969636 -0.8 -0.0001913965 -192.7463 192.7463 0.0001913965 -0.7 -0.0001863308 -192.7466 192.7466 0.0001863308 -0.6 -0.0001799074 -192.7480 192.7480 0.0001799074 -0.5 -0.0001689108 -192.7505 192.7505 0.0001689108 -0.4 -0.000150707 -192.7537 192.7537 0.000150707 -0.3 -0.0001242818 -192.7571 192.7571 0.0001242818 -0.2 -8.98316e-05 -192.7604 192.7604 8.98316e-05 -0.1 -4.81036e-05 -192.7636 192.7636 4.81036e-05 2.220446e-16 1.599e-19 -192.7651 192.7651 -1.599e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_core_lw.standard0000644000175000017500000000632314163340332025361 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.36741702656474e-13 6.04109011735996e-14 6.04109011735996e-14 -0.8 0. 1.39159202703439e-13 6.00364011663242e-14 6.00364011663242e-14 -0.4 0. 1.37413402669523e-13 5.63341010943998e-14 5.63341010943998e-14 1.11022302462516e-16 0. 1.2612480245022e-13 3.14576006111253e-14 3.14576006111253e-14 0.4 0. 1.36809902657799e-13 -5.0207000975369e-15 -5.0207000975369e-15 0.8 0. 1.50733202928287e-13 -7.34060014260548e-15 -7.34060014260548e-15 1.2 0. 1.55994303030494e-13 -6.43990012510763e-15 -6.43990012510763e-15 -1.2 0.0017128 1.00195701946497e-13 6.53158012688869e-14 1.58099003071382e-14 -0.8 0.0015148 9.89161019216383e-14 6.62270012865887e-14 9.7573001895546e-15 -0.4 0.0010573 9.91063019253333e-14 6.04575011745049e-14 6.94610013494155e-15 1.11022302462516e-16 0.0002892865 1.0106270196334e-13 2.25807004386742e-14 3.92740007629741e-15 0.4 2.06133e-05 1.26449202456523e-13 -1.3471800261716e-14 5.02359709759318e-16 0.8 2.5699e-06 1.41175202742604e-13 -9.26560018000236e-15 -3.3547000651716e-15 1.2 6.547151e-07 1.4641310284436e-13 -4.55900008856747e-15 -7.29940014180509e-15 -1.2 0. 1.38079702682468e-13 6.06724011786798e-14 6.06724011786798e-14 -0.8 0. 1.40953402738295e-13 6.07764011807002e-14 6.07764011807002e-14 -0.4 0. 1.38984202700039e-13 5.66394011003309e-14 5.66394011003309e-14 1.11022302462516e-16 0. 1.10261402142043e-13 1.89732003685914e-14 1.89732003685914e-14 0.4 0. 1.41637102751577e-13 -6.00970011675015e-15 -6.00970011675015e-15 0.8 0. 1.5454200300228e-13 -5.5805001084121e-15 -5.5805001084121e-15 1.2 0. 1.58438903077985e-13 -5.71510011102697e-15 -5.71510011102697e-15 -1.2 0.0028456 1.00109101944815e-13 6.61843012857592e-14 1.4394900279649e-14 -0.8 0.0024981 9.99656019420269e-14 6.73402013082148e-14 9.56390018579742e-15 -0.4 0.0016944 9.95444019338442e-14 6.19411012033268e-14 6.76360013139613e-15 1.11022302462516e-16 0.000243612 9.0371101755635e-14 1.1763400228527e-14 3.83410007448488e-15 0.4 3.0058e-06 1.32018902564725e-13 -1.16191002257237e-14 6.90535513415e-16 0.8 2.301615e-07 1.44830502813615e-13 -8.10100015737774e-15 -3.21210006240131e-15 1.2 5.32817e-08 1.4880770289088e-13 -4.59960008935621e-15 -7.16600013921354e-15 -1.2 0. 1.34682702616474e-13 6.05186011756919e-14 6.05186011756919e-14 -0.8 0. 1.36353302648929e-13 6.01379011682961e-14 6.01379011682961e-14 -0.4 0. 1.3494090262149e-13 5.63159010940463e-14 5.63159010940463e-14 1.11022302462516e-16 0. 1.31966002563697e-13 4.07984007925885e-14 4.07984007925885e-14 0.4 0. 1.39168602703622e-13 1.57122003052402e-14 1.57122003052402e-14 0.8 0. 1.47140002858482e-13 -2.39615504654999e-16 -2.39615504654999e-16 1.2 0. 1.52404302960751e-13 -5.52980010742716e-15 -5.52980010742716e-15 -1.2 0.0009067834 1.00764401957545e-13 6.38679012407586e-14 1.85923003611917e-14 -0.8 0.0008403078 9.7461201893374e-14 6.45898012547829e-14 1.00241001947377e-14 -0.4 0.000580602 9.88507019203678e-14 5.82783011321697e-14 7.16520013919799e-15 1.11022302462516e-16 0.0002579542 1.06339302065848e-13 3.43173006666805e-14 4.05650007880543e-15 0.4 4.75516e-05 1.23671202402554e-13 3.82260007426147e-15 3.71624807219537e-16 0.8 1.11366e-05 1.36184902645657e-13 -6.67690012971181e-15 -3.57800006950963e-15 1.2 3.6652e-06 1.42609502770468e-13 -4.87600009472582e-15 -7.52740014623444e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1d_sw.standard0000644000175000017500000004522114163340332025144 0ustar carstencarstenFreq N(d) 100.00000 1.7722096096644e-19 125.89254 1.4077413952144e-19 158.48932 1.1182342688001e-19 199.52623 8.882706669769e-20 251.18864 7.056041255041e-20 316.22777 5.605070455009e-20 398.10717 4.45252201e-20 501.18723 3.537017444416e-20 630.95734 2.809810710001e-20 794.32823 2.232167473936e-20 1000 1.773329008896e-20 1258.93 1.408862172025e-20 1584.89 1.119353420025e-20 1995.26 8.89390455625e-21 2511.89 7.06724367561e-21 3162.28 5.61625839889e-21 3981.07 4.463709721e-21 5011.87 3.54821557561e-21 6309.57 2.82100139161e-21 7943.28 2.24335796881e-21 10000 1.78452174096e-21 12589.25 1.42005370896e-21 15848.93 1.13054647696e-21 19952.62 9.0058809604e-22 25118.86 7.17918436e-22 31622.78 5.7282199569e-22 39810.72 4.5756632464e-22 50118.72 3.6601429225e-22 63095.73 2.9329645081e-22 79432.82 2.35530409e-22 100000 1.8964594944e-22 125892.54 1.5320003076e-22 158489.32 1.2424892089e-22 199526.23 1.0125390625e-22 251188.64 8.298663409e-23 316227.77 6.847728001e-23 398107.17 5.695117156e-23 501187.23 4.779648225e-23 630957.34 4.052468281e-23 794328.23 3.474748809e-23 1000000 3.015986724e-23 1258930 2.651529049e-23 1584890 2.36196e-23 1995260 2.132038276e-23 2511890 1.949310801e-23 3162280 1.804295529e-23 3981070 1.688963409e-23 5011870 1.597441024e-23 6309570 1.524746304e-23 7943280 1.466966601e-23 10000000 1.421063809e-23 12589250 1.384658521e-23 15848930 1.3557124e-23 19952620 1.332688036e-23 25118860 1.314425025e-23 31622780 1.299890916e-23 39810720 1.288379236e-23 50118720 1.279206756e-23 63095730 1.271992225e-23 79432820 1.266149889e-23 100000000 1.261599361e-23 100.00000 1.529748544e-17 125.89254 1.215149881e-17 158.48932 9.65220624e-18 199.52623 7.66680721e-18 251.18864 6.09003684e-18 316.22777 4.83780025e-18 398.10717 3.84277609e-18 501.18723 3.05235841e-18 630.95734 2.42456041e-18 794.32823 1.92598884e-18 1000 1.52992161e-18 1258.93 1.21528576e-18 1584.89 9.6528994056889e-19 1995.26 7.6677325520481e-19 2511.89 6.0908565707236e-19 3162.28 4.83830145241e-19 3981.07 3.8433601866256e-19 5011.87 3.0530509295364e-19 6309.57 2.4252857228961e-19 7943.28 1.9266340750336e-19 10000 1.5305410557369e-19 12589.25 1.2159134130025e-19 15848.93 9.659956154209e-20 19952.62 7.674789256281e-20 25118.86 6.097916604816e-20 31622.78 4.845360683524e-20 39810.72 3.850421138001e-20 50118.72 3.060109966489e-20 63095.73 2.432345921604e-20 79432.82 1.933693268329e-20 100000 1.5376e-20 125892.54 1.222972786161e-20 158489.32 9.73054009225e-21 199526.23 7.74537286084e-21 251188.64 6.16850018404e-21 316227.77 4.91594495044e-21 398107.17 3.92100140041e-21 501187.23 3.13069344676e-21 630957.34 2.50293085849e-21 794328.23 2.00428126864e-21 1000000 1.60818644484e-21 1258930 1.29356034921e-21 1584890 1.04364533025e-21 1995260 8.45123041e-22 2511890 6.87435961e-22 3162280 5.6218306816e-22 3981070 4.6268870404e-22 5011870 3.8365840384e-22 6309570 3.2087915161e-22 7943280 2.7101719876e-22 10000000 2.31404944e-22 12589250 1.9994242801e-22 15848930 1.7495088361e-22 19952620 1.5509962521e-22 25118860 1.3933205521e-22 31622780 1.2680561664e-22 39810720 1.168561e-22 50118720 1.0895393161e-22 63095730 1.0267566241e-22 79432820 9.768950244e-23 100000000 9.372756969e-23 100.00000 9.996200361e-17 125.89254 7.940235664e-17 158.48932 6.307218724e-17 199.52623 5.009949961e-17 251.18864 3.979591056e-17 316.22777 3.161025729e-17 398.10717 2.510911881e-17 501.18723 1.9945156e-17 630.95734 1.584278809e-17 794.32823 1.258475625e-17 1000 9.99634689e-18 1258.93 7.94056041e-18 1584.89 6.30712996e-18 1995.26 5.00998689e-18 2511.89 3.97962601e-18 3162.28 3.161284e-18 3981.07 2.51095716e-18 5011.87 1.99459129e-18 6309.57 1.58432569e-18 7943.28 1.25865961e-18 10000 9.9976241411344e-19 12589.25 7.9416988847641e-19 15848.93 6.3086197353124e-19 19952.62 5.0114180664769e-19 25118.86 3.9810143582784e-19 31622.78 3.1625360591449e-19 39810.72 2.51239532644e-19 50118.72 1.9959699946384e-19 63095.73 1.5857590301281e-19 79432.82 1.2599170319961e-19 100000 1.0010914984009e-19 125892.54 7.954988970681e-20 158489.32 6.321910664281e-20 199526.23 5.024707795396e-20 251188.64 3.994306027776e-20 316227.77 3.175826947225e-20 398107.17 2.525686956081e-20 501187.23 2.009260890256e-20 630957.34 1.599048766225e-20 794328.23 1.273207573225e-20 1000000 1.014381337225e-20 1258930 8.08789052929e-21 1584890 6.45480482724e-21 1995260 5.15760967225e-21 2511890 4.12720159489e-21 3162280 3.30872296225e-21 3981070 2.65858828225e-21 5011870 2.14216237225e-21 6309570 1.73194971889e-21 7943280 1.40610750361e-21 10000000 1.14728528656e-21 12589250 9.41691969e-22 15848930 7.7838210025e-22 19952620 6.4866486721e-22 25118860 5.4562419396e-22 31622780 4.6377345316e-22 39810720 3.98760961e-22 50118720 3.4711788721e-22 63095730 3.0609601936e-22 79432820 2.7351205924e-22 100000000 2.4763113769e-22 100.00000 3.0004821961e-16 125.89254 2.3833493161e-16 158.48932 1.8931833649e-16 199.52623 1.50381169e-16 251.18864 1.1945178436e-16 316.22777 9.488318464e-17 398.10717 7.536844225e-17 501.18723 5.986735876e-17 630.95734 4.7554816e-17 794.32823 3.777454521e-17 1000 3.000519729e-17 1258.93 2.3833924e-17 1584.89 1.893207121e-17 1995.26 1.503810841e-17 2511.89 1.194531844e-17 3162.28 9.48824809e-18 3981.07 7.53722116e-18 5011.87 5.98683024e-18 6309.57 4.75545249e-18 7943.28 3.77758096e-18 10000 3.00051684e-18 12589.25 2.38362721e-18 15848.93 1.893376e-18 19952.62 1.50405696e-18 25118.86 1.194649e-18 31622.78 9.49038362596e-19 39810.72 7.5389001443856e-19 50118.72 5.9887818193284e-19 63095.73 4.7574802707601e-19 79432.82 3.779421529e-19 100000 3.0025227102784e-19 125892.54 2.3854090924225e-19 158489.32 1.8952187334921e-19 199526.23 1.5058466514576e-19 251188.64 1.1965573438641e-19 316227.77 9.508804813225e-20 398107.17 7.557319887364e-20 501187.23 6.0072049216e-20 630957.34 4.775903227456e-20 794328.23 3.797844825636e-20 1000000 3.020942943396e-20 1258930 2.403830084041e-20 1584890 1.913640622336e-20 1995260 1.524269259769e-20 2511890 1.214979312121e-20 3162280 9.69301289961e-21 3981070 7.741536196e-21 5011870 6.19142364736e-21 6309570 4.96011726961e-21 7943280 3.98206433296e-21 10000000 3.20515631881e-21 12589250 2.58805195441e-21 15848930 2.09785984576e-21 19952620 1.70848302244e-21 25118860 1.39919387364e-21 31622780 1.15351933225e-21 39810720 9.5837299776e-22 50118720 8.0335966096e-22 63095730 6.8022899344e-22 79432820 5.8242099556e-22 100000000 5.0473463569e-22 100.00000 7.653367326784e-20 125.89254 6.0794299225e-20 158.48932 4.829204027025e-20 199.52623 3.836117877201e-20 251.18864 3.047279957316e-20 316.22777 2.420684781025e-20 398.10717 1.922961850681e-20 501.18723 1.527607009296e-20 630.95734 1.213564421161e-20 794.32823 9.64113863449e-21 1000 7.65966288025e-21 1258.93 6.085716121e-21 1584.89 4.83550562884e-21 1995.26 3.84241296384e-21 2511.89 3.05357918464e-21 3162.28 2.42698110736e-21 3981.07 1.92925628289e-21 5011.87 1.533897225e-21 6309.57 1.21986040225e-21 7943.28 9.7040349169e-22 10000 7.7226186816e-22 12589.25 6.1486641225e-22 15848.93 4.8984312976e-22 19952.62 3.9053269161e-22 25118.86 3.1164959296e-22 31622.78 2.4899262025e-22 39810.72 1.9921911025e-22 50118.72 1.5968365956e-22 63095.73 1.28278276e-22 79432.82 1.0333332409e-22 100000 8.351949321e-23 125892.54 6.778064241e-23 158489.32 5.527773801e-23 199526.23 4.5346756e-23 251188.64 3.745807209e-23 316227.77 3.1192225e-23 398107.17 2.621542401e-23 501187.23 2.226141124e-23 630957.34 1.912137984e-23 794328.23 1.662682176e-23 1000000 1.464516361e-23 1258930 1.307111716e-23 1584890 1.182121924e-23 1995260 1.082804836e-23 2511890 1.003939225e-23 3162280 9.412624e-24 3981070 8.91500164e-24 5011870 8.51939344e-24 6309570 8.20536025e-24 7943280 7.95578436e-24 10000000 7.75789609e-24 12589250 7.60049761e-24 15848930 7.47530281e-24 19952620 7.37611281e-24 25118860 7.29756196e-24 31622780 7.23448609e-24 39810720 7.18508025e-24 50118720 7.14546361e-24 63095730 7.11395584e-24 79432820 7.08890625e-24 100000000 7.06921744e-24 100.00000 2.596106304e-17 125.89254 2.062158921e-17 158.48932 1.638063729e-17 199.52623 1.301189184e-17 251.18864 1.033558201e-17 316.22777 8.20994409e-18 398.10717 6.52138369e-18 501.18723 5.180176e-18 630.95734 4.11481225e-18 794.32823 3.26850241e-18 1000 2.59628769e-18 1258.93 2.06238321e-18 1584.89 1.63814401e-18 1995.26 1.30119649e-18 2511.89 1.03367889e-18 3162.28 8.2105852867984e-19 3981.07 6.5220774579844e-19 5011.87 5.1808497587344e-19 6309.57 4.1154739718416e-19 7943.28 3.2692161902436e-19 10000 2.5970092519396e-19 12589.25 2.0630563399744e-19 15848.93 1.6389226786321e-19 19952.62 1.3020218589316e-19 25118.86 1.0344116115529e-19 31622.78 8.218410367729e-20 39810.72 6.529900504689e-20 50118.72 5.188673513956e-20 63095.73 4.123299809281e-20 79432.82 3.2770412676e-20 100000 2.6048346025e-20 125892.54 2.070882171136e-20 158489.32 1.646748528049e-20 199526.23 1.309845915225e-20 251188.64 1.042234768201e-20 316227.77 8.296659396e-21 398107.17 6.60814539025e-21 501187.23 5.26691290225e-21 630957.34 4.20154165249e-21 794328.23 3.35528245504e-21 1000000 2.68307424256e-21 1258930 2.14912906569e-21 1584890 1.724990089e-21 1995260 1.38809150041e-21 2511890 1.12048189696e-21 3162280 9.0790729225e-22 3981070 7.3905684736e-22 5011870 6.0493862025e-22 6309570 4.9839669504e-22 7943280 4.1377255396e-22 10000000 3.4655173281e-22 12589250 2.9315603524e-22 15848930 2.5074405801e-22 19952620 2.1705244929e-22 25118860 1.9029374809e-22 31622780 1.6903640196e-22 39810720 1.5214975801e-22 50118720 1.3873777369e-22 63095730 1.2808354276e-22 79432820 1.1962234384e-22 100000000 1.1289912516e-22 100.00000 1.9777359424e-16 125.89254 1.5709614244e-16 158.48932 1.2478677264e-16 199.52623 9.9121936e-17 251.18864 7.873545289e-17 316.22777 6.254120889e-17 398.10717 4.967853289e-17 501.18723 3.946101124e-17 630.95734 3.134544169e-17 794.32823 2.489810404e-17 1000 1.977758784e-17 1258.93 1.571012496e-17 1584.89 1.247855625e-17 1995.26 9.91242256e-18 2511.89 7.873636e-18 3162.28 6.25450081e-18 3981.07 4.96799521e-18 5011.87 3.94618225e-18 6309.57 3.13467025e-18 7943.28 2.490084e-18 10000 1.97796096e-18 12589.25 1.57126225e-18 15848.93 1.24813584e-18 19952.62 9.9138682699281e-19 25118.86 7.8752224320025e-19 31622.78 6.2558671635216e-19 39810.72 4.9695689933289e-19 50118.72 3.9478250381584e-19 63095.73 3.1362262440804e-19 79432.82 2.4915491537764e-19 100000 1.9794650977924e-19 125892.54 1.57270144329e-19 158489.32 1.2495977551225e-19 199526.23 9.929475325449e-20 251188.64 7.890829319844e-20 316227.77 6.271478421264e-20 398107.17 4.985177028001e-20 501187.23 3.963435942244e-20 630957.34 3.151835666281e-20 794328.23 2.507158726801e-20 1000000 1.995074325841e-20 1258930 1.588310719524e-20 1584890 1.265206534596e-20 1995260 1.008556224361e-20 2511890 8.04693320209e-21 3162280 6.42756561841e-21 3981070 5.14127718729e-21 5011870 4.11953450896e-21 6309570 3.30792921316e-21 7943280 2.66325148489e-21 10000000 2.15116933249e-21 12589250 1.74440710921e-21 15848930 1.42129754001e-21 19952620 1.164652129e-21 25118860 9.6078301225e-22 31622780 7.9884804321e-22 39810720 6.7021960996e-22 50118720 5.6804525569e-22 63095730 4.8688629025e-22 79432820 4.2241758784e-22 100000000 3.7120958224e-22 100.00000 6.1894971369e-16 125.89254 4.9165079824e-16 158.48932 3.9053269161e-16 199.52623 3.1021072384e-16 251.18864 2.4640836676e-16 316.22777 1.9573129216e-16 398.10717 1.5547346721e-16 501.18723 1.2349654641e-16 630.95734 9.809713936e-17 794.32823 7.792122529e-17 1000 6.189598276e-17 1258.93 4.916533924e-17 1584.89 3.905375049e-17 1995.26 3.102155809e-17 2511.89 2.4641296e-17 3162.28 1.957354564e-17 3981.07 1.5547249e-17 5011.87 1.235030449e-17 6309.57 9.81005041e-18 7943.28 7.79247225e-18 10000 6.18964641e-18 12589.25 4.91686276e-18 15848.93 3.90576169e-18 19952.62 3.10217769e-18 25118.86 2.46427204e-18 31622.78 1.95748081e-18 39810.72 1.555009e-18 50118.72 1.23520996e-18 63095.73 9.8121683998321e-19 79432.82 7.7945837745636e-19 100000 6.1919618685604e-19 125892.54 4.9189518898576e-19 158489.32 3.9077651468944e-19 199526.23 3.10455124225e-19 251188.64 2.4665347482084e-19 316227.77 1.9597408194816e-19 398107.17 1.5571807808769e-19 501187.23 1.2374149971481e-19 630957.34 9.834163586809e-20 794328.23 7.816581514225e-20 1000000 6.213957113961e-20 1258930 4.940950980625e-20 1584890 3.929763063769e-20 1995260 3.126548922025e-20 2511890 2.488531490064e-20 3162280 1.981737538564e-20 3981070 1.579176762409e-20 5011870 1.259411395225e-20 6309570 1.005413306209e-20 7943280 8.03654875024e-21 10000000 6.43391681689e-21 12589250 5.16091376025e-21 15848930 4.14973025856e-21 19952620 3.34651837081e-21 25118860 2.70849466624e-21 31622780 2.20170223729e-21 39810720 1.79914250569e-21 50118720 1.47937929129e-21 63095730 1.22537802916e-21 79432820 1.02362243481e-21 100000000 8.6335481241e-22 100.00000 2.4370720562241e-19 125.89254 1.9358706421609e-19 158.48932 1.5377526973561e-19 199.52623 1.22151648004e-19 251.18864 9.703212540004e-20 316.22777 7.7078972161e-20 398.10717 6.122957240521e-20 501.18723 4.864000880704e-20 630.95734 3.863972558601e-20 794.32823 3.069623137156e-20 1000 2.438647654689e-20 1258.93 1.937446854084e-20 1584.89 1.539329045809e-20 1995.26 1.223092224225e-20 2511.89 9.71896279104e-21 3162.28 7.72365018649e-21 3981.07 6.1387225e-21 5011.87 4.87976293809e-21 6309.57 3.87973265625e-21 7943.28 3.08538033444e-21 10000 2.454409764e-21 12589.25 1.95320686401e-21 15848.93 1.55508767716e-21 19952.62 1.23884992729e-21 25118.86 9.87656329e-22 31622.78 7.8812701696e-22 39810.72 6.2963355625e-22 50118.72 5.0373762481e-22 63095.73 4.0373266761e-22 79432.82 3.2429886889e-22 100000 2.6120054689e-22 125892.54 2.1108021796e-22 158489.32 1.71269569e-22 199526.23 1.3964621584e-22 251188.64 1.1452638289e-22 316227.77 9.457368001e-23 398107.17 7.872303076e-23 501187.23 6.613430329e-23 630957.34 5.613306084e-23 794328.23 4.818997561e-23 1000000 4.188031225e-23 1258930 3.686796961e-23 1584890 3.288678409e-23 1995260 2.9724304e-23 2511890 2.721291556e-23 3162280 2.521747089e-23 3981070 2.363223769e-23 5011870 2.237384601e-23 6309570 2.137397824e-23 7943280 2.057892496e-23 10000000 1.994783569e-23 12589250 1.944721801e-23 15848930 1.904886025e-23 19952620 1.873244961e-23 25118860 1.8481401e-23 31622780 1.828161049e-23 39810720 1.812375184e-23 50118720 1.799795776e-23 63095730 1.789797636e-23 79432820 1.781852944e-23 100000000 1.775526769e-23 100.00000 7.3441e-18 125.89254 5.83367409e-18 158.48932 4.63368676e-18 199.52623 3.68064225e-18 251.18864 2.92375801e-18 316.22777 2.322576e-18 398.10717 1.84470724e-18 501.18723 1.46531025e-18 630.95734 1.16402521e-18 794.32823 9.2461474944721e-19 1000 7.3446151225329e-19 1258.93 5.8341747883329e-19 1584.89 4.6343907908496e-19 1995.26 3.6813670400329e-19 2511.89 2.9243532937441e-19 3162.28 2.3230366004521e-19 3981.07 1.8453932006416e-19 5011.87 1.4659877907684e-19 6309.57 1.1646152721316e-19 7943.28 9.252267396516e-20 10000 7.350735578176e-20 12589.25 5.840298722241e-20 15848.93 4.640513014225e-20 19952.62 3.687490640656e-20 25118.86 2.930474930769e-20 31622.78 2.329158240964e-20 39810.72 1.851515375616e-20 50118.72 1.472109023025e-20 63095.73 1.170736984036e-20 79432.82 9.31348524096e-21 100000 7.41195299329e-21 125892.54 5.90151213369e-21 158489.32 4.70173518864e-21 199526.23 3.74870879289e-21 251188.64 2.99169617296e-21 316227.77 2.39037877225e-21 398107.17 1.91273273104e-21 501187.23 1.53332546929e-21 630957.34 1.23195384064e-21 794328.23 9.92565025e-22 1000000 8.0241326361e-22 1258930 6.51372484e-22 1584890 5.3139009361e-22 1995260 4.3609133584e-22 2511890 3.6038845921e-22 3162280 3.0025611841e-22 3981070 2.524921e-22 5011870 2.1455218576e-22 6309570 1.8441368401e-22 7943280 1.6047569041e-22 10000000 1.4146009969e-22 12589250 1.2635558464e-22 15848930 1.1435949721e-22 19952620 1.0482892996e-22 25118860 9.7259044e-23 31622780 9.124452484e-23 39810720 8.646768144e-23 50118720 8.267355625e-23 63095730 7.966098009e-23 79432820 7.726761604e-23 100000000 7.536496969e-23 100.00000 4.050686025e-17 125.89254 3.217612176e-17 158.48932 2.555808025e-17 199.52623 2.030133249e-17 251.18864 1.612584649e-17 316.22777 1.2809241e-17 398.10717 1.017482404e-17 501.18723 8.08208041e-18 630.95734 6.42014244e-18 794.32823 5.09946724e-18 1000 4.05096129e-18 1258.93 3.21771844e-18 1584.89 2.55584169e-18 1995.26 2.03034001e-18 2511.89 1.61264601e-18 3162.28 1.28097124e-18 3981.07 1.01767744e-18 5011.87 8.0833891248289e-19 6309.57 6.4211117817856e-19 7943.28 5.1007178408761e-19 10000 4.0518915509809e-19 12589.25 3.2187785271184e-19 15848.93 2.5570144096249e-19 19952.62 2.0313562801249e-19 25118.86 1.6138104735076e-19 31622.78 1.2821426812804e-19 39810.72 1.0186897822864e-19 50118.72 8.094212771089e-20 63095.73 6.431935087876e-20 79432.82 5.111542200384e-20 100000 4.062715921924e-20 125892.54 3.229600757881e-20 158489.32 2.567836387809e-20 199526.23 2.042178186304e-20 251188.64 1.624633201321e-20 316227.77 1.292966845569e-20 398107.17 1.029512593201e-20 501187.23 8.20245394276e-21 630957.34 6.54016716369e-21 794328.23 5.219773504e-21 1000000 4.17095097241e-21 1258930 3.337835076e-21 1584890 2.67607566864e-21 1995260 2.15040875625e-21 2511890 1.73286540729e-21 3162280 1.40119954276e-21 3981070 1.13774663025e-21 5011870 9.2847574681e-22 6309570 7.6225135921e-22 7943280 6.30210816e-22 10000000 5.253264e-22 12589250 4.4201698564e-22 15848930 3.7584025956e-22 19952620 3.2327320804e-22 25118860 2.8152141796e-22 31622780 2.4835238464e-22 39810720 2.2200702001e-22 50118720 2.0108090809e-22 63095730 1.8445714225e-22 79432820 1.7125386496e-22 100000000 1.6076464849e-22 100.00000 1.1670913024e-16 125.89254 9.270416089e-17 158.48932 7.363870969e-17 199.52623 5.849343361e-17 251.18864 4.646194569e-17 316.22777 3.690684001e-17 398.10717 2.931572736e-17 501.18723 2.328641536e-17 630.95734 1.849688064e-17 794.32823 1.469265561e-17 1000 1.167110569e-17 1258.93 9.27080704e-18 1584.89 7.36416769e-18 1995.26 5.84962596e-18 2511.89 4.64661136e-18 3162.28 3.69062521e-18 3981.07 2.93162884e-18 5011.87 2.328676e-18 6309.57 1.84987201e-18 7943.28 1.46942884e-18 10000 1.16726416e-18 12589.25 9.2721088214041e-19 15848.93 7.36543284841e-19 19952.62 5.8509082669129e-19 25118.86 4.6478783476225e-19 31622.78 3.6922770640921e-19 39810.72 2.9332167782724e-19 50118.72 2.33027287441e-19 63095.73 1.8513382187524e-19 79432.82 1.47090658576e-19 100000 1.1687195171716e-19 125892.54 9.2868296049e-20 158489.32 7.380154622736e-20 199526.23 5.865633516649e-20 251188.64 4.662602401636e-20 316227.77 3.706999577449e-20 398107.17 2.947941339849e-20 501187.23 2.344996070244e-20 630957.34 1.866062549521e-20 794328.23 1.485629450496e-20 1000000 1.183443731044e-20 1258930 9.43406206681e-21 1584890 7.52738436025e-21 1995260 6.01287032329e-21 2511890 4.809838609e-21 3162280 3.85423680625e-21 3981070 3.09517533649e-21 5011870 2.49223603729e-21 6309570 2.01329895204e-21 7943280 1.63286303569e-21 10000000 1.33068096225e-21 12589250 1.09064402001e-21 15848930 8.9997600016e-22 19952620 7.4852035281e-22 25118860 6.2821913449e-22 31622780 5.3265870436e-22 39810720 4.5675383524e-22 50118720 3.9645986769e-22 63095730 3.4856516601e-22 79432820 3.1052078656e-22 100000000 2.8030126084e-22 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_diode_lt.standard0000644000175000017500000001542414163340332025320 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -1.795e-06 0. 6.965194e-16 1.795e-06 -1.10000 -1.6964e-06 0. 6.965194e-16 1.6964e-06 -1.00000 -1.6008e-06 0. 6.965194e-16 1.6008e-06 -0.9 -1.5083e-06 0. 6.965194e-16 1.5083e-06 -0.8 -1.419e-06 0. 6.965194e-16 1.419e-06 -0.7 -1.3335e-06 0. 6.965194e-16 1.3335e-06 -0.6 -1.2529e-06 0. 6.965194e-16 1.2529e-06 -0.5 -1.1804e-06 0. 6.965194e-16 1.1804e-06 -0.4 -1.1226e-06 0. 6.965193e-16 1.1226e-06 -0.3 -1.0866e-06 0. 6.96513e-16 1.0866e-06 -0.2 -1.0628e-06 0. 6.962142e-16 1.0628e-06 -0.1 -9.286227e-07 0. 6.81938e-16 9.286227e-07 2.220446e-16 3.032e-21 0. 0. -3.032e-21 -1.20000 -1.10527e-05 0. 6.965194e-16 1.10527e-05 -1.10000 -1.06115e-05 0. 6.965194e-16 1.06115e-05 -1.00000 -1.01808e-05 0. 6.965194e-16 1.01808e-05 -0.9 -9.7643e-06 0. 6.965194e-16 9.7643e-06 -0.8 -9.3693e-06 0. 6.965194e-16 9.3693e-06 -0.7 -9.0094e-06 0. 6.965194e-16 9.0094e-06 -0.6 -8.7075e-06 0. 6.965194e-16 8.7075e-06 -0.5 -8.4906e-06 0. 6.965194e-16 8.4906e-06 -0.4 -8.3588e-06 0. 6.965193e-16 8.3588e-06 -0.3 -8.1434e-06 0. 6.96513e-16 8.1434e-06 -0.2 -7.0825e-06 0. 6.962142e-16 7.0825e-06 -0.1 -4.4066e-06 0. 6.81938e-16 4.4066e-06 2.220446e-16 9.356e-21 0. 0. -9.356e-21 -1.20000 -2.66285e-05 0. 6.965194e-16 2.66285e-05 -1.10000 -2.56821e-05 0. 6.965194e-16 2.56821e-05 -1.00000 -2.47929e-05 0. 6.965194e-16 2.47929e-05 -0.9 -2.39893e-05 0. 6.965194e-16 2.39893e-05 -0.8 -2.33085e-05 0. 6.965194e-16 2.33085e-05 -0.7 -2.27861e-05 0. 6.965194e-16 2.27861e-05 -0.6 -2.24175e-05 0. 6.965194e-16 2.24175e-05 -0.5 -2.19761e-05 0. 6.965194e-16 2.19761e-05 -0.4 -2.07169e-05 0. 6.965193e-16 2.07169e-05 -0.3 -1.79459e-05 0. 6.96513e-16 1.79459e-05 -0.2 -1.34804e-05 0. 6.962142e-16 1.34804e-05 -0.1 -7.4306e-06 0. 6.81938e-16 7.4306e-06 2.220446e-16 1.821e-20 0. 0. -1.821e-20 -1.20000 -4.53699e-05 0. 6.965194e-16 4.53699e-05 -1.10000 -4.40548e-05 0. 6.965194e-16 4.40548e-05 -1.00000 -4.29313e-05 0. 6.965194e-16 4.29313e-05 -0.9 -4.2032e-05 0. 6.965194e-16 4.2032e-05 -0.8 -4.13233e-05 0. 6.965194e-16 4.13233e-05 -0.7 -4.05044e-05 0. 6.965194e-16 4.05044e-05 -0.6 -3.89158e-05 0. 6.965194e-16 3.89158e-05 -0.5 -3.59953e-05 0. 6.965194e-16 3.59953e-05 -0.4 -3.15177e-05 0. 6.965193e-16 3.15177e-05 -0.3 -2.55137e-05 0. 6.96513e-16 2.55137e-05 -0.2 -1.8137e-05 0. 6.962142e-16 1.8137e-05 -0.1 -9.5717e-06 0. 6.81938e-16 9.5717e-06 2.220446e-16 2.247e-20 0. 0. -2.247e-20 -1.20000 -1.518e-06 0. 3.409e-23 1.518e-06 -1.10000 -1.4229e-06 0. 3.409e-23 1.4229e-06 -1.00000 -1.3311e-06 0. 3.409e-23 1.3311e-06 -0.9 -1.2427e-06 0. 3.409e-23 1.2427e-06 -0.8 -1.1576e-06 0. 3.409e-23 1.1576e-06 -0.7 -1.0757e-06 0. 3.409e-23 1.0757e-06 -0.6 -9.97214e-07 0. 3.409e-23 9.97214e-07 -0.5 -9.225531e-07 0. 3.409e-23 9.225531e-07 -0.4 -8.533641e-07 0. 3.409e-23 8.533641e-07 -0.3 -7.956337e-07 0. 3.409e-23 7.956337e-07 -0.2 -7.598786e-07 0. 3.408e-23 7.598786e-07 -0.1 -7.124749e-07 0. 3.390e-23 7.124749e-07 2.220446e-16 3.537e-21 0. 0. -3.537e-21 -1.20000 -1.52984e-05 0. 3.409e-23 1.52984e-05 -1.10000 -1.4683e-05 0. 3.409e-23 1.4683e-05 -1.00000 -1.40779e-05 0. 3.409e-23 1.40779e-05 -0.9 -1.34845e-05 0. 3.409e-23 1.34845e-05 -0.8 -1.29059e-05 0. 3.409e-23 1.29059e-05 -0.7 -1.23491e-05 0. 3.409e-23 1.23491e-05 -0.6 -1.18301e-05 0. 3.409e-23 1.18301e-05 -0.5 -1.13837e-05 0. 3.409e-23 1.13837e-05 -0.4 -1.10635e-05 0. 3.409e-23 1.10635e-05 -0.3 -1.08447e-05 0. 3.409e-23 1.08447e-05 -0.2 -9.877e-06 0. 3.408e-23 9.877e-06 -0.1 -6.4134e-06 0. 3.390e-23 6.4134e-06 2.220446e-16 2.030e-20 0. 0. -2.030e-20 -1.20000 -4.10109e-05 0. 3.409e-23 4.10109e-05 -1.10000 -3.95011e-05 0. 3.409e-23 3.95011e-05 -1.00000 -3.80377e-05 0. 3.409e-23 3.80377e-05 -0.9 -3.66462e-05 0. 3.409e-23 3.66462e-05 -0.8 -3.53707e-05 0. 3.409e-23 3.53707e-05 -0.7 -3.42785e-05 0. 3.409e-23 3.42785e-05 -0.6 -3.34415e-05 0. 3.409e-23 3.34415e-05 -0.5 -3.27682e-05 0. 3.409e-23 3.27682e-05 -0.4 -3.13062e-05 0. 3.409e-23 3.13062e-05 -0.3 -2.75764e-05 0. 3.409e-23 2.75764e-05 -0.2 -2.09876e-05 0. 3.408e-23 2.09876e-05 -0.1 -1.16759e-05 0. 3.390e-23 1.16759e-05 2.220446e-16 3.183e-20 0. 0. -3.183e-20 -1.20000 -7.24642e-05 0. 3.409e-23 7.24642e-05 -1.10000 -7.00754e-05 0. 3.409e-23 7.00754e-05 -1.00000 -6.79109e-05 0. 3.409e-23 6.79109e-05 -0.9 -6.60524e-05 0. 3.409e-23 6.60524e-05 -0.8 -6.45472e-05 0. 3.409e-23 6.45472e-05 -0.7 -6.31457e-05 0. 3.409e-23 6.31457e-05 -0.6 -6.09105e-05 0. 3.409e-23 6.09105e-05 -0.5 -5.67456e-05 0. 3.409e-23 5.67456e-05 -0.4 -5.00476e-05 0. 3.409e-23 5.00476e-05 -0.3 -4.0752e-05 0. 3.409e-23 4.0752e-05 -0.2 -2.9099e-05 0. 3.408e-23 2.9099e-05 -0.1 -1.54101e-05 0. 3.390e-23 1.54101e-05 2.220446e-16 2.632e-20 0. 0. -2.632e-20 -1.20000 -1.8324e-06 0. 1.5456e-09 1.8308e-06 -1.10000 -1.7419e-06 0. 1.5456e-09 1.7404e-06 -1.00000 -1.6547e-06 0. 1.5456e-09 1.6532e-06 -0.9 -1.5717e-06 0. 1.5456e-09 1.5701e-06 -0.8 -1.4942e-06 0. 1.5456e-09 1.4927e-06 -0.7 -1.425e-06 0. 1.5456e-09 1.4235e-06 -0.6 -1.3682e-06 0. 1.5456e-09 1.3666e-06 -0.5 -1.3278e-06 0. 1.5456e-09 1.3262e-06 -0.4 -1.3037e-06 0. 1.5455e-09 1.3022e-06 -0.3 -1.2868e-06 0. 1.5452e-09 1.2853e-06 -0.2 -1.2353e-06 0. 1.5392e-09 1.2338e-06 -0.1 -9.419008e-07 0. 1.446e-09 9.404547e-07 2.220446e-16 2.634e-21 0. -9.266e-24 -2.625e-21 -1.20000 -7.3575e-06 0. 1.5456e-09 7.3559e-06 -1.10000 -7.0773e-06 0. 1.5456e-09 7.0758e-06 -1.00000 -6.8143e-06 0. 1.5456e-09 6.8127e-06 -0.9 -6.576e-06 0. 1.5456e-09 6.5744e-06 -0.8 -6.3728e-06 0. 1.5456e-09 6.3712e-06 -0.7 -6.2157e-06 0. 1.5456e-09 6.2141e-06 -0.6 -6.1099e-06 0. 1.5456e-09 6.1083e-06 -0.5 -6.0451e-06 0. 1.5456e-09 6.0435e-06 -0.4 -5.9651e-06 0. 1.5455e-09 5.9635e-06 -0.3 -5.6399e-06 0. 1.5452e-09 5.6383e-06 -0.2 -4.6598e-06 0. 1.5392e-09 4.6582e-06 -0.1 -2.7843e-06 0. 1.446e-09 2.7828e-06 2.220446e-16 5.660e-21 0. -9.266e-24 -5.651e-21 -1.20000 -1.58054e-05 0. 1.5456e-09 1.58039e-05 -1.10000 -1.53275e-05 0. 1.5456e-09 1.53259e-05 -1.00000 -1.49154e-05 0. 1.5456e-09 1.49138e-05 -0.9 -1.45839e-05 0. 1.5456e-09 1.45824e-05 -0.8 -1.43404e-05 0. 1.5456e-09 1.43389e-05 -0.7 -1.41733e-05 0. 1.5456e-09 1.41717e-05 -0.6 -1.40122e-05 0. 1.5456e-09 1.40106e-05 -0.5 -1.36099e-05 0. 1.5456e-09 1.36084e-05 -0.4 -1.25826e-05 0. 1.5455e-09 1.2581e-05 -0.3 -1.0699e-05 0. 1.5452e-09 1.06975e-05 -0.2 -7.9246e-06 0. 1.5392e-09 7.9231e-06 -0.1 -4.3242e-06 0. 1.446e-09 4.3228e-06 2.220446e-16 1.522e-20 0. -9.266e-24 -1.521e-20 -1.20000 -2.59613e-05 0. 1.5456e-09 2.59598e-05 -1.10000 -2.54257e-05 0. 1.5456e-09 2.54242e-05 -1.00000 -2.50099e-05 0. 1.5456e-09 2.50084e-05 -0.9 -2.46972e-05 0. 1.5456e-09 2.46957e-05 -0.8 -2.43986e-05 0. 1.5456e-09 2.43971e-05 -0.7 -2.38594e-05 0. 1.5456e-09 2.38579e-05 -0.6 -2.27436e-05 0. 1.5456e-09 2.27421e-05 -0.5 -2.08419e-05 0. 1.5456e-09 2.08403e-05 -0.4 -1.80992e-05 0. 1.5455e-09 1.80976e-05 -0.3 -1.4556e-05 0. 1.5452e-09 1.45545e-05 -0.2 -1.02957e-05 0. 1.5392e-09 1.02942e-05 -0.1 -5.4124e-06 0. 1.446e-09 5.4109e-06 2.220446e-16 1.351e-20 0. -9.266e-24 -1.350e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_ig_lt.standard0000644000175000017500000001643114163340332024774 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -2.2447e-06 -68.2825 68.2825 2.2447e-06 -1.10000 -2.1344e-06 -68.2825 68.2825 2.1344e-06 -1.00000 -2.0269e-06 -68.2825 68.2825 2.0269e-06 -0.9 -1.9223e-06 -68.2825 68.2825 1.9223e-06 -0.8 -1.8208e-06 -68.2825 68.2825 1.8208e-06 -0.7 -1.7233e-06 -68.2825 68.2825 1.7233e-06 -0.6 -1.6312e-06 -68.2825 68.2825 1.6312e-06 -0.5 -1.5487e-06 -68.2825 68.2825 1.5487e-06 -0.4 -1.4842e-06 -68.2824 68.2824 1.4842e-06 -0.3 -1.446e-06 -68.2824 68.2824 1.446e-06 -0.2 -1.4183e-06 -68.2825 68.2825 1.4183e-06 -0.1 -1.2106e-06 -68.2847 68.2847 1.2106e-06 2.220446e-16 3.726e-21 -68.2905 68.2905 -3.726e-21 -1.20000 -1.21416e-05 -409.8564 409.8564 1.21416e-05 -1.10000 -1.168e-05 -409.8565 409.8565 1.168e-05 -1.00000 -1.12286e-05 -409.8567 409.8567 1.12286e-05 -0.9 -1.07919e-05 -409.8568 409.8568 1.07919e-05 -0.8 -1.03784e-05 -409.8569 409.8569 1.03784e-05 -0.7 -1.00038e-05 -409.8570 409.8570 1.00038e-05 -0.6 -9.6939e-06 -409.8571 409.8571 9.6939e-06 -0.5 -9.4765e-06 -409.8573 409.8573 9.4765e-06 -0.4 -9.3445e-06 -409.8583 409.8583 9.3445e-06 -0.3 -9.0676e-06 -409.8678 409.8678 9.0676e-06 -0.2 -7.7853e-06 -409.8936 409.8936 7.7853e-06 -0.1 -4.7839e-06 -409.9241 409.9241 4.7839e-06 2.220446e-16 6.836e-21 -409.9495 409.9495 -6.836e-21 -1.20000 -2.81471e-05 -751.5947 751.5947 2.81471e-05 -1.10000 -2.71765e-05 -751.5949 751.5949 2.71765e-05 -1.00000 -2.62665e-05 -751.5951 751.5951 2.62665e-05 -0.9 -2.54476e-05 -751.5954 751.5954 2.54476e-05 -0.8 -2.47592e-05 -751.5956 751.5956 2.47592e-05 -0.7 -2.42372e-05 -751.5961 751.5961 2.42372e-05 -0.6 -2.3867e-05 -751.5987 751.5987 2.3867e-05 -0.5 -2.33685e-05 -751.6133 751.6133 2.33685e-05 -0.4 -2.19412e-05 -751.6442 751.6442 2.19412e-05 -0.3 -1.8921e-05 -751.6810 751.6810 1.8921e-05 -0.2 -1.41587e-05 -751.7173 751.7173 1.41587e-05 -0.1 -7.7812e-06 -751.7508 751.7508 7.7812e-06 2.220446e-16 1.901e-20 -751.7775 751.7775 -1.901e-20 -1.20000 -4.71578e-05 -1093.4 1093.4 4.71578e-05 -1.10000 -4.58278e-05 -1093.4 1093.4 4.58278e-05 -1.00000 -4.46967e-05 -1093.4 1093.4 4.46967e-05 -0.9 -4.37961e-05 -1093.4 1093.4 4.37961e-05 -0.8 -4.30798e-05 -1093.4 1093.4 4.30798e-05 -0.7 -4.22064e-05 -1093.4 1093.4 4.22064e-05 -0.6 -4.04916e-05 -1093.5 1093.5 4.04916e-05 -0.5 -3.73848e-05 -1093.5 1093.5 3.73848e-05 -0.4 -3.26774e-05 -1093.5 1093.5 3.26774e-05 -0.3 -2.64128e-05 -1093.6 1093.6 2.64128e-05 -0.2 -1.87529e-05 -1093.6 1093.6 1.87529e-05 -0.1 -9.8865e-06 -1093.6 1093.6 9.8865e-06 2.220446e-16 3.424e-20 -1093.7 1093.7 -3.424e-20 -1.20000 -1.9629e-06 -50.7321 50.7321 1.9629e-06 -1.10000 -1.8555e-06 -50.7320 50.7320 1.8555e-06 -1.00000 -1.7512e-06 -50.7320 50.7320 1.7512e-06 -0.9 -1.65e-06 -50.7320 50.7320 1.65e-06 -0.8 -1.5518e-06 -50.7320 50.7320 1.5518e-06 -0.7 -1.4568e-06 -50.7320 50.7320 1.4568e-06 -0.6 -1.365e-06 -50.7319 50.7319 1.365e-06 -0.5 -1.2771e-06 -50.7319 50.7319 1.2771e-06 -0.4 -1.1956e-06 -50.7319 50.7319 1.1956e-06 -0.3 -1.1286e-06 -50.7318 50.7318 1.1286e-06 -0.2 -1.0889e-06 -50.7318 50.7318 1.0889e-06 -0.1 -1.0162e-06 -50.7323 50.7323 1.0162e-06 2.220446e-16 4.566e-21 -50.7374 50.7374 -4.566e-21 -1.20000 -1.67335e-05 -304.5645 304.5645 1.67335e-05 -1.10000 -1.60952e-05 -304.5645 304.5645 1.60952e-05 -1.00000 -1.54657e-05 -304.5646 304.5646 1.54657e-05 -0.9 -1.4847e-05 -304.5646 304.5646 1.4847e-05 -0.8 -1.42426e-05 -304.5647 304.5647 1.42426e-05 -0.7 -1.3661e-05 -304.5647 304.5647 1.3661e-05 -0.6 -1.31211e-05 -304.5648 304.5648 1.31211e-05 -0.5 -1.26627e-05 -304.5648 304.5648 1.26627e-05 -0.4 -1.23425e-05 -304.5649 304.5649 1.23425e-05 -0.3 -1.2102e-05 -304.5687 304.5687 1.2102e-05 -0.2 -1.08883e-05 -304.5922 304.5922 1.08883e-05 -0.1 -6.966e-06 -304.6256 304.6256 6.966e-06 2.220446e-16 2.175e-20 -304.6544 304.6544 -2.175e-20 -1.20000 -4.31435e-05 -558.5699 558.5699 4.31435e-05 -1.10000 -4.15997e-05 -558.5700 558.5700 4.15997e-05 -1.00000 -4.01034e-05 -558.5701 558.5701 4.01034e-05 -0.9 -3.86823e-05 -558.5703 558.5703 3.86823e-05 -0.8 -3.73844e-05 -558.5704 558.5704 3.73844e-05 -0.7 -3.62815e-05 -558.5707 558.5707 3.62815e-05 -0.6 -3.54445e-05 -558.5716 558.5716 3.54445e-05 -0.5 -3.47372e-05 -558.5807 558.5807 3.47372e-05 -0.4 -3.30851e-05 -558.6098 558.6098 3.30851e-05 -0.3 -2.90159e-05 -558.6488 558.6488 2.90159e-05 -0.2 -2.19989e-05 -558.6880 558.6880 2.19989e-05 -0.1 -1.22027e-05 -558.7241 558.7241 1.22027e-05 2.220446e-16 3.297e-20 -558.7534 558.7534 -3.297e-20 -1.20000 -7.50362e-05 -812.6595 812.6595 7.50362e-05 -1.10000 -7.26168e-05 -812.6597 812.6597 7.26168e-05 -1.00000 -7.04301e-05 -812.6600 812.6600 7.04301e-05 -0.9 -6.856e-05 -812.6606 812.6606 6.856e-05 -0.8 -6.70472e-05 -812.6640 812.6640 6.70472e-05 -0.7 -6.55971e-05 -812.6794 812.6794 6.55971e-05 -0.6 -6.32171e-05 -812.7098 812.7098 6.32171e-05 -0.5 -5.88085e-05 -812.7474 812.7474 5.88085e-05 -0.4 -5.17881e-05 -812.7866 812.7866 5.17881e-05 -0.3 -4.21128e-05 -812.8244 812.8244 4.21128e-05 -0.2 -3.00376e-05 -812.8596 812.8596 3.00376e-05 -0.1 -1.58928e-05 -812.8917 812.8917 1.58928e-05 2.220446e-16 5.425e-20 -812.9180 812.9180 -5.425e-20 -1.20000 -2.2467e-06 -96.3162 96.3162 2.2467e-06 -1.10000 -2.1452e-06 -96.3162 96.3162 2.1452e-06 -1.00000 -2.0471e-06 -96.3163 96.3163 2.0471e-06 -0.9 -1.9534e-06 -96.3163 96.3163 1.9534e-06 -0.8 -1.8661e-06 -96.3163 96.3163 1.8661e-06 -0.7 -1.7886e-06 -96.3163 96.3163 1.7886e-06 -0.6 -1.7258e-06 -96.3163 96.3163 1.7258e-06 -0.5 -1.6825e-06 -96.3163 96.3163 1.6825e-06 -0.4 -1.6579e-06 -96.3163 96.3163 1.6579e-06 -0.3 -1.6391e-06 -96.3165 96.3165 1.6391e-06 -0.2 -1.5632e-06 -96.3175 96.3175 1.5632e-06 -0.1 -1.1564e-06 -96.3217 96.3217 1.1564e-06 2.220446e-16 3.412e-21 -96.3271 96.3271 -3.412e-21 -1.20000 -8.1397e-06 -578.0458 578.0458 8.1397e-06 -1.10000 -7.8445e-06 -578.0460 578.0460 7.8445e-06 -1.00000 -7.5679e-06 -578.0462 578.0462 7.5679e-06 -0.9 -7.3186e-06 -578.0464 578.0464 7.3186e-06 -0.8 -7.1082e-06 -578.0466 578.0466 7.1082e-06 -0.7 -6.9482e-06 -578.0468 578.0468 6.9482e-06 -0.6 -6.8432e-06 -578.0471 578.0471 6.8432e-06 -0.5 -6.7789e-06 -578.0479 578.0479 6.7789e-06 -0.4 -6.6801e-06 -578.0525 578.0525 6.6801e-06 -0.3 -6.2655e-06 -578.0682 578.0682 6.2655e-06 -0.2 -5.116e-06 -578.0931 578.0931 5.116e-06 -0.1 -3.0245e-06 -578.1199 578.1199 3.0245e-06 2.220446e-16 7.579e-21 -578.1414 578.1414 -7.579e-21 -1.20000 -1.68297e-05 -1059.9 1059.9 1.68297e-05 -1.10000 -1.63406e-05 -1059.9 1059.9 1.63406e-05 -1.00000 -1.59215e-05 -1059.9 1059.9 1.59215e-05 -0.9 -1.55878e-05 -1059.9 1059.9 1.55878e-05 -0.8 -1.53458e-05 -1059.9 1059.9 1.53458e-05 -0.7 -1.51797e-05 -1059.9 1059.9 1.51797e-05 -0.6 -1.50015e-05 -1059.9 1059.9 1.50015e-05 -0.5 -1.45275e-05 -1060 1060 1.45275e-05 -0.4 -1.33687e-05 -1060 1060 1.33687e-05 -0.3 -1.13154e-05 -1060 1060 1.13154e-05 -0.2 -8.3483e-06 -1060.1 1060.1 8.3483e-06 -0.1 -4.5405e-06 -1060.1 1060.1 4.5405e-06 2.220446e-16 1.198e-20 -1060.1 1060.1 -1.198e-20 -1.20000 -2.71433e-05 -1541.9 1541.9 2.71433e-05 -1.10000 -2.66055e-05 -1541.9 1541.9 2.66055e-05 -1.00000 -2.61908e-05 -1541.9 1541.9 2.61908e-05 -0.9 -2.58781e-05 -1541.9 1541.9 2.58781e-05 -0.8 -2.55622e-05 -1541.9 1541.9 2.55622e-05 -0.7 -2.49646e-05 -1541.9 1541.9 2.49646e-05 -0.6 -2.37477e-05 -1542 1542 2.37477e-05 -0.5 -2.1714e-05 -1542 1542 2.1714e-05 -0.4 -1.88184e-05 -1542 1542 1.88184e-05 -0.3 -1.5108e-05 -1542.1 1542.1 1.5108e-05 -0.2 -1.06702e-05 -1542.1 1542.1 1.06702e-05 -0.1 -5.6018e-06 -1542.1 1542.1 5.6018e-06 2.220446e-16 1.396e-20 -1542.1 1542.1 -1.396e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_ig_lt.standard0000644000175000017500000001643314163340332024634 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -1.795e-06 -341.4540 341.4540 1.795e-06 -1.10000 -1.6964e-06 -341.4538 341.4538 1.6964e-06 -1.00000 -1.6008e-06 -341.4537 341.4537 1.6008e-06 -0.9 -1.5083e-06 -341.4536 341.4536 1.5083e-06 -0.8 -1.419e-06 -341.4534 341.4534 1.419e-06 -0.7 -1.3335e-06 -341.4533 341.4533 1.3335e-06 -0.6 -1.2529e-06 -341.4532 341.4532 1.2529e-06 -0.5 -1.1804e-06 -341.4530 341.4530 1.1804e-06 -0.4 -1.1226e-06 -341.4528 341.4528 1.1226e-06 -0.3 -1.0866e-06 -341.4526 341.4526 1.0866e-06 -0.2 -1.0628e-06 -341.4527 341.4527 1.0628e-06 -0.1 -9.286227e-07 -341.4590 341.4590 9.286227e-07 2.220446e-16 3.032e-21 -341.4816 341.4816 -3.032e-21 -1.20000 -1.10527e-05 -683.1385 683.1385 1.10527e-05 -1.10000 -1.06115e-05 -683.1386 683.1386 1.06115e-05 -1.00000 -1.01808e-05 -683.1386 683.1386 1.01808e-05 -0.9 -9.7643e-06 -683.1386 683.1386 9.7643e-06 -0.8 -9.3693e-06 -683.1386 683.1386 9.3693e-06 -0.7 -9.0094e-06 -683.1386 683.1386 9.0094e-06 -0.6 -8.7075e-06 -683.1386 683.1386 8.7075e-06 -0.5 -8.4906e-06 -683.1387 683.1387 8.4906e-06 -0.4 -8.3588e-06 -683.1396 683.1396 8.3588e-06 -0.3 -8.1434e-06 -683.1506 683.1506 8.1434e-06 -0.2 -7.0825e-06 -683.1870 683.1870 7.0825e-06 -0.1 -4.4066e-06 -683.2330 683.2330 4.4066e-06 2.220446e-16 9.356e-21 -683.2721 683.2721 -9.356e-21 -1.20000 -2.66285e-05 -1024.9 1024.9 2.66285e-05 -1.10000 -2.56821e-05 -1024.9 1024.9 2.56821e-05 -1.00000 -2.47929e-05 -1024.9 1024.9 2.47929e-05 -0.9 -2.39893e-05 -1024.9 1024.9 2.39893e-05 -0.8 -2.33085e-05 -1024.9 1024.9 2.33085e-05 -0.7 -2.27861e-05 -1024.9 1024.9 2.27861e-05 -0.6 -2.24175e-05 -1024.9 1024.9 2.24175e-05 -0.5 -2.19761e-05 -1025 1025 2.19761e-05 -0.4 -2.07169e-05 -1025 1025 2.07169e-05 -0.3 -1.79459e-05 -1025 1025 1.79459e-05 -0.2 -1.34804e-05 -1025.1 1025.1 1.34804e-05 -0.1 -7.4306e-06 -1025.1 1025.1 7.4306e-06 2.220446e-16 1.821e-20 -1025.2 1025.2 -1.821e-20 -1.20000 -4.53699e-05 -1366.8 1366.8 4.53699e-05 -1.10000 -4.40548e-05 -1366.8 1366.8 4.40548e-05 -1.00000 -4.29313e-05 -1366.8 1366.8 4.29313e-05 -0.9 -4.2032e-05 -1366.8 1366.8 4.2032e-05 -0.8 -4.13233e-05 -1366.8 1366.8 4.13233e-05 -0.7 -4.05044e-05 -1366.8 1366.8 4.05044e-05 -0.6 -3.89158e-05 -1366.9 1366.9 3.89158e-05 -0.5 -3.59953e-05 -1366.9 1366.9 3.59953e-05 -0.4 -3.15177e-05 -1367 1367 3.15177e-05 -0.3 -2.55137e-05 -1367 1367 2.55137e-05 -0.2 -1.8137e-05 -1367 1367 1.8137e-05 -0.1 -9.5717e-06 -1367.1 1367.1 9.5717e-06 2.220446e-16 2.247e-20 -1367.1 1367.1 -2.247e-20 -1.20000 -1.518e-06 -253.7047 253.7047 1.518e-06 -1.10000 -1.4229e-06 -253.7045 253.7045 1.4229e-06 -1.00000 -1.3311e-06 -253.7043 253.7043 1.3311e-06 -0.9 -1.2427e-06 -253.7041 253.7041 1.2427e-06 -0.8 -1.1576e-06 -253.7039 253.7039 1.1576e-06 -0.7 -1.0757e-06 -253.7037 253.7037 1.0757e-06 -0.6 -9.97214e-07 -253.7035 253.7035 9.97214e-07 -0.5 -9.225531e-07 -253.7033 253.7033 9.225531e-07 -0.4 -8.533641e-07 -253.7030 253.7030 8.533641e-07 -0.3 -7.956337e-07 -253.7027 253.7027 7.956337e-07 -0.2 -7.598786e-07 -253.7024 253.7024 7.598786e-07 -0.1 -7.124749e-07 -253.7032 253.7032 7.124749e-07 2.220446e-16 3.537e-21 -253.7209 253.7209 -3.537e-21 -1.20000 -1.52984e-05 -507.6544 507.6544 1.52984e-05 -1.10000 -1.4683e-05 -507.6543 507.6543 1.4683e-05 -1.00000 -1.40779e-05 -507.6542 507.6542 1.40779e-05 -0.9 -1.34845e-05 -507.6541 507.6541 1.34845e-05 -0.8 -1.29059e-05 -507.6540 507.6540 1.29059e-05 -0.7 -1.23491e-05 -507.6539 507.6539 1.23491e-05 -0.6 -1.18301e-05 -507.6538 507.6538 1.18301e-05 -0.5 -1.13837e-05 -507.6537 507.6537 1.13837e-05 -0.4 -1.10635e-05 -507.6537 507.6537 1.10635e-05 -0.3 -1.08447e-05 -507.6573 507.6573 1.08447e-05 -0.2 -9.877e-06 -507.6887 507.6887 9.877e-06 -0.1 -6.4134e-06 -507.7388 507.7388 6.4134e-06 2.220446e-16 2.030e-20 -507.7829 507.7829 -2.030e-20 -1.20000 -4.10109e-05 -761.7288 761.7288 4.10109e-05 -1.10000 -3.95011e-05 -761.7288 761.7288 3.95011e-05 -1.00000 -3.80377e-05 -761.7288 761.7288 3.80377e-05 -0.9 -3.66462e-05 -761.7288 761.7288 3.66462e-05 -0.8 -3.53707e-05 -761.7288 761.7288 3.53707e-05 -0.7 -3.42785e-05 -761.7289 761.7289 3.42785e-05 -0.6 -3.34415e-05 -761.7297 761.7297 3.34415e-05 -0.5 -3.27682e-05 -761.7390 761.7390 3.27682e-05 -0.4 -3.13062e-05 -761.7736 761.7736 3.13062e-05 -0.3 -2.75764e-05 -761.8224 761.8224 2.75764e-05 -0.2 -2.09876e-05 -761.8723 761.8723 2.09876e-05 -0.1 -1.16759e-05 -761.9186 761.9186 1.16759e-05 2.220446e-16 3.183e-20 -761.9564 761.9564 -3.183e-20 -1.20000 -7.24642e-05 -1015.9 1015.9 7.24642e-05 -1.10000 -7.00754e-05 -1015.9 1015.9 7.00754e-05 -1.00000 -6.79109e-05 -1015.9 1015.9 6.79109e-05 -0.9 -6.60524e-05 -1015.9 1015.9 6.60524e-05 -0.8 -6.45472e-05 -1015.9 1015.9 6.45472e-05 -0.7 -6.31457e-05 -1015.9 1015.9 6.31457e-05 -0.6 -6.09105e-05 -1015.9 1015.9 6.09105e-05 -0.5 -5.67456e-05 -1016 1016 5.67456e-05 -0.4 -5.00476e-05 -1016 1016 5.00476e-05 -0.3 -4.0752e-05 -1016.1 1016.1 4.0752e-05 -0.2 -2.9099e-05 -1016.1 1016.1 2.9099e-05 -0.1 -1.54101e-05 -1016.1 1016.1 1.54101e-05 2.220446e-16 2.632e-20 -1016.2 1016.2 -2.632e-20 -1.20000 -1.8308e-06 -481.6195 481.6195 1.8308e-06 -1.10000 -1.7404e-06 -481.6194 481.6194 1.7404e-06 -1.00000 -1.6532e-06 -481.6194 481.6194 1.6532e-06 -0.9 -1.5701e-06 -481.6193 481.6193 1.5701e-06 -0.8 -1.4927e-06 -481.6193 481.6193 1.4927e-06 -0.7 -1.4235e-06 -481.6192 481.6192 1.4235e-06 -0.6 -1.3666e-06 -481.6192 481.6192 1.3666e-06 -0.5 -1.3262e-06 -481.6191 481.6191 1.3262e-06 -0.4 -1.3022e-06 -481.6191 481.6191 1.3022e-06 -0.3 -1.2853e-06 -481.6193 481.6193 1.2853e-06 -0.2 -1.2338e-06 -481.6223 481.6223 1.2338e-06 -0.1 -9.404547e-07 -481.6369 481.6369 9.404547e-07 2.220446e-16 2.625e-21 -481.6592 481.6592 -2.625e-21 -1.20000 -7.3559e-06 -963.4512 963.4512 7.3559e-06 -1.10000 -7.0758e-06 -963.4513 963.4513 7.0758e-06 -1.00000 -6.8127e-06 -963.4515 963.4515 6.8127e-06 -0.9 -6.5744e-06 -963.4516 963.4516 6.5744e-06 -0.8 -6.3712e-06 -963.4518 963.4518 6.3712e-06 -0.7 -6.2141e-06 -963.4519 963.4519 6.2141e-06 -0.6 -6.1083e-06 -963.4522 963.4522 6.1083e-06 -0.5 -6.0435e-06 -963.4530 963.4530 6.0435e-06 -0.4 -5.9635e-06 -963.4580 963.4580 5.9635e-06 -0.3 -5.6383e-06 -963.4785 963.4785 5.6383e-06 -0.2 -4.6582e-06 -963.5148 963.5148 4.6582e-06 -0.1 -2.7828e-06 -963.5555 963.5555 2.7828e-06 2.220446e-16 5.651e-21 -963.5887 963.5887 -5.651e-21 -1.20000 -1.58039e-05 -1445.4 1445.4 1.58039e-05 -1.10000 -1.53259e-05 -1445.4 1445.4 1.53259e-05 -1.00000 -1.49138e-05 -1445.4 1445.4 1.49138e-05 -0.9 -1.45824e-05 -1445.4 1445.4 1.45824e-05 -0.8 -1.43389e-05 -1445.4 1445.4 1.43389e-05 -0.7 -1.41717e-05 -1445.4 1445.4 1.41717e-05 -0.6 -1.40106e-05 -1445.4 1445.4 1.40106e-05 -0.5 -1.36084e-05 -1445.4 1445.4 1.36084e-05 -0.4 -1.2581e-05 -1445.5 1445.5 1.2581e-05 -0.3 -1.06975e-05 -1445.5 1445.5 1.06975e-05 -0.2 -7.9231e-06 -1445.5 1445.5 7.9231e-06 -0.1 -4.3228e-06 -1445.6 1445.6 4.3228e-06 2.220446e-16 1.521e-20 -1445.6 1445.6 -1.521e-20 -1.20000 -2.59598e-05 -1927.4 1927.4 2.59598e-05 -1.10000 -2.54242e-05 -1927.4 1927.4 2.54242e-05 -1.00000 -2.50084e-05 -1927.4 1927.4 2.50084e-05 -0.9 -2.46957e-05 -1927.4 1927.4 2.46957e-05 -0.8 -2.43971e-05 -1927.4 1927.4 2.43971e-05 -0.7 -2.38579e-05 -1927.4 1927.4 2.38579e-05 -0.6 -2.27421e-05 -1927.5 1927.5 2.27421e-05 -0.5 -2.08403e-05 -1927.5 1927.5 2.08403e-05 -0.4 -1.80976e-05 -1927.6 1927.6 1.80976e-05 -0.3 -1.45545e-05 -1927.6 1927.6 1.45545e-05 -0.2 -1.02942e-05 -1927.6 1927.6 1.02942e-05 -0.1 -5.4109e-06 -1927.7 1927.7 5.4109e-06 2.220446e-16 1.350e-20 -1927.7 1927.7 -1.350e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2g_sw.standard0000644000175000017500000003760614163340332025160 0ustar carstencarstenFreq N(g) 100.00000 2.039184e-50 125.89254 2.039184e-50 158.48932 2.039184e-50 199.52623 2.039184e-50 251.18864 2.039184e-50 316.22777 2.039184e-50 398.10717 2.039184e-50 501.18723 2.039184e-50 630.95734 2.039184e-50 794.32823 2.039184e-50 1000 2.039184e-50 1258.93 2.039184e-50 1584.89 2.039184e-50 1995.26 2.039184e-50 2511.89 2.039184e-50 3162.28 2.039184e-50 3981.07 2.039184e-50 5011.87 2.039184e-50 6309.57 2.039184e-50 7943.28 2.039184e-50 10000 2.039184e-50 12589.25 2.039184e-50 15848.93 2.039184e-50 19952.62 2.039184e-50 25118.86 2.039184e-50 31622.78 2.039184e-50 39810.72 2.039184e-50 50118.72 2.039184e-50 63095.73 2.039184e-50 79432.82 2.039184e-50 100000 2.039184e-50 125892.54 2.039184e-50 158489.32 2.039184e-50 199526.23 2.039184e-50 251188.64 2.039184e-50 316227.77 2.039184e-50 398107.17 2.039184e-50 501187.23 2.039184e-50 630957.34 2.039184e-50 794328.23 2.039184e-50 1000000 2.039184e-50 1258930 2.039184e-50 1584890 2.039184e-50 1995260 2.039184e-50 2511890 2.039184e-50 3162280 2.039184e-50 3981070 2.039184e-50 5011870 2.039184e-50 6309570 2.039184e-50 7943280 2.039184e-50 10000000 2.039184e-50 12589250 2.039184e-50 15848930 2.039184e-50 19952620 2.039184e-50 25118860 2.039184e-50 31622780 2.039184e-50 39810720 2.039184e-50 50118720 2.039184e-50 63095730 2.039184e-50 79432820 2.039184e-50 100000000 2.039184e-50 100.00000 7.3908409e-49 125.89254 7.3908409e-49 158.48932 7.3908409e-49 199.52623 7.3908409e-49 251.18864 7.3908409e-49 316.22777 7.3908409e-49 398.10717 7.3908409e-49 501.18723 7.3908409e-49 630.95734 7.3908409e-49 794.32823 7.3908409e-49 1000 7.3908409e-49 1258.93 7.3908409e-49 1584.89 7.3908409e-49 1995.26 7.3908409e-49 2511.89 7.3908409e-49 3162.28 7.3908409e-49 3981.07 7.3908409e-49 5011.87 7.3908409e-49 6309.57 7.3908409e-49 7943.28 7.3908409e-49 10000 7.3908409e-49 12589.25 7.3908409e-49 15848.93 7.3908409e-49 19952.62 7.3908409e-49 25118.86 7.3908409e-49 31622.78 7.3908409e-49 39810.72 7.3908409e-49 50118.72 7.3908409e-49 63095.73 7.3908409e-49 79432.82 7.3908409e-49 100000 7.3908409e-49 125892.54 7.3908409e-49 158489.32 7.3908409e-49 199526.23 7.3908409e-49 251188.64 7.3908409e-49 316227.77 7.3908409e-49 398107.17 7.3908409e-49 501187.23 7.3908409e-49 630957.34 7.3908409e-49 794328.23 7.3908409e-49 1000000 7.3908409e-49 1258930 7.3908409e-49 1584890 7.3908409e-49 1995260 7.3908409e-49 2511890 7.3908409e-49 3162280 7.3908409e-49 3981070 7.3908409e-49 5011870 7.3908409e-49 6309570 7.3908409e-49 7943280 7.3908409e-49 10000000 7.3908409e-49 12589250 7.3908409e-49 15848930 7.3908409e-49 19952620 7.3908409e-49 25118860 7.3908409e-49 31622780 7.3908409e-49 39810720 7.3908409e-49 50118720 7.3908409e-49 63095730 7.3908409e-49 79432820 7.3908409e-49 100000000 7.3908409e-49 100.00000 2.795584e-48 125.89254 2.795584e-48 158.48932 2.795584e-48 199.52623 2.795584e-48 251.18864 2.795584e-48 316.22777 2.795584e-48 398.10717 2.795584e-48 501.18723 2.795584e-48 630.95734 2.795584e-48 794.32823 2.795584e-48 1000 2.795584e-48 1258.93 2.795584e-48 1584.89 2.795584e-48 1995.26 2.795584e-48 2511.89 2.795584e-48 3162.28 2.795584e-48 3981.07 2.795584e-48 5011.87 2.795584e-48 6309.57 2.795584e-48 7943.28 2.795584e-48 10000 2.795584e-48 12589.25 2.795584e-48 15848.93 2.795584e-48 19952.62 2.795584e-48 25118.86 2.795584e-48 31622.78 2.795584e-48 39810.72 2.795584e-48 50118.72 2.795584e-48 63095.73 2.795584e-48 79432.82 2.795584e-48 100000 2.795584e-48 125892.54 2.795584e-48 158489.32 2.795584e-48 199526.23 2.795584e-48 251188.64 2.795584e-48 316227.77 2.795584e-48 398107.17 2.795584e-48 501187.23 2.795584e-48 630957.34 2.795584e-48 794328.23 2.795584e-48 1000000 2.795584e-48 1258930 2.795584e-48 1584890 2.795584e-48 1995260 2.795584e-48 2511890 2.795584e-48 3162280 2.795584e-48 3981070 2.795584e-48 5011870 2.795584e-48 6309570 2.795584e-48 7943280 2.795584e-48 10000000 2.795584e-48 12589250 2.795584e-48 15848930 2.795584e-48 19952620 2.795584e-48 25118860 2.795584e-48 31622780 2.795584e-48 39810720 2.795584e-48 50118720 2.795584e-48 63095730 2.795584e-48 79432820 2.795584e-48 100000000 2.795584e-48 100.00000 6.170256e-48 125.89254 6.170256e-48 158.48932 6.170256e-48 199.52623 6.170256e-48 251.18864 6.170256e-48 316.22777 6.170256e-48 398.10717 6.170256e-48 501.18723 6.170256e-48 630.95734 6.170256e-48 794.32823 6.170256e-48 1000 6.170256e-48 1258.93 6.170256e-48 1584.89 6.170256e-48 1995.26 6.170256e-48 2511.89 6.170256e-48 3162.28 6.170256e-48 3981.07 6.170256e-48 5011.87 6.170256e-48 6309.57 6.170256e-48 7943.28 6.170256e-48 10000 6.170256e-48 12589.25 6.170256e-48 15848.93 6.170256e-48 19952.62 6.170256e-48 25118.86 6.170256e-48 31622.78 6.170256e-48 39810.72 6.170256e-48 50118.72 6.170256e-48 63095.73 6.170256e-48 79432.82 6.170256e-48 100000 6.170256e-48 125892.54 6.170256e-48 158489.32 6.170256e-48 199526.23 6.170256e-48 251188.64 6.170256e-48 316227.77 6.170256e-48 398107.17 6.170256e-48 501187.23 6.170256e-48 630957.34 6.170256e-48 794328.23 6.170256e-48 1000000 6.170256e-48 1258930 6.170256e-48 1584890 6.170256e-48 1995260 6.170256e-48 2511890 6.170256e-48 3162280 6.170256e-48 3981070 6.170256e-48 5011870 6.170256e-48 6309570 6.170256e-48 7943280 6.170256e-48 10000000 6.170256e-48 12589250 6.170256e-48 15848930 6.170256e-48 19952620 6.170256e-48 25118860 6.170256e-48 31622780 6.170256e-48 39810720 6.170256e-48 50118720 6.170256e-48 63095730 6.170256e-48 79432820 6.170256e-48 100000000 6.170256e-48 100.00000 4.5171841e-51 125.89254 4.5171841e-51 158.48932 4.5171841e-51 199.52623 4.5171841e-51 251.18864 4.5171841e-51 316.22777 4.5171841e-51 398.10717 4.5171841e-51 501.18723 4.5171841e-51 630.95734 4.5171841e-51 794.32823 4.5171841e-51 1000 4.5171841e-51 1258.93 4.5171841e-51 1584.89 4.5171841e-51 1995.26 4.5171841e-51 2511.89 4.5171841e-51 3162.28 4.5171841e-51 3981.07 4.5171841e-51 5011.87 4.5171841e-51 6309.57 4.5171841e-51 7943.28 4.5171841e-51 10000 4.5171841e-51 12589.25 4.5171841e-51 15848.93 4.5171841e-51 19952.62 4.5171841e-51 25118.86 4.5171841e-51 31622.78 4.5171841e-51 39810.72 4.5171841e-51 50118.72 4.5171841e-51 63095.73 4.5171841e-51 79432.82 4.5171841e-51 100000 4.5171841e-51 125892.54 4.5171841e-51 158489.32 4.5171841e-51 199526.23 4.5171841e-51 251188.64 4.5171841e-51 316227.77 4.5171841e-51 398107.17 4.5171841e-51 501187.23 4.5171841e-51 630957.34 4.5171841e-51 794328.23 4.5171841e-51 1000000 4.5171841e-51 1258930 4.5171841e-51 1584890 4.5171841e-51 1995260 4.5171841e-51 2511890 4.5171841e-51 3162280 4.5171841e-51 3981070 4.5171841e-51 5011870 4.5171841e-51 6309570 4.5171841e-51 7943280 4.5171841e-51 10000000 4.5171841e-51 12589250 4.5171841e-51 15848930 4.5171841e-51 19952620 4.5171841e-51 25118860 4.5171841e-51 31622780 4.5171841e-51 39810720 4.5171841e-51 50118720 4.5171841e-51 63095730 4.5171841e-51 79432820 4.5171841e-51 100000000 4.5171841e-51 100.00000 6.4112049e-49 125.89254 6.4112049e-49 158.48932 6.4112049e-49 199.52623 6.4112049e-49 251.18864 6.4112049e-49 316.22777 6.4112049e-49 398.10717 6.4112049e-49 501.18723 6.4112049e-49 630.95734 6.4112049e-49 794.32823 6.4112049e-49 1000 6.4112049e-49 1258.93 6.4112049e-49 1584.89 6.4112049e-49 1995.26 6.4112049e-49 2511.89 6.4112049e-49 3162.28 6.4112049e-49 3981.07 6.4112049e-49 5011.87 6.4112049e-49 6309.57 6.4112049e-49 7943.28 6.4112049e-49 10000 6.4112049e-49 12589.25 6.4112049e-49 15848.93 6.4112049e-49 19952.62 6.4112049e-49 25118.86 6.4112049e-49 31622.78 6.4112049e-49 39810.72 6.4112049e-49 50118.72 6.4112049e-49 63095.73 6.4112049e-49 79432.82 6.4112049e-49 100000 6.4112049e-49 125892.54 6.4112049e-49 158489.32 6.4112049e-49 199526.23 6.4112049e-49 251188.64 6.4112049e-49 316227.77 6.4112049e-49 398107.17 6.4112049e-49 501187.23 6.4112049e-49 630957.34 6.4112049e-49 794328.23 6.4112049e-49 1000000 6.4112049e-49 1258930 6.4112049e-49 1584890 6.4112049e-49 1995260 6.4112049e-49 2511890 6.4112049e-49 3162280 6.4112049e-49 3981070 6.4112049e-49 5011870 6.4112049e-49 6309570 6.4112049e-49 7943280 6.4112049e-49 10000000 6.4112049e-49 12589250 6.4112049e-49 15848930 6.4112049e-49 19952620 6.4112049e-49 25118860 6.4112049e-49 31622780 6.4112049e-49 39810720 6.4112049e-49 50118720 6.4112049e-49 63095730 6.4112049e-49 79432820 6.4112049e-49 100000000 6.4112049e-49 100.00000 2.706025e-48 125.89254 2.706025e-48 158.48932 2.706025e-48 199.52623 2.706025e-48 251.18864 2.706025e-48 316.22777 2.706025e-48 398.10717 2.706025e-48 501.18723 2.706025e-48 630.95734 2.706025e-48 794.32823 2.706025e-48 1000 2.706025e-48 1258.93 2.706025e-48 1584.89 2.706025e-48 1995.26 2.706025e-48 2511.89 2.706025e-48 3162.28 2.706025e-48 3981.07 2.706025e-48 5011.87 2.706025e-48 6309.57 2.706025e-48 7943.28 2.706025e-48 10000 2.706025e-48 12589.25 2.706025e-48 15848.93 2.706025e-48 19952.62 2.706025e-48 25118.86 2.706025e-48 31622.78 2.706025e-48 39810.72 2.706025e-48 50118.72 2.706025e-48 63095.73 2.706025e-48 79432.82 2.706025e-48 100000 2.706025e-48 125892.54 2.706025e-48 158489.32 2.706025e-48 199526.23 2.706025e-48 251188.64 2.706025e-48 316227.77 2.706025e-48 398107.17 2.706025e-48 501187.23 2.706025e-48 630957.34 2.706025e-48 794328.23 2.706025e-48 1000000 2.706025e-48 1258930 2.706025e-48 1584890 2.706025e-48 1995260 2.706025e-48 2511890 2.706025e-48 3162280 2.706025e-48 3981070 2.706025e-48 5011870 2.706025e-48 6309570 2.706025e-48 7943280 2.706025e-48 10000000 2.706025e-48 12589250 2.706025e-48 15848930 2.706025e-48 19952620 2.706025e-48 25118860 2.706025e-48 31622780 2.706025e-48 39810720 2.706025e-48 50118720 2.706025e-48 63095730 2.706025e-48 79432820 2.706025e-48 100000000 2.706025e-48 100.00000 6.110784e-48 125.89254 6.110784e-48 158.48932 6.110784e-48 199.52623 6.110784e-48 251.18864 6.110784e-48 316.22777 6.110784e-48 398.10717 6.110784e-48 501.18723 6.110784e-48 630.95734 6.110784e-48 794.32823 6.110784e-48 1000 6.110784e-48 1258.93 6.110784e-48 1584.89 6.110784e-48 1995.26 6.110784e-48 2511.89 6.110784e-48 3162.28 6.110784e-48 3981.07 6.110784e-48 5011.87 6.110784e-48 6309.57 6.110784e-48 7943.28 6.110784e-48 10000 6.110784e-48 12589.25 6.110784e-48 15848.93 6.110784e-48 19952.62 6.110784e-48 25118.86 6.110784e-48 31622.78 6.110784e-48 39810.72 6.110784e-48 50118.72 6.110784e-48 63095.73 6.110784e-48 79432.82 6.110784e-48 100000 6.110784e-48 125892.54 6.110784e-48 158489.32 6.110784e-48 199526.23 6.110784e-48 251188.64 6.110784e-48 316227.77 6.110784e-48 398107.17 6.110784e-48 501187.23 6.110784e-48 630957.34 6.110784e-48 794328.23 6.110784e-48 1000000 6.110784e-48 1258930 6.110784e-48 1584890 6.110784e-48 1995260 6.110784e-48 2511890 6.110784e-48 3162280 6.110784e-48 3981070 6.110784e-48 5011870 6.110784e-48 6309570 6.110784e-48 7943280 6.110784e-48 10000000 6.110784e-48 12589250 6.110784e-48 15848930 6.110784e-48 19952620 6.110784e-48 25118860 6.110784e-48 31622780 6.110784e-48 39810720 6.110784e-48 50118720 6.110784e-48 63095730 6.110784e-48 79432820 6.110784e-48 100000000 6.110784e-48 100.00000 5.924356e-50 125.89254 5.924356e-50 158.48932 5.924356e-50 199.52623 5.924356e-50 251.18864 5.924356e-50 316.22777 5.924356e-50 398.10717 5.924356e-50 501.18723 5.924356e-50 630.95734 5.924356e-50 794.32823 5.924356e-50 1000 5.924356e-50 1258.93 5.924356e-50 1584.89 5.924356e-50 1995.26 5.924356e-50 2511.89 5.924356e-50 3162.28 5.924356e-50 3981.07 5.924356e-50 5011.87 5.924356e-50 6309.57 5.924356e-50 7943.28 5.924356e-50 10000 5.924356e-50 12589.25 5.924356e-50 15848.93 5.924356e-50 19952.62 5.924356e-50 25118.86 5.924356e-50 31622.78 5.924356e-50 39810.72 5.924356e-50 50118.72 5.924356e-50 63095.73 5.924356e-50 79432.82 5.924356e-50 100000 5.924356e-50 125892.54 5.924356e-50 158489.32 5.924356e-50 199526.23 5.924356e-50 251188.64 5.924356e-50 316227.77 5.924356e-50 398107.17 5.924356e-50 501187.23 5.924356e-50 630957.34 5.924356e-50 794328.23 5.924356e-50 1000000 5.924356e-50 1258930 5.924356e-50 1584890 5.924356e-50 1995260 5.924356e-50 2511890 5.924356e-50 3162280 5.924356e-50 3981070 5.924356e-50 5011870 5.924356e-50 6309570 5.924356e-50 7943280 5.924356e-50 10000000 5.924356e-50 12589250 5.924356e-50 15848930 5.924356e-50 19952620 5.924356e-50 25118860 5.924356e-50 31622780 5.924356e-50 39810720 5.924356e-50 50118720 5.924356e-50 63095730 5.924356e-50 79432820 5.924356e-50 100000000 5.924356e-50 100.00000 8.4621601e-49 125.89254 8.4621601e-49 158.48932 8.4621601e-49 199.52623 8.4621601e-49 251.18864 8.4621601e-49 316.22777 8.4621601e-49 398.10717 8.4621601e-49 501.18723 8.4621601e-49 630.95734 8.4621601e-49 794.32823 8.4621601e-49 1000 8.4621601e-49 1258.93 8.4621601e-49 1584.89 8.4621601e-49 1995.26 8.4621601e-49 2511.89 8.4621601e-49 3162.28 8.4621601e-49 3981.07 8.4621601e-49 5011.87 8.4621601e-49 6309.57 8.4621601e-49 7943.28 8.4621601e-49 10000 8.4621601e-49 12589.25 8.4621601e-49 15848.93 8.4621601e-49 19952.62 8.4621601e-49 25118.86 8.4621601e-49 31622.78 8.4621601e-49 39810.72 8.4621601e-49 50118.72 8.4621601e-49 63095.73 8.4621601e-49 79432.82 8.4621601e-49 100000 8.4621601e-49 125892.54 8.4621601e-49 158489.32 8.4621601e-49 199526.23 8.4621601e-49 251188.64 8.4621601e-49 316227.77 8.4621601e-49 398107.17 8.4621601e-49 501187.23 8.4621601e-49 630957.34 8.4621601e-49 794328.23 8.4621601e-49 1000000 8.4621601e-49 1258930 8.4621601e-49 1584890 8.4621601e-49 1995260 8.4621601e-49 2511890 8.4621601e-49 3162280 8.4621601e-49 3981070 8.4621601e-49 5011870 8.4621601e-49 6309570 8.4621601e-49 7943280 8.4621601e-49 10000000 8.4621601e-49 12589250 8.4621601e-49 15848930 8.4621601e-49 19952620 8.4621601e-49 25118860 8.4621601e-49 31622780 8.4621601e-49 39810720 8.4621601e-49 50118720 8.4621601e-49 63095730 8.4621601e-49 79432820 8.4621601e-49 100000000 8.4621601e-49 100.00000 2.869636e-48 125.89254 2.869636e-48 158.48932 2.869636e-48 199.52623 2.869636e-48 251.18864 2.869636e-48 316.22777 2.869636e-48 398.10717 2.869636e-48 501.18723 2.869636e-48 630.95734 2.869636e-48 794.32823 2.869636e-48 1000 2.869636e-48 1258.93 2.869636e-48 1584.89 2.869636e-48 1995.26 2.869636e-48 2511.89 2.869636e-48 3162.28 2.869636e-48 3981.07 2.869636e-48 5011.87 2.869636e-48 6309.57 2.869636e-48 7943.28 2.869636e-48 10000 2.869636e-48 12589.25 2.869636e-48 15848.93 2.869636e-48 19952.62 2.869636e-48 25118.86 2.869636e-48 31622.78 2.869636e-48 39810.72 2.869636e-48 50118.72 2.869636e-48 63095.73 2.869636e-48 79432.82 2.869636e-48 100000 2.869636e-48 125892.54 2.869636e-48 158489.32 2.869636e-48 199526.23 2.869636e-48 251188.64 2.869636e-48 316227.77 2.869636e-48 398107.17 2.869636e-48 501187.23 2.869636e-48 630957.34 2.869636e-48 794328.23 2.869636e-48 1000000 2.869636e-48 1258930 2.869636e-48 1584890 2.869636e-48 1995260 2.869636e-48 2511890 2.869636e-48 3162280 2.869636e-48 3981070 2.869636e-48 5011870 2.869636e-48 6309570 2.869636e-48 7943280 2.869636e-48 10000000 2.869636e-48 12589250 2.869636e-48 15848930 2.869636e-48 19952620 2.869636e-48 25118860 2.869636e-48 31622780 2.869636e-48 39810720 2.869636e-48 50118720 2.869636e-48 63095730 2.869636e-48 79432820 2.869636e-48 100000000 2.869636e-48 100.00000 6.180196e-48 125.89254 6.180196e-48 158.48932 6.180196e-48 199.52623 6.180196e-48 251.18864 6.180196e-48 316.22777 6.180196e-48 398.10717 6.180196e-48 501.18723 6.180196e-48 630.95734 6.180196e-48 794.32823 6.180196e-48 1000 6.180196e-48 1258.93 6.180196e-48 1584.89 6.180196e-48 1995.26 6.180196e-48 2511.89 6.180196e-48 3162.28 6.180196e-48 3981.07 6.180196e-48 5011.87 6.180196e-48 6309.57 6.180196e-48 7943.28 6.180196e-48 10000 6.180196e-48 12589.25 6.180196e-48 15848.93 6.180196e-48 19952.62 6.180196e-48 25118.86 6.180196e-48 31622.78 6.180196e-48 39810.72 6.180196e-48 50118.72 6.180196e-48 63095.73 6.180196e-48 79432.82 6.180196e-48 100000 6.180196e-48 125892.54 6.180196e-48 158489.32 6.180196e-48 199526.23 6.180196e-48 251188.64 6.180196e-48 316227.77 6.180196e-48 398107.17 6.180196e-48 501187.23 6.180196e-48 630957.34 6.180196e-48 794328.23 6.180196e-48 1000000 6.180196e-48 1258930 6.180196e-48 1584890 6.180196e-48 1995260 6.180196e-48 2511890 6.180196e-48 3162280 6.180196e-48 3981070 6.180196e-48 5011870 6.180196e-48 6309570 6.180196e-48 7943280 6.180196e-48 10000000 6.180196e-48 12589250 6.180196e-48 15848930 6.180196e-48 19952620 6.180196e-48 25118860 6.180196e-48 31622780 6.180196e-48 39810720 6.180196e-48 50118720 6.180196e-48 63095730 6.180196e-48 79432820 6.180196e-48 100000000 6.180196e-48 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2g_st.standard0000644000175000017500000003770314163340332025153 0ustar carstencarstenFreq N(g) 100.00000 7.7841e-52 125.89254 7.7841e-52 158.48932 7.7841e-52 199.52623 7.7841e-52 251.18864 7.7841e-52 316.22777 7.7841e-52 398.10717 7.7841e-52 501.18723 7.7841e-52 630.95734 7.7841e-52 794.32823 7.7841e-52 1000 7.7841e-52 1258.93 7.7841e-52 1584.89 7.7841e-52 1995.26 7.7841e-52 2511.89 7.7841e-52 3162.28 7.7841e-52 3981.07 7.7841e-52 5011.87 7.7841e-52 6309.57 7.7841e-52 7943.28 7.7841e-52 10000 7.7841e-52 12589.25 7.7841e-52 15848.93 7.7841e-52 19952.62 7.7841e-52 25118.86 7.7841e-52 31622.78 7.7841e-52 39810.72 7.7841e-52 50118.72 7.7841e-52 63095.73 7.7841e-52 79432.82 7.7841e-52 100000 7.7841e-52 125892.54 7.7841e-52 158489.32 7.7841e-52 199526.23 7.7841e-52 251188.64 7.7841e-52 316227.77 7.7841e-52 398107.17 7.7841e-52 501187.23 7.7841e-52 630957.34 7.7841e-52 794328.23 7.7841e-52 1000000 7.7841e-52 1258930 7.7841e-52 1584890 7.7841e-52 1995260 7.7841e-52 2511890 7.7841e-52 3162280 7.7841e-52 3981070 7.7841e-52 5011870 7.7841e-52 6309570 7.7841e-52 7943280 7.7841e-52 10000000 7.7841e-52 12589250 7.7841e-52 15848930 7.7841e-52 19952620 7.7841e-52 25118860 7.7841e-52 31622780 7.7841e-52 39810720 7.7841e-52 50118720 7.7841e-52 63095730 7.7841e-52 79432820 7.7841e-52 100000000 7.7841e-52 100.00000 3.538161e-50 125.89254 3.538161e-50 158.48932 3.538161e-50 199.52623 3.538161e-50 251.18864 3.538161e-50 316.22777 3.538161e-50 398.10717 3.538161e-50 501.18723 3.538161e-50 630.95734 3.538161e-50 794.32823 3.538161e-50 1000 3.538161e-50 1258.93 3.538161e-50 1584.89 3.538161e-50 1995.26 3.538161e-50 2511.89 3.538161e-50 3162.28 3.538161e-50 3981.07 3.538161e-50 5011.87 3.538161e-50 6309.57 3.538161e-50 7943.28 3.538161e-50 10000 3.538161e-50 12589.25 3.538161e-50 15848.93 3.538161e-50 19952.62 3.538161e-50 25118.86 3.538161e-50 31622.78 3.538161e-50 39810.72 3.538161e-50 50118.72 3.538161e-50 63095.73 3.538161e-50 79432.82 3.538161e-50 100000 3.538161e-50 125892.54 3.538161e-50 158489.32 3.538161e-50 199526.23 3.538161e-50 251188.64 3.538161e-50 316227.77 3.538161e-50 398107.17 3.538161e-50 501187.23 3.538161e-50 630957.34 3.538161e-50 794328.23 3.538161e-50 1000000 3.538161e-50 1258930 3.538161e-50 1584890 3.538161e-50 1995260 3.538161e-50 2511890 3.538161e-50 3162280 3.538161e-50 3981070 3.538161e-50 5011870 3.538161e-50 6309570 3.538161e-50 7943280 3.538161e-50 10000000 3.538161e-50 12589250 3.538161e-50 15848930 3.538161e-50 19952620 3.538161e-50 25118860 3.538161e-50 31622780 3.538161e-50 39810720 3.538161e-50 50118720 3.538161e-50 63095730 3.538161e-50 79432820 3.538161e-50 100000000 3.538161e-50 100.00000 1.3965169e-49 125.89254 1.3965169e-49 158.48932 1.3965169e-49 199.52623 1.3965169e-49 251.18864 1.3965169e-49 316.22777 1.3965169e-49 398.10717 1.3965169e-49 501.18723 1.3965169e-49 630.95734 1.3965169e-49 794.32823 1.3965169e-49 1000 1.3965169e-49 1258.93 1.3965169e-49 1584.89 1.3965169e-49 1995.26 1.3965169e-49 2511.89 1.3965169e-49 3162.28 1.3965169e-49 3981.07 1.3965169e-49 5011.87 1.3965169e-49 6309.57 1.3965169e-49 7943.28 1.3965169e-49 10000 1.3965169e-49 12589.25 1.3965169e-49 15848.93 1.3965169e-49 19952.62 1.3965169e-49 25118.86 1.3965169e-49 31622.78 1.3965169e-49 39810.72 1.3965169e-49 50118.72 1.3965169e-49 63095.73 1.3965169e-49 79432.82 1.3965169e-49 100000 1.3965169e-49 125892.54 1.3965169e-49 158489.32 1.3965169e-49 199526.23 1.3965169e-49 251188.64 1.3965169e-49 316227.77 1.3965169e-49 398107.17 1.3965169e-49 501187.23 1.3965169e-49 630957.34 1.3965169e-49 794328.23 1.3965169e-49 1000000 1.3965169e-49 1258930 1.3965169e-49 1584890 1.3965169e-49 1995260 1.3965169e-49 2511890 1.3965169e-49 3162280 1.3965169e-49 3981070 1.3965169e-49 5011870 1.3965169e-49 6309570 1.3965169e-49 7943280 1.3965169e-49 10000000 1.3965169e-49 12589250 1.3965169e-49 15848930 1.3965169e-49 19952620 1.3965169e-49 25118860 1.3965169e-49 31622780 1.3965169e-49 39810720 1.3965169e-49 50118720 1.3965169e-49 63095730 1.3965169e-49 79432820 1.3965169e-49 100000000 1.3965169e-49 100.00000 3.1225744e-49 125.89254 3.1225744e-49 158.48932 3.1225744e-49 199.52623 3.1225744e-49 251.18864 3.1225744e-49 316.22777 3.1225744e-49 398.10717 3.1225744e-49 501.18723 3.1225744e-49 630.95734 3.1225744e-49 794.32823 3.1225744e-49 1000 3.1225744e-49 1258.93 3.1225744e-49 1584.89 3.1225744e-49 1995.26 3.1225744e-49 2511.89 3.1225744e-49 3162.28 3.1225744e-49 3981.07 3.1225744e-49 5011.87 3.1225744e-49 6309.57 3.1225744e-49 7943.28 3.1225744e-49 10000 3.1225744e-49 12589.25 3.1225744e-49 15848.93 3.1225744e-49 19952.62 3.1225744e-49 25118.86 3.1225744e-49 31622.78 3.1225744e-49 39810.72 3.1225744e-49 50118.72 3.1225744e-49 63095.73 3.1225744e-49 79432.82 3.1225744e-49 100000 3.1225744e-49 125892.54 3.1225744e-49 158489.32 3.1225744e-49 199526.23 3.1225744e-49 251188.64 3.1225744e-49 316227.77 3.1225744e-49 398107.17 3.1225744e-49 501187.23 3.1225744e-49 630957.34 3.1225744e-49 794328.23 3.1225744e-49 1000000 3.1225744e-49 1258930 3.1225744e-49 1584890 3.1225744e-49 1995260 3.1225744e-49 2511890 3.1225744e-49 3162280 3.1225744e-49 3981070 3.1225744e-49 5011870 3.1225744e-49 6309570 3.1225744e-49 7943280 3.1225744e-49 10000000 3.1225744e-49 12589250 3.1225744e-49 15848930 3.1225744e-49 19952620 3.1225744e-49 25118860 3.1225744e-49 31622780 3.1225744e-49 39810720 3.1225744e-49 50118720 3.1225744e-49 63095730 3.1225744e-49 79432820 3.1225744e-49 100000000 3.1225744e-49 100.00000 1.454436e-52 125.89254 1.454436e-52 158.48932 1.454436e-52 199.52623 1.454436e-52 251.18864 1.454436e-52 316.22777 1.454436e-52 398.10717 1.454436e-52 501.18723 1.454436e-52 630.95734 1.454436e-52 794.32823 1.454436e-52 1000 1.454436e-52 1258.93 1.454436e-52 1584.89 1.454436e-52 1995.26 1.454436e-52 2511.89 1.454436e-52 3162.28 1.454436e-52 3981.07 1.454436e-52 5011.87 1.454436e-52 6309.57 1.454436e-52 7943.28 1.454436e-52 10000 1.454436e-52 12589.25 1.454436e-52 15848.93 1.454436e-52 19952.62 1.454436e-52 25118.86 1.454436e-52 31622.78 1.454436e-52 39810.72 1.454436e-52 50118.72 1.454436e-52 63095.73 1.454436e-52 79432.82 1.454436e-52 100000 1.454436e-52 125892.54 1.454436e-52 158489.32 1.454436e-52 199526.23 1.454436e-52 251188.64 1.454436e-52 316227.77 1.454436e-52 398107.17 1.454436e-52 501187.23 1.454436e-52 630957.34 1.454436e-52 794328.23 1.454436e-52 1000000 1.454436e-52 1258930 1.454436e-52 1584890 1.454436e-52 1995260 1.454436e-52 2511890 1.454436e-52 3162280 1.454436e-52 3981070 1.454436e-52 5011870 1.454436e-52 6309570 1.454436e-52 7943280 1.454436e-52 10000000 1.454436e-52 12589250 1.454436e-52 15848930 1.454436e-52 19952620 1.454436e-52 25118860 1.454436e-52 31622780 1.454436e-52 39810720 1.454436e-52 50118720 1.454436e-52 63095730 1.454436e-52 79432820 1.454436e-52 100000000 1.454436e-52 100.00000 3.024121e-50 125.89254 3.024121e-50 158.48932 3.024121e-50 199.52623 3.024121e-50 251.18864 3.024121e-50 316.22777 3.024121e-50 398.10717 3.024121e-50 501.18723 3.024121e-50 630.95734 3.024121e-50 794.32823 3.024121e-50 1000 3.024121e-50 1258.93 3.024121e-50 1584.89 3.024121e-50 1995.26 3.024121e-50 2511.89 3.024121e-50 3162.28 3.024121e-50 3981.07 3.024121e-50 5011.87 3.024121e-50 6309.57 3.024121e-50 7943.28 3.024121e-50 10000 3.024121e-50 12589.25 3.024121e-50 15848.93 3.024121e-50 19952.62 3.024121e-50 25118.86 3.024121e-50 31622.78 3.024121e-50 39810.72 3.024121e-50 50118.72 3.024121e-50 63095.73 3.024121e-50 79432.82 3.024121e-50 100000 3.024121e-50 125892.54 3.024121e-50 158489.32 3.024121e-50 199526.23 3.024121e-50 251188.64 3.024121e-50 316227.77 3.024121e-50 398107.17 3.024121e-50 501187.23 3.024121e-50 630957.34 3.024121e-50 794328.23 3.024121e-50 1000000 3.024121e-50 1258930 3.024121e-50 1584890 3.024121e-50 1995260 3.024121e-50 2511890 3.024121e-50 3162280 3.024121e-50 3981070 3.024121e-50 5011870 3.024121e-50 6309570 3.024121e-50 7943280 3.024121e-50 10000000 3.024121e-50 12589250 3.024121e-50 15848930 3.024121e-50 19952620 3.024121e-50 25118860 3.024121e-50 31622780 3.024121e-50 39810720 3.024121e-50 50118720 3.024121e-50 63095730 3.024121e-50 79432820 3.024121e-50 100000000 3.024121e-50 100.00000 1.3483584e-49 125.89254 1.3483584e-49 158.48932 1.3483584e-49 199.52623 1.3483584e-49 251.18864 1.3483584e-49 316.22777 1.3483584e-49 398.10717 1.3483584e-49 501.18723 1.3483584e-49 630.95734 1.3483584e-49 794.32823 1.3483584e-49 1000 1.3483584e-49 1258.93 1.3483584e-49 1584.89 1.3483584e-49 1995.26 1.3483584e-49 2511.89 1.3483584e-49 3162.28 1.3483584e-49 3981.07 1.3483584e-49 5011.87 1.3483584e-49 6309.57 1.3483584e-49 7943.28 1.3483584e-49 10000 1.3483584e-49 12589.25 1.3483584e-49 15848.93 1.3483584e-49 19952.62 1.3483584e-49 25118.86 1.3483584e-49 31622.78 1.3483584e-49 39810.72 1.3483584e-49 50118.72 1.3483584e-49 63095.73 1.3483584e-49 79432.82 1.3483584e-49 100000 1.3483584e-49 125892.54 1.3483584e-49 158489.32 1.3483584e-49 199526.23 1.3483584e-49 251188.64 1.3483584e-49 316227.77 1.3483584e-49 398107.17 1.3483584e-49 501187.23 1.3483584e-49 630957.34 1.3483584e-49 794328.23 1.3483584e-49 1000000 1.3483584e-49 1258930 1.3483584e-49 1584890 1.3483584e-49 1995260 1.3483584e-49 2511890 1.3483584e-49 3162280 1.3483584e-49 3981070 1.3483584e-49 5011870 1.3483584e-49 6309570 1.3483584e-49 7943280 1.3483584e-49 10000000 1.3483584e-49 12589250 1.3483584e-49 15848930 1.3483584e-49 19952620 1.3483584e-49 25118860 1.3483584e-49 31622780 1.3483584e-49 39810720 1.3483584e-49 50118720 1.3483584e-49 63095730 1.3483584e-49 79432820 1.3483584e-49 100000000 1.3483584e-49 100.00000 3.0891364e-49 125.89254 3.0891364e-49 158.48932 3.0891364e-49 199.52623 3.0891364e-49 251.18864 3.0891364e-49 316.22777 3.0891364e-49 398.10717 3.0891364e-49 501.18723 3.0891364e-49 630.95734 3.0891364e-49 794.32823 3.0891364e-49 1000 3.0891364e-49 1258.93 3.0891364e-49 1584.89 3.0891364e-49 1995.26 3.0891364e-49 2511.89 3.0891364e-49 3162.28 3.0891364e-49 3981.07 3.0891364e-49 5011.87 3.0891364e-49 6309.57 3.0891364e-49 7943.28 3.0891364e-49 10000 3.0891364e-49 12589.25 3.0891364e-49 15848.93 3.0891364e-49 19952.62 3.0891364e-49 25118.86 3.0891364e-49 31622.78 3.0891364e-49 39810.72 3.0891364e-49 50118.72 3.0891364e-49 63095.73 3.0891364e-49 79432.82 3.0891364e-49 100000 3.0891364e-49 125892.54 3.0891364e-49 158489.32 3.0891364e-49 199526.23 3.0891364e-49 251188.64 3.0891364e-49 316227.77 3.0891364e-49 398107.17 3.0891364e-49 501187.23 3.0891364e-49 630957.34 3.0891364e-49 794328.23 3.0891364e-49 1000000 3.0891364e-49 1258930 3.0891364e-49 1584890 3.0891364e-49 1995260 3.0891364e-49 2511890 3.0891364e-49 3162280 3.0891364e-49 3981070 3.0891364e-49 5011870 3.0891364e-49 6309570 3.0891364e-49 7943280 3.0891364e-49 10000000 3.0891364e-49 12589250 3.0891364e-49 15848930 3.0891364e-49 19952620 3.0891364e-49 25118860 3.0891364e-49 31622780 3.0891364e-49 39810720 3.0891364e-49 50118720 3.0891364e-49 63095730 3.0891364e-49 79432820 3.0891364e-49 100000000 3.0891364e-49 100.00000 2.5462116e-51 125.89254 2.5462116e-51 158.48932 2.5462116e-51 199.52623 2.5462116e-51 251.18864 2.5462116e-51 316.22777 2.5462116e-51 398.10717 2.5462116e-51 501.18723 2.5462116e-51 630.95734 2.5462116e-51 794.32823 2.5462116e-51 1000 2.5462116e-51 1258.93 2.5462116e-51 1584.89 2.5462116e-51 1995.26 2.5462116e-51 2511.89 2.5462116e-51 3162.28 2.5462116e-51 3981.07 2.5462116e-51 5011.87 2.5462116e-51 6309.57 2.5462116e-51 7943.28 2.5462116e-51 10000 2.5462116e-51 12589.25 2.5462116e-51 15848.93 2.5462116e-51 19952.62 2.5462116e-51 25118.86 2.5462116e-51 31622.78 2.5462116e-51 39810.72 2.5462116e-51 50118.72 2.5462116e-51 63095.73 2.5462116e-51 79432.82 2.5462116e-51 100000 2.5462116e-51 125892.54 2.5462116e-51 158489.32 2.5462116e-51 199526.23 2.5462116e-51 251188.64 2.5462116e-51 316227.77 2.5462116e-51 398107.17 2.5462116e-51 501187.23 2.5462116e-51 630957.34 2.5462116e-51 794328.23 2.5462116e-51 1000000 2.5462116e-51 1258930 2.5462116e-51 1584890 2.5462116e-51 1995260 2.5462116e-51 2511890 2.5462116e-51 3162280 2.5462116e-51 3981070 2.5462116e-51 5011870 2.5462116e-51 6309570 2.5462116e-51 7943280 2.5462116e-51 10000000 2.5462116e-51 12589250 2.5462116e-51 15848930 2.5462116e-51 19952620 2.5462116e-51 25118860 2.5462116e-51 31622780 2.5462116e-51 39810720 2.5462116e-51 50118720 2.5462116e-51 63095730 2.5462116e-51 79432820 2.5462116e-51 100000000 2.5462116e-51 100.00000 4.100625e-50 125.89254 4.100625e-50 158.48932 4.100625e-50 199.52623 4.100625e-50 251.18864 4.100625e-50 316.22777 4.100625e-50 398.10717 4.100625e-50 501.18723 4.100625e-50 630.95734 4.100625e-50 794.32823 4.100625e-50 1000 4.100625e-50 1258.93 4.100625e-50 1584.89 4.100625e-50 1995.26 4.100625e-50 2511.89 4.100625e-50 3162.28 4.100625e-50 3981.07 4.100625e-50 5011.87 4.100625e-50 6309.57 4.100625e-50 7943.28 4.100625e-50 10000 4.100625e-50 12589.25 4.100625e-50 15848.93 4.100625e-50 19952.62 4.100625e-50 25118.86 4.100625e-50 31622.78 4.100625e-50 39810.72 4.100625e-50 50118.72 4.100625e-50 63095.73 4.100625e-50 79432.82 4.100625e-50 100000 4.100625e-50 125892.54 4.100625e-50 158489.32 4.100625e-50 199526.23 4.100625e-50 251188.64 4.100625e-50 316227.77 4.100625e-50 398107.17 4.100625e-50 501187.23 4.100625e-50 630957.34 4.100625e-50 794328.23 4.100625e-50 1000000 4.100625e-50 1258930 4.100625e-50 1584890 4.100625e-50 1995260 4.100625e-50 2511890 4.100625e-50 3162280 4.100625e-50 3981070 4.100625e-50 5011870 4.100625e-50 6309570 4.100625e-50 7943280 4.100625e-50 10000000 4.100625e-50 12589250 4.100625e-50 15848930 4.100625e-50 19952620 4.100625e-50 25118860 4.100625e-50 31622780 4.100625e-50 39810720 4.100625e-50 50118720 4.100625e-50 63095730 4.100625e-50 79432820 4.100625e-50 100000000 4.100625e-50 100.00000 1.4371681e-49 125.89254 1.4371681e-49 158.48932 1.4371681e-49 199.52623 1.4371681e-49 251.18864 1.4371681e-49 316.22777 1.4371681e-49 398.10717 1.4371681e-49 501.18723 1.4371681e-49 630.95734 1.4371681e-49 794.32823 1.4371681e-49 1000 1.4371681e-49 1258.93 1.4371681e-49 1584.89 1.4371681e-49 1995.26 1.4371681e-49 2511.89 1.4371681e-49 3162.28 1.4371681e-49 3981.07 1.4371681e-49 5011.87 1.4371681e-49 6309.57 1.4371681e-49 7943.28 1.4371681e-49 10000 1.4371681e-49 12589.25 1.4371681e-49 15848.93 1.4371681e-49 19952.62 1.4371681e-49 25118.86 1.4371681e-49 31622.78 1.4371681e-49 39810.72 1.4371681e-49 50118.72 1.4371681e-49 63095.73 1.4371681e-49 79432.82 1.4371681e-49 100000 1.4371681e-49 125892.54 1.4371681e-49 158489.32 1.4371681e-49 199526.23 1.4371681e-49 251188.64 1.4371681e-49 316227.77 1.4371681e-49 398107.17 1.4371681e-49 501187.23 1.4371681e-49 630957.34 1.4371681e-49 794328.23 1.4371681e-49 1000000 1.4371681e-49 1258930 1.4371681e-49 1584890 1.4371681e-49 1995260 1.4371681e-49 2511890 1.4371681e-49 3162280 1.4371681e-49 3981070 1.4371681e-49 5011870 1.4371681e-49 6309570 1.4371681e-49 7943280 1.4371681e-49 10000000 1.4371681e-49 12589250 1.4371681e-49 15848930 1.4371681e-49 19952620 1.4371681e-49 25118860 1.4371681e-49 31622780 1.4371681e-49 39810720 1.4371681e-49 50118720 1.4371681e-49 63095730 1.4371681e-49 79432820 1.4371681e-49 100000000 1.4371681e-49 100.00000 3.1292836e-49 125.89254 3.1292836e-49 158.48932 3.1292836e-49 199.52623 3.1292836e-49 251.18864 3.1292836e-49 316.22777 3.1292836e-49 398.10717 3.1292836e-49 501.18723 3.1292836e-49 630.95734 3.1292836e-49 794.32823 3.1292836e-49 1000 3.1292836e-49 1258.93 3.1292836e-49 1584.89 3.1292836e-49 1995.26 3.1292836e-49 2511.89 3.1292836e-49 3162.28 3.1292836e-49 3981.07 3.1292836e-49 5011.87 3.1292836e-49 6309.57 3.1292836e-49 7943.28 3.1292836e-49 10000 3.1292836e-49 12589.25 3.1292836e-49 15848.93 3.1292836e-49 19952.62 3.1292836e-49 25118.86 3.1292836e-49 31622.78 3.1292836e-49 39810.72 3.1292836e-49 50118.72 3.1292836e-49 63095.73 3.1292836e-49 79432.82 3.1292836e-49 100000 3.1292836e-49 125892.54 3.1292836e-49 158489.32 3.1292836e-49 199526.23 3.1292836e-49 251188.64 3.1292836e-49 316227.77 3.1292836e-49 398107.17 3.1292836e-49 501187.23 3.1292836e-49 630957.34 3.1292836e-49 794328.23 3.1292836e-49 1000000 3.1292836e-49 1258930 3.1292836e-49 1584890 3.1292836e-49 1995260 3.1292836e-49 2511890 3.1292836e-49 3162280 3.1292836e-49 3981070 3.1292836e-49 5011870 3.1292836e-49 6309570 3.1292836e-49 7943280 3.1292836e-49 10000000 3.1292836e-49 12589250 3.1292836e-49 15848930 3.1292836e-49 19952620 3.1292836e-49 25118860 3.1292836e-49 31622780 3.1292836e-49 39810720 3.1292836e-49 50118720 3.1292836e-49 63095730 3.1292836e-49 79432820 3.1292836e-49 100000000 3.1292836e-49 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_ig_sw.standard0000644000175000017500000000573314163340332024652 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.001062 -3172.8 3172.8 0.001062 -1.10000 -0.0009910603 -2908.3 2908.3 0.0009910603 -1.00000 -0.000908915 -2643.8 2643.8 0.000908915 -0.9 -0.0008142336 -2379.2 2379.2 0.0008142336 -0.8 -0.0007058736 -2114.7 2114.7 0.0007058736 -0.7 -0.0005832105 -1850.2 1850.2 0.0005832105 -0.6 -0.0004468956 -1585.8 1585.8 0.0004468956 -0.5 -0.0003006543 -1321.3 1321.3 0.0003006543 -0.4 -0.0001561858 -1056.9 1056.9 0.0001561858 -0.3 -4.5472e-05 -792.5445 792.5445 4.5472e-05 -0.2 -5.1912e-06 -528.3094 528.3094 5.1912e-06 -1.20000 -0.0107158 -3172.3 3172.3 0.0107158 -1.10000 -0.0090883 -2907.8 2907.8 0.0090883 -1.00000 -0.0075308 -2643.4 2643.4 0.0075308 -0.9 -0.0060534 -2378.9 2378.9 0.0060534 -0.8 -0.0046698 -2114.5 2114.5 0.0046698 -0.7 -0.0034028 -1850 1850 0.0034028 -0.6 -0.0022857 -1585.6 1585.6 0.0022857 -0.5 -0.0013597 -1321.2 1321.2 0.0013597 -0.4 -0.000666818 -1056.9 1056.9 0.000666818 -0.3 -0.0002341989 -792.5833 792.5833 0.0002341989 -0.2 -4.5301e-05 -528.3339 528.3339 4.5301e-05 -1.20000 -0.0017218 -2358.4 2358.4 0.0017218 -1.10000 -0.0015999 -2161.7 2161.7 0.0015999 -1.00000 -0.001459 -1965.1 1965.1 0.001459 -0.9 -0.0012971 -1768.4 1768.4 0.0012971 -0.8 -0.0011119 -1571.8 1571.8 0.0011119 -0.7 -0.0009024686 -1375.2 1375.2 0.0009024686 -0.6 -0.0006694417 -1178.5 1178.5 0.0006694417 -0.5 -0.000419314 -981.9282 981.9282 0.000419314 -0.4 -0.0001768185 -785.3748 785.3748 0.0001768185 -0.3 -2.49496e-05 -588.9222 588.9222 2.49496e-05 -0.2 -8.354817e-07 -392.5743 392.5743 8.354817e-07 -1.20000 -0.0172464 -2357.9 2357.9 0.0172464 -1.10000 -0.0145698 -2161.3 2161.3 0.0145698 -1.00000 -0.0119979 -1964.7 1964.7 0.0119979 -0.9 -0.0095482 -1768.1 1768.1 0.0095482 -0.8 -0.0072505 -1571.5 1571.5 0.0072505 -0.7 -0.0051536 -1375 1375 0.0051536 -0.6 -0.0033246 -1178.4 1178.4 0.0033246 -0.5 -0.0018426 -981.8992 981.8992 0.0018426 -0.4 -0.0007853998 -785.4090 785.4090 0.0007853998 -0.3 -0.0001978219 -588.9669 588.9669 0.0001978219 -0.2 -1.62778e-05 -392.5946 392.5946 1.62778e-05 -1.20000 -0.0005950681 -4473.7 4473.7 0.0005950681 -1.10000 -0.0005581469 -4100.8 4100.8 0.0005581469 -1.00000 -0.0005152332 -3727.8 3727.8 0.0005152332 -0.9 -0.0004656531 -3354.9 3354.9 0.0004656531 -0.8 -0.0004088517 -2982 2982 0.0004088517 -0.7 -0.0003445903 -2609.1 2609.1 0.0003445903 -0.6 -0.0002733328 -2236.2 2236.2 0.0002733328 -0.5 -0.0001970187 -1863.4 1863.4 0.0001970187 -0.4 -0.0001206541 -1490.6 1490.6 0.0001206541 -0.3 -5.51177e-05 -1117.8 1117.8 5.51177e-05 -0.2 -1.57699e-05 -745.1411 745.1411 1.57699e-05 -1.20000 -0.0060627 -4473.2 4473.2 0.0060627 -1.10000 -0.0051637 -4100.4 4100.4 0.0051637 -1.00000 -0.0043053 -3727.5 3727.5 0.0043053 -0.9 -0.0034955 -3354.6 3354.6 0.0034955 -0.8 -0.0027414 -2981.8 2981.8 0.0027414 -0.7 -0.0020523 -2608.9 2608.9 0.0020523 -0.6 -0.0014409 -2236.1 2236.1 0.0014409 -0.5 -0.0009237135 -1863.3 1863.3 0.0009237135 -0.4 -0.000518576 -1490.6 1490.6 0.000518576 -0.3 -0.0002383943 -1117.8 1117.8 0.0002383943 -0.2 -8.13098e-05 -745.1661 745.1661 8.13098e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_core_st.standard0000644000175000017500000001730614163340332025223 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 9.9319e-05 5.5020831068887e-16 2.71773205279725e-16 1.36763202656892e-16 -1 7.80828e-05 5.45206210591695e-16 2.6021840505525e-16 1.40641902732243e-16 -0.8 5.97328e-05 5.40390310498136e-16 2.47634904810791e-16 1.45513502826884e-16 -0.6 4.43065e-05 5.36411810420846e-16 2.34253004550822e-16 1.51807802949163e-16 -0.4 3.19241e-05 5.3374251036899e-16 2.20541904284457e-16 1.59553903099646e-16 -0.2 2.34406e-05 5.29912010294575e-16 2.08101204042772e-16 1.64759803200781e-16 -5.55111512312578e-17 2.118e-20 5.43987710568023e-16 1.92784003745205e-16 1.92784003745205e-16 0.2 -0.0002284197 7.46544914503092e-16 1.83278103560535e-16 4.28161708317877e-16 -1.2 0.0004281825 6.91602513435728e-16 4.28680608327957e-16 1.40181102723291e-16 -1 0.0003858533 6.99638313591839e-16 4.31360708380023e-16 1.44734402811748e-16 -0.8 0.0003460287 7.09218813777959e-16 4.34001808431332e-16 1.50832002930206e-16 -0.6 0.0003103491 7.20162813990568e-16 4.36642308482629e-16 1.58252203074358e-16 -0.4 0.0002844778 7.28839614159132e-16 4.39498008538106e-16 1.63164703169793e-16 -0.2 0.0002468922 7.62475914812582e-16 4.37551608500294e-16 2.00470803894537e-16 -5.55111512312578e-17 5.554e-20 8.82011717134799e-16 3.83674107453618e-16 3.83674107453618e-16 0.2 -0.0002722806 8.96988817425758e-16 3.45811706718067e-16 4.38191808512731e-16 -1.2 0.0006568435 7.25355014091437e-16 4.58260408902603e-16 1.51741502947875e-16 -1 0.000607586 7.3707861431919e-16 4.62834008991454e-16 1.58419203077602e-16 -0.8 0.0005669838 7.49819114566699e-16 4.67563209083328e-16 1.6594730322385e-16 -0.6 0.0005431736 7.59770314760021e-16 4.72571409180622e-16 1.70430503310945e-16 -0.4 0.00049986 7.92965715404906e-16 4.75286809233374e-16 2.02321103930482e-16 -0.2 0.0002602958 9.03509617552437e-16 4.34716008445207e-16 3.60740507008088e-16 -5.55111512312578e-17 5.886e-20 9.44561218349945e-16 4.19664008152792e-16 4.19664008152792e-16 0.2 -0.0002023785 9.40333518267813e-16 4.19040708140683e-16 4.16685208094923e-16 -1.2 0.0007606469 7.40057714377065e-16 4.63314209000783e-16 1.66795203240322e-16 -1 0.0007261125 7.52557914619906e-16 4.68150309094733e-16 1.74138103382972e-16 -0.8 0.0007106314 7.62406514811234e-16 4.73281109194409e-16 1.78595903469574e-16 -0.6 0.0006570161 7.9781121549904e-16 4.76671609260276e-16 2.11853904115675e-16 -0.4 0.0004365522 8.85805217208495e-16 4.52413608789017e-16 3.28494606381649e-16 -0.2 0.0001907978 9.39546918252532e-16 4.12840608020234e-16 4.25021808256878e-16 -5.55111512312578e-17 1.638e-19 9.56712518586008e-16 4.28193408318493e-16 4.28193408318493e-16 0.2 -0.0001396718 9.48623318428859e-16 4.51547308772188e-16 3.97253707717428e-16 -1.2 9.22725e-05 5.17297810049519e-16 2.34779704561054e-16 1.38346902687659e-16 -1 6.46444e-05 5.06235609834615e-16 2.1627480420156e-16 1.42622602770722e-16 -0.8 4.3012e-05 4.96402709643591e-16 1.97894903844495e-16 1.47842002872119e-16 -0.6 2.70471e-05 4.89164609502977e-16 1.80708903510623e-16 1.54389002999308e-16 -0.4 1.60367e-05 4.85522809432228e-16 1.65813203221245e-16 1.62264703152309e-16 -0.2 9.1935e-06 4.83107409385304e-16 1.55055403012254e-16 1.67358603251267e-16 -5.55111512312578e-17 1.001e-20 4.83962009401906e-16 1.60220503112596e-16 1.60220503112596e-16 0.2 -0.0003311201 7.41968514414186e-16 1.64033203186665e-16 4.4082930856397e-16 -1.2 0.0006745504 7.02935913655902e-16 4.40145808550691e-16 1.38983002700016e-16 -1 0.0006043806 7.10966713811916e-16 4.42892508604051e-16 1.4350630278789e-16 -0.8 0.0005378536 7.20503313997183e-16 4.45565408655977e-16 1.49569302905676e-16 -0.6 0.0004757819 7.31367314208237e-16 4.48192408707012e-16 1.56962403049301e-16 -0.4 0.0004226002 7.39792014371903e-16 4.50976008761089e-16 1.61716903141666e-16 -0.2 0.0003812054 7.54981014666979e-16 4.54054008820885e-16 1.73773503375889e-16 -5.55111512312578e-17 9.498e-20 8.98011817445632e-16 3.90631207588773e-16 3.90631207588773e-16 0.2 -0.0004687482 9.04116517564227e-16 3.36066906528755e-16 4.52034808781658e-16 -1.2 0.0010954 7.33631214252218e-16 4.65854609050135e-16 1.50649902926668e-16 -1 0.0010083 7.45433314481497e-16 4.70556009141469e-16 1.57286003055588e-16 -0.8 0.0009299103 7.58265114730779e-16 4.75415009235864e-16 1.64782503201222e-16 -0.6 0.0008723034 7.68053214920932e-16 4.80548809335598e-16 1.68960803282393e-16 -0.4 0.0008213541 7.90586515358686e-16 4.85978809441087e-16 1.86542103623944e-16 -0.2 0.0004469825 9.12865217734188e-16 4.46617408676415e-16 3.55031306897176e-16 -5.55111512312578e-17 1.509e-19 9.58269318616251e-16 4.24937008255231e-16 4.24937008255231e-16 0.2 -0.0003485651 9.50423018463822e-16 4.19888208157148e-16 4.22562208209095e-16 -1.2 0.0012803 7.45986914492252e-16 4.68221309096113e-16 1.65774003220484e-16 -1 0.0012057 7.58538714736095e-16 4.73126509191406e-16 1.73089703362605e-16 -0.8 0.0011613 7.68014114920173e-16 4.78344709292779e-16 1.77045303439451e-16 -0.6 0.00109 7.97819815499207e-16 4.83697509396768e-16 2.02192603927986e-16 -0.4 0.0007476398 8.90117617292272e-16 4.6194380897416e-16 3.19959006215828e-16 -0.2 0.000327348 9.49520718446293e-16 4.17860108117748e-16 4.26458008284779e-16 -5.55111512312578e-17 1.056e-19 9.66542018776965e-16 4.31338108379584e-16 4.31338108379584e-16 0.2 -0.0002417511 9.56838318588451e-16 4.53367508807549e-16 4.00072707772193e-16 -1.2 8.2896e-05 5.66114410997877e-16 2.89427605622696e-16 1.36267102647254e-16 -1 6.95681e-05 5.66193610999416e-16 2.8364770551041e-16 1.39851102716881e-16 -0.8 5.76133e-05 5.66773111010674e-16 2.77233805385808e-16 1.44406502805378e-16 -0.6 4.72521e-05 5.68325211040826e-16 2.70207705249312e-16 1.50375802921343e-16 -0.4 3.92211e-05 5.7106851109412e-16 2.62732505104092e-16 1.57816003065884e-16 -0.2 3.34599e-05 5.73619411143676e-16 2.55677204967029e-16 1.64715903199928e-16 -5.55111512312578e-17 1.665e-20 6.14617511940144e-16 2.31919804505495e-16 2.31919804505495e-16 0.2 -0.000133333 7.56592814698292e-16 2.19270704259761e-16 4.05951307886396e-16 -1.2 0.000241811 6.75111713115363e-16 4.1193700800268e-16 1.41644702751725e-16 -1 0.0002195935 6.83182913272161e-16 4.14550408053451e-16 1.46238502840968e-16 -0.8 0.0001997853 6.92844513459857e-16 4.17160808104163e-16 1.52387102960417e-16 -0.6 0.0001846702 7.03927713675169e-16 4.19814908155724e-16 1.59878003105942e-16 -0.4 0.0001752985 7.13873913868394e-16 4.22576308209369e-16 1.66232703229395e-16 -0.2 0.0001372509 7.6855241493063e-16 4.12554108014669e-16 2.35521804575471e-16 -5.55111512312578e-17 9.105e-20 8.57971516667771e-16 3.72974207245752e-16 3.72974207245752e-16 0.2 -0.0001408646 8.82149917137483e-16 3.51441806827443e-16 4.21741008193142e-16 -1.2 0.0003508025 7.12520313842097e-16 4.46492908673996e-16 1.53095002974169e-16 -1 0.0003290106 7.24155014068124e-16 4.5090090875963e-16 1.59834003105087e-16 -0.8 0.0003147392 7.36821414314194e-16 4.55462708848252e-16 1.67445303252952e-16 -0.6 0.0003076987 7.47854014528524e-16 4.60204108940363e-16 1.73382403368292e-16 -0.4 0.0002680454 7.93926615423574e-16 4.57750608892699e-16 2.24947204370038e-16 -0.2 0.000135351 8.86557117223102e-16 4.20181808162852e-16 3.62719407046532e-16 -5.55111512312578e-17 4.267e-20 9.23662617943949e-16 4.11440507993035e-16 4.11440507993035e-16 0.2 -0.0001048885 9.24449017959226e-16 4.15581708073486e-16 4.09123307948019e-16 -1.2 0.0004072131 7.30664714194588e-16 4.55605308851022e-16 1.68070403265096e-16 -1 0.0003976303 7.43150214437143e-16 4.60352308943242e-16 1.75503903409506e-16 -0.8 0.000394006 7.54275114653266e-16 4.65274209038859e-16 1.81575703527462e-16 -0.6 0.0003518754 7.96412515471867e-16 4.65366109040645e-16 2.25836804387321e-16 -0.4 0.0002278121 8.75355517005489e-16 4.40589008559301e-16 3.3469020650201e-16 -0.2 9.95644e-05 9.23816517946939e-16 4.06314107893444e-16 4.20976608178292e-16 -5.55111512312578e-17 0. 9.41435318289218e-16 4.23158808220686e-16 4.23158808220686e-16 0.2 -7.20124e-05 9.35865518181014e-16 4.47679508697048e-16 3.93689107648179e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_core_st.standard0000644000175000017500000000711414163340332025543 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258.93 4.59303216537423e-15 3.20280786522017e-15 5.48426090908113e-16 1584.89 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995.26 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511.89 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162.28 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981.07 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011.87 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309.57 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943.28 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589.25 4.59305419989505e-15 3.20282058562792e-15 5.48429533273533e-16 15848.93 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952.62 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118.86 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622.78 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810.72 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118.72 4.59312826999807e-15 3.20286862079649e-15 5.48429486692448e-16 63095.73 4.59310377859218e-15 3.20273703535532e-15 5.48429556485134e-16 79432.82 4.59314917365216e-15 3.20282191331486e-15 5.48429304591349e-16 100000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 125892.54 4.59301102152014e-15 3.20275635735849e-15 5.48429359020306e-16 158489.32 4.59300903501707e-15 3.20279483499135e-15 5.48429359492188e-16 199526.23 4.59303058959939e-15 3.20278154657951e-15 5.48429357426682e-16 251188.64 4.59308230645884e-15 3.20282128138925e-15 5.48429398703038e-16 316227.77 4.59304383880213e-15 3.20280003035121e-15 5.48437417394552e-16 398107.17 4.5930625695156e-15 3.20283060106835e-15 5.48417027840674e-16 501187.23 4.59306448389069e-15 3.2028049179071e-15 5.48418974521165e-16 630957.34 4.5930530386915e-15 3.20281250539176e-15 5.48428008255517e-16 794328.23 4.59304881807746e-15 3.20282179235144e-15 5.48436897718134e-16 1000000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258930 4.59303216537423e-15 3.20280786522017e-15 5.48426090908114e-16 1584890 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995260 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511890 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162280 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981070 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011870 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309570 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943280 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589250 4.59305419989505e-15 3.20282058562791e-15 5.48429533273533e-16 15848930 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952620 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118860 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622780 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810720 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118720 4.59312826999806e-15 3.20286862079649e-15 5.48429486692448e-16 63095730 4.59310377859218e-15 3.20273703535532e-15 5.4842930424153e-16 79432820 4.59314917365216e-15 3.20282191331486e-15 5.48429504955561e-16 100000000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_core_lt.standard0000644000175000017500000000453514163340332025332 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -6.6519e-06 0. 0. 6.6519e-06 -1.10000 -6.4608e-06 0. 0. 6.4608e-06 -1.00000 -6.2327e-06 0. 0. 6.2327e-06 -0.9 -5.9613e-06 0. 0. 5.9613e-06 -0.8 -5.6396e-06 0. 0. 5.6396e-06 -0.7 -5.2601e-06 0. 0. 5.2601e-06 -0.6 -4.8155e-06 0. 0. 4.8155e-06 -0.5 -4.2996e-06 0. 0. 4.2996e-06 -0.4 -3.7103e-06 0. 0. 3.7103e-06 -0.3 -3.0524e-06 0. 0. 3.0524e-06 -0.2 -2.3455e-06 0. 0. 2.3455e-06 -1.20000 -7.37714e-05 0. 0. 7.37714e-05 -1.10000 -6.53128e-05 0. 0. 6.53128e-05 -1.00000 -5.70189e-05 0. 0. 5.70189e-05 -0.9 -4.90318e-05 0. 0. 4.90318e-05 -0.8 -4.1401e-05 0. 0. 4.1401e-05 -0.7 -3.41621e-05 0. 0. 3.41621e-05 -0.6 -2.73674e-05 0. 0. 2.73674e-05 -0.5 -2.11051e-05 0. 0. 2.11051e-05 -0.4 -1.55054e-05 0. 0. 1.55054e-05 -0.3 -1.07295e-05 0. 0. 1.07295e-05 -0.2 -6.9342e-06 0. 0. 6.9342e-06 -1.20000 -1.07183e-05 0. 0. 1.07183e-05 -1.10000 -1.03536e-05 0. 0. 1.03536e-05 -1.00000 -9.9208e-06 0. 0. 9.9208e-06 -0.9 -9.4084e-06 0. 0. 9.4084e-06 -0.8 -8.8033e-06 0. 0. 8.8033e-06 -0.7 -8.0913e-06 0. 0. 8.0913e-06 -0.6 -7.258e-06 0. 0. 7.258e-06 -0.5 -6.2917e-06 0. 0. 6.2917e-06 -0.4 -5.1881e-06 0. 0. 5.1881e-06 -0.3 -3.962e-06 0. 0. 3.962e-06 -0.2 -2.6712e-06 0. 0. 2.6712e-06 -1.20000 -0.0001159458 0. 0. 0.0001159458 -1.10000 -0.0001019836 0. 0. 0.0001019836 -1.00000 -8.83841e-05 0. 0. 8.83841e-05 -0.9 -7.52666e-05 0. 0. 7.52666e-05 -0.8 -6.26651e-05 0. 0. 6.26651e-05 -0.7 -5.06426e-05 0. 0. 5.06426e-05 -0.6 -3.93358e-05 0. 0. 3.93358e-05 -0.5 -2.89707e-05 0. 0. 2.89707e-05 -0.4 -1.98496e-05 0. 0. 1.98496e-05 -0.3 -1.23094e-05 0. 0. 1.23094e-05 -0.2 -6.6485e-06 0. 0. 6.6485e-06 -1.20000 -3.7661e-06 0. 0. 3.7661e-06 -1.10000 -3.6821e-06 0. 0. 3.6821e-06 -1.00000 -3.5801e-06 0. 0. 3.5801e-06 -0.9 -3.4569e-06 0. 0. 3.4569e-06 -0.8 -3.3089e-06 0. 0. 3.3089e-06 -0.7 -3.1324e-06 0. 0. 3.1324e-06 -0.6 -2.924e-06 0. 0. 2.924e-06 -0.5 -2.681e-06 0. 0. 2.681e-06 -0.4 -2.4032e-06 0. 0. 2.4032e-06 -0.3 -2.0946e-06 0. 0. 2.0946e-06 -0.2 -1.7655e-06 0. 0. 1.7655e-06 -1.20000 -4.33474e-05 0. 0. 4.33474e-05 -1.10000 -3.88133e-05 0. 0. 3.88133e-05 -1.00000 -3.42734e-05 0. 0. 3.42734e-05 -0.9 -2.98611e-05 0. 0. 2.98611e-05 -0.8 -2.56439e-05 0. 0. 2.56439e-05 -0.7 -2.16626e-05 0. 0. 2.16626e-05 -0.6 -1.79533e-05 0. 0. 1.79533e-05 -0.5 -1.45554e-05 0. 0. 1.45554e-05 -0.4 -1.15156e-05 0. 0. 1.15156e-05 -0.3 -8.8693e-06 0. 0. 8.8693e-06 -0.2 -6.5938e-06 0. 0. 6.5938e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_ig_lw.standard0000644000175000017500000001657314163340332025006 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -5.08943e-05 -1320.5 1320.5 5.08943e-05 -1.10000 -4.84768e-05 -1320.5 1320.5 4.84768e-05 -1.00000 -4.61167e-05 -1320.5 1320.5 4.61167e-05 -0.9 -4.38166e-05 -1320.5 1320.5 4.38166e-05 -0.8 -4.15829e-05 -1320.5 1320.5 4.15829e-05 -0.7 -3.94306e-05 -1320.5 1320.5 3.94306e-05 -0.6 -3.73966e-05 -1320.5 1320.5 3.73966e-05 -0.5 -3.55719e-05 -1320.5 1320.5 3.55719e-05 -0.4 -3.41467e-05 -1320.5 1320.5 3.41467e-05 -0.3 -3.3307e-05 -1320.5 1320.5 3.3307e-05 -0.2 -3.26579e-05 -1320.5 1320.5 3.26579e-05 -0.1 -2.73517e-05 -1320.5 1320.5 2.73517e-05 2.220446e-16 9.958e-20 -1320.7 1320.7 -9.958e-20 -1.20000 -0.0002574209 -7926.1 7926.1 0.0002574209 -1.10000 -0.0002477352 -7926.1 7926.1 0.0002477352 -1.00000 -0.0002382611 -7926.1 7926.1 0.0002382611 -0.9 -0.0002290947 -7926.1 7926.1 0.0002290947 -0.8 -0.0002204199 -7926.1 7926.1 0.0002204199 -0.7 -0.0002125764 -7926.1 7926.1 0.0002125764 -0.6 -0.0002061097 -7926.1 7926.1 0.0002061097 -0.5 -0.0002015993 -7926.1 7926.1 0.0002015993 -0.4 -0.0001987704 -7926.1 7926.1 0.0001987704 -0.3 -0.0001917928 -7926.3 7926.3 0.0001917928 -0.2 -0.0001625841 -7926.9 7926.9 0.0001625841 -0.1 -9.88213e-05 -7927.5 7927.5 9.88213e-05 2.220446e-16 4.026e-19 -7928 7928 -4.026e-19 -1.20000 -0.0005849785 -14534.9 14534.9 0.0005849785 -1.10000 -0.000564921 -14534.9 14534.9 0.000564921 -1.00000 -0.0005461409 -14534.9 14534.9 0.0005461409 -0.9 -0.0005292773 -14534.9 14534.9 0.0005292773 -0.8 -0.0005151492 -14534.9 14534.9 0.0005151492 -0.7 -0.0005044672 -14534.9 14534.9 0.0005044672 -0.6 -0.0004966665 -14535 14535 0.0004966665 -0.5 -0.0004847835 -14535.3 14535.3 0.0004847835 -0.4 -0.0004524088 -14535.9 14535.9 0.0004524088 -0.3 -0.0003878383 -14536.7 14536.7 0.0003878383 -0.2 -0.0002889411 -14537.4 14537.4 0.0002889411 -0.1 -0.0001583131 -14538 14538 0.0001583131 2.220446e-16 5.702e-19 -14538.5 14538.5 -5.702e-19 -1.20000 -0.0009729885 -21145.3 21145.3 0.0009729885 -1.10000 -0.0009457777 -21145.3 21145.3 0.0009457777 -1.00000 -0.0009226965 -21145.3 21145.3 0.0009226965 -0.9 -0.0009043084 -21145.3 21145.3 0.0009043084 -0.8 -0.0008891647 -21145.4 21145.4 0.0008891647 -0.7 -0.0008692104 -21145.9 21145.9 0.0008692104 -0.6 -0.0008309083 -21146.5 21146.5 0.0008309083 -0.5 -0.0007643581 -21147.2 21147.2 0.0007643581 -0.4 -0.0006660886 -21148 21148 0.0006660886 -0.3 -0.0005371784 -21148.6 21148.6 0.0005371784 -0.2 -0.0003807868 -21149.3 21149.3 0.0003807868 -0.1 -0.0002005327 -21149.9 21149.9 0.0002005327 2.220446e-16 6.856e-19 -21150.3 21150.3 -6.856e-19 -1.20000 -4.66507e-05 -981.0682 981.0682 4.66507e-05 -1.10000 -4.42157e-05 -981.0679 981.0679 4.42157e-05 -1.00000 -4.18459e-05 -981.0676 981.0676 4.18459e-05 -0.9 -3.9541e-05 -981.0673 981.0673 3.9541e-05 -0.8 -3.73011e-05 -981.0670 981.0670 3.73011e-05 -0.7 -3.51274e-05 -981.0667 981.0667 3.51274e-05 -0.6 -3.30242e-05 -981.0663 981.0663 3.30242e-05 -0.5 -3.10072e-05 -981.0658 981.0658 3.10072e-05 -0.4 -2.91342e-05 -981.0653 981.0653 2.91342e-05 -0.3 -2.76016e-05 -981.0645 981.0645 2.76016e-05 -0.2 -2.67049e-05 -981.0636 981.0636 2.67049e-05 -0.1 -2.46992e-05 -981.0801 981.0801 2.46992e-05 2.220446e-16 1.031e-19 -981.1983 981.1983 -1.031e-19 -1.20000 -0.0003564752 -5889.8 5889.8 0.0003564752 -1.10000 -0.0003430156 -5889.8 5889.8 0.0003430156 -1.00000 -0.0003297392 -5889.8 5889.8 0.0003297392 -0.9 -0.000316685 -5889.8 5889.8 0.000316685 -0.8 -0.0003039374 -5889.8 5889.8 0.0003039374 -0.7 -0.0002916843 -5889.8 5889.8 0.0002916843 -0.6 -0.0002803491 -5889.8 5889.8 0.0002803491 -0.5 -0.0002708001 -5889.8 5889.8 0.0002708001 -0.4 -0.0002642035 -5889.8 5889.8 0.0002642035 -0.3 -0.0002584884 -5890 5890 0.0002584884 -0.2 -0.0002291597 -5890.5 5890.5 0.0002291597 -0.1 -0.0001444404 -5891.1 5891.1 0.0001444404 2.220446e-16 3.639e-19 -5891.7 5891.7 -3.639e-19 -1.20000 -0.0008956207 -10802 10802 0.0008956207 -1.10000 -0.000863712 -10802 10802 0.000863712 -1.00000 -0.0008328175 -10802 10802 0.0008328175 -0.9 -0.0008035436 -10802 10802 0.0008035436 -0.8 -0.0007769113 -10802 10802 0.0007769113 -0.7 -0.0007544192 -10802 10802 0.0007544192 -0.6 -0.0007373808 -10802 10802 0.0007373808 -0.5 -0.0007214943 -10802.3 10802.3 0.0007214943 -0.4 -0.0006829879 -10802.9 10802.9 0.0006829879 -0.3 -0.0005948575 -10803.6 10803.6 0.0005948575 -0.2 -0.0004486296 -10804.4 10804.4 0.0004486296 -0.1 -0.0002479776 -10805.1 10805.1 0.0002479776 2.220446e-16 4.372e-19 -10805.7 10805.7 -4.372e-19 -1.20000 -0.0015442 -15715.8 15715.8 0.0015442 -1.10000 -0.0014948 -15715.8 15715.8 0.0014948 -1.00000 -0.0014503 -15715.8 15715.8 0.0014503 -0.9 -0.0014124 -15715.8 15715.8 0.0014124 -0.8 -0.0013814 -15715.9 15715.9 0.0013814 -0.7 -0.0013495 -15716.3 15716.3 0.0013495 -0.6 -0.0012962 -15716.9 15716.9 0.0012962 -0.5 -0.0012011 -15717.6 15717.6 0.0012011 -0.4 -0.0010542 -15718.4 15718.4 0.0010542 -0.3 -0.0008551274 -15719.1 15719.1 0.0008551274 -0.2 -0.0006088782 -15719.8 15719.8 0.0006088782 -0.1 -0.0003217827 -15720.4 15720.4 0.0003217827 2.220446e-16 8.084e-19 -15720.9 15720.9 -8.084e-19 -1.20000 -4.92795e-05 -1862.6 1862.6 4.92795e-05 -1.10000 -4.71055e-05 -1862.6 1862.6 4.71055e-05 -1.00000 -4.5001e-05 -1862.6 1862.6 4.5001e-05 -0.9 -4.29881e-05 -1862.6 1862.6 4.29881e-05 -0.8 -4.11078e-05 -1862.6 1862.6 4.11078e-05 -0.7 -3.94324e-05 -1862.6 1862.6 3.94324e-05 -0.6 -3.80713e-05 -1862.6 1862.6 3.80713e-05 -0.5 -3.71309e-05 -1862.6 1862.6 3.71309e-05 -0.4 -3.66004e-05 -1862.6 1862.6 3.66004e-05 -0.3 -3.61826e-05 -1862.6 1862.6 3.61826e-05 -0.2 -3.43334e-05 -1862.7 1862.7 3.43334e-05 -0.1 -2.49497e-05 -1862.7 1862.7 2.49497e-05 2.220446e-16 7.774e-20 -1862.9 1862.9 -7.774e-20 -1.20000 -0.0001719549 -11178.7 11178.7 0.0001719549 -1.10000 -0.0001657755 -11178.7 11178.7 0.0001657755 -1.00000 -0.0001599801 -11178.7 11178.7 0.0001599801 -0.9 -0.0001547516 -11178.7 11178.7 0.0001547516 -0.8 -0.0001503342 -11178.7 11178.7 0.0001503342 -0.7 -0.0001469749 -11178.7 11178.7 0.0001469749 -0.6 -0.0001447696 -11178.7 11178.7 0.0001447696 -0.5 -0.000143388 -11178.7 11178.7 0.000143388 -0.4 -0.0001409949 -11178.8 11178.8 0.0001409949 -0.3 -0.0001312848 -11179.2 11179.2 0.0001312848 -0.2 -0.0001061993 -11179.7 11179.7 0.0001061993 -0.1 -6.23138e-05 -11180.2 11180.2 6.23138e-05 2.220446e-16 9.087e-20 -11180.6 11180.6 -9.087e-20 -1.20000 -0.0003505393 -20497.7 20497.7 0.0003505393 -1.10000 -0.0003403898 -20497.7 20497.7 0.0003403898 -1.00000 -0.000331694 -20497.7 20497.7 0.000331694 -0.9 -0.0003247687 -20497.7 20497.7 0.0003247687 -0.8 -0.0003197439 -20497.7 20497.7 0.0003197439 -0.7 -0.0003162324 -20497.8 20497.8 0.0003162324 -0.6 -0.000312077 -20497.9 20497.9 0.000312077 -0.5 -0.0003009892 -20498.4 20498.4 0.0003009892 -0.4 -0.0002755086 -20499 20499 0.0002755086 -0.3 -0.0002320877 -20499.6 20499.6 0.0002320877 -0.2 -0.000170618 -20500.3 20500.3 0.000170618 -0.1 -9.25625e-05 -20500.9 20500.9 9.25625e-05 2.220446e-16 1.601e-19 -20501.3 20501.3 -1.601e-19 -1.20000 -0.0005620097 -29818.3 29818.3 0.0005620097 -1.10000 -0.0005509073 -29818.3 29818.3 0.0005509073 -1.00000 -0.000542335 -29818.3 29818.3 0.000542335 -0.9 -0.0005357461 -29818.4 29818.4 0.0005357461 -0.8 -0.0005285719 -29818.6 29818.6 0.0005285719 -0.7 -0.0005147943 -29819.1 29819.1 0.0005147943 -0.6 -0.0004880001 -29819.7 29819.7 0.0004880001 -0.5 -0.0004447479 -29820.4 29820.4 0.0004447479 -0.4 -0.0003844098 -29821 29821 0.0003844098 -0.3 -0.0003079947 -29821.7 29821.7 0.0003079947 -0.2 -0.000217208 -29822.3 29822.3 0.000217208 -0.1 -0.0001139156 -29822.8 29822.8 0.0001139156 2.220446e-16 9.343e-20 -29823.2 29823.2 -9.343e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_ig_st.standard0000644000175000017500000000634514163340332025040 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.73910013092017e-15 2.95410005738916e-15 2.95410005738916e-15 -0.8 0. 6.84990013307268e-15 2.92980005691708e-15 2.92980005691708e-15 -0.4 0. 6.74490013103285e-15 2.7256000529501e-15 2.7256000529501e-15 1.11022302462516e-16 0. 6.17860012003136e-15 1.43850002794567e-15 1.43850002794567e-15 0.4 0. 6.73390013081915e-15 -2.86651005568755e-16 -2.86651005568755e-16 0.8 0. 7.41350014402171e-15 -3.73244007250993e-16 -3.73244007250993e-16 1.2 0. 7.67110014902609e-15 -3.29673206404545e-16 -3.29673206404545e-16 -1.2 8.44558e-05 4.91780009553786e-15 3.19810006212933e-15 7.36619914310279e-16 -0.8 7.44142e-05 4.88490009489872e-15 3.22890006272768e-15 4.76710109261024e-16 -0.4 5.21598e-05 4.88820009496283e-15 2.91280005658682e-15 3.39311806591794e-16 1.11022302462516e-16 1.42097e-05 4.99710009707842e-15 9.71759518878325e-16 1.92309003735978e-16 0.4 1.0353e-06 6.23810012118727e-15 -7.00211213602969e-16 2.6469000514212e-17 0.8 1.305834e-07 6.94980013501343e-15 -4.8464370941515e-16 -1.6055480311909e-16 1.2 3.34819e-08 7.2062001399945e-15 -2.58550305022844e-16 -3.51871006835781e-16 -1.2 0. 6.8064001322276e-15 2.96970005769222e-15 2.96970005769222e-15 -0.8 0. 6.93930013480945e-15 2.96870005767279e-15 2.96870005767279e-15 -0.4 0. 6.81780013244907e-15 2.74290005328619e-15 2.74290005328619e-15 1.11022302462516e-16 0. 5.39200010475012e-15 8.03448215608549e-16 8.03448215608549e-16 0.4 0. 6.98030013560595e-15 -3.07148905966967e-16 -3.07148905966967e-16 0.8 0. 7.60100014766426e-15 -2.89176405617816e-16 -2.89176405617816e-16 1.2 0. 7.79220015137869e-15 -2.96486405759827e-16 -2.96486405759827e-16 -1.2 0.0001403251 4.91950009557089e-15 3.23980006293944e-15 6.75276413118562e-16 -0.8 0.0001232767 4.9371000959128e-15 3.28520006382142e-15 4.6769820908595e-16 -0.4 8.38672e-05 4.90620009531251e-15 2.9870000580283e-15 3.30777506425998e-16 1.11022302462516e-16 1.17076e-05 4.47690008697252e-15 4.33841708428222e-16 1.88777603667373e-16 0.4 1.519638e-07 6.51280012652385e-15 -5.97773111612909e-16 3.55701006910186e-17 0.8 1.20258e-08 7.12980013851028e-15 -4.31133408375608e-16 -1.53713502986185e-16 1.2 2.8124e-09 7.32490014230048e-15 -2.62729205104028e-16 -3.45477706711579e-16 -1.2 0. 6.63620012892114e-15 2.95880005748046e-15 2.95880005748046e-15 -0.8 0. 6.71010013035679e-15 2.93320005698313e-15 2.93320005698313e-15 -0.4 0. 6.62830012876766e-15 2.72710005297924e-15 2.72710005297924e-15 1.11022302462516e-16 0. 6.47050012570209e-15 1.9309000375115e-15 1.9309000375115e-15 0.4 0. 6.83100013270551e-15 6.97141513543334e-16 6.97141513543334e-16 0.8 0. 7.22660014039081e-15 -6.62351012867461e-17 -6.62351012867461e-17 1.2 0. 7.49060014551952e-15 -3.01134005850116e-16 -3.01134005850116e-16 -1.2 4.46922e-05 4.93980009596526e-15 3.12830006077333e-15 8.64363516791948e-16 -0.8 4.10532e-05 4.81240009349026e-15 3.14590006111525e-15 4.88790809495715e-16 -0.4 2.84516e-05 4.88120009482684e-15 2.80390005447123e-15 3.49416706788101e-16 1.11022302462516e-16 1.27747e-05 5.25110010201287e-15 1.57780003065184e-15 1.97591503838601e-16 0.4 2.4143e-06 6.08890011828877e-15 9.80572019049525e-17 1.9282800374606e-17 0.8 5.653298e-07 6.70110013018195e-15 -3.80188207385898e-16 -1.71527203332251e-16 1.2 1.856692e-07 7.01750013632863e-15 -2.77224405385625e-16 -3.6281810704845e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1g_lt.standard0000644000175000017500000004007514163340332025137 0ustar carstencarstenFreq N(g) 100.00000 3.316041e-50 125.89254 3.316041e-50 158.48932 3.316041e-50 199.52623 3.316041e-50 251.18864 3.316041e-50 316.22777 3.316041e-50 398.10717 3.316041e-50 501.18723 3.316041e-50 630.95734 3.316041e-50 794.32823 3.316041e-50 1000 3.316041e-50 1258.93 3.316041e-50 1584.89 3.316041e-50 1995.26 3.316041e-50 2511.89 3.316041e-50 3162.28 3.316041e-50 3981.07 3.316041e-50 5011.87 3.316041e-50 6309.57 3.316041e-50 7943.28 3.316041e-50 10000 3.316041e-50 12589.25 3.316041e-50 15848.93 3.316041e-50 19952.62 3.316041e-50 25118.86 3.316041e-50 31622.78 3.316041e-50 39810.72 3.316041e-50 50118.72 3.316041e-50 63095.73 3.316041e-50 79432.82 3.316041e-50 100000 3.316041e-50 125892.54 3.316041e-50 158489.32 3.316041e-50 199526.23 3.316041e-50 251188.64 3.316041e-50 316227.77 3.316041e-50 398107.17 3.316041e-50 501187.23 3.316041e-50 630957.34 3.316041e-50 794328.23 3.316041e-50 1000000 3.316041e-50 1258930 3.316041e-50 1584890 3.316041e-50 1995260 3.316041e-50 2511890 3.316041e-50 3162280 3.316041e-50 3981070 3.316041e-50 5011870 3.316041e-50 6309570 3.316041e-50 7943280 3.316041e-50 10000000 3.316041e-50 12589250 3.316041e-50 15848930 3.316041e-50 19952620 3.316041e-50 25118860 3.316041e-50 31622780 3.316041e-50 39810720 3.316041e-50 50118720 3.316041e-50 63095730 3.316041e-50 79432820 3.316041e-50 100000000 3.316041e-50 100.00000 2.3184225e-49 125.89254 2.3184225e-49 158.48932 2.3184225e-49 199.52623 2.3184225e-49 251.18864 2.3184225e-49 316.22777 2.3184225e-49 398.10717 2.3184225e-49 501.18723 2.3184225e-49 630.95734 2.3184225e-49 794.32823 2.3184225e-49 1000 2.3184225e-49 1258.93 2.3184225e-49 1584.89 2.3184225e-49 1995.26 2.3184225e-49 2511.89 2.3184225e-49 3162.28 2.3184225e-49 3981.07 2.3184225e-49 5011.87 2.3184225e-49 6309.57 2.3184225e-49 7943.28 2.3184225e-49 10000 2.3184225e-49 12589.25 2.3184225e-49 15848.93 2.3184225e-49 19952.62 2.3184225e-49 25118.86 2.3184225e-49 31622.78 2.3184225e-49 39810.72 2.3184225e-49 50118.72 2.3184225e-49 63095.73 2.3184225e-49 79432.82 2.3184225e-49 100000 2.3184225e-49 125892.54 2.3184225e-49 158489.32 2.3184225e-49 199526.23 2.3184225e-49 251188.64 2.3184225e-49 316227.77 2.3184225e-49 398107.17 2.3184225e-49 501187.23 2.3184225e-49 630957.34 2.3184225e-49 794328.23 2.3184225e-49 1000000 2.3184225e-49 1258930 2.3184225e-49 1584890 2.3184225e-49 1995260 2.3184225e-49 2511890 2.3184225e-49 3162280 2.3184225e-49 3981070 2.3184225e-49 5011870 2.3184225e-49 6309570 2.3184225e-49 7943280 2.3184225e-49 10000000 2.3184225e-49 12589250 2.3184225e-49 15848930 2.3184225e-49 19952620 2.3184225e-49 25118860 2.3184225e-49 31622780 2.3184225e-49 39810720 2.3184225e-49 50118720 2.3184225e-49 63095730 2.3184225e-49 79432820 2.3184225e-49 100000000 2.3184225e-49 100.00000 5.7108249e-49 125.89254 5.7108249e-49 158.48932 5.7108249e-49 199.52623 5.7108249e-49 251.18864 5.7108249e-49 316.22777 5.7108249e-49 398.10717 5.7108249e-49 501.18723 5.7108249e-49 630.95734 5.7108249e-49 794.32823 5.7108249e-49 1000 5.7108249e-49 1258.93 5.7108249e-49 1584.89 5.7108249e-49 1995.26 5.7108249e-49 2511.89 5.7108249e-49 3162.28 5.7108249e-49 3981.07 5.7108249e-49 5011.87 5.7108249e-49 6309.57 5.7108249e-49 7943.28 5.7108249e-49 10000 5.7108249e-49 12589.25 5.7108249e-49 15848.93 5.7108249e-49 19952.62 5.7108249e-49 25118.86 5.7108249e-49 31622.78 5.7108249e-49 39810.72 5.7108249e-49 50118.72 5.7108249e-49 63095.73 5.7108249e-49 79432.82 5.7108249e-49 100000 5.7108249e-49 125892.54 5.7108249e-49 158489.32 5.7108249e-49 199526.23 5.7108249e-49 251188.64 5.7108249e-49 316227.77 5.7108249e-49 398107.17 5.7108249e-49 501187.23 5.7108249e-49 630957.34 5.7108249e-49 794328.23 5.7108249e-49 1000000 5.7108249e-49 1258930 5.7108249e-49 1584890 5.7108249e-49 1995260 5.7108249e-49 2511890 5.7108249e-49 3162280 5.7108249e-49 3981070 5.7108249e-49 5011870 5.7108249e-49 6309570 5.7108249e-49 7943280 5.7108249e-49 10000000 5.7108249e-49 12589250 5.7108249e-49 15848930 5.7108249e-49 19952620 5.7108249e-49 25118860 5.7108249e-49 31622780 5.7108249e-49 39810720 5.7108249e-49 50118720 5.7108249e-49 63095730 5.7108249e-49 79432820 5.7108249e-49 100000000 5.7108249e-49 100.00000 1.034289e-48 125.89254 1.034289e-48 158.48932 1.034289e-48 199.52623 1.034289e-48 251.18864 1.034289e-48 316.22777 1.034289e-48 398.10717 1.034289e-48 501.18723 1.034289e-48 630.95734 1.034289e-48 794.32823 1.034289e-48 1000 1.034289e-48 1258.93 1.034289e-48 1584.89 1.034289e-48 1995.26 1.034289e-48 2511.89 1.034289e-48 3162.28 1.034289e-48 3981.07 1.034289e-48 5011.87 1.034289e-48 6309.57 1.034289e-48 7943.28 1.034289e-48 10000 1.034289e-48 12589.25 1.034289e-48 15848.93 1.034289e-48 19952.62 1.034289e-48 25118.86 1.034289e-48 31622.78 1.034289e-48 39810.72 1.034289e-48 50118.72 1.034289e-48 63095.73 1.034289e-48 79432.82 1.034289e-48 100000 1.034289e-48 125892.54 1.034289e-48 158489.32 1.034289e-48 199526.23 1.034289e-48 251188.64 1.034289e-48 316227.77 1.034289e-48 398107.17 1.034289e-48 501187.23 1.034289e-48 630957.34 1.034289e-48 794328.23 1.034289e-48 1000000 1.034289e-48 1258930 1.034289e-48 1584890 1.034289e-48 1995260 1.034289e-48 2511890 1.034289e-48 3162280 1.034289e-48 3981070 1.034289e-48 5011870 1.034289e-48 6309570 1.034289e-48 7943280 1.034289e-48 10000000 1.034289e-48 12589250 1.034289e-48 15848930 1.034289e-48 19952620 1.034289e-48 25118860 1.034289e-48 31622780 1.034289e-48 39810720 1.034289e-48 50118720 1.034289e-48 63095730 1.034289e-48 79432820 1.034289e-48 100000000 1.034289e-48 100.00000 2.421136e-50 125.89254 2.421136e-50 158.48932 2.421136e-50 199.52623 2.421136e-50 251.18864 2.421136e-50 316.22777 2.421136e-50 398.10717 2.421136e-50 501.18723 2.421136e-50 630.95734 2.421136e-50 794.32823 2.421136e-50 1000 2.421136e-50 1258.93 2.421136e-50 1584.89 2.421136e-50 1995.26 2.421136e-50 2511.89 2.421136e-50 3162.28 2.421136e-50 3981.07 2.421136e-50 5011.87 2.421136e-50 6309.57 2.421136e-50 7943.28 2.421136e-50 10000 2.421136e-50 12589.25 2.421136e-50 15848.93 2.421136e-50 19952.62 2.421136e-50 25118.86 2.421136e-50 31622.78 2.421136e-50 39810.72 2.421136e-50 50118.72 2.421136e-50 63095.73 2.421136e-50 79432.82 2.421136e-50 100000 2.421136e-50 125892.54 2.421136e-50 158489.32 2.421136e-50 199526.23 2.421136e-50 251188.64 2.421136e-50 316227.77 2.421136e-50 398107.17 2.421136e-50 501187.23 2.421136e-50 630957.34 2.421136e-50 794328.23 2.421136e-50 1000000 2.421136e-50 1258930 2.421136e-50 1584890 2.421136e-50 1995260 2.421136e-50 2511890 2.421136e-50 3162280 2.421136e-50 3981070 2.421136e-50 5011870 2.421136e-50 6309570 2.421136e-50 7943280 2.421136e-50 10000000 2.421136e-50 12589250 2.421136e-50 15848930 2.421136e-50 19952620 2.421136e-50 25118860 2.421136e-50 31622780 2.421136e-50 39810720 2.421136e-50 50118720 2.421136e-50 63095730 2.421136e-50 79432820 2.421136e-50 100000000 2.421136e-50 100.00000 2.3609881e-49 125.89254 2.3609881e-49 158.48932 2.3609881e-49 199.52623 2.3609881e-49 251.18864 2.3609881e-49 316.22777 2.3609881e-49 398.10717 2.3609881e-49 501.18723 2.3609881e-49 630.95734 2.3609881e-49 794.32823 2.3609881e-49 1000 2.3609881e-49 1258.93 2.3609881e-49 1584.89 2.3609881e-49 1995.26 2.3609881e-49 2511.89 2.3609881e-49 3162.28 2.3609881e-49 3981.07 2.3609881e-49 5011.87 2.3609881e-49 6309.57 2.3609881e-49 7943.28 2.3609881e-49 10000 2.3609881e-49 12589.25 2.3609881e-49 15848.93 2.3609881e-49 19952.62 2.3609881e-49 25118.86 2.3609881e-49 31622.78 2.3609881e-49 39810.72 2.3609881e-49 50118.72 2.3609881e-49 63095.73 2.3609881e-49 79432.82 2.3609881e-49 100000 2.3609881e-49 125892.54 2.3609881e-49 158489.32 2.3609881e-49 199526.23 2.3609881e-49 251188.64 2.3609881e-49 316227.77 2.3609881e-49 398107.17 2.3609881e-49 501187.23 2.3609881e-49 630957.34 2.3609881e-49 794328.23 2.3609881e-49 1000000 2.3609881e-49 1258930 2.3609881e-49 1584890 2.3609881e-49 1995260 2.3609881e-49 2511890 2.3609881e-49 3162280 2.3609881e-49 3981070 2.3609881e-49 5011870 2.3609881e-49 6309570 2.3609881e-49 7943280 2.3609881e-49 10000000 2.3609881e-49 12589250 2.3609881e-49 15848930 2.3609881e-49 19952620 2.3609881e-49 25118860 2.3609881e-49 31622780 2.3609881e-49 39810720 2.3609881e-49 50118720 2.3609881e-49 63095730 2.3609881e-49 79432820 2.3609881e-49 100000000 2.3609881e-49 100.00000 5.9845696e-49 125.89254 5.9845696e-49 158.48932 5.9845696e-49 199.52623 5.9845696e-49 251.18864 5.9845696e-49 316.22777 5.9845696e-49 398.10717 5.9845696e-49 501.18723 5.9845696e-49 630.95734 5.9845696e-49 794.32823 5.9845696e-49 1000 5.9845696e-49 1258.93 5.9845696e-49 1584.89 5.9845696e-49 1995.26 5.9845696e-49 2511.89 5.9845696e-49 3162.28 5.9845696e-49 3981.07 5.9845696e-49 5011.87 5.9845696e-49 6309.57 5.9845696e-49 7943.28 5.9845696e-49 10000 5.9845696e-49 12589.25 5.9845696e-49 15848.93 5.9845696e-49 19952.62 5.9845696e-49 25118.86 5.9845696e-49 31622.78 5.9845696e-49 39810.72 5.9845696e-49 50118.72 5.9845696e-49 63095.73 5.9845696e-49 79432.82 5.9845696e-49 100000 5.9845696e-49 125892.54 5.9845696e-49 158489.32 5.9845696e-49 199526.23 5.9845696e-49 251188.64 5.9845696e-49 316227.77 5.9845696e-49 398107.17 5.9845696e-49 501187.23 5.9845696e-49 630957.34 5.9845696e-49 794328.23 5.9845696e-49 1000000 5.9845696e-49 1258930 5.9845696e-49 1584890 5.9845696e-49 1995260 5.9845696e-49 2511890 5.9845696e-49 3162280 5.9845696e-49 3981070 5.9845696e-49 5011870 5.9845696e-49 6309570 5.9845696e-49 7943280 5.9845696e-49 10000000 5.9845696e-49 12589250 5.9845696e-49 15848930 5.9845696e-49 19952620 5.9845696e-49 25118860 5.9845696e-49 31622780 5.9845696e-49 39810720 5.9845696e-49 50118720 5.9845696e-49 63095730 5.9845696e-49 79432820 5.9845696e-49 100000000 5.9845696e-49 100.00000 1.069156e-48 125.89254 1.069156e-48 158.48932 1.069156e-48 199.52623 1.069156e-48 251.18864 1.069156e-48 316.22777 1.069156e-48 398.10717 1.069156e-48 501.18723 1.069156e-48 630.95734 1.069156e-48 794.32823 1.069156e-48 1000 1.069156e-48 1258.93 1.069156e-48 1584.89 1.069156e-48 1995.26 1.069156e-48 2511.89 1.069156e-48 3162.28 1.069156e-48 3981.07 1.069156e-48 5011.87 1.069156e-48 6309.57 1.069156e-48 7943.28 1.069156e-48 10000 1.069156e-48 12589.25 1.069156e-48 15848.93 1.069156e-48 19952.62 1.069156e-48 25118.86 1.069156e-48 31622.78 1.069156e-48 39810.72 1.069156e-48 50118.72 1.069156e-48 63095.73 1.069156e-48 79432.82 1.069156e-48 100000 1.069156e-48 125892.54 1.069156e-48 158489.32 1.069156e-48 199526.23 1.069156e-48 251188.64 1.069156e-48 316227.77 1.069156e-48 398107.17 1.069156e-48 501187.23 1.069156e-48 630957.34 1.069156e-48 794328.23 1.069156e-48 1000000 1.069156e-48 1258930 1.069156e-48 1584890 1.069156e-48 1995260 1.069156e-48 2511890 1.069156e-48 3162280 1.069156e-48 3981070 1.069156e-48 5011870 1.069156e-48 6309570 1.069156e-48 7943280 1.069156e-48 10000000 1.069156e-48 12589250 1.069156e-48 15848930 1.069156e-48 19952620 1.069156e-48 25118860 1.069156e-48 31622780 1.069156e-48 39810720 1.069156e-48 50118720 1.069156e-48 63095730 1.069156e-48 79432820 1.069156e-48 100000000 1.069156e-48 100.00000 4.068289e-50 125.89254 4.068289e-50 158.48932 4.068289e-50 199.52623 4.068289e-50 251.18864 4.068289e-50 316.22777 4.068289e-50 398.10717 4.068289e-50 501.18723 4.068289e-50 630.95734 4.068289e-50 794.32823 4.068289e-50 1000 4.068289e-50 1258.93 4.068289e-50 1584.89 4.068289e-50 1995.26 4.068289e-50 2511.89 4.068289e-50 3162.28 4.068289e-50 3981.07 4.068289e-50 5011.87 4.068289e-50 6309.57 4.068289e-50 7943.28 4.068289e-50 10000 4.068289e-50 12589.25 4.068289e-50 15848.93 4.068289e-50 19952.62 4.068289e-50 25118.86 4.068289e-50 31622.78 4.068289e-50 39810.72 4.068289e-50 50118.72 4.068289e-50 63095.73 4.068289e-50 79432.82 4.068289e-50 100000 4.068289e-50 125892.54 4.068289e-50 158489.32 4.068289e-50 199526.23 4.068289e-50 251188.64 4.068289e-50 316227.77 4.068289e-50 398107.17 4.068289e-50 501187.23 4.068289e-50 630957.34 4.068289e-50 794328.23 4.068289e-50 1000000 4.068289e-50 1258930 4.068289e-50 1584890 4.068289e-50 1995260 4.068289e-50 2511890 4.068289e-50 3162280 4.068289e-50 3981070 4.068289e-50 5011870 4.068289e-50 6309570 4.068289e-50 7943280 4.068289e-50 10000000 4.068289e-50 12589250 4.068289e-50 15848930 4.068289e-50 19952620 4.068289e-50 25118860 4.068289e-50 31622780 4.068289e-50 39810720 4.068289e-50 50118720 4.068289e-50 63095730 4.068289e-50 79432820 4.068289e-50 100000000 4.068289e-50 100.00000 2.2099401e-49 125.89254 2.2099401e-49 158.48932 2.2099401e-49 199.52623 2.2099401e-49 251.18864 2.2099401e-49 316.22777 2.2099401e-49 398.10717 2.2099401e-49 501.18723 2.2099401e-49 630.95734 2.2099401e-49 794.32823 2.2099401e-49 1000 2.2099401e-49 1258.93 2.2099401e-49 1584.89 2.2099401e-49 1995.26 2.2099401e-49 2511.89 2.2099401e-49 3162.28 2.2099401e-49 3981.07 2.2099401e-49 5011.87 2.2099401e-49 6309.57 2.2099401e-49 7943.28 2.2099401e-49 10000 2.2099401e-49 12589.25 2.2099401e-49 15848.93 2.2099401e-49 19952.62 2.2099401e-49 25118.86 2.2099401e-49 31622.78 2.2099401e-49 39810.72 2.2099401e-49 50118.72 2.2099401e-49 63095.73 2.2099401e-49 79432.82 2.2099401e-49 100000 2.2099401e-49 125892.54 2.2099401e-49 158489.32 2.2099401e-49 199526.23 2.2099401e-49 251188.64 2.2099401e-49 316227.77 2.2099401e-49 398107.17 2.2099401e-49 501187.23 2.2099401e-49 630957.34 2.2099401e-49 794328.23 2.2099401e-49 1000000 2.2099401e-49 1258930 2.2099401e-49 1584890 2.2099401e-49 1995260 2.2099401e-49 2511890 2.2099401e-49 3162280 2.2099401e-49 3981070 2.2099401e-49 5011870 2.2099401e-49 6309570 2.2099401e-49 7943280 2.2099401e-49 10000000 2.2099401e-49 12589250 2.2099401e-49 15848930 2.2099401e-49 19952620 2.2099401e-49 25118860 2.2099401e-49 31622780 2.2099401e-49 39810720 2.2099401e-49 50118720 2.2099401e-49 63095730 2.2099401e-49 79432820 2.2099401e-49 100000000 2.2099401e-49 100.00000 5.3772889e-49 125.89254 5.3772889e-49 158.48932 5.3772889e-49 199.52623 5.3772889e-49 251.18864 5.3772889e-49 316.22777 5.3772889e-49 398.10717 5.3772889e-49 501.18723 5.3772889e-49 630.95734 5.3772889e-49 794.32823 5.3772889e-49 1000 5.3772889e-49 1258.93 5.3772889e-49 1584.89 5.3772889e-49 1995.26 5.3772889e-49 2511.89 5.3772889e-49 3162.28 5.3772889e-49 3981.07 5.3772889e-49 5011.87 5.3772889e-49 6309.57 5.3772889e-49 7943.28 5.3772889e-49 10000 5.3772889e-49 12589.25 5.3772889e-49 15848.93 5.3772889e-49 19952.62 5.3772889e-49 25118.86 5.3772889e-49 31622.78 5.3772889e-49 39810.72 5.3772889e-49 50118.72 5.3772889e-49 63095.73 5.3772889e-49 79432.82 5.3772889e-49 100000 5.3772889e-49 125892.54 5.3772889e-49 158489.32 5.3772889e-49 199526.23 5.3772889e-49 251188.64 5.3772889e-49 316227.77 5.3772889e-49 398107.17 5.3772889e-49 501187.23 5.3772889e-49 630957.34 5.3772889e-49 794328.23 5.3772889e-49 1000000 5.3772889e-49 1258930 5.3772889e-49 1584890 5.3772889e-49 1995260 5.3772889e-49 2511890 5.3772889e-49 3162280 5.3772889e-49 3981070 5.3772889e-49 5011870 5.3772889e-49 6309570 5.3772889e-49 7943280 5.3772889e-49 10000000 5.3772889e-49 12589250 5.3772889e-49 15848930 5.3772889e-49 19952620 5.3772889e-49 25118860 5.3772889e-49 31622780 5.3772889e-49 39810720 5.3772889e-49 50118720 5.3772889e-49 63095730 5.3772889e-49 79432820 5.3772889e-49 100000000 5.3772889e-49 100.00000 9.9640324e-49 125.89254 9.9640324e-49 158.48932 9.9640324e-49 199.52623 9.9640324e-49 251.18864 9.9640324e-49 316.22777 9.9640324e-49 398.10717 9.9640324e-49 501.18723 9.9640324e-49 630.95734 9.9640324e-49 794.32823 9.9640324e-49 1000 9.9640324e-49 1258.93 9.9640324e-49 1584.89 9.9640324e-49 1995.26 9.9640324e-49 2511.89 9.9640324e-49 3162.28 9.9640324e-49 3981.07 9.9640324e-49 5011.87 9.9640324e-49 6309.57 9.9640324e-49 7943.28 9.9640324e-49 10000 9.9640324e-49 12589.25 9.9640324e-49 15848.93 9.9640324e-49 19952.62 9.9640324e-49 25118.86 9.9640324e-49 31622.78 9.9640324e-49 39810.72 9.9640324e-49 50118.72 9.9640324e-49 63095.73 9.9640324e-49 79432.82 9.9640324e-49 100000 9.9640324e-49 125892.54 9.9640324e-49 158489.32 9.9640324e-49 199526.23 9.9640324e-49 251188.64 9.9640324e-49 316227.77 9.9640324e-49 398107.17 9.9640324e-49 501187.23 9.9640324e-49 630957.34 9.9640324e-49 794328.23 9.9640324e-49 1000000 9.9640324e-49 1258930 9.9640324e-49 1584890 9.9640324e-49 1995260 9.9640324e-49 2511890 9.9640324e-49 3162280 9.9640324e-49 3981070 9.9640324e-49 5011870 9.9640324e-49 6309570 9.9640324e-49 7943280 9.9640324e-49 10000000 9.9640324e-49 12589250 9.9640324e-49 15848930 9.9640324e-49 19952620 9.9640324e-49 25118860 9.9640324e-49 31622780 9.9640324e-49 39810720 9.9640324e-49 50118720 9.9640324e-49 63095730 9.9640324e-49 79432820 9.9640324e-49 100000000 9.9640324e-49 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_ig_lw.standard0000644000175000017500000000643314163340332025032 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -3.996e-28 1.36741702656474e-13 6.04109011735996e-14 6.04109011735996e-14 -0.8 -2.610e-28 1.39159202703439e-13 6.00364011663242e-14 6.00364011663242e-14 -0.4 -1.282e-28 1.37413402669523e-13 5.63341010943998e-14 5.63341010943998e-14 1.11022302462516e-16 0. 1.2612480245022e-13 3.14576006111253e-14 3.14576006111253e-14 0.4 0. 1.36809902657799e-13 -5.0207000975369e-15 -5.0207000975369e-15 0.8 0. 1.50733202928287e-13 -7.34060014260548e-15 -7.34060014260548e-15 1.2 0. 1.55994303030494e-13 -6.43990012510763e-15 -6.43990012510763e-15 -1.2 0.0017128 1.00195701946497e-13 6.53158012688869e-14 1.58099003071382e-14 -0.8 0.0015148 9.89161019216383e-14 6.62270012865887e-14 9.7573001895546e-15 -0.4 0.0010573 9.91063019253333e-14 6.04575011745049e-14 6.94610013494155e-15 1.11022302462516e-16 0.0002892865 1.0106270196334e-13 2.25807004386742e-14 3.92740007629741e-15 0.4 2.06133e-05 1.26449202456523e-13 -1.3471800261716e-14 5.02359709759318e-16 0.8 2.5699e-06 1.41175202742604e-13 -9.26560018000236e-15 -3.3547000651716e-15 1.2 6.547151e-07 1.4641310284436e-13 -4.55900008856747e-15 -7.29940014180509e-15 -1.2 -3.988e-28 1.38079702682468e-13 6.06724011786798e-14 6.06724011786798e-14 -0.8 -2.583e-28 1.40953402738295e-13 6.07764011807002e-14 6.07764011807002e-14 -0.4 -1.214e-28 1.38984202700039e-13 5.66394011003309e-14 5.66394011003309e-14 1.11022302462516e-16 0. 1.10261402142043e-13 1.89732003685914e-14 1.89732003685914e-14 0.4 0. 1.41637102751577e-13 -6.00970011675015e-15 -6.00970011675015e-15 0.8 0. 1.5454200300228e-13 -5.5805001084121e-15 -5.5805001084121e-15 1.2 0. 1.58438903077985e-13 -5.71510011102697e-15 -5.71510011102697e-15 -1.2 0.0028456 1.00109101944815e-13 6.61843012857592e-14 1.4394900279649e-14 -0.8 0.0024981 9.99656019420269e-14 6.73402013082148e-14 9.56390018579742e-15 -0.4 0.0016944 9.95444019338442e-14 6.19411012033268e-14 6.76360013139613e-15 1.11022302462516e-16 0.000243612 9.0371101755635e-14 1.1763400228527e-14 3.83410007448488e-15 0.4 3.0058e-06 1.32018902564725e-13 -1.16191002257237e-14 6.90535513415e-16 0.8 2.301615e-07 1.44830502813615e-13 -8.10100015737774e-15 -3.21210006240131e-15 1.2 5.32817e-08 1.4880770289088e-13 -4.59960008935621e-15 -7.16600013921354e-15 -1.2 -4.008e-28 1.34682702616474e-13 6.05186011756919e-14 6.05186011756919e-14 -0.8 -2.645e-28 1.36353302648929e-13 6.01379011682961e-14 6.01379011682961e-14 -0.4 -1.336e-28 1.3494090262149e-13 5.63159010940463e-14 5.63159010940463e-14 1.11022302462516e-16 0. 1.31966002563697e-13 4.07984007925885e-14 4.07984007925885e-14 0.4 0. 1.39168602703622e-13 1.57122003052402e-14 1.57122003052402e-14 0.8 0. 1.47140002858482e-13 -2.39615504654999e-16 -2.39615504654999e-16 1.2 0. 1.52404302960751e-13 -5.52980010742716e-15 -5.52980010742716e-15 -1.2 0.0009067834 1.00764401957545e-13 6.38679012407586e-14 1.85923003611917e-14 -0.8 0.0008403078 9.7461201893374e-14 6.45898012547829e-14 1.00241001947377e-14 -0.4 0.000580602 9.88507019203678e-14 5.82783011321697e-14 7.16520013919799e-15 1.11022302462516e-16 0.0002579542 1.06339302065848e-13 3.43173006666805e-14 4.05650007880543e-15 0.4 4.75516e-05 1.23671202402554e-13 3.82260007426147e-15 3.71624807219537e-16 0.8 1.11366e-05 1.36184902645657e-13 -6.67690012971181e-15 -3.57800006950963e-15 1.2 3.6652e-06 1.42609502770468e-13 -4.87600009472582e-15 -7.52740014623444e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_core_lw.standard0000644000175000017500000000470114163340332025166 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0001112691 0. 0. 0.0001112691 -1.10000 -0.0001058366 0. 0. 0.0001058366 -1.00000 -9.95147e-05 0. 0. 9.95147e-05 -0.9 -9.21696e-05 0. 0. 9.21696e-05 -0.8 -8.36577e-05 0. 0. 8.36577e-05 -0.7 -7.38355e-05 0. 0. 7.38355e-05 -0.6 -6.25839e-05 0. 0. 6.25839e-05 -0.5 -4.98617e-05 0. 0. 4.98617e-05 -0.4 -3.58319e-05 0. 0. 3.58319e-05 -0.3 -2.11938e-05 0. 0. 2.11938e-05 -0.2 -8.1445e-06 0. 0. 8.1445e-06 -1.20000 -0.0012217 0. 0. 0.0012217 -1.10000 -0.0010522 0. 0. 0.0010522 -1.00000 -0.0008888303 0. 0. 0.0008888303 -0.9 -0.0007335234 0. 0. 0.0007335234 -0.8 -0.0005872355 0. 0. 0.0005872355 -0.7 -0.0004510688 0. 0. 0.0004510688 -0.6 -0.0003269224 0. 0. 0.0003269224 -0.5 -0.0002178127 0. 0. 0.0002178127 -0.4 -0.0001277442 0. 0. 0.0001277442 -0.3 -6.09548e-05 0. 0. 6.09548e-05 -0.2 -2.01909e-05 0. 0. 2.01909e-05 -1.20000 -0.0001807667 0. 0. 0.0001807667 -1.10000 -0.0001712269 0. 0. 0.0001712269 -1.00000 -0.0001601625 0. 0. 0.0001601625 -0.9 -0.0001473455 0. 0. 0.0001473455 -0.8 -0.0001325291 0. 0. 0.0001325291 -0.7 -0.0001154652 0. 0. 0.0001154652 -0.6 -9.59439e-05 0. 0. 9.59439e-05 -0.5 -7.38893e-05 0. 0. 7.38893e-05 -0.4 -4.96164e-05 0. 0. 4.96164e-05 -0.3 -2.46816e-05 0. 0. 2.46816e-05 -0.2 -5.264e-06 0. 0. 5.264e-06 -1.20000 -0.0019455 0. 0. 0.0019455 -1.10000 -0.0016687 0. 0. 0.0016687 -1.00000 -0.0014024 0. 0. 0.0014024 -0.9 -0.0011484 0. 0. 0.0011484 -0.8 -0.0009078598 0. 0. 0.0009078598 -0.7 -0.0006833459 0. 0. 0.0006833459 -0.6 -0.0004793982 0. 0. 0.0004793982 -0.5 -0.0003027384 0. 0. 0.0003027384 -0.4 -0.0001615566 0. 0. 0.0001615566 -0.3 -6.38558e-05 0. 0. 6.38558e-05 -0.2 -1.33965e-05 0. 0. 1.33965e-05 -1.20000 -6.22403e-05 0. 0. 6.22403e-05 -1.10000 -5.95036e-05 0. 0. 5.95036e-05 -1.00000 -5.63048e-05 0. 0. 5.63048e-05 -0.9 -5.25743e-05 0. 0. 5.25743e-05 -0.8 -4.82381e-05 0. 0. 4.82381e-05 -0.7 -4.32233e-05 0. 0. 4.32233e-05 -0.6 -3.74708e-05 0. 0. 3.74708e-05 -0.5 -3.09608e-05 0. 0. 3.09608e-05 -0.4 -2.37658e-05 0. 0. 2.37658e-05 -0.3 -1.61608e-05 0. 0. 1.61608e-05 -0.2 -8.8535e-06 0. 0. 8.8535e-06 -1.20000 -0.0007038663 0. 0. 0.0007038663 -1.10000 -0.0006105533 0. 0. 0.0006105533 -1.00000 -0.0005194304 0. 0. 0.0005194304 -0.9 -0.0004325028 0. 0. 0.0004325028 -0.8 -0.0003507865 0. 0. 0.0003507865 -0.7 -0.0002750606 0. 0. 0.0002750606 -0.6 -0.0002061627 0. 0. 0.0002061627 -0.5 -0.0001451695 0. 0. 0.0001451695 -0.4 -9.34991e-05 0. 0. 9.34991e-05 -0.3 -5.27872e-05 0. 0. 5.27872e-05 -0.2 -2.43694e-05 0. 0. 2.43694e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_core_sw.standard0000644000175000017500000001677114163340332025233 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0023099 1.12099002177742e-14 5.78340011235383e-15 2.71400005272475e-15 -1 0.0018481 1.11269002161617e-14 5.57590010832274e-15 2.79010005420314e-15 -0.8 0.0014427 1.10447002145649e-14 5.34480010383317e-15 2.88610005606813e-15 -0.6 0.0010953 1.09745002132011e-14 5.09230009892787e-15 3.01090005849261e-15 -0.4 0.0008100531 1.09235002122103e-14 4.82510009373699e-15 3.16540006149407e-15 -0.2 0.0006106223 1.08414002106154e-14 4.57160008881225e-15 3.27210006356693e-15 -5.55111512312578e-17 4.763e-19 1.12585002187183e-14 4.12620008015949e-15 4.12620008015949e-15 0.2 -0.0048219 1.50422002922241e-14 3.80030007382824e-15 8.65740016818689e-15 -1.2 0.0090395 1.38136002683561e-14 8.65020016804702e-15 2.79560005430999e-15 -1 0.0081589 1.39764002715188e-14 8.70780016916601e-15 2.88640005607395e-15 -0.8 0.0073312 1.41705002752896e-14 8.76510017027917e-15 3.00810005843821e-15 -0.6 0.0065941 1.43924002796005e-14 8.82270017139817e-15 3.15650006132117e-15 -0.4 0.0060707 1.45713002830759e-14 8.88520017261235e-15 3.25670006326775e-15 -0.2 0.0051629 1.53922002990235e-14 8.81680017128355e-15 4.19450008148635e-15 -5.55111512312578e-17 7.571e-19 1.7686200343589e-14 7.7449001504598e-15 7.7449001504598e-15 0.2 -0.0055255 1.79526003487643e-14 7.01760013633058e-15 8.76850017034523e-15 -1.2 0.0137063 1.44557002808302e-14 9.20200017876681e-15 3.0268000588015e-15 -1 0.0126841 1.46893002853683e-14 9.29390018055215e-15 3.160300061395e-15 -0.8 0.0118505 1.49435002903067e-14 9.38890018239771e-15 3.31100006432264e-15 -0.6 0.0113698 1.51463002942464e-14 9.48990018435983e-15 3.40510006615071e-15 -0.4 0.0103016 1.59249003093723e-14 9.5280001851e-15 4.18240008125128e-15 -0.2 0.0052939 1.80726003510955e-14 8.70060016902614e-15 7.29810014177984e-15 -5.55111512312578e-17 0. 1.8843100366064e-14 8.41110016340203e-15 8.41110016340203e-15 0.2 -0.0041661 1.87571003643933e-14 8.39680016312423e-15 8.35090016223253e-15 -1.2 0.015899 1.47436002864232e-14 9.2945001805638e-15 3.3266000646257e-15 -1 0.0151918 1.49931002912702e-14 9.39130018244433e-15 3.47390006748729e-15 -0.8 0.0148659 1.51999002952877e-14 9.49480018445502e-15 3.57360006942415e-15 -0.6 0.0135555 1.59980003107924e-14 9.55130018555264e-15 4.34550008441982e-15 -0.4 0.0089484 1.77199003442436e-14 9.04770017576923e-15 6.65690012932327e-15 -0.2 0.0039356 1.87403003640669e-14 8.27640016078522e-15 8.5101001653253e-15 -5.55111512312578e-17 1.7172e-18 1.90686003704448e-14 8.57080016650452e-15 8.57080016650452e-15 0.2 -0.0029189 1.89079003673229e-14 9.01930017521751e-15 7.9707001548464e-15 -1.2 0.0023308 1.06822002075226e-14 5.19110010084725e-15 2.73680005316768e-15 -1 0.0016951 1.04665002033322e-14 4.83230009387686e-15 2.82110005480537e-15 -0.8 0.0011757 1.02563001992486e-14 4.45430008653347e-15 2.9254000568316e-15 -0.6 0.0007725087 1.00770001957654e-14 4.07590007918231e-15 3.05750005939791e-15 -0.4 0.0004784194 9.95180019333314e-15 3.72190007230517e-15 3.21760006250816e-15 -0.2 0.000285415 9.84050019117092e-15 3.43650006676072e-15 3.32430006458102e-15 -5.55111512312578e-17 3.092e-19 9.85800019151089e-15 3.36260006532507e-15 3.36260006532507e-15 0.2 -0.0071431 1.49029002895179e-14 3.33180006472672e-15 8.93870017365169e-15 -1.2 0.0142711 1.40388002727311e-14 8.87700017245305e-15 2.7715000538418e-15 -1 0.0128137 1.42020002759016e-14 8.93640017360701e-15 2.86160005559216e-15 -0.8 0.0114316 1.43959002796685e-14 8.99490017474349e-15 2.98260005794283e-15 -0.6 0.0101443 1.46170002839638e-14 9.05330017587802e-15 3.13040006081413e-15 -0.4 0.0090566 1.47905002873343e-14 9.11540017708443e-15 3.22600006267135e-15 -0.2 0.0081124 1.52044002953751e-14 9.16780017810241e-15 3.5962000698632e-15 -5.55111512312578e-17 2.7905e-18 1.8014200349961e-14 7.8873001532262e-15 7.8873001532262e-15 0.2 -0.009474 1.81103003518279e-14 6.85040013308239e-15 9.03290017548171e-15 -1.2 0.0228035 1.46192002840065e-14 9.35160018167308e-15 3.00490005837605e-15 -1 0.0209973 1.48543002885738e-14 9.44590018350504e-15 3.13750006095206e-15 -0.8 0.019382 1.51102002935451e-14 9.54340018539917e-15 3.2875000638661e-15 -0.6 0.0182204 1.53072002973722e-14 9.64680018740792e-15 3.37300006552711e-15 -0.4 0.0169722 1.58634003081775e-14 9.74970018940695e-15 3.84280007465389e-15 -0.2 0.0090546 1.82684003548993e-14 8.92790017344188e-15 7.20310013993428e-15 -5.55111512312578e-17 3.1003e-18 1.91137003713209e-14 8.51450016541078e-15 8.51450016541078e-15 0.2 -0.0071481 1.89587003683097e-14 8.41690016351471e-15 8.46510016445109e-15 -1.2 0.026673 1.48613002887098e-14 9.39190018245599e-15 3.3060000642255e-15 -1 0.0251435 1.51116002935723e-14 9.49000018436177e-15 3.45260006707349e-15 -0.8 0.0242379 1.53081002973897e-14 9.59560018641326e-15 3.5388000687481e-15 -0.6 0.0224828 1.59949003107322e-14 9.69650018837344e-15 4.14320008048975e-15 -0.4 0.0152777 1.78149003460892e-14 9.23310017937099e-15 6.50000012627519e-15 -0.2 0.0067294 1.8939000367927e-14 8.37420016268518e-15 8.54070016591976e-15 -5.55111512312578e-17 2.206e-18 1.92634003742291e-14 8.63280016770899e-15 8.63280016770899e-15 0.2 -0.005036 1.90714003704992e-14 9.05570017592465e-15 8.02640015592849e-15 -1.2 0.0018429 1.14296002220423e-14 6.02650011707653e-15 2.7106000526587e-15 -1 0.0015593 1.14409002222618e-14 5.9255001151144e-15 2.78140005403412e-15 -0.8 0.0013034 1.14623002226776e-14 5.81200011290944e-15 2.87160005578643e-15 -0.6 0.0010805 1.15030002234682e-14 5.68630011046748e-15 2.99020005809047e-15 -0.4 0.0009074627 1.15672002247154e-14 5.55090010783707e-15 3.13860006097343e-15 -0.2 0.0007808656 1.16362002260559e-14 5.41950010528437e-15 3.29060006392633e-15 -5.55111512312578e-17 3.629e-19 1.25977002447349e-14 4.87100009462868e-15 4.87100009462868e-15 0.2 -0.0027682 1.5243100296127e-14 4.54440008828384e-15 8.19340015917279e-15 -1.2 0.0051027 1.34850002619724e-14 8.31820016159727e-15 2.82510005488308e-15 -1 0.0046397 1.36479002651371e-14 8.37390016267935e-15 2.91680005666453e-15 -0.8 0.0042285 1.38430002689273e-14 8.42980016376532e-15 3.03960005905016e-15 -0.6 0.0039185 1.40671002732809e-14 8.48700016487654e-15 3.18970006196615e-15 -0.4 0.0037244 1.42775002773683e-14 8.54560016601496e-15 3.32770006464707e-15 -0.2 0.0028417 1.54915003009526e-14 8.31120016146128e-15 4.88080009481907e-15 -5.55111512312578e-17 1.6193e-18 1.71981003341067e-14 7.52850014625581e-15 7.52850014625581e-15 0.2 -0.002875 1.7644300342775e-14 7.10700013806735e-15 8.45190016419465e-15 -1.2 0.0073491 1.42018002758977e-14 8.97000017425976e-15 3.0542000593338e-15 -1 0.0068967 1.44338002804047e-14 9.05870017598293e-15 3.18890006195061e-15 -0.8 0.0066041 1.46870002853236e-14 9.15050017776632e-15 3.34170006491904e-15 -0.6 0.0064522 1.49188002898268e-14 9.24560017961382e-15 3.47360006748146e-15 -0.4 0.0055228 1.59377003096209e-14 9.17390017822091e-15 4.63370009001867e-15 -0.2 0.0027676 1.77276003443932e-14 8.42090016359242e-15 7.32160014223637e-15 -5.55111512312578e-17 2.1845e-18 1.84302003580426e-14 8.24960016026458e-15 8.24960016026458e-15 0.2 -0.0021701 1.84405003582427e-14 8.32560016174103e-15 8.20320015936317e-15 -1.2 0.0085501 1.4557200282802e-14 9.14160017759342e-15 3.35250006512886e-15 -1 0.0083527 1.48070002876549e-14 9.23670017944093e-15 3.50230006803901e-15 -0.8 0.0082598 1.5045900292296e-14 9.33520018135448e-15 3.64230007075879e-15 -0.6 0.0072725 1.59649003101493e-14 9.32150018108833e-15 4.62510008985159e-15 -0.4 0.0046904 1.75030003400299e-14 8.81730017129326e-15 6.76720013146607e-15 -0.2 0.0020626 1.84276003579921e-14 8.1487001583044e-15 8.42850016374006e-15 -5.55111512312578e-17 0. 1.87659003645642e-14 8.47150016457542e-15 8.47150016457542e-15 0.2 -0.0015111 1.86541003623923e-14 8.94260017372746e-15 7.90000015347292e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_core_lw.standard0000644000175000017500000000470514163340332025334 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0001338061 0. 0. 0.0001338061 -1.10000 -0.0001298258 0. 0. 0.0001298258 -1.00000 -0.0001250983 0. 0. 0.0001250983 -0.9 -0.0001195032 0. 0. 0.0001195032 -0.8 -0.0001129081 0. 0. 0.0001129081 -0.7 -0.0001051739 0. 0. 0.0001051739 -0.6 -9.6167e-05 0. 0. 9.6167e-05 -0.5 -8.57834e-05 0. 0. 8.57834e-05 -0.4 -7.39902e-05 0. 0. 7.39902e-05 -0.3 -6.08911e-05 0. 0. 6.08911e-05 -0.2 -4.6859e-05 0. 0. 4.6859e-05 -1.20000 -0.0015003 0. 0. 0.0015003 -1.10000 -0.0013282 0. 0. 0.0013282 -1.00000 -0.0011589 0. 0. 0.0011589 -0.9 -0.0009958892 0. 0. 0.0009958892 -0.8 -0.0008404203 0. 0. 0.0008404203 -0.7 -0.0006931948 0. 0. 0.0006931948 -0.6 -0.0005552318 0. 0. 0.0005552318 -0.5 -0.0004282366 0. 0. 0.0004282366 -0.4 -0.0003147409 0. 0. 0.0003147409 -0.3 -0.0002178844 0. 0. 0.0002178844 -0.2 -0.0001407569 0. 0. 0.0001407569 -1.20000 -0.0002152149 0. 0. 0.0002152149 -1.10000 -0.0002076656 0. 0. 0.0002076656 -1.00000 -0.0001987546 0. 0. 0.0001987546 -0.9 -0.000188262 0. 0. 0.000188262 -0.8 -0.0001759434 0. 0. 0.0001759434 -0.7 -0.0001615391 0. 0. 0.0001615391 -0.6 -0.0001447953 0. 0. 0.0001447953 -0.5 -0.0001255111 0. 0. 0.0001255111 -0.4 -0.000103634 0. 0. 0.000103634 -0.3 -7.94581e-05 0. 0. 7.94581e-05 -0.2 -5.40421e-05 0. 0. 5.40421e-05 -1.20000 -0.0023533 0. 0. 0.0023533 -1.10000 -0.0020694 0. 0. 0.0020694 -1.00000 -0.0017924 0. 0. 0.0017924 -0.9 -0.0015257 0. 0. 0.0015257 -0.8 -0.0012701 0. 0. 0.0012701 -0.7 -0.0010267 0. 0. 0.0010267 -0.6 -0.0007982053 0. 0. 0.0007982053 -0.5 -0.0005889532 0. 0. 0.0005889532 -0.4 -0.0004047908 0. 0. 0.0004047908 -0.3 -0.0002522503 0. 0. 0.0002522503 -0.2 -0.0001371444 0. 0. 0.0001371444 -1.20000 -7.59322e-05 0. 0. 7.59322e-05 -1.10000 -7.41598e-05 0. 0. 7.41598e-05 -1.00000 -7.20187e-05 0. 0. 7.20187e-05 -0.9 -6.94459e-05 0. 0. 6.94459e-05 -0.8 -6.63734e-05 0. 0. 6.63734e-05 -0.7 -6.27314e-05 0. 0. 6.27314e-05 -0.6 -5.84561e-05 0. 0. 5.84561e-05 -0.5 -5.35032e-05 0. 0. 5.35032e-05 -0.4 -4.78724e-05 0. 0. 4.78724e-05 -0.3 -4.16468e-05 0. 0. 4.16468e-05 -0.2 -3.50354e-05 0. 0. 3.50354e-05 -1.20000 -0.0008834393 0. 0. 0.0008834393 -1.10000 -0.0007911658 0. 0. 0.0007911658 -1.00000 -0.00069831 0. 0. 0.00069831 -0.9 -0.0006079142 0. 0. 0.0006079142 -0.8 -0.0005215513 0. 0. 0.0005215513 -0.7 -0.0004401008 0. 0. 0.0004401008 -0.6 -0.0003642886 0. 0. 0.0003642886 -0.5 -0.000294894 0. 0. 0.000294894 -0.4 -0.0002328403 0. 0. 0.0002328403 -0.3 -0.0001789029 0. 0. 0.0001789029 -0.2 -0.0001326308 0. 0. 0.0001326308 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_core_sw.standard0000644000175000017500000000625214163340332025371 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.94305003774754e-14 8.60040016707956e-15 8.60040016707956e-15 -0.8 0. 1.96237003812287e-14 8.48360016481049e-15 8.48360016481049e-15 -0.4 0. 1.92511003739902e-14 7.77340015101347e-15 7.77340015101347e-15 1.11022302462516e-16 0. 1.81675003529391e-14 4.21480008188072e-15 4.21480008188072e-15 0.4 0. 1.92441003738542e-14 1.48590002886651e-15 1.48590002886651e-15 0.8 0. 2.00147003888246e-14 1.40910002737452e-15 1.40910002737452e-15 1.2 0. 2.02487003933705e-14 1.39810002716082e-15 1.39810002716082e-15 -1.2 0.0171162 1.56747003045116e-14 9.43280018325055e-15 3.72180007230323e-15 -0.8 0.014752 1.56021003031012e-14 9.43510018329523e-15 3.16260006143968e-15 -0.4 0.0095759 1.54447003000434e-14 8.61170016729908e-15 2.65430005156496e-15 1.11022302462516e-16 0.0021571 1.57220003054305e-14 4.10690007978455e-15 2.20270004279175e-15 0.4 0.0001578808 1.77048003439503e-14 1.19720002325795e-15 1.66420003233033e-15 0.8 2.13123e-05 1.87719003646808e-14 1.64770003200979e-15 1.15770002249058e-15 1.2 5.6679e-06 1.9111900371286e-14 2.04100003965041e-15 6.96878713538229e-16 -1.2 0. 1.95618003800261e-14 8.65030016804896e-15 8.65030016804896e-15 -0.8 0. 1.97950003845565e-14 8.5888001668542e-15 8.5888001668542e-15 -0.4 0. 1.92960003748625e-14 7.8208001519343e-15 7.8208001519343e-15 1.11022302462516e-16 0. 1.67521003254422e-14 2.66670005180585e-15 2.66670005180585e-15 0.4 0. 1.97268003832316e-14 1.73300003366691e-15 1.73300003366691e-15 0.8 0. 2.03356003950587e-14 1.57220003054305e-15 1.57220003054305e-15 1.2 0. 2.04653003975784e-14 1.45600002828564e-15 1.45600002828564e-15 -1.2 0.0282402 1.57283003055529e-14 9.51040018475808e-15 3.67140007132411e-15 -0.8 0.0245996 1.56935003048769e-14 9.56180018575663e-15 3.14130006102588e-15 -0.4 0.0151108 1.54421002999929e-14 8.7970001708989e-15 2.63950005127744e-15 1.11022302462516e-16 0.0015498 1.46685002849642e-14 3.14210006104142e-15 2.2553000438136e-15 0.4 2.17477e-05 1.8193900353452e-14 1.56500003040318e-15 1.65940003223708e-15 0.8 1.9148e-06 1.910130037108e-14 1.77970003457415e-15 1.1561000224595e-15 1.2 4.623748e-07 1.93360003756395e-14 2.04270003968343e-15 6.99450913588199e-16 -1.2 0. 1.9228800373557e-14 8.60570016718252e-15 8.60570016718252e-15 -0.8 0. 1.93511003759329e-14 8.48920016491928e-15 8.48920016491928e-15 -0.4 0. 1.91698003724108e-14 7.8086001516973e-15 7.8086001516973e-15 1.11022302462516e-16 0. 1.89350003678493e-14 5.74160011154179e-15 5.74160011154179e-15 0.4 0. 1.92578003741203e-14 3.07760005978839e-15 3.07760005978839e-15 0.8 0. 1.9640500381555e-14 1.70890003319872e-15 1.70890003319872e-15 1.2 0. 1.99150003868877e-14 1.33570002594858e-15 1.33570002594858e-15 -1.2 0.0093155 1.56221003034898e-14 9.31210018090572e-15 3.8283000743722e-15 -0.8 0.0079782 1.54791003007117e-14 9.24290017956137e-15 3.18940006196032e-15 -0.4 0.0052688 1.55116003013431e-14 8.34070016203438e-15 2.66760005182334e-15 1.11022302462516e-16 0.0021006 1.62489003156666e-14 5.53730010757286e-15 2.17790004230996e-15 0.4 0.0003986839 1.74265003385438e-14 2.53650004927646e-15 1.65540003215938e-15 0.8 9.64804e-05 1.83141003557871e-14 1.69150003286069e-15 1.15450002242842e-15 1.2 3.25211e-05 1.87588003644263e-14 1.92960003748625e-15 6.90100013406539e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_ig_sw.standard0000644000175000017500000002155414163340332024646 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -2.291e-05 -396.2372 396.2372 2.291e-05 -1.10000 -1.86556e-05 -396.2354 396.2354 1.86556e-05 -1.00000 -1.50957e-05 -396.2336 396.2336 1.50957e-05 -0.9 -1.21371e-05 -396.2319 396.2319 1.21371e-05 -0.8 -9.6952e-06 -396.2301 396.2301 9.6952e-06 -0.7 -7.6941e-06 -396.2284 396.2284 7.6941e-06 -0.6 -6.0668e-06 -396.2267 396.2267 6.0668e-06 -0.5 -4.7557e-06 -396.2250 396.2250 4.7557e-06 -0.4 -3.7153e-06 -396.2234 396.2234 3.7153e-06 -0.3 -2.9197e-06 -396.2217 396.2217 2.9197e-06 -0.2 -2.3553e-06 -396.2201 396.2201 2.3553e-06 -0.1 -1.8959e-06 -396.2185 396.2185 1.8959e-06 2.220446e-16 7.783e-21 -396.2125 396.2125 -7.783e-21 -1.20000 -0.0001523624 -660.4581 660.4581 0.0001523624 -1.10000 -0.0001316999 -660.4541 660.4541 0.0001316999 -1.00000 -0.0001131622 -660.4502 660.4502 0.0001131622 -0.9 -9.6621e-05 -660.4463 660.4463 9.6621e-05 -0.8 -8.19485e-05 -660.4424 660.4424 8.19485e-05 -0.7 -6.90196e-05 -660.4385 660.4385 6.90196e-05 -0.6 -5.77153e-05 -660.4347 660.4347 5.77153e-05 -0.5 -4.79348e-05 -660.4309 660.4309 4.79348e-05 -0.4 -3.96321e-05 -660.4272 660.4272 3.96321e-05 -0.3 -3.29062e-05 -660.4235 660.4235 3.29062e-05 -0.2 -2.78949e-05 -660.4199 660.4199 2.78949e-05 -0.1 -2.32289e-05 -660.4168 660.4168 2.32289e-05 2.220446e-16 9.741e-20 -660.4108 660.4108 -9.741e-20 -1.20000 -0.0015738 -1321.3 1321.3 0.0015738 -1.10000 -0.0014642 -1321.3 1321.3 0.0014642 -1.00000 -0.0013597 -1321.2 1321.2 0.0013597 -0.9 -0.0012604 -1321.2 1321.2 0.0012604 -0.8 -0.0011662 -1321.2 1321.2 0.0011662 -0.7 -0.0010774 -1321.2 1321.2 0.0010774 -0.6 -0.0009948728 -1321.2 1321.2 0.0009948728 -0.5 -0.000920269 -1321.2 1321.2 0.000920269 -0.4 -0.0008567773 -1321.2 1321.2 0.0008567773 -0.3 -0.0008058617 -1321.2 1321.2 0.0008058617 -0.2 -0.0007409601 -1321.2 1321.2 0.0007409601 -0.1 -0.0005224187 -1321.3 1321.3 0.0005224187 2.220446e-16 1.4585e-18 -1321.3 1321.3 -1.4585e-18 -1.20000 -0.0044785 -1982.3 1982.3 0.0044785 -1.10000 -0.0042444 -1982.3 1982.3 0.0042444 -1.00000 -0.0040199 -1982.3 1982.3 0.0040199 -0.9 -0.0038065 -1982.3 1982.3 0.0038065 -0.8 -0.003607 -1982.2 1982.2 0.003607 -0.7 -0.0034259 -1982.2 1982.2 0.0034259 -0.6 -0.0032692 -1982.2 1982.2 0.0032692 -0.5 -0.0031382 -1982.2 1982.2 0.0031382 -0.4 -0.0029967 -1982.2 1982.2 0.0029967 -0.3 -0.0027092 -1982.3 1982.3 0.0027092 -0.2 -0.0021317 -1982.4 1982.4 0.0021317 -0.1 -0.0012224 -1982.5 1982.5 0.0012224 2.220446e-16 2.2901e-18 -1982.5 1982.5 -2.2901e-18 -1.20000 -0.0082169 -2643.4 2643.4 0.0082169 -1.10000 -0.0078615 -2643.4 2643.4 0.0078615 -1.00000 -0.0075308 -2643.4 2643.4 0.0075308 -0.9 -0.0072315 -2643.4 2643.4 0.0072315 -0.8 -0.0069695 -2643.4 2643.4 0.0069695 -0.7 -0.0067394 -2643.4 2643.4 0.0067394 -0.6 -0.0064906 -2643.4 2643.4 0.0064906 -0.5 -0.0061071 -2643.5 2643.5 0.0061071 -0.4 -0.0054731 -2643.5 2643.5 0.0054731 -0.3 -0.0045326 -2643.6 2643.6 0.0045326 -0.2 -0.0032868 -2643.7 2643.7 0.0032868 -0.1 -0.0017645 -2643.7 2643.7 0.0017645 2.220446e-16 4.0847e-18 -2643.8 2643.8 -4.0847e-18 -1.20000 -5.5339e-06 -294.4354 294.4354 5.5339e-06 -1.10000 -4.155e-06 -294.4339 294.4339 4.155e-06 -1.00000 -3.0981e-06 -294.4324 294.4324 3.0981e-06 -0.9 -2.2938e-06 -294.4309 294.4309 2.2938e-06 -0.8 -1.6862e-06 -294.4294 294.4294 1.6862e-06 -0.7 -1.2304e-06 -294.4280 294.4280 1.2304e-06 -0.6 -8.910425e-07 -294.4265 294.4265 8.910425e-07 -0.5 -6.402316e-07 -294.4250 294.4250 6.402316e-07 -0.4 -4.565102e-07 -294.4236 294.4236 4.565102e-07 -0.3 -3.238322e-07 -294.4221 294.4221 3.238322e-07 -0.2 -2.32268e-07 -294.4206 294.4206 2.32268e-07 -0.1 -1.734672e-07 -294.4190 294.4190 1.734672e-07 2.220446e-16 9.322e-22 -294.4141 294.4141 -9.322e-22 -1.20000 -0.000102378 -490.7786 490.7786 0.000102378 -1.10000 -8.37361e-05 -490.7748 490.7748 8.37361e-05 -1.00000 -6.77942e-05 -490.7711 490.7711 6.77942e-05 -0.9 -5.43019e-05 -490.7675 490.7675 5.43019e-05 -0.8 -4.3009e-05 -490.7640 490.7640 4.3009e-05 -0.7 -3.36682e-05 -490.7605 490.7605 3.36682e-05 -0.6 -2.60388e-05 -490.7572 490.7572 2.60388e-05 -0.5 -1.98902e-05 -490.7540 490.7540 1.98902e-05 -0.4 -1.5009e-05 -490.7508 490.7508 1.5009e-05 -0.3 -1.12165e-05 -490.7478 490.7478 1.12165e-05 -0.2 -8.434e-06 -490.7448 490.7448 8.434e-06 -0.1 -6.5408e-06 -490.7420 490.7420 6.5408e-06 2.220446e-16 3.306e-20 -490.7349 490.7349 -3.306e-20 -1.20000 -0.0021562 -981.9132 981.9132 0.0021562 -1.10000 -0.0019954 -981.9063 981.9063 0.0019954 -1.00000 -0.0018426 -981.8992 981.8992 0.0018426 -0.9 -0.0016976 -981.8921 981.8921 0.0016976 -0.8 -0.0015602 -981.8849 981.8849 0.0015602 -0.7 -0.0014306 -981.8777 981.8777 0.0014306 -0.6 -0.0013087 -981.8704 981.8704 0.0013087 -0.5 -0.0011954 -981.8630 981.8630 0.0011954 -0.4 -0.0010927 -981.8555 981.8555 0.0010927 -0.3 -0.0010061 -981.8483 981.8483 0.0010061 -0.2 -0.0009314218 -981.8469 981.8469 0.0009314218 -0.1 -0.0007051618 -981.8926 981.8926 0.0007051618 2.220446e-16 1.9283e-18 -981.9467 981.9467 -1.9283e-18 -1.20000 -0.0069029 -1473.3 1473.3 0.0069029 -1.10000 -0.0065314 -1473.3 1473.3 0.0065314 -1.00000 -0.0061731 -1473.3 1473.3 0.0061731 -0.9 -0.0058292 -1473.2 1473.2 0.0058292 -0.8 -0.0055017 -1473.2 1473.2 0.0055017 -0.7 -0.005195 -1473.2 1473.2 0.005195 -0.6 -0.0049168 -1473.2 1473.2 0.0049168 -0.5 -0.004677 -1473.2 1473.2 0.004677 -0.4 -0.0044589 -1473.2 1473.2 0.0044589 -0.3 -0.004088 -1473.3 1473.3 0.004088 -0.2 -0.003274 -1473.4 1473.4 0.003274 -0.1 -0.0019013 -1473.4 1473.4 0.0019013 2.220446e-16 5.2265e-18 -1473.5 1473.5 -5.2265e-18 -1.20000 -0.0131629 -1964.7 1964.7 0.0131629 -1.10000 -0.0125651 -1964.7 1964.7 0.0125651 -1.00000 -0.0119979 -1964.7 1964.7 0.0119979 -0.9 -0.0114702 -1964.7 1964.7 0.0114702 -0.8 -0.0109931 -1964.7 1964.7 0.0109931 -0.7 -0.0105704 -1964.7 1964.7 0.0105704 -0.6 -0.0101533 -1964.7 1964.7 0.0101533 -0.5 -0.0095804 -1964.8 1964.8 0.0095804 -0.4 -0.0086408 -1964.8 1964.8 0.0086408 -0.3 -0.0072024 -1964.9 1964.9 0.0072024 -0.2 -0.0052485 -1965 1965 0.0052485 -0.1 -0.0028276 -1965.1 1965.1 0.0028276 2.220446e-16 4.8038e-18 -1965.1 1965.1 -4.8038e-18 -1.20000 -5.50609e-05 -558.8590 558.8590 5.50609e-05 -1.10000 -4.78071e-05 -558.8569 558.8569 4.78071e-05 -1.00000 -4.13308e-05 -558.8547 558.8547 4.13308e-05 -0.9 -3.55766e-05 -558.8526 558.8526 3.55766e-05 -0.8 -3.04932e-05 -558.8505 558.8505 3.04932e-05 -0.7 -2.60361e-05 -558.8484 558.8484 2.60361e-05 -0.6 -2.21743e-05 -558.8463 558.8463 2.21743e-05 -0.5 -1.89019e-05 -558.8442 558.8442 1.89019e-05 -0.4 -1.62445e-05 -558.8422 558.8422 1.62445e-05 -0.3 -1.41929e-05 -558.8402 558.8402 1.41929e-05 -0.2 -1.25138e-05 -558.8382 558.8382 1.25138e-05 -0.1 -1.02137e-05 -558.8366 558.8366 1.02137e-05 2.220446e-16 3.525e-20 -558.8296 558.8296 -3.525e-20 -1.20000 -0.0001817503 -931.5003 931.5003 0.0001817503 -1.10000 -0.0001628992 -931.4964 931.4964 0.0001628992 -1.00000 -0.0001455022 -931.4925 931.4925 0.0001455022 -0.9 -0.0001295104 -931.4886 931.4886 0.0001295104 -0.8 -0.0001148864 -931.4847 931.4847 0.0001148864 -0.7 -0.0001016182 -931.4809 931.4809 0.0001016182 -0.6 -8.97477e-05 -931.4770 931.4770 8.97477e-05 -0.5 -7.94184e-05 -931.4731 931.4731 7.94184e-05 -0.4 -7.08745e-05 -931.4692 931.4692 7.08745e-05 -0.3 -6.41345e-05 -931.4653 931.4653 6.41345e-05 -0.2 -5.81578e-05 -931.4619 931.4619 5.81578e-05 -0.1 -4.73358e-05 -931.4619 931.4619 4.73358e-05 2.220446e-16 1.649e-19 -931.4587 931.4587 -1.649e-19 -1.20000 -0.0010566 -1863.3 1863.3 0.0010566 -1.10000 -0.0009885037 -1863.3 1863.3 0.0009885037 -1.00000 -0.0009237135 -1863.3 1863.3 0.0009237135 -0.9 -0.000862425 -1863.3 1863.3 0.000862425 -0.8 -0.0008051112 -1863.3 1863.3 0.0008051112 -0.7 -0.0007526252 -1863.3 1863.3 0.0007526252 -0.6 -0.0007063065 -1863.3 1863.3 0.0007063065 -0.5 -0.0006675953 -1863.3 1863.3 0.0006675953 -0.4 -0.000636227 -1863.3 1863.3 0.000636227 -0.3 -0.0006045522 -1863.3 1863.3 0.0006045522 -0.2 -0.000535758 -1863.3 1863.3 0.000535758 -0.1 -0.0003523718 -1863.4 1863.4 0.0003523718 2.220446e-16 9.912e-19 -1863.4 1863.4 -9.912e-19 -1.20000 -0.0026405 -2795.4 2795.4 0.0026405 -1.10000 -0.0025104 -2795.4 2795.4 0.0025104 -1.00000 -0.0023881 -2795.3 2795.3 0.0023881 -0.9 -0.0022755 -2795.3 2795.3 0.0022755 -0.8 -0.0021751 -2795.3 2795.3 0.0021751 -0.7 -0.0020894 -2795.3 2795.3 0.0020894 -0.6 -0.0020185 -2795.3 2795.3 0.0020185 -0.5 -0.0019529 -2795.3 2795.3 0.0019529 -0.4 -0.0018526 -2795.4 2795.4 0.0018526 -0.3 -0.0016426 -2795.4 2795.4 0.0016426 -0.2 -0.0012687 -2795.5 2795.5 0.0012687 -0.1 -0.0007181843 -2795.5 2795.5 0.0007181843 2.220446e-16 1.9473e-18 -2795.6 2795.6 -1.9473e-18 -1.20000 -0.0046426 -3727.5 3727.5 0.0046426 -1.10000 -0.0044645 -3727.5 3727.5 0.0044645 -1.00000 -0.0043053 -3727.5 3727.5 0.0043053 -0.9 -0.0041674 -3727.5 3727.5 0.0041674 -0.8 -0.0040501 -3727.5 3727.5 0.0040501 -0.7 -0.0039401 -3727.5 3727.5 0.0039401 -0.6 -0.0037955 -3727.5 3727.5 0.0037955 -0.5 -0.0035512 -3727.6 3727.6 0.0035512 -0.4 -0.0031579 -3727.6 3727.6 0.0031579 -0.3 -0.0025972 -3727.7 3727.7 0.0025972 -0.2 -0.0018738 -3727.8 3727.8 0.0018738 -0.1 -0.0010022 -3727.8 3727.8 0.0010022 2.220446e-16 3.3469e-18 -3727.8 3727.8 -3.3469e-18 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1g_st.standard0000644000175000017500000003731714163340332025153 0ustar carstencarstenFreq N(g) 100.00000 6.195121e-52 125.89254 6.195121e-52 158.48932 6.195121e-52 199.52623 6.195121e-52 251.18864 6.195121e-52 316.22777 6.195121e-52 398.10717 6.195121e-52 501.18723 6.195121e-52 630.95734 6.195121e-52 794.32823 6.195121e-52 1000 6.195121e-52 1258.93 6.195121e-52 1584.89 6.195121e-52 1995.26 6.195121e-52 2511.89 6.195121e-52 3162.28 6.195121e-52 3981.07 6.195121e-52 5011.87 6.195121e-52 6309.57 6.195121e-52 7943.28 6.195121e-52 10000 6.195121e-52 12589.25 6.195121e-52 15848.93 6.195121e-52 19952.62 6.195121e-52 25118.86 6.195121e-52 31622.78 6.195121e-52 39810.72 6.195121e-52 50118.72 6.195121e-52 63095.73 6.195121e-52 79432.82 6.195121e-52 100000 6.195121e-52 125892.54 6.195121e-52 158489.32 6.195121e-52 199526.23 6.195121e-52 251188.64 6.195121e-52 316227.77 6.195121e-52 398107.17 6.195121e-52 501187.23 6.195121e-52 630957.34 6.195121e-52 794328.23 6.195121e-52 1000000 6.195121e-52 1258930 6.195121e-52 1584890 6.195121e-52 1995260 6.195121e-52 2511890 6.195121e-52 3162280 6.195121e-52 3981070 6.195121e-52 5011870 6.195121e-52 6309570 6.195121e-52 7943280 6.195121e-52 10000000 6.195121e-52 12589250 6.195121e-52 15848930 6.195121e-52 19952620 6.195121e-52 25118860 6.195121e-52 31622780 6.195121e-52 39810720 6.195121e-52 50118720 6.195121e-52 63095730 6.195121e-52 79432820 6.195121e-52 100000000 6.195121e-52 100.00000 6.7125249e-51 125.89254 6.7125249e-51 158.48932 6.7125249e-51 199.52623 6.7125249e-51 251.18864 6.7125249e-51 316.22777 6.7125249e-51 398.10717 6.7125249e-51 501.18723 6.7125249e-51 630.95734 6.7125249e-51 794.32823 6.7125249e-51 1000 6.7125249e-51 1258.93 6.7125249e-51 1584.89 6.7125249e-51 1995.26 6.7125249e-51 2511.89 6.7125249e-51 3162.28 6.7125249e-51 3981.07 6.7125249e-51 5011.87 6.7125249e-51 6309.57 6.7125249e-51 7943.28 6.7125249e-51 10000 6.7125249e-51 12589.25 6.7125249e-51 15848.93 6.7125249e-51 19952.62 6.7125249e-51 25118.86 6.7125249e-51 31622.78 6.7125249e-51 39810.72 6.7125249e-51 50118.72 6.7125249e-51 63095.73 6.7125249e-51 79432.82 6.7125249e-51 100000 6.7125249e-51 125892.54 6.7125249e-51 158489.32 6.7125249e-51 199526.23 6.7125249e-51 251188.64 6.7125249e-51 316227.77 6.7125249e-51 398107.17 6.7125249e-51 501187.23 6.7125249e-51 630957.34 6.7125249e-51 794328.23 6.7125249e-51 1000000 6.7125249e-51 1258930 6.7125249e-51 1584890 6.7125249e-51 1995260 6.7125249e-51 2511890 6.7125249e-51 3162280 6.7125249e-51 3981070 6.7125249e-51 5011870 6.7125249e-51 6309570 6.7125249e-51 7943280 6.7125249e-51 10000000 6.7125249e-51 12589250 6.7125249e-51 15848930 6.7125249e-51 19952620 6.7125249e-51 25118860 6.7125249e-51 31622780 6.7125249e-51 39810720 6.7125249e-51 50118720 6.7125249e-51 63095730 6.7125249e-51 79432820 6.7125249e-51 100000000 6.7125249e-51 100.00000 1.493284e-50 125.89254 1.493284e-50 158.48932 1.493284e-50 199.52623 1.493284e-50 251.18864 1.493284e-50 316.22777 1.493284e-50 398.10717 1.493284e-50 501.18723 1.493284e-50 630.95734 1.493284e-50 794.32823 1.493284e-50 1000 1.493284e-50 1258.93 1.493284e-50 1584.89 1.493284e-50 1995.26 1.493284e-50 2511.89 1.493284e-50 3162.28 1.493284e-50 3981.07 1.493284e-50 5011.87 1.493284e-50 6309.57 1.493284e-50 7943.28 1.493284e-50 10000 1.493284e-50 12589.25 1.493284e-50 15848.93 1.493284e-50 19952.62 1.493284e-50 25118.86 1.493284e-50 31622.78 1.493284e-50 39810.72 1.493284e-50 50118.72 1.493284e-50 63095.73 1.493284e-50 79432.82 1.493284e-50 100000 1.493284e-50 125892.54 1.493284e-50 158489.32 1.493284e-50 199526.23 1.493284e-50 251188.64 1.493284e-50 316227.77 1.493284e-50 398107.17 1.493284e-50 501187.23 1.493284e-50 630957.34 1.493284e-50 794328.23 1.493284e-50 1000000 1.493284e-50 1258930 1.493284e-50 1584890 1.493284e-50 1995260 1.493284e-50 2511890 1.493284e-50 3162280 1.493284e-50 3981070 1.493284e-50 5011870 1.493284e-50 6309570 1.493284e-50 7943280 1.493284e-50 10000000 1.493284e-50 12589250 1.493284e-50 15848930 1.493284e-50 19952620 1.493284e-50 25118860 1.493284e-50 31622780 1.493284e-50 39810720 1.493284e-50 50118720 1.493284e-50 63095730 1.493284e-50 79432820 1.493284e-50 100000000 1.493284e-50 100.00000 2.424249e-50 125.89254 2.424249e-50 158.48932 2.424249e-50 199.52623 2.424249e-50 251.18864 2.424249e-50 316.22777 2.424249e-50 398.10717 2.424249e-50 501.18723 2.424249e-50 630.95734 2.424249e-50 794.32823 2.424249e-50 1000 2.424249e-50 1258.93 2.424249e-50 1584.89 2.424249e-50 1995.26 2.424249e-50 2511.89 2.424249e-50 3162.28 2.424249e-50 3981.07 2.424249e-50 5011.87 2.424249e-50 6309.57 2.424249e-50 7943.28 2.424249e-50 10000 2.424249e-50 12589.25 2.424249e-50 15848.93 2.424249e-50 19952.62 2.424249e-50 25118.86 2.424249e-50 31622.78 2.424249e-50 39810.72 2.424249e-50 50118.72 2.424249e-50 63095.73 2.424249e-50 79432.82 2.424249e-50 100000 2.424249e-50 125892.54 2.424249e-50 158489.32 2.424249e-50 199526.23 2.424249e-50 251188.64 2.424249e-50 316227.77 2.424249e-50 398107.17 2.424249e-50 501187.23 2.424249e-50 630957.34 2.424249e-50 794328.23 2.424249e-50 1000000 2.424249e-50 1258930 2.424249e-50 1584890 2.424249e-50 1995260 2.424249e-50 2511890 2.424249e-50 3162280 2.424249e-50 3981070 2.424249e-50 5011870 2.424249e-50 6309570 2.424249e-50 7943280 2.424249e-50 10000000 2.424249e-50 12589250 2.424249e-50 15848930 2.424249e-50 19952620 2.424249e-50 25118860 2.424249e-50 31622780 2.424249e-50 39810720 2.424249e-50 50118720 2.424249e-50 63095730 2.424249e-50 79432820 2.424249e-50 100000000 2.424249e-50 100.00000 3.6864e-52 125.89254 3.6864e-52 158.48932 3.6864e-52 199.52623 3.6864e-52 251.18864 3.6864e-52 316.22777 3.6864e-52 398.10717 3.6864e-52 501.18723 3.6864e-52 630.95734 3.6864e-52 794.32823 3.6864e-52 1000 3.6864e-52 1258.93 3.6864e-52 1584.89 3.6864e-52 1995.26 3.6864e-52 2511.89 3.6864e-52 3162.28 3.6864e-52 3981.07 3.6864e-52 5011.87 3.6864e-52 6309.57 3.6864e-52 7943.28 3.6864e-52 10000 3.6864e-52 12589.25 3.6864e-52 15848.93 3.6864e-52 19952.62 3.6864e-52 25118.86 3.6864e-52 31622.78 3.6864e-52 39810.72 3.6864e-52 50118.72 3.6864e-52 63095.73 3.6864e-52 79432.82 3.6864e-52 100000 3.6864e-52 125892.54 3.6864e-52 158489.32 3.6864e-52 199526.23 3.6864e-52 251188.64 3.6864e-52 316227.77 3.6864e-52 398107.17 3.6864e-52 501187.23 3.6864e-52 630957.34 3.6864e-52 794328.23 3.6864e-52 1000000 3.6864e-52 1258930 3.6864e-52 1584890 3.6864e-52 1995260 3.6864e-52 2511890 3.6864e-52 3162280 3.6864e-52 3981070 3.6864e-52 5011870 3.6864e-52 6309570 3.6864e-52 7943280 3.6864e-52 10000000 3.6864e-52 12589250 3.6864e-52 15848930 3.6864e-52 19952620 3.6864e-52 25118860 3.6864e-52 31622780 3.6864e-52 39810720 3.6864e-52 50118720 3.6864e-52 63095730 3.6864e-52 79432820 3.6864e-52 100000000 3.6864e-52 100.00000 8.0192025e-51 125.89254 8.0192025e-51 158.48932 8.0192025e-51 199.52623 8.0192025e-51 251.18864 8.0192025e-51 316.22777 8.0192025e-51 398.10717 8.0192025e-51 501.18723 8.0192025e-51 630.95734 8.0192025e-51 794.32823 8.0192025e-51 1000 8.0192025e-51 1258.93 8.0192025e-51 1584.89 8.0192025e-51 1995.26 8.0192025e-51 2511.89 8.0192025e-51 3162.28 8.0192025e-51 3981.07 8.0192025e-51 5011.87 8.0192025e-51 6309.57 8.0192025e-51 7943.28 8.0192025e-51 10000 8.0192025e-51 12589.25 8.0192025e-51 15848.93 8.0192025e-51 19952.62 8.0192025e-51 25118.86 8.0192025e-51 31622.78 8.0192025e-51 39810.72 8.0192025e-51 50118.72 8.0192025e-51 63095.73 8.0192025e-51 79432.82 8.0192025e-51 100000 8.0192025e-51 125892.54 8.0192025e-51 158489.32 8.0192025e-51 199526.23 8.0192025e-51 251188.64 8.0192025e-51 316227.77 8.0192025e-51 398107.17 8.0192025e-51 501187.23 8.0192025e-51 630957.34 8.0192025e-51 794328.23 8.0192025e-51 1000000 8.0192025e-51 1258930 8.0192025e-51 1584890 8.0192025e-51 1995260 8.0192025e-51 2511890 8.0192025e-51 3162280 8.0192025e-51 3981070 8.0192025e-51 5011870 8.0192025e-51 6309570 8.0192025e-51 7943280 8.0192025e-51 10000000 8.0192025e-51 12589250 8.0192025e-51 15848930 8.0192025e-51 19952620 8.0192025e-51 25118860 8.0192025e-51 31622780 8.0192025e-51 39810720 8.0192025e-51 50118720 8.0192025e-51 63095730 8.0192025e-51 79432820 8.0192025e-51 100000000 8.0192025e-51 100.00000 1.734489e-50 125.89254 1.734489e-50 158.48932 1.734489e-50 199.52623 1.734489e-50 251.18864 1.734489e-50 316.22777 1.734489e-50 398.10717 1.734489e-50 501.18723 1.734489e-50 630.95734 1.734489e-50 794.32823 1.734489e-50 1000 1.734489e-50 1258.93 1.734489e-50 1584.89 1.734489e-50 1995.26 1.734489e-50 2511.89 1.734489e-50 3162.28 1.734489e-50 3981.07 1.734489e-50 5011.87 1.734489e-50 6309.57 1.734489e-50 7943.28 1.734489e-50 10000 1.734489e-50 12589.25 1.734489e-50 15848.93 1.734489e-50 19952.62 1.734489e-50 25118.86 1.734489e-50 31622.78 1.734489e-50 39810.72 1.734489e-50 50118.72 1.734489e-50 63095.73 1.734489e-50 79432.82 1.734489e-50 100000 1.734489e-50 125892.54 1.734489e-50 158489.32 1.734489e-50 199526.23 1.734489e-50 251188.64 1.734489e-50 316227.77 1.734489e-50 398107.17 1.734489e-50 501187.23 1.734489e-50 630957.34 1.734489e-50 794328.23 1.734489e-50 1000000 1.734489e-50 1258930 1.734489e-50 1584890 1.734489e-50 1995260 1.734489e-50 2511890 1.734489e-50 3162280 1.734489e-50 3981070 1.734489e-50 5011870 1.734489e-50 6309570 1.734489e-50 7943280 1.734489e-50 10000000 1.734489e-50 12589250 1.734489e-50 15848930 1.734489e-50 19952620 1.734489e-50 25118860 1.734489e-50 31622780 1.734489e-50 39810720 1.734489e-50 50118720 1.734489e-50 63095730 1.734489e-50 79432820 1.734489e-50 100000000 1.734489e-50 100.00000 2.666689e-50 125.89254 2.666689e-50 158.48932 2.666689e-50 199.52623 2.666689e-50 251.18864 2.666689e-50 316.22777 2.666689e-50 398.10717 2.666689e-50 501.18723 2.666689e-50 630.95734 2.666689e-50 794.32823 2.666689e-50 1000 2.666689e-50 1258.93 2.666689e-50 1584.89 2.666689e-50 1995.26 2.666689e-50 2511.89 2.666689e-50 3162.28 2.666689e-50 3981.07 2.666689e-50 5011.87 2.666689e-50 6309.57 2.666689e-50 7943.28 2.666689e-50 10000 2.666689e-50 12589.25 2.666689e-50 15848.93 2.666689e-50 19952.62 2.666689e-50 25118.86 2.666689e-50 31622.78 2.666689e-50 39810.72 2.666689e-50 50118.72 2.666689e-50 63095.73 2.666689e-50 79432.82 2.666689e-50 100000 2.666689e-50 125892.54 2.666689e-50 158489.32 2.666689e-50 199526.23 2.666689e-50 251188.64 2.666689e-50 316227.77 2.666689e-50 398107.17 2.666689e-50 501187.23 2.666689e-50 630957.34 2.666689e-50 794328.23 2.666689e-50 1000000 2.666689e-50 1258930 2.666689e-50 1584890 2.666689e-50 1995260 2.666689e-50 2511890 2.666689e-50 3162280 2.666689e-50 3981070 2.666689e-50 5011870 2.666689e-50 6309570 2.666689e-50 7943280 2.666689e-50 10000000 2.666689e-50 12589250 2.666689e-50 15848930 2.666689e-50 19952620 2.666689e-50 25118860 2.666689e-50 31622780 2.666689e-50 39810720 2.666689e-50 50118720 2.666689e-50 63095730 2.666689e-50 79432820 2.666689e-50 100000000 2.666689e-50 100.00000 7.409284e-52 125.89254 7.409284e-52 158.48932 7.409284e-52 199.52623 7.409284e-52 251.18864 7.409284e-52 316.22777 7.409284e-52 398.10717 7.409284e-52 501.18723 7.409284e-52 630.95734 7.409284e-52 794.32823 7.409284e-52 1000 7.409284e-52 1258.93 7.409284e-52 1584.89 7.409284e-52 1995.26 7.409284e-52 2511.89 7.409284e-52 3162.28 7.409284e-52 3981.07 7.409284e-52 5011.87 7.409284e-52 6309.57 7.409284e-52 7943.28 7.409284e-52 10000 7.409284e-52 12589.25 7.409284e-52 15848.93 7.409284e-52 19952.62 7.409284e-52 25118.86 7.409284e-52 31622.78 7.409284e-52 39810.72 7.409284e-52 50118.72 7.409284e-52 63095.73 7.409284e-52 79432.82 7.409284e-52 100000 7.409284e-52 125892.54 7.409284e-52 158489.32 7.409284e-52 199526.23 7.409284e-52 251188.64 7.409284e-52 316227.77 7.409284e-52 398107.17 7.409284e-52 501187.23 7.409284e-52 630957.34 7.409284e-52 794328.23 7.409284e-52 1000000 7.409284e-52 1258930 7.409284e-52 1584890 7.409284e-52 1995260 7.409284e-52 2511890 7.409284e-52 3162280 7.409284e-52 3981070 7.409284e-52 5011870 7.409284e-52 6309570 7.409284e-52 7943280 7.409284e-52 10000000 7.409284e-52 12589250 7.409284e-52 15848930 7.409284e-52 19952620 7.409284e-52 25118860 7.409284e-52 31622780 7.409284e-52 39810720 7.409284e-52 50118720 7.409284e-52 63095730 7.409284e-52 79432820 7.409284e-52 100000000 7.409284e-52 100.00000 5.2736644e-51 125.89254 5.2736644e-51 158.48932 5.2736644e-51 199.52623 5.2736644e-51 251.18864 5.2736644e-51 316.22777 5.2736644e-51 398.10717 5.2736644e-51 501.18723 5.2736644e-51 630.95734 5.2736644e-51 794.32823 5.2736644e-51 1000 5.2736644e-51 1258.93 5.2736644e-51 1584.89 5.2736644e-51 1995.26 5.2736644e-51 2511.89 5.2736644e-51 3162.28 5.2736644e-51 3981.07 5.2736644e-51 5011.87 5.2736644e-51 6309.57 5.2736644e-51 7943.28 5.2736644e-51 10000 5.2736644e-51 12589.25 5.2736644e-51 15848.93 5.2736644e-51 19952.62 5.2736644e-51 25118.86 5.2736644e-51 31622.78 5.2736644e-51 39810.72 5.2736644e-51 50118.72 5.2736644e-51 63095.73 5.2736644e-51 79432.82 5.2736644e-51 100000 5.2736644e-51 125892.54 5.2736644e-51 158489.32 5.2736644e-51 199526.23 5.2736644e-51 251188.64 5.2736644e-51 316227.77 5.2736644e-51 398107.17 5.2736644e-51 501187.23 5.2736644e-51 630957.34 5.2736644e-51 794328.23 5.2736644e-51 1000000 5.2736644e-51 1258930 5.2736644e-51 1584890 5.2736644e-51 1995260 5.2736644e-51 2511890 5.2736644e-51 3162280 5.2736644e-51 3981070 5.2736644e-51 5011870 5.2736644e-51 6309570 5.2736644e-51 7943280 5.2736644e-51 10000000 5.2736644e-51 12589250 5.2736644e-51 15848930 5.2736644e-51 19952620 5.2736644e-51 25118860 5.2736644e-51 31622780 5.2736644e-51 39810720 5.2736644e-51 50118720 5.2736644e-51 63095730 5.2736644e-51 79432820 5.2736644e-51 100000000 5.2736644e-51 100.00000 1.234321e-50 125.89254 1.234321e-50 158.48932 1.234321e-50 199.52623 1.234321e-50 251.18864 1.234321e-50 316.22777 1.234321e-50 398.10717 1.234321e-50 501.18723 1.234321e-50 630.95734 1.234321e-50 794.32823 1.234321e-50 1000 1.234321e-50 1258.93 1.234321e-50 1584.89 1.234321e-50 1995.26 1.234321e-50 2511.89 1.234321e-50 3162.28 1.234321e-50 3981.07 1.234321e-50 5011.87 1.234321e-50 6309.57 1.234321e-50 7943.28 1.234321e-50 10000 1.234321e-50 12589.25 1.234321e-50 15848.93 1.234321e-50 19952.62 1.234321e-50 25118.86 1.234321e-50 31622.78 1.234321e-50 39810.72 1.234321e-50 50118.72 1.234321e-50 63095.73 1.234321e-50 79432.82 1.234321e-50 100000 1.234321e-50 125892.54 1.234321e-50 158489.32 1.234321e-50 199526.23 1.234321e-50 251188.64 1.234321e-50 316227.77 1.234321e-50 398107.17 1.234321e-50 501187.23 1.234321e-50 630957.34 1.234321e-50 794328.23 1.234321e-50 1000000 1.234321e-50 1258930 1.234321e-50 1584890 1.234321e-50 1995260 1.234321e-50 2511890 1.234321e-50 3162280 1.234321e-50 3981070 1.234321e-50 5011870 1.234321e-50 6309570 1.234321e-50 7943280 1.234321e-50 10000000 1.234321e-50 12589250 1.234321e-50 15848930 1.234321e-50 19952620 1.234321e-50 25118860 1.234321e-50 31622780 1.234321e-50 39810720 1.234321e-50 50118720 1.234321e-50 63095730 1.234321e-50 79432820 1.234321e-50 100000000 1.234321e-50 100.00000 2.152089e-50 125.89254 2.152089e-50 158.48932 2.152089e-50 199.52623 2.152089e-50 251.18864 2.152089e-50 316.22777 2.152089e-50 398.10717 2.152089e-50 501.18723 2.152089e-50 630.95734 2.152089e-50 794.32823 2.152089e-50 1000 2.152089e-50 1258.93 2.152089e-50 1584.89 2.152089e-50 1995.26 2.152089e-50 2511.89 2.152089e-50 3162.28 2.152089e-50 3981.07 2.152089e-50 5011.87 2.152089e-50 6309.57 2.152089e-50 7943.28 2.152089e-50 10000 2.152089e-50 12589.25 2.152089e-50 15848.93 2.152089e-50 19952.62 2.152089e-50 25118.86 2.152089e-50 31622.78 2.152089e-50 39810.72 2.152089e-50 50118.72 2.152089e-50 63095.73 2.152089e-50 79432.82 2.152089e-50 100000 2.152089e-50 125892.54 2.152089e-50 158489.32 2.152089e-50 199526.23 2.152089e-50 251188.64 2.152089e-50 316227.77 2.152089e-50 398107.17 2.152089e-50 501187.23 2.152089e-50 630957.34 2.152089e-50 794328.23 2.152089e-50 1000000 2.152089e-50 1258930 2.152089e-50 1584890 2.152089e-50 1995260 2.152089e-50 2511890 2.152089e-50 3162280 2.152089e-50 3981070 2.152089e-50 5011870 2.152089e-50 6309570 2.152089e-50 7943280 2.152089e-50 10000000 2.152089e-50 12589250 2.152089e-50 15848930 2.152089e-50 19952620 2.152089e-50 25118860 2.152089e-50 31622780 2.152089e-50 39810720 2.152089e-50 50118720 2.152089e-50 63095730 2.152089e-50 79432820 2.152089e-50 100000000 2.152089e-50 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_diode_lt.standard0000644000175000017500000002172714163340332025514 0ustar carstencarstenV(d) g(d,b) g(s,b) c(d,b) c(s,b) c(b,b) g(b,b) -1.2 2.76204e-05 -3.8664 1.26964002466524e-14 4.22112008200349e-14 5.69717011067865e-14 3.8664 -1 2.60267e-05 -3.8664 1.35308002628622e-14 4.22386008205672e-14 5.78395011236452e-14 3.8664 -0.8 2.44862e-05 -3.8664 1.46277002841716e-14 4.22668008211151e-14 5.8970601145619e-14 3.8664 -0.6 2.30805e-05 -3.8664 1.61780003142892e-14 4.22957008216765e-14 6.05561011764204e-14 3.8664 -0.4 -0.0002971951 -3.8664 1.86622003625497e-14 4.23268008222807e-14 6.30769012253919e-14 3.8667 -0.2 -0.7299589 -3.8664 2.42145004704139e-14 4.25615008268402e-14 6.87130013348841e-14 4.5963 -5.55111512312578e-17 -3.8664 -3.8664 4.28065008315998e-14 4.28065008315998e-14 8.71966016939642e-14 7.7327 0.2 -3.8664 -3.8663 6.55658012737436e-14 4.29608008345974e-14 1.09846702133987e-13 7.7327 -1.2 2.76204e-05 -3.8664 1.26964002466524e-14 4.22112008200349e-14 5.69717011067865e-14 3.8664 -1 2.60267e-05 -3.8664 1.35308002628622e-14 4.22386008205672e-14 5.78395011236452e-14 3.8664 -0.8 2.44862e-05 -3.8664 1.46277002841716e-14 4.22668008211151e-14 5.8970601145619e-14 3.8664 -0.6 2.30805e-05 -3.8664 1.61780003142892e-14 4.22957008216765e-14 6.05561011764204e-14 3.8664 -0.4 -0.0002971951 -3.8664 1.86622003625497e-14 4.23268008222807e-14 6.30769012253919e-14 3.8667 -0.2 -0.7299589 -3.8664 2.42145004704139e-14 4.25615008268402e-14 6.87130013348841e-14 4.5963 -5.55111512312578e-17 -3.8664 -3.8664 4.28065008315998e-14 4.28065008315998e-14 8.71966016939642e-14 7.7327 0.2 -3.8664 -3.8663 6.55658012737436e-14 4.29608008345974e-14 1.09846702133987e-13 7.7327 -1.2 2.76204e-05 -3.8664 1.26964002466524e-14 4.22112008200349e-14 5.69717011067865e-14 3.8664 -1 2.60267e-05 -3.8664 1.35308002628622e-14 4.22386008205672e-14 5.78395011236452e-14 3.8664 -0.8 2.44862e-05 -3.8664 1.46277002841716e-14 4.22668008211151e-14 5.8970601145619e-14 3.8664 -0.6 2.30805e-05 -3.8664 1.61780003142892e-14 4.22957008216765e-14 6.05561011764204e-14 3.8664 -0.4 -0.0002971951 -3.8664 1.86622003625497e-14 4.23268008222807e-14 6.30769012253919e-14 3.8667 -0.2 -0.7299589 -3.8664 2.42145004704139e-14 4.25615008268402e-14 6.87130013348841e-14 4.5963 -5.55111512312578e-17 -3.8664 -3.8664 4.28065008315998e-14 4.28065008315998e-14 8.71966016939642e-14 7.7327 0.2 -3.8664 -3.8663 6.55658012737436e-14 4.29608008345974e-14 1.09846702133987e-13 7.7327 -1.2 2.76204e-05 -3.8664 1.26964002466524e-14 4.22112008200349e-14 5.69717011067865e-14 3.8664 -1 2.60267e-05 -3.8664 1.35308002628622e-14 4.22386008205672e-14 5.78395011236452e-14 3.8664 -0.8 2.44862e-05 -3.8664 1.46277002841716e-14 4.22668008211151e-14 5.8970601145619e-14 3.8664 -0.6 2.30805e-05 -3.8664 1.61780003142892e-14 4.22957008216765e-14 6.05561011764204e-14 3.8664 -0.4 -0.0002971951 -3.8664 1.86622003625497e-14 4.23268008222807e-14 6.30769012253919e-14 3.8667 -0.2 -0.7299589 -3.8664 2.42145004704139e-14 4.25615008268402e-14 6.87130013348841e-14 4.5963 -5.55111512312578e-17 -3.8664 -3.8664 4.28065008315998e-14 4.28065008315998e-14 8.71966016939642e-14 7.7327 0.2 -3.8664 -3.8663 6.55658012737436e-14 4.29608008345974e-14 1.09846702133987e-13 7.7327 -1.2 3.10018e-05 -5.2005 1.25433002436781e-14 4.19600008151549e-14 5.6454301096735e-14 5.2005 -1 2.92866e-05 -5.2005 1.33740002598161e-14 4.19816008155745e-14 5.7312801113413e-14 5.2005 -0.8 2.7557e-05 -5.2005 1.44671002810517e-14 4.20039008160077e-14 5.84345011352042e-14 5.2005 -0.6 2.5877e-05 -5.2005 1.60135003110935e-14 4.20267008164507e-14 6.00101011658133e-14 5.2005 -0.4 2.45765e-05 -5.2005 1.84914003592315e-14 4.20501008169053e-14 6.251830121454e-14 5.2005 -0.2 -0.0020509 -5.2005 2.38039004624372e-14 4.2122100818304e-14 6.78519013181556e-14 5.2025 -5.55111512312578e-17 -5.2005 -5.2005 4.28945008333094e-14 4.28945008333094e-14 8.74686016992483e-14 10.4009 0.2 -5.2005 -5.2004 6.54411012713211e-14 4.28164008317921e-14 1.09674502130641e-13 10.4009 -1.2 3.10018e-05 -5.2005 1.25433002436781e-14 4.19600008151549e-14 5.6454301096735e-14 5.2005 -1 2.92866e-05 -5.2005 1.33740002598161e-14 4.19816008155745e-14 5.7312801113413e-14 5.2005 -0.8 2.7557e-05 -5.2005 1.44671002810517e-14 4.20039008160077e-14 5.84345011352042e-14 5.2005 -0.6 2.5877e-05 -5.2005 1.60135003110935e-14 4.20267008164507e-14 6.00101011658133e-14 5.2005 -0.4 2.45765e-05 -5.2005 1.84914003592315e-14 4.20501008169053e-14 6.251830121454e-14 5.2005 -0.2 -0.0020509 -5.2005 2.38039004624372e-14 4.2122100818304e-14 6.78519013181556e-14 5.2025 -5.55111512312578e-17 -5.2005 -5.2005 4.28945008333094e-14 4.28945008333094e-14 8.74686016992483e-14 10.4009 0.2 -5.2005 -5.2004 6.54411012713211e-14 4.28164008317921e-14 1.09674502130641e-13 10.4009 -1.2 3.10018e-05 -5.2005 1.25433002436781e-14 4.19600008151549e-14 5.6454301096735e-14 5.2005 -1 2.92866e-05 -5.2005 1.33740002598161e-14 4.19816008155745e-14 5.7312801113413e-14 5.2005 -0.8 2.7557e-05 -5.2005 1.44671002810517e-14 4.20039008160077e-14 5.84345011352042e-14 5.2005 -0.6 2.5877e-05 -5.2005 1.60135003110935e-14 4.20267008164507e-14 6.00101011658133e-14 5.2005 -0.4 2.45765e-05 -5.2005 1.84914003592315e-14 4.20501008169053e-14 6.251830121454e-14 5.2005 -0.2 -0.0020509 -5.2005 2.38039004624372e-14 4.2122100818304e-14 6.78519013181556e-14 5.2025 -5.55111512312578e-17 -5.2005 -5.2005 4.28945008333094e-14 4.28945008333094e-14 8.74686016992483e-14 10.4009 0.2 -5.2005 -5.2004 6.54411012713211e-14 4.28164008317921e-14 1.09674502130641e-13 10.4009 -1.2 3.10018e-05 -5.2005 1.25433002436781e-14 4.19600008151549e-14 5.6454301096735e-14 5.2005 -1 2.92866e-05 -5.2005 1.33740002598161e-14 4.19816008155745e-14 5.7312801113413e-14 5.2005 -0.8 2.7557e-05 -5.2005 1.44671002810517e-14 4.20039008160077e-14 5.84345011352042e-14 5.2005 -0.6 2.5877e-05 -5.2005 1.60135003110935e-14 4.20267008164507e-14 6.00101011658133e-14 5.2005 -0.4 2.45765e-05 -5.2005 1.84914003592315e-14 4.20501008169053e-14 6.251830121454e-14 5.2005 -0.2 -0.0020509 -5.2005 2.38039004624372e-14 4.2122100818304e-14 6.78519013181556e-14 5.2025 -5.55111512312578e-17 -5.2005 -5.2005 4.28945008333094e-14 4.28945008333094e-14 8.74686016992483e-14 10.4009 0.2 -5.2005 -5.2004 6.54411012713211e-14 4.28164008317921e-14 1.09674502130641e-13 10.4009 -1.2 2.04926e-05 -2.7425 1.27584002478568e-14 4.23171008220923e-14 5.72368011119366e-14 2.7425 -1 1.93999e-05 -2.7425 1.35999002642046e-14 4.2356000822848e-14 5.81249011291896e-14 2.7425 -0.8 8.417e-06 -2.7425 1.47043002856597e-14 4.23962008236289e-14 5.92775011515811e-14 2.7425 -0.6 -0.0024445 -2.7425 1.62630003159405e-14 4.2437900824439e-14 6.08855011828197e-14 2.7450 -0.4 -0.5936227 -2.7425 1.87869003649722e-14 4.24899008254492e-14 6.34418012324808e-14 3.3361 -0.2 -2.7425 -2.7425 2.43847004737204e-14 4.26082008277474e-14 6.88204013369706e-14 5.4850 -5.55111512312578e-17 -2.7425 -2.7425 4.28730008328917e-14 4.28730008328917e-14 8.72435016948753e-14 5.4850 0.2 -2.7425 -2.7425 6.57525012773706e-14 4.31617008385003e-14 1.10185902140576e-13 5.4850 -1.2 2.04926e-05 -2.7425 1.27584002478568e-14 4.23171008220923e-14 5.72368011119366e-14 2.7425 -1 1.93999e-05 -2.7425 1.35999002642046e-14 4.2356000822848e-14 5.81249011291896e-14 2.7425 -0.8 8.417e-06 -2.7425 1.47043002856597e-14 4.23962008236289e-14 5.92775011515811e-14 2.7425 -0.6 -0.0024445 -2.7425 1.62630003159405e-14 4.2437900824439e-14 6.08855011828197e-14 2.7450 -0.4 -0.5936227 -2.7425 1.87869003649722e-14 4.24899008254492e-14 6.34418012324808e-14 3.3361 -0.2 -2.7425 -2.7425 2.43847004737204e-14 4.26082008277474e-14 6.88204013369706e-14 5.4850 -5.55111512312578e-17 -2.7425 -2.7425 4.28730008328917e-14 4.28730008328917e-14 8.72435016948753e-14 5.4850 0.2 -2.7425 -2.7425 6.57525012773706e-14 4.31617008385003e-14 1.10185902140576e-13 5.4850 -1.2 2.04926e-05 -2.7425 1.27584002478568e-14 4.23171008220923e-14 5.72368011119366e-14 2.7425 -1 1.93999e-05 -2.7425 1.35999002642046e-14 4.2356000822848e-14 5.81249011291896e-14 2.7425 -0.8 8.417e-06 -2.7425 1.47043002856597e-14 4.23962008236289e-14 5.92775011515811e-14 2.7425 -0.6 -0.0024445 -2.7425 1.62630003159405e-14 4.2437900824439e-14 6.08855011828197e-14 2.7450 -0.4 -0.5936227 -2.7425 1.87869003649722e-14 4.24899008254492e-14 6.34418012324808e-14 3.3361 -0.2 -2.7425 -2.7425 2.43847004737204e-14 4.26082008277474e-14 6.88204013369706e-14 5.4850 -5.55111512312578e-17 -2.7425 -2.7425 4.28730008328917e-14 4.28730008328917e-14 8.72435016948753e-14 5.4850 0.2 -2.7425 -2.7425 6.57525012773706e-14 4.31617008385003e-14 1.10185902140576e-13 5.4850 -1.2 2.04926e-05 -2.7425 1.27584002478568e-14 4.23171008220923e-14 5.72368011119366e-14 2.7425 -1 1.93999e-05 -2.7425 1.35999002642046e-14 4.2356000822848e-14 5.81249011291896e-14 2.7425 -0.8 8.417e-06 -2.7425 1.47043002856597e-14 4.23962008236289e-14 5.92775011515811e-14 2.7425 -0.6 -0.0024445 -2.7425 1.62630003159405e-14 4.2437900824439e-14 6.08855011828197e-14 2.7450 -0.4 -0.5936227 -2.7425 1.87869003649722e-14 4.24899008254492e-14 6.34418012324808e-14 3.3361 -0.2 -2.7425 -2.7425 2.43847004737204e-14 4.26082008277474e-14 6.88204013369706e-14 5.4850 -5.55111512312578e-17 -2.7425 -2.7425 4.28730008328917e-14 4.28730008328917e-14 8.72435016948753e-14 5.4850 0.2 -2.7425 -2.7425 6.57525012773706e-14 4.31617008385003e-14 1.10185902140576e-13 5.4850 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_ig_sw.standard0000644000175000017500000000626514163340332024702 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.90476003700368e-14 8.58910016686003e-15 8.58910016686003e-15 -0.8 0. 1.89262003676784e-14 8.46360016442195e-15 8.46360016442195e-15 -0.4 0. 1.62893003164514e-14 6.96320013527375e-15 6.96320013527375e-15 1.11022302462516e-16 0. 9.37120018205385e-15 2.88760005609727e-15 2.88760005609727e-15 0.4 0. 9.58870018627921e-15 2.55830004969997e-15 2.55830004969997e-15 0.8 0. 1.0997300213644e-14 2.26180004393988e-15 2.26180004393988e-15 1.2 0. 1.60495003117929e-14 1.80740003511227e-15 1.80740003511227e-15 -1.2 0.0165776 1.50867002930886e-14 9.3521001816828e-15 3.68110007151255e-15 -0.8 0.0132999 1.47713002869613e-14 9.33510018135254e-15 3.22450006264221e-15 -0.4 0.0056492 1.33394002591439e-14 8.05240015643359e-15 2.81130005461499e-15 1.11022302462516e-16 9.1349e-06 8.59730016701933e-15 2.48230004822352e-15 2.79390005427696e-15 0.4 4.598343e-10 8.86920017230152e-15 2.20840004290248e-15 2.59250005036437e-15 0.8 5.52362e-14 1.00029001943259e-14 2.01190003908508e-15 2.35040004566111e-15 1.2 6.47884e-17 1.41212002743319e-14 1.71650003334636e-15 1.87860003649547e-15 -1.2 0. 1.92019003730344e-14 8.6300001676546e-15 8.6300001676546e-15 -0.8 0. 1.91790003725895e-14 8.55700016623643e-15 8.55700016623643e-15 -0.4 0. 1.63566003177589e-14 6.97460013549522e-15 6.97460013549522e-15 1.11022302462516e-16 0. 9.30050018068036e-15 2.88030005595545e-15 2.88030005595545e-15 0.4 0. 9.46700018391495e-15 2.55430004962226e-15 2.55430004962226e-15 0.8 0. 1.06695002072759e-14 2.26750004405061e-15 2.26750004405061e-15 1.2 0. 1.59971003107749e-14 1.77950003457026e-15 1.77950003457026e-15 -1.2 0.0272268 1.51765002948331e-14 9.42530018310485e-15 3.65410007098802e-15 -0.8 0.0220707 1.49251002899492e-14 9.47410018405288e-15 3.20210006220704e-15 -0.4 0.008243 1.35324002628933e-14 8.25430016035589e-15 2.78900005418177e-15 1.11022302462516e-16 5.976274e-07 8.52680016564973e-15 2.44630004752415e-15 2.80240005444209e-15 0.4 8.382037e-13 8.77400017045208e-15 2.18990004254308e-15 2.60360005058001e-15 0.8 3.4291e-18 9.77110018982269e-15 1.99630003878202e-15 2.37180004607684e-15 1.2 2.299e-22 1.38719002694887e-14 1.66590003236336e-15 1.91370003717736e-15 -1.2 0. 1.88072003653666e-14 8.52320016557979e-15 8.52320016557979e-15 -0.8 0. 1.85382003601407e-14 8.31660016156618e-15 8.31660016156618e-15 -0.4 0. 1.60117003110585e-14 6.84750013302605e-15 6.84750013302605e-15 1.11022302462516e-16 0. 9.5505001855371e-15 2.93380005699479e-15 2.93380005699479e-15 0.4 0. 9.807200190524e-15 2.56460004982236e-15 2.56460004982236e-15 0.8 0. 1.15775002249155e-14 2.25320004377281e-15 2.25320004377281e-15 1.2 0. 1.60250003113169e-14 1.85920003611859e-15 1.85920003611859e-15 -1.2 0.0091527 1.49559002905475e-14 9.23790017946424e-15 3.73020007246642e-15 -0.8 0.0072337 1.45315002823027e-14 9.11890017715243e-15 3.25270006319005e-15 -0.4 0.0034398 1.30481002534848e-14 7.74500015046174e-15 2.839200055157e-15 1.11022302462516e-16 6.23202e-05 8.82880017151667e-15 2.67880005204092e-15 2.77270005386511e-15 0.4 6.71214e-08 9.03760017557302e-15 2.23940004350472e-15 2.57370004999915e-15 0.8 1.401813e-10 1.04210002024483e-14 2.03960003962321e-15 2.31250004492483e-15 1.2 1.5712e-12 1.42948002777044e-14 1.82130003538231e-15 1.83460003564069e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_core_lt.standard0000644000175000017500000001565714163340332025336 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -5.8223e-06 0. 0. 5.8223e-06 -1.10000 -5.6264e-06 0. 0. 5.6264e-06 -1.00000 -5.4318e-06 0. 0. 5.4318e-06 -0.9 -5.2391e-06 0. 0. 5.2391e-06 -0.8 -5.0494e-06 0. 0. 5.0494e-06 -0.7 -4.865e-06 0. 0. 4.865e-06 -0.6 -4.6916e-06 0. 0. 4.6916e-06 -0.5 -4.5422e-06 0. 0. 4.5422e-06 -0.4 -4.4381e-06 0. 0. 4.4381e-06 -0.3 -4.388e-06 0. 0. 4.388e-06 -0.2 -4.2822e-06 0. 0. 4.2822e-06 -0.1 -3.2977e-06 0. 0. 3.2977e-06 2.220446e-16 9.000e-21 0. 0. -9.000e-21 -1.20000 -9.3059e-06 0. 0. 9.3059e-06 -1.10000 -9.0026e-06 0. 0. 9.0026e-06 -1.00000 -8.7013e-06 0. 0. 8.7013e-06 -0.9 -8.4036e-06 0. 0. 8.4036e-06 -0.8 -8.1126e-06 0. 0. 8.1126e-06 -0.7 -7.8348e-06 0. 0. 7.8348e-06 -0.6 -7.5843e-06 0. 0. 7.5843e-06 -0.5 -7.3862e-06 0. 0. 7.3862e-06 -0.4 -7.2671e-06 0. 0. 7.2671e-06 -0.3 -7.1976e-06 0. 0. 7.1976e-06 -0.2 -6.7716e-06 0. 0. 6.7716e-06 -0.1 -4.7079e-06 0. 0. 4.7079e-06 2.220446e-16 1.178e-20 0. 0. -1.178e-20 -1.20000 -2.25314e-05 0. 0. 2.25314e-05 -1.10000 -2.18092e-05 0. 0. 2.18092e-05 -1.00000 -2.11051e-05 0. 0. 2.11051e-05 -0.9 -2.04336e-05 0. 0. 2.04336e-05 -0.8 -1.98193e-05 0. 0. 1.98193e-05 -0.7 -1.93004e-05 0. 0. 1.93004e-05 -0.6 -1.89201e-05 0. 0. 1.89201e-05 -0.5 -1.86863e-05 0. 0. 1.86863e-05 -0.4 -1.83807e-05 0. 0. 1.83807e-05 -0.3 -1.70671e-05 0. 0. 1.70671e-05 -0.2 -1.37241e-05 0. 0. 1.37241e-05 -0.1 -8.0303e-06 0. 0. 8.0303e-06 2.220446e-16 1.617e-20 0. 0. -1.617e-20 -1.20000 -4.005e-05 0. 0. 4.005e-05 -1.10000 -3.88382e-05 0. 0. 3.88382e-05 -1.00000 -3.77299e-05 0. 0. 3.77299e-05 -0.9 -3.67729e-05 0. 0. 3.67729e-05 -0.8 -3.60166e-05 0. 0. 3.60166e-05 -0.7 -3.54766e-05 0. 0. 3.54766e-05 -0.6 -3.49791e-05 0. 0. 3.49791e-05 -0.5 -3.37913e-05 0. 0. 3.37913e-05 -0.4 -3.09909e-05 0. 0. 3.09909e-05 -0.3 -2.61529e-05 0. 0. 2.61529e-05 -0.2 -1.92722e-05 0. 0. 1.92722e-05 -0.1 -1.05022e-05 0. 0. 1.05022e-05 2.220446e-16 2.568e-20 0. 0. -2.568e-20 -1.20000 -5.96679e-05 0. 0. 5.96679e-05 -1.10000 -5.82143e-05 0. 0. 5.82143e-05 -1.00000 -5.70189e-05 0. 0. 5.70189e-05 -0.9 -5.6089e-05 0. 0. 5.6089e-05 -0.8 -5.52407e-05 0. 0. 5.52407e-05 -0.7 -5.3859e-05 0. 0. 5.3859e-05 -0.6 -5.11967e-05 0. 0. 5.11967e-05 -0.5 -4.68086e-05 0. 0. 4.68086e-05 -0.4 -4.05827e-05 0. 0. 4.05827e-05 -0.3 -3.26159e-05 0. 0. 3.26159e-05 -0.2 -2.30859e-05 0. 0. 2.30859e-05 -0.1 -1.21684e-05 0. 0. 1.21684e-05 2.220446e-16 2.808e-20 0. 0. -2.808e-20 -1.20000 -4.9085e-06 0. 0. 4.9085e-06 -1.10000 -4.7419e-06 0. 0. 4.7419e-06 -1.00000 -4.5765e-06 0. 0. 4.5765e-06 -0.9 -4.412e-06 0. 0. 4.412e-06 -0.8 -4.2488e-06 0. 0. 4.2488e-06 -0.7 -4.087e-06 0. 0. 4.087e-06 -0.6 -3.9272e-06 0. 0. 3.9272e-06 -0.5 -3.772e-06 0. 0. 3.772e-06 -0.4 -3.6295e-06 0. 0. 3.6295e-06 -0.3 -3.5231e-06 0. 0. 3.5231e-06 -0.2 -3.4698e-06 0. 0. 3.4698e-06 -0.1 -3.0694e-06 0. 0. 3.0694e-06 2.220446e-16 8.832e-21 0. 0. -8.832e-21 -1.20000 -9.8569e-06 0. 0. 9.8569e-06 -1.10000 -9.543e-06 0. 0. 9.543e-06 -1.00000 -9.2299e-06 0. 0. 9.2299e-06 -0.9 -8.9176e-06 0. 0. 8.9176e-06 -0.8 -8.6069e-06 0. 0. 8.6069e-06 -0.7 -8.299e-06 0. 0. 8.299e-06 -0.6 -7.9977e-06 0. 0. 7.9977e-06 -0.5 -7.7135e-06 0. 0. 7.7135e-06 -0.4 -7.4747e-06 0. 0. 7.4747e-06 -0.3 -7.3288e-06 0. 0. 7.3288e-06 -0.2 -7.176e-06 0. 0. 7.176e-06 -0.1 -5.527e-06 0. 0. 5.527e-06 2.220446e-16 1.095e-20 0. 0. -1.095e-20 -1.20000 -3.09302e-05 0. 0. 3.09302e-05 -1.10000 -2.99473e-05 0. 0. 2.99473e-05 -1.00000 -2.89707e-05 0. 0. 2.89707e-05 -0.9 -2.80073e-05 0. 0. 2.80073e-05 -0.8 -2.70712e-05 0. 0. 2.70712e-05 -0.7 -2.61916e-05 0. 0. 2.61916e-05 -0.6 -2.54245e-05 0. 0. 2.54245e-05 -0.5 -2.48524e-05 0. 0. 2.48524e-05 -0.4 -2.44763e-05 0. 0. 2.44763e-05 -0.3 -2.34134e-05 0. 0. 2.34134e-05 -0.2 -1.94823e-05 0. 0. 1.94823e-05 -0.1 -1.16619e-05 0. 0. 1.16619e-05 2.220446e-16 1.729e-20 0. 0. -1.729e-20 -1.20000 -6.03745e-05 0. 0. 6.03745e-05 -1.10000 -5.84368e-05 0. 0. 5.84368e-05 -1.00000 -5.6575e-05 0. 0. 5.6575e-05 -0.9 -5.48422e-05 0. 0. 5.48422e-05 -0.8 -5.3319e-05 0. 0. 5.3319e-05 -0.7 -5.2102e-05 0. 0. 5.2102e-05 -0.6 -5.11907e-05 0. 0. 5.11907e-05 -0.5 -4.98783e-05 0. 0. 4.98783e-05 -0.4 -4.64678e-05 0. 0. 4.64678e-05 -0.3 -3.9782e-05 0. 0. 3.9782e-05 -0.2 -2.96202e-05 0. 0. 2.96202e-05 -0.1 -1.62484e-05 0. 0. 1.62484e-05 2.220446e-16 2.909e-20 0. 0. -2.909e-20 -1.20000 -9.34859e-05 0. 0. 9.34859e-05 -1.10000 -9.07769e-05 0. 0. 9.07769e-05 -1.00000 -8.83841e-05 0. 0. 8.83841e-05 -0.9 -8.63978e-05 0. 0. 8.63978e-05 -0.8 -8.47582e-05 0. 0. 8.47582e-05 -0.7 -8.2784e-05 0. 0. 8.2784e-05 -0.6 -7.92106e-05 0. 0. 7.92106e-05 -0.5 -7.30122e-05 0. 0. 7.30122e-05 -0.4 -6.37637e-05 0. 0. 6.37637e-05 -0.3 -5.15342e-05 0. 0. 5.15342e-05 -0.2 -3.66224e-05 0. 0. 3.66224e-05 -0.1 -1.93536e-05 0. 0. 1.93536e-05 2.220446e-16 3.377e-20 0. 0. -3.377e-20 -1.20000 -6.0011e-06 0. 0. 6.0011e-06 -1.10000 -5.8014e-06 0. 0. 5.8014e-06 -1.00000 -5.6072e-06 0. 0. 5.6072e-06 -0.9 -5.422e-06 0. 0. 5.422e-06 -0.8 -5.2522e-06 0. 0. 5.2522e-06 -0.7 -5.1077e-06 0. 0. 5.1077e-06 -0.6 -5.0006e-06 0. 0. 5.0006e-06 -0.5 -4.9374e-06 0. 0. 4.9374e-06 -0.4 -4.9046e-06 0. 0. 4.9046e-06 -0.3 -4.8191e-06 0. 0. 4.8191e-06 -0.2 -4.3311e-06 0. 0. 4.3311e-06 -0.1 -2.8466e-06 0. 0. 2.8466e-06 2.220446e-16 1.163e-20 0. 0. -1.163e-20 -1.20000 -8.2074e-06 0. 0. 8.2074e-06 -1.10000 -7.9414e-06 0. 0. 7.9414e-06 -1.00000 -7.6856e-06 0. 0. 7.6856e-06 -0.9 -7.4465e-06 0. 0. 7.4465e-06 -0.8 -7.2346e-06 0. 0. 7.2346e-06 -0.7 -7.0641e-06 0. 0. 7.0641e-06 -0.6 -6.9475e-06 0. 0. 6.9475e-06 -0.5 -6.8842e-06 0. 0. 6.8842e-06 -0.4 -6.8366e-06 0. 0. 6.8366e-06 -0.3 -6.6152e-06 0. 0. 6.6152e-06 -0.2 -5.6883e-06 0. 0. 5.6883e-06 -0.1 -3.532e-06 0. 0. 3.532e-06 2.220446e-16 1.377e-20 0. 0. -1.377e-20 -1.20000 -1.54241e-05 0. 0. 1.54241e-05 -1.10000 -1.4968e-05 0. 0. 1.4968e-05 -1.00000 -1.45554e-05 0. 0. 1.45554e-05 -0.9 -1.42046e-05 0. 0. 1.42046e-05 -0.8 -1.39339e-05 0. 0. 1.39339e-05 -0.7 -1.37522e-05 0. 0. 1.37522e-05 -0.6 -1.36433e-05 0. 0. 1.36433e-05 -0.5 -1.35104e-05 0. 0. 1.35104e-05 -0.4 -1.30119e-05 0. 0. 1.30119e-05 -0.3 -1.16318e-05 0. 0. 1.16318e-05 -0.2 -9.0349e-06 0. 0. 9.0349e-06 -0.1 -5.1053e-06 0. 0. 5.1053e-06 2.220446e-16 1.447e-20 0. 0. -1.447e-20 -1.20000 -2.46747e-05 0. 0. 2.46747e-05 -1.10000 -2.40939e-05 0. 0. 2.40939e-05 -1.00000 -2.36215e-05 0. 0. 2.36215e-05 -0.9 -2.32695e-05 0. 0. 2.32695e-05 -0.8 -2.30283e-05 0. 0. 2.30283e-05 -0.7 -2.28227e-05 0. 0. 2.28227e-05 -0.6 -2.23839e-05 0. 0. 2.23839e-05 -0.5 -2.12641e-05 0. 0. 2.12641e-05 -0.4 -1.91407e-05 0. 0. 1.91407e-05 -0.3 -1.59112e-05 0. 0. 1.59112e-05 -0.2 -1.15995e-05 0. 0. 1.15995e-05 -0.1 -6.2558e-06 0. 0. 6.2558e-06 2.220446e-16 2.157e-20 0. 0. -2.157e-20 -1.20000 -3.52418e-05 0. 0. 3.52418e-05 -1.10000 -3.46881e-05 0. 0. 3.46881e-05 -1.00000 -3.42734e-05 0. 0. 3.42734e-05 -0.9 -3.39272e-05 0. 0. 3.39272e-05 -0.8 -3.34156e-05 0. 0. 3.34156e-05 -0.7 -3.23577e-05 0. 0. 3.23577e-05 -0.6 -3.04519e-05 0. 0. 3.04519e-05 -0.5 -2.75691e-05 0. 0. 2.75691e-05 -0.4 -2.37095e-05 0. 0. 2.37095e-05 -0.3 -1.89406e-05 0. 0. 1.89406e-05 -0.2 -1.33502e-05 0. 0. 1.33502e-05 -0.1 -7.012e-06 0. 0. 7.012e-06 2.220446e-16 2.363e-20 0. 0. -2.363e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_core_lt.standard0000644000175000017500000000711414163340332025534 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258.93 4.59303216537423e-15 3.20280786522017e-15 5.48426090908113e-16 1584.89 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995.26 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511.89 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162.28 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981.07 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011.87 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309.57 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943.28 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589.25 4.59305419989505e-15 3.20282058562792e-15 5.48429533273533e-16 15848.93 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952.62 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118.86 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622.78 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810.72 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118.72 4.59312826999807e-15 3.20286862079649e-15 5.48429486692448e-16 63095.73 4.59310377859218e-15 3.20273703535532e-15 5.48429556485134e-16 79432.82 4.59314917365216e-15 3.20282191331486e-15 5.48429304591349e-16 100000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 125892.54 4.59301102152014e-15 3.20275635735849e-15 5.48429359020306e-16 158489.32 4.59300903501707e-15 3.20279483499135e-15 5.48429359492188e-16 199526.23 4.59303058959939e-15 3.20278154657951e-15 5.48429357426682e-16 251188.64 4.59308230645884e-15 3.20282128138925e-15 5.48429398703038e-16 316227.77 4.59304383880213e-15 3.20280003035121e-15 5.48437417394552e-16 398107.17 4.5930625695156e-15 3.20283060106835e-15 5.48417027840674e-16 501187.23 4.59306448389069e-15 3.2028049179071e-15 5.48418974521165e-16 630957.34 4.5930530386915e-15 3.20281250539176e-15 5.48428008255517e-16 794328.23 4.59304881807746e-15 3.20282179235144e-15 5.48436897718134e-16 1000000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258930 4.59303216537423e-15 3.20280786522017e-15 5.48426090908114e-16 1584890 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995260 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511890 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162280 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981070 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011870 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309570 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943280 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589250 4.59305419989505e-15 3.20282058562791e-15 5.48429533273533e-16 15848930 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952620 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118860 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622780 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810720 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118720 4.59312826999806e-15 3.20286862079649e-15 5.48429486692448e-16 63095730 4.59310377859218e-15 3.20273703535532e-15 5.4842930424153e-16 79432820 4.59314917365216e-15 3.20282191331486e-15 5.48429504955561e-16 100000000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2d_lw.standard0000644000175000017500000004326614163340332025145 0ustar carstencarstenFreq N(d) 100.00000 2.6232661225e-22 125.89254 2.0928540889e-22 158.48932 1.6715386944e-22 199.52623 1.3368678129e-22 251.18864 1.0710387081e-22 316.22777 8.5988529e-23 398.10717 6.921574416e-23 501.18723 5.589207121e-23 630.95734 4.530905344e-23 794.32823 3.690319504e-23 1000 3.022580484e-23 1258.93 2.492206084e-23 1584.89 2.070887049e-23 1995.26 1.736222224e-23 2511.89 1.470339025e-23 3162.28 1.259185225e-23 3981.07 1.091509444e-23 5011.87 9.58273936e-24 6309.57 8.52406416e-24 7943.28 7.68342961e-24 10000 7.01614144e-24 12589.25 6.48568089e-24 15848.93 6.06439876e-24 19952.62 5.72932096e-24 25118.86 5.46343876e-24 31622.78 5.25234724e-24 39810.72 5.08457401e-24 50118.72 4.95151504e-24 63095.73 4.84572169e-24 79432.82 4.76156041e-24 100000 4.69502224e-24 125892.54 4.64187025e-24 158489.32 4.59973809e-24 199526.23 4.56634161e-24 251188.64 4.53945636e-24 316227.77 4.51860049e-24 398107.17 4.50161089e-24 501187.23 4.48846596e-24 630957.34 4.47787921e-24 794328.23 4.46941881e-24 1000000 4.46265625e-24 1258930 4.45758769e-24 1584890 4.45336609e-24 1995260 4.44999025e-24 2511890 4.44745921e-24 3162280 4.44535056e-24 3981070 4.443664e-24 5011870 4.44197776e-24 6309570 4.44113476e-24 7943280 4.44029184e-24 10000000 4.439449e-24 12589250 4.43902761e-24 15848930 4.43860624e-24 19952620 4.43818489e-24 25118860 4.43818489e-24 31622780 4.43776356e-24 39810720 4.43776356e-24 50118720 4.43734225e-24 63095730 4.43734225e-24 79432820 4.43734225e-24 100000000 4.43734225e-24 100.00000 1.67672232484e-21 125.89254 1.33498890625e-21 158.48932 1.06352949924e-21 199.52623 8.4791033721e-22 251.18864 6.7663454884e-22 316.22777 5.4058575025e-22 398.10717 4.32515209e-22 501.18723 3.4667460864e-22 630.95734 2.78489344e-22 794.32823 2.2432850176e-22 1000 1.8130353201e-22 1258.93 1.4712962209e-22 1584.89 1.1998573444e-22 1995.26 9.842227264e-23 2511.89 8.129546896e-23 3162.28 6.769011076e-23 3981.07 5.688327241e-23 5011.87 4.829972004e-23 6309.57 4.148132836e-23 7943.28 3.606482916e-23 10000 3.176224164e-23 12589.25 2.8344976e-23 15848.93 2.563093129e-23 19952.62 2.347499401e-23 25118.86 2.1762225e-23 31622.78 2.040148224e-23 39810.72 1.932042025e-23 50118.72 1.846249024e-23 63095.73 1.778055889e-23 79432.82 1.7239104e-23 100000 1.680836004e-23 125892.54 1.646655241e-23 158489.32 1.619499049e-23 199526.23 1.598000625e-23 251188.64 1.5808576e-23 316227.77 1.567209744e-23 398107.17 1.556460304e-23 501187.23 1.547871649e-23 630957.34 1.541033536e-23 794328.23 1.535620969e-23 1000000 1.531313424e-23 1258930 1.527871744e-23 1584890 1.525214916e-23 1995260 1.523028676e-23 2511890 1.521312016e-23 3162280 1.519986169e-23 3981070 1.518894729e-23 5011870 1.518037444e-23 6309570 1.517336209e-23 7943280 1.516790916e-23 10000000 1.5163236e-23 12589250 1.516012096e-23 15848930 1.515778489e-23 19952620 1.5155449e-23 25118860 1.515389184e-23 31622780 1.515233476e-23 39810720 1.515077776e-23 50118720 1.514999929e-23 63095730 1.514999929e-23 79432820 1.514922084e-23 100000000 1.514844241e-23 100.00000 3.21399420241e-21 125.89254 2.55786097009e-21 158.48932 2.03668079616e-21 199.52623 1.62268786276e-21 251.18864 1.29384809401e-21 316.22777 1.03263894409e-21 398.10717 8.2515435025e-22 501.18723 6.6034094841e-22 630.95734 5.2942788649e-22 794.32823 4.2543600121e-22 1000 3.4283484964e-22 1258.93 2.772225e-22 1584.89 2.2510501225e-22 1995.26 1.8370549444e-22 2511.89 1.50822961e-22 3162.28 1.24701889e-22 3981.07 1.0395229849e-22 5011.87 8.747112676e-23 6309.57 7.438027536e-23 7943.28 6.398080144e-23 10000 5.572025316e-23 12589.25 4.915972996e-23 15848.93 4.394761849e-23 19952.62 3.980726649e-23 25118.86 3.651905761e-23 31622.78 3.3907329e-23 39810.72 3.1832164e-23 50118.72 3.0184036e-23 63095.73 2.887450225e-23 79432.82 2.783512081e-23 100000 2.7008809e-23 125892.54 2.635282225e-23 158489.32 2.583180625e-23 199526.23 2.541773056e-23 251188.64 2.508907921e-23 316227.77 2.482729929e-23 398107.17 2.462045161e-23 501187.23 2.445500304e-23 630957.34 2.4324624e-23 794328.23 2.422017796e-23 1000000 2.4137569e-23 1258930 2.407276096e-23 1584890 2.4019801e-23 1995260 2.397865024e-23 2511890 2.394634225e-23 3162280 2.391992464e-23 3981070 2.389938769e-23 5011870 2.3882769e-23 6309570 2.386908736e-23 7943280 2.385931716e-23 10000000 2.385052569e-23 12589250 2.384466561e-23 15848930 2.383880625e-23 19952620 2.383490041e-23 25118860 2.383197124e-23 31622780 2.382904225e-23 39810720 2.382708969e-23 50118720 2.382513721e-23 63095730 2.3824161e-23 79432820 2.382318481e-23 100000000 2.382220864e-23 100.00000 4.44668917225e-21 125.89254 3.53827487556e-21 158.48932 2.81671148529e-21 199.52623 2.24354742921e-21 251.18864 1.78826648641e-21 316.22777 1.42662577849e-21 398.10717 1.13936627025e-21 501.18723 9.1118252164e-22 630.95734 7.2993449929e-22 794.32823 5.8595948356e-22 1000 4.7159768569e-22 1258.93 3.80757169e-22 1584.89 3.0860300241e-22 1995.26 2.51285904e-22 2511.89 2.0575894249e-22 3162.28 1.6959331984e-22 3981.07 1.4086603969e-22 5011.87 1.18048225e-22 6309.57 9.992401444e-23 7943.28 8.552735361e-23 10000 7.409077776e-23 12589.25 6.500713129e-23 15848.93 5.7790404e-23 19952.62 5.205911104e-23 25118.86 4.750655625e-23 31622.78 4.3890625e-23 39810.72 4.101762025e-23 50118.72 3.873568644e-23 63095.73 3.692263696e-23 79432.82 3.548346624e-23 100000 3.43396e-23 125892.54 3.3431524e-23 158489.32 3.271039249e-23 199526.23 3.213642721e-23 251188.64 3.168113796e-23 316227.77 3.131969296e-23 398107.17 3.103269849e-23 501187.23 3.080472004e-23 630957.34 3.062294244e-23 794328.23 3.047923264e-23 1000000 3.036450816e-23 1258930 3.027420484e-23 1584890 3.020161936e-23 1995260 3.014449216e-23 2511890 3.009948769e-23 3162280 3.0063289e-23 3981070 3.003368809e-23 5011870 3.001177089e-23 6309570 2.999314756e-23 7943280 2.997891009e-23 10000000 2.996686564e-23 12589250 2.995810756e-23 15848930 2.995153984e-23 19952620 2.994497284e-23 25118860 2.994059524e-23 31622780 2.993731225e-23 39810720 2.993402944e-23 50118720 2.9931841e-23 63095730 2.992965264e-23 79432820 2.992855849e-23 100000000 2.992746436e-23 100.00000 2.9741761764e-22 125.89254 2.36913664e-22 158.48932 1.8885355776e-22 199.52623 1.50675625e-22 251.18864 1.2035187025e-22 316.22777 9.626356996e-23 398.10717 7.713054976e-23 501.18723 6.193217809e-23 630.95734 4.986054544e-23 794.32823 4.0271716e-23 1000 3.265436736e-23 1258.93 2.660393241e-23 1584.89 2.179769344e-23 1995.26 1.798014409e-23 2511.89 1.494750244e-23 3162.28 1.2538681e-23 3981.07 1.062564409e-23 5011.87 9.10530625e-24 6309.57 7.89834816e-24 7943.28 6.93953649e-24 10000 6.17771025e-24 12589.25 5.57243236e-24 15848.93 5.09179225e-24 19952.62 4.71020209e-24 25118.86 4.40706049e-24 31622.78 4.16608921e-24 39810.72 3.97483969e-24 50118.72 3.82280704e-24 63095.73 3.70216081e-24 79432.82 3.606201e-24 100000 3.52988944e-24 125892.54 3.46965129e-24 158489.32 3.42139009e-24 199526.23 3.38339236e-24 251188.64 3.35292721e-24 316227.77 3.32880025e-24 398107.17 3.30985249e-24 501187.23 3.29458801e-24 630957.34 3.28225689e-24 794328.23 3.27284281e-24 1000000 3.265249e-24 1258930 3.25910809e-24 1584890 3.254416e-24 1995260 3.25044841e-24 2511890 3.24756441e-24 3162280 3.24504196e-24 3981070 3.24324081e-24 5011870 3.24180025e-24 6309570 3.24036001e-24 7943280 3.23964001e-24 10000000 3.23856016e-24 12589250 3.23820025e-24 15848930 3.23748049e-24 19952620 3.23712064e-24 25118860 3.23712064e-24 31622780 3.23676081e-24 39810720 3.236401e-24 50118720 3.236401e-24 63095730 3.236401e-24 79432820 3.23604121e-24 100000000 3.23604121e-24 100.00000 3.24517072896e-21 125.89254 2.58113786401e-21 158.48932 2.05368486976e-21 199.52623 1.63471427856e-21 251.18864 1.30191794041e-21 316.22777 1.03756784769e-21 398.10717 8.2758056329e-22 501.18723 6.6078815364e-22 630.95734 5.2829643409e-22 794.32823 4.2305496489e-22 1000 3.3945851536e-22 1258.93 2.7305910025e-22 1584.89 2.2031168041e-22 1995.26 1.7841479184e-22 2511.89 1.4513502784e-22 3162.28 1.18701025e-22 3981.07 9.770136336e-23 5011.87 8.102160144e-23 6309.57 6.777240976e-23 7943.28 5.724889569e-23 10000 4.888946241e-23 12589.25 4.224870001e-23 15848.93 3.697491249e-23 19952.62 3.278478564e-23 25118.86 2.945667076e-23 31622.78 2.681375524e-23 39810.72 2.471382369e-23 50118.72 2.304576036e-23 63095.73 2.172119236e-23 79432.82 2.066884369e-23 100000 1.983277156e-23 125892.54 1.916863524e-23 158489.32 1.864080625e-23 199526.23 1.822179969e-23 251188.64 1.788951616e-23 316227.77 1.762488324e-23 398107.17 1.741476361e-23 501187.23 1.724823961e-23 630957.34 1.711559641e-23 794328.23 1.701067536e-23 1000000 1.692664164e-23 1258930 1.686005721e-23 1584890 1.680754009e-23 1995260 1.676574916e-23 2511890 1.673219025e-23 3162280 1.670602129e-23 3981070 1.668477409e-23 5011870 1.666843929e-23 6309570 1.665537721e-23 7943280 1.664476804e-23 10000000 1.663579369e-23 12589250 1.662926841e-23 15848930 1.662437529e-23 19952620 1.662029824e-23 25118860 1.661703696e-23 31622780 1.6613776e-23 39810720 1.661214564e-23 50118720 1.661051536e-23 63095730 1.660888516e-23 79432820 1.660807009e-23 100000000 1.660725504e-23 100.00000 6.55285393009e-21 125.89254 5.210818596e-21 158.48932 4.14481015204e-21 199.52623 3.29805558369e-21 251.18864 2.62544536881e-21 316.22777 2.09116887849e-21 398.10717 1.66678677169e-21 501.18723 1.32968163904e-21 630.95734 1.061912569e-21 794.32823 8.4921536569e-22 1000 6.8026550761e-22 1258.93 5.46063424e-22 1584.89 4.3945994689e-22 1995.26 3.5478359449e-22 2511.89 2.8752289225e-22 3162.28 2.3409612004e-22 3981.07 1.91656336e-22 5011.87 1.5794708329e-22 6309.57 1.31171209e-22 7943.28 1.0990167556e-22 10000 9.300480721e-23 12589.25 7.958602521e-23 15848.93 6.892486441e-23 19952.62 6.045684516e-23 25118.86 5.373183204e-23 31622.78 4.838871844e-23 39810.72 4.414539364e-23 50118.72 4.077333316e-23 63095.73 3.809605284e-23 79432.82 3.596880676e-23 100000 3.427985401e-23 125892.54 3.293726881e-23 158489.32 3.187167025e-23 199526.23 3.10249e-23 251188.64 3.035238649e-23 316227.77 2.981815236e-23 398107.17 2.939374656e-23 501187.23 2.905641216e-23 630957.34 2.878859025e-23 794328.23 2.857650849e-23 1000000 2.840676804e-23 1258930 2.827261584e-23 1584890 2.816637184e-23 1995260 2.808152064e-23 2511890 2.801479041e-23 3162280 2.796082884e-23 3981070 2.791854244e-23 5011870 2.788473636e-23 6309570 2.785833961e-23 7943280 2.783723121e-23 10000000 2.782035025e-23 12589250 2.780663824e-23 15848930 2.779609284e-23 19952620 2.778765796e-23 25118860 2.778027849e-23 31622780 2.777500804e-23 39810720 2.777079204e-23 50118720 2.776763025e-23 63095730 2.776446864e-23 79432820 2.7762361e-23 100000000 2.776130721e-23 100.00000 9.24747643044e-21 125.89254 7.35285670144e-21 158.48932 5.84792090089e-21 199.52623 4.65249496464e-21 251.18864 3.70294156324e-21 316.22777 2.94868548324e-21 398.10717 2.34955417284e-21 501.18723 1.87365182449e-21 630.95734 1.49563186756e-21 794.32823 1.19535456121e-21 1000 9.5683811584e-22 1258.93 7.6737310225e-22 1584.89 6.1688153641e-22 1995.26 4.9733906121e-22 2511.89 4.0238354025e-22 3162.28 3.26958724e-22 3981.07 2.6704462225e-22 5011.87 2.19454596e-22 6309.57 1.8165109284e-22 7943.28 1.5162474496e-22 10000 1.2777363369e-22 12589.25 1.08826624e-22 15848.93 9.377791921e-23 19952.62 8.182287936e-23 25118.86 7.232822116e-23 31622.78 6.478479121e-23 39810.72 5.879362329e-23 50118.72 5.403426064e-23 63095.73 5.0253921e-23 79432.82 4.7251876e-23 100000 4.486588324e-23 125892.54 4.297195809e-23 158489.32 4.146716025e-23 199526.23 4.0271716e-23 251188.64 3.932167849e-23 316227.77 3.856782609e-23 398107.17 3.796901161e-23 501187.23 3.749235361e-23 630957.34 3.711490084e-23 794328.23 3.681455625e-23 1000000 3.657588484e-23 1258930 3.638623041e-23 1584890 3.623558416e-23 1995260 3.611649409e-23 2511890 3.602160324e-23 3162280 3.594602025e-23 3981070 3.588609025e-23 5011870 3.583818225e-23 6309570 3.580107556e-23 7943280 3.576996864e-23 10000000 3.574604944e-23 12589250 3.572811529e-23 15848930 3.5712576e-23 19952620 3.5700625e-23 25118860 3.569106564e-23 31622780 3.568389696e-23 39810720 3.567792361e-23 50118720 3.567314529e-23 63095730 3.566956176e-23 79432820 3.566597841e-23 100000000 3.566358961e-23 100.00000 1.6851414969e-22 125.89254 1.3497095329e-22 158.48932 1.08326464e-22 199.52623 8.716276321e-23 251.18864 7.035183376e-23 316.22777 5.699797009e-23 398.10717 4.639108321e-23 501.18723 3.796531456e-23 630.95734 3.127270084e-23 794.32823 2.595596809e-23 1000 2.173331161e-23 1258.93 1.837922641e-23 1584.89 1.571488164e-23 1995.26 1.359839376e-23 2511.89 1.191699441e-23 3162.28 1.058135841e-23 3981.07 9.52092736e-24 5011.87 8.67832681e-24 6309.57 8.0089e-24 7943.28 7.47749025e-24 10000 7.05539844e-24 12589.25 6.71950084e-24 15848.93 6.45312409e-24 19952.62 6.24150289e-24 25118.86 6.07376025e-24 31622.78 5.93994384e-24 39810.72 5.83415716e-24 50118.72 5.74944484e-24 63095.73 5.68297921e-24 79432.82 5.62970529e-24 100000 5.58755044e-24 125892.54 5.55403489e-24 158489.32 5.527201e-24 199526.23 5.50606225e-24 251188.64 5.48918041e-24 316227.77 5.47606801e-24 398107.17 5.46530884e-24 501187.23 5.456896e-24 630957.34 5.44989025e-24 794328.23 5.44475556e-24 1000000 5.44055625e-24 1258930 5.43729124e-24 1584890 5.43449344e-24 1995260 5.43262864e-24 2511890 5.43076416e-24 3162280 5.42936601e-24 3981070 5.42843401e-24 5011870 5.42750209e-24 6309570 5.42703616e-24 7943280 5.42610436e-24 10000000 5.42610436e-24 12589250 5.42563849e-24 15848930 5.42517264e-24 19952620 5.42517264e-24 25118860 5.42470681e-24 31622780 5.42470681e-24 39810720 5.42470681e-24 50118720 5.42470681e-24 63095730 5.42470681e-24 79432820 5.42470681e-24 100000000 5.424241e-24 100.00000 7.1334397225e-22 125.89254 5.6938072689e-22 158.48932 4.5502435969e-22 199.52623 3.6418760569e-22 251.18864 2.92033921e-22 316.22777 2.3472078436e-22 398.10717 1.8919452304e-22 501.18723 1.5303174436e-22 630.95734 1.2430689049e-22 794.32823 1.0149152049e-22 1000 8.336603025e-23 1258.93 6.896970304e-23 1584.89 5.753525904e-23 1995.26 4.845134449e-23 2511.89 4.123566225e-23 3162.28 3.550491396e-23 3981.07 3.095141956e-23 5011.87 2.733512089e-23 6309.57 2.4462916e-23 7943.28 2.218127409e-23 10000 2.036897424e-23 12589.25 1.892946064e-23 15848.93 1.778561929e-23 19952.62 1.687730724e-23 25118.86 1.615557636e-23 31622.78 1.558275625e-23 39810.72 1.512743236e-23 50118.72 1.476557476e-23 63095.73 1.447878601e-23 79432.82 1.4250625e-23 100000 1.406925081e-23 125892.54 1.392483856e-23 158489.32 1.381088569e-23 199526.23 1.372035681e-23 251188.64 1.364785249e-23 316227.77 1.359028225e-23 398107.17 1.354534416e-23 501187.23 1.350856516e-23 630957.34 1.347991225e-23 794328.23 1.345715856e-23 1000000 1.343882281e-23 1258930 1.3424896e-23 1584890 1.341317376e-23 1995260 1.340438544e-23 2511890 1.339706404e-23 3162280 1.339120836e-23 3981070 1.338681744e-23 5011870 1.338315889e-23 6309570 1.338023241e-23 7943280 1.337803776e-23 10000000 1.337584329e-23 12589250 1.337438041e-23 15848930 1.3373649e-23 19952620 1.337291761e-23 25118860 1.337218624e-23 31622780 1.337145489e-23 39810720 1.337072356e-23 50118720 1.337072356e-23 63095730 1.336999225e-23 79432820 1.336999225e-23 100000000 1.336999225e-23 100.00000 1.28924801721e-21 125.89254 1.02812574736e-21 158.48932 8.20707904e-22 199.52623 6.5595405456e-22 251.18864 5.2508347609e-22 316.22777 4.2112785796e-22 398.10717 3.3855632001e-22 501.18723 2.7296326656e-22 630.95734 2.2086418225e-22 794.32823 1.79479609e-22 1000 1.4660608561e-22 1258.93 1.20494529e-22 1584.89 9.975215376e-23 1995.26 8.327657536e-23 2511.89 7.0190884e-23 3162.28 5.979464929e-23 3981.07 5.1538041e-23 5011.87 4.497848356e-23 6309.57 3.976815844e-23 7943.28 3.563015481e-23 10000 3.2341969e-23 12589.25 2.973084676e-23 15848.93 2.7657081e-23 19952.62 2.601e-23 25118.86 2.47009e-23 31622.78 2.366141449e-23 39810.72 2.283597369e-23 50118.72 2.217939025e-23 63095.73 2.165878521e-23 79432.82 2.124472464e-23 100000 2.091598756e-23 125892.54 2.065520704e-23 158489.32 2.044757961e-23 199526.23 2.028241296e-23 251188.64 2.015201881e-23 316227.77 2.004800625e-23 398107.17 1.996570489e-23 501187.23 1.989962881e-23 630957.34 1.984791601e-23 794328.23 1.980606016e-23 1000000 1.977314089e-23 1258930 1.974735844e-23 1584890 1.972692225e-23 1995260 1.971004816e-23 2511890 1.969673161e-23 3162280 1.9686969e-23 3981070 1.9678096e-23 5011870 1.967188609e-23 6309570 1.966656409e-23 7943280 1.966212964e-23 10000000 1.965946921e-23 12589250 1.965680896e-23 15848930 1.965414889e-23 19952620 1.965326224e-23 25118860 1.9651489e-23 31622780 1.965060241e-23 39810720 1.964971584e-23 50118720 1.964882929e-23 63095730 1.964882929e-23 79432820 1.964794276e-23 100000000 1.964794276e-23 100.00000 1.74550155264e-21 125.89254 1.39144666441e-21 158.48932 1.11020240809e-21 199.52623 8.8680670849e-22 251.18864 7.0935930244e-22 316.22777 5.6840758569e-22 398.10717 4.5644186025e-22 501.18723 3.6750807025e-22 630.95734 2.9686256209e-22 794.32823 2.4074935921e-22 1000 1.9617643969e-22 1258.93 1.6076972025e-22 1584.89 1.3264589584e-22 1995.26 1.1030670729e-22 2511.89 9.256171681e-23 3162.28 7.846593561e-23 3981.07 6.726952324e-23 5011.87 5.837571216e-23 6309.57 5.131143424e-23 7943.28 4.570030404e-23 10000 4.124336841e-23 12589.25 3.770205604e-23 15848.93 3.489028624e-23 19952.62 3.265551025e-23 25118.86 3.088136041e-23 31622.78 2.947186944e-23 39810.72 2.835243009e-23 50118.72 2.746284025e-23 63095.73 2.675682529e-23 79432.82 2.619494761e-23 100000 2.574953536e-23 125892.54 2.539555236e-23 158489.32 2.511412996e-23 199526.23 2.489111881e-23 251188.64 2.471382369e-23 316227.77 2.457284041e-23 398107.17 2.446093764e-23 501187.23 2.437199424e-23 630957.34 2.430095616e-23 794328.23 2.424479121e-23 1000000 2.420049636e-23 1258930 2.416508964e-23 1584890 2.413658641e-23 1995260 2.411497449e-23 2511890 2.409631744e-23 3162280 2.408257476e-23 3981070 2.407177969e-23 5011870 2.406294916e-23 6309570 2.405510116e-23 7943280 2.405019681e-23 10000000 2.404529296e-23 12589250 2.404235089e-23 15848930 2.4039409e-23 19952620 2.403646729e-23 25118860 2.403548676e-23 31622780 2.403352576e-23 39810720 2.403254529e-23 50118720 2.403156484e-23 63095730 2.403058441e-23 79432820 2.403058441e-23 100000000 2.4029604e-23 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_diode_lt.standard0000644000175000017500000002411714163340332025346 0ustar carstencarstenV(d) g(d,b) g(s,b) c(d,b) c(s,b) c(b,b) g(b,b) -1.1999 1.8524e-06 -1.8524e-06 9.66920018784308e-15 1.28839002502949e-14 2.36012004584994e-14 2.69299e-14 -0.9998 1.7546e-06 -1.7546e-06 1.00077001944191e-14 1.28895002504037e-14 2.39511004652969e-14 2.69299e-14 -0.7997 1.6536e-06 -1.6536e-06 1.03957002019568e-14 1.28954002505183e-14 2.43507004730599e-14 2.69299e-14 -0.5996 1.5545e-06 -1.5545e-06 1.08474002107319e-14 1.29013002506329e-14 2.48143004820662e-14 2.69299e-14 -0.3995 1.4826e-06 -1.4826e-06 1.13836002211486e-14 1.29074002507514e-14 2.5362600492718e-14 2.69299e-14 -0.1994 1.458e-06 -1.458e-06 1.20385002338714e-14 1.29142002508835e-14 2.60279005056428e-14 2.6942e-14 0.000699999999999867 -1.10275e-08 1.10275e-08 1.29696002519598e-14 1.29661002518918e-14 2.69060005227016e-14 5.45986e-14 0.2008 -3.8568e-06 3.8567e-06 1.41143002741978e-14 1.29914002523833e-14 2.80459005448463e-14 6.34046e-11 -1.1999 1.8524e-06 -1.8524e-06 9.66920018784308e-15 1.28839002502949e-14 2.36012004584994e-14 2.69299e-14 -0.9998 1.7546e-06 -1.7546e-06 1.00077001944191e-14 1.28895002504037e-14 2.39511004652969e-14 2.69299e-14 -0.7997 1.6536e-06 -1.6536e-06 1.03957002019568e-14 1.28954002505183e-14 2.43507004730599e-14 2.69299e-14 -0.5996 1.5545e-06 -1.5545e-06 1.08474002107319e-14 1.29013002506329e-14 2.48143004820662e-14 2.69299e-14 -0.3995 1.4826e-06 -1.4826e-06 1.13836002211486e-14 1.29074002507514e-14 2.5362600492718e-14 2.69299e-14 -0.1994 1.458e-06 -1.458e-06 1.20385002338714e-14 1.29142002508835e-14 2.60279005056428e-14 2.6942e-14 0.000699999999999867 -1.10275e-08 1.10275e-08 1.29696002519598e-14 1.29661002518918e-14 2.69060005227016e-14 5.45986e-14 0.2008 -3.8568e-06 3.8567e-06 1.41143002741978e-14 1.29914002523833e-14 2.80459005448463e-14 6.34046e-11 -1.1999 1.8524e-06 -1.8524e-06 9.66920018784308e-15 1.28839002502949e-14 2.36012004584994e-14 2.69299e-14 -0.9998 1.7546e-06 -1.7546e-06 1.00077001944191e-14 1.28895002504037e-14 2.39511004652969e-14 2.69299e-14 -0.7997 1.6536e-06 -1.6536e-06 1.03957002019568e-14 1.28954002505183e-14 2.43507004730599e-14 2.69299e-14 -0.5996 1.5545e-06 -1.5545e-06 1.08474002107319e-14 1.29013002506329e-14 2.48143004820662e-14 2.69299e-14 -0.3995 1.4826e-06 -1.4826e-06 1.13836002211486e-14 1.29074002507514e-14 2.5362600492718e-14 2.69299e-14 -0.1994 1.458e-06 -1.458e-06 1.20385002338714e-14 1.29142002508835e-14 2.60279005056428e-14 2.6942e-14 0.000699999999999867 -1.10275e-08 1.10275e-08 1.29696002519598e-14 1.29661002518918e-14 2.69060005227016e-14 5.45986e-14 0.2008 -3.8568e-06 3.8567e-06 1.41143002741978e-14 1.29914002523833e-14 2.80459005448463e-14 6.34046e-11 -1.1999 1.8524e-06 -1.8524e-06 9.66920018784308e-15 1.28839002502949e-14 2.36012004584994e-14 2.69299e-14 -0.9998 1.7546e-06 -1.7546e-06 1.00077001944191e-14 1.28895002504037e-14 2.39511004652969e-14 2.69299e-14 -0.7997 1.6536e-06 -1.6536e-06 1.03957002019568e-14 1.28954002505183e-14 2.43507004730599e-14 2.69299e-14 -0.5996 1.5545e-06 -1.5545e-06 1.08474002107319e-14 1.29013002506329e-14 2.48143004820662e-14 2.69299e-14 -0.3995 1.4826e-06 -1.4826e-06 1.13836002211486e-14 1.29074002507514e-14 2.5362600492718e-14 2.69299e-14 -0.1994 1.458e-06 -1.458e-06 1.20385002338714e-14 1.29142002508835e-14 2.60279005056428e-14 2.6942e-14 0.000699999999999867 -1.10275e-08 1.10275e-08 1.29696002519598e-14 1.29661002518918e-14 2.69060005227016e-14 5.45986e-14 0.2008 -3.8568e-06 3.8567e-06 1.41143002741978e-14 1.29914002523833e-14 2.80459005448463e-14 6.34046e-11 -1.1999 1.7855e-06 -1.7855e-06 9.65330018753419e-15 1.28587002498053e-14 2.35758004580059e-14 1.773e-21 -0.9998 1.6833e-06 -1.6833e-06 9.9913001941005e-15 1.28636002499005e-14 2.39252004647937e-14 1.773e-21 -0.7997 1.5763e-06 -1.5763e-06 1.03787002016265e-14 1.28686002499977e-14 2.43244004725489e-14 1.773e-21 -0.5996 1.4658e-06 -1.4658e-06 1.08299002103919e-14 1.28738002500987e-14 2.47875004815456e-14 1.773e-21 -0.3995 1.3581e-06 -1.3581e-06 1.13654002207951e-14 1.28790002501997e-14 2.53352004921857e-14 1.773e-21 -0.1994 1.2992e-06 -1.2992e-06 1.20173002334595e-14 1.28840002502968e-14 2.59992005050852e-14 1.773e-21 0.000699999999999867 -1.43924e-08 1.43924e-08 1.29284002511594e-14 1.29249002510914e-14 2.68650005219051e-14 3.611e-21 0.2008 -5.4791e-06 5.4791e-06 1.40755002734441e-14 1.29474002515285e-14 2.80038005440285e-14 6.07799e-17 -1.1999 1.7855e-06 -1.7855e-06 9.65330018753419e-15 1.28587002498053e-14 2.35758004580059e-14 1.773e-21 -0.9998 1.6833e-06 -1.6833e-06 9.9913001941005e-15 1.28636002499005e-14 2.39252004647937e-14 1.773e-21 -0.7997 1.5763e-06 -1.5763e-06 1.03787002016265e-14 1.28686002499977e-14 2.43244004725489e-14 1.773e-21 -0.5996 1.4658e-06 -1.4658e-06 1.08299002103919e-14 1.28738002500987e-14 2.47875004815456e-14 1.773e-21 -0.3995 1.3581e-06 -1.3581e-06 1.13654002207951e-14 1.28790002501997e-14 2.53352004921857e-14 1.773e-21 -0.1994 1.2992e-06 -1.2992e-06 1.20173002334595e-14 1.28840002502968e-14 2.59992005050852e-14 1.773e-21 0.000699999999999867 -1.43924e-08 1.43924e-08 1.29284002511594e-14 1.29249002510914e-14 2.68650005219051e-14 3.611e-21 0.2008 -5.4791e-06 5.4791e-06 1.40755002734441e-14 1.29474002515285e-14 2.80038005440285e-14 6.07799e-17 -1.1999 1.7855e-06 -1.7855e-06 9.65330018753419e-15 1.28587002498053e-14 2.35758004580059e-14 1.773e-21 -0.9998 1.6833e-06 -1.6833e-06 9.9913001941005e-15 1.28636002499005e-14 2.39252004647937e-14 1.773e-21 -0.7997 1.5763e-06 -1.5763e-06 1.03787002016265e-14 1.28686002499977e-14 2.43244004725489e-14 1.773e-21 -0.5996 1.4658e-06 -1.4658e-06 1.08299002103919e-14 1.28738002500987e-14 2.47875004815456e-14 1.773e-21 -0.3995 1.3581e-06 -1.3581e-06 1.13654002207951e-14 1.28790002501997e-14 2.53352004921857e-14 1.773e-21 -0.1994 1.2992e-06 -1.2992e-06 1.20173002334595e-14 1.28840002502968e-14 2.59992005050852e-14 1.773e-21 0.000699999999999867 -1.43924e-08 1.43924e-08 1.29284002511594e-14 1.29249002510914e-14 2.68650005219051e-14 3.611e-21 0.2008 -5.4791e-06 5.4791e-06 1.40755002734441e-14 1.29474002515285e-14 2.80038005440285e-14 6.07799e-17 -1.1999 1.7855e-06 -1.7855e-06 9.65330018753419e-15 1.28587002498053e-14 2.35758004580059e-14 1.773e-21 -0.9998 1.6833e-06 -1.6833e-06 9.9913001941005e-15 1.28636002499005e-14 2.39252004647937e-14 1.773e-21 -0.7997 1.5763e-06 -1.5763e-06 1.03787002016265e-14 1.28686002499977e-14 2.43244004725489e-14 1.773e-21 -0.5996 1.4658e-06 -1.4658e-06 1.08299002103919e-14 1.28738002500987e-14 2.47875004815456e-14 1.773e-21 -0.3995 1.3581e-06 -1.3581e-06 1.13654002207951e-14 1.28790002501997e-14 2.53352004921857e-14 1.773e-21 -0.1994 1.2992e-06 -1.2992e-06 1.20173002334595e-14 1.28840002502968e-14 2.59992005050852e-14 1.773e-21 0.000699999999999867 -1.43924e-08 1.43924e-08 1.29284002511594e-14 1.29249002510914e-14 2.68650005219051e-14 3.611e-21 0.2008 -5.4791e-06 5.4791e-06 1.40755002734441e-14 1.29474002515285e-14 2.80038005440285e-14 6.07799e-17 -1.1999 1.7501e-06 -1.7925e-06 9.68930018823356e-15 1.29168002509341e-14 2.36392004592376e-14 4.23869e-08 -0.9998 1.6574e-06 -1.6997e-06 1.00282001948174e-14 1.29232002510584e-14 2.39896004660448e-14 4.23869e-08 -0.7997 1.5705e-06 -1.6129e-06 1.04167002023647e-14 1.29297002511847e-14 2.43898004738195e-14 4.23869e-08 -0.5996 1.5085e-06 -1.5509e-06 1.08690002111515e-14 1.29365002513168e-14 2.48539004828355e-14 4.23869e-08 -0.3995 1.4923e-06 -1.5347e-06 1.14059002215819e-14 1.29434002514508e-14 2.54029004935009e-14 4.23877e-08 -0.1994 1.3968e-06 -1.4394e-06 1.20785002346484e-14 1.29577002517286e-14 2.60751005065597e-14 4.25657e-08 0.000699999999999867 -5.08985e-08 -3.4697e-08 1.30218002529739e-14 1.30184002529078e-14 2.69658005238633e-14 8.55955e-08 0.2008 -1.29785e-05 2.4923e-06 1.41704002752877e-14 1.30498002535178e-14 2.81103005460974e-14 1.04862e-05 -1.1999 1.7501e-06 -1.7925e-06 9.68930018823356e-15 1.29168002509341e-14 2.36392004592376e-14 4.23869e-08 -0.9998 1.6574e-06 -1.6997e-06 1.00282001948174e-14 1.29232002510584e-14 2.39896004660448e-14 4.23869e-08 -0.7997 1.5705e-06 -1.6129e-06 1.04167002023647e-14 1.29297002511847e-14 2.43898004738195e-14 4.23869e-08 -0.5996 1.5085e-06 -1.5509e-06 1.08690002111515e-14 1.29365002513168e-14 2.48539004828355e-14 4.23869e-08 -0.3995 1.4923e-06 -1.5347e-06 1.14059002215819e-14 1.29434002514508e-14 2.54029004935009e-14 4.23877e-08 -0.1994 1.3968e-06 -1.4394e-06 1.20785002346484e-14 1.29577002517286e-14 2.60751005065597e-14 4.25657e-08 0.000699999999999867 -5.08985e-08 -3.4697e-08 1.30218002529739e-14 1.30184002529078e-14 2.69658005238633e-14 8.55955e-08 0.2008 -1.29785e-05 2.4923e-06 1.41704002752877e-14 1.30498002535178e-14 2.81103005460974e-14 1.04862e-05 -1.1999 1.7501e-06 -1.7925e-06 9.68930018823356e-15 1.29168002509341e-14 2.36392004592376e-14 4.23869e-08 -0.9998 1.6574e-06 -1.6997e-06 1.00282001948174e-14 1.29232002510584e-14 2.39896004660448e-14 4.23869e-08 -0.7997 1.5705e-06 -1.6129e-06 1.04167002023647e-14 1.29297002511847e-14 2.43898004738195e-14 4.23869e-08 -0.5996 1.5085e-06 -1.5509e-06 1.08690002111515e-14 1.29365002513168e-14 2.48539004828355e-14 4.23869e-08 -0.3995 1.4923e-06 -1.5347e-06 1.14059002215819e-14 1.29434002514508e-14 2.54029004935009e-14 4.23877e-08 -0.1994 1.3968e-06 -1.4394e-06 1.20785002346484e-14 1.29577002517286e-14 2.60751005065597e-14 4.25657e-08 0.000699999999999867 -5.08985e-08 -3.4697e-08 1.30218002529739e-14 1.30184002529078e-14 2.69658005238633e-14 8.55955e-08 0.2008 -1.29785e-05 2.4923e-06 1.41704002752877e-14 1.30498002535178e-14 2.81103005460974e-14 1.04862e-05 -1.1999 1.7501e-06 -1.7925e-06 9.68930018823356e-15 1.29168002509341e-14 2.36392004592376e-14 4.23869e-08 -0.9998 1.6574e-06 -1.6997e-06 1.00282001948174e-14 1.29232002510584e-14 2.39896004660448e-14 4.23869e-08 -0.7997 1.5705e-06 -1.6129e-06 1.04167002023647e-14 1.29297002511847e-14 2.43898004738195e-14 4.23869e-08 -0.5996 1.5085e-06 -1.5509e-06 1.08690002111515e-14 1.29365002513168e-14 2.48539004828355e-14 4.23869e-08 -0.3995 1.4923e-06 -1.5347e-06 1.14059002215819e-14 1.29434002514508e-14 2.54029004935009e-14 4.23877e-08 -0.1994 1.3968e-06 -1.4394e-06 1.20785002346484e-14 1.29577002517286e-14 2.60751005065597e-14 4.25657e-08 0.000699999999999867 -5.08985e-08 -3.4697e-08 1.30218002529739e-14 1.30184002529078e-14 2.69658005238633e-14 8.55955e-08 0.2008 -1.29785e-05 2.4923e-06 1.41704002752877e-14 1.30498002535178e-14 2.81103005460974e-14 1.04862e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_ig_lt.standard0000644000175000017500000000711414163340332025203 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258.93 4.59303216537423e-15 3.20280786522017e-15 5.48426090908113e-16 1584.89 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995.26 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511.89 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162.28 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981.07 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011.87 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309.57 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943.28 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589.25 4.59305419989505e-15 3.20282058562792e-15 5.48429533273533e-16 15848.93 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952.62 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118.86 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622.78 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810.72 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118.72 4.59312826999807e-15 3.20286862079649e-15 5.48429486692448e-16 63095.73 4.59310377859218e-15 3.20273703535532e-15 5.48429556485134e-16 79432.82 4.59314917365216e-15 3.20282191331486e-15 5.48429304591349e-16 100000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 125892.54 4.59301102152014e-15 3.20275635735849e-15 5.48429359020306e-16 158489.32 4.59300903501707e-15 3.20279483499135e-15 5.48429359492188e-16 199526.23 4.59303058959939e-15 3.20278154657951e-15 5.48429357426682e-16 251188.64 4.59308230645884e-15 3.20282128138925e-15 5.48429398703038e-16 316227.77 4.59304383880213e-15 3.20280003035121e-15 5.48437417394552e-16 398107.17 4.5930625695156e-15 3.20283060106835e-15 5.48417027840674e-16 501187.23 4.59306448389069e-15 3.2028049179071e-15 5.48418974521165e-16 630957.34 4.5930530386915e-15 3.20281250539176e-15 5.48428008255517e-16 794328.23 4.59304881807746e-15 3.20282179235144e-15 5.48436897718134e-16 1000000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258930 4.59303216537423e-15 3.20280786522017e-15 5.48426090908114e-16 1584890 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995260 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511890 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162280 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981070 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011870 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309570 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943280 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589250 4.59305419989505e-15 3.20282058562791e-15 5.48429533273533e-16 15848930 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952620 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118860 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622780 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810720 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118720 4.59312826999806e-15 3.20286862079649e-15 5.48429486692448e-16 63095730 4.59310377859218e-15 3.20273703535532e-15 5.4842930424153e-16 79432820 4.59314917365216e-15 3.20282191331486e-15 5.48429504955561e-16 100000000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_core_sw.standard0000644000175000017500000001545114163340332025176 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -2.291e-05 0. 0. 2.291e-05 -1.10000 -1.86556e-05 0. 0. 1.86556e-05 -1.00000 -1.50957e-05 0. 0. 1.50957e-05 -0.9 -1.21371e-05 0. 0. 1.21371e-05 -0.8 -9.6952e-06 0. 0. 9.6952e-06 -0.7 -7.6941e-06 0. 0. 7.6941e-06 -0.6 -6.0668e-06 0. 0. 6.0668e-06 -0.5 -4.7557e-06 0. 0. 4.7557e-06 -0.4 -3.7153e-06 0. 0. 3.7153e-06 -0.3 -2.9197e-06 0. 0. 2.9197e-06 -0.2 -2.3553e-06 0. 0. 2.3553e-06 -0.1 -1.8959e-06 0. 0. 1.8959e-06 2.220446e-16 7.783e-21 0. 0. -7.783e-21 -1.20000 -0.0001523624 0. 0. 0.0001523624 -1.10000 -0.0001316999 0. 0. 0.0001316999 -1.00000 -0.0001131622 0. 0. 0.0001131622 -0.9 -9.6621e-05 0. 0. 9.6621e-05 -0.8 -8.19485e-05 0. 0. 8.19485e-05 -0.7 -6.90196e-05 0. 0. 6.90196e-05 -0.6 -5.77153e-05 0. 0. 5.77153e-05 -0.5 -4.79348e-05 0. 0. 4.79348e-05 -0.4 -3.96321e-05 0. 0. 3.96321e-05 -0.3 -3.29062e-05 0. 0. 3.29062e-05 -0.2 -2.78949e-05 0. 0. 2.78949e-05 -0.1 -2.32289e-05 0. 0. 2.32289e-05 2.220446e-16 9.741e-20 0. 0. -9.741e-20 -1.20000 -0.0015738 0. 0. 0.0015738 -1.10000 -0.0014642 0. 0. 0.0014642 -1.00000 -0.0013597 0. 0. 0.0013597 -0.9 -0.0012604 0. 0. 0.0012604 -0.8 -0.0011662 0. 0. 0.0011662 -0.7 -0.0010774 0. 0. 0.0010774 -0.6 -0.0009948728 0. 0. 0.0009948728 -0.5 -0.000920269 0. 0. 0.000920269 -0.4 -0.0008567773 0. 0. 0.0008567773 -0.3 -0.0008058617 0. 0. 0.0008058617 -0.2 -0.0007409601 0. 0. 0.0007409601 -0.1 -0.0005224187 0. 0. 0.0005224187 2.220446e-16 1.4585e-18 0. 0. -1.4585e-18 -1.20000 -0.0044785 0. 0. 0.0044785 -1.10000 -0.0042444 0. 0. 0.0042444 -1.00000 -0.0040199 0. 0. 0.0040199 -0.9 -0.0038065 0. 0. 0.0038065 -0.8 -0.003607 0. 0. 0.003607 -0.7 -0.0034259 0. 0. 0.0034259 -0.6 -0.0032692 0. 0. 0.0032692 -0.5 -0.0031382 0. 0. 0.0031382 -0.4 -0.0029967 0. 0. 0.0029967 -0.3 -0.0027092 0. 0. 0.0027092 -0.2 -0.0021317 0. 0. 0.0021317 -0.1 -0.0012224 0. 0. 0.0012224 2.220446e-16 2.2901e-18 0. 0. -2.2901e-18 -1.20000 -0.0082169 0. 0. 0.0082169 -1.10000 -0.0078615 0. 0. 0.0078615 -1.00000 -0.0075308 0. 0. 0.0075308 -0.9 -0.0072315 0. 0. 0.0072315 -0.8 -0.0069695 0. 0. 0.0069695 -0.7 -0.0067394 0. 0. 0.0067394 -0.6 -0.0064906 0. 0. 0.0064906 -0.5 -0.0061071 0. 0. 0.0061071 -0.4 -0.0054731 0. 0. 0.0054731 -0.3 -0.0045326 0. 0. 0.0045326 -0.2 -0.0032868 0. 0. 0.0032868 -0.1 -0.0017645 0. 0. 0.0017645 2.220446e-16 4.0847e-18 0. 0. -4.0847e-18 -1.20000 -5.5339e-06 0. 0. 5.5339e-06 -1.10000 -4.155e-06 0. 0. 4.155e-06 -1.00000 -3.0981e-06 0. 0. 3.0981e-06 -0.9 -2.2938e-06 0. 0. 2.2938e-06 -0.8 -1.6862e-06 0. 0. 1.6862e-06 -0.7 -1.2304e-06 0. 0. 1.2304e-06 -0.6 -8.910425e-07 0. 0. 8.910425e-07 -0.5 -6.402316e-07 0. 0. 6.402316e-07 -0.4 -4.565102e-07 0. 0. 4.565102e-07 -0.3 -3.238322e-07 0. 0. 3.238322e-07 -0.2 -2.32268e-07 0. 0. 2.32268e-07 -0.1 -1.734672e-07 0. 0. 1.734672e-07 2.220446e-16 9.322e-22 0. 0. -9.322e-22 -1.20000 -0.000102378 0. 0. 0.000102378 -1.10000 -8.37361e-05 0. 0. 8.37361e-05 -1.00000 -6.77942e-05 0. 0. 6.77942e-05 -0.9 -5.43019e-05 0. 0. 5.43019e-05 -0.8 -4.3009e-05 0. 0. 4.3009e-05 -0.7 -3.36682e-05 0. 0. 3.36682e-05 -0.6 -2.60388e-05 0. 0. 2.60388e-05 -0.5 -1.98902e-05 0. 0. 1.98902e-05 -0.4 -1.5009e-05 0. 0. 1.5009e-05 -0.3 -1.12165e-05 0. 0. 1.12165e-05 -0.2 -8.434e-06 0. 0. 8.434e-06 -0.1 -6.5408e-06 0. 0. 6.5408e-06 2.220446e-16 3.306e-20 0. 0. -3.306e-20 -1.20000 -0.0021562 0. 0. 0.0021562 -1.10000 -0.0019954 0. 0. 0.0019954 -1.00000 -0.0018426 0. 0. 0.0018426 -0.9 -0.0016976 0. 0. 0.0016976 -0.8 -0.0015602 0. 0. 0.0015602 -0.7 -0.0014306 0. 0. 0.0014306 -0.6 -0.0013087 0. 0. 0.0013087 -0.5 -0.0011954 0. 0. 0.0011954 -0.4 -0.0010927 0. 0. 0.0010927 -0.3 -0.0010061 0. 0. 0.0010061 -0.2 -0.0009314218 0. 0. 0.0009314218 -0.1 -0.0007051618 0. 0. 0.0007051618 2.220446e-16 1.9283e-18 0. 0. -1.9283e-18 -1.20000 -0.0069029 0. 0. 0.0069029 -1.10000 -0.0065314 0. 0. 0.0065314 -1.00000 -0.0061731 0. 0. 0.0061731 -0.9 -0.0058292 0. 0. 0.0058292 -0.8 -0.0055017 0. 0. 0.0055017 -0.7 -0.005195 0. 0. 0.005195 -0.6 -0.0049168 0. 0. 0.0049168 -0.5 -0.004677 0. 0. 0.004677 -0.4 -0.0044589 0. 0. 0.0044589 -0.3 -0.004088 0. 0. 0.004088 -0.2 -0.003274 0. 0. 0.003274 -0.1 -0.0019013 0. 0. 0.0019013 2.220446e-16 5.2265e-18 0. 0. -5.2265e-18 -1.20000 -0.0131629 0. 0. 0.0131629 -1.10000 -0.0125651 0. 0. 0.0125651 -1.00000 -0.0119979 0. 0. 0.0119979 -0.9 -0.0114702 0. 0. 0.0114702 -0.8 -0.0109931 0. 0. 0.0109931 -0.7 -0.0105704 0. 0. 0.0105704 -0.6 -0.0101533 0. 0. 0.0101533 -0.5 -0.0095804 0. 0. 0.0095804 -0.4 -0.0086408 0. 0. 0.0086408 -0.3 -0.0072024 0. 0. 0.0072024 -0.2 -0.0052485 0. 0. 0.0052485 -0.1 -0.0028276 0. 0. 0.0028276 2.220446e-16 4.8038e-18 0. 0. -4.8038e-18 -1.20000 -5.50609e-05 0. 0. 5.50609e-05 -1.10000 -4.78071e-05 0. 0. 4.78071e-05 -1.00000 -4.13308e-05 0. 0. 4.13308e-05 -0.9 -3.55766e-05 0. 0. 3.55766e-05 -0.8 -3.04932e-05 0. 0. 3.04932e-05 -0.7 -2.60361e-05 0. 0. 2.60361e-05 -0.6 -2.21743e-05 0. 0. 2.21743e-05 -0.5 -1.89019e-05 0. 0. 1.89019e-05 -0.4 -1.62445e-05 0. 0. 1.62445e-05 -0.3 -1.41929e-05 0. 0. 1.41929e-05 -0.2 -1.25138e-05 0. 0. 1.25138e-05 -0.1 -1.02137e-05 0. 0. 1.02137e-05 2.220446e-16 3.525e-20 0. 0. -3.525e-20 -1.20000 -0.0001817503 0. 0. 0.0001817503 -1.10000 -0.0001628992 0. 0. 0.0001628992 -1.00000 -0.0001455022 0. 0. 0.0001455022 -0.9 -0.0001295104 0. 0. 0.0001295104 -0.8 -0.0001148864 0. 0. 0.0001148864 -0.7 -0.0001016182 0. 0. 0.0001016182 -0.6 -8.97477e-05 0. 0. 8.97477e-05 -0.5 -7.94184e-05 0. 0. 7.94184e-05 -0.4 -7.08745e-05 0. 0. 7.08745e-05 -0.3 -6.41345e-05 0. 0. 6.41345e-05 -0.2 -5.81578e-05 0. 0. 5.81578e-05 -0.1 -4.73358e-05 0. 0. 4.73358e-05 2.220446e-16 1.649e-19 0. 0. -1.649e-19 -1.20000 -0.0010566 0. 0. 0.0010566 -1.10000 -0.0009885037 0. 0. 0.0009885037 -1.00000 -0.0009237135 0. 0. 0.0009237135 -0.9 -0.000862425 0. 0. 0.000862425 -0.8 -0.0008051112 0. 0. 0.0008051112 -0.7 -0.0007526252 0. 0. 0.0007526252 -0.6 -0.0007063065 0. 0. 0.0007063065 -0.5 -0.0006675953 0. 0. 0.0006675953 -0.4 -0.000636227 0. 0. 0.000636227 -0.3 -0.0006045522 0. 0. 0.0006045522 -0.2 -0.000535758 0. 0. 0.000535758 -0.1 -0.0003523718 0. 0. 0.0003523718 2.220446e-16 9.912e-19 0. 0. -9.912e-19 -1.20000 -0.0026405 0. 0. 0.0026405 -1.10000 -0.0025104 0. 0. 0.0025104 -1.00000 -0.0023881 0. 0. 0.0023881 -0.9 -0.0022755 0. 0. 0.0022755 -0.8 -0.0021751 0. 0. 0.0021751 -0.7 -0.0020894 0. 0. 0.0020894 -0.6 -0.0020185 0. 0. 0.0020185 -0.5 -0.0019529 0. 0. 0.0019529 -0.4 -0.0018526 0. 0. 0.0018526 -0.3 -0.0016426 0. 0. 0.0016426 -0.2 -0.0012687 0. 0. 0.0012687 -0.1 -0.0007181843 0. 0. 0.0007181843 2.220446e-16 1.9473e-18 0. 0. -1.9473e-18 -1.20000 -0.0046426 0. 0. 0.0046426 -1.10000 -0.0044645 0. 0. 0.0044645 -1.00000 -0.0043053 0. 0. 0.0043053 -0.9 -0.0041674 0. 0. 0.0041674 -0.8 -0.0040501 0. 0. 0.0040501 -0.7 -0.0039401 0. 0. 0.0039401 -0.6 -0.0037955 0. 0. 0.0037955 -0.5 -0.0035512 0. 0. 0.0035512 -0.4 -0.0031579 0. 0. 0.0031579 -0.3 -0.0025972 0. 0. 0.0025972 -0.2 -0.0018738 0. 0. 0.0018738 -0.1 -0.0010022 0. 0. 0.0010022 2.220446e-16 3.3469e-18 0. 0. -3.3469e-18 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2g_lw.standard0000644000175000017500000003751114163340332025144 0ustar carstencarstenFreq N(g) 100.00000 1.682209e-48 125.89254 1.682209e-48 158.48932 1.682209e-48 199.52623 1.682209e-48 251.18864 1.682209e-48 316.22777 1.682209e-48 398.10717 1.682209e-48 501.18723 1.682209e-48 630.95734 1.682209e-48 794.32823 1.682209e-48 1000 1.682209e-48 1258.93 1.682209e-48 1584.89 1.682209e-48 1995.26 1.682209e-48 2511.89 1.682209e-48 3162.28 1.682209e-48 3981.07 1.682209e-48 5011.87 1.682209e-48 6309.57 1.682209e-48 7943.28 1.682209e-48 10000 1.682209e-48 12589.25 1.682209e-48 15848.93 1.682209e-48 19952.62 1.682209e-48 25118.86 1.682209e-48 31622.78 1.682209e-48 39810.72 1.682209e-48 50118.72 1.682209e-48 63095.73 1.682209e-48 79432.82 1.682209e-48 100000 1.682209e-48 125892.54 1.682209e-48 158489.32 1.682209e-48 199526.23 1.682209e-48 251188.64 1.682209e-48 316227.77 1.682209e-48 398107.17 1.682209e-48 501187.23 1.682209e-48 630957.34 1.682209e-48 794328.23 1.682209e-48 1000000 1.682209e-48 1258930 1.682209e-48 1584890 1.682209e-48 1995260 1.682209e-48 2511890 1.682209e-48 3162280 1.682209e-48 3981070 1.682209e-48 5011870 1.682209e-48 6309570 1.682209e-48 7943280 1.682209e-48 10000000 1.682209e-48 12589250 1.682209e-48 15848930 1.682209e-48 19952620 1.682209e-48 25118860 1.682209e-48 31622780 1.682209e-48 39810720 1.682209e-48 50118720 1.682209e-48 63095730 1.682209e-48 79432820 1.682209e-48 100000000 1.682209e-48 100.00000 1.41376e-47 125.89254 1.41376e-47 158.48932 1.41376e-47 199.52623 1.41376e-47 251.18864 1.41376e-47 316.22777 1.41376e-47 398.10717 1.41376e-47 501.18723 1.41376e-47 630.95734 1.41376e-47 794.32823 1.41376e-47 1000 1.41376e-47 1258.93 1.41376e-47 1584.89 1.41376e-47 1995.26 1.41376e-47 2511.89 1.41376e-47 3162.28 1.41376e-47 3981.07 1.41376e-47 5011.87 1.41376e-47 6309.57 1.41376e-47 7943.28 1.41376e-47 10000 1.41376e-47 12589.25 1.41376e-47 15848.93 1.41376e-47 19952.62 1.41376e-47 25118.86 1.41376e-47 31622.78 1.41376e-47 39810.72 1.41376e-47 50118.72 1.41376e-47 63095.73 1.41376e-47 79432.82 1.41376e-47 100000 1.41376e-47 125892.54 1.41376e-47 158489.32 1.41376e-47 199526.23 1.41376e-47 251188.64 1.41376e-47 316227.77 1.41376e-47 398107.17 1.41376e-47 501187.23 1.41376e-47 630957.34 1.41376e-47 794328.23 1.41376e-47 1000000 1.41376e-47 1258930 1.41376e-47 1584890 1.41376e-47 1995260 1.41376e-47 2511890 1.41376e-47 3162280 1.41376e-47 3981070 1.41376e-47 5011870 1.41376e-47 6309570 1.41376e-47 7943280 1.41376e-47 10000000 1.41376e-47 12589250 1.41376e-47 15848930 1.41376e-47 19952620 1.41376e-47 25118860 1.41376e-47 31622780 1.41376e-47 39810720 1.41376e-47 50118720 1.41376e-47 63095730 1.41376e-47 79432820 1.41376e-47 100000000 1.41376e-47 100.00000 4.0106889e-47 125.89254 4.0106889e-47 158.48932 4.0106889e-47 199.52623 4.0106889e-47 251.18864 4.0106889e-47 316.22777 4.0106889e-47 398.10717 4.0106889e-47 501.18723 4.0106889e-47 630.95734 4.0106889e-47 794.32823 4.0106889e-47 1000 4.0106889e-47 1258.93 4.0106889e-47 1584.89 4.0106889e-47 1995.26 4.0106889e-47 2511.89 4.0106889e-47 3162.28 4.0106889e-47 3981.07 4.0106889e-47 5011.87 4.0106889e-47 6309.57 4.0106889e-47 7943.28 4.0106889e-47 10000 4.0106889e-47 12589.25 4.0106889e-47 15848.93 4.0106889e-47 19952.62 4.0106889e-47 25118.86 4.0106889e-47 31622.78 4.0106889e-47 39810.72 4.0106889e-47 50118.72 4.0106889e-47 63095.73 4.0106889e-47 79432.82 4.0106889e-47 100000 4.0106889e-47 125892.54 4.0106889e-47 158489.32 4.0106889e-47 199526.23 4.0106889e-47 251188.64 4.0106889e-47 316227.77 4.0106889e-47 398107.17 4.0106889e-47 501187.23 4.0106889e-47 630957.34 4.0106889e-47 794328.23 4.0106889e-47 1000000 4.0106889e-47 1258930 4.0106889e-47 1584890 4.0106889e-47 1995260 4.0106889e-47 2511890 4.0106889e-47 3162280 4.0106889e-47 3981070 4.0106889e-47 5011870 4.0106889e-47 6309570 4.0106889e-47 7943280 4.0106889e-47 10000000 4.0106889e-47 12589250 4.0106889e-47 15848930 4.0106889e-47 19952620 4.0106889e-47 25118860 4.0106889e-47 31622780 4.0106889e-47 39810720 4.0106889e-47 50118720 4.0106889e-47 63095730 4.0106889e-47 79432820 4.0106889e-47 100000000 4.0106889e-47 100.00000 7.9852096e-47 125.89254 7.9852096e-47 158.48932 7.9852096e-47 199.52623 7.9852096e-47 251.18864 7.9852096e-47 316.22777 7.9852096e-47 398.10717 7.9852096e-47 501.18723 7.9852096e-47 630.95734 7.9852096e-47 794.32823 7.9852096e-47 1000 7.9852096e-47 1258.93 7.9852096e-47 1584.89 7.9852096e-47 1995.26 7.9852096e-47 2511.89 7.9852096e-47 3162.28 7.9852096e-47 3981.07 7.9852096e-47 5011.87 7.9852096e-47 6309.57 7.9852096e-47 7943.28 7.9852096e-47 10000 7.9852096e-47 12589.25 7.9852096e-47 15848.93 7.9852096e-47 19952.62 7.9852096e-47 25118.86 7.9852096e-47 31622.78 7.9852096e-47 39810.72 7.9852096e-47 50118.72 7.9852096e-47 63095.73 7.9852096e-47 79432.82 7.9852096e-47 100000 7.9852096e-47 125892.54 7.9852096e-47 158489.32 7.9852096e-47 199526.23 7.9852096e-47 251188.64 7.9852096e-47 316227.77 7.9852096e-47 398107.17 7.9852096e-47 501187.23 7.9852096e-47 630957.34 7.9852096e-47 794328.23 7.9852096e-47 1000000 7.9852096e-47 1258930 7.9852096e-47 1584890 7.9852096e-47 1995260 7.9852096e-47 2511890 7.9852096e-47 3162280 7.9852096e-47 3981070 7.9852096e-47 5011870 7.9852096e-47 6309570 7.9852096e-47 7943280 7.9852096e-47 10000000 7.9852096e-47 12589250 7.9852096e-47 15848930 7.9852096e-47 19952620 7.9852096e-47 25118860 7.9852096e-47 31622780 7.9852096e-47 39810720 7.9852096e-47 50118720 7.9852096e-47 63095730 7.9852096e-47 79432820 7.9852096e-47 100000000 7.9852096e-47 100.00000 1.010025e-48 125.89254 1.010025e-48 158.48932 1.010025e-48 199.52623 1.010025e-48 251.18864 1.010025e-48 316.22777 1.010025e-48 398.10717 1.010025e-48 501.18723 1.010025e-48 630.95734 1.010025e-48 794.32823 1.010025e-48 1000 1.010025e-48 1258.93 1.010025e-48 1584.89 1.010025e-48 1995.26 1.010025e-48 2511.89 1.010025e-48 3162.28 1.010025e-48 3981.07 1.010025e-48 5011.87 1.010025e-48 6309.57 1.010025e-48 7943.28 1.010025e-48 10000 1.010025e-48 12589.25 1.010025e-48 15848.93 1.010025e-48 19952.62 1.010025e-48 25118.86 1.010025e-48 31622.78 1.010025e-48 39810.72 1.010025e-48 50118.72 1.010025e-48 63095.73 1.010025e-48 79432.82 1.010025e-48 100000 1.010025e-48 125892.54 1.010025e-48 158489.32 1.010025e-48 199526.23 1.010025e-48 251188.64 1.010025e-48 316227.77 1.010025e-48 398107.17 1.010025e-48 501187.23 1.010025e-48 630957.34 1.010025e-48 794328.23 1.010025e-48 1000000 1.010025e-48 1258930 1.010025e-48 1584890 1.010025e-48 1995260 1.010025e-48 2511890 1.010025e-48 3162280 1.010025e-48 3981070 1.010025e-48 5011870 1.010025e-48 6309570 1.010025e-48 7943280 1.010025e-48 10000000 1.010025e-48 12589250 1.010025e-48 15848930 1.010025e-48 19952620 1.010025e-48 25118860 1.010025e-48 31622780 1.010025e-48 39810720 1.010025e-48 50118720 1.010025e-48 63095730 1.010025e-48 79432820 1.010025e-48 100000000 1.010025e-48 100.00000 1.2880921e-47 125.89254 1.2880921e-47 158.48932 1.2880921e-47 199.52623 1.2880921e-47 251.18864 1.2880921e-47 316.22777 1.2880921e-47 398.10717 1.2880921e-47 501.18723 1.2880921e-47 630.95734 1.2880921e-47 794.32823 1.2880921e-47 1000 1.2880921e-47 1258.93 1.2880921e-47 1584.89 1.2880921e-47 1995.26 1.2880921e-47 2511.89 1.2880921e-47 3162.28 1.2880921e-47 3981.07 1.2880921e-47 5011.87 1.2880921e-47 6309.57 1.2880921e-47 7943.28 1.2880921e-47 10000 1.2880921e-47 12589.25 1.2880921e-47 15848.93 1.2880921e-47 19952.62 1.2880921e-47 25118.86 1.2880921e-47 31622.78 1.2880921e-47 39810.72 1.2880921e-47 50118.72 1.2880921e-47 63095.73 1.2880921e-47 79432.82 1.2880921e-47 100000 1.2880921e-47 125892.54 1.2880921e-47 158489.32 1.2880921e-47 199526.23 1.2880921e-47 251188.64 1.2880921e-47 316227.77 1.2880921e-47 398107.17 1.2880921e-47 501187.23 1.2880921e-47 630957.34 1.2880921e-47 794328.23 1.2880921e-47 1000000 1.2880921e-47 1258930 1.2880921e-47 1584890 1.2880921e-47 1995260 1.2880921e-47 2511890 1.2880921e-47 3162280 1.2880921e-47 3981070 1.2880921e-47 5011870 1.2880921e-47 6309570 1.2880921e-47 7943280 1.2880921e-47 10000000 1.2880921e-47 12589250 1.2880921e-47 15848930 1.2880921e-47 19952620 1.2880921e-47 25118860 1.2880921e-47 31622780 1.2880921e-47 39810720 1.2880921e-47 50118720 1.2880921e-47 63095730 1.2880921e-47 79432820 1.2880921e-47 100000000 1.2880921e-47 100.00000 3.8700841e-47 125.89254 3.8700841e-47 158.48932 3.8700841e-47 199.52623 3.8700841e-47 251.18864 3.8700841e-47 316.22777 3.8700841e-47 398.10717 3.8700841e-47 501.18723 3.8700841e-47 630.95734 3.8700841e-47 794.32823 3.8700841e-47 1000 3.8700841e-47 1258.93 3.8700841e-47 1584.89 3.8700841e-47 1995.26 3.8700841e-47 2511.89 3.8700841e-47 3162.28 3.8700841e-47 3981.07 3.8700841e-47 5011.87 3.8700841e-47 6309.57 3.8700841e-47 7943.28 3.8700841e-47 10000 3.8700841e-47 12589.25 3.8700841e-47 15848.93 3.8700841e-47 19952.62 3.8700841e-47 25118.86 3.8700841e-47 31622.78 3.8700841e-47 39810.72 3.8700841e-47 50118.72 3.8700841e-47 63095.73 3.8700841e-47 79432.82 3.8700841e-47 100000 3.8700841e-47 125892.54 3.8700841e-47 158489.32 3.8700841e-47 199526.23 3.8700841e-47 251188.64 3.8700841e-47 316227.77 3.8700841e-47 398107.17 3.8700841e-47 501187.23 3.8700841e-47 630957.34 3.8700841e-47 794328.23 3.8700841e-47 1000000 3.8700841e-47 1258930 3.8700841e-47 1584890 3.8700841e-47 1995260 3.8700841e-47 2511890 3.8700841e-47 3162280 3.8700841e-47 3981070 3.8700841e-47 5011870 3.8700841e-47 6309570 3.8700841e-47 7943280 3.8700841e-47 10000000 3.8700841e-47 12589250 3.8700841e-47 15848930 3.8700841e-47 19952620 3.8700841e-47 25118860 3.8700841e-47 31622780 3.8700841e-47 39810720 3.8700841e-47 50118720 3.8700841e-47 63095730 3.8700841e-47 79432820 3.8700841e-47 100000000 3.8700841e-47 100.00000 7.8481881e-47 125.89254 7.8481881e-47 158.48932 7.8481881e-47 199.52623 7.8481881e-47 251.18864 7.8481881e-47 316.22777 7.8481881e-47 398.10717 7.8481881e-47 501.18723 7.8481881e-47 630.95734 7.8481881e-47 794.32823 7.8481881e-47 1000 7.8481881e-47 1258.93 7.8481881e-47 1584.89 7.8481881e-47 1995.26 7.8481881e-47 2511.89 7.8481881e-47 3162.28 7.8481881e-47 3981.07 7.8481881e-47 5011.87 7.8481881e-47 6309.57 7.8481881e-47 7943.28 7.8481881e-47 10000 7.8481881e-47 12589.25 7.8481881e-47 15848.93 7.8481881e-47 19952.62 7.8481881e-47 25118.86 7.8481881e-47 31622.78 7.8481881e-47 39810.72 7.8481881e-47 50118.72 7.8481881e-47 63095.73 7.8481881e-47 79432.82 7.8481881e-47 100000 7.8481881e-47 125892.54 7.8481881e-47 158489.32 7.8481881e-47 199526.23 7.8481881e-47 251188.64 7.8481881e-47 316227.77 7.8481881e-47 398107.17 7.8481881e-47 501187.23 7.8481881e-47 630957.34 7.8481881e-47 794328.23 7.8481881e-47 1000000 7.8481881e-47 1258930 7.8481881e-47 1584890 7.8481881e-47 1995260 7.8481881e-47 2511890 7.8481881e-47 3162280 7.8481881e-47 3981070 7.8481881e-47 5011870 7.8481881e-47 6309570 7.8481881e-47 7943280 7.8481881e-47 10000000 7.8481881e-47 12589250 7.8481881e-47 15848930 7.8481881e-47 19952620 7.8481881e-47 25118860 7.8481881e-47 31622780 7.8481881e-47 39810720 7.8481881e-47 50118720 7.8481881e-47 63095730 7.8481881e-47 79432820 7.8481881e-47 100000000 7.8481881e-47 100.00000 2.569609e-48 125.89254 2.569609e-48 158.48932 2.569609e-48 199.52623 2.569609e-48 251.18864 2.569609e-48 316.22777 2.569609e-48 398.10717 2.569609e-48 501.18723 2.569609e-48 630.95734 2.569609e-48 794.32823 2.569609e-48 1000 2.569609e-48 1258.93 2.569609e-48 1584.89 2.569609e-48 1995.26 2.569609e-48 2511.89 2.569609e-48 3162.28 2.569609e-48 3981.07 2.569609e-48 5011.87 2.569609e-48 6309.57 2.569609e-48 7943.28 2.569609e-48 10000 2.569609e-48 12589.25 2.569609e-48 15848.93 2.569609e-48 19952.62 2.569609e-48 25118.86 2.569609e-48 31622.78 2.569609e-48 39810.72 2.569609e-48 50118.72 2.569609e-48 63095.73 2.569609e-48 79432.82 2.569609e-48 100000 2.569609e-48 125892.54 2.569609e-48 158489.32 2.569609e-48 199526.23 2.569609e-48 251188.64 2.569609e-48 316227.77 2.569609e-48 398107.17 2.569609e-48 501187.23 2.569609e-48 630957.34 2.569609e-48 794328.23 2.569609e-48 1000000 2.569609e-48 1258930 2.569609e-48 1584890 2.569609e-48 1995260 2.569609e-48 2511890 2.569609e-48 3162280 2.569609e-48 3981070 2.569609e-48 5011870 2.569609e-48 6309570 2.569609e-48 7943280 2.569609e-48 10000000 2.569609e-48 12589250 2.569609e-48 15848930 2.569609e-48 19952620 2.569609e-48 25118860 2.569609e-48 31622780 2.569609e-48 39810720 2.569609e-48 50118720 2.569609e-48 63095730 2.569609e-48 79432820 2.569609e-48 100000000 2.569609e-48 100.00000 1.56025e-47 125.89254 1.56025e-47 158.48932 1.56025e-47 199.52623 1.56025e-47 251.18864 1.56025e-47 316.22777 1.56025e-47 398.10717 1.56025e-47 501.18723 1.56025e-47 630.95734 1.56025e-47 794.32823 1.56025e-47 1000 1.56025e-47 1258.93 1.56025e-47 1584.89 1.56025e-47 1995.26 1.56025e-47 2511.89 1.56025e-47 3162.28 1.56025e-47 3981.07 1.56025e-47 5011.87 1.56025e-47 6309.57 1.56025e-47 7943.28 1.56025e-47 10000 1.56025e-47 12589.25 1.56025e-47 15848.93 1.56025e-47 19952.62 1.56025e-47 25118.86 1.56025e-47 31622.78 1.56025e-47 39810.72 1.56025e-47 50118.72 1.56025e-47 63095.73 1.56025e-47 79432.82 1.56025e-47 100000 1.56025e-47 125892.54 1.56025e-47 158489.32 1.56025e-47 199526.23 1.56025e-47 251188.64 1.56025e-47 316227.77 1.56025e-47 398107.17 1.56025e-47 501187.23 1.56025e-47 630957.34 1.56025e-47 794328.23 1.56025e-47 1000000 1.56025e-47 1258930 1.56025e-47 1584890 1.56025e-47 1995260 1.56025e-47 2511890 1.56025e-47 3162280 1.56025e-47 3981070 1.56025e-47 5011870 1.56025e-47 6309570 1.56025e-47 7943280 1.56025e-47 10000000 1.56025e-47 12589250 1.56025e-47 15848930 1.56025e-47 19952620 1.56025e-47 25118860 1.56025e-47 31622780 1.56025e-47 39810720 1.56025e-47 50118720 1.56025e-47 63095730 1.56025e-47 79432820 1.56025e-47 100000000 1.56025e-47 100.00000 4.16025e-47 125.89254 4.16025e-47 158.48932 4.16025e-47 199.52623 4.16025e-47 251.18864 4.16025e-47 316.22777 4.16025e-47 398.10717 4.16025e-47 501.18723 4.16025e-47 630.95734 4.16025e-47 794.32823 4.16025e-47 1000 4.16025e-47 1258.93 4.16025e-47 1584.89 4.16025e-47 1995.26 4.16025e-47 2511.89 4.16025e-47 3162.28 4.16025e-47 3981.07 4.16025e-47 5011.87 4.16025e-47 6309.57 4.16025e-47 7943.28 4.16025e-47 10000 4.16025e-47 12589.25 4.16025e-47 15848.93 4.16025e-47 19952.62 4.16025e-47 25118.86 4.16025e-47 31622.78 4.16025e-47 39810.72 4.16025e-47 50118.72 4.16025e-47 63095.73 4.16025e-47 79432.82 4.16025e-47 100000 4.16025e-47 125892.54 4.16025e-47 158489.32 4.16025e-47 199526.23 4.16025e-47 251188.64 4.16025e-47 316227.77 4.16025e-47 398107.17 4.16025e-47 501187.23 4.16025e-47 630957.34 4.16025e-47 794328.23 4.16025e-47 1000000 4.16025e-47 1258930 4.16025e-47 1584890 4.16025e-47 1995260 4.16025e-47 2511890 4.16025e-47 3162280 4.16025e-47 3981070 4.16025e-47 5011870 4.16025e-47 6309570 4.16025e-47 7943280 4.16025e-47 10000000 4.16025e-47 12589250 4.16025e-47 15848930 4.16025e-47 19952620 4.16025e-47 25118860 4.16025e-47 31622780 4.16025e-47 39810720 4.16025e-47 50118720 4.16025e-47 63095730 4.16025e-47 79432820 4.16025e-47 100000000 4.16025e-47 100.00000 8.1072016e-47 125.89254 8.1072016e-47 158.48932 8.1072016e-47 199.52623 8.1072016e-47 251.18864 8.1072016e-47 316.22777 8.1072016e-47 398.10717 8.1072016e-47 501.18723 8.1072016e-47 630.95734 8.1072016e-47 794.32823 8.1072016e-47 1000 8.1072016e-47 1258.93 8.1072016e-47 1584.89 8.1072016e-47 1995.26 8.1072016e-47 2511.89 8.1072016e-47 3162.28 8.1072016e-47 3981.07 8.1072016e-47 5011.87 8.1072016e-47 6309.57 8.1072016e-47 7943.28 8.1072016e-47 10000 8.1072016e-47 12589.25 8.1072016e-47 15848.93 8.1072016e-47 19952.62 8.1072016e-47 25118.86 8.1072016e-47 31622.78 8.1072016e-47 39810.72 8.1072016e-47 50118.72 8.1072016e-47 63095.73 8.1072016e-47 79432.82 8.1072016e-47 100000 8.1072016e-47 125892.54 8.1072016e-47 158489.32 8.1072016e-47 199526.23 8.1072016e-47 251188.64 8.1072016e-47 316227.77 8.1072016e-47 398107.17 8.1072016e-47 501187.23 8.1072016e-47 630957.34 8.1072016e-47 794328.23 8.1072016e-47 1000000 8.1072016e-47 1258930 8.1072016e-47 1584890 8.1072016e-47 1995260 8.1072016e-47 2511890 8.1072016e-47 3162280 8.1072016e-47 3981070 8.1072016e-47 5011870 8.1072016e-47 6309570 8.1072016e-47 7943280 8.1072016e-47 10000000 8.1072016e-47 12589250 8.1072016e-47 15848930 8.1072016e-47 19952620 8.1072016e-47 25118860 8.1072016e-47 31622780 8.1072016e-47 39810720 8.1072016e-47 50118720 8.1072016e-47 63095730 8.1072016e-47 79432820 8.1072016e-47 100000000 8.1072016e-47 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_core_st.standard0000644000175000017500000000464714163340332025203 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -5.10853e-05 0. 0. 5.10853e-05 -1.10000 -4.7695e-05 0. 0. 4.7695e-05 -1.00000 -4.37465e-05 0. 0. 4.37465e-05 -0.9 -3.91683e-05 0. 0. 3.91683e-05 -0.8 -3.38954e-05 0. 0. 3.38954e-05 -0.7 -2.7888e-05 0. 0. 2.7888e-05 -0.6 -2.11738e-05 0. 0. 2.11738e-05 -0.5 -1.39525e-05 0. 0. 1.39525e-05 -0.4 -6.8885e-06 0. 0. 6.8885e-06 -0.3 -1.782e-06 0. 0. 1.782e-06 -0.2 -1.81348e-07 0. 0. 1.81348e-07 -1.20000 -0.0005090194 0. 0. 0.0005090194 -1.10000 -0.0004313848 0. 0. 0.0004313848 -1.00000 -0.0003570024 0. 0. 0.0003570024 -0.9 -0.0002863323 0. 0. 0.0002863323 -0.8 -0.0002200689 0. 0. 0.0002200689 -0.7 -0.000159382 0. 0. 0.000159382 -0.6 -0.0001059777 0. 0. 0.0001059777 -0.5 -6.1962e-05 0. 0. 6.1962e-05 -0.4 -2.94524e-05 0. 0. 2.94524e-05 -0.3 -9.743e-06 0. 0. 9.743e-06 -0.2 -1.7033e-06 0. 0. 1.7033e-06 -1.20000 -8.297e-05 0. 0. 8.297e-05 -1.10000 -7.71228e-05 0. 0. 7.71228e-05 -1.00000 -7.03317e-05 0. 0. 7.03317e-05 -0.9 -6.24736e-05 0. 0. 6.24736e-05 -0.8 -5.34335e-05 0. 0. 5.34335e-05 -0.7 -4.31339e-05 0. 0. 4.31339e-05 -0.6 -3.1608e-05 0. 0. 3.1608e-05 -0.5 -1.92106e-05 0. 0. 1.92106e-05 -0.4 -7.407e-06 0. 0. 7.407e-06 -0.3 -8.343314e-07 0. 0. 8.343314e-07 -0.2 -2.50982e-08 0. 0. 2.50982e-08 -1.20000 -0.0008209902 0. 0. 0.0008209902 -1.10000 -0.000692962 0. 0. 0.000692962 -1.00000 -0.0005697477 0. 0. 0.0005697477 -0.9 -0.0004521836 0. 0. 0.0004521836 -0.8 -0.0003418038 0. 0. 0.0003418038 -0.7 -0.0002411151 0. 0. 0.0002411151 -0.6 -0.0001535499 0. 0. 0.0001535499 -0.5 -8.31497e-05 0. 0. 8.31497e-05 -0.4 -3.38471e-05 0. 0. 3.38471e-05 -0.3 -7.6688e-06 0. 0. 7.6688e-06 -0.2 -5.278828e-07 0. 0. 5.278828e-07 -1.20000 -2.85545e-05 0. 0. 2.85545e-05 -1.10000 -2.67958e-05 0. 0. 2.67958e-05 -1.00000 -2.47412e-05 0. 0. 2.47412e-05 -0.9 -2.23541e-05 0. 0. 2.23541e-05 -0.8 -1.9603e-05 0. 0. 1.9603e-05 -0.7 -1.64721e-05 0. 0. 1.64721e-05 -0.6 -1.29819e-05 0. 0. 1.29819e-05 -0.5 -9.2335e-06 0. 0. 9.2335e-06 -0.4 -5.5004e-06 0. 0. 5.5004e-06 -0.3 -2.3798e-06 0. 0. 2.3798e-06 -0.2 -6.326331e-07 0. 0. 6.326331e-07 -1.20000 -0.0002871493 0. 0. 0.0002871493 -1.10000 -0.0002443869 0. 0. 0.0002443869 -1.00000 -0.0002035396 0. 0. 0.0002035396 -0.9 -0.0001649673 0. 0. 0.0001649673 -0.8 -0.0001290138 0. 0. 0.0001290138 -0.7 -9.61401e-05 0. 0. 9.61401e-05 -0.6 -6.70013e-05 0. 0. 6.70013e-05 -0.5 -4.24436e-05 0. 0. 4.24436e-05 -0.4 -2.33663e-05 0. 0. 2.33663e-05 -0.3 -1.0402e-05 0. 0. 1.0402e-05 -0.2 -3.3809e-06 0. 0. 3.3809e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_ig_lw.standard0000644000175000017500000000640214163340332024664 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 -3.719e-28 1.33884702600972e-13 5.99314011642844e-14 5.99314011642844e-14 -0.8 -2.315e-28 1.34576302614407e-13 5.98145011620134e-14 5.98145011620134e-14 -0.4 0. 1.24034102409604e-13 5.36660010425668e-14 5.36660010425668e-14 1.11022302462516e-16 0. 3.32923006467679e-14 2.88750005609532e-15 2.88750005609532e-15 0.4 0. 3.68296007154869e-14 1.27780002482376e-15 1.27780002482376e-15 0.8 0. 4.98347009681363e-14 4.29334808340666e-16 4.29334808340666e-16 1.2 0. 1.01124301964537e-13 -2.24730004365819e-15 -2.24730004365819e-15 -1.2 0.0017094 9.46040018378673e-14 6.48332012595114e-14 1.39859002717034e-14 -0.8 0.0014146 9.24749017965054e-14 6.54903012722769e-14 9.89780019228408e-15 -0.4 0.0007909036 8.43537016387353e-14 5.8075401128228e-14 7.30170014184977e-15 1.11022302462516e-16 7.7065e-06 3.07940005982336e-14 -9.15991217794917e-16 5.60960010897743e-15 0.4 2.377686e-10 3.45019006702667e-14 -2.7071000525907e-15 4.86420009449658e-15 0.8 1.54321e-14 4.64296009019856e-14 -3.31010006430515e-15 3.89610007568935e-15 1.2 9.9461e-18 9.19084017855001e-14 -6.55100012726596e-15 2.00850003901903e-15 -1.2 -3.733e-28 1.35360602629644e-13 6.02890011712315e-14 6.02890011712315e-14 -0.8 -2.317e-28 1.36746702656572e-13 6.05248011758124e-14 6.05248011758124e-14 -0.4 0. 1.2664830246039e-13 5.46684010620404e-14 5.46684010620404e-14 1.11022302462516e-16 0. 3.11224006046134e-14 1.85930003612053e-15 1.85930003612053e-15 0.4 0. 3.60814007009516e-14 1.22760002384853e-15 1.22760002384853e-15 0.8 0. 4.781450092889e-14 4.08703207939857e-16 4.08703207939857e-16 1.2 0. 9.98197019391925e-14 -2.4511000476174e-15 -2.4511000476174e-15 -1.2 0.0028026 9.5091401847336e-14 6.55605012736407e-14 1.32521002574479e-14 -0.8 0.0023308 9.38997018241849e-14 6.66459012947267e-14 9.72980018902036e-15 -0.4 0.0012062 8.62278016751433e-14 5.98180011620814e-14 7.14420013879003e-15 1.11022302462516e-16 7.826264e-07 2.90948005652233e-14 -2.51720004890152e-15 5.66370011002843e-15 0.4 5.527851e-13 3.38181006569826e-14 -2.84900005534739e-15 4.91730009552815e-15 0.8 1.0183e-18 4.46208008668461e-14 -3.41760006639355e-15 3.97530007722796e-15 1.2 3.318e-23 9.05602017593086e-14 -7.09240013778371e-15 2.21110004295493e-15 -1.2 -3.681e-28 1.31650402557566e-13 5.93933011538308e-14 5.93933011538308e-14 -0.8 -2.299e-28 1.31327302551289e-13 5.87476011412868e-14 5.87476011412868e-14 -0.4 0. 1.20146602334082e-13 5.21613010133351e-14 5.21613010133351e-14 1.11022302462516e-16 0. 4.49723008736747e-14 9.20960017891445e-15 9.20960017891445e-15 0.4 0. 3.8148600741111e-14 1.36540002652556e-15 1.36540002652556e-15 0.8 0. 5.35254010398354e-14 4.65100909035493e-16 4.65100909035493e-16 1.2 0. 1.01324501968426e-13 -1.82140003538425e-15 -1.82140003538425e-15 -1.2 0.0009328494 9.42266018305356e-14 6.36586012366925e-14 1.5565800302396e-14 -0.8 0.0007884919 9.03032017543159e-14 6.37554012385731e-14 1.00995001962025e-14 -0.4 0.0004646399 8.16339015858978e-14 5.55683010795227e-14 7.48160014534468e-15 1.11022302462516e-16 3.11882e-05 3.78021007343796e-14 6.49560012618971e-15 5.52190010727368e-15 0.4 2.78488e-08 3.57052006936432e-14 -2.46490004788549e-15 4.77690009280061e-15 0.8 3.65763e-11 4.96966009654534e-14 -3.12390006068785e-15 3.76000007304534e-15 1.2 2.570672e-13 9.22817017927521e-14 -5.48490010655489e-15 1.69290003288789e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_core_lt.standard0000644000175000017500000000631314163340332025213 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.59400012810132e-15 2.9350000570181e-15 2.9350000570181e-15 -0.8 0. 6.6127001284646e-15 2.92060005673835e-15 2.92060005673835e-15 -0.4 0. 6.03040011715229e-15 2.58340005018759e-15 2.58340005018759e-15 1.11022302462516e-16 0. 1.65450003214189e-15 1.24764902423802e-16 1.24764902423802e-16 0.4 0. 1.86380003620795e-15 5.90523011472062e-17 5.90523011472062e-17 0.8 0. 2.52170004898894e-15 1.46544002846903e-17 1.46544002846903e-17 1.2 0. 5.02360009759323e-15 -1.21978802369676e-16 -1.21978802369676e-16 -1.2 8.39682e-05 4.64480009023431e-15 3.17280006163783e-15 6.61593112852737e-16 -0.8 6.91572e-05 4.55430008847617e-15 3.19340006203803e-15 4.8511060942422e-16 -0.4 3.77724e-05 4.11660007997299e-15 2.78470005409823e-15 3.58656406967601e-16 1.11022302462516e-16 2.874499e-07 1.53720002986311e-15 -7.5238001461645e-17 2.79835105436343e-16 0.4 1.11725e-11 1.74700003393888e-15 -1.43921302795952e-16 2.42410904709305e-16 0.8 9.314105e-16 2.35050004566305e-15 -1.7774020345295e-16 1.94001703768862e-16 1.2 7.561e-19 4.57370008885305e-15 -3.45575906713486e-16 1.00430101951051e-16 -1.2 0. 6.6682001295428e-15 2.95330005737362e-15 2.95330005737362e-15 -0.8 0. 6.72220013059185e-15 2.95710005744744e-15 2.95710005744744e-15 -0.4 0. 6.15700011961174e-15 2.63220005113562e-15 2.63220005113562e-15 1.11022302462516e-16 0. 1.57220003054305e-15 8.80433017104129e-17 8.80433017104129e-17 0.4 0. 1.82570003546779e-15 5.6604301099649e-17 5.6604301099649e-17 0.8 0. 2.41940004700157e-15 1.38496002690555e-17 1.38496002690555e-17 1.2 0. 4.96980009654806e-15 -1.3254730257499e-16 -1.3254730257499e-16 -1.2 0.0001377483 4.67420009080546e-15 3.20840006232943e-15 6.3141611226649e-16 -0.8 0.0001143588 4.62650008987879e-15 3.25220006318033e-15 4.77272309271946e-16 -0.4 5.73459e-05 4.20870008176221e-15 2.87080005577089e-15 3.51326006825193e-16 1.11022302462516e-16 2.70478e-08 1.47060002856928e-15 -1.34662602616084e-16 2.82415105486464e-16 0.4 2.63812e-14 1.71220003326283e-15 -1.50906302931649e-16 2.4506780476092e-16 0.8 6.787e-20 2.25890004388354e-15 -1.8271730354964e-16 1.97964003845837e-16 1.2 3.056e-24 4.51670008774571e-15 -3.73187707249899e-16 1.10301102142814e-16 -1.2 0. 6.48150012591579e-15 2.90710005647609e-15 2.90710005647609e-15 -0.8 0. 6.4485001252747e-15 2.86570005567182e-15 2.86570005567182e-15 -0.4 0. 5.84020011345728e-15 2.50910004874416e-15 2.50910004874416e-15 1.11022302462516e-16 0. 2.12510004128421e-15 3.76817607320417e-16 3.76817607320417e-16 0.4 0. 1.93080003750956e-15 6.32999012297241e-17 6.32999012297241e-17 0.8 0. 2.7071000525907e-15 1.61027003128264e-17 1.61027003128264e-17 1.2 0. 5.02370009759518e-15 -1.00380701950091e-16 -1.00380701950091e-16 -1.2 4.58224e-05 4.61760008970589e-15 3.11530006052078e-15 7.29527814172501e-16 -0.8 3.83815e-05 4.44400008633337e-15 3.1048000603168e-15 4.94330109603327e-16 -0.4 2.22339e-05 3.98260007736978e-15 2.66040005168346e-15 3.66914007128021e-16 1.11022302462516e-16 1.2835e-06 1.82870003552607e-15 2.29222604453096e-16 2.75304505348327e-16 0.4 1.296e-09 1.80810003512587e-15 -1.32045202565236e-16 2.38047504624537e-16 0.8 2.0361e-12 2.51450004884907e-15 -1.68985303282869e-16 1.87177703636292e-16 1.2 1.67485e-14 4.5832000890376e-15 -2.92007605672818e-16 8.50650016525536e-17 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_ig_st.standard0000644000175000017500000001730614163340332024672 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 9.9319e-05 5.5020831068887e-16 2.71773205279725e-16 1.36763202656892e-16 -1 7.80828e-05 5.45206210591695e-16 2.6021840505525e-16 1.40641902732243e-16 -0.8 5.97328e-05 5.40390310498136e-16 2.47634904810791e-16 1.45513502826884e-16 -0.6 4.43065e-05 5.36411810420846e-16 2.34253004550822e-16 1.51807802949163e-16 -0.4 3.19241e-05 5.3374251036899e-16 2.20541904284457e-16 1.59553903099646e-16 -0.2 2.34406e-05 5.29912010294575e-16 2.08101204042772e-16 1.64759803200781e-16 -5.55111512312578e-17 2.118e-20 5.43987710568023e-16 1.92784003745205e-16 1.92784003745205e-16 0.2 -0.0002284197 7.46544914503092e-16 1.83278103560535e-16 4.28161708317877e-16 -1.2 0.0004281825 6.91602513435728e-16 4.28680608327957e-16 1.40181102723291e-16 -1 0.0003858533 6.99638313591839e-16 4.31360708380023e-16 1.44734402811748e-16 -0.8 0.0003460287 7.09218813777959e-16 4.34001808431332e-16 1.50832002930206e-16 -0.6 0.0003103491 7.20162813990568e-16 4.36642308482629e-16 1.58252203074358e-16 -0.4 0.0002844778 7.28839614159132e-16 4.39498008538106e-16 1.63164703169793e-16 -0.2 0.0002468922 7.62475914812582e-16 4.37551608500294e-16 2.00470803894537e-16 -5.55111512312578e-17 5.554e-20 8.82011717134799e-16 3.83674107453618e-16 3.83674107453618e-16 0.2 -0.0002722806 8.96988817425758e-16 3.45811706718067e-16 4.38191808512731e-16 -1.2 0.0006568435 7.25355014091437e-16 4.58260408902603e-16 1.51741502947875e-16 -1 0.000607586 7.3707861431919e-16 4.62834008991454e-16 1.58419203077602e-16 -0.8 0.0005669838 7.49819114566699e-16 4.67563209083328e-16 1.6594730322385e-16 -0.6 0.0005431736 7.59770314760021e-16 4.72571409180622e-16 1.70430503310945e-16 -0.4 0.00049986 7.92965715404906e-16 4.75286809233374e-16 2.02321103930482e-16 -0.2 0.0002602958 9.03509617552437e-16 4.34716008445207e-16 3.60740507008088e-16 -5.55111512312578e-17 5.886e-20 9.44561218349945e-16 4.19664008152792e-16 4.19664008152792e-16 0.2 -0.0002023785 9.40333518267813e-16 4.19040708140683e-16 4.16685208094923e-16 -1.2 0.0007606469 7.40057714377065e-16 4.63314209000783e-16 1.66795203240322e-16 -1 0.0007261125 7.52557914619906e-16 4.68150309094733e-16 1.74138103382972e-16 -0.8 0.0007106314 7.62406514811234e-16 4.73281109194409e-16 1.78595903469574e-16 -0.6 0.0006570161 7.9781121549904e-16 4.76671609260276e-16 2.11853904115675e-16 -0.4 0.0004365522 8.85805217208495e-16 4.52413608789017e-16 3.28494606381649e-16 -0.2 0.0001907978 9.39546918252532e-16 4.12840608020234e-16 4.25021808256878e-16 -5.55111512312578e-17 1.638e-19 9.56712518586008e-16 4.28193408318493e-16 4.28193408318493e-16 0.2 -0.0001396718 9.48623318428859e-16 4.51547308772188e-16 3.97253707717428e-16 -1.2 9.22725e-05 5.17297810049519e-16 2.34779704561054e-16 1.38346902687659e-16 -1 6.46444e-05 5.06235609834615e-16 2.1627480420156e-16 1.42622602770722e-16 -0.8 4.3012e-05 4.96402709643591e-16 1.97894903844495e-16 1.47842002872119e-16 -0.6 2.70471e-05 4.89164609502977e-16 1.80708903510623e-16 1.54389002999308e-16 -0.4 1.60367e-05 4.85522809432228e-16 1.65813203221245e-16 1.62264703152309e-16 -0.2 9.1935e-06 4.83107409385304e-16 1.55055403012254e-16 1.67358603251267e-16 -5.55111512312578e-17 1.001e-20 4.83962009401906e-16 1.60220503112596e-16 1.60220503112596e-16 0.2 -0.0003311201 7.41968514414186e-16 1.64033203186665e-16 4.4082930856397e-16 -1.2 0.0006745504 7.02935913655902e-16 4.40145808550691e-16 1.38983002700016e-16 -1 0.0006043806 7.10966713811916e-16 4.42892508604051e-16 1.4350630278789e-16 -0.8 0.0005378536 7.20503313997183e-16 4.45565408655977e-16 1.49569302905676e-16 -0.6 0.0004757819 7.31367314208237e-16 4.48192408707012e-16 1.56962403049301e-16 -0.4 0.0004226002 7.39792014371903e-16 4.50976008761089e-16 1.61716903141666e-16 -0.2 0.0003812054 7.54981014666979e-16 4.54054008820885e-16 1.73773503375889e-16 -5.55111512312578e-17 9.498e-20 8.98011817445632e-16 3.90631207588773e-16 3.90631207588773e-16 0.2 -0.0004687482 9.04116517564227e-16 3.36066906528755e-16 4.52034808781658e-16 -1.2 0.0010954 7.33631214252218e-16 4.65854609050135e-16 1.50649902926668e-16 -1 0.0010083 7.45433314481497e-16 4.70556009141469e-16 1.57286003055588e-16 -0.8 0.0009299103 7.58265114730779e-16 4.75415009235864e-16 1.64782503201222e-16 -0.6 0.0008723034 7.68053214920932e-16 4.80548809335598e-16 1.68960803282393e-16 -0.4 0.0008213541 7.90586515358686e-16 4.85978809441087e-16 1.86542103623944e-16 -0.2 0.0004469825 9.12865217734188e-16 4.46617408676415e-16 3.55031306897176e-16 -5.55111512312578e-17 1.509e-19 9.58269318616251e-16 4.24937008255231e-16 4.24937008255231e-16 0.2 -0.0003485651 9.50423018463822e-16 4.19888208157148e-16 4.22562208209095e-16 -1.2 0.0012803 7.45986914492252e-16 4.68221309096113e-16 1.65774003220484e-16 -1 0.0012057 7.58538714736095e-16 4.73126509191406e-16 1.73089703362605e-16 -0.8 0.0011613 7.68014114920173e-16 4.78344709292779e-16 1.77045303439451e-16 -0.6 0.00109 7.97819815499207e-16 4.83697509396768e-16 2.02192603927986e-16 -0.4 0.0007476398 8.90117617292272e-16 4.6194380897416e-16 3.19959006215828e-16 -0.2 0.000327348 9.49520718446293e-16 4.17860108117748e-16 4.26458008284779e-16 -5.55111512312578e-17 1.056e-19 9.66542018776965e-16 4.31338108379584e-16 4.31338108379584e-16 0.2 -0.0002417511 9.56838318588451e-16 4.53367508807549e-16 4.00072707772193e-16 -1.2 8.2896e-05 5.66114410997877e-16 2.89427605622696e-16 1.36267102647254e-16 -1 6.95681e-05 5.66193610999416e-16 2.8364770551041e-16 1.39851102716881e-16 -0.8 5.76133e-05 5.66773111010674e-16 2.77233805385808e-16 1.44406502805378e-16 -0.6 4.72521e-05 5.68325211040826e-16 2.70207705249312e-16 1.50375802921343e-16 -0.4 3.92211e-05 5.7106851109412e-16 2.62732505104092e-16 1.57816003065884e-16 -0.2 3.34599e-05 5.73619411143676e-16 2.55677204967029e-16 1.64715903199928e-16 -5.55111512312578e-17 1.665e-20 6.14617511940144e-16 2.31919804505495e-16 2.31919804505495e-16 0.2 -0.000133333 7.56592814698292e-16 2.19270704259761e-16 4.05951307886396e-16 -1.2 0.000241811 6.75111713115363e-16 4.1193700800268e-16 1.41644702751725e-16 -1 0.0002195935 6.83182913272161e-16 4.14550408053451e-16 1.46238502840968e-16 -0.8 0.0001997853 6.92844513459857e-16 4.17160808104163e-16 1.52387102960417e-16 -0.6 0.0001846702 7.03927713675169e-16 4.19814908155724e-16 1.59878003105942e-16 -0.4 0.0001752985 7.13873913868394e-16 4.22576308209369e-16 1.66232703229395e-16 -0.2 0.0001372509 7.6855241493063e-16 4.12554108014669e-16 2.35521804575471e-16 -5.55111512312578e-17 9.105e-20 8.57971516667771e-16 3.72974207245752e-16 3.72974207245752e-16 0.2 -0.0001408646 8.82149917137483e-16 3.51441806827443e-16 4.21741008193142e-16 -1.2 0.0003508025 7.12520313842097e-16 4.46492908673996e-16 1.53095002974169e-16 -1 0.0003290106 7.24155014068124e-16 4.5090090875963e-16 1.59834003105087e-16 -0.8 0.0003147392 7.36821414314194e-16 4.55462708848252e-16 1.67445303252952e-16 -0.6 0.0003076987 7.47854014528524e-16 4.60204108940363e-16 1.73382403368292e-16 -0.4 0.0002680454 7.93926615423574e-16 4.57750608892699e-16 2.24947204370038e-16 -0.2 0.000135351 8.86557117223102e-16 4.20181808162852e-16 3.62719407046532e-16 -5.55111512312578e-17 4.267e-20 9.23662617943949e-16 4.11440507993035e-16 4.11440507993035e-16 0.2 -0.0001048885 9.24449017959226e-16 4.15581708073486e-16 4.09123307948019e-16 -1.2 0.0004072131 7.30664714194588e-16 4.55605308851022e-16 1.68070403265096e-16 -1 0.0003976303 7.43150214437143e-16 4.60352308943242e-16 1.75503903409506e-16 -0.8 0.000394006 7.54275114653266e-16 4.65274209038859e-16 1.81575703527462e-16 -0.6 0.0003518754 7.96412515471867e-16 4.65366109040645e-16 2.25836804387321e-16 -0.4 0.0002278121 8.75355517005489e-16 4.40589008559301e-16 3.3469020650201e-16 -0.2 9.95644e-05 9.23816517946939e-16 4.06314107893444e-16 4.20976608178292e-16 -5.55111512312578e-17 0. 9.41435318289218e-16 4.23158808220686e-16 4.23158808220686e-16 0.2 -7.20124e-05 9.35865518181014e-16 4.47679508697048e-16 3.93689107648179e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_ig_lw.standard0000644000175000017500000000577114163340332025007 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0001338061 -5287.8 5287.8 0.0001338061 -1.10000 -0.0001298258 -2643.8 2643.8 0.0001298258 -1.00000 -0.0001250983 0. 0. 0.0001250983 -0.9 -0.0001195032 2643.5 -2643.5 0.0001195032 -0.8 -0.0001129081 5286.5 -5286.5 0.0001129081 -0.7 -0.0001051739 7928.9 -7928.9 0.0001051739 -0.6 -9.6167e-05 10570.5 -10570.5 9.6167e-05 -0.5 -8.57834e-05 13210.7 -13210.7 8.57834e-05 -0.4 -7.39902e-05 15849 -15849 7.39902e-05 -0.3 -6.08911e-05 18483.7 -18483.7 6.08911e-05 -0.2 -4.6859e-05 21111.8 -21111.8 4.6859e-05 -1.20000 -0.0015003 -5286.4 5286.4 0.0015003 -1.10000 -0.0013282 -2643 2643 0.0013282 -1.00000 -0.0011589 0. 0. 0.0011589 -0.9 -0.0009958892 2642.6 -2642.6 0.0009958892 -0.8 -0.0008404203 5284.6 -5284.6 0.0008404203 -0.7 -0.0006931948 7925.8 -7925.8 0.0006931948 -0.6 -0.0005552318 10566 -10566 0.0005552318 -0.5 -0.0004282366 13204.6 -13204.6 0.0004282366 -0.4 -0.0003147409 15840.9 -15840.9 0.0003147409 -0.3 -0.0002178844 18473.2 -18473.2 0.0002178844 -0.2 -0.0001407569 21098.2 -21098.2 0.0001407569 -1.20000 -0.0002152149 -3930.5 3930.5 0.0002152149 -1.10000 -0.0002076656 -1965.1 1965.1 0.0002076656 -1.00000 -0.0001987546 0. 0. 0.0001987546 -0.9 -0.000188262 1964.8 -1964.8 0.000188262 -0.8 -0.0001759434 3929 -3929 0.0001759434 -0.7 -0.0001615391 5892.7 -5892.7 0.0001615391 -0.6 -0.0001447953 7855.4 -7855.4 0.0001447953 -0.5 -0.0001255111 9816.6 -9816.6 0.0001255111 -0.4 -0.000103634 11775.4 -11775.4 0.000103634 -0.3 -7.94581e-05 13730.1 -13730.1 7.94581e-05 -0.2 -5.40421e-05 15676.6 -15676.6 5.40421e-05 -1.20000 -0.0023533 -3929 3929 0.0023533 -1.10000 -0.0020694 -1964.3 1964.3 0.0020694 -1.00000 -0.0017924 0. 0. 0.0017924 -0.9 -0.0015257 1963.9 -1963.9 0.0015257 -0.8 -0.0012701 3927.1 -3927.1 0.0012701 -0.7 -0.0010267 5889.6 -5889.6 0.0010267 -0.6 -0.0007982053 7850.9 -7850.9 0.0007982053 -0.5 -0.0005889532 9810.6 -9810.6 0.0005889532 -0.4 -0.0004047908 11767.8 -11767.8 0.0004047908 -0.3 -0.0002522503 13720.7 -13720.7 0.0002522503 -0.2 -0.0001371444 15665.6 -15665.6 0.0001371444 -1.20000 -7.59322e-05 -7456 7456 7.59322e-05 -1.10000 -7.41598e-05 -3727.9 3727.9 7.41598e-05 -1.00000 -7.20187e-05 0. 0. 7.20187e-05 -0.9 -6.94459e-05 3727.6 -3727.6 6.94459e-05 -0.8 -6.63734e-05 7454.8 -7454.8 6.63734e-05 -0.7 -6.27314e-05 11181.5 -11181.5 6.27314e-05 -0.6 -5.84561e-05 14907.4 -14907.4 5.84561e-05 -0.5 -5.35032e-05 18632.2 -18632.2 5.35032e-05 -0.4 -4.78724e-05 22355.3 -22355.3 4.78724e-05 -0.3 -4.16468e-05 26075.5 -26075.5 4.16468e-05 -0.2 -3.50354e-05 29790.6 -29790.6 3.50354e-05 -1.20000 -0.0008834393 -7454.7 7454.7 0.0008834393 -1.10000 -0.0007911658 -3727.2 3727.2 0.0007911658 -1.00000 -0.00069831 0. 0. 0.00069831 -0.9 -0.0006079142 3726.7 -3726.7 0.0006079142 -0.8 -0.0005215513 7452.9 -7452.9 0.0005215513 -0.7 -0.0004401008 11178.4 -11178.4 0.0004401008 -0.6 -0.0003642886 14902.9 -14902.9 0.0003642886 -0.5 -0.000294894 18626 -18626 0.000294894 -0.4 -0.0002328403 22346.8 -22346.8 0.0002328403 -0.3 -0.0001789029 26064 -26064 0.0001789029 -0.2 -0.0001326308 29774.2 -29774.2 0.0001326308 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_ig_sw.standard0000644000175000017500000000625214163340332025040 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.94305003774754e-14 8.60040016707956e-15 8.60040016707956e-15 -0.8 0. 1.96237003812287e-14 8.48360016481049e-15 8.48360016481049e-15 -0.4 0. 1.92511003739902e-14 7.77340015101347e-15 7.77340015101347e-15 1.11022302462516e-16 0. 1.81675003529391e-14 4.21480008188072e-15 4.21480008188072e-15 0.4 0. 1.92441003738542e-14 1.48590002886651e-15 1.48590002886651e-15 0.8 0. 2.00147003888246e-14 1.40910002737452e-15 1.40910002737452e-15 1.2 0. 2.02487003933705e-14 1.39810002716082e-15 1.39810002716082e-15 -1.2 0.0171162 1.56747003045116e-14 9.43280018325055e-15 3.72180007230323e-15 -0.8 0.014752 1.56021003031012e-14 9.43510018329523e-15 3.16260006143968e-15 -0.4 0.0095759 1.54447003000434e-14 8.61170016729908e-15 2.65430005156496e-15 1.11022302462516e-16 0.0021571 1.57220003054305e-14 4.10690007978455e-15 2.20270004279175e-15 0.4 0.0001578808 1.77048003439503e-14 1.19720002325795e-15 1.66420003233033e-15 0.8 2.13123e-05 1.87719003646808e-14 1.64770003200979e-15 1.15770002249058e-15 1.2 5.6679e-06 1.9111900371286e-14 2.04100003965041e-15 6.96878713538229e-16 -1.2 0. 1.95618003800261e-14 8.65030016804896e-15 8.65030016804896e-15 -0.8 0. 1.97950003845565e-14 8.5888001668542e-15 8.5888001668542e-15 -0.4 0. 1.92960003748625e-14 7.8208001519343e-15 7.8208001519343e-15 1.11022302462516e-16 0. 1.67521003254422e-14 2.66670005180585e-15 2.66670005180585e-15 0.4 0. 1.97268003832316e-14 1.73300003366691e-15 1.73300003366691e-15 0.8 0. 2.03356003950587e-14 1.57220003054305e-15 1.57220003054305e-15 1.2 0. 2.04653003975784e-14 1.45600002828564e-15 1.45600002828564e-15 -1.2 0.0282402 1.57283003055529e-14 9.51040018475808e-15 3.67140007132411e-15 -0.8 0.0245996 1.56935003048769e-14 9.56180018575663e-15 3.14130006102588e-15 -0.4 0.0151108 1.54421002999929e-14 8.7970001708989e-15 2.63950005127744e-15 1.11022302462516e-16 0.0015498 1.46685002849642e-14 3.14210006104142e-15 2.2553000438136e-15 0.4 2.17477e-05 1.8193900353452e-14 1.56500003040318e-15 1.65940003223708e-15 0.8 1.9148e-06 1.910130037108e-14 1.77970003457415e-15 1.1561000224595e-15 1.2 4.623748e-07 1.93360003756395e-14 2.04270003968343e-15 6.99450913588199e-16 -1.2 0. 1.9228800373557e-14 8.60570016718252e-15 8.60570016718252e-15 -0.8 0. 1.93511003759329e-14 8.48920016491928e-15 8.48920016491928e-15 -0.4 0. 1.91698003724108e-14 7.8086001516973e-15 7.8086001516973e-15 1.11022302462516e-16 0. 1.89350003678493e-14 5.74160011154179e-15 5.74160011154179e-15 0.4 0. 1.92578003741203e-14 3.07760005978839e-15 3.07760005978839e-15 0.8 0. 1.9640500381555e-14 1.70890003319872e-15 1.70890003319872e-15 1.2 0. 1.99150003868877e-14 1.33570002594858e-15 1.33570002594858e-15 -1.2 0.0093155 1.56221003034898e-14 9.31210018090572e-15 3.8283000743722e-15 -0.8 0.0079782 1.54791003007117e-14 9.24290017956137e-15 3.18940006196032e-15 -0.4 0.0052688 1.55116003013431e-14 8.34070016203438e-15 2.66760005182334e-15 1.11022302462516e-16 0.0021006 1.62489003156666e-14 5.53730010757286e-15 2.17790004230996e-15 0.4 0.0003986839 1.74265003385438e-14 2.53650004927646e-15 1.65540003215938e-15 0.8 9.64804e-05 1.83141003557871e-14 1.69150003286069e-15 1.15450002242842e-15 1.2 3.25211e-05 1.87588003644263e-14 1.92960003748625e-15 6.90100013406539e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_ig_lt.standard0000644000175000017500000000612714163340332025000 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -5.6648e-06 -1298.8 1298.8 5.6648e-06 -1.10000 -5.4053e-06 -1162.1 1162.1 5.4053e-06 -1.00000 -5.1013e-06 -1025.3 1025.3 5.1013e-06 -0.9 -4.7458e-06 -888.5443 888.5443 4.7458e-06 -0.8 -4.3309e-06 -751.7927 751.7927 4.3309e-06 -0.7 -3.8485e-06 -615.0506 615.0506 3.8485e-06 -0.6 -3.2915e-06 -478.3218 478.3218 3.2915e-06 -0.5 -2.6564e-06 -341.6122 341.6122 2.6564e-06 -0.4 -1.9492e-06 -204.9314 204.9314 1.9492e-06 -0.3 -1.2015e-06 -68.2950 68.2950 1.2015e-06 -0.2 -5.123798e-07 68.2763 -68.2763 5.123798e-07 -1.20000 -6.16788e-05 -1298.6 1298.6 6.16788e-05 -1.10000 -5.32916e-05 -1161.8 1161.8 5.32916e-05 -1.00000 -4.51913e-05 -1025.1 1025.1 4.51913e-05 -0.9 -3.74676e-05 -888.3390 888.3390 3.74676e-05 -0.8 -3.01647e-05 -751.6175 751.6175 3.01647e-05 -0.7 -2.33368e-05 -614.9081 614.9081 2.33368e-05 -0.6 -1.70776e-05 -478.2143 478.2143 1.70776e-05 -0.5 -1.15365e-05 -341.5411 341.5411 1.15365e-05 -0.4 -6.9137e-06 -204.8954 204.8954 6.9137e-06 -0.3 -3.4262e-06 -68.2867 68.2867 3.4262e-06 -0.2 -1.2262e-06 68.2731 -68.2731 1.2262e-06 -1.20000 -9.2065e-06 -965.4452 965.4452 9.2065e-06 -1.10000 -8.7468e-06 -863.7688 863.7688 8.7468e-06 -1.00000 -8.2102e-06 -762.0964 762.0964 8.2102e-06 -0.9 -7.5843e-06 -660.4291 660.4291 7.5843e-06 -0.8 -6.8556e-06 -558.7689 558.7689 6.8556e-06 -0.7 -6.0101e-06 -457.1182 457.1182 6.0101e-06 -0.6 -5.035e-06 -355.4812 355.4812 5.035e-06 -0.5 -3.924e-06 -253.8644 253.8644 3.924e-06 -0.4 -2.69e-06 -152.2786 152.2786 2.69e-06 -0.3 -1.4053e-06 -50.7422 50.7422 1.4053e-06 -0.2 -3.539585e-07 50.7229 -50.7229 3.539585e-07 -1.20000 -9.80966e-05 -965.1650 965.1650 9.80966e-05 -1.10000 -8.43713e-05 -863.5084 863.5084 8.43713e-05 -1.00000 -7.11403e-05 -761.8613 761.8613 7.11403e-05 -0.9 -5.84791e-05 -660.2225 660.2225 5.84791e-05 -0.8 -4.64445e-05 -558.5935 558.5935 4.64445e-05 -0.7 -3.51611e-05 -456.9769 456.9769 3.51611e-05 -0.6 -2.48592e-05 -355.3765 355.3765 2.48592e-05 -0.5 -1.58778e-05 -253.7974 253.7974 1.58778e-05 -0.4 -8.6337e-06 -152.2472 152.2472 8.6337e-06 -0.3 -3.5416e-06 -50.7365 50.7365 3.5416e-06 -0.2 -8.198911e-07 50.7223 -50.7223 8.198911e-07 -1.20000 -3.1675e-06 -1831.4 1831.4 3.1675e-06 -1.10000 -3.0385e-06 -1638.6 1638.6 3.0385e-06 -1.00000 -2.8868e-06 -1445.7 1445.7 2.8868e-06 -0.9 -2.7087e-06 -1252.9 1252.9 2.7087e-06 -0.8 -2.5002e-06 -1060.1 1060.1 2.5002e-06 -0.7 -2.2574e-06 -867.3265 867.3265 2.2574e-06 -0.6 -1.9766e-06 -674.5414 674.5414 1.9766e-06 -0.5 -1.656e-06 -481.7743 481.7743 1.656e-06 -0.4 -1.2982e-06 -289.0334 289.0334 1.2982e-06 -0.3 -9.149094e-07 -96.3312 96.3312 9.149094e-07 -0.2 -5.371425e-07 96.3146 -96.3146 5.371425e-07 -1.20000 -3.5629e-05 -1831.1 1831.1 3.5629e-05 -1.10000 -3.10241e-05 -1638.3 1638.3 3.10241e-05 -1.00000 -2.65199e-05 -1445.5 1445.5 2.65199e-05 -0.9 -2.22086e-05 -1252.7 1252.7 2.22086e-05 -0.8 -1.8139e-05 -1060 1060 1.8139e-05 -0.7 -1.43494e-05 -867.1837 867.1837 1.43494e-05 -0.6 -1.08814e-05 -674.4318 674.4318 1.08814e-05 -0.5 -7.7875e-06 -481.6995 481.6995 7.7875e-06 -0.4 -5.1371e-06 -288.9928 288.9928 5.1371e-06 -0.3 -3.0114e-06 -96.3202 96.3202 3.0114e-06 -0.2 -1.4814e-06 96.3075 -96.3075 1.4814e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_ig_lw.standard0000644000175000017500000001724014163340332024663 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0004439089 7.07325013741169e-14 4.41427008575581e-14 6.23390012110567e-15 -1 0.0004070306 7.18525013958751e-14 4.5015400874512e-14 6.37770012389927e-15 -0.8 0.0003717426 7.30159014184764e-14 4.59180008920468e-14 6.53370012692987e-15 -0.6 0.0003393995 7.42283014420296e-14 4.68607009103606e-14 6.69720013010618e-15 -0.4 0.0003166469 7.54824014663929e-14 4.78856009302712e-14 6.81900013247238e-15 -0.2 0.0003060253 7.74504015046252e-14 4.91167009541878e-14 7.51610014601491e-15 -5.55111512312578e-17 1.615e-19 1.04872702037357e-13 4.31242008377717e-14 4.31242008377717e-14 0.2 -0.0005752914 1.12390802183411e-13 3.44532006693207e-14 5.98054011618366e-14 -1.2 0.0010768 8.68563016873531e-14 6.07845011808575e-14 7.74360015043454e-15 -1 0.0010031 8.81241017119826e-14 6.18043012006692e-14 7.94600015436656e-15 -0.8 0.0009392455 8.9449701737735e-14 6.28588012211549e-14 8.17130015874345e-15 -0.6 0.0009015105 9.08341017646297e-14 6.39656012426566e-14 8.40370016325828e-15 -0.4 0.0008899453 9.30029018067628e-14 6.51105012648985e-14 9.44030018339625e-15 -0.2 0.0005636155 1.1572890224826e-13 5.94852011556161e-14 3.92721007629372e-14 -5.55111512312578e-17 1.326e-19 1.29364302513154e-13 5.6649601100529e-14 5.6649601100529e-14 0.2 -0.0004643381 1.29027202506605e-13 5.69571011065028e-14 5.60692010892536e-14 -1.2 0.0014359 9.08543017650221e-14 6.43101012493492e-14 9.29620018059683e-15 -1 0.0013624 9.21264017897351e-14 6.52831012682516e-14 9.57190018595284e-15 -0.8 0.00133 9.34582018156079e-14 6.62922012878554e-14 9.8723001917887e-15 -0.6 0.001319 9.59823018646435e-14 6.72987013074086e-14 1.14372002221899e-14 -0.4 0.0009818082 1.14284302220196e-13 6.39973012432725e-14 3.39828006601822e-14 -0.2 0.0004394235 1.29487602515549e-13 5.53268010748311e-14 5.87168011406884e-14 -5.55111512312578e-17 5.538e-19 1.34278702608626e-13 5.95928011577064e-14 5.95928011577064e-14 0.2 -0.0003282478 1.32802902579956e-13 6.56799012759602e-14 5.20751010116605e-14 -1.2 0.0016115 9.18850017850455e-14 6.46257012554803e-14 1.08491002107649e-14 -1 0.0015954 9.31670018099508e-14 6.55405012732521e-14 1.12088002177528e-14 -0.8 0.0015765 9.6368801872152e-14 6.64250012904353e-14 1.36039002642823e-14 -0.6 0.0012402 1.11519102166476e-13 6.42949012490539e-14 3.14919006117916e-14 -0.4 0.0007322807 1.25630802440623e-13 5.75447011179181e-14 5.29980010295896e-14 -0.2 0.000309579 1.32479602573675e-13 5.13560009976905e-14 6.64468012908588e-14 -5.55111512312578e-17 1.286e-19 1.34714302617088e-13 6.01354011682475e-14 6.01354011682475e-14 0.2 -0.000225368 1.32950302582819e-13 7.00915013616642e-14 4.84538009413096e-14 -1.2 0.0005517678 6.95477013510998e-14 4.27996008314658e-14 6.09990011850246e-15 -1 0.000501367 7.0589201371333e-14 4.35855008467334e-14 6.23930012121058e-15 -0.8 0.0004531179 7.16703013923355e-14 4.43968008624945e-14 6.39080012415376e-15 -0.6 0.0004072408 7.27946014141772e-14 4.52421008789161e-14 6.54950012723682e-15 -0.4 0.0003658447 7.39483014365901e-14 4.61581008967112e-14 6.66410012946315e-15 -0.2 0.0003432432 7.50559014581073e-14 4.74234009212921e-14 6.38360012401389e-15 -5.55111512312578e-17 1.307e-19 1.01948801980554e-13 4.12816008019756e-14 4.12816008019756e-14 0.2 -0.0009791113 1.10375102144252e-13 2.78260005405744e-14 6.3602001235593e-14 -1.2 0.0017246 8.87815017247539e-14 6.25205012145827e-14 7.58860014742337e-15 -1 0.0016035 9.00444017492882e-14 6.35380012343497e-14 7.78560015125048e-15 -0.8 0.0014884 9.13647017749376e-14 6.45901012547888e-14 8.00480015550886e-15 -0.6 0.0013938 9.27383018016225e-14 6.56946012762458e-14 8.22500015978668e-15 -0.4 0.0013581 9.42210018304268e-14 6.6921101300073e-14 8.44050016397319e-15 -0.2 0.0009683017 1.15281902239576e-13 6.29521012229674e-14 3.46204006725688e-14 -5.55111512312578e-17 3.441e-19 1.32169702567654e-13 5.7719401121312e-14 5.7719401121312e-14 0.2 -0.0008081461 1.31003502544999e-13 5.64807010972478e-14 5.7813701123144e-14 -1.2 0.0023994 9.2363901794349e-14 6.55551012735358e-14 9.13580017748074e-15 -1 0.002247 9.36315018189746e-14 6.65261012923993e-14 9.40540018271825e-15 -0.8 0.002143 9.49474018445386e-14 6.75330013119603e-14 9.68760018820054e-15 -0.6 0.0021168 9.66444018775061e-14 6.86130013329414e-14 1.02980002000587e-14 -0.4 0.0016877 1.1361330220716e-13 6.66090012940098e-14 2.99784005823889e-14 -0.2 0.0007622672 1.31562502555858e-13 5.68341011041133e-14 5.85550011375452e-14 -5.55111512312578e-17 2.474e-19 1.36562602652995e-13 6.0363201172673e-14 6.0363201172673e-14 0.2 -0.0005736096 1.34709302616991e-13 6.59743012816795e-14 5.29439010285386e-14 -1.2 0.0026838 9.3044501807571e-14 6.54962012723915e-14 1.0683200207542e-14 -1 0.0026033 9.42989018319402e-14 6.64092012901283e-14 1.10119002139277e-14 -0.8 0.0025792 9.66555018777217e-14 6.73966013093105e-14 1.24080002410496e-14 -0.6 0.0021223 1.11056402157487e-13 6.61371012848423e-14 2.85156005539712e-14 -0.4 0.0012722 1.26924802465762e-13 5.89832011458638e-14 5.21217010125657e-14 -0.2 0.0005391423 1.34331502609652e-13 5.21088010123151e-14 6.67890012975067e-14 -5.55111512312578e-17 -3.023e-28 1.3649180265162e-13 6.06432011781125e-14 6.06432011781125e-14 0.2 -0.0003967212 1.34523902613389e-13 7.04379013683937e-14 4.89280009505219e-14 -1.2 0.0003077676 7.04012013676807e-14 4.39574008539583e-14 6.39620012425867e-15 -1 0.0002842559 7.15628013902471e-14 4.48770008718233e-14 6.54610012717077e-15 -0.8 0.0002633923 7.27703014137051e-14 4.58290008903178e-14 6.70890013033348e-15 -0.6 0.0002488767 7.40313014382025e-14 4.68244009096554e-14 6.88120013368074e-15 -0.4 0.0002436816 7.53953014647009e-14 4.78986009305238e-14 7.0830001376011e-15 -0.2 0.0002212979 8.11542015765787e-14 4.81696009357885e-14 1.29620002518121e-14 -5.55111512312578e-17 1.117e-19 1.05019502040209e-13 4.3642000847831e-14 4.3642000847831e-14 0.2 -0.0002979149 1.12207702179854e-13 3.95105007675686e-14 5.55858010798627e-14 -1.2 0.0006000134 8.40486016328081e-14 5.82776011321561e-14 7.9194001538498e-15 -1 0.0005659587 8.532270165756e-14 5.93015011520474e-14 8.12900015792169e-15 -0.8 0.0005451073 8.66570016834814e-14 6.03602011726147e-14 8.36460016249868e-15 -0.6 0.0005401958 8.81101017117107e-14 6.14659011940951e-14 8.67800016858709e-15 -0.4 0.0005150508 9.30494018076662e-14 6.20136012047352e-14 1.3346100259274e-14 -0.2 0.0002907432 1.14275202220019e-13 5.56100010803328e-14 4.26957008294473e-14 -5.55111512312578e-17 4.707e-20 1.25277802433766e-13 5.50891010702133e-14 5.50891010702133e-14 0.2 -0.0002362407 1.25855902444996e-13 5.69381011061337e-14 5.39463010480122e-14 -1.2 0.0007757475 8.85570017203926e-14 6.24437012130907e-14 9.48090018418499e-15 -1 0.0007575989 8.98402017453212e-14 6.34225012321058e-14 9.76780018975858e-15 -0.8 0.0007575143 9.12618017729386e-14 6.44333012517426e-14 1.01687001975468e-14 -0.6 0.0007282274 9.60190018653565e-14 6.50323012633794e-14 1.45598002828525e-14 -0.4 0.0005055207 1.13664702208159e-13 6.07561011803058e-14 3.76571007315627e-14 -0.2 0.000224871 1.26222902452126e-13 5.34585010385357e-14 5.83944011344252e-14 -5.55111512312578e-17 6.647e-20 1.30871602542436e-13 5.84397011353052e-14 5.84397011353052e-14 0.2 -0.0001661932 1.29904802523654e-13 6.49877012625129e-14 5.09781009903491e-14 -1.2 0.0008860247 9.00949017502693e-14 6.33125012299689e-14 1.10492002146523e-14 -1 0.0008924003 9.14991017775486e-14 6.42277012477484e-14 1.15444002242725e-14 -0.8 0.0008563019 9.64224018731933e-14 6.47776012584313e-14 1.6131300313382e-14 -0.6 0.000641085 1.11204102160357e-13 6.18642012018328e-14 3.4630500672765e-14 -0.4 0.0003744723 1.23300002395343e-13 5.58297010846009e-14 5.34775010389048e-14 -0.2 0.0001577176 1.29653802518778e-13 5.04056009792272e-14 6.57081012765081e-14 -5.55111512312578e-17 -2.987e-28 1.32031302564966e-13 5.93682011533432e-14 5.93682011533432e-14 0.2 -0.0001130276 1.30565102536482e-13 6.94197013486132e-14 4.7880800930178e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_ig_lw.standard0000644000175000017500000000712014163340332025203 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 9.31670436858036e-14 6.55404989455661e-14 1.120875743065e-14 1258.93 9.31667092782508e-14 6.55402743358723e-14 1.12087213462334e-14 1584.89 9.3167224385696e-14 6.55406380115521e-14 1.12087903119333e-14 1995.26 9.3167293250671e-14 6.55405824367021e-14 1.12087751833267e-14 2511.89 9.31654763235344e-14 6.55402398728673e-14 1.1208749607956e-14 3162.28 9.31693685099727e-14 6.55386515091219e-14 1.12087551720779e-14 3981.07 9.31685689715735e-14 6.55398206273322e-14 1.12087685217675e-14 5011.87 9.31677572517467e-14 6.55403845365827e-14 1.12087680710309e-14 6309.57 9.31662193001925e-14 6.55404866949208e-14 1.12087702063153e-14 7943.28 9.31673779450056e-14 6.55411535723151e-14 1.12087674974314e-14 10000 9.31677121365646e-14 6.55400055652425e-14 1.12087637968477e-14 12589.25 9.31674459248988e-14 6.55405978490627e-14 1.12087671274802e-14 15848.93 9.31666563940706e-14 6.55401122715265e-14 1.12088795571167e-14 19952.62 9.31671998621403e-14 6.5540891642745e-14 1.12087799012226e-14 25118.86 9.31668918976358e-14 6.5540344241043e-14 1.12085140141536e-14 31622.78 9.31669109751142e-14 6.5540706127668e-14 1.12088176232438e-14 39810.72 9.31669230493542e-14 6.55405872598423e-14 1.12086069768833e-14 50118.72 9.31670849611582e-14 6.55403583825291e-14 1.12087699492617e-14 63095.73 9.31669317334482e-14 6.55404555325173e-14 1.12086967711309e-14 79432.82 9.31669537584266e-14 6.55405359773965e-14 1.12087746934413e-14 100000 9.31670755167923e-14 6.55404830300718e-14 1.12088051771329e-14 125892.54 9.31670370588868e-14 6.55404506034974e-14 1.12087623018915e-14 158489.32 9.31670463171526e-14 6.55405056808426e-14 1.1208777722672e-14 199526.23 9.31670263210243e-14 6.55404829561363e-14 1.12087782159133e-14 251188.64 9.31670671436471e-14 6.55405238863851e-14 1.12087656721772e-14 316227.77 9.31670204721262e-14 6.55405110285594e-14 1.12087683573941e-14 398107.17 9.31670500038388e-14 6.55405122429292e-14 1.12087677331828e-14 501187.23 9.31670476287887e-14 6.55405132373541e-14 1.12087692783286e-14 630957.34 9.31670267244978e-14 6.55405018262499e-14 1.12087717336237e-14 794328.23 9.31670504218209e-14 6.55405134656568e-14 1.12087542336907e-14 1000000 9.31670277703093e-14 6.55404989455661e-14 1.120875743065e-14 1258930 9.31666966361704e-14 6.55402616937919e-14 1.12087213462334e-14 1584890 9.31672344277143e-14 6.55406380115521e-14 1.12087903119333e-14 1995260 9.3167293250671e-14 6.55405824367021e-14 1.12087751833267e-14 2511890 9.31654763235344e-14 6.55402398728673e-14 1.1208749607956e-14 3162280 9.31693685099728e-14 6.55386515091219e-14 1.12087551720779e-14 3981070 9.31685689715735e-14 6.55398206273322e-14 1.12087685217675e-14 5011870 9.31677572517467e-14 6.55403845365827e-14 1.12087680710309e-14 6309570 9.31662193001925e-14 6.55404866949208e-14 1.12087702063153e-14 7943280 9.31673779450056e-14 6.55411535723151e-14 1.12087654937887e-14 10000000 9.31677121365646e-14 6.55400055652425e-14 1.12087637968477e-14 12589250 9.31674459248988e-14 6.55405978490627e-14 1.12087671274802e-14 15848930 9.31666563940706e-14 6.55401122715265e-14 1.12088795571167e-14 19952620 9.31671998621403e-14 6.5540891642745e-14 1.12087799012226e-14 25118860 9.31668918976358e-14 6.5540344241043e-14 1.12085140141536e-14 31622780 9.31669109751142e-14 6.5540706127668e-14 1.12088176232438e-14 39810720 9.31669230493541e-14 6.55405872598423e-14 1.12086069768833e-14 50118720 9.31670849611582e-14 6.55403583825291e-14 1.12087699492617e-14 63095730 9.31669317334482e-14 6.55404555325173e-14 1.12086967711309e-14 79432820 9.31669537584266e-14 6.55405359773965e-14 1.12087746934413e-14 100000000 9.31670755167923e-14 6.55404830300718e-14 1.12088051771329e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_core_st.standard0000644000175000017500000000631314163340332025222 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.59400012810132e-15 2.9350000570181e-15 2.9350000570181e-15 -0.8 0. 6.6127001284646e-15 2.92060005673835e-15 2.92060005673835e-15 -0.4 0. 6.03040011715229e-15 2.58340005018759e-15 2.58340005018759e-15 1.11022302462516e-16 0. 1.65450003214189e-15 1.24764902423802e-16 1.24764902423802e-16 0.4 0. 1.86380003620795e-15 5.90523011472062e-17 5.90523011472062e-17 0.8 0. 2.52170004898894e-15 1.46544002846903e-17 1.46544002846903e-17 1.2 0. 5.02360009759323e-15 -1.21978802369676e-16 -1.21978802369676e-16 -1.2 8.39682e-05 4.64480009023431e-15 3.17280006163783e-15 6.61593112852737e-16 -0.8 6.91572e-05 4.55430008847617e-15 3.19340006203803e-15 4.8511060942422e-16 -0.4 3.77724e-05 4.11660007997299e-15 2.78470005409823e-15 3.58656406967601e-16 1.11022302462516e-16 2.874499e-07 1.53720002986311e-15 -7.5238001461645e-17 2.79835105436343e-16 0.4 1.11725e-11 1.74700003393888e-15 -1.43921302795952e-16 2.42410904709305e-16 0.8 9.314105e-16 2.35050004566305e-15 -1.7774020345295e-16 1.94001703768862e-16 1.2 7.561e-19 4.57370008885305e-15 -3.45575906713486e-16 1.00430101951051e-16 -1.2 0. 6.6682001295428e-15 2.95330005737362e-15 2.95330005737362e-15 -0.8 0. 6.72220013059185e-15 2.95710005744744e-15 2.95710005744744e-15 -0.4 0. 6.15700011961174e-15 2.63220005113562e-15 2.63220005113562e-15 1.11022302462516e-16 0. 1.57220003054305e-15 8.80433017104129e-17 8.80433017104129e-17 0.4 0. 1.82570003546779e-15 5.6604301099649e-17 5.6604301099649e-17 0.8 0. 2.41940004700157e-15 1.38496002690555e-17 1.38496002690555e-17 1.2 0. 4.96980009654806e-15 -1.3254730257499e-16 -1.3254730257499e-16 -1.2 0.0001377483 4.67420009080546e-15 3.20840006232943e-15 6.3141611226649e-16 -0.8 0.0001143588 4.62650008987879e-15 3.25220006318033e-15 4.77272309271946e-16 -0.4 5.73459e-05 4.20870008176221e-15 2.87080005577089e-15 3.51326006825193e-16 1.11022302462516e-16 2.70478e-08 1.47060002856928e-15 -1.34662602616084e-16 2.82415105486464e-16 0.4 2.63812e-14 1.71220003326283e-15 -1.50906302931649e-16 2.4506780476092e-16 0.8 6.787e-20 2.25890004388354e-15 -1.8271730354964e-16 1.97964003845837e-16 1.2 3.056e-24 4.51670008774571e-15 -3.73187707249899e-16 1.10301102142814e-16 -1.2 0. 6.48150012591579e-15 2.90710005647609e-15 2.90710005647609e-15 -0.8 0. 6.4485001252747e-15 2.86570005567182e-15 2.86570005567182e-15 -0.4 0. 5.84020011345728e-15 2.50910004874416e-15 2.50910004874416e-15 1.11022302462516e-16 0. 2.12510004128421e-15 3.76817607320417e-16 3.76817607320417e-16 0.4 0. 1.93080003750956e-15 6.32999012297241e-17 6.32999012297241e-17 0.8 0. 2.7071000525907e-15 1.61027003128264e-17 1.61027003128264e-17 1.2 0. 5.02370009759518e-15 -1.00380701950091e-16 -1.00380701950091e-16 -1.2 4.58224e-05 4.61760008970589e-15 3.11530006052078e-15 7.29527814172501e-16 -0.8 3.83815e-05 4.44400008633337e-15 3.1048000603168e-15 4.94330109603327e-16 -0.4 2.22339e-05 3.98260007736978e-15 2.66040005168346e-15 3.66914007128021e-16 1.11022302462516e-16 1.2835e-06 1.82870003552607e-15 2.29222604453096e-16 2.75304505348327e-16 0.4 1.296e-09 1.80810003512587e-15 -1.32045202565236e-16 2.38047504624537e-16 0.8 2.0361e-12 2.51450004884907e-15 -1.68985303282869e-16 1.87177703636292e-16 1.2 1.67485e-14 4.5832000890376e-15 -2.92007605672818e-16 8.50650016525536e-17 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_core_st.standard0000644000175000017500000000634514163340332025371 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.73910013092017e-15 2.95410005738916e-15 2.95410005738916e-15 -0.8 0. 6.84990013307268e-15 2.92980005691708e-15 2.92980005691708e-15 -0.4 0. 6.74490013103285e-15 2.7256000529501e-15 2.7256000529501e-15 1.11022302462516e-16 0. 6.17860012003136e-15 1.43850002794567e-15 1.43850002794567e-15 0.4 0. 6.73390013081915e-15 -2.86651005568755e-16 -2.86651005568755e-16 0.8 0. 7.41350014402171e-15 -3.73244007250993e-16 -3.73244007250993e-16 1.2 0. 7.67110014902609e-15 -3.29673206404545e-16 -3.29673206404545e-16 -1.2 8.44558e-05 4.91780009553786e-15 3.19810006212933e-15 7.36619914310279e-16 -0.8 7.44142e-05 4.88490009489872e-15 3.22890006272768e-15 4.76710109261024e-16 -0.4 5.21598e-05 4.88820009496283e-15 2.91280005658682e-15 3.39311806591794e-16 1.11022302462516e-16 1.42097e-05 4.99710009707842e-15 9.71759518878325e-16 1.92309003735978e-16 0.4 1.0353e-06 6.23810012118727e-15 -7.00211213602969e-16 2.6469000514212e-17 0.8 1.305834e-07 6.94980013501343e-15 -4.8464370941515e-16 -1.6055480311909e-16 1.2 3.34819e-08 7.2062001399945e-15 -2.58550305022844e-16 -3.51871006835781e-16 -1.2 0. 6.8064001322276e-15 2.96970005769222e-15 2.96970005769222e-15 -0.8 0. 6.93930013480945e-15 2.96870005767279e-15 2.96870005767279e-15 -0.4 0. 6.81780013244907e-15 2.74290005328619e-15 2.74290005328619e-15 1.11022302462516e-16 0. 5.39200010475012e-15 8.03448215608549e-16 8.03448215608549e-16 0.4 0. 6.98030013560595e-15 -3.07148905966967e-16 -3.07148905966967e-16 0.8 0. 7.60100014766426e-15 -2.89176405617816e-16 -2.89176405617816e-16 1.2 0. 7.79220015137869e-15 -2.96486405759827e-16 -2.96486405759827e-16 -1.2 0.0001403251 4.91950009557089e-15 3.23980006293944e-15 6.75276413118562e-16 -0.8 0.0001232767 4.9371000959128e-15 3.28520006382142e-15 4.6769820908595e-16 -0.4 8.38672e-05 4.90620009531251e-15 2.9870000580283e-15 3.30777506425998e-16 1.11022302462516e-16 1.17076e-05 4.47690008697252e-15 4.33841708428222e-16 1.88777603667373e-16 0.4 1.519638e-07 6.51280012652385e-15 -5.97773111612909e-16 3.55701006910186e-17 0.8 1.20258e-08 7.12980013851028e-15 -4.31133408375608e-16 -1.53713502986185e-16 1.2 2.8124e-09 7.32490014230048e-15 -2.62729205104028e-16 -3.45477706711579e-16 -1.2 0. 6.63620012892114e-15 2.95880005748046e-15 2.95880005748046e-15 -0.8 0. 6.71010013035679e-15 2.93320005698313e-15 2.93320005698313e-15 -0.4 0. 6.62830012876766e-15 2.72710005297924e-15 2.72710005297924e-15 1.11022302462516e-16 0. 6.47050012570209e-15 1.9309000375115e-15 1.9309000375115e-15 0.4 0. 6.83100013270551e-15 6.97141513543334e-16 6.97141513543334e-16 0.8 0. 7.22660014039081e-15 -6.62351012867461e-17 -6.62351012867461e-17 1.2 0. 7.49060014551952e-15 -3.01134005850116e-16 -3.01134005850116e-16 -1.2 4.46922e-05 4.93980009596526e-15 3.12830006077333e-15 8.64363516791948e-16 -0.8 4.10532e-05 4.81240009349026e-15 3.14590006111525e-15 4.88790809495715e-16 -0.4 2.84516e-05 4.88120009482684e-15 2.80390005447123e-15 3.49416706788101e-16 1.11022302462516e-16 1.27747e-05 5.25110010201287e-15 1.57780003065184e-15 1.97591503838601e-16 0.4 2.4143e-06 6.08890011828877e-15 9.80572019049525e-17 1.9282800374606e-17 0.8 5.653298e-07 6.70110013018195e-15 -3.80188207385898e-16 -1.71527203332251e-16 1.2 1.856692e-07 7.01750013632863e-15 -2.77224405385625e-16 -3.6281810704845e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_core_lt.standard0000644000175000017500000001720514163340332025212 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 2.02615e-05 3.38440006574858e-15 2.02900003941729e-15 3.07343205970742e-16 -1 1.85138e-05 3.43690006676849e-15 2.06870004018854e-15 3.14375706107362e-16 -0.8 1.68466e-05 3.49140006782726e-15 2.10970004098504e-15 3.22035406256166e-16 -0.6 1.53205e-05 3.54820006893071e-15 2.15260004181846e-15 3.30092606412693e-16 -0.4 1.42338e-05 3.60700007007302e-15 2.19930004272569e-15 3.36111506529622e-16 -0.2 1.37578e-05 3.68950007167574e-15 2.25800004386606e-15 3.56234406920549e-16 -5.55111512312578e-17 4.546e-21 4.97380009662577e-15 2.00160003888499e-15 2.00160003888499e-15 0.2 -2.88672e-05 5.42160010532516e-15 1.57200003053917e-15 2.90960005652466e-15 -1.2 5.21052e-05 4.25800008271996e-15 2.93880005709193e-15 3.80060607383419e-16 -1 4.8526e-05 4.3197000839186e-15 2.98800005804773e-15 3.89944707575437e-16 -0.8 4.54029e-05 4.38420008517164e-15 3.03890005903656e-15 4.00986407789943e-16 -0.6 4.35104e-05 4.45150008647908e-15 3.09230006007396e-15 4.12308408009895e-16 -0.4 4.30047e-05 4.5450000882955e-15 3.14870006116964e-15 4.48923208721209e-16 -0.2 2.83503e-05 5.59790010875013e-15 2.90020005634205e-15 1.81960003534928e-15 -5.55111512312578e-17 6.792e-21 6.32170012281136e-15 2.74610005334835e-15 2.74610005334835e-15 0.2 -2.3384e-05 6.31600012270063e-15 2.750200053428e-15 2.73980005322596e-15 -1.2 7.02233e-05 4.4731000868987e-15 3.1336000608763e-15 4.55723708853322e-16 -1 6.65822e-05 4.53520008810511e-15 3.18080006179325e-15 4.69209109115303e-16 -0.8 6.49081e-05 4.59990008936204e-15 3.22970006274323e-15 4.83678409396397e-16 -0.6 6.4575e-05 4.70450009139409e-15 3.27920006370486e-15 5.39703110484786e-16 -0.4 4.93431e-05 5.55300010787786e-15 3.13640006093069e-15 1.57500003059745e-15 -0.2 2.21027e-05 6.34340012323293e-15 2.70420005253436e-15 2.84240005521917e-15 -5.55111512312578e-17 9.593e-21 6.59470012811492e-15 2.90790005649163e-15 2.90790005649163e-15 0.2 -1.63635e-05 6.52680012679583e-15 3.2041000622459e-15 2.5462000494649e-15 -1.2 7.88502e-05 4.53110008802546e-15 3.15850006136003e-15 5.31543110326262e-16 -1 7.79723e-05 4.59310008922993e-15 3.20280006222064e-15 5.48429410654311e-16 -0.8 7.75382e-05 4.72210009173601e-15 3.24660006307154e-15 6.36147112358399e-16 -0.6 6.21206e-05 5.43450010557577e-15 3.15550006130175e-15 1.46820002852265e-15 -0.4 3.66934e-05 6.15850011964088e-15 2.82310005484423e-15 2.55750004968443e-15 -0.2 1.5426e-05 6.51260012651997e-15 2.51120004878496e-15 3.24420006302492e-15 -5.55111512312578e-17 2.376e-20 6.62890012877932e-15 2.94170005714826e-15 2.94170005714826e-15 0.2 -1.11376e-05 6.54510012715134e-15 3.43120006665776e-15 2.37040004604965e-15 -1.2 2.43476e-05 3.28450006380782e-15 1.91930003728615e-15 3.01424005855749e-16 -1 2.19891e-05 3.33180006472672e-15 1.95310003794278e-15 3.08266805988684e-16 -0.8 1.97415e-05 3.38080006567864e-15 1.98810003862272e-15 3.15731506133701e-16 -0.6 1.7614e-05 3.43180006666941e-15 2.02440003932792e-15 3.2359320628643e-16 -0.4 1.56937e-05 3.4840000676835e-15 2.06380004009334e-15 3.29358006398422e-16 -0.2 1.46046e-05 3.53190006861405e-15 2.11950004117542e-15 3.14473306109258e-16 -5.55111512312578e-17 1.235e-20 4.75010009227996e-15 1.86890003630703e-15 1.86890003630703e-15 0.2 -4.90053e-05 5.29900010294342e-15 1.21750002365231e-15 3.10070006023715e-15 -1.2 8.34764e-05 4.35540008461215e-15 3.02720005880927e-15 3.72840607243156e-16 -1 7.75965e-05 4.41680008580496e-15 3.07630005976313e-15 3.82470807430242e-16 -0.8 7.19935e-05 4.48110008705411e-15 3.12700006074808e-15 3.93225607639175e-16 -0.6 6.732e-05 4.54790008835183e-15 3.18030006178353e-15 4.04028007849032e-16 -0.4 6.54366e-05 4.61750008970395e-15 3.23960006293555e-15 4.11902708002014e-16 -0.2 4.87551e-05 5.55640010794391e-15 3.07830005980199e-15 1.56370003037792e-15 -5.55111512312578e-17 4.128e-22 6.46260012554862e-15 2.80060005440712e-15 2.80060005440712e-15 0.2 -4.08515e-05 6.41330012459087e-15 2.72330005290542e-15 2.82950005496856e-15 -1.2 0.0001177353 4.5497000883868e-15 3.19710006210991e-15 4.48234308707826e-16 -1 0.0001101969 4.61150008958739e-15 3.24410006302297e-15 4.61439708964367e-16 -0.8 0.0001049231 4.6757000908346e-15 3.29290006397101e-15 4.75200709231701e-16 -0.6 0.0001035814 4.75060009228968e-15 3.34500006498315e-15 4.97065409656466e-16 -0.4 8.49494e-05 5.51120010706582e-15 3.26700006346785e-15 1.36740002656441e-15 -0.2 3.84676e-05 6.44670012523973e-15 2.78160005403801e-15 2.83280005503267e-15 -5.55111512312578e-17 0. 6.71000013035485e-15 2.947400057259e-15 2.947400057259e-15 0.2 -2.86647e-05 6.62250012865499e-15 3.21950006254507e-15 2.59010005031775e-15 -1.2 0.0001317798 4.58980008916582e-15 3.20260006221676e-15 5.23789710175637e-16 -1 0.0001276099 4.65070009034892e-15 3.24680006307543e-15 5.39543010481676e-16 -0.8 0.0001268133 4.74610009220226e-15 3.29420006399626e-15 5.88112311425229e-16 -0.6 0.0001064136 5.40870010507455e-15 3.24630006306571e-15 1.31900002562415e-15 -0.4 6.3901e-05 6.22200012087449e-15 2.89620005626434e-15 2.5120000488005e-15 -0.2 2.6917e-05 6.60580012833056e-15 2.54920004952319e-15 3.2622000633746e-15 -5.55111512312578e-17 0. 6.71840013051803e-15 2.96770005765336e-15 2.96770005765336e-15 0.2 -1.96318e-05 6.62410012868607e-15 3.44960006701521e-15 2.39400004650812e-15 -1.2 1.43477e-05 3.3943000659409e-15 2.0466000397592e-15 3.14640106112498e-16 -1 1.32255e-05 3.44940006701133e-15 2.08930004058873e-15 3.2194760625446e-16 -0.8 1.22319e-05 3.50670006812449e-15 2.1335000414474e-15 3.29908806409122e-16 -0.6 1.15388e-05 3.56660006928817e-15 2.17970004234493e-15 3.38361606573335e-16 -0.4 1.12829e-05 3.63100007053926e-15 2.22980004331822e-15 3.47647206753725e-16 -0.2 1.03844e-05 3.86890007516093e-15 2.25110004373201e-15 5.78747411243298e-16 -5.55111512312578e-17 7.009e-21 5.027500097669e-15 2.05080003984079e-15 2.05080003984079e-15 0.2 -1.49178e-05 5.43180010552332e-15 1.84710003588352e-15 2.69460005234786e-15 -1.2 2.89708e-05 4.11650007997105e-15 2.81160005462082e-15 3.88119407539977e-16 -1 2.73189e-05 4.17850008117552e-15 2.86100005558051e-15 3.98340907738549e-16 -0.8 2.62985e-05 4.24340008243633e-15 2.91200005657128e-15 4.09848107962099e-16 -0.6 2.60434e-05 4.31330008379427e-15 2.96540005760868e-15 4.24393208244666e-16 -0.4 2.50636e-05 4.51870008778457e-15 2.99750005823229e-15 6.07902311809689e-16 -0.2 1.45699e-05 5.53980010762143e-15 2.70080005246831e-15 2.0096000390404e-15 -5.55111512312578e-17 2.438e-21 6.11680011883078e-15 2.66670005180585e-15 2.66670005180585e-15 0.2 -1.18376e-05 6.15840011963894e-15 2.75130005344937e-15 2.63080005110842e-15 -1.2 3.77601e-05 4.35650008463351e-15 3.03830005902491e-15 4.64207209018131e-16 -1 3.68607e-05 4.41910008584964e-15 3.08580005994769e-15 4.7818930928976e-16 -0.8 3.684e-05 4.48730008717456e-15 3.13480006089961e-15 4.96508809645653e-16 -0.6 3.57414e-05 4.68480009101138e-15 3.16800006154458e-15 6.69557913007469e-16 -0.4 2.53161e-05 5.53090010744853e-15 2.97210005773884e-15 1.76840003435462e-15 -0.2 1.12624e-05 6.17990012005662e-15 2.60820005066938e-15 2.82700005491999e-15 -5.55111512312578e-17 7.535e-21 6.4225001247696e-15 2.84860005533962e-15 2.84860005533962e-15 0.2 -8.2598e-06 6.38090012396144e-15 3.16800006154458e-15 2.49050004838282e-15 -1.2 4.31743e-05 4.44040008626344e-15 3.09160006006036e-15 5.40719210504526e-16 -1 4.34802e-05 4.50690008755533e-15 3.13600006092292e-15 5.62690110931353e-16 -0.8 4.21531e-05 4.71220009154368e-15 3.16630006151156e-15 7.45972514491972e-16 -0.6 3.20311e-05 5.42330010535819e-15 3.03390005893943e-15 1.62830003163291e-15 -0.4 1.87066e-05 6.0426001173893e-15 2.73570005314631e-15 2.5825000501701e-15 -0.2 7.8409e-06 6.37010012375163e-15 2.46290004784664e-15 3.20560006227504e-15 -5.55111512312578e-17 0. 6.49360012615085e-15 2.90210005637896e-15 2.90210005637896e-15 0.2 -5.5785e-06 6.42510012482011e-15 3.39590006597199e-15 2.34160004549015e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_core_lt.standard0000644000175000017500000000454314163340332025167 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -5.4801e-06 0. 0. 5.4801e-06 -1.10000 -5.2117e-06 0. 0. 5.2117e-06 -1.00000 -4.8984e-06 0. 0. 4.8984e-06 -0.9 -4.5332e-06 0. 0. 4.5332e-06 -0.8 -4.1084e-06 0. 0. 4.1084e-06 -0.7 -3.6163e-06 0. 0. 3.6163e-06 -0.6 -3.0502e-06 0. 0. 3.0502e-06 -0.5 -2.4079e-06 0. 0. 2.4079e-06 -0.4 -1.6991e-06 0. 0. 1.6991e-06 -0.3 -9.655287e-07 0. 0. 9.655287e-07 -0.2 -3.381477e-07 0. 0. 3.381477e-07 -1.20000 -5.92179e-05 0. 0. 5.92179e-05 -1.10000 -5.09181e-05 0. 0. 5.09181e-05 -1.00000 -4.29313e-05 0. 0. 4.29313e-05 -0.9 -3.53396e-05 0. 0. 3.53396e-05 -0.8 -2.81873e-05 0. 0. 2.81873e-05 -0.7 -2.15332e-05 0. 0. 2.15332e-05 -0.6 -1.54784e-05 0. 0. 1.54784e-05 -0.5 -1.01808e-05 0. 0. 1.01808e-05 -0.4 -5.8474e-06 0. 0. 5.8474e-06 -0.3 -2.6912e-06 0. 0. 2.6912e-06 -0.2 -8.349016e-07 0. 0. 8.349016e-07 -1.20000 -8.919e-06 0. 0. 8.919e-06 -1.10000 -8.4472e-06 0. 0. 8.4472e-06 -1.00000 -7.8981e-06 0. 0. 7.8981e-06 -0.9 -7.2597e-06 0. 0. 7.2597e-06 -0.8 -6.5185e-06 0. 0. 6.5185e-06 -0.7 -5.6611e-06 0. 0. 5.6611e-06 -0.6 -4.6755e-06 0. 0. 4.6755e-06 -0.5 -3.5578e-06 0. 0. 3.5578e-06 -0.4 -2.3268e-06 0. 0. 2.3268e-06 -0.3 -1.0793e-06 0. 0. 1.0793e-06 -0.2 -1.898282e-07 0. 0. 1.898282e-07 -1.20000 -9.45379e-05 0. 0. 9.45379e-05 -1.10000 -8.09622e-05 0. 0. 8.09622e-05 -1.00000 -6.79109e-05 0. 0. 6.79109e-05 -0.9 -5.54542e-05 0. 0. 5.54542e-05 -0.8 -4.36538e-05 0. 0. 4.36538e-05 -0.7 -3.26442e-05 0. 0. 3.26442e-05 -0.6 -2.26684e-05 0. 0. 2.26684e-05 -0.5 -1.40779e-05 0. 0. 1.40779e-05 -0.4 -7.2956e-06 0. 0. 7.2956e-06 -0.3 -2.7227e-06 0. 0. 2.7227e-06 -0.2 -5.021654e-07 0. 0. 5.021654e-07 -1.20000 -3.0576e-06 0. 0. 3.0576e-06 -1.10000 -2.9225e-06 0. 0. 2.9225e-06 -1.00000 -2.7642e-06 0. 0. 2.7642e-06 -0.9 -2.5792e-06 0. 0. 2.5792e-06 -0.8 -2.3634e-06 0. 0. 2.3634e-06 -0.7 -2.113e-06 0. 0. 2.113e-06 -0.6 -1.8249e-06 0. 0. 1.8249e-06 -0.5 -1.498e-06 0. 0. 1.498e-06 -0.4 -1.1364e-06 0. 0. 1.1364e-06 -0.3 -7.560884e-07 0. 0. 7.560884e-07 -0.2 -3.975892e-07 0. 0. 3.975892e-07 -1.20000 -3.40194e-05 0. 0. 3.40194e-05 -1.10000 -2.94515e-05 0. 0. 2.94515e-05 -1.00000 -2.50084e-05 0. 0. 2.50084e-05 -0.9 -2.07742e-05 0. 0. 2.07742e-05 -0.8 -1.67953e-05 0. 0. 1.67953e-05 -0.7 -1.3111e-05 0. 0. 1.3111e-05 -0.6 -9.7648e-06 0. 0. 9.7648e-06 -0.5 -6.8127e-06 0. 0. 6.8127e-06 -0.4 -4.328e-06 0. 0. 4.328e-06 -0.3 -2.3929e-06 0. 0. 2.3929e-06 -0.2 -1.0702e-06 0. 0. 1.0702e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_ig_st.standard0000644000175000017500000001716714163340332025041 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0003462187 7.63777214837863e-16 3.72466307235885e-16 1.21397802358389e-16 -1 0.0003148492 7.74280415041908e-16 3.74086307267356e-16 1.24208502412993e-16 -0.8 0.0002850684 7.85980015269196e-16 3.75666607298057e-16 1.27932202485333e-16 -0.6 0.0002577268 7.99363915529204e-16 3.77231007328448e-16 1.33011702584012e-16 -0.4 0.0002368264 8.14709315827318e-16 3.78916607361194e-16 1.39600602712014e-16 -0.2 0.0002147807 8.40576216329833e-16 3.78792607358786e-16 1.6460380319775e-16 -5.55111512312578e-17 0. 9.43608418331435e-16 3.43787406678741e-16 3.43787406678741e-16 0.2 -0.0002383587 9.71920418881451e-16 3.24095806296193e-16 4.51046808762464e-16 -1.2 0.0005941669 7.68237014924503e-16 4.42065808587991e-16 1.34094702605051e-16 -1 0.000548774 7.79459315142518e-16 4.4658420867577e-16 1.38423402689145e-16 -0.8 0.000507731 7.92448215394853e-16 4.51244508766305e-16 1.4429180280315e-16 -0.6 0.0004776993 8.07118215679846e-16 4.56116208860947e-16 1.51565102944448e-16 -0.4 0.0004613288 8.2428061601326e-16 4.61170608959139e-16 1.62571503158269e-16 -0.2 0.0002874034 9.15335717782182e-16 4.34084508432939e-16 3.02606805878728e-16 -5.55111512312578e-17 0. 9.76645318973241e-16 4.01424107798447e-16 4.01424107798447e-16 0.2 -0.0001987292 9.78609819011405e-16 3.99573707762499e-16 4.34933808449438e-16 -1.2 0.0007358436 7.7074521497323e-16 4.63379909002059e-16 1.48078402876712e-16 -1 0.0006904617 7.83751315225899e-16 4.68513609101791e-16 1.54670003004767e-16 -0.8 0.0006610387 7.97931615501379e-16 4.73846009205383e-16 1.62227003151576e-16 -0.6 0.0006486021 8.12977115793667e-16 4.79491209315052e-16 1.71175703325422e-16 -0.4 0.0005119144 8.81927217133157e-16 4.70463209139666e-16 2.60975205069953e-16 -0.2 0.0002253826 9.57758018606319e-16 4.24957608255631e-16 3.93881307651913e-16 -5.55111512312578e-17 0. 9.85558719146401e-16 4.2139500818642e-16 4.2139500818642e-16 0.2 -0.0001374965 9.79634219031306e-16 4.41445908575948e-16 4.17265208106191e-16 -1.2 0.0007948934 7.7262301500971e-16 4.67425509080653e-16 1.64329003192412e-16 -1 0.0007724157 7.86029815270163e-16 4.72583909180865e-16 1.71802203337593e-16 -0.8 0.0007638646 8.00551815552281e-16 4.78065709287359e-16 1.80797003512335e-16 -0.6 0.0006471949 8.55495616619672e-16 4.75511209237733e-16 2.44983804759288e-16 -0.4 0.0003871777 9.28092218030002e-16 4.44514208635556e-16 3.58113006957044e-16 -0.2 0.0001543591 9.67641518798325e-16 4.08035507926886e-16 4.37565408500562e-16 -5.55111512312578e-17 0. 9.82246519082055e-16 4.28356808321667e-16 4.28356808321667e-16 0.2 -8.76259e-05 9.74272618927147e-16 4.66186809056588e-16 4.00152907773751e-16 -1.2 0.0005010999 7.50993914589522e-16 3.77743407338403e-16 1.21331902357109e-16 -1 0.0004519119 7.60048314765422e-16 3.78662307356254e-16 1.24183402412505e-16 -0.8 0.0004052162 7.70180114962252e-16 3.79451807371592e-16 1.27949002485659e-16 -0.6 0.0003612129 7.81862315189201e-16 3.80122107384614e-16 1.33066902585084e-16 -0.4 0.0003213634 7.95302415450301e-16 3.80783307397459e-16 1.39607702712152e-16 -0.2 0.0002935606 8.09246115721185e-16 3.82273707426413e-16 1.46285102841874e-16 -5.55111512312578e-17 0. 9.21293517897924e-16 3.31751806444926e-16 3.31751806444926e-16 0.2 -0.0004549423 9.6413791873026e-16 2.93366605699219e-16 4.56864508875485e-16 -1.2 0.000970141 7.71044114979036e-16 4.51134508764168e-16 1.33240902588465e-16 -1 0.000893602 7.82037515192605e-16 4.55677408852423e-16 1.37543602672053e-16 -0.8 0.000820772 7.94772915440015e-16 4.6035630894332e-16 1.43375802785355e-16 -0.6 0.0007566971 8.09124415718821e-16 4.65235709038111e-16 1.50550602924739e-16 -0.4 0.0007177399 8.22407515976871e-16 4.70655109143394e-16 1.56358403037567e-16 -0.2 0.0005107186 9.06835417617048e-16 4.53544508810987e-16 2.77205905385266e-16 -5.55111512312578e-17 0. 9.82824219093278e-16 4.07093007908576e-16 4.07093007908576e-16 0.2 -0.0003722718 9.84470119125253e-16 3.9192870761398e-16 4.39777008543527e-16 -1.2 0.001243 7.7529971506171e-16 4.70163409133842e-16 1.47087802857468e-16 -1 0.0011562 7.88249015313275e-16 4.75352709234654e-16 1.53634102984642e-16 -0.8 0.0010861 8.02323115586692e-16 4.8073780933927e-16 1.61086303129416e-16 -0.6 0.0010496 8.14894915830924e-16 4.86588209452925e-16 1.66861303241606e-16 -0.4 0.000889232 8.74718716993118e-16 4.84597009414242e-16 2.37645204616722e-16 -0.2 0.0004058911 9.648760187446e-16 4.35170908454044e-16 3.91499607605644e-16 -5.55111512312578e-17 0. 9.94143219313172e-16 4.27172308298656e-16 4.27172308298656e-16 0.2 -0.0002535758 9.87627619186594e-16 4.38206608513018e-16 4.18158908123553e-16 -1.2 0.0013463 7.76822115091285e-16 4.72232009174028e-16 1.63295103172326e-16 -1 0.0012846 7.90155415350311e-16 4.77431309275035e-16 1.70656503315336e-16 -0.8 0.0012563 8.02751515595015e-16 4.83146109386056e-16 1.77159503441669e-16 -0.6 0.0011094 8.51545916542941e-16 4.84608409414464e-16 2.29556904459591e-16 -0.4 0.0006890916 9.31834518102704e-16 4.54134108822441e-16 3.50207706803468e-16 -0.2 0.0002798437 9.75766118956161e-16 4.13426608031619e-16 4.39156708531476e-16 -5.55111512312578e-17 0. 9.89867119230101e-16 4.32246308397228e-16 4.32246308397228e-16 0.2 -0.0001613229 9.81556619068653e-16 4.63064608995934e-16 3.98373507739183e-16 -1.2 0.0002155727 7.78516315124199e-16 3.69462707177534e-16 1.21327102357016e-16 -1 0.0001983828 7.90225615351675e-16 3.72442807235428e-16 1.24112402411126e-16 -0.8 0.0001828634 8.03218415604085e-16 3.75503407294886e-16 1.27818902483132e-16 -0.6 0.0001712084 8.18016815891573e-16 3.78686007356715e-16 1.3293750258257e-16 -0.4 0.0001649486 8.35753616236145e-16 3.82106407423163e-16 1.41296002744951e-16 -0.2 0.0001280782 8.84017417173763e-16 3.77173107327324e-16 2.14733804171623e-16 -5.55111512312578e-17 0. 9.62312018694789e-16 3.58364906961938e-16 3.58364906961938e-16 0.2 -0.0001095488 9.77886518997354e-16 3.45846006718734e-16 4.37378508496931e-16 -1.2 0.0003150665 7.66567314892066e-16 4.28481708324093e-16 1.34967802622013e-16 -1 0.0002937653 7.78224815118535e-16 4.32963808411167e-16 1.39330202706761e-16 -0.8 0.0002782817 7.91704715380409e-16 4.37595608501149e-16 1.45271202822177e-16 -0.6 0.0002714255 8.0730421568346e-16 4.4242970859506e-16 1.53220602976609e-16 -0.4 0.0002532657 8.37239616265013e-16 4.44182508629112e-16 1.8479120358993e-16 -0.2 0.0001374555 9.19694817866867e-16 4.1372370803739e-16 3.21933306254183e-16 -5.55111512312578e-17 0. 9.66616518778412e-16 4.02478907818938e-16 4.02478907818938e-16 0.2 -9.14726e-05 9.69177518828165e-16 4.04511707858429e-16 4.27975408314257e-16 -1.2 0.0003845737 7.64761514856985e-16 4.5308240880201e-16 1.49241302899304e-16 -1 0.0003694517 7.77915315112523e-16 4.58151208900481e-16 1.5591790302901e-16 -0.8 0.0003644604 7.92554015396908e-16 4.63411009002663e-16 1.63967003185379e-16 -0.6 0.0003534398 8.1489211583087e-16 4.6769870908596e-16 1.83456403563999e-16 -0.4 0.0002530235 8.8583431720906e-16 4.51245508766324e-16 2.84531205527574e-16 -0.2 0.0001062064 9.47080718398891e-16 4.12238808008543e-16 3.93162007637939e-16 -5.55111512312578e-17 0. 9.71845718879999e-16 4.21807408194432e-16 4.21807408194432e-16 0.2 -6.2987e-05 9.67953518804386e-16 4.40786308563134e-16 4.13057408024446e-16 -1.2 0.0004224433 7.66573014892177e-16 4.60108908938513e-16 1.65620603217503e-16 -1 0.0004210123 7.80332815159488e-16 4.65213309037676e-16 1.73533903371235e-16 -0.8 0.0004135324 7.99641815534603e-16 4.6984260912761e-16 1.8917690367513e-16 -0.6 0.0003282459 8.58147716671194e-16 4.62096908977134e-16 2.63967705128088e-16 -0.4 0.000188537 9.20126917875261e-16 4.32756708407144e-16 3.63861107068712e-16 -0.2 7.2301e-05 9.55753318567373e-16 4.00969007789605e-16 4.33549908422553e-16 -5.55111512312578e-17 0. 9.70325318850463e-16 4.28566308325737e-16 4.28566308325737e-16 0.2 -3.95724e-05 9.63468518717256e-16 4.6430340902e-16 3.97811507728265e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_core_lw.standard0000644000175000017500000000712014163340332025534 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 9.31670436858036e-14 6.55404989455661e-14 1.120875743065e-14 1258.93 9.31667092782508e-14 6.55402743358723e-14 1.12087213462334e-14 1584.89 9.3167224385696e-14 6.55406380115521e-14 1.12087903119333e-14 1995.26 9.3167293250671e-14 6.55405824367021e-14 1.12087751833267e-14 2511.89 9.31654763235344e-14 6.55402398728673e-14 1.1208749607956e-14 3162.28 9.31693685099727e-14 6.55386515091219e-14 1.12087551720779e-14 3981.07 9.31685689715735e-14 6.55398206273322e-14 1.12087685217675e-14 5011.87 9.31677572517467e-14 6.55403845365827e-14 1.12087680710309e-14 6309.57 9.31662193001925e-14 6.55404866949208e-14 1.12087702063153e-14 7943.28 9.31673779450056e-14 6.55411535723151e-14 1.12087674974314e-14 10000 9.31677121365646e-14 6.55400055652425e-14 1.12087637968477e-14 12589.25 9.31674459248988e-14 6.55405978490627e-14 1.12087671274802e-14 15848.93 9.31666563940706e-14 6.55401122715265e-14 1.12088795571167e-14 19952.62 9.31671998621403e-14 6.5540891642745e-14 1.12087799012226e-14 25118.86 9.31668918976358e-14 6.5540344241043e-14 1.12085140141536e-14 31622.78 9.31669109751142e-14 6.5540706127668e-14 1.12088176232438e-14 39810.72 9.31669230493542e-14 6.55405872598423e-14 1.12086069768833e-14 50118.72 9.31670849611582e-14 6.55403583825291e-14 1.12087699492617e-14 63095.73 9.31669317334482e-14 6.55404555325173e-14 1.12086967711309e-14 79432.82 9.31669537584266e-14 6.55405359773965e-14 1.12087746934413e-14 100000 9.31670755167923e-14 6.55404830300718e-14 1.12088051771329e-14 125892.54 9.31670370588868e-14 6.55404506034974e-14 1.12087623018915e-14 158489.32 9.31670463171526e-14 6.55405056808426e-14 1.1208777722672e-14 199526.23 9.31670263210243e-14 6.55404829561363e-14 1.12087782159133e-14 251188.64 9.31670671436471e-14 6.55405238863851e-14 1.12087656721772e-14 316227.77 9.31670204721262e-14 6.55405110285594e-14 1.12087683573941e-14 398107.17 9.31670500038388e-14 6.55405122429292e-14 1.12087677331828e-14 501187.23 9.31670476287887e-14 6.55405132373541e-14 1.12087692783286e-14 630957.34 9.31670267244978e-14 6.55405018262499e-14 1.12087717336237e-14 794328.23 9.31670504218209e-14 6.55405134656568e-14 1.12087542336907e-14 1000000 9.31670277703093e-14 6.55404989455661e-14 1.120875743065e-14 1258930 9.31666966361704e-14 6.55402616937919e-14 1.12087213462334e-14 1584890 9.31672344277143e-14 6.55406380115521e-14 1.12087903119333e-14 1995260 9.3167293250671e-14 6.55405824367021e-14 1.12087751833267e-14 2511890 9.31654763235344e-14 6.55402398728673e-14 1.1208749607956e-14 3162280 9.31693685099728e-14 6.55386515091219e-14 1.12087551720779e-14 3981070 9.31685689715735e-14 6.55398206273322e-14 1.12087685217675e-14 5011870 9.31677572517467e-14 6.55403845365827e-14 1.12087680710309e-14 6309570 9.31662193001925e-14 6.55404866949208e-14 1.12087702063153e-14 7943280 9.31673779450056e-14 6.55411535723151e-14 1.12087654937887e-14 10000000 9.31677121365646e-14 6.55400055652425e-14 1.12087637968477e-14 12589250 9.31674459248988e-14 6.55405978490627e-14 1.12087671274802e-14 15848930 9.31666563940706e-14 6.55401122715265e-14 1.12088795571167e-14 19952620 9.31671998621403e-14 6.5540891642745e-14 1.12087799012226e-14 25118860 9.31668918976358e-14 6.5540344241043e-14 1.12085140141536e-14 31622780 9.31669109751142e-14 6.5540706127668e-14 1.12088176232438e-14 39810720 9.31669230493541e-14 6.55405872598423e-14 1.12086069768833e-14 50118720 9.31670849611582e-14 6.55403583825291e-14 1.12087699492617e-14 63095730 9.31669317334482e-14 6.55404555325173e-14 1.12086967711309e-14 79432820 9.31669537584266e-14 6.55405359773965e-14 1.12087746934413e-14 100000000 9.31670755167923e-14 6.55404830300718e-14 1.12088051771329e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_ig_lt.standard0000644000175000017500000000631314163340332024662 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.59400012810132e-15 2.9350000570181e-15 2.9350000570181e-15 -0.8 0. 6.6127001284646e-15 2.92060005673835e-15 2.92060005673835e-15 -0.4 0. 6.03040011715229e-15 2.58340005018759e-15 2.58340005018759e-15 1.11022302462516e-16 0. 1.65450003214189e-15 1.24764902423802e-16 1.24764902423802e-16 0.4 0. 1.86380003620795e-15 5.90523011472062e-17 5.90523011472062e-17 0.8 0. 2.52170004898894e-15 1.46544002846903e-17 1.46544002846903e-17 1.2 0. 5.02360009759323e-15 -1.21978802369676e-16 -1.21978802369676e-16 -1.2 8.39682e-05 4.64480009023431e-15 3.17280006163783e-15 6.61593112852737e-16 -0.8 6.91572e-05 4.55430008847617e-15 3.19340006203803e-15 4.8511060942422e-16 -0.4 3.77724e-05 4.11660007997299e-15 2.78470005409823e-15 3.58656406967601e-16 1.11022302462516e-16 2.874499e-07 1.53720002986311e-15 -7.5238001461645e-17 2.79835105436343e-16 0.4 1.11725e-11 1.74700003393888e-15 -1.43921302795952e-16 2.42410904709305e-16 0.8 9.314105e-16 2.35050004566305e-15 -1.7774020345295e-16 1.94001703768862e-16 1.2 7.561e-19 4.57370008885305e-15 -3.45575906713486e-16 1.00430101951051e-16 -1.2 0. 6.6682001295428e-15 2.95330005737362e-15 2.95330005737362e-15 -0.8 0. 6.72220013059185e-15 2.95710005744744e-15 2.95710005744744e-15 -0.4 0. 6.15700011961174e-15 2.63220005113562e-15 2.63220005113562e-15 1.11022302462516e-16 0. 1.57220003054305e-15 8.80433017104129e-17 8.80433017104129e-17 0.4 0. 1.82570003546779e-15 5.6604301099649e-17 5.6604301099649e-17 0.8 0. 2.41940004700157e-15 1.38496002690555e-17 1.38496002690555e-17 1.2 0. 4.96980009654806e-15 -1.3254730257499e-16 -1.3254730257499e-16 -1.2 0.0001377483 4.67420009080546e-15 3.20840006232943e-15 6.3141611226649e-16 -0.8 0.0001143588 4.62650008987879e-15 3.25220006318033e-15 4.77272309271946e-16 -0.4 5.73459e-05 4.20870008176221e-15 2.87080005577089e-15 3.51326006825193e-16 1.11022302462516e-16 2.70478e-08 1.47060002856928e-15 -1.34662602616084e-16 2.82415105486464e-16 0.4 2.63812e-14 1.71220003326283e-15 -1.50906302931649e-16 2.4506780476092e-16 0.8 6.787e-20 2.25890004388354e-15 -1.8271730354964e-16 1.97964003845837e-16 1.2 3.056e-24 4.51670008774571e-15 -3.73187707249899e-16 1.10301102142814e-16 -1.2 0. 6.48150012591579e-15 2.90710005647609e-15 2.90710005647609e-15 -0.8 0. 6.4485001252747e-15 2.86570005567182e-15 2.86570005567182e-15 -0.4 0. 5.84020011345728e-15 2.50910004874416e-15 2.50910004874416e-15 1.11022302462516e-16 0. 2.12510004128421e-15 3.76817607320417e-16 3.76817607320417e-16 0.4 0. 1.93080003750956e-15 6.32999012297241e-17 6.32999012297241e-17 0.8 0. 2.7071000525907e-15 1.61027003128264e-17 1.61027003128264e-17 1.2 0. 5.02370009759518e-15 -1.00380701950091e-16 -1.00380701950091e-16 -1.2 4.58224e-05 4.61760008970589e-15 3.11530006052078e-15 7.29527814172501e-16 -0.8 3.83815e-05 4.44400008633337e-15 3.1048000603168e-15 4.94330109603327e-16 -0.4 2.22339e-05 3.98260007736978e-15 2.66040005168346e-15 3.66914007128021e-16 1.11022302462516e-16 1.2835e-06 1.82870003552607e-15 2.29222604453096e-16 2.75304505348327e-16 0.4 1.296e-09 1.80810003512587e-15 -1.32045202565236e-16 2.38047504624537e-16 0.8 2.0361e-12 2.51450004884907e-15 -1.68985303282869e-16 1.87177703636292e-16 1.2 1.67485e-14 4.5832000890376e-15 -2.92007605672818e-16 8.50650016525536e-17 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_core_sw.standard0000644000175000017500000001527714163340332025346 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -0.0009464194 0. 0. 0.0009464194 -1.10000 -0.0008910355 0. 0. 0.0008910355 -1.00000 -0.0008377832 0. 0. 0.0008377832 -0.9 -0.0007866325 0. 0. 0.0007866325 -0.8 -0.0007375716 0. 0. 0.0007375716 -0.7 -0.0006906337 0. 0. 0.0006906337 -0.6 -0.0006459682 0. 0. 0.0006459682 -0.5 -0.0006040533 0. 0. 0.0006040533 -0.4 -0.0005662803 0. 0. 0.0005662803 -0.3 -0.0005356409 0. 0. 0.0005356409 -0.2 -0.0005107319 0. 0. 0.0005107319 -0.1 -0.0004238819 0. 0. 0.0004238819 2.220446e-16 1.3054e-18 0. 0. -1.3054e-18 -1.20000 -0.0015483 0. 0. 0.0015483 -1.10000 -0.0014643 0. 0. 0.0014643 -1.00000 -0.0013831 0. 0. 0.0013831 -0.9 -0.0013047 0. 0. 0.0013047 -0.8 -0.0012293 0. 0. 0.0012293 -0.7 -0.001157 0. 0. 0.001157 -0.6 -0.0010884 0. 0. 0.0010884 -0.5 -0.0010247 0. 0. 0.0010247 -0.4 -0.0009693193 0. 0. 0.0009693193 -0.3 -0.0009262564 0. 0. 0.0009262564 -0.2 -0.000879713 0. 0. 0.000879713 -0.1 -0.0006737379 0. 0. 0.0006737379 2.220446e-16 1.9341e-18 0. 0. -1.9341e-18 -1.20000 -0.0040074 0. 0. 0.0040074 -1.10000 -0.0038213 0. 0. 0.0038213 -1.00000 -0.0036405 0. 0. 0.0036405 -0.9 -0.0034658 0. 0. 0.0034658 -0.8 -0.0032984 0. 0. 0.0032984 -0.7 -0.0031412 0. 0. 0.0031412 -0.6 -0.0029992 0. 0. 0.0029992 -0.5 -0.0028797 0. 0. 0.0028797 -0.4 -0.0027834 0. 0. 0.0027834 -0.3 -0.0026463 0. 0. 0.0026463 -0.2 -0.0022483 0. 0. 0.0022483 -0.1 -0.0013907 0. 0. 0.0013907 2.220446e-16 2.9201e-18 0. 0. -2.9201e-18 -1.20000 -0.0074918 0. 0. 0.0074918 -1.10000 -0.0071801 0. 0. 0.0071801 -1.00000 -0.0068818 0. 0. 0.0068818 -0.9 -0.0066016 0. 0. 0.0066016 -0.8 -0.0063466 0. 0. 0.0063466 -0.7 -0.0061255 0. 0. 0.0061255 -0.6 -0.0059409 0. 0. 0.0059409 -0.5 -0.0057502 0. 0. 0.0057502 -0.4 -0.0053993 0. 0. 0.0053993 -0.3 -0.0047036 0. 0. 0.0047036 -0.2 -0.0035737 0. 0. 0.0035737 -0.1 -0.0020016 0. 0. 0.0020016 2.220446e-16 3.7089e-18 0. 0. -3.7089e-18 -1.20000 -0.0114995 0. 0. 0.0114995 -1.10000 -0.0110842 0. 0. 0.0110842 -1.00000 -0.0107055 0. 0. 0.0107055 -0.9 -0.0103717 0. 0. 0.0103717 -0.8 -0.0100825 0. 0. 0.0100825 -0.7 -0.0097962 0. 0. 0.0097962 -0.6 -0.0093969 0. 0. 0.0093969 -0.5 -0.0087404 0. 0. 0.0087404 -0.4 -0.0077283 0. 0. 0.0077283 -0.3 -0.006329 0. 0. 0.006329 -0.2 -0.0045564 0. 0. 0.0045564 -0.1 -0.0024391 0. 0. 0.0024391 2.220446e-16 5.6757e-18 0. 0. -5.6757e-18 -1.20000 -0.0007467436 0. 0. 0.0007467436 -1.10000 -0.0006912223 0. 0. 0.0006912223 -1.00000 -0.0006386181 0. 0. 0.0006386181 -0.9 -0.0005888436 0. 0. 0.0005888436 -0.8 -0.0005418131 0. 0. 0.0005418131 -0.7 -0.0004974446 0. 0. 0.0004974446 -0.6 -0.0004556664 0. 0. 0.0004556664 -0.5 -0.0004164414 0. 0. 0.0004164414 -0.4 -0.0003798666 0. 0. 0.0003798666 -0.3 -0.0003466352 0. 0. 0.0003466352 -0.2 -0.0003194227 0. 0. 0.0003194227 -0.1 -0.0002887037 0. 0. 0.0002887037 2.220446e-16 9.320e-19 0. 0. -9.320e-19 -1.20000 -0.0015756 0. 0. 0.0015756 -1.10000 -0.0014758 0. 0. 0.0014758 -1.00000 -0.0013803 0. 0. 0.0013803 -0.9 -0.0012888 0. 0. 0.0012888 -0.8 -0.0012013 0. 0. 0.0012013 -0.7 -0.0011179 0. 0. 0.0011179 -0.6 -0.0010383 0. 0. 0.0010383 -0.5 -0.0009629391 0. 0. 0.0009629391 -0.4 -0.0008925457 0. 0. 0.0008925457 -0.3 -0.0008302124 0. 0. 0.0008302124 -0.2 -0.000780978 0. 0. 0.000780978 -0.1 -0.0006641408 0. 0. 0.0006641408 2.220446e-16 1.7473e-18 0. 0. -1.7473e-18 -1.20000 -0.0054272 0. 0. 0.0054272 -1.10000 -0.0051618 0. 0. 0.0051618 -1.00000 -0.0049037 0. 0. 0.0049037 -0.9 -0.0046533 0. 0. 0.0046533 -0.8 -0.0044111 0. 0. 0.0044111 -0.7 -0.0041784 0. 0. 0.0041784 -0.6 -0.0039583 0. 0. 0.0039583 -0.5 -0.0037578 0. 0. 0.0037578 -0.4 -0.0035887 0. 0. 0.0035887 -0.3 -0.0034343 0. 0. 0.0034343 -0.2 -0.0030311 0. 0. 0.0030311 -0.1 -0.0019384 0. 0. 0.0019384 2.220446e-16 3.9965e-18 0. 0. -3.9965e-18 -1.20000 -0.011216 0. 0. 0.011216 -1.10000 -0.010731 0. 0. 0.010731 -1.00000 -0.0102607 0. 0. 0.0102607 -0.9 -0.009809 0. 0. 0.009809 -0.8 -0.0093827 0. 0. 0.0093827 -0.7 -0.0089933 0. 0. 0.0089933 -0.6 -0.0086552 0. 0. 0.0086552 -0.5 -0.0083537 0. 0. 0.0083537 -0.4 -0.0079164 0. 0. 0.0079164 -0.3 -0.0070041 0. 0. 0.0070041 -0.2 -0.0053906 0. 0. 0.0053906 -0.1 -0.003043 0. 0. 0.003043 2.220446e-16 2.7454e-18 0. 0. -2.7454e-18 -1.20000 -0.0179782 0. 0. 0.0179782 -1.10000 -0.017279 0. 0. 0.017279 -1.00000 -0.0166223 0. 0. 0.0166223 -0.9 -0.0160223 0. 0. 0.0160223 -0.8 -0.0154899 0. 0. 0.0154899 -0.7 -0.0149965 0. 0. 0.0149965 -0.6 -0.014403 0. 0. 0.014403 -0.5 -0.0134743 0. 0. 0.0134743 -0.4 -0.0120011 0. 0. 0.0120011 -0.3 -0.0098894 0. 0. 0.0098894 -0.2 -0.0071502 0. 0. 0.0071502 -0.1 -0.0038373 0. 0. 0.0038373 2.220446e-16 6.536e-18 0. 0. -6.536e-18 -1.20000 -0.0010317 0. 0. 0.0010317 -1.10000 -0.0009807774 0. 0. 0.0009807774 -1.00000 -0.0009314407 0. 0. 0.0009314407 -0.9 -0.000883876 0. 0. 0.000883876 -0.8 -0.0008383834 0. 0. 0.0008383834 -0.7 -0.0007955788 0. 0. 0.0007955788 -0.6 -0.0007566649 0. 0. 0.0007566649 -0.5 -0.000723608 0. 0. 0.000723608 -0.4 -0.0006980555 0. 0. 0.0006980555 -0.3 -0.000675857 0. 0. 0.000675857 -0.2 -0.0006241063 0. 0. 0.0006241063 -0.1 -0.0004387298 0. 0. 0.0004387298 2.220446e-16 1.5888e-18 0. 0. -1.5888e-18 -1.20000 -0.0014298 0. 0. 0.0014298 -1.10000 -0.001362 0. 0. 0.001362 -1.00000 -0.0012964 0. 0. 0.0012964 -0.9 -0.0012333 0. 0. 0.0012333 -0.8 -0.0011732 0. 0. 0.0011732 -0.7 -0.0011173 0. 0. 0.0011173 -0.6 -0.0010677 0. 0. 0.0010677 -0.5 -0.0010269 0. 0. 0.0010269 -0.4 -0.0009955274 0. 0. 0.0009955274 -0.3 -0.0009615826 0. 0. 0.0009615826 -0.2 -0.000862767 0. 0. 0.000862767 -0.1 -0.0005733953 0. 0. 0.0005733953 2.220446e-16 1.9547e-18 0. 0. -1.9547e-18 -1.20000 -0.0028007 0. 0. 0.0028007 -1.10000 -0.0026805 0. 0. 0.0026805 -1.00000 -0.0025655 0. 0. 0.0025655 -0.9 -0.0024574 0. 0. 0.0024574 -0.8 -0.0023586 0. 0. 0.0023586 -0.7 -0.0022728 0. 0. 0.0022728 -0.6 -0.002203 0. 0. 0.002203 -0.5 -0.0021474 0. 0. 0.0021474 -0.4 -0.002083 0. 0. 0.002083 -0.3 -0.0019296 0. 0. 0.0019296 -0.2 -0.0015711 0. 0. 0.0015711 -0.1 -0.0009281569 0. 0. 0.0009281569 2.220446e-16 2.7274e-18 0. 0. -2.7274e-18 -1.20000 -0.0046419 0. 0. 0.0046419 -1.10000 -0.0044673 0. 0. 0.0044673 -1.00000 -0.0043068 0. 0. 0.0043068 -0.9 -0.0041644 0. 0. 0.0041644 -0.8 -0.0040438 0. 0. 0.0040438 -0.7 -0.0039452 0. 0. 0.0039452 -0.6 -0.0038538 0. 0. 0.0038538 -0.5 -0.0037143 0. 0. 0.0037143 -0.4 -0.0034341 0. 0. 0.0034341 -0.3 -0.0029414 0. 0. 0.0029414 -0.2 -0.0022069 0. 0. 0.0022069 -0.1 -0.0012226 0. 0. 0.0012226 2.220446e-16 4.3086e-18 0. 0. -4.3086e-18 -1.20000 -0.0067655 0. 0. 0.0067655 -1.10000 -0.0065622 0. 0. 0.0065622 -1.00000 -0.0063862 0. 0. 0.0063862 -0.9 -0.0062375 0. 0. 0.0062375 -0.8 -0.0061031 0. 0. 0.0061031 -0.7 -0.0059382 0. 0. 0.0059382 -0.6 -0.005669 0. 0. 0.005669 -0.5 -0.0052296 0. 0. 0.0052296 -0.4 -0.004586 0. 0. 0.004586 -0.3 -0.0037318 0. 0. 0.0037318 -0.2 -0.0026756 0. 0. 0.0026756 -0.1 -0.0014282 0. 0. 0.0014282 2.220446e-16 4.7685e-18 0. 0. -4.7685e-18 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_ig_lt.standard0000644000175000017500000000634514163340332025031 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.73910013092017e-15 2.95410005738916e-15 2.95410005738916e-15 -0.8 0. 6.84990013307268e-15 2.92980005691708e-15 2.92980005691708e-15 -0.4 0. 6.74490013103285e-15 2.7256000529501e-15 2.7256000529501e-15 1.11022302462516e-16 0. 6.17860012003136e-15 1.43850002794567e-15 1.43850002794567e-15 0.4 0. 6.73390013081915e-15 -2.86651005568755e-16 -2.86651005568755e-16 0.8 0. 7.41350014402171e-15 -3.73244007250993e-16 -3.73244007250993e-16 1.2 0. 7.67110014902609e-15 -3.29673206404545e-16 -3.29673206404545e-16 -1.2 8.44558e-05 4.91780009553786e-15 3.19810006212933e-15 7.36619914310279e-16 -0.8 7.44142e-05 4.88490009489872e-15 3.22890006272768e-15 4.76710109261024e-16 -0.4 5.21598e-05 4.88820009496283e-15 2.91280005658682e-15 3.39311806591794e-16 1.11022302462516e-16 1.42097e-05 4.99710009707842e-15 9.71759518878325e-16 1.92309003735978e-16 0.4 1.0353e-06 6.23810012118727e-15 -7.00211213602969e-16 2.6469000514212e-17 0.8 1.305834e-07 6.94980013501343e-15 -4.8464370941515e-16 -1.6055480311909e-16 1.2 3.34819e-08 7.2062001399945e-15 -2.58550305022844e-16 -3.51871006835781e-16 -1.2 0. 6.8064001322276e-15 2.96970005769222e-15 2.96970005769222e-15 -0.8 0. 6.93930013480945e-15 2.96870005767279e-15 2.96870005767279e-15 -0.4 0. 6.81780013244907e-15 2.74290005328619e-15 2.74290005328619e-15 1.11022302462516e-16 0. 5.39200010475012e-15 8.03448215608549e-16 8.03448215608549e-16 0.4 0. 6.98030013560595e-15 -3.07148905966967e-16 -3.07148905966967e-16 0.8 0. 7.60100014766426e-15 -2.89176405617816e-16 -2.89176405617816e-16 1.2 0. 7.79220015137869e-15 -2.96486405759827e-16 -2.96486405759827e-16 -1.2 0.0001403251 4.91950009557089e-15 3.23980006293944e-15 6.75276413118562e-16 -0.8 0.0001232767 4.9371000959128e-15 3.28520006382142e-15 4.6769820908595e-16 -0.4 8.38672e-05 4.90620009531251e-15 2.9870000580283e-15 3.30777506425998e-16 1.11022302462516e-16 1.17076e-05 4.47690008697252e-15 4.33841708428222e-16 1.88777603667373e-16 0.4 1.519638e-07 6.51280012652385e-15 -5.97773111612909e-16 3.55701006910186e-17 0.8 1.20258e-08 7.12980013851028e-15 -4.31133408375608e-16 -1.53713502986185e-16 1.2 2.8124e-09 7.32490014230048e-15 -2.62729205104028e-16 -3.45477706711579e-16 -1.2 0. 6.63620012892114e-15 2.95880005748046e-15 2.95880005748046e-15 -0.8 0. 6.71010013035679e-15 2.93320005698313e-15 2.93320005698313e-15 -0.4 0. 6.62830012876766e-15 2.72710005297924e-15 2.72710005297924e-15 1.11022302462516e-16 0. 6.47050012570209e-15 1.9309000375115e-15 1.9309000375115e-15 0.4 0. 6.83100013270551e-15 6.97141513543334e-16 6.97141513543334e-16 0.8 0. 7.22660014039081e-15 -6.62351012867461e-17 -6.62351012867461e-17 1.2 0. 7.49060014551952e-15 -3.01134005850116e-16 -3.01134005850116e-16 -1.2 4.46922e-05 4.93980009596526e-15 3.12830006077333e-15 8.64363516791948e-16 -0.8 4.10532e-05 4.81240009349026e-15 3.14590006111525e-15 4.88790809495715e-16 -0.4 2.84516e-05 4.88120009482684e-15 2.80390005447123e-15 3.49416706788101e-16 1.11022302462516e-16 1.27747e-05 5.25110010201287e-15 1.57780003065184e-15 1.97591503838601e-16 0.4 2.4143e-06 6.08890011828877e-15 9.80572019049525e-17 1.9282800374606e-17 0.8 5.653298e-07 6.70110013018195e-15 -3.80188207385898e-16 -1.71527203332251e-16 1.2 1.856692e-07 7.01750013632863e-15 -2.77224405385625e-16 -3.6281810704845e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_ig_lt.standard0000644000175000017500000001707614163340332025031 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 4.04913e-05 4.78890009303373e-15 2.44590004751638e-15 2.78990405419933e-16 -1 3.79891e-05 4.86020009441887e-15 2.5045000486548e-15 2.85676505549824e-16 -0.8 3.56175e-05 4.93400009585258e-15 2.56500004983013e-15 2.92933605690807e-16 -0.6 3.37887e-05 5.01060009734068e-15 2.62780005105014e-15 3.00497705837754e-16 -0.4 3.32886e-05 5.09320009894535e-15 2.69530005236146e-15 3.10044406023218e-16 -0.2 2.72747e-05 5.61430010906874e-15 2.63890005126578e-15 1.03860002017683e-15 -5.55111512312578e-17 0. 6.55680012737864e-15 2.48660004830706e-15 2.48660004830706e-15 0.2 -2.25386e-05 6.68470012986334e-15 2.46620004791075e-15 2.89840005630708e-15 -1.2 6.33958e-05 4.83220009387492e-15 3.00560005838965e-15 3.64533907081782e-16 -1 5.95602e-05 4.90020009519595e-15 3.06020005945036e-15 3.74281207271143e-16 -0.8 5.68064e-05 4.97120009657526e-15 3.11660006054604e-15 3.85236207483965e-16 -0.6 5.61122e-05 5.0474000980556e-15 3.17550006169029e-15 3.99248407756179e-16 -0.4 5.249e-05 5.37520010442375e-15 3.19230006201666e-15 7.65763714876454e-16 -0.2 2.58701e-05 6.39010012414016e-15 2.78130005403218e-15 2.37550004614872e-15 -5.55111512312578e-17 0. 6.81300013235582e-15 2.81090005460722e-15 2.81090005460722e-15 0.2 -1.69226e-05 6.78280013176913e-15 3.04840005922112e-15 2.73760005318322e-15 -1.2 7.5221e-05 4.82530009374087e-15 3.16800006154458e-15 4.46263408669538e-16 -1 7.24102e-05 4.89130009502305e-15 3.21810006251787e-15 4.59784408932209e-16 -0.8 7.2025e-05 4.96260009640819e-15 3.27000006352613e-15 4.77290809272305e-16 -0.6 6.92639e-05 5.22200010144754e-15 3.30170006414197e-15 7.33673414253038e-16 -0.4 4.52576e-05 6.10750011865011e-15 3.04350005912593e-15 2.00300003891218e-15 -0.2 1.84924e-05 6.65900012936407e-15 2.64380005136098e-15 3.01120005849844e-15 -5.55111512312578e-17 0. 6.85500013317175e-15 2.91900005670727e-15 2.91900005670727e-15 0.2 -1.13398e-05 6.78520013181575e-15 3.36420006535615e-15 2.56660004986121e-15 -1.2 8.13128e-05 4.78490009295602e-15 3.18870006194672e-15 5.26203110222522e-16 -1 8.15243e-05 4.85310009428094e-15 3.23490006284425e-15 5.47209810630618e-16 -0.8 7.88297e-05 5.09620009900363e-15 3.26700006346785e-15 7.7819261511791e-16 -0.6 5.75709e-05 5.83460011334849e-15 3.10640006034788e-15 1.7564000341215e-15 -0.4 3.17321e-05 6.41310012458698e-15 2.76980005380877e-15 2.72970005302975e-15 -0.2 1.23404e-05 6.70070013017418e-15 2.4785000481497e-15 3.32700006463347e-15 -5.55111512312578e-17 0. 6.80580013221595e-15 2.95180005734448e-15 2.95180005734448e-15 0.2 -7.2656e-06 6.72800013070453e-15 3.55290006902202e-15 2.40230004666937e-15 -1.2 6.0318e-05 4.70340009137273e-15 2.48180004821381e-15 2.70595505256846e-16 -1 5.66746e-05 4.77500009276369e-15 2.54080004936e-15 2.77000905381283e-16 -0.8 5.30413e-05 4.84900009420129e-15 2.60160005054116e-15 2.83960905516495e-16 -0.6 4.9569e-05 4.92580009569328e-15 2.664700051767e-15 2.91161105656373e-16 -0.4 4.71577e-05 5.00550009724161e-15 2.73260005308609e-15 2.96014505750659e-16 -0.2 4.43102e-05 5.25560010210029e-15 2.78380005408075e-15 5.46008810607287e-16 -5.55111512312578e-17 0. 6.52830012682497e-15 2.4244000470987e-15 2.4244000470987e-15 0.2 -4.30762e-05 6.6874001299158e-15 2.28950004447801e-15 2.98100005791174e-15 -1.2 0.0001047921 4.87350009467725e-15 3.08050005984472e-15 3.56276006921357e-16 -1 9.79824e-05 4.94140009599634e-15 3.13500006090349e-15 3.6572080710484e-16 -0.8 9.18552e-05 5.01220009737177e-15 3.19110006199335e-15 3.76290707310181e-16 -0.6 8.80478e-05 5.08610009880742e-15 3.24990006313565e-15 3.87268507523446e-16 -0.4 8.64139e-05 5.2444001018827e-15 3.30800006426436e-15 5.01376609740219e-16 -0.2 4.71502e-05 6.40380012440631e-15 2.9261000568452e-15 2.25250004375921e-15 -5.55111512312578e-17 0. 6.90340013411202e-15 2.84930005535321e-15 2.84930005535321e-15 0.2 -3.17321e-05 6.86670013339905e-15 3.01310005853535e-15 2.7865000541332e-15 -1.2 0.0001274455 4.87840009477244e-15 3.22780006270631e-15 4.37778608504704e-16 -1 0.0001202813 4.94410009604879e-15 3.27770006367572e-15 4.50910408759815e-16 -0.8 0.0001166153 5.01280009738342e-15 3.32940006468009e-15 4.6529070903918e-16 -0.6 0.0001152172 5.16510010034215e-15 3.38140006569029e-15 5.75234511175053e-16 -0.4 8.11621e-05 6.09010011831208e-15 3.17700006171943e-15 1.8255000354639e-15 -0.2 3.38587e-05 6.74560013104645e-15 2.72060005285297e-15 3.01090005849261e-15 -5.55111512312578e-17 0. 6.94650013494932e-15 2.96050005751349e-15 2.96050005751349e-15 0.2 -2.11028e-05 6.8722001335059e-15 3.35500006517742e-15 2.58660005024975e-15 -1.2 0.0001361991 4.83290009388852e-15 3.23320006281122e-15 5.17344510050427e-16 -1 0.0001336523 4.89780009514932e-15 3.27940006370875e-15 5.3448531038342e-16 -0.8 0.0001318463 5.06870009846939e-15 3.32550006460433e-15 6.68813412993006e-16 -0.6 0.0001019357 5.80670011280648e-15 3.20970006235469e-15 1.59320003095102e-15 -0.4 5.74583e-05 6.47260012574289e-15 2.84590005528716e-15 2.68640005218856e-15 -0.2 2.27509e-05 6.78510013181381e-15 2.52210004899671e-15 3.34570006499675e-15 -5.55111512312578e-17 0. 6.88440013374291e-15 2.97920005787677e-15 2.97920005787677e-15 0.2 -1.35449e-05 6.80470013219458e-15 3.54740006891517e-15 2.40680004675679e-15 -1.2 2.4168e-05 4.87340009467531e-15 2.42410004709287e-15 2.88159505598061e-16 -1 2.27916e-05 4.9460000960857e-15 2.48170004821187e-15 2.9523160573545e-16 -0.8 2.18341e-05 5.02100009754272e-15 2.54110004936583e-15 3.02955305885498e-16 -0.6 2.1568e-05 5.09980009907357e-15 2.60290005056641e-15 3.1229450606693e-16 -0.4 2.13035e-05 5.22660010153691e-15 2.66180005171066e-15 3.99815507767196e-16 -0.2 1.39991e-05 5.91220011485602e-15 2.52650004908219e-15 1.55830003027302e-15 -5.55111512312578e-17 0. 6.55750012739224e-15 2.53000004915019e-15 2.53000004915019e-15 0.2 -1.01909e-05 6.64750012914066e-15 2.59510005041488e-15 2.78070005402052e-15 -1.2 3.35077e-05 4.78680009299293e-15 2.89580005625657e-15 3.74309307271689e-16 -1 3.22706e-05 4.85500009431785e-15 2.95060005732116e-15 3.84502307469708e-16 -0.8 3.19832e-05 4.92680009571271e-15 3.00710005841879e-15 3.96688507706448e-16 -0.6 3.20562e-05 5.0254000976282e-15 3.0631000595067e-15 4.42930508604789e-16 -0.4 2.64476e-05 5.56400010809156e-15 2.98820005805162e-15 1.17490002282473e-15 -0.2 1.20402e-05 6.332800123027e-15 2.63330005115699e-15 2.471000048004e-15 -5.55111512312578e-17 0. 6.66940012956611e-15 2.81170005462276e-15 2.81170005462276e-15 0.2 -7.7157e-06 6.6579001293427e-15 3.05940005943482e-15 2.66660005180391e-15 -1.2 3.99683e-05 4.75180009231299e-15 3.07980005983113e-15 4.56430408867051e-16 -1 3.98277e-05 4.81880009361459e-15 3.13030006081219e-15 4.71100109152039e-16 -0.8 4.01448e-05 4.90710009533e-15 3.18080006179325e-15 5.10713909921614e-16 -0.6 3.55746e-05 5.32920010353011e-15 3.15900006136974e-15 1.02020001981938e-15 -0.4 2.16327e-05 6.07590011803622e-15 2.88310005600984e-15 2.15570004187868e-15 -0.2 8.5157e-06 6.53250012690656e-15 2.54990004953678e-15 2.99060005809824e-15 -5.55111512312578e-17 0. 6.71100013037427e-15 2.92230005677138e-15 2.92230005677138e-15 0.2 -5.1514e-06 6.65760012933687e-15 3.34410006496567e-15 2.52270004900837e-15 -1.2 4.43591e-05 4.71520009160196e-15 3.12290006066843e-15 5.37648410444869e-16 -1 4.49144e-05 4.79920009323383e-15 3.16810006154653e-15 5.78120211231113e-16 -0.8 4.08941e-05 5.15620010016925e-15 3.16590006150379e-15 9.78415219007625e-16 -0.6 2.81051e-05 5.82660011319308e-15 2.97520005779907e-15 1.9220000373386e-15 -0.4 1.50628e-05 6.31190012262098e-15 2.67800005202538e-15 2.75500005352125e-15 -0.2 5.6364e-06 6.57790012778855e-15 2.42400004709093e-15 3.28990006391273e-15 -5.55111512312578e-17 0. 6.68480012986529e-15 2.9563000574319e-15 2.9563000574319e-15 0.2 -3.2516e-06 6.61430012849569e-15 3.52730006852469e-15 2.3752000461429e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_core_lw.standard0000644000175000017500000001626314163340332025171 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -1.06936e-05 0. 0. 1.06936e-05 -1.10000 -9.9568e-06 0. 0. 9.9568e-06 -1.00000 -9.2497e-06 0. 0. 9.2497e-06 -0.9 -8.5723e-06 0. 0. 8.5723e-06 -0.8 -7.9248e-06 0. 0. 7.9248e-06 -0.7 -7.3086e-06 0. 0. 7.3086e-06 -0.6 -6.7275e-06 0. 0. 6.7275e-06 -0.5 -6.1928e-06 0. 0. 6.1928e-06 -0.4 -5.7357e-06 0. 0. 5.7357e-06 -0.3 -5.4135e-06 0. 0. 5.4135e-06 -0.2 -5.2246e-06 0. 0. 5.2246e-06 -0.1 -4.823e-06 0. 0. 4.823e-06 2.220446e-16 2.231e-20 0. 0. -2.231e-20 -1.20000 -4.16168e-05 0. 0. 4.16168e-05 -1.10000 -3.94189e-05 0. 0. 3.94189e-05 -1.00000 -3.72838e-05 0. 0. 3.72838e-05 -0.9 -3.52134e-05 0. 0. 3.52134e-05 -0.8 -3.32123e-05 0. 0. 3.32123e-05 -0.7 -3.12914e-05 0. 0. 3.12914e-05 -0.6 -2.94783e-05 0. 0. 2.94783e-05 -0.5 -2.78428e-05 0. 0. 2.78428e-05 -0.4 -2.65369e-05 0. 0. 2.65369e-05 -0.3 -2.57294e-05 0. 0. 2.57294e-05 -0.2 -2.5178e-05 0. 0. 2.5178e-05 -0.1 -2.16426e-05 0. 0. 2.16426e-05 2.220446e-16 7.988e-20 0. 0. -7.988e-20 -1.20000 -0.0002362204 0. 0. 0.0002362204 -1.10000 -0.000226908 0. 0. 0.000226908 -1.00000 -0.0002178127 0. 0. 0.0002178127 -0.9 -0.0002090164 0. 0. 0.0002090164 -0.8 -0.0002006766 0. 0. 0.0002006766 -0.7 -0.0001930899 0. 0. 0.0001930899 -0.6 -0.0001867481 0. 0. 0.0001867481 -0.5 -0.0001822139 0. 0. 0.0001822139 -0.4 -0.0001794053 0. 0. 0.0001794053 -0.3 -0.0001739255 0. 0. 0.0001739255 -0.2 -0.0001492067 0. 0. 0.0001492067 -0.1 -9.16731e-05 0. 0. 9.16731e-05 2.220446e-16 1.889e-19 0. 0. -1.889e-19 -1.20000 -0.0005558436 0. 0. 0.0005558436 -1.10000 -0.0005362128 0. 0. 0.0005362128 -1.00000 -0.0005177925 0. 0. 0.0005177925 -0.9 -0.0005011767 0. 0. 0.0005011767 -0.8 -0.0004871435 0. 0. 0.0004871435 -0.7 -0.000476411 0. 0. 0.000476411 -0.6 -0.0004686708 0. 0. 0.0004686708 -0.5 -0.0004581339 0. 0. 0.0004581339 -0.4 -0.0004291594 0. 0. 0.0004291594 -0.3 -0.0003693744 0. 0. 0.0003693744 -0.2 -0.0002760989 0. 0. 0.0002760989 -0.1 -0.0001516718 0. 0. 0.0001516718 2.220446e-16 3.650e-19 0. 0. -3.650e-19 -1.20000 -0.0009388088 0. 0. 0.0009388088 -1.10000 -0.0009118257 0. 0. 0.0009118257 -1.00000 -0.0008888303 0. 0. 0.0008888303 -0.9 -0.0008704234 0. 0. 0.0008704234 -0.8 -0.0008554767 0. 0. 0.0008554767 -0.7 -0.0008367338 0. 0. 0.0008367338 -0.6 -0.0008009624 0. 0. 0.0008009624 -0.5 -0.0007380051 0. 0. 0.0007380051 -0.4 -0.0006440998 0. 0. 0.0006440998 -0.3 -0.0005201185 0. 0. 0.0005201185 -0.2 -0.0003690896 0. 0. 0.0003690896 -0.1 -0.0001945448 0. 0. 0.0001945448 2.220446e-16 6.656e-19 0. 0. -6.656e-19 -1.20000 -4.6198e-06 0. 0. 4.6198e-06 -1.10000 -4.2192e-06 0. 0. 4.2192e-06 -1.00000 -3.8403e-06 0. 0. 3.8403e-06 -0.9 -3.4827e-06 0. 0. 3.4827e-06 -0.8 -3.1458e-06 0. 0. 3.1458e-06 -0.7 -2.829e-06 0. 0. 2.829e-06 -0.6 -2.5319e-06 0. 0. 2.5319e-06 -0.5 -2.2545e-06 0. 0. 2.2545e-06 -0.4 -1.9989e-06 0. 0. 1.9989e-06 -0.3 -1.7761e-06 0. 0. 1.7761e-06 -0.2 -1.6197e-06 0. 0. 1.6197e-06 -0.1 -1.5033e-06 0. 0. 1.5033e-06 2.220446e-16 1.085e-20 0. 0. -1.085e-20 -1.20000 -3.72036e-05 0. 0. 3.72036e-05 -1.10000 -3.49942e-05 0. 0. 3.49942e-05 -1.00000 -3.28573e-05 0. 0. 3.28573e-05 -0.9 -3.07922e-05 0. 0. 3.07922e-05 -0.8 -2.87987e-05 0. 0. 2.87987e-05 -0.7 -2.68771e-05 0. 0. 2.68771e-05 -0.6 -2.503e-05 0. 0. 2.503e-05 -0.5 -2.32681e-05 0. 0. 2.32681e-05 -0.4 -2.16321e-05 0. 0. 2.16321e-05 -0.3 -2.02687e-05 0. 0. 2.02687e-05 -0.2 -1.94331e-05 0. 0. 1.94331e-05 -0.1 -1.81362e-05 0. 0. 1.81362e-05 2.220446e-16 9.260e-20 0. 0. -9.260e-20 -1.20000 -0.0003286288 0. 0. 0.0003286288 -1.10000 -0.0003155778 0. 0. 0.0003155778 -1.00000 -0.0003027384 0. 0. 0.0003027384 -0.9 -0.0002901433 0. 0. 0.0002901433 -0.8 -0.0002778628 0. 0. 0.0002778628 -0.7 -0.000266055 0. 0. 0.000266055 -0.6 -0.0002550818 0. 0. 0.0002550818 -0.5 -0.0002457097 0. 0. 0.0002457097 -0.4 -0.000239061 0. 0. 0.000239061 -0.3 -0.0002340077 0. 0. 0.0002340077 -0.2 -0.0002099457 0. 0. 0.0002099457 -0.1 -0.0001340153 0. 0. 0.0001340153 2.220446e-16 2.733e-19 0. 0. -2.733e-19 -1.20000 -0.0008550163 0. 0. 0.0008550163 -1.10000 -0.0008236964 0. 0. 0.0008236964 -1.00000 -0.0007933714 0. 0. 0.0007933714 -0.9 -0.0007645959 0. 0. 0.0007645959 -0.8 -0.0007383142 0. 0. 0.0007383142 -0.7 -0.0007159433 0. 0. 0.0007159433 -0.6 -0.0006988528 0. 0. 0.0006988528 -0.5 -0.0006838719 0. 0. 0.0006838719 -0.4 -0.0006493285 0. 0. 0.0006493285 -0.3 -0.0005677289 0. 0. 0.0005677289 -0.2 -0.0004295741 0. 0. 0.0004295741 -0.1 -0.0002380437 0. 0. 0.0002380437 2.220446e-16 8.408e-19 0. 0. -8.408e-19 -1.20000 -0.0014955 0. 0. 0.0014955 -1.10000 -0.0014465 0. 0. 0.0014465 -1.00000 -0.0014024 0. 0. 0.0014024 -0.9 -0.0013646 0. 0. 0.0013646 -0.8 -0.0013337 0. 0. 0.0013337 -0.7 -0.0013029 0. 0. 0.0013029 -0.6 -0.0012525 0. 0. 0.0012525 -0.5 -0.0011622 0. 0. 0.0011622 -0.4 -0.0010214 0. 0. 0.0010214 -0.3 -0.00082943 0. 0. 0.00082943 -0.2 -0.000591132 0. 0. 0.000591132 -0.1 -0.0003126426 0. 0. 0.0003126426 2.220446e-16 5.240e-19 0. 0. -5.240e-19 -1.20000 -1.67371e-05 0. 0. 1.67371e-05 -1.10000 -1.57836e-05 0. 0. 1.57836e-05 -1.00000 -1.48658e-05 0. 0. 1.48658e-05 -0.9 -1.39883e-05 0. 0. 1.39883e-05 -0.8 -1.31604e-05 0. 0. 1.31604e-05 -0.7 -1.24006e-05 0. 0. 1.24006e-05 -0.6 -1.17427e-05 0. 0. 1.17427e-05 -0.5 -1.12345e-05 0. 0. 1.12345e-05 -0.4 -1.0905e-05 0. 0. 1.0905e-05 -0.3 -1.07045e-05 0. 0. 1.07045e-05 -0.2 -1.0412e-05 0. 0. 1.0412e-05 -0.1 -8.7091e-06 0. 0. 8.7091e-06 2.220446e-16 3.325e-20 0. 0. -3.325e-20 -1.20000 -4.08513e-05 0. 0. 4.08513e-05 -1.10000 -3.88887e-05 0. 0. 3.88887e-05 -1.00000 -3.69941e-05 0. 0. 3.69941e-05 -0.9 -3.51847e-05 0. 0. 3.51847e-05 -0.8 -3.34927e-05 0. 0. 3.34927e-05 -0.7 -3.19761e-05 0. 0. 3.19761e-05 -0.6 -3.07254e-05 0. 0. 3.07254e-05 -0.5 -2.9835e-05 0. 0. 2.9835e-05 -0.4 -2.93085e-05 0. 0. 2.93085e-05 -0.3 -2.89336e-05 0. 0. 2.89336e-05 -0.2 -2.76695e-05 0. 0. 2.76695e-05 -0.1 -2.07054e-05 0. 0. 2.07054e-05 2.220446e-16 5.353e-20 0. 0. -5.353e-20 -1.20000 -0.0001566128 0. 0. 0.0001566128 -1.10000 -0.0001507144 0. 0. 0.0001507144 -1.00000 -0.0001451695 0. 0. 0.0001451695 -0.9 -0.0001401399 0. 0. 0.0001401399 -0.8 -0.000135847 0. 0. 0.000135847 -0.7 -0.0001325257 0. 0. 0.0001325257 -0.6 -0.0001302898 0. 0. 0.0001302898 -0.5 -0.000128901 0. 0. 0.000128901 -0.4 -0.000126976 0. 0. 0.000126976 -0.3 -0.0001191917 0. 0. 0.0001191917 -0.2 -9.74513e-05 0. 0. 9.74513e-05 -0.1 -5.77097e-05 0. 0. 5.77097e-05 2.220446e-16 1.418e-19 0. 0. -1.418e-19 -1.20000 -0.0003306668 0. 0. 0.0003306668 -1.10000 -0.000320712 0. 0. 0.000320712 -1.00000 -0.0003121261 0. 0. 0.0003121261 -0.9 -0.00030522 0. 0. 0.00030522 -0.8 -0.0003001452 0. 0. 0.0003001452 -0.7 -0.0002966144 0. 0. 0.0002966144 -0.6 -0.0002928841 0. 0. 0.0002928841 -0.5 -0.0002833412 0. 0. 0.0002833412 -0.4 -0.0002604691 0. 0. 0.0002604691 -0.3 -0.0002203148 0. 0. 0.0002203148 -0.2 -0.0001625177 0. 0. 0.0001625177 -0.1 -8.84119e-05 0. 0. 8.84119e-05 2.220446e-16 1.534e-19 0. 0. -1.534e-19 -1.20000 -0.0005391397 0. 0. 0.0005391397 -1.10000 -0.000528049 0. 0. 0.000528049 -1.00000 -0.0005194304 0. 0. 0.0005194304 -0.9 -0.0005128478 0. 0. 0.0005128478 -0.8 -0.0005060945 0. 0. 0.0005060945 -0.7 -0.0004935596 0. 0. 0.0004935596 -0.6 -0.0004687761 0. 0. 0.0004687761 -0.5 -0.0004280756 0. 0. 0.0004280756 -0.4 -0.0003706598 0. 0. 0.0003706598 -0.3 -0.0002974303 0. 0. 0.0002974303 -0.2 -0.0002100251 0. 0. 0.0002100251 -0.1 -0.0001102654 0. 0. 0.0001102654 2.220446e-16 4.521e-19 0. 0. -4.521e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1g_lw.standard0000644000175000017500000004026714163340332025145 0ustar carstencarstenFreq N(g) 100.00000 7.2795024e-49 125.89254 7.2795024e-49 158.48932 7.2795024e-49 199.52623 7.2795024e-49 251.18864 7.2795024e-49 316.22777 7.2795024e-49 398.10717 7.2795024e-49 501.18723 7.2795024e-49 630.95734 7.2795024e-49 794.32823 7.2795024e-49 1000 7.2795024e-49 1258.93 7.2795024e-49 1584.89 7.2795024e-49 1995.26 7.2795024e-49 2511.89 7.2795024e-49 3162.28 7.2795024e-49 3981.07 7.2795024e-49 5011.87 7.2795024e-49 6309.57 7.2795024e-49 7943.28 7.2795024e-49 10000 7.2795024e-49 12589.25 7.2795024e-49 15848.93 7.2795024e-49 19952.62 7.2795024e-49 25118.86 7.2795024e-49 31622.78 7.2795024e-49 39810.72 7.2795024e-49 50118.72 7.2795024e-49 63095.73 7.2795024e-49 79432.82 7.2795024e-49 100000 7.2795024e-49 125892.54 7.2795024e-49 158489.32 7.2795024e-49 199526.23 7.2795024e-49 251188.64 7.2795024e-49 316227.77 7.2795024e-49 398107.17 7.2795024e-49 501187.23 7.2795024e-49 630957.34 7.2795024e-49 794328.23 7.2795024e-49 1000000 7.2795024e-49 1258930 7.2795024e-49 1584890 7.2795024e-49 1995260 7.2795024e-49 2511890 7.2795024e-49 3162280 7.2795024e-49 3981070 7.2795024e-49 5011870 7.2795024e-49 6309570 7.2795024e-49 7943280 7.2795024e-49 10000000 7.2795024e-49 12589250 7.2795024e-49 15848930 7.2795024e-49 19952620 7.2795024e-49 25118860 7.2795024e-49 31622780 7.2795024e-49 39810720 7.2795024e-49 50118720 7.2795024e-49 63095730 7.2795024e-49 79432820 7.2795024e-49 100000000 7.2795024e-49 100.00000 4.704561e-48 125.89254 4.704561e-48 158.48932 4.704561e-48 199.52623 4.704561e-48 251.18864 4.704561e-48 316.22777 4.704561e-48 398.10717 4.704561e-48 501.18723 4.704561e-48 630.95734 4.704561e-48 794.32823 4.704561e-48 1000 4.704561e-48 1258.93 4.704561e-48 1584.89 4.704561e-48 1995.26 4.704561e-48 2511.89 4.704561e-48 3162.28 4.704561e-48 3981.07 4.704561e-48 5011.87 4.704561e-48 6309.57 4.704561e-48 7943.28 4.704561e-48 10000 4.704561e-48 12589.25 4.704561e-48 15848.93 4.704561e-48 19952.62 4.704561e-48 25118.86 4.704561e-48 31622.78 4.704561e-48 39810.72 4.704561e-48 50118.72 4.704561e-48 63095.73 4.704561e-48 79432.82 4.704561e-48 100000 4.704561e-48 125892.54 4.704561e-48 158489.32 4.704561e-48 199526.23 4.704561e-48 251188.64 4.704561e-48 316227.77 4.704561e-48 398107.17 4.704561e-48 501187.23 4.704561e-48 630957.34 4.704561e-48 794328.23 4.704561e-48 1000000 4.704561e-48 1258930 4.704561e-48 1584890 4.704561e-48 1995260 4.704561e-48 2511890 4.704561e-48 3162280 4.704561e-48 3981070 4.704561e-48 5011870 4.704561e-48 6309570 4.704561e-48 7943280 4.704561e-48 10000000 4.704561e-48 12589250 4.704561e-48 15848930 4.704561e-48 19952620 4.704561e-48 25118860 4.704561e-48 31622780 4.704561e-48 39810720 4.704561e-48 50118720 4.704561e-48 63095730 4.704561e-48 79432820 4.704561e-48 100000000 4.704561e-48 100.00000 1.1363641e-47 125.89254 1.1363641e-47 158.48932 1.1363641e-47 199.52623 1.1363641e-47 251.18864 1.1363641e-47 316.22777 1.1363641e-47 398.10717 1.1363641e-47 501.18723 1.1363641e-47 630.95734 1.1363641e-47 794.32823 1.1363641e-47 1000 1.1363641e-47 1258.93 1.1363641e-47 1584.89 1.1363641e-47 1995.26 1.1363641e-47 2511.89 1.1363641e-47 3162.28 1.1363641e-47 3981.07 1.1363641e-47 5011.87 1.1363641e-47 6309.57 1.1363641e-47 7943.28 1.1363641e-47 10000 1.1363641e-47 12589.25 1.1363641e-47 15848.93 1.1363641e-47 19952.62 1.1363641e-47 25118.86 1.1363641e-47 31622.78 1.1363641e-47 39810.72 1.1363641e-47 50118.72 1.1363641e-47 63095.73 1.1363641e-47 79432.82 1.1363641e-47 100000 1.1363641e-47 125892.54 1.1363641e-47 158489.32 1.1363641e-47 199526.23 1.1363641e-47 251188.64 1.1363641e-47 316227.77 1.1363641e-47 398107.17 1.1363641e-47 501187.23 1.1363641e-47 630957.34 1.1363641e-47 794328.23 1.1363641e-47 1000000 1.1363641e-47 1258930 1.1363641e-47 1584890 1.1363641e-47 1995260 1.1363641e-47 2511890 1.1363641e-47 3162280 1.1363641e-47 3981070 1.1363641e-47 5011870 1.1363641e-47 6309570 1.1363641e-47 7943280 1.1363641e-47 10000000 1.1363641e-47 12589250 1.1363641e-47 15848930 1.1363641e-47 19952620 1.1363641e-47 25118860 1.1363641e-47 31622780 1.1363641e-47 39810720 1.1363641e-47 50118720 1.1363641e-47 63095730 1.1363641e-47 79432820 1.1363641e-47 100000000 1.1363641e-47 100.00000 2.0403289e-47 125.89254 2.0403289e-47 158.48932 2.0403289e-47 199.52623 2.0403289e-47 251.18864 2.0403289e-47 316.22777 2.0403289e-47 398.10717 2.0403289e-47 501.18723 2.0403289e-47 630.95734 2.0403289e-47 794.32823 2.0403289e-47 1000 2.0403289e-47 1258.93 2.0403289e-47 1584.89 2.0403289e-47 1995.26 2.0403289e-47 2511.89 2.0403289e-47 3162.28 2.0403289e-47 3981.07 2.0403289e-47 5011.87 2.0403289e-47 6309.57 2.0403289e-47 7943.28 2.0403289e-47 10000 2.0403289e-47 12589.25 2.0403289e-47 15848.93 2.0403289e-47 19952.62 2.0403289e-47 25118.86 2.0403289e-47 31622.78 2.0403289e-47 39810.72 2.0403289e-47 50118.72 2.0403289e-47 63095.73 2.0403289e-47 79432.82 2.0403289e-47 100000 2.0403289e-47 125892.54 2.0403289e-47 158489.32 2.0403289e-47 199526.23 2.0403289e-47 251188.64 2.0403289e-47 316227.77 2.0403289e-47 398107.17 2.0403289e-47 501187.23 2.0403289e-47 630957.34 2.0403289e-47 794328.23 2.0403289e-47 1000000 2.0403289e-47 1258930 2.0403289e-47 1584890 2.0403289e-47 1995260 2.0403289e-47 2511890 2.0403289e-47 3162280 2.0403289e-47 3981070 2.0403289e-47 5011870 2.0403289e-47 6309570 2.0403289e-47 7943280 2.0403289e-47 10000000 2.0403289e-47 12589250 2.0403289e-47 15848930 2.0403289e-47 19952620 2.0403289e-47 25118860 2.0403289e-47 31622780 2.0403289e-47 39810720 2.0403289e-47 50118720 2.0403289e-47 63095730 2.0403289e-47 79432820 2.0403289e-47 100000000 2.0403289e-47 100.00000 5.5681444e-49 125.89254 5.5681444e-49 158.48932 5.5681444e-49 199.52623 5.5681444e-49 251.18864 5.5681444e-49 316.22777 5.5681444e-49 398.10717 5.5681444e-49 501.18723 5.5681444e-49 630.95734 5.5681444e-49 794.32823 5.5681444e-49 1000 5.5681444e-49 1258.93 5.5681444e-49 1584.89 5.5681444e-49 1995.26 5.5681444e-49 2511.89 5.5681444e-49 3162.28 5.5681444e-49 3981.07 5.5681444e-49 5011.87 5.5681444e-49 6309.57 5.5681444e-49 7943.28 5.5681444e-49 10000 5.5681444e-49 12589.25 5.5681444e-49 15848.93 5.5681444e-49 19952.62 5.5681444e-49 25118.86 5.5681444e-49 31622.78 5.5681444e-49 39810.72 5.5681444e-49 50118.72 5.5681444e-49 63095.73 5.5681444e-49 79432.82 5.5681444e-49 100000 5.5681444e-49 125892.54 5.5681444e-49 158489.32 5.5681444e-49 199526.23 5.5681444e-49 251188.64 5.5681444e-49 316227.77 5.5681444e-49 398107.17 5.5681444e-49 501187.23 5.5681444e-49 630957.34 5.5681444e-49 794328.23 5.5681444e-49 1000000 5.5681444e-49 1258930 5.5681444e-49 1584890 5.5681444e-49 1995260 5.5681444e-49 2511890 5.5681444e-49 3162280 5.5681444e-49 3981070 5.5681444e-49 5011870 5.5681444e-49 6309570 5.5681444e-49 7943280 5.5681444e-49 10000000 5.5681444e-49 12589250 5.5681444e-49 15848930 5.5681444e-49 19952620 5.5681444e-49 25118860 5.5681444e-49 31622780 5.5681444e-49 39810720 5.5681444e-49 50118720 5.5681444e-49 63095730 5.5681444e-49 79432820 5.5681444e-49 100000000 5.5681444e-49 100.00000 4.791721e-48 125.89254 4.791721e-48 158.48932 4.791721e-48 199.52623 4.791721e-48 251.18864 4.791721e-48 316.22777 4.791721e-48 398.10717 4.791721e-48 501.18723 4.791721e-48 630.95734 4.791721e-48 794.32823 4.791721e-48 1000 4.791721e-48 1258.93 4.791721e-48 1584.89 4.791721e-48 1995.26 4.791721e-48 2511.89 4.791721e-48 3162.28 4.791721e-48 3981.07 4.791721e-48 5011.87 4.791721e-48 6309.57 4.791721e-48 7943.28 4.791721e-48 10000 4.791721e-48 12589.25 4.791721e-48 15848.93 4.791721e-48 19952.62 4.791721e-48 25118.86 4.791721e-48 31622.78 4.791721e-48 39810.72 4.791721e-48 50118.72 4.791721e-48 63095.73 4.791721e-48 79432.82 4.791721e-48 100000 4.791721e-48 125892.54 4.791721e-48 158489.32 4.791721e-48 199526.23 4.791721e-48 251188.64 4.791721e-48 316227.77 4.791721e-48 398107.17 4.791721e-48 501187.23 4.791721e-48 630957.34 4.791721e-48 794328.23 4.791721e-48 1000000 4.791721e-48 1258930 4.791721e-48 1584890 4.791721e-48 1995260 4.791721e-48 2511890 4.791721e-48 3162280 4.791721e-48 3981070 4.791721e-48 5011870 4.791721e-48 6309570 4.791721e-48 7943280 4.791721e-48 10000000 4.791721e-48 12589250 4.791721e-48 15848930 4.791721e-48 19952620 4.791721e-48 25118860 4.791721e-48 31622780 4.791721e-48 39810720 4.791721e-48 50118720 4.791721e-48 63095730 4.791721e-48 79432820 4.791721e-48 100000000 4.791721e-48 100.00000 1.1874916e-47 125.89254 1.1874916e-47 158.48932 1.1874916e-47 199.52623 1.1874916e-47 251.18864 1.1874916e-47 316.22777 1.1874916e-47 398.10717 1.1874916e-47 501.18723 1.1874916e-47 630.95734 1.1874916e-47 794.32823 1.1874916e-47 1000 1.1874916e-47 1258.93 1.1874916e-47 1584.89 1.1874916e-47 1995.26 1.1874916e-47 2511.89 1.1874916e-47 3162.28 1.1874916e-47 3981.07 1.1874916e-47 5011.87 1.1874916e-47 6309.57 1.1874916e-47 7943.28 1.1874916e-47 10000 1.1874916e-47 12589.25 1.1874916e-47 15848.93 1.1874916e-47 19952.62 1.1874916e-47 25118.86 1.1874916e-47 31622.78 1.1874916e-47 39810.72 1.1874916e-47 50118.72 1.1874916e-47 63095.73 1.1874916e-47 79432.82 1.1874916e-47 100000 1.1874916e-47 125892.54 1.1874916e-47 158489.32 1.1874916e-47 199526.23 1.1874916e-47 251188.64 1.1874916e-47 316227.77 1.1874916e-47 398107.17 1.1874916e-47 501187.23 1.1874916e-47 630957.34 1.1874916e-47 794328.23 1.1874916e-47 1000000 1.1874916e-47 1258930 1.1874916e-47 1584890 1.1874916e-47 1995260 1.1874916e-47 2511890 1.1874916e-47 3162280 1.1874916e-47 3981070 1.1874916e-47 5011870 1.1874916e-47 6309570 1.1874916e-47 7943280 1.1874916e-47 10000000 1.1874916e-47 12589250 1.1874916e-47 15848930 1.1874916e-47 19952620 1.1874916e-47 25118860 1.1874916e-47 31622780 1.1874916e-47 39810720 1.1874916e-47 50118720 1.1874916e-47 63095730 1.1874916e-47 79432820 1.1874916e-47 100000000 1.1874916e-47 100.00000 2.1049744e-47 125.89254 2.1049744e-47 158.48932 2.1049744e-47 199.52623 2.1049744e-47 251.18864 2.1049744e-47 316.22777 2.1049744e-47 398.10717 2.1049744e-47 501.18723 2.1049744e-47 630.95734 2.1049744e-47 794.32823 2.1049744e-47 1000 2.1049744e-47 1258.93 2.1049744e-47 1584.89 2.1049744e-47 1995.26 2.1049744e-47 2511.89 2.1049744e-47 3162.28 2.1049744e-47 3981.07 2.1049744e-47 5011.87 2.1049744e-47 6309.57 2.1049744e-47 7943.28 2.1049744e-47 10000 2.1049744e-47 12589.25 2.1049744e-47 15848.93 2.1049744e-47 19952.62 2.1049744e-47 25118.86 2.1049744e-47 31622.78 2.1049744e-47 39810.72 2.1049744e-47 50118.72 2.1049744e-47 63095.73 2.1049744e-47 79432.82 2.1049744e-47 100000 2.1049744e-47 125892.54 2.1049744e-47 158489.32 2.1049744e-47 199526.23 2.1049744e-47 251188.64 2.1049744e-47 316227.77 2.1049744e-47 398107.17 2.1049744e-47 501187.23 2.1049744e-47 630957.34 2.1049744e-47 794328.23 2.1049744e-47 1000000 2.1049744e-47 1258930 2.1049744e-47 1584890 2.1049744e-47 1995260 2.1049744e-47 2511890 2.1049744e-47 3162280 2.1049744e-47 3981070 2.1049744e-47 5011870 2.1049744e-47 6309570 2.1049744e-47 7943280 2.1049744e-47 10000000 2.1049744e-47 12589250 2.1049744e-47 15848930 2.1049744e-47 19952620 2.1049744e-47 25118860 2.1049744e-47 31622780 2.1049744e-47 39810720 2.1049744e-47 50118720 2.1049744e-47 63095730 2.1049744e-47 79432820 2.1049744e-47 100000000 2.1049744e-47 100.00000 8.6694721e-49 125.89254 8.6694721e-49 158.48932 8.6694721e-49 199.52623 8.6694721e-49 251.18864 8.6694721e-49 316.22777 8.6694721e-49 398.10717 8.6694721e-49 501.18723 8.6694721e-49 630.95734 8.6694721e-49 794.32823 8.6694721e-49 1000 8.6694721e-49 1258.93 8.6694721e-49 1584.89 8.6694721e-49 1995.26 8.6694721e-49 2511.89 8.6694721e-49 3162.28 8.6694721e-49 3981.07 8.6694721e-49 5011.87 8.6694721e-49 6309.57 8.6694721e-49 7943.28 8.6694721e-49 10000 8.6694721e-49 12589.25 8.6694721e-49 15848.93 8.6694721e-49 19952.62 8.6694721e-49 25118.86 8.6694721e-49 31622.78 8.6694721e-49 39810.72 8.6694721e-49 50118.72 8.6694721e-49 63095.73 8.6694721e-49 79432.82 8.6694721e-49 100000 8.6694721e-49 125892.54 8.6694721e-49 158489.32 8.6694721e-49 199526.23 8.6694721e-49 251188.64 8.6694721e-49 316227.77 8.6694721e-49 398107.17 8.6694721e-49 501187.23 8.6694721e-49 630957.34 8.6694721e-49 794328.23 8.6694721e-49 1000000 8.6694721e-49 1258930 8.6694721e-49 1584890 8.6694721e-49 1995260 8.6694721e-49 2511890 8.6694721e-49 3162280 8.6694721e-49 3981070 8.6694721e-49 5011870 8.6694721e-49 6309570 8.6694721e-49 7943280 8.6694721e-49 10000000 8.6694721e-49 12589250 8.6694721e-49 15848930 8.6694721e-49 19952620 8.6694721e-49 25118860 8.6694721e-49 31622780 8.6694721e-49 39810720 8.6694721e-49 50118720 8.6694721e-49 63095730 8.6694721e-49 79432820 8.6694721e-49 100000000 8.6694721e-49 100.00000 4.485924e-48 125.89254 4.485924e-48 158.48932 4.485924e-48 199.52623 4.485924e-48 251.18864 4.485924e-48 316.22777 4.485924e-48 398.10717 4.485924e-48 501.18723 4.485924e-48 630.95734 4.485924e-48 794.32823 4.485924e-48 1000 4.485924e-48 1258.93 4.485924e-48 1584.89 4.485924e-48 1995.26 4.485924e-48 2511.89 4.485924e-48 3162.28 4.485924e-48 3981.07 4.485924e-48 5011.87 4.485924e-48 6309.57 4.485924e-48 7943.28 4.485924e-48 10000 4.485924e-48 12589.25 4.485924e-48 15848.93 4.485924e-48 19952.62 4.485924e-48 25118.86 4.485924e-48 31622.78 4.485924e-48 39810.72 4.485924e-48 50118.72 4.485924e-48 63095.73 4.485924e-48 79432.82 4.485924e-48 100000 4.485924e-48 125892.54 4.485924e-48 158489.32 4.485924e-48 199526.23 4.485924e-48 251188.64 4.485924e-48 316227.77 4.485924e-48 398107.17 4.485924e-48 501187.23 4.485924e-48 630957.34 4.485924e-48 794328.23 4.485924e-48 1000000 4.485924e-48 1258930 4.485924e-48 1584890 4.485924e-48 1995260 4.485924e-48 2511890 4.485924e-48 3162280 4.485924e-48 3981070 4.485924e-48 5011870 4.485924e-48 6309570 4.485924e-48 7943280 4.485924e-48 10000000 4.485924e-48 12589250 4.485924e-48 15848930 4.485924e-48 19952620 4.485924e-48 25118860 4.485924e-48 31622780 4.485924e-48 39810720 4.485924e-48 50118720 4.485924e-48 63095730 4.485924e-48 79432820 4.485924e-48 100000000 4.485924e-48 100.00000 1.0725625e-47 125.89254 1.0725625e-47 158.48932 1.0725625e-47 199.52623 1.0725625e-47 251.18864 1.0725625e-47 316.22777 1.0725625e-47 398.10717 1.0725625e-47 501.18723 1.0725625e-47 630.95734 1.0725625e-47 794.32823 1.0725625e-47 1000 1.0725625e-47 1258.93 1.0725625e-47 1584.89 1.0725625e-47 1995.26 1.0725625e-47 2511.89 1.0725625e-47 3162.28 1.0725625e-47 3981.07 1.0725625e-47 5011.87 1.0725625e-47 6309.57 1.0725625e-47 7943.28 1.0725625e-47 10000 1.0725625e-47 12589.25 1.0725625e-47 15848.93 1.0725625e-47 19952.62 1.0725625e-47 25118.86 1.0725625e-47 31622.78 1.0725625e-47 39810.72 1.0725625e-47 50118.72 1.0725625e-47 63095.73 1.0725625e-47 79432.82 1.0725625e-47 100000 1.0725625e-47 125892.54 1.0725625e-47 158489.32 1.0725625e-47 199526.23 1.0725625e-47 251188.64 1.0725625e-47 316227.77 1.0725625e-47 398107.17 1.0725625e-47 501187.23 1.0725625e-47 630957.34 1.0725625e-47 794328.23 1.0725625e-47 1000000 1.0725625e-47 1258930 1.0725625e-47 1584890 1.0725625e-47 1995260 1.0725625e-47 2511890 1.0725625e-47 3162280 1.0725625e-47 3981070 1.0725625e-47 5011870 1.0725625e-47 6309570 1.0725625e-47 7943280 1.0725625e-47 10000000 1.0725625e-47 12589250 1.0725625e-47 15848930 1.0725625e-47 19952620 1.0725625e-47 25118860 1.0725625e-47 31622780 1.0725625e-47 39810720 1.0725625e-47 50118720 1.0725625e-47 63095730 1.0725625e-47 79432820 1.0725625e-47 100000000 1.0725625e-47 100.00000 1.9722481e-47 125.89254 1.9722481e-47 158.48932 1.9722481e-47 199.52623 1.9722481e-47 251.18864 1.9722481e-47 316.22777 1.9722481e-47 398.10717 1.9722481e-47 501.18723 1.9722481e-47 630.95734 1.9722481e-47 794.32823 1.9722481e-47 1000 1.9722481e-47 1258.93 1.9722481e-47 1584.89 1.9722481e-47 1995.26 1.9722481e-47 2511.89 1.9722481e-47 3162.28 1.9722481e-47 3981.07 1.9722481e-47 5011.87 1.9722481e-47 6309.57 1.9722481e-47 7943.28 1.9722481e-47 10000 1.9722481e-47 12589.25 1.9722481e-47 15848.93 1.9722481e-47 19952.62 1.9722481e-47 25118.86 1.9722481e-47 31622.78 1.9722481e-47 39810.72 1.9722481e-47 50118.72 1.9722481e-47 63095.73 1.9722481e-47 79432.82 1.9722481e-47 100000 1.9722481e-47 125892.54 1.9722481e-47 158489.32 1.9722481e-47 199526.23 1.9722481e-47 251188.64 1.9722481e-47 316227.77 1.9722481e-47 398107.17 1.9722481e-47 501187.23 1.9722481e-47 630957.34 1.9722481e-47 794328.23 1.9722481e-47 1000000 1.9722481e-47 1258930 1.9722481e-47 1584890 1.9722481e-47 1995260 1.9722481e-47 2511890 1.9722481e-47 3162280 1.9722481e-47 3981070 1.9722481e-47 5011870 1.9722481e-47 6309570 1.9722481e-47 7943280 1.9722481e-47 10000000 1.9722481e-47 12589250 1.9722481e-47 15848930 1.9722481e-47 19952620 1.9722481e-47 25118860 1.9722481e-47 31622780 1.9722481e-47 39810720 1.9722481e-47 50118720 1.9722481e-47 63095730 1.9722481e-47 79432820 1.9722481e-47 100000000 1.9722481e-47 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_core_lt.standard0000644000175000017500000001707614163340332025362 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 4.04913e-05 4.78890009303373e-15 2.44590004751638e-15 2.78990405419933e-16 -1 3.79891e-05 4.86020009441887e-15 2.5045000486548e-15 2.85676505549824e-16 -0.8 3.56175e-05 4.93400009585258e-15 2.56500004983013e-15 2.92933605690807e-16 -0.6 3.37887e-05 5.01060009734068e-15 2.62780005105014e-15 3.00497705837754e-16 -0.4 3.32886e-05 5.09320009894535e-15 2.69530005236146e-15 3.10044406023218e-16 -0.2 2.72747e-05 5.61430010906874e-15 2.63890005126578e-15 1.03860002017683e-15 -5.55111512312578e-17 0. 6.55680012737864e-15 2.48660004830706e-15 2.48660004830706e-15 0.2 -2.25386e-05 6.68470012986334e-15 2.46620004791075e-15 2.89840005630708e-15 -1.2 6.33958e-05 4.83220009387492e-15 3.00560005838965e-15 3.64533907081782e-16 -1 5.95602e-05 4.90020009519595e-15 3.06020005945036e-15 3.74281207271143e-16 -0.8 5.68064e-05 4.97120009657526e-15 3.11660006054604e-15 3.85236207483965e-16 -0.6 5.61122e-05 5.0474000980556e-15 3.17550006169029e-15 3.99248407756179e-16 -0.4 5.249e-05 5.37520010442375e-15 3.19230006201666e-15 7.65763714876454e-16 -0.2 2.58701e-05 6.39010012414016e-15 2.78130005403218e-15 2.37550004614872e-15 -5.55111512312578e-17 0. 6.81300013235582e-15 2.81090005460722e-15 2.81090005460722e-15 0.2 -1.69226e-05 6.78280013176913e-15 3.04840005922112e-15 2.73760005318322e-15 -1.2 7.5221e-05 4.82530009374087e-15 3.16800006154458e-15 4.46263408669538e-16 -1 7.24102e-05 4.89130009502305e-15 3.21810006251787e-15 4.59784408932209e-16 -0.8 7.2025e-05 4.96260009640819e-15 3.27000006352613e-15 4.77290809272305e-16 -0.6 6.92639e-05 5.22200010144754e-15 3.30170006414197e-15 7.33673414253038e-16 -0.4 4.52576e-05 6.10750011865011e-15 3.04350005912593e-15 2.00300003891218e-15 -0.2 1.84924e-05 6.65900012936407e-15 2.64380005136098e-15 3.01120005849844e-15 -5.55111512312578e-17 0. 6.85500013317175e-15 2.91900005670727e-15 2.91900005670727e-15 0.2 -1.13398e-05 6.78520013181575e-15 3.36420006535615e-15 2.56660004986121e-15 -1.2 8.13128e-05 4.78490009295602e-15 3.18870006194672e-15 5.26203110222522e-16 -1 8.15243e-05 4.85310009428094e-15 3.23490006284425e-15 5.47209810630618e-16 -0.8 7.88297e-05 5.09620009900363e-15 3.26700006346785e-15 7.7819261511791e-16 -0.6 5.75709e-05 5.83460011334849e-15 3.10640006034788e-15 1.7564000341215e-15 -0.4 3.17321e-05 6.41310012458698e-15 2.76980005380877e-15 2.72970005302975e-15 -0.2 1.23404e-05 6.70070013017418e-15 2.4785000481497e-15 3.32700006463347e-15 -5.55111512312578e-17 0. 6.80580013221595e-15 2.95180005734448e-15 2.95180005734448e-15 0.2 -7.2656e-06 6.72800013070453e-15 3.55290006902202e-15 2.40230004666937e-15 -1.2 6.0318e-05 4.70340009137273e-15 2.48180004821381e-15 2.70595505256846e-16 -1 5.66746e-05 4.77500009276369e-15 2.54080004936e-15 2.77000905381283e-16 -0.8 5.30413e-05 4.84900009420129e-15 2.60160005054116e-15 2.83960905516495e-16 -0.6 4.9569e-05 4.92580009569328e-15 2.664700051767e-15 2.91161105656373e-16 -0.4 4.71577e-05 5.00550009724161e-15 2.73260005308609e-15 2.96014505750659e-16 -0.2 4.43102e-05 5.25560010210029e-15 2.78380005408075e-15 5.46008810607287e-16 -5.55111512312578e-17 0. 6.52830012682497e-15 2.4244000470987e-15 2.4244000470987e-15 0.2 -4.30762e-05 6.6874001299158e-15 2.28950004447801e-15 2.98100005791174e-15 -1.2 0.0001047921 4.87350009467725e-15 3.08050005984472e-15 3.56276006921357e-16 -1 9.79824e-05 4.94140009599634e-15 3.13500006090349e-15 3.6572080710484e-16 -0.8 9.18552e-05 5.01220009737177e-15 3.19110006199335e-15 3.76290707310181e-16 -0.6 8.80478e-05 5.08610009880742e-15 3.24990006313565e-15 3.87268507523446e-16 -0.4 8.64139e-05 5.2444001018827e-15 3.30800006426436e-15 5.01376609740219e-16 -0.2 4.71502e-05 6.40380012440631e-15 2.9261000568452e-15 2.25250004375921e-15 -5.55111512312578e-17 0. 6.90340013411202e-15 2.84930005535321e-15 2.84930005535321e-15 0.2 -3.17321e-05 6.86670013339905e-15 3.01310005853535e-15 2.7865000541332e-15 -1.2 0.0001274455 4.87840009477244e-15 3.22780006270631e-15 4.37778608504704e-16 -1 0.0001202813 4.94410009604879e-15 3.27770006367572e-15 4.50910408759815e-16 -0.8 0.0001166153 5.01280009738342e-15 3.32940006468009e-15 4.6529070903918e-16 -0.6 0.0001152172 5.16510010034215e-15 3.38140006569029e-15 5.75234511175053e-16 -0.4 8.11621e-05 6.09010011831208e-15 3.17700006171943e-15 1.8255000354639e-15 -0.2 3.38587e-05 6.74560013104645e-15 2.72060005285297e-15 3.01090005849261e-15 -5.55111512312578e-17 0. 6.94650013494932e-15 2.96050005751349e-15 2.96050005751349e-15 0.2 -2.11028e-05 6.8722001335059e-15 3.35500006517742e-15 2.58660005024975e-15 -1.2 0.0001361991 4.83290009388852e-15 3.23320006281122e-15 5.17344510050427e-16 -1 0.0001336523 4.89780009514932e-15 3.27940006370875e-15 5.3448531038342e-16 -0.8 0.0001318463 5.06870009846939e-15 3.32550006460433e-15 6.68813412993006e-16 -0.6 0.0001019357 5.80670011280648e-15 3.20970006235469e-15 1.59320003095102e-15 -0.4 5.74583e-05 6.47260012574289e-15 2.84590005528716e-15 2.68640005218856e-15 -0.2 2.27509e-05 6.78510013181381e-15 2.52210004899671e-15 3.34570006499675e-15 -5.55111512312578e-17 0. 6.88440013374291e-15 2.97920005787677e-15 2.97920005787677e-15 0.2 -1.35449e-05 6.80470013219458e-15 3.54740006891517e-15 2.40680004675679e-15 -1.2 2.4168e-05 4.87340009467531e-15 2.42410004709287e-15 2.88159505598061e-16 -1 2.27916e-05 4.9460000960857e-15 2.48170004821187e-15 2.9523160573545e-16 -0.8 2.18341e-05 5.02100009754272e-15 2.54110004936583e-15 3.02955305885498e-16 -0.6 2.1568e-05 5.09980009907357e-15 2.60290005056641e-15 3.1229450606693e-16 -0.4 2.13035e-05 5.22660010153691e-15 2.66180005171066e-15 3.99815507767196e-16 -0.2 1.39991e-05 5.91220011485602e-15 2.52650004908219e-15 1.55830003027302e-15 -5.55111512312578e-17 0. 6.55750012739224e-15 2.53000004915019e-15 2.53000004915019e-15 0.2 -1.01909e-05 6.64750012914066e-15 2.59510005041488e-15 2.78070005402052e-15 -1.2 3.35077e-05 4.78680009299293e-15 2.89580005625657e-15 3.74309307271689e-16 -1 3.22706e-05 4.85500009431785e-15 2.95060005732116e-15 3.84502307469708e-16 -0.8 3.19832e-05 4.92680009571271e-15 3.00710005841879e-15 3.96688507706448e-16 -0.6 3.20562e-05 5.0254000976282e-15 3.0631000595067e-15 4.42930508604789e-16 -0.4 2.64476e-05 5.56400010809156e-15 2.98820005805162e-15 1.17490002282473e-15 -0.2 1.20402e-05 6.332800123027e-15 2.63330005115699e-15 2.471000048004e-15 -5.55111512312578e-17 0. 6.66940012956611e-15 2.81170005462276e-15 2.81170005462276e-15 0.2 -7.7157e-06 6.6579001293427e-15 3.05940005943482e-15 2.66660005180391e-15 -1.2 3.99683e-05 4.75180009231299e-15 3.07980005983113e-15 4.56430408867051e-16 -1 3.98277e-05 4.81880009361459e-15 3.13030006081219e-15 4.71100109152039e-16 -0.8 4.01448e-05 4.90710009533e-15 3.18080006179325e-15 5.10713909921614e-16 -0.6 3.55746e-05 5.32920010353011e-15 3.15900006136974e-15 1.02020001981938e-15 -0.4 2.16327e-05 6.07590011803622e-15 2.88310005600984e-15 2.15570004187868e-15 -0.2 8.5157e-06 6.53250012690656e-15 2.54990004953678e-15 2.99060005809824e-15 -5.55111512312578e-17 0. 6.71100013037427e-15 2.92230005677138e-15 2.92230005677138e-15 0.2 -5.1514e-06 6.65760012933687e-15 3.34410006496567e-15 2.52270004900837e-15 -1.2 4.43591e-05 4.71520009160196e-15 3.12290006066843e-15 5.37648410444869e-16 -1 4.49144e-05 4.79920009323383e-15 3.16810006154653e-15 5.78120211231113e-16 -0.8 4.08941e-05 5.15620010016925e-15 3.16590006150379e-15 9.78415219007625e-16 -0.6 2.81051e-05 5.82660011319308e-15 2.97520005779907e-15 1.9220000373386e-15 -0.4 1.50628e-05 6.31190012262098e-15 2.67800005202538e-15 2.75500005352125e-15 -0.2 5.6364e-06 6.57790012778855e-15 2.42400004709093e-15 3.28990006391273e-15 -5.55111512312578e-17 0. 6.68480012986529e-15 2.9563000574319e-15 2.9563000574319e-15 0.2 -3.2516e-06 6.61430012849569e-15 3.52730006852469e-15 2.3752000461429e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_core_st.standard0000644000175000017500000001643314163340332025336 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -4.57961e-05 0. 0. 4.57961e-05 -1.10000 -4.31025e-05 0. 0. 4.31025e-05 -1.00000 -4.05131e-05 0. 0. 4.05131e-05 -0.9 -3.80264e-05 0. 0. 3.80264e-05 -0.8 -3.56418e-05 0. 0. 3.56418e-05 -0.7 -3.33604e-05 0. 0. 3.33604e-05 -0.6 -3.11891e-05 0. 0. 3.11891e-05 -0.5 -2.91496e-05 0. 0. 2.91496e-05 -0.4 -2.73065e-05 0. 0. 2.73065e-05 -0.3 -2.58047e-05 0. 0. 2.58047e-05 -0.2 -2.4607e-05 0. 0. 2.4607e-05 -0.1 -2.06149e-05 0. 0. 2.06149e-05 2.220446e-16 7.172e-20 0. 0. -7.172e-20 -1.20000 -7.49407e-05 0. 0. 7.49407e-05 -1.10000 -7.08551e-05 0. 0. 7.08551e-05 -1.00000 -6.69092e-05 0. 0. 6.69092e-05 -0.9 -6.3103e-05 0. 0. 6.3103e-05 -0.8 -5.94391e-05 0. 0. 5.94391e-05 -0.7 -5.59262e-05 0. 0. 5.59262e-05 -0.6 -5.25881e-05 0. 0. 5.25881e-05 -0.5 -4.9488e-05 0. 0. 4.9488e-05 -0.4 -4.67769e-05 0. 0. 4.67769e-05 -0.3 -4.46659e-05 0. 0. 4.46659e-05 -0.2 -4.25081e-05 0. 0. 4.25081e-05 -0.1 -3.29486e-05 0. 0. 3.29486e-05 2.220446e-16 9.607e-20 0. 0. -9.607e-20 -1.20000 -0.0001942901 0. 0. 0.0001942901 -1.10000 -0.0001852559 0. 0. 0.0001852559 -1.00000 -0.0001764769 0. 0. 0.0001764769 -0.9 -0.0001679857 0. 0. 0.0001679857 -0.8 -0.000159847 0. 0. 0.000159847 -0.7 -0.0001521882 0. 0. 0.0001521882 -0.6 -0.000145248 0. 0. 0.000145248 -0.5 -0.000139386 0. 0. 0.000139386 -0.4 -0.0001347165 0. 0. 0.0001347165 -0.3 -0.0001285231 0. 0. 0.0001285231 -0.2 -0.0001099949 0. 0. 0.0001099949 -0.1 -6.84516e-05 0. 0. 6.84516e-05 2.220446e-16 1.917e-19 0. 0. -1.917e-19 -1.20000 -0.0003627963 0. 0. 0.0003627963 -1.10000 -0.0003476905 0. 0. 0.0003476905 -1.00000 -0.0003332165 0. 0. 0.0003332165 -0.9 -0.0003195974 0. 0. 0.0003195974 -0.8 -0.0003071738 0. 0. 0.0003071738 -0.7 -0.0002963798 0. 0. 0.0002963798 -0.6 -0.0002874288 0. 0. 0.0002874288 -0.5 -0.0002786081 0. 0. 0.0002786081 -0.4 -0.0002625859 0. 0. 0.0002625859 -0.3 -0.0002296713 0. 0. 0.0002296713 -0.2 -0.0001750125 0. 0. 0.0001750125 -0.1 -9.81942e-05 0. 0. 9.81942e-05 2.220446e-16 2.415e-19 0. 0. -2.415e-19 -1.20000 -0.000555242 0. 0. 0.000555242 -1.10000 -0.0005351226 0. 0. 0.0005351226 -1.00000 -0.0005167388 0. 0. 0.0005167388 -0.9 -0.0005005282 0. 0. 0.0005005282 -0.8 -0.0004865913 0. 0. 0.0004865913 -0.7 -0.0004732467 0. 0. 0.0004732467 -0.6 -0.0004549535 0. 0. 0.0004549535 -0.5 -0.0004242712 0. 0. 0.0004242712 -0.4 -0.0003759791 0. 0. 0.0003759791 -0.3 -0.0003083802 0. 0. 0.0003083802 -0.2 -0.00022221 0. 0. 0.00022221 -0.1 -0.000119003 0. 0. 0.000119003 2.220446e-16 1.376e-19 0. 0. -1.376e-19 -1.20000 -3.50394e-05 0. 0. 3.50394e-05 -1.10000 -3.23944e-05 0. 0. 3.23944e-05 -1.00000 -2.9891e-05 0. 0. 2.9891e-05 -0.9 -2.75248e-05 0. 0. 2.75248e-05 -0.8 -2.52916e-05 0. 0. 2.52916e-05 -0.7 -2.31872e-05 0. 0. 2.31872e-05 -0.6 -2.12079e-05 0. 0. 2.12079e-05 -0.5 -1.93514e-05 0. 0. 1.93514e-05 -0.4 -1.76214e-05 0. 0. 1.76214e-05 -0.3 -1.60475e-05 0. 0. 1.60475e-05 -0.2 -1.47519e-05 0. 0. 1.47519e-05 -0.1 -1.33721e-05 0. 0. 1.33721e-05 2.220446e-16 4.575e-20 0. 0. -4.575e-20 -1.20000 -7.48321e-05 0. 0. 7.48321e-05 -1.10000 -7.00393e-05 0. 0. 7.00393e-05 -1.00000 -6.54499e-05 0. 0. 6.54499e-05 -0.9 -6.10598e-05 0. 0. 6.10598e-05 -0.8 -5.68651e-05 0. 0. 5.68651e-05 -0.7 -5.2863e-05 0. 0. 5.2863e-05 -0.6 -4.90529e-05 0. 0. 4.90529e-05 -0.5 -4.54422e-05 0. 0. 4.54422e-05 -0.4 -4.20665e-05 0. 0. 4.20665e-05 -0.3 -3.90629e-05 0. 0. 3.90629e-05 -0.2 -3.66915e-05 0. 0. 3.66915e-05 -0.1 -3.15682e-05 0. 0. 3.15682e-05 2.220446e-16 7.906e-20 0. 0. -7.906e-20 -1.20000 -0.0002618856 0. 0. 0.0002618856 -1.10000 -0.0002490339 0. 0. 0.0002490339 -1.00000 -0.0002365402 0. 0. 0.0002365402 -0.9 -0.0002244152 0. 0. 0.0002244152 -0.8 -0.0002126837 0. 0. 0.0002126837 -0.7 -0.0002014048 0. 0. 0.0002014048 -0.6 -0.0001907172 0. 0. 0.0001907172 -0.5 -0.0001809407 0. 0. 0.0001809407 -0.4 -0.0001726603 0. 0. 0.0001726603 -0.3 -0.0001654236 0. 0. 0.0001654236 -0.2 -0.0001472647 0. 0. 0.0001472647 -0.1 -9.50317e-05 0. 0. 9.50317e-05 2.220446e-16 1.472e-19 0. 0. -1.472e-19 -1.20000 -0.0005428704 0. 0. 0.0005428704 -1.10000 -0.000519385 0. 0. 0.000519385 -1.00000 -0.0004965931 0. 0. 0.0004965931 -0.9 -0.0004746726 0. 0. 0.0004746726 -0.8 -0.0004539437 0. 0. 0.0004539437 -0.7 -0.0004349515 0. 0. 0.0004349515 -0.6 -0.0004184286 0. 0. 0.0004184286 -0.5 -0.0004040587 0. 0. 0.0004040587 -0.4 -0.0003842058 0. 0. 0.0003842058 -0.3 -0.0003415816 0. 0. 0.0003415816 -0.2 -0.0002639085 0. 0. 0.0002639085 -0.1 -0.0001493245 0. 0. 0.0001493245 2.220446e-16 1.341e-19 0. 0. -1.341e-19 -1.20000 -0.0008690618 0. 0. 0.0008690618 -1.10000 -0.0008351874 0. 0. 0.0008351874 -1.00000 -0.0008033093 0. 0. 0.0008033093 -0.9 -0.0007741192 0. 0. 0.0007741192 -0.8 -0.0007482636 0. 0. 0.0007482636 -0.7 -0.0007248099 0. 0. 0.0007248099 -0.6 -0.000697412 0. 0. 0.000697412 -0.5 -0.0006542013 0. 0. 0.0006542013 -0.4 -0.0005841873 0. 0. 0.0005841873 -0.3 -0.0004823164 0. 0. 0.0004823164 -0.2 -0.0003491273 0. 0. 0.0003491273 -0.1 -0.0001874676 0. 0. 0.0001874676 2.220446e-16 3.174e-19 0. 0. -3.174e-19 -1.20000 -5.08238e-05 0. 0. 5.08238e-05 -1.10000 -4.83133e-05 0. 0. 4.83133e-05 -1.00000 -4.58825e-05 0. 0. 4.58825e-05 -0.9 -4.35383e-05 0. 0. 4.35383e-05 -0.8 -4.12949e-05 0. 0. 4.12949e-05 -0.7 -3.91818e-05 0. 0. 3.91818e-05 -0.6 -3.72574e-05 0. 0. 3.72574e-05 -0.5 -3.56185e-05 0. 0. 3.56185e-05 -0.4 -3.43516e-05 0. 0. 3.43516e-05 -0.3 -3.32757e-05 0. 0. 3.32757e-05 -0.2 -3.08451e-05 0. 0. 3.08451e-05 -0.1 -2.1838e-05 0. 0. 2.1838e-05 2.220446e-16 7.982e-20 0. 0. -7.982e-20 -1.20000 -7.01642e-05 0. 0. 7.01642e-05 -1.10000 -6.6839e-05 0. 0. 6.6839e-05 -1.00000 -6.36181e-05 0. 0. 6.36181e-05 -0.9 -6.05165e-05 0. 0. 6.05165e-05 -0.8 -5.75636e-05 0. 0. 5.75636e-05 -0.7 -5.48149e-05 0. 0. 5.48149e-05 -0.6 -5.23676e-05 0. 0. 5.23676e-05 -0.5 -5.03515e-05 0. 0. 5.03515e-05 -0.4 -4.88074e-05 0. 0. 4.88074e-05 -0.3 -4.72022e-05 0. 0. 4.72022e-05 -0.2 -4.25719e-05 0. 0. 4.25719e-05 -0.1 -2.84907e-05 0. 0. 2.84907e-05 2.220446e-16 1.066e-19 0. 0. -1.066e-19 -1.20000 -0.0001364198 0. 0. 0.0001364198 -1.10000 -0.0001305674 0. 0. 0.0001305674 -1.00000 -0.0001249621 0. 0. 0.0001249621 -0.9 -0.000119684 0. 0. 0.000119684 -0.8 -0.0001148583 0. 0. 0.0001148583 -0.7 -0.0001106554 0. 0. 0.0001106554 -0.6 -0.0001072348 0. 0. 0.0001072348 -0.5 -0.0001045401 0. 0. 0.0001045401 -0.4 -0.0001015666 0. 0. 0.0001015666 -0.3 -9.44861e-05 0. 0. 9.44861e-05 -0.2 -7.73113e-05 0. 0. 7.73113e-05 -0.1 -4.58355e-05 0. 0. 4.58355e-05 2.220446e-16 1.121e-19 0. 0. -1.121e-19 -1.20000 -0.0002248051 0. 0. 0.0002248051 -1.10000 -0.0002163391 0. 0. 0.0002163391 -1.00000 -0.0002085447 0. 0. 0.0002085447 -0.9 -0.0002016204 0. 0. 0.0002016204 -0.8 -0.0001957553 0. 0. 0.0001957553 -0.7 -0.0001909824 0. 0. 0.0001909824 -0.6 -0.0001866984 0. 0. 0.0001866984 -0.5 -0.0001803647 0. 0. 0.0001803647 -0.4 -0.0001673148 0. 0. 0.0001673148 -0.3 -0.0001437309 0. 0. 0.0001437309 -0.2 -0.0001080603 0. 0. 0.0001080603 -0.1 -5.99362e-05 0. 0. 5.99362e-05 2.220446e-16 2.103e-19 0. 0. -2.103e-19 -1.20000 -0.0003260631 0. 0. 0.0003260631 -1.10000 -0.0003162338 0. 0. 0.0003162338 -1.00000 -0.0003077249 0. 0. 0.0003077249 -0.9 -0.0003005698 0. 0. 0.0003005698 -0.8 -0.0002942479 0. 0. 0.0002942479 -0.7 -0.0002867432 0. 0. 0.0002867432 -0.6 -0.0002743707 0. 0. 0.0002743707 -0.5 -0.0002536817 0. 0. 0.0002536817 -0.4 -0.0002228545 0. 0. 0.0002228545 -0.3 -0.0001815572 0. 0. 0.0001815572 -0.2 -0.0001302583 0. 0. 0.0001302583 -0.1 -6.95519e-05 0. 0. 6.95519e-05 2.220446e-16 1.732e-19 0. 0. -1.732e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_core_st.standard0000644000175000017500000001716714163340332025372 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0003462187 7.63777214837863e-16 3.72466307235885e-16 1.21397802358389e-16 -1 0.0003148492 7.74280415041908e-16 3.74086307267356e-16 1.24208502412993e-16 -0.8 0.0002850684 7.85980015269196e-16 3.75666607298057e-16 1.27932202485333e-16 -0.6 0.0002577268 7.99363915529204e-16 3.77231007328448e-16 1.33011702584012e-16 -0.4 0.0002368264 8.14709315827318e-16 3.78916607361194e-16 1.39600602712014e-16 -0.2 0.0002147807 8.40576216329833e-16 3.78792607358786e-16 1.6460380319775e-16 -5.55111512312578e-17 0. 9.43608418331435e-16 3.43787406678741e-16 3.43787406678741e-16 0.2 -0.0002383587 9.71920418881451e-16 3.24095806296193e-16 4.51046808762464e-16 -1.2 0.0005941669 7.68237014924503e-16 4.42065808587991e-16 1.34094702605051e-16 -1 0.000548774 7.79459315142518e-16 4.4658420867577e-16 1.38423402689145e-16 -0.8 0.000507731 7.92448215394853e-16 4.51244508766305e-16 1.4429180280315e-16 -0.6 0.0004776993 8.07118215679846e-16 4.56116208860947e-16 1.51565102944448e-16 -0.4 0.0004613288 8.2428061601326e-16 4.61170608959139e-16 1.62571503158269e-16 -0.2 0.0002874034 9.15335717782182e-16 4.34084508432939e-16 3.02606805878728e-16 -5.55111512312578e-17 0. 9.76645318973241e-16 4.01424107798447e-16 4.01424107798447e-16 0.2 -0.0001987292 9.78609819011405e-16 3.99573707762499e-16 4.34933808449438e-16 -1.2 0.0007358436 7.7074521497323e-16 4.63379909002059e-16 1.48078402876712e-16 -1 0.0006904617 7.83751315225899e-16 4.68513609101791e-16 1.54670003004767e-16 -0.8 0.0006610387 7.97931615501379e-16 4.73846009205383e-16 1.62227003151576e-16 -0.6 0.0006486021 8.12977115793667e-16 4.79491209315052e-16 1.71175703325422e-16 -0.4 0.0005119144 8.81927217133157e-16 4.70463209139666e-16 2.60975205069953e-16 -0.2 0.0002253826 9.57758018606319e-16 4.24957608255631e-16 3.93881307651913e-16 -5.55111512312578e-17 0. 9.85558719146401e-16 4.2139500818642e-16 4.2139500818642e-16 0.2 -0.0001374965 9.79634219031306e-16 4.41445908575948e-16 4.17265208106191e-16 -1.2 0.0007948934 7.7262301500971e-16 4.67425509080653e-16 1.64329003192412e-16 -1 0.0007724157 7.86029815270163e-16 4.72583909180865e-16 1.71802203337593e-16 -0.8 0.0007638646 8.00551815552281e-16 4.78065709287359e-16 1.80797003512335e-16 -0.6 0.0006471949 8.55495616619672e-16 4.75511209237733e-16 2.44983804759288e-16 -0.4 0.0003871777 9.28092218030002e-16 4.44514208635556e-16 3.58113006957044e-16 -0.2 0.0001543591 9.67641518798325e-16 4.08035507926886e-16 4.37565408500562e-16 -5.55111512312578e-17 0. 9.82246519082055e-16 4.28356808321667e-16 4.28356808321667e-16 0.2 -8.76259e-05 9.74272618927147e-16 4.66186809056588e-16 4.00152907773751e-16 -1.2 0.0005010999 7.50993914589522e-16 3.77743407338403e-16 1.21331902357109e-16 -1 0.0004519119 7.60048314765422e-16 3.78662307356254e-16 1.24183402412505e-16 -0.8 0.0004052162 7.70180114962252e-16 3.79451807371592e-16 1.27949002485659e-16 -0.6 0.0003612129 7.81862315189201e-16 3.80122107384614e-16 1.33066902585084e-16 -0.4 0.0003213634 7.95302415450301e-16 3.80783307397459e-16 1.39607702712152e-16 -0.2 0.0002935606 8.09246115721185e-16 3.82273707426413e-16 1.46285102841874e-16 -5.55111512312578e-17 0. 9.21293517897924e-16 3.31751806444926e-16 3.31751806444926e-16 0.2 -0.0004549423 9.6413791873026e-16 2.93366605699219e-16 4.56864508875485e-16 -1.2 0.000970141 7.71044114979036e-16 4.51134508764168e-16 1.33240902588465e-16 -1 0.000893602 7.82037515192605e-16 4.55677408852423e-16 1.37543602672053e-16 -0.8 0.000820772 7.94772915440015e-16 4.6035630894332e-16 1.43375802785355e-16 -0.6 0.0007566971 8.09124415718821e-16 4.65235709038111e-16 1.50550602924739e-16 -0.4 0.0007177399 8.22407515976871e-16 4.70655109143394e-16 1.56358403037567e-16 -0.2 0.0005107186 9.06835417617048e-16 4.53544508810987e-16 2.77205905385266e-16 -5.55111512312578e-17 0. 9.82824219093278e-16 4.07093007908576e-16 4.07093007908576e-16 0.2 -0.0003722718 9.84470119125253e-16 3.9192870761398e-16 4.39777008543527e-16 -1.2 0.001243 7.7529971506171e-16 4.70163409133842e-16 1.47087802857468e-16 -1 0.0011562 7.88249015313275e-16 4.75352709234654e-16 1.53634102984642e-16 -0.8 0.0010861 8.02323115586692e-16 4.8073780933927e-16 1.61086303129416e-16 -0.6 0.0010496 8.14894915830924e-16 4.86588209452925e-16 1.66861303241606e-16 -0.4 0.000889232 8.74718716993118e-16 4.84597009414242e-16 2.37645204616722e-16 -0.2 0.0004058911 9.648760187446e-16 4.35170908454044e-16 3.91499607605644e-16 -5.55111512312578e-17 0. 9.94143219313172e-16 4.27172308298656e-16 4.27172308298656e-16 0.2 -0.0002535758 9.87627619186594e-16 4.38206608513018e-16 4.18158908123553e-16 -1.2 0.0013463 7.76822115091285e-16 4.72232009174028e-16 1.63295103172326e-16 -1 0.0012846 7.90155415350311e-16 4.77431309275035e-16 1.70656503315336e-16 -0.8 0.0012563 8.02751515595015e-16 4.83146109386056e-16 1.77159503441669e-16 -0.6 0.0011094 8.51545916542941e-16 4.84608409414464e-16 2.29556904459591e-16 -0.4 0.0006890916 9.31834518102704e-16 4.54134108822441e-16 3.50207706803468e-16 -0.2 0.0002798437 9.75766118956161e-16 4.13426608031619e-16 4.39156708531476e-16 -5.55111512312578e-17 0. 9.89867119230101e-16 4.32246308397228e-16 4.32246308397228e-16 0.2 -0.0001613229 9.81556619068653e-16 4.63064608995934e-16 3.98373507739183e-16 -1.2 0.0002155727 7.78516315124199e-16 3.69462707177534e-16 1.21327102357016e-16 -1 0.0001983828 7.90225615351675e-16 3.72442807235428e-16 1.24112402411126e-16 -0.8 0.0001828634 8.03218415604085e-16 3.75503407294886e-16 1.27818902483132e-16 -0.6 0.0001712084 8.18016815891573e-16 3.78686007356715e-16 1.3293750258257e-16 -0.4 0.0001649486 8.35753616236145e-16 3.82106407423163e-16 1.41296002744951e-16 -0.2 0.0001280782 8.84017417173763e-16 3.77173107327324e-16 2.14733804171623e-16 -5.55111512312578e-17 0. 9.62312018694789e-16 3.58364906961938e-16 3.58364906961938e-16 0.2 -0.0001095488 9.77886518997354e-16 3.45846006718734e-16 4.37378508496931e-16 -1.2 0.0003150665 7.66567314892066e-16 4.28481708324093e-16 1.34967802622013e-16 -1 0.0002937653 7.78224815118535e-16 4.32963808411167e-16 1.39330202706761e-16 -0.8 0.0002782817 7.91704715380409e-16 4.37595608501149e-16 1.45271202822177e-16 -0.6 0.0002714255 8.0730421568346e-16 4.4242970859506e-16 1.53220602976609e-16 -0.4 0.0002532657 8.37239616265013e-16 4.44182508629112e-16 1.8479120358993e-16 -0.2 0.0001374555 9.19694817866867e-16 4.1372370803739e-16 3.21933306254183e-16 -5.55111512312578e-17 0. 9.66616518778412e-16 4.02478907818938e-16 4.02478907818938e-16 0.2 -9.14726e-05 9.69177518828165e-16 4.04511707858429e-16 4.27975408314257e-16 -1.2 0.0003845737 7.64761514856985e-16 4.5308240880201e-16 1.49241302899304e-16 -1 0.0003694517 7.77915315112523e-16 4.58151208900481e-16 1.5591790302901e-16 -0.8 0.0003644604 7.92554015396908e-16 4.63411009002663e-16 1.63967003185379e-16 -0.6 0.0003534398 8.1489211583087e-16 4.6769870908596e-16 1.83456403563999e-16 -0.4 0.0002530235 8.8583431720906e-16 4.51245508766324e-16 2.84531205527574e-16 -0.2 0.0001062064 9.47080718398891e-16 4.12238808008543e-16 3.93162007637939e-16 -5.55111512312578e-17 0. 9.71845718879999e-16 4.21807408194432e-16 4.21807408194432e-16 0.2 -6.2987e-05 9.67953518804386e-16 4.40786308563134e-16 4.13057408024446e-16 -1.2 0.0004224433 7.66573014892177e-16 4.60108908938513e-16 1.65620603217503e-16 -1 0.0004210123 7.80332815159488e-16 4.65213309037676e-16 1.73533903371235e-16 -0.8 0.0004135324 7.99641815534603e-16 4.6984260912761e-16 1.8917690367513e-16 -0.6 0.0003282459 8.58147716671194e-16 4.62096908977134e-16 2.63967705128088e-16 -0.4 0.000188537 9.20126917875261e-16 4.32756708407144e-16 3.63861107068712e-16 -0.2 7.2301e-05 9.55753318567373e-16 4.00969007789605e-16 4.33549908422553e-16 -5.55111512312578e-17 0. 9.70325318850463e-16 4.28566308325737e-16 4.28566308325737e-16 0.2 -3.95724e-05 9.63468518717256e-16 4.6430340902e-16 3.97811507728265e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2g_lt.standard0000644000175000017500000003741414163340332025143 0ustar carstencarstenFreq N(g) 100.00000 7.4529e-50 125.89254 7.4529e-50 158.48932 7.4529e-50 199.52623 7.4529e-50 251.18864 7.4529e-50 316.22777 7.4529e-50 398.10717 7.4529e-50 501.18723 7.4529e-50 630.95734 7.4529e-50 794.32823 7.4529e-50 1000 7.4529e-50 1258.93 7.4529e-50 1584.89 7.4529e-50 1995.26 7.4529e-50 2511.89 7.4529e-50 3162.28 7.4529e-50 3981.07 7.4529e-50 5011.87 7.4529e-50 6309.57 7.4529e-50 7943.28 7.4529e-50 10000 7.4529e-50 12589.25 7.4529e-50 15848.93 7.4529e-50 19952.62 7.4529e-50 25118.86 7.4529e-50 31622.78 7.4529e-50 39810.72 7.4529e-50 50118.72 7.4529e-50 63095.73 7.4529e-50 79432.82 7.4529e-50 100000 7.4529e-50 125892.54 7.4529e-50 158489.32 7.4529e-50 199526.23 7.4529e-50 251188.64 7.4529e-50 316227.77 7.4529e-50 398107.17 7.4529e-50 501187.23 7.4529e-50 630957.34 7.4529e-50 794328.23 7.4529e-50 1000000 7.4529e-50 1258930 7.4529e-50 1584890 7.4529e-50 1995260 7.4529e-50 2511890 7.4529e-50 3162280 7.4529e-50 3981070 7.4529e-50 5011870 7.4529e-50 6309570 7.4529e-50 7943280 7.4529e-50 10000000 7.4529e-50 12589250 7.4529e-50 15848930 7.4529e-50 19952620 7.4529e-50 25118860 7.4529e-50 31622780 7.4529e-50 39810720 7.4529e-50 50118720 7.4529e-50 63095730 7.4529e-50 79432820 7.4529e-50 100000000 7.4529e-50 100.00000 6.9105969e-49 125.89254 6.9105969e-49 158.48932 6.9105969e-49 199.52623 6.9105969e-49 251.18864 6.9105969e-49 316.22777 6.9105969e-49 398.10717 6.9105969e-49 501.18723 6.9105969e-49 630.95734 6.9105969e-49 794.32823 6.9105969e-49 1000 6.9105969e-49 1258.93 6.9105969e-49 1584.89 6.9105969e-49 1995.26 6.9105969e-49 2511.89 6.9105969e-49 3162.28 6.9105969e-49 3981.07 6.9105969e-49 5011.87 6.9105969e-49 6309.57 6.9105969e-49 7943.28 6.9105969e-49 10000 6.9105969e-49 12589.25 6.9105969e-49 15848.93 6.9105969e-49 19952.62 6.9105969e-49 25118.86 6.9105969e-49 31622.78 6.9105969e-49 39810.72 6.9105969e-49 50118.72 6.9105969e-49 63095.73 6.9105969e-49 79432.82 6.9105969e-49 100000 6.9105969e-49 125892.54 6.9105969e-49 158489.32 6.9105969e-49 199526.23 6.9105969e-49 251188.64 6.9105969e-49 316227.77 6.9105969e-49 398107.17 6.9105969e-49 501187.23 6.9105969e-49 630957.34 6.9105969e-49 794328.23 6.9105969e-49 1000000 6.9105969e-49 1258930 6.9105969e-49 1584890 6.9105969e-49 1995260 6.9105969e-49 2511890 6.9105969e-49 3162280 6.9105969e-49 3981070 6.9105969e-49 5011870 6.9105969e-49 6309570 6.9105969e-49 7943280 6.9105969e-49 10000000 6.9105969e-49 12589250 6.9105969e-49 15848930 6.9105969e-49 19952620 6.9105969e-49 25118860 6.9105969e-49 31622780 6.9105969e-49 39810720 6.9105969e-49 50118720 6.9105969e-49 63095730 6.9105969e-49 79432820 6.9105969e-49 100000000 6.9105969e-49 100.00000 2.007889e-48 125.89254 2.007889e-48 158.48932 2.007889e-48 199.52623 2.007889e-48 251.18864 2.007889e-48 316.22777 2.007889e-48 398.10717 2.007889e-48 501.18723 2.007889e-48 630.95734 2.007889e-48 794.32823 2.007889e-48 1000 2.007889e-48 1258.93 2.007889e-48 1584.89 2.007889e-48 1995.26 2.007889e-48 2511.89 2.007889e-48 3162.28 2.007889e-48 3981.07 2.007889e-48 5011.87 2.007889e-48 6309.57 2.007889e-48 7943.28 2.007889e-48 10000 2.007889e-48 12589.25 2.007889e-48 15848.93 2.007889e-48 19952.62 2.007889e-48 25118.86 2.007889e-48 31622.78 2.007889e-48 39810.72 2.007889e-48 50118.72 2.007889e-48 63095.73 2.007889e-48 79432.82 2.007889e-48 100000 2.007889e-48 125892.54 2.007889e-48 158489.32 2.007889e-48 199526.23 2.007889e-48 251188.64 2.007889e-48 316227.77 2.007889e-48 398107.17 2.007889e-48 501187.23 2.007889e-48 630957.34 2.007889e-48 794328.23 2.007889e-48 1000000 2.007889e-48 1258930 2.007889e-48 1584890 2.007889e-48 1995260 2.007889e-48 2511890 2.007889e-48 3162280 2.007889e-48 3981070 2.007889e-48 5011870 2.007889e-48 6309570 2.007889e-48 7943280 2.007889e-48 10000000 2.007889e-48 12589250 2.007889e-48 15848930 2.007889e-48 19952620 2.007889e-48 25118860 2.007889e-48 31622780 2.007889e-48 39810720 2.007889e-48 50118720 2.007889e-48 63095730 2.007889e-48 79432820 2.007889e-48 100000000 2.007889e-48 100.00000 4.036081e-48 125.89254 4.036081e-48 158.48932 4.036081e-48 199.52623 4.036081e-48 251.18864 4.036081e-48 316.22777 4.036081e-48 398.10717 4.036081e-48 501.18723 4.036081e-48 630.95734 4.036081e-48 794.32823 4.036081e-48 1000 4.036081e-48 1258.93 4.036081e-48 1584.89 4.036081e-48 1995.26 4.036081e-48 2511.89 4.036081e-48 3162.28 4.036081e-48 3981.07 4.036081e-48 5011.87 4.036081e-48 6309.57 4.036081e-48 7943.28 4.036081e-48 10000 4.036081e-48 12589.25 4.036081e-48 15848.93 4.036081e-48 19952.62 4.036081e-48 25118.86 4.036081e-48 31622.78 4.036081e-48 39810.72 4.036081e-48 50118.72 4.036081e-48 63095.73 4.036081e-48 79432.82 4.036081e-48 100000 4.036081e-48 125892.54 4.036081e-48 158489.32 4.036081e-48 199526.23 4.036081e-48 251188.64 4.036081e-48 316227.77 4.036081e-48 398107.17 4.036081e-48 501187.23 4.036081e-48 630957.34 4.036081e-48 794328.23 4.036081e-48 1000000 4.036081e-48 1258930 4.036081e-48 1584890 4.036081e-48 1995260 4.036081e-48 2511890 4.036081e-48 3162280 4.036081e-48 3981070 4.036081e-48 5011870 4.036081e-48 6309570 4.036081e-48 7943280 4.036081e-48 10000000 4.036081e-48 12589250 4.036081e-48 15848930 4.036081e-48 19952620 4.036081e-48 25118860 4.036081e-48 31622780 4.036081e-48 39810720 4.036081e-48 50118720 4.036081e-48 63095730 4.036081e-48 79432820 4.036081e-48 100000000 4.036081e-48 100.00000 4.169764e-50 125.89254 4.169764e-50 158.48932 4.169764e-50 199.52623 4.169764e-50 251.18864 4.169764e-50 316.22777 4.169764e-50 398.10717 4.169764e-50 501.18723 4.169764e-50 630.95734 4.169764e-50 794.32823 4.169764e-50 1000 4.169764e-50 1258.93 4.169764e-50 1584.89 4.169764e-50 1995.26 4.169764e-50 2511.89 4.169764e-50 3162.28 4.169764e-50 3981.07 4.169764e-50 5011.87 4.169764e-50 6309.57 4.169764e-50 7943.28 4.169764e-50 10000 4.169764e-50 12589.25 4.169764e-50 15848.93 4.169764e-50 19952.62 4.169764e-50 25118.86 4.169764e-50 31622.78 4.169764e-50 39810.72 4.169764e-50 50118.72 4.169764e-50 63095.73 4.169764e-50 79432.82 4.169764e-50 100000 4.169764e-50 125892.54 4.169764e-50 158489.32 4.169764e-50 199526.23 4.169764e-50 251188.64 4.169764e-50 316227.77 4.169764e-50 398107.17 4.169764e-50 501187.23 4.169764e-50 630957.34 4.169764e-50 794328.23 4.169764e-50 1000000 4.169764e-50 1258930 4.169764e-50 1584890 4.169764e-50 1995260 4.169764e-50 2511890 4.169764e-50 3162280 4.169764e-50 3981070 4.169764e-50 5011870 4.169764e-50 6309570 4.169764e-50 7943280 4.169764e-50 10000000 4.169764e-50 12589250 4.169764e-50 15848930 4.169764e-50 19952620 4.169764e-50 25118860 4.169764e-50 31622780 4.169764e-50 39810720 4.169764e-50 50118720 4.169764e-50 63095730 4.169764e-50 79432820 4.169764e-50 100000000 4.169764e-50 100.00000 6.2694724e-49 125.89254 6.2694724e-49 158.48932 6.2694724e-49 199.52623 6.2694724e-49 251.18864 6.2694724e-49 316.22777 6.2694724e-49 398.10717 6.2694724e-49 501.18723 6.2694724e-49 630.95734 6.2694724e-49 794.32823 6.2694724e-49 1000 6.2694724e-49 1258.93 6.2694724e-49 1584.89 6.2694724e-49 1995.26 6.2694724e-49 2511.89 6.2694724e-49 3162.28 6.2694724e-49 3981.07 6.2694724e-49 5011.87 6.2694724e-49 6309.57 6.2694724e-49 7943.28 6.2694724e-49 10000 6.2694724e-49 12589.25 6.2694724e-49 15848.93 6.2694724e-49 19952.62 6.2694724e-49 25118.86 6.2694724e-49 31622.78 6.2694724e-49 39810.72 6.2694724e-49 50118.72 6.2694724e-49 63095.73 6.2694724e-49 79432.82 6.2694724e-49 100000 6.2694724e-49 125892.54 6.2694724e-49 158489.32 6.2694724e-49 199526.23 6.2694724e-49 251188.64 6.2694724e-49 316227.77 6.2694724e-49 398107.17 6.2694724e-49 501187.23 6.2694724e-49 630957.34 6.2694724e-49 794328.23 6.2694724e-49 1000000 6.2694724e-49 1258930 6.2694724e-49 1584890 6.2694724e-49 1995260 6.2694724e-49 2511890 6.2694724e-49 3162280 6.2694724e-49 3981070 6.2694724e-49 5011870 6.2694724e-49 6309570 6.2694724e-49 7943280 6.2694724e-49 10000000 6.2694724e-49 12589250 6.2694724e-49 15848930 6.2694724e-49 19952620 6.2694724e-49 25118860 6.2694724e-49 31622780 6.2694724e-49 39810720 6.2694724e-49 50118720 6.2694724e-49 63095730 6.2694724e-49 79432820 6.2694724e-49 100000000 6.2694724e-49 100.00000 1.934881e-48 125.89254 1.934881e-48 158.48932 1.934881e-48 199.52623 1.934881e-48 251.18864 1.934881e-48 316.22777 1.934881e-48 398.10717 1.934881e-48 501.18723 1.934881e-48 630.95734 1.934881e-48 794.32823 1.934881e-48 1000 1.934881e-48 1258.93 1.934881e-48 1584.89 1.934881e-48 1995.26 1.934881e-48 2511.89 1.934881e-48 3162.28 1.934881e-48 3981.07 1.934881e-48 5011.87 1.934881e-48 6309.57 1.934881e-48 7943.28 1.934881e-48 10000 1.934881e-48 12589.25 1.934881e-48 15848.93 1.934881e-48 19952.62 1.934881e-48 25118.86 1.934881e-48 31622.78 1.934881e-48 39810.72 1.934881e-48 50118.72 1.934881e-48 63095.73 1.934881e-48 79432.82 1.934881e-48 100000 1.934881e-48 125892.54 1.934881e-48 158489.32 1.934881e-48 199526.23 1.934881e-48 251188.64 1.934881e-48 316227.77 1.934881e-48 398107.17 1.934881e-48 501187.23 1.934881e-48 630957.34 1.934881e-48 794328.23 1.934881e-48 1000000 1.934881e-48 1258930 1.934881e-48 1584890 1.934881e-48 1995260 1.934881e-48 2511890 1.934881e-48 3162280 1.934881e-48 3981070 1.934881e-48 5011870 1.934881e-48 6309570 1.934881e-48 7943280 1.934881e-48 10000000 1.934881e-48 12589250 1.934881e-48 15848930 1.934881e-48 19952620 1.934881e-48 25118860 1.934881e-48 31622780 1.934881e-48 39810720 1.934881e-48 50118720 1.934881e-48 63095730 1.934881e-48 79432820 1.934881e-48 100000000 1.934881e-48 100.00000 3.968064e-48 125.89254 3.968064e-48 158.48932 3.968064e-48 199.52623 3.968064e-48 251.18864 3.968064e-48 316.22777 3.968064e-48 398.10717 3.968064e-48 501.18723 3.968064e-48 630.95734 3.968064e-48 794.32823 3.968064e-48 1000 3.968064e-48 1258.93 3.968064e-48 1584.89 3.968064e-48 1995.26 3.968064e-48 2511.89 3.968064e-48 3162.28 3.968064e-48 3981.07 3.968064e-48 5011.87 3.968064e-48 6309.57 3.968064e-48 7943.28 3.968064e-48 10000 3.968064e-48 12589.25 3.968064e-48 15848.93 3.968064e-48 19952.62 3.968064e-48 25118.86 3.968064e-48 31622.78 3.968064e-48 39810.72 3.968064e-48 50118.72 3.968064e-48 63095.73 3.968064e-48 79432.82 3.968064e-48 100000 3.968064e-48 125892.54 3.968064e-48 158489.32 3.968064e-48 199526.23 3.968064e-48 251188.64 3.968064e-48 316227.77 3.968064e-48 398107.17 3.968064e-48 501187.23 3.968064e-48 630957.34 3.968064e-48 794328.23 3.968064e-48 1000000 3.968064e-48 1258930 3.968064e-48 1584890 3.968064e-48 1995260 3.968064e-48 2511890 3.968064e-48 3162280 3.968064e-48 3981070 3.968064e-48 5011870 3.968064e-48 6309570 3.968064e-48 7943280 3.968064e-48 10000000 3.968064e-48 12589250 3.968064e-48 15848930 3.968064e-48 19952620 3.968064e-48 25118860 3.968064e-48 31622780 3.968064e-48 39810720 3.968064e-48 50118720 3.968064e-48 63095730 3.968064e-48 79432820 3.968064e-48 100000000 3.968064e-48 100.00000 1.1909401e-49 125.89254 1.1909401e-49 158.48932 1.1909401e-49 199.52623 1.1909401e-49 251.18864 1.1909401e-49 316.22777 1.1909401e-49 398.10717 1.1909401e-49 501.18723 1.1909401e-49 630.95734 1.1909401e-49 794.32823 1.1909401e-49 1000 1.1909401e-49 1258.93 1.1909401e-49 1584.89 1.1909401e-49 1995.26 1.1909401e-49 2511.89 1.1909401e-49 3162.28 1.1909401e-49 3981.07 1.1909401e-49 5011.87 1.1909401e-49 6309.57 1.1909401e-49 7943.28 1.1909401e-49 10000 1.1909401e-49 12589.25 1.1909401e-49 15848.93 1.1909401e-49 19952.62 1.1909401e-49 25118.86 1.1909401e-49 31622.78 1.1909401e-49 39810.72 1.1909401e-49 50118.72 1.1909401e-49 63095.73 1.1909401e-49 79432.82 1.1909401e-49 100000 1.1909401e-49 125892.54 1.1909401e-49 158489.32 1.1909401e-49 199526.23 1.1909401e-49 251188.64 1.1909401e-49 316227.77 1.1909401e-49 398107.17 1.1909401e-49 501187.23 1.1909401e-49 630957.34 1.1909401e-49 794328.23 1.1909401e-49 1000000 1.1909401e-49 1258930 1.1909401e-49 1584890 1.1909401e-49 1995260 1.1909401e-49 2511890 1.1909401e-49 3162280 1.1909401e-49 3981070 1.1909401e-49 5011870 1.1909401e-49 6309570 1.1909401e-49 7943280 1.1909401e-49 10000000 1.1909401e-49 12589250 1.1909401e-49 15848930 1.1909401e-49 19952620 1.1909401e-49 25118860 1.1909401e-49 31622780 1.1909401e-49 39810720 1.1909401e-49 50118720 1.1909401e-49 63095730 1.1909401e-49 79432820 1.1909401e-49 100000000 1.1909401e-49 100.00000 7.6580001e-49 125.89254 7.6580001e-49 158.48932 7.6580001e-49 199.52623 7.6580001e-49 251.18864 7.6580001e-49 316.22777 7.6580001e-49 398.10717 7.6580001e-49 501.18723 7.6580001e-49 630.95734 7.6580001e-49 794.32823 7.6580001e-49 1000 7.6580001e-49 1258.93 7.6580001e-49 1584.89 7.6580001e-49 1995.26 7.6580001e-49 2511.89 7.6580001e-49 3162.28 7.6580001e-49 3981.07 7.6580001e-49 5011.87 7.6580001e-49 6309.57 7.6580001e-49 7943.28 7.6580001e-49 10000 7.6580001e-49 12589.25 7.6580001e-49 15848.93 7.6580001e-49 19952.62 7.6580001e-49 25118.86 7.6580001e-49 31622.78 7.6580001e-49 39810.72 7.6580001e-49 50118.72 7.6580001e-49 63095.73 7.6580001e-49 79432.82 7.6580001e-49 100000 7.6580001e-49 125892.54 7.6580001e-49 158489.32 7.6580001e-49 199526.23 7.6580001e-49 251188.64 7.6580001e-49 316227.77 7.6580001e-49 398107.17 7.6580001e-49 501187.23 7.6580001e-49 630957.34 7.6580001e-49 794328.23 7.6580001e-49 1000000 7.6580001e-49 1258930 7.6580001e-49 1584890 7.6580001e-49 1995260 7.6580001e-49 2511890 7.6580001e-49 3162280 7.6580001e-49 3981070 7.6580001e-49 5011870 7.6580001e-49 6309570 7.6580001e-49 7943280 7.6580001e-49 10000000 7.6580001e-49 12589250 7.6580001e-49 15848930 7.6580001e-49 19952620 7.6580001e-49 25118860 7.6580001e-49 31622780 7.6580001e-49 39810720 7.6580001e-49 50118720 7.6580001e-49 63095730 7.6580001e-49 79432820 7.6580001e-49 100000000 7.6580001e-49 100.00000 2.082249e-48 125.89254 2.082249e-48 158.48932 2.082249e-48 199.52623 2.082249e-48 251.18864 2.082249e-48 316.22777 2.082249e-48 398.10717 2.082249e-48 501.18723 2.082249e-48 630.95734 2.082249e-48 794.32823 2.082249e-48 1000 2.082249e-48 1258.93 2.082249e-48 1584.89 2.082249e-48 1995.26 2.082249e-48 2511.89 2.082249e-48 3162.28 2.082249e-48 3981.07 2.082249e-48 5011.87 2.082249e-48 6309.57 2.082249e-48 7943.28 2.082249e-48 10000 2.082249e-48 12589.25 2.082249e-48 15848.93 2.082249e-48 19952.62 2.082249e-48 25118.86 2.082249e-48 31622.78 2.082249e-48 39810.72 2.082249e-48 50118.72 2.082249e-48 63095.73 2.082249e-48 79432.82 2.082249e-48 100000 2.082249e-48 125892.54 2.082249e-48 158489.32 2.082249e-48 199526.23 2.082249e-48 251188.64 2.082249e-48 316227.77 2.082249e-48 398107.17 2.082249e-48 501187.23 2.082249e-48 630957.34 2.082249e-48 794328.23 2.082249e-48 1000000 2.082249e-48 1258930 2.082249e-48 1584890 2.082249e-48 1995260 2.082249e-48 2511890 2.082249e-48 3162280 2.082249e-48 3981070 2.082249e-48 5011870 2.082249e-48 6309570 2.082249e-48 7943280 2.082249e-48 10000000 2.082249e-48 12589250 2.082249e-48 15848930 2.082249e-48 19952620 2.082249e-48 25118860 2.082249e-48 31622780 2.082249e-48 39810720 2.082249e-48 50118720 2.082249e-48 63095730 2.082249e-48 79432820 2.082249e-48 100000000 2.082249e-48 100.00000 4.092529e-48 125.89254 4.092529e-48 158.48932 4.092529e-48 199.52623 4.092529e-48 251.18864 4.092529e-48 316.22777 4.092529e-48 398.10717 4.092529e-48 501.18723 4.092529e-48 630.95734 4.092529e-48 794.32823 4.092529e-48 1000 4.092529e-48 1258.93 4.092529e-48 1584.89 4.092529e-48 1995.26 4.092529e-48 2511.89 4.092529e-48 3162.28 4.092529e-48 3981.07 4.092529e-48 5011.87 4.092529e-48 6309.57 4.092529e-48 7943.28 4.092529e-48 10000 4.092529e-48 12589.25 4.092529e-48 15848.93 4.092529e-48 19952.62 4.092529e-48 25118.86 4.092529e-48 31622.78 4.092529e-48 39810.72 4.092529e-48 50118.72 4.092529e-48 63095.73 4.092529e-48 79432.82 4.092529e-48 100000 4.092529e-48 125892.54 4.092529e-48 158489.32 4.092529e-48 199526.23 4.092529e-48 251188.64 4.092529e-48 316227.77 4.092529e-48 398107.17 4.092529e-48 501187.23 4.092529e-48 630957.34 4.092529e-48 794328.23 4.092529e-48 1000000 4.092529e-48 1258930 4.092529e-48 1584890 4.092529e-48 1995260 4.092529e-48 2511890 4.092529e-48 3162280 4.092529e-48 3981070 4.092529e-48 5011870 4.092529e-48 6309570 4.092529e-48 7943280 4.092529e-48 10000000 4.092529e-48 12589250 4.092529e-48 15848930 4.092529e-48 19952620 4.092529e-48 25118860 4.092529e-48 31622780 4.092529e-48 39810720 4.092529e-48 50118720 4.092529e-48 63095730 4.092529e-48 79432820 4.092529e-48 100000000 4.092529e-48 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_ig_sw.standard0000644000175000017500000000712214163340332025214 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.49930800055118e-14 9.39128755801209e-15 3.47392268934973e-15 1258.93 1.4993026984753e-14 9.39125793812334e-15 3.47391727992993e-15 1584.89 1.49931148486038e-14 9.39130551233736e-15 3.47393579448481e-15 1995.26 1.49931061994006e-14 9.39129506627491e-15 3.4739355638253e-15 2511.89 1.49930648542735e-14 9.39127516416518e-15 3.47392417217865e-15 3162.28 1.49930762910174e-14 9.39127807519028e-15 3.47392599879495e-15 3981.07 1.49930914951293e-14 9.39129180750628e-15 3.47393031669927e-15 5011.87 1.49930925476722e-14 9.39129024250356e-15 3.47393253196645e-15 6309.57 1.49930945057171e-14 9.39129111707013e-15 3.47393335267567e-15 7943.28 1.49930913841181e-14 9.39128932891158e-15 3.47393159465955e-15 10000 1.49930863717096e-14 9.39128596646265e-15 3.47393064709688e-15 12589.25 1.49935669326598e-14 9.39129017998998e-15 3.47393234130041e-15 15848.93 1.49927048725813e-14 9.39128773579564e-15 3.47393122716795e-15 19952.62 1.49928997312396e-14 9.39090277377549e-15 3.47393128397605e-15 25118.86 1.49930507132231e-14 9.39132813554466e-15 3.47393097137079e-15 31622.78 1.49930706747084e-14 9.39142996945483e-15 3.4739302090667e-15 39810.72 1.4992916055714e-14 9.39121113150356e-15 3.47393017059216e-15 50118.72 1.49930833890825e-14 9.39139763944433e-15 3.47406134359644e-15 63095.73 1.49931075564688e-14 9.39128160693973e-15 3.47389890926309e-15 79432.82 1.49930535471653e-14 9.39127093518803e-15 3.47391469083847e-15 100000 1.49930322590289e-14 9.39125572702347e-15 3.4738749428668e-15 125892.54 1.49930564836697e-14 9.39133017931367e-15 3.47392997331072e-15 158489.32 1.4993104660549e-14 9.39127650869728e-15 3.47392878038787e-15 199526.23 1.49930570098171e-14 9.39130019392653e-15 3.47390762938544e-15 251188.64 1.49931116864116e-14 9.39126327931774e-15 3.47394182310253e-15 316227.77 1.4993072097076e-14 9.39127987276968e-15 3.47392349254304e-15 398107.17 1.49930770971861e-14 9.39129179502176e-15 3.47392083767628e-15 501187.23 1.49930824916284e-14 9.39130181053652e-15 3.47393411330153e-15 630957.34 1.49930813816111e-14 9.3912810115726e-15 3.4739239133915e-15 794328.23 1.49930930537519e-14 9.39129061692109e-15 3.47393459605683e-15 1000000 1.49930800055118e-14 9.39128755801209e-15 3.47392268934973e-15 1258930 1.4993026984753e-14 9.39125793812334e-15 3.47391727992993e-15 1584890 1.49931148486038e-14 9.39130551233736e-15 3.47393579448481e-15 1995260 1.49931061994006e-14 9.39129506627491e-15 3.4739355638253e-15 2511890 1.49930648542735e-14 9.39127516416518e-15 3.47392417217865e-15 3162280 1.49930762910174e-14 9.39127807519028e-15 3.47392599879495e-15 3981070 1.49930914951293e-14 9.39129180750628e-15 3.47393031669927e-15 5011870 1.49930925476722e-14 9.39129024250356e-15 3.47393253196645e-15 6309570 1.49930945057171e-14 9.39129111707013e-15 3.47393335267567e-15 7943280 1.49930913841181e-14 9.39128932891158e-15 3.47393159465955e-15 10000000 1.49930863717096e-14 9.39128596646266e-15 3.47393064709688e-15 12589250 1.49935669326598e-14 9.39129017998998e-15 3.47393107708735e-15 15848930 1.49927048725813e-14 9.39128773579564e-15 3.47393122716795e-15 19952620 1.49928997312396e-14 9.39090277377549e-15 3.47393128397605e-15 25118860 1.49930507132231e-14 9.39132813554466e-15 3.47393097137079e-15 31622780 1.49930706747084e-14 9.39142996945483e-15 3.4739302090667e-15 39810720 1.4992916055714e-14 9.39121113150356e-15 3.47393017059216e-15 50118720 1.49930833890825e-14 9.39139763944433e-15 3.47406134359643e-15 63095730 1.49931075564688e-14 9.39128160693973e-15 3.47389890926309e-15 79432820 1.49930535471653e-14 9.39127093518803e-15 3.47391469083847e-15 100000000 1.49930322590289e-14 9.39125572702347e-15 3.4738749428668e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_ig_lt.standard0000644000175000017500000001720514163340332024661 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 2.02615e-05 3.38440006574858e-15 2.02900003941729e-15 3.07343205970742e-16 -1 1.85138e-05 3.43690006676849e-15 2.06870004018854e-15 3.14375706107362e-16 -0.8 1.68466e-05 3.49140006782726e-15 2.10970004098504e-15 3.22035406256166e-16 -0.6 1.53205e-05 3.54820006893071e-15 2.15260004181846e-15 3.30092606412693e-16 -0.4 1.42338e-05 3.60700007007302e-15 2.19930004272569e-15 3.36111506529622e-16 -0.2 1.37578e-05 3.68950007167574e-15 2.25800004386606e-15 3.56234406920549e-16 -5.55111512312578e-17 4.546e-21 4.97380009662577e-15 2.00160003888499e-15 2.00160003888499e-15 0.2 -2.88672e-05 5.42160010532516e-15 1.57200003053917e-15 2.90960005652466e-15 -1.2 5.21052e-05 4.25800008271996e-15 2.93880005709193e-15 3.80060607383419e-16 -1 4.8526e-05 4.3197000839186e-15 2.98800005804773e-15 3.89944707575437e-16 -0.8 4.54029e-05 4.38420008517164e-15 3.03890005903656e-15 4.00986407789943e-16 -0.6 4.35104e-05 4.45150008647908e-15 3.09230006007396e-15 4.12308408009895e-16 -0.4 4.30047e-05 4.5450000882955e-15 3.14870006116964e-15 4.48923208721209e-16 -0.2 2.83503e-05 5.59790010875013e-15 2.90020005634205e-15 1.81960003534928e-15 -5.55111512312578e-17 6.792e-21 6.32170012281136e-15 2.74610005334835e-15 2.74610005334835e-15 0.2 -2.3384e-05 6.31600012270063e-15 2.750200053428e-15 2.73980005322596e-15 -1.2 7.02233e-05 4.4731000868987e-15 3.1336000608763e-15 4.55723708853322e-16 -1 6.65822e-05 4.53520008810511e-15 3.18080006179325e-15 4.69209109115303e-16 -0.8 6.49081e-05 4.59990008936204e-15 3.22970006274323e-15 4.83678409396397e-16 -0.6 6.4575e-05 4.70450009139409e-15 3.27920006370486e-15 5.39703110484786e-16 -0.4 4.93431e-05 5.55300010787786e-15 3.13640006093069e-15 1.57500003059745e-15 -0.2 2.21027e-05 6.34340012323293e-15 2.70420005253436e-15 2.84240005521917e-15 -5.55111512312578e-17 9.593e-21 6.59470012811492e-15 2.90790005649163e-15 2.90790005649163e-15 0.2 -1.63635e-05 6.52680012679583e-15 3.2041000622459e-15 2.5462000494649e-15 -1.2 7.88502e-05 4.53110008802546e-15 3.15850006136003e-15 5.31543110326262e-16 -1 7.79723e-05 4.59310008922993e-15 3.20280006222064e-15 5.48429410654311e-16 -0.8 7.75382e-05 4.72210009173601e-15 3.24660006307154e-15 6.36147112358399e-16 -0.6 6.21206e-05 5.43450010557577e-15 3.15550006130175e-15 1.46820002852265e-15 -0.4 3.66934e-05 6.15850011964088e-15 2.82310005484423e-15 2.55750004968443e-15 -0.2 1.5426e-05 6.51260012651997e-15 2.51120004878496e-15 3.24420006302492e-15 -5.55111512312578e-17 2.376e-20 6.62890012877932e-15 2.94170005714826e-15 2.94170005714826e-15 0.2 -1.11376e-05 6.54510012715134e-15 3.43120006665776e-15 2.37040004604965e-15 -1.2 2.43476e-05 3.28450006380782e-15 1.91930003728615e-15 3.01424005855749e-16 -1 2.19891e-05 3.33180006472672e-15 1.95310003794278e-15 3.08266805988684e-16 -0.8 1.97415e-05 3.38080006567864e-15 1.98810003862272e-15 3.15731506133701e-16 -0.6 1.7614e-05 3.43180006666941e-15 2.02440003932792e-15 3.2359320628643e-16 -0.4 1.56937e-05 3.4840000676835e-15 2.06380004009334e-15 3.29358006398422e-16 -0.2 1.46046e-05 3.53190006861405e-15 2.11950004117542e-15 3.14473306109258e-16 -5.55111512312578e-17 1.235e-20 4.75010009227996e-15 1.86890003630703e-15 1.86890003630703e-15 0.2 -4.90053e-05 5.29900010294342e-15 1.21750002365231e-15 3.10070006023715e-15 -1.2 8.34764e-05 4.35540008461215e-15 3.02720005880927e-15 3.72840607243156e-16 -1 7.75965e-05 4.41680008580496e-15 3.07630005976313e-15 3.82470807430242e-16 -0.8 7.19935e-05 4.48110008705411e-15 3.12700006074808e-15 3.93225607639175e-16 -0.6 6.732e-05 4.54790008835183e-15 3.18030006178353e-15 4.04028007849032e-16 -0.4 6.54366e-05 4.61750008970395e-15 3.23960006293555e-15 4.11902708002014e-16 -0.2 4.87551e-05 5.55640010794391e-15 3.07830005980199e-15 1.56370003037792e-15 -5.55111512312578e-17 4.128e-22 6.46260012554862e-15 2.80060005440712e-15 2.80060005440712e-15 0.2 -4.08515e-05 6.41330012459087e-15 2.72330005290542e-15 2.82950005496856e-15 -1.2 0.0001177353 4.5497000883868e-15 3.19710006210991e-15 4.48234308707826e-16 -1 0.0001101969 4.61150008958739e-15 3.24410006302297e-15 4.61439708964367e-16 -0.8 0.0001049231 4.6757000908346e-15 3.29290006397101e-15 4.75200709231701e-16 -0.6 0.0001035814 4.75060009228968e-15 3.34500006498315e-15 4.97065409656466e-16 -0.4 8.49494e-05 5.51120010706582e-15 3.26700006346785e-15 1.36740002656441e-15 -0.2 3.84676e-05 6.44670012523973e-15 2.78160005403801e-15 2.83280005503267e-15 -5.55111512312578e-17 0. 6.71000013035485e-15 2.947400057259e-15 2.947400057259e-15 0.2 -2.86647e-05 6.62250012865499e-15 3.21950006254507e-15 2.59010005031775e-15 -1.2 0.0001317798 4.58980008916582e-15 3.20260006221676e-15 5.23789710175637e-16 -1 0.0001276099 4.65070009034892e-15 3.24680006307543e-15 5.39543010481676e-16 -0.8 0.0001268133 4.74610009220226e-15 3.29420006399626e-15 5.88112311425229e-16 -0.6 0.0001064136 5.40870010507455e-15 3.24630006306571e-15 1.31900002562415e-15 -0.4 6.3901e-05 6.22200012087449e-15 2.89620005626434e-15 2.5120000488005e-15 -0.2 2.6917e-05 6.60580012833056e-15 2.54920004952319e-15 3.2622000633746e-15 -5.55111512312578e-17 0. 6.71840013051803e-15 2.96770005765336e-15 2.96770005765336e-15 0.2 -1.96318e-05 6.62410012868607e-15 3.44960006701521e-15 2.39400004650812e-15 -1.2 1.43477e-05 3.3943000659409e-15 2.0466000397592e-15 3.14640106112498e-16 -1 1.32255e-05 3.44940006701133e-15 2.08930004058873e-15 3.2194760625446e-16 -0.8 1.22319e-05 3.50670006812449e-15 2.1335000414474e-15 3.29908806409122e-16 -0.6 1.15388e-05 3.56660006928817e-15 2.17970004234493e-15 3.38361606573335e-16 -0.4 1.12829e-05 3.63100007053926e-15 2.22980004331822e-15 3.47647206753725e-16 -0.2 1.03844e-05 3.86890007516093e-15 2.25110004373201e-15 5.78747411243298e-16 -5.55111512312578e-17 7.009e-21 5.027500097669e-15 2.05080003984079e-15 2.05080003984079e-15 0.2 -1.49178e-05 5.43180010552332e-15 1.84710003588352e-15 2.69460005234786e-15 -1.2 2.89708e-05 4.11650007997105e-15 2.81160005462082e-15 3.88119407539977e-16 -1 2.73189e-05 4.17850008117552e-15 2.86100005558051e-15 3.98340907738549e-16 -0.8 2.62985e-05 4.24340008243633e-15 2.91200005657128e-15 4.09848107962099e-16 -0.6 2.60434e-05 4.31330008379427e-15 2.96540005760868e-15 4.24393208244666e-16 -0.4 2.50636e-05 4.51870008778457e-15 2.99750005823229e-15 6.07902311809689e-16 -0.2 1.45699e-05 5.53980010762143e-15 2.70080005246831e-15 2.0096000390404e-15 -5.55111512312578e-17 2.438e-21 6.11680011883078e-15 2.66670005180585e-15 2.66670005180585e-15 0.2 -1.18376e-05 6.15840011963894e-15 2.75130005344937e-15 2.63080005110842e-15 -1.2 3.77601e-05 4.35650008463351e-15 3.03830005902491e-15 4.64207209018131e-16 -1 3.68607e-05 4.41910008584964e-15 3.08580005994769e-15 4.7818930928976e-16 -0.8 3.684e-05 4.48730008717456e-15 3.13480006089961e-15 4.96508809645653e-16 -0.6 3.57414e-05 4.68480009101138e-15 3.16800006154458e-15 6.69557913007469e-16 -0.4 2.53161e-05 5.53090010744853e-15 2.97210005773884e-15 1.76840003435462e-15 -0.2 1.12624e-05 6.17990012005662e-15 2.60820005066938e-15 2.82700005491999e-15 -5.55111512312578e-17 7.535e-21 6.4225001247696e-15 2.84860005533962e-15 2.84860005533962e-15 0.2 -8.2598e-06 6.38090012396144e-15 3.16800006154458e-15 2.49050004838282e-15 -1.2 4.31743e-05 4.44040008626344e-15 3.09160006006036e-15 5.40719210504526e-16 -1 4.34802e-05 4.50690008755533e-15 3.13600006092292e-15 5.62690110931353e-16 -0.8 4.21531e-05 4.71220009154368e-15 3.16630006151156e-15 7.45972514491972e-16 -0.6 3.20311e-05 5.42330010535819e-15 3.03390005893943e-15 1.62830003163291e-15 -0.4 1.87066e-05 6.0426001173893e-15 2.73570005314631e-15 2.5825000501701e-15 -0.2 7.8409e-06 6.37010012375163e-15 2.46290004784664e-15 3.20560006227504e-15 -5.55111512312578e-17 0. 6.49360012615085e-15 2.90210005637896e-15 2.90210005637896e-15 0.2 -5.5785e-06 6.42510012482011e-15 3.39590006597199e-15 2.34160004549015e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_core_lw.standard0000644000175000017500000001635114163340332025331 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -0.0001179976 0. 0. 0.0001179976 -1.10000 -0.0001140745 0. 0. 0.0001140745 -1.00000 -0.0001101764 0. 0. 0.0001101764 -0.9 -0.0001063127 0. 0. 0.0001063127 -0.8 -0.0001025046 0. 0. 0.0001025046 -0.7 -9.88006e-05 0. 0. 9.88006e-05 -0.6 -9.53157e-05 0. 0. 9.53157e-05 -0.5 -9.2308e-05 0. 0. 9.2308e-05 -0.4 -9.02138e-05 0. 0. 9.02138e-05 -0.3 -8.92156e-05 0. 0. 8.92156e-05 -0.2 -8.69349e-05 0. 0. 8.69349e-05 -0.1 -6.63339e-05 0. 0. 6.63339e-05 2.220446e-16 1.888e-19 0. 0. -1.888e-19 -1.20000 -0.0001888594 0. 0. 0.0001888594 -1.10000 -0.0001827576 0. 0. 0.0001827576 -1.00000 -0.0001766945 0. 0. 0.0001766945 -0.9 -0.0001706998 0. 0. 0.0001706998 -0.8 -0.0001648359 0. 0. 0.0001648359 -0.7 -0.0001592376 0. 0. 0.0001592376 -0.6 -0.0001541893 0. 0. 0.0001541893 -0.5 -0.0001502048 0. 0. 0.0001502048 -0.4 -0.000147823 0. 0. 0.000147823 -0.3 -0.0001463874 0. 0. 0.0001463874 -0.2 -0.0001370011 0. 0. 0.0001370011 -0.1 -9.43488e-05 0. 0. 9.43488e-05 2.220446e-16 2.281e-19 0. 0. -2.281e-19 -1.20000 -0.0004570528 0. 0. 0.0004570528 -1.10000 -0.0004424598 0. 0. 0.0004424598 -1.00000 -0.0004282366 0. 0. 0.0004282366 -0.9 -0.0004146784 0. 0. 0.0004146784 -0.8 -0.0004022932 0. 0. 0.0004022932 -0.7 -0.0003918585 0. 0. 0.0003918585 -0.6 -0.0003842508 0. 0. 0.0003842508 -0.5 -0.0003795565 0. 0. 0.0003795565 -0.4 -0.0003726298 0. 0. 0.0003726298 -0.3 -0.0003440452 0. 0. 0.0003440452 -0.2 -0.0002751424 0. 0. 0.0002751424 -0.1 -0.0001604103 0. 0. 0.0001604103 2.220446e-16 4.206e-19 0. 0. -4.206e-19 -1.20000 -0.000812558 0. 0. 0.000812558 -1.10000 -0.0007880781 0. 0. 0.0007880781 -1.00000 -0.0007657258 0. 0. 0.0007657258 -0.9 -0.0007464758 0. 0. 0.0007464758 -0.8 -0.0007313226 0. 0. 0.0007313226 -0.7 -0.0007204637 0. 0. 0.0007204637 -0.6 -0.0007095809 0. 0. 0.0007095809 -0.5 -0.0006831782 0. 0. 0.0006831782 -0.4 -0.0006241378 0. 0. 0.0006241378 -0.3 -0.000525105 0. 0. 0.000525105 -0.2 -0.0003861788 0. 0. 0.0003861788 -0.1 -0.000210199 0. 0. 0.000210199 2.220446e-16 5.038e-19 0. 0. -5.038e-19 -1.20000 -0.0012122 0. 0. 0.0012122 -1.10000 -0.0011829 0. 0. 0.0011829 -1.00000 -0.0011589 0. 0. 0.0011589 -0.9 -0.0011401 0. 0. 0.0011401 -0.8 -0.0011218 0. 0. 0.0011218 -0.7 -0.0010913 0. 0. 0.0010913 -0.6 -0.0010345 0. 0. 0.0010345 -0.5 -0.0009435636 0. 0. 0.0009435636 -0.4 -0.0008165772 0. 0. 0.0008165772 -0.3 -0.0006554723 0. 0. 0.0006554723 -0.2 -0.0004636039 0. 0. 0.0004636039 -0.1 -0.0002442642 0. 0. 0.0002442642 2.220446e-16 5.593e-19 0. 0. -5.593e-19 -1.20000 -0.0001014554 0. 0. 0.0001014554 -1.10000 -9.80738e-05 0. 0. 9.80738e-05 -1.00000 -9.47106e-05 0. 0. 9.47106e-05 -0.9 -9.1366e-05 0. 0. 9.1366e-05 -0.8 -8.80416e-05 0. 0. 8.80416e-05 -0.7 -8.47423e-05 0. 0. 8.47423e-05 -0.6 -8.14835e-05 0. 0. 8.14835e-05 -0.5 -7.83155e-05 0. 0. 7.83155e-05 -0.4 -7.54082e-05 0. 0. 7.54082e-05 -0.3 -7.32479e-05 0. 0. 7.32479e-05 -0.2 -7.21758e-05 0. 0. 7.21758e-05 -0.1 -6.32396e-05 0. 0. 6.32396e-05 2.220446e-16 1.584e-19 0. 0. -1.584e-19 -1.20000 -0.0002024955 0. 0. 0.0002024955 -1.10000 -0.000196111 0. 0. 0.000196111 -1.00000 -0.0001897373 0. 0. 0.0001897373 -0.9 -0.000183379 0. 0. 0.000183379 -0.8 -0.0001770475 0. 0. 0.0001770475 -0.7 -0.0001707719 0. 0. 0.0001707719 -0.6 -0.0001646313 0. 0. 0.0001646313 -0.5 -0.0001588487 0. 0. 0.0001588487 -0.4 -0.0001540168 0. 0. 0.0001540168 -0.3 -0.0001511093 0. 0. 0.0001511093 -0.2 -0.0001476638 0. 0. 0.0001476638 -0.1 -0.0001120529 0. 0. 0.0001120529 2.220446e-16 1.778e-19 0. 0. -1.778e-19 -1.20000 -0.0006286737 0. 0. 0.0006286737 -1.10000 -0.0006087485 0. 0. 0.0006087485 -1.00000 -0.0005889532 0. 0. 0.0005889532 -0.9 -0.0005694351 0. 0. 0.0005694351 -0.8 -0.0005504943 0. 0. 0.0005504943 -0.7 -0.0005327449 0. 0. 0.0005327449 -0.6 -0.0005173538 0. 0. 0.0005173538 -0.5 -0.000505996 0. 0. 0.000505996 -0.4 -0.0004982585 0. 0. 0.0004982585 -0.3 -0.000473989 0. 0. 0.000473989 -0.2 -0.0003913932 0. 0. 0.0003913932 -0.1 -0.0002330507 0. 0. 0.0002330507 2.220446e-16 3.376e-19 0. 0. -3.376e-19 -1.20000 -0.0012234 0. 0. 0.0012234 -1.10000 -0.0011843 0. 0. 0.0011843 -1.00000 -0.0011467 0. 0. 0.0011467 -0.9 -0.0011119 0. 0. 0.0011119 -0.8 -0.0010814 0. 0. 0.0010814 -0.7 -0.0010572 0. 0. 0.0010572 -0.6 -0.0010386 0. 0. 0.0010386 -0.5 -0.0010091 0. 0. 0.0010091 -0.4 -0.0009359822 0. 0. 0.0009359822 -0.3 -0.0007982692 0. 0. 0.0007982692 -0.2 -0.0005928472 0. 0. 0.0005928472 -0.1 -0.0003247161 0. 0. 0.0003247161 2.220446e-16 5.701e-19 0. 0. -5.701e-19 -1.20000 -0.0018948 0. 0. 0.0018948 -1.10000 -0.0018403 0. 0. 0.0018403 -1.00000 -0.0017924 0. 0. 0.0017924 -0.9 -0.0017528 0. 0. 0.0017528 -0.8 -0.001719 0. 0. 0.001719 -0.7 -0.0016759 0. 0. 0.0016759 -0.6 -0.0015992 0. 0. 0.0015992 -0.5 -0.0014701 0. 0. 0.0014701 -0.4 -0.0012812 0. 0. 0.0012812 -0.3 -0.001034 0. 0. 0.001034 -0.2 -0.0007341587 0. 0. 0.0007341587 -0.1 -0.0003877887 0. 0. 0.0003877887 2.220446e-16 6.510e-19 0. 0. -6.510e-19 -1.20000 -0.0001203868 0. 0. 0.0001203868 -1.10000 -0.0001164174 0. 0. 0.0001164174 -1.00000 -0.000112551 0. 0. 0.000112551 -0.9 -0.0001088584 0. 0. 0.0001088584 -0.8 -0.0001054637 0. 0. 0.0001054637 -0.7 -0.0001025645 0. 0. 0.0001025645 -0.6 -0.0001004061 0. 0. 0.0001004061 -0.5 -9.91318e-05 0. 0. 9.91318e-05 -0.4 -9.84749e-05 0. 0. 9.84749e-05 -0.3 -9.66754e-05 0. 0. 9.66754e-05 -0.2 -8.65292e-05 0. 0. 8.65292e-05 -0.1 -5.65673e-05 0. 0. 5.65673e-05 2.220446e-16 2.065e-19 0. 0. -2.065e-19 -1.20000 -0.0001652812 0. 0. 0.0001652812 -1.10000 -0.0001599618 0. 0. 0.0001599618 -1.00000 -0.0001548378 0. 0. 0.0001548378 -0.9 -0.000150041 0. 0. 0.000150041 -0.8 -0.0001457808 0. 0. 0.0001457808 -0.7 -0.0001423417 0. 0. 0.0001423417 -0.6 -0.0001399854 0. 0. 0.0001399854 -0.5 -0.0001387102 0. 0. 0.0001387102 -0.4 -0.0001377293 0. 0. 0.0001377293 -0.3 -0.0001329891 0. 0. 0.0001329891 -0.2 -0.0001137722 0. 0. 0.0001137722 -0.1 -7.02882e-05 0. 0. 7.02882e-05 2.220446e-16 2.292e-19 0. 0. -2.292e-19 -1.20000 -0.0003124498 0. 0. 0.0003124498 -1.10000 -0.000303237 0. 0. 0.000303237 -1.00000 -0.000294894 0. 0. 0.000294894 -0.9 -0.0002877933 0. 0. 0.0002877933 -0.8 -0.0002823099 0. 0. 0.0002823099 -0.7 -0.0002786333 0. 0. 0.0002786333 -0.6 -0.0002764147 0. 0. 0.0002764147 -0.5 -0.0002734825 0. 0. 0.0002734825 -0.4 -0.0002625772 0. 0. 0.0002625772 -0.3 -0.0002337599 0. 0. 0.0002337599 -0.2 -0.0001809478 0. 0. 0.0001809478 -0.1 -0.0001019761 0. 0. 0.0001019761 2.220446e-16 2.822e-19 0. 0. -2.822e-19 -1.20000 -0.0005015496 0. 0. 0.0005015496 -1.10000 -0.0004897578 0. 0. 0.0004897578 -1.00000 -0.0004801662 0. 0. 0.0004801662 -0.9 -0.0004730256 0. 0. 0.0004730256 -0.8 -0.0004681091 0. 0. 0.0004681091 -0.7 -0.0004636639 0. 0. 0.0004636639 -0.6 -0.0004538016 0. 0. 0.0004538016 -0.5 -0.0004297424 0. 0. 0.0004297424 -0.4 -0.0003856836 0. 0. 0.0003856836 -0.3 -0.0003199071 0. 0. 0.0003199071 -0.2 -0.0002328851 0. 0. 0.0002328851 -0.1 -0.0001254565 0. 0. 0.0001254565 2.220446e-16 3.210e-19 0. 0. -3.210e-19 -1.20000 -0.000718041 0. 0. 0.000718041 -1.10000 -0.000706785 0. 0. 0.000706785 -1.00000 -0.00069831 0. 0. 0.00069831 -0.9 -0.000690921 0. 0. 0.000690921 -0.8 -0.0006794368 0. 0. 0.0006794368 -0.7 -0.0006563576 0. 0. 0.0006563576 -0.6 -0.0006161992 0. 0. 0.0006161992 -0.5 -0.0005567384 0. 0. 0.0005567384 -0.4 -0.0004780825 0. 0. 0.0004780825 -0.3 -0.0003815421 0. 0. 0.0003815421 -0.2 -0.000268767 0. 0. 0.000268767 -0.1 -0.0001411069 0. 0. 0.0001411069 2.220446e-16 4.611e-19 0. 0. -4.611e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_core_sw.standard0000644000175000017500000000441314163340332025337 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0013713 0. 0. 0.0013713 -1.10000 -0.0013194 0. 0. 0.0013194 -1.00000 -0.0012578 0. 0. 0.0012578 -0.9 -0.0011851 0. 0. 0.0011851 -0.8 -0.0010999 0. 0. 0.0010999 -0.7 -0.0010013 0. 0. 0.0010013 -0.6 -0.0008886178 0. 0. 0.0008886178 -0.5 -0.0007621547 0. 0. 0.0007621547 -0.4 -0.0006241273 0. 0. 0.0006241273 -0.3 -0.0004795077 0. 0. 0.0004795077 -0.2 -0.0003375275 0. 0. 0.0003375275 -1.20000 -0.014045 0. 0. 0.014045 -1.10000 -0.0123503 0. 0. 0.0123503 -1.00000 -0.0107055 0. 0. 0.0107055 -0.9 -0.0091224 0. 0. 0.0091224 -0.8 -0.0076089 0. 0. 0.0076089 -0.7 -0.006177 0. 0. 0.006177 -0.6 -0.0048454 0. 0. 0.0048454 -0.5 -0.0036405 0. 0. 0.0036405 -0.4 -0.0025935 0. 0. 0.0025935 -0.3 -0.0017346 0. 0. 0.0017346 -0.2 -0.0010848 0. 0. 0.0010848 -1.20000 -0.0021906 0. 0. 0.0021906 -1.10000 -0.0020941 0. 0. 0.0020941 -1.00000 -0.0019801 0. 0. 0.0019801 -0.9 -0.0018464 0. 0. 0.0018464 -0.8 -0.0016906 0. 0. 0.0016906 -0.7 -0.0015104 0. 0. 0.0015104 -0.6 -0.0013047 0. 0. 0.0013047 -0.5 -0.0010738 0. 0. 0.0010738 -0.4 -0.000821872 0. 0. 0.000821872 -0.3 -0.0005604604 0. 0. 0.0005604604 -0.2 -0.0003157569 0. 0. 0.0003157569 -1.20000 -0.0221359 0. 0. 0.0221359 -1.10000 -0.0193409 0. 0. 0.0193409 -1.00000 -0.0166223 0. 0. 0.0166223 -0.9 -0.0139946 0. 0. 0.0139946 -0.8 -0.0114732 0. 0. 0.0114732 -0.7 -0.0090866 0. 0. 0.0090866 -0.6 -0.0068782 0. 0. 0.0068782 -0.5 -0.0049037 0. 0. 0.0049037 -0.4 -0.0032248 0. 0. 0.0032248 -0.3 -0.0018984 0. 0. 0.0018984 -0.2 -0.0009611888 0. 0. 0.0009611888 -1.20000 -0.0007864039 0. 0. 0.0007864039 -1.10000 -0.000762823 0. 0. 0.000762823 -1.00000 -0.0007343364 0. 0. 0.0007343364 -0.9 -0.0007002033 0. 0. 0.0007002033 -0.8 -0.0006596952 0. 0. 0.0006596952 -0.7 -0.000612218 0. 0. 0.000612218 -0.6 -0.0005575017 0. 0. 0.0005575017 -0.5 -0.0004958785 0. 0. 0.0004958785 -0.4 -0.0004286602 0. 0. 0.0004286602 -0.3 -0.0003584739 0. 0. 0.0003584739 -0.2 -0.0002888558 0. 0. 0.0002888558 -1.20000 -0.0082143 0. 0. 0.0082143 -1.10000 -0.0072881 0. 0. 0.0072881 -1.00000 -0.0063862 0. 0. 0.0063862 -0.9 -0.005521 0. 0. 0.005521 -0.8 -0.0046994 0. 0. 0.0046994 -0.7 -0.0039275 0. 0. 0.0039275 -0.6 -0.003213 0. 0. 0.003213 -0.5 -0.0025655 0. 0. 0.0025655 -0.4 -0.0019965 0. 0. 0.0019965 -0.3 -0.0015105 0. 0. 0.0015105 -0.2 -0.0011028 0. 0. 0.0011028 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_ig_sw.standard0000644000175000017500000001662514163340332025042 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0071426 1.51714002947341e-14 7.56300014692604e-15 2.43250004725606e-15 -1 0.0064969 1.53785002987574e-14 7.59900014762541e-15 2.48900004835368e-15 -0.8 0.0058843 1.56094003032431e-14 7.63440014831312e-15 2.56380004980682e-15 -0.6 0.0053232 1.58738003083795e-14 7.66960014899695e-15 2.66580005178837e-15 -0.4 0.0048988 1.61778003142853e-14 7.70740014973129e-15 2.7989000543741e-15 -0.2 0.0044079 1.67374003251567e-14 7.69660014952148e-15 3.37660006559705e-15 -5.55111512312578e-17 0. 1.87930003650907e-14 6.96740013535534e-15 6.96740013535534e-15 0.2 -0.0048839 1.93325003755715e-14 6.54830012721351e-15 9.02980017542149e-15 -1.2 0.01225 1.5272700296702e-14 8.89440017279108e-15 2.68340005213028e-15 -1 0.0113129 1.54949003010187e-14 8.98530017455699e-15 2.7701000538146e-15 -0.8 0.0104692 1.57524003060211e-14 9.07920017638118e-15 2.88770005609921e-15 -0.6 0.0098587 1.6044000311686e-14 9.17720017828502e-15 3.03410005894331e-15 -0.4 0.0094955 1.64120003188351e-14 9.27720018022772e-15 3.29080006393021e-15 -0.2 0.0058124 1.82767003550606e-14 8.7052001691155e-15 6.16130011969528e-15 -5.55111512312578e-17 0. 1.94502003778581e-14 8.06480015667448e-15 8.06480015667448e-15 0.2 -0.004161 1.94815003784662e-14 8.01600015572644e-15 8.71440016929423e-15 -1.2 0.0152653 1.5328500297786e-14 9.30000018067065e-15 2.96040005751155e-15 -1 0.0143276 1.55867003028021e-14 9.40250018266191e-15 3.09240006007591e-15 -0.8 0.0137258 1.58692003082902e-14 9.50900018473088e-15 3.24470006303463e-15 -0.6 0.0134317 1.61940003146001e-14 9.62190018692419e-15 3.45440006710846e-15 -0.4 0.0104495 1.76304003425049e-14 9.41460018289698e-15 5.33950010373021e-15 -0.2 0.0046435 1.90898003708566e-14 8.51630016544575e-15 7.91010015366913e-15 -5.55111512312578e-17 0. 1.96241003812364e-14 8.44360016403341e-15 8.44360016403341e-15 0.2 -0.0029496 1.9504500378913e-14 8.82680017147782e-15 8.36560016251811e-15 -1.2 0.0166163 1.53714002986194e-14 9.37340018209659e-15 3.28320006378257e-15 -1 0.0161526 1.56397003038317e-14 9.47650018409951e-15 3.43460006672381e-15 -0.8 0.0159128 1.59588003100308e-14 9.58640018623453e-15 3.64840007087729e-15 -0.6 0.013329 1.71062003323213e-14 9.5163001848727e-15 5.00410009721441e-15 -0.4 0.008021 1.85149003596881e-14 8.89450017279302e-15 7.21420014014992e-15 -0.2 0.0032513 1.92757003744681e-14 8.18250015896103e-15 8.7504001699936e-15 -5.55111512312578e-17 0. 1.95582003799562e-14 8.57520016659e-15 8.57520016659e-15 0.2 -0.0019274 1.93994003768712e-14 9.3069001808047e-15 8.02700015594014e-15 -1.2 0.0103817 1.4941200290262e-14 7.67790014915819e-15 2.42980004720361e-15 -1 0.0093709 1.5120900293753e-14 7.70120014961084e-15 2.48700004831483e-15 -0.8 0.0084109 1.53221002976617e-14 7.72220015001881e-15 2.56250004978156e-15 -0.6 0.0075064 1.55544003021746e-14 7.74120015038792e-15 2.66520005177671e-15 -0.4 0.0066907 1.58220003073732e-14 7.76030015075897e-15 2.79670005433136e-15 -0.2 0.0061208 1.61117003130012e-14 7.79430015141949e-15 2.95050005731922e-15 -5.55111512312578e-17 0. 1.84008003574715e-14 6.74730013107947e-15 6.74730013107947e-15 0.2 -0.00923 1.91967003729334e-14 5.97420011606049e-15 9.15720017789648e-15 -1.2 0.0199463 1.53343002978987e-14 9.07430017628599e-15 2.66590005179031e-15 -1 0.0183699 1.55522003021318e-14 9.16580017806356e-15 2.75200005346297e-15 -0.8 0.0168734 1.5804900307041e-14 9.26010017989552e-15 2.86890005573398e-15 -0.6 0.0155676 1.60901003125816e-14 9.35830018180324e-15 3.01290005853146e-15 -0.4 0.0147817 1.63625003178735e-14 9.46800018393438e-15 3.13990006099869e-15 -0.2 0.0102669 1.8139900352403e-14 9.08430017648026e-15 5.69720011067923e-15 -5.55111512312578e-17 0. 1.95835003804477e-14 8.17490015881339e-15 8.17490015881339e-15 0.2 -0.0076966 1.96065003808945e-14 7.87680015302221e-15 8.81290017120778e-15 -1.2 0.0256751 1.54212002995869e-14 9.43440018328163e-15 2.94030005712107e-15 -1 0.023884 1.56783003045816e-14 9.53800018529427e-15 3.07140005966794e-15 -0.8 0.0224536 1.59583003100211e-14 9.6456001873846e-15 3.22100006257421e-15 -0.6 0.0216996 1.62217003151382e-14 9.76380018968087e-15 3.35150006510943e-15 -0.4 0.018083 1.75041003400513e-14 9.69750018839286e-15 4.89080009501334e-15 -0.2 0.0082933 1.92382003737396e-14 8.71440016929423e-15 7.87160015292119e-15 -5.55111512312578e-17 0. 1.97978003846109e-14 8.55620016622088e-15 8.55620016622088e-15 0.2 -0.0053784 1.96663003820563e-14 8.76870017034911e-15 8.38700016293384e-15 -1.2 0.0280143 1.54561003002649e-14 9.46900018395381e-15 3.26230006337654e-15 -1 0.0267506 1.57224003054383e-14 9.57290018597227e-15 3.4107000662595e-15 -0.8 0.0261171 1.59956003107457e-14 9.68900018822774e-15 3.56450006924737e-15 -0.6 0.0227869 1.70338003309148e-14 9.70090018845892e-15 4.69840009127559e-15 -0.4 0.0141843 1.85973003612888e-14 9.08180017643169e-15 7.06810013731164e-15 -0.2 0.0058465 1.94392003776444e-14 8.28810016101252e-15 8.78360017063857e-15 -5.55111512312578e-17 0. 1.97110003829246e-14 8.65100016806256e-15 8.65100016806256e-15 0.2 -0.0035108 1.95457003797134e-14 9.25110017972067e-15 7.99780015537287e-15 -1.2 0.0044396 1.54433003000162e-14 7.48590014542822e-15 2.43280004726189e-15 -1 0.0040856 1.56733003044844e-14 7.5477001466288e-15 2.4888000483498e-15 -0.8 0.0037666 1.5928800309448e-14 7.61110014786047e-15 2.56330004979711e-15 -0.6 0.0035281 1.62204003151129e-14 7.67720014914459e-15 2.66650005180197e-15 -0.4 0.0033975 1.6574500321992e-14 7.74770015051419e-15 2.84140005519974e-15 -0.2 0.0026075 1.75843003416093e-14 7.63370014829952e-15 4.39680008541642e-15 -5.55111512312578e-17 0. 1.91279003715968e-14 7.22510014036167e-15 7.22510014036167e-15 0.2 -0.0022677 1.94303003774715e-14 6.95610013513582e-15 8.76140017020729e-15 -1.2 0.0065425 1.52293002958589e-14 8.6251001675594e-15 2.7017000524858e-15 -1 0.0061002 1.54598003003368e-14 8.71530016931171e-15 2.78910005418371e-15 -0.8 0.0057796 1.57268003055238e-14 8.8085001711223e-15 2.90840005650135e-15 -0.6 0.005635 1.60387003115831e-14 8.90580017301255e-15 3.07140005966794e-15 -0.4 0.0052137 1.66848003241348e-14 8.93090017350016e-15 3.77740007338337e-15 -0.2 0.0028171 1.8331800356131e-14 8.31020016144185e-15 6.51390012654522e-15 -5.55111512312578e-17 0. 1.92365003737066e-14 8.07910015695229e-15 8.07910015695229e-15 0.2 -0.0019443 1.9284600374641e-14 8.10160015738939e-15 8.57230016653366e-15 -1.2 0.0080376 1.52054002953946e-14 9.09590017670561e-15 2.98420005797391e-15 -1 0.0077215 1.5466500300467e-14 9.19720017867356e-15 3.11810006057518e-15 -0.8 0.0076128 1.57601003061707e-14 9.30230018071533e-15 3.2828000637748e-15 -0.6 0.0073329 1.62477003156433e-14 9.38310018228503e-15 3.72920007244699e-15 -0.4 0.0052106 1.76847003435598e-14 9.03540017553028e-15 5.78330011235189e-15 -0.2 0.0022195 1.88687003665613e-14 8.26890016063952e-15 7.88890015325728e-15 -5.55111512312578e-17 0. 1.93466003758455e-14 8.4499001641558e-15 8.4499001641558e-15 0.2 -0.0013761 1.92678003743146e-14 8.80890017113007e-15 8.27930016084156e-15 -1.2 0.0088874 1.52490002962416e-14 9.22790017926997e-15 3.30970006429738e-15 -1 0.0088496 1.55263003016287e-14 9.32980018124957e-15 3.4723000674562e-15 -0.8 0.0086344 1.59507003098735e-14 9.41920018298634e-15 3.83420007448682e-15 -0.6 0.0068015 1.71453003330809e-14 9.24790017965851e-15 5.37140010434993e-15 -0.4 0.0039453 1.83476003564379e-14 8.66480016833065e-15 7.31790014216449e-15 -0.2 0.001544 1.90362003698153e-14 8.04390015626846e-15 8.66980016842779e-15 -5.55111512312578e-17 0. 1.93187003753035e-14 8.57940016667159e-15 8.57940016667159e-15 0.2 -0.0008878741 1.91821003726497e-14 9.26730018003539e-15 7.97810015499016e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_core_lw.standard0000644000175000017500000000632214163340332025216 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.33884702600972e-13 5.99314011642844e-14 5.99314011642844e-14 -0.8 0. 1.34576302614407e-13 5.98145011620134e-14 5.98145011620134e-14 -0.4 0. 1.24034102409604e-13 5.36660010425668e-14 5.36660010425668e-14 1.11022302462516e-16 0. 3.32923006467679e-14 2.88750005609532e-15 2.88750005609532e-15 0.4 0. 3.68296007154869e-14 1.27780002482376e-15 1.27780002482376e-15 0.8 0. 4.98347009681363e-14 4.29334808340666e-16 4.29334808340666e-16 1.2 0. 1.01124301964537e-13 -2.24730004365819e-15 -2.24730004365819e-15 -1.2 0.0017094 9.46040018378673e-14 6.48332012595114e-14 1.39859002717034e-14 -0.8 0.0014146 9.24749017965054e-14 6.54903012722769e-14 9.89780019228408e-15 -0.4 0.0007909036 8.43537016387353e-14 5.8075401128228e-14 7.30170014184977e-15 1.11022302462516e-16 7.7065e-06 3.07940005982336e-14 -9.15991217794917e-16 5.60960010897743e-15 0.4 2.377686e-10 3.45019006702667e-14 -2.7071000525907e-15 4.86420009449658e-15 0.8 1.54321e-14 4.64296009019856e-14 -3.31010006430515e-15 3.89610007568935e-15 1.2 9.9461e-18 9.19084017855001e-14 -6.55100012726596e-15 2.00850003901903e-15 -1.2 0. 1.35360602629644e-13 6.02890011712315e-14 6.02890011712315e-14 -0.8 0. 1.36746702656572e-13 6.05248011758124e-14 6.05248011758124e-14 -0.4 0. 1.2664830246039e-13 5.46684010620404e-14 5.46684010620404e-14 1.11022302462516e-16 0. 3.11224006046134e-14 1.85930003612053e-15 1.85930003612053e-15 0.4 0. 3.60814007009516e-14 1.22760002384853e-15 1.22760002384853e-15 0.8 0. 4.781450092889e-14 4.08703207939857e-16 4.08703207939857e-16 1.2 0. 9.98197019391925e-14 -2.4511000476174e-15 -2.4511000476174e-15 -1.2 0.0028026 9.5091401847336e-14 6.55605012736407e-14 1.32521002574479e-14 -0.8 0.0023308 9.38997018241849e-14 6.66459012947267e-14 9.72980018902036e-15 -0.4 0.0012062 8.62278016751433e-14 5.98180011620814e-14 7.14420013879003e-15 1.11022302462516e-16 7.826264e-07 2.90948005652233e-14 -2.51720004890152e-15 5.66370011002843e-15 0.4 5.527851e-13 3.38181006569826e-14 -2.84900005534739e-15 4.91730009552815e-15 0.8 1.0183e-18 4.46208008668461e-14 -3.41760006639355e-15 3.97530007722796e-15 1.2 3.318e-23 9.05602017593086e-14 -7.09240013778371e-15 2.21110004295493e-15 -1.2 0. 1.31650402557566e-13 5.93933011538308e-14 5.93933011538308e-14 -0.8 0. 1.31327302551289e-13 5.87476011412868e-14 5.87476011412868e-14 -0.4 0. 1.20146602334082e-13 5.21613010133351e-14 5.21613010133351e-14 1.11022302462516e-16 0. 4.49723008736747e-14 9.20960017891445e-15 9.20960017891445e-15 0.4 0. 3.8148600741111e-14 1.36540002652556e-15 1.36540002652556e-15 0.8 0. 5.35254010398354e-14 4.65100909035493e-16 4.65100909035493e-16 1.2 0. 1.01324501968426e-13 -1.82140003538425e-15 -1.82140003538425e-15 -1.2 0.0009328494 9.42266018305356e-14 6.36586012366925e-14 1.5565800302396e-14 -0.8 0.0007884919 9.03032017543159e-14 6.37554012385731e-14 1.00995001962025e-14 -0.4 0.0004646399 8.16339015858978e-14 5.55683010795227e-14 7.48160014534468e-15 1.11022302462516e-16 3.11882e-05 3.78021007343796e-14 6.49560012618971e-15 5.52190010727368e-15 0.4 2.78488e-08 3.57052006936432e-14 -2.46490004788549e-15 4.77690009280061e-15 0.8 3.65763e-11 4.96966009654534e-14 -3.12390006068785e-15 3.76000007304534e-15 1.2 2.570672e-13 9.22817017927521e-14 -5.48490010655489e-15 1.69290003288789e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_core_sw.standard0000644000175000017500000000626514163340332025233 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 1.90476003700368e-14 8.58910016686003e-15 8.58910016686003e-15 -0.8 0. 1.89262003676784e-14 8.46360016442195e-15 8.46360016442195e-15 -0.4 0. 1.62893003164514e-14 6.96320013527375e-15 6.96320013527375e-15 1.11022302462516e-16 0. 9.37120018205385e-15 2.88760005609727e-15 2.88760005609727e-15 0.4 0. 9.58870018627921e-15 2.55830004969997e-15 2.55830004969997e-15 0.8 0. 1.0997300213644e-14 2.26180004393988e-15 2.26180004393988e-15 1.2 0. 1.60495003117929e-14 1.80740003511227e-15 1.80740003511227e-15 -1.2 0.0165776 1.50867002930886e-14 9.3521001816828e-15 3.68110007151255e-15 -0.8 0.0132999 1.47713002869613e-14 9.33510018135254e-15 3.22450006264221e-15 -0.4 0.0056492 1.33394002591439e-14 8.05240015643359e-15 2.81130005461499e-15 1.11022302462516e-16 9.1349e-06 8.59730016701933e-15 2.48230004822352e-15 2.79390005427696e-15 0.4 4.598343e-10 8.86920017230152e-15 2.20840004290248e-15 2.59250005036437e-15 0.8 5.52362e-14 1.00029001943259e-14 2.01190003908508e-15 2.35040004566111e-15 1.2 6.47884e-17 1.41212002743319e-14 1.71650003334636e-15 1.87860003649547e-15 -1.2 0. 1.92019003730344e-14 8.6300001676546e-15 8.6300001676546e-15 -0.8 0. 1.91790003725895e-14 8.55700016623643e-15 8.55700016623643e-15 -0.4 0. 1.63566003177589e-14 6.97460013549522e-15 6.97460013549522e-15 1.11022302462516e-16 0. 9.30050018068036e-15 2.88030005595545e-15 2.88030005595545e-15 0.4 0. 9.46700018391495e-15 2.55430004962226e-15 2.55430004962226e-15 0.8 0. 1.06695002072759e-14 2.26750004405061e-15 2.26750004405061e-15 1.2 0. 1.59971003107749e-14 1.77950003457026e-15 1.77950003457026e-15 -1.2 0.0272268 1.51765002948331e-14 9.42530018310485e-15 3.65410007098802e-15 -0.8 0.0220707 1.49251002899492e-14 9.47410018405288e-15 3.20210006220704e-15 -0.4 0.008243 1.35324002628933e-14 8.25430016035589e-15 2.78900005418177e-15 1.11022302462516e-16 5.976274e-07 8.52680016564973e-15 2.44630004752415e-15 2.80240005444209e-15 0.4 8.382037e-13 8.77400017045208e-15 2.18990004254308e-15 2.60360005058001e-15 0.8 3.4291e-18 9.77110018982269e-15 1.99630003878202e-15 2.37180004607684e-15 1.2 2.299e-22 1.38719002694887e-14 1.66590003236336e-15 1.91370003717736e-15 -1.2 0. 1.88072003653666e-14 8.52320016557979e-15 8.52320016557979e-15 -0.8 0. 1.85382003601407e-14 8.31660016156618e-15 8.31660016156618e-15 -0.4 0. 1.60117003110585e-14 6.84750013302605e-15 6.84750013302605e-15 1.11022302462516e-16 0. 9.5505001855371e-15 2.93380005699479e-15 2.93380005699479e-15 0.4 0. 9.807200190524e-15 2.56460004982236e-15 2.56460004982236e-15 0.8 0. 1.15775002249155e-14 2.25320004377281e-15 2.25320004377281e-15 1.2 0. 1.60250003113169e-14 1.85920003611859e-15 1.85920003611859e-15 -1.2 0.0091527 1.49559002905475e-14 9.23790017946424e-15 3.73020007246642e-15 -0.8 0.0072337 1.45315002823027e-14 9.11890017715243e-15 3.25270006319005e-15 -0.4 0.0034398 1.30481002534848e-14 7.74500015046174e-15 2.839200055157e-15 1.11022302462516e-16 6.23202e-05 8.82880017151667e-15 2.67880005204092e-15 2.77270005386511e-15 0.4 6.71214e-08 9.03760017557302e-15 2.23940004350472e-15 2.57370004999915e-15 0.8 1.401813e-10 1.04210002024483e-14 2.03960003962321e-15 2.31250004492483e-15 1.2 1.5712e-12 1.42948002777044e-14 1.82130003538231e-15 1.83460003564069e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_core_lw.standard0000644000175000017500000001707114163340332025360 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0008228608 9.70859018860831e-14 5.15065010006143e-14 5.70890011090652e-15 -1 0.0007720582 9.85490019145067e-14 5.27201010241908e-14 5.84700011358939e-15 -0.8 0.0007239191 1.00062501943909e-13 5.39701010484745e-14 5.99650011649372e-15 -0.6 0.0006869176 1.01635001974458e-13 5.5269401073716e-14 6.15230011952044e-15 -0.4 0.0006771427 1.03342702007634e-13 5.66640011008088e-14 6.37000012374968e-15 -0.2 0.0005451315 1.15082802235708e-13 5.51592010715751e-14 2.29030004449355e-14 -5.55111512312578e-17 0. 1.33811802599555e-13 5.18335010069669e-14 5.18335010069669e-14 0.2 -0.0004528942 1.35971002641502e-13 5.12538009957051e-14 5.95917011576851e-14 -1.2 0.0012849 9.79244019023726e-14 6.20885012061903e-14 7.46140014495226e-15 -1 0.0012073 9.93155019293974e-14 6.32116012280087e-14 7.66180014884542e-15 -0.8 0.001152 1.00767501957605e-13 6.43702012505168e-14 7.8866001532126e-15 -0.6 0.0011388 1.02341101988176e-13 6.55823012740642e-14 8.1925001591553e-15 -0.4 0.0010523 1.10026802137485e-13 6.5746701277258e-14 1.70186003306195e-14 -0.2 0.0005145521 1.30503102535277e-13 5.71761011107573e-14 4.95905009633923e-14 -5.55111512312578e-17 0. 1.38666202693862e-13 5.79074011249643e-14 5.79074011249643e-14 0.2 -0.0003451857 1.37879202678573e-13 6.26909012178931e-14 5.61223010902852e-14 -1.2 0.0015289 9.77088018981841e-14 6.50265012632667e-14 9.13280017742246e-15 -1 0.0014727 9.90586019244066e-14 6.60560012832667e-14 9.41050018281733e-15 -0.8 0.0014657 1.00541701953219e-13 6.71228013039914e-14 9.7969001903239e-15 -0.6 0.0013943 1.06712002073089e-13 6.76701013146238e-14 1.61219003131994e-14 -0.4 0.0009032802 1.24756902423646e-13 6.2174501207861e-14 4.21237008183351e-14 -0.2 0.0003729172 1.35506802632484e-13 5.41688010523347e-14 6.19402012033093e-14 -5.55111512312578e-17 0. 1.39293702706052e-13 5.98489011626817e-14 5.98489011626817e-14 0.2 -0.0002349946 1.37787302676787e-13 6.88698013379303e-14 5.25359010206124e-14 -1.2 0.0016598 9.68415018813351e-14 6.5251001267628e-14 1.07679002091875e-14 -1 0.0016645 9.82829019093372e-14 6.62033012861283e-14 1.12475002185046e-14 -0.8 0.0015913 1.04049402021363e-13 6.67831012973921e-14 1.69194003286924e-14 -0.6 0.0011533 1.19156002314838e-13 6.33078012298776e-14 3.70735007202251e-14 -0.4 0.0006407328 1.30500102535219e-13 5.65127010978695e-14 5.63211010941473e-14 -0.2 0.0002523754 1.36119202644381e-13 5.07161009852592e-14 6.80907013227947e-14 -5.55111512312578e-17 0. 1.38162402684074e-13 6.04017011734209e-14 6.04017011734209e-14 0.2 -0.0001528556 1.36516902652107e-13 7.25584014095885e-14 4.91112009540809e-14 -1.2 0.0012265 9.55862018569485e-14 5.23050010161267e-14 5.52970010742522e-15 -1 0.0011524 9.70551018854847e-14 5.35250010398276e-14 5.66180010999152e-15 -0.8 0.0010785 9.85739019149904e-14 5.47809010642259e-14 5.80490011277151e-15 -0.6 0.0010081 1.00149701945603e-13 5.60852010895645e-14 5.95280011564476e-15 -0.4 0.0009601056 1.01784201977357e-13 5.74885011168263e-14 6.05520011763408e-15 -0.2 0.0008929165 1.07839102094985e-13 5.83380011333295e-14 1.2559100243985e-14 -5.55111512312578e-17 0. 1.3354490259437e-13 5.06514009840023e-14 5.06514009840023e-14 0.2 -0.0008574305 1.36199402645939e-13 4.78974009305005e-14 6.13018011909071e-14 -1.2 0.0021152 9.87908019192041e-14 6.35726012350218e-14 7.28450014151563e-15 -1 0.0019777 1.0017940194618e-13 6.46925012567781e-14 7.47850014528446e-15 -0.8 0.0018548 1.01627501974313e-13 6.58481012792279e-14 7.69500014949039e-15 -0.6 0.0017804 1.03141102003717e-13 6.70586013027442e-14 7.92270015391391e-15 -0.4 0.0017388 1.07023302079136e-13 6.81987013248929e-14 1.10696002150486e-14 -0.2 0.0009308765 1.30948702543934e-13 6.00257011661164e-14 4.73088009190658e-14 -5.55111512312578e-17 0. 1.40534702730161e-13 5.8619801138804e-14 5.8619801138804e-14 0.2 -0.0006417794 1.39606702712133e-13 6.20328012051082e-14 5.71235011097355e-14 -1.2 0.002578 9.87786019189671e-14 6.62084012862274e-14 8.95140017389842e-15 -1 0.0024348 1.00122301945071e-13 6.72346013061633e-14 9.22050017912621e-15 -0.8 0.0023641 1.01534801972512e-13 6.82992013268453e-14 9.52250018499315e-15 -0.6 0.0023225 1.05293702045536e-13 6.93433013471289e-14 1.25195002432157e-14 -0.4 0.0016115 1.24540702419446e-13 6.48284012594182e-14 3.87075007519687e-14 -0.2 0.0006783552 1.37269902666736e-13 5.56849010817879e-14 6.19471012034433e-14 -5.55111512312578e-17 0. 1.4113640274185e-13 6.06377011780057e-14 6.06377011780057e-14 0.2 -0.0004346321 1.39542402710883e-13 6.87282013351794e-14 5.29951010295333e-14 -1.2 0.0027685 9.78025019000044e-14 6.61335012847723e-14 1.05783002055041e-14 -1 0.0027203 9.91518019262172e-14 6.70856013032687e-14 1.09506002127368e-14 -0.8 0.0026623 1.03336802007519e-13 6.80104013212348e-14 1.44705002811177e-14 -0.6 0.0020354 1.18672702305449e-13 6.53851012702332e-14 3.38544006576878e-14 -0.4 0.0011546 1.31723902558994e-13 5.80187011271265e-14 5.54824010778539e-14 -0.2 0.0004627802 1.37811402677255e-13 5.15829010020985e-14 6.84485013297457e-14 -5.55111512312578e-17 0. 1.39730702714542e-13 6.09067011832315e-14 6.09067011832315e-14 0.2 -0.0002836698 1.38060202682089e-13 7.25082014086133e-14 4.92881009575175e-14 -1.2 0.0004914207 9.8628701916055e-14 5.09008009888474e-14 5.90960011480551e-15 -1 0.0004633207 1.00114801944925e-13 5.20931010120101e-14 6.05600011764962e-15 -0.8 0.000443631 1.01652801974804e-13 5.332180103588e-14 6.21550012074822e-15 -0.6 0.0004380859 1.03268802006198e-13 5.46007010607252e-14 6.41110012454813e-15 -0.4 0.0004322643 1.06028902059818e-13 5.57975010839753e-14 8.45800016431316e-15 -0.2 0.0002806915 1.20724602345311e-13 5.2742601024628e-14 3.32165006452953e-14 -5.55111512312578e-17 0. 1.33508502593663e-13 5.25718010213098e-14 5.25718010213098e-14 0.2 -0.0002064818 1.35055502623717e-13 5.36942010431146e-14 5.71897011110215e-14 -1.2 0.0006844192 9.69445018833361e-14 5.99132011639309e-14 7.67330014906883e-15 -1 0.0006588951 9.83402019104503e-14 6.10409011858386e-14 7.88330015314849e-15 -0.8 0.0006528496 9.98112019390274e-14 6.22039012084322e-14 8.13660015806934e-15 -0.6 0.0006537795 1.019460019805e-13 6.3345401230608e-14 9.23850017947589e-15 -0.4 0.0005317185 1.13792102210634e-13 6.15681011960805e-14 2.53807004930696e-14 -0.2 0.0002425544 1.29176402509504e-13 5.42784010544639e-14 5.13876009983044e-14 -5.55111512312578e-17 0. 1.35718702636601e-13 5.79029011248768e-14 5.79029011248768e-14 0.2 -0.000159266 1.35313902628737e-13 6.28781012215298e-14 5.46783010622327e-14 -1.2 0.000817825 9.62219018692982e-14 6.32877012294871e-14 9.35300018170028e-15 -1 0.0008148 9.75941018959559e-14 6.4324401249627e-14 9.6580001876255e-15 -0.8 0.000820484 9.95145019332634e-14 6.5357601269699e-14 1.06087002060947e-14 -0.6 0.0007173167 1.08957102116704e-13 6.47332012575687e-14 2.21131004295901e-14 -0.4 0.0004354983 1.23987602408701e-13 5.90014011462173e-14 4.50497008751783e-14 -0.2 0.0001735457 1.3293750258257e-13 5.23260010165347e-14 6.15345011954278e-14 -5.55111512312578e-17 0. 1.36401602649867e-13 5.99413011644767e-14 5.99413011644767e-14 0.2 -0.0001079743 1.35212202626761e-13 6.84708013301789e-14 5.16359010031281e-14 -1.2 0.0009098637 9.54496018542948e-14 6.39519012423905e-14 1.10186002140578e-14 -1 0.0009199203 9.73006018902541e-14 6.48763012603487e-14 1.20030002331817e-14 -0.8 0.000826596 1.05342702046488e-13 6.46964012568538e-14 2.11389004106644e-14 -0.6 0.0005662899 1.18898302309832e-13 6.06891011790042e-14 4.03140007831781e-14 -0.4 0.0003063146 1.28443402495264e-13 5.46976010626076e-14 5.68127011036976e-14 -0.2 0.0001162591 1.33658602596579e-13 4.96435009644219e-14 6.73873013091298e-14 -5.55111512312578e-17 0. 1.35744202637096e-13 6.05285011758842e-14 6.05285011758842e-14 0.2 -6.9126e-05 1.34233002607738e-13 7.20574013998556e-14 4.85452009430853e-14 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvgb_core_lt.standard0000644000175000017500000000634514163340332025362 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.73910013092017e-15 2.95410005738916e-15 2.95410005738916e-15 -0.8 0. 6.84990013307268e-15 2.92980005691708e-15 2.92980005691708e-15 -0.4 0. 6.74490013103285e-15 2.7256000529501e-15 2.7256000529501e-15 1.11022302462516e-16 0. 6.17860012003136e-15 1.43850002794567e-15 1.43850002794567e-15 0.4 0. 6.73390013081915e-15 -2.86651005568755e-16 -2.86651005568755e-16 0.8 0. 7.41350014402171e-15 -3.73244007250993e-16 -3.73244007250993e-16 1.2 0. 7.67110014902609e-15 -3.29673206404545e-16 -3.29673206404545e-16 -1.2 8.44558e-05 4.91780009553786e-15 3.19810006212933e-15 7.36619914310279e-16 -0.8 7.44142e-05 4.88490009489872e-15 3.22890006272768e-15 4.76710109261024e-16 -0.4 5.21598e-05 4.88820009496283e-15 2.91280005658682e-15 3.39311806591794e-16 1.11022302462516e-16 1.42097e-05 4.99710009707842e-15 9.71759518878325e-16 1.92309003735978e-16 0.4 1.0353e-06 6.23810012118727e-15 -7.00211213602969e-16 2.6469000514212e-17 0.8 1.305834e-07 6.94980013501343e-15 -4.8464370941515e-16 -1.6055480311909e-16 1.2 3.34819e-08 7.2062001399945e-15 -2.58550305022844e-16 -3.51871006835781e-16 -1.2 0. 6.8064001322276e-15 2.96970005769222e-15 2.96970005769222e-15 -0.8 0. 6.93930013480945e-15 2.96870005767279e-15 2.96870005767279e-15 -0.4 0. 6.81780013244907e-15 2.74290005328619e-15 2.74290005328619e-15 1.11022302462516e-16 0. 5.39200010475012e-15 8.03448215608549e-16 8.03448215608549e-16 0.4 0. 6.98030013560595e-15 -3.07148905966967e-16 -3.07148905966967e-16 0.8 0. 7.60100014766426e-15 -2.89176405617816e-16 -2.89176405617816e-16 1.2 0. 7.79220015137869e-15 -2.96486405759827e-16 -2.96486405759827e-16 -1.2 0.0001403251 4.91950009557089e-15 3.23980006293944e-15 6.75276413118562e-16 -0.8 0.0001232767 4.9371000959128e-15 3.28520006382142e-15 4.6769820908595e-16 -0.4 8.38672e-05 4.90620009531251e-15 2.9870000580283e-15 3.30777506425998e-16 1.11022302462516e-16 1.17076e-05 4.47690008697252e-15 4.33841708428222e-16 1.88777603667373e-16 0.4 1.519638e-07 6.51280012652385e-15 -5.97773111612909e-16 3.55701006910186e-17 0.8 1.20258e-08 7.12980013851028e-15 -4.31133408375608e-16 -1.53713502986185e-16 1.2 2.8124e-09 7.32490014230048e-15 -2.62729205104028e-16 -3.45477706711579e-16 -1.2 0. 6.63620012892114e-15 2.95880005748046e-15 2.95880005748046e-15 -0.8 0. 6.71010013035679e-15 2.93320005698313e-15 2.93320005698313e-15 -0.4 0. 6.62830012876766e-15 2.72710005297924e-15 2.72710005297924e-15 1.11022302462516e-16 0. 6.47050012570209e-15 1.9309000375115e-15 1.9309000375115e-15 0.4 0. 6.83100013270551e-15 6.97141513543334e-16 6.97141513543334e-16 0.8 0. 7.22660014039081e-15 -6.62351012867461e-17 -6.62351012867461e-17 1.2 0. 7.49060014551952e-15 -3.01134005850116e-16 -3.01134005850116e-16 -1.2 4.46922e-05 4.93980009596526e-15 3.12830006077333e-15 8.64363516791948e-16 -0.8 4.10532e-05 4.81240009349026e-15 3.14590006111525e-15 4.88790809495715e-16 -0.4 2.84516e-05 4.88120009482684e-15 2.80390005447123e-15 3.49416706788101e-16 1.11022302462516e-16 1.27747e-05 5.25110010201287e-15 1.57780003065184e-15 1.97591503838601e-16 0.4 2.4143e-06 6.08890011828877e-15 9.80572019049525e-17 1.9282800374606e-17 0.8 5.653298e-07 6.70110013018195e-15 -3.80188207385898e-16 -1.71527203332251e-16 1.2 1.856692e-07 7.01750013632863e-15 -2.77224405385625e-16 -3.6281810704845e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_ig_sw.standard0000644000175000017500000000576314163340332025017 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0011089 -2511.8 2511.8 0.0011089 -1.10000 -0.0010398 -2247.3 2247.3 0.0010398 -1.00000 -0.0009595013 -1982.8 1982.8 0.0009595013 -0.9 -0.0008666057 -1718.3 1718.3 0.0008666057 -0.8 -0.0007598917 -1453.8 1453.8 0.0007598917 -0.7 -0.0006385718 -1189.4 1189.4 0.0006385718 -0.6 -0.0005029373 -924.9807 924.9807 0.0005029373 -0.5 -0.0003557751 -660.6066 660.6066 0.0003557751 -0.4 -0.000205919 -396.2943 396.2943 0.000205919 -0.3 -7.75869e-05 -132.0721 132.0721 7.75869e-05 -0.2 -1.28874e-05 132.0504 -132.0504 1.28874e-05 -1.20000 -0.0112498 -2511.4 2511.4 0.0112498 -1.10000 -0.0095971 -2246.9 2246.9 0.0095971 -1.00000 -0.0080104 -1982.5 1982.5 0.0080104 -0.9 -0.0064999 -1718 1718 0.0064999 -0.8 -0.0050782 -1453.6 1453.6 0.0050782 -0.7 -0.0037668 -1189.2 1189.2 0.0037668 -0.6 -0.0025971 -924.8887 924.8887 0.0025971 -0.5 -0.0016093 -660.5668 660.5668 0.0016093 -0.4 -0.0008455477 -396.2921 396.2921 0.0008455477 -0.3 -0.000337812 -132.0789 132.0789 0.000337812 -0.2 -8.34276e-05 132.0594 -132.0594 8.34276e-05 -1.20000 -0.0017938 -1867 1867 0.0017938 -1.10000 -0.0016742 -1670.4 1670.4 0.0016742 -1.00000 -0.0015356 -1473.8 1473.8 0.0015356 -0.9 -0.0013757 -1277.2 1277.2 0.0013757 -0.8 -0.0011925 -1080.6 1080.6 0.0011925 -0.7 -0.0009843387 -883.9801 883.9801 0.0009843387 -0.6 -0.0007516406 -687.4282 687.4282 0.0007516406 -0.5 -0.0004992367 -490.9186 490.9186 0.0004992367 -0.4 -0.0002453974 -294.4756 294.4756 0.0002453974 -0.3 -5.37393e-05 -98.1328 98.1328 5.37393e-05 -0.2 -2.7177e-06 98.1159 -98.1159 2.7177e-06 -1.20000 -0.0180182 -1866.6 1866.6 0.0180182 -1.10000 -0.015302 -1670 1670 0.015302 -1.00000 -0.0126847 -1473.5 1473.5 0.0126847 -0.9 -0.0101835 -1276.9 1276.9 0.0101835 -0.8 -0.0078264 -1080.4 1080.4 0.0078264 -0.7 -0.0056597 -883.8382 883.8382 0.0056597 -0.6 -0.0037483 -687.3459 687.3459 0.0037483 -0.5 -0.0021698 -490.8906 490.8906 0.0021698 -0.4 -0.001003 -294.4841 294.4841 0.001003 -0.3 -0.0003023883 -98.1422 98.1422 0.0003023883 -0.2 -3.66861e-05 98.1236 -98.1236 3.66861e-05 -1.20000 -0.0006235658 -3541.6 3541.6 0.0006235658 -1.10000 -0.000588017 -3168.7 3168.7 0.000588017 -1.00000 -0.0005465098 -2795.8 2795.8 0.0005465098 -0.9 -0.0004983392 -2423 2423 0.0004983392 -0.8 -0.0004428916 -2050.1 2050.1 0.0004428916 -0.7 -0.000379816 -1677.3 1677.3 0.000379816 -0.6 -0.0003093449 -1304.4 1304.4 0.0003093449 -0.5 -0.0002329081 -931.6553 931.6553 0.0002329081 -0.4 -0.0001543237 -558.9304 558.9304 0.0001543237 -0.3 -8.19821e-05 -186.2856 186.2856 8.19821e-05 -0.2 -3.00466e-05 186.2607 -186.2607 3.00466e-05 -1.20000 -0.0064135 -3541.2 3541.2 0.0064135 -1.10000 -0.0055 -3168.4 3168.4 0.0055 -1.00000 -0.004624 -2795.5 2795.5 0.004624 -0.9 -0.003794 -2422.7 2422.7 0.003794 -0.8 -0.0030168 -2049.9 2049.9 0.0030168 -0.7 -0.002301 -1677.1 1677.1 0.002301 -0.6 -0.0016585 -1304.3 1304.3 0.0016585 -0.5 -0.0011049 -931.6029 931.6029 0.0011049 -0.4 -0.0006581161 -558.9163 558.9163 0.0006581161 -0.3 -0.000332711 -186.2879 186.2879 0.000332711 -0.2 -0.0001321465 186.2684 -186.2684 0.0001321465 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvdb_core_sw.standard0000644000175000017500000001662514163340332025373 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0071426 1.51714002947341e-14 7.56300014692604e-15 2.43250004725606e-15 -1 0.0064969 1.53785002987574e-14 7.59900014762541e-15 2.48900004835368e-15 -0.8 0.0058843 1.56094003032431e-14 7.63440014831312e-15 2.56380004980682e-15 -0.6 0.0053232 1.58738003083795e-14 7.66960014899695e-15 2.66580005178837e-15 -0.4 0.0048988 1.61778003142853e-14 7.70740014973129e-15 2.7989000543741e-15 -0.2 0.0044079 1.67374003251567e-14 7.69660014952148e-15 3.37660006559705e-15 -5.55111512312578e-17 0. 1.87930003650907e-14 6.96740013535534e-15 6.96740013535534e-15 0.2 -0.0048839 1.93325003755715e-14 6.54830012721351e-15 9.02980017542149e-15 -1.2 0.01225 1.5272700296702e-14 8.89440017279108e-15 2.68340005213028e-15 -1 0.0113129 1.54949003010187e-14 8.98530017455699e-15 2.7701000538146e-15 -0.8 0.0104692 1.57524003060211e-14 9.07920017638118e-15 2.88770005609921e-15 -0.6 0.0098587 1.6044000311686e-14 9.17720017828502e-15 3.03410005894331e-15 -0.4 0.0094955 1.64120003188351e-14 9.27720018022772e-15 3.29080006393021e-15 -0.2 0.0058124 1.82767003550606e-14 8.7052001691155e-15 6.16130011969528e-15 -5.55111512312578e-17 0. 1.94502003778581e-14 8.06480015667448e-15 8.06480015667448e-15 0.2 -0.004161 1.94815003784662e-14 8.01600015572644e-15 8.71440016929423e-15 -1.2 0.0152653 1.5328500297786e-14 9.30000018067065e-15 2.96040005751155e-15 -1 0.0143276 1.55867003028021e-14 9.40250018266191e-15 3.09240006007591e-15 -0.8 0.0137258 1.58692003082902e-14 9.50900018473088e-15 3.24470006303463e-15 -0.6 0.0134317 1.61940003146001e-14 9.62190018692419e-15 3.45440006710846e-15 -0.4 0.0104495 1.76304003425049e-14 9.41460018289698e-15 5.33950010373021e-15 -0.2 0.0046435 1.90898003708566e-14 8.51630016544575e-15 7.91010015366913e-15 -5.55111512312578e-17 0. 1.96241003812364e-14 8.44360016403341e-15 8.44360016403341e-15 0.2 -0.0029496 1.9504500378913e-14 8.82680017147782e-15 8.36560016251811e-15 -1.2 0.0166163 1.53714002986194e-14 9.37340018209659e-15 3.28320006378257e-15 -1 0.0161526 1.56397003038317e-14 9.47650018409951e-15 3.43460006672381e-15 -0.8 0.0159128 1.59588003100308e-14 9.58640018623453e-15 3.64840007087729e-15 -0.6 0.013329 1.71062003323213e-14 9.5163001848727e-15 5.00410009721441e-15 -0.4 0.008021 1.85149003596881e-14 8.89450017279302e-15 7.21420014014992e-15 -0.2 0.0032513 1.92757003744681e-14 8.18250015896103e-15 8.7504001699936e-15 -5.55111512312578e-17 0. 1.95582003799562e-14 8.57520016659e-15 8.57520016659e-15 0.2 -0.0019274 1.93994003768712e-14 9.3069001808047e-15 8.02700015594014e-15 -1.2 0.0103817 1.4941200290262e-14 7.67790014915819e-15 2.42980004720361e-15 -1 0.0093709 1.5120900293753e-14 7.70120014961084e-15 2.48700004831483e-15 -0.8 0.0084109 1.53221002976617e-14 7.72220015001881e-15 2.56250004978156e-15 -0.6 0.0075064 1.55544003021746e-14 7.74120015038792e-15 2.66520005177671e-15 -0.4 0.0066907 1.58220003073732e-14 7.76030015075897e-15 2.79670005433136e-15 -0.2 0.0061208 1.61117003130012e-14 7.79430015141949e-15 2.95050005731922e-15 -5.55111512312578e-17 0. 1.84008003574715e-14 6.74730013107947e-15 6.74730013107947e-15 0.2 -0.00923 1.91967003729334e-14 5.97420011606049e-15 9.15720017789648e-15 -1.2 0.0199463 1.53343002978987e-14 9.07430017628599e-15 2.66590005179031e-15 -1 0.0183699 1.55522003021318e-14 9.16580017806356e-15 2.75200005346297e-15 -0.8 0.0168734 1.5804900307041e-14 9.26010017989552e-15 2.86890005573398e-15 -0.6 0.0155676 1.60901003125816e-14 9.35830018180324e-15 3.01290005853146e-15 -0.4 0.0147817 1.63625003178735e-14 9.46800018393438e-15 3.13990006099869e-15 -0.2 0.0102669 1.8139900352403e-14 9.08430017648026e-15 5.69720011067923e-15 -5.55111512312578e-17 0. 1.95835003804477e-14 8.17490015881339e-15 8.17490015881339e-15 0.2 -0.0076966 1.96065003808945e-14 7.87680015302221e-15 8.81290017120778e-15 -1.2 0.0256751 1.54212002995869e-14 9.43440018328163e-15 2.94030005712107e-15 -1 0.023884 1.56783003045816e-14 9.53800018529427e-15 3.07140005966794e-15 -0.8 0.0224536 1.59583003100211e-14 9.6456001873846e-15 3.22100006257421e-15 -0.6 0.0216996 1.62217003151382e-14 9.76380018968087e-15 3.35150006510943e-15 -0.4 0.018083 1.75041003400513e-14 9.69750018839286e-15 4.89080009501334e-15 -0.2 0.0082933 1.92382003737396e-14 8.71440016929423e-15 7.87160015292119e-15 -5.55111512312578e-17 0. 1.97978003846109e-14 8.55620016622088e-15 8.55620016622088e-15 0.2 -0.0053784 1.96663003820563e-14 8.76870017034911e-15 8.38700016293384e-15 -1.2 0.0280143 1.54561003002649e-14 9.46900018395381e-15 3.26230006337654e-15 -1 0.0267506 1.57224003054383e-14 9.57290018597227e-15 3.4107000662595e-15 -0.8 0.0261171 1.59956003107457e-14 9.68900018822774e-15 3.56450006924737e-15 -0.6 0.0227869 1.70338003309148e-14 9.70090018845892e-15 4.69840009127559e-15 -0.4 0.0141843 1.85973003612888e-14 9.08180017643169e-15 7.06810013731164e-15 -0.2 0.0058465 1.94392003776444e-14 8.28810016101252e-15 8.78360017063857e-15 -5.55111512312578e-17 0. 1.97110003829246e-14 8.65100016806256e-15 8.65100016806256e-15 0.2 -0.0035108 1.95457003797134e-14 9.25110017972067e-15 7.99780015537287e-15 -1.2 0.0044396 1.54433003000162e-14 7.48590014542822e-15 2.43280004726189e-15 -1 0.0040856 1.56733003044844e-14 7.5477001466288e-15 2.4888000483498e-15 -0.8 0.0037666 1.5928800309448e-14 7.61110014786047e-15 2.56330004979711e-15 -0.6 0.0035281 1.62204003151129e-14 7.67720014914459e-15 2.66650005180197e-15 -0.4 0.0033975 1.6574500321992e-14 7.74770015051419e-15 2.84140005519974e-15 -0.2 0.0026075 1.75843003416093e-14 7.63370014829952e-15 4.39680008541642e-15 -5.55111512312578e-17 0. 1.91279003715968e-14 7.22510014036167e-15 7.22510014036167e-15 0.2 -0.0022677 1.94303003774715e-14 6.95610013513582e-15 8.76140017020729e-15 -1.2 0.0065425 1.52293002958589e-14 8.6251001675594e-15 2.7017000524858e-15 -1 0.0061002 1.54598003003368e-14 8.71530016931171e-15 2.78910005418371e-15 -0.8 0.0057796 1.57268003055238e-14 8.8085001711223e-15 2.90840005650135e-15 -0.6 0.005635 1.60387003115831e-14 8.90580017301255e-15 3.07140005966794e-15 -0.4 0.0052137 1.66848003241348e-14 8.93090017350016e-15 3.77740007338337e-15 -0.2 0.0028171 1.8331800356131e-14 8.31020016144185e-15 6.51390012654522e-15 -5.55111512312578e-17 0. 1.92365003737066e-14 8.07910015695229e-15 8.07910015695229e-15 0.2 -0.0019443 1.9284600374641e-14 8.10160015738939e-15 8.57230016653366e-15 -1.2 0.0080376 1.52054002953946e-14 9.09590017670561e-15 2.98420005797391e-15 -1 0.0077215 1.5466500300467e-14 9.19720017867356e-15 3.11810006057518e-15 -0.8 0.0076128 1.57601003061707e-14 9.30230018071533e-15 3.2828000637748e-15 -0.6 0.0073329 1.62477003156433e-14 9.38310018228503e-15 3.72920007244699e-15 -0.4 0.0052106 1.76847003435598e-14 9.03540017553028e-15 5.78330011235189e-15 -0.2 0.0022195 1.88687003665613e-14 8.26890016063952e-15 7.88890015325728e-15 -5.55111512312578e-17 0. 1.93466003758455e-14 8.4499001641558e-15 8.4499001641558e-15 0.2 -0.0013761 1.92678003743146e-14 8.80890017113007e-15 8.27930016084156e-15 -1.2 0.0088874 1.52490002962416e-14 9.22790017926997e-15 3.30970006429738e-15 -1 0.0088496 1.55263003016287e-14 9.32980018124957e-15 3.4723000674562e-15 -0.8 0.0086344 1.59507003098735e-14 9.41920018298634e-15 3.83420007448682e-15 -0.6 0.0068015 1.71453003330809e-14 9.24790017965851e-15 5.37140010434993e-15 -0.4 0.0039453 1.83476003564379e-14 8.66480016833065e-15 7.31790014216449e-15 -0.2 0.001544 1.90362003698153e-14 8.04390015626846e-15 8.66980016842779e-15 -5.55111512312578e-17 0. 1.93187003753035e-14 8.57940016667159e-15 8.57940016667159e-15 0.2 -0.0008878741 1.91821003726497e-14 9.26730018003539e-15 7.97810015499016e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_core_sw.standard0000644000175000017500000000453514163340332025202 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.001062 0. 0. 0.001062 -1.10000 -0.0009910603 0. 0. 0.0009910603 -1.00000 -0.000908915 0. 0. 0.000908915 -0.9 -0.0008142336 0. 0. 0.0008142336 -0.8 -0.0007058736 0. 0. 0.0007058736 -0.7 -0.0005832105 0. 0. 0.0005832105 -0.6 -0.0004468956 0. 0. 0.0004468956 -0.5 -0.0003006543 0. 0. 0.0003006543 -0.4 -0.0001561858 0. 0. 0.0001561858 -0.3 -4.5472e-05 0. 0. 4.5472e-05 -0.2 -5.1912e-06 0. 0. 5.1912e-06 -1.20000 -0.0107158 0. 0. 0.0107158 -1.10000 -0.0090883 0. 0. 0.0090883 -1.00000 -0.0075308 0. 0. 0.0075308 -0.9 -0.0060534 0. 0. 0.0060534 -0.8 -0.0046698 0. 0. 0.0046698 -0.7 -0.0034028 0. 0. 0.0034028 -0.6 -0.0022857 0. 0. 0.0022857 -0.5 -0.0013597 0. 0. 0.0013597 -0.4 -0.000666818 0. 0. 0.000666818 -0.3 -0.0002341989 0. 0. 0.0002341989 -0.2 -4.5301e-05 0. 0. 4.5301e-05 -1.20000 -0.0017218 0. 0. 0.0017218 -1.10000 -0.0015999 0. 0. 0.0015999 -1.00000 -0.001459 0. 0. 0.001459 -0.9 -0.0012971 0. 0. 0.0012971 -0.8 -0.0011119 0. 0. 0.0011119 -0.7 -0.0009024686 0. 0. 0.0009024686 -0.6 -0.0006694417 0. 0. 0.0006694417 -0.5 -0.000419314 0. 0. 0.000419314 -0.4 -0.0001768185 0. 0. 0.0001768185 -0.3 -2.49496e-05 0. 0. 2.49496e-05 -0.2 -8.354817e-07 0. 0. 8.354817e-07 -1.20000 -0.0172464 0. 0. 0.0172464 -1.10000 -0.0145698 0. 0. 0.0145698 -1.00000 -0.0119979 0. 0. 0.0119979 -0.9 -0.0095482 0. 0. 0.0095482 -0.8 -0.0072505 0. 0. 0.0072505 -0.7 -0.0051536 0. 0. 0.0051536 -0.6 -0.0033246 0. 0. 0.0033246 -0.5 -0.0018426 0. 0. 0.0018426 -0.4 -0.0007853998 0. 0. 0.0007853998 -0.3 -0.0001978219 0. 0. 0.0001978219 -0.2 -1.62778e-05 0. 0. 1.62778e-05 -1.20000 -0.0005950681 0. 0. 0.0005950681 -1.10000 -0.0005581469 0. 0. 0.0005581469 -1.00000 -0.0005152332 0. 0. 0.0005152332 -0.9 -0.0004656531 0. 0. 0.0004656531 -0.8 -0.0004088517 0. 0. 0.0004088517 -0.7 -0.0003445903 0. 0. 0.0003445903 -0.6 -0.0002733328 0. 0. 0.0002733328 -0.5 -0.0001970187 0. 0. 0.0001970187 -0.4 -0.0001206541 0. 0. 0.0001206541 -0.3 -5.51177e-05 0. 0. 5.51177e-05 -0.2 -1.57699e-05 0. 0. 1.57699e-05 -1.20000 -0.0060627 0. 0. 0.0060627 -1.10000 -0.0051637 0. 0. 0.0051637 -1.00000 -0.0043053 0. 0. 0.0043053 -0.9 -0.0034955 0. 0. 0.0034955 -0.8 -0.0027414 0. 0. 0.0027414 -0.7 -0.0020523 0. 0. 0.0020523 -0.6 -0.0014409 0. 0. 0.0014409 -0.5 -0.0009237135 0. 0. 0.0009237135 -0.4 -0.000518576 0. 0. 0.000518576 -0.3 -0.0002383943 0. 0. 0.0002383943 -0.2 -8.13098e-05 0. 0. 8.13098e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_ig_lw.standard0000644000175000017500000002204214163340332024630 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -1.06936e-05 -3961.3 3961.3 1.06936e-05 -1.10000 -9.9568e-06 -3961.3 3961.3 9.9568e-06 -1.00000 -9.2497e-06 -3961.3 3961.3 9.2497e-06 -0.9 -8.5723e-06 -3961.3 3961.3 8.5723e-06 -0.8 -7.9248e-06 -3961.3 3961.3 7.9248e-06 -0.7 -7.3086e-06 -3961.3 3961.3 7.3086e-06 -0.6 -6.7275e-06 -3961.2 3961.2 6.7275e-06 -0.5 -6.1928e-06 -3961.2 3961.2 6.1928e-06 -0.4 -5.7357e-06 -3961.2 3961.2 5.7357e-06 -0.3 -5.4135e-06 -3961.2 3961.2 5.4135e-06 -0.2 -5.2246e-06 -3961.2 3961.2 5.2246e-06 -0.1 -4.823e-06 -3961.2 3961.2 4.823e-06 2.220446e-16 2.231e-20 -3961.4 3961.4 -2.231e-20 -1.20000 -4.16168e-05 -6603.2 6603.2 4.16168e-05 -1.10000 -3.94189e-05 -6603.2 6603.2 3.94189e-05 -1.00000 -3.72838e-05 -6603.2 6603.2 3.72838e-05 -0.9 -3.52134e-05 -6603.2 6603.2 3.52134e-05 -0.8 -3.32123e-05 -6603.2 6603.2 3.32123e-05 -0.7 -3.12914e-05 -6603.2 6603.2 3.12914e-05 -0.6 -2.94783e-05 -6603.2 6603.2 2.94783e-05 -0.5 -2.78428e-05 -6603.2 6603.2 2.78428e-05 -0.4 -2.65369e-05 -6603.2 6603.2 2.65369e-05 -0.3 -2.57294e-05 -6603.1 6603.1 2.57294e-05 -0.2 -2.5178e-05 -6603.2 6603.2 2.5178e-05 -0.1 -2.16426e-05 -6603.3 6603.3 2.16426e-05 2.220446e-16 7.988e-20 -6603.8 6603.8 -7.988e-20 -1.20000 -0.0002362204 -13210.9 13210.9 0.0002362204 -1.10000 -0.000226908 -13210.9 13210.9 0.000226908 -1.00000 -0.0002178127 -13210.9 13210.9 0.0002178127 -0.9 -0.0002090164 -13210.9 13210.9 0.0002090164 -0.8 -0.0002006766 -13211 13211 0.0002006766 -0.7 -0.0001930899 -13211 13211 0.0001930899 -0.6 -0.0001867481 -13211 13211 0.0001867481 -0.5 -0.0001822139 -13211 13211 0.0001822139 -0.4 -0.0001794053 -13211 13211 0.0001794053 -0.3 -0.0001739255 -13211.3 13211.3 0.0001739255 -0.2 -0.0001492067 -13212 13212 0.0001492067 -0.1 -9.16731e-05 -13212.9 13212.9 9.16731e-05 2.220446e-16 1.889e-19 -13213.7 13213.7 -1.889e-19 -1.20000 -0.0005558436 -19821 19821 0.0005558436 -1.10000 -0.0005362128 -19821 19821 0.0005362128 -1.00000 -0.0005177925 -19821 19821 0.0005177925 -0.9 -0.0005011767 -19821 19821 0.0005011767 -0.8 -0.0004871435 -19821 19821 0.0004871435 -0.7 -0.000476411 -19821.1 19821.1 0.000476411 -0.6 -0.0004686708 -19821.1 19821.1 0.0004686708 -0.5 -0.0004581339 -19821.5 19821.5 0.0004581339 -0.4 -0.0004291594 -19822.3 19822.3 0.0004291594 -0.3 -0.0003693744 -19823.2 19823.2 0.0003693744 -0.2 -0.0002760989 -19824.1 19824.1 0.0002760989 -0.1 -0.0001516718 -19824.9 19824.9 0.0001516718 2.220446e-16 3.650e-19 -19825.6 19825.6 -3.650e-19 -1.20000 -0.0009388088 -26432.2 26432.2 0.0009388088 -1.10000 -0.0009118257 -26432.3 26432.3 0.0009118257 -1.00000 -0.0008888303 -26432.3 26432.3 0.0008888303 -0.9 -0.0008704234 -26432.3 26432.3 0.0008704234 -0.8 -0.0008554767 -26432.4 26432.4 0.0008554767 -0.7 -0.0008367338 -26432.9 26432.9 0.0008367338 -0.6 -0.0008009624 -26433.6 26433.6 0.0008009624 -0.5 -0.0007380051 -26434.5 26434.5 0.0007380051 -0.4 -0.0006440998 -26435.3 26435.3 0.0006440998 -0.3 -0.0005201185 -26436.2 26436.2 0.0005201185 -0.2 -0.0003690896 -26436.9 26436.9 0.0003690896 -0.1 -0.0001945448 -26437.6 26437.6 0.0001945448 2.220446e-16 6.656e-19 -26438.2 26438.2 -6.656e-19 -1.20000 -4.6198e-06 -2943.1 2943.1 4.6198e-06 -1.10000 -4.2192e-06 -2943.1 2943.1 4.2192e-06 -1.00000 -3.8403e-06 -2943.1 2943.1 3.8403e-06 -0.9 -3.4827e-06 -2943.1 2943.1 3.4827e-06 -0.8 -3.1458e-06 -2943.1 2943.1 3.1458e-06 -0.7 -2.829e-06 -2943.1 2943.1 2.829e-06 -0.6 -2.5319e-06 -2943.1 2943.1 2.5319e-06 -0.5 -2.2545e-06 -2943.1 2943.1 2.2545e-06 -0.4 -1.9989e-06 -2943.1 2943.1 1.9989e-06 -0.3 -1.7761e-06 -2943.1 2943.1 1.7761e-06 -0.2 -1.6197e-06 -2943.1 2943.1 1.6197e-06 -0.1 -1.5033e-06 -2943.1 2943.1 1.5033e-06 2.220446e-16 1.085e-20 -2943.1 2943.1 -1.085e-20 -1.20000 -3.72036e-05 -4906.2 4906.2 3.72036e-05 -1.10000 -3.49942e-05 -4906.2 4906.2 3.49942e-05 -1.00000 -3.28573e-05 -4906.2 4906.2 3.28573e-05 -0.9 -3.07922e-05 -4906.2 4906.2 3.07922e-05 -0.8 -2.87987e-05 -4906.2 4906.2 2.87987e-05 -0.7 -2.68771e-05 -4906.2 4906.2 2.68771e-05 -0.6 -2.503e-05 -4906.2 4906.2 2.503e-05 -0.5 -2.32681e-05 -4906.2 4906.2 2.32681e-05 -0.4 -2.16321e-05 -4906.2 4906.2 2.16321e-05 -0.3 -2.02687e-05 -4906.1 4906.1 2.02687e-05 -0.2 -1.94331e-05 -4906.1 4906.1 1.94331e-05 -0.1 -1.81362e-05 -4906.2 4906.2 1.81362e-05 2.220446e-16 9.260e-20 -4906.6 4906.6 -9.260e-20 -1.20000 -0.0003286288 -9817.3 9817.3 0.0003286288 -1.10000 -0.0003155778 -9817.3 9817.3 0.0003155778 -1.00000 -0.0003027384 -9817.3 9817.3 0.0003027384 -0.9 -0.0002901433 -9817.3 9817.3 0.0002901433 -0.8 -0.0002778628 -9817.3 9817.3 0.0002778628 -0.7 -0.000266055 -9817.3 9817.3 0.000266055 -0.6 -0.0002550818 -9817.3 9817.3 0.0002550818 -0.5 -0.0002457097 -9817.3 9817.3 0.0002457097 -0.4 -0.000239061 -9817.3 9817.3 0.000239061 -0.3 -0.0002340077 -9817.4 9817.4 0.0002340077 -0.2 -0.0002099457 -9818.1 9818.1 0.0002099457 -0.1 -0.0001340153 -9819.1 9819.1 0.0001340153 2.220446e-16 2.733e-19 -9820 9820 -2.733e-19 -1.20000 -0.0008550163 -14730.8 14730.8 0.0008550163 -1.10000 -0.0008236964 -14730.8 14730.8 0.0008236964 -1.00000 -0.0007933714 -14730.8 14730.8 0.0007933714 -0.9 -0.0007645959 -14730.8 14730.8 0.0007645959 -0.8 -0.0007383142 -14730.8 14730.8 0.0007383142 -0.7 -0.0007159433 -14730.8 14730.8 0.0007159433 -0.6 -0.0006988528 -14730.8 14730.8 0.0006988528 -0.5 -0.0006838719 -14731.1 14731.1 0.0006838719 -0.4 -0.0006493285 -14731.8 14731.8 0.0006493285 -0.3 -0.0005677289 -14732.8 14732.8 0.0005677289 -0.2 -0.0004295741 -14733.7 14733.7 0.0004295741 -0.1 -0.0002380437 -14734.6 14734.6 0.0002380437 2.220446e-16 8.408e-19 -14735.4 14735.4 -8.408e-19 -1.20000 -0.0014955 -19645.4 19645.4 0.0014955 -1.10000 -0.0014465 -19645.4 19645.4 0.0014465 -1.00000 -0.0014024 -19645.4 19645.4 0.0014024 -0.9 -0.0013646 -19645.4 19645.4 0.0013646 -0.8 -0.0013337 -19645.5 19645.5 0.0013337 -0.7 -0.0013029 -19645.9 19645.9 0.0013029 -0.6 -0.0012525 -19646.6 19646.6 0.0012525 -0.5 -0.0011622 -19647.5 19647.5 0.0011622 -0.4 -0.0010214 -19648.4 19648.4 0.0010214 -0.3 -0.00082943 -19649.3 19649.3 0.00082943 -0.2 -0.000591132 -19650.1 19650.1 0.000591132 -0.1 -0.0003126426 -19650.8 19650.8 0.0003126426 2.220446e-16 5.240e-19 -19651.4 19651.4 -5.240e-19 -1.20000 -1.67371e-05 -5587.7 5587.7 1.67371e-05 -1.10000 -1.57836e-05 -5587.7 5587.7 1.57836e-05 -1.00000 -1.48658e-05 -5587.7 5587.7 1.48658e-05 -0.9 -1.39883e-05 -5587.7 5587.7 1.39883e-05 -0.8 -1.31604e-05 -5587.7 5587.7 1.31604e-05 -0.7 -1.24006e-05 -5587.7 5587.7 1.24006e-05 -0.6 -1.17427e-05 -5587.7 5587.7 1.17427e-05 -0.5 -1.12345e-05 -5587.7 5587.7 1.12345e-05 -0.4 -1.0905e-05 -5587.7 5587.7 1.0905e-05 -0.3 -1.07045e-05 -5587.7 5587.7 1.07045e-05 -0.2 -1.0412e-05 -5587.7 5587.7 1.0412e-05 -0.1 -8.7091e-06 -5587.7 5587.7 8.7091e-06 2.220446e-16 3.325e-20 -5588 5588 -3.325e-20 -1.20000 -4.08513e-05 -9313.8 9313.8 4.08513e-05 -1.10000 -3.88887e-05 -9313.8 9313.8 3.88887e-05 -1.00000 -3.69941e-05 -9313.8 9313.8 3.69941e-05 -0.9 -3.51847e-05 -9313.8 9313.8 3.51847e-05 -0.8 -3.34927e-05 -9313.8 9313.8 3.34927e-05 -0.7 -3.19761e-05 -9313.8 9313.8 3.19761e-05 -0.6 -3.07254e-05 -9313.8 9313.8 3.07254e-05 -0.5 -2.9835e-05 -9313.8 9313.8 2.9835e-05 -0.4 -2.93085e-05 -9313.8 9313.8 2.93085e-05 -0.3 -2.89336e-05 -9313.8 9313.8 2.89336e-05 -0.2 -2.76695e-05 -9313.9 9313.9 2.76695e-05 -0.1 -2.07054e-05 -9314.2 9314.2 2.07054e-05 2.220446e-16 5.353e-20 -9314.7 9314.7 -5.353e-20 -1.20000 -0.0001566128 -18631.9 18631.9 0.0001566128 -1.10000 -0.0001507144 -18631.9 18631.9 0.0001507144 -1.00000 -0.0001451695 -18631.9 18631.9 0.0001451695 -0.9 -0.0001401399 -18631.9 18631.9 0.0001401399 -0.8 -0.000135847 -18631.9 18631.9 0.000135847 -0.7 -0.0001325257 -18631.9 18631.9 0.0001325257 -0.6 -0.0001302898 -18631.9 18631.9 0.0001302898 -0.5 -0.000128901 -18631.9 18631.9 0.000128901 -0.4 -0.000126976 -18632.1 18632.1 0.000126976 -0.3 -0.0001191917 -18632.5 18632.5 0.0001191917 -0.2 -9.74513e-05 -18633.3 18633.3 9.74513e-05 -0.1 -5.77097e-05 -18634.1 18634.1 5.77097e-05 2.220446e-16 1.418e-19 -18634.7 18634.7 -1.418e-19 -1.20000 -0.0003306668 -27952.1 27952.1 0.0003306668 -1.10000 -0.000320712 -27952.1 27952.1 0.000320712 -1.00000 -0.0003121261 -27952.1 27952.1 0.0003121261 -0.9 -0.00030522 -27952.1 27952.1 0.00030522 -0.8 -0.0003001452 -27952.2 27952.2 0.0003001452 -0.7 -0.0002966144 -27952.2 27952.2 0.0002966144 -0.6 -0.0002928841 -27952.4 27952.4 0.0002928841 -0.5 -0.0002833412 -27952.9 27952.9 0.0002833412 -0.4 -0.0002604691 -27953.6 27953.6 0.0002604691 -0.3 -0.0002203148 -27954.5 27954.5 0.0002203148 -0.2 -0.0001625177 -27955.3 27955.3 0.0001625177 -0.1 -8.84119e-05 -27956 27956 8.84119e-05 2.220446e-16 1.534e-19 -27956.6 27956.6 -1.534e-19 -1.20000 -0.0005391397 -37273.5 37273.5 0.0005391397 -1.10000 -0.000528049 -37273.5 37273.5 0.000528049 -1.00000 -0.0005194304 -37273.5 37273.5 0.0005194304 -0.9 -0.0005128478 -37273.6 37273.6 0.0005128478 -0.8 -0.0005060945 -37273.8 37273.8 0.0005060945 -0.7 -0.0004935596 -37274.3 37274.3 0.0004935596 -0.6 -0.0004687761 -37275 37275 0.0004687761 -0.5 -0.0004280756 -37275.8 37275.8 0.0004280756 -0.4 -0.0003706598 -37276.6 37276.6 0.0003706598 -0.3 -0.0002974303 -37277.4 37277.4 0.0002974303 -0.2 -0.0002100251 -37278.1 37278.1 0.0002100251 -0.1 -0.0001102654 -37278.8 37278.8 0.0001102654 2.220446e-16 4.521e-19 -37279.3 37279.3 -4.521e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_ig_sw.standard0000644000175000017500000001677114163340332024702 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0023099 1.12099002177742e-14 5.78340011235383e-15 2.71400005272475e-15 -1 0.0018481 1.11269002161617e-14 5.57590010832274e-15 2.79010005420314e-15 -0.8 0.0014427 1.10447002145649e-14 5.34480010383317e-15 2.88610005606813e-15 -0.6 0.0010953 1.09745002132011e-14 5.09230009892787e-15 3.01090005849261e-15 -0.4 0.0008100531 1.09235002122103e-14 4.82510009373699e-15 3.16540006149407e-15 -0.2 0.0006106223 1.08414002106154e-14 4.57160008881225e-15 3.27210006356693e-15 -5.55111512312578e-17 4.763e-19 1.12585002187183e-14 4.12620008015949e-15 4.12620008015949e-15 0.2 -0.0048219 1.50422002922241e-14 3.80030007382824e-15 8.65740016818689e-15 -1.2 0.0090395 1.38136002683561e-14 8.65020016804702e-15 2.79560005430999e-15 -1 0.0081589 1.39764002715188e-14 8.70780016916601e-15 2.88640005607395e-15 -0.8 0.0073312 1.41705002752896e-14 8.76510017027917e-15 3.00810005843821e-15 -0.6 0.0065941 1.43924002796005e-14 8.82270017139817e-15 3.15650006132117e-15 -0.4 0.0060707 1.45713002830759e-14 8.88520017261235e-15 3.25670006326775e-15 -0.2 0.0051629 1.53922002990235e-14 8.81680017128355e-15 4.19450008148635e-15 -5.55111512312578e-17 7.571e-19 1.7686200343589e-14 7.7449001504598e-15 7.7449001504598e-15 0.2 -0.0055255 1.79526003487643e-14 7.01760013633058e-15 8.76850017034523e-15 -1.2 0.0137063 1.44557002808302e-14 9.20200017876681e-15 3.0268000588015e-15 -1 0.0126841 1.46893002853683e-14 9.29390018055215e-15 3.160300061395e-15 -0.8 0.0118505 1.49435002903067e-14 9.38890018239771e-15 3.31100006432264e-15 -0.6 0.0113698 1.51463002942464e-14 9.48990018435983e-15 3.40510006615071e-15 -0.4 0.0103016 1.59249003093723e-14 9.5280001851e-15 4.18240008125128e-15 -0.2 0.0052939 1.80726003510955e-14 8.70060016902614e-15 7.29810014177984e-15 -5.55111512312578e-17 0. 1.8843100366064e-14 8.41110016340203e-15 8.41110016340203e-15 0.2 -0.0041661 1.87571003643933e-14 8.39680016312423e-15 8.35090016223253e-15 -1.2 0.015899 1.47436002864232e-14 9.2945001805638e-15 3.3266000646257e-15 -1 0.0151918 1.49931002912702e-14 9.39130018244433e-15 3.47390006748729e-15 -0.8 0.0148659 1.51999002952877e-14 9.49480018445502e-15 3.57360006942415e-15 -0.6 0.0135555 1.59980003107924e-14 9.55130018555264e-15 4.34550008441982e-15 -0.4 0.0089484 1.77199003442436e-14 9.04770017576923e-15 6.65690012932327e-15 -0.2 0.0039356 1.87403003640669e-14 8.27640016078522e-15 8.5101001653253e-15 -5.55111512312578e-17 1.7172e-18 1.90686003704448e-14 8.57080016650452e-15 8.57080016650452e-15 0.2 -0.0029189 1.89079003673229e-14 9.01930017521751e-15 7.9707001548464e-15 -1.2 0.0023308 1.06822002075226e-14 5.19110010084725e-15 2.73680005316768e-15 -1 0.0016951 1.04665002033322e-14 4.83230009387686e-15 2.82110005480537e-15 -0.8 0.0011757 1.02563001992486e-14 4.45430008653347e-15 2.9254000568316e-15 -0.6 0.0007725087 1.00770001957654e-14 4.07590007918231e-15 3.05750005939791e-15 -0.4 0.0004784194 9.95180019333314e-15 3.72190007230517e-15 3.21760006250816e-15 -0.2 0.000285415 9.84050019117092e-15 3.43650006676072e-15 3.32430006458102e-15 -5.55111512312578e-17 3.092e-19 9.85800019151089e-15 3.36260006532507e-15 3.36260006532507e-15 0.2 -0.0071431 1.49029002895179e-14 3.33180006472672e-15 8.93870017365169e-15 -1.2 0.0142711 1.40388002727311e-14 8.87700017245305e-15 2.7715000538418e-15 -1 0.0128137 1.42020002759016e-14 8.93640017360701e-15 2.86160005559216e-15 -0.8 0.0114316 1.43959002796685e-14 8.99490017474349e-15 2.98260005794283e-15 -0.6 0.0101443 1.46170002839638e-14 9.05330017587802e-15 3.13040006081413e-15 -0.4 0.0090566 1.47905002873343e-14 9.11540017708443e-15 3.22600006267135e-15 -0.2 0.0081124 1.52044002953751e-14 9.16780017810241e-15 3.5962000698632e-15 -5.55111512312578e-17 2.7905e-18 1.8014200349961e-14 7.8873001532262e-15 7.8873001532262e-15 0.2 -0.009474 1.81103003518279e-14 6.85040013308239e-15 9.03290017548171e-15 -1.2 0.0228035 1.46192002840065e-14 9.35160018167308e-15 3.00490005837605e-15 -1 0.0209973 1.48543002885738e-14 9.44590018350504e-15 3.13750006095206e-15 -0.8 0.019382 1.51102002935451e-14 9.54340018539917e-15 3.2875000638661e-15 -0.6 0.0182204 1.53072002973722e-14 9.64680018740792e-15 3.37300006552711e-15 -0.4 0.0169722 1.58634003081775e-14 9.74970018940695e-15 3.84280007465389e-15 -0.2 0.0090546 1.82684003548993e-14 8.92790017344188e-15 7.20310013993428e-15 -5.55111512312578e-17 3.1003e-18 1.91137003713209e-14 8.51450016541078e-15 8.51450016541078e-15 0.2 -0.0071481 1.89587003683097e-14 8.41690016351471e-15 8.46510016445109e-15 -1.2 0.026673 1.48613002887098e-14 9.39190018245599e-15 3.3060000642255e-15 -1 0.0251435 1.51116002935723e-14 9.49000018436177e-15 3.45260006707349e-15 -0.8 0.0242379 1.53081002973897e-14 9.59560018641326e-15 3.5388000687481e-15 -0.6 0.0224828 1.59949003107322e-14 9.69650018837344e-15 4.14320008048975e-15 -0.4 0.0152777 1.78149003460892e-14 9.23310017937099e-15 6.50000012627519e-15 -0.2 0.0067294 1.8939000367927e-14 8.37420016268518e-15 8.54070016591976e-15 -5.55111512312578e-17 2.206e-18 1.92634003742291e-14 8.63280016770899e-15 8.63280016770899e-15 0.2 -0.005036 1.90714003704992e-14 9.05570017592465e-15 8.02640015592849e-15 -1.2 0.0018429 1.14296002220423e-14 6.02650011707653e-15 2.7106000526587e-15 -1 0.0015593 1.14409002222618e-14 5.9255001151144e-15 2.78140005403412e-15 -0.8 0.0013034 1.14623002226776e-14 5.81200011290944e-15 2.87160005578643e-15 -0.6 0.0010805 1.15030002234682e-14 5.68630011046748e-15 2.99020005809047e-15 -0.4 0.0009074627 1.15672002247154e-14 5.55090010783707e-15 3.13860006097343e-15 -0.2 0.0007808656 1.16362002260559e-14 5.41950010528437e-15 3.29060006392633e-15 -5.55111512312578e-17 3.629e-19 1.25977002447349e-14 4.87100009462868e-15 4.87100009462868e-15 0.2 -0.0027682 1.5243100296127e-14 4.54440008828384e-15 8.19340015917279e-15 -1.2 0.0051027 1.34850002619724e-14 8.31820016159727e-15 2.82510005488308e-15 -1 0.0046397 1.36479002651371e-14 8.37390016267935e-15 2.91680005666453e-15 -0.8 0.0042285 1.38430002689273e-14 8.42980016376532e-15 3.03960005905016e-15 -0.6 0.0039185 1.40671002732809e-14 8.48700016487654e-15 3.18970006196615e-15 -0.4 0.0037244 1.42775002773683e-14 8.54560016601496e-15 3.32770006464707e-15 -0.2 0.0028417 1.54915003009526e-14 8.31120016146128e-15 4.88080009481907e-15 -5.55111512312578e-17 1.6193e-18 1.71981003341067e-14 7.52850014625581e-15 7.52850014625581e-15 0.2 -0.002875 1.7644300342775e-14 7.10700013806735e-15 8.45190016419465e-15 -1.2 0.0073491 1.42018002758977e-14 8.97000017425976e-15 3.0542000593338e-15 -1 0.0068967 1.44338002804047e-14 9.05870017598293e-15 3.18890006195061e-15 -0.8 0.0066041 1.46870002853236e-14 9.15050017776632e-15 3.34170006491904e-15 -0.6 0.0064522 1.49188002898268e-14 9.24560017961382e-15 3.47360006748146e-15 -0.4 0.0055228 1.59377003096209e-14 9.17390017822091e-15 4.63370009001867e-15 -0.2 0.0027676 1.77276003443932e-14 8.42090016359242e-15 7.32160014223637e-15 -5.55111512312578e-17 2.1845e-18 1.84302003580426e-14 8.24960016026458e-15 8.24960016026458e-15 0.2 -0.0021701 1.84405003582427e-14 8.32560016174103e-15 8.20320015936317e-15 -1.2 0.0085501 1.4557200282802e-14 9.14160017759342e-15 3.35250006512886e-15 -1 0.0083527 1.48070002876549e-14 9.23670017944093e-15 3.50230006803901e-15 -0.8 0.0082598 1.5045900292296e-14 9.33520018135448e-15 3.64230007075879e-15 -0.6 0.0072725 1.59649003101493e-14 9.32150018108833e-15 4.62510008985159e-15 -0.4 0.0046904 1.75030003400299e-14 8.81730017129326e-15 6.76720013146607e-15 -0.2 0.0020626 1.84276003579921e-14 8.1487001583044e-15 8.42850016374006e-15 -5.55111512312578e-17 0. 1.87659003645642e-14 8.47150016457542e-15 8.47150016457542e-15 0.2 -0.0015111 1.86541003623923e-14 8.94260017372746e-15 7.90000015347292e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_core_lt.standard0000644000175000017500000001312314163340332025156 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -1.795e-06 0. 0. 1.795e-06 -1.10000 -1.6964e-06 0. 0. 1.6964e-06 -1.00000 -1.6008e-06 0. 0. 1.6008e-06 -0.9 -1.5083e-06 0. 0. 1.5083e-06 -0.8 -1.419e-06 0. 0. 1.419e-06 -0.7 -1.3335e-06 0. 0. 1.3335e-06 -0.6 -1.2529e-06 0. 0. 1.2529e-06 -0.5 -1.1804e-06 0. 0. 1.1804e-06 -0.4 -1.1226e-06 0. 0. 1.1226e-06 -0.3 -1.0866e-06 0. 0. 1.0866e-06 -0.2 -1.0628e-06 0. 0. 1.0628e-06 -0.1 -9.286227e-07 0. 0. 9.286227e-07 2.220446e-16 3.032e-21 0. 0. -3.032e-21 -1.20000 -1.10527e-05 0. 0. 1.10527e-05 -1.10000 -1.06115e-05 0. 0. 1.06115e-05 -1.00000 -1.01808e-05 0. 0. 1.01808e-05 -0.9 -9.7643e-06 0. 0. 9.7643e-06 -0.8 -9.3693e-06 0. 0. 9.3693e-06 -0.7 -9.0094e-06 0. 0. 9.0094e-06 -0.6 -8.7075e-06 0. 0. 8.7075e-06 -0.5 -8.4906e-06 0. 0. 8.4906e-06 -0.4 -8.3588e-06 0. 0. 8.3588e-06 -0.3 -8.1434e-06 0. 0. 8.1434e-06 -0.2 -7.0825e-06 0. 0. 7.0825e-06 -0.1 -4.4066e-06 0. 0. 4.4066e-06 2.220446e-16 9.356e-21 0. 0. -9.356e-21 -1.20000 -2.66285e-05 0. 0. 2.66285e-05 -1.10000 -2.56821e-05 0. 0. 2.56821e-05 -1.00000 -2.47929e-05 0. 0. 2.47929e-05 -0.9 -2.39893e-05 0. 0. 2.39893e-05 -0.8 -2.33085e-05 0. 0. 2.33085e-05 -0.7 -2.27861e-05 0. 0. 2.27861e-05 -0.6 -2.24175e-05 0. 0. 2.24175e-05 -0.5 -2.19761e-05 0. 0. 2.19761e-05 -0.4 -2.07169e-05 0. 0. 2.07169e-05 -0.3 -1.79459e-05 0. 0. 1.79459e-05 -0.2 -1.34804e-05 0. 0. 1.34804e-05 -0.1 -7.4306e-06 0. 0. 7.4306e-06 2.220446e-16 1.821e-20 0. 0. -1.821e-20 -1.20000 -4.53699e-05 0. 0. 4.53699e-05 -1.10000 -4.40548e-05 0. 0. 4.40548e-05 -1.00000 -4.29313e-05 0. 0. 4.29313e-05 -0.9 -4.2032e-05 0. 0. 4.2032e-05 -0.8 -4.13233e-05 0. 0. 4.13233e-05 -0.7 -4.05044e-05 0. 0. 4.05044e-05 -0.6 -3.89158e-05 0. 0. 3.89158e-05 -0.5 -3.59953e-05 0. 0. 3.59953e-05 -0.4 -3.15177e-05 0. 0. 3.15177e-05 -0.3 -2.55137e-05 0. 0. 2.55137e-05 -0.2 -1.8137e-05 0. 0. 1.8137e-05 -0.1 -9.5717e-06 0. 0. 9.5717e-06 2.220446e-16 2.247e-20 0. 0. -2.247e-20 -1.20000 -1.518e-06 0. 0. 1.518e-06 -1.10000 -1.4229e-06 0. 0. 1.4229e-06 -1.00000 -1.3311e-06 0. 0. 1.3311e-06 -0.9 -1.2427e-06 0. 0. 1.2427e-06 -0.8 -1.1576e-06 0. 0. 1.1576e-06 -0.7 -1.0757e-06 0. 0. 1.0757e-06 -0.6 -9.97214e-07 0. 0. 9.97214e-07 -0.5 -9.225531e-07 0. 0. 9.225531e-07 -0.4 -8.533641e-07 0. 0. 8.533641e-07 -0.3 -7.956337e-07 0. 0. 7.956337e-07 -0.2 -7.598786e-07 0. 0. 7.598786e-07 -0.1 -7.124749e-07 0. 0. 7.124749e-07 2.220446e-16 3.537e-21 0. 0. -3.537e-21 -1.20000 -1.52984e-05 0. 0. 1.52984e-05 -1.10000 -1.4683e-05 0. 0. 1.4683e-05 -1.00000 -1.40779e-05 0. 0. 1.40779e-05 -0.9 -1.34845e-05 0. 0. 1.34845e-05 -0.8 -1.29059e-05 0. 0. 1.29059e-05 -0.7 -1.23491e-05 0. 0. 1.23491e-05 -0.6 -1.18301e-05 0. 0. 1.18301e-05 -0.5 -1.13837e-05 0. 0. 1.13837e-05 -0.4 -1.10635e-05 0. 0. 1.10635e-05 -0.3 -1.08447e-05 0. 0. 1.08447e-05 -0.2 -9.877e-06 0. 0. 9.877e-06 -0.1 -6.4134e-06 0. 0. 6.4134e-06 2.220446e-16 2.030e-20 0. 0. -2.030e-20 -1.20000 -4.10109e-05 0. 0. 4.10109e-05 -1.10000 -3.95011e-05 0. 0. 3.95011e-05 -1.00000 -3.80377e-05 0. 0. 3.80377e-05 -0.9 -3.66462e-05 0. 0. 3.66462e-05 -0.8 -3.53707e-05 0. 0. 3.53707e-05 -0.7 -3.42785e-05 0. 0. 3.42785e-05 -0.6 -3.34415e-05 0. 0. 3.34415e-05 -0.5 -3.27682e-05 0. 0. 3.27682e-05 -0.4 -3.13062e-05 0. 0. 3.13062e-05 -0.3 -2.75764e-05 0. 0. 2.75764e-05 -0.2 -2.09876e-05 0. 0. 2.09876e-05 -0.1 -1.16759e-05 0. 0. 1.16759e-05 2.220446e-16 3.183e-20 0. 0. -3.183e-20 -1.20000 -7.24642e-05 0. 0. 7.24642e-05 -1.10000 -7.00754e-05 0. 0. 7.00754e-05 -1.00000 -6.79109e-05 0. 0. 6.79109e-05 -0.9 -6.60524e-05 0. 0. 6.60524e-05 -0.8 -6.45472e-05 0. 0. 6.45472e-05 -0.7 -6.31457e-05 0. 0. 6.31457e-05 -0.6 -6.09105e-05 0. 0. 6.09105e-05 -0.5 -5.67456e-05 0. 0. 5.67456e-05 -0.4 -5.00476e-05 0. 0. 5.00476e-05 -0.3 -4.0752e-05 0. 0. 4.0752e-05 -0.2 -2.9099e-05 0. 0. 2.9099e-05 -0.1 -1.54101e-05 0. 0. 1.54101e-05 2.220446e-16 2.632e-20 0. 0. -2.632e-20 -1.20000 -1.8308e-06 0. 0. 1.8308e-06 -1.10000 -1.7404e-06 0. 0. 1.7404e-06 -1.00000 -1.6532e-06 0. 0. 1.6532e-06 -0.9 -1.5701e-06 0. 0. 1.5701e-06 -0.8 -1.4927e-06 0. 0. 1.4927e-06 -0.7 -1.4235e-06 0. 0. 1.4235e-06 -0.6 -1.3666e-06 0. 0. 1.3666e-06 -0.5 -1.3262e-06 0. 0. 1.3262e-06 -0.4 -1.3022e-06 0. 0. 1.3022e-06 -0.3 -1.2853e-06 0. 0. 1.2853e-06 -0.2 -1.2338e-06 0. 0. 1.2338e-06 -0.1 -9.404547e-07 0. 0. 9.404547e-07 2.220446e-16 2.625e-21 0. 0. -2.625e-21 -1.20000 -7.3559e-06 0. 0. 7.3559e-06 -1.10000 -7.0758e-06 0. 0. 7.0758e-06 -1.00000 -6.8127e-06 0. 0. 6.8127e-06 -0.9 -6.5744e-06 0. 0. 6.5744e-06 -0.8 -6.3712e-06 0. 0. 6.3712e-06 -0.7 -6.2141e-06 0. 0. 6.2141e-06 -0.6 -6.1083e-06 0. 0. 6.1083e-06 -0.5 -6.0435e-06 0. 0. 6.0435e-06 -0.4 -5.9635e-06 0. 0. 5.9635e-06 -0.3 -5.6383e-06 0. 0. 5.6383e-06 -0.2 -4.6582e-06 0. 0. 4.6582e-06 -0.1 -2.7828e-06 0. 0. 2.7828e-06 2.220446e-16 5.651e-21 0. 0. -5.651e-21 -1.20000 -1.58039e-05 0. 0. 1.58039e-05 -1.10000 -1.53259e-05 0. 0. 1.53259e-05 -1.00000 -1.49138e-05 0. 0. 1.49138e-05 -0.9 -1.45824e-05 0. 0. 1.45824e-05 -0.8 -1.43389e-05 0. 0. 1.43389e-05 -0.7 -1.41717e-05 0. 0. 1.41717e-05 -0.6 -1.40106e-05 0. 0. 1.40106e-05 -0.5 -1.36084e-05 0. 0. 1.36084e-05 -0.4 -1.2581e-05 0. 0. 1.2581e-05 -0.3 -1.06975e-05 0. 0. 1.06975e-05 -0.2 -7.9231e-06 0. 0. 7.9231e-06 -0.1 -4.3228e-06 0. 0. 4.3228e-06 2.220446e-16 1.521e-20 0. 0. -1.521e-20 -1.20000 -2.59598e-05 0. 0. 2.59598e-05 -1.10000 -2.54242e-05 0. 0. 2.54242e-05 -1.00000 -2.50084e-05 0. 0. 2.50084e-05 -0.9 -2.46957e-05 0. 0. 2.46957e-05 -0.8 -2.43971e-05 0. 0. 2.43971e-05 -0.7 -2.38579e-05 0. 0. 2.38579e-05 -0.6 -2.27421e-05 0. 0. 2.27421e-05 -0.5 -2.08403e-05 0. 0. 2.08403e-05 -0.4 -1.80976e-05 0. 0. 1.80976e-05 -0.3 -1.45545e-05 0. 0. 1.45545e-05 -0.2 -1.02942e-05 0. 0. 1.02942e-05 -0.1 -5.4109e-06 0. 0. 5.4109e-06 2.220446e-16 1.350e-20 0. 0. -1.350e-20 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvgb_ig_st.standard0000644000175000017500000000616314163340332025007 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -6.02143e-05 -30.0764 30.0764 6.02143e-05 -1.10000 -5.80869e-05 -15.0374 15.0374 5.80869e-05 -1.00000 -5.55397e-05 0. 0. 5.55397e-05 -0.9 -5.25088e-05 15.0353 -15.0353 5.25088e-05 -0.8 -4.89282e-05 30.0678 -30.0678 4.89282e-05 -0.7 -4.47367e-05 45.0962 -45.0962 4.47367e-05 -0.6 -3.9891e-05 60.1185 -60.1185 3.9891e-05 -0.5 -3.43892e-05 75.1316 -75.1316 3.43892e-05 -0.4 -2.83093e-05 90.1294 -90.1294 2.83093e-05 -0.3 -2.18605e-05 105.0993 -105.0993 2.18605e-05 -0.2 -1.54575e-05 120.0116 -120.0116 1.54575e-05 -1.20000 -0.0006131695 -30.0698 30.0698 0.0006131695 -1.10000 -0.0005399678 -15.0339 15.0339 0.0005399678 -1.00000 -0.0004688583 0. 0. 0.0004688583 -0.9 -0.0004002694 15.0315 -15.0315 0.0004002694 -0.8 -0.0003345087 30.0599 -30.0599 0.0003345087 -0.7 -0.0002720767 45.0840 -45.0840 0.0002720767 -0.6 -0.0002138079 60.1021 -60.1021 0.0002138079 -0.5 -0.000160889 75.1113 -75.1113 0.000160889 -0.4 -0.0001147473 90.1067 -90.1067 0.0001147473 -0.3 -7.681e-05 105.0786 -105.0786 7.681e-05 -0.2 -4.80839e-05 120.0049 -120.0049 4.80839e-05 -1.20000 -9.64083e-05 -22.3559 22.3559 9.64083e-05 -1.10000 -9.24026e-05 -11.1771 11.1771 9.24026e-05 -1.00000 -8.76382e-05 0. 0. 8.76382e-05 -0.9 -8.19987e-05 11.1749 -11.1749 8.19987e-05 -0.8 -7.53615e-05 22.3467 -22.3467 7.53615e-05 -0.7 -6.76097e-05 33.5142 -33.5142 6.76097e-05 -0.6 -5.86548e-05 44.6753 -44.6753 5.86548e-05 -0.5 -4.8483e-05 55.8261 -55.8261 4.8483e-05 -0.4 -3.72459e-05 66.9597 -66.9597 3.72459e-05 -0.3 -2.54471e-05 78.0616 -78.0616 2.54471e-05 -0.2 -1.43092e-05 89.0988 -89.0988 1.43092e-05 -1.20000 -0.0009678639 -22.3492 22.3492 0.0009678639 -1.10000 -0.0008468036 -11.1736 11.1736 0.0008468036 -1.00000 -0.0007288791 0. 0. 0.0007288791 -0.9 -0.0006145697 11.1711 -11.1711 0.0006145697 -0.8 -0.0005045205 22.3390 -22.3390 0.0005045205 -0.7 -0.0003999771 33.5025 -33.5025 0.0003999771 -0.6 -0.0003028901 44.6599 -44.6599 0.0003028901 -0.5 -0.0002158079 55.8081 -55.8081 0.0002158079 -0.4 -0.000141591 66.9422 -66.9422 0.000141591 -0.3 -8.29389e-05 78.0523 -78.0523 8.29389e-05 -0.2 -4.16378e-05 89.1172 -89.1172 4.16378e-05 -1.20000 -3.44227e-05 -42.4092 42.4092 3.44227e-05 -1.10000 -3.34767e-05 -21.2039 21.2039 3.34767e-05 -1.00000 -3.23236e-05 0. 0. 3.23236e-05 -0.9 -3.09289e-05 21.2019 -21.2019 3.09289e-05 -0.8 -2.9257e-05 42.4011 -42.4011 2.9257e-05 -0.7 -2.72762e-05 63.5965 -63.5965 2.72762e-05 -0.6 -2.49669e-05 84.7865 -84.7865 2.49669e-05 -0.5 -2.23346e-05 105.9681 -105.9681 2.23346e-05 -0.4 -1.94272e-05 127.1361 -127.1361 1.94272e-05 -0.3 -1.63525e-05 148.2797 -148.2797 1.63525e-05 -0.2 -1.32624e-05 169.3721 -169.3721 1.32624e-05 -1.20000 -0.000358 -42.4027 42.4027 0.000358 -1.10000 -0.0003181331 -21.2004 21.2004 0.0003181331 -1.00000 -0.0002793038 0. 0. 0.0002793038 -0.9 -0.0002419965 21.1980 -21.1980 0.0002419965 -0.8 -0.0002064952 42.3930 -42.3930 0.0002064952 -0.7 -0.0001730596 63.5838 -63.5838 0.0001730596 -0.6 -0.0001420145 84.7687 -84.7687 0.0001420145 -0.5 -0.0001137967 105.9449 -105.9449 0.0001137967 -0.4 -8.89097e-05 127.1073 -127.1073 8.89097e-05 -0.3 -6.75481e-05 148.2455 -148.2455 6.75481e-05 -0.2 -4.95341e-05 169.3349 -169.3349 4.95341e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1d_lt.standard0000644000175000017500000004527314163340332025141 0ustar carstencarstenFreq N(d) 100.00000 5.782233681e-23 125.89254 4.595890849e-23 158.48932 3.653598025e-23 199.52623 2.904994404e-23 251.18864 2.310436489e-23 316.22777 1.838179876e-23 398.10717 1.4630625e-23 501.18723 1.165061689e-23 630.95734 9.28359961e-24 794.32823 7.40329681e-24 1000 5.909761e-24 1258.93 4.72323289e-24 1584.89 3.78108025e-24 1995.26 3.03247396e-24 2511.89 2.43796996e-24 3162.28 1.965604e-24 3981.07 1.59062544e-24 5011.87 1.29254161e-24 6309.57 1.05575625e-24 7943.28 8.6779024656676e-25 10000 7.1844033879396e-25 12589.25 5.9980765325625e-25 15848.93 5.0557432640625e-25 19952.62 4.3072207695364e-25 25118.86 3.71264769225e-25 31622.78 3.2403622686724e-25 39810.72 2.8652125261824e-25 50118.72 2.5672208900625e-25 63095.73 2.3305171416849e-25 79432.82 2.1424965521521e-25 100000 1.9931474523024e-25 125892.54 1.8745141748356e-25 158489.32 1.7802813158244e-25 199526.23 1.7054289939856e-25 251188.64 1.6459711501249e-25 316227.77 1.5987426471184e-25 398107.17 1.5612281732644e-25 501187.23 1.5314284742409e-25 630957.34 1.5077580276196e-25 794328.23 1.488956569e-25 1000000 1.4740216811401e-25 1258930 1.4621584097124e-25 1584890 1.4527349298576e-25 1995260 1.4452497102736e-25 2511890 1.4393039841856e-25 3162280 1.4345807707396e-25 3981070 1.4308297282161e-25 5011870 1.42784981161e-25 6309570 1.4254823109136e-25 7943280 1.4236019494225e-25 10000000 1.4221089619396e-25 12589250 1.4209228257169e-25 15848930 1.4199798500644e-25 19952620 1.4192315718361e-25 25118860 1.41863715904e-25 31622780 1.4181648817609e-25 39810720 1.4177898276025e-25 50118720 1.4174916271681e-25 63095730 1.4172551976025e-25 79432820 1.4170669716025e-25 100000000 1.4169179054809e-25 100.00000 1.45254741129e-21 125.89254 1.15389975481e-21 158.48932 9.1667856289e-22 199.52623 7.28244196e-22 251.18864 5.7856605156e-22 316.22777 4.5966931201e-22 398.10717 3.65230321e-22 501.18723 2.9021166736e-22 630.95734 2.3062370769e-22 794.32823 1.8329368996e-22 1000 1.4569455616e-22 1258.93 1.1582925376e-22 1584.89 9.210816729e-23 1995.26 7.326504025e-23 2511.89 5.829627904e-23 3162.28 4.640743129e-23 3981.07 3.696275209e-23 5011.87 2.946101284e-23 6309.57 2.350213441e-23 7943.28 1.876968976e-23 10000 1.500942564e-23 12589.25 1.202286276e-23 15848.93 9.65096356e-24 19952.62 7.76625424e-24 25118.86 6.26951521e-24 31622.78 5.080516e-24 39810.72 4.13634244e-24 50118.72 3.38596801e-24 63095.73 2.79023616e-24 79432.82 2.31678841e-24 100000 1.94100624e-24 125892.54 1.64224225e-24 158489.32 1.40517316e-24 199526.23 1.216609e-24 251188.64 1.06688241e-24 316227.77 9.4807182662404e-25 398107.17 8.5363093816225e-25 501187.23 7.7861405335921e-25 630957.34 7.1902581652521e-25 794328.23 6.71693345761e-25 1000000 6.3409576038169e-25 1258930 6.04231046329e-25 1584890 5.8050852430321e-25 1995260 5.6166511002624e-25 2511890 5.4669727634404e-25 3162280 5.3480788059136e-25 3981070 5.2536374247204e-25 5011870 5.1786201165169e-25 6309570 5.1190333086564e-25 7943280 5.0717001398569e-25 10000000 5.0341025809881e-25 12589250 5.0042381476096e-25 15848930 4.9805158654729e-25 19952620 4.9616724439396e-25 25118860 4.9467041624961e-25 31622780 4.9348152230976e-25 39810720 4.9253699537604e-25 50118720 4.9178690613504e-25 63095730 4.9119100284004e-25 79432820 4.9071762255376e-25 100000000 4.90341659536e-25 100.00000 6.715638601e-21 125.89254 5.33457865924e-21 158.48932 4.23756733156e-21 199.52623 3.36619275721e-21 251.18864 2.674027521e-21 316.22777 2.12421435664e-21 398.10717 1.68749245681e-21 501.18723 1.340584996e-21 630.95734 1.06503017104e-21 794.32823 8.4614664996e-22 1000 6.7228192656e-22 1258.93 5.3417841129e-22 1584.89 4.2447536784e-22 1995.26 3.3733934224e-22 2511.89 2.6812097536e-22 3162.28 2.1314248036e-22 3981.07 1.69468324e-22 5011.87 1.3477816836e-22 6309.57 1.0722395401e-22 7943.28 8.533510129e-23 10000 6.794869761e-23 12589.25 5.413722084e-23 15848.93 4.316752804e-23 19952.62 3.445455204e-23 25118.86 2.753205841e-23 31622.78 2.203457481e-23 39810.72 1.766689024e-23 50118.72 1.4197824e-23 63095.73 1.144265929e-23 79432.82 9.253764e-24 100000 7.51472569e-24 125892.54 6.13404289e-24 158489.32 5.03688249e-24 199526.23 4.165681e-24 251188.64 3.47337769e-24 316227.77 2.92341604e-24 398107.17 2.486929e-24 501187.23 2.13978384e-24 630957.34 1.86431716e-24 794328.23 1.64531929e-24 1000000 1.47161161e-24 1258930 1.33356304e-24 1584890 1.22367844e-24 1995260 1.13656921e-24 2511890 1.06750224e-24 3162280 1.01243844e-24 3981070 9.6876833815609e-25 5011870 9.3407798482441e-25 6309570 9.0652240195609e-25 7943280 8.8463411439001e-25 10000000 8.6724779512996e-25 12589250 8.5343729519889e-25 15848930 8.4246716317201e-25 19952620 8.3375325358081e-25 25118860 8.2683158208784e-25 31622780 8.2133365060516e-25 39810720 8.1696633427161e-25 50118720 8.1349720670464e-25 63095730 8.10741769744e-25 79432820 8.0855290689849e-25 100000000 8.0681425856656e-25 100.00000 1.742172967396e-20 125.89254 1.383879315456e-20 158.48932 1.099274662369e-20 199.52623 8.73206147025e-21 251.18864 6.93634125409e-21 316.22777 5.509944441e-21 398.10717 4.37692065889e-21 501.18723 3.47693019025e-21 630.95734 2.76203853601e-21 794.32823 2.19418233241e-21 1000 1.74311260036e-21 1258.93 1.38482225424e-21 1584.89 1.10021573025e-21 1995.26 8.74148356e-22 2511.89 6.9457548304e-22 3162.28 5.5193514489e-22 3981.07 4.3863438096e-22 5011.87 3.4863238089e-22 6309.57 2.7714258576e-22 7943.28 2.2035918025e-22 10000 1.7525258689e-22 12589.25 1.3942177929e-22 15848.93 1.1096094244e-22 19952.62 8.835436009e-23 25118.86 7.039713409e-23 31622.78 5.613306084e-23 39810.72 4.480294225e-23 50118.72 3.580346896e-23 63095.73 2.8654609e-23 79432.82 2.297572489e-23 100000 1.846506841e-23 125892.54 1.488262084e-23 158489.32 1.203604249e-23 199526.23 9.77562756e-24 251188.64 7.98006001e-24 316227.77 6.5536e-24 398107.17 5.42051524e-24 501187.23 4.52030121e-24 630957.34 3.80562064e-24 794328.23 3.23784036e-24 1000000 2.78656249e-24 1258930 2.42829889e-24 1584890 2.14388164e-24 1995260 1.91767104e-24 2511890 1.73817856e-24 3162280 1.59542161e-24 3981070 1.48206276e-24 5011870 1.39216401e-24 6309570 1.32066064e-24 7943280 1.26382564e-24 10000000 1.218816e-24 12589250 1.18287376e-24 15848930 1.15455025e-24 19952620 1.13188321e-24 25118860 1.11386916e-24 31622780 1.09977169e-24 39810720 1.08826624e-24 50118720 1.07931321e-24 63095730 1.07226025e-24 79432820 1.06646929e-24 100000000 1.06193025e-24 100.00000 4.512614976e-23 125.89254 3.586692321e-23 158.48932 2.851346404e-23 199.52623 2.267092996e-23 251.18864 1.803106369e-23 316.22777 1.434515625e-23 398.10717 1.141696521e-23 501.18723 9.09143104e-24 630.95734 7.24417225e-24 794.32823 5.77681225e-24 1000 4.61132676e-24 1258.93 3.68524809e-24 1584.89 2.94980625e-24 1995.26 2.36575161e-24 2511.89 1.901641e-24 3162.28 1.53313924e-24 3981.07 1.24032769e-24 5011.87 1.00781521e-24 6309.57 8.23031798521e-25 7943.28 6.7629225242601e-25 10000 5.59732911409e-25 12589.25 4.6714655075344e-25 15848.93 3.9360252750625e-25 19952.62 3.3518449198144e-25 25118.86 2.8878145597921e-25 31622.78 2.5192208025856e-25 39810.72 2.2264374368196e-25 50118.72 1.9938707617284e-25 63095.73 1.8091369026025e-25 79432.82 1.6623975717001e-25 100000 1.5458382841225e-25 125892.54 1.4532518119716e-25 158489.32 1.3797079371364e-25 199526.23 1.3212897852025e-25 251188.64 1.2748863008025e-25 316227.77 1.2380271510721e-25 398107.17 1.2087484610436e-25 501187.23 1.1854923837604e-25 630957.34 1.1670190139556e-25 794328.23 1.15234449444e-25 1000000 1.1406891553281e-25 1258930 1.1314302778276e-25 1584890 1.1240758220176e-25 1995260 1.1182342688001e-25 2511890 1.1135936073025e-25 3162280 1.1099078814784e-25 3981070 1.1069800691161e-25 5011870 1.1046542965956e-25 6309570 1.1028071289316e-25 7943280 1.1013397998736e-25 10000000 1.1001739370769e-25 12589250 1.0992480571081e-25 15848930 1.0985128041924e-25 19952620 1.097928225e-25 25118860 1.097464384e-25 31622780 1.0970960315536e-25 39810720 1.0968032487204e-25 50118720 1.0965707725401e-25 63095730 1.0963860013584e-25 79432820 1.09623899025e-25 100000000 1.0961224479076e-25 100.00000 2.47134259876e-21 125.89254 1.96317227929e-21 158.48932 1.55951538649e-21 199.52623 1.23887808529e-21 251.18864 9.8418356089e-22 316.22777 7.8187903641e-22 398.10717 6.2118085225e-22 501.18723 4.9353288336e-22 630.95734 3.9213900625e-22 794.32823 3.1160016484e-22 1000 2.4762484321e-22 1258.93 1.9680722944e-22 1584.89 1.5644005776e-22 1995.26 1.2437602576e-22 2511.89 9.890700304e-23 3162.28 7.86769e-23 3981.07 6.260765625e-23 5011.87 4.984218801e-23 6309.57 3.9702601e-23 7943.28 3.164850049e-23 10000 2.525163001e-23 12589.25 2.016997921e-23 15848.93 1.613307556e-23 19952.62 1.292690116e-23 25118.86 1.037999524e-23 31622.78 8.35672464e-24 39810.72 6.75012361e-24 50118.72 5.47326025e-24 63095.73 4.45969924e-24 79432.82 3.65421456e-24 100000 3.01439044e-24 125892.54 2.50620561e-24 158489.32 2.1025e-24 199526.23 1.78195801e-24 251188.64 1.52720164e-24 316227.77 1.324801e-24 398107.17 1.164241e-24 501187.23 1.03652761e-24 630957.34 9.3513522317121e-25 794328.23 8.5459504513761e-25 1000000 7.9061991005761e-25 1258930 7.3980245785329e-25 1584890 6.9943682938756e-25 1995260 6.6737331781264e-25 2511890 6.4190429443449e-25 3162280 6.2167358698384e-25 3981070 6.0560364458916e-25 5011870 5.9283901756816e-25 6309570 5.8269955842576e-25 7943280 5.7464556369444e-25 10000000 5.6824805997729e-25 12589250 5.6316634722481e-25 15848930 5.5912976340004e-25 19952620 5.5592338624729e-25 25118860 5.5337649789184e-25 31622780 5.5135332550489e-25 39810720 5.4974647131121e-25 50118720 5.4846999327376e-25 63095730 5.4745600546729e-25 79432820 5.4665054790724e-25 100000000 5.4601089455025e-25 100.00000 1.304737347001e-20 125.89254 1.036409513764e-20 158.48932 8.23269504964e-21 199.52623 6.53964959761e-21 251.18864 5.19482004001e-21 316.22777 4.12658488225e-21 398.10717 3.27805486849e-21 501.18723 2.60404048804e-21 630.95734 2.06865780625e-21 794.32823 1.64338619769e-21 1000 1.30557923584e-21 1258.93 1.03725220096e-21 1584.89 8.2410907329e-22 1995.26 6.5480715664e-22 2511.89 5.2032347236e-22 3162.28 4.1350002409e-22 3981.07 3.2864976369e-22 5011.87 2.6124580161e-22 6309.57 2.0770862641e-22 7943.28 1.6518161529e-22 10000 1.31400369e-22 12589.25 1.0456903081e-22 15848.93 8.325467536e-23 19952.62 6.632310721e-23 25118.86 5.287471225e-23 31622.78 4.219281936e-23 39810.72 3.370731364e-23 50118.72 2.6967249e-23 63095.73 2.161413081e-23 79432.82 1.736138889e-23 100000 1.398311236e-23 125892.54 1.129968225e-23 158489.32 9.16817841e-24 199526.23 7.47530281e-24 251188.64 6.130576e-24 316227.77 5.06205001e-24 398107.17 4.21357729e-24 501187.23 3.53966596e-24 630957.34 3.00432889e-24 794328.23 2.57891481e-24 1000000 2.24130841e-24 1258930 1.97290116e-24 1584890 1.75960225e-24 1995260 1.59037321e-24 2511890 1.45588356e-24 3162280 1.34908225e-24 3981070 1.26427536e-24 5011870 1.196836e-24 6309570 1.14340249e-24 7943280 1.10082064e-24 10000000 1.067089e-24 12589250 1.04019601e-24 15848930 1.01888836e-24 19952620 1.002001e-24 25118860 9.8846664771556e-25 31622780 9.7778437336804e-25 39810720 9.6929912399401e-25 50118720 9.6255897598081e-25 63095730 9.5720511746596e-25 79432820 9.5295238277184e-25 100000000 9.49574240521e-25 100.00000 3.519890042769e-20 125.89254 2.795975261689e-20 158.48932 2.220946400656e-20 199.52623 1.764186963529e-20 251.18864 1.401368234436e-20 316.22777 1.1131727049e-20 398.10717 8.84250599716e-21 501.18723 7.02409933801e-21 630.95734 5.57970156676e-21 794.32823 4.432363776e-21 1000 3.52101011161e-21 1258.93 2.79709823376e-21 1584.89 2.22206646544e-21 1995.26 1.76531064336e-21 2511.89 1.40248752004e-21 3162.28 1.114291161e-21 3981.07 8.8537192704e-22 5011.87 7.0353318564e-22 6309.57 5.5909075401e-22 7943.28 4.4435796804e-22 10000 3.5322195364e-22 12589.25 2.80830564e-22 15848.93 2.2332612481e-22 19952.62 1.7765157796e-22 25118.86 1.4136972201e-22 31622.78 1.12550881e-22 39810.72 8.965817344e-23 50118.72 7.147349764e-23 63095.73 5.702968324e-23 79432.82 4.555710016e-23 100000 3.644295424e-23 125892.54 2.920429681e-23 158489.32 2.345368041e-23 199526.23 1.888597764e-23 251188.64 1.525761721e-23 316227.77 1.237562041e-23 398107.17 1.008634081e-23 501187.23 8.26792516e-24 630957.34 6.82358884e-24 794328.23 5.67630625e-24 1000000 4.76505241e-24 1258930 4.04130609e-24 1584890 3.46629924e-24 1995260 3.00953104e-24 2511890 2.64647824e-24 3162280 2.35837449e-24 3981070 2.12955649e-24 5011870 1.94769936e-24 6309570 1.80311184e-24 7943280 1.68844036e-24 10000000 1.59719044e-24 12589250 1.52497801e-24 15848930 1.46748996e-24 19952620 1.42181776e-24 25118860 1.385329e-24 31622780 1.35652609e-24 39810720 1.33379401e-24 50118720 1.315609e-24 63095730 1.30119649e-24 79432820 1.28958736e-24 100000000 1.28051856e-24 100.00000 5.502969124e-23 125.89254 4.3744996e-23 158.48932 3.478168576e-23 199.52623 2.766234025e-23 251.18864 2.200735744e-23 316.22777 1.751506201e-23 398.10717 1.394649025e-23 501.18723 1.111222225e-23 630.95734 8.86074289e-24 794.32823 7.07240836e-24 1000 5.65155529e-24 1258.93 4.52327824e-24 1584.89 3.62673936e-24 1995.26 2.91487329e-24 2511.89 2.34947584e-24 3162.28 1.90026225e-24 3981.07 1.54330929e-24 5011.87 1.25978176e-24 6309.57 1.03469584e-24 7943.28 8.5588809022084e-25 10000 7.1383032527104e-25 12589.25 6.0098977036609e-25 15848.93 5.1135742657476e-25 19952.62 4.4015993147025e-25 25118.86 3.8360569475281e-25 31622.78 3.3868314483201e-25 39810.72 3.0299982629764e-25 50118.72 2.7465554896081e-25 63095.73 2.5214096420496e-25 79432.82 2.34256968001e-25 100000 2.2005115103521e-25 125892.54 2.0876711362816e-25 158489.32 1.9980390423249e-25 199526.23 1.92684125764e-25 251188.64 1.8702874401124e-25 316227.77 1.8253641015184e-25 398107.17 1.7896808733444e-25 501187.23 1.7613373655241e-25 630957.34 1.7388224466561e-25 794328.23 1.7209380199561e-25 1000000 1.7067325712644e-25 1258930 1.6954481526724e-25 1584890 1.6864853475856e-25 1995260 1.6793653176036e-25 2511890 1.673709921e-25 3162280 1.6692176387236e-25 3981070 1.6656495450169e-25 5011870 1.6628151084169e-25 6309570 1.6605633150001e-25 7943280 1.6587748713636e-25 10000000 1.6573545807844e-25 12589250 1.6562262744976e-25 15848930 1.6553302530625e-25 19952620 1.654618329e-25 25118860 1.6540521536016e-25 31622780 1.6536031868304e-25 39810720 1.6532461716169e-25 50118720 1.6529631892225e-25 63095730 1.6527379590544e-25 79432820 1.6525590868224e-25 100000000 1.6524168090049e-25 100.00000 7.0690579129e-22 125.89254 5.6160468324e-22 158.48932 4.4618535361e-22 199.52623 3.5450488089e-22 251.18864 2.8167915889e-22 316.22777 2.2383451321e-22 398.10717 1.7788623876e-22 501.18723 1.4138636836e-22 630.95734 1.1239392256e-22 794.32823 8.936488089e-23 1000 7.107333025e-23 1258.93 5.654288025e-23 1584.89 4.500128889e-23 1995.26 3.583339321e-23 2511.89 2.855085489e-23 3162.28 2.276625796e-23 3981.07 1.817061129e-23 5011.87 1.452067236e-23 6309.57 1.162196281e-23 7943.28 9.31897729e-24 10000 7.48952689e-24 12589.25 6.036849e-24 15848.93 4.88233216e-24 19952.62 3.96567396e-24 25118.86 3.23748049e-24 31622.78 2.65885636e-24 39810.72 2.19958561e-24 50118.72 1.83439936e-24 63095.73 1.54455184e-24 79432.82 1.31423296e-24 100000 1.13145769e-24 125892.54 9.8606846289604e-25 158489.32 8.7064985663044e-25 199526.23 7.7896969757476e-25 251188.64 7.0614560143009e-25 316227.77 6.4829921200209e-25 398107.17 6.0235030221129e-25 501187.23 5.6585177825344e-25 630957.34 5.3685984093184e-25 794328.23 5.138309124e-25 1000000 4.9553828144704e-25 1258930 4.8100799604676e-25 1584890 4.69466150976e-25 1995260 4.6029806613729e-25 2511890 4.5301568654736e-25 3162280 4.4723097626089e-25 3981070 4.42636065481e-25 5011870 4.3898628364816e-25 6309570 4.3608708408721e-25 7943280 4.3378412440441e-25 10000000 4.3195495339584e-25 12589250 4.3050185277696e-25 15848930 4.2934771366369e-25 19952620 4.2843085884369e-25 25118860 4.2770265850404e-25 31622780 4.2712420404676e-25 39810720 4.2666475313764e-25 50118720 4.2629969480569e-25 63095730 4.2600984925249e-25 79432820 4.2577947931684e-25 100000000 4.2559653298176e-25 100.00000 2.84272381584e-21 125.89254 2.25819792025e-21 158.48932 1.79387825764e-21 199.52623 1.4250625e-21 251.18864 1.13210715024e-21 316.22777 8.994001e-22 398.10717 7.1455170721e-22 501.18723 5.67725929e-22 630.95734 4.51095121e-22 794.32823 3.5845091584e-22 1000 2.8486350841e-22 1258.93 2.2640919961e-22 1584.89 1.7997832336e-22 1995.26 1.4309662129e-22 2511.89 1.1380195684e-22 3162.28 9.052951609e-23 3981.07 7.2046144e-23 5011.87 5.736244644e-23 6309.57 4.570030404e-23 7943.28 3.643571044e-23 10000 2.907689929e-23 12589.25 2.323143601e-23 15848.93 1.858816996e-23 19952.62 1.490037201e-23 25118.86 1.197090801e-23 31622.78 9.64350916e-24 39810.72 7.795264e-24 50118.72 6.32673409e-24 63095.73 5.16062089e-24 79432.82 4.23412929e-24 100000 3.49802209e-24 125892.54 2.91350761e-24 158489.32 2.449225e-24 199526.23 2.08051776e-24 251188.64 1.787569e-24 316227.77 1.55475961e-24 398107.17 1.37007025e-24 501187.23 1.223236e-24 630957.34 1.10649361e-24 794328.23 1.01384761e-24 1000000 9.4033030825969e-25 1258930 8.81876880889e-25 1584890 8.3544572233984e-25 1995260 7.9856421082564e-25 2511890 7.6926809848849e-25 3162280 7.4599738248996e-25 3981070 7.2751278478096e-25 5011870 7.1282999441476e-25 6309570 7.0116691292041e-25 7943280 6.9190271888761e-25 10000000 6.8454392996089e-25 12589250 6.7869850515856e-25 15848930 6.7405544967744e-25 19952620 6.7036728259216e-25 25118860 6.6743769338596e-25 31622780 6.6511054795761e-25 39810720 6.6326218216281e-25 50118720 6.6179380175041e-25 63095730 6.606275841e-25 79432820 6.5970116595601e-25 100000000 6.5896533758224e-25 100.00000 7.09150936321e-21 125.89254 5.63316295936e-21 158.48932 4.47475372096e-21 199.52623 3.55459209616e-21 251.18864 2.82367892689e-21 316.22777 2.24310220996e-21 398.10717 1.781937369e-21 501.18723 1.41561052516e-21 630.95734 1.12463646736e-21 794.32823 8.9350177225e-22 1000 7.09902736e-22 1258.93 5.6407200004e-22 1584.89 4.4822817796e-22 1995.26 3.5621277696e-22 2511.89 2.8312100644e-22 3162.28 2.2506600484e-22 3981.07 1.7894680441e-22 5011.87 1.4231535616e-22 6309.57 1.1321811216e-22 7943.28 9.010375929e-23 10000 7.174428804e-23 12589.25 5.716116025e-23 15848.93 4.557735121e-23 19952.62 3.637537344e-23 25118.86 2.906611569e-23 31622.78 2.326036441e-23 39810.72 1.864857856e-23 50118.72 1.498541521e-23 63095.73 1.2075625e-23 79432.82 9.76437504e-24 100000 7.92872964e-24 125892.54 6.47040969e-24 158489.32 5.31164209e-24 199526.23 4.39153936e-24 251188.64 3.66071689e-24 316227.77 3.08037601e-24 398107.17 2.61889489e-24 501187.23 2.25270081e-24 630957.34 1.96168036e-24 794328.23 1.73054025e-24 1000000 1.54703844e-24 1258930 1.40114569e-24 1584890 1.28527569e-24 1995260 1.19333776e-24 2511890 1.12021056e-24 3162280 1.06213636e-24 3981070 1.016064e-24 5011870 9.7942770732816e-25 6309570 9.5032979292196e-25 7943280 9.2721665965681e-25 10000000 9.0885696493201e-25 12589250 8.9427359212816e-25 15848930 8.8268937474025e-25 19952620 8.7348781447249e-25 25118860 8.6617885038129e-25 31622780 8.6037293345641e-25 39810720 8.5576135043169e-25 50118720 8.5209810199056e-25 63095730 8.4918823649881e-25 79432820 8.4687699518464e-25 100000000 8.4504096997321e-25 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_ig_lw.standard0000644000175000017500000000613714163340332024642 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -0.0001112691 -31728.3 31728.3 0.0001112691 -1.10000 -0.0001058366 -29083.1 29083.1 0.0001058366 -1.00000 -9.95147e-05 -26437.9 26437.9 9.95147e-05 -0.9 -9.21696e-05 -23792.8 23792.8 9.21696e-05 -0.8 -8.36577e-05 -21147.8 21147.8 8.36577e-05 -0.7 -7.38355e-05 -18502.9 18502.9 7.38355e-05 -0.6 -6.25839e-05 -15858 15858 6.25839e-05 -0.5 -4.98617e-05 -13213.4 13213.4 4.98617e-05 -0.4 -3.58319e-05 -10569 10569 3.58319e-05 -0.3 -2.11938e-05 -7925.2 7925.2 2.11938e-05 -0.2 -8.1445e-06 -5282.2 5282.2 8.1445e-06 -1.20000 -0.0012217 -31721.9 31721.9 0.0012217 -1.10000 -0.0010522 -29077 29077 0.0010522 -1.00000 -0.0008888303 -26432.3 26432.3 0.0008888303 -0.9 -0.0007335234 -23787.7 23787.7 0.0007335234 -0.8 -0.0005872355 -21143.2 21143.2 0.0005872355 -0.7 -0.0004510688 -18498.9 18498.9 0.0004510688 -0.6 -0.0003269224 -15854.8 15854.8 0.0003269224 -0.5 -0.0002178127 -13210.9 13210.9 0.0002178127 -0.4 -0.0001277442 -10567.5 10567.5 0.0001277442 -0.3 -6.09548e-05 -7924.4 7924.4 6.09548e-05 -0.2 -2.01909e-05 -5282.1 5282.1 2.01909e-05 -1.20000 -0.0001807667 -23584.3 23584.3 0.0001807667 -1.10000 -0.0001712269 -21617.7 21617.7 0.0001712269 -1.00000 -0.0001601625 -19651.2 19651.2 0.0001601625 -0.9 -0.0001473455 -17684.7 17684.7 0.0001473455 -0.8 -0.0001325291 -15718.2 15718.2 0.0001325291 -0.7 -0.0001154652 -13751.9 13751.9 0.0001154652 -0.6 -9.59439e-05 -11785.6 11785.6 9.59439e-05 -0.5 -7.38893e-05 -9819.6 9819.6 7.38893e-05 -0.4 -4.96164e-05 -7853.8 7853.8 4.96164e-05 -0.3 -2.46816e-05 -5888.6 5888.6 2.46816e-05 -0.2 -5.264e-06 -3924.5 3924.5 5.264e-06 -1.20000 -0.0019455 -23577.7 23577.7 0.0019455 -1.10000 -0.0016687 -21611.5 21611.5 0.0016687 -1.00000 -0.0014024 -19645.4 19645.4 0.0014024 -0.9 -0.0011484 -17679.5 17679.5 0.0011484 -0.8 -0.0009078598 -15713.6 15713.6 0.0009078598 -0.7 -0.0006833459 -13748 13748 0.0006833459 -0.6 -0.0004793982 -11782.5 11782.5 0.0004793982 -0.5 -0.0003027384 -9817.3 9817.3 0.0003027384 -0.4 -0.0001615566 -7852.4 7852.4 0.0001615566 -0.3 -6.38558e-05 -5888.1 5888.1 6.38558e-05 -0.2 -1.33965e-05 -3924.5 3924.5 1.33965e-05 -1.20000 -6.22403e-05 -44737.4 44737.4 6.22403e-05 -1.10000 -5.95036e-05 -41008.2 41008.2 5.95036e-05 -1.00000 -5.63048e-05 -37279 37279 5.63048e-05 -0.9 -5.25743e-05 -33549.9 33549.9 5.25743e-05 -0.8 -4.82381e-05 -29820.9 29820.9 4.82381e-05 -0.7 -4.32233e-05 -26091.9 26091.9 4.32233e-05 -0.6 -3.74708e-05 -22363.1 22363.1 3.74708e-05 -0.5 -3.09608e-05 -18634.4 18634.4 3.09608e-05 -0.4 -2.37658e-05 -14906.1 14906.1 2.37658e-05 -0.3 -1.61608e-05 -11178.2 11178.2 1.61608e-05 -0.2 -8.8535e-06 -7451 7451 8.8535e-06 -1.20000 -0.0007038663 -44731.3 44731.3 0.0007038663 -1.10000 -0.0006105533 -41002.3 41002.3 0.0006105533 -1.00000 -0.0005194304 -37273.5 37273.5 0.0005194304 -0.9 -0.0004325028 -33544.9 33544.9 0.0004325028 -0.8 -0.0003507865 -29816.3 29816.3 0.0003507865 -0.7 -0.0002750606 -26088 26088 0.0002750606 -0.6 -0.0002061627 -22359.8 22359.8 0.0002061627 -0.5 -0.0001451695 -18631.9 18631.9 0.0001451695 -0.4 -9.34991e-05 -14904.3 14904.3 9.34991e-05 -0.3 -5.27872e-05 -11177.2 11177.2 5.27872e-05 -0.2 -2.43694e-05 -7450.7 7450.7 2.43694e-05 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_ig_st.standard0000644000175000017500000000607114163340332024643 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -5.4801e-06 -1640.6 1640.6 5.4801e-06 -1.10000 -5.2117e-06 -1503.9 1503.9 5.2117e-06 -1.00000 -4.8984e-06 -1367.1 1367.1 4.8984e-06 -0.9 -4.5332e-06 -1230.3 1230.3 4.5332e-06 -0.8 -4.1084e-06 -1093.5 1093.5 4.1084e-06 -0.7 -3.6163e-06 -956.7704 956.7704 3.6163e-06 -0.6 -3.0502e-06 -820.0078 820.0078 3.0502e-06 -0.5 -2.4079e-06 -683.2550 683.2550 2.4079e-06 -0.4 -1.6991e-06 -546.5180 546.5180 1.6991e-06 -0.3 -9.655287e-07 -409.8082 409.8082 9.655287e-07 -0.2 -3.381477e-07 -273.1468 273.1468 3.381477e-07 -1.20000 -5.92179e-05 -1640.3 1640.3 5.92179e-05 -1.10000 -5.09181e-05 -1503.6 1503.6 5.09181e-05 -1.00000 -4.29313e-05 -1366.8 1366.8 4.29313e-05 -0.9 -3.53396e-05 -1230.1 1230.1 3.53396e-05 -0.8 -2.81873e-05 -1093.3 1093.3 2.81873e-05 -0.7 -2.15332e-05 -956.5760 956.5760 2.15332e-05 -0.6 -1.54784e-05 -819.8506 819.8506 1.54784e-05 -0.5 -1.01808e-05 -683.1386 683.1386 1.01808e-05 -0.4 -5.8474e-06 -546.4447 546.4447 5.8474e-06 -0.3 -2.6912e-06 -409.7758 409.7758 2.6912e-06 -0.2 -8.349016e-07 -273.1418 273.1418 8.349016e-07 -1.20000 -8.919e-06 -1219.5 1219.5 8.919e-06 -1.10000 -8.4472e-06 -1117.8 1117.8 8.4472e-06 -1.00000 -7.8981e-06 -1016.1 1016.1 7.8981e-06 -0.9 -7.2597e-06 -914.4633 914.4633 7.2597e-06 -0.8 -6.5185e-06 -812.7799 812.7799 6.5185e-06 -0.7 -5.6611e-06 -711.1005 711.1005 5.6611e-06 -0.6 -4.6755e-06 -609.4271 609.4271 4.6755e-06 -0.5 -3.5578e-06 -507.7631 507.7631 3.5578e-06 -0.4 -2.3268e-06 -406.1152 406.1152 2.3268e-06 -0.3 -1.0793e-06 -304.4974 304.4974 1.0793e-06 -0.2 -1.898282e-07 -202.9415 202.9415 1.898282e-07 -1.20000 -9.45379e-05 -1219.2 1219.2 9.45379e-05 -1.10000 -8.09622e-05 -1117.5 1117.5 8.09622e-05 -1.00000 -6.79109e-05 -1015.9 1015.9 6.79109e-05 -0.9 -5.54542e-05 -914.2039 914.2039 5.54542e-05 -0.8 -4.36538e-05 -812.5519 812.5519 4.36538e-05 -0.7 -3.26442e-05 -710.9079 710.9079 3.26442e-05 -0.6 -2.26684e-05 -609.2742 609.2742 2.26684e-05 -0.5 -1.40779e-05 -507.6542 507.6542 1.40779e-05 -0.4 -7.2956e-06 -406.0528 406.0528 7.2956e-06 -0.3 -2.7227e-06 -304.4780 304.4780 2.7227e-06 -0.2 -5.021654e-07 -202.9425 202.9425 5.021654e-07 -1.20000 -3.0576e-06 -2313.3 2313.3 3.0576e-06 -1.10000 -2.9225e-06 -2120.5 2120.5 2.9225e-06 -1.00000 -2.7642e-06 -1927.7 1927.7 2.7642e-06 -0.9 -2.5792e-06 -1734.8 1734.8 2.5792e-06 -0.8 -2.3634e-06 -1542 1542 2.3634e-06 -0.7 -2.113e-06 -1349.2 1349.2 2.113e-06 -0.6 -1.8249e-06 -1156.4 1156.4 1.8249e-06 -0.5 -1.498e-06 -963.5748 963.5748 1.498e-06 -0.4 -1.1364e-06 -770.7845 770.7845 1.1364e-06 -0.3 -7.560884e-07 -578.0186 578.0186 7.560884e-07 -0.2 -3.975892e-07 -385.2915 385.2915 3.975892e-07 -1.20000 -3.40194e-05 -2313 2313 3.40194e-05 -1.10000 -2.94515e-05 -2120.2 2120.2 2.94515e-05 -1.00000 -2.50084e-05 -1927.4 1927.4 2.50084e-05 -0.9 -2.07742e-05 -1734.6 1734.6 2.07742e-05 -0.8 -1.67953e-05 -1541.8 1541.8 1.67953e-05 -0.7 -1.3111e-05 -1349 1349 1.3111e-05 -0.6 -9.7648e-06 -1156.2 1156.2 9.7648e-06 -0.5 -6.8127e-06 -963.4515 963.4515 6.8127e-06 -0.4 -4.328e-06 -770.7003 770.7003 4.328e-06 -0.3 -2.3929e-06 -577.9723 577.9723 2.3929e-06 -0.2 -1.0702e-06 -385.2753 385.2753 1.0702e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_ig_st.standard0000644000175000017500000000711414163340332025212 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258.93 4.59303216537423e-15 3.20280786522017e-15 5.48426090908113e-16 1584.89 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995.26 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511.89 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162.28 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981.07 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011.87 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309.57 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943.28 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589.25 4.59305419989505e-15 3.20282058562792e-15 5.48429533273533e-16 15848.93 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952.62 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118.86 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622.78 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810.72 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118.72 4.59312826999807e-15 3.20286862079649e-15 5.48429486692448e-16 63095.73 4.59310377859218e-15 3.20273703535532e-15 5.48429556485134e-16 79432.82 4.59314917365216e-15 3.20282191331486e-15 5.48429304591349e-16 100000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 125892.54 4.59301102152014e-15 3.20275635735849e-15 5.48429359020306e-16 158489.32 4.59300903501707e-15 3.20279483499135e-15 5.48429359492188e-16 199526.23 4.59303058959939e-15 3.20278154657951e-15 5.48429357426682e-16 251188.64 4.59308230645884e-15 3.20282128138925e-15 5.48429398703038e-16 316227.77 4.59304383880213e-15 3.20280003035121e-15 5.48437417394552e-16 398107.17 4.5930625695156e-15 3.20283060106835e-15 5.48417027840674e-16 501187.23 4.59306448389069e-15 3.2028049179071e-15 5.48418974521165e-16 630957.34 4.5930530386915e-15 3.20281250539176e-15 5.48428008255517e-16 794328.23 4.59304881807746e-15 3.20282179235144e-15 5.48436897718134e-16 1000000 4.59305250268901e-15 3.20281815928699e-15 5.48432018400362e-16 1258930 4.59303216537423e-15 3.20280786522017e-15 5.48426090908114e-16 1584890 4.59305847668567e-15 3.20282138568704e-15 5.48434784875971e-16 1995260 4.59305981408807e-15 3.2028251217873e-15 5.48426719191492e-16 2511890 4.59304404341075e-15 3.20281669115774e-15 5.48430640243211e-16 3162280 4.59305056400919e-15 3.20281783254999e-15 5.48426952668254e-16 3981070 4.59305253746981e-15 3.20281997536448e-15 5.48429255405594e-16 5011870 4.5930538894561e-15 3.20282226550847e-15 5.48428752876663e-16 6309570 4.59305551372234e-15 3.20282179858376e-15 5.48430826220852e-16 7943280 4.59305415529344e-15 3.20282071609526e-15 5.48429041949185e-16 10000000 4.59305250268901e-15 3.20281975083642e-15 5.484288353015e-16 12589250 4.59305419989505e-15 3.20282058562791e-15 5.48429533273533e-16 15848930 4.59305279521245e-15 3.2028203441549e-15 5.4842972995928e-16 19952620 4.59305281712831e-15 3.2028203160279e-15 5.48429360119995e-16 25118860 4.59305325832913e-15 3.20281989059373e-15 5.48429612757994e-16 31622780 4.59305195903292e-15 3.20281885160549e-15 5.48429312692144e-16 39810720 4.59306222339808e-15 3.20281916589882e-15 5.48429379666326e-16 50118720 4.59312826999806e-15 3.20286862079649e-15 5.48429486692448e-16 63095730 4.59310377859218e-15 3.20273703535532e-15 5.4842930424153e-16 79432820 4.59314917365216e-15 3.20282191331486e-15 5.48429504955561e-16 100000000 4.59305250268901e-15 3.2028340747813e-15 5.48429471921273e-16 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2d_sw.standard0000644000175000017500000004516314163340332025152 0ustar carstencarstenFreq N(d) 100.00000 5.70209234884e-21 125.89254 4.53055532836e-21 158.48932 3.59996400009e-21 199.52623 2.86077359044e-21 251.18864 2.27361126976e-21 316.22777 1.80721912996e-21 398.10717 1.43674353936e-21 501.18723 1.14246704016e-21 630.95734 9.0871499601e-22 794.32823 7.2303983236e-22 1000 5.7554888836e-22 1258.93 4.5839666404e-22 1584.89 3.6533735044e-22 1995.26 2.91419041e-22 2511.89 2.3270282116e-22 3162.28 1.8606324025e-22 3981.07 1.4901573184e-22 5011.87 1.1958734736e-22 6309.57 9.621255744e-23 7943.28 7.764429456e-23 10000 6.289600249e-23 12589.25 5.1179716e-23 15848.93 4.1873841e-23 19952.62 3.448273284e-23 25118.86 2.861073121e-23 31622.78 2.394634225e-23 39810.72 2.024190081e-23 50118.72 1.729894464e-23 63095.73 1.4961424e-23 79432.82 1.310512401e-23 100000 1.163014609e-23 125892.54 1.0458756e-23 158489.32 9.52771689e-24 199526.23 8.78885316e-24 251188.64 8.20135044e-24 316227.77 7.73507344e-24 398107.17 7.36471044e-24 501187.23 7.070281e-24 630957.34 6.83665609e-24 794328.23 6.65072521e-24 1000000 6.50352004e-24 1258930 6.38623441e-24 1584890 6.29307396e-24 1995260 6.21953721e-24 2511890 6.16082041e-24 3162280 6.11375076e-24 3981070 6.07671801e-24 5011870 6.04766464e-24 6309570 6.02407936e-24 7943280 6.00544036e-24 10000000 5.99074576e-24 12589250 5.97900304e-24 15848930 5.96971489e-24 19952620 5.96238724e-24 25118860 5.95652836e-24 31622780 5.95164816e-24 39810720 5.94823321e-24 50118720 5.94530689e-24 63095730 5.94286884e-24 79432820 5.94091876e-24 100000000 5.93945641e-24 100.00000 8.0351718343744e-19 125.89254 6.3827524359369e-19 158.48932 5.0701890516676e-19 199.52623 4.0275841005625e-19 251.18864 3.1994125632225e-19 316.22777 2.5415724042801e-19 398.10717 2.0190320036496e-19 501.18723 1.6039632512401e-19 630.95734 1.2742622441761e-19 794.32823 1.0123717604841e-19 1000 8.043440521216e-20 1258.93 6.391021634209e-20 1584.89 5.078460559936e-20 1995.26 4.035855995136e-20 2511.89 3.207684582001e-20 3162.28 2.549843693329e-20 3981.07 2.027303259556e-20 5011.87 1.612234588644e-20 6309.57 1.2825336001e-20 7943.28 1.020643452361e-20 10000 8.12615708304e-21 12589.25 6.47373114025e-21 15848.93 5.16117238569e-21 19952.62 4.118558976e-21 25118.86 3.290399044e-21 31622.78 2.63255191056e-21 39810.72 2.11001503801e-21 50118.72 1.69494419809e-21 63095.73 1.36524338064e-21 79432.82 1.10335580224e-21 100000 8.95326084e-22 125892.54 7.3008580401e-22 158489.32 5.9882494681e-22 199526.23 4.9456867321e-22 251188.64 4.1174903056e-22 316227.77 3.4596744004e-22 398107.17 2.93711044e-22 501187.23 2.52206161e-22 630957.34 2.1923540356e-22 794328.23 1.9304601481e-22 1000000 1.7224200081e-22 1258930 1.5571795369e-22 1584890 1.4259225744e-22 1995260 1.3216721296e-22 2511890 1.2388580416e-22 3162280 1.1730622864e-22 3981070 1.1208033424e-22 5011870 1.07931321e-22 6309570 1.0463448681e-22 7943280 1.0201404004e-22 10000000 9.993401089e-23 12589250 9.828144769e-23 15848930 9.696931729e-23 19952620 9.592635364e-23 25118860 9.509955361e-23 31622780 9.444146761e-23 39810720 9.391741921e-23 50118720 9.350309809e-23 63095730 9.317268676e-23 79432820 9.291224881e-23 100000000 9.270416089e-23 100.00000 2.45893761e-18 125.89254 1.95328576e-18 158.48932 1.55151936e-18 199.52623 1.23232201e-18 251.18864 9.7899111782404e-19 316.22777 7.7768041067161e-19 398.10717 6.1777367780164e-19 501.18723 4.9075531084449e-19 630.95734 3.8986099893225e-19 794.32823 3.09717849529e-19 1000 2.4605776497241e-19 1258.93 1.9549087459225e-19 1584.89 1.5532411089924e-19 1995.26 1.2341850531409e-19 2511.89 9.807501046249e-20 3162.28 7.794398504025e-20 3981.07 6.195330077764e-20 5011.87 4.925146017289e-20 6309.57 3.9162035236e-20 7943.28 3.114769646641e-20 10000 2.478171756841e-20 12589.25 1.972502273764e-20 15848.93 1.570833582241e-20 19952.62 1.251778331241e-20 25118.86 9.98342687241e-21 31622.78 7.97031130756e-21 39810.72 6.37124836401e-21 50118.72 5.10107351524e-21 63095.73 4.09212251809e-21 79432.82 3.29069733316e-21 100000 2.65409402041e-21 125892.54 2.14842447121e-21 158489.32 1.74675515364e-21 199526.23 1.42769866801e-21 251188.64 1.17426840976e-21 316227.77 9.7295334084e-22 398107.17 8.13048196e-22 501187.23 6.8603134084e-22 630957.34 5.8513674816e-22 794328.23 5.04990784e-22 1000000 4.4133186241e-22 1258930 3.9076591684e-22 1584890 3.5059941049e-22 1995260 3.18693904e-22 2511890 2.9335125625e-22 3162280 2.7321775849e-22 3981070 2.5722706689e-22 5011870 2.4452515129e-22 6309570 2.3443590769e-22 7943280 2.2642123729e-22 10000000 2.2005645649e-22 12589250 2.1500063641e-22 15848930 2.1098434009e-22 19952620 2.07792225e-22 25118860 2.0525719824e-22 31622780 2.0324494096e-22 39810720 2.0164568004e-22 50118720 2.0037534916e-22 63095730 1.9936592809e-22 79432820 1.9856473569e-22 100000000 1.9792831969e-22 100.00000 4.01922304e-18 125.89254 3.19265424e-18 158.48932 2.53605625e-18 199.52623 2.01469636e-18 251.18864 1.600225e-18 316.22777 1.27125625e-18 398.10717 1.00982401e-18 501.18723 8.0217495042084e-19 630.95734 6.3724648803984e-19 794.32823 5.0623922272401e-19 1000 4.0217640860644e-19 1258.93 3.1951638046084e-19 1584.89 2.5385716403776e-19 1995.26 2.0170221730129e-19 2511.89 1.6027411730625e-19 3162.28 1.2736654634025e-19 3981.07 1.0122712187641e-19 5011.87 8.046390331456e-20 6309.57 6.3971055625e-20 7943.28 5.087032148025e-20 10000 4.046401795489e-20 12589.25 3.219803173161e-20 15848.93 2.563210606009e-20 19952.62 2.041660903689e-20 25118.86 1.627379873344e-20 31622.78 1.298305282624e-20 39810.72 1.036910450944e-20 50118.72 8.29277958609e-21 63095.73 6.64348885776e-21 79432.82 5.33342471809e-21 100000 4.29279177636e-21 125892.54 3.46619497536e-21 158489.32 2.80960423249e-21 199526.23 2.28805328896e-21 251188.64 1.87377302641e-21 316227.77 1.54469436676e-21 398107.17 1.28330165824e-21 501187.23 1.07566944676e-21 630957.34 9.1074186225e-22 794328.23 7.7973302169e-22 1000000 6.7566724096e-22 1258930 5.9301016324e-22 1584890 5.2734988881e-22 1995260 4.75196401e-22 2511890 4.3376809441e-22 3162280 4.0086046225e-22 3981070 3.7472054929e-22 5011870 3.5395530769e-22 6309570 3.3746424804e-22 7943280 3.2436370201e-22 10000000 3.1395587344e-22 12589250 3.05690256e-22 15848930 2.9912394304e-22 19952620 2.9390987844e-22 25118860 2.8976550625e-22 31622780 2.8647593536e-22 39810720 2.8386184324e-22 50118720 2.8178658225e-22 63095730 2.8013721129e-22 79432820 2.7882654361e-22 100000000 2.7778555561e-22 100.00000 6.7230266944e-22 125.89254 5.3434020964e-22 158.48932 4.2475561216e-22 199.52623 3.3771045361e-22 251.18864 2.68566544e-22 316.22777 2.1364499556e-22 398.10717 1.7001812881e-22 501.18723 1.3536391716e-22 630.95734 1.0783784025e-22 794.32823 8.597369284e-23 1000 6.860477584e-23 1258.93 5.480885089e-23 1584.89 4.3850884e-23 1995.26 3.514592656e-23 2511.89 2.823115689e-23 3162.28 2.273954596e-23 3981.07 1.837665424e-23 5011.87 1.491118225e-23 6309.57 1.215847161e-23 7943.28 9.97233241e-24 10000 8.23517809e-24 12589.25 6.85549489e-24 15848.93 5.76e-24 19952.62 4.88940544e-24 25118.86 4.19799121e-24 31622.78 3.64886404e-24 39810.72 3.21233929e-24 50118.72 2.86591041e-24 63095.73 2.59081216e-24 79432.82 2.37190801e-24 100000 2.19839929e-24 125892.54 2.06037316e-24 158489.32 1.95077089e-24 199526.23 1.86377104e-24 251188.64 1.79452816e-24 316227.77 1.739761e-24 398107.17 1.69598529e-24 501187.23 1.66126321e-24 630957.34 1.63379524e-24 794328.23 1.61188416e-24 1000000 1.59466384e-24 1258930 1.58080329e-24 1584890 1.56975841e-24 1995260 1.56125025e-24 2511890 1.55426089e-24 3162280 1.54878025e-24 3981070 1.54430329e-24 5011870 1.54082569e-24 6309570 1.53809604e-24 7943280 1.53611236e-24 10000000 1.53437769e-24 12589250 1.53289161e-24 15848930 1.53190129e-24 19952620 1.53091129e-24 25118860 1.530169e-24 31622780 1.52967424e-24 39810720 1.52917956e-24 50118720 1.52893225e-24 63095730 1.52868496e-24 79432820 1.52843769e-24 100000000 1.52819044e-24 100.00000 1.52176896e-18 125.89254 1.20868036e-18 158.48932 9.6019264319364e-19 199.52623 7.6272782098041e-19 251.18864 6.0587573575204e-19 316.22777 4.8128379001444e-19 398.10717 3.8231690179684e-19 501.18723 3.03704596836e-19 630.95734 2.41260739489e-19 794.32823 1.9165982142609e-19 1000 1.5226033223025e-19 1258.93 1.2096428352064e-19 1584.89 9.610489806241e-20 1995.26 7.635843469809e-20 2511.89 6.067319755249e-20 3162.28 4.821401501361e-20 3981.07 3.831731865361e-20 5011.87 3.045611348224e-20 6309.57 2.421170232121e-20 7943.28 1.925161800004e-20 10000 1.531166184409e-20 12589.25 1.218206668176e-20 15848.93 9.69612426721e-21 19952.62 7.72147080961e-21 25118.86 6.15295910464e-21 31622.78 4.90703052004e-21 39810.72 3.91737040321e-21 50118.72 3.13124180625e-21 63095.73 2.506804624e-21 79432.82 2.01079599561e-21 100000 1.61680389025e-21 125892.54 1.30384543744e-21 158489.32 1.05524923716e-21 199526.23 8.5778108641e-22 251188.64 7.0093092001e-22 316227.77 5.7634085041e-22 398107.17 4.7737443121e-22 501187.23 3.98760961e-22 630957.34 3.3631525321e-22 794328.23 2.8671632929e-22 1000000 2.4731651169e-22 1258930 2.1601944576e-22 1584890 1.9116104121e-22 1995260 1.7141355625e-22 2511890 1.5572793681e-22 3162280 1.4326893025e-22 3981070 1.3337247169e-22 5011870 1.2551169024e-22 6309570 1.19268241e-22 7943280 1.1430817225e-22 10000000 1.1036763136e-22 12589250 1.0723845136e-22 15848930 1.0475113104e-22 19952620 1.0277701641e-22 25118860 1.0120963609e-22 31622780 9.996200361e-23 39810720 9.897265225e-23 50118720 9.818629921e-23 63095730 9.756303076e-23 79432820 9.706584484e-23 100000000 9.667215684e-23 100.00000 5.07555841e-18 125.89254 4.03166241e-18 158.48932 3.20266816e-18 199.52623 2.544025e-18 251.18864 2.02094656e-18 316.22777 1.605289e-18 398.10717 1.27509264e-18 501.18723 1.01284096e-18 630.95734 8.0463788365921e-19 794.32823 6.3919305452025e-19 1000 5.0777567202244e-19 1258.93 4.0338706828176e-19 1584.89 3.2046819102081e-19 1995.26 2.5460339838976e-19 2511.89 2.0228522697769e-19 3162.28 1.6072738482724e-19 3981.07 1.2771681915001e-19 5011.87 1.0149557390569e-19 6309.57 8.066730359601e-20 7943.28 6.412279933504e-20 10000 5.098107894201e-20 12589.25 4.054218493081e-20 15848.93 3.225030530569e-20 19952.62 2.566384776036e-20 25118.86 2.043201512836e-20 31622.78 1.627624814656e-20 39810.72 1.297516915396e-20 50118.72 1.03530625e-20 63095.73 8.27022910464e-21 79432.82 6.61578890625e-21 100000 5.30160190641e-21 125892.54 4.25771910144e-21 158489.32 3.42853578369e-21 199526.23 2.76988532209e-21 251188.64 2.24670312036e-21 316227.77 1.83112103056e-21 398107.17 1.501020049e-21 501187.23 1.23880769089e-21 630957.34 1.03052556324e-21 794328.23 8.6507750884e-22 1000000 7.3366223044e-22 1258930 6.2927227609e-22 1584890 5.4635322564e-22 1995260 4.8049078401e-22 2511890 4.2817127929e-22 3162280 3.8661390625e-22 3981070 3.5360169849e-22 5011870 3.2738197969e-22 6309570 3.0655107396e-22 7943280 2.9000727616e-22 10000000 2.7686630449e-22 12589250 2.6642727076e-22 15848930 2.5813563556e-22 19952620 2.5154911609e-22 25118860 2.4631733025e-22 31622780 2.4216028225e-22 39810720 2.3886011601e-22 50118720 2.362369e-22 63095730 2.3415426441e-22 79432820 2.32501504e-22 100000000 2.3118594304e-22 100.00000 8.43960601e-18 125.89254 6.70395664e-18 158.48932 5.32501776e-18 199.52623 4.23001489e-18 251.18864 3.359889e-18 316.22777 2.66897569e-18 398.10717 2.12022721e-18 501.18723 1.68428484e-18 630.95734 1.33795489e-18 794.32823 1.06275481e-18 1000 8.4424158580644e-19 1258.93 6.7067189575936e-19 1584.89 5.3280057863761e-19 1995.26 4.2328543469521e-19 2511.89 3.36294448281e-19 3162.28 2.6719512104464e-19 3981.07 2.1230751843856e-19 5011.87 1.6870882626724e-19 6309.57 1.3407710015716e-19 7943.28 1.0656816612484e-19 10000 8.471702963161e-20 12589.25 6.736002535161e-20 15848.93 5.357289834724e-20 19952.62 4.262139605025e-20 25118.86 3.392230923601e-20 31622.78 2.701236879936e-20 39810.72 2.152361870649e-20 50118.72 1.716372490816e-20 63095.73 1.370056204036e-20 79432.82 1.094965516836e-20 100000 8.76455460864e-21 125892.54 7.02886054689e-21 158489.32 5.65013802276e-21 199526.23 4.55499458649e-21 251188.64 3.68508488401e-21 316227.77 2.99408141124e-21 398107.17 2.44521349081e-21 501187.23 2.00921787049e-21 630957.34 1.66290237369e-21 794328.23 1.38781581156e-21 1000000 1.16930486401e-21 1258930 9.9573695809e-22 1584890 8.5786309449e-22 1995260 7.48350736e-22 2511890 6.6135894561e-22 3162280 5.9225549769e-22 3981070 5.3736803344e-22 5011870 4.93772841e-22 6309570 4.5913775625e-22 7943280 4.3162971049e-22 10000000 4.09779049e-22 12589250 3.9242421409e-22 15848930 3.7863711396e-22 19952620 3.6768446001e-22 25118860 3.5898501961e-22 31622780 3.5207643769e-22 39810720 3.4658524224e-22 50118720 3.4222780036e-22 63095730 3.3876243025e-22 79432820 3.3601089636e-22 100000000 3.3382578681e-22 100.00000 1.3735136809e-20 125.89254 1.091310336964e-20 158.48932 8.67150201681e-21 199.52623 6.89092573456e-21 251.18864 5.47656241444e-21 316.22777 4.35308328841e-21 398.10717 3.46068652176e-21 501.18723 2.75182078084e-21 630.95734 2.18875201281e-21 794.32823 1.74149305344e-21 1000 1.386221824e-21 1258.93 1.10402023824e-21 1584.89 8.7985797376e-22 1995.26 7.0179957225e-22 2511.89 5.60363584e-22 3162.28 4.4801648896e-22 3981.07 3.5877663396e-22 5011.87 2.8788926929e-22 6309.57 2.3158448041e-22 7943.28 1.8685796416e-22 10000 1.5132936256e-22 12589.25 1.2311012025e-22 15848.93 1.0069319716e-22 19952.62 8.288827849e-23 25118.86 6.874399744e-23 31622.78 5.750947225e-23 39810.72 4.858508209e-23 50118.72 4.149678724e-23 63095.73 3.586572544e-23 79432.82 3.1393609e-23 100000 2.784039696e-23 125892.54 2.501800324e-23 158489.32 2.277675625e-23 199526.23 2.099655684e-23 251188.64 1.958151001e-23 316227.77 1.845819369e-23 398107.17 1.756615744e-23 501187.23 1.685759364e-23 630957.34 1.629413956e-23 794328.23 1.584676864e-23 1000000 1.549130881e-23 1258930 1.520922001e-23 1584890 1.498541521e-23 1995260 1.4807104e-23 2511890 1.466583616e-23 3162280 1.455346201e-23 3981070 1.446433024e-23 5011870 1.439291844e-23 6309570 1.433682496e-23 7943280 1.429218025e-23 10000000 1.425666564e-23 12589250 1.422873841e-23 15848930 1.420611481e-23 19952620 1.418802889e-23 25118860 1.417447201e-23 31622780 1.416317956e-23 39810720 1.415414884e-23 50118720 1.414662544e-23 63095730 1.414136025e-23 79432820 1.413684801e-23 100000000 1.413308836e-23 100.00000 3.4200589408129e-19 125.89254 2.7168248508489e-19 158.48932 2.1582259040241e-19 199.52623 1.7145156330241e-19 251.18864 1.3620639078225e-19 316.22777 1.0821014199961e-19 398.10717 8.597192817409e-20 501.18723 6.8307481449e-20 630.95734 5.427609256729e-20 794.32823 4.313060857681e-20 1000 3.427741205056e-20 1258.93 2.724506769664e-20 1584.89 2.165906776804e-20 1995.26 1.722196905625e-20 2511.89 1.369744870321e-20 3162.28 1.089783581329e-20 3981.07 8.67399783649e-21 5011.87 6.90755467689e-21 6309.57 5.50442318724e-21 7943.28 4.38987078721e-21 10000 3.50455712049e-21 12589.25 2.80132025625e-21 15848.93 2.24272333476e-21 19952.62 1.79901525904e-21 25118.86 1.44656233569e-21 31622.78 1.16659818025e-21 39810.72 9.4421612961e-22 50118.72 7.6757256601e-22 63095.73 6.2725703401e-22 79432.82 5.1580314769e-22 100000 4.2726957025e-22 125892.54 3.56945449e-22 158489.32 3.0108843361e-22 199526.23 2.5671730176e-22 251188.64 2.2147094761e-22 316227.77 1.9347419025e-22 398107.17 1.7123554449e-22 501187.23 1.5357157776e-22 630957.34 1.3953988129e-22 794328.23 1.2839609344e-22 1000000 1.1954142225e-22 1258930 1.1251057041e-22 1584890 1.0692387216e-22 1995260 1.0248727696e-22 2511890 9.8962704e-23 3162280 9.616351969e-23 3981070 9.393874084e-23 5011870 9.217152036e-23 6309570 9.076944529e-23 7943280 8.965438596e-23 10000000 8.876843089e-23 12589250 8.806696336e-23 15848930 8.750667025e-23 19952620 8.706382864e-23 25118860 8.671148161e-23 31622780 8.643049024e-23 39810720 8.620936801e-23 50118720 8.603304516e-23 63095730 8.589211684e-23 79432820 8.578093924e-23 100000000 8.5692049e-23 100.00000 9.5671462630041e-19 125.89254 7.5997874840976e-19 158.48932 6.0370600101904e-19 199.52623 4.7957411666641e-19 251.18864 3.8097262600804e-19 316.22777 3.0265060874161e-19 398.10717 2.4043733640481e-19 501.18723 1.9101952054084e-19 630.95734 1.51765564041e-19 794.32823 1.2058499326225e-19 1000 9.581742602721e-20 1258.93 7.614387698724e-20 1584.89 6.051659040144e-20 1995.26 4.810341176001e-20 2511.89 3.824324425744e-20 3162.28 3.041106991129e-20 3981.07 2.418973643025e-20 5011.87 1.924792742161e-20 6309.57 1.532255292649e-20 7943.28 1.220448258121e-20 10000 9.72773881849e-21 12589.25 7.760376649e-21 15848.93 6.19764137001e-21 19952.62 4.95632896144e-21 25118.86 3.97031050816e-21 31622.78 3.18709927936e-21 39810.72 2.56495654116e-21 50118.72 2.07078693481e-21 63095.73 1.67824592896e-21 79432.82 1.36644079716e-21 100000 1.11876201441e-21 125892.54 9.2202715201e-22 158489.32 7.6575618729e-22 199526.23 6.4162409809e-22 251188.64 5.4302048784e-22 316227.77 4.6469993761e-22 398107.17 4.02483844e-22 501187.23 3.5306785801e-22 630957.34 3.1381413904e-22 794328.23 2.8263325689e-22 1000000 2.5786578724e-22 1258930 2.3819292225e-22 1584890 2.2256462596e-22 1995260 2.1015141156e-22 2511890 2.0029042576e-22 3162280 1.92460129e-22 3981070 1.8623787961e-22 5011870 1.8129545316e-22 6309570 1.7737178761e-22 7943280 1.7425320025e-22 10000000 1.7177509969e-22 12589250 1.6980956721e-22 15848930 1.68246841e-22 19952620 1.67003929e-22 25118860 1.6601807104e-22 31622780 1.6523559936e-22 39810720 1.6461403204e-22 50118720 1.6411915881e-22 63095730 1.6372737936e-22 79432820 1.6341531556e-22 100000000 1.6316741169e-22 100.00000 1.54082569e-18 125.89254 1.22389969e-18 158.48932 9.7222715784964e-19 199.52623 7.7231281625689e-19 251.18864 6.1351518263841e-19 316.22777 4.8737767787536e-19 398.10717 3.8718323984025e-19 501.18723 3.0759580161424e-19 630.95734 2.4437737450116e-19 794.32823 1.9416114202384e-19 1000 1.54272986176e-19 1258.93 1.2258863602756e-19 1584.89 9.742095440289e-20 1995.26 7.742946238225e-20 2511.89 6.154973970084e-20 3162.28 4.893598773904e-20 3981.07 3.891651816529e-20 5011.87 3.095780427289e-20 6309.57 2.463593933056e-20 7943.28 1.961431061121e-20 10000 1.5625500004e-20 12589.25 1.245708228769e-20 15848.93 9.94030934121e-21 19952.62 7.94116241424e-21 25118.86 6.35317396624e-21 31622.78 5.09180717761e-21 39810.72 4.089858304e-21 50118.72 3.29399088489e-21 63095.73 2.66180669329e-21 79432.82 2.15963748961e-21 100000 1.76075908996e-21 125892.54 1.44391640121e-21 158489.32 1.19223802944e-21 199526.23 9.9232560144e-22 251188.64 8.3352309264e-22 316227.77 7.0738977024e-22 398107.17 6.0719366569e-22 501187.23 5.2760711809e-22 630957.34 4.6438957009e-22 794328.23 4.1417134144e-22 1000000 3.7428319296e-22 1258930 3.4259788836e-22 1584890 3.1743123556e-22 1995260 2.9743831296e-22 2511890 2.8156168804e-22 3162280 2.6894688016e-22 3981070 2.5892671744e-22 5011870 2.50968964e-22 6309570 2.4464713744e-22 7943280 2.3962420804e-22 10000000 2.3563478016e-22 12589250 2.3246795961e-22 15848930 2.2994992881e-22 19952620 2.2795262361e-22 25118860 2.2636406116e-22 31622780 2.2510201156e-22 39810720 2.241009e-22 50118720 2.2330520356e-22 63095730 2.2267205284e-22 79432820 2.2217094916e-22 100000000 2.21771664e-22 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acfreq_core_sw.standard0000644000175000017500000000712214163340332025545 0ustar carstencarstenFreq c(g,g) c(g,s) c(g,d) 1000 1.49930800055118e-14 9.39128755801209e-15 3.47392268934973e-15 1258.93 1.4993026984753e-14 9.39125793812334e-15 3.47391727992993e-15 1584.89 1.49931148486038e-14 9.39130551233736e-15 3.47393579448481e-15 1995.26 1.49931061994006e-14 9.39129506627491e-15 3.4739355638253e-15 2511.89 1.49930648542735e-14 9.39127516416518e-15 3.47392417217865e-15 3162.28 1.49930762910174e-14 9.39127807519028e-15 3.47392599879495e-15 3981.07 1.49930914951293e-14 9.39129180750628e-15 3.47393031669927e-15 5011.87 1.49930925476722e-14 9.39129024250356e-15 3.47393253196645e-15 6309.57 1.49930945057171e-14 9.39129111707013e-15 3.47393335267567e-15 7943.28 1.49930913841181e-14 9.39128932891158e-15 3.47393159465955e-15 10000 1.49930863717096e-14 9.39128596646265e-15 3.47393064709688e-15 12589.25 1.49935669326598e-14 9.39129017998998e-15 3.47393234130041e-15 15848.93 1.49927048725813e-14 9.39128773579564e-15 3.47393122716795e-15 19952.62 1.49928997312396e-14 9.39090277377549e-15 3.47393128397605e-15 25118.86 1.49930507132231e-14 9.39132813554466e-15 3.47393097137079e-15 31622.78 1.49930706747084e-14 9.39142996945483e-15 3.4739302090667e-15 39810.72 1.4992916055714e-14 9.39121113150356e-15 3.47393017059216e-15 50118.72 1.49930833890825e-14 9.39139763944433e-15 3.47406134359644e-15 63095.73 1.49931075564688e-14 9.39128160693973e-15 3.47389890926309e-15 79432.82 1.49930535471653e-14 9.39127093518803e-15 3.47391469083847e-15 100000 1.49930322590289e-14 9.39125572702347e-15 3.4738749428668e-15 125892.54 1.49930564836697e-14 9.39133017931367e-15 3.47392997331072e-15 158489.32 1.4993104660549e-14 9.39127650869728e-15 3.47392878038787e-15 199526.23 1.49930570098171e-14 9.39130019392653e-15 3.47390762938544e-15 251188.64 1.49931116864116e-14 9.39126327931774e-15 3.47394182310253e-15 316227.77 1.4993072097076e-14 9.39127987276968e-15 3.47392349254304e-15 398107.17 1.49930770971861e-14 9.39129179502176e-15 3.47392083767628e-15 501187.23 1.49930824916284e-14 9.39130181053652e-15 3.47393411330153e-15 630957.34 1.49930813816111e-14 9.3912810115726e-15 3.4739239133915e-15 794328.23 1.49930930537519e-14 9.39129061692109e-15 3.47393459605683e-15 1000000 1.49930800055118e-14 9.39128755801209e-15 3.47392268934973e-15 1258930 1.4993026984753e-14 9.39125793812334e-15 3.47391727992993e-15 1584890 1.49931148486038e-14 9.39130551233736e-15 3.47393579448481e-15 1995260 1.49931061994006e-14 9.39129506627491e-15 3.4739355638253e-15 2511890 1.49930648542735e-14 9.39127516416518e-15 3.47392417217865e-15 3162280 1.49930762910174e-14 9.39127807519028e-15 3.47392599879495e-15 3981070 1.49930914951293e-14 9.39129180750628e-15 3.47393031669927e-15 5011870 1.49930925476722e-14 9.39129024250356e-15 3.47393253196645e-15 6309570 1.49930945057171e-14 9.39129111707013e-15 3.47393335267567e-15 7943280 1.49930913841181e-14 9.39128932891158e-15 3.47393159465955e-15 10000000 1.49930863717096e-14 9.39128596646266e-15 3.47393064709688e-15 12589250 1.49935669326598e-14 9.39129017998998e-15 3.47393107708735e-15 15848930 1.49927048725813e-14 9.39128773579564e-15 3.47393122716795e-15 19952620 1.49928997312396e-14 9.39090277377549e-15 3.47393128397605e-15 25118860 1.49930507132231e-14 9.39132813554466e-15 3.47393097137079e-15 31622780 1.49930706747084e-14 9.39142996945483e-15 3.4739302090667e-15 39810720 1.4992916055714e-14 9.39121113150356e-15 3.47393017059216e-15 50118720 1.49930833890825e-14 9.39139763944433e-15 3.47406134359643e-15 63095730 1.49931075564688e-14 9.39128160693973e-15 3.47389890926309e-15 79432820 1.49930535471653e-14 9.39127093518803e-15 3.47391469083847e-15 100000000 1.49930322590289e-14 9.39125572702347e-15 3.4738749428668e-15 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_diode_lt.standard0000644000175000017500000001566114163340332025465 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -3.3758e-06 0. -1.732231e-07 3.549e-06 -1.10000 -3.2362e-06 0. -1.732231e-07 3.4094e-06 -1.00000 -3.099e-06 0. -1.732231e-07 3.2722e-06 -0.9 -2.9645e-06 0. -1.732231e-07 3.1377e-06 -0.8 -2.8331e-06 0. -1.732231e-07 3.0063e-06 -0.7 -2.7062e-06 0. -1.732231e-07 2.8794e-06 -0.6 -2.5867e-06 0. -1.732231e-07 2.7599e-06 -0.5 -2.4814e-06 0. -1.732231e-07 2.6546e-06 -0.4 -2.4033e-06 0. -1.732231e-07 2.5766e-06 -0.3 -2.3613e-06 0. -1.732247e-07 2.5346e-06 -0.2 -2.315e-06 0. -1.73299e-07 2.4883e-06 -0.1 -1.8618e-06 0. -1.768494e-07 2.0386e-06 2.220446e-16 1.732231e-07 0. -3.464461e-07 1.732231e-07 -1.20000 -1.44629e-05 0. -1.732231e-07 1.46361e-05 -1.10000 -1.39508e-05 0. -1.732231e-07 1.4124e-05 -1.00000 -1.34493e-05 0. -1.732231e-07 1.36225e-05 -0.9 -1.29644e-05 0. -1.732231e-07 1.31376e-05 -0.8 -1.25078e-05 0. -1.732231e-07 1.2681e-05 -0.7 -1.21e-05 0. -1.732231e-07 1.22732e-05 -0.6 -1.17721e-05 0. -1.732231e-07 1.19453e-05 -0.5 -1.15526e-05 0. -1.732231e-07 1.17258e-05 -0.4 -1.14099e-05 0. -1.732231e-07 1.15831e-05 -0.3 -1.09552e-05 0. -1.732247e-07 1.11284e-05 -0.2 -9.1893e-06 0. -1.73299e-07 9.3626e-06 -0.1 -5.5282e-06 0. -1.768494e-07 5.7051e-06 2.220446e-16 1.732231e-07 0. -3.464461e-07 1.732231e-07 -1.20000 -3.11717e-05 0. -1.732231e-07 3.13449e-05 -1.10000 -3.01457e-05 0. -1.732231e-07 3.03189e-05 -1.00000 -2.91887e-05 0. -1.732231e-07 2.9362e-05 -0.9 -2.83358e-05 0. -1.732231e-07 2.8509e-05 -0.8 -2.76301e-05 0. -1.732231e-07 2.78033e-05 -0.7 -2.71059e-05 0. -1.732231e-07 2.72791e-05 -0.6 -2.67217e-05 0. -1.732231e-07 2.6895e-05 -0.5 -2.60786e-05 0. -1.732231e-07 2.62519e-05 -0.4 -2.4299e-05 0. -1.732231e-07 2.44722e-05 -0.3 -2.07881e-05 0. -1.732247e-07 2.09614e-05 -0.2 -1.54547e-05 0. -1.73299e-07 1.5628e-05 -0.1 -8.4475e-06 0. -1.768494e-07 8.6243e-06 2.220446e-16 1.732231e-07 0. -3.464461e-07 1.732231e-07 -1.20000 -5.05736e-05 0. -1.732231e-07 5.07468e-05 -1.10000 -4.92114e-05 0. -1.732231e-07 4.93846e-05 -1.00000 -4.80633e-05 0. -1.732231e-07 4.82366e-05 -0.9 -4.7157e-05 0. -1.732231e-07 4.73302e-05 -0.8 -4.64162e-05 0. -1.732231e-07 4.65894e-05 -0.7 -4.54191e-05 0. -1.732231e-07 4.55923e-05 -0.6 -4.34473e-05 0. -1.732231e-07 4.36205e-05 -0.5 -3.99785e-05 0. -1.732231e-07 4.01517e-05 -0.4 -3.4836e-05 0. -1.732231e-07 3.50092e-05 -0.3 -2.80847e-05 0. -1.732247e-07 2.82579e-05 -0.2 -1.98985e-05 0. -1.73299e-07 2.00718e-05 -0.1 -1.04699e-05 0. -1.768494e-07 1.06468e-05 2.220446e-16 1.732231e-07 0. -3.464461e-07 1.732231e-07 -1.20000 -3.1518e-06 0. -6.6872e-12 3.1518e-06 -1.10000 -3.0134e-06 0. -6.6872e-12 3.0134e-06 -1.00000 -2.8777e-06 0. -6.6872e-12 2.8777e-06 -0.9 -2.7446e-06 0. -6.6872e-12 2.7446e-06 -0.8 -2.6141e-06 0. -6.6872e-12 2.6141e-06 -0.7 -2.4863e-06 0. -6.6872e-12 2.4863e-06 -0.6 -2.3618e-06 0. -6.6872e-12 2.3618e-06 -0.5 -2.2418e-06 0. -6.6872e-12 2.2418e-06 -0.4 -2.1312e-06 0. -6.6872e-12 2.1312e-06 -0.3 -2.0449e-06 0. -6.6872e-12 2.0449e-06 -0.2 -1.9982e-06 0. -6.6874e-12 1.9982e-06 -0.1 -1.8107e-06 0. -6.7241e-12 1.8107e-06 2.220446e-16 6.6872e-12 0. -1.33744e-11 6.6872e-12 -1.20000 -1.98628e-05 0. -6.6872e-12 1.98628e-05 -1.10000 -1.91617e-05 0. -6.6872e-12 1.91618e-05 -1.00000 -1.84677e-05 0. -6.6872e-12 1.84677e-05 -0.9 -1.77833e-05 0. -6.6872e-12 1.77833e-05 -0.8 -1.71138e-05 0. -6.6872e-12 1.71138e-05 -0.7 -1.64711e-05 0. -6.6872e-12 1.64711e-05 -0.6 -1.58813e-05 0. -6.6872e-12 1.58813e-05 -0.5 -1.53951e-05 0. -6.6872e-12 1.53951e-05 -0.4 -1.50718e-05 0. -6.6872e-12 1.50718e-05 -0.3 -1.47395e-05 0. -6.6872e-12 1.47395e-05 -0.2 -1.29403e-05 0. -6.6874e-12 1.29403e-05 -0.1 -8.0733e-06 0. -6.7241e-12 8.0733e-06 2.220446e-16 6.6872e-12 0. -1.33744e-11 6.6872e-12 -1.20000 -4.74676e-05 0. -6.6872e-12 4.74676e-05 -1.10000 -4.58396e-05 0. -6.6872e-12 4.58397e-05 -1.00000 -4.42631e-05 0. -6.6872e-12 4.42631e-05 -0.9 -4.27716e-05 0. -6.6872e-12 4.27716e-05 -0.8 -4.14209e-05 0. -6.6872e-12 4.14209e-05 -0.7 -4.02911e-05 0. -6.6872e-12 4.02911e-05 -0.6 -3.94466e-05 0. -6.6872e-12 3.94466e-05 -0.5 -3.86354e-05 0. -6.6872e-12 3.86354e-05 -0.4 -3.65605e-05 0. -6.6872e-12 3.65605e-05 -0.3 -3.18035e-05 0. -6.6872e-12 3.18036e-05 -0.2 -2.39486e-05 0. -6.6874e-12 2.39486e-05 -0.1 -1.32165e-05 0. -6.7241e-12 1.32165e-05 2.220446e-16 6.6872e-12 0. -1.33744e-11 6.6872e-12 -1.20000 -8.00197e-05 0. -6.6872e-12 8.00197e-05 -1.10000 -7.75305e-05 0. -6.6872e-12 7.75305e-05 -1.00000 -7.52929e-05 0. -6.6872e-12 7.52929e-05 -0.9 -7.33946e-05 0. -6.6872e-12 7.33946e-05 -0.8 -7.18577e-05 0. -6.6872e-12 7.18578e-05 -0.7 -7.0289e-05 0. -6.6872e-12 7.0289e-05 -0.6 -6.76002e-05 0. -6.6872e-12 6.76002e-05 -0.5 -6.27021e-05 0. -6.6872e-12 6.27021e-05 -0.4 -5.50569e-05 0. -6.6872e-12 5.50569e-05 -0.3 -4.46614e-05 0. -6.6872e-12 4.46614e-05 -0.2 -3.17936e-05 0. -6.6874e-12 3.17936e-05 -0.1 -1.67966e-05 0. -6.7241e-12 1.67966e-05 2.220446e-16 6.6872e-12 0. -1.33744e-11 6.6872e-12 -1.20000 -3.2448e-06 0. -0.0013942 0.0013975 -1.10000 -3.1165e-06 0. -0.0013942 0.0013973 -1.00000 -2.9921e-06 0. -0.0013942 0.0013972 -0.9 -2.8734e-06 0. -0.0013942 0.0013971 -0.8 -2.7633e-06 0. -0.0013942 0.001397 -0.7 -2.6671e-06 0. -0.0013942 0.0013969 -0.6 -2.5918e-06 0. -0.0013942 0.0013968 -0.5 -2.5415e-06 0. -0.0013942 0.0013968 -0.4 -2.4935e-06 0. -0.0013942 0.0013967 -0.3 -2.117e-06 0. -0.0013946 0.0013967 -0.2 3.4567e-06 0. -0.0014 0.0013965 -0.1 8.81727e-05 0. -0.001484 0.0013958 2.220446e-16 0.0013942 0. -0.0027884 0.0013942 -1.20000 -9.7765e-06 0. -0.0013942 0.001404 -1.10000 -9.4472e-06 0. -0.0013942 0.0014037 -1.00000 -9.1406e-06 0. -0.0013942 0.0014034 -0.9 -8.8676e-06 0. -0.0013942 0.0014031 -0.8 -8.642e-06 0. -0.0013942 0.0014029 -0.7 -8.4762e-06 0. -0.0013942 0.0014027 -0.6 -8.3719e-06 0. -0.0013942 0.0014026 -0.5 -8.3022e-06 0. -0.0013942 0.0014025 -0.4 -8.1206e-06 0. -0.0013942 0.0014024 -0.3 -7.146e-06 0. -0.0013946 0.0014017 -0.2 -2.352792e-07 0. -0.0014 0.0014002 -0.1 8.63005e-05 0. -0.001484 0.0013977 2.220446e-16 0.0013942 0. -0.0027884 0.0013942 -1.20000 -1.88402e-05 0. -0.0013942 0.0014131 -1.10000 -1.83274e-05 0. -0.0013942 0.0014125 -1.00000 -1.78939e-05 0. -0.0013942 0.0014121 -0.9 -1.75549e-05 0. -0.0013942 0.0014118 -0.8 -1.73143e-05 0. -0.0013942 0.0014115 -0.7 -1.71455e-05 0. -0.0013942 0.0014114 -0.6 -1.69187e-05 0. -0.0013942 0.0014111 -0.5 -1.62847e-05 0. -0.0013942 0.0014105 -0.4 -1.48416e-05 0. -0.0013942 0.0014091 -0.3 -1.21142e-05 0. -0.0013946 0.0014067 -0.2 -3.371e-06 0. -0.0014 0.0014034 -0.1 8.48455e-05 0. -0.001484 0.0013992 2.220446e-16 0.0013942 0. -0.0027884 0.0013942 -1.20000 -2.93751e-05 0. -0.0013942 0.0014236 -1.10000 -2.88323e-05 0. -0.0013942 0.001423 -1.00000 -2.84183e-05 0. -0.0013942 0.0014226 -0.9 -2.81012e-05 0. -0.0013942 0.0014223 -0.8 -2.77419e-05 0. -0.0013942 0.001422 -0.7 -2.70221e-05 0. -0.0013942 0.0014212 -0.6 -2.56088e-05 0. -0.0013942 0.0014198 -0.5 -2.33255e-05 0. -0.0013942 0.0014175 -0.4 -2.01244e-05 0. -0.0013942 0.0014144 -0.3 -1.57582e-05 0. -0.0013946 0.0014103 -0.2 -5.5831e-06 0. -0.0014 0.0014056 -0.1 8.38433e-05 0. -0.001484 0.0014002 2.220446e-16 0.0013942 0. -0.0027884 0.0013942 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvdb_ig_st.standard0000644000175000017500000002206714163340332025005 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -4.57961e-05 115.8644 -115.8644 4.57961e-05 -1.10000 -4.31025e-05 115.8582 -115.8582 4.31025e-05 -1.00000 -4.05131e-05 115.8519 -115.8519 4.05131e-05 -0.9 -3.80264e-05 115.8453 -115.8453 3.80264e-05 -0.8 -3.56418e-05 115.8384 -115.8384 3.56418e-05 -0.7 -3.33604e-05 115.8313 -115.8313 3.33604e-05 -0.6 -3.11891e-05 115.8240 -115.8240 3.11891e-05 -0.5 -2.91496e-05 115.8163 -115.8163 2.91496e-05 -0.4 -2.73065e-05 115.8084 -115.8084 2.73065e-05 -0.3 -2.58047e-05 115.8001 -115.8001 2.58047e-05 -0.2 -2.4607e-05 115.7930 -115.7930 2.4607e-05 -0.1 -2.06149e-05 115.8077 -115.8077 2.06149e-05 2.220446e-16 7.172e-20 115.8313 -115.8313 -7.172e-20 -1.20000 -7.49407e-05 102.3249 -102.3249 7.49407e-05 -1.10000 -7.08551e-05 102.3221 -102.3221 7.08551e-05 -1.00000 -6.69092e-05 102.3191 -102.3191 6.69092e-05 -0.9 -6.3103e-05 102.3161 -102.3161 6.3103e-05 -0.8 -5.94391e-05 102.3130 -102.3130 5.94391e-05 -0.7 -5.59262e-05 102.3099 -102.3099 5.59262e-05 -0.6 -5.25881e-05 102.3066 -102.3066 5.25881e-05 -0.5 -4.9488e-05 102.3033 -102.3033 4.9488e-05 -0.4 -4.67769e-05 102.2998 -102.2998 4.67769e-05 -0.3 -4.46659e-05 102.2965 -102.2965 4.46659e-05 -0.2 -4.25081e-05 102.2966 -102.2966 4.25081e-05 -0.1 -3.29486e-05 102.3152 -102.3152 3.29486e-05 2.220446e-16 9.607e-20 102.3319 -102.3319 -9.607e-20 -1.20000 -0.0001942901 68.2848 -68.2848 0.0001942901 -1.10000 -0.0001852559 68.2841 -68.2841 0.0001852559 -1.00000 -0.0001764769 68.2834 -68.2834 0.0001764769 -0.9 -0.0001679857 68.2828 -68.2828 0.0001679857 -0.8 -0.000159847 68.2821 -68.2821 0.000159847 -0.7 -0.0001521882 68.2813 -68.2813 0.0001521882 -0.6 -0.000145248 68.2806 -68.2806 0.000145248 -0.5 -0.000139386 68.2799 -68.2799 0.000139386 -0.4 -0.0001347165 68.2797 -68.2797 0.0001347165 -0.3 -0.0001285231 68.2821 -68.2821 0.0001285231 -0.2 -0.0001099949 68.2890 -68.2890 0.0001099949 -0.1 -6.84516e-05 68.2971 -68.2971 6.84516e-05 2.220446e-16 1.917e-19 68.3018 -68.3018 -1.917e-19 -1.20000 -0.0003627963 34.1574 -34.1574 0.0003627963 -1.10000 -0.0003476905 34.1572 -34.1572 0.0003476905 -1.00000 -0.0003332165 34.1570 -34.1570 0.0003332165 -0.9 -0.0003195974 34.1569 -34.1569 0.0003195974 -0.8 -0.0003071738 34.1567 -34.1567 0.0003071738 -0.7 -0.0002963798 34.1565 -34.1565 0.0002963798 -0.6 -0.0002874288 34.1565 -34.1565 0.0002874288 -0.5 -0.0002786081 34.1571 -34.1571 0.0002786081 -0.4 -0.0002625859 34.1586 -34.1586 0.0002625859 -0.3 -0.0002296713 34.1607 -34.1607 0.0002296713 -0.2 -0.0001750125 34.1629 -34.1629 0.0001750125 -0.1 -9.81942e-05 34.1649 -34.1649 9.81942e-05 2.220446e-16 2.415e-19 34.1661 -34.1661 -2.415e-19 -1.20000 -0.000555242 0. 0. 0.000555242 -1.10000 -0.0005351226 0. 0. 0.0005351226 -1.00000 -0.0005167388 0. 0. 0.0005167388 -0.9 -0.0005005282 0. 0. 0.0005005282 -0.8 -0.0004865913 0. 0. 0.0004865913 -0.7 -0.0004732467 0. 0. 0.0004732467 -0.6 -0.0004549535 0. 0. 0.0004549535 -0.5 -0.0004242712 0. 0. 0.0004242712 -0.4 -0.0003759791 0. 0. 0.0003759791 -0.3 -0.0003083802 0. 0. 0.0003083802 -0.2 -0.00022221 0. 0. 0.00022221 -0.1 -0.000119003 0. 0. 0.000119003 2.220446e-16 1.376e-19 0. 0. -1.376e-19 -1.20000 -3.50394e-05 86.0319 -86.0319 3.50394e-05 -1.10000 -3.23944e-05 86.0258 -86.0258 3.23944e-05 -1.00000 -2.9891e-05 86.0195 -86.0195 2.9891e-05 -0.9 -2.75248e-05 86.0130 -86.0130 2.75248e-05 -0.8 -2.52916e-05 86.0062 -86.0062 2.52916e-05 -0.7 -2.31872e-05 85.9992 -85.9992 2.31872e-05 -0.6 -2.12079e-05 85.9920 -85.9920 2.12079e-05 -0.5 -1.93514e-05 85.9845 -85.9845 1.93514e-05 -0.4 -1.76214e-05 85.9767 -85.9767 1.76214e-05 -0.3 -1.60475e-05 85.9685 -85.9685 1.60475e-05 -0.2 -1.47519e-05 85.9599 -85.9599 1.47519e-05 -0.1 -1.33721e-05 85.9548 -85.9548 1.33721e-05 2.220446e-16 4.575e-20 85.9697 -85.9697 -4.575e-20 -1.20000 -7.48321e-05 76.0010 -76.0010 7.48321e-05 -1.10000 -7.00393e-05 75.9980 -75.9980 7.00393e-05 -1.00000 -6.54499e-05 75.9950 -75.9950 6.54499e-05 -0.9 -6.10598e-05 75.9918 -75.9918 6.10598e-05 -0.8 -5.68651e-05 75.9886 -75.9886 5.68651e-05 -0.7 -5.2863e-05 75.9854 -75.9854 5.2863e-05 -0.6 -4.90529e-05 75.9820 -75.9820 4.90529e-05 -0.5 -4.54422e-05 75.9785 -75.9785 4.54422e-05 -0.4 -4.20665e-05 75.9750 -75.9750 4.20665e-05 -0.3 -3.90629e-05 75.9713 -75.9713 3.90629e-05 -0.2 -3.66915e-05 75.9679 -75.9679 3.66915e-05 -0.1 -3.15682e-05 75.9753 -75.9753 3.15682e-05 2.220446e-16 7.906e-20 75.9954 -75.9954 -7.906e-20 -1.20000 -0.0002618856 50.7367 -50.7367 0.0002618856 -1.10000 -0.0002490339 50.7359 -50.7359 0.0002490339 -1.00000 -0.0002365402 50.7352 -50.7352 0.0002365402 -0.9 -0.0002244152 50.7345 -50.7345 0.0002244152 -0.8 -0.0002126837 50.7337 -50.7337 0.0002126837 -0.7 -0.0002014048 50.7330 -50.7330 0.0002014048 -0.6 -0.0001907172 50.7322 -50.7322 0.0001907172 -0.5 -0.0001809407 50.7314 -50.7314 0.0001809407 -0.4 -0.0001726603 50.7307 -50.7307 0.0001726603 -0.3 -0.0001654236 50.7314 -50.7314 0.0001654236 -0.2 -0.0001472647 50.7374 -50.7374 0.0001472647 -0.1 -9.50317e-05 50.7462 -50.7462 9.50317e-05 2.220446e-16 1.472e-19 50.7521 -50.7521 -1.472e-19 -1.20000 -0.0005428704 25.3837 -25.3837 0.0005428704 -1.10000 -0.000519385 25.3835 -25.3835 0.000519385 -1.00000 -0.0004965931 25.3833 -25.3833 0.0004965931 -0.9 -0.0004746726 25.3831 -25.3831 0.0004746726 -0.8 -0.0004539437 25.3829 -25.3829 0.0004539437 -0.7 -0.0004349515 25.3828 -25.3828 0.0004349515 -0.6 -0.0004184286 25.3826 -25.3826 0.0004184286 -0.5 -0.0004040587 25.3829 -25.3829 0.0004040587 -0.4 -0.0003842058 25.3842 -25.3842 0.0003842058 -0.3 -0.0003415816 25.3863 -25.3863 0.0003415816 -0.2 -0.0002639085 25.3886 -25.3886 0.0002639085 -0.1 -0.0001493245 25.3908 -25.3908 0.0001493245 2.220446e-16 1.341e-19 25.3922 -25.3922 -1.341e-19 -1.20000 -0.0008690618 0. 0. 0.0008690618 -1.10000 -0.0008351874 0. 0. 0.0008351874 -1.00000 -0.0008033093 0. 0. 0.0008033093 -0.9 -0.0007741192 0. 0. 0.0007741192 -0.8 -0.0007482636 0. 0. 0.0007482636 -0.7 -0.0007248099 0. 0. 0.0007248099 -0.6 -0.000697412 0. 0. 0.000697412 -0.5 -0.0006542013 0. 0. 0.0006542013 -0.4 -0.0005841873 0. 0. 0.0005841873 -0.3 -0.0004823164 0. 0. 0.0004823164 -0.2 -0.0003491273 0. 0. 0.0003491273 -0.1 -0.0001874676 0. 0. 0.0001874676 2.220446e-16 3.174e-19 0. 0. -3.174e-19 -1.20000 -5.08238e-05 163.5065 -163.5065 5.08238e-05 -1.10000 -4.83133e-05 163.5000 -163.5000 4.83133e-05 -1.00000 -4.58825e-05 163.4932 -163.4932 4.58825e-05 -0.9 -4.35383e-05 163.4861 -163.4861 4.35383e-05 -0.8 -4.12949e-05 163.4788 -163.4788 4.12949e-05 -0.7 -3.91818e-05 163.4712 -163.4712 3.91818e-05 -0.6 -3.72574e-05 163.4632 -163.4632 3.72574e-05 -0.5 -3.56185e-05 163.4550 -163.4550 3.56185e-05 -0.4 -3.43516e-05 163.4467 -163.4467 3.43516e-05 -0.3 -3.32757e-05 163.4403 -163.4403 3.32757e-05 -0.2 -3.08451e-05 163.4490 -163.4490 3.08451e-05 -0.1 -2.1838e-05 163.4909 -163.4909 2.1838e-05 2.220446e-16 7.982e-20 163.5061 -163.5061 -7.982e-20 -1.20000 -7.01642e-05 144.3689 -144.3689 7.01642e-05 -1.10000 -6.6839e-05 144.3661 -144.3661 6.6839e-05 -1.00000 -6.36181e-05 144.3631 -144.3631 6.36181e-05 -0.9 -6.05165e-05 144.3601 -144.3601 6.05165e-05 -0.8 -5.75636e-05 144.3570 -144.3570 5.75636e-05 -0.7 -5.48149e-05 144.3539 -144.3539 5.48149e-05 -0.6 -5.23676e-05 144.3506 -144.3506 5.23676e-05 -0.5 -5.03515e-05 144.3473 -144.3473 5.03515e-05 -0.4 -4.88074e-05 144.3443 -144.3443 4.88074e-05 -0.3 -4.72022e-05 144.3439 -144.3439 4.72022e-05 -0.2 -4.25719e-05 144.3550 -144.3550 4.25719e-05 -0.1 -2.84907e-05 144.3794 -144.3794 2.84907e-05 2.220446e-16 1.066e-19 144.3898 -144.3898 -1.066e-19 -1.20000 -0.0001364198 96.3151 -96.3151 0.0001364198 -1.10000 -0.0001305674 96.3144 -96.3144 0.0001305674 -1.00000 -0.0001249621 96.3138 -96.3138 0.0001249621 -0.9 -0.000119684 96.3132 -96.3132 0.000119684 -0.8 -0.0001148583 96.3125 -96.3125 0.0001148583 -0.7 -0.0001106554 96.3119 -96.3119 0.0001106554 -0.6 -0.0001072348 96.3112 -96.3112 0.0001072348 -0.5 -0.0001045401 96.3109 -96.3109 0.0001045401 -0.4 -0.0001015666 96.3120 -96.3120 0.0001015666 -0.3 -9.44861e-05 96.3165 -96.3165 9.44861e-05 -0.2 -7.73113e-05 96.3234 -96.3234 7.73113e-05 -0.1 -4.58355e-05 96.3307 -96.3307 4.58355e-05 2.220446e-16 1.121e-19 96.3339 -96.3339 -1.121e-19 -1.20000 -0.0002248051 48.1722 -48.1722 0.0002248051 -1.10000 -0.0002163391 48.1721 -48.1721 0.0002163391 -1.00000 -0.0002085447 48.1719 -48.1719 0.0002085447 -0.9 -0.0002016204 48.1718 -48.1718 0.0002016204 -0.8 -0.0001957553 48.1716 -48.1716 0.0001957553 -0.7 -0.0001909824 48.1716 -48.1716 0.0001909824 -0.6 -0.0001866984 48.1718 -48.1718 0.0001866984 -0.5 -0.0001803647 48.1728 -48.1728 0.0001803647 -0.4 -0.0001673148 48.1744 -48.1744 0.0001673148 -0.3 -0.0001437309 48.1764 -48.1764 0.0001437309 -0.2 -0.0001080603 48.1784 -48.1784 0.0001080603 -0.1 -5.99362e-05 48.1802 -48.1802 5.99362e-05 2.220446e-16 2.103e-19 48.1811 -48.1811 -2.103e-19 -1.20000 -0.0003260631 0. 0. 0.0003260631 -1.10000 -0.0003162338 0. 0. 0.0003162338 -1.00000 -0.0003077249 0. 0. 0.0003077249 -0.9 -0.0003005698 0. 0. 0.0003005698 -0.8 -0.0002942479 0. 0. 0.0002942479 -0.7 -0.0002867432 0. 0. 0.0002867432 -0.6 -0.0002743707 0. 0. 0.0002743707 -0.5 -0.0002536817 0. 0. 0.0002536817 -0.4 -0.0002228545 0. 0. 0.0002228545 -0.3 -0.0001815572 0. 0. 0.0001815572 -0.2 -0.0001302583 0. 0. 0.0001302583 -0.1 -6.95519e-05 0. 0. 6.95519e-05 2.220446e-16 1.732e-19 0. 0. -1.732e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvg_ig_st.standard0000644000175000017500000000631314163340332024671 0ustar carstencarstenV(g) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0. 6.59400012810132e-15 2.9350000570181e-15 2.9350000570181e-15 -0.8 0. 6.6127001284646e-15 2.92060005673835e-15 2.92060005673835e-15 -0.4 0. 6.03040011715229e-15 2.58340005018759e-15 2.58340005018759e-15 1.11022302462516e-16 0. 1.65450003214189e-15 1.24764902423802e-16 1.24764902423802e-16 0.4 0. 1.86380003620795e-15 5.90523011472062e-17 5.90523011472062e-17 0.8 0. 2.52170004898894e-15 1.46544002846903e-17 1.46544002846903e-17 1.2 0. 5.02360009759323e-15 -1.21978802369676e-16 -1.21978802369676e-16 -1.2 8.39682e-05 4.64480009023431e-15 3.17280006163783e-15 6.61593112852737e-16 -0.8 6.91572e-05 4.55430008847617e-15 3.19340006203803e-15 4.8511060942422e-16 -0.4 3.77724e-05 4.11660007997299e-15 2.78470005409823e-15 3.58656406967601e-16 1.11022302462516e-16 2.874499e-07 1.53720002986311e-15 -7.5238001461645e-17 2.79835105436343e-16 0.4 1.11725e-11 1.74700003393888e-15 -1.43921302795952e-16 2.42410904709305e-16 0.8 9.314105e-16 2.35050004566305e-15 -1.7774020345295e-16 1.94001703768862e-16 1.2 7.561e-19 4.57370008885305e-15 -3.45575906713486e-16 1.00430101951051e-16 -1.2 0. 6.6682001295428e-15 2.95330005737362e-15 2.95330005737362e-15 -0.8 0. 6.72220013059185e-15 2.95710005744744e-15 2.95710005744744e-15 -0.4 0. 6.15700011961174e-15 2.63220005113562e-15 2.63220005113562e-15 1.11022302462516e-16 0. 1.57220003054305e-15 8.80433017104129e-17 8.80433017104129e-17 0.4 0. 1.82570003546779e-15 5.6604301099649e-17 5.6604301099649e-17 0.8 0. 2.41940004700157e-15 1.38496002690555e-17 1.38496002690555e-17 1.2 0. 4.96980009654806e-15 -1.3254730257499e-16 -1.3254730257499e-16 -1.2 0.0001377483 4.67420009080546e-15 3.20840006232943e-15 6.3141611226649e-16 -0.8 0.0001143588 4.62650008987879e-15 3.25220006318033e-15 4.77272309271946e-16 -0.4 5.73459e-05 4.20870008176221e-15 2.87080005577089e-15 3.51326006825193e-16 1.11022302462516e-16 2.70478e-08 1.47060002856928e-15 -1.34662602616084e-16 2.82415105486464e-16 0.4 2.63812e-14 1.71220003326283e-15 -1.50906302931649e-16 2.4506780476092e-16 0.8 6.787e-20 2.25890004388354e-15 -1.8271730354964e-16 1.97964003845837e-16 1.2 3.056e-24 4.51670008774571e-15 -3.73187707249899e-16 1.10301102142814e-16 -1.2 0. 6.48150012591579e-15 2.90710005647609e-15 2.90710005647609e-15 -0.8 0. 6.4485001252747e-15 2.86570005567182e-15 2.86570005567182e-15 -0.4 0. 5.84020011345728e-15 2.50910004874416e-15 2.50910004874416e-15 1.11022302462516e-16 0. 2.12510004128421e-15 3.76817607320417e-16 3.76817607320417e-16 0.4 0. 1.93080003750956e-15 6.32999012297241e-17 6.32999012297241e-17 0.8 0. 2.7071000525907e-15 1.61027003128264e-17 1.61027003128264e-17 1.2 0. 5.02370009759518e-15 -1.00380701950091e-16 -1.00380701950091e-16 -1.2 4.58224e-05 4.61760008970589e-15 3.11530006052078e-15 7.29527814172501e-16 -0.8 3.83815e-05 4.44400008633337e-15 3.1048000603168e-15 4.94330109603327e-16 -0.4 2.22339e-05 3.98260007736978e-15 2.66040005168346e-15 3.66914007128021e-16 1.11022302462516e-16 1.2835e-06 1.82870003552607e-15 2.29222604453096e-16 2.75304505348327e-16 0.4 1.296e-09 1.80810003512587e-15 -1.32045202565236e-16 2.38047504624537e-16 0.8 2.0361e-12 2.51450004884907e-15 -1.68985303282869e-16 1.87177703636292e-16 1.2 1.67485e-14 4.5832000890376e-15 -2.92007605672818e-16 8.50650016525536e-17 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvg_ig_lt.standard0000644000175000017500000000607114163340332024634 0ustar carstencarstenV(g) I(d) I(g) I(b) I(s) -1.20000 -5.4801e-06 -1640.6 1640.6 5.4801e-06 -1.10000 -5.2117e-06 -1503.9 1503.9 5.2117e-06 -1.00000 -4.8984e-06 -1367.1 1367.1 4.8984e-06 -0.9 -4.5332e-06 -1230.3 1230.3 4.5332e-06 -0.8 -4.1084e-06 -1093.5 1093.5 4.1084e-06 -0.7 -3.6163e-06 -956.7704 956.7704 3.6163e-06 -0.6 -3.0502e-06 -820.0078 820.0078 3.0502e-06 -0.5 -2.4079e-06 -683.2550 683.2550 2.4079e-06 -0.4 -1.6991e-06 -546.5180 546.5180 1.6991e-06 -0.3 -9.655287e-07 -409.8082 409.8082 9.655287e-07 -0.2 -3.381477e-07 -273.1468 273.1468 3.381477e-07 -1.20000 -5.92179e-05 -1640.3 1640.3 5.92179e-05 -1.10000 -5.09181e-05 -1503.6 1503.6 5.09181e-05 -1.00000 -4.29313e-05 -1366.8 1366.8 4.29313e-05 -0.9 -3.53396e-05 -1230.1 1230.1 3.53396e-05 -0.8 -2.81873e-05 -1093.3 1093.3 2.81873e-05 -0.7 -2.15332e-05 -956.5760 956.5760 2.15332e-05 -0.6 -1.54784e-05 -819.8506 819.8506 1.54784e-05 -0.5 -1.01808e-05 -683.1386 683.1386 1.01808e-05 -0.4 -5.8474e-06 -546.4447 546.4447 5.8474e-06 -0.3 -2.6912e-06 -409.7758 409.7758 2.6912e-06 -0.2 -8.349016e-07 -273.1418 273.1418 8.349016e-07 -1.20000 -8.919e-06 -1219.5 1219.5 8.919e-06 -1.10000 -8.4472e-06 -1117.8 1117.8 8.4472e-06 -1.00000 -7.8981e-06 -1016.1 1016.1 7.8981e-06 -0.9 -7.2597e-06 -914.4633 914.4633 7.2597e-06 -0.8 -6.5185e-06 -812.7799 812.7799 6.5185e-06 -0.7 -5.6611e-06 -711.1005 711.1005 5.6611e-06 -0.6 -4.6755e-06 -609.4271 609.4271 4.6755e-06 -0.5 -3.5578e-06 -507.7631 507.7631 3.5578e-06 -0.4 -2.3268e-06 -406.1152 406.1152 2.3268e-06 -0.3 -1.0793e-06 -304.4974 304.4974 1.0793e-06 -0.2 -1.898282e-07 -202.9415 202.9415 1.898282e-07 -1.20000 -9.45379e-05 -1219.2 1219.2 9.45379e-05 -1.10000 -8.09622e-05 -1117.5 1117.5 8.09622e-05 -1.00000 -6.79109e-05 -1015.9 1015.9 6.79109e-05 -0.9 -5.54542e-05 -914.2039 914.2039 5.54542e-05 -0.8 -4.36538e-05 -812.5519 812.5519 4.36538e-05 -0.7 -3.26442e-05 -710.9079 710.9079 3.26442e-05 -0.6 -2.26684e-05 -609.2742 609.2742 2.26684e-05 -0.5 -1.40779e-05 -507.6542 507.6542 1.40779e-05 -0.4 -7.2956e-06 -406.0528 406.0528 7.2956e-06 -0.3 -2.7227e-06 -304.4780 304.4780 2.7227e-06 -0.2 -5.021654e-07 -202.9425 202.9425 5.021654e-07 -1.20000 -3.0576e-06 -2313.3 2313.3 3.0576e-06 -1.10000 -2.9225e-06 -2120.5 2120.5 2.9225e-06 -1.00000 -2.7642e-06 -1927.7 1927.7 2.7642e-06 -0.9 -2.5792e-06 -1734.8 1734.8 2.5792e-06 -0.8 -2.3634e-06 -1542 1542 2.3634e-06 -0.7 -2.113e-06 -1349.2 1349.2 2.113e-06 -0.6 -1.8249e-06 -1156.4 1156.4 1.8249e-06 -0.5 -1.498e-06 -963.5748 963.5748 1.498e-06 -0.4 -1.1364e-06 -770.7845 770.7845 1.1364e-06 -0.3 -7.560884e-07 -578.0186 578.0186 7.560884e-07 -0.2 -3.975892e-07 -385.2915 385.2915 3.975892e-07 -1.20000 -3.40194e-05 -2313 2313 3.40194e-05 -1.10000 -2.94515e-05 -2120.2 2120.2 2.94515e-05 -1.00000 -2.50084e-05 -1927.4 1927.4 2.50084e-05 -0.9 -2.07742e-05 -1734.6 1734.6 2.07742e-05 -0.8 -1.67953e-05 -1541.8 1541.8 1.67953e-05 -0.7 -1.3111e-05 -1349 1349 1.3111e-05 -0.6 -9.7648e-06 -1156.2 1156.2 9.7648e-06 -0.5 -6.8127e-06 -963.4515 963.4515 6.8127e-06 -0.4 -4.328e-06 -770.7003 770.7003 4.328e-06 -0.3 -2.3929e-06 -577.9723 577.9723 2.3929e-06 -0.2 -1.0702e-06 -385.2753 385.2753 1.0702e-06 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise2d_lt.standard0000644000175000017500000004467014163340332025142 0ustar carstencarstenFreq N(d) 100.00000 2.367406336e-23 125.89254 1.883820409e-23 158.48932 1.499703076e-23 199.52623 1.194600969e-23 251.18864 9.52216164e-24 316.22777 7.59663844e-24 398.10717 6.06735424e-24 501.18723 4.85276841e-24 630.95734 3.88799524e-24 794.32823 3.12122889e-24 1000 2.51254201e-24 1258.93 2.02891536e-24 1584.89 1.64480625e-24 1995.26 1.33980625e-24 2511.89 1.09725625e-24 3162.28 9.0481910791204e-25 3981.07 7.5189137141889e-25 5011.87 6.3041646775129e-25 6309.57 5.3392570508484e-25 7943.28 4.57280250625e-25 10000 3.9639855248361e-25 12589.25 3.48038642704e-25 15848.93 3.0962491716025e-25 19952.62 2.7911177308609e-25 25118.86 2.5487433026064e-25 31622.78 2.35621897281e-25 39810.72 2.2032913129929e-25 50118.72 2.0818167412249e-25 63095.73 1.9853253578601e-25 79432.82 1.9086806634025e-25 100000 1.8477987751609e-25 125892.54 1.7994385836441e-25 158489.32 1.7610251352849e-25 199526.23 1.7305117443364e-25 251188.64 1.7062748581264e-25 316227.77 1.6870217231569e-25 398107.17 1.6717295965041e-25 501187.23 1.6595813849616e-25 630957.34 1.6499324068096e-25 794328.23 1.6422683305081e-25 1000000 1.6361798480784e-25 1258930 1.63134402201e-25 1584890 1.6275027829824e-25 1995260 1.6244511080704e-25 2511890 1.62202729536e-25 3162280 1.6201019452401e-25 3981070 1.6185727876201e-25 5011870 1.6173580246321e-25 6309570 1.6163929752721e-25 7943280 1.6156267704196e-25 10000000 1.6150182775441e-25 12589250 1.6145344588129e-25 15848930 1.6141503487201e-25 19952620 1.6138450218361e-25 25118860 1.6136031913024e-25 31622780 1.6134103825984e-25 39810720 1.6132577505444e-25 50118720 1.6131356500996e-25 63095730 1.6130392582756e-25 79432820 1.6129629501241e-25 100000000 1.6129019049025e-25 100.00000 2.5685190756e-22 125.89254 2.0416123225e-22 158.48932 1.6230505201e-22 199.52623 1.2905868816e-22 251.18864 1.0264931856e-22 316.22777 8.167279129e-23 398.10717 6.500874384e-23 501.18723 5.177378116e-23 630.95734 4.126006756e-23 794.32823 3.290857956e-23 1000 2.627485081e-23 1258.93 2.100572224e-23 1584.89 1.682066169e-23 1995.26 1.349533696e-23 2511.89 1.085438916e-23 3162.28 8.75686464e-24 3981.07 7.09050384e-24 5011.87 5.76720225e-24 6309.57 4.71584656e-24 7943.28 3.88050601e-24 10000 3.21735969e-24 12589.25 2.69025604e-24 15848.93 2.27165184e-24 19952.62 1.93933476e-24 25118.86 1.67521249e-24 31622.78 1.46555236e-24 39810.72 1.29891609e-24 50118.72 1.1664e-24 63095.73 1.06131204e-24 79432.82 9.7781522510116e-25 100000 9.1147901273881e-25 125892.54 8.5878641987329e-25 158489.32 8.1693108403776e-25 199526.23 7.8368420528836e-25 251188.64 7.5727536452649e-25 316227.77 7.3629802569961e-25 398107.17 7.1963511563161e-25 501187.23 7.0639940229049e-25 630957.34 6.9588580268529e-25 794328.23 6.87534497329e-25 1000000 6.8090090795584e-25 1258930 6.7563172181124e-25 1584890 6.7144618649124e-25 1995260 6.68121507769e-25 2511890 6.6548052974601e-25 3162280 6.6338288308224e-25 3981070 6.6171652083216e-25 5011870 6.6039303372849e-25 6309570 6.5934156400225e-25 7943280 6.5850644455281e-25 10000000 6.5784314227009e-25 12589250 6.5731621110016e-25 15848930 6.5689760626084e-25 19952620 6.5656518442641e-25 25118860 6.5630105740081e-25 31622780 6.5609141402809e-25 39810720 6.5592472770724e-25 50118720 6.5579239806201e-25 63095730 6.5568728892304e-25 79432820 6.5560372588096e-25 100000000 6.5553733268676e-25 100.00000 5.3568639601e-22 125.89254 4.2573306889e-22 158.48932 3.3839442025e-22 199.52623 2.6901904324e-22 251.18864 2.1391402564e-22 316.22777 1.7014071844e-22 398.10717 1.3537089801e-22 501.18723 1.0775270416e-22 630.95734 8.581428496e-23 794.32823 6.838793809e-23 1000 5.454561025e-23 1258.93 4.355076049e-23 1584.89 3.481708036e-23 1995.26 2.787945601e-23 2511.89 2.236911616e-23 3162.28 1.799201889e-23 3981.07 1.451457604e-23 5011.87 1.175324089e-23 6309.57 9.55922724e-24 7943.28 7.81649764e-24 10000 6.43231044e-24 12589.25 5.33286649e-24 15848.93 4.45969924e-24 19952.62 3.76592836e-24 25118.86 3.214849e-24 31622.78 2.77688896e-24 39810.72 2.42923396e-24 50118.72 2.15296929e-24 63095.73 1.93376836e-24 79432.82 1.75933696e-24 100000 1.62103824e-24 125892.54 1.51117849e-24 158489.32 1.42372624e-24 199526.23 1.35443044e-24 251188.64 1.29937201e-24 316227.77 1.25552025e-24 398107.17 1.22080401e-24 501187.23 1.19311929e-24 630957.34 1.17115684e-24 794328.23 1.15369081e-24 1000000 1.13998329e-24 1258930 1.12890625e-24 1584890 1.12021056e-24 1995260 1.11323601e-24 2511890 1.10775625e-24 3162280 1.10334016e-24 3981070 1.09977169e-24 5011870 1.09704676e-24 6309570 1.09495296e-24 7943280 1.09307025e-24 10000000 1.09181601e-24 12589250 1.09077136e-24 15848930 1.08972721e-24 19952620 1.08910096e-24 25118860 1.08847489e-24 31622780 1.08805761e-24 39810720 1.087849e-24 50118720 1.08743184e-24 63095730 1.08722329e-24 79432820 1.08701476e-24 100000000 1.08701476e-24 100.00000 7.6056263089e-22 125.89254 6.04422225e-22 158.48932 4.8039434041e-22 199.52623 3.8187803889e-22 251.18864 3.0362017009e-22 316.22777 2.41460521e-22 398.10717 1.9208574025e-22 501.18723 1.5286602321e-22 630.95734 1.2171164329e-22 794.32823 9.696537841e-23 1000 7.730805625e-23 1258.93 6.169317025e-23 1584.89 4.929163264e-23 1995.26 3.943965601e-23 2511.89 3.161363076e-23 3162.28 2.539756816e-23 3981.07 2.046024289e-23 5011.87 1.653804889e-23 6309.57 1.342269769e-23 7943.28 1.094815744e-23 10000 8.98260841e-24 12589.25 7.42126564e-24 15848.93 6.18069321e-24 19952.62 5.19566436e-24 25118.86 4.41336064e-24 31622.78 3.79158784e-24 39810.72 3.297856e-24 50118.72 2.90566116e-24 63095.73 2.59403236e-24 79432.82 2.34671761e-24 100000 2.15003569e-24 125892.54 1.993744e-24 158489.32 1.86978276e-24 199526.23 1.77129481e-24 251188.64 1.69312144e-24 316227.77 1.63098441e-24 398107.17 1.58155776e-24 501187.23 1.54231561e-24 630957.34 1.51117849e-24 794328.23 1.48644864e-24 1000000 1.46676321e-24 1258930 1.45106116e-24 1584890 1.43880025e-24 1995260 1.42898116e-24 2511890 1.42110241e-24 3162280 1.41491025e-24 3981070 1.40991876e-24 5011870 1.40588449e-24 6309570 1.40280336e-24 7943280 1.40043556e-24 10000000 1.39854276e-24 12589250 1.39688761e-24 15848930 1.39570596e-24 19952620 1.394761e-24 25118860 1.39381636e-24 31622780 1.39334416e-24 39810720 1.39287204e-24 50118720 1.3924e-24 63095730 1.39216401e-24 79432820 1.39169209e-24 100000000 1.39169209e-24 100.00000 1.830556225e-23 125.89254 1.456414569e-23 158.48932 1.159198209e-23 199.52623 9.23065924e-24 251.18864 7.35548641e-24 316.22777 5.866084e-24 398.10717 4.682896e-24 501.18723 3.74306409e-24 630.95734 2.996361e-24 794.32823 2.40343009e-24 1000 1.93237801e-24 1258.93 1.55800324e-24 1584.89 1.26090441e-24 1995.26 1.02475129e-24 2511.89 8.3729344339876e-25 3162.28 6.8833355848569e-25 3981.07 5.7001065509025e-25 5011.87 4.7602341308025e-25 6309.57 4.0136672293201e-25 7943.28 3.4206484574161e-25 10000 2.9495956516324e-25 12589.25 2.5754264917956e-25 15848.93 2.2782120855844e-25 19952.62 2.04212706201e-25 25118.86 1.8545976702016e-25 31622.78 1.7056379623969e-25 39810.72 1.5873156396769e-25 50118.72 1.49332782096e-25 63095.73 1.4186718108676e-25 79432.82 1.3593696163369e-25 100000 1.3122643905361e-25 125892.54 1.274847025e-25 158489.32 1.2451257905956e-25 199526.23 1.2215171790441e-25 251188.64 1.20276482481e-25 316227.77 1.1878686223209e-25 398107.17 1.1760359118244e-25 501187.23 1.1666378009664e-25 630957.34 1.1591716524921e-25 794328.23 1.1532415275481e-25 1000000 1.1485314222001e-25 1258930 1.1447896308676e-25 1584890 1.1418174888241e-25 1995260 1.1394567341056e-25 2511890 1.1375813568025e-25 3162280 1.1360917395216e-25 3981070 1.13490829456e-25 5011870 1.1339685828025e-25 6309570 1.1332218064896e-25 7943280 1.1326287357025e-25 10000000 1.1321576210025e-25 12589250 1.1317834911601e-25 15848930 1.1314861155049e-25 19952620 1.1312506647649e-25 25118860 1.1310629944384e-25 31622780 1.1309136764836e-25 39810720 1.13079530529e-25 50118720 1.1307018233281e-25 63095730 1.13062717504e-25 79432820 1.1305673236881e-25 100000000 1.1305202507041e-25 100.00000 4.9326189025e-22 125.89254 3.9195684441e-22 158.48932 3.11487201e-22 199.52623 2.4756819649e-22 251.18864 1.9679600656e-22 316.22777 1.5646757569e-22 398.10717 1.2443179401e-22 501.18723 9.898658064e-23 630.95734 7.877272516e-23 794.32823 6.271689636e-23 1000 4.996369225e-23 1258.93 3.983376996e-23 1584.89 3.1787044e-23 1995.26 2.539454449e-23 2511.89 2.031755625e-23 3162.28 1.628445316e-23 3981.07 1.308124224e-23 5011.87 1.0536516e-23 6309.57 8.51530761e-24 7943.28 6.91006369e-24 10000 5.63445169e-24 12589.25 4.62164004e-24 15848.93 3.81694369e-24 19952.62 3.17766276e-24 25118.86 2.669956e-24 31622.78 2.26653025e-24 39810.72 1.94630401e-24 50118.72 1.69182049e-24 63095.73 1.48962025e-24 79432.82 1.32894784e-24 100000 1.20143521e-24 125892.54 1.10019121e-24 158489.32 1.01969604e-24 199526.23 9.5582376837376e-25 251188.64 9.05051600964e-25 316227.77 8.6472182117764e-25 398107.17 8.3268672777889e-25 501187.23 8.0724025469025e-25 630957.34 7.8702749302849e-25 794328.23 7.7097197811001e-25 1000000 7.5821844965476e-25 1258930 7.4808816325681e-25 1584890 7.4004124579225e-25 1995260 7.3364946531556e-25 2511890 7.2857218494736e-25 3162280 7.2453922688169e-25 3981070 7.2133579936201e-25 5011870 7.1879112204025e-25 6309570 7.1676982683076e-25 7943280 7.1516417600644e-25 10000000 7.1388896148025e-25 12589250 7.1287592467204e-25 15848930 7.1207117741761e-25 19952620 7.1143202537449e-25 25118860 7.1092435046689e-25 31622780 7.1052103836081e-25 39810720 7.10200594756e-25 50118720 7.09946111889e-25 63095730 7.0974407486161e-25 79432820 7.0958351047684e-25 100000000 7.0945598172241e-25 100.00000 1.09626547801e-21 125.89254 8.7105848769e-22 158.48932 6.92163481e-22 199.52623 5.5006666225e-22 251.18864 4.3719464464e-22 316.22777 3.4753534929e-22 398.10717 2.7631747984e-22 501.18723 2.1974504644e-22 630.95734 1.7481070656e-22 794.32823 1.3911730704e-22 1000 1.1076510025e-22 1258.93 8.824347844e-23 1584.89 7.035351129e-23 1995.26 5.614355041e-23 2511.89 4.485650625e-23 3162.28 3.589088281e-23 3981.07 2.876927769e-23 5011.87 2.311205625e-23 6309.57 1.861836201e-23 7943.28 1.504896849e-23 10000 1.221362704e-23 12589.25 9.96159844e-24 15848.93 8.17273744e-24 19952.62 6.75168256e-24 25118.86 5.62306369e-24 31622.78 4.726276e-24 39810.72 4.01441296e-24 50118.72 3.448449e-24 63095.73 2.99913124e-24 79432.82 2.64225025e-24 100000 2.35868164e-24 125892.54 2.13364449e-24 158489.32 1.95468361e-24 199526.23 1.81252369e-24 251188.64 1.69963369e-24 316227.77 1.61010721e-24 398107.17 1.53884025e-24 501187.23 1.48230625e-24 630957.34 1.43736121e-24 794328.23 1.40161921e-24 1000000 1.37311524e-24 1258930 1.35070884e-24 1584890 1.33287025e-24 1995260 1.31859289e-24 2511890 1.30736356e-24 3162280 1.29846025e-24 3981070 1.29117769e-24 5011870 1.28550244e-24 6309570 1.28097124e-24 7943280 1.27757809e-24 10000000 1.274641e-24 12589250 1.272384e-24 15848930 1.27057984e-24 19952620 1.26922756e-24 25118860 1.26810121e-24 31622780 1.26720049e-24 39810720 1.26652516e-24 50118720 1.26585001e-24 63095730 1.26540001e-24 79432820 1.26517504e-24 100000000 1.26472516e-24 100.00000 1.58901890625e-21 125.89254 1.26254434329e-21 158.48932 1.00321693696e-21 199.52623 7.9722651904e-22 251.18864 6.3359937796e-22 316.22777 5.0362541056e-22 398.10717 4.0038409216e-22 501.18723 3.1837978624e-22 630.95734 2.5323948225e-22 794.32823 2.0149518601e-22 1000 1.6039462609e-22 1258.93 1.2774650625e-22 1584.89 1.0181415409e-22 1995.26 8.121434161e-23 2511.89 6.485241961e-23 3162.28 5.1854401e-23 3981.07 4.153029136e-23 5011.87 3.332983824e-23 6309.57 2.681582656e-23 7943.28 2.164203441e-23 10000 1.753180641e-23 12589.25 1.426648441e-23 15848.93 1.167383889e-23 19952.62 9.61372036e-24 25118.86 7.97723536e-24 31622.78 6.67757281e-24 39810.72 5.645376e-24 50118.72 4.82505156e-24 63095.73 4.173849e-24 79432.82 3.65650884e-24 100000 3.24540225e-24 125892.54 2.91897225e-24 158489.32 2.65950864e-24 199526.23 2.45360896e-24 251188.64 2.28977424e-24 316227.77 2.16001809e-24 398107.17 2.05664281e-24 501187.23 1.97458704e-24 630957.34 1.90964761e-24 794328.23 1.857769e-24 1000000 1.81683441e-24 1258930 1.78409449e-24 1584890 1.75801081e-24 1995260 1.73765124e-24 2511890 1.72108161e-24 3162280 1.708249e-24 3981070 1.697809e-24 5011870 1.68974001e-24 6309570 1.68324676e-24 7943280 1.67806116e-24 10000000 1.67391844e-24 12589250 1.67055625e-24 15848930 1.66797225e-24 19952620 1.66590649e-24 25118860 1.66435801e-24 31622780 1.66306816e-24 39810720 1.66203664e-24 50118720 1.66126321e-24 63095730 1.66048996e-24 79432820 1.65997456e-24 100000000 1.65945924e-24 100.00000 1.906370244e-23 125.89254 1.5186609e-23 158.48932 1.210622436e-23 199.52623 9.659664e-24 251.18864 7.71617284e-24 316.22777 6.17224336e-24 398.10717 4.946176e-24 501.18723 3.972049e-24 630.95734 3.19837456e-24 794.32823 2.58373476e-24 1000 2.09554576e-24 1258.93 1.70772624e-24 1584.89 1.39972561e-24 1995.26 1.15519504e-24 2511.89 9.6079204e-25 3162.28 8.0641908647056e-25 3981.07 6.8379635563204e-25 5011.87 5.8639373793225e-25 6309.57 5.0902403006464e-25 7943.28 4.4756702102025e-25 10000 3.9875006691556e-25 12589.25 3.5997336049284e-25 15848.93 3.2917196497201e-25 19952.62 3.0470543520169e-25 25118.86 2.8527103519929e-25 31622.78 2.6983380869809e-25 39810.72 2.57571475225e-25 50118.72 2.4783122410225e-25 63095.73 2.4009431603364e-25 79432.82 2.3394856733329e-25 100000 2.2906686204649e-25 125892.54 2.2518925558921e-25 158489.32 2.2210907994025e-25 199526.23 2.1966244217856e-25 251188.64 2.1771901285369e-25 316227.77 2.1617524786225e-25 398107.17 2.14949067876e-25 501187.23 2.1397498302049e-25 630957.34 2.1320133421129e-25 794328.23 2.1258674368369e-25 1000000 2.1209856533056e-25 1258930 2.1171078249616e-25 1584890 2.1140279796736e-25 1995260 2.1115817088025e-25 2511890 2.1096374700241e-25 3162280 2.1080944777201e-25 3981070 2.1068678343969e-25 5011870 2.1058939356004e-25 6309570 2.1051203009281e-25 7943280 2.1045055325121e-25 10000000 2.1040174519849e-25 12589250 2.1036294133156e-25 15848930 2.1033212095204e-25 19952620 2.1030772308624e-25 25118860 2.10288279184e-25 31622780 2.1027287144704e-25 39810720 2.1026058234724e-25 50118720 2.1025086137344e-25 63095730 2.1024306641529e-25 79432820 2.10236922256e-25 100000000 2.1023206201449e-25 100.00000 1.0955180889e-22 125.89254 8.714035801e-23 158.48932 6.9338929e-23 199.52623 5.519747025e-23 251.18864 4.396618249e-23 316.22777 3.504403204e-23 398.10717 2.795659876e-23 501.18723 2.232751504e-23 630.95734 1.785569536e-23 794.32823 1.4303524e-23 1000 1.148260996e-23 1258.93 9.24099201e-24 1584.89 7.46109225e-24 1995.26 6.04717281e-24 2511.89 4.923961e-24 3162.28 4.03166241e-24 3981.07 3.32296441e-24 5011.87 2.75991769e-24 6309.57 2.31283264e-24 7943.28 1.95748081e-24 10000 1.67547136e-24 12589.25 1.45130209e-24 15848.93 1.27328656e-24 19952.62 1.13188321e-24 25118.86 1.01949409e-24 31622.78 9.3034860029764e-25 39810.72 8.5947806806416e-25 50118.72 8.0318376050704e-25 63095.73 7.5846750672016e-25 79432.82 7.2294818948496e-25 100000 6.9473408575041e-25 125892.54 6.72322922209e-25 158489.32 6.5452096521009e-25 199526.23 6.4038053654884e-25 251188.64 6.2914831380769e-25 316227.77 6.2022618197136e-25 398107.17 6.1313926963041e-25 501187.23 6.0750972192681e-25 630957.34 6.0303813395809e-25 794328.23 5.9948613537201e-25 1000000 5.9666478950464e-25 1258930 5.9442372972544e-25 1584890 5.9264346375556e-25 1995260 5.9122950831025e-25 2511890 5.9010619694569e-25 3162280 5.8921405856784e-25 3981070 5.88505313881e-25 5011870 5.87942367076e-25 6309570 5.8749526950976e-25 7943280 5.8713998200036e-25 10000000 5.8685788242225e-25 12589250 5.8663375276804e-25 15848930 5.86455766416e-25 19952620 5.8631440751689e-25 25118860 5.8620200642689e-25 31622780 5.861127364e-25 39810720 5.8604184583569e-25 50118720 5.85985657009e-25 63095730 5.8594095283684e-25 79432820 5.8590543566916e-25 100000000 5.8587711456121e-25 100.00000 2.1302570116e-22 125.89254 1.6939803409e-22 158.48932 1.3474102084e-22 199.52623 1.0721359936e-22 251.18864 8.534803456e-23 316.22777 6.797837601e-23 398.10717 5.418137664e-23 501.18723 4.322273536e-23 630.95734 3.451797504e-23 794.32823 2.760241444e-23 1000 2.211068484e-23 1258.93 1.774768384e-23 1584.89 1.428159681e-23 1995.26 1.152874116e-23 2511.89 9.34219225e-24 3162.28 7.60546084e-24 3981.07 6.22602304e-24 5011.87 5.12977201e-24 6309.57 4.25927044e-24 7943.28 3.56794321e-24 10000 3.01855876e-24 12589.25 2.582449e-24 15848.93 2.23592209e-24 19952.62 1.96056004e-24 25118.86 1.74187204e-24 31622.78 1.56825529e-24 39810.72 1.43017681e-24 50118.72 1.32066064e-24 63095.73 1.23365449e-24 79432.82 1.16445681e-24 100000 1.10944089e-24 125892.54 1.06584976e-24 158489.32 1.03124025e-24 199526.23 1.00380361e-24 251188.64 9.8186140667664e-25 316227.77 9.6449232214449e-25 398107.17 9.5069578631769e-25 501187.23 9.3973655388001e-25 630957.34 9.3103143106009e-25 794328.23 9.2411672383801e-25 1000000 9.1862429391121e-25 1258930 9.1426126013401e-25 1584890 9.1079575647844e-25 1995260 9.0804299498641e-25 2511890 9.0585623451904e-25 3162280 9.0411933573361e-25 3981070 9.0273979592644e-25 5011870 9.0164387313049e-25 6309570 9.0077334664464e-25 7943280 9.0008178205696e-25 10000000 8.9953255328161e-25 12589250 8.9909632520761e-25 15848930 8.9874969418081e-25 19952620 8.9847440906521e-25 25118860 8.9825584148496e-25 31622780 8.98082219584e-25 39810720 8.9794424384064e-25 50118720 8.9783451520569e-25 63095730 8.9774753302116e-25 79432820 8.9767836718921e-25 100000000 8.9762341541401e-25 100.00000 2.9587096081e-22 125.89254 2.3524810884e-22 158.48932 1.8709315524e-22 199.52623 1.4884488004e-22 251.18864 1.18461456e-22 316.22777 9.432682884e-23 398.10717 7.515502864e-23 501.18723 5.992772569e-23 630.95734 4.7831056e-23 794.32823 3.822330625e-23 1000 3.0591961e-23 1258.93 2.452923729e-23 1584.89 1.97136e-23 1995.26 1.588899321e-23 2511.89 1.285007409e-23 3162.28 1.043677636e-23 3981.07 8.51997721e-24 5011.87 6.99708304e-24 6309.57 5.78739249e-24 7943.28 4.82636961e-24 10000 4.06344964e-24 12589.25 3.45699649e-24 15848.93 2.975625e-24 19952.62 2.59306609e-24 25118.86 2.289169e-24 31622.78 2.047761e-24 39810.72 1.85613376e-24 50118.72 1.70380809e-24 63095.73 1.58306724e-24 79432.82 1.48693636e-24 100000 1.41063129e-24 125892.54 1.35001161e-24 158489.32 1.30165281e-24 199526.23 1.26360081e-24 251188.64 1.23321025e-24 316227.77 1.20890025e-24 398107.17 1.18984464e-24 501187.23 1.17462244e-24 630957.34 1.16251524e-24 794328.23 1.15283169e-24 1000000 1.14532804e-24 1258930 1.13912929e-24 1584890 1.13443801e-24 1995260 1.13060689e-24 2511890 1.12741924e-24 3162280 1.12508449e-24 3981070 1.12317604e-24 5011870 1.12169281e-24 6309570 1.12042225e-24 7943280 1.11957561e-24 10000000 1.11872929e-24 12589250 1.11809476e-24 15848930 1.11767184e-24 19952620 1.117249e-24 25118860 1.11703761e-24 31622780 1.11661489e-24 39810720 1.11661489e-24 50118720 1.11640356e-24 63095730 1.11619225e-24 79432820 1.11619225e-24 100000000 1.11598096e-24 tmp_ns50wwy/tests/bsimbulk/pmos/reference/Idvd_core_st.standard0000644000175000017500000001337114163340332025172 0ustar carstencarstenV(d) I(d) I(g) I(b) I(s) -1.20000 -6.1502e-06 0. 0. 6.1502e-06 -1.10000 -5.2718e-06 0. 0. 5.2718e-06 -1.00000 -4.4901e-06 0. 0. 4.4901e-06 -0.9 -3.7988e-06 0. 0. 3.7988e-06 -0.8 -3.1912e-06 0. 0. 3.1912e-06 -0.7 -2.6611e-06 0. 0. 2.6611e-06 -0.6 -2.2024e-06 0. 0. 2.2024e-06 -0.5 -1.8099e-06 0. 0. 1.8099e-06 -0.4 -1.4803e-06 0. 0. 1.4803e-06 -0.3 -1.2161e-06 0. 0. 1.2161e-06 -0.2 -1.0209e-06 0. 0. 1.0209e-06 -0.1 -8.449273e-07 0. 0. 8.449273e-07 2.220446e-16 3.619e-21 0. 0. -3.619e-21 -1.20000 -7.19628e-05 0. 0. 7.19628e-05 -1.10000 -6.68405e-05 0. 0. 6.68405e-05 -1.00000 -6.1962e-05 0. 0. 6.1962e-05 -0.9 -5.73261e-05 0. 0. 5.73261e-05 -0.8 -5.29358e-05 0. 0. 5.29358e-05 -0.7 -4.88024e-05 0. 0. 4.88024e-05 -0.6 -4.49569e-05 0. 0. 4.49569e-05 -0.5 -4.1474e-05 0. 0. 4.1474e-05 -0.4 -3.8497e-05 0. 0. 3.8497e-05 -0.3 -3.61207e-05 0. 0. 3.61207e-05 -0.2 -3.33702e-05 0. 0. 3.33702e-05 -0.1 -2.40116e-05 0. 0. 2.40116e-05 2.220446e-16 6.846e-20 0. 0. -6.846e-20 -1.20000 -0.000210699 0. 0. 0.000210699 -1.10000 -0.0001995924 0. 0. 0.0001995924 -1.00000 -0.0001889338 0. 0. 0.0001889338 -0.9 -0.0001787948 0. 0. 0.0001787948 -0.8 -0.0001693015 0. 0. 0.0001693015 -0.7 -0.0001606621 0. 0. 0.0001606621 -0.6 -0.0001531601 0. 0. 0.0001531601 -0.5 -0.0001469334 0. 0. 0.0001469334 -0.4 -0.0001406341 0. 0. 0.0001406341 -0.3 -0.0001280243 0. 0. 0.0001280243 -0.2 -0.0001014699 0. 0. 0.0001014699 -0.1 -5.8496e-05 0. 0. 5.8496e-05 2.220446e-16 1.094e-19 0. 0. -1.094e-19 -1.20000 -0.0003897903 0. 0. 0.0003897903 -1.10000 -0.0003728171 0. 0. 0.0003728171 -1.00000 -0.0003570024 0. 0. 0.0003570024 -0.9 -0.0003426591 0. 0. 0.0003426591 -0.8 -0.0003300981 0. 0. 0.0003300981 -0.7 -0.0003192208 0. 0. 0.0003192208 -0.6 -0.0003079691 0. 0. 0.0003079691 -0.5 -0.0002907752 0. 0. 0.0002907752 -0.4 -0.0002615678 0. 0. 0.0002615678 -0.3 -0.0002172859 0. 0. 0.0002172859 -0.2 -0.0001579069 0. 0. 0.0001579069 -0.1 -8.48884e-05 0. 0. 8.48884e-05 2.220446e-16 1.955e-19 0. 0. -1.955e-19 -1.20000 -3.7264e-06 0. 0. 3.7264e-06 -1.10000 -3.0008e-06 0. 0. 3.0008e-06 -1.00000 -2.391e-06 0. 0. 2.391e-06 -0.9 -1.8843e-06 0. 0. 1.8843e-06 -0.8 -1.4682e-06 0. 0. 1.4682e-06 -0.7 -1.1308e-06 0. 0. 1.1308e-06 -0.6 -8.606623e-07 0. 0. 8.606623e-07 -0.5 -6.472633e-07 0. 0. 6.472633e-07 -0.4 -4.811385e-07 0. 0. 4.811385e-07 -0.3 -3.544749e-07 0. 0. 3.544749e-07 -0.2 -2.631194e-07 0. 0. 2.631194e-07 -0.1 -2.019218e-07 0. 0. 2.019218e-07 2.220446e-16 1.026e-21 0. 0. -1.026e-21 -1.20000 -9.77422e-05 0. 0. 9.77422e-05 -1.10000 -9.02551e-05 0. 0. 9.02551e-05 -1.00000 -8.31497e-05 0. 0. 8.31497e-05 -0.9 -7.64183e-05 0. 0. 7.64183e-05 -0.8 -7.00546e-05 0. 0. 7.00546e-05 -0.7 -6.40548e-05 0. 0. 6.40548e-05 -0.6 -5.84229e-05 0. 0. 5.84229e-05 -0.5 -5.31845e-05 0. 0. 5.31845e-05 -0.4 -4.84294e-05 0. 0. 4.84294e-05 -0.3 -4.43937e-05 0. 0. 4.43937e-05 -0.2 -4.10523e-05 0. 0. 4.10523e-05 -0.1 -3.18414e-05 0. 0. 3.18414e-05 2.220446e-16 9.962e-20 0. 0. -9.962e-20 -1.20000 -0.0003246843 0. 0. 0.0003246843 -1.10000 -0.0003070548 0. 0. 0.0003070548 -1.00000 -0.0002900529 0. 0. 0.0002900529 -0.9 -0.000273725 0. 0. 0.000273725 -0.8 -0.0002581649 0. 0. 0.0002581649 -0.7 -0.0002435599 0. 0. 0.0002435599 -0.6 -0.0002302613 0. 0. 0.0002302613 -0.5 -0.0002187766 0. 0. 0.0002187766 -0.4 -0.0002087177 0. 0. 0.0002087177 -0.3 -0.0001926563 0. 0. 0.0001926563 -0.2 -0.0001556528 0. 0. 0.0001556528 -0.1 -9.09697e-05 0. 0. 9.09697e-05 2.220446e-16 2.081e-19 0. 0. -2.081e-19 -1.20000 -0.0006254469 0. 0. 0.0006254469 -1.10000 -0.0005968844 0. 0. 0.0005968844 -1.00000 -0.0005697477 0. 0. 0.0005697477 -0.9 -0.0005444432 0. 0. 0.0005444432 -0.8 -0.0005215185 0. 0. 0.0005215185 -0.7 -0.0005013286 0. 0. 0.0005013286 -0.6 -0.0004820905 0. 0. 0.0004820905 -0.5 -0.0004563189 0. 0. 0.0004563189 -0.4 -0.0004132082 0. 0. 0.0004132082 -0.3 -0.00034562 0. 0. 0.00034562 -0.2 -0.0002524846 0. 0. 0.0002524846 -0.1 -0.000136237 0. 0. 0.000136237 2.220446e-16 3.453e-19 0. 0. -3.453e-19 -1.20000 -7.8237e-06 0. 0. 7.8237e-06 -1.10000 -6.9821e-06 0. 0. 6.9821e-06 -1.00000 -6.2084e-06 0. 0. 6.2084e-06 -0.9 -5.5001e-06 0. 0. 5.5001e-06 -0.8 -4.8551e-06 0. 0. 4.8551e-06 -0.7 -4.2724e-06 0. 0. 4.2724e-06 -0.6 -3.7533e-06 0. 0. 3.7533e-06 -0.5 -3.3034e-06 0. 0. 3.3034e-06 -0.4 -2.9323e-06 0. 0. 2.9323e-06 -0.3 -2.6403e-06 0. 0. 2.6403e-06 -0.2 -2.3852e-06 0. 0. 2.3852e-06 -0.1 -1.9488e-06 0. 0. 1.9488e-06 2.220446e-16 6.629e-21 0. 0. -6.629e-21 -1.20000 -4.86735e-05 0. 0. 4.86735e-05 -1.10000 -4.54812e-05 0. 0. 4.54812e-05 -1.00000 -4.24436e-05 0. 0. 4.24436e-05 -0.9 -3.95714e-05 0. 0. 3.95714e-05 -0.8 -3.68855e-05 0. 0. 3.68855e-05 -0.7 -3.4424e-05 0. 0. 3.4424e-05 -0.6 -3.22478e-05 0. 0. 3.22478e-05 -0.5 -3.0425e-05 0. 0. 3.0425e-05 -0.4 -2.89532e-05 0. 0. 2.89532e-05 -0.3 -2.75302e-05 0. 0. 2.75302e-05 -0.2 -2.46014e-05 0. 0. 2.46014e-05 -0.1 -1.64136e-05 0. 0. 1.64136e-05 2.220446e-16 3.751e-20 0. 0. -3.751e-20 -1.20000 -0.0001241326 0. 0. 0.0001241326 -1.10000 -0.0001179613 0. 0. 0.0001179613 -1.00000 -0.0001121561 0. 0. 0.0001121561 -0.9 -0.0001068061 0. 0. 0.0001068061 -0.8 -0.0001020288 0. 0. 0.0001020288 -0.7 -9.79423e-05 0. 0. 9.79423e-05 -0.6 -9.4572e-05 0. 0. 9.4572e-05 -0.5 -9.15563e-05 0. 0. 9.15563e-05 -0.4 -8.71731e-05 0. 0. 8.71731e-05 -0.3 -7.77701e-05 0. 0. 7.77701e-05 -0.2 -6.04158e-05 0. 0. 6.04158e-05 -0.1 -3.43425e-05 0. 0. 3.43425e-05 2.220446e-16 6.199e-20 0. 0. -6.199e-20 -1.20000 -0.0002196222 0. 0. 0.0002196222 -1.10000 -0.0002111348 0. 0. 0.0002111348 -1.00000 -0.0002035396 0. 0. 0.0002035396 -0.9 -0.0001969636 0. 0. 0.0001969636 -0.8 -0.0001913965 0. 0. 0.0001913965 -0.7 -0.0001863308 0. 0. 0.0001863308 -0.6 -0.0001799074 0. 0. 0.0001799074 -0.5 -0.0001689108 0. 0. 0.0001689108 -0.4 -0.000150707 0. 0. 0.000150707 -0.3 -0.0001242818 0. 0. 0.0001242818 -0.2 -8.98316e-05 0. 0. 8.98316e-05 -0.1 -4.81036e-05 0. 0. 4.81036e-05 2.220446e-16 1.599e-19 0. 0. -1.599e-19 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1d_lw.standard0000644000175000017500000004423314163340332025137 0ustar carstencarstenFreq N(d) 100.00000 1.62712197376e-21 125.89254 1.29314317609e-21 158.48932 1.02785001201e-21 199.52623 8.1711937609e-22 251.18864 6.4972990404e-22 316.22777 5.1677110276e-22 398.10717 4.11156729e-22 501.18723 3.2726257216e-22 630.95734 2.6062550721e-22 794.32823 2.0769421456e-22 1000 1.6564719616e-22 1258.93 1.3224770001e-22 1584.89 1.05719524e-22 1995.26 8.464736016e-23 2511.89 6.790748836e-23 3162.28 5.46121e-23 3981.07 4.4049769e-23 5011.87 3.566120089e-23 6309.57 2.899714801e-23 7943.28 2.370423969e-23 10000 1.949928964e-23 12589.25 1.615959601e-23 15848.93 1.350636001e-23 19952.62 1.139940169e-23 25118.86 9.72504225e-24 31622.78 8.39550625e-24 39810.72 7.33976464e-24 50118.72 6.50046016e-24 63095.73 5.83415716e-24 79432.82 5.30473024e-24 100000 4.88454201e-24 125892.54 4.55054224e-24 158489.32 4.28531401e-24 199526.23 4.07434225e-24 251188.64 3.90694756e-24 316227.77 3.77408329e-24 398107.17 3.66837409e-24 501187.23 3.58458489e-24 630957.34 3.51787536e-24 794328.23 3.46518225e-24 1000000 3.42287001e-24 1258930 3.38964921e-24 1584890 3.36318921e-24 1995260 3.34194961e-24 2511890 3.32515225e-24 3162280 3.31203601e-24 3981070 3.301489e-24 5011870 3.29313609e-24 6309570 3.28624384e-24 7943280 3.28116996e-24 10000000 3.27682404e-24 12589250 3.27356649e-24 15848930 3.27103396e-24 19952620 3.268864e-24 25118860 3.26705625e-24 31622780 3.26561041e-24 39810720 3.26488761e-24 50118720 3.26380356e-24 63095730 3.26308096e-24 79432820 3.26271969e-24 100000000 3.26235844e-24 100.00000 3.518314264089e-20 125.89254 2.794911896401e-20 158.48932 2.220290724096e-20 199.52623 1.763854922404e-20 251.18864 1.401294840169e-20 316.22777 1.113301427161e-20 398.10717 8.84542131001e-21 501.18723 7.028307225e-21 630.95734 5.58493160976e-21 794.32823 4.43841093796e-21 1000 3.52770663025e-21 1258.93 2.80429557136e-21 1584.89 2.22968118025e-21 1995.26 1.77324367801e-21 2511.89 1.410678481e-21 3162.28 1.12268554225e-21 3981.07 8.9392628196e-22 5011.87 7.1221731876e-22 6309.57 5.6787843204e-22 7943.28 4.5322577881e-22 10000 3.6215612416e-22 12589.25 2.89816576e-22 15848.93 2.3235209761e-22 19952.62 1.8671036164e-22 25118.86 1.50454756e-22 31622.78 1.2165428209e-22 39810.72 9.877775769e-23 50118.72 8.060807524e-23 63095.73 6.617334409e-23 79432.82 5.470821225e-23 100000 4.560165841e-23 125892.54 3.836687481e-23 158489.32 3.262123225e-23 199526.23 2.805714961e-23 251188.64 2.443127184e-23 316227.77 2.155094929e-23 398107.17 1.9263321e-23 501187.23 1.744649361e-23 630957.34 1.600320016e-23 794328.23 1.485639936e-23 1000000 1.394574336e-23 1258930 1.322267769e-23 1584890 1.264798096e-23 1995260 1.219127056e-23 2511890 1.182878449e-23 3162280 1.154096784e-23 3981070 1.131245956e-23 5011870 1.113023044e-23 6309570 1.098591025e-23 7943280 1.087152784e-23 10000000 1.078071556e-23 12589250 1.070794729e-23 15848930 1.065043225e-23 19952620 1.060479225e-23 25118860 1.0569001e-23 31622780 1.053976225e-23 39810720 1.0517049e-23 50118720 1.049889604e-23 63095730 1.0484644e-23 79432820 1.047299044e-23 100000000 1.046393104e-23 100.00000 1.5698220561604e-19 125.89254 1.2469881937984e-19 158.48932 9.905528763025e-20 199.52623 7.86858601e-20 251.18864 6.250585013689e-20 316.22777 4.9653654561e-20 398.10717 3.9444740449e-20 501.18723 3.133554934225e-20 630.95734 2.489414972944e-20 794.32823 1.977758443584e-20 1000 1.571334953841e-20 1258.93 1.248502308496e-20 1584.89 9.92067792676e-21 1995.26 7.88373513216e-21 2511.89 6.26571982969e-21 3162.28 4.98050598529e-21 3981.07 3.95961855025e-21 5011.87 3.14869121424e-21 6309.57 2.50455207025e-21 7943.28 1.99289923561e-21 10000 1.58647669636e-21 12589.25 1.26364608484e-21 15848.93 1.00720543225e-21 19952.62 8.0351272369e-22 25118.86 6.4171529041e-22 31622.78 5.1319012369e-22 39810.72 4.1110401049e-22 50118.72 3.3001082244e-22 63095.73 2.6559546841e-22 79432.82 2.1442916356e-22 100000 1.7378885241e-22 125892.54 1.4150529936e-22 158489.32 1.1586154321e-22 199526.23 9.5491984e-23 251188.64 7.931149249e-23 316227.77 6.645999529e-23 398107.17 5.625150001e-23 501187.23 4.814139456e-23 630957.34 4.170059776e-23 794328.23 3.658314256e-23 1000000 3.251964676e-23 1258930 2.929082641e-23 1584890 2.672683204e-23 1995260 2.468996721e-23 2511890 2.307169089e-23 3162280 2.178648976e-23 3981070 2.076533761e-23 5011870 1.995498241e-23 6309570 1.931075136e-23 7943280 1.879916164e-23 10000000 1.839208996e-23 12589250 1.806930064e-23 15848930 1.781346436e-23 19952620 1.760977296e-23 25118860 1.744816441e-23 31622780 1.731891456e-23 39810720 1.721752036e-23 50118720 1.713628816e-23 63095730 1.707177124e-23 79432820 1.702057536e-23 100000000 1.698016849e-23 100.00000 4.0285221420096e-19 125.89254 3.2000144255689e-19 158.48932 2.5419061559824e-19 199.52623 2.0191533263001e-19 251.18864 1.6039151921881e-19 316.22777 1.2740801969476e-19 398.10717 1.0120828755625e-19 501.18723 8.039708651844e-20 630.95734 6.386618534976e-20 794.32823 5.073521992704e-20 1000 4.030493896881e-20 1258.93 3.201984569281e-20 1584.89 2.543875072209e-20 1995.26 2.021122842244e-20 2511.89 1.605884545225e-20 3162.28 1.276050381376e-20 3981.07 1.014053028004e-20 5011.87 8.05940698564e-21 6309.57 6.40632156025e-21 7943.28 5.09322014224e-21 10000 4.05018960921e-21 12589.25 3.22168624801e-21 15848.93 2.56357917124e-21 19952.62 2.04082580025e-21 25118.86 1.62558950596e-21 31622.78 1.29574801225e-21 39810.72 1.033751104e-21 50118.72 8.25642756e-22 63095.73 6.6033066961e-22 79432.82 5.2902300025e-22 100000 4.2471851569e-22 125892.54 3.4186900609e-22 158489.32 2.76058225e-22 199526.23 2.2378364836e-22 251188.64 1.8226080016e-22 316227.77 1.4927708041e-22 398107.17 1.23076836e-22 501187.23 1.0226467876e-22 630957.34 8.573463649e-23 794328.23 7.260403264e-23 1000000 6.2173225e-23 1258930 5.388881281e-23 1584890 4.7306884e-23 1995260 4.207987161e-23 2511890 3.792712225e-23 3162280 3.462851716e-23 3981070 3.200843776e-23 5011870 2.992746436e-23 6309570 2.827474276e-23 7943280 2.696101776e-23 10000000 2.5918281e-23 12589250 2.5090081e-23 15848930 2.443226041e-23 19952620 2.390916609e-23 25118860 2.3493409e-23 31622780 2.316400641e-23 39810720 2.290196736e-23 50118720 2.269379044e-23 63095730 2.252831296e-23 79432820 2.239750276e-23 100000000 2.229256225e-23 100.00000 1.39585179321e-21 125.89254 1.10930961969e-21 158.48932 8.8170394225e-22 199.52623 7.0090974009e-22 251.18864 5.5729517041e-22 316.22777 4.4322459841e-22 398.10717 3.5260952841e-22 501.18723 2.8063285441e-22 630.95734 2.2346064196e-22 794.32823 1.7804632356e-22 1000 1.4197437409e-22 1258.93 1.1332028304e-22 1584.89 9.055806244e-23 1995.26 7.247968225e-23 2511.89 5.811775225e-23 3162.28 4.671039025e-23 3981.07 3.764926881e-23 5011.87 3.045163489e-23 6309.57 2.473470756e-23 7943.28 2.019333969e-23 10000 1.658607076e-23 12589.25 1.372035681e-23 15848.93 1.144401241e-23 19952.62 9.63667849e-24 25118.86 8.20020496e-24 31622.78 7.059649e-24 39810.72 6.15337636e-24 50118.72 5.433561e-24 63095.73 4.862025e-24 79432.82 4.40790025e-24 100000 4.04693689e-24 125892.54 3.76049664e-24 158489.32 3.53289616e-24 199526.23 3.35219481e-24 251188.64 3.20839744e-24 316227.77 3.09443281e-24 398107.17 3.00363561e-24 501187.23 2.93197129e-24 630957.34 2.87472025e-24 794328.23 2.829124e-24 1000000 2.79324369e-24 1258930 2.76457129e-24 1584890 2.74167364e-24 1995260 2.72382016e-24 2511890 2.709316e-24 3162280 2.69780625e-24 3981070 2.68894404e-24 5011870 2.68173376e-24 6309570 2.67584164e-24 7943280 2.67126336e-24 10000000 2.66766889e-24 12589250 2.66505625e-24 15848930 2.66277124e-24 19952620 2.66081344e-24 25118860 2.65950864e-24 31622780 2.65820416e-24 39810720 2.65722601e-24 50118720 2.65657401e-24 63095730 2.65592209e-24 79432820 2.65559616e-24 100000000 2.65527025e-24 100.00000 6.004626788356e-20 125.89254 4.769886576049e-20 158.48932 3.789091940481e-20 199.52623 3.010023743364e-20 251.18864 2.391182859025e-20 316.22777 1.899622679824e-20 398.10717 1.5091631104e-20 501.18723 1.199009670049e-20 630.95734 9.52646273296e-21 794.32823 7.569522009e-21 1000 6.01507273761e-21 1258.93 4.78032577201e-21 1584.89 3.79953891216e-21 1995.26 3.02046969744e-21 2511.89 2.40162724096e-21 3162.28 1.91007457936e-21 3981.07 1.51961191684e-21 5011.87 1.20946059529e-21 6309.57 9.6309674244e-22 7943.28 7.67400804e-22 10000 6.1195380129e-22 12589.25 4.8848072256e-22 15848.93 3.9040227396e-22 19952.62 3.1249400625e-22 25118.86 2.5061106249e-22 31622.78 2.0145544225e-22 39810.72 1.62409536e-22 50118.72 1.3139349129e-22 63095.73 1.0675642329e-22 79432.82 8.718703876e-23 100000 7.164268164e-23 125892.54 5.929462009e-23 158489.32 4.948700409e-23 199526.23 4.169672329e-23 251188.64 3.550848921e-23 316227.77 3.059306721e-23 398107.17 2.668858921e-23 501187.23 2.358656356e-23 630957.34 2.1123216e-23 794328.23 1.916600841e-23 1000000 1.761145156e-23 1258930 1.637659024e-23 1584890 1.539620644e-23 1995260 1.461685824e-23 2511890 1.399807396e-23 3162280 1.350636001e-23 3981070 1.311598656e-23 5011870 1.280566225e-23 6309570 1.2559936e-23 7943280 1.236366244e-23 10000000 1.220873481e-23 12589250 1.208535696e-23 15848930 1.198682884e-23 19952620 1.190871081e-23 25118860 1.1847364e-23 31622780 1.179785104e-23 39810720 1.175872681e-23 50118720 1.172788516e-23 63095730 1.1703241e-23 79432820 1.168340761e-23 100000000 1.166837281e-23 100.00000 3.0363615481761e-19 125.89254 2.4119080009924e-19 158.48932 1.9158873097225e-19 199.52623 1.5218838683689e-19 251.18864 1.2089153486916e-19 316.22777 9.603162616609e-20 398.10717 7.628467233024e-20 501.18723 6.059912732721e-20 630.95734 4.813960717476e-20 794.32823 3.824269669476e-20 1000 3.038129178529e-20 1258.93 2.413676067201e-20 1584.89 1.917657192025e-20 1995.26 1.523652015769e-20 2511.89 1.210684296721e-20 3162.28 9.62084377881e-21 3981.07 7.64615582929e-21 5011.87 6.077605681e-21 6309.57 4.83165400201e-21 7943.28 3.84195427225e-21 10000 3.05582312025e-21 12589.25 2.43136761921e-21 15848.93 1.93534885476e-21 19952.62 1.54133974801e-21 25118.86 1.22837632324e-21 31622.78 9.7977764196e-22 39810.72 7.8230411809e-22 50118.72 6.25450081e-22 63095.73 5.0085544804e-22 79432.82 4.0188621841e-22 100000 3.2327320804e-22 125892.54 2.6082573001e-22 158489.32 2.1122262225e-22 199526.23 1.7182490724e-22 251188.64 1.4052679936e-22 316227.77 1.1566787401e-22 398107.17 9.592047721e-23 501187.23 8.023501476e-23 630957.34 6.777570276e-23 794328.23 5.787862084e-23 1000000 5.001601284e-23 1258930 4.3771456e-23 1584890 3.881165401e-23 1995260 3.487138704e-23 2511890 3.1741956e-23 3162280 2.925619921e-23 3981070 2.728181824e-23 5011870 2.571301264e-23 6309570 2.446687296e-23 7943280 2.347693209e-23 10000000 2.269093225e-23 12589250 2.206650625e-23 15848930 2.157045136e-23 19952620 2.117656324e-23 25118860 2.086388329e-23 31622780 2.061523216e-23 39810720 2.041774596e-23 50118720 2.026080144e-23 63095730 2.013586129e-23 79432820 2.003726169e-23 100000000 1.995855625e-23 100.00000 8.0955959987809e-19 125.89254 6.4306141230321e-19 158.48932 5.1080723938084e-19 199.52623 4.0575396693924e-19 251.18864 3.22307133841e-19 316.22777 2.5602304656384e-19 398.10717 2.0337168605625e-19 501.18723 1.6154925223761e-19 630.95734 1.2832844631616e-19 794.32823 1.0194029310481e-19 1000 8.097940193344e-20 1258.93 6.432959723584e-20 1584.89 5.110416348129e-20 1995.26 4.059882457225e-20 2511.89 3.225414851136e-20 3162.28 2.562573446416e-20 3981.07 2.036060732836e-20 5011.87 1.617836451364e-20 6309.57 1.285627161025e-20 7943.28 1.021746964225e-20 10000 8.12138008969e-21 12589.25 6.45639569289e-21 15848.93 5.13385147081e-21 19952.62 4.08331224064e-21 25118.86 3.24885180169e-21 31622.78 2.58600726784e-21 39810.72 2.05949869489e-21 50118.72 1.64127075876e-21 63095.73 1.309064761e-21 79432.82 1.04518363849e-21 100000 8.3557417969e-22 125892.54 6.6907582225e-22 158489.32 5.3682109636e-22 199526.23 4.31766841e-22 251188.64 3.4831876689e-22 316227.77 2.8203507721e-22 398107.17 2.2938617025e-22 501187.23 1.8756124209e-22 630957.34 1.5434086756e-22 794328.23 1.2795455689e-22 1000000 1.0699212969e-22 1258930 9.034312401e-23 1584890 7.711649856e-23 1995260 6.661171456e-23 2511890 5.826726889e-23 3162280 5.1638596e-23 3981070 4.637337604e-23 5011870 4.219152025e-23 6309570 3.886899025e-23 7943280 3.623076864e-23 10000000 3.413480625e-23 12589250 3.246948324e-23 15848930 3.1147561e-23 19952620 3.0096196e-23 25118860 2.926160836e-23 31622780 2.859896484e-23 39810720 2.807304256e-23 50118720 2.765497744e-23 63095730 2.732257441e-23 79432820 2.705872324e-23 100000000 2.684897856e-23 100.00000 1.45423246336e-21 125.89254 1.15589120256e-21 158.48932 9.1891434496e-22 199.52623 7.3068036721e-22 251.18864 5.8115709184e-22 316.22777 4.6238761024e-22 398.10717 3.6804504025e-22 501.18723 2.9310467209e-22 630.95734 2.3357925889e-22 794.32823 1.8629793081e-22 1000 1.4873753764e-22 1258.93 1.1890593936e-22 1584.89 9.520685476e-23 1995.26 7.638410404e-23 2511.89 6.143110884e-23 3162.28 4.955456025e-23 3981.07 4.0119556e-23 5011.87 3.262580161e-23 6309.57 2.667309316e-23 7943.28 2.194547716e-23 10000 1.818937201e-23 12589.25 1.520610025e-23 15848.93 1.283645584e-23 19952.62 1.095345216e-23 25118.86 9.45870025e-24 31622.78 8.27080081e-24 39810.72 7.32730761e-24 50118.72 6.57819904e-24 63095.73 5.982916e-24 79432.82 5.50981729e-24 100000 5.13430281e-24 125892.54 4.83604081e-24 158489.32 4.59888025e-24 199526.23 4.41084004e-24 251188.64 4.26133449e-24 316227.77 4.14244609e-24 398107.17 4.048144e-24 501187.23 3.97324489e-24 630957.34 3.91367089e-24 794328.23 3.86633569e-24 1000000 3.82867489e-24 1258930 3.79899081e-24 1584890 3.775249e-24 1995260 3.75661924e-24 2511890 3.74151649e-24 3162280 3.72953344e-24 3981070 3.72026944e-24 5011870 3.71294361e-24 6309570 3.70678009e-24 7943280 3.70216081e-24 10000000 3.69831361e-24 12589250 3.69523729e-24 15848930 3.69293089e-24 19952620 3.69100944e-24 25118860 3.68947264e-24 31622780 3.68832025e-24 39810720 3.68755209e-24 50118720 3.68678401e-24 63095730 3.68601601e-24 79432820 3.68563204e-24 100000000 3.68524809e-24 100.00000 1.710605025801e-20 125.89254 1.358968399504e-20 158.48932 1.079651917969e-20 199.52623 8.57785311889e-21 251.18864 6.815493136e-21 316.22777 5.41560584464e-21 398.10717 4.30363552441e-21 501.18723 3.42035486244e-21 630.95734 2.71874645056e-21 794.32823 2.16144097569e-21 1000 1.71875747241e-21 1258.93 1.36712104516e-21 1584.89 1.08780572761e-21 1995.26 8.6594244361e-22 2511.89 6.8970314884e-22 3162.28 5.49714916e-22 3981.07 4.3851710464e-22 5011.87 3.5019133956e-22 6309.57 2.8003010281e-22 7943.28 2.2429854756e-22 10000 1.8003198976e-22 12589.25 1.4486770321e-22 15848.93 1.1693610769e-22 19952.62 9.474880921e-23 25118.86 7.712528041e-23 31622.78 6.312779209e-23 39810.72 5.200717456e-23 50118.72 4.317409849e-23 63095.73 3.615857424e-23 79432.82 3.058532416e-23 100000 2.615913316e-23 125892.54 2.264237056e-23 158489.32 1.984880704e-23 199526.23 1.763076121e-23 251188.64 1.586827225e-23 316227.77 1.446813369e-23 398107.17 1.335610116e-23 501187.23 1.247290489e-23 630957.34 1.177107481e-23 794328.23 1.121379169e-23 1000000 1.0771524e-23 1258930 1.0419984e-23 1584890 1.014040336e-23 1995260 9.91872036e-24 2511890 9.74251369e-24 3162280 9.60256144e-24 3981070 9.49132864e-24 5011870 9.40280896e-24 6309570 9.33241401e-24 7943280 9.27689764e-24 10000000 9.23248225e-24 12589250 9.19726929e-24 15848930 9.16938961e-24 19952620 9.14760025e-24 25118860 9.13006656e-24 31622780 9.11556864e-24 39810720 9.10470276e-24 50118720 9.09565281e-24 63095730 9.08901904e-24 79432820 9.08299044e-24 100000000 9.07877161e-24 100.00000 6.688523543524e-20 125.89254 5.313167910961e-20 158.48932 4.2206826249e-20 199.52623 3.3528905881e-20 251.18864 2.663580674304e-20 316.22777 2.116041534244e-20 398.10717 1.681117103241e-20 501.18723 1.33564249e-20 630.95734 1.061223444649e-20 794.32823 8.43243668089e-21 1000 6.70097774025e-21 1258.93 5.32561333824e-21 1584.89 4.23312890625e-21 1995.26 3.36534573456e-21 2511.89 2.67603428416e-21 3162.28 2.12849358736e-21 3981.07 1.693569409e-21 5011.87 1.34809402896e-21 6309.57 1.073676289e-21 7943.28 8.5569705529e-22 10000 6.8254697536e-22 12589.25 5.4501237025e-22 15848.93 4.35765625e-22 19952.62 3.4898723344e-22 25118.86 2.8005353104e-22 31622.78 2.253001e-22 39810.72 1.8180746896e-22 50118.72 1.4726065201e-22 63095.73 1.1981929444e-22 79432.82 9.802188036e-23 100000 8.070686569e-23 125892.54 6.695330625e-23 158489.32 5.602821904e-23 199526.23 4.735091344e-23 251188.64 4.045723236e-23 316227.77 3.498131025e-23 398107.17 3.063290409e-23 501187.23 2.717745424e-23 630957.34 2.4433249e-23 794328.23 2.225386276e-23 1000000 2.052271204e-23 1258930 1.914675049e-23 1584890 1.805485081e-23 1995260 1.718682849e-23 2511890 1.649740689e-23 3162280 1.594963969e-23 3981070 1.551493321e-23 5011870 1.516946704e-23 6309570 1.489496836e-23 7943280 1.467732721e-23 10000000 1.450391056e-23 12589250 1.436637409e-23 15848930 1.425742081e-23 19952620 1.417070736e-23 25118860 1.410152704e-23 31622780 1.404675441e-23 39810720 1.400331241e-23 50118720 1.396890625e-23 63095730 1.394126244e-23 79432820 1.391961481e-23 100000000 1.390171225e-23 100.00000 1.6513040013376e-19 125.89254 1.3117138254081e-19 158.48932 1.0419674114304e-19 199.52623 8.277002412484e-20 251.18864 6.5750190724e-20 316.22777 5.223085155649e-20 398.10717 4.1492060416e-20 501.18723 3.296196384849e-20 630.95734 2.618623022656e-20 794.32823 2.080408139044e-20 1000 1.652888208609e-20 1258.93 1.313299956049e-20 1584.89 1.043552143936e-20 1995.26 8.29285243801e-21 2511.89 6.59087432964e-21 3162.28 5.23893678025e-21 3981.07 4.16506309129e-21 5011.87 3.31204854016e-21 6309.57 2.63448145984e-21 7943.28 2.096266225e-21 10000 1.66874701009e-21 12589.25 1.32915659776e-21 15848.93 1.05940485225e-21 19952.62 8.4514048369e-22 25118.86 6.7494481209e-22 31622.78 5.3974905625e-22 39810.72 4.3236132489e-22 50118.72 3.4706199616e-22 63095.73 2.7930431376e-22 79432.82 2.25480256e-22 100000 1.8273091684e-22 125892.54 1.4877168784e-22 158489.32 1.2179550321e-22 199526.23 1.0036833856e-22 251188.64 8.334959616e-23 316227.77 6.982942096e-23 398107.17 5.909150641e-23 501187.23 5.056063236e-23 630957.34 4.378601241e-23 794328.23 3.8402809e-23 1000000 3.412779561e-23 1258930 3.073260969e-23 1584890 2.803490704e-23 1995260 2.589181456e-23 2511890 2.418967489e-23 3162280 2.283788521e-23 3981070 2.176409104e-23 5011870 2.091141441e-23 6309570 2.023380324e-23 7943280 1.9695844e-23 10000000 1.926771025e-23 12589250 1.892859049e-23 15848930 1.865894416e-23 19952620 1.844444809e-23 25118860 1.827391504e-23 31622780 1.8139081e-23 39810720 1.803191296e-23 50118720 1.794623769e-23 63095730 1.787852089e-23 79432820 1.782443961e-23 100000000 1.778224561e-23 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acnoise1g_sw.standard0000644000175000017500000004017214163340332025147 0ustar carstencarstenFreq N(g) 100.00000 1.444804e-50 125.89254 1.444804e-50 158.48932 1.444804e-50 199.52623 1.444804e-50 251.18864 1.444804e-50 316.22777 1.444804e-50 398.10717 1.444804e-50 501.18723 1.444804e-50 630.95734 1.444804e-50 794.32823 1.444804e-50 1000 1.444804e-50 1258.93 1.444804e-50 1584.89 1.444804e-50 1995.26 1.444804e-50 2511.89 1.444804e-50 3162.28 1.444804e-50 3981.07 1.444804e-50 5011.87 1.444804e-50 6309.57 1.444804e-50 7943.28 1.444804e-50 10000 1.444804e-50 12589.25 1.444804e-50 15848.93 1.444804e-50 19952.62 1.444804e-50 25118.86 1.444804e-50 31622.78 1.444804e-50 39810.72 1.444804e-50 50118.72 1.444804e-50 63095.73 1.444804e-50 79432.82 1.444804e-50 100000 1.444804e-50 125892.54 1.444804e-50 158489.32 1.444804e-50 199526.23 1.444804e-50 251188.64 1.444804e-50 316227.77 1.444804e-50 398107.17 1.444804e-50 501187.23 1.444804e-50 630957.34 1.444804e-50 794328.23 1.444804e-50 1000000 1.444804e-50 1258930 1.444804e-50 1584890 1.444804e-50 1995260 1.444804e-50 2511890 1.444804e-50 3162280 1.444804e-50 3981070 1.444804e-50 5011870 1.444804e-50 6309570 1.444804e-50 7943280 1.444804e-50 10000000 1.444804e-50 12589250 1.444804e-50 15848930 1.444804e-50 19952620 1.444804e-50 25118860 1.444804e-50 31622780 1.444804e-50 39810720 1.444804e-50 50118720 1.444804e-50 63095730 1.444804e-50 79432820 1.444804e-50 100000000 1.444804e-50 100.00000 1.3498276e-49 125.89254 1.3498276e-49 158.48932 1.3498276e-49 199.52623 1.3498276e-49 251.18864 1.3498276e-49 316.22777 1.3498276e-49 398.10717 1.3498276e-49 501.18723 1.3498276e-49 630.95734 1.3498276e-49 794.32823 1.3498276e-49 1000 1.3498276e-49 1258.93 1.3498276e-49 1584.89 1.3498276e-49 1995.26 1.3498276e-49 2511.89 1.3498276e-49 3162.28 1.3498276e-49 3981.07 1.3498276e-49 5011.87 1.3498276e-49 6309.57 1.3498276e-49 7943.28 1.3498276e-49 10000 1.3498276e-49 12589.25 1.3498276e-49 15848.93 1.3498276e-49 19952.62 1.3498276e-49 25118.86 1.3498276e-49 31622.78 1.3498276e-49 39810.72 1.3498276e-49 50118.72 1.3498276e-49 63095.73 1.3498276e-49 79432.82 1.3498276e-49 100000 1.3498276e-49 125892.54 1.3498276e-49 158489.32 1.3498276e-49 199526.23 1.3498276e-49 251188.64 1.3498276e-49 316227.77 1.3498276e-49 398107.17 1.3498276e-49 501187.23 1.3498276e-49 630957.34 1.3498276e-49 794328.23 1.3498276e-49 1000000 1.3498276e-49 1258930 1.3498276e-49 1584890 1.3498276e-49 1995260 1.3498276e-49 2511890 1.3498276e-49 3162280 1.3498276e-49 3981070 1.3498276e-49 5011870 1.3498276e-49 6309570 1.3498276e-49 7943280 1.3498276e-49 10000000 1.3498276e-49 12589250 1.3498276e-49 15848930 1.3498276e-49 19952620 1.3498276e-49 25118860 1.3498276e-49 31622780 1.3498276e-49 39810720 1.3498276e-49 50118720 1.3498276e-49 63095730 1.3498276e-49 79432820 1.3498276e-49 100000000 1.3498276e-49 100.00000 2.9398084e-49 125.89254 2.9398084e-49 158.48932 2.9398084e-49 199.52623 2.9398084e-49 251.18864 2.9398084e-49 316.22777 2.9398084e-49 398.10717 2.9398084e-49 501.18723 2.9398084e-49 630.95734 2.9398084e-49 794.32823 2.9398084e-49 1000 2.9398084e-49 1258.93 2.9398084e-49 1584.89 2.9398084e-49 1995.26 2.9398084e-49 2511.89 2.9398084e-49 3162.28 2.9398084e-49 3981.07 2.9398084e-49 5011.87 2.9398084e-49 6309.57 2.9398084e-49 7943.28 2.9398084e-49 10000 2.9398084e-49 12589.25 2.9398084e-49 15848.93 2.9398084e-49 19952.62 2.9398084e-49 25118.86 2.9398084e-49 31622.78 2.9398084e-49 39810.72 2.9398084e-49 50118.72 2.9398084e-49 63095.73 2.9398084e-49 79432.82 2.9398084e-49 100000 2.9398084e-49 125892.54 2.9398084e-49 158489.32 2.9398084e-49 199526.23 2.9398084e-49 251188.64 2.9398084e-49 316227.77 2.9398084e-49 398107.17 2.9398084e-49 501187.23 2.9398084e-49 630957.34 2.9398084e-49 794328.23 2.9398084e-49 1000000 2.9398084e-49 1258930 2.9398084e-49 1584890 2.9398084e-49 1995260 2.9398084e-49 2511890 2.9398084e-49 3162280 2.9398084e-49 3981070 2.9398084e-49 5011870 2.9398084e-49 6309570 2.9398084e-49 7943280 2.9398084e-49 10000000 2.9398084e-49 12589250 2.9398084e-49 15848930 2.9398084e-49 19952620 2.9398084e-49 25118860 2.9398084e-49 31622780 2.9398084e-49 39810720 2.9398084e-49 50118720 2.9398084e-49 63095730 2.9398084e-49 79432820 2.9398084e-49 100000000 2.9398084e-49 100.00000 4.7444544e-49 125.89254 4.7444544e-49 158.48932 4.7444544e-49 199.52623 4.7444544e-49 251.18864 4.7444544e-49 316.22777 4.7444544e-49 398.10717 4.7444544e-49 501.18723 4.7444544e-49 630.95734 4.7444544e-49 794.32823 4.7444544e-49 1000 4.7444544e-49 1258.93 4.7444544e-49 1584.89 4.7444544e-49 1995.26 4.7444544e-49 2511.89 4.7444544e-49 3162.28 4.7444544e-49 3981.07 4.7444544e-49 5011.87 4.7444544e-49 6309.57 4.7444544e-49 7943.28 4.7444544e-49 10000 4.7444544e-49 12589.25 4.7444544e-49 15848.93 4.7444544e-49 19952.62 4.7444544e-49 25118.86 4.7444544e-49 31622.78 4.7444544e-49 39810.72 4.7444544e-49 50118.72 4.7444544e-49 63095.73 4.7444544e-49 79432.82 4.7444544e-49 100000 4.7444544e-49 125892.54 4.7444544e-49 158489.32 4.7444544e-49 199526.23 4.7444544e-49 251188.64 4.7444544e-49 316227.77 4.7444544e-49 398107.17 4.7444544e-49 501187.23 4.7444544e-49 630957.34 4.7444544e-49 794328.23 4.7444544e-49 1000000 4.7444544e-49 1258930 4.7444544e-49 1584890 4.7444544e-49 1995260 4.7444544e-49 2511890 4.7444544e-49 3162280 4.7444544e-49 3981070 4.7444544e-49 5011870 4.7444544e-49 6309570 4.7444544e-49 7943280 4.7444544e-49 10000000 4.7444544e-49 12589250 4.7444544e-49 15848930 4.7444544e-49 19952620 4.7444544e-49 25118860 4.7444544e-49 31622780 4.7444544e-49 39810720 4.7444544e-49 50118720 4.7444544e-49 63095730 4.7444544e-49 79432820 4.7444544e-49 100000000 4.7444544e-49 100.00000 9.7199881e-51 125.89254 9.7199881e-51 158.48932 9.7199881e-51 199.52623 9.7199881e-51 251.18864 9.7199881e-51 316.22777 9.7199881e-51 398.10717 9.7199881e-51 501.18723 9.7199881e-51 630.95734 9.7199881e-51 794.32823 9.7199881e-51 1000 9.7199881e-51 1258.93 9.7199881e-51 1584.89 9.7199881e-51 1995.26 9.7199881e-51 2511.89 9.7199881e-51 3162.28 9.7199881e-51 3981.07 9.7199881e-51 5011.87 9.7199881e-51 6309.57 9.7199881e-51 7943.28 9.7199881e-51 10000 9.7199881e-51 12589.25 9.7199881e-51 15848.93 9.7199881e-51 19952.62 9.7199881e-51 25118.86 9.7199881e-51 31622.78 9.7199881e-51 39810.72 9.7199881e-51 50118.72 9.7199881e-51 63095.73 9.7199881e-51 79432.82 9.7199881e-51 100000 9.7199881e-51 125892.54 9.7199881e-51 158489.32 9.7199881e-51 199526.23 9.7199881e-51 251188.64 9.7199881e-51 316227.77 9.7199881e-51 398107.17 9.7199881e-51 501187.23 9.7199881e-51 630957.34 9.7199881e-51 794328.23 9.7199881e-51 1000000 9.7199881e-51 1258930 9.7199881e-51 1584890 9.7199881e-51 1995260 9.7199881e-51 2511890 9.7199881e-51 3162280 9.7199881e-51 3981070 9.7199881e-51 5011870 9.7199881e-51 6309570 9.7199881e-51 7943280 9.7199881e-51 10000000 9.7199881e-51 12589250 9.7199881e-51 15848930 9.7199881e-51 19952620 9.7199881e-51 25118860 9.7199881e-51 31622780 9.7199881e-51 39810720 9.7199881e-51 50118720 9.7199881e-51 63095730 9.7199881e-51 79432820 9.7199881e-51 100000000 9.7199881e-51 100.00000 1.6120225e-49 125.89254 1.6120225e-49 158.48932 1.6120225e-49 199.52623 1.6120225e-49 251.18864 1.6120225e-49 316.22777 1.6120225e-49 398.10717 1.6120225e-49 501.18723 1.6120225e-49 630.95734 1.6120225e-49 794.32823 1.6120225e-49 1000 1.6120225e-49 1258.93 1.6120225e-49 1584.89 1.6120225e-49 1995.26 1.6120225e-49 2511.89 1.6120225e-49 3162.28 1.6120225e-49 3981.07 1.6120225e-49 5011.87 1.6120225e-49 6309.57 1.6120225e-49 7943.28 1.6120225e-49 10000 1.6120225e-49 12589.25 1.6120225e-49 15848.93 1.6120225e-49 19952.62 1.6120225e-49 25118.86 1.6120225e-49 31622.78 1.6120225e-49 39810.72 1.6120225e-49 50118.72 1.6120225e-49 63095.73 1.6120225e-49 79432.82 1.6120225e-49 100000 1.6120225e-49 125892.54 1.6120225e-49 158489.32 1.6120225e-49 199526.23 1.6120225e-49 251188.64 1.6120225e-49 316227.77 1.6120225e-49 398107.17 1.6120225e-49 501187.23 1.6120225e-49 630957.34 1.6120225e-49 794328.23 1.6120225e-49 1000000 1.6120225e-49 1258930 1.6120225e-49 1584890 1.6120225e-49 1995260 1.6120225e-49 2511890 1.6120225e-49 3162280 1.6120225e-49 3981070 1.6120225e-49 5011870 1.6120225e-49 6309570 1.6120225e-49 7943280 1.6120225e-49 10000000 1.6120225e-49 12589250 1.6120225e-49 15848930 1.6120225e-49 19952620 1.6120225e-49 25118860 1.6120225e-49 31622780 1.6120225e-49 39810720 1.6120225e-49 50118720 1.6120225e-49 63095730 1.6120225e-49 79432820 1.6120225e-49 100000000 1.6120225e-49 100.00000 3.3953929e-49 125.89254 3.3953929e-49 158.48932 3.3953929e-49 199.52623 3.3953929e-49 251.18864 3.3953929e-49 316.22777 3.3953929e-49 398.10717 3.3953929e-49 501.18723 3.3953929e-49 630.95734 3.3953929e-49 794.32823 3.3953929e-49 1000 3.3953929e-49 1258.93 3.3953929e-49 1584.89 3.3953929e-49 1995.26 3.3953929e-49 2511.89 3.3953929e-49 3162.28 3.3953929e-49 3981.07 3.3953929e-49 5011.87 3.3953929e-49 6309.57 3.3953929e-49 7943.28 3.3953929e-49 10000 3.3953929e-49 12589.25 3.3953929e-49 15848.93 3.3953929e-49 19952.62 3.3953929e-49 25118.86 3.3953929e-49 31622.78 3.3953929e-49 39810.72 3.3953929e-49 50118.72 3.3953929e-49 63095.73 3.3953929e-49 79432.82 3.3953929e-49 100000 3.3953929e-49 125892.54 3.3953929e-49 158489.32 3.3953929e-49 199526.23 3.3953929e-49 251188.64 3.3953929e-49 316227.77 3.3953929e-49 398107.17 3.3953929e-49 501187.23 3.3953929e-49 630957.34 3.3953929e-49 794328.23 3.3953929e-49 1000000 3.3953929e-49 1258930 3.3953929e-49 1584890 3.3953929e-49 1995260 3.3953929e-49 2511890 3.3953929e-49 3162280 3.3953929e-49 3981070 3.3953929e-49 5011870 3.3953929e-49 6309570 3.3953929e-49 7943280 3.3953929e-49 10000000 3.3953929e-49 12589250 3.3953929e-49 15848930 3.3953929e-49 19952620 3.3953929e-49 25118860 3.3953929e-49 31622780 3.3953929e-49 39810720 3.3953929e-49 50118720 3.3953929e-49 63095730 3.3953929e-49 79432820 3.3953929e-49 100000000 3.3953929e-49 100.00000 5.2027369e-49 125.89254 5.2027369e-49 158.48932 5.2027369e-49 199.52623 5.2027369e-49 251.18864 5.2027369e-49 316.22777 5.2027369e-49 398.10717 5.2027369e-49 501.18723 5.2027369e-49 630.95734 5.2027369e-49 794.32823 5.2027369e-49 1000 5.2027369e-49 1258.93 5.2027369e-49 1584.89 5.2027369e-49 1995.26 5.2027369e-49 2511.89 5.2027369e-49 3162.28 5.2027369e-49 3981.07 5.2027369e-49 5011.87 5.2027369e-49 6309.57 5.2027369e-49 7943.28 5.2027369e-49 10000 5.2027369e-49 12589.25 5.2027369e-49 15848.93 5.2027369e-49 19952.62 5.2027369e-49 25118.86 5.2027369e-49 31622.78 5.2027369e-49 39810.72 5.2027369e-49 50118.72 5.2027369e-49 63095.73 5.2027369e-49 79432.82 5.2027369e-49 100000 5.2027369e-49 125892.54 5.2027369e-49 158489.32 5.2027369e-49 199526.23 5.2027369e-49 251188.64 5.2027369e-49 316227.77 5.2027369e-49 398107.17 5.2027369e-49 501187.23 5.2027369e-49 630957.34 5.2027369e-49 794328.23 5.2027369e-49 1000000 5.2027369e-49 1258930 5.2027369e-49 1584890 5.2027369e-49 1995260 5.2027369e-49 2511890 5.2027369e-49 3162280 5.2027369e-49 3981070 5.2027369e-49 5011870 5.2027369e-49 6309570 5.2027369e-49 7943280 5.2027369e-49 10000000 5.2027369e-49 12589250 5.2027369e-49 15848930 5.2027369e-49 19952620 5.2027369e-49 25118860 5.2027369e-49 31622780 5.2027369e-49 39810720 5.2027369e-49 50118720 5.2027369e-49 63095730 5.2027369e-49 79432820 5.2027369e-49 100000000 5.2027369e-49 100.00000 1.617984e-50 125.89254 1.617984e-50 158.48932 1.617984e-50 199.52623 1.617984e-50 251.18864 1.617984e-50 316.22777 1.617984e-50 398.10717 1.617984e-50 501.18723 1.617984e-50 630.95734 1.617984e-50 794.32823 1.617984e-50 1000 1.617984e-50 1258.93 1.617984e-50 1584.89 1.617984e-50 1995.26 1.617984e-50 2511.89 1.617984e-50 3162.28 1.617984e-50 3981.07 1.617984e-50 5011.87 1.617984e-50 6309.57 1.617984e-50 7943.28 1.617984e-50 10000 1.617984e-50 12589.25 1.617984e-50 15848.93 1.617984e-50 19952.62 1.617984e-50 25118.86 1.617984e-50 31622.78 1.617984e-50 39810.72 1.617984e-50 50118.72 1.617984e-50 63095.73 1.617984e-50 79432.82 1.617984e-50 100000 1.617984e-50 125892.54 1.617984e-50 158489.32 1.617984e-50 199526.23 1.617984e-50 251188.64 1.617984e-50 316227.77 1.617984e-50 398107.17 1.617984e-50 501187.23 1.617984e-50 630957.34 1.617984e-50 794328.23 1.617984e-50 1000000 1.617984e-50 1258930 1.617984e-50 1584890 1.617984e-50 1995260 1.617984e-50 2511890 1.617984e-50 3162280 1.617984e-50 3981070 1.617984e-50 5011870 1.617984e-50 6309570 1.617984e-50 7943280 1.617984e-50 10000000 1.617984e-50 12589250 1.617984e-50 15848930 1.617984e-50 19952620 1.617984e-50 25118860 1.617984e-50 31622780 1.617984e-50 39810720 1.617984e-50 50118720 1.617984e-50 63095730 1.617984e-50 79432820 1.617984e-50 100000000 1.617984e-50 100.00000 1.06276e-49 125.89254 1.06276e-49 158.48932 1.06276e-49 199.52623 1.06276e-49 251.18864 1.06276e-49 316.22777 1.06276e-49 398.10717 1.06276e-49 501.18723 1.06276e-49 630.95734 1.06276e-49 794.32823 1.06276e-49 1000 1.06276e-49 1258.93 1.06276e-49 1584.89 1.06276e-49 1995.26 1.06276e-49 2511.89 1.06276e-49 3162.28 1.06276e-49 3981.07 1.06276e-49 5011.87 1.06276e-49 6309.57 1.06276e-49 7943.28 1.06276e-49 10000 1.06276e-49 12589.25 1.06276e-49 15848.93 1.06276e-49 19952.62 1.06276e-49 25118.86 1.06276e-49 31622.78 1.06276e-49 39810.72 1.06276e-49 50118.72 1.06276e-49 63095.73 1.06276e-49 79432.82 1.06276e-49 100000 1.06276e-49 125892.54 1.06276e-49 158489.32 1.06276e-49 199526.23 1.06276e-49 251188.64 1.06276e-49 316227.77 1.06276e-49 398107.17 1.06276e-49 501187.23 1.06276e-49 630957.34 1.06276e-49 794328.23 1.06276e-49 1000000 1.06276e-49 1258930 1.06276e-49 1584890 1.06276e-49 1995260 1.06276e-49 2511890 1.06276e-49 3162280 1.06276e-49 3981070 1.06276e-49 5011870 1.06276e-49 6309570 1.06276e-49 7943280 1.06276e-49 10000000 1.06276e-49 12589250 1.06276e-49 15848930 1.06276e-49 19952620 1.06276e-49 25118860 1.06276e-49 31622780 1.06276e-49 39810720 1.06276e-49 50118720 1.06276e-49 63095730 1.06276e-49 79432820 1.06276e-49 100000000 1.06276e-49 100.00000 2.4393721e-49 125.89254 2.4393721e-49 158.48932 2.4393721e-49 199.52623 2.4393721e-49 251.18864 2.4393721e-49 316.22777 2.4393721e-49 398.10717 2.4393721e-49 501.18723 2.4393721e-49 630.95734 2.4393721e-49 794.32823 2.4393721e-49 1000 2.4393721e-49 1258.93 2.4393721e-49 1584.89 2.4393721e-49 1995.26 2.4393721e-49 2511.89 2.4393721e-49 3162.28 2.4393721e-49 3981.07 2.4393721e-49 5011.87 2.4393721e-49 6309.57 2.4393721e-49 7943.28 2.4393721e-49 10000 2.4393721e-49 12589.25 2.4393721e-49 15848.93 2.4393721e-49 19952.62 2.4393721e-49 25118.86 2.4393721e-49 31622.78 2.4393721e-49 39810.72 2.4393721e-49 50118.72 2.4393721e-49 63095.73 2.4393721e-49 79432.82 2.4393721e-49 100000 2.4393721e-49 125892.54 2.4393721e-49 158489.32 2.4393721e-49 199526.23 2.4393721e-49 251188.64 2.4393721e-49 316227.77 2.4393721e-49 398107.17 2.4393721e-49 501187.23 2.4393721e-49 630957.34 2.4393721e-49 794328.23 2.4393721e-49 1000000 2.4393721e-49 1258930 2.4393721e-49 1584890 2.4393721e-49 1995260 2.4393721e-49 2511890 2.4393721e-49 3162280 2.4393721e-49 3981070 2.4393721e-49 5011870 2.4393721e-49 6309570 2.4393721e-49 7943280 2.4393721e-49 10000000 2.4393721e-49 12589250 2.4393721e-49 15848930 2.4393721e-49 19952620 2.4393721e-49 25118860 2.4393721e-49 31622780 2.4393721e-49 39810720 2.4393721e-49 50118720 2.4393721e-49 63095730 2.4393721e-49 79432820 2.4393721e-49 100000000 2.4393721e-49 100.00000 4.2276004e-49 125.89254 4.2276004e-49 158.48932 4.2276004e-49 199.52623 4.2276004e-49 251.18864 4.2276004e-49 316.22777 4.2276004e-49 398.10717 4.2276004e-49 501.18723 4.2276004e-49 630.95734 4.2276004e-49 794.32823 4.2276004e-49 1000 4.2276004e-49 1258.93 4.2276004e-49 1584.89 4.2276004e-49 1995.26 4.2276004e-49 2511.89 4.2276004e-49 3162.28 4.2276004e-49 3981.07 4.2276004e-49 5011.87 4.2276004e-49 6309.57 4.2276004e-49 7943.28 4.2276004e-49 10000 4.2276004e-49 12589.25 4.2276004e-49 15848.93 4.2276004e-49 19952.62 4.2276004e-49 25118.86 4.2276004e-49 31622.78 4.2276004e-49 39810.72 4.2276004e-49 50118.72 4.2276004e-49 63095.73 4.2276004e-49 79432.82 4.2276004e-49 100000 4.2276004e-49 125892.54 4.2276004e-49 158489.32 4.2276004e-49 199526.23 4.2276004e-49 251188.64 4.2276004e-49 316227.77 4.2276004e-49 398107.17 4.2276004e-49 501187.23 4.2276004e-49 630957.34 4.2276004e-49 794328.23 4.2276004e-49 1000000 4.2276004e-49 1258930 4.2276004e-49 1584890 4.2276004e-49 1995260 4.2276004e-49 2511890 4.2276004e-49 3162280 4.2276004e-49 3981070 4.2276004e-49 5011870 4.2276004e-49 6309570 4.2276004e-49 7943280 4.2276004e-49 10000000 4.2276004e-49 12589250 4.2276004e-49 15848930 4.2276004e-49 19952620 4.2276004e-49 25118860 4.2276004e-49 31622780 4.2276004e-49 39810720 4.2276004e-49 50118720 4.2276004e-49 63095730 4.2276004e-49 79432820 4.2276004e-49 100000000 4.2276004e-49 tmp_ns50wwy/tests/bsimbulk/pmos/reference/acvd_core_lw.standard0000644000175000017500000001722014163340332025212 0ustar carstencarstenV(d) g(d,g) c(g,g) c(g,s) c(g,d) -1.2 0.0004439089 7.07325013741169e-14 4.41427008575581e-14 6.23390012110567e-15 -1 0.0004070306 7.18525013958751e-14 4.5015400874512e-14 6.37770012389927e-15 -0.8 0.0003717426 7.30159014184764e-14 4.59180008920468e-14 6.53370012692987e-15 -0.6 0.0003393995 7.42283014420296e-14 4.68607009103606e-14 6.69720013010618e-15 -0.4 0.0003166469 7.54824014663929e-14 4.78856009302712e-14 6.81900013247238e-15 -0.2 0.0003060253 7.74504015046252e-14 4.91167009541878e-14 7.51610014601491e-15 -5.55111512312578e-17 1.615e-19 1.04872702037357e-13 4.31242008377717e-14 4.31242008377717e-14 0.2 -0.0005752914 1.12390802183411e-13 3.44532006693207e-14 5.98054011618366e-14 -1.2 0.0010768 8.68563016873531e-14 6.07845011808575e-14 7.74360015043454e-15 -1 0.0010031 8.81241017119826e-14 6.18043012006692e-14 7.94600015436656e-15 -0.8 0.0009392455 8.9449701737735e-14 6.28588012211549e-14 8.17130015874345e-15 -0.6 0.0009015105 9.08341017646297e-14 6.39656012426566e-14 8.40370016325828e-15 -0.4 0.0008899453 9.30029018067628e-14 6.51105012648985e-14 9.44030018339625e-15 -0.2 0.0005636155 1.1572890224826e-13 5.94852011556161e-14 3.92721007629372e-14 -5.55111512312578e-17 1.326e-19 1.29364302513154e-13 5.6649601100529e-14 5.6649601100529e-14 0.2 -0.0004643381 1.29027202506605e-13 5.69571011065028e-14 5.60692010892536e-14 -1.2 0.0014359 9.08543017650221e-14 6.43101012493492e-14 9.29620018059683e-15 -1 0.0013624 9.21264017897351e-14 6.52831012682516e-14 9.57190018595284e-15 -0.8 0.00133 9.34582018156079e-14 6.62922012878554e-14 9.8723001917887e-15 -0.6 0.001319 9.59823018646435e-14 6.72987013074086e-14 1.14372002221899e-14 -0.4 0.0009818082 1.14284302220196e-13 6.39973012432725e-14 3.39828006601822e-14 -0.2 0.0004394235 1.29487602515549e-13 5.53268010748311e-14 5.87168011406884e-14 -5.55111512312578e-17 5.538e-19 1.34278702608626e-13 5.95928011577064e-14 5.95928011577064e-14 0.2 -0.0003282478 1.32802902579956e-13 6.56799012759602e-14 5.20751010116605e-14 -1.2 0.0016115 9.18850017850455e-14 6.46257012554803e-14 1.08491002107649e-14 -1 0.0015954 9.31670018099508e-14 6.55405012732521e-14 1.12088002177528e-14 -0.8 0.0015765 9.6368801872152e-14 6.64250012904353e-14 1.36039002642823e-14 -0.6 0.0012402 1.11519102166476e-13 6.42949012490539e-14 3.14919006117916e-14 -0.4 0.0007322807 1.25630802440623e-13 5.75447011179181e-14 5.29980010295896e-14 -0.2 0.000309579 1.32479602573675e-13 5.13560009976905e-14 6.64468012908588e-14 -5.55111512312578e-17 1.286e-19 1.34714302617088e-13 6.01354011682475e-14 6.01354011682475e-14 0.2 -0.000225368 1.32950302582819e-13 7.00915013616642e-14 4.84538009413096e-14 -1.2 0.0005517678 6.95477013510998e-14 4.27996008314658e-14 6.09990011850246e-15 -1 0.000501367 7.0589201371333e-14 4.35855008467334e-14 6.23930012121058e-15 -0.8 0.0004531179 7.16703013923355e-14 4.43968008624945e-14 6.39080012415376e-15 -0.6 0.0004072408 7.27946014141772e-14 4.52421008789161e-14 6.54950012723682e-15 -0.4 0.0003658447 7.39483014365901e-14 4.61581008967112e-14 6.66410012946315e-15 -0.2 0.0003432432 7.50559014581073e-14 4.74234009212921e-14 6.38360012401389e-15 -5.55111512312578e-17 1.307e-19 1.01948801980554e-13 4.12816008019756e-14 4.12816008019756e-14 0.2 -0.0009791113 1.10375102144252e-13 2.78260005405744e-14 6.3602001235593e-14 -1.2 0.0017246 8.87815017247539e-14 6.25205012145827e-14 7.58860014742337e-15 -1 0.0016035 9.00444017492882e-14 6.35380012343497e-14 7.78560015125048e-15 -0.8 0.0014884 9.13647017749376e-14 6.45901012547888e-14 8.00480015550886e-15 -0.6 0.0013938 9.27383018016225e-14 6.56946012762458e-14 8.22500015978668e-15 -0.4 0.0013581 9.42210018304268e-14 6.6921101300073e-14 8.44050016397319e-15 -0.2 0.0009683017 1.15281902239576e-13 6.29521012229674e-14 3.46204006725688e-14 -5.55111512312578e-17 3.441e-19 1.32169702567654e-13 5.7719401121312e-14 5.7719401121312e-14 0.2 -0.0008081461 1.31003502544999e-13 5.64807010972478e-14 5.7813701123144e-14 -1.2 0.0023994 9.2363901794349e-14 6.55551012735358e-14 9.13580017748074e-15 -1 0.002247 9.36315018189746e-14 6.65261012923993e-14 9.40540018271825e-15 -0.8 0.002143 9.49474018445386e-14 6.75330013119603e-14 9.68760018820054e-15 -0.6 0.0021168 9.66444018775061e-14 6.86130013329414e-14 1.02980002000587e-14 -0.4 0.0016877 1.1361330220716e-13 6.66090012940098e-14 2.99784005823889e-14 -0.2 0.0007622672 1.31562502555858e-13 5.68341011041133e-14 5.85550011375452e-14 -5.55111512312578e-17 2.474e-19 1.36562602652995e-13 6.0363201172673e-14 6.0363201172673e-14 0.2 -0.0005736096 1.34709302616991e-13 6.59743012816795e-14 5.29439010285386e-14 -1.2 0.0026838 9.3044501807571e-14 6.54962012723915e-14 1.0683200207542e-14 -1 0.0026033 9.42989018319402e-14 6.64092012901283e-14 1.10119002139277e-14 -0.8 0.0025792 9.66555018777217e-14 6.73966013093105e-14 1.24080002410496e-14 -0.6 0.0021223 1.11056402157487e-13 6.61371012848423e-14 2.85156005539712e-14 -0.4 0.0012722 1.26924802465762e-13 5.89832011458638e-14 5.21217010125657e-14 -0.2 0.0005391423 1.34331502609652e-13 5.21088010123151e-14 6.67890012975067e-14 -5.55111512312578e-17 0. 1.3649180265162e-13 6.06432011781125e-14 6.06432011781125e-14 0.2 -0.0003967212 1.34523902613389e-13 7.04379013683937e-14 4.89280009505219e-14 -1.2 0.0003077676 7.04012013676807e-14 4.39574008539583e-14 6.39620012425867e-15 -1 0.0002842559 7.15628013902471e-14 4.48770008718233e-14 6.54610012717077e-15 -0.8 0.0002633923 7.27703014137051e-14 4.58290008903178e-14 6.70890013033348e-15 -0.6 0.0002488767 7.40313014382025e-14 4.68244009096554e-14 6.88120013368074e-15 -0.4 0.0002436816 7.53953014647009e-14 4.78986009305238e-14 7.0830001376011e-15 -0.2 0.0002212979 8.11542015765787e-14 4.81696009357885e-14 1.29620002518121e-14 -5.55111512312578e-17 1.117e-19 1.05019502040209e-13 4.3642000847831e-14 4.3642000847831e-14 0.2 -0.0002979149 1.12207702179854e-13 3.95105007675686e-14 5.55858010798627e-14 -1.2 0.0006000134 8.40486016328081e-14 5.82776011321561e-14 7.9194001538498e-15 -1 0.0005659587 8.532270165756e-14 5.93015011520474e-14 8.12900015792169e-15 -0.8 0.0005451073 8.66570016834814e-14 6.03602011726147e-14 8.36460016249868e-15 -0.6 0.0005401958 8.81101017117107e-14 6.14659011940951e-14 8.67800016858709e-15 -0.4 0.0005150508 9.30494018076662e-14 6.20136012047352e-14 1.3346100259274e-14 -0.2 0.0002907432 1.14275202220019e-13 5.56100010803328e-14 4.26957008294473e-14 -5.55111512312578e-17 4.707e-20 1.25277802433766e-13 5.50891010702133e-14 5.50891010702133e-14 0.2 -0.0002362407 1.25855902444996e-13 5.69381011061337e-14 5.39463010480122e-14 -1.2 0.0007757475 8.85570017203926e-14 6.24437012130907e-14 9.48090018418499e-15 -1 0.0007575989 8.98402017453212e-14 6.34225012321058e-14 9.76780018975858e-15 -0.8 0.0007575143 9.12618017729386e-14 6.44333012517426e-14 1.01687001975468e-14 -0.6 0.0007282274 9.60190018653565e-14 6.50323012633794e-14 1.45598002828525e-14 -0.4 0.0005055207 1.13664702208159e-13 6.07561011803058e-14 3.76571007315627e-14 -0.2 0.000224871 1.26222902452126e-13 5.34585010385357e-14 5.83944011344252e-14 -5.55111512312578e-17 6.647e-20 1.30871602542436e-13 5.84397011353052e-14 5.84397011353052e-14 0.2 -0.0001661932 1.29904802523654e-13 6.49877012625129e-14 5.09781009903491e-14 -1.2 0.0008860247 9.00949017502693e-14 6.33125012299689e-14 1.10492002146523e-14 -1 0.0008924003 9.14991017775486e-14 6.42277012477484e-14 1.15444002242725e-14 -0.8 0.0008563019 9.64224018731933e-14 6.47776012584313e-14 1.6131300313382e-14 -0.6 0.000641085 1.11204102160357e-13 6.18642012018328e-14 3.4630500672765e-14 -0.4 0.0003744723 1.23300002395343e-13 5.58297010846009e-14 5.34775010389048e-14 -0.2 0.0001577176 1.29653802518778e-13 5.04056009792272e-14 6.57081012765081e-14 -5.55111512312578e-17 0. 1.32031302564966e-13 5.93682011533432e-14 5.93682011533432e-14 0.2 -0.0001130276 1.30565102536482e-13 6.94197013486132e-14 4.7880800930178e-14 tmp_ns50wwy/tests/bsimbulk/pmos/qaSpec0000644000175000017500000011335314163340332020246 0ustar carstencarsten // // test specification for bsim6 (version 6.1.1_beta1) now bsimbulk // // // 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 hspice nTypeSelectionArguments nmos level=77 version=6.1.1 pTypeSelectionArguments pmos level=77 version=6.1.1 `endif `ifdef ngspice nTypeSelectionArguments nmos level=77 pTypeSelectionArguments pmos level=77 `endif // // General test-independent information // keyLetter m pins d g s b //verilogaFile code/bsim6.1.1_beta1.va now bsimbulk //linearScale w l ps pd //areaScale as ad temperature 27 -50 150 checkPolarity no symmetricPins d s //scaleParameters m // // Specific tests // //Just the core device test Idvg_core_sw biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_lw biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_lt biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvg_core_st biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvgb_core_st biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_sw biases V(s)=0 V(b)=0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_lw biases V(s)=0 V(b)=0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvd_core_st biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_core_st biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_sw biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_lw biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_lt biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvg_core_st biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvgb_core_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_sw biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_lw biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_core_st biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_lw biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_core_st biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_core_st temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 //Just the core device with diodes //no need for corner scaling here as these currents/charges don't scale well with w/l, no VG effect either test Idvd_diode_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test Idvdb_diode_lt biases V(s)=0 V(b)=-0.5 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvd_diode_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.1999,0.2,0.2001 outputs G(d,b) G(s,b) C(d,b) C(s,b) C(b,b) G(b,b) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acvdb_diode_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,b) G(s,b) C(d,b) C(s,b) C(b,b) G(b,b) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 test acfreq_diode_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs G(d,b) G(s,b) C(d,b) C(s,b) C(b,b) G(b,b) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=0 gidlmod=0 //core device with gate currents test Idvg_ig_sw biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_lw biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_lt biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvg_ig_st biases V(s)=0 V(b)=0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_sw biases V(s)=0 V(b)=-0.25 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_lt biases V(s)=0 V(b)=-0.25 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvgb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(d)=-0.05,-1.0 biasSweep V(g)=-1.2,-0.2,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.11e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_sw biases V(s)=0 V(b)=0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_lw biases V(s)=0 V(b)=0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvd_ig_st biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_sw biases V(s)=0 V(b)=-0.5 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_lw biases V(s)=0 V(b)=-0.2 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_lt biases V(s)=0 V(b)=-0.2 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test Idvdb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.15,-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0,0.1 outputs I(d) I(g) I(b) I(s) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_sw biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_lw biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_lt biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvg_ig_st biases V(s)=0 V(b)=0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_lw biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvgb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(d)=0,-1.0 biasSweep V(g)=-1.2,1.2,0.4 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_sw biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_lw biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_lt biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvd_ig_st biases V(s)=0 V(b)=0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_sw biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_lw biases V(s)=0 V(b)=-0.5 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_lt biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acvdb_ig_st biases V(s)=0 V(b)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 biasSweep V(d)=-1.2,0.2,0.2 outputs G(d,g) C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_sw temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=0.1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_lw temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=10.0e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_lt temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 test acfreq_ig_st temperature 27 biases V(s)=0 V(b)=0 V(d)=-1.0 V(g)=-1.0 freq dec 10 1e3 1e8 outputs C(g,g) C(g,s) C(g,d) instanceParameters w=0.5e-6 l=1e-6 modelParameters parameters/pmosParameters modelParameters igbmod=1 igcmod=1 gidlmod=0 //missing impact ionization //Core with GIDL model parameters turn gidl off so no tests here //core with STI stress parameters seem to have no effect on STI stress so no tests here //noise tests with everything, but igb test acnoise1g_sw biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_sw biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_lw biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_lw biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_lt biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_lt biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1g_st biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2g_st biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(g) instanceParameters w=0.5e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1d_sw biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_sw biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=0.1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1d_lw biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_lw biases V(s)=0 V(b)=0 V(d)=-0.05 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=10.0e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise1d_lt biases V(s)=0 V(b)=0 V(d)=-1.0 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 test acnoise2d_lt biases V(s)=0 V(b)=0 V(d)=-0.1 biasList V(g)=-0.25,-0.5,-0.75,-1.0 freq dec 10 1e2 1e8 outputs N(d) instanceParameters w=0.5e-6 l=1e-6 as=5e-12 ad=5e-12 ps=21e-6 pd=21e-6 modelParameters parameters/pmosParameters modelParameters igbmod=0 igcmod=1 gidlmod=1 modelparameters saref=3.0e-6 sbref=3.0e-6 kuo=2e-8 kvsat=0.1 kvtho=2.5e-9 tmp_ns50wwy/tests/bsimbulk/pmos/run0000644000175000017500000000023614163340332017631 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/mesa/0000755000175000017500000000000014163340332015240 5ustar carstencarstentmp_ns50wwy/tests/mesa/mesa11.out0000644000175000017500000002363714163340332017073 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. tmp_ns50wwy/tests/mesa/mesosc.out0000644000175000017500000002141414163340332017264 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. tmp_ns50wwy/tests/mesa/Makefile.am0000644000175000017500000000063514163340332017300 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 tmp_ns50wwy/tests/mesa/mesa.out0000644000175000017500000000616014163340332016721 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 tmp_ns50wwy/tests/mesa/mesosc.cir0000644000175000017500000000140414163340332017227 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 tmp_ns50wwy/tests/mesa/mesa11.cir0000644000175000017500000000052514163340332017030 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 tmp_ns50wwy/tests/mesa/mesa21.out0000644000175000017500000000002714163340332017060 0ustar carstencarsten Circuit: * Mesa Test tmp_ns50wwy/tests/mesa/mesa15.out0000644000175000017500000000455414163340332017074 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 tmp_ns50wwy/tests/mesa/mesa21.cir0000644000175000017500000000052314163340332017027 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 tmp_ns50wwy/tests/mesa/mesa12.cir0000644000175000017500000000047414163340332017034 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 tmp_ns50wwy/tests/mesa/mesa13.cir0000644000175000017500000000033214163340332017026 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 tmp_ns50wwy/tests/mesa/mesa13.out0000644000175000017500000000005014163340332017055 0ustar carstencarsten Circuit: * MESA1 - Gate Leakage Test tmp_ns50wwy/tests/mesa/mesgout.cir0000644000175000017500000000063414163340332017425 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 tmp_ns50wwy/tests/mesa/mesgout.out0000644000175000017500000001347514163340332017466 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 tmp_ns50wwy/tests/mesa/mesinv.out0000644000175000017500000000674414163340332017305 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 tmp_ns50wwy/tests/mesa/mesa14.out0000644000175000017500000000443514163340332017071 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 tmp_ns50wwy/tests/mesa/mesa15.cir0000644000175000017500000000040214163340332017026 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 tmp_ns50wwy/tests/mesa/mesa.cir0000644000175000017500000000045514163340332016670 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 tmp_ns50wwy/tests/mesa/mesinv.cir0000644000175000017500000000131414163340332017237 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 tmp_ns50wwy/tests/mesa/mesa-12.cir0000644000175000017500000000056314163340332017110 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 tmp_ns50wwy/tests/mesa/mesa14.cir0000644000175000017500000000047714163340332017041 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 tmp_ns50wwy/tests/bsim4/0000755000175000017500000000000014163340332015331 5ustar carstencarstentmp_ns50wwy/tests/bsim4/Makefile.am0000644000175000017500000000052114163340332017363 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 tmp_ns50wwy/tests/bsim4/nmos/0000755000175000017500000000000014163340332016305 5ustar carstencarstentmp_ns50wwy/tests/bsim4/nmos/parameters/0000755000175000017500000000000014163340332020450 5ustar carstencarstentmp_ns50wwy/tests/bsim4/nmos/parameters/nmosParameters0000644000175000017500000000756414163340332023407 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) tmp_ns50wwy/tests/bsim4/nmos/reference/0000755000175000017500000000000014163340332020243 5ustar carstencarstentmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_diomod.standard0000644000175000017500000000712114163340332024522 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw5.standard0000644000175000017500000002575214163340332024161 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw4.standard0000644000175000017500000002575214163340332024160 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_igcmod.standard0000644000175000017500000000712114163340332024511 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_sb.standard0000644000175000017500000002575214163340332024056 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_sa.standard0000644000175000017500000002575214163340332024055 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000712114163340332025054 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw8.standard0000644000175000017500000002575214163340332024164 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_geomod.standard0000644000175000017500000000712114163340332024521 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_mobmod.standard0000644000175000017500000000712114163340332024524 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw6.standard0000644000175000017500000002575214163340332024162 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_nrd.standard0000644000175000017500000002575214163340332024235 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_nrs.standard0000644000175000017500000002575214163340332024254 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw1_vb2.standard0000644000175000017500000002575214163340332024726 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_capmod.standard0000644000175000017500000000712014163340332024511 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_sca.standard0000644000175000017500000002575214163340332024220 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw2.standard0000644000175000017500000002575214163340332024156 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_wpemod.standard0000644000175000017500000000712114163340332024542 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_scc.standard0000644000175000017500000002575214163340332024222 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw7.standard0000644000175000017500000002575214163340332024163 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw3.standard0000644000175000017500000002575214163340332024157 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq.standard0000644000175000017500000000712114163340332023167 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_trnqsmod.standard0000644000175000017500000000712114163340332025116 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 tmp_ns50wwy/tests/bsim4/nmos/reference/noise2.standard0000644000175000017500000000635214163340332023172 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw9.standard0000644000175000017500000002575214163340332024165 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 tmp_ns50wwy/tests/bsim4/nmos/reference/noise1.standard0000644000175000017500000000634614163340332023174 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_scb.standard0000644000175000017500000002575214163340332024221 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acFreq_xpart.standard0000644000175000017500000000712114163340332024405 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw1.standard0000644000175000017500000002575214163340332024155 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 tmp_ns50wwy/tests/bsim4/nmos/reference/noise3.standard0000644000175000017500000000636114163340332023173 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 tmp_ns50wwy/tests/bsim4/nmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000002575214163340332024725 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 tmp_ns50wwy/tests/bsim4/nmos/reference/acVd.standard0000644000175000017500000000332714163340332022647 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 tmp_ns50wwy/tests/bsim4/nmos/reference/noise4.standard0000644000175000017500000000635314163340332023175 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 tmp_ns50wwy/tests/bsim4/nmos/qaSpec0000644000175000017500000003243114163340332017447 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 tmp_ns50wwy/tests/bsim4/nmos/run0000755000175000017500000000023614163340332017040 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/bsim4/pmos/0000755000175000017500000000000014163340332016307 5ustar carstencarstentmp_ns50wwy/tests/bsim4/pmos/parameters/0000755000175000017500000000000014163340332020452 5ustar carstencarstentmp_ns50wwy/tests/bsim4/pmos/parameters/pmosParameters0000644000175000017500000000762514163340332023411 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) tmp_ns50wwy/tests/bsim4/pmos/reference/0000755000175000017500000000000014163340332020245 5ustar carstencarstentmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_diomod.standard0000644000175000017500000000710514163340332024526 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw5.standard0000644000175000017500000002751214163340332024157 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw4.standard0000644000175000017500000002751214163340332024156 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_igcmod.standard0000644000175000017500000000710414163340332024514 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_sb.standard0000644000175000017500000002751214163340332024054 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_sa.standard0000644000175000017500000002751214163340332024053 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_acnqsmod.standard0000644000175000017500000000710514163340332025060 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw8.standard0000644000175000017500000002751214163340332024162 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_geomod.standard0000644000175000017500000000710514163340332024525 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_mobmod.standard0000644000175000017500000000710514163340332024530 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw6.standard0000644000175000017500000002751214163340332024160 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_nrd.standard0000644000175000017500000002751214163340332024233 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_nrs.standard0000644000175000017500000002751214163340332024252 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw1_vb2.standard0000644000175000017500000002751214163340332024724 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_capmod.standard0000644000175000017500000000712214163340332024515 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_sca.standard0000644000175000017500000002751214163340332024216 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw2.standard0000644000175000017500000002751214163340332024154 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_wpemod.standard0000644000175000017500000000710514163340332024546 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_scc.standard0000644000175000017500000002751214163340332024220 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw7.standard0000644000175000017500000002751214163340332024161 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw3.standard0000644000175000017500000002751214163340332024155 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq.standard0000644000175000017500000000710514163340332023173 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_trnqsmod.standard0000644000175000017500000000710514163340332025122 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 tmp_ns50wwy/tests/bsim4/pmos/reference/noise2.standard0000644000175000017500000000635014163340332023172 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw9.standard0000644000175000017500000002751214163340332024163 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 tmp_ns50wwy/tests/bsim4/pmos/reference/noise1.standard0000644000175000017500000000634714163340332023177 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_scb.standard0000644000175000017500000002751214163340332024217 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acFreq_xpart.standard0000644000175000017500000000710514163340332024411 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw1.standard0000644000175000017500000002751214163340332024153 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 tmp_ns50wwy/tests/bsim4/pmos/reference/noise3.standard0000644000175000017500000000635214163340332023175 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 tmp_ns50wwy/tests/bsim4/pmos/reference/dcSweep_lw1_vb1.standard0000644000175000017500000002751214163340332024723 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 tmp_ns50wwy/tests/bsim4/pmos/reference/acVd.standard0000644000175000017500000000335714163340332022654 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 tmp_ns50wwy/tests/bsim4/pmos/reference/noise4.standard0000644000175000017500000000635014163340332023174 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 tmp_ns50wwy/tests/bsim4/pmos/qaSpec0000644000175000017500000003311514163340332017451 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 tmp_ns50wwy/tests/bsim4/pmos/run0000755000175000017500000000023614163340332017042 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/README0000644000175000017500000000166314163340332015201 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. tmp_ns50wwy/tests/general/0000755000175000017500000000000014163340332015730 5ustar carstencarstentmp_ns50wwy/tests/general/schmitt.out0000644000175000017500000005751514163340332020151 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 tmp_ns50wwy/tests/general/fourbitadder.cir0000644000175000017500000000270514163340332021105 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 tmp_ns50wwy/tests/general/diffpair.out0000644000175000017500000000001314163340332020237 0ustar carstencarstenTo be done tmp_ns50wwy/tests/general/mosamp.out0000644000175000017500000036555314163340332017776 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 tmp_ns50wwy/tests/general/Makefile.am0000644000175000017500000000056114163340332017766 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 tmp_ns50wwy/tests/general/schmitt.cir0000644000175000017500000000114614163340332020104 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 tmp_ns50wwy/tests/general/mosamp.cir0000644000175000017500000000266014163340332017727 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 tmp_ns50wwy/tests/general/mosmem.out0000644000175000017500000002405714163340332017766 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. tmp_ns50wwy/tests/general/rca3040.cir0000644000175000017500000000202714163340332017504 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 tmp_ns50wwy/tests/general/mosmem.cir0000644000175000017500000000145314163340332017727 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 tmp_ns50wwy/tests/general/rtlinv.cir0000644000175000017500000000075114163340332017750 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 tmp_ns50wwy/tests/general/rc.cir0000644000175000017500000000026014163340332017031 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 tmp_ns50wwy/tests/general/rca3040.out0000644000175000017500000000025114163340332017533 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. tmp_ns50wwy/tests/general/fourbitadder.out0000644000175000017500000000001314163340332021125 0ustar carstencarstenTo be done tmp_ns50wwy/tests/general/diffpair.cir0000644000175000017500000000105114163340332020210 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 tmp_ns50wwy/tests/general/rtlinv.out0000644000175000017500000007042214163340332020004 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 tmp_ns50wwy/tests/general/rc.out0000644000175000017500000001500014163340332017061 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 tmp_ns50wwy/tests/sensitivity/0000755000175000017500000000000014163340332016705 5ustar carstencarstentmp_ns50wwy/tests/sensitivity/diffpair.out0000644000175000017500000002516414163340332021232 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. tmp_ns50wwy/tests/sensitivity/Makefile.am0000644000175000017500000000040014163340332020733 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 tmp_ns50wwy/tests/sensitivity/diffpair.cir0000644000175000017500000000107214163340332021170 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 tmp_ns50wwy/tests/bsim2/0000755000175000017500000000000014163340332015327 5ustar carstencarstentmp_ns50wwy/tests/bsim2/Makefile.am0000644000175000017500000000037614163340332017371 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 tmp_ns50wwy/tests/bsim2/test.out0000644000175000017500000015035614163340332017051 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 tmp_ns50wwy/tests/bsim2/test.cir0000644000175000017500000000664014163340332017013 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 tmp_ns50wwy/tests/bsim3soifd/0000755000175000017500000000000014163340332016355 5ustar carstencarstentmp_ns50wwy/tests/bsim3soifd/RampVg2.out0000644000175000017500000014273714163340332020402 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 tmp_ns50wwy/tests/bsim3soifd/Makefile.am0000644000175000017500000000060514163340332020412 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 tmp_ns50wwy/tests/bsim3soifd/lib.h0000644000175000017500000001042514163340332017276 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 tmp_ns50wwy/tests/bsim3soifd/inv2.cir0000644000175000017500000000046314163340332017735 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 tmp_ns50wwy/tests/bsim3soifd/t5.cir0000644000175000017500000000042414163340332017404 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 tmp_ns50wwy/tests/bsim3soifd/nmosfd.mod0000644000175000017500000000405714163340332020352 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 tmp_ns50wwy/tests/bsim3soifd/t3.out0000644000175000017500000025166414163340332017452 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 tmp_ns50wwy/tests/bsim3soifd/t4.cir0000644000175000017500000000044414163340332017405 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 tmp_ns50wwy/tests/bsim3soifd/pmosfd.mod0000644000175000017500000000403214163340332020345 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 tmp_ns50wwy/tests/bsim3soifd/t5.out0000644000175000017500000013506714163340332017452 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 tmp_ns50wwy/tests/bsim3soifd/RampVg2.cir0000644000175000017500000000047114163340332020334 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 tmp_ns50wwy/tests/bsim3soifd/ring51.cir0000644000175000017500000000064514163340332020166 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 tmp_ns50wwy/tests/bsim3soifd/t3.cir0000644000175000017500000000043414163340332017403 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 tmp_ns50wwy/tests/bsim3soifd/inv2.out0000644000175000017500000003330014163340332017763 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 tmp_ns50wwy/tests/bsim3soifd/t4.out0000644000175000017500000013506714163340332017451 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 tmp_ns50wwy/tests/vbic/0000755000175000017500000000000014163340332015236 5ustar carstencarstentmp_ns50wwy/tests/vbic/FO.cir0000644000175000017500000000075514163340332016250 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 tmp_ns50wwy/tests/vbic/Makefile.am0000644000175000017500000000053214163340332017272 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 tmp_ns50wwy/tests/vbic/FO.out0000644000175000017500000013412114163340332016275 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 tmp_ns50wwy/tests/vbic/FG.cir0000644000175000017500000000075414163340332016237 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 tmp_ns50wwy/tests/vbic/noise_scale_test.out0000644000175000017500000001047714163340332021323 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 tmp_ns50wwy/tests/vbic/diffamp.out0000644000175000017500000006711014163340332017402 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. tmp_ns50wwy/tests/vbic/diffamp.cir0000644000175000017500000000235214163340332017345 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 tmp_ns50wwy/tests/vbic/CEamp.out0000644000175000017500000010517714163340332016767 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. tmp_ns50wwy/tests/vbic/temp.cir0000644000175000017500000000073014163340332016702 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 tmp_ns50wwy/tests/vbic/noise_scale_test.cir0000644000175000017500000000116314163340332021261 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 tmp_ns50wwy/tests/vbic/FG.out0000644000175000017500000001137014163340332016265 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 tmp_ns50wwy/tests/vbic/temp.out0000644000175000017500000001136514163340332016742 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 tmp_ns50wwy/tests/vbic/CEamp.cir0000644000175000017500000000111014163340332016713 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 tmp_ns50wwy/tests/resistance/0000755000175000017500000000000014163340332016453 5ustar carstencarstentmp_ns50wwy/tests/resistance/Makefile.am0000644000175000017500000000045414163340332020512 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 tmp_ns50wwy/tests/resistance/res_partition.cir0000644000175000017500000000025714163340332022040 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 tmp_ns50wwy/tests/resistance/res_array.cir0000644000175000017500000000071114163340332021140 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 tmp_ns50wwy/tests/resistance/res_simple.out0000644000175000017500000000507214163340332021352 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 tmp_ns50wwy/tests/resistance/res_simple.cir0000644000175000017500000000016714163340332021320 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 tmp_ns50wwy/tests/resistance/res_array.out0000644000175000017500000021752114163340332021203 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 tmp_ns50wwy/tests/resistance/res_partition.out0000644000175000017500000001013314163340332022064 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 tmp_ns50wwy/tests/filters/0000755000175000017500000000000014163340332015763 5ustar carstencarstentmp_ns50wwy/tests/filters/Makefile.am0000644000175000017500000000040114163340332020012 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 tmp_ns50wwy/tests/filters/lowpass.cir0000644000175000017500000000026714163340332020157 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 tmp_ns50wwy/tests/filters/lowpass.out0000644000175000017500000001056214163340332020210 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 tmp_ns50wwy/tests/.gitignore0000644000175000017500000000011314163340332016276 0ustar carstencarsten*.test *.log *.out ngspiceCkt hspiceCkt /xspice/digital/spinit results/ tmp_ns50wwy/tests/hicum2/0000755000175000017500000000000014163340332015502 5ustar carstencarstentmp_ns50wwy/tests/hicum2/Makefile.am0000644000175000017500000000044614163340332017542 0ustar carstencarsten## Process this file with automake to produce Makefile.in TESTS = npn/qaSpec TESTS_ENVIRONMENT = \ $(SHELL) $(top_srcdir)/tests/bin/check_cmc.sh \ $(top_builddir)/src/ngspice EXTRA_DIST = \ $(TESTS) \ npn MAINTAINERCLEANFILES = Makefile.in clean-local: rm -rf npn/results ngspiceCkt tmp_ns50wwy/tests/hicum2/npn/0000755000175000017500000000000014163340332016275 5ustar carstencarstentmp_ns50wwy/tests/hicum2/npn/parameters/0000755000175000017500000000000014163340332020440 5ustar carstencarstentmp_ns50wwy/tests/hicum2/npn/parameters/npn_1D0000644000175000017500000000427314163340332021510 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 0 ) + rbx = ( 0 ) + fgeo = ( 0.6557 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_1D_no_aval0000644000175000017500000000426114163340332023204 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 0 ) + qavl = ( 5.092e-014 ) + alfav = ( 0 ) + alqav = ( -0.0006284 ) + rbi0 = ( 0 ) + rbx = ( 0 ) + fgeo = ( 0.6557 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_lat_nqs0000644000175000017500000000431014163340332022675 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 0 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0.6 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 1.8 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full_subtran0000644000175000017500000000454614163340332023747 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 1.143e-019 ) + msf = ( 1.056 ) + iscs = ( 4.60106e-015 ) + msc = ( 1.018 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.049 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full_sh0000644000175000017500000000451114163340332022673 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/compare_para.pl0000644000175000017500000000166414163340332023435 0ustar carstencarsten#use warnings #use strict my $va_code = '../vacode/hicumL2V2p33.va'; my %ref_para = (); open(FILE, "<$va_code"); while () { my ($dummy, $name, $value) = /parameter\s*(real|integer)\s*(\w+)\s*=\s*([+-]?\d+(\.\d+)?([Ee][+-]?\d+)?)/; $ref_para{$name} = $value; } my @para_names = keys %ref_para; close(FILE); my @parameters = ('npn_1D','npn_cornoise','npn_full','npn_full_sh','npn_full_subcoupl','npn_full_subtran','npn_internal','npn_lat_nqs','npn_vert_nqs'); foreach my $set (@parameters) { open(FILE,"<$set"); my %act_para = (); while () { my ($name, $value) = /\+\s?(\w+)\s?=\s?\(\s?([+-]?\d+(\.\d+)?([Ee][+-]?\d+)?)\s?\)/; $act_para{$name} = $value; } my @neq = grep { $ref_para{$_} != $act_para{$_} } @para_names; my @eq = grep { $ref_para{$_} == $act_para{$_} } @para_names; my $percentage = ($#neq/$#para_names)*100; print "$set : $percentage\n"; #print join(' ', @eq), "\n"; close(FILE); } tmp_ns50wwy/tests/hicum2/npn/parameters/npn_cornoise0000644000175000017500000000455714163340332023072 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 1.143e-019 ) + msf = ( 1.056 ) + iscs = ( 4.60106e-015 ) + msc = ( 1.018 ) + tsf = ( 0 ) + rsu = ( 500 ) + csu = ( 6.4e-014 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.049 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 1 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_internal0000644000175000017500000000430414163340332023053 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 0 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full_subcoupl_peri_con0000644000175000017500000000462514163340332026001 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 1.143e-019 ) + msf = ( 1.056 ) + iscs = ( 4.60106e-015 ) + msc = ( 1.018 ) + tsf = ( 0 ) + rsu = ( 500 ) + csu = ( 6.4e-014 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + cscp0 = ( 1.4e-014 ) + vdsp = ( 0 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.049 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full_subcoupl_peri_bias0000644000175000017500000000467014163340332026140 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 1.143e-019 ) + msf = ( 1.056 ) + iscs = ( 4.60106e-015 ) + msc = ( 1.018 ) + tsf = ( 0 ) + rsu = ( 500 ) + csu = ( 6.4e-014 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + cscp0 = ( 1.4e-014 ) + vdsp = ( 0.8 ) + zsp = ( 0.35 ) + vptsp = ( 4 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.049 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_vert_nqs0000644000175000017500000000426414163340332023105 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 0 ) + rbx = ( 0 ) + fgeo = ( 0.6557 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.167 ) + alit = ( 0.33 ) + flnqs = ( 1 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full0000644000175000017500000000446714163340332022213 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_full_subcoupl0000644000175000017500000000455714163340332024127 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 1.26e-019 ) + mbep = ( 1.042 ) + ireps = ( 1.8e-014 ) + mrep = ( 1.8 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0.02035 ) + abet = ( 24 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + rbi0 = ( 4.444 ) + rbx = ( 2.568 ) + fgeo = ( 0.7409 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 1.511 ) + rcx = ( 2.483 ) + itss = ( 1.143e-019 ) + msf = ( 1.056 ) + iscs = ( 4.60106e-015 ) + msc = ( 1.018 ) + tsf = ( 0 ) + rsu = ( 500 ) + csu = ( 6.4e-014 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 2.178e-015 ) + vdep = ( 0.8501 ) + zep = ( 0.2632 ) + ajep = ( 1.6 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 6.299e-015 ) + vdcx = ( 0.8201 ) + zcx = ( 0.2863 ) + vptcx = ( 1.977 ) + fbcpar = ( 0.3 ) + fbepar = ( 1 ) + cjs0 = ( 2.6e-014 ) + vds = ( 0.9997 ) + zs = ( 0.4295 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 2.609e-014 ) + cbcpar = ( 1.64512e-014 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0.3002 ) + zetarbx = ( 0.06011 ) + zetarcx = ( -0.02768 ) + zetare = ( -0.9605 ) + zetacx = ( 0 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.049 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 1 ) + rth = ( 1113.4 ) + cth = ( 6.841e-012 ) + zetarth = ( 0 ) + alrth = ( 0.002 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/parameters/npn_1D_breakdown0000644000175000017500000000433714163340332023545 0ustar carstencarsten+ c10 = ( 9.074e-030 ) + qp0 = ( 1.008e-013 ) + ich = ( 0 ) + hfe = ( 10.01 ) + hfc = ( 20.04 ) + hjei = ( 3.382 ) + hjci = ( 0.2 ) + ibeis = ( 1.328e-019 ) + mbei = ( 1.027 ) + ireis = ( 1.5e-014 ) + mrei = ( 2 ) + ibeps = ( 0 ) + mbep = ( 1 ) + ireps = ( 0 ) + mrep = ( 2 ) + mcf = ( 1 ) + tbhrec = ( 1e-010 ) + ibcis = ( 4.603e-017 ) + mbci = ( 1.15 ) + ibcxs = ( 0 ) + mbcx = ( 1 ) + ibets = ( 0 ) + abet = ( 40 ) + tunode = ( 1 ) + favl = ( 18.96 ) + qavl = ( 5.092e-014 ) + kavl = ( 0.8 ) + alfav = ( -0.0024 ) + alqav = ( -0.0006284 ) + alkav = ( 0.001) + rbi0 = ( 0 ) + rbx = ( 0 ) + fgeo = ( 0.6557 ) + fdqr0 = ( 0 ) + fcrbi = ( 0 ) + fqi = ( 1 ) + re = ( 0 ) + rcx = ( 0 ) + itss = ( 0 ) + msf = ( 1 ) + iscs = ( 0 ) + msc = ( 1 ) + tsf = ( 0 ) + rsu = ( 0 ) + csu = ( 0 ) + cjei0 = ( 8.869e-015 ) + vdei = ( 0.714 ) + zei = ( 0.2489 ) + ajei = ( 1.65 ) + cjep0 = ( 1e-020 ) + vdep = ( 0.9 ) + zep = ( 0.5 ) + ajep = ( 2.5 ) + cjci0 = ( 3.58e-015 ) + vdci = ( 0.8201 ) + zci = ( 0.2857 ) + vptci = ( 1.79 ) + cjcx0 = ( 1e-020 ) + vdcx = ( 0.7 ) + zcx = ( 0.4 ) + vptcx = ( 100 ) + fbcpar = ( 0 ) + fbepar = ( 1 ) + cjs0 = ( 0 ) + vds = ( 0.6 ) + zs = ( 0.5 ) + vpts = ( 100 ) + t0 = ( 2.089e-013 ) + dt0h = ( 8e-014 ) + tbvl = ( 8.25e-014 ) + tef0 = ( 3.271e-013 ) + gtfe = ( 3.548 ) + thcs = ( 5.001e-012 ) + ahc = ( 0.05 ) + fthc = ( 0.7 ) + rci0 = ( 9.523 ) + vlim = ( 0.6999 ) + vces = ( 0.01 ) + vpt = ( 2 ) + tr = ( 0 ) + cbepar = ( 0 ) + cbcpar = ( 0 ) + alqf = ( 0.166667 ) + alit = ( 0.333333 ) + flnqs = ( 0 ) + kf = ( 0 ) + af = ( 2 ) + cfbe = ( -1 ) + latb = ( 0 ) + latl = ( 0 ) + vgb = ( 0.91 ) + alt0 = ( 0.004 ) + kt0 = ( 6.588e-005 ) + zetaci = ( 0.58 ) + alvs = ( 0.001 ) + alces = ( -0.2286 ) + zetarbi = ( 0 ) + zetarbx = ( 0 ) + zetarcx = ( 0 ) + zetare = ( 0 ) + zetacx = ( 1 ) + vge = ( 1.17 ) + vgc = ( 1.17 ) + vgs = ( 1.17 ) + f1vg = ( -0.000102377 ) + f2vg = ( 0.00043215 ) + zetact = ( 5 ) + zetabet = ( 4.892 ) + alb = ( 0 ) + flsh = ( 0 ) + rth = ( 0 ) + cth = ( 0 ) + zetarth = ( 0 ) + alrth = ( 0 ) + flcomp = ( 2.3 ) + tnom = ( 26.85 ) + dt = ( 0 ) + acbar = ( 1.5 ) + flcono = ( 0 ) + icbar = ( 0.01 ) + vcbar = ( 0.04 ) + zetavgbe = ( 0.7 ) + hf0 = ( 40 ) + ahjei = ( 3 ) + rhjei = ( 2 ) + delck = ( 2 ) + zetahjei = ( -0.5 ) tmp_ns50wwy/tests/hicum2/npn/reference/0000755000175000017500000000000014163340332020233 5ustar carstencarstentmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_1D_dc.standard0000644000175000017500000001544614163340332024225 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002002e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24597758602805e-28 5.43852186601834e-28 0.0500000000000003 -5.00000000172099e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732966e-13 5.05259770605552e-13 0.3 -3.00001561179699e-13 6.19324037995474e-13 0.35 -3.50014977027488e-13 7.70944534001899e-13 0.4 -4.00143680477515e-13 1.06045936684609e-12 0.45 -4.51378382653432e-13 1.85671697271933e-12 0.5 -5.13223359838464e-13 4.51945012807262e-12 0.55 -6.76856822893239e-13 1.40984637154991e-11 0.6 -1.81698673391414e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.7 -1.12703055744962e-10 3.47593602243085e-09 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964245e-13 -0.2 2.00047134849492e-13 -4.14897162929443e-13 -0.15 1.50046886985275e-13 -3.14379680798674e-13 -0.0999999999999997 1.00045555694836e-13 -2.13018560796776e-13 -0.0499999999999997 5.00384052730846e-14 -1.09436572570566e-13 3.19189119579733e-16 4.13269573120192e-23 -4.13265445467135e-23 0.0500000000000003 -5.0206276115586e-14 1.24914117033713e-13 0.1 -1.01314194087144e-13 2.90980896151676e-13 0.15 -1.57264867823004e-13 5.67725307060068e-13 0.2 -2.39226183336884e-13 1.14882509114703e-12 0.25 -4.60891729945478e-13 2.60210366156322e-12 0.3 -1.43291446463927e-12 6.73610052619478e-12 0.35 -6.43513660098033e-12 2.00061162068663e-11 0.4 -3.30837259241193e-11 6.85489977652468e-11 0.45 -1.75995846089845e-10 2.70515774412067e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.7 -7.84663581577333e-07 9.28415745768918e-07 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102724e-13 -6.75373800064317e-13 -0.25 2.51658562604109e-13 -5.74880432730867e-13 -0.2 2.01656020281116e-13 -4.73668387073455e-13 -0.15 1.51643905151441e-13 -3.70687925097132e-13 -0.0999999999999997 1.01586171991671e-13 -2.6334527481025e-13 -0.0499999999999997 5.13110517672389e-14 -1.45191279609288e-13 3.19189119579733e-16 5.74616864058484e-22 -5.74616118880751e-22 0.0500000000000003 -5.62476501229265e-14 2.13950763614116e-13 0.1 -1.36020047170782e-13 6.08121963861568e-13 0.15 -3.27896671387576e-13 1.49931858967928e-12 0.2 -1.05399191607847e-12 3.87148001992826e-12 0.25 -4.3258389117019e-12 1.1124834937132e-11 0.3 -1.97291461694792e-11 3.63099468893959e-11 0.35 -9.29434037716724e-11 1.33935721720849e-10 0.4 -4.41648485051704e-10 5.45224221543521e-10 0.45 -2.10317048911921e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.7 -5.16734064081562e-06 5.53886593993007e-06 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105083e-10 -0.6 1.18575135234566e-10 -1.30294766063313e-10 -0.55 1.18524897840167e-10 -1.30191699950077e-10 -0.5 1.18474353034842e-10 -1.30085539519988e-10 -0.45 1.18422557934573e-10 -1.29972596875668e-10 -0.4 1.1836664318916e-10 -1.29844551137558e-10 -0.35 1.18297154466434e-10 -1.29681120696754e-10 -0.3 1.18182940325636e-10 -1.29429638088295e-10 -0.25 1.17921358696786e-10 -1.28944661320645e-10 -0.2 1.1717421031985e-10 -1.2780268918443e-10 -0.15 1.1482714961513e-10 -1.24718744459431e-10 -0.0999999999999997 1.07208477086367e-10 -1.15677456403674e-10 -0.0499999999999997 8.22201709724528e-11 -8.78797381931381e-11 3.19189119579733e-16 1.25417773295083e-18 -1.25417768125204e-18 0.0500000000000003 -2.70795603003862e-10 2.82482764696758e-10 0.1 -1.16293554639735e-09 1.19968102048248e-09 0.15 -4.10236647769572e-09 4.19605719138774e-09 0.2 -1.37874939984276e-08 1.40217410358346e-08 0.25 -4.56992726152099e-08 4.63172577067687e-08 0.3 -1.50846485469688e-07 1.52625480136579e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.7 -0.00209725704818037 0.00214673139842961 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_dc.standard0000644000175000017500000000036514163340332025441 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08035963592065e-05 7.92509470847313e-08 0.8 0.000859170654786903 1.69222650328451e-06 0.9 0.0132523192705683 3.07668510364377e-05 1 0.0460845869720482 0.000209474499111197 1.1 0.0751203386392687 0.00316902111648357 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_subcoupl_peri_con_ac.standard0000644000175000017500000020135714163340332031520 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 10000000000 6.9163228703545e-05 -1.99098471784453e-05 0.00717939358356171 0.000136288002789919 7.34018845272503e-14 2.74039259131064e-14 3.00498221026569e-14 5.8677676200783e-14 12599210498.9563 9.83806547940076e-05 -3.15034833705366e-05 0.0071661079766626 0.000153897175038553 7.33957921798029e-14 2.74013132211064e-14 3.00423476602503e-14 5.84460477372838e-14 15874010519.701 0.000144748030780916 -4.98951786853798e-05 0.00714511878953688 0.000176984720461071 7.33861286627277e-14 2.73974984030965e-14 3.00349100736997e-14 5.82871532837613e-14 20000000000 0.000218320706307945 -7.90739131526933e-05 0.00711187941736133 0.000210259166022742 7.33707988142127e-14 2.73916747695934e-14 3.00261513422906e-14 5.8179559067827e-14 10000000000 7.84758889093507e-05 -2.01371497759475e-05 0.0102411191600386 0.000137065009791104 7.42293209781388e-14 2.74618067755115e-14 3.12868761985391e-14 5.88775592158257e-14 12599210498.9563 0.00010865194441009 -3.18638060321098e-05 0.0102269108435195 0.000154863222434076 7.42228935576917e-14 2.74591320575608e-14 3.12770550828397e-14 5.8645864472993e-14 15874010519.701 0.000156540038024119 -5.04664366323681e-05 0.0102044948688061 0.00017825020666945 7.42126993711191e-14 2.74552196753651e-14 3.12678173903954e-14 5.84868713421367e-14 20000000000 0.000232524263579388 -7.99794852727868e-05 0.0101690180009815 0.000211999261244378 7.41965285670215e-14 2.74492418958706e-14 3.12575145500174e-14 5.83791257769968e-14 10000000000 9.15513951535256e-05 -2.0425759790506e-05 0.0145220789481335 0.000138196073063868 7.53655791559367e-14 2.75220420567564e-14 3.30484822348729e-14 5.91373355293859e-14 12599210498.9563 0.000123078272424384 -3.23213042741175e-05 0.0145065260826719 0.000156251761439519 7.53586681579314e-14 2.75192836647024e-14 3.30351795878604e-14 5.89055575405476e-14 15874010519.701 0.00017310916567858 -5.1191723555596e-05 0.0144820289237159 0.000180046555335434 7.53477071936865e-14 2.75152395171044e-14 3.30232746994777e-14 5.87464313607525e-14 20000000000 0.000252491258497442 -8.1129126519997e-05 0.0144432869269864 0.000214441936012333 7.53303207255436e-14 2.75090534587804e-14 3.30106801611414e-14 5.86384756634165e-14 10000000000 0.000109854473029617 -2.0796432092664e-05 0.0204227160025094 0.000139875214139884 7.69135808654115e-14 2.75851783350471e-14 3.55569026788524e-14 5.94770134298047e-14 12599210498.9563 0.000143283945367099 -3.29088420876861e-05 0.0204051846019049 0.000158285256157742 7.69059672733874e-14 2.75823058159886e-14 3.55384262758563e-14 5.92451349967585e-14 15874010519.701 0.000196332775780279 -5.21230861115699e-05 0.0203776202611028 0.000182641267686301 7.68938905217236e-14 2.75780818406669e-14 3.552255501117e-14 5.90858295651724e-14 20000000000 0.000280500104992539 -8.26052356194371e-05 0.0203340631001241 0.000217926031041316 7.68747340343556e-14 2.75716114696984e-14 3.55065337934553e-14 5.89775791347863e-14 10000000000 0.00013532677488483 -2.12737843627815e-05 0.0284003466441385 0.000142412606783049 7.89916417232509e-14 2.76519629952434e-14 3.91140171805147e-14 5.99199770197842e-14 12599210498.9563 0.000171421974570388 -3.36653485249183e-05 0.0283798818694168 0.00016131225898891 7.89830032735977e-14 2.76489341631948e-14 3.90878727844239e-14 5.96879855816799e-14 15874010519.701 0.00022869897123719 -5.33221137619843e-05 0.0283477611088511 0.000186443660282143 7.89692958331837e-14 2.76444638823162e-14 3.90661019220786e-14 5.95284401032047e-14 20000000000 0.000319569790497169 -8.45052293287457e-05 0.0282970448468719 0.000222957087902931 7.89475506853503e-14 2.76376041105509e-14 3.90449305591437e-14 5.94197735926716e-14 10000000000 0.000170462795856226 -2.18845556879666e-05 0.0389183089669134 0.000146298892790664 8.17214189223714e-14 2.7723399116936e-14 4.41110431545409e-14 6.04908876151883e-14 12599210498.9563 0.000210253344237055 -3.46329787164689e-05 0.0388934792542421 0.00016587291317316 8.17112851909816e-14 2.77201568222582e-14 4.40736389675039e-14 6.02587841219407e-14 15874010519.701 0.000273391092050658 -5.48553507793033e-05 0.0388545626424707 0.000192072235329743 8.16951932188761e-14 2.77153503822235e-14 4.40431378653562e-14 6.00989205221107e-14 20000000000 0.00037355243614438 -8.69341612666722e-05 0.0387931583610594 0.000230277642021548 8.16696596343103e-14 2.77079593259968e-14 4.40142165084124e-14 5.99896650834167e-14 10000000000 0.000218344352446204 -2.2654307921631e-05 0.0523568358653619 0.000152287436179066 8.52063263998239e-14 2.78008024514899e-14 5.10186575107029e-14 6.12118020108417e-14 12599210498.9563 0.000263171408494707 -3.58517085470716e-05 0.0523255276635467 0.000172780207940926 8.51940224721234e-14 2.77972716348396e-14 5.09650142021815e-14 6.09796144696946e-14 15874010519.701 0.000334295978385924 -5.67855401874052e-05 0.0522764994238734 0.000200434330485 8.51744610381916e-14 2.77920114211309e-14 5.09217520179266e-14 6.08193350676543e-14 20000000000 0.000447115617783941 -8.99906304818104e-05 0.0521991763630529 0.000240944265116505 8.51434104880798e-14 2.77839036645824e-14 5.08812209720945e-14 6.07092477387666e-14 10000000000 0.000282612591367826 -2.36033015424849e-05 0.0688983671069264 0.000161478495462997 8.95035906838716e-14 2.78858647679689e-14 6.03417311961727e-14 6.20970393488919e-14 12599210498.9563 0.000334142328896297 -3.73524109364145e-05 0.0688575519690682 0.000183199360132225 8.94881767897209e-14 2.78819507141604e-14 6.02653108400003e-14 6.18648399615095e-14 15874010519.701 0.000415894138096955 -5.91602525602599e-05 0.0687936489749586 0.000212797875463577 8.9463630259913e-14 2.78760890662247e-14 6.02037755801214e-14 6.17040257946048e-14 20000000000 0.000545552345982074 -9.37483419181999e-05 0.0686928865874225 0.000256387146951642 8.94246455550955e-14 2.78670323976963e-14 6.01460580700387e-14 6.15927727610947e-14 10000000000 0.000367383543168571 -2.47438577121388e-05 0.0884271770962806 0.0001753750633392 9.46001164436813e-14 2.79807568523459e-14 7.25323561791369e-14 6.31486383133757e-14 12599210498.9563 0.000427567057193547 -3.91518453102082e-05 0.0883727103848017 0.000198694654439835 9.45803398642553e-14 2.7976345478182e-14 7.24251519107665e-14 6.29165604217809e-14 15874010519.701 0.000523036564798318 -6.2003112812199e-05 0.0882874006590245 0.000230823932321655 9.45487809196012e-14 2.7969705923834e-14 7.23381869650457e-14 6.27550704648457e-14 20000000000 0.000674422375443782 -9.82413696367515e-05 0.0881528798333316 0.000278419872933478 9.44986256682723e-14 2.79594238570557e-14 7.22555291617728e-14 6.26422085235366e-14 10000000000 0.00047715832852716 -2.60830643983077e-05 0.11049712420605 0.000195885349707159 1.00406560195323e-13 2.80883801723533e-14 8.78819832708305e-14 6.43550867248723e-14 12599210498.9563 0.000548133216130061 -4.12551729994494e-05 0.110423660755752 0.000221221477130662 1.00380839217177e-13 2.80833401665926e-14 8.77349521865567e-14 6.4123335270245e-14 15874010519.701 0.000660704007651577 -6.53160240238255e-05 0.110308507767154 0.000256542143426797 1.00339698487127e-13 2.80757220050215e-14 8.76137978145756e-14 6.39610061167423e-14 20000000000 0.000839164404932349 -0.000103465946403018 0.110126898177783 0.000309188520235148 1.0027426705968e-13 2.8063901880461e-14 8.74959200486652e-14 6.38459716826593e-14 10000000000 0.000616816334292255 -2.76358371279515e-05 0.1343975501686 0.000225293926932324 1.06779818182252e-13 2.82130550180219e-14 1.06444567536349e-13 6.56953577461834e-14 12599210498.9563 0.000700782345436863 -4.36727612857957e-05 0.134298630843579 0.000253092269543342 1.06746262785484e-13 2.82072394443484e-14 1.06248328281043e-13 6.54642056208411e-14 15874010519.701 0.000833933145407957 -6.91019226215061e-05 0.134143430229083 0.000292308460374646 1.06692457363457e-13 2.81984220254685e-14 1.06082871746124e-13 6.53008481056143e-14 20000000000 0.0010449572877934 -0.000109412689079606 0.133898611690734 0.000351116353810021 1.06606818941765e-13 2.8184722977497e-14 1.05916821034972e-13 6.51829535784215e-14 10000000000 0.000791793882193812 -2.94565174196211e-05 0.159292738643793 0.00026631284905998 1.13574010281021e-13 2.83623614953572e-14 1.2804975241566e-13 6.71487733760041e-14 12599210498.9563 0.000890941531305345 -4.64612034866143e-05 0.159160980992424 0.000297037160702951 1.13530439958769e-13 2.83556030290263e-14 1.27795276846221e-13 6.69185343061271e-14 15874010519.701 0.00104813227590661 -7.34207325849745e-05 0.158954064488234 0.000340880870723925 1.13460398882824e-13 2.83453406489995e-14 1.27574349098908e-13 6.67539146310431e-14 20000000000 0.00129716914720199 -0.00011614620561731 0.158627615634154 0.000407003486572521 1.13348837973599e-13 2.83293871598857e-14 1.27344466799606e-13 6.66323339341364e-14 10000000000 0.00100860377173145 -3.17107716184067e-05 0.184369233944567 0.000322439635238148 1.20717295775243e-13 2.8551933472324e-14 1.52445704299559e-13 6.87119025256088e-14 12599210498.9563 0.00112522872046645 -4.98146342849071e-05 0.184196350276826 0.000356599804564595 1.20661131089771e-13 2.85440211666893e-14 1.52124570966167e-13 6.84828616699129e-14 15874010519.701 0.00131008072149446 -7.8511385005604e-05 0.183924618824051 0.000405875158532243 1.20570623262288e-13 2.85320096094268e-14 1.51835853918714e-13 6.83166319687243e-14 20000000000 0.00160282162758455 -0.000123975562113333 0.183495880370546 0.000480577345565336 1.20426369693667e-13 2.85133408160088e-14 1.51523325910608e-13 6.81903165256612e-14 10000000000 0.00127614337256387 -3.48547790388108e-05 0.208931177848558 0.000399030358644692 1.28332417915083e-13 2.88178968725224e-14 1.79616797954884e-13 7.04312155741576e-14 12599210498.9563 0.00141319541858372 -5.42882914637466e-05 0.208707180305608 0.000437310385969114 1.28260142971659e-13 2.88085050905713e-14 1.79220289111181e-13 7.02034612963413e-14 15874010519.701 0.00163035799375648 -8.5085432704369e-05 0.20835485411213 0.000493095803784649 1.28143429802739e-13 2.87942736413253e-14 1.788487878511e-13 7.00349407489012e-14 20000000000 0.00197410019556851 -0.000133858138977065 0.207798971905041 0.000578072421841824 1.27957325761192e-13 2.87721758009101e-14 1.78429182890958e-13 6.99023039815662e-14 10000000000 0.00160928152853846 -4.01275786684693e-05 0.232419876866916 0.000505976415618836 1.3698269309599e-13 2.92496812327058e-14 2.104487511165e-13 7.2482830220801e-14 12599210498.9563 0.00177197988660116 -6.14094454764929e-05 0.232129882370414 0.000549636298717571 1.3688804442945e-13 2.92381620202022e-14 2.099639466238e-13 7.22557941519409e-14 15874010519.701 0.00202967771187381 -9.51249661717202e-05 0.231673466057405 0.000613918855091544 1.3673502554098e-13 2.92207512614047e-14 2.09486035473296e-13 7.20832873526626e-14 20000000000 0.0024373263088745 -0.000148491253304527 0.230953487551997 0.000712292689205474 1.36491036299057e-13 2.91937538753568e-14 2.08920075130338e-13 7.19411590952235e-14 10000000000 0.00203961941183567 -5.10015865435783e-05 0.254356204439876 0.00066440390715744 1.48292400798044e-13 3.00784995223037e-14 2.48348720108914e-13 7.53924193355171e-14 12599210498.9563 0.00224012405849864 -7.54887545131345e-05 0.253969985418922 0.000716529977043356 1.48160344923179e-13 3.00632137272934e-14 2.47744912936037e-13 7.5163384771797e-14 15874010519.701 0.00255751067451225 -0.000114262012430129 0.253361816867994 0.000794176145245629 1.47947069526956e-13 3.00401280980924e-14 2.47107281192625e-13 7.49818656165387e-14 20000000000 0.00305909758938361 -0.000175581461546361 0.252402912322251 0.000913591166656735 1.47607380477729e-13 3.00043620313302e-14 2.46307990601517e-13 7.48218730544727e-14 10000000000 0.00264987470542709 -7.77128677382445e-05 0.274176225635758 0.00092476959901111 1.66632572152554e-13 3.19164402702017e-14 3.03638153186066e-13 8.06526950118677e-14 12599210498.9563 0.00292220863299508 -0.000109399767433038 0.273612808167881 0.00099453835602703 1.66416188777073e-13 3.18921516220957e-14 3.02813277232791e-13 8.04108149111472e-14 15874010519.701 0.00335277577512596 -0.000159517509501253 0.272725491586579 0.00109999483349488 1.66068495407293e-13 3.18552689770693e-14 3.01848986784266e-13 8.02025368338521e-14 20000000000 0.00403192869574466 -0.000238635587857408 0.271328309288103 0.00126308508783829 1.65516599037222e-13 3.17980651552774e-14 3.00550463540459e-13 7.99964049780827e-14 10000000000 0.00369020709669897 -0.000152355270599363 0.290795051724085 0.001420095174129 2.03515362249398e-13 3.63623330786338e-14 4.05193842363207e-13 9.23378169230286e-14 12599210498.9563 0.00414490195445734 -0.000204663619072544 0.289788267947417 0.00153942140517505 2.03022509662801e-13 3.63069151334917e-14 4.03703982591858e-13 9.20325551336742e-14 15874010519.701 0.00486146611699431 -0.000287138932827184 0.288205366401239 0.00172267799430648 2.0223872593173e-13 3.62216948254043e-14 4.01709317012805e-13 9.17176486163114e-14 20000000000 0.00598598882029706 -0.000416689600659273 0.285723908707547 0.00200713689442567 2.01004370389392e-13 3.6089301257777e-14 3.98809921360441e-13 9.13404296202749e-14 10000000000 0.00598756558308325 -0.000381782449781921 0.301308056624739 0.00253089632245712 2.86511145338118e-13 4.71717751244578e-14 6.24194269428204e-13 1.20254172641891e-13 12599210498.9563 0.00703182682500186 -0.000505823315773511 0.298850534979402 0.00282570328330672 2.84678682158392e-13 4.69568938771145e-14 6.19469038293092e-13 1.19576199428813e-13 15874010519.701 0.00865938123941289 -0.000699262260649287 0.295024271793956 0.00328059901871203 2.81814179819242e-13 4.66249632696522e-14 6.12458466707532e-13 1.18675289551138e-13 20000000000 0.0111697934042778 -0.000997929132144175 0.289125404583725 0.00397952319299927 2.77390945949863e-13 4.61148634994379e-14 6.01875054880071e-13 1.17394814509907e-13 10000000000 0.0121758458478987 -0.00110532198012768 0.297571621167145 0.00531865851099922 4.61341595389947e-13 7.03023974873929e-14 1.07642080834293e-12 1.79667384622218e-13 12599210498.9563 0.0152463185857168 -0.00148568033976929 0.290052006089353 0.00625266252299922 4.5134775059082e-13 6.90714465758383e-14 1.05152728924902e-12 1.76491981946208e-13 15874010519.701 0.0198392643659768 -0.00205500325462073 0.278808074256981 0.00764597500086633 4.36390060866339e-13 6.72342934821012e-14 1.01462103793914e-12 1.71880138220576e-13 20000000000 0.026498189367933 -0.00288131509031909 0.262510048232828 0.00966466111425668 4.14701195558953e-13 6.45734518518196e-14 9.61325563454696e-13 1.65288017472579e-13 10000000000 0.027421707185893 -0.00296623700615689 0.26526498377798 0.0115875882558584 7.25548703780472e-13 1.04531200954802e-13 1.72842207332373e-12 2.64063313166711e-13 12599210498.9563 0.0353472283023716 -0.00396419253985983 0.245801089232323 0.0140408825998904 6.77871568842243e-13 9.85436304449305e-14 1.61092128752657e-12 2.4921068544549e-13 15874010519.701 0.0459183348688369 -0.0052962926935875 0.219844542852861 0.0173112939637162 6.14276809145362e-13 9.05629072007036e-14 1.45447044818257e-12 2.29506629621304e-13 20000000000 0.0590170132832176 -0.00694915522617574 0.18768654565028 0.0213654134030484 5.35484909123575e-13 8.06780944492858e-14 1.26079241376824e-12 2.05160452988686e-13 10000000000 0.0508661898622878 -0.00574305937850091 0.209512097436196 0.0204741091150177 9.39804193276284e-13 1.30111944183838e-13 2.16784185775853e-12 3.16050504268451e-13 12599210498.9563 0.0637077656677519 -0.00733948761816539 0.179213477533479 0.0242435822460469 8.17160819166381e-13 1.14892600411605e-13 1.87808309397081e-12 2.80008188278287e-13 15874010519.701 0.0782427860721477 -0.00914828648274574 0.144923735627804 0.0285109054164867 6.78354832338555e-13 9.76731686494169e-14 1.55032683351992e-12 2.39285391739752e-13 20000000000 0.0931026696193337 -0.0110011758986905 0.109873015392116 0.0328786672621674 5.36477130592082e-13 8.00751660364758e-14 1.21541531795621e-12 1.9770029047082e-13 10000000000 0.071592796185328 -0.00791770131310667 0.163645602173845 0.0275859613474616 1.03738898803053e-12 1.38207275477974e-13 2.2456454741409e-12 3.16776438412505e-13 12599210498.9563 0.0863766699316904 -0.00969530487240845 0.131021018907631 0.0315121593531569 8.52513000517694e-13 1.16014631477415e-13 1.8373063184606e-12 2.67685518635182e-13 15874010519.701 0.101228479524344 -0.0114834632007945 0.0982503813161054 0.0354589008872523 6.66810434703954e-13 9.37280599626736e-14 1.42727298498208e-12 2.18420317701896e-13 20000000000 0.114685304196952 -0.0131081192305237 0.0685626653596589 0.0390419888672239 4.98599829632762e-13 7.35428558003612e-14 1.05592669463584e-12 1.73819453646615e-13 10000000000 0.085709932316627 -0.00904525892641554 0.137996349562226 0.0318150850170925 1.0865317931834e-12 1.38791440270703e-13 2.20301991670083e-12 3.00624058673486e-13 12599210498.9563 0.101101317431679 -0.0108170144934846 0.106250807671592 0.0354734479400796 8.65796623478023e-13 1.13423660312668e-13 1.7474116311332e-12 2.482031907654e-13 15874010519.701 0.115635536659473 -0.0124927643247868 0.0762764376960854 0.0389315112064549 6.57384263741106e-13 8.94774780591716e-14 1.31734228554029e-12 1.98741081662345e-13 20000000000 0.128070186350385 -0.013931280551053 0.0506360491021478 0.0418981462155375 4.79137848023839e-13 6.89993767958765e-14 9.4957175217885e-13 1.56454873752848e-13 10000000000 0.0956920704252251 -0.00958383361187358 0.124367994829318 0.0344960010185593 1.12574535787917e-12 1.38179539120665e-13 2.16191284590478e-12 2.85844236391555e-13 12599210498.9563 0.111477421675054 -0.011325850993916 0.0935832772563605 0.037897788553752 8.8227105370698e-13 1.11354201724114e-13 1.68678185129195e-12 2.33450590797374e-13 15874010519.701 0.125911423609207 -0.012921559340637 0.0654366584606142 0.0410123351580127 6.59672971851831e-13 8.68347888634743e-14 1.25247994155531e-12 1.85573595000899e-13 20000000000 0.137912514805792 -0.0142533593359817 0.0420374265465241 0.0436106585479649 4.74658231782209e-13 6.6457432714514e-14 8.91547935292687e-13 1.45792617075026e-13 10000000000 0.103925157493669 -0.00995703648582297 0.115802884387131 0.0367061215237591 1.16076201624561e-12 1.38299950894196e-13 2.13794920981255e-12 2.76151620136652e-13 12599210498.9563 0.120049813385082 -0.011682328484646 0.0856852518750087 0.0399334634200952 8.99648296043883e-13 1.10405159941159e-13 1.64995628621516e-12 2.23992227932478e-13 15874010519.701 0.13448666524538 -0.0132299522317465 0.0587223711762577 0.0428273346946632 6.65900573758586e-13 8.5440313848301e-14 1.21318808724555e-12 1.77317406560296e-13 20000000000 0.146273061127695 -0.0144986401842219 0.0367121060565637 0.0451990980619983 4.75132033501464e-13 6.50681947390527e-14 8.56766392849856e-13 1.39234060956558e-13 10000000000 0.111734370667967 -0.0104128904649005 0.108716917228901 0.0390164160972097 1.19016054445252e-12 1.39847671708565e-13 2.12350168806748e-12 2.71660223524656e-13 12599210498.9563 0.128096844458306 -0.0121410256999819 0.0791442341008447 0.0421448564426321 9.13387170995655e-13 1.10658554639817e-13 1.62301033437694e-12 2.18870257772532e-13 15874010519.701 0.142478430545271 -0.0136629416551433 0.0531536468740671 0.0448991851489067 6.70156908548568e-13 8.5014056958188e-14 1.18324801930338e-12 1.72490567316097e-13 20000000000 0.154036616063867 -0.0148913563974659 0.032267549763656 0.047122275923338 4.74744884667004e-13 6.44138829435819e-14 8.29975538710408e-13 1.3523564760988e-13 10000000000 0.119766849239077 -0.0110888502590636 0.101406578534563 0.0417325944412513 1.21207700884272e-12 1.43116821638487e-13 2.10922697054896e-12 2.71772018964034e-13 12599210498.9563 0.136209232616443 -0.0128394611037245 0.0724479683898685 0.0448210883165979 9.20629226554467e-13 1.12127214985527e-13 1.59567820860332e-12 2.17181071279108e-13 15874010519.701 0.150384152882277 -0.0143517011867837 0.0474845199826239 0.0474885345739349 6.69411055972424e-13 8.54229494596719e-14 1.1530813366413e-12 1.70132922699765e-13 20000000000 0.16159347324946 -0.0155528928456925 0.0277453832852767 0.0496076414855403 4.7082047458525e-13 6.43159062152896e-14 8.03234117633266e-13 1.3294510358604e-13 10000000000 0.128308642865015 -0.0120672768772643 0.0930889110202163 0.0450425272718429 1.22485686174137e-12 1.48126365591507e-13 2.08711509992067e-12 2.75637820827544e-13 12599210498.9563 0.144628351292868 -0.0138562572035398 0.0649629566790954 0.0481311462537265 9.19725119625647e-13 1.14715797552092e-13 1.5610162013409e-12 2.18069843528744e-13 15874010519.701 0.158399833140973 -0.0153689749292909 0.0412301238307046 0.0507425702735255 6.62278080132606e-13 8.65347865674705e-14 1.11719035011105e-12 1.69501186681697e-13 20000000000 0.169100668940517 -0.0165497488281168 0.0227902793533061 0.052781615968955 4.62305959186647e-13 6.46483468339411e-14 7.72474619219772e-13 1.31777488436853e-13 10000000000 0.137447123585249 -0.0134029396165797 0.0834734227258849 0.0490732560437965 1.22692717105041e-12 1.54633958315688e-13 2.05065441110345e-12 2.82173594076542e-13 12599210498.9563 0.153408022800596 -0.0152386906119699 0.0565050803769225 0.0521805667148527 9.09676959069754e-13 1.18180549039157e-13 1.51441258615059e-12 2.2061812989403e-13 15874010519.701 0.166563548687005 -0.0167548670353692 0.034278023996607 0.0547469702475154 6.48231246211983e-13 8.81480431373619e-14 1.07254390597369e-12 1.69889192856846e-13 20000000000 0.176594211255291 -0.0179162273123468 0.0173315489851769 0.0567137595953531 4.48962093653491e-13 6.526115113798e-14 7.35781802909944e-13 1.31224647242438e-13 10000000000 0.147141083259582 -0.0151310895929893 0.0725875045743104 0.053901085273619 1.21683458390824e-12 1.62137546995856e-13 1.99498002397481e-12 2.90031995123803e-13 12599210498.9563 0.162487729038412 -0.0170112068934212 0.0471602274953056 0.0570217926717352 8.89956360465184e-13 1.22123571335486e-13 1.45321530543357e-12 2.23797763959458e-13 15874010519.701 0.17482206443916 -0.0185253612368445 0.0267248914749108 0.0595353427377773 6.27285345106438e-13 8.99783516333532e-14 1.01790627870225e-12 1.70569270552054e-13 20000000000 0.184041940964573 -0.0196624479248349 0.0114501910968656 0.0614242274313684 4.31018053475648e-13 6.59629290755028e-14 6.92662317091095e-13 1.30795597022409e-13 10000000000 6.58037686868478e-05 -1.68186938198063e-05 0.00722301908944892 0.000112524479784715 7.1550342406306e-14 2.55851832943258e-14 2.8143873142451e-14 5.52574843586339e-14 12599210498.9563 9.30079141126097e-05 -2.66041690683492e-05 0.0072116650223072 0.000127515745233453 7.15449058881834e-14 2.55831274323495e-14 2.81372592023837e-14 5.50621532766976e-14 15874010519.701 0.000136181159581127 -4.2127999173265e-05 0.0071937282969149 0.000147095564994315 7.15362800849262e-14 2.55801329780794e-14 2.81308912679896e-14 5.49277157122675e-14 20000000000 0.000204687837511114 -6.67579878672875e-05 0.00716532298947187 0.000175236217983932 7.15225944899532e-14 2.55755680957871e-14 2.8123616020387e-14 5.48366329695939e-14 10000000000 7.5098628018867e-05 -1.69767511732239e-05 0.0103155921958363 0.000113042931285001 7.23333082594762e-14 2.56103531643083e-14 2.93147343009526e-14 5.54036967811274e-14 12599210498.9563 0.00010318371080388 -2.68504699615288e-05 0.0103034142954195 0.000128170772540848 7.23275755408888e-14 2.56082542534598e-14 2.93057188045095e-14 5.52083241386616e-14 15874010519.701 0.000147754487368495 -4.25142293193823e-05 0.0102842030319233 0.00014796690825053 7.23184785722145e-14 2.56051918882809e-14 2.92975600735911e-14 5.50738203341092e-14 20000000000 0.000218477507938827 -6.73659802083092e-05 0.010253798556239 0.000176450419166974 7.23040449858035e-14 2.56005195705933e-14 2.92888061957417e-14 5.49826332244025e-14 10000000000 8.82538725422635e-05 -1.71847150055264e-05 0.0146519349979356 0.000113748385371315 7.34208246817847e-14 2.56359593623523e-14 3.09995246696375e-14 5.55994020360355e-14 12599210498.9563 0.000117594997908821 -2.71747029358504e-05 0.014638540901582 0.000129067044162323 7.34146604383851e-14 2.56338007095166e-14 3.09867556846807e-14 5.54039796997494e-14 15874010519.701 0.000164158316771646 -4.30228171613578e-05 0.0146174457660967 0.000149165391286343 7.34048752396897e-14 2.56306440640438e-14 3.09758185478645e-14 5.52693865742301e-14 20000000000 0.00023804115182932 -6.81666954415071e-05 0.0145840847788456 0.000178127873408096 7.33893479551986e-14 2.56258225727279e-14 3.09647846405851e-14 5.51780524492835e-14 10000000000 0.000106854041097049 -1.7459419809122e-05 0.0206506651928922 0.000114697987456558 7.49168911261084e-14 2.56620838926962e-14 3.34223007766879e-14 5.58613910076351e-14 12599210498.9563 0.0001379826230628 -2.76033140669833e-05 0.0206354587940795 0.00013028469957671 7.49100950486197e-14 2.56598418883798e-14 3.34036224834194e-14 5.56659147789424e-14 15874010519.701 0.000187381379647783 -4.36954363364325e-05 0.0206115517349125 0.000150807562630695 7.48992987380911e-14 2.56565537240438e-14 3.33883382441038e-14 5.55312026467275e-14 20000000000 0.000265760399143127 -6.92259045021369e-05 0.0205737745921175 0.000180442805817305 7.48821625623654e-14 2.56515241577459e-14 3.33737507361613e-14 5.54396604432223e-14 10000000000 0.000133078186795742 -1.78205851036003e-05 0.0287974484528756 0.000115954717903655 7.69429067292696e-14 2.56888452171368e-14 3.6892454722923e-14 5.6209300357303e-14 12599210498.9563 0.000166735767816356 -2.81673435726478e-05 0.0287795196847261 0.000131918002584053 7.6935182564565e-14 2.56864869601759e-14 3.68644692658034e-14 5.6013776992403e-14 15874010519.701 0.000220146025767222 -4.45810534683417e-05 0.0287513799140672 0.000153037214182861 7.69228947785836e-14 2.56830154979924e-14 3.68423656252297e-14 5.58789092722284e-14 20000000000 0.000304885503437925 -7.06209198322717e-05 0.028706949387039 0.000183617445258633 7.69033815456651e-14 2.56776960400368e-14 3.68222039234761e-14 5.57870719089945e-14 10000000000 0.000169872524446662 -1.82890553059405e-05 0.0395953058643652 0.000117579143020408 7.96264567486293e-14 2.57164106922371e-14 4.18191366537963e-14 5.66637432432372e-14 12599210498.9563 0.000207070723705068 -2.88996984681006e-05 0.0395732677100786 0.000134068216032346 7.96173690993202e-14 2.57138913139025e-14 4.17766318430985e-14 5.64682026483582e-14 15874010519.701 0.000266096632274764 -4.57316598345449e-05 0.0395387235689059 0.000156020023933334 7.96028789625255e-14 2.57101661738694e-14 4.17438950363058e-14 5.63331367148041e-14 20000000000 0.000359738802243985 -7.24338667865202e-05 0.0394842160683849 0.00018791943702634 7.95798490050322e-14 2.57044457852115e-14 4.17149937630397e-14 5.62408808656225e-14 10000000000 0.00022114304156643 -1.88833837443085e-05 0.0534715262005737 0.000119616777820575 8.30797732841005e-14 2.57450080728761e-14 4.87065004794319e-14 5.7242731790052e-14 12599210498.9563 0.000263216887496591 -2.98298355813963e-05 0.0534432919255815 0.000136830164692015 8.3068692435442e-14 2.57422682326943e-14 4.86418372552401e-14 5.7047245494147e-14 15874010519.701 0.000329974956739379 -4.71939310190497e-05 0.0533990671701114 0.000159928829008171 8.30509635651034e-14 2.57381968045668e-14 4.85928016237176e-14 5.69119351736899e-14 20000000000 0.000435872821086712 -7.47385297399135e-05 0.0533293122783998 0.00019364501585456 8.30227506121854e-14 2.57319297129821e-14 4.85503297666773e-14 5.68190884313601e-14 10000000000 0.000291970290882984 -1.96150733813217e-05 0.0706504692689139 0.000122085140075001 8.73700214741466e-14 2.57749307985584e-14 5.81102867273829e-14 5.79567262233185e-14 12599210498.9563 0.000340602224113097 -3.09763454356997e-05 0.0706129876755655 0.000140274870070678 8.73560635880292e-14 2.57718951550472e-14 5.80129792247481e-14 5.77614311743542e-14 15874010519.701 0.000417758866192321 -4.89975902818429e-05 0.070554280236223 0.000164919223613502 8.73336276016368e-14 2.57673607946994e-14 5.79396760611026e-14 5.76258311172808e-14 20000000000 0.000540134371370813 -7.75820083666221e-05 0.0704616932743738 0.000201083368945032 8.7297863074751e-14 2.57603640710072e-14 5.78765517527662e-14 5.75321580191866e-14 10000000000 0.000388876292151663 -2.04839877636215e-05 0.0910332065261212 0.00012496980401655 9.24910509570972e-14 2.58065306437029e-14 7.05436658111146e-14 5.88038861575373e-14 12599210498.9563 0.000446064027487421 -3.23398068010033e-05 0.0909822177171734 0.000144436685271032 9.24730320899144e-14 2.58031081410246e-14 7.04004913743586e-14 5.86090093274661e-14 15874010519.701 0.000536783818903193 -5.11442089070312e-05 0.0909023103389788 0.000171102520862776 9.2443898739859e-14 2.57979717194808e-14 7.0292471432905e-14 5.84730809814423e-14 20000000000 0.000680643904731392 -8.09670922765226e-05 0.090776276284013 0.000210467042884743 9.23973594483618e-14 2.57900284842004e-14 7.01988509274549e-14 5.8378271805446e-14 10000000000 0.000520217420955695 -2.14763618288709e-05 0.114147349301235 0.000128240663434642 9.83516226738541e-14 2.58401962257282e-14 8.63496097858912e-14 5.97680041995792e-14 12599210498.9563 0.000588172003236071 -3.38997012680032e-05 0.114077264786774 0.000149317986686825 9.83280535645583e-14 2.58362823347028e-14 8.61455032051231e-14 5.95738798384375e-14 15874010519.701 0.000695955086994676 -5.3602394158303e-05 0.113967333140867 0.0001785320813113 9.82896791450611e-14 2.58303876586189e-14 8.59901312296489e-14 5.94375979265501e-14 20000000000 0.000866831634335402 -8.48447426085633e-05 0.11379390539398 0.00022192911188168 9.82282238032032e-14 2.58212569218326e-14 8.58531600271256e-14 5.93412659776471e-14 10000000000 0.000696803748877224 -2.25672658309116e-05 0.139210850430072 0.000131892871982342 1.04790672437651e-13 2.58763319875472e-14 1.05594567301617e-13 6.08208944478997e-14 12599210498.9563 0.000777796656156201 -3.56182386942294e-05 0.139114849709333 0.000154921017043286 1.04759814831947e-13 2.58718115383091e-14 1.05314216217254e-13 6.06279645115033e-14 15874010519.701 0.000906235404526894 -5.63137961179159e-05 0.138964115189587 0.000187220751940664 1.04709160511173e-13 2.58649929318997e-14 1.05097460410644e-13 6.04913213746808e-14 20000000000 0.00110979738474124 -8.91236126389352e-05 0.138726263096802 0.000235497821106934 1.04627804373649e-13 2.58544236226229e-14 1.04901423918981e-13 6.03930123621458e-14 10000000000 0.000932811361299599 -2.37272243612218e-05 0.165290292027575 0.000136003955860886 1.11615525436951e-13 2.59153809761274e-14 1.28044536672438e-13 6.19286097965551e-14 12599210498.9563 0.0010290224040713 -3.745053069627e-05 0.165160635968471 0.000161303875951036 1.11575505021591e-13 2.59101286756781e-14 1.27674197980733e-13 6.17374003088581e-14 15874010519.701 0.00118155963882779 -5.92089395071835e-05 0.164956864214814 0.000197195136301731 1.11509175551867e-13 2.59022167774436e-14 1.27381683199747e-13 6.16004030602797e-14 20000000000 0.00142322848538572 -9.36949021853205e-05 0.164635270378445 0.000251148261871559 1.11402286690296e-13 2.58899601080363e-14 1.27108526962871e-13 6.14996125697128e-14 10000000000 0.00124696255814644 -2.49308571849343e-05 0.191477825398221 0.000140791685468822 1.18646065233312e-13 2.59579723580159e-14 1.53240330012726e-13 6.30587498915478e-14 12599210498.9563 0.00136038727356604 -3.93576363646778e-05 0.191306265345534 0.000168646795399408 1.18595004694671e-13 2.59518474730679e-14 1.52769257321399e-13 6.28698201307055e-14 15874010519.701 0.00154016916420737 -6.22272606213501e-05 0.191036418153462 0.000208575261856137 1.18509407784527e-13 2.59426686020435e-14 1.5238720185156e-13 6.27324732544903e-14 20000000000 0.00182488503832766 -9.846349017434e-05 0.190610519306811 0.000268903419575695 1.18370928952498e-13 2.59284819950534e-14 1.52017188495593e-13 6.26286590764463e-14 10000000000 0.00166385592564252 -2.61658871103955e-05 0.217012268364232 0.000146664621439141 1.257485202698e-13 2.60053175778159e-14 1.80632302344817e-13 6.41863072956582e-14 12599210498.9563 0.001796309466427 -4.13196828704484e-05 0.216790367050977 0.000177317624802054 1.25684638102695e-13 2.59981495739501e-14 1.80053396752897e-13 6.40001712592123e-14 15874010519.701 0.00200619149589698 -6.53367301290355e-05 0.216441115376388 0.000221663776653003 1.25576077514771e-13 2.59875148155319e-14 1.79569095714144e-13 6.38624360211488e-14 20000000000 0.00233842226800449 -0.0001033778136731 0.215889923000657 0.00028896100577086 1.25399635488588e-13 2.59711520986044e-14 1.79081237653381e-13 6.37550067871249e-14 10000000000 0.00221527044517254 -2.74434989389665e-05 0.241318457448665 0.000154270938162116 1.32854082414973e-13 2.60600289338136e-14 2.09718500895223e-13 6.52976085138241e-14 12599210498.9563 0.00236849922536419 -4.335017317687e-05 0.241037656876195 0.000187938709659608 1.32775700014766e-13 2.60515910355556e-14 2.09028119049904e-13 6.51146265631401e-14 15874010519.701 0.00261122250073048 -6.85543724710208e-05 0.240595493642348 0.000237041390570403 1.3264031365818e-13 2.60392717215664e-14 2.08429764557666e-13 6.49763470560783e-14 20000000000 0.00299524137122378 -0.00010846010747397 0.239897782028711 0.000311834002205857 1.32419077696091e-13 2.60204553133669e-14 2.07801632410926e-13 6.48646068562392e-14 10000000000 0.0029412208110562 -2.88144652359583e-05 0.263984948482294 0.000164559189632429 1.39968258649676e-13 2.6127604923646e-14 2.40156885160759e-13 6.63940125609381e-14 12599210498.9563 0.00311712674003043 -4.55173704750473e-05 0.263636262440784 0.000201469292862577 1.39873651146197e-13 2.61175716010867e-14 2.39353876137894e-13 6.6214245060315e-14 15874010519.701 0.00339567144431445 -7.19758990313373e-05 0.263087022755238 0.000255683378035942 1.39707099602466e-13 2.61032563829062e-14 2.38629540031036e-13 6.60750254819169e-14 20000000000 0.00383611182001413 -0.000113848886739512 0.262220584796771 0.000338520702289125 1.39433245727446e-13 2.608162492037e-14 2.37835991685576e-13 6.59580487810249e-14 10000000000 0.00389048530137963 -3.04003162551188e-05 0.284715423187307 0.00017887217303969 1.4718090287641e-13 2.62189950646012e-14 2.71858109597246e-13 6.7498191120961e-14 12599210498.9563 0.00409148665978053 -4.7984695960327e-05 0.284288626835953 0.000219330851198019 1.47067894634666e-13 2.62068767325733e-14 2.70942021007952e-13 6.73211952670158e-14 15874010519.701 0.00440963942092159 -7.5830576813897e-05 0.283616217149243 0.000279134383376012 1.46864658505353e-13 2.61901007504569e-14 2.70077462033471e-13 6.71801996193133e-14 20000000000 0.00491238194569319 -0.000119876348571718 0.28255588340753 0.000370756835825992 1.46528228161527e-13 2.6165118006111e-14 2.69087611194242e-13 6.70565919541397e-14 10000000000 0.0051203550430977 -3.24621413004313e-05 0.303280942361666 0.000199136836510738 1.54689657853374e-13 2.63552767423415e-14 3.05095037079346e-13 6.86672815261195e-14 12599210498.9563 0.00534996476609529 -5.10981737247262e-05 0.302763005584218 0.000243654359516177 1.54554761475373e-13 2.63403179821212e-14 3.04063026192576e-13 6.84918112926425e-14 15874010519.701 0.00571322530791269 -8.05979089542618e-05 0.301946948348215 0.00030984570617687 1.54306753778695e-13 2.63203425359797e-14 3.03037489149338e-13 6.83474225865629e-14 20000000000 0.00628680904246421 -0.000127230574368263 0.300660766135618 0.000411493226614046 1.53893464077395e-13 2.62911338743418e-14 3.01808553151116e-13 6.82148688831392e-14 10000000000 0.00669581791462014 -3.55776153615563e-05 0.319484886864715 0.000228390159365544 1.62867894377091e-13 2.65778838828166e-14 3.40726860319778e-13 7.00236617886054e-14 12599210498.9563 0.00695970081550499 -5.56080481477654e-05 0.31885690227504 0.000277937249580695 1.62704462469081e-13 2.65588876023687e-14 3.39567816204719e-13 6.98471641368358e-14 15874010519.701 0.00737693546202625 -8.72991521021227e-05 0.31786752911445 0.000352037820731677 1.62398151941523e-13 2.65344692240467e-14 3.38345502717713e-13 6.96963298957271e-14 20000000000 0.00803512149889718 -0.000137355825412254 0.31630930348851 0.000466078423701388 1.61884925216049e-13 2.64994889797247e-14 3.36809936236676e-13 6.95506567995801e-14 10000000000 0.00869034560822371 -4.11711646027432e-05 0.333135818684184 0.00027251115557414 1.72484956956636e-13 2.69763944162566e-14 3.80867201315648e-13 7.18396925070806e-14 12599210498.9563 0.00899879082338965 -6.33296154091078e-05 0.332365736350075 0.000329153565025664 1.72278546970853e-13 2.69513375133487e-14 3.79547931809231e-13 7.16572213479155e-14 15874010519.701 0.00948609251750655 -9.83627859632893e-05 0.331152838691901 0.000414402958645754 1.71887802126084e-13 2.6920170945032e-14 3.78057163463177e-13 7.14938770253434e-14 20000000000 0.0102538316280215 -0.000153635993168427 0.329244568638071 0.000545882355134808 1.71231698975299e-13 2.68763620898651e-14 3.76090732811512e-13 7.13266720599958e-14 10000000000 0.0111970945843893 -5.32501816966073e-05 0.343996203528554 0.000346111557807283 1.85433372949151e-13 2.77727478064019e-14 4.31097129066225e-13 7.4797167610576e-14 12599210498.9563 0.0115724028255702 -7.93242634414907e-05 0.343017090112992 0.000414941918192968 1.85147103325378e-13 2.77376267469989e-14 4.29519751989034e-13 7.45981096231021e-14 15874010519.701 0.0121645973402017 -0.000120500442994322 0.341476035621387 0.000519320515081023 1.84610496102952e-13 2.76945763491283e-14 4.2758728829693e-13 7.44081414583466e-14 20000000000 0.0130957529554982 -0.000185345974417244 0.339055671095156 0.000680651780325392 1.83713633014176e-13 2.76346434293685e-14 4.24907733200294e-13 7.4198970491487e-14 10000000000 0.0143804670180362 -8.42450783475257e-05 0.351606074947972 0.000492069474747336 2.06947035488327e-13 2.95694384599207e-14 5.07358521144875e-13 8.07650107758464e-14 12599210498.9563 0.0148824384913381 -0.000119396171887632 0.350240117452362 0.000588072360316827 2.06463925431615e-13 2.95136368174655e-14 5.05191755422856e-13 8.05196980231507e-14 15874010519.701 0.0156725512444739 -0.000174774733340866 0.348094080407451 0.000734985816214839 2.05595232113837e-13 2.94435334099971e-14 5.02281023382365e-13 8.02600663335313e-14 20000000000 0.0169101230799475 -0.000261657554457892 0.344735581149998 0.000962388172483508 2.04167032026033e-13 2.93448199630317e-14 4.98045032132484e-13 7.99441876849049e-14 10000000000 0.0186643748649856 -0.000174721795896081 0.354684829909946 0.000844597264858693 2.51176470925295e-13 3.39678273010339e-14 6.5362454085782e-13 9.47696480454502e-14 12599210498.9563 0.0194844019301698 -0.000236437315663922 0.35235712790386 0.00101975276814675 2.50018705186028e-13 3.384995105935e-14 6.49466713864857e-13 9.43577733783624e-14 15874010519.701 0.0207668929359286 -0.000333048275084715 0.348720821866179 0.00128959253920169 2.48074890535983e-13 3.36902704633065e-14 6.43388897495381e-13 9.38457761222107e-14 20000000000 0.022755672385273 -0.000483108270869858 0.3430850182312 0.00170553746421426 2.44978153775321e-13 3.34579907351448e-14 6.34239131403362e-13 9.31454911796915e-14 10000000000 0.0253436102906688 -0.000458101286236336 0.349281820268214 0.00182663565885649 3.49257759594075e-13 4.44767263624362e-14 9.67744881692558e-13 1.27916547503648e-13 12599210498.9563 0.0271440454058471 -0.000610919028445738 0.343968682466823 0.00227732205058329 3.44938022623679e-13 4.40691022285725e-14 9.54108235673005e-13 1.26655535143458e-13 15874010519.701 0.0299014250123787 -0.000845177549819884 0.335835877463539 0.00296380316145301 3.38168289616915e-13 4.34775691278432e-14 9.33557171341212e-13 1.24863052900947e-13 20000000000 0.0340419722517173 -0.00119749797665859 0.323626982693482 0.00399280105941074 3.27909759449237e-13 4.26093053397837e-14 9.02913330689462e-13 1.22267079802806e-13 10000000000 0.0379224502502151 -0.00130987546484921 0.324912791542746 0.00458620620168348 5.35028342492133e-13 6.50104076680886e-14 1.5549197005825e-12 1.92486008147313e-13 12599210498.9563 0.042589777767464 -0.00175006477206885 0.310781634175201 0.00591857879274105 5.14456214269952e-13 6.30201420633498e-14 1.49173463616178e-12 1.8642400789491e-13 15874010519.701 0.0492629363310188 -0.0023800363939144 0.290582118027736 0.00782091540898072 4.84887742159612e-13 6.02136431270562e-14 1.40162799708483e-12 1.77893501198703e-13 20000000000 0.0583335103614151 -0.00323775352327012 0.263130362944161 0.0104067402992841 4.44611471886631e-13 5.6421648253733e-14 1.27930501946514e-12 1.66387049692048e-13 10000000000 0.0606364697686895 -0.00320668053292691 0.269829026707746 0.0104899813920378 7.53849524676332e-13 8.97534550743927e-14 2.23452466998931e-12 2.69292639802896e-13 12599210498.9563 0.0701534484888406 -0.00415827798361884 0.24080457376758 0.0133918125745973 6.79935367317749e-13 8.23076322295042e-14 2.00820874880326e-12 2.46572400054407e-13 15874010519.701 0.0818307907386648 -0.00532725952993347 0.205196664244598 0.0169519604083721 5.8912354667734e-13 7.32102710233231e-14 1.73067359877854e-12 2.18809206804894e-13 20000000000 0.0948974476539405 -0.00663817456194861 0.165358714892506 0.0209389025122393 4.87461033011112e-13 6.30518136071241e-14 1.42025098225706e-12 1.87812332693998e-13 10000000000 0.0879722669654591 -0.00557261789698109 0.203271790995875 0.0175584722864504 8.64348162001034e-13 1.02647216924819e-13 2.55237474677419e-12 3.06758659667838e-13 12599210498.9563 0.100217197632712 -0.00682388888944708 0.166235247479202 0.0213430269793079 7.20656082735811e-13 8.79056978696376e-14 2.11687971615066e-12 2.62183051586211e-13 15874010519.701 0.112869288812526 -0.00811885858881859 0.127972461036119 0.0252552033226827 5.72116511289617e-13 7.27081189288125e-14 1.66703369789176e-12 2.16213037678514e-13 20000000000 0.124649304776395 -0.00932852509042104 0.0923543109326954 0.0289034965013242 4.3381359657744e-13 5.85769863762205e-14 1.24835324987181e-12 1.73465598875646e-13 10000000000 0.109023199627049 -0.00720588164718988 0.158853362250568 0.0220978907859264 8.76543174934945e-13 1.03986614631777e-13 2.54427147613152e-12 3.0627001617114e-13 12599210498.9563 0.12133110337423 -0.00846437519253107 0.122310369618042 0.0258346604428817 6.94288034942097e-13 8.52866464898633e-14 2.00229330622957e-12 2.50784708580872e-13 15874010519.701 0.132782968954704 -0.0096378119459044 0.088314011365054 0.0293145415513999 5.24669744300262e-13 6.79192386134478e-14 1.49813942069003e-12 1.99232353342813e-13 20000000000 0.142452035947231 -0.0106330321709583 0.0596172023717488 0.0322597568579251 3.81481736912927e-13 5.32738841717762e-14 1.07265731311065e-12 1.55753448850373e-13 10000000000 0.122198704935275 -0.00793529160706884 0.138893367676967 0.0238372451593554 8.72544537336392e-13 1.02817439674068e-13 2.47779893748658e-12 2.9730321832781e-13 12599210498.9563 0.134210866706483 -0.00915168827391577 0.104034079318211 0.0273677845494246 6.76076310797221e-13 8.28457510279665e-14 1.90682694124125e-12 2.39404218382581e-13 15874010519.701 0.144914656593506 -0.0102382185046206 0.0729762602085086 0.0305173375882188 5.00978479507346e-13 6.50824494425342e-14 1.39816868569588e-12 1.87882306431942e-13 20000000000 0.153618275460523 -0.011126364222362 0.0477285336870823 0.033086028175863 3.58633914009912e-13 5.06574506567592e-14 9.84752809414066e-13 1.46034379636216e-13 10000000000 0.130410727754282 -0.00811740837165999 0.132510706427554 0.0240413841644974 8.75643806501988e-13 1.0217353567736e-13 2.43560169628213e-12 2.90326866311607e-13 12599210498.9563 0.142393626714056 -0.00931593112460662 0.0984844667320477 0.0274455344833914 6.7447950825222e-13 8.19590070895269e-14 1.8635874724328e-12 2.33007145373112e-13 15874010519.701 0.152954060585657 -0.0103748483092988 0.0685015871149095 0.0304493655773947 4.97165320038814e-13 6.41806697394168e-14 1.35958653107061e-12 1.82565550574513e-13 20000000000 0.161460877338198 -0.0112325545264602 0.0443550737387147 0.0328770337178189 3.54365175208811e-13 4.98799067452914e-14 9.5377721686492e-13 1.41979879995835e-13 10000000000 0.13606831592997 -0.00805548619438541 0.131844766004621 0.0236536426414162 8.81580388233547e-13 1.02056927892725e-13 2.41101705109664e-12 2.85890888718021e-13 12599210498.9563 0.148164053281512 -0.00925373377348752 0.0981055129049653 0.0269970940339631 6.79774616214979e-13 8.19501330570666e-14 1.84733877667499e-12 2.29908838648256e-13 15874010519.701 0.158851456923807 -0.0103151350684471 0.0682984504799752 0.0299551062517451 5.01430722018991e-13 6.42261518874229e-14 1.34938616702355e-12 1.8052563907493e-13 20000000000 0.167479247929861 -0.01117670412429 0.0442408660406632 0.0323511796749684 3.57484823419042e-13 4.99402154504003e-14 9.47563200512787e-13 1.40708328973374e-13 10000000000 6.0992656101883e-05 -1.58282920577681e-05 0.00726537233497705 9.77747104529691e-05 7.06016594883203e-14 2.46308673848769e-14 2.71487532995007e-14 5.31448597869951e-14 12599210498.9563 8.72207540781175e-05 -2.46734015509386e-05 0.00725502086690671 0.000111187716821837 7.05965275959797e-14 2.4629092450143e-14 2.71425000872781e-14 5.29745553474207e-14 15874010519.701 0.000128845400802131 -3.87058286536424e-05 0.00723866627882527 0.000128731062833232 7.05883832218823e-14 2.46265048322578e-14 2.71366225037877e-14 5.28570080146872e-14 20000000000 0.000194895766661561 -6.09702207313736e-05 0.00721276509010538 0.000153955661237881 7.05754601079217e-14 2.46225589609008e-14 2.71300531200357e-14 5.27772608666501e-14 10000000000 6.92778665296925e-05 -1.61909079465103e-05 0.0103880648704585 9.846501069255e-05 7.13790772546166e-14 2.46447535063651e-14 2.82964783115111e-14 5.32690828820588e-14 12599210498.9563 9.63694894257091e-05 -2.5108195683038e-05 0.0103769299287855 0.000111993243054442 7.13736607875374e-14 2.4642942529128e-14 2.82876537921664e-14 5.30987483216394e-14 15874010519.701 0.00013936407202838 -3.92550780238588e-05 0.0103593615386364 0.000129719101212455 7.13650620925452e-14 2.46402978802097e-14 2.82798988471872e-14 5.29811487170659e-14 20000000000 0.000207587078487563 -6.17008555146351e-05 0.0103315552718436 0.000155232990856735 7.13514166718738e-14 2.46362616633477e-14 2.8271821021128e-14 5.29013165930271e-14 10000000000 8.12295040011763e-05 -1.66814262765853e-05 0.014778318011068 9.94068748003119e-05 7.24661008360186e-14 2.46587441353636e-14 2.99592644359861e-14 5.34383669181399e-14 12599210498.9563 0.000109561512731485 -2.56962296308996e-05 0.0147660162677582 0.000113098545618084 7.24602673120457e-14 2.46568822499034e-14 2.99462440144207e-14 5.32679986431565e-14 15874010519.701 0.000154523841319966 -3.9997733954431e-05 0.0147466378748575 0.000131083272954358 7.24510001893009e-14 2.465415705831e-14 2.99354589456489e-14 5.31503289079559e-14 20000000000 0.000225867428519124 -6.26885210845264e-05 0.0147159891927147 0.000157007461755176 7.24362904577058e-14 2.46499932592756e-14 2.99249749793596e-14 5.30703761497443e-14 10000000000 9.85192526731695e-05 -1.73420762322624e-05 0.0208725217343008 0.000100677239299962 7.39712314002378e-14 2.46728071523213e-14 3.23681857283399e-14 5.36682451995624e-14 12599210498.9563 0.000128629956876493 -2.64885887584428e-05 0.0208584642362916 0.00011460148604292 7.39647836385758e-14 2.46708731750849e-14 3.23482589182134e-14 5.34978458665344e-14 15874010519.701 0.000176413883986941 -4.09989134389506e-05 0.0208363576387232 0.000132954576184785 7.39545270037445e-14 2.46680339982149e-14 3.23325331927941e-14 5.33800839554571e-14 20000000000 0.000252231836501454 -6.40205408164991e-05 0.0208014214853081 0.000159462568747049 7.39382386090364e-14 2.46636896959251e-14 3.23181627734802e-14 5.32999595203423e-14 10000000000 0.000123581515982635 -1.82239309812009e-05 0.0291843875583936 0.000102360379025446 7.60234666140336e-14 2.4686903954531e-14 3.58479776376524e-14 5.39770605022364e-14 12599210498.9563 0.000156230335786338 -2.75469104833211e-05 0.0291676620975365 0.000116615238020312 7.60161108359341e-14 2.46848680624681e-14 3.5816686962979e-14 5.38066474410318e-14 15874010519.701 0.000208040305276505 -4.23369834282544e-05 0.0291414013467444 0.000135491942200416 7.60043817628785e-14 2.46818679456308e-14 3.5792887104108e-14 5.36887679820866e-14 20000000000 0.000290241941995341 -6.58017367438894e-05 0.0290999310862275 0.000162829714252188 7.59857383688969e-14 2.46772689275512e-14 3.57721991656993e-14 5.36083989854855e-14 10000000000 0.000159948294190449 -1.93843697009863e-05 0.0402568084338125 0.000104533521266992 7.87621493080415e-14 2.47009899555486e-14 4.08375897134767e-14 5.43842952203384e-14 12599210498.9563 0.000196185981271194 -2.89400330280386e-05 0.0402359996321232 0.000119255334342205 7.87534496809519e-14 2.46988109251643e-14 4.0787829320278e-14 5.42139149989973e-14 15874010519.701 0.000253688229087214 -4.40989125054976e-05 0.0402033661643416 0.000138871539924146 7.87395233447099e-14 2.46955852295639e-14 4.07509471882347e-14 5.40958918132424e-14 20000000000 0.000344914247945712 -6.81477070363256e-05 0.040151862498158 0.000167381059017202 7.87173547929706e-14 2.46906295218633e-14 4.07200173160629e-14 5.4015174631837e-14 10000000000 0.000212719107268256 -2.0880639044011e-05 0.0545652106004617 0.000107240837892042 8.23157309528356e-14 2.47150150635581e-14 4.78926350850535e-14 5.49071879251925e-14 12599210498.9563 0.000253957139214451 -3.07358432617792e-05 0.0545381431657978 0.000122613417888606 8.23050500721699e-14 2.47126374149077e-14 4.78136365019395e-14 5.47369386330293e-14 15874010519.701 0.000319389409144978 -4.63693915532826e-05 0.0544957184033262 0.000143260120678446 8.22878510733008e-14 2.4709099704675e-14 4.77560095231553e-14 5.46187494971095e-14 20000000000 0.000423184937161826 -7.11696002018275e-05 0.0544287839714252 0.000173402165100922 8.22604123391679e-14 2.47036513408689e-14 4.77087040400558e-14 5.45375381545709e-14 10000000000 0.000289229143097077 -2.27586352648827e-05 0.0723773946162871 0.00011045729369541 8.67706388370725e-14 2.47289211033939e-14 5.76463150656601e-14 5.55558042222473e-14 12599210498.9563 0.000337285257443824 -3.29875369663144e-05 0.0723408094777529 0.000126717338072346 8.6757071487489e-14 2.47262727997937e-14 5.75228921837957e-14 5.5385864692751e-14 15874010519.701 0.000413528401537958 -4.92130853155947e-05 0.0722834601064488 0.000148769129927118 8.67350442384377e-14 2.47223120183751e-14 5.74335056726446e-14 5.52674983670001e-14 20000000000 0.000534454934900659 -7.49499897448067e-05 0.0721929842298336 0.000181136531113402 8.6699795009616e-14 2.47161971281285e-14 5.73606854481748e-14 5.51855910402497e-14 10000000000 0.000400042411115173 -2.50379063513094e-05 0.0936104582358977 0.000114052899867045 9.21396172067872e-14 2.4742629317087e-14 7.07101567892468e-14 5.63279864206917e-14 12599210498.9563 0.000457132156375712 -3.5716049696231e-05 0.0935596819968937 0.000131486854190399 9.212193877519e-14 2.47396206961957e-14 7.0522807988627e-14 5.61586468702672e-14 15874010519.701 0.000547695775091188 -5.26529817234321e-05 0.0934800340805166 0.000155396810864961 9.20929250384834e-14 2.47351010736845e-14 7.03870457841697e-14 5.60401112200343e-14 20000000000 0.000691305991023963 -7.95147452949023e-05 0.0933543610327482 0.000190706028023513 9.20463110047085e-14 2.47281088139738e-14 7.0275904305938e-14 5.59572377995076e-14 10000000000 0.000560518329326511 -2.76966170531251e-05 0.117756991106547 0.000117776693119909 9.83460441978712e-14 2.47560077623333e-14 8.75279603863894e-14 5.72067296496413e-14 12599210498.9563 0.000629173858006794 -3.88937450566209e-05 0.11768571427534 0.000136705675790272 9.83227092420752e-14 2.47525315694507e-14 8.72543524129829e-14 5.70384121660279e-14 15874010519.701 0.000738066242877732 -5.66520625872171e-05 0.117573800335696 0.000162981282546493 9.82838804477508e-14 2.47472957358305e-14 8.70545547465006e-14 5.6919740190502e-14 20000000000 0.000910694649772576 -8.48115243671075e-05 0.11739717446471 0.00020203383217593 9.82211865510342e-14 2.4739185241418e-14 8.68883642079661e-14 5.68355553985851e-14 10000000000 0.000793361507526321 -3.06619042735363e-05 0.143939322186786 0.000121277114801033 1.05237210169501e-13 2.47688103853318e-14 1.0824419283872e-13 5.81620777134879e-14 12599210498.9563 0.000876293818464539 -4.2435856377727e-05 0.143839600865061 0.000142031668366571 1.05206437357918e-13 2.47647409016161e-14 1.07861993296515e-13 5.79953305955921e-14 15874010519.701 0.00100780208445925 -6.11064855678484e-05 0.143682863161326 0.000171194617306858 1.05154325578489e-13 2.47586142542179e-14 1.07578875895275e-13 5.78765780758516e-14 20000000000 0.00121621301122688 -9.07057579464118e-05 0.14343544245443 0.000214812931708108 1.05069662333359e-13 2.47491252757165e-14 1.07337298254169e-13 5.77906621837618e-14 10000000000 0.0011326842277355 -3.38096283156971e-05 0.171078713974957 0.000124155799060388 1.12622286161815e-13 2.47805911896332e-14 1.32661335257805e-13 5.91571268557621e-14 12599210498.9563 0.00123264141350755 -4.62033727140848e-05 0.170941213737538 0.000147048140369699 1.12582247218174e-13 2.47757781748636e-14 1.32151617404106e-13 5.89925766159309e-14 15874010519.701 0.00139110537977153 -6.58534593458096e-05 0.170724894303801 0.000179590207417368 1.12512881762756e-13 2.47685698939732e-14 1.31766143146331e-13 5.88738013696575e-14 20000000000 0.0016421312808268 -9.69964794721217e-05 0.170383380772626 0.000228547373597399 1.12399302385055e-13 2.47574311822256e-14 1.31425979747106e-13 5.87856624723395e-14 10000000000 0.00163007433196947 -3.69734782009342e-05 0.198090807334883 0.000126028573692982 1.20312571698665e-13 2.47906177871371e-14 1.60303958171941e-13 6.01551043123268e-14 12599210498.9563 0.00174974823162179 -5.00155767372626e-05 0.197905184031064 0.000151331159974677 1.20261683059567e-13 2.47848694342914e-14 1.59654128363947e-13 5.99933528785841e-14 15874010519.701 0.00193941118953096 -7.06892309484573e-05 0.197612934353825 0.000187680161085502 1.20170801385454e-13 2.47763646390791e-14 1.59149193354099e-13 5.98745635841061e-14 20000000000 0.00223971313633853 -0.000103442965514978 0.197151555237195 0.000242645773779748 1.20020481638413e-13 2.47632936704979e-14 1.58685208753424e-13 5.97836271865482e-14 10000000000 0.00236281041844593 -3.99599001189385e-05 0.224011114087523 0.000126562133847707 1.2813935552689e-13 2.47978340282449e-14 1.90524813837329e-13 6.11242801847021e-14 12599210498.9563 0.00250479662934693 -5.36668308245641e-05 0.223766409276398 0.000154496105430113 1.2807668001715e-13 2.47908826469176e-14 1.89730476086325e-13 6.0965739446311e-14 15874010519.701 0.00272974071336756 -7.53888105953984e-05 0.223380924758481 0.000194997565276189 1.27959993030772e-13 2.4780821472255e-14 1.89092010516878e-13 6.08468043204253e-14 20000000000 0.00308570294558249 -0.000109789102623804 0.222772454507299 0.000256508591242322 1.27764422500868e-13 2.47655124552357e-14 1.88477528431351e-13 6.07523765554522e-14 10000000000 0.00344333549347789 -4.25650366042595e-05 0.248014866902313 0.000125470268371897 1.35938559905998e-13 2.48009450447641e-14 2.22558881604671e-13 6.20396371439972e-14 12599210498.9563 0.00361008724108255 -5.69431054041264e-05 0.247699934738275 0.000156200256339167 1.35864357684924e-13 2.47923893495625e-14 2.21624806544416e-13 6.18842966967449e-14 15874010519.701 0.00387415906938951 -7.97218435570301e-05 0.247203639207435 0.000201109212867201 1.3571791956352e-13 2.47804308237443e-14 2.20842419285062e-13 6.17648091403312e-14 20000000000 0.00429176815897388 -0.000115778209797001 0.246420500644549 0.000269557010002808 1.35468176245891e-13 2.47625324064945e-14 2.20049806383433e-13 6.16660113534326e-14 10000000000 0.00502673189126514 -4.4592604657109e-05 0.269363563695535 0.000122475727143523 1.43508424381363e-13 2.47987033801932e-14 2.55473813756141e-13 6.28825086453569e-14 12599210498.9563 0.00522040542927645 -5.9637815010697e-05 0.26896774863516 0.000156104158647585 1.43424897582733e-13 2.47879233324067e-14 2.54414599268935e-13 6.27296400342339e-14 15874010519.701 0.00552697048381681 -8.3465229016972e-05 0.268343874135894 0.000205576262393536 1.43245707234983e-13 2.47735943795926e-14 2.53482353627455e-13 6.26087491747649e-14 20000000000 0.00601142496334948 -0.00012116061651105 0.267359860754271 0.000281192695160914 1.42933051510916e-13 2.47526817790034e-14 2.52484101317981e-13 6.25044380406138e-14 10000000000 0.00730898886206552 -4.58750491347118e-05 0.287346024093593 0.000117265523854659 1.50560424401353e-13 2.47904215329046e-14 2.88044261056731e-13 6.36401847904575e-14 12599210498.9563 0.007531084666065 -6.15706970636482e-05 0.286860412007753 0.000153821821539057 1.50472606104265e-13 2.47764703560288e-14 2.86885074408713e-13 6.34880100017116e-14 15874010519.701 0.00788246044515532 -8.6418457926445e-05 0.286094980137843 0.000207896552176012 1.50259564018779e-13 2.47591053485076e-14 2.85803091991476e-13 6.33642422506911e-14 20000000000 0.00843727784768424 -0.000125703559909218 0.284888388924184 0.000290728139274998 1.49876671643762e-13 2.47346541937392e-14 2.84574640321579e-13 6.32529452623745e-14 10000000000 0.0105056557433883 -4.63007171911568e-05 0.301284744758102 0.000109486066546038 1.56696787282112e-13 2.47765805047393e-14 3.18663020260307e-13 6.43067369207401e-14 12599210498.9563 0.0107564475977929 -6.26141374660056e-05 0.300704127104245 0.000148912877250773 1.56613290110752e-13 2.47580787964858e-14 3.17440037639788e-13 6.41521435247395e-14 15874010519.701 0.0111530055390984 -8.84286976951489e-05 0.299789045718328 0.000207492395681186 1.56368450296913e-13 2.47367655681886e-14 3.16217149397594e-13 6.40232707109627e-14 20000000000 0.0117786172662489 -0.000129214569044944 0.298347539352275 0.000297368411574517 1.55911428258375e-13 2.47081376691548e-14 3.14742302805798e-13 6.39031773699629e-14 10000000000 0.0148049179994195 -4.58433066445367e-05 0.310646564645373 9.88180103662639e-05 1.61453112342199e-13 2.47591976635342e-14 3.45452287573698e-13 6.48846639797899e-14 12599210498.9563 0.0150828461928118 -6.27245386016041e-05 0.309971669930876 0.000140964415945077 1.61386174426427e-13 2.47342808293935e-14 3.44211505815215e-13 6.47231160022136e-14 15874010519.701 0.0155220628148575 -8.94252945985267e-05 0.308908234032162 0.00020380381047852 1.61115839027378e-13 2.47078413888364e-14 3.42867990762383e-13 6.45861531846381e-14 20000000000 0.0162143437353092 -0.000131581156511465 0.30723429305797 0.000300323282291681 1.60586577428323e-13 2.46742937628355e-14 3.41146103810839e-13 6.44551968396421e-14 10000000000 0.0203069806496072 -4.45784691101146e-05 0.315218735501632 8.51118838025022e-05 1.64416853554716e-13 2.47416066039537e-14 3.66657812058137e-13 6.53855130218601e-14 12599210498.9563 0.0206083643587991 -6.19635339421908e-05 0.314457585923382 0.000129745896061795 1.64381133344433e-13 2.47079825241352e-14 3.65450805372429e-13 6.52113057475445e-14 15874010519.701 0.0210843809431624 -8.94482851939207e-05 0.313258580990753 0.000196473991337542 1.6409599481635e-13 2.46750164556848e-14 3.6401902983629e-13 6.50627051692244e-14 20000000000 0.0218339907259104 -0.000132810839829849 0.311372712810003 0.000299041152312607 1.63503645002524e-13 2.46357389729195e-14 3.62070548883771e-13 6.49187352434777e-14 10000000000 0.0269815640137637 -4.26705716723243e-05 0.315230163779314 6.84916801318436e-05 1.65368634735024e-13 2.47277093507266e-14 3.8116785994603e-13 6.58279705320401e-14 12599210498.9563 0.0273009318542725 -6.04898756549243e-05 0.314397429312679 0.000115335878866973 1.65378801909952e-13 2.46828406485343e-14 3.80044654131346e-13 6.56348325261697e-14 15874010519.701 0.0278050883212872 -8.86482435932827e-05 0.313086073789203 0.000185512189174675 1.65092568910484e-13 2.46418335660174e-14 3.78565738133991e-13 6.54708494880969e-14 20000000000 0.0285983414878569 -0.000133043159653875 0.311025046981695 0.000293427899822341 1.64452870494398e-13 2.45960065568195e-14 3.76431827798755e-13 6.53118385779715e-14 10000000000 0.0346706908697674 -4.03317472530725e-05 0.311314905843376 4.93434060687692e-05 1.64356772906123e-13 2.47212754431069e-14 3.88825858991908e-13 6.62342304166776e-14 12599210498.9563 0.0350016720535512 -5.85213780017346e-05 0.310429245262888 9.8124043965031e-05 1.64424769962653e-13 2.46626305323486e-14 3.87827364948051e-13 6.60160661698454e-14 15874010519.701 0.0355239170498005 -8.72525674160087e-05 0.309034977973751 0.000171316218256168 1.64151611813736e-13 2.46120928057303e-14 3.86344421612628e-13 6.58331646606624e-14 20000000000 0.0363450099812639 -0.000132522215157641 0.30684514903491 0.000283899751181538 1.63483958895091e-13 2.45589437236315e-14 3.84079513439942e-13 6.56573653887536e-14 10000000000 0.0431323905381779 -3.77781093235399e-05 0.304338649547654 2.82048736977014e-05 1.61664108891146e-13 2.47258395634045e-14 3.90354084170577e-13 6.66271126969276e-14 12599210498.9563 0.0434687708855458 -5.62910632059808e-05 0.303419262114928 7.8699612300448e-05 1.6179718979173e-13 2.46511223422463e-14 3.89507055832483e-13 6.63786062977622e-14 15874010519.701 0.0439993219726541 -8.55213328422889e-05 0.301972313717821 0.000154558028713947 1.61549091256639e-13 2.45897082501326e-14 3.88057875175339e-13 6.61737520203979e-14 20000000000 0.0448329283870074 -0.000131551593613269 0.29970111769885 0.000271262639859715 1.60872656068053e-13 2.45285469756261e-14 3.85718559032837e-13 6.59797454712089e-14 10000000000 0.0520967290694648 -3.52072050402504e-05 0.295199719175223 5.63868998249006e-06 1.57707296840194e-13 2.4745213052525e-14 3.87011851432152e-13 6.7029498488418e-14 12599210498.9563 0.0524332734786102 -5.4023089863383e-05 0.294263486877293 5.77147712384485e-05 1.57907377779548e-13 2.46525085844923e-14 3.86327597266889e-13 6.67464203092225e-14 15874010519.701 0.052963903348427 -8.37207518477678e-05 0.292790401476308 0.000136031731661379 1.57692374052296e-13 2.45790835801143e-14 3.84939535952799e-13 6.6517188588891e-14 20000000000 0.0537971682570291 -0.00013046377899897 0.290479385344448 0.000256535216768661 1.57022887079967e-13 2.4509307034124e-14 3.8257464456435e-13 6.6303820497262e-14 10000000000 0.0613095351777084 -3.28008415239912e-05 0.284692614936536 -1.78562819562189e-05 1.52934487148199e-13 2.47842330994535e-14 3.80229736409765e-13 6.74657160766696e-14 12599210498.9563 0.0616424202625262 -5.193434085255e-05 0.283752459468373 3.57875664395713e-05 1.53198612800975e-13 2.4672057717904e-14 3.79705777750236e-13 6.71449438820038e-14 15874010519.701 0.0621671281027861 -8.21228301628449e-05 0.282273534508157 0.00011654299646352 1.53020174231161e-13 2.45857094764304e-14 3.78393722561883e-13 6.68894618311367e-14 20000000000 0.0629906956206765 -0.000129616845743242 0.27995441306215 0.000240817069064036 1.52368135184657e-13 2.45067771698383e-14 3.76038281087609e-13 6.66556969831123e-14 10000000000 0.0705562293886687 -3.07421612775495e-05 0.27345109557347 -4.18933408014577e-05 1.47757968364083e-13 2.48494088511314e-14 3.71362660925861e-13 6.79636703860765e-14 12599210498.9563 0.0708831452443554 -5.02512849610489e-05 0.272515427309838 1.34503024550314e-05 1.48079359851597e-13 2.47166861323314e-14 3.70985738639533e-13 6.76030225805504e-14 15874010519.701 0.0713983092922099 -8.10219365522787e-05 0.271043868270292 9.68525695875244e-05 1.47936633830968e-13 2.46166919547652e-14 3.69752406298123e-13 6.73198043925682e-14 20000000000 0.0722065426894104 -0.000129410696133688 0.268737257236719 0.000225224897490495 1.47306828448413e-13 2.45280787882748e-14 3.67425378364245e-13 6.70645316186373e-14 10000000000 0.0796695571759989 -2.92341770995172e-05 0.261946140472859 -6.62275099710397e-05 1.42524218932562e-13 2.49493383408354e-14 3.61576423387798e-13 6.85568140033076e-14 12599210498.9563 0.07998961407927 -4.92293322254264e-05 0.261018979136334 -8.87773057295371e-06 1.4289342158932e-13 2.47953298458526e-14 3.61325548637378e-13 6.81547918104266e-14 15874010519.701 0.0804938397600345 -8.07554667794131e-05 0.259561104711238 7.76526750094764e-05 1.42781879430862e-13 2.46810958558522e-14 3.60162903875794e-13 6.78425182946648e-14 20000000000 0.0812845711395645 -0.00013030983402962 0.257276882672876 0.000210874852361598 1.42173681723481e-13 2.45822275725331e-14 3.57867336295879e-13 6.75643228112695e-14 10000000000 0.0885277506110027 -2.85124731929248e-05 0.250509605886087 -9.07824520741118e-05 1.37509106218893e-13 2.50949194093846e-14 3.518244663859e-13 6.92856210097204e-14 12599210498.9563 0.0888413096481997 -4.91672919162084e-05 0.249590984737364 -3.09104605044075e-05 1.37914949423976e-13 2.49191325858955e-14 3.51673315354718e-13 6.88411193841516e-14 15874010519.701 0.0893351597343281 -8.17210281241553e-05 0.248146873532256 5.95572727509208e-05 1.3782707796216e-13 2.4790115412352e-14 3.50564125678018e-13 6.84983872953591e-14 20000000000 0.0901092592615079 -0.000132864739835856 0.245885223295464 0.000198888948632958 1.37235032209395e-13 2.46802882318953e-14 3.48288230876693e-13 6.81952879219351e-14 10000000000 0.0970482499910277 -2.8850400204657e-05 0.239364625582626 -0.000115679305983218 1.32925672802166e-13 2.52994216450302e-14 3.42869497150966e-13 7.01985689596437e-14 12599210498.9563 0.0973567533692991 -5.04153429057547e-05 0.238451025309014 -5.25130883527458e-05 1.33355922214633e-13 2.5101507285528e-14 3.42787903891652e-13 6.97105785461091e-14 15874010519.701 0.0978424780710434 -8.43886602532346e-05 0.237015208335744 4.31006159813951e-05 1.33281746040491e-13 2.49571220385508e-14 3.41706837559474e-13 6.93356198525017e-14 20000000000 0.0986034242185315 -0.000137730472568181 0.23476772700102 0.000190418785245616 1.32696080017247e-13 2.48354028493964e-14 3.39424963287379e-13 6.90047501798208e-14 10000000000 0.105180091894647 -3.05584629375003e-05 0.22865379094654 -0.00014126385547153 1.28936235678311e-13 2.55784744859798e-14 3.35320457007254e-13 7.1352747764687e-14 12599210498.9563 0.105485932623606 -5.3378491761731e-05 0.227738465648212 -7.37137219620765e-05 1.29377913656131e-13 2.53581170993463e-14 3.35274978018462e-13 7.08200423940723e-14 15874010519.701 0.105967260709741 -8.93104682554596e-05 0.226300452258337 2.87493310337506e-05 1.29305240743484e-13 2.51976286108999e-14 3.34188925198409e-13 7.04103922524161e-14 20000000000 0.1067208039095 -0.000145685419382949 0.224051007617053 0.000186692989417148 1.28712102946737e-13 2.50627261531405e-14 3.31861748266252e-13 7.00475858570407e-14 10000000000 0.112896572269152 -3.39809862568223e-05 0.2184620985267 -0.000168124703821215 1.25664474910915e-13 2.59500016785457e-14 3.2966993500504e-13 7.28142127925929e-14 12599210498.9563 0.113203020991249 -5.851900775895e-05 0.217535226773765 -9.46997935204474e-05 1.26103859755951e-13 2.57067987223167e-14 3.29623508817238e-13 7.2234996590773e-14 15874010519.701 0.113685038490775 -9.71317292091748e-05 0.216079763215797 1.69389099572981e-05 1.26018195271116e-13 2.55291863882408e-14 3.28490924071725e-13 7.17870688844535e-14 20000000000 0.114438996355848 -0.00015765500155791 0.213804949862456 0.000189102041326383 1.25399489846602e-13 2.53792768767673e-14 3.26064419537536e-13 7.13862860271272e-14 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_internal_ac.standard0000644000175000017500000000612114163340332026304 0ustar carstencarstenFreq N(coll) 1000 6.71597306145431e-24 3162.27766017779 6.71597306145431e-24 10000.0000000595 6.71597306145431e-24 31622.7766019662 6.71597306145433e-24 100000.000001191 6.71597306145458e-24 316227.766021545 6.71597306145707e-24 1000000.00001786 6.71597306148195e-24 3162277.66023428 6.7159730617307e-24 10000000.0002382 6.71597306421824e-24 31622776.6025311 6.71597308909365e-24 100000000.002977 6.71597333784781e-24 316227766.027194 6.7159758253893e-24 1000000000.03572 6.71600070079872e-24 3162277660.29077 6.71624945434367e-24 10000000000.4168 6.71873693487279e-24 31622776603.096 6.74360624934634e-24 100000000000 6.99175153288029e-24 1000 3.61784618961523e-22 3162.27766017779 3.61784618961523e-22 10000.0000000595 3.61784618961523e-22 31622.7766019662 3.61784618961523e-22 100000.000001191 3.61784618961523e-22 316227.766021545 3.61784618961523e-22 1000000.00001786 3.61784618961522e-22 3162277.66023428 3.61784618961519e-22 10000000.0002382 3.61784618961482e-22 31622776.6025311 3.61784618961116e-22 100000000.002977 3.6178461895745e-22 316227766.027194 3.61784618920796e-22 1000000000.03572 3.61784618554255e-22 3162277660.29077 3.61784614888859e-22 10000000000.4168 3.61784578236354e-22 31622776603.096 3.61784211856874e-22 100000000000 3.61780562561554e-22 1000 3.21223084527441e-20 3162.27766017779 3.21223084527441e-20 10000.0000000595 3.21223084527441e-20 31622.7766019662 3.21223084527438e-20 100000.000001191 3.2122308452741e-20 316227.766021545 3.21223084527122e-20 1000000.00001786 3.21223084524246e-20 3162277.66023428 3.21223084495487e-20 10000000.0002382 3.21223084207901e-20 31622776.6025311 3.21223081332042e-20 100000000.002977 3.21223052573451e-20 316227766.027194 3.21222764987915e-20 1000000000.03572 3.21219889169658e-20 3162277660.29077 3.21191134697782e-20 10000000000.4168 3.20903960565241e-20 31622776603.096 3.18068801491574e-20 100000000000 2.92953994714106e-20 1000 4.95858803132928e-20 3162.27766017779 4.95858803132925e-20 10000.0000000595 4.95858803132892e-20 31622.7766019662 4.95858803132561e-20 100000.000001191 4.95858803129256e-20 316227.766021545 4.95858803096199e-20 1000000.00001786 4.95858802765631e-20 3162277.66023428 4.95858799459955e-20 10000000.0002382 4.95858766403203e-20 31622776.6025311 4.95858435836648e-20 100000000.002977 4.95855130267389e-20 316227766.027194 4.95822084201914e-20 1000000000.03572 4.95492583435843e-20 3162277660.29077 4.92290823493383e-20 10000000000.4168 4.67480016411534e-20 31622776603.096 4.02699328692341e-20 100000000000 3.75143452051159e-20 1000 1.02627227789022e-19 3162.27766017779 1.02627227789022e-19 10000.0000000595 1.02627227789019e-19 31622.7766019662 1.02627227788991e-19 100000.000001191 1.02627227788714e-19 316227.766021545 1.02627227785943e-19 1000000.00001786 1.02627227758229e-19 3162277.66023428 1.0262722748109e-19 10000000.0002382 1.02627224709707e-19 31622776.6025311 1.02627196996006e-19 100000000.002977 1.02626919871862e-19 316227766.027194 1.02624149916589e-19 1000000000.03572 1.02596578380567e-19 3162277660.29077 1.02333091741346e-19 10000000000.4168 1.00531056812786e-19 31622776603.096 9.72156099492196e-20 100000000000 9.61988546454849e-20 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_vert_nqs_dc.standard0000644000175000017500000001544014163340332025614 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002002e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24597758906964e-28 5.43852186601834e-28 0.0500000000000003 -5.000000001721e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732966e-13 5.05259770605552e-13 0.3 -3.00001561179699e-13 6.19324037995474e-13 0.35 -3.50014977027487e-13 7.70944534001899e-13 0.4 -4.00143680477496e-13 1.06045936684609e-12 0.45 -4.51378382653116e-13 1.85671697271933e-12 0.5 -5.1322335983311e-13 4.51945012807262e-12 0.55 -6.76856822893218e-13 1.40984637154991e-11 0.6 -1.8169867339145e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.7 -1.12703055744962e-10 3.47593602243085e-09 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964245e-13 -0.2 2.00047134849492e-13 -4.14897162929443e-13 -0.15 1.50046886985275e-13 -3.14379680798674e-13 -0.0999999999999997 1.00045555694836e-13 -2.13018560796776e-13 -0.0499999999999997 5.00384052730846e-14 -1.09436572570566e-13 3.19189119579733e-16 4.1326957096315e-23 -4.13265445467135e-23 0.0500000000000003 -5.0206276115586e-14 1.24914117033713e-13 0.1 -1.01314194087144e-13 2.90980896151676e-13 0.15 -1.57264867823004e-13 5.67725307060068e-13 0.2 -2.39226183336872e-13 1.14882509114703e-12 0.25 -4.60891729945365e-13 2.60210366156322e-12 0.3 -1.43291446463824e-12 6.73610052619478e-12 0.35 -6.43513660097118e-12 2.00061162068663e-11 0.4 -3.30837259241193e-11 6.85489977652468e-11 0.45 -1.75995846089845e-10 2.70515774412067e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.7 -7.84663581577333e-07 9.28415745768918e-07 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102724e-13 -6.75373800064317e-13 -0.25 2.51658562604109e-13 -5.74880432730867e-13 -0.2 2.01656020281116e-13 -4.73668387073455e-13 -0.15 1.51643905151441e-13 -3.70687925097132e-13 -0.0999999999999997 1.01586171991671e-13 -2.6334527481025e-13 -0.0499999999999997 5.13110517672389e-14 -1.45191279609288e-13 3.19189119579733e-16 5.74616861001648e-22 -5.74616118880751e-22 0.0500000000000003 -5.62476501229265e-14 2.13950763614116e-13 0.1 -1.36020047170782e-13 6.08121963861568e-13 0.15 -3.2789667138758e-13 1.49931858967928e-12 0.2 -1.05399191607836e-12 3.87148001992826e-12 0.25 -4.32583891170101e-12 1.1124834937132e-11 0.3 -1.97291461694721e-11 3.63099468893959e-11 0.35 -9.29434037716725e-11 1.3393572172085e-10 0.4 -4.41648485051704e-10 5.45224221543521e-10 0.45 -2.10317048911921e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.7 -5.16734064081562e-06 5.53886593993007e-06 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105083e-10 -0.6 1.18575135234566e-10 -1.30294766063313e-10 -0.55 1.18524897840167e-10 -1.30191699950077e-10 -0.5 1.18474353034842e-10 -1.30085539519988e-10 -0.45 1.18422557934573e-10 -1.29972596875668e-10 -0.4 1.1836664318916e-10 -1.29844551137558e-10 -0.35 1.18297154466434e-10 -1.29681120696754e-10 -0.3 1.18182940325636e-10 -1.29429638088295e-10 -0.25 1.17921358696786e-10 -1.28944661320645e-10 -0.2 1.1717421031985e-10 -1.2780268918443e-10 -0.15 1.1482714961513e-10 -1.24718744459431e-10 -0.0999999999999997 1.07208477086367e-10 -1.15677456403674e-10 -0.0499999999999997 8.22201709724528e-11 -8.78797381931381e-11 3.19189119579733e-16 1.25417772002613e-18 -1.25417768125204e-18 0.0500000000000003 -2.70795603003862e-10 2.82482764696758e-10 0.1 -1.16293554639735e-09 1.19968102048248e-09 0.15 -4.10236647769572e-09 4.19605719138774e-09 0.2 -1.37874939984276e-08 1.40217410358346e-08 0.25 -4.56992726152099e-08 4.63172577067687e-08 0.3 -1.50846485469688e-07 1.52625480136579e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.7 -0.00209725704818037 0.00214673139842961 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_1D_breakdown.standard0000644000175000017500000003032114163340332026202 0ustar carstencarstenV(coll) I(coll) I(base) -1 -4.39311947779146 8.73095920185774e-05 -0.95 -0.326495882608939 9.10101825505025e-06 -0.9 -0.0242652075254397 9.48676927690936e-07 -0.85 -0.00180337458260026 9.88893781007038e-08 -0.8 -0.000134013005345667 1.03087878741381e-08 -0.75 -9.95785113724838e-06 1.07523878099564e-09 -0.7 -7.39885022795332e-07 1.12703055744961e-10 -0.65 -5.49745852082662e-08 1.23250260385065e-11 -0.6 -4.0856907105027e-09 1.81698673391558e-12 -0.55 -3.04579309450946e-10 6.76856822898975e-13 -0.5 -2.35493005008745e-11 5.13223359849034e-13 -0.45 -2.57555869382054e-12 4.51378382663993e-13 -0.4 -9.24514992676208e-13 4.00143680484297e-13 -0.35 -7.09254148570182e-13 3.50014977030611e-13 -0.3 -6.00687904189814e-13 3.00001561180811e-13 -0.25 -5.00051147974233e-13 2.50000162733289e-13 -0.2 -4.00003804287718e-13 2.00000016961273e-13 -0.15 -3.00000282998543e-13 1.50000001766223e-13 -0.0999999999999997 -2.00000020966635e-13 1.00000000182314e-13 -0.0499999999999997 -1.00000001454416e-13 5.00000000172098e-14 3.19189119579733e-16 7.32734355647441e-28 -4.13545234304473e-28 0.0500000000000003 1.00000000108593e-13 -5.00000000017945e-14 0.1 2.0000000011675e-13 -1.00000000001982e-13 0.15 3.00000000117399e-13 -1.50000000002002e-13 0.2 4.00000000117484e-13 -2.00000000002004e-13 0.25 5.00000000117527e-13 -2.50000000002005e-13 0.3 6.00000000117567e-13 -3.00000000002006e-13 0.35 7.00000000117607e-13 -3.50000000002008e-13 0.4 8.00000000117646e-13 -4.0000000000201e-13 0.45 9.00000000117687e-13 -4.50000000002013e-13 0.5 1.00000000011773e-12 -5.00000000002018e-13 0.55 1.10000000011777e-12 -5.50000000002024e-13 0.6 1.20000000011781e-12 -6.00000000002032e-13 0.65 1.30000000011786e-12 -6.50000000002042e-13 0.700000000000001 1.40000000011791e-12 -7.00000000002056e-13 0.750000000000001 1.50000000011796e-12 -7.50000000002074e-13 0.800000000000001 1.60000000011802e-12 -8.00000000002098e-13 0.850000000000001 1.70000000011809e-12 -8.50000000002128e-13 0.900000000000001 1.80000000011816e-12 -9.00000000002167e-13 0.950000000000001 1.90000000011825e-12 -9.50000000002217e-13 1 2.00000000011834e-12 -1.00000000000228e-12 -1 -5.01125870772451 0.00387025895403701 -0.95 -0.599603807674249 0.000610263789591701 -0.9 -0.0717490490774907 9.62266090537215e-05 -0.85 -0.00858642785159137 1.51730461610763e-05 -0.8 -0.00102768204190415 2.39249190437493e-06 -0.75 -0.00012300973436108 3.77249586153604e-07 -0.7 -1.47257234073122e-05 5.94854287492162e-08 -0.65 -1.76328165158324e-06 9.38022288444381e-09 -0.6 -2.11216730441902e-07 1.47957434063709e-09 -0.55 -2.53144860204727e-08 2.33755192271139e-10 -0.5 -3.03677780294313e-09 3.72718761856141e-11 -0.45 -3.6530285232326e-10 6.24820203501557e-12 -0.4 -4.45935653058417e-11 1.31426223546667e-12 -0.35 -5.97128211579083e-12 4.94160895546791e-13 -0.3 -1.23577751975776e-12 3.227310462679e-13 -0.25 -5.76883361241865e-13 2.53583945059855e-13 -0.2 -4.09327462231721e-13 2.00564823428312e-13 -0.15 -3.01134908276594e-13 1.50088767270894e-13 -0.0999999999999997 -2.00137208881471e-13 1.00013702568977e-13 -0.0499999999999997 -1.00015056785125e-13 5.00018663402099e-14 3.19189119579733e-16 1.02268363167094e-24 -1.02236441687156e-24 0.0500000000000003 1.00001871942997e-13 -5.00002942874034e-14 0.1 2.00002107523677e-13 -1.00000340692499e-13 0.15 3.00002138000713e-13 -1.50000348013007e-13 0.2 4.00002142460075e-13 -2.00000349172846e-13 0.25 5.00002143570263e-13 -2.5000034936455e-13 0.3 6.00002144241336e-13 -3.00000349408321e-13 0.35 7.00002144854727e-13 -3.50000349435371e-13 0.4 8.00002145463906e-13 -4.00000349468923e-13 0.45 9.0000214607908e-13 -4.5000034951526e-13 0.5 1.00000214670618e-12 -5.00000349579546e-13 0.55 1.10000214735095e-12 -5.50000349667153e-13 0.6 1.20000214802045e-12 -6.00000349784784e-13 0.65 1.30000214872342e-12 -6.50000349940838e-13 0.700000000000001 1.4000021494708e-12 -7.00000350145888e-13 0.750000000000001 1.5000021502763e-12 -7.50000350413267e-13 0.800000000000001 1.60000215115707e-12 -8.00000350759705e-13 0.850000000000001 1.70000215213427e-12 -8.50000351205932e-13 0.900000000000001 1.80000215323352e-12 -9.00000351777132e-13 0.950000000000001 1.90000215448508e-12 -9.50000352503141e-13 1 2.00000215592378e-12 -1.00000035341839e-12 -1 -5.63011191772884 0.0188379669510573 -0.95 -0.816075043280541 0.00350732122782141 -0.9 -0.118320895889505 0.000653005827965896 -0.85 -0.017161068960037 0.000121579001631253 -0.8 -0.00249011267932276 2.26360215187798e-05 -0.75 -0.000361508691123472 4.21445744634287e-06 -0.7 -5.25154439546897e-05 7.84663581577327e-07 -0.65 -7.63528431261732e-06 1.46092040173207e-07 -0.6 -1.11137485576208e-06 2.72004265233506e-08 -0.55 -1.62010470861195e-07 5.06471262763436e-09 -0.5 -2.36626975013426e-08 9.43364185070673e-10 -0.45 -3.46507616947195e-09 1.75995846090794e-10 -0.4 -5.09516269048764e-10 3.30837259264042e-11 -0.35 -7.56902647153641e-11 6.43513660427464e-12 -0.3 -1.17066561520614e-11 1.43291446790137e-12 -0.25 -2.1544681845963e-12 4.60891732372879e-13 -0.2 -6.48097096444778e-13 2.39226184781692e-13 -0.15 -3.37419087799482e-13 1.57264868541258e-13 -0.0999999999999997 -2.05600380652291e-13 1.0131419439136e-13 -0.0499999999999997 -1.00748245348397e-13 5.02062762172475e-14 3.19189119579733e-16 4.12251270110165e-23 -4.12248066841851e-23 0.0500000000000003 1.00116877358138e-13 -5.00384053494775e-14 0.1 2.00135412866922e-13 -1.00045555872266e-13 0.15 3.00138418793074e-13 -1.50046887329577e-13 0.2 4.00138935548313e-13 -2.00047135473158e-13 0.25 5.00139046929937e-13 -2.50047182073934e-13 0.3 6.00139091177695e-13 -3.00047191372646e-13 0.35 7.00139124164385e-13 -3.50047194039383e-13 0.4 8.00139155382211e-13 -4.00047195901483e-13 0.45 9.00139186623154e-13 -4.50047198204502e-13 0.5 1.00013921836026e-12 -5.00047201327171e-13 0.55 1.10013925096043e-12 -5.50047205607918e-13 0.6 1.2001392847785e-12 -6.00047211382646e-13 0.65 1.30013932025051e-12 -6.50047219069566e-13 0.700000000000001 1.400139357917e-12 -7.00047229190921e-13 0.750000000000001 1.50013939845009e-12 -7.50047242399743e-13 0.800000000000001 1.60013944268402e-12 -8.00047259510238e-13 0.850000000000001 1.70013949164583e-12 -8.50047281528629e-13 0.900000000000001 1.80013954658156e-12 -9.00047309679754e-13 0.950000000000001 1.90013960897316e-12 -9.50047345424585e-13 1 2.00013968054334e-12 -1.00004739046576e-12 -1 -6.32098889840421 0.0605130727475002 -0.95 -1.05300188876589 0.0126984928103491 -0.9 -0.175532099505921 0.00266474188743102 -0.85 -0.0292845993037305 0.000559188357169254 -0.8 -0.00489064783660784 0.000117344055554711 -0.75 -0.000817785733770458 2.46243103052511e-05 -0.7 -0.000136951495045236 5.16734064081559e-06 -0.65 -2.29780330547539e-05 1.08435194839996e-06 -0.6 -3.86457051159172e-06 2.27548573707159e-07 -0.55 -6.51915756726499e-07 4.77508310125495e-08 -0.5 -1.10379181034682e-07 1.0020756668986e-08 -0.45 -1.87737258191766e-08 2.10317048912053e-09 -0.4 -3.21100942064045e-09 4.41648485056683e-10 -0.35 -5.53218963602293e-10 9.29434037817859e-11 -0.3 -9.64208472009063e-11 1.97291461828147e-11 -0.25 -1.72629192631765e-11 4.32583892443438e-12 -0.2 -3.35991801215842e-12 1.05399192555306e-12 -0.15 -8.26341358304026e-13 3.27896677162424e-13 -0.0999999999999997 -2.92557394991782e-13 1.36020050117019e-13 -0.0499999999999997 -1.14300906253272e-13 5.62476512813002e-14 3.19189119579733e-16 5.7318863720743e-22 -5.73188297997241e-22 0.0500000000000003 1.02649084643585e-13 -5.13110528335324e-14 0.1 2.03146897564183e-13 -1.0158617457874e-13 0.15 3.03242071487473e-13 -1.51643910306104e-13 0.2 4.03260854341287e-13 -2.01656029799286e-13 0.25 5.03264949788848e-13 -2.51658579288605e-13 0.3 6.03266184913801e-13 -3.0165912411402e-13 0.35 7.03266856942321e-13 -3.51659253351792e-13 0.4 8.03267419207151e-13 -4.01659302417294e-13 0.45 9.03267965746673e-13 -4.51659345482123e-13 0.5 1.00326851486619e-12 -5.01659397284629e-13 0.55 1.1032690782925e-12 -5.51659468700945e-13 0.6 1.20326966217333e-12 -6.01659565482599e-13 0.65 1.30327027396266e-12 -6.51659694760924e-13 0.700000000000001 1.40327092283136e-12 -7.01659865389913e-13 0.750000000000001 1.50327162010653e-12 -7.51660088371168e-13 0.800000000000001 1.60327237976827e-12 -8.01660377347197e-13 0.850000000000001 1.70327321897152e-12 -8.51660749124145e-13 0.900000000000001 1.80327415852984e-12 -9.01661224160156e-13 0.950000000000001 1.90327522328579e-12 -9.51661826943426e-13 1 2.00327644230659e-12 -1.00166258619788e-12 -1 -8.60371176254274 0.498435427837973 -0.95 -1.84213728258885 0.128935663789577 -0.9 -0.395470605631505 0.0333531777003904 -0.85 -0.0851682168321259 0.00862782592505589 -0.8 -0.0184101258207032 0.00223185271458479 -0.75 -0.00399691799726668 0.000577337394380012 -0.7 -0.000872120770323432 0.000149346085647428 -0.65 -0.000191387891614955 3.86329612906097e-05 -0.6 -4.22741856901117e-05 9.99360421369521e-06 -0.55 -9.40628709042089e-06 2.58515303334836e-06 -0.5 -2.11002386781702e-06 6.68729088106644e-07 -0.45 -4.77521198628455e-07 1.72987015700744e-07 -0.4 -1.09092290753069e-07 4.47480341213109e-08 -0.35 -2.51699634650821e-08 1.15750376504354e-08 -0.3 -5.86614433264537e-09 2.99378407983378e-09 -0.25 -1.38079129489271e-09 7.73941672042732e-10 -0.2 -3.27832028911819e-10 1.9967404707339e-10 -0.15 -7.80677299507672e-11 5.10849856410068e-11 -0.0999999999999997 -1.81784123717285e-11 1.26107858011679e-11 -0.0499999999999997 -3.62490496365713e-12 2.62118391700418e-12 3.19189119579733e-16 5.06180598505988e-20 -5.06180566194245e-20 0.0500000000000003 9.66676167397216e-13 -7.15115980928363e-13 0.1 1.28138032409623e-12 -9.37168816610481e-13 0.15 1.43496539297042e-12 -1.03167582484496e-12 0.2 1.54846310670692e-12 -1.09318937346489e-12 0.25 1.65192670708787e-12 -1.14616845440112e-12 0.3 1.75286534814677e-12 -1.19694029469511e-12 0.35 1.85316572474513e-12 -1.24714183653049e-12 0.4 1.95330437108974e-12 -1.29719680082821e-12 0.45 2.05340245223085e-12 -1.34721514917527e-12 0.5 2.15349126824498e-12 -1.39722577173349e-12 0.55 2.25357970859255e-12 -1.4472370079205e-12 0.6 2.35366983811579e-12 -1.49725076680504e-12 0.65 2.45376400163115e-12 -1.54726932136271e-12 0.700000000000001 2.55386356893234e-12 -1.59729398730498e-12 0.750000000000001 2.65397020778686e-12 -1.64732638162517e-12 0.800000000000001 2.75408595262291e-12 -1.69736848795499e-12 0.850000000000001 2.85421327875391e-12 -1.74742273005261e-12 0.900000000000001 2.95435517860013e-12 -1.79749204811662e-12 0.950000000000001 3.05451523234159e-12 -1.84757996998941e-12 1 3.15469766403713e-12 -1.89769066816243e-12 -1 -13.2713453743622 2.68370675662406 -0.95 -3.50376299930901 0.814493889989311 -0.9 -0.930272604889327 0.247195523519849 -0.85 -0.248525207887812 0.0750228179155004 -0.8 -0.0668389569897212 0.0227691145607402 -0.75 -0.0181041363260139 0.00691033192322964 -0.7 -0.00494049253498062 0.00209725704818036 -0.65 -0.00135867591960517 0.00063650874973141 -0.6 -0.000376589981755516 0.000193177688625406 -0.55 -0.000105205733627814 5.86285469385737e-05 -0.5 -2.96206986250244e-05 1.77934394361737e-05 -0.45 -8.403275486337e-06 5.40015333199813e-06 -0.4 -2.4013493108721e-06 1.63884227284598e-06 -0.35 -6.90892342037809e-07 4.97299903421936e-07 -0.3 -1.99989459049952e-07 1.50846485469852e-07 -0.25 -5.81667069048459e-08 4.56992726157379e-08 -0.2 -1.69431760517608e-08 1.3787493999493e-08 -0.15 -4.89383916909259e-09 4.10236647921964e-09 -0.0999999999999997 -1.35412344657879e-09 1.16293554802245e-09 -0.0499999999999997 -3.09539300770503e-10 2.70795604192531e-10 3.19189119579733e-16 1.2510598905049e-18 -1.25105977600833e-18 0.0500000000000003 9.20971186641142e-11 -8.22201734523624e-11 0.1 1.19633583491678e-10 -1.07208484586327e-10 0.15 1.27939733378262e-10 -1.14827166976257e-10 0.2 1.30501840634606e-10 -1.17174246181987e-10 0.25 1.31344059831029e-10 -1.17921427510962e-10 0.3 1.31670226876337e-10 -1.18183064976947e-10 0.35 1.31841272956105e-10 -1.18297369589664e-10 0.4 1.31965626698272e-10 -1.18366999249739e-10 0.45 1.32075927764809e-10 -1.18423126149228e-10 0.5 1.32182031898218e-10 -1.18475231225288e-10 0.55 1.32286939239255e-10 -1.18526217352216e-10 0.6 1.32391661075247e-10 -1.18577069114393e-10 0.65 1.32496327542118e-10 -1.18627907929813e-10 0.700000000000001 1.32601243123117e-10 -1.18679034171892e-10 0.750000000000001 1.32706487596232e-10 -1.18730524697547e-10 0.800000000000001 1.32812157077927e-10 -1.18782473006191e-10 0.850000000000001 1.32918367457781e-10 -1.18834992441096e-10 0.900000000000001 1.33025257975297e-10 -1.18888219707509e-10 0.950000000000001 1.33132994831121e-10 -1.18942318479224e-10 1 1.3324177454236e-10 -1.18997482772182e-10 tmp_ns50wwy/tests/hicum2/npn/reference/fout_npn_1D_npn_full.standard0000644000175000017500000012336514163340332026040 0ustar carstencarstenV(coll) I(coll) I(base) 0 -2.71986743939303e-08 3.9840751464434e-08 0.05 6.69826472300601e-07 1.69717815301063e-08 0.1 7.7187100699015e-07 1.19013735491951e-08 0.15 7.87032362869474e-07 1.07194216724054e-08 0.2 7.89471075739729e-07 1.04385352975224e-08 0.25 7.90035618249654e-07 1.03687516327755e-08 0.3 7.9031814991463e-07 1.03501963707318e-08 0.35 7.90553750470008e-07 1.03447981419329e-08 0.4 7.90777750565482e-07 1.03430431276243e-08 0.45 7.90995875782775e-07 1.0342382886103e-08 0.5 7.91209385089974e-07 1.03420653270103e-08 0.55 7.91418823668514e-07 1.03418262219174e-08 0.6 7.9162460574052e-07 1.03415271250823e-08 0.65 7.91827125437043e-07 1.03410374831902e-08 0.7 7.92026798450329e-07 1.03401821791613e-08 0.75 7.92224095355806e-07 1.0338706554998e-08 0.8 7.92419575913391e-07 1.03362439103005e-08 0.85 7.92613925685734e-07 1.03322803564245e-08 0.9 7.92807995174518e-07 1.03261195497708e-08 0.95 7.93002841914753e-07 1.03168439759696e-08 1 7.93199776817507e-07 1.03032713757246e-08 1.05 7.93400417445359e-07 1.02839041490454e-08 1.1 7.93606752795309e-07 1.02568672532253e-08 1.15 7.93821226321521e-07 1.02198278740981e-08 1.2 7.94046845776388e-07 1.01698882536648e-08 1.25 7.94287328901805e-07 1.01034425257528e-08 1.3 7.94547291490917e-07 1.00159908238561e-08 1.35 7.94832477212313e-07 9.90191095634717e-09 1.4 7.95150016193661e-07 9.75420028580789e-09 1.45 7.95508683709759e-07 9.5642161460109e-09 1.5 7.95919117370492e-07 9.32145626482703e-09 1.55 7.96393949852671e-07 9.01342233240028e-09 1.6 7.96947831376414e-07 8.62559306488337e-09 1.65 7.97597349557947e-07 8.14149994979934e-09 1.7 7.98360889498873e-07 7.54286365754269e-09 1.75 7.99258494367847e-07 6.80973145825552e-09 1.8 8.00311775840893e-07 5.92056645093128e-09 1.85 8.01543892106045e-07 4.85227065937623e-09 1.9 8.02979578137346e-07 3.58015679724816e-09 1.95 8.04645194977474e-07 2.07790142236138e-09 2 8.06568765499253e-07 3.17511574901042e-10 2.05 8.08779976508642e-07 -1.73067523000093e-09 2.1 8.11310141487519e-07 -4.09795206406909e-09 2.15 8.14192128611966e-07 -6.81716933907093e-09 2.2 8.17460263413828e-07 -9.92263656223525e-09 2.25 8.21150215901555e-07 -1.3450008833305e-08 2.3 8.25298880171009e-07 -1.743616603968e-08 2.35 8.29944252123333e-07 -2.19190903051036e-08 2.4 8.35125308746094e-07 -2.69377451011881e-08 2.45 8.40881890820184e-07 -3.2531957850563e-08 2.5 8.4725458988757e-07 -3.87423068336936e-08 2.55 8.54284639729541e-07 -4.56100126334517e-08 2.6 8.62013812317226e-07 -5.31768340691593e-08 2.65 8.70484318087902e-07 -6.14849684671705e-08 2.7 8.79738710388457e-07 -7.05769561052145e-08 2.75 8.89819793958452e-07 -8.04955887002852e-08 2.8 9.00770537368962e-07 -9.12838218547237e-08 2.85 9.12633989374573e-07 -1.02984691416757e-07 2.9 9.25453199167091e-07 -1.15641233743401e-07 2.95 9.39271140539124e-07 -1.29296409873529e-07 3 9.54130639974565e-07 -1.43993033627782e-07 3.05 9.70074308682529e-07 -1.59773703651761e-07 3.1 9.87144478584058e-07 -1.76680739411645e-07 3.15 1.00538314224867e-06 -1.94756121139294e-07 3.2 1.02483189676272e-06 -2.14041433708655e-07 3.25 1.04553189149458e-06 -2.34577814408582e-07 3.3 1.06752377970478e-06 -2.56405904559984e-07 3.35 1.09084767393222e-06 -2.79565804908649e-07 3.4 1.11554310507249e-06 -3.04097034709545e-07 3.45 1.14164898504996e-06 -3.30038494404393e-07 3.5 1.16920357297336e-06 -3.57428431782235e-07 3.54999999999999 1.19824444465429e-06 -3.86304411502323e-07 3.6 1.22880846535952e-06 -4.16703287850395e-07 3.65 1.26093176566179e-06 -4.48661180592906e-07 3.69999999999999 1.29464972024893e-06 -4.82213453789059e-07 3.75 1.32999692954793e-06 -5.17394697417435e-07 3.79999999999999 1.36700720401934e-06 -5.54238711672389e-07 3.84999999999999 1.40571355097662e-06 -5.9277849378511e-07 3.89999999999999 1.44614816378642e-06 -6.33046227225076e-07 3.94999999999999 1.48834241330705e-06 -6.75073273139461e-07 3.99999999999999 1.53232684142562e-06 -7.18890163890725e-07 4.04999999999999 1.57813115655711e-06 -7.645265985559e-07 4.09999999999999 1.62578423097298e-06 -8.12011440255057e-07 4.14999999999999 1.67531409983099e-06 -8.61372715180702e-07 4.19999999999999 1.72674796178265e-06 -9.12637613204536e-07 4.24999999999999 1.78011218103959e-06 -9.6583248994288e-07 4.29999999999999 1.83543229078535e-06 -1.02098287016725e-06 4.34999999999999 1.89273299782393e-06 -1.07811345245157e-06 4.39999999999999 1.95203818836206e-06 -1.1372481149528e-06 4.44999999999999 2.01337093482706e-06 -1.19840992222703e-06 4.49999999999999 2.07675350362724e-06 -1.26162113298797e-06 4.54999999999999 2.14220736376732e-06 -1.32690320872028e-06 4.59999999999999 2.20975319623563e-06 -1.39427682306449e-06 4.64999999999999 2.27941090408513e-06 -1.46376187189576e-06 4.69999999999999 2.351199623135e-06 -1.53537748402295e-06 4.74999999999999 2.42513773322364e-06 -1.60914203243911e-06 4.79999999999999 2.50124286994869e-06 -1.68507314605889e-06 4.84999999999999 2.57953193683371e-06 -1.76318772188244e-06 4.89999999999999 2.66002111786504e-06 -1.84350193752954e-06 4.94999999999999 2.74272589034627e-06 -1.92603126409128e-06 4.99999999999999 2.82766103802147e-06 -2.01079047925035e-06 5.04999999999999 2.91484066442159e-06 -2.0977936806246e-06 5.09999999999999 3.00427820639194e-06 -2.18705429929152e-06 5.14999999999999 3.0959864477614e-06 -2.27858511345453e-06 5.19999999999999 3.18997753311761e-06 -2.37239826221519e-06 5.24999999999999 3.28626298165441e-06 -2.46850525941761e-06 5.29999999999999 3.3848537010609e-06 -2.56691700753459e-06 5.34999999999999 3.48576000142381e-06 -2.66764381156693e-06 5.39999999999999 3.58899160911749e-06 -2.77069539293049e-06 5.44999999999999 3.69455768065721e-06 -2.87608090330646e-06 5.49999999999999 3.80246681649466e-06 -2.98380893843392e-06 5.54999999999999 3.91272707473534e-06 -3.09388755182435e-06 5.59999999999999 4.02534598476049e-06 -3.20632426838048e-06 5.64999999999999 4.14033056073639e-06 -3.32112609790286e-06 5.69999999999999 4.25768731499736e-06 -3.43829954846989e-06 5.74999999999999 4.37742227128828e-06 -3.55785063967751e-06 5.79999999999999 4.49954097785555e-06 -3.67978491572734e-06 5.84999999999999 4.62404852037532e-06 -3.80410745835217e-06 5.89999999999999 4.75094953471001e-06 -3.93082289956967e-06 5.94999999999999 4.88024821948466e-06 -4.05993543425612e-06 6 5.01194834847613e-06 -4.1914488325328e-06 0 -1.46027863500068e-07 1.96001862768083e-07 0.05 4.32853014235216e-06 7.2383426997011e-08 0.1 4.9829768618453e-06 4.41096559828942e-08 0.15 5.08150303167346e-06 3.73079151900335e-08 0.2 5.09705409681996e-06 3.5648218895632e-08 0.25 5.10061907903318e-06 3.52263584385657e-08 0.3 5.10238184068154e-06 3.51120702689405e-08 0.35 5.10384302493303e-06 3.50784525334567e-08 0.4 5.10522810070915e-06 3.50675858791207e-08 0.45 5.1065739251628e-06 3.50636857298968e-08 0.5 5.10788885305263e-06 3.50620681661755e-08 0.55 5.10917657465788e-06 3.50611506947993e-08 0.6 5.11043980743618e-06 3.50602177038933e-08 0.65 5.11168099019344e-06 3.50587014111822e-08 0.7 5.11290253405278e-06 3.5055874949496e-08 0.75 5.11410701813362e-06 3.50506555288445e-08 0.8 5.11529739135033e-06 3.50414208917474e-08 0.85 5.11647719016402e-06 3.50258056399919e-08 0.9 5.11765077308386e-06 3.50004947575269e-08 0.95 5.11882357194578e-06 3.49609960065416e-08 1 5.12000236252829e-06 3.49013881013303e-08 1.05 5.12119556273413e-06 3.48140399979836e-08 1.1 5.12241357562081e-06 3.46892848249241e-08 1.15 5.12366920679965e-06 3.45150193286196e-08 1.2 5.124978199688e-06 3.42761855632582e-08 1.25 5.1263599440547e-06 3.39540792740243e-08 1.3 5.12783841626622e-06 3.35254259600366e-08 1.35 5.12944339345273e-06 3.29611811605329e-08 1.4 5.1312119377914e-06 3.22250568867808e-08 1.45 5.13319006703097e-06 3.12718557823639e-08 1.5 5.13543442622018e-06 3.00457959112122e-08 1.55 5.13801369184726e-06 2.84790938493231e-08 1.6 5.1410094307318e-06 2.64910845334212e-08 1.65 5.14451624672932e-06 2.3988047936907e-08 1.7 5.1486412642373e-06 2.08636985586999e-08 1.75 5.15350322514396e-06 1.70000664751622e-08 1.8 5.15923158839023e-06 1.22683847985127e-08 1.85 5.16596595113071e-06 6.52966595426461e-09 1.9 5.17385590605337e-06 -3.65149096570373e-10 1.95 5.18306123625898e-06 -8.57537316725679e-09 2 5.19375223301553e-06 -1.82708754959504e-08 2.05 5.20610992637921e-06 -2.9632297584346e-08 2.1 5.22032609868794e-06 -4.28510539843023e-08 2.15 5.23660304415734e-06 -5.81290819702468e-08 2.2 5.25515310456704e-06 -7.56783700608121e-08 2.25 5.27619804157825e-06 -9.5720325521122e-08 2.3 5.29996830910798e-06 -1.18485043739135e-07 2.35 5.32670227764409e-06 -1.442105308553e-07 2.4 5.35664544678876e-06 -1.73141915521187e-07 2.45 5.39004966835625e-06 -2.05530671804875e-07 2.5 5.4271723920527e-06 -2.41633865054739e-07 2.55 5.46827593912933e-06 -2.81713425966929e-07 2.6 5.51362680561513e-06 -3.26035454367871e-07 2.65 5.56349499487586e-06 -3.74869552397531e-07 2.7 5.61815337854466e-06 -4.28488186100795e-07 2.75 5.67787708478931e-06 -4.87166074367949e-07 2.8 5.74294291307927e-06 -5.51179604372759e-07 2.85 5.81362877489791e-06 -6.20806272943712e-07 2.9 5.89021316010738e-06 -6.96324153570181e-07 2.95 5.97297462887421e-06 -7.78011388947362e-07 3 6.06219132918848e-06 -8.66145709090277e-07 3.05 6.15814054006481e-06 -9.61003975102844e-07 3.1 6.26109824050875e-06 -1.0628617486847e-06 3.15 6.37133870428463e-06 -1.17199288741065e-06 3.2 6.48913412044109e-06 -1.28866916573823e-06 3.25 6.61475423945117e-06 -1.41315992160019e-06 3.3 6.74846604471544e-06 -1.54573172833015e-06 3.35 6.8905334490653e-06 -1.6866480915587e-06 3.4 7.04121701579677e-06 -1.83616917061039e-06 3.45 7.20077370366369e-06 -1.99455152383133e-06 3.5 7.36945663517126e-06 -2.16204787718839e-06 3.54999999999999 7.5475148874305e-06 -2.33890691540204e-06 3.6 7.73519330477071e-06 -2.52537309481e-06 3.65 7.93273233225224e-06 -2.72168647710529e-06 3.69999999999999 8.14036786918192e-06 -2.92808258305212e-06 3.75 8.35833114170361e-06 -3.14479226525284e-06 3.79999999999999 8.58684859351823e-06 -3.37204159902156e-06 3.84999999999999 8.82614179377736e-06 -3.61005179040958e-06 3.89999999999999 9.07642736119535e-06 -3.85903910042869e-06 3.94999999999999 9.33791690342984e-06 -4.11921478452336e-06 3.99999999999999 9.61081697079503e-06 -4.39078504635737e-06 4.04999999999999 9.89532902339041e-06 -4.67395100499828e-06 4.09999999999999 1.01916494107487e-05 -4.96890867460539e-06 4.14999999999999 1.04999693631362e-05 -5.27584895575456e-06 4.19999999999999 1.08204749936652e-05 -5.59495763756091e-06 4.24999999999999 1.11533473104112e-05 -5.92641540979321e-06 4.29999999999999 1.14987622377585e-05 -6.27039788420489e-06 4.34999999999999 1.18568906462356e-05 -6.62707562434271e-06 4.39999999999999 1.22278983901308e-05 -6.99661418312609e-06 4.44999999999999 1.26119463522184e-05 -7.37917414752687e-06 4.49999999999999 1.30091904949572e-05 -7.77491118971236e-06 4.54999999999999 1.3419781917557e-05 -8.18397612404952e-06 4.59999999999999 1.3843866918346e-05 -8.60651496940128e-06 4.64999999999999 1.42815870619e-05 -9.04266901617917e-06 4.69999999999999 1.47330792504303e-05 -9.49257489764768e-06 4.74999999999999 1.51984757989549e-05 -9.95636466500769e-06 4.79999999999999 1.56779045138115e-05 -1.04341658658155e-05 4.84999999999999 1.61714887740941e-05 -1.09261016253222e-05 4.89999999999999 1.66793476156278e-05 -1.14322907303472e-05 4.94999999999999 1.720159581712e-05 -1.19528477153243e-05 4.99999999999999 1.7738343988151e-05 -1.24878829501851e-05 5.04999999999999 1.82896986586933e-05 -1.3037502729768e-05 5.09999999999999 1.88557623698686e-05 -1.36018093644625e-05 5.14999999999999 1.94366337656761e-05 -1.41809012718244e-05 5.19999999999999 2.00324076854437e-05 -1.47748730689103e-05 5.24999999999999 2.06431752567748e-05 -1.53838156651087e-05 5.29999999999999 2.12690239887795e-05 -1.6007816355253e-05 5.34999999999999 2.19100378653997e-05 -1.6646958912829e-05 5.39999999999999 2.25662974386498e-05 -1.73013236830963e-05 5.44999999999999 2.32378799216129e-05 -1.79709876759662e-05 5.49999999999999 2.39248592810444e-05 -1.86560246584863e-05 5.54999999999999 2.46273063294503e-05 -1.93565052468005e-05 5.59999999999999 2.534528881652e-05 -2.00724969974631e-05 5.64999999999999 2.60788715198015e-05 -2.08040644979969e-05 5.69999999999999 2.68281163345247e-05 -2.15512694565986e-05 5.74999999999999 2.75930823624806e-05 -2.23141707909022e-05 5.79999999999999 2.83738259998809e-05 -2.30928247157232e-05 5.84999999999999 2.91704010241272e-05 -2.38872848297131e-05 5.89999999999999 2.99828586794291e-05 -2.46976022008634e-05 5.94999999999999 3.08112477612156e-05 -2.55238254508059e-05 6 3.16556146992969e-05 -2.63660008378621e-05 0 -7.82463314103269e-07 1.01452864787273e-06 0.05 2.73484815423687e-05 3.46278427585001e-07 0.1 3.1471990264637e-05 1.88170811948905e-07 0.15 3.20835991636881e-05 1.48920471839661e-07 0.2 3.2181660799762e-05 1.39106253532932e-07 0.25 3.22040928696472e-05 1.36559768640072e-07 0.3 3.22150446770017e-05 1.35858022058491e-07 0.35 3.22239960466424e-05 1.35648933579276e-07 0.4 3.2232393150292e-05 1.35580872219409e-07 0.45 3.22404873197932e-05 1.355565588521e-07 0.5 3.22483446869053e-05 1.35546913090268e-07 0.55 3.22559979834883e-05 1.35542313117541e-07 0.6 3.22634709191184e-05 1.35538879169831e-07 0.65 3.22707832074084e-05 1.35534122813082e-07 0.7 3.22779524961094e-05 1.35525186127226e-07 0.75 3.22849957659704e-05 1.35507782057942e-07 0.8 3.2291930664916e-05 1.35475215265086e-07 0.85 3.22987768895452e-05 1.35417260974902e-07 0.9 3.23055576418246e-05 1.35319008219783e-07 0.95 3.23123011724547e-05 1.35159557079841e-07 1 3.231904241639e-05 1.34910570058827e-07 1.05 3.23258247401947e-05 1.34534686300468e-07 1.1 3.23327018562328e-05 1.3398375340613e-07 1.15 3.23397400153663e-05 1.33196771809131e-07 1.2 3.23470206670145e-05 1.32097368644174e-07 1.25 3.23546438638618e-05 1.30590528530348e-07 1.3 3.23627327644209e-05 1.2855823093817e-07 1.35 3.23714396056873e-05 1.25853621761275e-07 1.4 3.23809534156579e-05 1.22293444696446e-07 1.45 3.23915094435383e-05 1.17648744184932e-07 1.5 3.24033997770358e-05 1.11634354176321e-07 1.55 3.24169839731986e-05 1.03898326295811e-07 1.6 3.2432697996121e-05 9.40129862221207e-08 1.65 3.24510596966675e-05 8.14693756334443e-08 1.7 3.24726697707804e-05 6.56761537065948e-08 1.75 3.24982085036603e-05 4.59626813000614e-08 1.8 3.25284300540776e-05 2.15845762962784e-08 1.85 3.25641567503354e-05 -8.2706915327196e-09 1.9 3.26062754262966e-05 -4.44801725444734e-08 1.95 3.26557365289591e-05 -8.79845099512986e-08 2 3.27135553750877e-05 -1.39789112467503e-07 2.05 3.27808141960208e-05 -2.00966095237721e-07 2.1 3.2858663638355e-05 -2.72655682213189e-07 2.15 3.29483228957283e-05 -3.56066260938333e-07 2.2 3.30510782388225e-05 -4.52472862568137e-07 2.25 3.31682801347267e-05 -5.63214256856186e-07 2.3 3.33013393409236e-05 -6.89689042410541e-07 2.35 3.34517223774823e-05 -8.33351129992942e-07 2.4 3.36209467076797e-05 -9.95704943917988e-07 2.45 3.38105758581117e-05 -1.17830056865494e-06 2.5 3.40222146205601e-05 -1.38272898014324e-06 2.55 3.42575044123687e-05 -1.61061743678553e-06 2.6 3.45181188297963e-05 -1.86362506351043e-06 2.65 3.48057594046935e-05 -2.14343863860973e-06 2.7 3.5122151562912e-05 -2.45176858141856e-06 2.75 3.54690407783155e-05 -2.79034513451787e-06 2.8 3.58481889156558e-05 -3.16091473361903e-06 2.85 3.62613707567383e-05 -3.56523655950549e-06 2.9 3.67103707060151e-05 -4.00507926813114e-06 2.95 3.7196979673337e-05 -4.48221789657716e-06 3 3.77229921327875e-05 -4.99843094377294e-06 3.05 3.82902033572644e-05 -5.55549762562464e-06 3.1 3.8900406828772e-05 -6.1551953044947e-06 3.15 3.95553918243096e-05 -6.7992970929131e-06 3.2 4.02569411769251e-05 -7.48956963106885e-06 3.25 4.10068292109474e-05 -8.22777103710536e-06 3.3 4.18068198497805e-05 -9.01564902860774e-06 3.35 4.26586648939855e-05 -9.85493921298987e-06 3.4 4.35641024665798e-05 -1.07473635437768e-05 3.45 4.45248556219207e-05 -1.16946289391332e-05 3.5 4.55426311138742e-05 -1.26984260583703e-05 3.54999999999999 4.66191183183942e-05 -1.37604282316159e-05 3.6 4.77559883052489e-05 -1.48822905373894e-05 3.65 4.89548930531928e-05 -1.60656490224344e-05 3.69999999999999 5.02174648025997e-05 -1.73121200578719e-05 3.75 5.15453155393673e-05 -1.86232998255249e-05 3.79999999999999 5.29400366037847e-05 -2.00007639281398e-05 3.84999999999999 5.44031984179476e-05 -2.14460671171481e-05 3.89999999999999 5.59363503252724e-05 -2.2960743131594e-05 3.94999999999999 5.75410205358901e-05 -2.45463046419746e-05 3.99999999999999 5.92187161715139e-05 -2.62042432927285e-05 4.04999999999999 6.09709234037439e-05 -2.79360298373307e-05 4.09999999999999 6.27991076799552e-05 -2.97431143601421e-05 4.14999999999999 6.47047140307701e-05 -3.16269265791993e-05 4.19999999999999 6.66891674540051e-05 -3.35888762246574e-05 4.24999999999999 6.87538733693697e-05 -3.56303534874452e-05 4.29999999999999 7.09002181393601e-05 -3.77527295333716e-05 4.34999999999999 7.31295696511254e-05 -3.99573570777365e-05 4.39999999999999 7.5443277955316e-05 -4.22455710162425e-05 4.44999999999999 7.78426759573445e-05 -4.46186891078481e-05 4.49999999999999 8.03290801571683e-05 -4.70780127056687e-05 4.54999999999999 8.29037914342523e-05 -4.96248275324694e-05 4.59999999999999 8.55680958737831e-05 -5.2260404497076e-05 4.64999999999999 8.83232656316008e-05 -5.49860005489339e-05 4.69999999999999 9.1170559834274e-05 -5.78028595675462e-05 4.74999999999999 9.41112255126688e-05 -6.07122132847713e-05 4.79999999999999 9.7146498565455e-05 -6.37152822368951e-05 4.84999999999999 0.000100277604751387 -6.68132767449462e-05 4.89999999999999 0.000103505760708012 -7.00073979210875e-05 4.94999999999999 0.000106832174995185 -7.3298838699445e-05 4.99999999999999 0.000110258049161847 -7.66887848898486e-05 5.04999999999999 0.000113784578834891 -8.01784162532919e-05 5.09999999999999 0.000117412954829291 -8.37689075982012e-05 5.14999999999999 0.000121144364277979 -8.74614298962121e-05 5.19999999999999 0.000124979991781474 -9.125715141722e-05 5.24999999999999 0.000128921020576405 -9.51572388829752e-05 5.29999999999999 0.00013296863372244 -9.91628586387421e-05 5.34999999999999 0.000137124015308414 -0.000103275177843572 5.39999999999999 0.000141388351675804 -0.000107495365677799 5.44999999999999 0.000145762832662175 -0.000111824594569757 5.49999999999999 0.000150248652862628 -0.00011626404144029 5.54999999999999 0.000154847012911041 -0.000120814888966513 5.59999999999999 0.000159559120782104 -0.000125478326865741 5.64999999999999 0.00016438619311273 -0.000130255553198626 5.69999999999999 0.00016932945654753 -0.000135147775695334 5.74999999999999 0.000174390149105375 -0.000140156213102672 5.79999999999999 0.000179569521571257 -0.000145282096555685 5.84999999999999 0.000184868838912854 -0.000150526670973508 5.89999999999999 0.00019028938172579 -0.000155891196482966 5.94999999999999 0.000195832447706995 -0.00016137694986974 6 0.000201499353157306 -0.000166985226058298 0 -4.14366862889276e-06 5.42933943049589e-06 0.05 0.000168193550159179 1.82099648284136e-06 0.1 0.000193974266232471 9.24503672549723e-07 0.15 0.000197844363535644 6.93202560877825e-07 0.2 0.000198483876552381 6.33711754998031e-07 0.25 0.000198639443065528 6.1792734031905e-07 0.3 0.00019871699985458 6.13499642714044e-07 0.35 0.000198778164187865 6.12162233362721e-07 0.4 0.000198833232764441 6.11722405397399e-07 0.45 0.000198884524041522 6.11564116928871e-07 0.5 0.000198932934336655 6.11501442806688e-07 0.55 0.000198978998586336 6.11473313851334e-07 0.6 0.00019902309956784 6.11456874161641e-07 0.65 0.00019906553083621 6.1144036369277e-07 0.7 0.000199106527382541 6.11412814921179e-07 0.75 0.000199146285782304 6.11358460327471e-07 0.8 0.000199184979749557 6.11251791328805e-07 0.85 0.000199222773500601 6.11051720296072e-07 0.9 0.000199259833941827 6.10695469866296e-07 0.95 0.000199296342427743 6.10091453942851e-07 1 0.000199332506439964 6.09111173420781e-07 1.05 0.000199368571393016 6.07580310859577e-07 1.1 0.000199404832823758 6.05268980695076e-07 1.15 0.00019944164940437 6.01880850865028e-07 1.2 0.000199479457553685 5.97040495407009e-07 1.25 0.000199518788898201 5.90277855919519e-07 1.3 0.000199560292390067 5.810081365313e-07 1.35 0.000199604763371608 5.6850497541148e-07 1.4 0.000199653181999836 5.5186459520946e-07 1.45 0.00019970676279535 5.29959230631588e-07 1.5 0.000199767015220033 5.01379883968753e-07 1.55 0.000199835811938337 4.64371545732887e-07 1.6 0.000199915457293961 4.16767953933889e-07 1.65 0.000200008745093966 3.55936274858383e-07 1.7 0.000200118994375759 2.7874253813852e-07 1.75 0.000200250056279105 1.81544480832692e-07 1.8 0.000200406293907267 6.0210146585331e-08 1.85 0.000200592546362143 -8.98482762014911e-08 1.9 0.000200814092806358 -2.73640385022655e-07 1.95 0.000201076629640815 -4.96575706299981e-07 2 0.000201386265611254 -7.644586764643e-07 2.05 0.000201749530966062 -1.08349684637313e-06 2.1 0.000202173392013297 -1.46031415375251e-06 2.15 0.000202665262569323 -1.9019612300942e-06 2.2 0.000203233007025733 -2.41591776366828e-06 2.25 0.000203884933555007 -3.01008552953985e-06 2.3 0.000204629778701838 -3.69277327675256e-06 2.35 0.000205476685860066 -4.47267584597115e-06 2.4 0.000206435180257449 -5.35885000314122e-06 2.45 0.000207515142601308 -6.36068902714683e-06 2.5 0.000208726782900755 -7.4878974838542e-06 2.55 0.00021008061540923 -8.75046707612916e-06 2.6 0.000211587435208091 -1.01586540584887e-05 2.65 0.000213258296678184 -1.17229584460289e-05 2.7 0.000215104493949308 -1.34541050989652e-05 2.75 0.000217137543339365 -1.53630266906317e-05 2.8 0.000219369167764504 -1.74608485384916e-05 2.85 0.00022181128309721 -1.97588752738209e-05 2.9 0.000224475986456578 -2.22685793330739e-05 2.95 0.000227375546426663 -2.50015912650169e-05 3 0.00023052239521023 -2.79696918586522e-05 3.05 0.000233929122734701 -3.11848061060703e-05 3.1 0.000237608472734867 -3.46589990213547e-05 3.15 0.000241573340841891 -3.84044733416023e-05 3.2 0.000245836774712422 -4.24335691396884e-05 3.25 0.000250411976234446 -4.67587653810405e-05 3.3 0.0002553123058494 -5.13926834590564e-05 3.35 0.000260551289033113 -5.63480927463704e-05 3.4 0.000266142624981648 -6.16379182023259e-05 3.45 0.000272100197553513 -6.72752500813047e-05 3.5 0.000278438088525394 -7.32733557919428e-05 3.54999999999999 0.000285170593226728 -7.96456939643106e-05 3.6 0.000292312238628519 -8.64059307909674e-05 3.65 0.00029987780397346 -9.35679587184322e-05 3.69999999999999 0.000307882344048675 -0.000101145917578443 3.75 0.000316341215220053 -0.000109154218263772 3.79999999999999 0.000325270104365383 -0.000117607569070673 3.84999999999999 0.000334685060868176 -0.000126521004851157 3.89999999999999 0.000344602531858172 -0.000135909919141263 3.94999999999999 0.000355039400916574 -0.000145790099459236 3.99999999999999 0.000366013030496825 -0.000156177765997984 4.04999999999999 0.000377541308351937 -0.000167089613971908 4.09999999999999 0.000389642698303601 -0.000178542859918366 4.14999999999999 0.000402336295740443 -0.000190555292300618 4.19999999999999 0.000415641888290003 -0.000203145326811326 4.24999999999999 0.000429580022178378 -0.000216332066837239 4.29999999999999 0.000444172074868072 -0.000230135369615114 4.34999999999999 0.000459440334653214 -0.000244575918688981 4.39999999999999 0.000475408087999227 -0.000259675303374218 4.44999999999999 0.000492099715528343 -0.000275456106039108 4.49999999999999 0.000509540797700475 -0.000291941998144635 4.54999999999999 0.000527758231397916 -0.000309157846128148 4.59999999999999 0.000546780358821554 -0.000327129828393217 4.64999999999999 0.000566637110329676 -0.000345885564869985 4.69999999999999 0.000587360163127812 -0.000365454260856693 4.74999999999999 0.000608983118036943 -0.000385866867139777 4.79999999999999 0.000631541696955451 -0.000407156258736374 4.84999999999999 0.000655073964092724 -0.000429357435016914 4.89999999999999 0.000679620574616305 -0.000452507744468243 4.94999999999999 0.000705225055025331 -0.000476647137958855 4.99999999999999 0.000731934120401994 -0.000501818455113792 5.04999999999999 0.000759798034696055 -0.000528067749304516 5.09999999999999 0.00078887102145624 -0.000555444657879462 5.14999999999999 0.000819211733973711 -0.000584002825643658 5.19999999999999 0.000850883795728654 -0.000613800391313104 5.24999999999999 0.000883956424480156 -0.000644900548846682 5.29999999999999 0.000918505156407523 -0.000677372198290533 5.34999999999999 0.000954612690642966 -0.000711290704265352 5.39999999999999 0.000992369879576127 -0.000746738784708508 5.44999999999999 0.00103187689687099 -0.000783807558308413 5.49999999999999 0.00107324462370157 -0.000822597786674802 5.54999999999999 0.00111659630501221 -0.000863221357319229 5.59999999999999 0.00116206954280353 -0.000905803066988797 5.64999999999999 0.00120981871384 -0.000950482782983499 5.69999999999999 0.00126001792724023 -0.000997418084943167 5.74999999999999 0.00131286467625372 -0.00104678752398549 5.79999999999999 0.00136858439332068 -0.00109879468455819 5.84999999999999 0.00142743619594792 -0.00115367330373354 5.89999999999999 0.00148972022530536 -0.0012116938037574 5.94999999999999 0.00155578714969758 -0.00127317174403595 6 0.00162605066402476 -0.00133847892733171 0 -2.07277968768435e-05 2.99997178844943e-05 0.05 0.000948765840067139 1.06297103957281e-05 0.1 0.00111328600993368 5.18351590723737e-06 0.15 0.00114013785959013 3.64759294426239e-06 0.2 0.00114542360481627 3.22769370594086e-06 0.25 0.0011471183082234 3.1112708562326e-06 0.3 0.00114805610256734 3.07753234518992e-06 0.35 0.00114873928908425 3.06707912182394e-06 0.4 0.00114928733666424 3.06355801021503e-06 0.45 0.00114974493972736 3.0622505850402e-06 0.5 0.00115013616150002 3.06170736205001e-06 0.55 0.00115047648797096 3.06144951570609e-06 0.6 0.00115077670924346 3.06130416720303e-06 0.65 0.00115104467999449 3.06119760461621e-06 0.7 0.00115128630004299 3.0610822896199e-06 0.75 0.00115150612286985 3.06090394499112e-06 0.8 0.0011517077616649 3.06057750237743e-06 0.85 0.00115189418058663 3.05995851227708e-06 0.9 0.00115206791101157 3.05881425728639e-06 0.95 0.00115223122373243 3.05678894440802e-06 1 0.00115238627435061 3.05336227368133e-06 1.05 0.0011525352310349 3.04780291766e-06 1.1 0.00115268039114651 3.03911740913501e-06 1.15 0.00115282429187554 3.02599416929422e-06 1.2 0.00115296982017434 3.00674112686237e-06 1.25 0.00115312032884681 2.97921335046951e-06 1.3 0.00115327976845767 2.94072435561262e-06 1.35 0.00115345284827703 2.88793155142521e-06 1.4 0.00115364524269798 2.81668345640735e-06 1.45 0.00115386386050525 2.72181535120679e-06 1.5 0.00115411719016872 2.59688320189604e-06 1.55 0.00115441572190653 2.43383541824805e-06 1.6 0.001154772425195 2.2226394370569e-06 1.65 0.00115520323194918 1.95090267578205e-06 1.7 0.00115572745117248 1.60354683675881e-06 1.75 0.00115636803657358 1.16259807772684e-06 1.8 0.00115715165771317 6.0713266099431e-07 1.85 0.00115810858496052 -8.66295589203861e-08 1.9 0.00115927246373875 -9.45143139205642e-07 1.95 0.00116068008831331 -1.9973535426824e-06 2 0.00116237126897361 -3.27458627734432e-06 2.05 0.00116438883057786 -4.81053870759767e-06 2.1 0.00116677871981999 -6.64135664130358e-06 2.15 0.00116959016401734 -8.80575045628231e-06 2.2 0.00117287582383261 -1.13451052092211e-05 2.25 0.00117669190414012 -1.43035563808526e-05 2.3 0.00118109821366941 -1.77280237654147e-05 2.35 0.00118615818346848 -2.16682113077123e-05 2.4 0.0011919388634764 -2.61765879450594e-05 2.45 0.00119851091780682 -3.13083654917429e-05 2.5 0.00120594863645143 -3.71214872628129e-05 2.55 0.00121432997701363 -4.36766378413575e-05 2.6 0.00122373664646271 -5.10372814765532e-05 2.65 0.00123425423039181 -5.92697345554286e-05 2.7 0.0012459723759112 -6.8443276447714e-05 2.75 0.00125898503391864 -7.86303026217959e-05 2.8 0.00127339076682942 -8.99065240840977e-05 2.85 0.0012892931287449 -0.000102351217757392 2.9 0.00130680112638211 -0.000116047533295756 2.95 0.00132602977084635 -0.000131082862998672 3 0.00134710073252563 -0.000147549282941673 3.05 0.0013701431140962 -0.000165544075230014 3.1 0.00139529435997468 -0.000185170343482332 3.15 0.00142270132470883 -0.000206537736374521 3.2 0.00145252152800061 -0.000229763297471445 3.25 0.00148492463061959 -0.000254972463848732 3.3 0.00152009417381724 -0.000282300241430379 3.35 0.00155822963556429 -0.000311892591906639 3.4 0.00159954887079637 -0.000343908075051132 3.45 0.00164429102094767 -0.000378519801914734 3.5 0.00169272000190242 -0.000415917769698234 3.54999999999999 0.00174512871124758 -0.000456311669453005 3.6 0.00180184413845455 -0.000499934285071854 3.65 0.00186323361985275 -0.000547045639132854 3.69999999999999 0.00192971256060045 -0.000597938092198747 3.75 0.00200175405831472 -0.000652942673389736 3.79999999999999 0.00207990102280385 -0.000712437020928024 3.84999999999999 0.00216478161728955 -0.000776855456690492 3.89999999999999 0.00225712918650275 -0.00084670193208688 3.94999999999999 0.00235780834808079 -0.000922566902082008 3.99999999999999 0.00246784970959936 -0.00100514967385979 4.04999999999999 0.00258849691390337 -0.00109528854672517 4.09999999999999 0.00272127173081723 -0.00119400230668216 4.14999999999999 0.00286806629935762 -0.00130254872613934 4.19999999999999 0.00303127753644634 -0.00142250934910864 4.24999999999999 0.00321400952430886 -0.00155591644500663 4.29999999999999 0.00342039048223218 -0.00170545067911453 4.34999999999999 0.00365609363139644 -0.00187476394699971 4.39999999999999 0.00392924618356115 -0.00206903913510699 4.44999999999999 0.00425214399905837 -0.00229603879225008 4.49999999999999 0.00464484451532182 -0.00256828644501164 4.54999999999999 0.00514392768830878 -0.00290834317397936 4.59999999999999 0.00582975654675993 -0.00336508005753481 4.64999999999999 0.00696637753952635 -0.00409627772947702 4.69999999999999 0.219215025444707 -0.0717428290374494 4.74999999999999 0.232817308389252 -0.0760430551547755 4.79999999999999 0.245950041317811 -0.0803461418724199 4.84999999999999 0.258114451805332 -0.0846968334877185 4.89999999999999 0.268587320349541 -0.0891787888681123 4.94999999999999 0.277690069013698 -0.0938342443085792 4.99999999999999 0.286106277459853 -0.0986517113854876 5.04999999999999 0.294223466086616 -0.103613945398706 5.09999999999999 0.302231447347271 -0.108707620129496 5.14999999999999 0.310231210455305 -0.113921798600002 5.19999999999999 0.318283078830228 -0.119246404252081 5.24999999999999 0.326427624224546 -0.124671354970792 5.29999999999999 0.334695631164502 -0.130186092770733 5.34999999999999 0.343113407737361 -0.135779352961853 5.39999999999999 0.351705950551543 -0.141439122598133 5.44999999999999 0.360498991598594 -0.147152795082682 5.49999999999999 0.369520288910205 -0.152907550100184 5.54999999999999 0.378800147811377 -0.158690974654241 5.59999999999999 0.388370910515554 -0.16449188195707 5.64999999999999 0.398265042950672 -0.170301180151133 5.69999999999999 0.408511611814525 -0.176112529554519 5.74999999999999 0.41913151874715 -0.181922493878686 5.79999999999999 0.430132729569884 -0.187730031383506 5.84999999999999 0.441507335194468 -0.193535470344997 5.89999999999999 0.453231883195666 -0.199339379838017 5.94999999999999 0.465270989121907 -0.205141762575133 6 0.477582758404361 -0.210941755410274 0 -9.37665899514719e-05 0.000175748828441741 0.05 0.00368693970355442 7.44119664884279e-05 0.1 0.00475244788123923 3.63056757364326e-05 0.15 0.00499208868471399 2.18071230961441e-05 0.2 0.00505634922963096 1.67524015583608e-05 0.25 0.00508146670357152 1.51155302365834e-05 0.3 0.00509513384680675 1.45930624138515e-05 0.35 0.00510409261170088 1.44205005661233e-05 0.4 0.00511052459432827 1.43592868769352e-05 0.45 0.00511536519304551 1.43352175063692e-05 0.5 0.00511910860917079 1.4324450201705e-05 0.55 0.00512205302330455 1.43188968264882e-05 0.6 0.00512439390926268 1.43156160148212e-05 0.65 0.00512626665681572 1.43134398086423e-05 0.7 0.00512776884921357 1.43118356244459e-05 0.75 0.00512897304114246 1.43104888168532e-05 0.8 0.00512993424099986 1.43091294076359e-05 0.85 0.00513069522255147 1.43073724432131e-05 0.9 0.00513129040464183 1.43045965820473e-05 0.95 0.00513174820932742 1.42998299425638e-05 1 0.00513209290515646 1.42915941923526e-05 1.05 0.00513234610859108 1.42777222335601e-05 1.1 0.00513252802782112 1.42551545278937e-05 1.15 0.00513265852911018 1.42197155773431e-05 1.2 0.00513275808734724 1.41658698200764e-05 1.25 0.00513284867366905 1.40864512827334e-05 1.3 0.0051329546360953 1.39723530340922e-05 1.35 0.00513310364254272 1.38121508033323e-05 1.4 0.00513332777612775 1.35916210905745e-05 1.45 0.00513366489380023 1.32931007191445e-05 1.5 0.00513416036919238 1.28946280854076e-05 1.55 0.00513486932109581 1.23688157493393e-05 1.6 0.00513585935934316 1.16814404417321e-05 1.65 0.00513721374710495 1.07898068381121e-05 1.7 0.00513903469640017 9.64103818545357e-06 1.75 0.00514144634092091 8.17053860834479e-06 1.8 0.00514459686878882 6.30090449605186e-06 1.85 0.00514865944520135 3.94148387159847e-06 1.9 0.00515383191996408 9.88588462493538e-07 1.95 0.00516033575901809 -2.67387277046082e-06 2 0.00516841492757848 -7.17372274019063e-06 2.05 0.00517833541612861 -1.26501719110958e-05 2.1 0.00519038577358445 -1.92539898357104e-05 2.15 0.00520487860595377 -2.71481653816469e-05 2.2 0.00522215273467411 -3.65088876406129e-05 2.25 0.00524257567196573 -4.75266594712301e-05 2.3 0.00526654620183564 -6.0407424653432e-05 2.35 0.00529449703990136 -7.53736864370437e-05 2.4 0.00532689769691901 -9.26656740246851e-05 2.45 0.00536425776036761 -0.000112542658540651 2.5 0.00540713084690318 -0.000135284537177205 2.55 0.0054561194917306 -0.000161193806973103 2.6 0.00551188125235237 -0.000190598050177395 2.65 0.00557513632950118 -0.000223853059277544 2.7 0.00564667705687653 -0.000261346745914577 2.75 0.0057273796903904 -0.000303504006736359 2.8 0.00581821904437753 -0.000350792763329685 2.85 0.00592028668732649 -0.000403731456444313 2.9 0.00603481363964796 -0.000462898362676109 2.95 0.00616319883626428 -0.000528943223840221 3 0.00630704506634221 -0.000602601849641136 3.05 0.00646820474121694 -0.000684714594736463 3.1 0.00664883876258842 -0.000776249955630521 3.15 0.00685149311357525 -0.000878335034006823 3.2 0.00707919981242563 -0.000992295355939695 3.25 0.00733561194387537 -0.00111970765976188 3.3 0.00762518727818396 -0.00126247100222499 3.35 0.0079534426545706 -0.0014229042850552 3.4 0.00832731391244597 -0.00160388278768298 3.45 0.00875567755050715 -0.0018090338257806 3.5 0.009250127925431 -0.00204302476487614 3.54999999999999 0.0098261727753557 -0.00231200036668555 3.6 0.0105051423484098 -0.00262427149051873 3.65 0.0113173763660289 -0.00299144731913476 3.69999999999999 0.0123078354038703 -0.00343039535757315 3.75 0.0135466446387832 -0.00396685409697853 3.79999999999999 0.0151505634126824 -0.00464262567204278 3.84999999999999 0.0173312934874248 -0.00553131894649718 3.89999999999999 0.0205179979783011 -0.00677682395859876 3.94999999999999 0.0257027530751124 -0.00869546856983237 3.99999999999999 0.0352163744247809 -0.0119681274565783 4.04999999999999 0.0510393813015245 -0.016977011277922 4.09999999999999 0.0690465204837735 -0.0223204212345756 4.14999999999999 0.0861517992516985 -0.0272181970599345 4.19999999999999 0.102183573976552 -0.0317333750061579 4.24999999999999 0.117399634174244 -0.0359944658863694 4.29999999999999 0.132007512055926 -0.040089523687309 4.34999999999999 0.146146790273964 -0.0440761425484078 4.39999999999999 0.159910928321775 -0.0479936254845697 4.44999999999999 0.17336389845603 -0.0518702816629709 4.49999999999999 0.186550342565738 -0.0557275750208403 4.54999999999999 0.199501158475568 -0.0595825389957822 4.59999999999999 0.212233895299901 -0.0634492717042717 4.64999999999999 0.224732727267809 -0.0673404062640537 4.69999999999999 0.236823673262089 -0.0712732980611339 4.74999999999999 0.247896736219255 -0.0752938816541789 4.79999999999999 0.257470706720462 -0.07946953623938 4.84999999999999 0.265981472166978 -0.0838177307253715 4.89999999999999 0.27397028276245 -0.088323080784504 4.94999999999999 0.281735730998744 -0.0929697918191609 4.99999999999999 0.289431135729308 -0.0977454990511311 5.04999999999999 0.297142239583819 -0.102639628814117 5.09999999999999 0.304922652191563 -0.107642135104428 5.14999999999999 0.312810041404882 -0.112742799775808 5.19999999999999 0.320834203149804 -0.117930879012135 5.24999999999999 0.329021515970425 -0.123194986675114 5.29999999999999 0.337397629489029 -0.128523188052915 5.34999999999999 0.34598912695115 -0.133903315419673 5.39999999999999 0.354824366137354 -0.139323515285484 5.44999999999999 0.363933397087273 -0.14477299251435 5.49999999999999 0.373346700860771 -0.150242828929987 5.54999999999999 0.383092551995711 -0.155726651680131 5.59999999999999 0.393193180015556 -0.161220879240177 5.64999999999999 0.403660560900117 -0.16672436489699 5.69999999999999 0.414493256593113 -0.172237500775345 5.74999999999999 0.425675672153655 -0.17776110935158 5.79999999999999 0.437180178584655 -0.18329553561769 5.84999999999999 0.448971287932495 -0.188840193996209 5.89999999999999 0.461010356878871 -0.194393562200774 5.94999999999999 0.473259497336472 -0.199953443167647 6 0.485684093784601 -0.205517299540449 0 -0.000401388910189857 0.000821114663202032 0.05 0.00630271680338242 0.00041818846701408 0.1 0.0104118172284743 0.000255928870325199 0.15 0.0126991435497604 0.000179861389022348 0.2 0.0138135736436006 0.000125520326013394 0.25 0.0142479310153164 8.66282027465462e-05 0.3 0.0144486587100972 6.60494543277602e-05 0.35 0.0145521063640982 5.7199544292849e-05 0.4 0.0146102842784952 5.37102928233338e-05 0.45 0.0146464733974506 5.2338918060354e-05 0.5 0.0146709579353254 5.17730667106879e-05 0.55 0.014688494382812 5.1519890510656e-05 0.6 0.014701495203856 5.1394791638999e-05 0.65 0.0147113185375314 5.13262322736165e-05 0.7 0.0147188059281077 5.12848764043104e-05 0.75 0.0147245282551965 5.12576802011818e-05 0.8 0.0147288953978919 5.12384859695071e-05 0.85 0.0147321570067549 5.12247027441309e-05 0.9 0.0147344920855082 5.12140593534744e-05 0.95 0.0147360634742639 5.1203969765032e-05 1 0.0147370081154801 5.11914651631547e-05 1.05 0.0147374401522798 5.11726267075499e-05 1.1 0.0147374577383524 5.11419693136844e-05 1.15 0.0147371491992112 5.10918210606122e-05 1.2 0.014736598211549 5.10116770314193e-05 1.25 0.0147358882378829 5.08875126362157e-05 1.3 0.0147351064816181 5.07010399753605e-05 1.35 0.0147343476166044 5.04288759649919e-05 1.4 0.0147337175698756 5.00415639034804e-05 1.45 0.0147333376992971 4.95023534047488e-05 1.5 0.0147333497911758 4.87656033038762e-05 1.55 0.0147339223688258 4.77746413545942e-05 1.6 0.0147352587894276 4.64589158213957e-05 1.65 0.0147376074307372 4.47303378142636e-05 1.7 0.0147412738562254 4.24788671081891e-05 1.75 0.0147466341914339 3.95676398661176e-05 1.8 0.0147541481923204 3.58282185914724e-05 1.85 0.0147643699797687 3.10567341322976e-05 1.9 0.0147779545915495 2.50116220621461e-05 1.95 0.0147956596105794 1.74132392019215e-05 2 0.0148183428905741 7.94498495100019e-06 2.05 0.0148469589892904 -3.74504190154705e-06 2.1 0.0148825574393797 -1.80430107918717e-05 2.15 0.0149262851621516 -3.53697962453231e-05 2.2 0.0149793937440953 -5.61831285928179e-05 2.25 0.0150432509168616 -8.09811812771504e-05 2.3 0.0151193550455738 -0.000110307112340164 2.35 0.015209351740745 -0.00014475418886172 2.4 0.0153150524597096 -0.000184971396769747 2.45 0.0154384557323135 -0.000231669715064318 2.5 0.015581772217406 -0.000285629431407899 2.55 0.0157474551634602 -0.000347708991098404 2.6 0.0159382381076977 -0.000418855939200349 2.65 0.0161571819217388 -0.000500120577848332 2.7 0.0164077336959539 -0.000592673050394433 2.75 0.0166938005250086 -0.000697824704119938 2.8 0.0170198420815647 -0.000817054791501851 2.85 0.0173909870215489 -0.000952043864816297 2.9 0.0178131798564697 -0.00110471562349538 2.95 0.0182933670995988 -0.00127728951979966 3 0.01883973444054 -0.00147234715826018 3.05 0.0194620106885276 -0.00169291649130909 3.1 0.0201718595775262 -0.00194257907850289 3.15 0.0209833876162575 -0.00222560729493014 3.2 0.0219138053066713 -0.00254714035850948 3.25 0.0229842902228805 -0.00291341027703652 3.3 0.0242211125932398 -0.00333203084092169 3.35 0.0256570935155995 -0.0038123633826803 3.4 0.0273334630530509 -0.00436596929559124 3.45 0.0293021476373206 -0.00500714500650052 3.5 0.0316283956219848 -0.00575349786339246 3.54999999999999 0.0343933573772165 -0.00662643980757933 3.6 0.037695638912422 -0.00765132155284394 3.65 0.0416498478942994 -0.00885669366463359 3.69999999999999 0.046378999571341 -0.0102719542214508 3.75 0.0519975848261508 -0.0119227616648272 3.79999999999999 0.058585553498925 -0.0138246166530703 3.84999999999999 0.0661614776460158 -0.0159770009611413 3.89999999999999 0.0746699453683491 -0.0183617329435879 3.94999999999999 0.083993156809116 -0.0209473348415417 3.99999999999999 0.0939804966679854 -0.0236970889821501 4.04999999999999 0.104479332720323 -0.0265764438942834 4.09999999999999 0.115354913570922 -0.0295571788350385 4.14999999999999 0.126497818868701 -0.0326184433531383 4.19999999999999 0.13782332190921 -0.0357460078568405 4.24999999999999 0.149267303691616 -0.0389309054875719 4.29999999999999 0.160781515555838 -0.0421680987338922 4.34999999999999 0.172329328771778 -0.0454553956612592 4.39999999999999 0.183882071537213 -0.0487926421029796 4.44999999999999 0.195414822128856 -0.0521811608868224 4.49999999999999 0.206894882680036 -0.0556235607350336 4.54999999999999 0.218226953733075 -0.0591254694755023 4.59999999999999 0.22906168131898 -0.0627068255761988 4.64999999999999 0.238780149196341 -0.0664174932273103 4.69999999999999 0.247323860465433 -0.0702954849062831 4.74999999999999 0.25516468798115 -0.0743368297851469 4.79999999999999 0.262673546674638 -0.0785261613259649 4.84999999999999 0.270052673832403 -0.0828503323002676 4.89999999999999 0.277413144486953 -0.0872984655944384 4.94999999999999 0.284821744982756 -0.0918606300806431 4.99999999999999 0.292323219714402 -0.0965269879745019 5.04999999999999 0.299951146106938 -0.101287352977683 5.09999999999999 0.307733698787515 -0.106131028915254 5.14999999999999 0.315696963781674 -0.111046876598706 5.19999999999999 0.323866914605439 -0.116023601316751 5.24999999999999 0.332270453279579 -0.12105025675822 5.29999999999999 0.340935555068477 -0.126116923349994 5.34999999999999 0.349890379976068 -0.131215444805726 5.39999999999999 0.359161228716661 -0.13634002289806 5.44999999999999 0.368769479761389 -0.141487435161083 5.49999999999999 0.37872812054268 -0.146656718910252 5.54999999999999 0.389038942583431 -0.151848366199812 5.59999999999999 0.399691508179674 -0.157063298573877 5.64999999999999 0.410664396896206 -0.162301981628625 5.69999999999999 0.421928297745823 -0.167563929246655 5.74999999999999 0.433449851997342 -0.172847629936499 5.79999999999999 0.4451951395603 -0.178150760334484 5.84999999999999 0.457132169503058 -0.183470508491682 5.89999999999999 0.469232267340332 -0.188803878050862 5.94999999999999 0.481470578922377 -0.19414791504011 6 0.493826005782952 -0.199499849893608 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_1D_breakdown_dc.standard0000644000175000017500000000036014163340332026772 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08296566050818e-05 2.45785553799664e-08 0.8 0.000903303296697653 8.70881379994481e-07 0.9 0.0238350868757997 4.05335872969886e-05 1 0.120424735236543 0.00730619545506429 1.1 0.315079560570811 0.117541124552589 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_subtran_dc.standard0000644000175000017500000001541114163340332027137 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.0000000018708e-12 -9.99999999985856e-13 0.95 1.90000000187164e-12 -9.49999999986627e-13 0.9 1.8000000018725e-12 -8.99999999987409e-13 0.85 1.70000000187337e-12 -8.499999999882e-13 0.8 1.60000000187424e-12 -7.99999999988999e-13 0.75 1.50000000187512e-12 -7.49999999989804e-13 0.7 1.40000000187601e-12 -6.99999999990613e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.6 1.20000000187779e-12 -5.99999999992238e-13 0.55 1.10000000187869e-12 -5.49999999993053e-13 0.5 1.00000000187958e-12 -4.99999999993869e-13 0.45 9.00000001880476e-13 -4.49999999994686e-13 0.4 8.00000001881371e-13 -3.99999999995502e-13 0.35 7.00000001882267e-13 -3.49999999996318e-13 0.3 6.00000001883162e-13 -2.99999999997133e-13 0.25 5.00000001884051e-13 -2.49999999997947e-13 0.2 4.00000001884881e-13 -1.9999999999876e-13 0.15 3.00000001884961e-13 -1.49999999999571e-13 0.0999999999999997 2.0000000187537e-13 -1.00000000000362e-13 0.0499999999999997 1.0000000174114e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.80601626242665e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000022462904e-13 5.00000000163508e-14 -0.1 -2.0000031219227e-13 1.00000000180597e-13 -0.15 -3.0000404970334e-13 1.50000001763649e-13 -0.2 -4.0005227178312e-13 2.00000016957844e-13 -0.25 -5.00674546330509e-13 2.50000162729005e-13 -0.3 -6.08705925425691e-13 3.00001561175658e-13 -0.35 -8.12380036120189e-13 3.50014977024398e-13 -0.4 -2.250895450408e-12 4.00143680474536e-13 -0.45 -1.96351460669469e-11 4.51378382616559e-13 -0.5 -2.42965615970242e-10 5.13223358941596e-13 -0.55 -3.12665824798691e-09 6.76856774371672e-13 -0.6 -4.0382410539285e-08 1.81698155918608e-12 -0.65 -5.21783797946726e-07 1.23243986721386e-11 -0.7 -6.73878381839297e-06 1.12625887940645e-10 1 2.00484131143035e-12 -1.00004739059955e-12 0.95 1.90484123988616e-12 -9.50047345584437e-13 0.9 1.80484117749048e-12 -9.00047309835599e-13 0.85 1.70484112253622e-12 -8.50047281666002e-13 0.8 1.60484107355056e-12 -8.00047259623833e-13 0.75 1.50484102929251e-12 -7.5004724248929e-13 0.7 1.40484098873755e-12 -7.00047229258664e-13 0.65 1.30484095105248e-12 -6.50047219118787e-13 0.6 1.20484091556539e-12 -6.00047211416851e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.5 1.00484084912651e-12 -5.00047201340869e-13 0.45 9.04840817382996e-13 -4.5004719821185e-13 0.4 8.04840786137622e-13 -4.0004719590446e-13 0.35 7.0484074698839e-13 -3.50047194039545e-13 0.3 6.04840668972564e-13 -3.00047191371175e-13 0.25 5.048403239782e-13 -2.50047182071702e-13 0.2 4.04838203865247e-13 -2.00047135470787e-13 0.15 3.04824270460871e-13 -1.50046887327494e-13 0.0999999999999997 2.04731652502393e-13 -1.00045555870753e-13 0.0499999999999997 1.04114583320984e-13 -5.00384053487143e-14 -3.19189119579733e-16 4.13265295583563e-23 -4.13269575924346e-23 -0.0500000000000003 -1.27449588452086e-13 5.02062762161087e-14 -0.1 -4.10644435820776e-13 1.01314194388695e-13 -0.15 -1.73364378203166e-12 1.57264868533293e-13 -0.2 -1.0000415411537e-11 2.39226184719111e-13 -0.25 -6.46468588814845e-11 4.60891731060622e-13 -0.3 -4.29130415279783e-10 1.43291442637122e-12 -0.35 -2.86375903617681e-09 6.43513515406296e-12 -0.4 -1.91314890250826e-08 3.30836742690146e-11 -0.45 -1.27843060970372e-07 1.75993998582589e-10 -0.5 -8.54346155495562e-07 9.43298045785608e-10 -0.55 -5.70770391853384e-06 5.06234509139584e-09 -0.6 -3.80373637569801e-05 2.71159592590017e-08 -0.65 -0.000249319753928549 1.43148765244342e-07 -0.7 -0.00148561438994418 6.95161557751107e-07 1 2.10610595314704e-12 -1.00166258884111e-12 0.95 2.00610473451465e-12 -9.51661829975586e-13 0.9 1.90610366965299e-12 -9.01661227087135e-13 0.85 1.8061027297529e-12 -8.51660751709871e-13 0.8 1.70610189012315e-12 -8.0166037950694e-13 0.75 1.60610113003345e-12 -7.51660090103464e-13 0.7 1.50610043237044e-12 -7.01659866734873e-13 0.65 1.40609978317111e-12 -6.51659695775774e-13 0.6 1.30609917111184e-12 -6.01659566228015e-13 0.55 1.20609858701805e-12 -5.51659469233906e-13 0.5 1.10609802342872e-12 -5.01659397655087e-13 0.45 1.00609747418797e-12 -4.51659345731852e-13 0.4 9.06096927560873e-13 -4.01659302579948e-13 0.35 8.0609591859677e-13 -3.51659253453597e-13 0.3 7.06093087138518e-13 -3.01659124174775e-13 0.25 6.06079252469795e-13 -2.51658579322781e-13 0.2 5.06001641820724e-13 -2.01656029817104e-13 0.15 4.05553915331131e-13 -1.51643910314518e-13 0.0999999999999997 3.02955957317219e-13 -1.01586174582292e-13 0.0499999999999997 1.8785499423744e-13 -5.13110528350807e-14 -3.19189119579733e-16 5.74615320553515e-22 -5.74616876680258e-22 -0.0500000000000003 -6.1145713289632e-13 5.6247651277413e-14 -0.1 -3.69050201544794e-12 1.36020050092733e-13 -0.15 -2.1149696628501e-11 3.27896676797953e-13 -0.2 -1.22439019743416e-10 1.05399191697994e-12 -0.25 -7.12558289198777e-10 4.32583869571662e-12 -0.3 -4.15379995551298e-09 1.97291399022126e-11 -0.35 -2.42275164851036e-08 9.29432301535679e-11 -0.4 -1.41343969826772e-07 4.41643675949503e-10 -0.45 -8.24698391960963e-07 2.10303718609917e-09 -0.5 -4.81109778001195e-06 1.00170611332651e-08 -0.55 -2.80231403443398e-05 4.76485792986322e-08 -0.6 -0.000161688327029091 2.24756906172377e-07 -0.65 -0.000886473452927055 1.01350424264436e-06 -0.7 -0.00396498354486827 3.82097334931167e-06 1 1.69355313587789e-09 -1.18997504351511e-10 0.95 1.69344435708191e-09 -1.1894234108412e-10 0.9 1.69333661834714e-09 -1.18888240543327e-10 0.85 1.69322972471596e-09 -1.18835010272802e-10 0.8 1.69312351089318e-09 -1.18782487504223e-10 0.75 1.69301783812884e-09 -1.18730536021972e-10 0.7 1.69291259076703e-09 -1.18679042716462e-10 0.65 1.69280767277341e-09 -1.18627914170441e-10 0.6 1.69270300436707e-09 -1.18577073524105e-10 0.55 1.69259828101812e-09 -1.18526220357412e-10 0.5 1.69249116824324e-09 -1.18475233187086e-10 0.45 1.69237879015317e-09 -1.18423127359337e-10 0.4 1.69224436294884e-09 -1.18366999934352e-10 0.35 1.69202722522845e-09 -1.18297369916868e-10 0.3 1.69149934562551e-09 -1.181830650639e-10 0.25 1.6898008448863e-09 -1.17921427425265e-10 0.2 1.68368081177221e-09 -1.17174245923244e-10 0.15 1.66082092770551e-09 -1.14827166397559e-10 0.0999999999999997 1.57445220167567e-09 -1.07208483166247e-10 0.0499999999999997 1.24669735588119e-09 -8.22201701316987e-11 -3.19189119579733e-16 1.25416406028571e-18 -1.25417768546813e-18 -0.0500000000000003 -4.74997791826574e-09 2.70795476437922e-10 -0.1 -2.28718769828148e-08 1.16293356244698e-09 -0.15 -9.20882983770766e-08 4.10234062584674e-09 -0.2 -3.56715769455688e-07 1.37871696314941e-08 -0.25 -1.36923627663483e-06 4.56952331474522e-08 -0.3 -5.24529025087901e-06 1.50796198969354e-07 -0.35 -2.00792592293586e-05 4.96673546352129e-07 -0.4 -7.66844232894168e-05 1.63105721430185e-06 -0.45 -0.000289987968522637 5.30466820853006e-06 -0.5 -0.00105771189078856 1.66810398455427e-05 -0.55 -0.00346425618992821 4.75197739761634e-05 -0.6 -0.00914609086177939 0.00011123772595766 -0.65 -0.0187049765439553 0.000206652232215004 -0.7 -0.031305404120027 0.000320568658666914 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_1D_breakdown_dc.standard0000644000175000017500000000031214163340332026766 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00122656677733634 1.70745751079458e-06 0.85 0.00657425526846825 1.0935088357828e-05 0.9 0.0268021403408563 7.11350644715921e-05 0.95 0.0757442260338134 0.00140240843391269 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_subcoupl_peri_bias_dc.standard0000644000175000017500000001541314163340332031334 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.0000000018708e-12 -9.99999999985856e-13 0.95 1.90000000187164e-12 -9.49999999986627e-13 0.9 1.8000000018725e-12 -8.99999999987409e-13 0.85 1.70000000187337e-12 -8.499999999882e-13 0.8 1.60000000187424e-12 -7.99999999988999e-13 0.75 1.50000000187512e-12 -7.49999999989804e-13 0.7 1.40000000187601e-12 -6.99999999990613e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.6 1.20000000187779e-12 -5.99999999992238e-13 0.55 1.10000000187869e-12 -5.49999999993053e-13 0.5 1.00000000187958e-12 -4.99999999993869e-13 0.45 9.00000001880476e-13 -4.49999999994686e-13 0.4 8.00000001881371e-13 -3.99999999995502e-13 0.35 7.00000001882267e-13 -3.49999999996318e-13 0.3 6.00000001883162e-13 -2.99999999997133e-13 0.25 5.00000001884051e-13 -2.49999999997947e-13 0.2 4.00000001884881e-13 -1.9999999999876e-13 0.15 3.00000001884961e-13 -1.49999999999571e-13 0.0999999999999997 2.0000000187537e-13 -1.00000000000362e-13 0.0499999999999997 1.0000000174114e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.80601626242665e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000022462904e-13 5.00000000163508e-14 -0.1 -2.0000031219227e-13 1.00000000180597e-13 -0.15 -3.0000404970334e-13 1.50000001763649e-13 -0.2 -4.0005227178312e-13 2.00000016957844e-13 -0.25 -5.00674546330499e-13 2.50000162729005e-13 -0.3 -6.08705925424049e-13 3.00001561175658e-13 -0.35 -8.12380035848544e-13 3.50014977024399e-13 -0.4 -2.25089540547131e-12 4.00143680474639e-13 -0.45 -1.96351386333044e-11 4.51378382632088e-13 -0.5 -2.4296438627063e-10 5.13223361284922e-13 -0.55 -3.12645484558152e-09 6.76857127941902e-13 -0.6 -4.03488062682106e-08 1.81703484837802e-12 -0.65 -5.1631555458008e-07 1.23323172324483e-11 -0.7 -5.9867869293474e-06 1.13630813682121e-10 1 2.00484131143035e-12 -1.00004739059955e-12 0.95 1.90484123988616e-12 -9.50047345584437e-13 0.9 1.80484117749048e-12 -9.00047309835599e-13 0.85 1.70484112253622e-12 -8.50047281666002e-13 0.8 1.60484107355056e-12 -8.00047259623833e-13 0.75 1.50484102929251e-12 -7.5004724248929e-13 0.7 1.40484098873755e-12 -7.00047229258664e-13 0.65 1.30484095105248e-12 -6.50047219118787e-13 0.6 1.20484091556539e-12 -6.00047211416851e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.5 1.00484084912651e-12 -5.00047201340869e-13 0.45 9.04840817382996e-13 -4.5004719821185e-13 0.4 8.04840786137622e-13 -4.0004719590446e-13 0.35 7.0484074698839e-13 -3.50047194039545e-13 0.3 6.04840668972564e-13 -3.00047191371175e-13 0.25 5.048403239782e-13 -2.50047182071702e-13 0.2 4.04838203865247e-13 -2.00047135470787e-13 0.15 3.0482427046087e-13 -1.50046887327494e-13 0.0999999999999997 2.04731652502384e-13 -1.00045555870753e-13 0.0499999999999997 1.04114583320931e-13 -5.00384053487143e-14 -3.19189119579733e-16 4.13265295583563e-23 -4.13269575924346e-23 -0.0500000000000003 -1.27449588436163e-13 5.02062762161091e-14 -0.1 -4.10644435004074e-13 1.01314194388712e-13 -0.15 -1.7336437448872e-12 1.57264868534019e-13 -0.2 -1.00004137497317e-11 2.39226184749461e-13 -0.25 -6.46467847146634e-11 4.60891732325681e-13 -0.3 -4.29127106426995e-10 1.43291447908246e-12 -0.35 -2.86361143272929e-09 6.43513735019006e-12 -0.4 -1.91249072375253e-08 3.30837657436746e-11 -0.45 -1.27550328714638e-07 1.75997802009891e-10 -0.5 -8.41545006882791e-07 9.43454263173389e-10 -0.55 -5.2017926065538e-06 5.06829855753235e-09 -0.6 -2.47230366523546e-05 2.72884546012867e-08 -0.65 -7.54044753109652e-05 1.47034530635172e-07 -0.7 -0.000183922652386898 7.89471756002581e-07 1 2.10610595314704e-12 -1.00166258884111e-12 0.95 2.00610473451465e-12 -9.51661829975586e-13 0.9 1.90610366965299e-12 -9.01661227087135e-13 0.85 1.8061027297529e-12 -8.51660751709871e-13 0.8 1.70610189012315e-12 -8.0166037950694e-13 0.75 1.60610113003345e-12 -7.51660090103464e-13 0.7 1.50610043237044e-12 -7.01659866734873e-13 0.65 1.40609978317111e-12 -6.51659695775774e-13 0.6 1.30609917111184e-12 -6.01659566228015e-13 0.55 1.20609858701805e-12 -5.51659469233906e-13 0.5 1.10609802342872e-12 -5.01659397655087e-13 0.45 1.00609747418797e-12 -4.51659345731852e-13 0.4 9.06096927560873e-13 -4.01659302579948e-13 0.35 8.06095918596769e-13 -3.51659253453597e-13 0.3 7.06093087138514e-13 -3.01659124174775e-13 0.25 6.06079252469767e-13 -2.51658579322781e-13 0.2 5.06001641820563e-13 -2.01656029817104e-13 0.15 4.05553915330197e-13 -1.51643910314518e-13 0.0999999999999997 3.02955957311901e-13 -1.01586174582292e-13 0.0499999999999997 1.87854994210953e-13 -5.13110528350816e-14 -3.19189119579733e-16 5.74615320553515e-22 -5.74616876581651e-22 -0.0500000000000003 -6.1145712763504e-13 5.62476512775783e-14 -0.1 -3.69050180563226e-12 1.36020050098921e-13 -0.15 -2.1149689306327e-11 3.27896677000647e-13 -0.2 -1.22438769419516e-10 1.05399192348332e-12 -0.25 -7.12549761095011e-10 4.32583890365225e-12 -0.3 -4.15350961141156e-09 1.972914654649e-11 -0.35 -2.42176368503056e-08 9.29434423950342e-11 -0.4 -1.41008646161838e-07 4.41650446107939e-10 -0.45 -8.1348106189828e-07 2.10325125783367e-09 -0.5 -4.46378409661205e-06 1.00235069046772e-08 -0.55 -2.00911290891188e-05 4.78110889835082e-08 -0.6 -6.1476252350765e-05 2.2812082538839e-07 -0.65 -0.000139812054062122 1.08600986889959e-06 -0.7 -0.000322792944300933 5.14801366031498e-06 1 1.69355313587789e-09 -1.18997504351511e-10 0.95 1.69344435708191e-09 -1.1894234108412e-10 0.9 1.69333661834714e-09 -1.18888240543327e-10 0.85 1.69322972471596e-09 -1.18835010272802e-10 0.8 1.69312351089318e-09 -1.18782487504223e-10 0.75 1.69301783812884e-09 -1.18730536021972e-10 0.7 1.69291259076703e-09 -1.18679042716462e-10 0.65 1.69280767277341e-09 -1.18627914170441e-10 0.6 1.69270300436707e-09 -1.18577073524106e-10 0.55 1.69259828101812e-09 -1.18526220357414e-10 0.5 1.69249116819691e-09 -1.18475233187093e-10 0.45 1.692378789975e-09 -1.18423127359362e-10 0.4 1.69224436226362e-09 -1.18366999934447e-10 0.35 1.69202722259334e-09 -1.18297369917214e-10 0.3 1.69149933549354e-09 -1.18183065065167e-10 0.25 1.68980080595437e-09 -1.17921427429904e-10 0.2 1.6836806625522e-09 -1.17174245940183e-10 0.15 1.66082036132501e-09 -1.14827166458813e-10 0.0999999999999997 1.57445013438106e-09 -1.07208483379247e-10 0.0499999999999997 1.2466910460618e-09 -8.22201707510671e-11 -3.19189119579733e-16 1.25416413756559e-18 -1.25417768583095e-18 -0.0500000000000003 -4.74961903718999e-09 2.70795508418287e-10 -0.1 -2.28651910005348e-08 1.16293413041325e-09 -0.15 -9.19842411417646e-08 4.10234906561925e-09 -0.2 -3.55164282874679e-07 1.37872904227595e-08 -0.25 -1.34665282126931e-06 4.56969518221718e-08 -0.3 -4.93363087986778e-06 1.50820779420578e-07 -0.35 -1.6387671826382e-05 4.97028233147064e-07 -0.4 -4.45760869424224e-05 1.63619808966478e-06 -0.45 -9.59962174965524e-05 5.37748239321171e-06 -0.5 -0.000177493883072894 1.76182910672221e-05 -0.55 -0.000321089040485888 5.72872042070051e-05 -0.6 -0.000647380303581349 0.000182279838469016 -0.65 -0.00151392694442046 0.000546346821897211 -0.7 -0.00363315050990839 0.00143662489158125 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_subcoupl_peri_con_dc.standard0000644000175000017500000001541314163340332031175 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.0000000018708e-12 -9.99999999985856e-13 0.95 1.90000000187164e-12 -9.49999999986627e-13 0.9 1.8000000018725e-12 -8.99999999987409e-13 0.85 1.70000000187337e-12 -8.499999999882e-13 0.8 1.60000000187424e-12 -7.99999999988999e-13 0.75 1.50000000187512e-12 -7.49999999989804e-13 0.7 1.40000000187601e-12 -6.99999999990613e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.6 1.20000000187779e-12 -5.99999999992238e-13 0.55 1.10000000187869e-12 -5.49999999993053e-13 0.5 1.00000000187958e-12 -4.99999999993869e-13 0.45 9.00000001880476e-13 -4.49999999994686e-13 0.4 8.00000001881371e-13 -3.99999999995502e-13 0.35 7.00000001882267e-13 -3.49999999996318e-13 0.3 6.00000001883162e-13 -2.99999999997133e-13 0.25 5.00000001884051e-13 -2.49999999997947e-13 0.2 4.00000001884881e-13 -1.9999999999876e-13 0.15 3.00000001884961e-13 -1.49999999999571e-13 0.0999999999999997 2.0000000187537e-13 -1.00000000000362e-13 0.0499999999999997 1.0000000174114e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.80601626242665e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000022462904e-13 5.00000000163508e-14 -0.1 -2.0000031219227e-13 1.00000000180597e-13 -0.15 -3.0000404970334e-13 1.50000001763649e-13 -0.2 -4.0005227178312e-13 2.00000016957844e-13 -0.25 -5.00674546330499e-13 2.50000162729005e-13 -0.3 -6.08705925424049e-13 3.00001561175658e-13 -0.35 -8.12380035848544e-13 3.50014977024399e-13 -0.4 -2.25089540547131e-12 4.00143680474639e-13 -0.45 -1.96351386333044e-11 4.51378382632088e-13 -0.5 -2.4296438627063e-10 5.13223361284922e-13 -0.55 -3.12645484558152e-09 6.76857127941902e-13 -0.6 -4.03488062682106e-08 1.81703484837802e-12 -0.65 -5.1631555458008e-07 1.23323172324483e-11 -0.7 -5.9867869293474e-06 1.13630813682121e-10 1 2.00484131143035e-12 -1.00004739059955e-12 0.95 1.90484123988616e-12 -9.50047345584437e-13 0.9 1.80484117749048e-12 -9.00047309835599e-13 0.85 1.70484112253622e-12 -8.50047281666002e-13 0.8 1.60484107355056e-12 -8.00047259623833e-13 0.75 1.50484102929251e-12 -7.5004724248929e-13 0.7 1.40484098873755e-12 -7.00047229258664e-13 0.65 1.30484095105248e-12 -6.50047219118787e-13 0.6 1.20484091556539e-12 -6.00047211416851e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.5 1.00484084912651e-12 -5.00047201340869e-13 0.45 9.04840817382996e-13 -4.5004719821185e-13 0.4 8.04840786137622e-13 -4.0004719590446e-13 0.35 7.0484074698839e-13 -3.50047194039545e-13 0.3 6.04840668972564e-13 -3.00047191371175e-13 0.25 5.048403239782e-13 -2.50047182071702e-13 0.2 4.04838203865247e-13 -2.00047135470787e-13 0.15 3.0482427046087e-13 -1.50046887327494e-13 0.0999999999999997 2.04731652502384e-13 -1.00045555870753e-13 0.0499999999999997 1.04114583320931e-13 -5.00384053487143e-14 -3.19189119579733e-16 4.13265295583563e-23 -4.13269575924346e-23 -0.0500000000000003 -1.27449588436163e-13 5.02062762161091e-14 -0.1 -4.10644435004074e-13 1.01314194388712e-13 -0.15 -1.7336437448872e-12 1.57264868534019e-13 -0.2 -1.00004137497317e-11 2.39226184749461e-13 -0.25 -6.46467847146634e-11 4.60891732325681e-13 -0.3 -4.29127106426995e-10 1.43291447908246e-12 -0.35 -2.86361143272929e-09 6.43513735019006e-12 -0.4 -1.91249072375253e-08 3.30837657436746e-11 -0.45 -1.27550328714638e-07 1.75997802009891e-10 -0.5 -8.41545006882791e-07 9.43454263173389e-10 -0.55 -5.2017926065538e-06 5.06829855753235e-09 -0.6 -2.47230366523546e-05 2.72884546012867e-08 -0.65 -7.54044753109652e-05 1.47034530635172e-07 -0.7 -0.000183922652386898 7.89471756002581e-07 1 2.10610595314704e-12 -1.00166258884111e-12 0.95 2.00610473451465e-12 -9.51661829975586e-13 0.9 1.90610366965299e-12 -9.01661227087135e-13 0.85 1.8061027297529e-12 -8.51660751709871e-13 0.8 1.70610189012315e-12 -8.0166037950694e-13 0.75 1.60610113003345e-12 -7.51660090103464e-13 0.7 1.50610043237044e-12 -7.01659866734873e-13 0.65 1.40609978317111e-12 -6.51659695775774e-13 0.6 1.30609917111184e-12 -6.01659566228015e-13 0.55 1.20609858701805e-12 -5.51659469233906e-13 0.5 1.10609802342872e-12 -5.01659397655087e-13 0.45 1.00609747418797e-12 -4.51659345731852e-13 0.4 9.06096927560873e-13 -4.01659302579948e-13 0.35 8.06095918596769e-13 -3.51659253453597e-13 0.3 7.06093087138514e-13 -3.01659124174775e-13 0.25 6.06079252469767e-13 -2.51658579322781e-13 0.2 5.06001641820563e-13 -2.01656029817104e-13 0.15 4.05553915330197e-13 -1.51643910314518e-13 0.0999999999999997 3.02955957311901e-13 -1.01586174582292e-13 0.0499999999999997 1.87854994210953e-13 -5.13110528350816e-14 -3.19189119579733e-16 5.74615320553515e-22 -5.74616876581651e-22 -0.0500000000000003 -6.1145712763504e-13 5.62476512775783e-14 -0.1 -3.69050180563226e-12 1.36020050098921e-13 -0.15 -2.1149689306327e-11 3.27896677000647e-13 -0.2 -1.22438769419516e-10 1.05399192348332e-12 -0.25 -7.12549761095011e-10 4.32583890365225e-12 -0.3 -4.15350961141156e-09 1.972914654649e-11 -0.35 -2.42176368503056e-08 9.29434423950342e-11 -0.4 -1.41008646161838e-07 4.41650446107939e-10 -0.45 -8.1348106189828e-07 2.10325125783367e-09 -0.5 -4.46378409661205e-06 1.00235069046772e-08 -0.55 -2.00911290891188e-05 4.78110889835082e-08 -0.6 -6.1476252350765e-05 2.2812082538839e-07 -0.65 -0.000139812054062122 1.08600986889959e-06 -0.7 -0.000322792944300933 5.14801366031498e-06 1 1.69355313587789e-09 -1.18997504351511e-10 0.95 1.69344435708191e-09 -1.1894234108412e-10 0.9 1.69333661834714e-09 -1.18888240543327e-10 0.85 1.69322972471596e-09 -1.18835010272802e-10 0.8 1.69312351089318e-09 -1.18782487504223e-10 0.75 1.69301783812884e-09 -1.18730536021972e-10 0.7 1.69291259076703e-09 -1.18679042716462e-10 0.65 1.69280767277341e-09 -1.18627914170441e-10 0.6 1.69270300436707e-09 -1.18577073524106e-10 0.55 1.69259828101812e-09 -1.18526220357414e-10 0.5 1.69249116819691e-09 -1.18475233187093e-10 0.45 1.692378789975e-09 -1.18423127359362e-10 0.4 1.69224436226362e-09 -1.18366999934447e-10 0.35 1.69202722259334e-09 -1.18297369917214e-10 0.3 1.69149933549354e-09 -1.18183065065167e-10 0.25 1.68980080595437e-09 -1.17921427429904e-10 0.2 1.6836806625522e-09 -1.17174245940183e-10 0.15 1.66082036132501e-09 -1.14827166458813e-10 0.0999999999999997 1.57445013438106e-09 -1.07208483379247e-10 0.0499999999999997 1.2466910460618e-09 -8.22201707510671e-11 -3.19189119579733e-16 1.25416413756559e-18 -1.25417768583095e-18 -0.0500000000000003 -4.74961903718999e-09 2.70795508418287e-10 -0.1 -2.28651910005348e-08 1.16293413041325e-09 -0.15 -9.19842411417646e-08 4.10234906561925e-09 -0.2 -3.55164282874679e-07 1.37872904227595e-08 -0.25 -1.34665282126931e-06 4.56969518221718e-08 -0.3 -4.93363087986778e-06 1.50820779420578e-07 -0.35 -1.6387671826382e-05 4.97028233147064e-07 -0.4 -4.45760869424224e-05 1.63619808966478e-06 -0.45 -9.59962174965524e-05 5.37748239321171e-06 -0.5 -0.000177493883072894 1.76182910672221e-05 -0.55 -0.000321089040485888 5.72872042070051e-05 -0.6 -0.000647380303581349 0.000182279838469016 -0.65 -0.00151392694442046 0.000546346821897211 -0.7 -0.00363315050990839 0.00143662489158125 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_1D_no_aval_dc.standard0000644000175000017500000001543614163340332025723 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002002e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017936e-14 -1.0000575797825e-13 3.19189119579733e-16 -3.19189119620135e-28 6.38443850634424e-28 0.0500000000000003 -5.00000000172105e-14 1.00021130226252e-13 0.1 -1.00000000182315e-13 2.00098672517439e-13 0.15 -1.50000001766223e-13 3.00383232640681e-13 0.2 -2.00000016961274e-13 4.01427500439537e-13 0.25 -2.5000016273329e-13 5.05259770605876e-13 0.3 -3.00001561180812e-13 6.19324037996587e-13 0.35 -3.50014977030612e-13 7.70944534005022e-13 0.4 -4.00143680484298e-13 1.06045936685287e-12 0.45 -4.51378382663994e-13 1.85671697272989e-12 0.5 -5.13223359849033e-13 4.51945012808319e-12 0.55 -6.76856822898978e-13 1.40984637155048e-11 0.6 -1.8169867339158e-12 6.65185464373853e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.7 -1.12703055744962e-10 3.47593602243085e-09 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620887e-13 -0.4 4.00047191487236e-13 -8.15208096770835e-13 -0.35 3.50047191189397e-13 -7.15197268368522e-13 -0.3 3.00047189589692e-13 -6.15168800137352e-13 -0.25 2.50047180997613e-13 -5.15093953964172e-13 -0.2 2.00047134849201e-13 -4.14897162929152e-13 -0.15 1.50046886984178e-13 -3.14379680797577e-13 -0.0999999999999997 1.00045555690914e-13 -2.13018560792853e-13 -0.0499999999999997 5.00384052598932e-14 -1.09436572557375e-13 3.19189119579733e-16 -3.19692044816637e-28 7.32062920045099e-28 0.0500000000000003 -5.02062762347062e-14 1.24914117152833e-13 0.1 -1.01314194398061e-13 2.90980896462593e-13 0.15 -1.57264868543545e-13 5.67725307780609e-13 0.2 -2.3922618478237e-13 1.14882509259251e-12 0.25 -4.60891732373051e-13 2.60210366399079e-12 0.3 -1.43291446790143e-12 6.73610052945694e-12 0.35 -6.43513660427478e-12 2.00061162101608e-11 0.4 -3.30837259264049e-11 6.85489977675323e-11 0.45 -1.75995846090798e-10 2.70515774413019e-10 0.5 -9.43364185070698e-10 1.25630053792754e-09 0.55 -5.06471262763449e-09 6.17833007841586e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.7 -7.84663581577333e-07 9.28415745768918e-07 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787923e-13 -1.07570350824598e-12 -0.45 4.51659237787923e-13 -9.75689922709861e-13 -0.4 4.01659231548673e-13 -8.75656575163143e-13 -0.35 3.5165920805556e-13 -7.75574726207634e-13 -0.3 3.0165909610208e-13 -6.75373800063673e-13 -0.25 2.51658562601834e-13 -5.74880432728592e-13 -0.2 2.01656020273409e-13 -4.73668387065748e-13 -0.15 1.51643905126578e-13 -3.70687925072269e-13 -0.0999999999999997 1.01586171915831e-13 -2.63345274734409e-13 -0.0499999999999997 5.13110515504252e-14 -1.45191279392474e-13 3.19189119579733e-16 -3.35758922784693e-28 1.07916171834234e-27 0.0500000000000003 -5.62476515155077e-14 2.13950765006697e-13 0.1 -1.36020050203075e-13 6.08121966893861e-13 0.15 -3.27896677190247e-13 1.49931859548195e-12 0.2 -1.05399192556076e-12 3.87148002941055e-12 0.25 -4.32583892443622e-12 1.11248349498664e-11 0.3 -1.97291461828154e-11 3.63099469027321e-11 0.35 -9.29434037817878e-11 1.33935721730965e-10 0.4 -4.41648485056693e-10 5.45224221548509e-10 0.45 -2.10317048912057e-09 2.39981882609197e-09 0.5 -1.00207566689862e-08 1.09376345861643e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.7 -5.16734064081562e-06 5.53886593993007e-06 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.188251352344e-10 -1.30797544653401e-10 -0.8 1.187751352344e-10 -1.30697452866861e-10 -0.75 1.187251352344e-10 -1.30597270669889e-10 -0.7 1.186751352344e-10 -1.30496909007528e-10 -0.65 1.186251352344e-10 -1.30396191105021e-10 -0.6 1.185751352344e-10 -1.30294766063147e-10 -0.55 1.18524897839728e-10 -1.30191699949637e-10 -0.5 1.18474353033708e-10 -1.30085539518853e-10 -0.45 1.18422557931724e-10 -1.29972596872819e-10 -0.4 1.1836664318223e-10 -1.29844551130628e-10 -0.35 1.1829715445018e-10 -1.296811206805e-10 -0.3 1.18182940289071e-10 -1.29429638051731e-10 -0.25 1.17921358618367e-10 -1.28944661242225e-10 -0.2 1.17174210160694e-10 -1.27802689025274e-10 -0.15 1.14827149312192e-10 -1.24718744156493e-10 -0.0999999999999997 1.07208476551534e-10 -1.15677455868842e-10 -0.0499999999999997 8.22201701086366e-11 -8.78797373293219e-11 3.19189119579733e-16 -8.98266446444303e-25 9.49965234728868e-25 0.0500000000000003 -2.70795604604009e-10 2.82482766296905e-10 0.1 -1.16293554813797e-09 1.19968102222309e-09 0.15 -4.10236647924629e-09 4.19605719293831e-09 0.2 -1.37874939994979e-08 1.4021741036905e-08 0.25 -4.56992726157392e-08 4.63172577072979e-08 0.3 -1.50846485469855e-07 1.52625480136746e-07 0.35 -4.97299903421944e-07 5.02898018479888e-07 0.4 -1.638842272846e-06 1.65777987576151e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.7 -0.00209725704818037 0.00214673139842961 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_ac.standard0000644000175000017500000020145314163340332025723 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 10000000000 6.9046057398194e-05 -2.12308343775725e-05 0.00715431411562973 2.69272799313658e-05 7.33968507805657e-14 2.74105937531059e-14 3.01339769769302e-14 4.95902936313599e-14 12599210498.9563 9.82740860827192e-05 -3.36981200229106e-05 0.00714014419354814 4.2188068208715e-05 7.33906970137803e-14 2.7408077345047e-14 3.0131054585314e-14 4.95880732875164e-14 15874010519.701 0.000144658202287141 -5.34837481598765e-05 0.00711765667138583 6.64096528479874e-05 7.33809311879178e-14 2.74040838368197e-14 3.01264168104065e-14 4.95845493148535e-14 20000000000 0.000218256948220198 -8.4878997823522e-05 0.00708197463049112 0.00010485044080405 7.33654356300156e-14 2.73977471583371e-14 3.01190579059746e-14 4.95789568769538e-14 10000000000 7.82274870626023e-05 -2.1459598027989e-05 0.0101927236937585 2.77045169275181e-05 7.42184160767174e-14 2.74681619364938e-14 3.13975249330829e-14 4.97892531948684e-14 12599210498.9563 0.000108413528288299 -3.40608898748941e-05 0.0101776277102681 4.31655005595499e-05 7.42119268388809e-14 2.7465582348842e-14 3.13943402767712e-14 4.9786967873522e-14 15874010519.701 0.00015631743282772 -5.40590243912523e-05 0.0101536708245577 6.77046965624761e-05 7.42016287532382e-14 2.74614886160692e-14 3.13892863545821e-14 4.97833408041581e-14 20000000000 0.00023232627093523 -8.57910651880313e-05 0.0101156579946401 0.00010664921057757 7.41852889586641e-14 2.74549930092262e-14 3.1381267290542e-14 4.9777584832955e-14 10000000000 9.1038766024607e-05 -2.17485829454245e-05 0.0144296606273691 2.88290716253803e-05 7.5343103338464e-14 2.75279266502739e-14 3.31900912832994e-14 5.00471705351964e-14 12599210498.9563 0.000122570186739536 -3.45190716413852e-05 0.0144132191927192 4.45611022746317e-05 7.53361308262077e-14 2.75252621791394e-14 3.31865155034219e-14 5.00447939353792e-14 15874010519.701 0.000172608327104716 -5.47854888230401e-05 0.01438712755817 6.9530298854148e-05 7.53250659952902e-14 2.7521033798523e-14 3.31808409815911e-14 5.00410220432565e-14 20000000000 0.00025200147601205 -8.69426452053707e-05 0.0143457285982639 0.000109156742306216 7.53075100882567e-14 2.75143246939436e-14 3.31718374576598e-14 5.00350363635e-14 10000000000 0.000108819715834615 -2.21176249530411e-05 0.0202499352648134 3.04867718383117e-05 7.68692455987453e-14 2.75903581927484e-14 3.57295059330006e-14 5.03833046394654e-14 12599210498.9563 0.000142237463232039 -3.5104040326459e-05 0.020231521597032 4.65892183233452e-05 7.68615727151803e-14 2.75875786173421e-14 3.57253362740429e-14 5.03807979180165e-14 15874010519.701 0.000195267831688089 -5.57127947142668e-05 0.020202300844233 7.21460284094921e-05 7.68493967415607e-14 2.75831676612973e-14 3.57187194680632e-14 5.0376819582621e-14 20000000000 0.00027940548744591 -8.8412307810657e-05 0.0201559387638481 0.00011270428099891 7.68300785850843e-14 2.75761690917607e-14 3.5708221269419e-14 5.03705064764208e-14 10000000000 0.00013328226405831 -2.25898605556406e-05 0.0280870977159604 3.29704447115664e-05 7.89078968072499e-14 2.76560928672318e-14 3.93067516472468e-14 5.08198686931165e-14 12599210498.9563 0.000169327426963339 -3.58523249110872e-05 0.0280657749984189 4.95804395344579e-05 7.88992059532439e-14 2.7653156878155e-14 3.93016646833633e-14 5.08171745781881e-14 15874010519.701 0.000226525327137879 -5.68986743117875e-05 0.0280319390143861 7.59423510645063e-05 7.88854150467578e-14 2.76484978410745e-14 3.92935924910669e-14 5.08128989511872e-14 20000000000 0.000317270395665444 -9.02913025864299e-05 0.0279782572499666 0.00011777715923228 7.88635358476247e-14 2.764110599649e-14 3.92807858849471e-14 5.08061143695599e-14 10000000000 0.00016651494360023 -2.31898487897752e-05 0.0383727201463074 3.67352953204447e-05 8.1570384947863e-14 2.77259753501854e-14 4.42914949059145e-14 5.13798951724664e-14 12599210498.9563 0.000206175786211598 -3.68025473705982e-05 0.0383470977807287 5.40375739049304e-05 8.15602161390273e-14 2.77228279295864e-14 4.42849706971005e-14 5.13769298863425e-14 15874010519.701 0.000269108267791597 -5.84039948100515e-05 0.038306440841723 8.14975263500051e-05 8.15440807365157e-14 2.77178335822913e-14 4.42746183291456e-14 5.13722240890793e-14 20000000000 0.000368943952574791 -9.26756119553376e-05 0.0382419423373231 0.000125073123139308 8.15184839369947e-14 2.77099102622157e-14 4.42581954635473e-14 5.13647573775799e-14 10000000000 0.000210916049003911 -2.39402911823161e-05 0.0514523383685238 4.24662168601042e-05 8.49474519434049e-14 2.78011022992739e-14 5.11184068567305e-14 5.20835255827452e-14 12599210498.9563 0.000255462299994547 -3.79900537765976e-05 0.0514203884331467 6.07013115530575e-05 8.49351518528578e-14 2.7797672703947e-14 5.11096121356924e-14 5.2080168680154e-14 15874010519.701 0.000326142253062474 -6.02840690237873e-05 0.0513696944071072 8.96406391438509e-05 8.49156359067077e-14 2.77922309113278e-14 5.10956579313621e-14 5.20748417060842e-14 20000000000 0.000438257079776842 -9.56519795944089e-05 0.0512892814024688 0.00013556112961588 8.48846795108976e-14 2.77835985217014e-14 5.10735234898959e-14 5.206639013477e-14 10000000000 0.000269037734309339 -2.48581591301221e-05 0.0674827827676201 5.11410278999924e-05 8.90837836886437e-14 2.7882873510453e-14 6.02419254005707e-14 5.29433553692796e-14 12599210498.9563 0.000320022836414825 -3.94404357346841e-05 0.0674416403257174 7.06083477827746e-05 8.90684533966435e-14 2.78790747655122e-14 6.02295491537016e-14 5.29394386884017e-14 15874010519.701 0.000400912107251035 -6.25780392473541e-05 0.0673763666030015 0.000101501579450769 8.90441317172638e-14 2.7873047708696e-14 6.02099140431069e-14 5.29332239178578e-14 20000000000 0.000529203727169113 -9.92807242024593e-05 0.0672728412199666 0.000150518336782202 8.90055577959635e-14 2.78634880921345e-14 6.01787728263894e-14 5.29233650607611e-14 10000000000 0.000343359835782427 -2.59523634321918e-05 0.08634810657664 6.40636662353478e-05 9.39576292786238e-14 2.79730826051659e-14 7.20570630945788e-14 5.39605636622376e-14 12599210498.9563 0.000402573426168896 -4.11651535510982e-05 0.0862939089844643 8.51160349178426e-05 9.39380860273771e-14 2.7968813256544e-14 7.20391153627933e-14 5.39558620110478e-14 15874010519.701 0.000496506849052172 -6.53012578815972e-05 0.0862079327775873 0.000118522114425534 9.39070839865826e-14 2.79620402456185e-14 7.20106442886007e-14 5.39484025071615e-14 20000000000 0.00064546010516273 -0.000103582987910169 0.0860715977673278 0.00017151956909367 9.38579240012407e-14 2.79512992235202e-14 7.19654975266367e-14 5.39365711029585e-14 10000000000 0.000436062126450391 -2.72261677162606e-05 0.107638740297891 8.28500333706628e-05 9.94776695112032e-14 2.80741402746224e-14 8.68067006883965e-14 5.51240753018507e-14 12599210498.9563 0.00050543151448336 -4.31639589297456e-05 0.107566578904175 0.000105879003719278 9.94524398025874e-14 2.80692882008875e-14 8.67803124311054e-14 5.51183020626924e-14 15874010519.701 0.000615460003153498 -6.84477373565929e-05 0.107452122389771 0.000142417865233946 9.9412422906074e-14 2.80615917571069e-14 8.67384579176805e-14 5.51091437007899e-14 20000000000 0.000789896568973642 -0.000108543261155906 0.107270666852247 0.00020037603850831 9.93489824825392e-14 2.80493888628091e-14 8.66721041434311e-14 5.50946210139271e-14 10000000000 0.000548897074148892 -2.86881392210744e-05 0.130713899831947 0.000109391665393921 1.05504326470542e-13 2.81896617967542e-14 1.04518327414618e-13 5.64142229046181e-14 12599210498.9563 0.000630367262800668 -4.54392217712691e-05 0.130617927312968 0.000134808548489573 1.05471674597606e-13 2.81841080720789e-14 1.04479603593206e-13 5.64070315355211e-14 15874010519.701 0.000759566972878655 -7.2009846618762e-05 0.130465730052891 0.000175130903887377 1.05419894367759e-13 2.8175300088497e-14 1.0441819428935e-13 5.63956255122642e-14 20000000000 0.000964341466097626 -0.000114137629889396 0.130224508235538 0.000239077204264693 1.05337827610963e-13 2.81613384176718e-14 1.04320866331024e-13 5.63775436311464e-14 10000000000 0.000683268444291244 -3.03776988728854e-05 0.154822104838364 0.000145896624522801 1.11893826169304e-13 2.83259823875088e-14 1.25015009733837e-13 5.78110517042022e-14 12599210498.9563 0.000778725329170761 -4.80293931833136e-05 0.154695743705112 0.000174121400598304 1.11851787458777e-13 2.83196006015598e-14 1.24958949307143e-13 5.78020375351498e-14 15874010519.701 0.00093007543523306 -7.60243215110716e-05 0.154495395713534 0.000218891042056468 1.11785134854326e-13 2.83094812983698e-14 1.2487006522949e-13 5.77877433673268e-14 20000000000 0.00116988064265584 -0.000120399669594387 0.154177960915822 0.000289871938216279 1.11679530769001e-13 2.82934459374696e-14 1.24729237784412e-13 5.77650903326169e-14 10000000000 0.000840647702838173 -3.24218251532679e-05 0.179225276682849 0.000195206460412767 1.18561559899286e-13 2.84960086807579e-14 1.48028461835135e-13 5.93080064457099e-14 12599210498.9563 0.00095198711989964 -5.10812873277305e-05 0.179061314837233 0.000226686779572993 1.18507886491554e-13 2.84886506000869e-14 1.4794882214642e-13 5.92966899828038e-14 15874010519.701 0.00112847863084014 -8.06691902844907e-05 0.178801411004536 0.000276610537170319 1.18422806869187e-13 2.84769858519431e-14 1.47822582554946e-13 5.92787492405844e-14 20000000000 0.00140801627990996 -0.000127556277540676 0.178389767525742 0.000355738604975397 1.18288056939478e-13 2.84585081081869e-14 1.47622643329077e-13 5.92503279389941e-14 10000000000 0.00102366199050242 -3.51738557856985e-05 0.203279521078988 0.00026175772168513 1.25577746452455e-13 2.87290664042148e-14 1.7344607679874e-13 6.09375976985014e-14 12599210498.9563 0.00115318852387565 -5.5023265484181e-05 0.203069616342201 0.000297065031600652 1.25509549259519e-13 2.87205126143083e-14 1.7333473907836e-13 6.09233402291166e-14 15874010519.701 0.00135845428210537 -8.64912615556923e-05 0.202736976609562 0.000353044662540103 1.25401476808513e-13 2.87069558955987e-14 1.7315830180698e-13 6.09007431874906e-14 20000000000 0.00168342744156417 -0.000136340675069366 0.202210358533662 0.000441737935786446 1.25230384192167e-13 2.86854901334065e-14 1.72878979375511e-13 6.08649612236497e-14 10000000000 0.00123891902528035 -3.95884868791024e-05 0.226453938038138 0.000353984096201299 1.33356370035822e-13 2.90966186978627e-14 2.01816585268033e-13 6.2832817908024e-14 12599210498.9563 0.00139052400411429 -6.1029442930937e-05 0.226186395967677 0.000394114991045802 1.33268883410232e-13 2.90864320259786e-14 2.01661109563445e-13 6.2814526601024e-14 15874010519.701 0.00163069779479401 -9.50110837368058e-05 0.225762560268916 0.000457723056689507 1.33130289657396e-13 2.90702927579292e-14 2.01414809835197e-13 6.27855462231912e-14 20000000000 0.00201073493472908 -0.000148818658353827 0.225091923568845 0.000558454224943383 1.32910995057358e-13 2.90447512336633e-14 2.01025094695078e-13 6.27396814350549e-14 10000000000 0.00150497431314726 -4.830556779082e-05 0.248285763934548 0.000490191987701116 1.43120757749128e-13 2.97811164318664e-14 2.35550770653518e-13 6.53947017766784e-14 12599210498.9563 0.00168745588879723 -7.23661813177695e-05 0.247938275396304 0.000537483104644798 1.43003344672174e-13 2.97681818087696e-14 2.35325760370303e-13 6.53698271047836e-14 15874010519.701 0.00197640412016016 -0.000110483394394169 0.247388058452977 0.000612406085183315 1.42817433261796e-13 2.9747698831461e-14 2.34969480498806e-13 6.53304358642145e-14 20000000000 0.00243326752760314 -0.00017079855485079 0.246518120449823 0.000730970342020021 1.4252349630692e-13 2.97153081364857e-14 2.34406182264273e-13 6.52681439616008e-14 10000000000 0.00187657087466765 -6.89582915833107e-05 0.268251610495605 0.000713666749864006 1.58154548585705e-13 3.12621298995459e-14 2.82126566290582e-13 6.97627447683337e-14 12599210498.9563 0.00211381874558161 -9.85726463518241e-05 0.267767446933126 0.000774792913921019 1.57976248555067e-13 3.12429634079965e-14 2.81760738236946e-13 6.97234302206941e-14 15874010519.701 0.00248914677390158 -0.000145448646276318 0.267001511518158 0.000871549946941941 1.57694185334439e-13 3.12126395778793e-14 2.81182014425788e-13 6.96612297427097e-14 20000000000 0.00308174053503491 -0.000219524622919877 0.265792238090873 0.00102445460349521 1.57248866711261e-13 3.11647564817479e-14 2.8026833333064e-13 6.95630119179321e-14 10000000000 0.00252355395307986 -0.00012490839354429 0.285444553430233 0.00113449463063975 1.87112255129329e-13 3.48004226015604e-14 3.62686666581121e-13 7.90763305501341e-14 12599210498.9563 0.00289018999318286 -0.000169531210706999 0.284646168000712 0.00123162563352969 1.86756506342253e-13 3.47612315667501e-14 3.61908953744743e-13 7.89907546171427e-14 15874010519.701 0.00346891046209611 -0.00024000925905833 0.283385978081032 0.00138503261871109 1.86194993595024e-13 3.46993672242531e-14 3.6068141627969e-13 7.88556712685353e-14 20000000000 0.00437940402053108 -0.00035099845555989 0.281403412121302 0.00162661022830485 1.85311629412993e-13 3.46020297098418e-14 3.58750276091521e-13 7.86431335067593e-14 10000000000 0.00400381426194237 -0.000292414366370549 0.297659163479211 0.00205355328842721 2.51463456015445e-13 4.34927138662507e-14 5.31461806913414e-13 1.01251747877766e-13 12599210498.9563 0.00476618331435378 -0.000386924716070711 0.295898171765735 0.00227120186762736 2.50339454355801e-13 4.33596989817278e-14 5.28859889513968e-13 1.00944012305068e-13 15874010519.701 0.00596086175555575 -0.000535122781246754 0.293138672073661 0.00261246622551592 2.48578170166885e-13 4.31512560132941e-14 5.24782751924735e-13 1.0046177490966e-13 20000000000 0.00781920077579553 -0.000765882384122426 0.288846433004443 0.00314379503335666 2.4583870295163e-13 4.28270185828044e-14 5.18441265837366e-13 9.97116550420174e-14 10000000000 0.00815947799133437 -0.000822835364873646 0.298814333389009 0.00431350131373576 3.93015794806823e-13 6.32151957106298e-14 8.93070734257256e-13 1.51156856534029e-13 12599210498.9563 0.0103024897057653 -0.00110007990981369 0.293654735123999 0.00497994679629438 3.87361739214585e-13 6.24950446867282e-14 8.79446223805414e-13 1.49421741230273e-13 15874010519.701 0.0135712412664644 -0.00152324197719204 0.285785042367985 0.00599705136814987 3.78738157789964e-13 6.13966338333965e-14 8.58666103671644e-13 1.46775272004295e-13 20000000000 0.018449733555051 -0.00215547273574978 0.27404049416373 0.00751642686520848 3.65869212335341e-13 5.97573948026419e-14 8.27656042745712e-13 1.42825792286697e-13 10000000000 0.019545000583514 -0.00232797142111247 0.275691832348563 0.00971935564496135 6.3841292545596e-13 9.71606699098609e-14 1.49381924621487e-12 2.34134066593286e-13 12599210498.9563 0.0256185090468933 -0.00313481556026796 0.260967569764106 0.0116743227224702 6.08315853592844e-13 9.31835967172237e-14 1.42083114746629e-12 2.24489533942869e-13 15874010519.701 0.0341175290568641 -0.00426470532763885 0.240363904301797 0.0144117030245927 5.66202819464282e-13 8.76186142051121e-14 1.31870332969396e-12 2.10994320690192e-13 20000000000 0.0453346962363958 -0.00575781840196519 0.213172755653771 0.0180283415472688 5.10629328444395e-13 8.0274684199013e-14 1.18393286995943e-12 1.93185234234878e-13 10000000000 0.0406177597489494 -0.00506187906050946 0.223181173355798 0.018850362316243 8.87182997045793e-13 1.29821510144601e-13 2.0148305932827e-12 3.02404325693542e-13 12599210498.9563 0.0521596994970911 -0.00658947779555304 0.196313590596145 0.0224056765665084 7.91366002755186e-13 1.17175564706329e-13 1.79175224888092e-12 2.7296257201691e-13 15874010519.701 0.0659864230445516 -0.00842116795934073 0.164129019708459 0.0266682630347586 6.76594071536982e-13 1.02027734525509e-13 1.5245436900999e-12 2.3769611813905e-13 20000000000 0.0810368651138838 -0.0104184175240388 0.12909920691462 0.0313151809749647 5.51689814259963e-13 8.55421956160765e-14 1.23374559747512e-12 1.99315440922085e-13 10000000000 0.0620973841867127 -0.00759493771478827 0.170439999382883 0.0275733915963699 1.02032284862744e-12 1.43552175857946e-13 2.1429304782987e-12 3.10983185381507e-13 12599210498.9563 0.0765538110788216 -0.00945069312992542 0.139458617463677 0.0315505848158448 8.55289511290916e-13 1.22416421881059e-13 1.78921496871288e-12 2.65683045170606e-13 15874010519.701 0.0916882830426666 -0.0113958517435605 0.107025778333789 0.0357192521497966 6.82538941765625e-13 1.00292034905786e-13 1.41895924984713e-12 2.18264023029769e-13 20000000000 0.10596316918098 -0.0132350025604918 0.0764381387735528 0.0396604853187946 5.19644033959937e-13 7.94293262564462e-14 1.06982735312769e-12 1.73549239627284e-13 10000000000 0.0770068788847311 -0.0089440189882147 0.138196246441335 0.0331476318095465 1.08314856444769e-12 1.4514218154693e-13 2.07999084419411e-12 2.90193719772055e-13 12599210498.9563 0.0924389253978994 -0.0108287128981371 0.108035391061769 0.0368321144086453 8.75925264719923e-13 1.19893176953398e-13 1.67495997909201e-12 2.40842922213003e-13 15874010519.701 0.107449832548038 -0.0126646933141321 0.0786988835368521 0.0404218120733055 6.74387031248013e-13 9.53365324182815e-14 1.28104100070438e-12 1.92845368771929e-13 20000000000 0.120644438141686 -0.0142834968050286 0.0529143635758252 0.0435877042124749 4.97289478059967e-13 7.3757278804263e-14 9.34892976207957e-13 1.50667285963285e-13 10000000000 0.0870261543674186 -0.00947025539978728 0.120987668870734 0.0365396042510702 1.12854169995016e-12 1.43367768205204e-13 2.00878984432143e-12 2.68194438984e-13 12599210498.9563 0.102997895899888 -0.0113127559433848 0.0921104654574614 0.0398725174098065 8.95661846549927e-13 1.16567658627187e-13 1.58772033488632e-12 2.19737095205618e-13 15874010519.701 0.117969574915975 -0.0130428071802365 0.0650422172423344 0.0430029875081164 6.77396687840292e-13 9.14490688378476e-14 1.19307564596214e-12 1.74320030359635e-13 20000000000 0.130693975438848 -0.0145184287653957 0.042038449937518 0.0456748147533926 4.91953058808234e-13 7.01070317134638e-14 8.57775529400333e-13 1.35731225736282e-13 10000000000 0.0948544316626761 -0.00968642372523014 0.110928337266911 0.0390018985678546 1.16886803585499e-12 1.41502852240947e-13 1.96538083991796e-12 2.51993550823011e-13 12599210498.9563 0.111279587206312 -0.0114858017134989 0.0829198828458433 0.0420723406836696 9.16814128252061e-13 1.1395951176392e-13 1.53556340033772e-12 2.05024802347294e-13 15874010519.701 0.126332438337163 -0.0131378928635179 0.0572519783325073 0.0448928155937612 6.85853592374979e-13 8.87207879926096e-14 1.14171563455222e-12 1.61985910518485e-13 20000000000 0.138872496156815 -0.0145196392037052 0.0358696971241391 0.0472541791993846 4.93509242056089e-13 6.77012658805047e-14 8.13718490238819e-13 1.26141673477962e-13 10000000000 0.10208059209723 -0.00991038331455128 0.103656673951721 0.0412420336585848 1.20441543686708e-12 1.40859556523312e-13 1.94428150135302e-12 2.42178663120104e-13 12599210498.9563 0.118870560622886 -0.0116841132387342 0.0762035494971612 0.0441446863323851 9.35376243255771e-13 1.12510418125932e-13 1.50437301411518e-12 1.9582448606593e-13 15874010519.701 0.133971423361364 -0.0132825499666048 0.0515124772213069 0.0467621313028766 6.93438580635054e-13 8.70166302148419e-14 1.10877845815954e-12 1.54138976224364e-13 20000000000 0.146347836450081 -0.0145981772217355 0.0312764631343776 0.0489193989853271 4.95213650173716e-13 6.61283165157043e-14 7.84658942871743e-13 1.19983693252842e-13 10000000000 0.109497290300597 -0.0103186063542971 0.0970095100720515 0.0436452868081602 1.23378849621693e-12 1.4212726694461e-13 1.93475259570219e-12 2.38170262992567e-13 12599210498.9563 0.126515785155101 -0.0120907426922929 0.070004295200389 0.0464600123211913 9.48403637232378e-13 1.12486217953309e-13 1.48189904246943e-12 1.91135073151561e-13 15874010519.701 0.141528714988323 -0.0136572622249414 0.0461815552434454 0.0489500296297411 6.96687127740433e-13 8.63416841969921e-14 1.0824709465266e-12 1.49648049959201e-13 20000000000 0.153631362924029 -0.0149257754153224 0.0269769165834618 0.0509696540615515 4.93831040803985e-13 6.52713435853851e-14 7.60575318212545e-13 1.16212583862609e-13 10000000000 0.117479788690042 -0.0110172440918999 0.0898811766240549 0.0464576725763202 1.25542437591769e-12 1.4563043060715e-13 1.92696909910936e-12 2.39199930953517e-13 12599210498.9563 0.13454351144182 -0.0128127829948933 0.0633973768152661 0.049247273644604 9.54045464563193e-13 1.13997015634354e-13 1.45921647564496e-12 1.90103262942122e-13 15874010519.701 0.149275746430634 -0.0143662641781415 0.0405320270344218 0.0516628651660601 6.93883522864052e-13 8.66894270964419e-14 1.05543423835915e-12 1.47720280119586e-13 20000000000 0.160939798436185 -0.0156019231204959 0.0224284411573533 0.0535878403179383 4.87970568798939e-13 6.50753206779976e-14 7.35848585801611e-13 1.1417353716052e-13 10000000000 0.126189182398804 -0.0120822412471874 0.0817022212834649 0.0498646039871037 1.26758296693996e-12 1.51386537397552e-13 1.91251121890012e-12 2.44386137370146e-13 12599210498.9563 0.143071095466241 -0.0139220813787516 0.0559608454538016 0.0526729136682361 9.50973869890011e-13 1.16964122583195e-13 1.429755465793e-12 1.91899599339894e-13 15874010519.701 0.15729995363137 -0.0154760826491597 0.0342645517203518 0.0550471347262759 6.84161180306769e-13 8.79552773668215e-14 1.02292765450395e-12 1.47667316853139e-13 20000000000 0.168345245086394 -0.0166880953080623 0.0174221229840626 0.0569026789380978 4.77114571567392e-13 6.54437228132276e-14 7.0722919443068e-13 1.13341604674913e-13 10000000000 0.135659347513792 -0.0135753454387176 0.0722344567770262 0.0540127388683711 1.26832353233789e-12 1.59109057132636e-13 1.88428641751651e-12 2.52635181439813e-13 12599210498.9563 0.152094481018705 -0.0154712755156713 0.0475683403422559 0.0568611976265705 9.38137153939306e-13 1.21105088300774e-13 1.3887471822283e-12 1.95599025894082e-13 15874010519.701 0.1655868494192 -0.0170310252602581 0.0273183930628955 0.0592069265294901 6.67113992448824e-13 8.991032033464e-14 9.81999210815249e-13 1.48781831388327e-13 20000000000 0.175841547568491 -0.0182221330996911 0.0119270333438294 0.0610022673694447 4.61198773571587e-13 6.62087937076413e-14 6.72964224777729e-13 1.13210083147699e-13 10000000000 6.55395588524108e-05 -1.78021257607889e-05 0.00717179861414314 2.20924208923501e-05 7.15411966233212e-14 2.55902844176999e-14 2.81988099324892e-14 4.51788392537344e-14 12599210498.9563 9.2745411959933e-05 -2.82423908175624e-05 0.00715979882718456 3.46442806264946e-05 7.1535717724655e-14 2.55883421914804e-14 2.81965117451818e-14 4.51771960972386e-14 15874010519.701 0.000135921346977586 -4.48116877349402e-05 0.00714075467705365 5.45668330038662e-05 7.15270227055076e-14 2.55852598158157e-14 2.81928644713496e-14 4.5174588120557e-14 20000000000 0.000204432011407194 -7.11047631273211e-05 0.00711053486439274 8.61861628595473e-05 7.15132257395581e-14 2.55803686534701e-14 2.81870769790265e-14 4.51704491518003e-14 10000000000 7.45578411461814e-05 -1.79589588851386e-05 0.0102160699101728 2.26044516970503e-05 7.23128636108041e-14 2.56151961050394e-14 2.93786652888066e-14 4.53230764493713e-14 12599210498.9563 0.000102636082613098 -2.84868386398881e-05 0.0102032569094804 3.52979657199382e-05 7.23070892849068e-14 2.56132106213532e-14 2.93761491547504e-14 4.53213890037791e-14 15874010519.701 0.000147196030278366 -4.51950688146251e-05 0.010182922389916 5.54452634167757e-05 7.22979255233275e-14 2.56100596231407e-14 2.93721560414028e-14 4.53187107529144e-14 20000000000 0.000217901619403279 -7.17083184511251e-05 0.0101506555702465 8.74210600175229e-05 7.2283385026749e-14 2.56050596410775e-14 2.93658198888761e-14 4.53144603073314e-14 10000000000 8.71599039321176e-05 -1.81637366696479e-05 0.0144612816278464 2.32961691391531e-05 7.33778663413172e-14 2.56404282483687e-14 3.10640877856281e-14 4.55150722918739e-14 12599210498.9563 0.000116473360118885 -2.8806122298214e-05 0.0144472753400305 3.61859389422237e-05 7.3371662984346e-14 2.56383832071588e-14 3.1061242843866e-14 4.55133213453652e-14 15874010519.701 0.00016299287130202 -4.56959108417124e-05 0.014425047412316 5.66446004499621e-05 7.33618185130152e-14 2.56351377322699e-14 3.10567279869865e-14 4.55105423393372e-14 20000000000 0.000236806007994153 -7.24968419000692e-05 0.0143897770519677 8.91142211635332e-05 7.33461982996087e-14 2.56299879414713e-14 3.1049564137368e-14 4.55061320713769e-14 10000000000 0.000104667623382 -1.84317354624562e-05 0.0202932874533853 2.42192801504504e-05 7.48309759240649e-14 2.56660150853047e-14 3.34644969843922e-14 4.57702906365202e-14 12599210498.9563 0.000135722675512194 -2.92242210936974e-05 0.0202775176091727 3.73818550232774e-05 7.48241472869866e-14 2.56638878543307e-14 3.34611477185396e-14 4.57684477623222e-14 15874010519.701 0.000185004963069666 -4.63519800195844e-05 0.0202524915101075 5.82733076298636e-05 7.48133107669015e-14 2.56605120076924e-14 3.34558326371415e-14 4.57655229023895e-14 20000000000 0.00026319911453519 -7.35299141343964e-05 0.0202127826026396 9.14292869142463e-05 7.47961170873716e-14 2.56551555072426e-14 3.34473993665618e-14 4.57608812875868e-14 10000000000 0.000128768714204636 -1.87801844407643e-05 0.0281471837429876 2.54286238028367e-05 7.67787587409716e-14 2.56920108373461e-14 3.68603681478143e-14 4.61063052180568e-14 12599210498.9563 0.000162258418834105 -2.97682222148474e-05 0.0281287942247982 3.89694618689873e-05 7.67710177545935e-14 2.56897706338373e-14 3.68562326403748e-14 4.61043284443064e-14 15874010519.701 0.00021540268011882 -4.72059720108756e-05 0.0280996117777502 6.04609727059002e-05 7.6758733800888e-14 2.5686215598944e-14 3.68496700610247e-14 4.61011911477027e-14 20000000000 0.000299720293730575 -7.48749067528282e-05 0.0280533104297522 9.45684852371453e-05 7.67392445548182e-14 2.56805750185181e-14 3.68392579781508e-14 4.60962126017871e-14 10000000000 0.000161519568905265 -1.92263125882237e-05 0.0384568268586366 2.69741082274955e-05 7.93272402420088e-14 2.57184993402208e-14 4.16089811383927e-14 4.65408694188149e-14 12599210498.9563 0.000198366725697547 -3.04652712818233e-05 0.0384345410193774 4.1034782748417e-05 7.93181713312399e-14 2.5716105478485e-14 4.16036029233438e-14 4.65386973206561e-14 15874010519.701 0.000256836310034922 -4.83007184289909e-05 0.0383991771143595 6.3350868070744e-05 7.93037807797271e-14 2.57123067447174e-14 4.15950687063114e-14 4.65352501555256e-14 20000000000 0.000349596523676179 -7.65994113197457e-05 0.0383430722909478 9.87657643624629e-05 7.92809509183175e-14 2.57062798660239e-14 4.15815294560607e-14 4.65297802013785e-14 10000000000 0.000205276200353681 -1.97840770757376e-05 0.0515710164218152 2.88898970247087e-05 8.25613454986182e-14 2.5745604928854e-14 4.81314182201541e-14 4.70886590218334e-14 12599210498.9563 0.000246663491732492 -3.13374525981171e-05 0.0515429645845106 4.36536224763251e-05 8.25503591644505e-14 2.57430056915059e-14 4.81240608758709e-14 4.70862034119493e-14 15874010519.701 0.000312333451288846 -4.96711308253939e-05 0.051498453833762 6.70847746316316e-05 8.25329271257093e-14 2.57388812753558e-14 4.81123868960596e-14 4.70823065169256e-14 20000000000 0.000416506839711508 -7.87585159992019e-05 0.0514278446656985 0.000104267320810925 8.25052748236902e-14 2.57323382412643e-14 4.80938683883831e-14 4.70761234587327e-14 10000000000 0.000262534430892016 -2.04601350894993e-05 0.0676509326943571 3.11851264297447e-05 8.65197576852055e-14 2.57735020425495e-14 5.68682864405198e-14 4.77572373637568e-14 12599210498.9563 0.000309902653038521 -3.23954811471803e-05 0.0676144650098873 4.68776239533897e-05 8.65060451971985e-14 2.57706349528189e-14 5.68577853072077e-14 4.77543756932804e-14 15874010519.701 0.000385056543144697 -5.13342745844806e-05 0.0675566054780573 7.17816235362156e-05 8.64842893744796e-14 2.57660858471075e-14 5.68411244559475e-14 4.77498347512332e-14 20000000000 0.000504259055724998 -8.13791384655312e-05 0.0674648329736199 0.000111298429412488 8.64497828427636e-14 2.57588699172975e-14 5.68146987992876e-14 4.77426306758529e-14 10000000000 0.000335694854485212 -2.12505141281835e-05 0.0865858730625402 3.38433551847483e-05 9.11743676651711e-14 2.58024205366493e-14 6.82009379086838e-14 4.85436827605575e-14 12599210498.9563 0.000390690972023416 -3.36334892416502e-05 0.0865374128977935 5.07260144055333e-05 9.11568714266935e-14 2.57992147260232e-14 6.81855208058366e-14 4.85402526031916e-14 15874010519.701 0.000477937947724722 -5.32811726484233e-05 0.0864605345625687 7.75170030853367e-05 9.11291154143489e-14 2.57941286769996e-14 6.81610630688867e-14 4.85348101384385e-14 20000000000 0.00061629819110627 -8.44471127494673e-05 0.0863386170565072 0.000120023495245702 9.10850996212556e-14 2.57860622705787e-14 6.81222775591118e-14 4.85261772339879e-14 10000000000 0.000426813066805193 -2.21397794910611e-05 0.107971964299983 3.68370325464218e-05 9.6425399869038e-14 2.58326464882462e-14 8.23566539243365e-14 4.94336456466671e-14 12599210498.9563 0.000491183505415601 -3.50277224855656e-05 0.107906979298869 5.51912980215064e-05 9.64028187341734e-14 2.58290272460618e-14 8.23337715280954e-14 4.94294443655854e-14 15874010519.701 0.000593288550272981 -5.54747674062686e-05 0.107803899635014 8.43149279838862e-05 9.63670008713994e-14 2.58232859908566e-14 8.22974757607647e-14 4.94227792812846e-14 20000000000 0.000755177335171144 -8.79040222957994e-05 0.107640466099601 0.000130515738086534 9.63102126341908e-14 2.58141822135774e-14 8.22399296976607e-14 4.94122092686824e-14 10000000000 0.000537417085393801 -2.31036228601755e-05 0.131174412584182 4.01569946799629e-05 1.02117440066638e-13 2.5864525910981e-14 9.93367380365566e-14 5.0403693696217e-14 12599210498.9563 0.000612865631800055 -3.65405723023584e-05 0.131087562486171 6.02626123896166e-05 1.02088281478955e-13 2.58604205197928e-14 9.9302967786972e-14 5.03984854236242e-14 15874010519.701 0.000732523825829648 -5.78562635551255e-05 0.130949822667655 9.21614810502902e-05 1.02042038011571e-13 2.58539090551176e-14 9.92494105295624e-14 5.03902241470426e-14 20000000000 0.000922195441726032 -9.16572561048479e-05 0.130731491550472 0.00014275549359577 1.01968738999036e-13 2.58435864262246e-14 9.91645186193618e-14 5.03771261368523e-14 10000000000 0.000668446354685972 -2.41141141668577e-05 0.155449212580768 4.38501064200514e-05 1.08070725465698e-13 2.5898490191027e-14 1.18903589033853e-13 5.14260793311393e-14 12599210498.9563 0.000756495695212522 -3.81287229207244e-05 0.155334667127848 6.59630756505991e-05 1.08033397433913e-13 2.58938333886974e-14 1.18854667870476e-13 5.1419608558133e-14 15874010519.701 0.000896112595835601 -6.03578851345276e-05 0.155153037782248 0.000101041744489994 1.07974208768323e-13 2.58864486329994e-14 1.18777096748743e-13 5.1409346658812e-14 20000000000 0.00111735663907935 -9.56001196859939e-05 0.154865222598456 0.000156666614971601 1.07880418288636e-13 2.58747448139612e-14 1.18654177464695e-13 5.13930815812498e-14 10000000000 0.000820309199941664 -2.5145777064659e-05 0.18007122437896 4.80587647154751e-05 1.14115062733748e-13 2.59351348972193e-14 1.40633294593494e-13 5.24739416784119e-14 12599210498.9563 0.000922206420861656 -3.97524955057344e-05 0.179923067135918 7.2395262367908e-05 1.14067978668917e-13 2.59298722807299e-14 1.40564286902977e-13 5.24659495862529e-14 15874010519.701 0.00108374853951094 -6.29174110226427e-05 0.17968818962565 0.000110994807154041 1.13993335808062e-13 2.59215284571052e-14 1.4045488838678e-13 5.24532777101459e-14 20000000000 0.00133965379146988 -9.96346178310949e-05 0.17931611753554 0.000172186737867286 1.13875095042328e-13 2.59083087449364e-14 1.40281591894997e-13 5.24331995060793e-14 10000000000 0.000993015920049061 -2.6181068117482e-05 0.204423821034366 5.30663025802292e-05 1.20115913488397e-13 2.59753983682265e-14 1.64009119028853e-13 5.35253096816082e-14 12599210498.9563 0.00110970680980942 -4.13841289952691e-05 0.204236414480368 7.97966291791741e-05 1.20057573485723e-13 2.59694866273754e-14 1.63914660818262e-13 5.35155476847469e-14 15874010519.701 0.00129466141632792 -6.54908904120214e-05 0.203939379840456 0.000122185121412988 1.19965106872991e-13 2.59601156118853e-14 1.63764948453448e-13 5.35000730293554e-14 20000000000 0.00158755354572783 -0.000103691177424185 0.203469009086079 0.00018936398324132 1.19818682931956e-13 2.59452734347726e-14 1.63527874444709e-13 5.34755626802297e-14 10000000000 0.00118634718662776 -2.72152904795773e-05 0.228036049217399 5.93659416377457e-05 1.2598986645722e-13 2.60209084698527e-14 1.88523001351112e-13 5.45655555252387e-14 12599210498.9563 0.00131852655293247 -4.30149620567241e-05 0.227804245342134 8.86200139348925e-05 1.25918880919744e-13 2.60143118699561e-14 1.88397512608825e-13 5.45537905641669e-14 15874010519.701 0.00152798193174113 -6.80633973122092e-05 0.227436927655653 0.000135001304673088 1.25806397756354e-13 2.600385759883e-14 1.88198664366606e-13 5.45351452532615e-14 20000000000 0.00185955186051559 -0.000107745002239093 0.226855474400467 0.000208484744484927 1.25628342448635e-13 2.59873056141624e-14 1.87883898149323e-13 5.45056240052656e-14 10000000000 0.00140004671252825 -2.82625432239602e-05 0.250578584422517 6.77808288915838e-05 1.31713123723874e-13 2.60746058682784e-14 2.13765689450909e-13 5.55890936835225e-14 12599210498.9563 0.00154828454258465 -4.4663774830443e-05 0.25029769495219 9.96660479095079e-05 1.31628150513694e-13 2.6067288344771e-14 2.13603423104829e-13 5.55751001622336e-14 15874010519.701 0.00178313002838792 -7.06611259568962e-05 0.249852703947697 0.000150208104960137 1.31493535177094e-13 2.60556942897884e-14 2.13346359708312e-13 5.55529284733442e-14 20000000000 0.00215475089467465 -0.000111834016539293 0.249148566641606 0.000230256462577239 1.31280527385966e-13 2.60373445635299e-14 2.1293959803355e-13 5.55178376257221e-14 10000000000 0.00163406095800927 -2.93659822066894e-05 0.271837787480458 7.96691462646715e-05 1.37329080717221e-13 2.61418359923351e-14 2.39504976790123e-13 5.66017223109319e-14 12599210498.9563 0.00179901023531178 -4.63907350184711e-05 0.271503242852237 0.000114303390929826 1.37228644703367e-13 2.61337473152381e-14 2.39299755202116e-13 5.65852543340711e-14 15874010519.701 0.00206026476542561 -7.33711202651842e-05 0.27097338485423 0.000169190468810254 1.37069573408279e-13 2.61209346087335e-14 2.3897472433089e-13 5.6559168799454e-14 20000000000 0.00247351013087189 -0.00011608760890985 0.270135294247036 0.000256089081915711 1.3681796891425e-13 2.61006641098339e-14 2.38460621556305e-13 5.65179004472397e-14 10000000000 0.00188889087928875 -3.06191574597689e-05 0.291683053623139 9.72605727913578e-05 1.429616238752e-13 2.62323141520388e-14 2.65766127983305e-13 5.76254945592126e-14 12599210498.9563 0.00207160306029929 -4.83256495444256e-05 0.291289652339495 0.000134828326253389 1.42843766472737e-13 2.62233663615654e-14 2.65510565925784e-13 5.76062269324095e-14 15874010519.701 0.00236091277039497 -7.63803907555282e-05 0.290666745942156 0.000194349537273375 1.4265715390223e-13 2.62091965930559e-14 2.65105915881795e-13 5.75757151616318e-14 20000000000 0.002818338540028 -0.000120782721552412 0.289681903147052 0.000288548031977809 1.42362114332826e-13 2.61867886430894e-14 2.6446615501962e-13 5.75274654802734e-14 10000000000 0.00216622636536487 -3.22161341325794e-05 0.310035125962685 0.000124212851659589 1.48844233886899e-13 2.63640056557016e-14 2.92945720858851e-13 5.87096022437059e-14 12599210498.9563 0.00236864951148141 -5.07326300504829e-05 0.309575656071538 0.000165065211237547 1.48705871367178e-13 2.63540301524934e-14 2.92629556211268e-13 5.86870131853814e-14 15874010519.701 0.00268907185423615 -8.00634507914316e-05 0.308848360883444 0.000229772127790406 1.48486858748682e-13 2.63382376924513e-14 2.92129103384906e-13 5.86512528173847e-14 20000000000 0.00319544450537388 -0.00012646715104591 0.307699033084287 0.000332131721591133 1.48140761940144e-13 2.63132756305865e-14 2.91338260386483e-13 5.85947311491071e-14 10000000000 0.00247039683993157 -3.45856985906401e-05 0.326836229091362 0.000166626519842672 1.55391953207928e-13 2.65720719835949e-14 3.22041665084306e-13 5.99567912172808e-14 12599210498.9563 0.00269627667456082 -5.41797265273827e-05 0.32629884102961 0.000211483648508592 1.55227598163598e-13 2.6560729481875e-14 3.21648205503568e-13 5.99299095134821e-14 15874010519.701 0.00305369638748412 -8.52076562609203e-05 0.325448526488819 0.000282509014671473 1.54967539370957e-13 2.65427795719039e-14 3.21025636092902e-13 5.98873696332687e-14 20000000000 0.00361820493819467 -0.000134271994465914 0.324105586514153 0.000394801818483392 1.54556821473766e-13 2.65144240544033e-14 3.20042398418017e-13 5.98201727098288e-14 10000000000 0.00281249671349201 -3.8799173307981e-05 0.342014869487551 0.000235286698359538 1.63407389943384e-13 2.69332752518178e-14 3.55273446523544e-13 6.15965977088936e-14 12599210498.9563 0.00306940930738075 -6.00494494118327e-05 0.341377124373545 0.000285733988097669 1.63206061087842e-13 2.69198237099273e-14 3.54770812162311e-13 6.15633488893326e-14 15874010519.701 0.00347572795981842 -9.36851128540093e-05 0.340368525463553 0.000365572049552287 1.62887660379565e-13 2.68985470118378e-14 3.53975899683707e-13 6.15107602090642e-14 20000000000 0.00411695485215411 -0.000146835637210161 0.3387768755983 0.000491701669020739 1.62385204732009e-13 2.68649632000439e-14 3.52721483487413e-13 6.14277574762642e-14 10000000000 0.00322401476502489 -4.79357688873402e-05 0.35541799834291 0.000351823281583619 1.74737523332705e-13 2.76409124144247e-14 3.98054854105721e-13 6.42126373278011e-14 12599210498.9563 0.00352922109425373 -7.22531733990187e-05 0.354629788630514 0.000411812714986803 1.74473142125441e-13 2.76234489134743e-14 3.9736860630139e-13 6.41676998002151e-14 15874010519.701 0.0040115263101021 -0.000110714589480994 0.353384243592521 0.000506676761612035 1.74055365292264e-13 2.75958491238175e-14 3.96284195396578e-13 6.40966821368594e-14 20000000000 0.00477169474426907 -0.000171418492344052 0.351421198984157 0.000656356869775221 1.73396936356759e-13 2.75523413462403e-14 3.94575136395738e-13 6.39847383352131e-14 10000000000 0.00380600479145687 -7.19823374353867e-05 0.366611774844225 0.000568569828209409 1.94435783454662e-13 2.92442467954695e-14 4.65562971175439e-13 6.94768900528389e-14 12599210498.9563 0.00420707451833727 -0.000103494445875534 0.365534777821336 0.000649911250414636 1.94028433214753e-13 2.9216517148068e-14 4.64464569664112e-13 6.94025626340728e-14 15874010519.701 0.00483981045549288 -0.000153254406525179 0.363835731720069 0.000778325473440977 1.93385813933167e-13 2.9172766726566e-14 4.62731779206423e-13 6.92852970871822e-14 20000000000 0.00583445218885811 -0.000231590260117282 0.361164999872183 0.000980409881220501 1.92375698299075e-13 2.91039834903519e-14 4.6000806187645e-13 6.91009465118229e-14 10000000000 0.00491838760095663 -0.000146645072608458 0.374179416076043 0.00103906924080455 2.37446207473897e-13 3.33698340862694e-14 6.03165541383896e-13 8.23716174271859e-14 12599210498.9563 0.00557843544037639 -0.000200248705105538 0.372333635870845 0.00118529185253902 2.3655344755524e-13 3.33030367830946e-14 6.00662055687034e-13 8.21847902033502e-14 15874010519.701 0.00661485628672437 -0.000284496800965465 0.369435446447961 0.00141504378934504 2.35151683951931e-13 3.31981462925755e-14 5.96731224146075e-13 8.1891427879834e-14 20000000000 0.00823210419172702 -0.000416154735081574 0.364913296626617 0.00177392675969146 2.32964515294621e-13 3.30344635585474e-14 5.90597973916605e-13 8.14336547412625e-14 10000000000 0.00794900281857091 -0.000410545327186067 0.373097571866072 0.00228242887604829 3.44246363546754e-13 4.4357100972177e-14 9.32978580121955e-13 1.16092232084072e-13 12599210498.9563 0.00953640972114513 -0.000550521994999946 0.368493387306758 0.00268450100314027 3.40720463830044e-13 4.40554483171284e-14 9.22738781080738e-13 1.15216691474378e-13 15874010519.701 0.0119850305900964 -0.000766636583201146 0.361391574460459 0.00330508002780117 3.35281989100128e-13 4.35901461772439e-14 9.06944567731883e-13 1.13866186230751e-13 20000000000 0.0157022514189483 -0.00109519931446684 0.350611073780529 0.00424808335399773 3.27026710453477e-13 4.28837909429983e-14 8.82969951424205e-13 1.11816102469459e-13 10000000000 0.0179238630724552 -0.00137000306149317 0.346819526828956 0.00598560187189884 5.81151359843065e-13 6.90971396481397e-14 1.64021444218877e-12 1.90060098119514e-13 12599210498.9563 0.0229388091302937 -0.0018470094010786 0.332081492007042 0.00738355899360405 5.59190926644676e-13 6.7026309110235e-14 1.57564893817542e-12 1.83972182689474e-13 15874010519.701 0.0301299836245576 -0.00253165802841955 0.310948896855926 0.00938936833293069 5.27703191586136e-13 6.40569981349274e-14 1.48307245154288e-12 1.75242960354803e-13 20000000000 0.0399445067017567 -0.00346755478815354 0.282109382262345 0.0121296868973904 4.84734211180128e-13 6.00048324002506e-14 1.35674035721409e-12 1.63330539683447e-13 10000000000 0.0435976716178298 -0.00388685547395328 0.270984976246787 0.0145587247455298 8.87288587614518e-13 1.0053657989505e-13 2.47079866959916e-12 2.7591079478031e-13 12599210498.9563 0.0552730472325744 -0.00502933755049705 0.237619122601105 0.0178202901258044 7.87568737006011e-13 9.08133799620015e-14 2.18576867879611e-12 2.4811934280279e-13 15874010519.701 0.0691055210704991 -0.00638456139838949 0.198091141736577 0.0216875858287014 6.69437498054927e-13 7.92947891187314e-14 1.84811347248986e-12 2.15196390425901e-13 20000000000 0.0839746234534121 -0.00784470348285658 0.155605760545623 0.0258510377075665 5.42478506896014e-13 6.69150581523938e-14 1.48522624022103e-12 1.79812486848446e-13 10000000000 0.0766723767266842 -0.00699582430197495 0.180447076386435 0.0241489678534542 1.02090505151699e-12 1.12523914161775e-13 2.66978381277415e-12 2.92659748286485e-13 12599210498.9563 0.0911714413345749 -0.00839916749368966 0.141709353869633 0.0278957714621455 8.22659648657658e-13 9.33916353958328e-14 2.14005634737905e-12 2.4153712216508e-13 15874010519.701 0.105160187366507 -0.00975566988730881 0.104338156172764 0.0315156252410541 6.31421823129325e-13 7.49353600869682e-14 1.62905392469938e-12 1.92221055312922e-13 20000000000 0.117364185760696 -0.0109437554200199 0.0717405715247911 0.0346826187578889 4.6463767326873e-13 5.88385797315543e-14 1.18339407186403e-12 1.49210104945206e-13 10000000000 0.0998425761371135 -0.00884188422453422 0.12835731729856 0.0292147622331441 1.0316305639065e-12 1.10052987639029e-13 2.48434756695229e-12 2.66273749400639e-13 12599210498.9563 0.113812838698582 -0.0101450246097742 0.0940433081406391 0.032413957418555 7.8741757613372e-13 8.73442590863745e-14 1.88444208767746e-12 2.10490334393169e-13 15874010519.701 0.125925669385479 -0.011277863430848 0.0642942528873803 0.0351936636157493 5.75716378988106e-13 6.76583882871139e-14 1.36440152528351e-12 1.62132677104701e-13 20000000000 0.135550484988653 -0.0121831820905276 0.0406604614902912 0.0374126516504583 4.07572983015889e-13 5.20223369116402e-14 9.5136034401146e-13 1.23723582636393e-13 10000000000 0.112922178100428 -0.00944533267146646 0.107754529683242 0.0306752367517006 1.04692795603291e-12 1.06380049856962e-13 2.33518608792087e-12 2.40935402630295e-13 12599210498.9563 0.126636847730571 -0.0106549665803006 0.0766069108634448 0.0334216838831948 7.82858899305951e-13 8.31685300390356e-14 1.73540211888358e-12 1.88214866508148e-13 15874010519.701 0.138078876291537 -0.0116672755839563 0.0506227767659197 0.0357193489174095 5.62594476996643e-13 6.38070658198107e-14 1.23511240692126e-12 1.44239109553785e-13 20000000000 0.146888661303266 -0.0124520810477349 0.0306198375556635 0.0374993374259512 3.93081358501642e-13 4.89060945873826e-14 8.50095094648116e-13 1.10394679366445e-13 10000000000 0.12020157101137 -0.0093331036162726 0.101830792405546 0.0304511937997632 1.08246754572407e-12 1.03373216723565e-13 2.27124412195997e-12 2.22322454508296e-13 12599210498.9563 0.134274227736355 -0.0104906069528521 0.0718194357492729 0.0329195431950957 8.05325466563026e-13 8.06601767951078e-14 1.68017199894335e-12 1.73881494938473e-13 15874010519.701 0.14591421150622 -0.0114512181496189 0.0469974994829572 0.0349677934265837 5.76137132008852e-13 6.18768058301589e-14 1.19137285916513e-12 1.33821541811022e-13 20000000000 0.154814608443021 -0.0121912362105579 0.0280202322347906 0.0365452912539868 4.00968753026319e-13 4.75200853615616e-14 8.17784400671287e-13 1.03202551890437e-13 10000000000 6.06139566630646e-05 -1.66138338015749e-05 0.00718746157334502 2.00599532090839e-05 7.05881320170751e-14 2.46350604037632e-14 2.71815050355871e-14 4.24317402495973e-14 12599210498.9563 8.68364411707104e-05 -2.59894180127267e-05 0.00717660076452772 3.10880551832593e-05 7.05829678567182e-14 2.46334004209189e-14 2.71795137856603e-14 4.24303897160028e-14 15874010519.701 0.000128452186046935 -4.08692664034011e-05 0.00715936393711801 4.85923084723727e-05 7.05747722495646e-14 2.46307659383587e-14 2.71763535875839e-14 4.24282461519916e-14 20000000000 0.000194488243130794 -6.44820883648852e-05 0.00713201132680341 7.63741264328544e-05 7.05617675372166e-14 2.46265854086004e-14 2.71713388845307e-14 4.24248441475037e-14 10000000000 6.84998399009419e-05 -1.69675873710444e-05 0.0102362561747267 2.07330196960176e-05 7.13485101912397e-14 2.46487261516161e-14 2.83233052016694e-14 4.25531513380896e-14 12599210498.9563 9.5569781844712e-05 -2.64139957626529e-05 0.0102246321007154 3.18786422316419e-05 7.1343063397561e-14 2.46470302861697e-14 2.83211149001794e-14 4.25517648406278e-14 15874010519.701 0.000138530011890624 -4.14061495946609e-05 0.0102061841346899 4.95693551056942e-05 7.13344193408023e-14 2.46443388797532e-14 2.8317638840042e-14 4.25495642110647e-14 20000000000 0.000206698368252001 -6.51969408833368e-05 0.010176910143578 7.7646925844943e-05 7.13207032698048e-14 2.46400680802088e-14 2.83121230207723e-14 4.2546071679908e-14 10000000000 7.96432757182381e-05 -1.74411532297489e-05 0.0144868140024141 2.16422344335165e-05 7.24013890506268e-14 2.46624066191063e-14 2.99597345362438e-14 4.27171986467221e-14 12599210498.9563 0.000107917655253486 -2.69822012044567e-05 0.0144740639360053 3.29526941766356e-05 7.23955301033649e-14 2.46606606716607e-14 2.9957241890644e-14 4.27157600129023e-14 15874010519.701 0.000152788659248678 -4.21244121037774e-05 0.0144538293021458 5.09049312685805e-05 7.23862321049725e-14 2.46578898185268e-14 2.99532860702063e-14 4.27134766582497e-14 20000000000 0.000223987280849154 -6.61529663680119e-05 0.0144217210000963 7.93972970007384e-05 7.23714787504175e-14 2.46534930398758e-14 2.99470091348591e-14 4.2709852900401e-14 10000000000 9.53125972626074e-05 -1.80704248577099e-05 0.0203245444895035 2.28532752897248e-05 7.38409600236929e-14 2.46760399355552e-14 3.22967725351007e-14 4.29375584229598e-14 12599210498.9563 0.000125289792454311 -2.77375476656926e-05 0.0203101221362289 3.43949322374471e-05 7.38344983962793e-14 2.46742242091865e-14 3.22938130515353e-14 4.29360436533978e-14 15874010519.701 0.000172862105560588 -4.30796388794419e-05 0.020287234089353 5.27139617056971e-05 7.38242441904379e-14 2.46713426687847e-14 3.22891164735901e-14 4.29336394978947e-14 20000000000 0.000248344401750533 -6.7424851551468e-05 0.0202509167200746 8.17880445395658e-05 7.38079741789977e-14 2.46667703861151e-14 3.2281664418352e-14 4.29298241244368e-14 10000000000 0.000117165916264262 -1.88961622298577e-05 0.0281835296061797 2.44337010744666e-05 7.57728998156038e-14 2.4689553613779e-14 3.56110503327265e-14 4.32296673016899e-14 12599210498.9563 0.000149528306878367 -2.87293491060084e-05 0.0281666112442047 3.62980127344148e-05 7.57655563073988e-14 2.4687641349172e-14 3.5607358018165e-14 4.32280408382271e-14 15874010519.701 0.000200884216513826 -4.43346880488219e-05 0.0281397629716973 5.51289006103794e-05 7.57539029834678e-14 2.46846066842741e-14 3.56014986658502e-14 4.32254594720618e-14 20000000000 0.000282365888430644 -6.9096867964118e-05 0.0280971640235245 8.50146922873885e-05 7.57354139752536e-14 2.46797916347119e-14 3.55922021364723e-14 4.32213630267286e-14 10000000000 0.000147279342250406 -1.99602108596079e-05 0.0384958738078831 2.64395853166732e-05 7.83019726975744e-14 2.47028695007852e-14 4.02560014275552e-14 4.36089393335453e-14 12599210498.9563 0.000182935908214075 -3.00079224681323e-05 0.0384752252612579 3.87493594166122e-05 7.8293342301093e-14 2.47008253855184e-14 4.02511424918335e-14 4.36071489425943e-14 15874010519.701 0.000239516881209071 -4.5953276282481e-05 0.0384424589778805 5.82868695211958e-05 7.82796474448993e-14 2.46975816036197e-14 4.02434321846802e-14 4.3604307510772e-14 20000000000 0.000329282468651098 -7.12538827590521e-05 0.0383904740508572 8.92930820722282e-05 7.82579209171798e-14 2.46924350618043e-14 4.02311998162096e-14 4.35997986221285e-14 10000000000 0.000188106127404448 -2.12988402868209e-05 0.0516079726819112 2.88956614795666e-05 8.15114943766752e-14 2.47159134760464e-14 4.66494546414885e-14 4.40878044035661e-14 12599210498.9563 0.000228222254736859 -3.16162448811132e-05 0.0515817778426299 4.1809786129221e-05 8.15010013944808e-14 2.47136927271142e-14 4.66427242120631e-14 4.4085774828039e-14 15874010519.701 0.000291875964212971 -4.79889649732706e-05 0.0515402130526694 6.23058499651385e-05 8.1484351987142e-14 2.47101688352124e-14 4.66320448453862e-14 4.40825539726236e-14 20000000000 0.000392852774659096 -7.39660995536322e-05 0.0514742756746649 9.48316759710743e-05 8.14579407361841e-14 2.4704578347254e-14 4.66151037977001e-14 4.40774434366001e-14 10000000000 0.000242335750779275 -2.29337904513963e-05 0.067678506019563 3.17733800351272e-05 8.54383530453859e-14 2.47286294241074e-14 5.52300068046163e-14 4.46720866863372e-14 12599210498.9563 0.000288331329930228 -3.35789566596382e-05 0.0676441795445951 4.54873589472715e-05 8.54252062313967e-14 2.47261781379434e-14 5.52202826929619e-14 4.46697130594206e-14 15874010519.701 0.0003613082516003 -5.04709205333725e-05 0.0675897164956428 6.725187216583e-05 8.54043476737186e-14 2.47222887126937e-14 5.52048544771887e-14 4.46659464957026e-14 20000000000 0.000477059990504515 -7.7269673754271e-05 0.067503329342039 0.000101788115606183 8.53712637339501e-14 2.47161190377075e-14 5.51803834700649e-14 4.46599708070803e-14 10000000000 0.00031265228959789 -2.48632736595726e-05 0.0865951970348519 3.49762568148115e-05 9.00527316193683e-14 2.47409945502929e-14 6.63787027589167e-14 4.53580338192774e-14 12599210498.9563 0.00036614980891713 -3.58917087414014e-05 0.0865492361401565 4.97158155838839e-05 9.00358949012237e-14 2.47382519386871e-14 6.63642676707727e-14 4.53551769733788e-14 15874010519.701 0.000451020386204781 -5.33906420342482e-05 0.0864763217288111 7.31064264348213e-05 9.00091848714227e-14 2.47339006915872e-14 6.63413675579975e-14 4.53506440886871e-14 20000000000 0.000585614565956077 -8.11492982731868e-05 0.0863606879547316 0.000110219137037571 8.99668271054326e-14 2.47269995008694e-14 6.63050515352099e-14 4.53434538064443e-14 10000000000 0.000401442783397692 -2.70563209947788e-05 0.107954584401698 3.83427228659583e-05 9.52534298430005e-14 2.47530315953008e-14 8.03241759122898e-14 4.61315716348317e-14 12599210498.9563 0.00046416055547642 -3.85151397524595e-05 0.107892537486457 5.43495151102413e-05 9.52316280977742e-14 2.47499341849951e-14 8.03025485512873e-14 4.6128058110922e-14 15874010519.701 0.000563645331114115 -5.6695365140209e-05 0.107794116949326 7.97488787516731e-05 9.5197046124055e-14 2.47450206415075e-14 8.02682431362284e-14 4.61224840357954e-14 20000000000 0.000721382683442646 -8.5530730917541e-05 0.107638067258775 0.000120043106503431 9.51422164315072e-14 2.47372291526023e-14 8.02138518014561e-14 4.61136440373682e-14 10000000000 0.00051054506662004 -2.94531840997043e-05 0.131124713271534 4.16696002225048e-05 1.00883697963294e-13 2.4764815255696e-14 9.70698088516564e-14 4.69705058865856e-14 12599210498.9563 0.000584154153300207 -4.13765993566539e-05 0.131041326513373 5.9181342860315e-05 1.00855470369269e-13 2.47613022687629e-14 9.70376487053058e-14 4.69661346173279e-14 15874010519.701 0.000700896502305656 -6.02919000735239e-05 0.130909077659963 8.69655620305831e-05 1.00810702903809e-13 2.47557303126041e-14 9.69866444017318e-14 4.69592008894061e-14 20000000000 0.000885949848063454 -9.02880312811235e-05 0.130699445949639 0.000131035195733431 1.00739742226188e-13 2.47468968608565e-14 9.69057976967324e-14 4.69482074363277e-14 10000000000 0.000641112983159867 -3.19719976882356e-05 0.155366389100229 4.47480615388685e-05 1.06761637724582e-13 2.47764752525091e-14 1.16378474534756e-13 4.78488275276262e-14 12599210498.9563 0.000727095136380445 -4.43793387466146e-05 0.15525592863596 6.39782233793906e-05 1.0672543327546e-13 2.4772493751022e-14 1.16331619017909e-13 4.78433827115299e-14 15874010519.701 0.000863435964816684 -6.40598488577855e-05 0.155080774338557 9.44846286689005e-05 1.06668025540772e-13 2.47661797808586e-14 1.16257322404782e-13 4.78347477469554e-14 20000000000 0.00107949309417831 -9.52632047272523e-05 0.154803213860603 0.000142861308807252 1.06577055464872e-13 2.47561727418873e-14 1.16139589767168e-13 4.78210610679347e-14 10000000000 0.000793619057972172 -3.45193181631299e-05 0.179960354002161 4.73984174794717e-05 1.12712321481923e-13 2.47882040769669e-14 1.37820706562609e-13 4.87412736726289e-14 12599210498.9563 0.000893162958031345 -4.74157357351826e-05 0.179817027212909 6.85207748443162e-05 1.12666612887927e-13 2.47837125244367e-14 1.37754354677603e-13 4.873454070754e-14 15874010519.701 0.0010509765486236 -6.78690996681694e-05 0.179589804283474 0.000102023481653446 1.12594149644096e-13 2.47765910846749e-14 1.3764916509068e-13 4.87238650923289e-14 20000000000 0.00130098105324994 -0.000100290485421654 0.179229849708385 0.000155137985460241 1.12479359243002e-13 2.4765307755404e-14 1.3748253252662e-13 4.87069495257514e-14 10000000000 0.00096795802069667 -3.70012635599874e-05 0.20429640483365 4.94953618101479e-05 1.18590951182956e-13 2.48002806306085e-14 1.60860651627707e-13 4.9626602121254e-14 12599210498.9563 0.00108191378404061 -5.03804176784686e-05 0.204114769174241 7.263640077948e-05 1.18534336557124e-13 2.47952501855873e-14 1.6076965030131e-13 4.96183823633239e-14 15874010519.701 0.00126253634743017 -7.15960913127927e-05 0.203826876391838 0.000109334354406299 1.18444603200052e-13 2.47872759905945e-14 1.60625414721284e-13 4.96053522405082e-14 20000000000 0.00154857613319503 -0.000105217571739756 0.203370970068221 0.000167497885393164 1.18302503950559e-13 2.47746457288008e-14 1.60397007761015e-13 4.9584713254217e-14 10000000000 0.00116359677071629 -3.93328911482968e-05 0.227910955509724 5.0985710323026e-05 1.24293883947276e-13 2.48131219969192e-14 1.849452728165e-13 5.0489124646641e-14 12599210498.9563 0.00129248847409903 -5.31806840629628e-05 0.227686220713586 7.62250024311517e-05 1.24225151990323e-13 2.48075355680738e-14 1.84824425056849e-13 5.04792455268595e-14 15874010519.701 0.00149673877737302 -7.5135879953101e-05 0.227330096804934 0.000116242682005163 1.24116237534097e-13 2.47986819752353e-14 1.84632926847566e-13 5.04635885875282e-14 20000000000 0.00182008068936899 -0.000109920265734382 0.226766343108394 0.00017964825780481 1.23943825548046e-13 2.47846637079295e-14 1.84329785257147e-13 5.04387979913476e-14 10000000000 0.00137973242819407 -4.14449879228055e-05 0.250484411525562 5.19074676210152e-05 1.29760444981132e-13 2.48273765805154e-14 2.09574786159287e-13 5.13189418667678e-14 12599210498.9563 0.00152381703182181 -5.57436831936094e-05 0.250212584312512 7.92845177727264e-05 1.29678590941397e-13 2.48212260240508e-14 2.09419096263127e-13 5.13072604525213e-14 15874010519.701 0.00175209043753253 -7.8409909628392e-05 0.249781935744524 0.000122682884571512 1.29548912877169e-13 2.48114805690231e-14 2.09172443463078e-13 5.12887515201126e-14 20000000000 0.00211333080084051 -0.000114311137969956 0.249100457846987 0.000191422911570538 1.29343707163837e-13 2.47960556652483e-14 2.087821352053e-13 5.1259456155753e-14 10000000000 0.00161544394705158 -4.3288612679788e-05 0.271817507098592 5.24194335904116e-05 1.34970331924002e-13 2.484407413035e-14 2.34349465851077e-13 5.2111619655825e-14 12599210498.9563 0.0017748039653663 -5.80211304935724e-05 0.271495365066336 8.1945389400151e-05 1.34874520460276e-13 2.48373559269888e-14 2.34154253783701e-13 5.20980189306017e-14 15874010519.701 0.00202721961836858 -8.13709891006062e-05 0.270985123259777 0.000128740496545876 1.34722765567774e-13 2.48267134637451e-14 2.33845059783556e-13 5.20764740154192e-14 20000000000 0.00242651808171261 -0.000118344861714505 0.270177991835923 0.000202836366225256 1.3448271348193e-13 2.48098748513062e-14 2.33355965572766e-13 5.20423862182823e-14 10000000000 0.00186983814561496 -4.48382828970642e-05 0.291801753924645 5.28474285008129e-05 1.39940408042193e-13 2.48648515883984e-14 2.58998275432488e-13 5.28679262290115e-14 12599210498.9563 0.00204450008534577 -5.99928462398619e-05 0.291426653955128 8.4520830639867e-05 1.39829882436925e-13 2.48575610704909e-14 2.58759112278596e-13 5.28523037303045e-14 15874010519.701 0.00232108844241673 -8.40073636298106e-05 0.290832671135578 0.000134708770756831 1.39654862897425e-13 2.48460146345748e-14 2.58380393320275e-13 5.2827562015209e-14 20000000000 0.00275846445999858 -0.000122023075341516 0.289893421515169 0.000214150324781504 1.39378112302234e-13 2.48277523644646e-14 2.57781543802169e-13 5.27884310730418e-14 10000000000 0.00214219713656747 -4.60948702361006e-05 0.310392155265937 5.37502299831627e-05 1.44722957022532e-13 2.48922779638348e-14 2.83397385286325e-13 5.35940196221098e-14 12599210498.9563 0.00233227369460374 -6.16704469714612e-05 0.309961683944539 8.75770462149261e-05 1.44596892747072e-13 2.48844018161943e-14 2.83109813218645e-13 5.35762677032758e-14 15874010519.701 0.00263320108461209 -8.63476433082646e-05 0.309280180259513 0.000141165601294846 1.44397314618673e-13 2.48719307796538e-14 2.82654545629539e-13 5.35481603297699e-14 20000000000 0.00310888747046114 -0.000125401208334319 0.308202939874917 0.000225960991946217 1.44081848675874e-13 2.4852213371017e-14 2.81934922904767e-13 5.35037232294717e-14 10000000000 0.00243213638844224 -4.70893446407829e-05 0.327585060024457 5.60072330322292e-05 1.49406202446155e-13 2.49303075454248e-14 3.07585262897295e-13 5.43023076200262e-14 12599210498.9563 0.00263799591806177 -6.31025457912645e-05 0.327096525532115 9.20265007284815e-05 1.49263497916188e-13 2.49218138958866e-14 3.07244261486661e-13 5.42822836090009e-14 15874010519.701 0.00296383153749228 -8.84682807506661e-05 0.326323287362905 0.000149075568531665 1.49037630887616e-13 2.49083683392066e-14 3.06704539184869e-13 5.42505865661167e-14 20000000000 0.00347869326827426 -0.000128599489335326 0.325101515318641 0.000239314736707852 1.48680748585778e-13 2.48871182263219e-14 3.05851751106673e-13 5.4200493855578e-14 10000000000 0.00273978616934884 -4.78887424305436e-05 0.343401248967656 6.0931041915846e-05 1.54117324832971e-13 2.49849036907334e-14 3.31778950391386e-13 5.50131396962617e-14 12599210498.9563 0.00296225849317549 -6.43831057066e-05 0.342850998585471 9.92486594417752e-05 1.53956312626782e-13 2.49757285253641e-14 3.31378091415471e-13 5.49906224378933e-14 15874010519.701 0.00331429796437951 -9.05056611551955e-05 0.341980303947515 0.000159923439805365 1.53701534938748e-13 2.49612078386747e-14 3.30743793464702e-13 5.49549880464436e-14 20000000000 0.00387033795904607 -0.000131820844986703 0.340605107084411 0.0002558614123086 1.53299137003914e-13 2.4938267815278e-14 3.29741981453393e-13 5.4898696240981e-14 10000000000 0.00306601960782317 -4.86065404547724e-05 0.357873268268379 7.04126277230044e-05 1.59028346879346e-13 2.50649134874869e-14 3.56395353099281e-13 5.57575635390158e-14 12599210498.9563 0.00330665533256095 -6.566563892814e-05 0.35725578919608 0.00011124770465909 1.58846390740843e-13 2.50549410652555e-14 3.55925535844128e-13 5.5732189414398e-14 15874010519.701 0.00368732750344863 -9.26762930568192e-05 0.356278994915812 0.000175891550577068 1.58558555050959e-13 2.50391631292205e-14 3.55182335337235e-13 5.56920455741212e-14 20000000000 0.00428832036754557 -0.000135380402144261 0.354736921207795 0.000278062281643177 1.5810415120181e-13 2.50142480992985e-14 3.54009054632157e-13 5.56286592365949e-14 10000000000 0.0034127837321436 -4.94222849784408e-05 0.371035705566931 8.71194146518928e-05 1.64366645828692e-13 2.51834052194699e-14 3.82084508653027e-13 5.65817766449655e-14 12599210498.9563 0.00367420153964004 -6.71893422073581e-05 0.370342410479863 0.000130871632083252 1.64159550296324e-13 2.51724378011635e-14 3.81532050061413e-13 5.65529406905966e-14 15874010519.701 0.00408761208578539 -9.53131256376259e-05 0.369246048351343 0.000200111778136891 1.63832056084602e-13 2.51550914006023e-14 3.80658411622137e-13 5.65073353481053e-14 20000000000 0.00473994797791793 -0.000139757606285074 0.36751612414988 0.000309493008058492 1.63315316301883e-13 2.51277139967198e-14 3.79279937624013e-13 5.64353637528685e-14 10000000000 0.00378370532948572 -5.0624698237041e-05 0.38291675092665 0.000114808204155548 1.70437276945658e-13 2.53601663455469e-14 4.09798283896358e-13 5.75554637991788e-14 12599210498.9563 0.00407011123798882 -6.93350333529802e-05 0.382134192954757 0.00016216605928443 1.70198336216392e-13 2.53478721945796e-14 4.09141825938352e-13 5.75221517067568e-14 15874010519.701 0.0045228536670228 -9.89415479351804e-05 0.38089717811795 0.000237083289698237 1.6982063757135e-13 2.53284353560196e-14 4.08104151146041e-13 5.74694889035005e-14 20000000000 0.00523679287988495 -0.000145703318688105 0.378946580423618 0.000355360529688931 1.69225067017003e-13 2.52977784926453e-14 4.06467908766485e-13 5.73864338130579e-14 10000000000 0.0041855801755299 -5.27276365189772e-05 0.393527767318955 0.000158964286729568 1.77684935704065e-13 2.56278968572866e-14 4.40984879623485e-13 5.87922508208729e-14 12599210498.9563 0.00450371440494958 -7.27727917563377e-05 0.392634488355842 0.000211113254510897 1.77403122701533e-13 2.56137045620193e-14 4.40189561445809e-13 5.87527027018888e-14 15874010519.701 0.00500634657154597 -0.000104476566782433 0.391223200071197 0.00029356782274631 1.76957890791584e-13 2.55912787330451e-14 4.38933053389189e-13 5.86902148262044e-14 20000000000 0.0057982978819511 -0.000154513766933187 0.388999654508504 0.0004236405585199 1.76256417389487e-13 2.55559371654661e-14 4.36953401670158e-13 5.85917475809416e-14 10000000000 0.00463307939663879 -5.68456470190022e-05 0.402840805888065 0.000228542854772196 1.86902125843838e-13 2.60516001911672e-14 4.78260552240067e-13 6.05137461028015e-14 12599210498.9563 0.00499451457247029 -7.8936373587708e-05 0.401799899293351 0.000287684851815406 1.86557643860629e-13 2.60344250293209e-14 4.77263890013623e-13 6.0464596325063e-14 15874010519.701 0.00556513975175529 -0.000113851762941331 0.400156585453328 0.000381129151846904 1.86013803351021e-13 2.60073060279919e-14 4.75690442852692e-13 6.03869951467922e-14 20000000000 0.00646317980364687 -0.000168898937484502 0.397570478051863 0.000528371453837273 1.85157965109594e-13 2.59646184221126e-14 4.73214327344325e-13 6.02648560018881e-14 10000000000 0.00516596722547129 -6.60661037011016e-05 0.410716922297273 0.000341776449528763 1.99984556571998e-13 2.67965612317409e-14 5.27895783854253e-13 6.32757408988407e-14 12599210498.9563 0.00559446641815092 -9.17633404456069e-05 0.409452436300191 0.000412816854196585 1.99534169771551e-13 2.67738708097982e-14 5.26561332482576e-13 6.32090866845483e-14 15874010519.701 0.00627018328558803 -0.000132333713282418 0.40745847683873 0.00052493076074539 1.9882396475397e-13 2.67380856457052e-14 5.24457069692706e-13 6.31039720950107e-14 20000000000 0.00733166693167716 -0.000196184394421414 0.404326308984183 0.000701269680840333 1.97708371915253e-13 2.66818613070929e-14 5.2115169583505e-13 6.29388350827636e-14 10000000000 0.00591678503105266 -9.08243316643308e-05 0.416640436915307 0.000547667450694234 2.22665211719389e-13 2.83702963638874e-14 6.08907494190091e-13 6.8778280652708e-14 12599210498.9563 0.00647679862817149 -0.000124627139988802 0.414945510613528 0.00064490355328195 2.21978850538863e-13 2.83339298615382e-14 6.06823387560288e-13 6.86684590995601e-14 15874010519.701 0.00735783657262625 -0.000177870823614119 0.412279061257168 0.000797996711528692 2.20899083208373e-13 2.82767120485944e-14 6.03544726019506e-13 6.84956783491072e-14 20000000000 0.00873676966741163 -0.000261362663342414 0.408105946348964 0.00103789876050003 2.19209229426147e-13 2.81871480296452e-14 5.98413581778977e-13 6.8225243496971e-14 10000000000 0.00739158128091871 -0.00017135671889304 0.418670367344011 0.00101094371250482 2.7357796585016e-13 3.24172559109794e-14 7.83151307120927e-13 8.25189487440219e-14 12599210498.9563 0.00831469105060363 -0.000230314164108616 0.415795822086499 0.00118924278350491 2.72074732479339e-13 3.23279458474637e-14 7.78460261621887e-13 8.22408679748418e-14 15874010519.701 0.0097572552576631 -0.000322556484992114 0.411303864882925 0.00146807230387586 2.69725714353929e-13 3.21883743968628e-14 7.71129841181923e-13 8.180630656756e-14 20000000000 0.0119915192069308 -0.000465691238266893 0.404347051640486 0.00190041778431843 2.66087814937559e-13 3.19721926749699e-14 7.59777327096105e-13 8.11332556732582e-14 10000000000 0.0116949438070877 -0.000478176697254099 0.4091498588869 0.00236638686163115 4.05771619709857e-13 4.35986154037876e-14 1.22410902299723e-12 1.19841848528094e-13 12599210498.9563 0.0139847199946345 -0.000640759877359798 0.401830913594233 0.00288068543325881 3.9952934599891e-13 4.31664275494254e-14 1.20413778952315e-12 1.18459752963828e-13 15874010519.701 0.017468409273547 -0.000888393236074094 0.390696259541592 0.00366364571666211 3.90032873979878e-13 4.25089035578817e-14 1.17375526534019e-12 1.16357097674271e-13 20000000000 0.022647734304572 -0.00125723074500636 0.374143099204481 0.004828913929872 3.7591555434739e-13 4.15313660792488e-14 1.12858912734989e-12 1.13231197015696e-13 10000000000 0.0266619089772965 -0.00166293725610706 0.361653968369666 0.0068332255686061 6.9277055882491e-13 6.84294717745987e-14 2.14684678104849e-12 2.0006366108653e-13 12599210498.9563 0.0338616002470796 -0.00222283839306362 0.338572957537029 0.00862301029443213 6.52596523789776e-13 6.53274303825555e-14 2.01801579037069e-12 1.90116562764059e-13 15874010519.701 0.0436598103619959 -0.00298573709187939 0.30716316334882 0.0110604118001907 5.97927227033093e-13 6.11060390571663e-14 1.84270120098635e-12 1.76580268828793e-13 20000000000 0.0561210807099136 -0.00395801387220009 0.267220103031515 0.0141639167970678 5.28409037252649e-13 5.57378480424372e-14 1.61976917237613e-12 1.5936697353204e-13 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_internal.standard0000644000175000017500000003033014163340332025516 0ustar carstencarstenV(coll) I(coll) I(base) -1 -4.31845963883165 8.60100680425132e-05 -0.95 -0.325902805830787 9.08655323299549e-06 -0.9 -0.0242605838179056 9.48518774230727e-07 -0.85 -0.00180333860904264 9.88876523095198e-08 -0.8 -0.000134012725654687 1.03087690535727e-08 -0.75 -9.95784896288825e-06 1.07523857573716e-09 -0.7 -7.39885005814226e-07 1.1270305349531e-10 -0.65 -5.49745850699326e-08 1.23250260127085e-11 -0.6 -4.08569070898378e-09 1.81698673350528e-12 -0.55 -3.04579309408805e-10 6.76856822878193e-13 -0.5 -2.35493004984931e-11 5.1322335984373e-13 -0.45 -2.57555869366291e-12 4.51378382660282e-13 -0.4 -9.24514992664323e-13 4.0014368048109e-13 -0.35 -7.09254148568111e-13 3.50014977027808e-13 -0.3 -6.00687904188568e-13 3.00001561178404e-13 -0.25 -5.00051147973226e-13 2.5000016273128e-13 -0.2 -4.00003804286912e-13 2.00000016959662e-13 -0.15 -3.00000282997938e-13 1.50000001765013e-13 -0.0999999999999997 -2.00000020966231e-13 1.00000000181506e-13 -0.0499999999999997 -1.00000001454214e-13 5.00000000168049e-14 3.19189119579733e-16 7.32969601971617e-28 -4.13769870740065e-28 0.0500000000000003 1.00000000108389e-13 -5.00000000013881e-14 0.1 2.00000000116343e-13 -1.00000000001168e-13 0.15 3.00000000116787e-13 -1.50000000000778e-13 0.2 4.00000000116668e-13 -2.0000000000037e-13 0.25 5.00000000116504e-13 -2.49999999999959e-13 0.3 6.00000000116338e-13 -2.99999999999547e-13 0.35 7.0000000011617e-13 -3.49999999999134e-13 0.4 8.00000000116002e-13 -3.9999999999872e-13 0.45 9.00000000115833e-13 -4.49999999998306e-13 0.5 1.00000000011567e-12 -4.99999999997893e-13 0.55 1.1000000001155e-12 -5.49999999997479e-13 0.6 1.20000000011533e-12 -5.99999999997066e-13 0.65 1.30000000011517e-12 -6.49999999996654e-13 0.700000000000001 1.400000000115e-12 -6.99999999996245e-13 0.750000000000001 1.50000000011484e-12 -7.49999999995838e-13 0.800000000000001 1.60000000011469e-12 -7.99999999995436e-13 0.850000000000001 1.70000000011454e-12 -8.49999999995039e-13 0.900000000000001 1.8000000001144e-12 -8.9999999999465e-13 0.950000000000001 1.90000000011427e-12 -9.4999999999427e-13 1 2.00000000011415e-12 -9.99999999993901e-13 -1 -3.19346523309003 0.00260789543354335 -0.95 -0.544122306300856 0.000560493538562862 -0.9 -0.0705755197968112 9.48461195639492e-05 -0.85 -0.00856376775081272 1.51379518976124e-05 -0.8 -0.00102725139463881 2.39161330868965e-06 -0.75 -0.000123001574127678 3.77227654372204e-07 -0.7 -1.47255689081406e-05 5.9484881765332e-08 -0.65 -1.76327872676516e-06 9.38020924669011e-09 -0.6 -2.11216675050582e-07 1.47957400057529e-09 -0.55 -2.53144849694419e-08 2.33755183777645e-10 -0.5 -3.03677778280598e-09 3.72718759713127e-11 -0.45 -3.65302851917319e-10 6.24820202929301e-12 -0.4 -4.45935652955596e-11 1.3142622352669e-12 -0.35 -5.97128211532304e-12 4.94160895531317e-13 -0.3 -1.23577751971967e-12 3.22731046263944e-13 -0.25 -5.76883361237291e-13 2.53583945057506e-13 -0.2 -4.09327462230527e-13 2.00564823426547e-13 -0.15 -3.0113490827592e-13 1.50088767269582e-13 -0.0999999999999997 -2.00137208881038e-13 1.00013702568102e-13 -0.0499999999999997 -1.00015056784909e-13 5.00018663397708e-14 3.19189119579733e-16 1.0252319328102e-24 -1.02491265368477e-24 0.0500000000000003 1.00001871942786e-13 -5.00002942869692e-14 0.1 2.00002107523255e-13 -1.00000340691629e-13 0.15 3.00002138000083e-13 -1.50000348011704e-13 0.2 4.00002142459242e-13 -2.00000349171114e-13 0.25 5.00002143569235e-13 -2.50000349362396e-13 0.3 6.00002144240126e-13 -3.00000349405758e-13 0.35 7.00002144853352e-13 -3.50000349432415e-13 0.4 8.00002145462389e-13 -4.00000349465596e-13 0.45 9.00002146077453e-13 -4.50000349511593e-13 0.5 1.00000214670448e-12 -5.00000349575577e-13 0.55 1.10000214734923e-12 -5.5000034966293e-13 0.6 1.20000214801877e-12 -6.00000349780363e-13 0.65 1.30000214872183e-12 -6.50000349936284e-13 0.700000000000001 1.40000214946938e-12 -7.00000350141269e-13 0.750000000000001 1.50000215027511e-12 -7.50000350408646e-13 0.800000000000001 1.60000215115616e-12 -8.00000350755125e-13 0.850000000000001 1.70000215213363e-12 -8.50000351201384e-13 0.900000000000001 1.80000215323303e-12 -9.00000351772501e-13 0.950000000000001 1.90000215448444e-12 -9.50000352498125e-13 1 2.00000215592237e-12 -1.00000035341236e-12 -1 -1.81671326420383 0.00698511690987118 -0.95 -0.546954782033179 0.00246908367132822 -0.9 -0.107338768589729 0.00059951667984465 -0.85 -0.0168298706471727 0.000119517546733037 -0.8 -0.00248093421201675 2.25627710752962e-05 -0.75 -0.000361258694784431 4.21189854216872e-06 -0.7 -5.25086575807213e-05 7.84574524093002e-07 -0.65 -7.63510014903314e-06 1.46088943824126e-07 -0.6 -1.11136985483987e-06 2.72003189058526e-08 -0.55 -1.62010334901151e-07 5.06470888764674e-09 -0.5 -2.36626937980284e-08 9.4336405506294e-10 -0.45 -3.46507606823139e-09 1.75995841563527e-10 -0.4 -5.09516266252611e-10 3.30837257673458e-11 -0.35 -7.56902646351683e-11 6.43513659844988e-12 -0.3 -1.17066561494128e-11 1.43291446764767e-12 -0.25 -2.15446818446783e-12 4.60891732353877e-13 -0.2 -6.48097096433899e-13 2.39226184777886e-13 -0.15 -3.37419087797811e-13 1.57264868539492e-13 -0.0999999999999997 -2.05600380651733e-13 1.01314194390297e-13 -0.0499999999999997 -1.00748245348125e-13 5.02062762166925e-14 3.19189119579733e-16 4.13279171646886e-23 -4.13275958024773e-23 0.0500000000000003 1.00116877358139e-13 -5.00384053491911e-14 0.1 2.00135412866931e-13 -1.00045555871697e-13 0.15 3.00138418793268e-13 -1.50046887328904e-13 0.2 4.00138935548976e-13 -2.00047135472663e-13 0.25 5.00139046931497e-13 -2.50047182074044e-13 0.3 6.00139091180775e-13 -3.00047191373983e-13 0.35 7.00139124169857e-13 -3.50047194042818e-13 0.4 8.00139155391259e-13 -4.00047195908199e-13 0.45 9.00139186637333e-13 -4.50047198216055e-13 0.5 1.00013921838155e-12 -5.00047201345541e-13 0.55 1.10013925099128e-12 -5.50047205635551e-13 0.6 1.20013928482182e-12 -6.00047211422454e-13 0.65 1.30013932030962e-12 -6.50047219124855e-13 0.700000000000001 1.40013935799539e-12 -7.00047229265198e-13 0.750000000000001 1.50013939855105e-12 -7.5004724249629e-13 0.800000000000001 1.6001394428098e-12 -8.00047259631299e-13 0.850000000000001 1.70013949179616e-12 -8.50047281673933e-13 0.900000000000001 1.80013954675112e-12 -9.00047309843996e-13 0.950000000000001 1.9001396091475e-12 -9.50047345593301e-13 1 2.00013968069239e-12 -1.00004739060888e-12 -1 -0.999716440356357 0.0119759410918713 -0.95 -0.431441903117313 0.00579783247973108 -0.9 -0.128481306358025 0.00202553634613242 -0.85 -0.027020628791142 0.000520989632250039 -0.8 -0.00480390369254028 0.000115510731049861 -0.75 -0.000814672432656815 2.45417446226654e-05 -0.7 -0.000136841343558618 5.16367754246435e-06 -0.65 -2.29741440985876e-05 1.08419002076486e-06 -0.6 -3.86443305873973e-06 2.27541422639757e-07 -0.55 -6.51910887252264e-07 4.77505153092954e-08 -0.5 -1.10379007982032e-07 1.00207427332497e-08 -0.45 -1.87737196442629e-08 2.10316987394415e-09 -0.4 -3.21100919912652e-09 4.41648457884479e-10 -0.35 -5.53218955592062e-10 9.29434025782198e-11 -0.3 -9.64208469066539e-11 1.97291461288614e-11 -0.25 -1.7262919251908e-11 4.3258389218959e-12 -0.2 -3.35991801167135e-12 1.05399192541052e-12 -0.15 -8.26341358275852e-13 3.27896677149144e-13 -0.0999999999999997 -2.92557394988994e-13 1.36020050114036e-13 -0.0499999999999997 -1.14300906252298e-13 5.62476512798059e-14 3.19189119579733e-16 5.74617873307404e-22 -5.74617541985824e-22 0.0500000000000003 1.02649084646559e-13 -5.13110528359531e-14 0.1 2.03146897570383e-13 -1.01586174583838e-13 0.15 3.03242071499724e-13 -1.51643910316706e-13 0.2 4.03260854364128e-13 -2.01656029819931e-13 0.25 5.03264949829235e-13 -2.51658579326245e-13 0.3 6.03266184981955e-13 -3.01659124178877e-13 0.35 7.03266857052714e-13 -3.51659253458336e-13 0.4 8.03267419379585e-13 -4.01659302585324e-13 0.45 9.03267966007377e-13 -4.51659345737866e-13 0.5 1.00326851524881e-12 -5.01659397661739e-13 0.55 1.10326907883883e-12 -5.51659469241196e-13 0.6 1.20326966293331e-12 -6.01659566235942e-13 0.65 1.30327027499328e-12 -6.51659695784338e-13 0.700000000000001 1.40327092419329e-12 -7.01659866744074e-13 0.750000000000001 1.503271621857e-12 -7.51660090113303e-13 0.800000000000001 1.60327238194739e-12 -8.01660379517417e-13 0.850000000000001 1.70327322157782e-12 -8.51660751720985e-13 0.900000000000001 1.80327416147861e-12 -9.01661227098886e-13 0.950000000000001 1.90327522634095e-12 -9.51661829987975e-13 1 2.00327644497403e-12 -1.00166258885414e-12 -1 -0.286498238428793 0.0244525383377308 -0.95 -0.183186575155209 0.0166377010740445 -0.9 -0.100634442358602 0.00988836525652315 -0.85 -0.0439445709094038 0.00478813857911426 -0.8 -0.0143767989915679 0.00179012330145841 -0.75 -0.00370948809575207 0.000540061788490638 -0.7 -0.000854617896112907 0.000146654026391801 -0.65 -0.000190373642833379 3.84485311186254e-05 -0.6 -4.22159880600146e-05 9.98116013501312e-06 -0.55 -9.40293969599813e-06 2.58431695400952e-06 -0.5 -2.10983010631186e-06 6.68672983569472e-07 -0.45 -4.7750989316294e-07 1.72983252381015e-07 -0.4 -1.09091625227563e-07 4.47477817335535e-08 -0.35 -2.51699239141773e-08 1.15750207256282e-08 -0.3 -5.86614195909912e-09 2.99378294493461e-09 -0.25 -1.38079115108368e-09 7.73941595941251e-10 -0.2 -3.27832020131386e-10 1.99674041970021e-10 -0.15 -7.80677294147922e-11 5.10849852988607e-11 -0.0999999999999997 -1.81784123400782e-11 1.26107857783344e-11 -0.0499999999999997 -3.62490496207264e-12 2.62118391553459e-12 3.19189119579733e-16 5.0744281634402e-20 -5.07442779993309e-20 0.0500000000000003 9.66676167698854e-13 -7.15115981140869e-13 0.1 1.28138032479359e-12 -9.37168817184984e-13 0.15 1.43496539438831e-12 -1.03167582612601e-12 0.2 1.54846310941011e-12 -1.09318937602251e-12 0.25 1.65192671198004e-12 -1.14616845914034e-12 0.3 1.75286535659875e-12 -1.19694030298709e-12 0.35 1.8531657387498e-12 -1.24714185036816e-12 0.4 1.95330439343692e-12 -1.2971968230014e-12 0.45 2.05340248669131e-12 -1.34721518345474e-12 0.5 2.15349131974452e-12 -1.39722582304501e-12 0.55 2.25357978334431e-12 -1.4472370824772e-12 0.6 2.35366994365857e-12 -1.49725087214569e-12 0.65 2.45376414668765e-12 -1.54726946621e-12 0.700000000000001 2.55386376294667e-12 -1.597294181103e-12 0.750000000000001 2.65397045991166e-12 -1.64732663352654e-12 0.800000000000001 2.75408626978772e-12 -1.69736880488922e-12 0.850000000000001 2.85421366223794e-12 -1.74742311329891e-12 0.900000000000001 2.9543556182365e-12 -1.79749248750806e-12 0.950000000000001 3.05451569708564e-12 -1.84758043448133e-12 1 3.15469808714193e-12 -1.89769109100788e-12 -1 -0.119959649886249 0.0374865159147953 -0.95 -0.0905798809474753 0.0292627480616539 -0.9 -0.0641137110273958 0.0215190815849638 -0.85 -0.0413057781839004 0.0145055048441129 -0.8 -0.0231718553439835 0.00859971656570464 -0.75 -0.0107282557696789 0.00426319666770064 -0.7 -0.00400047261301386 0.00172438470733697 -0.65 -0.00126348618139307 0.000594824816067515 -0.6 -0.000368015514479469 0.00018905051753846 -0.55 -0.000104463914776381 5.82386526558488e-05 -0.5 -2.95570480011187e-05 1.77571808786901e-05 -0.45 -8.39779981513992e-06 5.39679839313918e-06 -0.4 -2.40087550170648e-06 1.63853236125603e-06 -0.35 -6.90851076543268e-07 4.97271294619292e-07 -0.3 -1.99985843069289e-07 1.50843846051259e-07 -0.25 -5.81663885283866e-08 4.56990294206303e-08 -0.2 -1.69431479887294e-08 1.37874716806325e-08 -0.15 -4.89383672056611e-09 4.10236445773497e-09 -0.0999999999999997 -1.35412324310647e-09 1.16293537315249e-09 -0.0499999999999997 -3.09539287058428e-10 2.70795591663691e-10 3.19189119579733e-16 1.254179625111e-18 -1.25417950937852e-18 0.0500000000000003 9.20971184342493e-11 -8.22201730505398e-11 0.1 1.19633583550831e-10 -1.07208484385074e-10 0.15 1.27939733576446e-10 -1.14827166885262e-10 0.2 1.30501840916263e-10 -1.17174246165479e-10 0.25 1.31344060206389e-10 -1.17921427585057e-10 0.3 1.31670227394065e-10 -1.18183065192031e-10 0.35 1.31841273698829e-10 -1.18297370028869e-10 0.4 1.31965627787721e-10 -1.18367000034944e-10 0.45 1.32075929370453e-10 -1.1842312744995e-10 0.5 1.32182034246665e-10 -1.18475233268153e-10 0.55 1.32286942622334e-10 -1.18526220429061e-10 0.6 1.32391665854098e-10 -1.18577073586362e-10 0.65 1.32496334143154e-10 -1.18627914223323e-10 0.700000000000001 1.32601252019355e-10 -1.18679042759963e-10 0.750000000000001 1.32706499263572e-10 -1.18730536056082e-10 0.800000000000001 1.32812171910111e-10 -1.18782487528931e-10 0.850000000000001 1.32918385614859e-10 -1.18835010288094e-10 0.900000000000001 1.3302527912769e-10 -1.18888240549187e-10 0.950000000000001 1.33133017743777e-10 -1.18942341080528e-10 1 1.33241796420608e-10 -1.18997504338438e-10 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_subcoupl_peri_bias_dc.standard0000644000175000017500000000031414163340332031363 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00119571144043369 3.29705270382094e-06 0.85 0.00571823321292956 1.99628084331622e-05 0.9 0.0174848702341861 0.000124841559370652 0.95 0.0354908433168481 0.000663496989395747 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_full_subtran.standard0000644000175000017500000010161014163340332027013 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618364627327e-13 1.43177817828401e-13 0.32 6.81733756110357e-13 2.15025316426452e-13 0.34 6.64859527742805e-13 3.10463604183037e-13 0.36 6.53616065267664e-13 4.47044795736405e-13 0.38 6.58137160784754e-13 6.55436026492405e-13 0.4 7.06775213597384e-13 9.89259198232091e-13 0.42 8.78814903861047e-13 1.54234199954301e-12 0.44 1.39584536526115e-12 2.47898320980736e-12 0.46 2.87679721575721e-12 4.08708658415894e-12 0.48 7.04925837627224e-12 6.87150641116957e-12 0.5 1.87316875353423e-11 1.17181496710574e-11 0.52 5.13518720818822e-11 2.01826730992192e-11 0.54 1.42293260020764e-10 3.49987548970653e-11 0.56 3.95517329102332e-10 6.09736807820803e-11 0.58 1.09976575582667e-09 1.06567884717216e-10 0.6 3.05579019750959e-09 1.86683988038683e-10 0.62 8.4803583948522e-09 3.27598747200571e-10 0.64 2.34973264436885e-08 5.75701624715216e-10 0.66 6.49804736305309e-08 1.01316201642308e-09 0.68 1.79275812711002e-07 1.78530517532405e-09 0.7 4.93163217027986e-07 3.15082113435906e-09 0.72 1.35162155564772e-06 5.57164093911614e-09 0.74 3.68678121151888e-06 9.878005746715e-09 0.76 9.98875923790357e-06 1.75752836185918e-08 0.78 2.68444169657234e-05 3.14248147511323e-08 0.800000000000001 7.13631648682993e-05 5.65616810448912e-08 0.820000000000001 0.00018698676384067 1.02652555733054e-07 0.840000000000001 0.000479226433711635 1.87907386461301e-07 0.860000000000001 0.00117472337990195 3.45691787470969e-07 0.880000000000001 0.00264034866282927 6.34287344151775e-07 0.900000000000001 0.005227944231063 1.1654046811349e-06 0.920000000000001 0.00903034139391357 2.31413352110934e-06 0.940000000000001 0.0137847402545773 6.4427114405849e-06 0.960000000000001 0.0188323182252152 2.81221636664751e-05 0.980000000000001 0.0233426649137857 0.000113265105026334 1 0.0268219609534571 0.000289588737832753 1.02 0.0296395459542417 0.000534059566737039 1.04 0.0323506038187342 0.000847740011008787 0.3 1.70062041942766e-12 -3.56822460569247e-13 0.32 1.68173940670497e-12 -2.84975377256185e-13 0.34 1.66487507687311e-12 -1.89538120707971e-13 0.36 1.6536588757843e-12 -5.29594838422021e-14 0.38 1.65825507618789e-12 1.55425433821144e-13 0.4 1.70710008226594e-12 4.89233046716192e-13 0.42 1.87971006591291e-12 1.0422776133543e-12 0.44 2.39831190743464e-12 1.97882515534677e-12 0.46 3.88359240058539e-12 3.58669981770593e-12 0.48 8.06797242735839e-12 6.37056316632242e-12 0.5 1.97831997049966e-11 1.12158575663119e-11 0.52 5.24935626553623e-11 1.96771246218173e-11 0.54 1.43682631689405e-10 3.44853787740277e-11 0.56 3.97586063874933e-10 6.04415750784629e-11 0.58 1.10369483408412e-09 1.05991184644917e-10 0.6 3.06480329483642e-09 1.86001673893405e-10 0.62 8.50323141283826e-09 3.26667742929809e-10 0.64 2.35578745054532e-08 5.74188717224271e-10 0.66 6.51430931250903e-08 1.01015568551262e-09 0.68 1.79714020365621e-07 1.77893390796775e-09 0.7 4.94343624279187e-07 3.13665217509135e-09 0.72 1.35480351293567e-06 5.53955284938787e-09 0.74 3.6954301852012e-06 9.80520290505612e-09 0.76 1.00129431718639e-05 1.74116098335035e-08 0.78 2.69171690284836e-05 3.10639247794348e-08 0.800000000000001 7.16139059747371e-05 5.57957196424516e-08 0.820000000000001 0.00018801645697024 1.0115389067491e-07 0.840000000000001 0.000484052535335885 1.85553253520232e-07 0.860000000000001 0.00119735747877828 3.44731266948972e-07 0.880000000000001 0.00273081505675244 6.47528979492432e-07 0.900000000000001 0.00550778046538153 1.22674667459327e-06 0.920000000000001 0.00971856216912102 2.34614919294201e-06 0.940000000000001 0.0152906421664179 4.53972622575768e-06 0.960000000000001 0.0220275870899555 8.87154001562527e-06 0.980000000000001 0.0296913096222254 1.74671482981024e-05 1 0.0380081361919025 3.61746624275604e-05 1.02 0.0465209044271084 0.000102788742580306 1.04 0.0540489096574508 0.000397090702042938 0.3 2.7006255903658e-12 -8.5682597597556e-13 0.32 2.6817530641673e-12 -7.84984427219884e-13 0.34 2.66491114995284e-12 -6.89561377569559e-13 0.36 2.65375416365048e-12 -5.53019142895919e-13 0.38 2.65850682092032e-12 -3.44727326579771e-13 0.4 2.70776531956388e-12 -1.11573829915672e-14 0.42 2.8814684261509e-12 5.41281608975429e-13 0.44 3.40296103162718e-12 1.4762891234682e-12 0.46 4.89588877629646e-12 3.08025498451586e-12 0.48 9.10050573396878e-12 5.85421685673649e-12 0.5 2.08693023166677e-11 1.06744800334208e-11 0.52 5.37215025179608e-11 1.90725974984382e-11 0.54 1.45286166993156e-10 3.37218725905902e-11 0.56 4.00184172751255e-10 5.92787167244894e-11 0.58 1.10892590619469e-09 1.03827468462827e-10 0.6 3.07700092370431e-09 1.81335737997892e-10 0.62 8.53384517644864e-09 3.15762611562836e-10 0.64 2.36371065528984e-08 5.47771725530716e-10 0.66 6.53504513111716e-08 9.45299831236816e-10 0.68 1.80258379570084e-07 1.61918628591588e-09 0.7 4.95773286225094e-07 2.74370242369677e-09 0.72 1.35856397396348e-06 4.5766281181964e-09 0.74 3.70540563134227e-06 7.45871948529144e-09 0.76 1.00400778087353e-05 1.17387460845597e-08 0.78 2.69963258496686e-05 1.74786686381493e-08 0.800000000000001 7.18777894231282e-05 2.36637488895045e-08 0.820000000000001 0.000189071447182561 2.63847055376942e-08 0.840000000000001 0.000488952858222268 1.58712578209186e-08 0.860000000000001 0.0012206702834106 -2.06707217168548e-08 0.880000000000001 0.00282745924294487 -5.45211825618825e-08 0.900000000000001 0.00582178030203719 1.3881574720666e-07 0.920000000000001 0.0105194634190239 1.29316133976693e-06 0.940000000000001 0.0169947729194925 5.41788914580803e-06 0.960000000000001 0.0252208031947919 1.8364062998421e-05 0.980000000000001 0.0351045803927632 5.80146544865056e-05 1 0.0463328878687145 0.00017645943203814 1.02 0.058098556167137 0.000499597586771547 1.04 0.0689987927301404 0.00124641157753244 0.3 1.25208431236844e-12 3.00903049250344e-12 0.32 1.95929488382079e-12 4.73242437850974e-12 0.34 3.62347330854151e-12 7.43265076183052e-12 0.36 7.50235672557093e-12 1.16787904595398e-11 0.38 1.6504291444326e-11 1.83728873060234e-11 0.4 3.73506587872637e-11 2.89457883748649e-11 0.42 8.55653012763517e-11 4.56690426356739e-11 0.44 1.96977263653031e-10 7.21525015598146e-11 0.46 4.54214541830552e-10 1.14140018405079e-10 0.48 1.04765998820983e-09 1.80785773764715e-10 0.5 2.41552063779997e-09 2.86710143994803e-10 0.52 5.56521650997345e-09 4.55330145296751e-10 0.54 1.28095179718906e-08 7.242963656784e-10 0.56 2.94491129331015e-08 1.15446073359213e-09 0.58 6.76085136600218e-08 1.84490010506738e-09 0.6 1.54953220574001e-07 2.95834534562118e-09 0.62 3.54419982258301e-07 4.76564577008363e-09 0.64 8.08647117166647e-07 7.72485310874074e-09 0.66 1.83941900663313e-06 1.26266107393993e-08 0.68 4.16897834591385e-06 2.08696113595877e-08 0.7 9.40563047226004e-06 3.49989115273778e-08 0.72 2.11216451314843e-05 5.97883003854206e-08 0.74 4.71864377248399e-05 1.04468597754053e-07 0.76 0.000104898548757905 1.87388854842487e-07 0.78 0.000231923721751661 3.45802995185276e-07 0.800000000000001 0.000507459020266227 6.56067644743692e-07 0.820000000000001 0.00108474876765365 1.27313891269171e-06 0.840000000000001 0.00221571474324916 2.4995912259671e-06 0.860000000000001 0.00421212997071901 4.8864901102425e-06 0.880000000000001 0.00731745716225232 9.35749712686876e-06 0.900000000000001 0.0115960807512601 1.73987966780167e-05 0.920000000000001 0.0169345545321305 3.19454324785002e-05 0.940000000000001 0.0230575928014931 6.48067242550139e-05 0.960000000000001 0.0293488936152794 0.000176137454068598 0.980000000000001 0.0348164356514568 0.00046242948115477 1 0.0394278645049445 0.000878921341831523 1.02 0.0437484903307399 0.00137264678642711 1.04 0.0480204658090537 0.00194136662972773 0.3 2.25388366955033e-12 2.50879707308859e-12 0.32 2.96338621549233e-12 4.23194474479731e-12 0.34 4.63278147088209e-12 6.93166756100081e-12 0.36 8.52354312416833e-12 1.11767801449844e-11 0.38 1.75525287706309e-11 1.78687880977068e-11 0.4 3.84605031057889e-11 2.84374540485164e-11 0.42 8.68154344172004e-11 4.51521502488097e-11 0.44 1.98546758321712e-10 7.16183766442786e-11 0.46 4.56510680879961e-10 1.13571324852025e-10 0.48 1.05160825870202e-09 1.8014801462371e-10 0.5 2.42322159615841e-09 2.85934992640831e-10 0.52 5.58143068998253e-09 4.54282947950507e-10 0.54 1.28450146996409e-08 7.22713200247468e-10 0.56 2.952820211465e-08 1.15182740743201e-09 0.58 6.77859365517225e-08 1.8401917040004e-09 0.6 1.55351934948236e-07 2.94964223260802e-09 0.62 3.55315635501397e-07 4.74926222508744e-09 0.64 8.10657767086835e-07 7.69383766477202e-09 0.66 1.84393863760104e-06 1.25680505371696e-08 0.68 4.17921215983849e-06 2.07600717157353e-08 0.7 9.42926270868204e-06 3.47977089576792e-08 0.72 2.11787835490622e-05 5.94311724391424e-08 0.74 4.73365747228397e-05 1.0388179665233e-07 0.76 0.000105344406775137 1.86623099006391e-07 0.78 0.000233435415123384 3.45759253960865e-07 0.800000000000001 0.000513077944411147 6.61946273030662e-07 0.820000000000001 0.00110592401941927 1.30960029789456e-06 0.840000000000001 0.0022895900548573 2.6711811592441e-06 0.860000000000001 0.00443249535079989 5.58614566947343e-06 0.880000000000001 0.0078583362305106 1.18664854916887e-05 0.900000000000001 0.012701457486777 2.52930710331632e-05 0.920000000000001 0.0188933222548399 5.33724546841047e-05 0.940000000000001 0.0262336773934984 0.000110027696243286 0.960000000000001 0.0344452927704641 0.000218993762163134 0.980000000000001 0.0431774817394007 0.000419890080080172 1 0.0518040800262039 0.000808134783493665 1.02 0.0593035344957383 0.0015817505970484 1.04 0.0659233995116331 0.00272317768259437 0.3 3.25829989116443e-12 2.00583212634495e-12 0.32 3.97303057028771e-12 3.72563907567958e-12 0.34 5.6538448925305e-12 6.41828025000358e-12 0.36 9.5695520969162e-12 1.06484080053904e-11 0.38 1.86530448112082e-11 1.73087653905611e-11 0.4 3.96801496227727e-11 2.78107031233086e-11 0.42 8.82955217025127e-11 4.43849821411834e-11 0.44 2.00596363328948e-10 7.0556294748528e-11 0.46 4.59805952719082e-10 1.11891068496184e-10 0.48 1.05762850525184e-09 1.77174637211029e-10 0.5 2.43520314273625e-09 2.80262371443564e-10 0.52 5.60645198761415e-09 4.42988580648248e-10 0.54 1.28985499861278e-08 6.99738295564785e-10 0.56 2.96440533412369e-08 1.10464594742404e-09 0.58 6.80378634370948e-08 1.74298712374777e-09 0.6 1.55900703873798e-07 2.74939216095132e-09 0.62 3.56511392378603e-07 4.33751188087428e-09 0.64 8.13263910036943e-07 6.84981528562563e-09 0.66 1.84962969530847e-06 1.08449182991477e-08 0.68 4.19172948454298e-06 1.72592874506353e-08 0.7 9.45725653686509e-06 2.7728451695617e-08 0.72 2.12441452209199e-05 4.5247721843297e-08 0.74 4.7501817409241e-05 7.56400266209488e-08 0.76 0.000105816967623172 1.30875600203646e-07 0.78 0.000234993897367888 2.37099078493467e-07 0.800000000000001 0.000518812351634042 4.55750193317076e-07 0.820000000000001 0.00112775650464934 9.43831027100095e-07 0.840000000000001 0.00236812471641681 2.13448170157324e-06 0.860000000000001 0.00467799689436789 5.27360887167222e-06 0.880000000000001 0.00849367222323007 1.39471636331218e-05 0.900000000000001 0.0140579008364171 3.83485623369499e-05 0.920000000000001 0.0213197316261625 0.00010685159356885 0.940000000000001 0.0298757274217402 0.000292164452555144 0.960000000000001 0.0388972762926933 0.000742850567635558 0.980000000000001 0.047329925526742 0.00165326910245243 1 0.0544869105697576 0.00314258648507903 1.02 0.0602977598598347 0.00519933931820338 1.04 0.0650063679065974 0.0077433961765254 0.3 9.67921337082804e-12 1.65537133080976e-11 0.32 1.9948459628458e-11 2.51291099125205e-11 0.34 4.19986800191931e-11 3.81448443038203e-11 0.36 8.92976395348689e-11 5.79257814256821e-11 0.38 1.9068011515625e-10 8.80260814306993e-11 0.4 4.07841593552602e-10 1.3389032708388e-10 0.42 8.72689556224352e-10 2.03881351328825e-10 0.44 1.86701090968592e-09 3.10889687218202e-10 0.46 3.99219286611517e-09 4.74877398353528e-10 0.48 8.53028250960167e-09 7.26947002133364e-10 0.5 1.82108139995214e-08 1.11594764272802e-09 0.52 3.88361517173171e-08 1.71939698688572e-09 0.54 8.2718116421269e-08 2.66194614547639e-09 0.56 1.75922587572831e-07 4.1472333130055e-09 0.58 3.73485115159808e-07 6.51459872700706e-09 0.6 7.91228754043365e-07 1.03422758302483e-08 0.62 1.67202291385515e-06 1.66404064077864e-08 0.64 3.52331695551075e-06 2.72204781130727e-08 0.66 7.39803709456531e-06 4.54171704486494e-08 0.68 1.5480448117314e-05 7.75230328683698e-08 0.7 3.22727993284132e-05 1.35677772079411e-07 0.72 6.70625105983203e-05 2.43738553281016e-07 0.74 0.000138952391025142 4.49246137191408e-07 0.76 0.000286627994407095 8.47692074390189e-07 0.78 0.000585424982775618 1.63077864773608e-06 0.800000000000001 0.00117103426671757 3.17818906756237e-06 0.820000000000001 0.00225549389727933 6.21797640110224e-06 0.840000000000001 0.00410066939414709 1.20720275804214e-05 0.860000000000001 0.00693166922455406 2.29729898667463e-05 0.880000000000001 0.0108489626103208 4.24104648765573e-05 0.900000000000001 0.0158116948332266 7.5561175064587e-05 0.920000000000001 0.021668116805579 0.000131176794128069 0.940000000000001 0.0281216023969818 0.000236139169641285 0.960000000000001 0.03451256136551 0.000482303131537182 0.980000000000001 0.0402273455249462 0.000939599143274199 1 0.0455120192683104 0.00153965503461938 1.02 0.0506389991225638 0.00224310904784561 1.04 0.0556470336528284 0.0030560719840494 0.3 1.07081015650423e-11 1.60500899543287e-11 0.32 2.10093171338247e-11 2.46222245948837e-11 0.34 4.31269514375901e-11 3.76317942416158e-11 0.36 9.05681013452124e-11 5.74011151407419e-11 0.38 1.92250511109444e-10 8.7479595695952e-11 0.4 4.10044607133052e-10 1.33302994309887e-10 0.42 8.76226503673222e-10 2.03217825237931e-10 0.44 1.87335920512101e-09 3.10084580019112e-10 0.46 4.00446198837649e-09 4.73810287697381e-10 0.48 8.55500903494327e-09 7.2539717973986e-10 0.5 1.82617181987374e-08 1.11351272072936e-09 0.52 3.89419810233425e-08 1.71534758620119e-09 0.54 8.29389830854644e-08 2.65494954826163e-09 0.56 1.76383935794411e-07 4.13493932798341e-09 0.58 3.74448337794403e-07 6.4928247833679e-09 0.6 7.93238705619795e-07 1.03036916943378e-08 0.62 1.67622107081704e-06 1.65723730884037e-08 0.64 3.53213167162971e-06 2.71017712686172e-08 0.66 7.41678556424778e-06 4.52140511301121e-08 0.68 1.55215712897404e-05 7.71883146424498e-08 0.7 3.23682253478595e-05 1.35172381806247e-07 0.72 6.73046521443305e-05 2.4315841305748e-07 0.74 0.000139640432332504 4.49403932943326e-07 0.76 0.000288801584570581 8.52590789028422e-07 0.78 0.000592744542944367 1.65770592181485e-06 0.800000000000001 0.0011957114404337 3.29705270382098e-06 0.820000000000001 0.00233319094964109 6.69371831998597e-06 0.840000000000001 0.00431523940850636 1.38255485614598e-05 0.860000000000001 0.00743257807983983 2.88738776725498e-05 0.880000000000001 0.0118354187352847 6.03809778401221e-05 0.900000000000001 0.0174848702341862 0.000124841559370654 0.920000000000001 0.0241821193571017 0.000251539064635772 0.940000000000001 0.0316154334327437 0.000486530539629921 0.960000000000001 0.0394052309585262 0.000891589969438103 0.980000000000001 0.0471412073220778 0.00153951425929238 1 0.0543537608841537 0.00252819042410432 1.02 0.0606989137500119 0.00396152310344726 1.04 0.0664266415816203 0.00579002667304037 0.3 1.17778706551336e-11 1.55036634553302e-11 0.32 2.21504904653759e-11 2.40307911782877e-11 0.34 4.44126317609797e-11 3.69520332733322e-11 0.36 9.21462849422589e-11 5.65483185643122e-11 0.38 1.944208836324e-10 8.62884374962534e-11 0.4 4.13414148814142e-10 1.31451425371143e-10 0.42 8.82024804115583e-10 2.00079750824546e-10 0.44 1.8840773701715e-09 3.0444532404549e-10 0.46 4.02514690130249e-09 4.63318380873034e-10 0.48 8.59588392206227e-09 7.05510908165422e-10 0.5 1.83434846440454e-08 1.07548167656599e-09 0.52 3.91065354473333e-08 1.64235784722481e-09 0.54 8.32710532135596e-08 2.5147891799864e-09 0.56 1.77054732273905e-07 3.86610389194086e-09 0.58 3.75803690238728e-07 5.97833060016665e-09 0.6 7.9597791779568e-07 9.32201854842672e-09 0.62 1.68176556636281e-06 1.47061404151869e-08 0.64 3.54341277250815e-06 2.35687626349761e-08 0.66 7.43998613243391e-06 3.8560086044808e-08 0.68 1.55706535071518e-05 6.47245025288282e-08 0.7 3.24776441078748e-05 1.11977427000029e-07 0.72 6.75708151232607e-05 2.00326846612275e-07 0.74 0.000140368559313425 3.71207943488885e-07 0.76 0.000291044142419971 7.13043849949488e-07 0.78 0.000600236820586377 1.42192351613301e-06 0.800000000000001 0.00122124265782748 2.9547960281587e-06 0.820000000000001 0.00241588775323648 6.43911885162322e-06 0.840000000000001 0.00455316164486492 1.47990439450948e-05 0.860000000000001 0.00801182032798996 3.58171860844806e-05 0.880000000000001 0.0130052754271507 9.00953512972325e-05 0.900000000000001 0.0194314649369562 0.000229350506842131 0.920000000000001 0.0267878702937494 0.000565141572122746 0.940000000000001 0.0342262354554946 0.00127181503164004 0.960000000000001 0.0409362928648085 0.002505674646711 0.980000000000001 0.0465657343118055 0.00431188829943343 1 0.0511731263680885 0.00663845221054045 1.02 0.0549619883212495 0.00939952204000897 1.04 0.0581304924814587 0.012512456583152 0.3 6.94838521179469e-11 5.85971906515697e-11 0.32 1.40284990341215e-10 8.66316466104695e-11 0.34 2.83998851867612e-10 1.2815033672249e-10 0.36 5.75546213024366e-10 1.89754313886344e-10 0.38 1.16664866171524e-09 2.81371069856811e-10 0.4 2.36432111339477e-09 4.18019081518068e-10 0.42 4.78927685101191e-09 6.22590340822639e-10 0.44 9.69518811628825e-09 9.30311511069829e-10 0.46 1.96111589075643e-08 1.39603394990015e-09 0.48 3.96322535295287e-08 2.10640037885063e-09 0.5 8.00060400005768e-08 3.20062251965779e-09 0.52 1.61302813027715e-07 4.90670605531328e-09 0.54 3.24717635646978e-07 7.60623255824018e-09 0.56 6.52530113575199e-07 1.19523183949276e-08 0.58 1.30863747957822e-06 1.90886578735621e-08 0.6 2.61860412950919e-06 3.10626701299245e-08 0.62 5.22683098465149e-06 5.16151292718758e-08 0.64 1.03978863909693e-05 8.77054361947215e-08 0.66 2.0630055154295e-05 1.52481946709934e-07 0.68 4.08226354075473e-05 2.7109965555698e-07 0.7 8.06086114335377e-05 4.92149438007338e-07 0.72 0.000158807350238449 9.10098788311326e-07 0.74 0.0003115000758011 1.70907217585125e-06 0.76 0.000605233257422428 3.24685516177856e-06 0.78 0.00115424949741857 6.21063947291249e-06 0.800000000000001 0.00213178355972308 1.18884694765116e-05 0.820000000000001 0.00375349003786991 2.25985949179228e-05 0.840000000000001 0.00622005183775447 4.2283472072231e-05 0.860000000000001 0.00964945584441289 7.71969837012929e-05 0.880000000000001 0.0140481438402156 0.000136514699098126 0.900000000000001 0.0193254352407331 0.000232828645872113 0.920000000000001 0.0253108897867276 0.000384654330569812 0.940000000000001 0.0316952094700177 0.000634512699345753 0.960000000000001 0.037918036944588 0.00108024405114995 0.980000000000001 0.0437034196091474 0.00176136741970194 1 0.0492763946269307 0.0026142331562615 1.02 0.054735716969076 0.00360909916778389 1.04 0.0600291639366769 0.00475026207444607 0.3 7.07023324771298e-11 5.80707082641274e-11 0.32 1.41720625433287e-10 8.60841020828374e-11 0.34 2.85867857167839e-10 1.2756521439653e-10 0.36 5.78280195846721e-10 1.89102360689762e-10 0.38 1.17110899862707e-09 2.80600663039908e-10 0.4 2.37222614363729e-09 4.17039482688108e-10 0.42 4.80405217709613e-09 6.21242734246378e-10 0.44 9.72365664241347e-09 9.2831920175691e-10 0.46 1.96668941376471e-08 1.39291727174533e-09 0.48 3.97422200464926e-08 2.10133236593773e-09 0.5 8.02237171928814e-08 3.19217444825388e-09 0.52 1.61734090441904e-07 4.89246714638847e-09 0.54 3.25571903032915e-07 7.58212504085818e-09 0.56 6.54221451414073e-07 1.19115373059927e-08 0.58 1.31198769805966e-06 1.90200246879548e-08 0.6 2.62526137918729e-06 3.09482968696484e-08 0.62 5.24017416502242e-06 5.14278617087147e-08 0.64 1.04250768441347e-05 8.74092658125135e-08 0.66 2.06875243288988e-05 1.52047785124318e-07 0.68 4.09516208087804e-05 2.70588739487632e-07 0.7 8.09243104258715e-05 4.92060468823285e-07 0.72 0.000159661431985665 9.12725173528764e-07 0.74 0.000314021534910036 1.7236502421708e-06 0.76 0.000613055420495699 3.30860139041486e-06 0.78 0.00117845849837132 6.44861248544911e-06 0.800000000000001 0.00220239737173599 1.27532449556617e-05 0.820000000000001 0.00393764397030147 2.55587692827346e-05 0.840000000000001 0.00663446457600723 5.171341545459e-05 0.860000000000001 0.0104455577545196 0.00010482478842215 0.880000000000001 0.0153625607133742 0.000210342208225555 0.900000000000001 0.0212099992397044 0.000411454063356387 0.920000000000001 0.027677169802304 0.00077149265196172 0.940000000000001 0.0343817909653316 0.00136615709319718 0.960000000000001 0.0409627046023271 0.0022650414274055 0.980000000000001 0.0471566206373078 0.00351587253973002 1 0.052814960980924 0.0051479756686464 1.02 0.0579011214213329 0.00718369508453752 1.04 0.0624995306738131 0.00960517704729098 0.3 7.22222002999232e-11 5.72277555398211e-11 0.32 1.43716327506979e-10 8.49451080547871e-11 0.34 2.88775080453151e-10 1.25876688628559e-10 0.36 5.82933815059624e-10 1.863956074383e-10 0.38 1.17910907212005e-09 2.76010752077407e-10 0.4 2.38663957074504e-09 4.08973473751584e-10 0.42 4.83075764359081e-09 6.06773067781319e-10 0.44 9.77392173627876e-09 9.02077433291851e-10 0.46 1.97623107327726e-08 1.34508225756939e-09 0.48 3.99241488485276e-08 2.01398310603767e-09 0.5 8.05713462621988e-08 3.03270171729261e-09 0.52 1.62398945535138e-07 4.60172068325984e-09 0.54 3.26843842276693e-07 7.05318991501136e-09 0.56 6.56655395937397e-07 1.09519264206885e-08 0.58 1.31665004567771e-06 1.72846557136958e-08 0.6 2.63422167771358e-06 2.78213716162485e-08 0.62 5.25753183276669e-06 4.58166761165643e-08 0.64 1.04591572275727e-05 7.73944347729211e-08 0.66 2.0756726647777e-05 1.34270477969214e-07 0.68 4.11002872747361e-05 2.39254862655376e-07 0.7 8.12723565242106e-05 4.37384840411439e-07 0.72 0.000160567646003771 8.19047551258383e-07 0.74 0.00031663074204308 1.56947340601372e-06 0.76 0.000621082669380077 3.07938689664814e-06 0.78 0.00120351696010194 6.20638984799457e-06 0.800000000000001 0.00227725059557225 1.29266813046887e-05 0.820000000000001 0.00413953061068081 2.8010584571647e-05 0.840000000000001 0.00710350968218705 6.32841306822215e-05 0.860000000000001 0.0113572233253236 0.000147759337479001 0.880000000000001 0.0168118931023305 0.000347614518548754 0.900000000000001 0.0230137920969627 0.000788489555105011 0.920000000000001 0.029240558835654 0.00163776883777571 0.940000000000001 0.0348625579508454 0.00301934930994661 0.960000000000001 0.0396270464486069 0.0049522319293421 0.980000000000001 0.0435793910662216 0.00737937003539867 1 0.0468691673595928 0.010220118085265 1.02 0.0496455141719318 0.0133981442038851 1.04 0.0520281511944411 0.016849669246284 0.3 2.60007560942568e-09 5.96022155406369e-10 0.32 4.77252759393615e-09 8.56035727484957e-10 0.34 8.77330391595545e-09 1.23623802704372e-09 0.36 1.61361574311738e-08 1.79791636859482e-09 0.38 2.96760705350372e-08 2.63767659298861e-09 0.4 5.45535307205697e-08 3.91043743255005e-09 0.42 1.00216424734972e-07 5.86889580638069e-09 0.44 1.83938179838551e-07 8.9321060462492e-09 0.46 3.37258822029568e-07 1.3805716801492e-08 0.48 6.17685301534587e-07 2.16945753050186e-08 0.5 1.12985535611609e-06 3.46811360022117e-08 0.52 2.06371075088908e-06 5.64026342710764e-08 0.54 3.76322004466515e-06 9.3268159341689e-08 0.56 6.84567152513291e-06 1.56653554818097e-07 0.58 1.2432817088004e-05 2.66870216899623e-07 0.6 2.25385506527468e-05 4.60355365853085e-07 0.62 4.07959172028661e-05 8.02714866722219e-07 0.64 7.37397254292141e-05 1.41239147990716e-06 0.66 0.000133030978099535 2.50357676609776e-06 0.68 0.000239139818437625 4.46377647669892e-06 0.7 0.000426972526603404 7.9930491337483e-06 0.72 0.000753212409905901 1.43505487371471e-05 0.74 0.00130296687548689 2.57802426680518e-05 0.76 0.00218987329461162 4.6215294872795e-05 0.78 0.00354288424413919 8.23663471139378e-05 0.800000000000001 0.00547982553551004 0.000145229765719483 0.820000000000001 0.0080780814433468 0.000251823342028552 0.840000000000001 0.0113538639375449 0.000426516559676397 0.860000000000001 0.0152549678588025 0.000700857511319361 0.880000000000001 0.0196684595291283 0.00111093910696465 0.900000000000001 0.0244419264562635 0.00169282058050936 0.920000000000001 0.0294084345735964 0.00247926650482441 0.940000000000001 0.0344004286394657 0.00350332920612026 0.960000000000001 0.0392666375147833 0.00480471291742422 0.980000000000001 0.0439396332438996 0.0064033291064653 1 0.0484489902450828 0.00826618582131808 1.02 0.0528130590587101 0.0103480535568334 1.04 0.0570043820878 0.0126222671205704 0.3 2.60903598117877e-09 5.94638914213481e-10 0.32 4.78794187051933e-09 8.54102032632792e-10 0.34 8.80041010702231e-09 1.23341820478561e-09 0.36 1.61844407099082e-08 1.79367542343389e-09 0.38 2.97626961120963e-08 2.63116580252358e-09 0.4 5.47095371071935e-08 3.90031361625107e-09 0.42 1.00497886549187e-07 5.85305782610155e-09 0.44 1.84446332235608e-07 8.9072761154929e-09 0.46 3.38176441789374e-07 1.37668294679594e-08 0.48 6.19342821935642e-07 2.16338942163137e-08 0.5 1.13285205503582e-06 3.45870689196894e-08 0.52 2.06914094885533e-06 5.62584063381462e-08 0.54 3.77310945850739e-06 9.30512181346152e-08 0.56 6.86381694529608e-06 1.56339188293692e-07 0.58 1.24667661609721e-05 2.66449776517997e-07 0.6 2.26040581065219e-05 4.59906545233563e-07 0.62 4.09285134891905e-05 8.02639978618541e-07 0.64 7.40260885004169e-05 1.41419859931495e-06 0.66 0.000133696887539103 2.51239293312881e-06 0.68 0.00024079755538091 4.49632683209729e-06 0.7 0.000431295483415156 8.10260190369579e-06 0.72 0.000764638096313522 1.47030858846492e-05 0.74 0.00133242073733095 2.68784559191233e-05 0.76 0.00226112380416862 4.95206816582136e-05 0.78 0.00369933531611253 9.18937776933805e-05 0.800000000000001 0.00578441956507651 0.000171223422611851 0.820000000000001 0.00859611561669793 0.000318111512646627 0.840000000000001 0.0121127307375918 0.000582483431868611 0.860000000000001 0.0161883403965169 0.00103522554653671 0.880000000000001 0.0205744984394798 0.00175837954282507 0.900000000000001 0.0249939880906711 0.00282371495200759 0.920000000000001 0.0292254020238737 0.00427292730104609 0.940000000000001 0.0331428018413803 0.00611266026514705 0.960000000000001 0.0367038886962299 0.00832278679753377 0.980000000000001 0.0399181394476208 0.0108684286315111 1 0.0428194692451687 0.0137095721824653 1.02 0.0454497382706285 0.0168069856003495 1.04 0.0478507708734818 0.0201252198079988 0.3 2.62831051438462e-09 5.82346318601756e-10 0.32 4.8207352383652e-09 8.33668108844124e-10 0.34 8.85672337561315e-09 1.19928307107164e-09 0.36 1.62816733492989e-08 1.73652779829666e-09 0.38 2.99311158098278e-08 2.53544680088087e-09 0.4 5.50017877522998e-08 3.74008719871665e-09 0.42 1.01005513891828e-07 5.58520107091781e-09 0.44 1.85328532490374e-07 8.46028545349651e-09 0.46 3.39710228798038e-07 1.30224725465807e-08 0.48 6.22011020615339e-07 2.03972558668371e-08 0.5 1.13749888915049e-06 3.25379729738159e-08 0.52 2.0772518733839e-06 5.2873215782126e-08 0.54 3.78733065093799e-06 8.74780658343819e-08 0.56 6.8888980924257e-06 1.47207303030633e-07 0.58 1.25117593335248e-05 2.51558737778363e-07 0.6 2.26870060495936e-05 4.35789507479167e-07 0.62 4.10883794163641e-05 7.63973435341477e-07 0.64 7.43545733288864e-05 1.35327564369484e-06 0.66 0.000134427054494661 2.41965369451706e-06 0.68 0.000242553777865998 4.3656409644815e-06 0.7 0.000435783721967154 7.95381103973474e-06 0.72 0.000776433075142966 1.46621613288842e-05 0.74 0.00136303704509802 2.7440062028307e-05 0.76 0.00233636630032484 5.23580264127352e-05 0.78 0.00386755599692468 0.000102192908651516 0.800000000000001 0.00611485943136916 0.000203783560476627 0.820000000000001 0.00914765976217139 0.000410854106124574 0.840000000000001 0.0128595778005716 0.000818130638703645 0.860000000000001 0.0169367582631497 0.00155627468303594 0.880000000000001 0.0209706888190419 0.00274592514824597 0.900000000000001 0.0246562210547568 0.00444276944287097 0.920000000000001 0.0278750743013566 0.00663079594973065 0.940000000000001 0.0306390480641698 0.00925394709075083 0.960000000000001 0.0330115046277384 0.0122456870854738 0.980000000000001 0.0350633724827756 0.0155437882537516 1 0.0368570371094102 0.0190951835221132 1.02 0.0384429909516907 0.0228563762145888 1.04 0.0398608764575543 0.0267922865516885 0.3 4.55450347618604e-08 5.17695707095474e-09 0.32 7.67655507959512e-08 7.76781957320821e-09 0.34 1.30136386460574e-07 1.177557592962e-08 0.36 2.21309707656315e-07 1.80540086526416e-08 0.38 3.76935373796594e-07 2.80064319049798e-08 0.4 6.42327764143185e-07 4.39535954594103e-08 0.42 1.0944216117918e-06 6.97532921964424e-08 0.44 1.86362445478648e-06 1.11845861997296e-07 0.46 3.16912864539524e-06 1.81021042598723e-07 0.48 5.38421966051935e-06 2.95407541226303e-07 0.5 9.13542597628506e-06 4.85536369706815e-07 0.52 1.54794640419298e-05 8.02922756686956e-07 0.54 2.61961122669217e-05 1.33461886250228e-06 0.56 4.42763926642736e-05 2.22789615270544e-06 0.58 7.4718095044553e-05 3.73209747381891e-06 0.6 0.000125781027798968 6.26952967877745e-06 0.62 0.000210867568219721 1.05552582459822e-05 0.64 0.000351096584218965 1.77985377166489e-05 0.66 0.000578280946232864 3.00383055021283e-05 0.68 0.000937287045852877 5.06923145539295e-05 0.7 0.00148591957849692 8.54288258728661e-05 0.72 0.00229047891983724 0.00014347975787882 0.74 0.00341669323698428 0.000239449336643611 0.76 0.00491761462926253 0.000395430826511186 0.78 0.00682056397690091 0.000642730089749323 0.800000000000001 0.0091156601647991 0.00102184648177233 0.820000000000001 0.0117507013860976 0.0015792631938176 0.840000000000001 0.0146378218695247 0.00236093539268645 0.860000000000001 0.0176717682098063 0.00340469512953606 0.880000000000001 0.0207515460129394 0.00473484720340228 0.900000000000001 0.0237957212284156 0.00636073395926986 0.920000000000001 0.0267477749277798 0.00827870803552704 0.940000000000001 0.0295741150454929 0.0104758446121628 0.960000000000001 0.0322591071311118 0.01293390899373 0.980000000000001 0.0348001047418517 0.0156326407134599 1 0.0372033631767428 0.0185518140548229 1.02 0.0394800950306098 0.0216718561595558 1.04 0.0416415556673298 0.0249733590192181 0.3 4.56781753822515e-08 5.16258347407919e-09 0.32 7.69888175948039e-08 7.74641821744854e-09 0.34 1.30511388938874e-07 1.17436903734224e-08 0.36 2.2194025479077e-07 1.80065467496705e-08 0.38 3.77996500854133e-07 2.79359540778268e-08 0.4 6.44115047173222e-07 4.38493620669106e-08 0.42 1.09743569151523e-06 6.96001096283031e-08 0.44 1.86871817393423e-06 1.11623032047459e-07 0.46 3.17775239391954e-06 1.80702676143449e-07 0.48 5.39893033745894e-06 2.94967287315422e-07 0.5 9.16079694499091e-06 4.84967798522168e-07 0.52 1.55240213776468e-05 8.02304539112812e-07 0.54 2.62765892826893e-05 1.33430949275195e-06 0.56 4.44276208806996e-05 2.22909510421746e-06 0.58 7.50168524567883e-05 3.73843239218358e-06 0.6 0.000126404478401203 6.2914876845473e-06 0.62 0.000212235332686554 1.06224015917693e-05 0.64 0.000354203267414396 1.79926328408562e-05 0.66 0.000585416747296357 3.05810689359861e-05 0.68 0.000953408025049201 5.21699036173462e-05 0.7 0.00152075494978985 8.93387122289615e-05 0.72 0.0023607290793968 0.000153477037734646 0.74 0.00354632905859672 0.000263942578788904 0.76 0.00513292264981485 0.000452342476002324 0.78 0.00713646728594984 0.000766666393531721 0.800000000000001 0.00951350895651065 0.00127170267286398 0.820000000000001 0.0121570279650876 0.00204105103828304 0.840000000000001 0.0149208706661099 0.00314065940882127 0.860000000000001 0.0176632648457953 0.00461253896255534 0.880000000000001 0.0202809164686448 0.00646855004576755 0.900000000000001 0.0227175775576591 0.00869511922797764 0.920000000000001 0.0249543218019877 0.0112627156899702 0.940000000000001 0.0269951856306738 0.0141346233006704 0.960000000000001 0.0288556551582329 0.0172729695290146 0.980000000000001 0.0305554527979157 0.0206421222089781 1 0.032114659950878 0.0242102280014574 1.02 0.0335519086158963 0.0279496369965029 1.04 0.0348837093339488 0.0318367430987855 0.3 4.59688086469473e-08 4.98006431260445e-09 0.32 7.7458060372414e-08 7.4604594602369e-09 0.34 1.31269499269475e-07 1.12963327338183e-08 0.36 2.23165730022783e-07 1.73078827856879e-08 0.38 3.79978555435839e-07 2.68468880026386e-08 0.4 6.47322996349083e-07 4.21553462209078e-08 0.42 1.10263320915187e-06 6.69713783036618e-08 0.44 1.87715417787241e-06 1.07554879807784e-07 0.46 3.19146456991777e-06 1.74429830433144e-07 0.48 5.42135429151302e-06 2.85330221225867e-07 0.5 9.19779730021274e-06 4.70236740206706e-07 0.52 1.55860103176478e-05 7.79942250018e-07 0.54 2.63830274606671e-05 1.30071500180093e-06 0.56 4.46172320472345e-05 2.17949993474765e-06 0.58 7.53718860562649e-05 3.66754161814445e-06 0.6 0.000127109772907729 6.19666728690384e-06 0.62 0.000213722049182627 1.05145953293269e-05 0.64 0.000357488231767282 1.79294177820822e-05 0.66 0.000592850490919869 3.07606457794717e-05 0.68 0.000970134835465659 5.3186385623636e-05 0.7 0.00155703208308939 9.28438462112574e-05 0.72 0.00243438364791654 0.000163795736626645 0.74 0.0036826847365073 0.000291684854545959 0.76 0.00535699662743232 0.000521387670306939 0.78 0.00745196615252423 0.000924478913053569 0.800000000000001 0.00987249287575637 0.00159735058383329 0.820000000000001 0.0124445917434049 0.00263927252409475 0.840000000000001 0.0149801450549957 0.00411818521660995 0.860000000000001 0.0173453705451587 0.00605201346285499 0.880000000000001 0.0194800755489623 0.0084168190745885 0.900000000000001 0.0213772535531158 0.0111664156121391 0.920000000000001 0.0230564462476964 0.0142483038553316 0.940000000000001 0.0245461239631467 0.0176124134052391 0.960000000000001 0.02587502495537 0.0212146680811724 0.980000000000001 0.0270687854804729 0.0250177830679065 1 0.0281490896255685 0.0289908283344496 1.02 0.0291338499442988 0.0331083584457297 1.04 0.0300377281124869 0.0373494789119747 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_full_sh.standard0000644000175000017500000003035214163340332025342 0ustar carstencarstenV(coll) I(coll) I(base) -1 -0.0419838428121319 2.40255528663051e-05 -0.95 -0.0238986883731076 4.91146995818558e-06 -0.9 -0.00914383374528895 7.84879512608969e-07 -0.85 -0.00154208115073615 9.63859614606639e-08 -0.8 -0.000132341016490655 1.02891892309807e-08 -0.75 -9.94904601142743e-06 1.07509578222399e-09 -0.7 -7.39839020864033e-07 1.12701947773574e-10 -0.65 -5.49743426174081e-08 1.23250168167172e-11 -0.6 -4.08568941441517e-09 1.81698665077464e-12 -0.55 -3.04579302345746e-10 6.76856821965589e-13 -0.5 -2.35493004555362e-11 5.1322335981938e-13 -0.45 -2.57555869313588e-12 4.5137838266193e-13 -0.4 -9.24514992636936e-13 4.00143680477877e-13 -0.35 -7.09254148561682e-13 3.50014977024656e-13 -0.3 -6.00687904184119e-13 3.00001561175678e-13 -0.25 -5.00051147969585e-13 2.50000162729006e-13 -0.2 -4.00003804284003e-13 2.00000016957843e-13 -0.15 -3.00000282995756e-13 1.50000001763648e-13 -0.0999999999999997 -2.00000020964777e-13 1.00000000180596e-13 -0.0499999999999997 -1.00000001453487e-13 5.00000000163501e-14 3.19189119579733e-16 7.32062920045099e-28 -4.13763715613606e-28 0.0500000000000003 1.00000000107662e-13 -5.00000000009859e-14 0.1 2.00000000114889e-13 -1.00000000000363e-13 0.15 3.00000000114606e-13 -1.49999999999571e-13 0.2 4.00000000113759e-13 -1.99999999998761e-13 0.25 5.00000000112868e-13 -2.49999999997948e-13 0.3 6.00000000111974e-13 -2.99999999997134e-13 0.35 7.00000000111079e-13 -3.49999999996318e-13 0.4 8.00000000110184e-13 -3.99999999995502e-13 0.45 9.00000000109289e-13 -4.49999999994686e-13 0.5 1.00000000010839e-12 -4.9999999999387e-13 0.55 1.1000000001075e-12 -5.49999999993054e-13 0.6 1.20000000010661e-12 -5.99999999992239e-13 0.65 1.30000000010571e-12 -6.49999999991425e-13 0.700000000000001 1.40000000010482e-12 -6.99999999990613e-13 0.750000000000001 1.50000000010394e-12 -7.49999999989805e-13 0.800000000000001 1.60000000010306e-12 -7.99999999989e-13 0.850000000000001 1.70000000010218e-12 -8.49999999988201e-13 0.900000000000001 1.80000000010131e-12 -8.99999999987409e-13 0.950000000000001 1.90000000010046e-12 -9.49999999986627e-13 1 2.00000000009961e-12 -9.99999999985856e-13 -1 -0.0510430261565016 0.000799218772032201 -0.95 -0.0332748822685894 0.000257525853562188 -0.9 -0.0170357180022722 6.64660131808626e-05 -0.85 -0.00549307802308768 1.37146255909134e-05 -0.8 -0.000954627428329222 2.35502571524865e-06 -0.75 -0.000121915822426398 3.76513215392602e-07 -0.7 -1.4710550918139e-05 5.94710279701428e-08 -0.65 -1.76307091950622e-06 9.37992975286521e-09 -0.6 -2.11213766203228e-07 1.47956814445248e-09 -0.55 -2.53144436717326e-08 2.33755057516237e-10 -0.5 -3.03677718707467e-09 3.72718731930888e-11 -0.45 -3.65302843144158e-10 6.24820196680138e-12 -0.4 -4.45935651598797e-11 1.31426223375434e-12 -0.35 -5.97128211273127e-12 4.94160895488468e-13 -0.3 -1.23577751962029e-12 3.22731046259037e-13 -0.25 -5.76883361226658e-13 2.53583945054899e-13 -0.2 -4.09327462227033e-13 2.00564823424601e-13 -0.15 -3.01134908273734e-13 1.50088767268139e-13 -0.0999999999999997 -2.00137208879617e-13 1.00013702567142e-13 -0.0499999999999997 -1.00015056784201e-13 5.00018663392909e-14 3.19189119579733e-16 1.02519101065074e-24 -1.02491264328474e-24 0.0500000000000003 1.00001871942078e-13 -5.00002942865442e-14 0.1 2.00002107521839e-13 -1.00000340690779e-13 0.15 3.00002137997958e-13 -1.50000348010429e-13 0.2 4.00002142456409e-13 -2.00000349169414e-13 0.25 5.00002143565694e-13 -2.50000349360271e-13 0.3 6.00002144235877e-13 -3.00000349403208e-13 0.35 7.00002144848395e-13 -3.5000034942944e-13 0.4 8.00002145456724e-13 -4.00000349462196e-13 0.45 9.00002146071079e-13 -4.50000349507769e-13 0.5 1.0000021466974e-12 -5.00000349571327e-13 0.55 1.10000214734144e-12 -5.50000349658255e-13 0.6 1.20000214801027e-12 -6.00000349775264e-13 0.65 1.30000214871263e-12 -6.50000349930759e-13 0.700000000000001 1.40000214945946e-12 -7.00000350135319e-13 0.750000000000001 1.50000215026449e-12 -7.50000350402272e-13 0.800000000000001 1.60000215114483e-12 -8.00000350748325e-13 0.850000000000001 1.70000215212159e-12 -8.50000351194159e-13 0.900000000000001 1.80000215322028e-12 -9.00000351764852e-13 0.950000000000001 1.90000215447098e-12 -9.5000035249005e-13 1 2.0000021559082e-12 -1.00000035340386e-12 -1 -0.052771483604322 0.00264436681057379 -0.95 -0.037289666246547 0.00113288111059256 -0.9 -0.0216603707045179 0.000382463749298694 -0.85 -0.00884827120748885 0.000101233744517117 -0.8 -0.0021372049989665 2.17497855224464e-05 -0.75 -0.000352867618150981 4.18696472703343e-06 -0.7 -5.23330721558514e-05 7.8385771089084e-07 -0.65 -7.63147632791776e-06 1.4606785945956e-07 -0.6 -1.11129419566348e-06 2.71996796714284e-08 -0.55 -1.62008728627742e-07 5.06468903973369e-09 -0.5 -2.3662659052119e-08 9.43363428636996e-10 -0.45 -3.46507530132305e-09 1.75995821580564e-10 -0.4 -5.09516248935163e-10 3.30837251240263e-11 -0.35 -7.56902642305528e-11 6.43513657729825e-12 -0.3 -1.17066561390757e-11 1.43291446689809e-12 -0.25 -2.15446818411227e-12 4.60891732316249e-13 -0.2 -6.48097096409859e-13 2.39226184772997e-13 -0.15 -3.37419087793727e-13 1.57264868537611e-13 -0.0999999999999997 -2.05600380650129e-13 1.01314194389227e-13 -0.0499999999999997 -1.00748245347407e-13 5.0206276216175e-14 3.19189119579733e-16 4.1327930575324e-23 -4.13275964680787e-23 0.0500000000000003 1.00116877357438e-13 -5.00384053487248e-14 0.1 2.00135412865529e-13 -1.00045555870765e-13 0.15 3.00138418791166e-13 -1.50046887327507e-13 0.2 4.00138935546174e-13 -2.000471354708e-13 0.25 5.00139046927994e-13 -2.50047182071714e-13 0.3 6.00139091176572e-13 -3.00047191371188e-13 0.35 7.00139124164954e-13 -3.50047194039557e-13 0.4 8.00139155385655e-13 -4.00047195904472e-13 0.45 9.00139186631029e-13 -4.50047198211862e-13 0.5 1.00013921837454e-12 -5.00047201340882e-13 0.55 1.10013925098358e-12 -5.50047205630427e-13 0.6 1.20013928481342e-12 -6.00047211416864e-13 0.65 1.30013932030051e-12 -6.50047219118799e-13 0.700000000000001 1.40013935798559e-12 -7.00047229258677e-13 0.750000000000001 1.50013939854054e-12 -7.50047242489303e-13 0.800000000000001 1.60013944279859e-12 -8.00047259623845e-13 0.850000000000001 1.70013949178425e-12 -8.50047281666014e-13 0.900000000000001 1.80013954673852e-12 -9.00047309835611e-13 0.950000000000001 1.9001396091342e-12 -9.5004734558445e-13 1 2.00013968067838e-12 -1.00004739059956e-12 -1 -0.0515822574996881 0.00525645609972837 -0.95 -0.0386744727212935 0.00280433535636744 -0.9 -0.024827586410857 0.00121402577464518 -0.85 -0.0120537764464146 0.000408192822868757 -0.8 -0.00375860713493894 0.000107488468089949 -0.75 -0.000775820705883884 2.41798722178692e-05 -0.7 -0.000135709856668644 5.14945850325114e-06 -0.65 -2.29424383486051e-05 1.08363278946359e-06 -0.6 -3.86353586022341e-06 2.27519135976866e-07 -0.55 -6.51884990275351e-07 4.77496074852738e-08 -0.5 -1.10378243404495e-07 1.00207052734794e-08 -0.45 -1.87736965302191e-08 2.10316831534023e-09 -0.4 -3.21100848324073e-09 4.41648392693143e-10 -0.35 -5.5321893285406e-10 9.29433998396982e-11 -0.3 -9.64208461624889e-11 1.97291460128138e-11 -0.25 -1.72629192262751e-11 4.3258389168194e-12 -0.2 -3.35991801066687e-12 1.0539919251594e-12 -0.15 -8.26341358221155e-13 3.27896677130692e-13 -0.0999999999999997 -2.92557394983542e-13 1.36020050111059e-13 -0.0499999999999997 -1.14300906251255e-13 5.62476512789484e-14 3.19189119579733e-16 5.74617870151961e-22 -5.74617538830381e-22 0.0500000000000003 1.02649084645842e-13 -5.13110528352948e-14 0.1 2.03146897568975e-13 -1.01586174582541e-13 0.15 3.03242071497626e-13 -1.51643910314772e-13 0.2 4.03260854361339e-13 -2.01656029817359e-13 0.25 5.03264949825755e-13 -2.51658579323036e-13 0.3 6.03266184977783e-13 -3.01659124175031e-13 0.35 7.03266857047851e-13 -3.51659253453852e-13 0.4 8.0326741937403e-13 -4.01659302580203e-13 0.45 9.03267966001131e-13 -4.51659345732108e-13 0.5 1.00326851524187e-12 -5.01659397655343e-13 0.55 1.1032690788312e-12 -5.51659469234162e-13 0.6 1.20326966292499e-12 -6.01659566228271e-13 0.65 1.30327027498426e-12 -6.5165969577603e-13 0.700000000000001 1.40327092418359e-12 -7.01659866735129e-13 0.750000000000001 1.5032716218466e-12 -7.5166009010372e-13 0.800000000000001 1.6032723819363e-12 -8.01660379507196e-13 0.850000000000001 1.70327322156605e-12 -8.51660751710127e-13 0.900000000000001 1.80327416146614e-12 -9.0166122708739e-13 0.950000000000001 1.90327522632779e-12 -9.51661829975842e-13 1 2.00327644496018e-12 -1.00166258884136e-12 -1 -0.0452239841714101 0.012554030487816 -0.95 -0.0363194286136561 0.00887250910378146 -0.9 -0.0268559442349061 0.00567703669700975 -0.85 -0.0172304271856483 0.00313321564957122 -0.8 -0.00865873743730346 0.00140110286835114 -0.75 -0.00307649918277435 0.000490322026071656 -0.7 -0.000812485129184614 0.00014254855980421 -0.65 -0.000188096122122062 3.81650110935345e-05 -0.6 -4.20979655649926e-05 9.96246173187382e-06 -0.55 -9.39677020489073e-06 2.58309233583908e-06 -0.5 -2.10950085922991e-06 6.68592658659e-07 -0.45 -4.77491925294664e-07 1.729779711846e-07 -0.4 -1.09090623526915e-07 4.47474338912806e-08 -0.35 -2.51698669592656e-08 1.15749977897109e-08 -0.3 -5.86613866217618e-09 2.99378143153874e-09 -0.25 -1.38079095715272e-09 7.73941496024663e-10 -0.2 -3.27832008571798e-10 1.99674035367743e-10 -0.15 -7.80677287215715e-11 5.10849848618287e-11 -0.0999999999999997 -1.81784122994074e-11 1.2610785749385e-11 -0.0499999999999997 -3.62490496004239e-12 2.62118391371277e-12 3.19189119579733e-16 5.07442812305052e-20 -5.07442788071245e-20 0.0500000000000003 9.66676167671526e-13 -7.15115981015468e-13 0.1 1.28138032479272e-12 -9.37168817049172e-13 0.15 1.43496539439798e-12 -1.03167582598722e-12 0.2 1.54846310942409e-12 -1.09318937588095e-12 0.25 1.65192671199655e-12 -1.14616845899589e-12 0.3 1.75286535661729e-12 -1.19694030283968e-12 0.35 1.85316573877024e-12 -1.24714185021778e-12 0.4 1.95330439345921e-12 -1.29719682284802e-12 0.45 2.05340248671546e-12 -1.34721518329838e-12 0.5 2.15349131977053e-12 -1.39722582288567e-12 0.55 2.25357978337217e-12 -1.44723708231487e-12 0.6 2.3536699436883e-12 -1.49725087198038e-12 0.65 2.45376414671923e-12 -1.5472694660417e-12 0.700000000000001 2.55386376298013e-12 -1.59729418093173e-12 0.750000000000001 2.65397045994699e-12 -1.64732663335229e-12 0.800000000000001 2.75408626982492e-12 -1.69736880471199e-12 0.850000000000001 2.85421366227702e-12 -1.74742311311871e-12 0.900000000000001 2.95435561827748e-12 -1.79749248732489e-12 0.950000000000001 3.05451569712852e-12 -1.8475804342952e-12 1 3.15469808718672e-12 -1.89769109081878e-12 -1 -0.0399705916552309 0.0202003913546402 -0.95 -0.0331118316546554 0.0161085761304035 -0.9 -0.0261682955801888 0.0122523827842474 -0.85 -0.0192867874197475 0.00871655177007279 -0.8 -0.0127752522834762 0.00562492443559903 -0.75 -0.00719175133250961 0.00314810290373528 -0.7 -0.00324006404246538 0.00145680210157407 -0.65 -0.00116097861279263 0.000554223229012682 -0.6 -0.000357796787107493 0.000184499406806584 -0.55 -0.000103565101216293 5.77925111330412e-05 -0.5 -2.94806889127642e-05 1.77154280960052e-05 -0.45 -8.39132940766553e-06 5.39294622285306e-06 -0.4 -2.40032354599636e-06 1.63817841803489e-06 -0.35 -6.90803589417119e-07 4.97238812890929e-07 -0.3 -1.99981724671462e-07 1.50840866951623e-07 -0.25 -5.81660290756275e-08 4.56987564972067e-08 -0.2 -1.69431165347508e-08 1.37874467667787e-08 -0.15 -4.89383399063186e-09 4.10236221098222e-09 -0.0999999999999997 -1.35412301651787e-09 1.16293517914247e-09 -0.0499999999999997 -3.09539271641757e-10 2.70795577699236e-10 3.19189119579733e-16 1.25417961078794e-18 -1.25417949411454e-18 0.0500000000000003 9.20971180941667e-11 -8.22201725595052e-11 0.1 1.19633583500331e-10 -1.07208484097153e-10 0.15 1.27939733655097e-10 -1.14827166697869e-10 0.2 1.30501841044219e-10 -1.17174246018255e-10 0.25 1.31344060356712e-10 -1.17921427456871e-10 0.3 1.31670227558362e-10 -1.18183065076176e-10 0.35 1.31841273874542e-10 -1.18297369923276e-10 0.4 1.31965627974075e-10 -1.18366999938981e-10 0.45 1.3207592956722e-10 -1.1842312736343e-10 0.5 1.32182034453782e-10 -1.18475233191023e-10 0.55 1.32286942839788e-10 -1.18526220361312e-10 0.6 1.32391666081895e-10 -1.18577073527999e-10 0.65 1.32496334381302e-10 -1.18627914174353e-10 0.700000000000001 1.32601252267871e-10 -1.186790427204e-10 0.750000000000001 1.32706499522472e-10 -1.18730536025939e-10 0.800000000000001 1.32812172179418e-10 -1.18782487508231e-10 0.850000000000001 1.329183858946e-10 -1.18835010276858e-10 0.900000000000001 1.33025279417896e-10 -1.18888240547443e-10 0.950000000000001 1.33133018044488e-10 -1.18942341088311e-10 1 1.33241796731871e-10 -1.18997504355791e-10 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_dc.standard0000644000175000017500000001543314163340332025405 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000009961e-12 -9.99999999985856e-13 0.95 1.90000000010045e-12 -9.49999999986627e-13 0.9 1.80000000010131e-12 -8.99999999987409e-13 0.85 1.70000000010218e-12 -8.499999999882e-13 0.8 1.60000000010306e-12 -7.99999999988999e-13 0.75 1.50000000010394e-12 -7.49999999989804e-13 0.7 1.40000000010482e-12 -6.99999999990613e-13 0.65 1.30000000010571e-12 -6.49999999991425e-13 0.6 1.2000000001066e-12 -5.99999999992238e-13 0.55 1.1000000001075e-12 -5.49999999993053e-13 0.5 1.00000000010839e-12 -4.99999999993869e-13 0.45 9.00000000109287e-13 -4.49999999994686e-13 0.4 8.00000000110183e-13 -3.99999999995502e-13 0.35 7.00000000111078e-13 -3.49999999996318e-13 0.3 6.00000000111973e-13 -2.99999999997133e-13 0.25 5.00000000112867e-13 -2.49999999997947e-13 0.2 4.00000000113757e-13 -1.9999999999876e-13 0.15 3.00000000114604e-13 -1.49999999999571e-13 0.0999999999999997 2.00000000114887e-13 -1.00000000000362e-13 0.0499999999999997 1.00000000107661e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.3011452830852e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000001453488e-13 5.00000000163508e-14 -0.1 -2.00000020964778e-13 1.00000000180597e-13 -0.15 -3.00000282995758e-13 1.50000001763649e-13 -0.2 -4.00003804284004e-13 2.00000016957844e-13 -0.25 -5.00051147969586e-13 2.50000162729006e-13 -0.3 -6.00687904184121e-13 3.00001561175678e-13 -0.35 -7.09254148561679e-13 3.50014977024656e-13 -0.4 -9.24514992636119e-13 4.00143680477877e-13 -0.45 -2.57555869298222e-12 4.51378382661733e-13 -0.5 -2.35493004273902e-11 5.13223359792426e-13 -0.55 -3.04579297293272e-10 6.76856818338712e-13 -0.6 -4.08568852583698e-09 1.81698616831931e-12 -0.65 -5.49741898050104e-08 1.2324953309158e-11 -0.7 -7.39813422884479e-07 1.12693671470238e-10 1 2.00013968067838e-12 -1.00004739059956e-12 0.95 1.90013960913419e-12 -9.50047345584449e-13 0.9 1.80013954673852e-12 -9.00047309835611e-13 0.85 1.70013949178425e-12 -8.50047281666013e-13 0.8 1.60013944279859e-12 -8.00047259623845e-13 0.75 1.50013939854054e-12 -7.50047242489302e-13 0.7 1.40013935798558e-12 -7.00047229258676e-13 0.65 1.30013932030051e-12 -6.50047219118798e-13 0.6 1.20013928481342e-12 -6.00047211416863e-13 0.55 1.10013925098358e-12 -5.50047205630426e-13 0.5 1.00013921837454e-12 -5.00047201340881e-13 0.45 9.00139186631028e-13 -4.50047198211861e-13 0.4 8.00139155385654e-13 -4.00047195904472e-13 0.35 7.00139124164953e-13 -3.50047194039556e-13 0.3 6.0013909117657e-13 -3.00047191371187e-13 0.25 5.00139046927993e-13 -2.50047182071714e-13 0.2 4.00138935546173e-13 -2.00047135470799e-13 0.15 3.00138418791165e-13 -1.50046887327506e-13 0.0999999999999997 2.00135412865528e-13 -1.00045555870764e-13 0.0499999999999997 1.00116877357437e-13 -5.00384053487242e-14 -3.19189119579733e-16 4.13266431543266e-23 -4.13269576232494e-23 -0.0500000000000003 -1.00748245347408e-13 5.02062762161756e-14 -0.1 -2.0560038065013e-13 1.01314194389227e-13 -0.15 -3.37419087793706e-13 1.57264868537607e-13 -0.2 -6.48097096408559e-13 2.39226184772736e-13 -0.25 -2.15446818404191e-12 4.60891732304552e-13 -0.3 -1.17066561354274e-11 1.43291446638754e-12 -0.35 -7.56902640464174e-11 6.43513655656369e-12 -0.4 -5.09516239831973e-10 3.30837242835479e-11 -0.45 -3.46507485912849e-09 1.75995788116388e-10 -0.5 -2.36626379167917e-08 9.43362115804481e-10 -0.55 -1.62007734411511e-07 5.06463818528179e-09 -0.6 -1.11124820809007e-06 2.71977319796356e-08 -0.65 -7.62939082859944e-06 1.45994093116687e-07 -0.7 -5.22413855015012e-05 7.81108138007521e-07 1 2.00327644496018e-12 -1.00166258884136e-12 0.95 1.90327522632779e-12 -9.51661829975841e-13 0.9 1.80327416146614e-12 -9.01661227087389e-13 0.85 1.70327322156604e-12 -8.51660751710126e-13 0.8 1.6032723819363e-12 -8.01660379507195e-13 0.75 1.5032716218466e-12 -7.51660090103719e-13 0.7 1.40327092418358e-12 -7.01659866735127e-13 0.65 1.30327027498426e-12 -6.51659695776029e-13 0.6 1.20326966292499e-12 -6.01659566228269e-13 0.55 1.1032690788312e-12 -5.51659469234161e-13 0.5 1.00326851524187e-12 -5.01659397655342e-13 0.45 9.0326796600113e-13 -4.51659345732107e-13 0.4 8.03267419374029e-13 -4.01659302580202e-13 0.35 7.03266857047849e-13 -3.51659253453851e-13 0.3 6.03266184977782e-13 -3.0165912417503e-13 0.25 5.03264949825753e-13 -2.51658579323036e-13 0.2 4.03260854361338e-13 -2.01656029817358e-13 0.15 3.03242071497624e-13 -1.51643910314772e-13 0.0999999999999997 2.03146897568973e-13 -1.0158617458254e-13 0.0499999999999997 1.0264908464584e-13 -5.13110528352941e-14 -3.19189119579733e-16 5.74616532243866e-22 -5.74616876483043e-22 -0.0500000000000003 -1.14300906251256e-13 5.62476512789487e-14 -0.1 -2.92557394983474e-13 1.36020050111029e-13 -0.15 -8.26341358217658e-13 3.27896677129293e-13 -0.2 -3.35991801051763e-12 1.05399192510707e-12 -0.25 -1.72629192203278e-11 4.32583891501057e-12 -0.3 -9.64208459339538e-11 1.97291459530121e-11 -0.35 -5.53218924279609e-10 9.29433979217174e-11 -0.4 -3.21100816721831e-09 4.41648332555619e-10 -0.45 -1.87736850538274e-08 2.10316646316473e-09 -0.5 -1.10377832234079e-07 1.00206490642338e-08 -0.55 -6.51870456759228e-07 4.77479231977132e-08 -0.6 -3.86302976960141e-06 2.27469251619962e-07 -0.65 -2.29251666460168e-05 1.08217442674279e-06 -0.7 -0.000135145039796741 5.10789768162241e-06 1 1.33241796526165e-10 -1.18997504167208e-10 0.95 1.3313301784925e-10 -1.18942340909321e-10 0.9 1.33025279233083e-10 -1.18888240378008e-10 0.85 1.32918385720178e-10 -1.18835010116947e-10 0.8 1.32812172015361e-10 -1.18782487357818e-10 0.75 1.32706499368756e-10 -1.18730535885004e-10 0.7 1.32601252124475e-10 -1.18679042588923e-10 0.65 1.32496334248212e-10 -1.18627914052323e-10 0.6 1.32391665959095e-10 -1.18577073415402e-10 0.55 1.32286942727268e-10 -1.18526220258138e-10 0.5 1.32182034351531e-10 -1.18475233097264e-10 0.45 1.32075929475231e-10 -1.18423127279078e-10 0.4 1.31965627892343e-10 -1.18366999864033e-10 0.35 1.31841273803068e-10 -1.18297369857733e-10 0.3 1.31670227497172e-10 -1.18183065020064e-10 0.25 1.31344060305878e-10 -1.17921427410259e-10 0.2 1.3050184100395e-10 -1.17174245981339e-10 0.15 1.27939733625892e-10 -1.14827166671112e-10 0.0999999999999997 1.19633583483081e-10 -1.07208484081372e-10 0.0499999999999997 9.20971180889139e-11 -8.22201725547151e-11 -3.19189119579733e-16 1.25417760370386e-18 -1.25417772002613e-18 -0.0500000000000003 -3.09539271574837e-10 2.70795577639151e-10 -0.1 -1.35412301371507e-09 1.16293517666002e-09 -0.15 -4.89383393005896e-09 4.10236215826476e-09 -0.2 -1.69431154670894e-08 1.37874458570042e-08 -0.25 -5.81660118203652e-08 4.56987421499014e-08 -0.3 -1.99981458334751e-07 1.50840651582638e-07 -0.35 -6.90799594858794e-07 4.97235681907097e-07 -0.4 -2.40026484299506e-06 1.63813396456844e-06 -0.45 -8.3904812226222e-06 5.39232758456507e-06 -0.5 -2.94686689759392e-05 1.77070036305533e-05 -0.55 -0.000103400752515946 5.768180600464e-05 -0.6 -0.000355747377270786 0.000183161409010163 -0.65 -0.00114093370414993 0.000541105202295832 -0.7 -0.00312121914743503 0.0013716018435045 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_sh_dc.standard0000644000175000017500000000031114163340332026121 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.001195711440428 3.29705270382096e-06 0.85 0.00571823321291817 1.99628084331625e-05 0.9 0.017484870234126 0.000124841559370672 0.95 0.0354908433163293 0.000663496989397432 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_subcoupl_peri_con_dc.standard0000644000175000017500000001544214163340332030511 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704451e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732605e-13 0.15 -1.50000001763803e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.02750538956629e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937576698e-13 4.68053043062289e-11 0.6 -1.81705065604658e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.7 -1.12996695977908e-10 5.98410414791985e-09 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568744479e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.7 -7.8246224909529e-07 1.03033998827935e-06 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986355e-13 3.19189119579733e-16 5.74616870665194e-22 -5.74615169092221e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323951e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.7 -5.12525620261238e-06 5.87041577473614e-06 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.2541774486075e-18 -1.25417748091924e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.7 -0.0013924943610149 0.00157084215278599 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_subtran_ac.standard0000644000175000017500000002661114163340332027175 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 0.000106845632357113 -7.90321041553056e-08 0.039699625634778 4.89301427342159e-06 7.70073134836581e-14 2.58066700612741e-14 5.04150697016231e-13 3.24965453756692e-14 158489319.2463 0.000106658846767886 -8.79295586425628e-08 0.0396651975022226 3.84585667517756e-06 7.85687663564236e-14 2.57590035575054e-14 2.30456865749751e-13 4.08514802493645e-14 251188643.151556 0.000106602153605317 -9.76870144414631e-08 0.0396510198866003 3.42264646646662e-06 7.92112140322469e-14 2.5739390085815e-14 1.17846782062471e-13 4.42890789733222e-14 398107170.55492 0.000106630111406778 -1.16995982367405e-07 0.0396452690476435 3.27116658205284e-06 7.94703888978241e-14 2.57314739838484e-14 7.24156462689465e-14 4.56759321395109e-14 630957344.483199 0.000106769174048589 -1.63396560735459e-07 0.0396428892440718 3.25898929409707e-06 7.95740873738302e-14 2.57282974204225e-14 5.42326133749388e-14 4.62309882161456e-14 1000000000.00595 0.000107146049877203 -2.79107823851478e-07 0.0396417434370764 3.37590526278131e-06 7.96153785704986e-14 2.57270093007351e-14 4.69783761782188e-14 4.64524109853321e-14 1584893192.47244 0.000108103714777026 -5.69424351622912e-07 0.0396407935079563 3.72844550672324e-06 7.96316305658388e-14 2.57264437526449e-14 4.40878467577349e-14 4.6540588031735e-14 2511886431.53052 0.000110513612165822 -1.29852503434213e-06 0.0396391757686222 4.63743624956603e-06 7.9637599746943e-14 2.57260871350181e-14 4.29364167094665e-14 4.6575584228068e-14 3981071705.5729 0.00011656854687339 -3.1298415926723e-06 0.0396354183121631 6.93002371243701e-06 7.96387128692204e-14 2.57256150981695e-14 4.24772050646093e-14 4.65892180260957e-14 6309573444.86956 0.000131777290882478 -7.72957510876512e-06 0.0396261025938984 1.26922398922535e-05 7.96359823403743e-14 2.57245981866448e-14 4.22924770946279e-14 4.65938917211921e-14 10000000000.1191 0.000169972260713236 -1.92816541697544e-05 0.0396027557785432 2.71663495599039e-05 7.96269251542819e-14 2.57221114620615e-14 4.2214155585193e-14 4.65938579309623e-14 15848931924.8188 0.000265863700136259 -4.82870495606334e-05 0.0395441601958189 6.35154058458154e-05 7.96033112173956e-14 2.57158947999093e-14 4.2170979105738e-14 4.65890875953478e-14 25118864315.4548 0.000506416532331323 -0.000121068995544701 0.0393971692605805 0.000154764550373665 7.954372701542e-14 2.57003085806383e-14 4.21237020426773e-14 4.65752510621649e-14 39810717055.9661 0.00110867403132201 -0.000303409204917233 0.0390291221781857 0.000383621165154224 7.93944227945559e-14 2.56612794577122e-14 4.20295800157406e-14 4.65398284715186e-14 63095734449.0713 0.00260907647543551 -0.00075842697203273 0.0381119718266299 0.000956285119491807 7.90224784126909e-14 2.5563978661747e-14 4.18046954968615e-14 4.64510313929898e-14 100000000000 0.00630149761995462 -0.00188286848777543 0.0358534454470017 0.00238114017934998 7.81075625977588e-14 2.53240979443367e-14 4.12550748235534e-14 4.62308071144875e-14 100000000 0.000564442990347379 4.46100444582745e-08 0.13992535123336 2.81662699517238e-05 5.51611700348336e-14 2.80261914416516e-14 4.64421721306021e-12 -1.44326322385687e-13 158489319.2463 0.000561078131147021 -1.04525233782915e-07 0.139616153454886 1.48762969008898e-05 8.46790426381568e-14 2.67568327580247e-14 1.94880785172553e-12 -2.84156248439239e-14 251188643.151556 0.000559745220538598 -1.72987683546246e-07 0.139489572715574 9.44917225859099e-06 9.67581323057008e-14 2.6237391871888e-14 8.45810339340263e-13 1.90165767523676e-14 398107170.55492 0.000559319628123313 -2.19280094592874e-07 0.139438485317473 7.29302201890603e-06 1.01620436109586e-13 2.60282887944548e-14 4.01806747119046e-13 3.81100529257623e-14 630957344.483199 0.0005594285173562 -2.84906765189354e-07 0.139417721596984 6.50250738065683e-06 1.03564637830185e-13 2.59446586491949e-14 2.2426058604582e-13 4.57450408922889e-14 1000000000.00595 0.00056017329228853 -4.29487254247828e-07 0.139408598543783 6.36737406489729e-06 1.04339723691803e-13 2.59112682708376e-14 1.53452811679708e-13 4.87899117789811e-14 1584893192.47244 0.000562232035649432 -7.84569643551494e-07 0.13940284801757 6.7660987014273e-06 1.0464779494609e-13 2.58978711829284e-14 1.25243011611483e-13 5.00028267329355e-14 2511886431.53052 0.000567478077426577 -1.67325300216506e-06 0.139395242643626 8.06172256817561e-06 1.04768682845388e-13 2.58922981338625e-14 1.14007172951666e-13 5.04855213141839e-14 3981071705.5729 0.000580684206301809 -3.90409992212597e-06 0.139378863741877 1.14331272171864e-05 1.04812313888765e-13 2.58894812286407e-14 1.0952816634061e-13 5.06769258564957e-14 6309573444.86956 0.000613861071918823 -9.50632667960079e-06 0.139338815023793 1.99472378523136e-05 1.04818382001988e-13 2.58868579937711e-14 1.07731302838478e-13 5.07511671516662e-14 10000000000.1191 0.000697156251621603 -2.35726265690796e-05 0.139238704595241 4.13453010557618e-05 1.04792424890879e-13 2.5882043526861e-14 1.06981655915608e-13 5.07757988904326e-14 15848931924.8188 0.000906095962733988 -5.88698727951752e-05 0.138987761187858 9.5058214156174e-05 1.04710933560862e-13 2.58706701682972e-14 1.06597216688819e-13 5.07732508839069e-14 25118864315.4548 0.00142910572476002 -0.000147308627637245 0.138359692560835 0.00022970542794698 1.04500455973408e-13 2.58424728199507e-14 1.06229004027326e-13 5.07413070401707e-14 39810717055.9661 0.00273145328890212 -0.000368057652221582 0.136795853564472 0.000566197131190216 1.03973858889882e-13 2.57723203131621e-14 1.05547264421522e-13 5.06515405420748e-14 63095734449.0713 0.00593266718103797 -0.000913936033605871 0.13295244595102 0.00140077718589276 1.0267899890354e-13 2.55996231790703e-14 1.03964314075276e-13 5.04262129709164e-14 100000000000 0.0135573342261556 -0.00223386000946912 0.123801550236559 0.00343372568244832 9.95977900492173e-14 2.51864774454385e-14 1.00233297201576e-13 4.98836807071289e-14 100000000 0.00268931760406005 3.51651998250761e-06 0.265862647261998 0.000107199876848929 -3.26924735375073e-13 6.19238972820269e-14 1.20542401827286e-11 -8.48200487602908e-13 158489319.2463 0.00266054208610636 1.30453316468013e-06 0.265133772353693 5.1389127889323e-05 -4.87700545400371e-14 4.06191653211005e-14 5.020691654063e-12 -3.09479256085164e-13 251188643.151556 0.00264892125030279 3.94410353895712e-07 0.264836798073353 2.86832273330706e-05 6.44885448489553e-14 3.19443275989956e-14 2.15678040040759e-12 -9.01234560711612e-14 398107170.55492 0.00264449445486005 4.99258482384863e-09 0.264717011810561 1.96096011828573e-05 1.09987536908063e-13 2.84593908531743e-14 1.00626685404506e-12 -2.00212109667951e-15 630957344.483199 0.00264333327103318 -2.10433567253584e-07 0.264667935728235 1.61048493390048e-05 1.28166276467988e-13 2.70669541430786e-14 5.46578244239036e-13 3.32067091213631e-14 1000000000.00595 0.00264439701069738 -4.46676949216743e-07 0.264645315663006 1.50106646615855e-05 1.35412834440376e-13 2.65117399855357e-14 3.63306770630328e-13 4.7243680355326e-14 1584893192.47244 0.00264865607041106 -9.18511706807706e-07 0.264628632208387 1.53362580072036e-05 1.38296948278142e-13 2.62903900234824e-14 2.9029820822337e-13 5.28347330556435e-14 2511886431.53052 0.00265998564415155 -2.05520587016611e-06 0.26460271562277 1.73785642697544e-05 1.39439240896546e-13 2.62017761803094e-14 2.61213922155933e-13 5.50601306293205e-14 3981071705.5729 0.00268868978499937 -4.89071248049418e-06 0.264543995394789 2.2995334259257e-05 1.39878576083607e-13 2.6165308107455e-14 2.496030573167e-13 5.5943772383589e-14 6309573444.86956 0.00276085219601193 -1.20026345384037e-05 0.264399111117245 3.72923957043247e-05 1.40014671767008e-13 2.61478093298458e-14 2.44902330310694e-13 5.62895800856469e-14 10000000000.1191 0.00294190781435017 -2.98458353986841e-05 0.264036687539012 7.32458633121991e-05 1.39971508798899e-13 2.61333681116923e-14 2.42834805737723e-13 5.6412228275287e-14 15848931924.8188 0.00339515566829119 -7.45510542476068e-05 0.263129865507717 0.000163358719856121 1.39710750602752e-13 2.61089114007376e-14 2.41521014692803e-13 5.64234586629685e-14 25118864315.4548 0.00452392626631244 -0.000186134713192951 0.260871831492591 0.000388293494299807 1.39001004373737e-13 2.6052609619593e-14 2.39777311467506e-13 5.63343484223769e-14 39810717055.9661 0.00729926630311137 -0.000462044187717708 0.255320932144674 0.000944494935852247 1.37232681892239e-13 2.5915848779512e-14 2.36090070587968e-13 5.60690891966605e-14 63095734449.0713 0.0139138512749087 -0.00112906412586876 0.242096883175558 0.00228917646476518 1.33011757176794e-13 2.55897187000685e-14 2.27537632571074e-13 5.54176221074671e-14 100000000000 0.0285765565210577 -0.00266181778494356 0.212815190979317 0.0053794309232772 1.23667233143265e-13 2.48619915067673e-14 2.08696038585814e-13 5.39575288873393e-14 100000000 0.010791793527298 2.52169930578659e-05 0.346862534741976 0.000295615339872379 -2.18187591952102e-12 3.63533017321858e-13 1.14917722264186e-11 -1.50235480817278e-12 158489319.2463 0.010650216767036 5.12422308993211e-06 0.346200836842371 0.000201857516958504 -7.70816523911843e-13 1.63481021198343e-13 4.90390819068203e-12 -5.68364962536883e-13 251188643.151556 0.0105928536406553 -3.06069725981782e-06 0.345931231516619 0.000163769903529731 -1.97041663873265e-13 8.21344350196617e-14 2.22510324098857e-12 -1.88579361828507e-13 398107170.55492 0.0105703402001802 -6.38390214144806e-06 0.345821620807085 0.000148570270335324 3.33326032768432e-14 4.94731569927236e-14 1.14954216444826e-12 -3.60927572622893e-14 630957344.483199 0.0105626500185481 -7.80417313309248e-06 0.345774410509837 0.000142731972086307 1.25357083582951e-13 3.64261366074236e-14 7.19892837425175e-13 2.48196566997196e-14 1000000000.00595 0.010562858693257 -8.60348671971658e-06 0.345746984134381 0.000140990982320233 1.62039063567644e-13 3.12247881209835e-14 5.48605849923729e-13 4.91016814549272e-14 1584893192.47244 0.0105711670763836 -9.50750471728551e-06 0.3457144406715 0.000141770658412976 1.7664205707815e-13 2.91524846338589e-14 4.80356701838812e-13 5.87724578194219e-14 2511886431.53052 0.0105951327293303 -1.13383293879932e-05 0.345647187348413 0.000145780983393851 1.82436150498686e-13 2.83260733180283e-14 4.53125719390579e-13 6.26200533237898e-14 3981071705.5729 0.0106565337888921 -1.57601649445613e-05 0.345484106636914 0.000156666793851845 1.84691021120148e-13 2.79939440241318e-14 4.42146698689582e-13 6.41438129013067e-14 6309573444.86956 0.0108110511599826 -2.67855535337103e-05 0.345077307805838 0.000184304347196462 1.85458315966134e-13 2.78539387048157e-14 4.37431494625316e-13 6.4730069360472e-14 10000000000.1191 0.0111980771945992 -5.43765488962913e-05 0.344059821010997 0.000253656406393188 1.85437423392631e-13 2.77787353532707e-14 4.34692891396896e-13 6.49124520567641e-14 15848931924.8188 0.0121621962711374 -0.000123197291990385 0.34152582384379 0.000426663003632755 1.84616997626903e-13 2.7700347538336e-14 4.31459104863549e-13 6.48580990496443e-14 25118864315.4548 0.0145339127783105 -0.000293143321779426 0.335293059169094 0.000853555229460401 1.82297730832641e-13 2.75501922343153e-14 4.24912243386677e-13 6.45248060618994e-14 39810717055.9661 0.0201932126322591 -0.00070263735010896 0.320424431541751 0.0018799994233541 1.76649969296227e-13 2.7207961772791e-14 4.09836280788705e-13 6.36523973023711e-14 63095734449.0713 0.0327705617808445 -0.00163566420914216 0.28740133447286 0.00420624703236228 1.64067949243589e-13 2.64514180241315e-14 3.76561560056901e-13 6.16824460452716e-14 100000000000 0.0568050306875197 -0.00353776908224187 0.224406885606988 0.00888544902350752 1.40072711059978e-13 2.49975450625972e-14 3.13212935668257e-13 5.78926013776526e-14 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subcoupl_peri_bias_dc.standard0000644000175000017500000000036314163340332031370 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08247184220922e-05 7.93428604924756e-08 0.8 0.000884237129494995 1.78992740713022e-06 0.9 0.0156836587472444 6.99992610461282e-05 1 0.0539501798852761 0.00171840828232429 1.1 0.0840305590780728 0.0105289100046221 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_internal.standard0000644000175000017500000010145614163340332026137 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618362861045e-13 1.19322470828401e-13 0.32 6.81733754344049e-13 1.7250787704121e-13 0.34 6.64859525976805e-13 2.34687173576329e-13 0.36 6.53616063503158e-13 3.11995218333561e-13 0.38 6.58137159026171e-13 4.14751613183916e-13 0.4 7.06775211862317e-13 5.60315352931996e-13 0.42 8.78814902224049e-13 7.77887016482514e-13 0.44 1.39584536405838e-12 1.11658757991435e-12 0.46 2.87679721659539e-12 1.6590506466586e-12 0.48 7.04925838728123e-12 2.54429377028907e-12 0.5 1.87316876001825e-11 4.00621181266862e-12 0.52 5.13518724505837e-11 6.43838574463308e-12 0.54 1.42293262224742e-10 1.05032601747488e-11 0.56 3.95517343150091e-10 1.73162384612487e-11 0.58 1.09976585091752e-09 2.87565810754824e-11 0.6 3.05579087350404e-09 4.79937590261008e-11 0.62 8.48036337478316e-09 8.03821686871363e-11 0.64 2.34973639946985e-08 1.34991832264991e-10 0.66 6.49807605920833e-08 2.27395331619525e-10 0.68 1.79278018513588e-07 3.8399581570307e-10 0.7 4.93180176040045e-07 6.50912988246921e-10 0.72 1.35175137701777e-06 1.10956713950076e-09 0.74 3.68776657948792e-06 1.90770990224083e-09 0.76 9.99613358640464e-06 3.32351404105067e-09 0.78 2.68986893188777e-05 5.90634948751032e-09 0.800000000000001 7.17538838485129e-05 1.08044436227853e-08 0.820000000000001 0.000189726148378788 2.05699077846291e-08 0.840000000000001 0.000497694118906409 4.12430178273345e-08 0.860000000000001 0.00128901528427057 8.8124147145678e-08 0.880000000000001 0.00323610258675128 2.04456722291041e-07 0.900000000000001 0.00763639351161699 5.63607711188684e-07 0.920000000000001 0.016007083578391 3.14995687143788e-06 0.940000000000001 0.0262004066911042 4.01303096649606e-05 0.960000000000001 0.0345501583399966 0.00026695583774305 0.980000000000001 0.0410879798499165 0.000787546599693544 1 0.0478473913264718 0.00162886554645326 1.02 0.0564666310917704 0.00291041967778459 1.04 0.0684117957099217 0.00484638981181033 0.3 1.70062041766864e-12 -3.80677807573577e-13 0.32 1.68173940494591e-12 -3.27492816645989e-13 0.34 1.66487507511432e-12 -2.65314551319661e-13 0.36 1.65365887402688e-12 -1.88009061250828e-13 0.38 1.658255074436e-12 -8.52589794948528e-14 0.4 1.70710008053607e-12 6.02892014040086e-14 0.42 1.87971006427385e-12 2.77822630266297e-13 0.44 2.39831190618623e-12 6.16429525364117e-13 0.46 3.88359240107966e-12 1.15866387984044e-12 0.48 8.06797243586089e-12 2.0433505238044e-12 0.5 1.9783199751321e-11 3.50391970031736e-12 0.52 5.24935628863965e-11 5.93283723148708e-12 0.54 1.4368263286944e-10 9.98988388315012e-12 0.56 3.9758607032609e-10 1.67841319624425e-11 0.58 1.10369487303514e-09 2.81798772549504e-11 0.6 3.0648035579066e-09 4.73114272366253e-11 0.62 8.50323337211982e-09 7.94510814912807e-11 0.64 2.35578900977677e-08 1.3347853570662e-10 0.66 6.51432216131521e-08 2.24387178619088e-10 0.68 1.79715092269127e-07 3.77616028633401e-10 0.7 4.94352553254394e-07 6.3670424670179e-10 0.72 1.35487718116045e-06 1.07729344251629e-09 0.74 3.6960290329137e-06 1.83404106592309e-09 0.76 1.00177126605431e-05 3.15579646720546e-09 0.78 2.69543060615552e-05 5.52651599674346e-09 0.800000000000001 7.18952999961097e-05 9.94927837847322e-09 0.820000000000001 0.000190083609705141 1.86482754230601e-08 0.840000000000001 0.000498614396459005 3.68755116921249e-08 0.860000000000001 0.00129153573896781 7.77279903958696e-08 0.880000000000001 0.00324389909027607 1.75300541797278e-07 0.900000000000001 0.00767544154381523 4.20759112992016e-07 0.920000000000001 0.0166722704890528 1.06108405623418e-06 0.940000000000001 0.0318740741519172 2.81837522162389e-06 0.960000000000001 0.0494611510423132 1.41370042659277e-05 0.980000000000001 0.064596737440335 0.000291911516528339 1 0.075649272558849 0.00166859878369585 1.02 0.0864906198684313 0.00386097695406393 1.04 0.100643357427148 0.00672451638461018 0.3 2.70062558861404e-12 -8.80681322984221e-13 0.32 2.68175306241549e-12 -8.27501866614252e-13 0.34 2.66491114820126e-12 -7.65337808186235e-13 0.36 2.65375416190015e-12 -6.8806872031034e-13 0.38 2.65850681917515e-12 -5.85411739903325e-13 0.4 2.70776531783927e-12 -4.4010122831602e-13 0.42 2.88146842450993e-12 -2.23173374140791e-13 0.44 3.40296103033308e-12 1.13893493393047e-13 0.46 4.89588877644239e-12 6.52219046273547e-13 0.48 9.10050573991831e-12 1.52700421253304e-12 0.5 2.08693023440897e-11 2.9625421596257e-12 0.52 5.3721502608366e-11 5.32831007158502e-12 0.54 1.45286167127477e-10 9.22637752814111e-12 0.56 4.00184171449326e-10 1.56212728021882e-11 0.58 1.10892588789687e-09 2.60161572860218e-11 0.6 3.07700076606711e-09 4.26454735654514e-11 0.62 8.53384406087705e-09 6.85458666646038e-11 0.64 2.36370998116403e-08 1.07061151378447e-10 0.66 6.53504187532977e-08 1.59529467757686e-10 0.68 1.8025830004392e-07 2.17859538348903e-10 0.7 4.95774066714577e-07 2.43711389097896e-10 0.72 1.35858069591942e-06 1.14153481553434e-10 0.74 3.7056126868857e-06 -5.13557091183665e-10 0.76 1.00422073777781e-05 -2.52309212804784e-09 0.78 2.7016087841089e-05 -8.09274187388824e-09 0.800000000000001 7.20480856041763e-05 -2.2381307728859e-08 0.820000000000001 0.000190451253491653 -5.73039893125633e-08 0.840000000000001 0.000499460894778802 -1.39838598856184e-07 0.860000000000001 0.00129330060927879 -3.27470081048163e-07 0.880000000000001 0.00324675936042393 -7.23649625283375e-07 0.900000000000001 0.00767854537109873 -1.45395535086706e-06 0.920000000000001 0.0167220981298207 -2.53122197581296e-06 0.940000000000001 0.0330398824333117 -3.46321404010819e-06 0.960000000000001 0.0558505058819566 -1.80764975932002e-06 0.980000000000001 0.0787502516211227 2.40234706137598e-05 1 0.0967681829513096 0.000921347040275478 1.02 0.110139159332714 0.00399200469274445 1.04 0.125743627453353 0.00785783839204655 0.3 1.25201807467832e-12 1.0980105156952e-12 0.32 1.95922864695991e-12 1.66740705857887e-12 0.34 3.62340707468437e-12 2.5172814992089e-12 0.36 7.50229050275459e-12 3.79641070856721e-12 0.38 1.65042252627814e-11 5.73271766887995e-12 0.4 3.73505927632315e-11 8.67566957217735e-12 0.42 8.55652358695164e-11 1.31617650636244e-11 0.44 1.96977200746078e-10 2.00161637610001e-11 0.46 4.54214489459693e-10 3.05114902704759e-11 0.48 1.04765998226108e-09 4.66184242554274e-11 0.5 2.41552084588932e-09 7.14066040658481e-11 0.52 5.56521774744517e-09 1.09698148398526e-10 0.54 1.28095243393189e-08 1.6915952144084e-10 0.56 2.94491455738541e-08 2.62182719491932e-10 0.58 6.76086834489036e-08 4.09275479618637e-10 0.6 1.54954114748668e-07 6.45225341016495e-10 0.62 3.54424724562909e-07 1.03129186348653e-09 0.64 8.08672320434253e-07 1.67942473526323e-09 0.66 1.83955267851567e-06 2.80264936380191e-09 0.68 4.16968366490502e-06 4.82239570189243e-09 0.7 9.40931977777329e-06 8.60192286342029e-09 0.72 2.11407700840679e-05 1.59617774660674e-08 0.74 4.72846170246238e-05 3.08305681637118e-08 0.76 0.000105398482976431 6.1834084813139e-08 0.78 0.000234445425581926 1.28152056913462e-07 0.800000000000001 0.000519907571072339 2.72817109250494e-07 0.820000000000001 0.00114321163578457 5.93002642497311e-07 0.840000000000001 0.00246521418476684 1.30924220257459e-06 0.860000000000001 0.00513061092582325 2.92515799578065e-06 0.880000000000001 0.0101407360246579 6.61859160200619e-06 0.900000000000001 0.0188199189428519 1.58521269653663e-05 0.920000000000001 0.0318773988402566 7.23997467904798e-05 0.940000000000001 0.0443967343103699 0.000552834159206327 0.960000000000001 0.0542955069747242 0.00146796696720765 0.980000000000001 0.065184211216319 0.0026844599282615 1 0.0788281053949575 0.00438463206791698 1.02 0.0961602763811676 0.00694643089006401 1.04 0.117417425393931 0.0111185072579001 0.3 2.25381743183965e-12 5.97777096186997e-13 0.32 2.9633199785228e-12 1.16692742460282e-12 0.34 4.63271523649294e-12 2.01629829754145e-12 0.36 8.52347689869525e-12 3.29440039117809e-12 0.38 1.75524625755592e-11 5.22861845069277e-12 0.4 3.84604370122101e-11 8.16733521099862e-12 0.42 8.68153686516377e-11 1.26448725531836e-11 0.44 1.9854669356446e-10 1.94820384060825e-11 0.46 4.56510618980956e-10 2.99427951540382e-11 0.48 1.05160820380886e-09 4.5980659550409e-11 0.5 2.42322155357868e-09 7.06314329062593e-11 0.52 5.58143064802294e-09 1.08650880522184e-10 0.54 1.28450145618456e-08 1.67576104607138e-10 0.56 2.9528201823511e-08 2.59548495633846e-10 0.58 6.77859404538426e-08 4.04563863636815e-10 0.6 1.55351998303006e-07 6.36510660931129e-10 0.62 3.5531624474369e-07 1.01486641353433e-09 0.64 8.10662573571858e-07 1.64825598983814e-09 0.66 1.84397259882021e-06 2.74352085906671e-09 0.68 4.17943524248381e-06 4.7107127242474e-09 0.7 9.43065036310836e-06 8.3924663945952e-09 0.72 2.11870640130297e-05 1.55720668915307e-08 0.74 4.73843297508988e-05 3.01116554873295e-08 0.76 0.000105612578708977 6.05177018116307e-08 0.78 0.000234907693694367 1.25754702857988e-07 0.800000000000001 0.000520924692048314 2.68469155667774e-07 0.820000000000001 0.00114554170093858 5.85137404595252e-07 0.840000000000001 0.00247092725469812 1.29486463797143e-06 0.860000000000001 0.00514571864077593 2.89632850350577e-06 0.880000000000001 0.010184209914864 6.5250490689231e-06 0.900000000000001 0.0190002647969546 1.47641045809446e-05 0.920000000000001 0.0333720223817428 3.35243903676679e-05 0.940000000000001 0.0541998447532705 9.29798672853446e-05 0.960000000000001 0.0728555640886794 0.000967731584204764 0.980000000000001 0.0871687532580745 0.00289163933116222 1 0.103653874791361 0.00518206443385006 1.02 0.124881867189047 0.00827124339883595 1.04 0.152430215863909 0.0130404798150007 0.3 3.2582336534337e-12 9.48121493462747e-14 0.32 3.97296433320966e-12 6.60621755209818e-13 0.34 5.65377865760276e-12 1.50291098567e-12 0.36 9.56948586873117e-12 2.76602824863631e-12 0.38 1.86529786022664e-11 4.66859573332385e-12 0.4 3.96800834577422e-11 7.54058424989493e-12 0.42 8.82954555682092e-11 1.18777043188859e-11 0.44 2.00596296670436e-10 1.84199560625755e-11 0.46 4.59805881037733e-10 2.82625372151562e-11 0.48 1.05762840016318e-09 4.30072765431035e-11 0.5 2.43520284338838e-09 6.49587919468183e-11 0.52 5.60645063670385e-09 9.73564434278129e-11 0.54 1.28985432010741e-08 1.44600953326328e-10 0.56 2.9644019438381e-08 2.12366162802011e-10 0.58 6.80376982155633e-08 3.07356182515325e-10 0.6 1.55899921077579e-07 4.36249498667687e-10 0.62 3.56507796368257e-07 6.03075968419216e-10 0.64 8.13247981964896e-07 8.04086238495733e-10 0.66 1.84956237525967e-06 1.01983472517822e-09 0.68 4.19146305569735e-06 1.20778646256514e-09 0.7 9.45630882663734e-06 1.31465074470583e-09 0.72 2.12414220217606e-05 1.35321515489964e-09 0.74 4.74983598634926e-05 1.71859401095176e-09 0.76 0.000105849092001603 4.10459425399295e-09 0.78 0.000235390317364614 1.40937263994801e-08 0.800000000000001 0.000521876320303955 4.85260629861446e-08 0.820000000000001 0.00114727189865963 1.56399712632357e-07 0.840000000000001 0.0024735206278417 4.76948499730887e-07 0.860000000000001 0.00514793404261771 1.3935475518874e-06 0.880000000000001 0.0101819268440155 3.90774410361286e-06 0.900000000000001 0.0189933714305494 1.04766817667395e-05 0.920000000000001 0.0334805544071052 2.68520671600782e-05 0.940000000000001 0.0557776267208325 6.62546720163742e-05 0.960000000000001 0.0846506816932186 0.00024754694838012 0.980000000000001 0.104413852458355 0.00238303615997633 1 0.123232520043891 0.0054991211468828 1.02 0.146783501818422 0.00911099229798167 1.04 0.177663865080822 0.0143019511546309 0.3 9.67451176402845e-12 5.10307780134123e-12 0.32 1.99437580763168e-11 7.5189185320063e-12 0.34 4.19939786489747e-11 1.10641958756479e-11 0.36 8.92929387791204e-11 1.62810100632067e-11 0.38 1.90675416517692e-10 2.3977437901586e-11 0.4 4.07836902402014e-10 3.53644194913536e-11 0.42 8.72684892433038e-10 5.22699971307151e-11 0.44 1.86700634971785e-09 7.74817272378234e-11 0.46 3.99218871646701e-09 1.15308146917311e-10 0.48 8.53028004742351e-09 1.72527199903891e-10 0.5 1.82108187283481e-08 2.60041236348663e-10 0.52 3.88361879909012e-08 3.95862904315986e-10 0.54 8.2718294085376e-08 6.1069679432381e-10 0.56 1.75923408186904e-07 9.58550316908947e-10 0.58 3.73488883717103e-07 1.53777054632451e-09 0.6 7.91246082403234e-07 2.53303905146224e-09 0.62 1.67210257231218e-06 4.30098237787504e-09 0.64 3.52368214999449e-06 7.54655023948437e-09 0.66 7.39970125816699e-06 1.36895949780777e-08 0.68 1.54879842194709e-05 2.56315546092337e-08 0.7 3.23066910859108e-05 4.93661229203153e-08 0.72 6.72141023764051e-05 9.73737210560255e-08 0.74 0.000139627078614653 1.95791053942329e-07 0.76 0.000289602010074746 3.9957660743908e-07 0.78 0.000598240025871449 8.24619288228511e-07 0.800000000000001 0.00122373202152624 1.7157485733296e-06 0.820000000000001 0.00245508920988042 3.59078292484093e-06 0.840000000000001 0.00477026623584375 7.54560455488262e-06 0.860000000000001 0.00887073990339311 1.59032784678559e-05 0.880000000000001 0.0156875663207288 3.36868726769596e-05 0.900000000000001 0.0263141878646131 7.54355710799169e-05 0.920000000000001 0.0404289983884265 0.000304337983848626 0.940000000000001 0.0531866918303278 0.00119453058017636 0.960000000000001 0.0660574379893601 0.00250782207542459 0.980000000000001 0.0813119952352374 0.00432280849470957 1 0.0998563350531644 0.00706862792249057 1.02 0.121781982847942 0.0115716343288782 1.04 0.146737537476158 0.0195218476196849 0.3 1.07033999538605e-11 4.59945444258877e-12 0.32 2.1004615562363e-11 7.01203319871405e-12 0.34 4.31222499815493e-11 1.05511457638633e-11 0.36 9.05634002072269e-11 1.5756343620704e-11 0.38 1.92245810768305e-10 2.34309516653641e-11 0.4 4.10039908407873e-10 3.47770851200209e-11 0.42 8.76221806247581e-10 5.16064659479185e-11 0.44 1.8733544961511e-09 7.66766037890183e-11 0.46 4.00445718040189e-09 1.14240984312777e-10 0.48 8.55500367279904e-09 1.70977210990308e-10 0.5 1.82617101956967e-08 2.57605778447228e-10 0.52 3.89419616097021e-08 3.91811769178968e-10 0.54 8.29389182231695e-08 6.03694539633169e-10 0.56 1.76383705360565e-07 9.46237685275603e-10 0.58 3.7444757736142e-07 1.51593431723862e-09 0.6 7.93236647709714e-07 2.49424339429454e-09 0.62 1.67621836600851e-06 4.23221654625277e-09 0.64 3.53214978527991e-06 7.4252500853896e-09 0.66 7.41700202488786e-06 1.34770801140088e-08 0.68 1.55231256627379e-05 2.52619850772822e-08 0.7 3.23776319750026e-05 4.872855919182e-08 0.72 6.73567722467961e-05 9.62820271620518e-08 0.74 0.000139914173859768 1.93933838395904e-07 0.76 0.000290183368533628 3.96436811930652e-07 0.78 0.000599434928072817 8.19351713530743e-07 0.800000000000001 0.00122626441201102 1.70699852755528e-06 0.820000000000001 0.00246074014012747 3.57636053270932e-06 0.840000000000001 0.00478361400525397 7.52122697075206e-06 0.860000000000001 0.00890332087967651 1.58521927030836e-05 0.880000000000001 0.0157717499396781 3.3431992892559e-05 0.900000000000001 0.0266208851488797 7.04209748166808e-05 0.920000000000001 0.0429235670593686 0.000148398270360341 0.940000000000001 0.0643039103241431 0.000458653156635132 0.960000000000001 0.0819873551566196 0.00217269582489101 0.980000000000001 0.100660134996968 0.00458475933977433 1 0.123447599962275 0.00778544952543342 1.02 0.151652061213108 0.0127306538100787 1.04 0.185500587446943 0.0211099836042188 0.3 1.17731690394622e-11 4.05302793830229e-12 0.32 2.21457888740256e-11 6.42059976566707e-12 0.34 4.44079302163942e-11 9.87138474393754e-12 0.36 9.21415834096482e-11 1.49035468814987e-11 0.38 1.94416181534055e-10 2.22397929517116e-11 0.4 4.13409442278349e-10 3.29255145573414e-11 0.42 8.82020072049807e-10 4.84683864013076e-11 0.44 1.88407250795572e-09 7.10373315803547e-11 0.46 4.02514141722622e-09 1.03749026085507e-10 0.48 8.59587558594236e-09 1.51090776334902e-10 0.5 1.83434636025219e-08 2.19574215090115e-10 0.52 3.91064590819494e-08 3.18820368049172e-10 0.54 8.32707406332297e-08 4.63528805223635e-10 0.56 1.77053429574713e-07 6.77384715000506e-10 0.58 3.75798314533402e-07 1.00138189171405e-09 0.6 7.95956124590019e-07 1.51237266538925e-09 0.62 1.68167909331319e-06 2.36529634655195e-09 0.64 3.54307816655628e-06 3.88977992847789e-09 0.66 7.43873229406424e-06 6.8140403518921e-09 0.68 1.55661345732312e-05 1.27637592292534e-08 0.7 3.24621834492739e-05 2.53998059234496e-08 0.72 6.75217686944486e-05 5.29190267158726e-08 0.74 0.000140233086373578 1.1358802936035e-07 0.76 0.000290788753965739 2.48062641748589e-07 0.78 0.000600538950810342 5.46975462320005e-07 0.800000000000001 0.00122810717697887 1.21288129440156e-06 0.820000000000001 0.00246326269850144 2.69913435114545e-06 0.840000000000001 0.00478555223255847 6.0164299559488e-06 0.860000000000001 0.00890087652102945 1.33877724667287e-05 0.880000000000001 0.015758732706285 2.96025102310205e-05 0.900000000000001 0.0266016164197307 6.47623402435303e-05 0.920000000000001 0.0430320472561214 0.000139728069770353 0.940000000000001 0.0667540719603451 0.000297501182782448 0.960000000000001 0.0936692951785944 0.00116547593726877 0.980000000000001 0.115025943283811 0.00431631781419605 1 0.140627132558942 0.00809101658375996 1.02 0.172476971469237 0.013402892906713 1.04 0.211805156245748 0.0221097202445209 0.3 6.93810231887194e-11 1.63787363110385e-11 0.32 1.40182162602227e-10 2.35868795791185e-11 0.34 2.8389602783233e-10 3.3995403862833e-11 0.36 5.75443400742264e-10 4.90916705328094e-11 0.38 1.16654588770757e-09 7.11115805807528e-11 0.4 2.36421846808438e-09 1.03470218027448e-10 0.42 4.78917465465174e-09 1.51487120347988e-10 0.44 9.69508754797017e-09 2.23643385489706e-10 0.46 1.96110644675959e-08 3.33821593487909e-10 0.48 3.96321829262339e-08 5.0539831351457e-10 0.5 8.00060645740414e-08 7.78897217321309e-10 0.52 1.61303224944164e-07 1.2264801255192e-09 0.54 3.24719643559586e-07 1.98000759850157e-09 0.56 6.52538741751514e-07 3.28564525175167e-09 0.58 1.30867363254779e-06 5.61131342724536e-09 0.6 2.61875461494821e-06 9.85932932190349e-09 0.62 5.22745475552477e-06 1.77892046263795e-08 0.64 1.04004552040211e-05 3.28611425338247e-08 0.66 2.06405843041621e-05 6.19229611151748e-08 0.68 4.08655857174953e-05 1.1858966682113e-07 0.7 8.07831543034702e-05 2.30022312961879e-07 0.72 0.000159513113910177 4.50536079030763e-07 0.74 0.000314323072551414 8.88929139407836e-07 0.76 0.000616268706629076 1.76336767495785e-06 0.78 0.00119556528730229 3.51155144942597e-06 0.800000000000001 0.00227578695202738 7.01151057595417e-06 0.820000000000001 0.00420660375158846 1.40227729159856e-05 0.840000000000001 0.00747982302525572 2.80631590287322e-05 0.860000000000001 0.0127321144226165 5.6145518631402e-05 0.880000000000001 0.0207528049664278 0.000112487134985629 0.900000000000001 0.032362083465488 0.000238050420782634 0.920000000000001 0.0463774224442307 0.000751186834701744 0.940000000000001 0.0603298190849465 0.00202539309275055 0.960000000000001 0.0763196506267152 0.00388847968255249 0.980000000000001 0.0954762013818011 0.00669692225527222 1 0.117947143507184 0.0112638063093039 1.02 0.143251086190168 0.0191582405809456 1.04 0.170886076383688 0.0335000150031397 0.3 7.05995033188208e-11 1.58522538051791e-11 0.32 1.41617796777034e-10 2.30393347002692e-11 0.34 2.85765029460081e-10 3.34102804970107e-11 0.36 5.7817736887714e-10 4.84397142594789e-11 0.38 1.17100616597671e-09 7.03411646557039e-11 0.4 2.37212326465861e-09 1.02490592186845e-10 0.42 4.80394905181329e-09 1.50139433415751e-10 0.44 9.72355239082905e-09 2.2165083596813e-10 0.46 1.96667851353982e-08 3.30704192432773e-10 0.48 3.97420920559814e-08 5.00328105507039e-10 0.5 8.02235164431185e-08 7.70442403803708e-10 0.52 1.6173362135628e-07 1.2122202147061e-09 0.54 3.25570482767168e-07 1.95583356021194e-09 0.56 6.54216811941083e-07 3.24464945147194e-09 0.58 1.31197280462824e-06 5.54197291355153e-09 0.6 2.62521672365668e-06 9.74257636611212e-09 0.62 5.24005727773437e-06 1.75937652696308e-08 0.64 1.04248611255307e-05 3.25363934149605e-08 0.66 2.06876544089595e-05 6.13871570163819e-08 0.68 4.09559780582844e-05 1.17712079665889e-07 0.7 8.09563871232632e-05 2.28594561658942e-07 0.72 0.00015984530583862 4.48228151488053e-07 0.74 0.000314962275409182 8.85225425830436e-07 0.76 0.000617509157714567 1.75748051007065e-06 0.78 0.00119801958710218 3.50231264249659e-06 0.800000000000001 0.00228081917281087 6.99721416098034e-06 0.820000000000001 0.00421738432054983 1.40006544238232e-05 0.840000000000001 0.00750354261843199 2.80259889480188e-05 0.860000000000001 0.0127844595199082 5.60503771339213e-05 0.880000000000001 0.0208746245567996 0.000111771703247371 0.900000000000001 0.0327876296518409 0.000221558829330505 0.920000000000001 0.04963795402398 0.000437859095573891 0.940000000000001 0.0699247045307439 0.00120230104160759 0.960000000000001 0.0891608789304217 0.00355755392216797 0.980000000000001 0.112143868791328 0.00681484073843212 1 0.140186334598579 0.0117115634234226 1.02 0.173621869849219 0.0198510937761132 1.04 0.211807416584486 0.0341754781497509 0.3 7.21193709041125e-11 1.50093009541674e-11 0.32 1.43613497899667e-10 2.19003403030163e-11 0.34 2.88672248940352e-10 3.17217536518529e-11 0.36 5.82830972890699e-10 4.57329578617022e-11 0.38 1.1790061788728e-09 6.57512444901721e-11 0.4 2.38653645069994e-09 9.44245562744225e-11 0.42 4.83065356156e-09 1.35669687626195e-10 0.44 9.77381369732548e-09 1.95408833140089e-10 0.46 1.97621867805247e-08 2.8286848113556e-10 0.48 3.99239620327173e-08 4.12976752479514e-10 0.5 8.0570914876558e-08 6.10963309093053e-10 0.52 1.62397575900302e-07 9.21454091442622e-10 0.54 3.26838922218616e-07 1.42683649588043e-09 0.56 6.56637227596771e-07 2.28483895826966e-09 0.58 1.31658315681231e-06 3.80594456147027e-09 0.6 2.63397844318287e-06 6.61341703400266e-09 0.62 5.25666183929897e-06 1.19748243122225e-08 0.64 1.04561118911053e-05 2.24940645422738e-08 0.66 2.07462914412406e-05 4.35105422598232e-08 0.68 4.10654166804556e-05 8.60141667700721e-08 0.7 8.11593857077983e-05 1.7256759874596e-07 0.72 0.000160218172819946 3.49479949270282e-07 0.74 0.000315633497928605 7.11857014447925e-07 0.76 0.000618666892797804 1.4552274715089e-06 0.78 0.00119984757967846 2.98200616910035e-06 0.800000000000001 0.00228321480737479 6.12039972853009e-06 0.820000000000001 0.00421928541305816 1.25693798289398e-05 0.840000000000001 0.00750198257472514 2.57845458233974e-05 0.860000000000001 0.0127740353111081 5.26997849570039e-05 0.880000000000001 0.0208489448534435 0.000106986538807598 0.900000000000001 0.0327517873220481 0.000214960407511459 0.920000000000001 0.0497103723132724 0.000425489465881438 0.940000000000001 0.0728898024039094 0.000830560965643238 0.960000000000001 0.098128076203634 0.00253092057340796 0.980000000000001 0.1232894448765 0.00651643998953074 1 0.154578896328181 0.0118028096560412 1.02 0.19275535694041 0.020157150025369 1.04 0.237965777104734 0.0345327187725261 0.3 2.57651039531273e-09 1.51979680262695e-10 0.32 4.74896264741583e-09 2.1955504568156e-10 0.34 8.7497397234387e-09 3.21221257323166e-10 0.36 1.61125954381732e-08 4.77284741736921e-10 0.38 2.96525152145538e-08 7.22011033983275e-10 0.4 5.45299964605836e-08 1.11417419648823e-09 0.42 1.0019295938066e-07 1.75597756086904e-09 0.44 1.83914946615155e-07 2.82722636059125e-09 0.46 3.37236387703284e-07 4.64717965481241e-09 0.48 6.1766565556544e-07 7.78691084980576e-09 0.5 1.12984551926234e-06 1.32738349747916e-08 0.52 2.06373552436369e-06 2.2964629134876e-08 0.54 3.76336686371512e-06 4.02260340613563e-08 0.56 6.84624659935722e-06 7.11788691846091e-08 0.58 1.2434890799234e-05 1.26972730008384e-07 0.6 2.25458444355248e-05 2.2794727261061e-07 0.62 4.08213237902078e-05 4.11247048438437e-07 0.64 7.38277117797363e-05 7.44757747992137e-07 0.66 0.000133333708467293 1.35260906002234e-06 0.68 0.000240170522137407 2.46182483361088e-06 0.7 0.00043041910878824 4.48757731493129e-06 0.72 0.000764399719491398 8.18870969541828e-06 0.74 0.00133765339852449 1.49504893795837e-05 0.76 0.00229072230297634 2.72955319915732e-05 0.78 0.00381339423616651 4.97968936157531e-05 0.800000000000001 0.00614303596572645 9.06782614935005e-05 0.820000000000001 0.00956270820284699 0.000164524203982894 0.840000000000001 0.0144019219195247 0.000296616026814989 0.860000000000001 0.0210303583503019 0.000529351130673394 0.880000000000001 0.0298212191573765 0.00093281891203291 0.900000000000001 0.0409750418576181 0.00166528603825249 0.920000000000001 0.0542523862456194 0.00328420198913815 0.940000000000001 0.0706368480601613 0.0062500518035505 0.960000000000001 0.0913515353291379 0.0111153135365626 0.980000000000001 0.116972266554939 0.0193944911641986 1 0.147103543137387 0.0339772919794145 1.02 0.180170064902711 0.0600778345312299 1.04 0.214721607379777 0.10690442822967 0.3 2.58547049255642e-09 1.50596400939089e-10 0.32 4.76437602125237e-09 2.17621246355002e-10 0.34 8.77684294318006e-09 3.18401149324126e-10 0.36 1.61608689421908e-08 4.73043012073216e-10 0.38 2.97391086816202e-08 7.15498072331357e-10 0.4 5.46858975814557e-08 1.1040443038569e-09 0.42 1.00474076973268e-07 1.7401223467241e-09 0.44 1.8442197661957e-07 2.80234682914334e-09 0.46 3.38150358928499e-07 4.60814739154352e-09 0.48 6.19311355370335e-07 7.72579997367395e-09 0.5 1.13280406739164e-06 1.31784756840646e-08 0.52 2.06904312340031e-06 2.2816468249236e-08 0.54 3.77286417219705e-06 3.9996997782469e-08 0.56 6.8631466376791e-06 7.08270142054104e-08 0.58 1.24649001946092e-05 1.26435286315683e-07 0.6 2.2598944970078e-05 2.27131389733889e-07 0.62 4.09149991128366e-05 4.10015845088273e-07 0.64 7.39925194080823e-05 7.42910546445164e-07 0.66 0.000133622733523342 1.34985423380162e-06 0.68 0.000240675001392237 2.45774404048217e-06 0.7 0.000431293938218362 4.48157963659472e-06 0.72 0.000765906695986277 8.17996899591343e-06 0.74 0.001340243472933 1.4937826701535e-05 0.76 0.00229521028579809 2.72770704437029e-05 0.78 0.00382131812020359 4.97688410986289e-05 0.800000000000001 0.00615727749523514 9.06306590775311e-05 0.820000000000001 0.00958836082294144 0.000164426380191401 0.840000000000001 0.014447433529438 0.00029636214999811 0.860000000000001 0.0211099512957896 0.000528460232399949 0.880000000000001 0.0299687465464401 0.000927110749413069 0.900000000000001 0.0413883643804604 0.00159081081755849 0.920000000000001 0.0556686437364803 0.00267121132174286 0.940000000000001 0.0733014072333396 0.00494400027168811 0.960000000000001 0.0954951904149959 0.00998043605871667 0.980000000000001 0.123459441744362 0.0178909312895812 1 0.158400586481108 0.0311783666843501 1.02 0.200704884161559 0.0545928000484104 1.04 0.24889222725564 0.0968968882787394 0.3 2.60474474005098e-09 1.38303763418873e-10 0.32 4.79716845145076e-09 1.97187212604836e-10 0.34 8.83315313204629e-09 2.84265724374394e-10 0.36 1.62580914712489e-08 4.1589460648455e-10 0.38 2.99074952334844e-08 6.1977694967441e-10 0.4 5.49780397734038e-08 9.43812028719361e-10 0.42 1.00981350316241e-07 1.47224912736382e-09 0.44 1.85303024574019e-07 2.35530903017602e-09 0.46 3.39680406177404e-07 3.8636530068691e-09 0.48 6.21967455916921e-07 6.48875362129761e-09 0.5 1.13741190846378e-06 1.11281491426223e-08 0.52 2.07702889838781e-06 1.94275139334538e-08 0.54 3.78668554260703e-06 3.44122005011986e-08 0.56 6.88695912312726e-06 6.16587890167292e-08 0.58 1.25058828740937e-05 1.11430023780304e-07 0.6 2.26692674280255e-05 2.02653423871779e-07 0.62 4.10352504522886e-05 3.70203918463551e-07 0.64 7.4197147581049e-05 6.78339144640516e-07 0.66 0.000133967910307854 1.24545584401661e-06 0.68 0.000241247478323378 2.28970978630633e-06 0.7 0.000432213320371471 4.21302714733269e-06 0.72 0.00076729859177719 7.75555536041181e-06 0.74 0.00134213749979529 1.4278423464258e-05 0.76 0.00229731011281495 2.62768848508735e-05 0.78 0.00382265237897125 4.82975358172696e-05 0.800000000000001 0.00615584839859386 8.85401512834029e-05 0.820000000000001 0.00958088943771848 0.000161556429548837 0.840000000000001 0.0144291158788254 0.000292531933424061 0.860000000000001 0.0210741008572288 0.000523419565586319 0.880000000000001 0.0299065463743952 0.000920375859176442 0.900000000000001 0.0412889733614594 0.00158086143471238 0.920000000000001 0.0555226152251196 0.00263984039674062 0.940000000000001 0.0729009743472928 0.00429035793666013 0.960000000000001 0.0956193681794297 0.00794090885887558 0.980000000000001 0.125499892881151 0.0164945595779074 1 0.161963490833178 0.0292810222130477 1.02 0.207300389670314 0.0509030476320217 1.04 0.262230469293155 0.0893092423684458 0.3 4.39847332277165e-08 1.66061274487208e-09 0.32 7.5205265085276e-08 2.66722239972829e-09 0.34 1.28576148339836e-07 4.3033231618125e-09 0.36 2.19749614993192e-07 6.98767651799882e-09 0.38 3.75375732888485e-07 1.14265497410975e-08 0.4 6.40769543120397e-07 1.8814101496189e-08 0.42 1.09286788404183e-06 3.1173395911477e-08 0.44 1.86208497693587e-06 5.19370459122105e-08 0.46 3.16763425850944e-06 8.6936265434694e-08 0.48 5.38286747224945e-06 1.46086083387271e-07 0.5 9.13451977318563e-06 2.46257298164611e-07 0.52 1.54799485479222e-05 4.16171398782725e-07 0.54 2.6200908568746e-05 7.04743435533462e-07 0.56 4.42944780305724e-05 1.19529967365777e-06 0.58 7.47768478966562e-05 2.02979886299299e-06 0.6 0.000125963034841795 3.45006920763698e-06 0.62 0.000211417896598277 5.86793380923295e-06 0.64 0.000352724705519136 9.9842237444096e-06 0.66 0.000582967522731134 1.6990070299242e-05 0.68 0.000950287655101869 2.89053910111208e-05 0.7 0.00152029051092888 4.91425474269373e-05 0.72 0.00237622858023722 8.34297616099828e-05 0.74 0.00361726049377373 0.000141283388514279 0.76 0.00535627875194617 0.00023825243205254 0.78 0.00771762612434816 0.000399098638789708 0.800000000000001 0.0108323460191819 0.000661797770404465 0.820000000000001 0.0148281722242745 0.00108169991853794 0.840000000000001 0.0198156512134851 0.00173475599932259 0.860000000000001 0.0258788900828913 0.00271969035026993 0.880000000000001 0.0330856827706764 0.00416528383691457 0.900000000000001 0.0415768814603544 0.00629562333239426 0.920000000000001 0.0521227429249222 0.00986275718183796 0.940000000000001 0.0661520885897061 0.0162581286127165 0.960000000000001 0.0843952490387625 0.0268032292652905 0.980000000000001 0.108403443636956 0.0447506810643055 1 0.140867992742482 0.0778243851656571 1.02 0.183463373113595 0.142710435746615 1.04 0.231410399634789 0.264163867345185 0.3 4.41177997164372e-08 1.64623285745145e-09 0.32 7.54283287967881e-08 2.64580354702864e-09 0.34 1.28950583775205e-07 4.27138952824095e-09 0.36 2.20378566543772e-07 6.94008305669489e-09 0.38 3.76432358565684e-07 1.1355711874395e-08 0.4 6.42544126908533e-07 1.87088805639467e-08 0.42 1.09584618745186e-06 3.10174963199295e-08 0.44 1.86707813823545e-06 5.17067170000381e-08 0.46 3.17597659658978e-06 8.65971533905003e-08 0.48 5.39679265099664e-06 1.4558829491498e-07 0.5 9.1577060508112e-06 2.45528903652407e-07 0.52 1.55184505826639e-05 4.15108695955126e-07 0.54 2.62646583821206e-05 7.03196899103169e-07 0.56 4.43996773895972e-05 1.19305354196597e-06 0.58 7.49496505732345e-05 2.026541481834e-06 0.6 0.000126244896461185 3.4453495115068e-06 0.62 0.00021187267837665 5.8610952976907e-06 0.64 0.000353446902510623 9.97429683145655e-06 0.66 0.000584090311932683 1.69755742293708e-05 0.68 0.000951991162619829 2.88839111912019e-05 0.7 0.00152281863793687 4.91097166800291e-05 0.72 0.00237993476325969 8.33766476214079e-05 0.74 0.00362270125209489 0.000141189729442991 0.76 0.00536434217085692 0.000238069542825875 0.78 0.00772964056869458 0.000398708345925474 0.800000000000001 0.010850108445679 0.000660921032125108 0.820000000000001 0.0148538873011664 0.00107971013691587 0.840000000000001 0.0198517965589518 0.00173029362495275 0.860000000000001 0.02592750749331 0.00270949449286205 0.880000000000001 0.0331419537931768 0.00413703813214321 0.900000000000001 0.0415556112558356 0.00616102707154254 0.920000000000001 0.0512710961581549 0.0089781595192576 0.940000000000001 0.0626740863400963 0.0130032103386198 0.960000000000001 0.0792998219562331 0.0212413177666067 0.980000000000001 0.102440586445627 0.0366708766696218 1 0.131233629770568 0.060930281213835 1.02 0.16929071616675 0.102975883097504 1.04 0.221765903638248 0.183975435760503 0.3 4.44083583542566e-08 1.4637067964808e-09 0.32 7.58973635544173e-08 2.35982651058182e-09 0.34 1.29708110353158e-07 3.82398311225661e-09 0.36 2.21602398238968e-07 6.24128790134749e-09 0.38 3.78409781017272e-07 1.02662901606384e-08 0.4 6.45739026980987e-07 1.70138936624423e-08 0.42 1.10100699990514e-06 2.83860969420564e-08 0.44 1.87541112715614e-06 4.76311962351535e-08 0.46 3.18940089086308e-06 8.03038842896467e-08 0.48 5.41841403868341e-06 1.3589444173888e-07 0.5 9.19247658867419e-06 2.30639628505631e-07 0.52 1.55742641055053e-05 3.92304971481562e-07 0.54 2.63540453694383e-05 6.68369485249542e-07 0.56 4.45423664369502e-05 1.14001196214138e-06 0.58 7.51761866810734e-05 1.946011379582e-06 0.6 0.000126601062142802 3.32356703401544e-06 0.62 0.000212423061795575 5.67793954415564e-06 0.64 0.000354272605371263 9.7010227211181e-06 0.66 0.000585269855006182 1.65724778790233e-05 0.68 0.000953547783724861 2.8298648586562e-05 0.7 0.00152462082255646 4.82771875758634e-05 0.72 0.00238155869506913 8.22206587413638e-05 0.74 0.00362328696426537 0.00013962442712294 0.76 0.00536245980102534 0.000235994757450451 0.78 0.00772313289523982 0.000395987236920614 0.800000000000001 0.0108358610090343 0.000657320242675815 0.820000000000001 0.0148275520801153 0.00107477617602623 0.840000000000001 0.0198076101609758 0.00172314561489369 0.860000000000001 0.0258582761284897 0.00269851893704646 0.880000000000001 0.0330386474170407 0.00411933720205801 0.900000000000001 0.0414042724438825 0.00613064678267465 0.920000000000001 0.0510352753752864 0.00891537333145708 0.940000000000001 0.0620687917337624 0.0127176466176107 0.960000000000001 0.0747974594182153 0.0179253624723653 0.980000000000001 0.092784298727904 0.0275339089783825 1 0.124348090537052 0.0523794914629133 1.02 0.159554988587733 0.08749415519548 1.04 0.205370800181463 0.14710279844632 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_full_subcoupl.standard0000644000175000017500000010160614163340332027176 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618364627327e-13 1.43177817828401e-13 0.32 6.81733756110357e-13 2.15025316426452e-13 0.34 6.64859527742805e-13 3.10463604183037e-13 0.36 6.53616065267664e-13 4.47044795736405e-13 0.38 6.58137160784754e-13 6.55436026492405e-13 0.4 7.06775213597384e-13 9.89259198232091e-13 0.42 8.78814903861047e-13 1.54234199954301e-12 0.44 1.39584536526115e-12 2.47898320980736e-12 0.46 2.87679721575721e-12 4.08708658415894e-12 0.48 7.04925837627224e-12 6.87150641116957e-12 0.5 1.87316875353423e-11 1.17181496710574e-11 0.52 5.13518720818822e-11 2.01826730992192e-11 0.54 1.42293260020764e-10 3.49987548970653e-11 0.56 3.95517329102332e-10 6.09736807820803e-11 0.58 1.09976575582667e-09 1.06567884717216e-10 0.6 3.05579019750959e-09 1.86683988038683e-10 0.62 8.4803583948522e-09 3.27598747200571e-10 0.64 2.34973264436885e-08 5.75701624715216e-10 0.66 6.49804736305309e-08 1.01316201642308e-09 0.68 1.79275812711002e-07 1.78530517532405e-09 0.7 4.93163217027986e-07 3.15082113435906e-09 0.72 1.35162155564772e-06 5.57164093911614e-09 0.74 3.68678121151888e-06 9.878005746715e-09 0.76 9.98875923790357e-06 1.75752836185918e-08 0.78 2.68444169657234e-05 3.14248147511323e-08 0.800000000000001 7.13631648682993e-05 5.65616810448912e-08 0.820000000000001 0.00018698676384067 1.02652555733054e-07 0.840000000000001 0.000479226433711635 1.87907386461301e-07 0.860000000000001 0.00117472337990195 3.45691787470969e-07 0.880000000000001 0.00264034866282927 6.34287344151775e-07 0.900000000000001 0.005227944231063 1.1654046811349e-06 0.920000000000001 0.00903034139391357 2.31413352110934e-06 0.940000000000001 0.0137847402545773 6.4427114405849e-06 0.960000000000001 0.0188323182252152 2.81221636664751e-05 0.980000000000001 0.0233426649137857 0.000113265105026334 1 0.0268219609534571 0.000289588737832753 1.02 0.0296395459542417 0.000534059566737039 1.04 0.0323506038187342 0.000847740011008787 0.3 1.70062041942766e-12 -3.56822460569247e-13 0.32 1.68173940670497e-12 -2.84975377256185e-13 0.34 1.66487507687311e-12 -1.89538120707971e-13 0.36 1.6536588757843e-12 -5.29594838422021e-14 0.38 1.65825507618789e-12 1.55425433821144e-13 0.4 1.70710008226594e-12 4.89233046716192e-13 0.42 1.87971006591291e-12 1.0422776133543e-12 0.44 2.39831190743464e-12 1.97882515534677e-12 0.46 3.88359240058539e-12 3.58669981770593e-12 0.48 8.06797242735839e-12 6.37056316632242e-12 0.5 1.97831997049966e-11 1.12158575663119e-11 0.52 5.24935626553623e-11 1.96771246218173e-11 0.54 1.43682631689405e-10 3.44853787740277e-11 0.56 3.97586063874933e-10 6.04415750784629e-11 0.58 1.10369483408412e-09 1.05991184644917e-10 0.6 3.06480329483642e-09 1.86001673893405e-10 0.62 8.50323141283826e-09 3.26667742929809e-10 0.64 2.35578745054532e-08 5.74188717224271e-10 0.66 6.51430931250903e-08 1.01015568551262e-09 0.68 1.79714020365621e-07 1.77893390796775e-09 0.7 4.94343624279187e-07 3.13665217509135e-09 0.72 1.35480351293567e-06 5.53955284938787e-09 0.74 3.6954301852012e-06 9.80520290505612e-09 0.76 1.00129431718639e-05 1.74116098335035e-08 0.78 2.69171690284836e-05 3.10639247794348e-08 0.800000000000001 7.16139059747371e-05 5.57957196424516e-08 0.820000000000001 0.00018801645697024 1.0115389067491e-07 0.840000000000001 0.000484052535335885 1.85553253520232e-07 0.860000000000001 0.00119735747877828 3.44731266948972e-07 0.880000000000001 0.00273081505675244 6.47528979492432e-07 0.900000000000001 0.00550778046538153 1.22674667459327e-06 0.920000000000001 0.00971856216912102 2.34614919294201e-06 0.940000000000001 0.0152906421664179 4.53972622575768e-06 0.960000000000001 0.0220275870899555 8.87154001562527e-06 0.980000000000001 0.0296913096222254 1.74671482981024e-05 1 0.0380081361919025 3.61746624275604e-05 1.02 0.0465209044271084 0.000102788742580306 1.04 0.0540489096574508 0.000397090702042938 0.3 2.7006255903658e-12 -8.5682597597556e-13 0.32 2.6817530641673e-12 -7.84984427219884e-13 0.34 2.66491114995284e-12 -6.89561377569559e-13 0.36 2.65375416365048e-12 -5.53019142895919e-13 0.38 2.65850682092032e-12 -3.44727326579771e-13 0.4 2.70776531956388e-12 -1.11573829915672e-14 0.42 2.8814684261509e-12 5.41281608975429e-13 0.44 3.40296103162718e-12 1.4762891234682e-12 0.46 4.89588877629646e-12 3.08025498451586e-12 0.48 9.10050573396878e-12 5.85421685673649e-12 0.5 2.08693023166677e-11 1.06744800334208e-11 0.52 5.37215025179608e-11 1.90725974984382e-11 0.54 1.45286166993156e-10 3.37218725905902e-11 0.56 4.00184172751255e-10 5.92787167244894e-11 0.58 1.10892590619469e-09 1.03827468462827e-10 0.6 3.07700092370431e-09 1.81335737997892e-10 0.62 8.53384517644864e-09 3.15762611562836e-10 0.64 2.36371065528984e-08 5.47771725530716e-10 0.66 6.53504513111716e-08 9.45299831236816e-10 0.68 1.80258379570084e-07 1.61918628591588e-09 0.7 4.95773286225094e-07 2.74370242369677e-09 0.72 1.35856397396348e-06 4.5766281181964e-09 0.74 3.70540563134227e-06 7.45871948529144e-09 0.76 1.00400778087353e-05 1.17387460845597e-08 0.78 2.69963258496686e-05 1.74786686381493e-08 0.800000000000001 7.18777894231282e-05 2.36637488895045e-08 0.820000000000001 0.000189071447182561 2.63847055376942e-08 0.840000000000001 0.000488952858222268 1.58712578209186e-08 0.860000000000001 0.0012206702834106 -2.06707217168548e-08 0.880000000000001 0.00282745924294487 -5.45211825618825e-08 0.900000000000001 0.00582178030203719 1.3881574720666e-07 0.920000000000001 0.0105194634190239 1.29316133976693e-06 0.940000000000001 0.0169947729194925 5.41788914580803e-06 0.960000000000001 0.0252208031947919 1.8364062998421e-05 0.980000000000001 0.0351045803927632 5.80146544865056e-05 1 0.0463328878687145 0.00017645943203814 1.02 0.058098556167137 0.000499597586771547 1.04 0.0689987927301404 0.00124641157753244 0.3 1.25208431236844e-12 3.00903049250344e-12 0.32 1.95929488382079e-12 4.73242437850974e-12 0.34 3.62347330854151e-12 7.43265076183052e-12 0.36 7.50235672557093e-12 1.16787904595398e-11 0.38 1.6504291444326e-11 1.83728873060234e-11 0.4 3.73506587872637e-11 2.89457883748649e-11 0.42 8.55653012763517e-11 4.56690426356739e-11 0.44 1.96977263653031e-10 7.21525015598146e-11 0.46 4.54214541830552e-10 1.14140018405079e-10 0.48 1.04765998820983e-09 1.80785773764715e-10 0.5 2.41552063779997e-09 2.86710143994803e-10 0.52 5.56521650997345e-09 4.55330145296751e-10 0.54 1.28095179718906e-08 7.242963656784e-10 0.56 2.94491129331015e-08 1.15446073359213e-09 0.58 6.76085136600218e-08 1.84490010506738e-09 0.6 1.54953220574001e-07 2.95834534562118e-09 0.62 3.54419982258301e-07 4.76564577008363e-09 0.64 8.08647117166647e-07 7.72485310874074e-09 0.66 1.83941900663313e-06 1.26266107393993e-08 0.68 4.16897834591385e-06 2.08696113595877e-08 0.7 9.40563047226004e-06 3.49989115273778e-08 0.72 2.11216451314843e-05 5.97883003854206e-08 0.74 4.71864377248399e-05 1.04468597754053e-07 0.76 0.000104898548757905 1.87388854842487e-07 0.78 0.000231923721751661 3.45802995185276e-07 0.800000000000001 0.000507459020266227 6.56067644743692e-07 0.820000000000001 0.00108474876765365 1.27313891269171e-06 0.840000000000001 0.00221571474324916 2.4995912259671e-06 0.860000000000001 0.00421212997071901 4.8864901102425e-06 0.880000000000001 0.00731745716225232 9.35749712686876e-06 0.900000000000001 0.0115960807512601 1.73987966780167e-05 0.920000000000001 0.0169345545321305 3.19454324785002e-05 0.940000000000001 0.0230575928014931 6.48067242550139e-05 0.960000000000001 0.0293488936152794 0.000176137454068598 0.980000000000001 0.0348164356514568 0.00046242948115477 1 0.0394278645049445 0.000878921341831523 1.02 0.0437484903307399 0.00137264678642711 1.04 0.0480204658090537 0.00194136662972773 0.3 2.25388366955033e-12 2.50879707308859e-12 0.32 2.96338621549233e-12 4.23194474479731e-12 0.34 4.63278147088209e-12 6.93166756100081e-12 0.36 8.52354312416833e-12 1.11767801449844e-11 0.38 1.75525287706309e-11 1.78687880977068e-11 0.4 3.84605031057889e-11 2.84374540485164e-11 0.42 8.68154344172004e-11 4.51521502488097e-11 0.44 1.98546758321712e-10 7.16183766442786e-11 0.46 4.56510680879961e-10 1.13571324852025e-10 0.48 1.05160825870202e-09 1.8014801462371e-10 0.5 2.42322159615841e-09 2.85934992640831e-10 0.52 5.58143068998253e-09 4.54282947950507e-10 0.54 1.28450146996409e-08 7.22713200247468e-10 0.56 2.952820211465e-08 1.15182740743201e-09 0.58 6.77859365517225e-08 1.8401917040004e-09 0.6 1.55351934948236e-07 2.94964223260802e-09 0.62 3.55315635501397e-07 4.74926222508744e-09 0.64 8.10657767086835e-07 7.69383766477202e-09 0.66 1.84393863760104e-06 1.25680505371696e-08 0.68 4.17921215983849e-06 2.07600717157353e-08 0.7 9.42926270868204e-06 3.47977089576792e-08 0.72 2.11787835490622e-05 5.94311724391424e-08 0.74 4.73365747228397e-05 1.0388179665233e-07 0.76 0.000105344406775137 1.86623099006391e-07 0.78 0.000233435415123384 3.45759253960865e-07 0.800000000000001 0.000513077944411147 6.61946273030662e-07 0.820000000000001 0.00110592401941927 1.30960029789456e-06 0.840000000000001 0.0022895900548573 2.6711811592441e-06 0.860000000000001 0.00443249535079989 5.58614566947343e-06 0.880000000000001 0.0078583362305106 1.18664854916887e-05 0.900000000000001 0.012701457486777 2.52930710331632e-05 0.920000000000001 0.0188933222548399 5.33724546841047e-05 0.940000000000001 0.0262336773934984 0.000110027696243286 0.960000000000001 0.0344452927704641 0.000218993762163134 0.980000000000001 0.0431774817394007 0.000419890080080172 1 0.0518040800262039 0.000808134783493665 1.02 0.0593035344957383 0.0015817505970484 1.04 0.0659233995116331 0.00272317768259437 0.3 3.25829989116443e-12 2.00583212634495e-12 0.32 3.97303057028771e-12 3.72563907567958e-12 0.34 5.6538448925305e-12 6.41828025000358e-12 0.36 9.5695520969162e-12 1.06484080053904e-11 0.38 1.86530448112082e-11 1.73087653905611e-11 0.4 3.96801496227727e-11 2.78107031233086e-11 0.42 8.82955217025127e-11 4.43849821411834e-11 0.44 2.00596363328948e-10 7.0556294748528e-11 0.46 4.59805952719082e-10 1.11891068496184e-10 0.48 1.05762850525184e-09 1.77174637211029e-10 0.5 2.43520314273625e-09 2.80262371443564e-10 0.52 5.60645198761415e-09 4.42988580648248e-10 0.54 1.28985499861278e-08 6.99738295564785e-10 0.56 2.96440533412369e-08 1.10464594742404e-09 0.58 6.80378634370948e-08 1.74298712374777e-09 0.6 1.55900703873798e-07 2.74939216095132e-09 0.62 3.56511392378603e-07 4.33751188087428e-09 0.64 8.13263910036943e-07 6.84981528562563e-09 0.66 1.84962969530847e-06 1.08449182991477e-08 0.68 4.19172948454298e-06 1.72592874506353e-08 0.7 9.45725653686509e-06 2.7728451695617e-08 0.72 2.12441452209199e-05 4.5247721843297e-08 0.74 4.7501817409241e-05 7.56400266209488e-08 0.76 0.000105816967623172 1.30875600203646e-07 0.78 0.000234993897367888 2.37099078493467e-07 0.800000000000001 0.000518812351634042 4.55750193317076e-07 0.820000000000001 0.00112775650464934 9.43831027100095e-07 0.840000000000001 0.00236812471641681 2.13448170157324e-06 0.860000000000001 0.00467799689436789 5.27360887167222e-06 0.880000000000001 0.00849367222323007 1.39471636331218e-05 0.900000000000001 0.0140579008364171 3.83485623369499e-05 0.920000000000001 0.0213197316261625 0.00010685159356885 0.940000000000001 0.0298757274217402 0.000292164452555144 0.960000000000001 0.0388972762926933 0.000742850567635558 0.980000000000001 0.047329925526742 0.00165326910245243 1 0.0544869105697576 0.00314258648507903 1.02 0.0602977598598347 0.00519933931820338 1.04 0.0650063679065974 0.0077433961765254 0.3 9.67921337082804e-12 1.65537133080976e-11 0.32 1.9948459628458e-11 2.51291099125205e-11 0.34 4.19986800191931e-11 3.81448443038203e-11 0.36 8.92976395348689e-11 5.79257814256821e-11 0.38 1.9068011515625e-10 8.80260814306993e-11 0.4 4.07841593552602e-10 1.3389032708388e-10 0.42 8.72689556224352e-10 2.03881351328825e-10 0.44 1.86701090968592e-09 3.10889687218202e-10 0.46 3.99219286611517e-09 4.74877398353528e-10 0.48 8.53028250960167e-09 7.26947002133364e-10 0.5 1.82108139995214e-08 1.11594764272802e-09 0.52 3.88361517173171e-08 1.71939698688572e-09 0.54 8.2718116421269e-08 2.66194614547639e-09 0.56 1.75922587572831e-07 4.1472333130055e-09 0.58 3.73485115159808e-07 6.51459872700706e-09 0.6 7.91228754043365e-07 1.03422758302483e-08 0.62 1.67202291385515e-06 1.66404064077864e-08 0.64 3.52331695551075e-06 2.72204781130727e-08 0.66 7.39803709456531e-06 4.54171704486494e-08 0.68 1.5480448117314e-05 7.75230328683698e-08 0.7 3.22727993284132e-05 1.35677772079411e-07 0.72 6.70625105983203e-05 2.43738553281016e-07 0.74 0.000138952391025142 4.49246137191408e-07 0.76 0.000286627994407095 8.47692074390189e-07 0.78 0.000585424982775618 1.63077864773608e-06 0.800000000000001 0.00117103426671757 3.17818906756237e-06 0.820000000000001 0.00225549389727933 6.21797640110224e-06 0.840000000000001 0.00410066939414709 1.20720275804214e-05 0.860000000000001 0.00693166922455406 2.29729898667463e-05 0.880000000000001 0.0108489626103208 4.24104648765573e-05 0.900000000000001 0.0158116948332266 7.5561175064587e-05 0.920000000000001 0.021668116805579 0.000131176794128069 0.940000000000001 0.0281216023969818 0.000236139169641285 0.960000000000001 0.03451256136551 0.000482303131537182 0.980000000000001 0.0402273455249462 0.000939599143274199 1 0.0455120192683104 0.00153965503461938 1.02 0.0506389991225638 0.00224310904784561 1.04 0.0556470336528284 0.0030560719840494 0.3 1.07081015650423e-11 1.60500899543287e-11 0.32 2.10093171338247e-11 2.46222245948837e-11 0.34 4.31269514375901e-11 3.76317942416158e-11 0.36 9.05681013452124e-11 5.74011151407419e-11 0.38 1.92250511109444e-10 8.7479595695952e-11 0.4 4.10044607133052e-10 1.33302994309887e-10 0.42 8.76226503673222e-10 2.03217825237931e-10 0.44 1.87335920512101e-09 3.10084580019112e-10 0.46 4.00446198837649e-09 4.73810287697381e-10 0.48 8.55500903494327e-09 7.2539717973986e-10 0.5 1.82617181987374e-08 1.11351272072936e-09 0.52 3.89419810233425e-08 1.71534758620119e-09 0.54 8.29389830854644e-08 2.65494954826163e-09 0.56 1.76383935794411e-07 4.13493932798341e-09 0.58 3.74448337794403e-07 6.4928247833679e-09 0.6 7.93238705619795e-07 1.03036916943378e-08 0.62 1.67622107081704e-06 1.65723730884037e-08 0.64 3.53213167162971e-06 2.71017712686172e-08 0.66 7.41678556424778e-06 4.52140511301121e-08 0.68 1.55215712897404e-05 7.71883146424498e-08 0.7 3.23682253478595e-05 1.35172381806247e-07 0.72 6.73046521443305e-05 2.4315841305748e-07 0.74 0.000139640432332504 4.49403932943326e-07 0.76 0.000288801584570581 8.52590789028422e-07 0.78 0.000592744542944367 1.65770592181485e-06 0.800000000000001 0.0011957114404337 3.29705270382098e-06 0.820000000000001 0.00233319094964109 6.69371831998597e-06 0.840000000000001 0.00431523940850636 1.38255485614598e-05 0.860000000000001 0.00743257807983983 2.88738776725498e-05 0.880000000000001 0.0118354187352847 6.03809778401221e-05 0.900000000000001 0.0174848702341862 0.000124841559370654 0.920000000000001 0.0241821193571017 0.000251539064635772 0.940000000000001 0.0316154334327437 0.000486530539629921 0.960000000000001 0.0394052309585262 0.000891589969438103 0.980000000000001 0.0471412073220778 0.00153951425929238 1 0.0543537608841537 0.00252819042410432 1.02 0.0606989137500119 0.00396152310344726 1.04 0.0664266415816203 0.00579002667304037 0.3 1.17778706551336e-11 1.55036634553302e-11 0.32 2.21504904653759e-11 2.40307911782877e-11 0.34 4.44126317609797e-11 3.69520332733322e-11 0.36 9.21462849422589e-11 5.65483185643122e-11 0.38 1.944208836324e-10 8.62884374962534e-11 0.4 4.13414148814142e-10 1.31451425371143e-10 0.42 8.82024804115583e-10 2.00079750824546e-10 0.44 1.8840773701715e-09 3.0444532404549e-10 0.46 4.02514690130249e-09 4.63318380873034e-10 0.48 8.59588392206227e-09 7.05510908165422e-10 0.5 1.83434846440454e-08 1.07548167656599e-09 0.52 3.91065354473333e-08 1.64235784722481e-09 0.54 8.32710532135596e-08 2.5147891799864e-09 0.56 1.77054732273905e-07 3.86610389194086e-09 0.58 3.75803690238728e-07 5.97833060016665e-09 0.6 7.9597791779568e-07 9.32201854842672e-09 0.62 1.68176556636281e-06 1.47061404151869e-08 0.64 3.54341277250815e-06 2.35687626349761e-08 0.66 7.43998613243391e-06 3.8560086044808e-08 0.68 1.55706535071518e-05 6.47245025288282e-08 0.7 3.24776441078748e-05 1.11977427000029e-07 0.72 6.75708151232607e-05 2.00326846612275e-07 0.74 0.000140368559313425 3.71207943488885e-07 0.76 0.000291044142419971 7.13043849949488e-07 0.78 0.000600236820586377 1.42192351613301e-06 0.800000000000001 0.00122124265782748 2.9547960281587e-06 0.820000000000001 0.00241588775323648 6.43911885162322e-06 0.840000000000001 0.00455316164486492 1.47990439450948e-05 0.860000000000001 0.00801182032798996 3.58171860844806e-05 0.880000000000001 0.0130052754271507 9.00953512972325e-05 0.900000000000001 0.0194314649369562 0.000229350506842131 0.920000000000001 0.0267878702937494 0.000565141572122746 0.940000000000001 0.0342262354554946 0.00127181503164004 0.960000000000001 0.0409362928648085 0.002505674646711 0.980000000000001 0.0465657343118055 0.00431188829943343 1 0.0511731263680885 0.00663845221054045 1.02 0.0549619883212495 0.00939952204000897 1.04 0.0581304924814587 0.012512456583152 0.3 6.94838521179469e-11 5.85971906515697e-11 0.32 1.40284990341215e-10 8.66316466104695e-11 0.34 2.83998851867612e-10 1.2815033672249e-10 0.36 5.75546213024366e-10 1.89754313886344e-10 0.38 1.16664866171524e-09 2.81371069856811e-10 0.4 2.36432111339477e-09 4.18019081518068e-10 0.42 4.78927685101191e-09 6.22590340822639e-10 0.44 9.69518811628825e-09 9.30311511069829e-10 0.46 1.96111589075643e-08 1.39603394990015e-09 0.48 3.96322535295287e-08 2.10640037885063e-09 0.5 8.00060400005768e-08 3.20062251965779e-09 0.52 1.61302813027715e-07 4.90670605531328e-09 0.54 3.24717635646978e-07 7.60623255824018e-09 0.56 6.52530113575199e-07 1.19523183949276e-08 0.58 1.30863747957822e-06 1.90886578735621e-08 0.6 2.61860412950919e-06 3.10626701299245e-08 0.62 5.22683098465149e-06 5.16151292718758e-08 0.64 1.03978863909693e-05 8.77054361947215e-08 0.66 2.0630055154295e-05 1.52481946709934e-07 0.68 4.08226354075473e-05 2.7109965555698e-07 0.7 8.06086114335377e-05 4.92149438007338e-07 0.72 0.000158807350238449 9.10098788311326e-07 0.74 0.0003115000758011 1.70907217585125e-06 0.76 0.000605233257422428 3.24685516177856e-06 0.78 0.00115424949741857 6.21063947291249e-06 0.800000000000001 0.00213178355972308 1.18884694765116e-05 0.820000000000001 0.00375349003786991 2.25985949179228e-05 0.840000000000001 0.00622005183775447 4.2283472072231e-05 0.860000000000001 0.00964945584441289 7.71969837012929e-05 0.880000000000001 0.0140481438402156 0.000136514699098126 0.900000000000001 0.0193254352407331 0.000232828645872113 0.920000000000001 0.0253108897867276 0.000384654330569812 0.940000000000001 0.0316952094700177 0.000634512699345753 0.960000000000001 0.037918036944588 0.00108024405114995 0.980000000000001 0.0437034196091474 0.00176136741970194 1 0.0492763946269307 0.0026142331562615 1.02 0.054735716969076 0.00360909916778389 1.04 0.0600291639366769 0.00475026207444607 0.3 7.07023324771298e-11 5.80707082641274e-11 0.32 1.41720625433287e-10 8.60841020828374e-11 0.34 2.85867857167839e-10 1.2756521439653e-10 0.36 5.78280195846721e-10 1.89102360689762e-10 0.38 1.17110899862707e-09 2.80600663039908e-10 0.4 2.37222614363729e-09 4.17039482688108e-10 0.42 4.80405217709613e-09 6.21242734246378e-10 0.44 9.72365664241347e-09 9.2831920175691e-10 0.46 1.96668941376471e-08 1.39291727174533e-09 0.48 3.97422200464926e-08 2.10133236593773e-09 0.5 8.02237171928814e-08 3.19217444825388e-09 0.52 1.61734090441904e-07 4.89246714638847e-09 0.54 3.25571903032915e-07 7.58212504085818e-09 0.56 6.54221451414073e-07 1.19115373059927e-08 0.58 1.31198769805966e-06 1.90200246879548e-08 0.6 2.62526137918729e-06 3.09482968696484e-08 0.62 5.24017416502242e-06 5.14278617087147e-08 0.64 1.04250768441347e-05 8.74092658125135e-08 0.66 2.06875243288988e-05 1.52047785124318e-07 0.68 4.09516208087804e-05 2.70588739487632e-07 0.7 8.09243104258715e-05 4.92060468823285e-07 0.72 0.000159661431985665 9.12725173528764e-07 0.74 0.000314021534910036 1.7236502421708e-06 0.76 0.000613055420495699 3.30860139041486e-06 0.78 0.00117845849837132 6.44861248544911e-06 0.800000000000001 0.00220239737173599 1.27532449556617e-05 0.820000000000001 0.00393764397030147 2.55587692827346e-05 0.840000000000001 0.00663446457600723 5.171341545459e-05 0.860000000000001 0.0104455577545196 0.00010482478842215 0.880000000000001 0.0153625607133742 0.000210342208225555 0.900000000000001 0.0212099992397044 0.000411454063356387 0.920000000000001 0.027677169802304 0.00077149265196172 0.940000000000001 0.0343817909653316 0.00136615709319718 0.960000000000001 0.0409627046023271 0.0022650414274055 0.980000000000001 0.0471566206373078 0.00351587253973002 1 0.052814960980924 0.0051479756686464 1.02 0.0579011214213329 0.00718369508453752 1.04 0.0624995306738131 0.00960517704729098 0.3 7.22222002999232e-11 5.72277555398211e-11 0.32 1.43716327506979e-10 8.49451080547871e-11 0.34 2.88775080453151e-10 1.25876688628559e-10 0.36 5.82933815059624e-10 1.863956074383e-10 0.38 1.17910907212005e-09 2.76010752077407e-10 0.4 2.38663957074504e-09 4.08973473751584e-10 0.42 4.83075764359081e-09 6.06773067781319e-10 0.44 9.77392173627876e-09 9.02077433291851e-10 0.46 1.97623107327726e-08 1.34508225756939e-09 0.48 3.99241488485276e-08 2.01398310603767e-09 0.5 8.05713462621988e-08 3.03270171729261e-09 0.52 1.62398945535138e-07 4.60172068325984e-09 0.54 3.26843842276693e-07 7.05318991501136e-09 0.56 6.56655395937397e-07 1.09519264206885e-08 0.58 1.31665004567771e-06 1.72846557136958e-08 0.6 2.63422167771358e-06 2.78213716162485e-08 0.62 5.25753183276669e-06 4.58166761165643e-08 0.64 1.04591572275727e-05 7.73944347729211e-08 0.66 2.0756726647777e-05 1.34270477969214e-07 0.68 4.11002872747361e-05 2.39254862655376e-07 0.7 8.12723565242106e-05 4.37384840411439e-07 0.72 0.000160567646003771 8.19047551258383e-07 0.74 0.00031663074204308 1.56947340601372e-06 0.76 0.000621082669380077 3.07938689664814e-06 0.78 0.00120351696010194 6.20638984799457e-06 0.800000000000001 0.00227725059557225 1.29266813046887e-05 0.820000000000001 0.00413953061068081 2.8010584571647e-05 0.840000000000001 0.00710350968218705 6.32841306822215e-05 0.860000000000001 0.0113572233253236 0.000147759337479001 0.880000000000001 0.0168118931023305 0.000347614518548754 0.900000000000001 0.0230137920969627 0.000788489555105011 0.920000000000001 0.029240558835654 0.00163776883777571 0.940000000000001 0.0348625579508454 0.00301934930994661 0.960000000000001 0.0396270464486069 0.0049522319293421 0.980000000000001 0.0435793910662216 0.00737937003539867 1 0.0468691673595928 0.010220118085265 1.02 0.0496455141719318 0.0133981442038851 1.04 0.0520281511944411 0.016849669246284 0.3 2.60007560942568e-09 5.96022155406369e-10 0.32 4.77252759393615e-09 8.56035727484957e-10 0.34 8.77330391595545e-09 1.23623802704372e-09 0.36 1.61361574311738e-08 1.79791636859482e-09 0.38 2.96760705350372e-08 2.63767659298861e-09 0.4 5.45535307205697e-08 3.91043743255005e-09 0.42 1.00216424734972e-07 5.86889580638069e-09 0.44 1.83938179838551e-07 8.9321060462492e-09 0.46 3.37258822029568e-07 1.3805716801492e-08 0.48 6.17685301534587e-07 2.16945753050186e-08 0.5 1.12985535611609e-06 3.46811360022117e-08 0.52 2.06371075088908e-06 5.64026342710764e-08 0.54 3.76322004466515e-06 9.3268159341689e-08 0.56 6.84567152513291e-06 1.56653554818097e-07 0.58 1.2432817088004e-05 2.66870216899623e-07 0.6 2.25385506527468e-05 4.60355365853085e-07 0.62 4.07959172028661e-05 8.02714866722219e-07 0.64 7.37397254292141e-05 1.41239147990716e-06 0.66 0.000133030978099535 2.50357676609776e-06 0.68 0.000239139818437625 4.46377647669892e-06 0.7 0.000426972526603404 7.9930491337483e-06 0.72 0.000753212409905901 1.43505487371471e-05 0.74 0.00130296687548689 2.57802426680518e-05 0.76 0.00218987329461162 4.6215294872795e-05 0.78 0.00354288424413919 8.23663471139378e-05 0.800000000000001 0.00547982553551004 0.000145229765719483 0.820000000000001 0.0080780814433468 0.000251823342028552 0.840000000000001 0.0113538639375449 0.000426516559676397 0.860000000000001 0.0152549678588025 0.000700857511319361 0.880000000000001 0.0196684595291283 0.00111093910696465 0.900000000000001 0.0244419264562635 0.00169282058050936 0.920000000000001 0.0294084345735964 0.00247926650482441 0.940000000000001 0.0344004286394657 0.00350332920612026 0.960000000000001 0.0392666375147833 0.00480471291742422 0.980000000000001 0.0439396332438996 0.0064033291064653 1 0.0484489902450828 0.00826618582131807 1.02 0.0528130590587101 0.0103480535568334 1.04 0.0570043820878 0.0126222671205704 0.3 2.60903598117877e-09 5.94638914213481e-10 0.32 4.78794187051933e-09 8.54102032632792e-10 0.34 8.80041010702231e-09 1.23341820478561e-09 0.36 1.61844407099082e-08 1.79367542343389e-09 0.38 2.97626961120963e-08 2.63116580252358e-09 0.4 5.47095371071935e-08 3.90031361625107e-09 0.42 1.00497886549187e-07 5.85305782610155e-09 0.44 1.84446332235608e-07 8.9072761154929e-09 0.46 3.38176441789374e-07 1.37668294679594e-08 0.48 6.19342821935642e-07 2.16338942163137e-08 0.5 1.13285205503582e-06 3.45870689196894e-08 0.52 2.06914094885533e-06 5.62584063381462e-08 0.54 3.77310945850739e-06 9.30512181346152e-08 0.56 6.86381694529608e-06 1.56339188293692e-07 0.58 1.24667661609721e-05 2.66449776517997e-07 0.6 2.26040581065219e-05 4.59906545233563e-07 0.62 4.09285134891905e-05 8.02639978618541e-07 0.64 7.40260885004169e-05 1.41419859931495e-06 0.66 0.000133696887539103 2.51239293312881e-06 0.68 0.00024079755538091 4.49632683209729e-06 0.7 0.000431295483415156 8.10260190369579e-06 0.72 0.000764638096313522 1.47030858846492e-05 0.74 0.00133242073733095 2.68784559191233e-05 0.76 0.00226112380416862 4.95206816582136e-05 0.78 0.00369933531611253 9.18937776933805e-05 0.800000000000001 0.00578441956507651 0.000171223422611851 0.820000000000001 0.00859611561669793 0.000318111512646627 0.840000000000001 0.0121127307375918 0.000582483431868611 0.860000000000001 0.0161883403965169 0.00103522554653671 0.880000000000001 0.0205744984394798 0.00175837954282507 0.900000000000001 0.0249939880906711 0.00282371495200759 0.920000000000001 0.0292254020238737 0.00427292730104609 0.940000000000001 0.0331428018413803 0.00611266026514705 0.960000000000001 0.0367038886962299 0.00832278679753377 0.980000000000001 0.0399181394476208 0.0108684286315111 1 0.0428194692451687 0.0137095721824653 1.02 0.0454497382706285 0.0168069856003495 1.04 0.0478507708734818 0.0201252198079988 0.3 2.62831051438462e-09 5.82346318601756e-10 0.32 4.8207352383652e-09 8.33668108844124e-10 0.34 8.85672337561315e-09 1.19928307107164e-09 0.36 1.62816733492989e-08 1.73652779829666e-09 0.38 2.99311158098278e-08 2.53544680088087e-09 0.4 5.50017877522998e-08 3.74008719871665e-09 0.42 1.01005513891828e-07 5.58520107091781e-09 0.44 1.85328532490374e-07 8.46028545349651e-09 0.46 3.39710228798038e-07 1.30224725465807e-08 0.48 6.22011020615339e-07 2.03972558668371e-08 0.5 1.13749888915049e-06 3.25379729738159e-08 0.52 2.0772518733839e-06 5.2873215782126e-08 0.54 3.78733065093799e-06 8.74780658343819e-08 0.56 6.8888980924257e-06 1.47207303030633e-07 0.58 1.25117593335248e-05 2.51558737778363e-07 0.6 2.26870060495936e-05 4.35789507479167e-07 0.62 4.10883794163641e-05 7.63973435341477e-07 0.64 7.43545733288864e-05 1.35327564369484e-06 0.66 0.000134427054494661 2.41965369451706e-06 0.68 0.000242553777865998 4.3656409644815e-06 0.7 0.000435783721967154 7.95381103973474e-06 0.72 0.000776433075142966 1.46621613288842e-05 0.74 0.00136303704509802 2.7440062028307e-05 0.76 0.00233636630032484 5.23580264127352e-05 0.78 0.00386755599692468 0.000102192908651516 0.800000000000001 0.00611485943136916 0.000203783560476627 0.820000000000001 0.00914765976217139 0.000410854106124574 0.840000000000001 0.0128595778005716 0.000818130638703645 0.860000000000001 0.0169367582631497 0.00155627468303594 0.880000000000001 0.0209706888190419 0.00274592514824597 0.900000000000001 0.0246562210547568 0.00444276944287097 0.920000000000001 0.0278750743013566 0.00663079594973065 0.940000000000001 0.0306390480641698 0.00925394709075083 0.960000000000001 0.0330115046277384 0.0122456870854738 0.980000000000001 0.0350633724827756 0.0155437882537516 1 0.0368570371094102 0.0190951835221132 1.02 0.0384429909516907 0.0228563762145888 1.04 0.0398608764575543 0.0267922865516885 0.3 4.55450347618141e-08 5.17695707095473e-09 0.32 7.67655507959049e-08 7.7678195732082e-09 0.34 1.30136386460528e-07 1.177557592962e-08 0.36 2.21309707656268e-07 1.80540086526416e-08 0.38 3.76935373796548e-07 2.80064319049798e-08 0.4 6.42327764143139e-07 4.39535954594103e-08 0.42 1.09442161179175e-06 6.97532921964424e-08 0.44 1.86362445478643e-06 1.11845861997296e-07 0.46 3.16912864539519e-06 1.81021042598723e-07 0.48 5.3842196605193e-06 2.95407541226303e-07 0.5 9.13542597628501e-06 4.85536369706815e-07 0.52 1.54794640419297e-05 8.02922756686956e-07 0.54 2.61961122669216e-05 1.33461886250228e-06 0.56 4.42763926642736e-05 2.22789615270544e-06 0.58 7.4718095044553e-05 3.73209747381891e-06 0.6 0.000125781027798968 6.26952967877745e-06 0.62 0.000210867568219721 1.05552582459822e-05 0.64 0.000351096584218965 1.77985377166489e-05 0.66 0.000578280946232864 3.00383055021283e-05 0.68 0.000937287045852877 5.06923145539295e-05 0.7 0.00148591957849692 8.54288258728661e-05 0.72 0.00229047891983724 0.00014347975787882 0.74 0.00341669323698428 0.000239449336643611 0.76 0.00491761462926253 0.000395430826511186 0.78 0.00682056397690091 0.000642730089749323 0.800000000000001 0.0091156601647991 0.00102184648177233 0.820000000000001 0.0117507013860976 0.0015792631938176 0.840000000000001 0.0146378218695247 0.00236093539268645 0.860000000000001 0.0176717682098063 0.00340469512953606 0.880000000000001 0.0207515460129394 0.00473484720340228 0.900000000000001 0.0237957212284156 0.00636073395926986 0.920000000000001 0.0267477749277798 0.00827870803552704 0.940000000000001 0.0295741150454927 0.0104758446121628 0.960000000000001 0.0322591071311116 0.01293390899373 0.980000000000001 0.0348001047418512 0.0156326407134599 1 0.0372033631767418 0.0185518140548229 1.02 0.039480095030608 0.0216718561595558 1.04 0.0416415556673262 0.0249733590192182 0.3 4.56781753822515e-08 5.16258347407919e-09 0.32 7.69888175948039e-08 7.74641821744854e-09 0.34 1.30511388938874e-07 1.17436903734224e-08 0.36 2.2194025479077e-07 1.80065467496705e-08 0.38 3.77996500854133e-07 2.79359540778268e-08 0.4 6.44115047173222e-07 4.38493620669106e-08 0.42 1.09743569151523e-06 6.96001096283031e-08 0.44 1.86871817393423e-06 1.11623032047459e-07 0.46 3.17775239391954e-06 1.80702676143449e-07 0.48 5.39893033745894e-06 2.94967287315422e-07 0.5 9.16079694499091e-06 4.84967798522168e-07 0.52 1.55240213776468e-05 8.02304539112812e-07 0.54 2.62765892826893e-05 1.33430949275195e-06 0.56 4.44276208806996e-05 2.22909510421746e-06 0.58 7.50168524567883e-05 3.73843239218358e-06 0.6 0.000126404478401203 6.2914876845473e-06 0.62 0.000212235332686554 1.06224015917693e-05 0.64 0.000354203267414396 1.79926328408562e-05 0.66 0.000585416747296357 3.05810689359861e-05 0.68 0.000953408025049201 5.21699036173462e-05 0.7 0.00152075494978985 8.93387122289615e-05 0.72 0.0023607290793968 0.000153477037734646 0.74 0.00354632905859672 0.000263942578788904 0.76 0.00513292264981485 0.000452342476002324 0.78 0.00713646728594984 0.000766666393531721 0.800000000000001 0.00951350895651065 0.00127170267286398 0.820000000000001 0.0121570279650876 0.00204105103828304 0.840000000000001 0.0149208706661099 0.00314065940882127 0.860000000000001 0.0176632648457953 0.00461253896255534 0.880000000000001 0.0202809164686448 0.00646855004576755 0.900000000000001 0.0227175775576591 0.00869511922797764 0.920000000000001 0.0249543218019877 0.0112627156899702 0.940000000000001 0.0269951856306738 0.0141346233006704 0.960000000000001 0.0288556551582329 0.0172729695290146 0.980000000000001 0.0305554527979157 0.0206421222089781 1 0.032114659950878 0.0242102280014574 1.02 0.0335519086158963 0.0279496369965029 1.04 0.0348837093339488 0.0318367430987855 0.3 4.59688086469473e-08 4.98006431260445e-09 0.32 7.7458060372414e-08 7.4604594602369e-09 0.34 1.31269499269475e-07 1.12963327338183e-08 0.36 2.23165730022783e-07 1.73078827856879e-08 0.38 3.79978555435839e-07 2.68468880026386e-08 0.4 6.47322996349083e-07 4.21553462209078e-08 0.42 1.10263320915187e-06 6.69713783036618e-08 0.44 1.87715417787241e-06 1.07554879807784e-07 0.46 3.19146456991777e-06 1.74429830433144e-07 0.48 5.42135429151302e-06 2.85330221225867e-07 0.5 9.19779730021274e-06 4.70236740206706e-07 0.52 1.55860103176478e-05 7.79942250018e-07 0.54 2.63830274606671e-05 1.30071500180093e-06 0.56 4.46172320472345e-05 2.17949993474765e-06 0.58 7.53718860562649e-05 3.66754161814445e-06 0.6 0.000127109772907729 6.19666728690384e-06 0.62 0.000213722049182627 1.05145953293269e-05 0.64 0.000357488231767282 1.79294177820822e-05 0.66 0.000592850490919869 3.07606457794717e-05 0.68 0.000970134835465659 5.3186385623636e-05 0.7 0.00155703208308939 9.28438462112574e-05 0.72 0.00243438364791654 0.000163795736626645 0.74 0.0036826847365073 0.000291684854545959 0.76 0.00535699662743232 0.000521387670306939 0.78 0.00745196615252423 0.000924478913053569 0.800000000000001 0.00987249287575637 0.00159735058383329 0.820000000000001 0.0124445917434049 0.00263927252409475 0.840000000000001 0.0149801450549957 0.00411818521660995 0.860000000000001 0.0173453705451587 0.00605201346285499 0.880000000000001 0.0194800755489623 0.0084168190745885 0.900000000000001 0.0213772535531158 0.0111664156121391 0.920000000000001 0.0230564462476964 0.0142483038553316 0.940000000000001 0.0245461239631467 0.0176124134052391 0.960000000000001 0.02587502495537 0.0212146680811724 0.980000000000001 0.0270687854804729 0.0250177830679065 1 0.0281490896255685 0.0289908283344496 1.02 0.0291338499442988 0.0331083584457297 1.04 0.0300377281124869 0.0373494789119747 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_1D_breakdown_dc.standard0000644000175000017500000001007414163340332027261 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.0002011527898633 2.79263908151017e-07 0.76 0.000289619060680106 3.99599853556599e-07 0.77 0.000416595196313207 5.73384398039174e-07 0.78 0.000598311804902923 8.24719216281927e-07 0.79 0.00085725235740581 1.18865480495088e-06 0.8 0.00122403029776441 1.71618335643068e-06 0.81 0.00173942025563917 2.48151520873724e-06 0.82 0.00245629014447115 3.59268963152089e-06 0.83 0.00344111627840618 5.20706627109699e-06 0.84 0.00477486005843207 7.55400335045667e-06 0.85 0.00655329414207511 1.09682858747075e-05 0.86 0.00888723273832663 1.59403715252336e-05 0.87 0.0119031079567633 2.31966177983682e-05 0.88 0.0157432400134266 3.38534759230897e-05 0.89 0.0205614682734231 4.98762585397871e-05 0.9 0.0264971342782481 7.64437274534043e-05 0.91 0.0335526769756586 0.000137450156124417 0.92 0.0411470273796633 0.000333430548626223 0.93 0.0481684699512029 0.000762411879252699 0.94 0.0546832964050567 0.0013354538697847 0.95 0.0612610929503956 0.00199500820822081 0.96 0.0682647619996404 0.0027522587734903 0.97 0.0759138212112438 0.0036444977974362 0.98 0.0843437920484314 0.00472432540602887 0.99 0.0936257089996614 0.00606212641268967 1 0.103775435568034 0.00775447113408898 1.01 0.114767106122293 0.00993805794330853 1.02 0.126553458348577 0.0128106226992321 1.03 0.139087865349673 0.0166610771949609 1.04 0.152341031401667 0.0219124312047409 1.05 0.166309023209055 0.0291832240794478 0.75 0.000201560911637983 2.76852974669325e-07 0.76 0.000290200591181284 3.9646772566553e-07 0.77 0.000417426856518665 5.69323106415534e-07 0.78 0.000599507567587493 8.19464859968452e-07 0.79 0.000858984830593744 1.18187432193571e-06 0.8 0.00122656677733634 1.70745751079458e-06 0.81 0.00174318362883348 2.47031300706261e-06 0.82 0.00246195965622282 3.5783191886419e-06 0.83 0.00344978755421585 5.18855608255559e-06 0.84 0.00478828768560678 7.52976878234469e-06 0.85 0.00657425526846825 1.0935088357828e-05 0.86 0.00892013134993545 1.58896996067938e-05 0.87 0.0119552719246279 2.31003003159559e-05 0.88 0.0158285295254946 3.35963713143372e-05 0.89 0.0207117663302558 4.88781244202806e-05 0.9 0.0268021403408563 7.11350644715921e-05 0.91 0.0343171430182953 0.000103597196820588 0.92 0.0434655651450744 0.000151560820584804 0.93 0.0543108192464211 0.000234245908887643 0.94 0.0658491183692014 0.000532198185411186 0.95 0.0757442260338135 0.00140240843391271 0.96 0.0848907372784861 0.00254452687910895 0.97 0.0944173805764243 0.00377186644343709 0.98 0.104783401818485 0.00513128170091507 0.99 0.116276351010115 0.00672284549149753 1 0.129100889688498 0.00867037159981136 1.01 0.143382622633508 0.0111309234336209 1.02 0.159163145522921 0.0143150798354366 1.03 0.176406780070112 0.0185171021678536 1.04 0.195025909409046 0.0241591366216961 1.05 0.214918499876352 0.0318551121264826 0.75 0.000201998266443389 1.6782871069322e-07 0.76 0.000290799397553511 2.48386796023126e-07 0.77 0.000418237728396521 3.68479749292646e-07 0.78 0.000600587637230804 5.47613290424969e-07 0.79 0.000860388411622309 8.14965970348361e-07 0.8 0.00122832425337872 1.2142113367863e-06 0.81 0.00174526146123974 1.81072547975175e-06 0.82 0.00246419455871576 2.70229688663658e-06 0.83 0.00345179249668348 4.03490776115251e-06 0.84 0.00478933810921097 6.02577294887689e-06 0.85 0.00657317926913601 8.99671901412541e-06 0.86 0.00891524635442388 1.3422373135245e-05 0.87 0.0119444497679365 1.99998004571562e-05 0.88 0.0158096097957567 2.97495018089141e-05 0.89 0.0206840017980627 4.41624408456e-05 0.9 0.026770741977662 6.54146193775188e-05 0.91 0.0343068313173904 9.66808127404824e-05 0.92 0.0435605215035864 0.000142595451697804 0.93 0.0548088675143549 0.000209963678676087 0.94 0.0682569482379872 0.000310158522630692 0.95 0.0834965976571659 0.000527135640899379 0.96 0.0967796097445797 0.00154223002513389 0.97 0.108038752393522 0.0032480506554023 0.98 0.119879783739927 0.00503691141357815 0.99 0.132879448611219 0.00693770228897583 1 0.147346067803219 0.00912337109643921 1.01 0.163553083207703 0.011794149647795 1.02 0.18170560067307 0.0151908899918278 1.03 0.201909396303929 0.0196285997887151 1.04 0.224159959706742 0.0255418445241276 1.05 0.248360064321516 0.0335491170878146 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_1D_ac.standard0000644000175000017500000002660714163340332024746 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 158489319.2463 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 251188643.151556 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 398107170.55492 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 630957344.483199 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 1000000000.00595 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 1584893192.47244 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 2511886431.53052 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 3981071705.5729 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 6309573444.86956 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 10000000000.1191 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 15848931924.8188 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 25118864315.4548 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 39810717055.9661 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 63095734449.0713 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 100000000000 6.29470201082721e-05 -9.47517299592204e-08 0.0434322878545143 3.33327275432228e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 100000000 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 158489319.2463 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 251188643.151556 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763946e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 398107170.55492 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 630957344.483199 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 1000000000.00595 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984094e-15 3.40806848579619e-15 3.40806848579619e-15 1584893192.47244 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 2511886431.53052 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 3981071705.5729 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 6309573444.86956 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 10000000000.1191 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763946e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 15848931924.8188 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 25118864315.4548 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 39810717055.9661 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 63095734449.0713 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763946e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 100000000000 0.000408339030025857 -3.05793994931323e-07 0.204583473687673 6.06025911560411e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 100000000 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 158489319.2463 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848974e-15 3.46063088848974e-15 251188643.151556 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 398107170.55492 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 630957344.483199 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 1000000000.00595 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 1584893192.47244 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 2511886431.53052 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848974e-15 3.46063088848974e-15 3981071705.5729 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 6309573444.86956 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 10000000000.1191 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848974e-15 3.46063088848974e-15 15848931924.8188 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 25118864315.4548 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 39810717055.9661 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 63095734449.0713 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 100000000000 0.00267085718212844 -8.19548926653217e-07 0.676550963080974 6.74606093666045e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 100000000 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 158489319.2463 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460448e-15 3.51690244460448e-15 251188643.151556 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 398107170.55492 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 630957344.483199 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460448e-15 3.51690244460448e-15 1000000000.00595 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.356077884868e-13 3.51690244460447e-15 3.51690244460447e-15 1584893192.47244 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 2511886431.53052 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.356077884868e-13 3.51690244460448e-15 3.51690244460448e-15 3981071705.5729 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 6309573444.86956 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460448e-15 3.51690244460448e-15 10000000000.1191 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.356077884868e-13 3.51690244460448e-15 3.51690244460448e-15 15848931924.8188 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 25118864315.4548 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.356077884868e-13 3.51690244460447e-15 3.51690244460447e-15 39810717055.9661 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.356077884868e-13 3.51690244460447e-15 3.51690244460447e-15 63095734449.0713 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 100000000000 0.107338931625907 -0.00215725688019034 0.922870757259887 0.0239952189176764 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_subtran_dc.standard0000644000175000017500000001544014163340332026453 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704451e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732605e-13 0.15 -1.50000001763803e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.02750538956629e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937576698e-13 4.68053043062289e-11 0.6 -1.81705065604658e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.7 -1.12996695977908e-10 5.98410414791985e-09 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.1326957361323e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818035e-13 1.00655442764905e-12 0.2 -2.39226183332884e-13 2.4686168200509e-12 0.25 -4.6089173012656e-13 6.50161794905516e-12 0.3 -1.43291446909217e-12 1.81936338777374e-11 0.35 -6.43513668087131e-12 5.36311283875837e-11 0.4 -3.30837269307773e-11 1.67343321508011e-10 0.45 -1.75995843393292e-10 5.61862996859267e-10 0.5 -9.4336336790711e-10 2.12265134113273e-09 0.55 -5.06466960799361e-09 8.79986154130922e-09 0.6 -2.71986734395795e-08 4.02471813831143e-08 0.65 -1.46027831551408e-07 1.98537070563537e-07 0.7 -7.82462249093881e-07 1.03033998827935e-06 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.5165919192946e-13 -3.90866824567585e-08 -0.9 9.01659206073283e-13 -2.70260964040471e-08 -0.85 8.51659216262973e-13 -1.83375518111264e-08 -0.8 8.01659223474032e-13 -1.21891502070679e-08 -0.75 7.51659228478699e-13 -7.92233344451718e-09 -0.7 7.01659231878792e-13 -5.02387788068211e-09 -0.65 6.51659234135306e-13 -3.10064995027489e-09 -0.6 6.01659235594734e-13 -1.85716530848194e-09 -0.55 5.51659236512098e-13 -1.07594357716056e-09 -0.5 5.01659237070778e-13 -6.00599391563765e-10 -0.45 4.5165923739927e-13 -3.21559863064465e-10 -0.4 4.01659231345787e-13 -1.64250947092331e-10 -0.35 3.51659207953387e-13 -7.95528875151551e-11 -0.3 3.01659096052366e-13 -3.62902374056185e-11 -0.25 2.51658562579388e-13 -1.54970463877905e-11 -0.2 2.01656020268568e-13 -6.18429190148618e-12 -0.15 1.5164390514466e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987881e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654121e-14 -3.08743136986355e-13 3.19189119579733e-16 5.74616866720889e-22 -5.74615169092221e-22 0.0500000000000003 -5.62476501202264e-14 3.95603754082254e-13 0.1 -1.36020047159556e-13 1.28245455931911e-12 0.15 -3.27896671322894e-13 3.51019833369455e-12 0.2 -1.05399191550812e-12 9.50982884578744e-12 0.25 -4.32583890383524e-12 2.66176081161696e-11 0.3 -1.97291460032982e-11 7.86247088302977e-11 0.35 -9.29433994098e-11 2.49539765671534e-10 0.4 -4.41648364170798e-10 8.6266096966194e-10 0.45 -2.10316715333065e-09 3.2817653250288e-09 0.5 -1.00206658861085e-08 1.34459228649873e-08 0.55 -4.77483983253542e-08 5.85353412605264e-08 0.6 -2.27484391103909e-07 2.65709517695177e-07 0.65 -1.08268899573577e-06 1.23885944352075e-06 0.7 -5.12525620247218e-06 5.8704157747362e-06 -1 1.18975122852306e-10 -5.24882212949522e-08 -0.95 1.18925122882418e-10 -3.62494799011581e-08 -0.9 1.18875122905526e-10 -2.45717858086155e-08 -0.85 1.18825122923362e-10 -1.63270792058136e-08 -0.8 1.187751229373e-10 -1.06219428149853e-08 -0.75 1.18725122948409e-10 -6.76014645165503e-09 -0.7 1.18675122957516e-10 -4.20869529378662e-09 -0.65 1.18625122965249e-10 -2.56749571269059e-09 -0.6 1.18575122972101e-10 -1.54268194493612e-09 -0.55 1.18524885583833e-10 -9.23572330132978e-10 -0.5 1.18474340784264e-10 -5.63149550254057e-10 -0.45 1.18422545689592e-10 -3.61883156256884e-10 -0.4 1.18366630949916e-10 -2.54648800452498e-10 -0.35 1.18297142233799e-10 -2.00435613880798e-10 -0.3 1.1818292810273e-10 -1.74484344328883e-10 -0.25 1.17921346494053e-10 -1.62450012854504e-10 -0.2 1.17174198172003e-10 -1.5610889756406e-10 -0.15 1.14827137638644e-10 -1.49934768111874e-10 -0.0999999999999997 1.07208465685119e-10 -1.37244090970421e-10 -0.0499999999999997 8.22201616811118e-11 -1.02550375877081e-10 3.19189119579733e-16 1.25417750030628e-18 -1.25417747445689e-18 0.0500000000000003 -2.70795547531442e-10 3.14437582760949e-10 0.1 -1.16293504195051e-09 1.30224166663562e-09 0.15 -4.1023616215931e-09 4.45785542341261e-09 0.2 -1.37874436393713e-08 1.46542714149105e-08 0.25 -4.5698732825188e-08 4.78536221407701e-08 0.3 -1.50840623101441e-07 1.56502335409735e-07 0.35 -4.97235861438282e-07 5.13260740277737e-07 0.4 -1.6381404838698e-06 1.68719320921755e-06 0.45 -5.39245275777982e-06 5.55350009382666e-06 0.5 -1.77090920083315e-05 1.82702549226938e-05 0.55 -5.77133931501787e-05 5.97925641288648e-05 0.6 -0.000183570959439493 0.000192012203428235 0.65 -0.000544994105032721 0.000583676273243399 0.7 -0.00139249418541043 0.0015708421651026 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_sh_ac.standard0000644000175000017500000002661414163340332026134 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 0.000106845632301658 -7.90321373582969e-08 0.0396996330829286 4.89324173791328e-06 7.70073139612978e-14 2.58066700464452e-14 5.04148449348414e-13 3.24978598125518e-14 158489319.2463 0.00010665884671601 -8.79296392302321e-08 0.0396652051271294 3.84608970910305e-06 7.85687668442264e-14 2.57590035423331e-14 2.30456024010228e-13 4.08527517712873e-14 251188643.151556 0.000106602153565123 -9.76872139744384e-08 0.0396510275840511 3.42288215249287e-06 7.92112145241945e-14 2.57393900704718e-14 1.17846518789944e-13 4.42903328378821e-14 398107170.55492 0.000106630111396607 -1.16996480644701e-07 0.0396452767739025 3.27140424671857e-06 7.94703893914087e-14 2.573147396836e-14 7.24156163722383e-14 4.56771788802359e-14 630957344.483199 0.000106769174114419 -1.63397809410633e-07 0.0396428969807063 3.25923003680062e-06 7.95740878679909e-14 2.57282974046837e-14 5.42326768825376e-14 4.62322321052461e-14 1000000000.00595 0.000107146050134355 -2.79110957430781e-07 0.0396417511749487 3.37615297907323e-06 7.96153790646918e-14 2.57270092844131e-14 4.69784769488867e-14 4.64536537356816e-14 1584893192.47244 0.000108103715514534 -5.69432219834597e-07 0.0396408012390315 3.72871043757827e-06 7.96316310595493e-14 2.57264437348765e-14 4.40879623732791e-14 4.65418303256321e-14 2511886431.53052 0.000110513614109724 -1.29854479521858e-06 0.0396391834786769 4.63774430092823e-06 7.96376002392165e-14 2.57260871136235e-14 4.29365382308674e-14 4.65768263333446e-14 3981071705.5729 0.000116568551847218 -3.12989122535243e-06 0.0396354259678474 6.93044002736398e-06 7.96387133577949e-14 2.57256150676697e-14 4.24773289224489e-14 4.65904600390844e-14 6309573444.86956 0.000131777303461685 -7.72969976833148e-06 0.0396261101124009 1.26929281207833e-05 7.96359828196233e-14 2.57245981332767e-14 4.22926018448928e-14 4.65951336542689e-14 10000000000.1191 0.000169972292366458 -1.92819672398162e-05 0.0396027629523156 2.71677207166476e-05 7.9626925610102e-14 2.57221113512634e-14 4.22142805958791e-14 4.65950997238025e-14 15848931924.8188 0.000265863779509871 -4.8287835590489e-05 0.0395441665042262 6.35184919297038e-05 7.96033116144219e-14 2.57158945449303e-14 4.21711039819691e-14 4.65903290601095e-14 25118864315.4548 0.000506416730368328 -0.000121070967668137 0.0393971733993883 0.000154771940957255 7.95437272651536e-14 2.57003079639749e-14 4.21238262682566e-14 4.6576491713062e-14 39810717055.9661 0.00110867451986937 -0.000303414144255032 0.0390291208931975 0.00038363934800506 7.93944226767729e-14 2.56612779355666e-14 4.20297024888919e-14 4.65410670859629e-14 63095734449.0713 0.0026090776467161 -0.000758439288922676 0.0381119570800807 0.000956330285000973 7.90224773871091e-14 2.55639748840542e-14 4.1804813561748e-14 4.6452264919077e-14 100000000000 0.00630150022027297 -0.00188289886917687 0.0358533978851676 0.00238125233817577 7.81075593856631e-14 2.53240886175402e-14 4.12551820625526e-14 4.62320280174408e-14 100000000 0.000564442990193952 4.4609885169465e-08 0.139925376659818 2.81673628771406e-05 5.51611718027633e-14 2.80261913662201e-14 4.64421172322341e-12 -1.44320525305377e-13 158489319.2463 0.000561078131081778 -1.0452560276944e-07 0.139616179385416 1.48774123500672e-05 8.46790443602458e-14 2.67568326824775e-14 1.94880675772181e-12 -2.84100166143747e-14 251188643.151556 0.000559745220663953 -1.72988580109004e-07 0.139489598850269 9.45029866050717e-06 9.67581340070496e-14 2.62373917962152e-14 8.45811044336113e-13 1.90221076940656e-14 398107170.55492 0.000559319628714015 -2.19282316732238e-07 0.139438511528995 7.2941572005214e-06 1.01620437801902e-13 2.60282887183491e-14 4.01808176313794e-13 3.81155527535753e-14 630957344.483199 0.00055942851911086 -2.84912317172092e-07 0.139417747825745 6.50365706666989e-06 1.03564639517873e-13 2.59446585719244e-14 2.24262304827771e-13 4.57505282755974e-14 1000000000.00595 0.000560173296964447 -4.29501170445404e-07 0.139408624745532 6.36855716246165e-06 1.04339725375208e-13 2.59112681906051e-14 1.53454645937021e-13 4.87953941926036e-14 1584893192.47244 0.00056223204766239 -7.84604569513534e-07 0.139402874123427 6.76736451959981e-06 1.04647796621681e-13 2.58978710952408e-14 1.25244891832626e-13 5.00083071499958e-14 2511886431.53052 0.000567478107866596 -1.67334070090555e-06 0.139395268497449 8.06319568852354e-06 1.04768684502531e-13 2.58922980274429e-14 1.14009071375425e-13 5.04910008942332e-14 3981071705.5729 0.000580684283015459 -3.90432017143067e-06 0.139378888958237 1.1435120846337e-05 1.04812315500041e-13 2.5889481075169e-14 1.09530071757932e-13 5.0682404997938e-14 6309573444.86956 0.000613861264781392 -9.50687982620605e-06 0.139338838637586 1.99505387412091e-05 1.04818383498283e-13 2.58868577221306e-14 1.07733210402664e-13 5.07566458539005e-14 10000000000.1191 0.000697156735707439 -2.35740155711913e-05 0.139238724185633 4.13518848290662e-05 1.04792426098694e-13 2.58820429585268e-14 1.06983562734408e-13 5.07812767534555e-14 15848931924.8188 0.000906097175000451 -5.88733591996746e-05 0.138987770689073 9.50730392765831e-05 1.04710934045752e-13 2.58706688555443e-14 1.06599119198707e-13 5.07787267456838e-14 25118864315.4548 0.00142910874518082 -0.000147317368826753 0.138359676828588 0.000229740923739064 1.0450045465291e-13 2.58424696425934e-14 1.06230894788061e-13 5.07467779278796e-14 39810717055.9661 0.00273146072085627 -0.000368079507498374 0.136795775132124 0.000566284357576219 1.03973853099871e-13 2.57723124851755e-14 1.05549125578091e-13 5.06569990210683e-14 63095734449.0713 0.0059326849002382 -0.000913990303882068 0.132952214220744 0.00140099316847564 1.02678982285902e-13 2.55996038725062e-14 1.03966102531734e-13 5.04316407118762e-14 100000000000 0.0135573731906045 -0.00223399256586949 0.123800958220281 0.0034342579777486 9.95977485563151e-14 2.51864305111545e-14 1.00234913708811e-13 4.98890337661574e-14 100000000 0.00268931760364023 3.51651889458775e-06 0.265862691167683 0.000107203226479835 -3.26924728639375e-13 6.1923896917788e-14 1.20542394735532e-11 -8.48183015952608e-13 158489319.2463 0.00266054208658638 1.30453146189466e-06 0.265133816975951 5.13925354563294e-05 -4.87700500269507e-14 4.06191650314547e-14 5.02069786657545e-12 -3.09462312179095e-13 251188643.151556 0.00264892125204279 3.9440705085304e-07 0.264836842973048 2.86866643411377e-05 6.44885484129291e-14 3.19443273424417e-14 2.15678943236212e-12 -9.01067271366454e-14 398107170.55492 0.00264449445934666 4.98523854343415e-09 0.264717056785344 1.96130647323045e-05 1.09987540081049e-13 2.84593906089963e-14 1.00627701880003e-12 -1.98547854081099e-15 630957344.483199 0.00264333328224915 -2.10451079271055e-07 0.264667980641532 1.61083604877654e-05 1.28166279476869e-13 2.70669539002725e-14 5.4658886156852e-13 3.32233171499361e-14 1000000000.00595 0.00264439703874799 -4.46720000086774e-07 0.264645360321888 1.5014287750692e-05 1.35412837366661e-13 2.65117397340954e-14 3.63317568235597e-13 4.72602745866859e-14 1584893192.47244 0.0026486561407175 -9.18618908734027e-07 0.264628676188368 1.53401592344893e-05 1.38296951128812e-13 2.62903897455057e-14 2.90309077232751e-13 5.28513217119866e-14 2511886431.53052 0.00265998582056717 -2.05547420540109e-06 0.264602757881721 1.73831629126653e-05 1.39439243609892e-13 2.6201775833744e-14 2.61224818576274e-13 5.50767168671668e-14 3981071705.5729 0.0026886902278059 -4.89138551739484e-06 0.264544033325477 2.30016840913616e-05 1.39878578473068e-13 2.61653075878596e-14 2.49613962083665e-13 5.59603571599289e-14 6309573444.86956 0.0027608533070933 -1.20043238427007e-05 0.2643991381802 3.73031431392112e-05 1.4001467335192e-13 2.61478083754962e-14 2.44913231957201e-13 5.63061630282738e-14 10000000000.1191 0.00294191059858949 -2.9850075578158e-05 0.264036687345843 7.32676506907115e-05 1.39971508370406e-13 2.61333660663301e-14 2.42845689984227e-13 5.642880734698e-14 15848931924.8188 0.00339516262097852 -7.45616901619512e-05 0.263129797122495 0.000163408198945725 1.3971074514455e-13 2.61089066221367e-14 2.41531851598724e-13 5.64400283267482e-14 25118864315.4548 0.00452394347590143 -0.000186161340882021 0.260871593518521 0.000388412285883544 1.39000986446549e-13 2.60525980210387e-14 2.39788029091737e-13 5.63508947222547e-14 39810717055.9661 0.0072993079722076 -0.000462110531488561 0.255320278641386 0.000944786316532276 1.37232633650355e-13 2.59158203307739e-14 2.36100495068371e-13 5.60855777894705e-14 63095734449.0713 0.013913946797835 -0.00112922753179933 0.242095247748729 0.00228989233433896 1.3301163865767e-13 2.55896495893648e-14 2.27547362358086e-13 5.54339713097597e-14 100000000000 0.0285767479440336 -0.00266221013853307 0.212811423217659 0.00538116324813115 1.23666968845393e-13 2.48618292990396e-14 2.08704249772541e-13 5.39735581978274e-14 100000000 0.0107917935301688 2.52169800728483e-05 0.346862583088501 0.000295622142996221 -2.18187587498812e-12 3.6353301335686e-13 1.1491788552134e-11 -1.50231945162401e-12 158489319.2463 0.0106502167760051 5.12420923420207e-06 0.34620088592343 0.000201864433279908 -7.70816503756974e-13 1.63481018814546e-13 4.90393196074965e-12 -5.68330652664487e-13 251188643.151556 0.0105928536546376 -3.06071436756287e-06 0.345931280845139 0.000163776879540389 -1.97041654052407e-13 8.2134433336265e-14 2.22513004002406e-12 -1.88545477846439e-13 398107170.55492 0.0105703402224555 -6.38392786591108e-06 0.345821670105528 0.000148577304642183 3.33326088701515e-14 4.94731555959106e-14 1.1495701798145e-12 -3.60590443414222e-14 630957344.483199 0.0105626500599107 -7.80422068397226e-06 0.345774459470757 0.000142739115987223 1.25357087450181e-13 3.64261353159437e-14 7.19921338371565e-13 2.48533012351042e-14 1000000000.00595 0.0105628587818613 -8.60358916840805e-06 0.345747032142815 0.000140998386781777 1.62039066678544e-13 3.12247868448867e-14 5.48634543577196e-13 4.91352986123655e-14 1584893192.47244 0.0105711672833542 -9.50774508662647e-06 0.345714486245881 0.000141778711477469 1.7664205972046e-13 2.91524832964722e-14 4.80385470052611e-13 5.88060637821772e-14 2511886431.53052 0.0105951332333792 -1.13389161742105e-05 0.345647226793557 0.000145790663177881 1.82436152534868e-13 2.83260717868239e-14 4.53154511767854e-13 6.26536541023875e-14 3981071705.5729 0.010656535038289 -1.57616216695656e-05 0.345484130688675 0.000156680557836408 1.84691021862191e-13 2.79939419904045e-14 4.42175486815166e-13 6.41774097919224e-14 6309573444.86956 0.010811054276338 -2.67891940260794e-05 0.345077293246399 0.000184328363540098 1.85458313554342e-13 2.78539354039122e-14 4.37460246269776e-13 6.47636601275736e-14 10000000000.1191 0.0111980849675584 -5.43856658282587e-05 0.344059709827176 0.000253706135639742 1.85437413134658e-13 2.77787288758807e-14 4.34721541492736e-13 6.4946028930058e-14 15848931924.8188 0.0121622155355943 -0.00012322010927809 0.341525472220839 0.000426777072550177 1.84616967922843e-13 2.77003331374216e-14 4.31487498181452e-13 6.48916418500162e-14 25118864315.4548 0.0145339596540163 -0.000293200208947923 0.335292117554924 0.000853829383544003 1.82297653806411e-13 2.75501582773179e-14 4.24940004835411e-13 6.45582650460462e-14 39810717055.9661 0.0201933215625714 -0.000702777773047687 0.320422090661623 0.00188066659856356 1.76649782278896e-13 2.72078807523821e-14 4.09862541858107e-13 6.36856549982347e-14 63095734449.0713 0.0327707885692838 -0.00163600327357765 0.287395927735085 0.00420785155944781 1.64067532576761e-13 2.64512299886736e-14 3.76584526928509e-13 6.17152481764171e-14 100000000000 0.0568053979167766 -0.00353855553164862 0.22439579708161 0.0088891779826103 1.4007191270012e-13 2.4997138906548e-14 3.13229765814007e-13 5.79244872824967e-14 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_subcoupl_dc.standard0000644000175000017500000000031414163340332027346 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00119571144043369 3.29705270382094e-06 0.85 0.00571823321292956 1.99628084331622e-05 0.9 0.0174848702341861 0.000124841559370652 0.95 0.0354908433168481 0.000663496989395747 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_1D_ac.standard0000644000175000017500000000612614163340332024741 0ustar carstencarstenFreq N(coll) 1000 6.67462092044459e-24 3162.27766017779 6.67462092044459e-24 10000.0000000595 6.67462092044459e-24 31622.7766019662 6.67462092044459e-24 100000.000001191 6.67462092044459e-24 316227.766021545 6.67462092044459e-24 1000000.00001786 6.67462092044459e-24 3162277.66023428 6.67462092044459e-24 10000000.0002382 6.67462092044459e-24 31622776.6025311 6.67462092044459e-24 100000000.002977 6.67462092044459e-24 316227766.027194 6.67462092044459e-24 1000000000.03572 6.67462092044459e-24 3162277660.29077 6.67462092044459e-24 10000000000.4168 6.67462092044459e-24 31622776603.096 6.67462092044459e-24 100000000000 6.67462092044459e-24 1000 2.89453031762958e-22 3162.27766017779 2.89453031762958e-22 10000.0000000595 2.89453031762958e-22 31622.7766019662 2.89453031762958e-22 100000.000001191 2.89453031762958e-22 316227.766021545 2.89453031762958e-22 1000000.00001786 2.89453031762958e-22 3162277.66023428 2.89453031762958e-22 10000000.0002382 2.89453031762958e-22 31622776.6025311 2.89453031762958e-22 100000000.002977 2.89453031762958e-22 316227766.027194 2.89453031762958e-22 1000000000.03572 2.89453031762958e-22 3162277660.29077 2.89453031762958e-22 10000000000.4168 2.89453031762958e-22 31622776603.096 2.89453031762958e-22 100000000000 2.89453031762958e-22 1000 7.63767618897356e-21 3162.27766017779 7.63767618897356e-21 10000.0000000595 7.63767618897356e-21 31622.7766019662 7.63767618897356e-21 100000.000001191 7.63767618897356e-21 316227.766021545 7.63767618897356e-21 1000000.00001786 7.63767618897356e-21 3162277.66023428 7.63767618897356e-21 10000000.0002382 7.63767618897356e-21 31622776.6025311 7.63767618897356e-21 100000000.002977 7.63767618897356e-21 316227766.027194 7.63767618897356e-21 1000000000.03572 7.63767618897356e-21 3162277660.29077 7.63767618897356e-21 10000000000.4168 7.63767618897356e-21 31622776603.096 7.63767618897356e-21 100000000000 7.63767618897356e-21 1000 3.85887047097965e-20 3162.27766017779 3.85887047097965e-20 10000.0000000595 3.85887047097965e-20 31622.7766019662 3.85887047097965e-20 100000.000001191 3.85887047097965e-20 316227.766021545 3.85887047097965e-20 1000000.00001786 3.85887047097965e-20 3162277.66023428 3.85887047097965e-20 10000000.0002382 3.85887047097965e-20 31622776.6025311 3.85887047097965e-20 100000000.002977 3.85887047097965e-20 316227766.027194 3.85887047097965e-20 1000000000.03572 3.85887047097965e-20 3162277660.29077 3.85887047097965e-20 10000000000.4168 3.85887047097965e-20 31622776603.096 3.85887047097965e-20 100000000000 3.85887047097965e-20 1000 1.00963577679414e-19 3162.27766017779 1.00963577679414e-19 10000.0000000595 1.00963577679414e-19 31622.7766019662 1.00963577679414e-19 100000.000001191 1.00963577679414e-19 316227.766021545 1.00963577679414e-19 1000000.00001786 1.00963577679414e-19 3162277.66023428 1.00963577679414e-19 10000000.0002382 1.00963577679414e-19 31622776.6025311 1.00963577679414e-19 100000000.002977 1.00963577679414e-19 316227766.027194 1.00963577679414e-19 1000000000.03572 1.00963577679414e-19 3162277660.29077 1.00963577679414e-19 10000000000.4168 1.00963577679414e-19 31622776603.096 1.00963577679414e-19 100000000000 1.00963577679414e-19 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full_subcoupl_peri_bias.standard0000644000175000017500000003037314163340332030605 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704452e-13 3.19189119579733e-16 -2.24597758604642e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732606e-13 0.15 -1.50000001763804e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.0275053895663e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937575833e-13 4.68053043062289e-11 0.6 -1.81705065604636e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.700000000000001 -1.12996695978014e-10 5.98410414791998e-09 0.750000000000001 -1.10383363062539e-09 4.77985420901422e-08 0.800000000000001 -1.35637981711526e-08 4.67751956176057e-07 0.850000000000001 -4.58638043204062e-07 5.40334615789862e-06 0.900000000000001 -7.90023889136148e-06 3.73380939339645e-05 0.950000000000001 -3.39922579325693e-05 0.000117420896214554 1 -0.000154833994508258 0.000438766155241503 -1 1.0000002982035e-12 -5.68278336533812e-08 -0.95 9.50000313067236e-13 -4.03167332210399e-08 -0.9 9.00000324036022e-13 -2.81325130735503e-08 -0.85 8.50000332004957e-13 -1.92808077777511e-08 -0.8 8.00000337697016e-13 -1.29584696139916e-08 -0.75 7.50000341688261e-13 -8.5255512560363e-09 -0.7 7.00000344430938e-13 -5.47965562890097e-09 -0.65 6.5000034627436e-13 -3.43273255421563e-09 -0.6 6.00000347483557e-13 -2.09036215699508e-09 -0.55 5.50000348255685e-13 -1.23352296375787e-09 -0.5 5.00000348734246e-13 -7.02799433949326e-10 -0.45 4.50000349021187e-13 -3.84940855613794e-10 -0.4 4.00000349186995e-13 -2.01642835913021e-10 -0.35 3.500003492781e-13 -1.00385894855907e-10 -0.3 3.00000349322309e-13 -4.71348148509438e-11 -0.25 2.50000349318231e-13 -2.0679168066103e-11 -0.2 2.00000349148171e-13 -8.3812881398913e-12 -0.15 1.50000348000001e-13 -3.0938185517782e-12 -0.0999999999999997 1.00000340685856e-13 -1.01511042749411e-12 -0.0499999999999997 5.00002942845008e-14 -2.66565792219188e-13 3.19189119579733e-16 1.02427433355106e-24 -1.02360066706582e-24 0.0500000000000003 -5.00018663360794e-14 1.06858255881035e-13 0.1 -1.00013702555122e-13 2.28016548054588e-13 0.15 -1.50088767231819e-13 3.93536131422773e-13 0.2 -2.0056482332969e-13 6.9723912940615e-13 0.25 -2.53583944846536e-13 1.43345259688129e-12 0.3 -3.22731045966219e-13 3.53194746358105e-12 0.35 -4.94160897510034e-13 9.96129933865168e-12 0.4 -1.31426230036285e-12 3.03702666019944e-11 0.45 -6.24820365205201e-12 9.71096638827245e-11 0.5 -3.72719133314288e-11 3.24549388137495e-10 0.55 -2.337560058302e-10 1.22463940392688e-09 0.6 -1.47958705356281e-09 5.04803121258619e-09 0.65 -9.38019704061828e-09 2.40380673867312e-08 0.700000000000001 -5.94707425701523e-08 1.31450276938143e-07 0.750000000000001 -3.76383527757084e-07 7.96940629998527e-07 0.800000000000001 -2.36202880056644e-06 5.26585614597166e-06 0.850000000000001 -1.53725999922114e-05 4.08247885827873e-05 0.900000000000001 -8.82494684704838e-05 0.00022043903613647 0.950000000000001 -0.000412204086660809 0.000948535102937217 1 -0.00160310714897992 0.00366464893990476 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568898553e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.700000000000001 -7.82462249095182e-07 1.03033998827937e-06 0.750000000000001 -4.14363398953671e-06 5.52786065364017e-06 0.800000000000001 -2.07267854586308e-05 3.06105742729758e-05 0.850000000000001 -9.37393740924608e-05 0.000179433076227421 0.900000000000001 -0.00040078352345378 0.000841191972235444 0.950000000000001 -0.00143054199241599 0.00307957135286778 1 -0.00377218585876662 0.00835618637775835 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986356e-13 3.19189119579733e-16 5.74616870270763e-22 -5.74615219579319e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323952e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.700000000000001 -5.12525620261219e-06 5.87041577473624e-06 0.750000000000001 -2.36176697985174e-05 2.80399517998106e-05 0.800000000000001 -9.8235389184985e-05 0.000133349988584112 0.850000000000001 -0.000345683650587034 0.000611889641257962 0.900000000000001 -0.00110984297273814 0.00230493552718344 0.950000000000001 -0.0029233145424265 0.0064454872166588 1 -0.00593312682012173 0.0135267371583964 -1 1.89720565797175e-12 -5.40738965276465e-08 -0.95 1.84720568061488e-12 -3.76904764123013e-08 -0.9 1.7972056970803e-12 -2.57947267709649e-08 -0.85 1.74720570885579e-12 -1.7305874224078e-08 -0.8 1.69720571712838e-12 -1.13616361565276e-08 -0.75 1.64720572283084e-12 -7.28441633717834e-09 -0.7 1.59720572668406e-12 -4.55054604641475e-09 -0.65 1.54720572923508e-12 -2.76267170564357e-09 -0.6 1.49720573089079e-12 -1.6253326004859e-09 -0.55 1.44720573194733e-12 -9.23711672954931e-10 -0.5 1.39720452887322e-12 -5.05480532517248e-10 -0.45 1.3472010796548e-12 -2.65599377357061e-10 -0.4 1.29718774441431e-12 -1.33876228273689e-10 -0.35 1.24713619257124e-12 -6.50407814646737e-11 -0.3 1.19693690441723e-12 -3.10490659919122e-11 -0.25 1.14616650186896e-12 -1.53083418037055e-11 -0.2 1.09318830286527e-12 -8.49850504922242e-12 -0.15 1.0316752725573e-12 -5.66574495721884e-12 -0.0999999999999997 9.3716855687561e-13 -4.27046691435299e-12 -0.0499999999999997 7.15115883834945e-13 -2.86541904273985e-12 3.19189119579733e-16 5.07442640648919e-20 -5.07442428603108e-20 0.0500000000000003 -2.6211838406522e-12 7.41304207544626e-12 0.1 -1.26107855905388e-11 2.84695356319931e-11 0.15 -5.10849844353254e-11 9.27379333940439e-11 0.2 -1.99674032738752e-10 3.02109349283739e-10 0.25 -7.73941467395511e-10 1.02204599157948e-09 0.3 -2.99378102958321e-09 3.60097557720966e-09 0.35 -1.15749912502958e-08 1.31093539116816e-08 0.4 -4.47473189774876e-08 4.88608825004607e-08 0.45 -1.72975897156987e-07 1.8494492503403e-07 0.5 -6.68555206297658e-07 7.07147624287588e-07 0.55 -2.58242623093903e-06 2.720856186321e-06 0.6 -9.95092381197296e-06 1.05007978150979e-05 0.65 -3.79729276746011e-05 4.04382303023487e-05 0.700000000000001 -0.00013966194819932 0.00015309862387393 0.750000000000001 -0.000458375428808755 0.000545526981306603 0.800000000000001 -0.00120350334166392 0.00167452976895611 0.850000000000001 -0.00246729166564191 0.00409272500932223 0.900000000000001 -0.00423027241542248 0.00812024026600905 0.950000000000001 -0.00660167239594483 0.0141374968656813 1 -0.00968365059099473 0.022355454256567 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.25417742922045e-18 -1.25417750030628e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.700000000000001 -0.00139249436101492 0.00157084215278601 0.750000000000001 -0.00287326010566414 0.00352482219649895 0.800000000000001 -0.00486540015194994 0.00660445199248068 0.850000000000001 -0.00716230504682151 0.0108124964402168 0.900000000000001 -0.00962809418949229 0.0161999064321913 0.950000000000001 -0.0122065350538203 0.0228978933720334 1 -0.0150386749819639 0.0309412041527181 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_1D_no_aval_ac.standard0000644000175000017500000000610514163340332026435 0ustar carstencarstenFreq N(coll) 1000 6.67448533301226e-24 3162.27766017779 6.67448533301226e-24 10000.0000000595 6.67448533301226e-24 31622.7766019662 6.67448533301226e-24 100000.000001191 6.67448533301226e-24 316227.766021545 6.67448533301226e-24 1000000.00001786 6.67448533301226e-24 3162277.66023428 6.67448533301226e-24 10000000.0002382 6.67448533301226e-24 31622776.6025311 6.67448533301226e-24 100000000.002977 6.67448533301226e-24 316227766.027194 6.67448533301226e-24 1000000000.03572 6.67448533301226e-24 3162277660.29077 6.67448533301226e-24 10000000000.4168 6.67448533301226e-24 31622776603.096 6.67448533301226e-24 100000000000 6.67448533301226e-24 1000 2.89450948256313e-22 3162.27766017779 2.89450948256313e-22 10000.0000000595 2.89450948256313e-22 31622.7766019662 2.89450948256313e-22 100000.000001191 2.89450948256313e-22 316227.766021545 2.89450948256313e-22 1000000.00001786 2.89450948256313e-22 3162277.66023428 2.89450948256313e-22 10000000.0002382 2.89450948256313e-22 31622776.6025311 2.89450948256313e-22 100000000.002977 2.89450948256313e-22 316227766.027194 2.89450948256313e-22 1000000000.03572 2.89450948256313e-22 3162277660.29077 2.89450948256313e-22 10000000000.4168 2.89450948256313e-22 31622776603.096 2.89450948256313e-22 100000000000 2.89450948256313e-22 1000 7.6376599424678e-21 3162.27766017779 7.6376599424678e-21 10000.0000000595 7.6376599424678e-21 31622.7766019662 7.6376599424678e-21 100000.000001191 7.6376599424678e-21 316227.766021545 7.6376599424678e-21 1000000.00001786 7.6376599424678e-21 3162277.66023428 7.6376599424678e-21 10000000.0002382 7.6376599424678e-21 31622776.6025311 7.6376599424678e-21 100000000.002977 7.6376599424678e-21 316227766.027194 7.6376599424678e-21 1000000000.03572 7.6376599424678e-21 3162277660.29077 7.6376599424678e-21 10000000000.4168 7.6376599424678e-21 31622776603.096 7.6376599424678e-21 100000000000 7.6376599424678e-21 1000 3.85886856179699e-20 3162.27766017779 3.85886856179699e-20 10000.0000000595 3.85886856179699e-20 31622.7766019662 3.85886856179699e-20 100000.000001191 3.85886856179699e-20 316227.766021545 3.85886856179699e-20 1000000.00001786 3.85886856179699e-20 3162277.66023428 3.85886856179699e-20 10000000.0002382 3.85886856179699e-20 31622776.6025311 3.85886856179699e-20 100000000.002977 3.85886856179699e-20 316227766.027194 3.85886856179699e-20 1000000000.03572 3.85886856179699e-20 3162277660.29077 3.85886856179699e-20 10000000000.4168 3.85886856179699e-20 31622776603.096 3.85886856179699e-20 100000000000 3.85886856179699e-20 1000 1.00963569289253e-19 3162.27766017779 1.00963569289253e-19 10000.0000000595 1.00963569289253e-19 31622.7766019662 1.00963569289253e-19 100000.000001191 1.00963569289253e-19 316227.766021545 1.00963569289253e-19 1000000.00001786 1.00963569289253e-19 3162277.66023428 1.00963569289253e-19 10000000.0002382 1.00963569289253e-19 31622776.6025311 1.00963569289253e-19 100000000.002977 1.00963569289253e-19 316227766.027194 1.00963569289253e-19 1000000000.03572 1.00963569289253e-19 3162277660.29077 1.00963569289253e-19 10000000000.4168 1.00963569289253e-19 31622776603.096 1.00963569289253e-19 100000000000 1.00963569289253e-19 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_subcoupl_dc.standard0000644000175000017500000001544214163340332026633 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704451e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732605e-13 0.15 -1.50000001763803e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.02750538956629e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937576698e-13 4.68053043062289e-11 0.6 -1.81705065604658e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.7 -1.12996695977908e-10 5.98410414791985e-09 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568744479e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.7 -7.8246224909529e-07 1.03033998827935e-06 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986355e-13 3.19189119579733e-16 5.74616870665194e-22 -5.74615169092221e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323951e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.7 -5.12525620261238e-06 5.87041577473614e-06 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.2541774486075e-18 -1.25417748091924e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.7 -0.0013924943610149 0.00157084215278599 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full_subcoupl.standard0000644000175000017500000003037314163340332026570 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704452e-13 3.19189119579733e-16 -2.24597758604642e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732606e-13 0.15 -1.50000001763804e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.0275053895663e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937575833e-13 4.68053043062289e-11 0.6 -1.81705065604636e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.700000000000001 -1.12996695978014e-10 5.98410414791998e-09 0.750000000000001 -1.10383363062539e-09 4.77985420901422e-08 0.800000000000001 -1.35637981711526e-08 4.67751956176057e-07 0.850000000000001 -4.58638043204062e-07 5.40334615789862e-06 0.900000000000001 -7.90023889136148e-06 3.73380939339645e-05 0.950000000000001 -3.39922579325693e-05 0.000117420896214554 1 -0.000154833994508258 0.000438766155241503 -1 1.0000002982035e-12 -5.68278336533812e-08 -0.95 9.50000313067236e-13 -4.03167332210399e-08 -0.9 9.00000324036022e-13 -2.81325130735503e-08 -0.85 8.50000332004957e-13 -1.92808077777511e-08 -0.8 8.00000337697016e-13 -1.29584696139916e-08 -0.75 7.50000341688261e-13 -8.5255512560363e-09 -0.7 7.00000344430938e-13 -5.47965562890097e-09 -0.65 6.5000034627436e-13 -3.43273255421563e-09 -0.6 6.00000347483557e-13 -2.09036215699508e-09 -0.55 5.50000348255685e-13 -1.23352296375787e-09 -0.5 5.00000348734246e-13 -7.02799433949326e-10 -0.45 4.50000349021187e-13 -3.84940855613794e-10 -0.4 4.00000349186995e-13 -2.01642835913021e-10 -0.35 3.500003492781e-13 -1.00385894855907e-10 -0.3 3.00000349322309e-13 -4.71348148509438e-11 -0.25 2.50000349318231e-13 -2.0679168066103e-11 -0.2 2.00000349148171e-13 -8.3812881398913e-12 -0.15 1.50000348000001e-13 -3.0938185517782e-12 -0.0999999999999997 1.00000340685856e-13 -1.01511042749411e-12 -0.0499999999999997 5.00002942845008e-14 -2.66565792219188e-13 3.19189119579733e-16 1.02427433355106e-24 -1.02360066706582e-24 0.0500000000000003 -5.00018663360794e-14 1.06858255881035e-13 0.1 -1.00013702555122e-13 2.28016548054588e-13 0.15 -1.50088767231819e-13 3.93536131422773e-13 0.2 -2.0056482332969e-13 6.9723912940615e-13 0.25 -2.53583944846536e-13 1.43345259688129e-12 0.3 -3.22731045966219e-13 3.53194746358105e-12 0.35 -4.94160897510034e-13 9.96129933865168e-12 0.4 -1.31426230036285e-12 3.03702666019944e-11 0.45 -6.24820365205201e-12 9.71096638827245e-11 0.5 -3.72719133314288e-11 3.24549388137495e-10 0.55 -2.337560058302e-10 1.22463940392688e-09 0.6 -1.47958705356281e-09 5.04803121258619e-09 0.65 -9.38019704061828e-09 2.40380673867312e-08 0.700000000000001 -5.94707425701523e-08 1.31450276938143e-07 0.750000000000001 -3.76383527757084e-07 7.96940629998527e-07 0.800000000000001 -2.36202880056644e-06 5.26585614597166e-06 0.850000000000001 -1.53725999922114e-05 4.08247885827873e-05 0.900000000000001 -8.82494684704838e-05 0.00022043903613647 0.950000000000001 -0.000412204086660809 0.000948535102937217 1 -0.00160310714897992 0.00366464893990476 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568898553e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.700000000000001 -7.82462249095182e-07 1.03033998827937e-06 0.750000000000001 -4.14363398953671e-06 5.52786065364017e-06 0.800000000000001 -2.07267854586308e-05 3.06105742729758e-05 0.850000000000001 -9.37393740924608e-05 0.000179433076227421 0.900000000000001 -0.00040078352345378 0.000841191972235444 0.950000000000001 -0.00143054199241599 0.00307957135286778 1 -0.00377218585876662 0.00835618637775835 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986356e-13 3.19189119579733e-16 5.74616870270763e-22 -5.74615219579319e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323952e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.700000000000001 -5.12525620261219e-06 5.87041577473624e-06 0.750000000000001 -2.36176697985174e-05 2.80399517998106e-05 0.800000000000001 -9.8235389184985e-05 0.000133349988584112 0.850000000000001 -0.000345683650587034 0.000611889641257962 0.900000000000001 -0.00110984297273814 0.00230493552718344 0.950000000000001 -0.0029233145424265 0.0064454872166588 1 -0.00593312682012173 0.0135267371583964 -1 1.89720565797175e-12 -5.40738965276465e-08 -0.95 1.84720568061488e-12 -3.76904764123013e-08 -0.9 1.7972056970803e-12 -2.57947267709649e-08 -0.85 1.74720570885579e-12 -1.7305874224078e-08 -0.8 1.69720571712838e-12 -1.13616361565276e-08 -0.75 1.64720572283084e-12 -7.28441633717834e-09 -0.7 1.59720572668406e-12 -4.55054604641475e-09 -0.65 1.54720572923508e-12 -2.76267170564357e-09 -0.6 1.49720573089079e-12 -1.6253326004859e-09 -0.55 1.44720573194733e-12 -9.23711672954931e-10 -0.5 1.39720452887322e-12 -5.05480532517248e-10 -0.45 1.3472010796548e-12 -2.65599377357061e-10 -0.4 1.29718774441431e-12 -1.33876228273689e-10 -0.35 1.24713619257124e-12 -6.50407814646737e-11 -0.3 1.19693690441723e-12 -3.10490659919122e-11 -0.25 1.14616650186896e-12 -1.53083418037055e-11 -0.2 1.09318830286527e-12 -8.49850504922242e-12 -0.15 1.0316752725573e-12 -5.66574495721884e-12 -0.0999999999999997 9.3716855687561e-13 -4.27046691435299e-12 -0.0499999999999997 7.15115883834945e-13 -2.86541904273985e-12 3.19189119579733e-16 5.07442640648919e-20 -5.07442428603108e-20 0.0500000000000003 -2.6211838406522e-12 7.41304207544626e-12 0.1 -1.26107855905388e-11 2.84695356319931e-11 0.15 -5.10849844353254e-11 9.27379333940439e-11 0.2 -1.99674032738752e-10 3.02109349283739e-10 0.25 -7.73941467395511e-10 1.02204599157948e-09 0.3 -2.99378102958321e-09 3.60097557720966e-09 0.35 -1.15749912502958e-08 1.31093539116816e-08 0.4 -4.47473189774876e-08 4.88608825004607e-08 0.45 -1.72975897156987e-07 1.8494492503403e-07 0.5 -6.68555206297658e-07 7.07147624287588e-07 0.55 -2.58242623093903e-06 2.720856186321e-06 0.6 -9.95092381197296e-06 1.05007978150979e-05 0.65 -3.79729276746011e-05 4.04382303023487e-05 0.700000000000001 -0.00013966194819932 0.00015309862387393 0.750000000000001 -0.000458375428808755 0.000545526981306603 0.800000000000001 -0.00120350334166392 0.00167452976895611 0.850000000000001 -0.00246729166564191 0.00409272500932223 0.900000000000001 -0.00423027241542248 0.00812024026600905 0.950000000000001 -0.00660167239594483 0.0141374968656813 1 -0.00968365059099473 0.022355454256567 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.25417742922045e-18 -1.25417750030628e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.700000000000001 -0.00139249436101492 0.00157084215278601 0.750000000000001 -0.00287326010566414 0.00352482219649895 0.800000000000001 -0.00486540015194994 0.00660445199248068 0.850000000000001 -0.00716230504682151 0.0108124964402168 0.900000000000001 -0.00962809418949229 0.0161999064321913 0.950000000000001 -0.0122065350538203 0.0228978933720334 1 -0.0150386749819639 0.0309412041527181 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_subcoupl_peri_bias_dc.standard0000644000175000017500000001544214163340332030650 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704451e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732605e-13 0.15 -1.50000001763803e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.02750538956629e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937576698e-13 4.68053043062289e-11 0.6 -1.81705065604658e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.7 -1.12996695977908e-10 5.98410414791985e-09 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568744479e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.7 -7.8246224909529e-07 1.03033998827935e-06 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986355e-13 3.19189119579733e-16 5.74616870665194e-22 -5.74615169092221e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323951e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.7 -5.12525620261238e-06 5.87041577473614e-06 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.2541774486075e-18 -1.25417748091924e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.7 -0.0013924943610149 0.00157084215278599 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_lat_nqs_dc.standard0000644000175000017500000001544614163340332025422 0ustar carstencarstenV(base) I(coll) I(base) -1 9.99999999992886e-13 -2.00000791472521e-12 -0.95 9.49999999993391e-13 -1.90000791472622e-12 -0.9 8.99999999993891e-13 -1.80000791472722e-12 -0.85 8.49999999994385e-13 -1.70000791472821e-12 -0.8 7.99999999994873e-13 -1.60000791472918e-12 -0.75 7.49999999995357e-13 -1.50000791473015e-12 -0.7 6.99999999995835e-13 -1.40000791473111e-12 -0.65 6.49999999996308e-13 -1.30000791473205e-12 -0.6 5.99999999996777e-13 -1.20000791473299e-12 -0.55 5.49999999997239e-13 -1.10000791473392e-12 -0.5 4.99999999997697e-13 -1.00000791471696e-12 -0.45 4.4999999999815e-13 -9.00007914670163e-13 -0.4 3.99999999998598e-13 -8.00007914495994e-13 -0.35 3.49999999999041e-13 -7.0000791385444e-13 -0.3 2.99999999999479e-13 -6.00007911497736e-13 -0.25 2.49999999999912e-13 -5.00007902846924e-13 -0.2 2.0000000000034e-13 -4.00007871098472e-13 -0.15 1.50000000000761e-13 -3.00007754587986e-13 -0.0999999999999997 1.00000000001159e-13 -2.0000732702388e-13 -0.0499999999999997 5.00000000013855e-14 -1.00005757977433e-13 3.19189119579733e-16 -2.24597758605009e-28 5.17492753824984e-28 0.0500000000000003 -5.00000000168068e-14 1.00021130225445e-13 0.1 -1.0000000018151e-13 2.0009867251583e-13 0.15 -1.50000001765011e-13 3.0038323263826e-13 0.2 -2.00000016959606e-13 4.01427500436222e-13 0.25 -2.50000162730981e-13 5.05259770601309e-13 0.3 -3.00001561177281e-13 6.19324037989424e-13 0.35 -3.50014977024497e-13 7.70944533990404e-13 0.4 -4.00143680473405e-13 1.06045936681025e-12 0.45 -4.51378382645889e-13 1.85671697252829e-12 0.5 -5.13223359811045e-13 4.51945012646338e-12 0.55 -6.76856822535259e-13 1.4098463697296e-11 0.6 -1.81698671997376e-12 6.65231387420044e-11 0.65 -1.23250252489551e-11 4.0235043535985e-10 0.7 -1.12702990963354e-10 3.47667549451749e-09 -1 1.00004719154535e-12 -2.01521474407745e-12 -0.95 9.50047191545903e-13 -1.91521474407854e-12 -0.9 9.00047191546447e-13 -1.81521474407963e-12 -0.85 8.50047191546986e-13 -1.71521474408071e-12 -0.8 8.00047191547519e-13 -1.61521474408178e-12 -0.75 7.50047191548046e-13 -1.51521474408283e-12 -0.7 7.00047191548568e-13 -1.41521472394938e-12 -0.65 6.50047191549084e-13 -1.31521469115216e-12 -0.6 6.00047191549595e-13 -1.21521460492797e-12 -0.55 5.50047191550101e-13 -1.11521437824653e-12 -0.5 5.00047191550601e-13 -1.0152137823089e-12 -0.45 4.50047191551096e-13 -9.1521221561233e-13 -0.4 4.00047191483447e-13 -8.15208096763256e-13 -0.35 3.50047191186095e-13 -7.15197268361914e-13 -0.3 3.00047189586883e-13 -6.15168800131713e-13 -0.25 2.50047180995334e-13 -5.15093953959534e-13 -0.2 2.00047134847608e-13 -4.14897162925663e-13 -0.15 1.50046886983856e-13 -3.14379680795813e-13 -0.0999999999999997 1.0004555569388e-13 -2.13018560794823e-13 -0.0499999999999997 5.00384052725963e-14 -1.09436572569535e-13 3.19189119579733e-16 4.13269573120192e-23 -4.13265548019053e-23 0.0500000000000003 -5.02062761150309e-14 1.24914117032183e-13 0.1 -1.01314194085812e-13 2.90980896146487e-13 0.15 -1.57264867819926e-13 5.67725307041357e-13 0.2 -2.3922618332536e-13 1.14882509106093e-12 0.25 -4.6089172985505e-13 2.60210366104942e-12 0.3 -1.43291446351593e-12 6.73610052224912e-12 0.35 -6.43513658355382e-12 2.0006116167554e-11 0.4 -3.30837256069204e-11 6.85489972496799e-11 0.45 -1.75995839420087e-10 2.70515765621893e-10 0.5 -9.43364019968776e-10 1.25634078552919e-09 0.55 -5.06470830100481e-09 6.17859301081287e-09 0.6 -2.7200307050773e-08 3.20333790405372e-08 0.65 -1.46088643876295e-07 1.71071665617326e-07 0.7 -7.84565512475981e-07 9.2837068518401e-07 -1 1.00165923777738e-12 -2.07571285065078e-12 -0.95 9.51659237777939e-13 -1.97571285065191e-12 -0.9 9.01659237778496e-13 -1.87571285065303e-12 -0.85 8.51659237779047e-13 -1.77571285065413e-12 -0.8 8.01659237779593e-13 -1.67571285065522e-12 -0.75 7.51659237780134e-13 -1.57571274571881e-12 -0.7 7.01659237780669e-13 -1.47571259312223e-12 -0.65 6.51659237781198e-13 -1.37571221862174e-12 -0.6 6.01659237781721e-13 -1.2757112995299e-12 -0.55 5.5165923778224e-13 -1.17570904391477e-12 -0.5 5.01659237782755e-13 -1.07570350823564e-12 -0.45 4.51659237783271e-13 -9.75689922700544e-13 -0.4 4.01659231544558e-13 -8.75656575154862e-13 -0.35 3.51659208052071e-13 -7.75574726200471e-13 -0.3 3.01659096099551e-13 -6.75373800057952e-13 -0.25 2.51658562601424e-13 -5.74880432725457e-13 -0.2 2.01656020278917e-13 -4.73668387068976e-13 -0.15 1.51643905149729e-13 -3.70687925093555e-13 -0.0999999999999997 1.0158617199046e-13 -2.63345274807564e-13 -0.0499999999999997 5.13110517665695e-14 -1.45191279607598e-13 3.19189119579733e-16 5.74616864058484e-22 -5.74616077859984e-22 0.0500000000000003 -5.62476501217247e-14 2.13950763608805e-13 0.1 -1.36020047164856e-13 6.08121963831103e-13 0.15 -3.2789667134351e-13 1.49931858949725e-12 0.2 -1.05399191560416e-12 3.87148001860835e-12 0.25 -4.32583890543355e-12 1.11248349249806e-11 0.3 -1.97291460732348e-11 3.63099467460162e-11 0.35 -9.29434020937211e-11 1.33935719608239e-10 0.4 -4.41648452740887e-10 5.45224184651868e-10 0.45 -2.10316981639636e-09 2.39988750106734e-09 0.5 -1.00207421701475e-08 1.09380217985224e-08 0.55 -4.77505109177635e-08 5.10883843068001e-08 0.6 -2.27541412181684e-07 2.41931769275505e-07 0.65 -1.08419052295199e-06 1.15461035934708e-06 0.7 -5.16368793899042e-06 5.5353402827569e-06 -1 1.1897513523368e-10 -1.3109762592168e-10 -0.95 1.18925135233684e-10 -1.30997614186434e-10 -0.9 1.18875135233688e-10 -1.30897590891873e-10 -0.85 1.18825135233693e-10 -1.30797544651987e-10 -0.8 1.187751352337e-10 -1.30697452865456e-10 -0.75 1.18725135233709e-10 -1.30597270668495e-10 -0.7 1.18675135233728e-10 -1.30496909006154e-10 -0.65 1.18625135233771e-10 -1.30396191103689e-10 -0.6 1.1857513523388e-10 -1.30294766061914e-10 -0.55 1.18524897839482e-10 -1.30191699948656e-10 -0.5 1.18474353034152e-10 -1.30085539518516e-10 -0.45 1.18422557933858e-10 -1.29972596874073e-10 -0.4 1.18366643188356e-10 -1.29844551135676e-10 -0.35 1.18297154465326e-10 -1.29681120694176e-10 -0.3 1.18182940323528e-10 -1.29429638083938e-10 -0.25 1.17921358691404e-10 -1.2894466131148e-10 -0.2 1.17174210303851e-10 -1.27802689161651e-10 -0.15 1.1482714956542e-10 -1.24718744397223e-10 -0.0999999999999997 1.07208476936667e-10 -1.15677456231477e-10 -0.0499999999999997 8.2220170600969e-11 -8.7879737787812e-11 3.19189119579733e-16 1.25417770710144e-18 -1.25417765540265e-18 0.0500000000000003 -2.70795590211803e-10 2.82482751447136e-10 0.1 -1.16293536853388e-09 1.19968083838898e-09 0.15 -4.1023644411352e-09 4.19605512034854e-09 0.2 -1.37874717228754e-08 1.40217184660428e-08 0.25 -4.56990318150828e-08 4.63170141538056e-08 0.3 -1.50843889288155e-07 1.52622987390806e-07 0.35 -4.97271919283307e-07 5.02870225492323e-07 0.4 -1.63854055516099e-06 1.65747643594007e-06 0.45 -5.39690035170961e-06 5.46416701006415e-06 0.5 -1.77584061740643e-05 1.80043933644154e-05 0.55 -5.82529442825755e-05 5.91648690801169e-05 0.6 -0.000189210845293339 0.000192585939925606 0.65 -0.000596491921147257 0.000608634010380346 0.7 -0.00173894510817545 0.00177907416074035 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_subcoupl_dc.standard0000644000175000017500000001015014163340332027632 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000199725416473528 6.15429100445239e-07 0.76 0.00028662799440709 8.47692074390177e-07 0.77 0.000410361592380033 1.17331387667486e-06 0.78 0.000585424982775609 1.63077864773606e-06 0.79 0.000830914430806825 2.27405769570345e-06 0.8 0.00117103426671756 3.17818906756234e-06 0.81 0.0016349377042114 4.44628750313143e-06 0.82 0.00225549389727927 6.21797640110207e-06 0.83 0.00306679054132534 8.67905257482451e-06 0.84 0.00410066939414704 1.20720275804212e-05 0.85 0.00538313531247514 1.67070847128518e-05 0.86 0.00693166922455398 2.29729898667461e-05 0.87 0.00875409618596606 3.13477862410607e-05 0.88 0.0108489626103208 4.24104648765571e-05 0.89 0.0132068291812124 5.6859682795701e-05 0.9 0.0158116948332264 7.55611750645857e-05 0.91 0.0186417263995214 9.9692036691063e-05 0.92 0.0216681168055788 0.000131176794128068 0.93 0.0248498284009278 0.000173878716257615 0.94 0.0281216023969817 0.000236139169641282 0.95 0.0313818234471124 0.000333241981568676 0.96 0.0345125613655098 0.000482303131537167 0.97 0.037451557694661 0.000687787429223648 0.98 0.040227345524946 0.000939599143274181 0.99 0.0428994244217299 0.00122585568304827 1 0.0455120192683103 0.00153965503461938 1.01 0.0480889278900515 0.00187863717421709 1.02 0.0506389991225637 0.0022431090478456 1.03 0.0531610257399723 0.00263476512146762 1.04 0.0556470336528282 0.00305607198404938 1.05 0.0580845520741166 0.00351005392211652 0.75 0.000200934587496839 6.17032299760708e-07 0.76 0.000288801584570576 8.52590789028404e-07 0.77 0.000414332946979327 1.1853337930762e-06 0.78 0.000592744542944355 1.65770592181482e-06 0.79 0.000844410339421616 2.3315145842164e-06 0.8 0.00119571144043369 3.29705270382096e-06 0.81 0.00167929105573884 4.68653382548767e-06 0.82 0.00233319094964106 6.69371831998588e-06 0.83 0.00319845311095651 9.60221076513482e-06 0.84 0.00431523940850635 1.38255485614597e-05 0.85 0.00571823321292962 1.99628084331624e-05 0.86 0.00743257807983973 2.88738776725493e-05 0.87 0.00947142863563165 4.17783995185621e-05 0.88 0.0118354187352847 6.0380977840122e-05 0.89 0.0145135718907906 8.70214330660462e-05 0.9 0.0174848702341861 0.000124841559370652 0.91 0.0207198696150318 0.000177948323943361 0.92 0.0241821193571015 0.000251539064635768 0.93 0.0278294629685673 0.000351942343250699 0.94 0.0316154334327436 0.000486530539629918 0.95 0.0354908433168482 0.000663496989395754 0.96 0.039405230958526 0.000891589969438088 0.97 0.0433070664148537 0.00118008681976298 0.98 0.0471412073220777 0.00153951425929236 0.99 0.0508449178452368 0.00198330821245659 1 0.0543537608841536 0.00252819042410431 1.01 0.0576315322380391 0.00318777513678189 1.02 0.0606989137500118 0.00396152310344722 1.03 0.0636134435444958 0.00483471584743523 1.04 0.0664266415816201 0.00579002667304031 1.05 0.0691673566748402 0.00681494932964649 0.75 0.000202195548785452 5.12141321138536e-07 0.76 0.000291044142419966 7.13043849949475e-07 0.77 0.000418404701589796 1.00205503025944e-06 0.78 0.000600236820586372 1.421923516133e-06 0.79 0.000858266647781455 2.03850985837384e-06 0.8 0.00122124265782746 2.95479602815865e-06 0.81 0.00172573994848379 4.33415878309538e-06 0.82 0.00241588775323645 6.43911885162314e-06 0.83 0.00334134219161992 9.69563871543961e-06 0.84 0.00455316164486485 1.47990439450944e-05 0.85 0.00609800197481517 2.28868588039756e-05 0.86 0.0080118203279899 3.58171860844802e-05 0.87 0.0103143984654077 5.66072059440321e-05 0.88 0.0130052754271506 9.00953512972309e-05 0.89 0.0160607553759159 0.000143864979079257 0.9 0.0194314649369559 0.000229350506842124 0.91 0.0230409686734118 0.000362771379171094 0.92 0.0267878702937492 0.000565141572122731 0.93 0.0305549350580269 0.000860447958131995 0.94 0.0342262354554944 0.00127181503164003 0.95 0.0377069345210023 0.00181703067181507 0.96 0.0409362928648083 0.00250567464671097 0.97 0.0438887158436643 0.00333900509030491 0.98 0.0465657343118055 0.00431188829943339 0.99 0.0489853377525681 0.00541530652952708 1 0.0511731263680884 0.0066384522105404 1.01 0.0531565838068546 0.00797012344656942 1.02 0.0549619883212494 0.00939952204000891 1.03 0.0566130463319001 0.0109166484773615 1.04 0.0581304924814586 0.012512456583152 1.05 0.0595321699511725 0.0141788759360813 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_lat_nqs_dc.standard0000644000175000017500000000036114163340332026134 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08295775099788e-05 2.45774327951913e-08 0.8 0.000903185640565156 8.70749983504521e-07 0.9 0.0237342180996845 4.02958900697583e-05 1 0.113857736800783 0.00658408018726214 1.1 0.293904092046892 0.0962849198340485 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_sh_dc.standard0000644000175000017500000001541714163340332026101 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000009961e-12 -9.99999999985856e-13 0.95 1.90000000010045e-12 -9.49999999986627e-13 0.9 1.80000000010131e-12 -8.99999999987409e-13 0.85 1.70000000010218e-12 -8.499999999882e-13 0.8 1.60000000010306e-12 -7.99999999988999e-13 0.75 1.50000000010394e-12 -7.49999999989804e-13 0.7 1.40000000010482e-12 -6.99999999990613e-13 0.65 1.30000000010571e-12 -6.49999999991425e-13 0.6 1.2000000001066e-12 -5.99999999992238e-13 0.55 1.1000000001075e-12 -5.49999999993053e-13 0.5 1.00000000010839e-12 -4.99999999993869e-13 0.45 9.00000000109287e-13 -4.49999999994686e-13 0.4 8.00000000110183e-13 -3.99999999995502e-13 0.35 7.00000000111078e-13 -3.49999999996318e-13 0.3 6.00000000111973e-13 -2.99999999997133e-13 0.25 5.00000000112867e-13 -2.49999999997947e-13 0.2 4.00000000113757e-13 -1.9999999999876e-13 0.15 3.00000000114604e-13 -1.49999999999571e-13 0.0999999999999997 2.00000000114887e-13 -1.00000000000362e-13 0.0499999999999997 1.00000000107661e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.3011452830852e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000001453488e-13 5.00000000163508e-14 -0.1 -2.00000020964778e-13 1.00000000180597e-13 -0.15 -3.00000282995758e-13 1.50000001763649e-13 -0.2 -4.00003804284004e-13 2.00000016957844e-13 -0.25 -5.00051147969586e-13 2.50000162729006e-13 -0.3 -6.00687904184121e-13 3.00001561175678e-13 -0.35 -7.09254148561683e-13 3.50014977024656e-13 -0.4 -9.24514992636941e-13 4.00143680477878e-13 -0.45 -2.57555869313594e-12 4.51378382661931e-13 -0.5 -2.3549300455537e-11 5.13223359819381e-13 -0.55 -3.04579302345757e-10 6.76856821965594e-13 -0.6 -4.08568941441534e-09 1.81698665077468e-12 -0.65 -5.49743426174102e-08 1.23250168167176e-11 -0.7 -7.39839020864047e-07 1.12701947773575e-10 1 2.00013968067838e-12 -1.00004739059956e-12 0.95 1.90013960913419e-12 -9.50047345584449e-13 0.9 1.80013954673852e-12 -9.00047309835611e-13 0.85 1.70013949178425e-12 -8.50047281666013e-13 0.8 1.60013944279859e-12 -8.00047259623845e-13 0.75 1.50013939854054e-12 -7.50047242489302e-13 0.7 1.40013935798558e-12 -7.00047229258676e-13 0.65 1.30013932030051e-12 -6.50047219118798e-13 0.6 1.20013928481342e-12 -6.00047211416863e-13 0.55 1.10013925098358e-12 -5.50047205630426e-13 0.5 1.00013921837454e-12 -5.00047201340881e-13 0.45 9.00139186631028e-13 -4.50047198211861e-13 0.4 8.00139155385654e-13 -4.00047195904472e-13 0.35 7.00139124164953e-13 -3.50047194039556e-13 0.3 6.0013909117657e-13 -3.00047191371187e-13 0.25 5.00139046927993e-13 -2.50047182071714e-13 0.2 4.00138935546173e-13 -2.00047135470799e-13 0.15 3.00138418791165e-13 -1.50046887327506e-13 0.0999999999999997 2.00135412865528e-13 -1.00045555870764e-13 0.0499999999999997 1.00116877357437e-13 -5.00384053487242e-14 -3.19189119579733e-16 4.13266431543266e-23 -4.1326957620168e-23 -0.0500000000000003 -1.00748245347408e-13 5.02062762161756e-14 -0.1 -2.0560038065013e-13 1.01314194389227e-13 -0.15 -3.37419087793729e-13 1.57264868537612e-13 -0.2 -6.48097096409866e-13 2.39226184772998e-13 -0.25 -2.15446818411232e-12 4.60891732316255e-13 -0.3 -1.1706656139076e-11 1.43291446688762e-12 -0.35 -7.56902642305544e-11 6.43513657729838e-12 -0.4 -5.09516248935176e-10 3.3083725124027e-11 -0.45 -3.46507530132314e-09 1.75995821580569e-10 -0.5 -2.36626590521197e-08 9.43363428637024e-10 -0.55 -1.62008728627746e-07 5.06468903973381e-09 -0.6 -1.11129419566353e-06 2.71996796714296e-08 -0.65 -7.63147632791796e-06 1.46067859459563e-07 -0.7 -5.23330721558515e-05 7.83857710890845e-07 1 2.00327644496018e-12 -1.00166258884136e-12 0.95 1.90327522632779e-12 -9.51661829975841e-13 0.9 1.80327416146614e-12 -9.01661227087389e-13 0.85 1.70327322156604e-12 -8.51660751710126e-13 0.8 1.6032723819363e-12 -8.01660379507195e-13 0.75 1.5032716218466e-12 -7.51660090103719e-13 0.7 1.40327092418358e-12 -7.01659866735128e-13 0.65 1.30327027498426e-12 -6.51659695776029e-13 0.6 1.20326966292499e-12 -6.0165956622827e-13 0.55 1.1032690788312e-12 -5.51659469234161e-13 0.5 1.00326851524187e-12 -5.01659397655342e-13 0.45 9.0326796600113e-13 -4.51659345732107e-13 0.4 8.03267419374029e-13 -4.01659302580202e-13 0.35 7.0326685704785e-13 -3.51659253453851e-13 0.3 6.03266184977782e-13 -3.0165912417503e-13 0.25 5.03264949825753e-13 -2.51658579323036e-13 0.2 4.03260854361338e-13 -2.01656029817358e-13 0.15 3.03242071497625e-13 -1.51643910314772e-13 0.0999999999999997 2.03146897568974e-13 -1.0158617458254e-13 0.0499999999999997 1.0264908464584e-13 -5.13110528352941e-14 -3.19189119579733e-16 5.74616532243866e-22 -5.74616876483043e-22 -0.0500000000000003 -1.14300906251256e-13 5.62476512789491e-14 -0.1 -2.92557394983545e-13 1.3602005011106e-13 -0.15 -8.2634135822117e-13 3.27896677130697e-13 -0.2 -3.35991801066692e-12 1.05399192515941e-12 -0.25 -1.72629192262754e-11 4.32583891681947e-12 -0.3 -9.64208461624914e-11 1.97291460128143e-11 -0.35 -5.53218932854073e-10 9.29433998397e-11 -0.4 -3.21100848324082e-09 4.41648392693155e-10 -0.45 -1.87736965302195e-08 2.10316831534027e-09 -0.5 -1.10378243404497e-07 1.00207052734796e-08 -0.55 -6.5188499027537e-07 4.77496074852751e-08 -0.6 -3.8635358602235e-06 2.27519135976869e-07 -0.65 -2.29424383486056e-05 1.08363278946361e-06 -0.7 -0.000135709856668645 5.14945850325114e-06 1 1.33241796731872e-10 -1.18997504355791e-10 0.95 1.33133018044488e-10 -1.18942341088311e-10 0.9 1.33025279417897e-10 -1.18888240547444e-10 0.85 1.32918385894599e-10 -1.18835010276858e-10 0.8 1.32812172179418e-10 -1.18782487508231e-10 0.75 1.32706499522473e-10 -1.1873053602594e-10 0.7 1.3260125226787e-10 -1.18679042720399e-10 0.65 1.32496334381303e-10 -1.18627914174353e-10 0.6 1.32391666081894e-10 -1.18577073527998e-10 0.55 1.32286942839788e-10 -1.18526220361311e-10 0.5 1.32182034453781e-10 -1.18475233191023e-10 0.45 1.3207592956722e-10 -1.1842312736343e-10 0.4 1.31965627974074e-10 -1.1836699993898e-10 0.35 1.31841273874541e-10 -1.18297369923275e-10 0.3 1.31670227558363e-10 -1.18183065076177e-10 0.25 1.31344060356712e-10 -1.17921427456871e-10 0.2 1.30501841044219e-10 -1.17174246018255e-10 0.15 1.27939733655097e-10 -1.14827166697869e-10 0.0999999999999997 1.19633583500331e-10 -1.07208484097153e-10 0.0499999999999997 9.20971180941661e-11 -8.22201725595046e-11 -3.19189119579733e-16 1.25417760370386e-18 -1.25417771356379e-18 -0.0500000000000003 -3.09539271641764e-10 2.70795577699242e-10 -0.1 -1.35412301651789e-09 1.16293517914249e-09 -0.15 -4.89383399063194e-09 4.10236221098228e-09 -0.2 -1.69431165347511e-08 1.37874467667789e-08 -0.25 -5.81660290756287e-08 4.56987564972076e-08 -0.3 -1.99981724671466e-07 1.50840866951626e-07 -0.35 -6.90803589417128e-07 4.97238812890935e-07 -0.4 -2.40032354599639e-06 1.6381784180349e-06 -0.45 -8.39132940766571e-06 5.39294622285318e-06 -0.5 -2.94806889127647e-05 1.77154280960055e-05 -0.55 -0.000103565101216295 5.77925111330421e-05 -0.6 -0.000357796787107499 0.000184499406806587 -0.65 -0.00116097861279266 0.000554223229012694 -0.7 -0.00324006404246541 0.00145680210157408 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_1D.standard0000644000175000017500000003031214163340332024146 0ustar carstencarstenV(coll) I(coll) I(base) -1 -4.39311947779146 8.73095920185774e-05 -0.95 -0.326495882608939 9.10101825505025e-06 -0.9 -0.0242652075254397 9.48676927690936e-07 -0.85 -0.00180337458260026 9.88893781007038e-08 -0.8 -0.000134013005345667 1.03087878741381e-08 -0.75 -9.95785113724838e-06 1.07523878099564e-09 -0.7 -7.39885022795332e-07 1.12703055744961e-10 -0.65 -5.49745852082662e-08 1.23250260385065e-11 -0.6 -4.0856907105027e-09 1.81698673391558e-12 -0.55 -3.04579309450946e-10 6.76856822898975e-13 -0.5 -2.35493005008745e-11 5.13223359849034e-13 -0.45 -2.57555869382054e-12 4.51378382663993e-13 -0.4 -9.24514992676208e-13 4.00143680484297e-13 -0.35 -7.09254148570182e-13 3.50014977030611e-13 -0.3 -6.00687904189814e-13 3.00001561180811e-13 -0.25 -5.00051147974233e-13 2.50000162733289e-13 -0.2 -4.00003804287718e-13 2.00000016961273e-13 -0.15 -3.00000282998543e-13 1.50000001766223e-13 -0.0999999999999997 -2.00000020966635e-13 1.00000000182314e-13 -0.0499999999999997 -1.00000001454416e-13 5.00000000172098e-14 3.19189119579733e-16 7.32969601971617e-28 -4.13780480605138e-28 0.0500000000000003 1.00000000108593e-13 -5.00000000017945e-14 0.1 2.0000000011675e-13 -1.00000000001982e-13 0.15 3.00000000117399e-13 -1.50000000002002e-13 0.2 4.00000000117484e-13 -2.00000000002004e-13 0.25 5.00000000117527e-13 -2.50000000002005e-13 0.3 6.00000000117567e-13 -3.00000000002006e-13 0.35 7.00000000117607e-13 -3.50000000002008e-13 0.4 8.00000000117646e-13 -4.0000000000201e-13 0.45 9.00000000117687e-13 -4.50000000002013e-13 0.5 1.00000000011773e-12 -5.00000000002018e-13 0.55 1.10000000011777e-12 -5.50000000002024e-13 0.6 1.20000000011781e-12 -6.00000000002032e-13 0.65 1.30000000011786e-12 -6.50000000002042e-13 0.700000000000001 1.40000000011791e-12 -7.00000000002056e-13 0.750000000000001 1.50000000011796e-12 -7.50000000002075e-13 0.800000000000001 1.60000000011802e-12 -8.00000000002098e-13 0.850000000000001 1.70000000011809e-12 -8.50000000002129e-13 0.900000000000001 1.80000000011816e-12 -9.00000000002168e-13 0.950000000000001 1.90000000011825e-12 -9.50000000002217e-13 1 2.00000000011834e-12 -1.00000000000228e-12 -1 -5.01125870772451 0.00387025895403701 -0.95 -0.599603807674249 0.000610263789591701 -0.9 -0.0717490490774907 9.62266090537215e-05 -0.85 -0.00858642785159137 1.51730461610763e-05 -0.8 -0.00102768204190415 2.39249190437493e-06 -0.75 -0.00012300973436108 3.77249586153604e-07 -0.7 -1.47257234073122e-05 5.94854287492162e-08 -0.65 -1.76328165158324e-06 9.38022288444381e-09 -0.6 -2.11216730441902e-07 1.47957434063709e-09 -0.55 -2.53144860204727e-08 2.33755192271139e-10 -0.5 -3.03677780294313e-09 3.72718761856141e-11 -0.45 -3.6530285232326e-10 6.24820203501557e-12 -0.4 -4.45935653058417e-11 1.31426223546667e-12 -0.35 -5.97128211579083e-12 4.94160895546791e-13 -0.3 -1.23577751975776e-12 3.227310462679e-13 -0.25 -5.76883361241865e-13 2.53583945059855e-13 -0.2 -4.0932746223172e-13 2.00564823428312e-13 -0.15 -3.01134908276594e-13 1.50088767270894e-13 -0.0999999999999997 -2.0013720888147e-13 1.00013702568976e-13 -0.0499999999999997 -1.00015056785124e-13 5.00018663402088e-14 3.19189119579733e-16 1.0252319328102e-24 -1.02491271955157e-24 0.0500000000000003 1.00001871943002e-13 -5.00002942874088e-14 0.1 2.00002107523688e-13 -1.0000034069251e-13 0.15 3.00002138000733e-13 -1.50000348013027e-13 0.2 4.0000214246011e-13 -2.00000349172881e-13 0.25 5.00002143570322e-13 -2.50000349364609e-13 0.3 6.00002144241432e-13 -3.00000349408418e-13 0.35 7.00002144854879e-13 -3.50000349435523e-13 0.4 8.00002145464137e-13 -4.00000349469154e-13 0.45 9.00002146079422e-13 -4.50000349515602e-13 0.5 1.00000214670667e-12 -5.00000349580038e-13 0.55 1.10000214735165e-12 -5.50000349667845e-13 0.6 1.2000021480214e-12 -6.00000349785734e-13 0.65 1.30000214872469e-12 -6.50000349942111e-13 0.700000000000001 1.40000214947246e-12 -7.00000350147554e-13 0.750000000000001 1.50000215027842e-12 -7.5000035041539e-13 0.800000000000001 1.60000215115969e-12 -8.00000350762329e-13 0.850000000000001 1.70000215213739e-12 -8.5000035120905e-13 0.900000000000001 1.80000215323702e-12 -9.0000035178063e-13 0.950000000000001 1.90000215448866e-12 -9.50000352506718e-13 1 2.00000215592681e-12 -1.00000035342142e-12 -1 -5.63011191772884 0.0188379669510573 -0.95 -0.816075043280541 0.00350732122782141 -0.9 -0.118320895889505 0.000653005827965896 -0.85 -0.017161068960037 0.000121579001631253 -0.8 -0.00249011267932276 2.26360215187798e-05 -0.75 -0.000361508691123472 4.21445744634287e-06 -0.7 -5.25154439546897e-05 7.84663581577327e-07 -0.65 -7.63528431261732e-06 1.46092040173207e-07 -0.6 -1.11137485576208e-06 2.72004265233506e-08 -0.55 -1.62010470861195e-07 5.06471262763436e-09 -0.5 -2.36626975013426e-08 9.43364185070673e-10 -0.45 -3.46507616947195e-09 1.75995846090794e-10 -0.4 -5.09516269048764e-10 3.30837259264042e-11 -0.35 -7.56902647153641e-11 6.43513660427464e-12 -0.3 -1.17066561520614e-11 1.43291446790137e-12 -0.25 -2.1544681845963e-12 4.60891732372878e-13 -0.2 -6.48097096444777e-13 2.3922618478169e-13 -0.15 -3.37419087799477e-13 1.57264868541253e-13 -0.0999999999999997 -2.05600380652274e-13 1.01314194391343e-13 -0.0499999999999997 -1.00748245348353e-13 5.02062762172039e-14 3.19189119579733e-16 4.13279171646886e-23 -4.13275967145977e-23 0.0500000000000003 1.00116877358361e-13 -5.00384053497008e-14 0.1 2.00135412867374e-13 -1.00045555872717e-13 0.15 3.00138418793934e-13 -1.50046887330438e-13 0.2 4.00138935549866e-13 -2.00047135474711e-13 0.25 5.00139046932611e-13 -2.50047182076608e-13 0.3 6.00139091182114e-13 -3.00047191377065e-13 0.35 7.00139124171422e-13 -3.50047194046419e-13 0.4 8.0013915539305e-13 -4.00047195912321e-13 0.45 9.00139186639351e-13 -4.50047198220699e-13 0.5 1.0001392183838e-12 -5.00047201350709e-13 0.55 1.10013925099376e-12 -5.50047205641246e-13 0.6 1.20013928482453e-12 -6.00047211428675e-13 0.65 1.30013932031255e-12 -6.50047219131605e-13 0.700000000000001 1.40013935799855e-12 -7.00047229272479e-13 0.750000000000001 1.50013939855445e-12 -7.50047242504103e-13 0.800000000000001 1.60013944281343e-12 -8.00047259639644e-13 0.850000000000001 1.70013949180002e-12 -8.50047281682814e-13 0.900000000000001 1.80013954675522e-12 -9.00047309853413e-13 0.950000000000001 1.90013960915183e-12 -9.50047345603255e-13 1 2.00013968069695e-12 -1.00004739061937e-12 -1 -6.32098889840421 0.0605130727475002 -0.95 -1.05300188876589 0.0126984928103491 -0.9 -0.175532099505921 0.00266474188743102 -0.85 -0.0292845993037305 0.000559188357169254 -0.8 -0.00489064783660784 0.000117344055554711 -0.75 -0.000817785733770458 2.46243103052511e-05 -0.7 -0.000136951495045236 5.16734064081559e-06 -0.65 -2.29780330547539e-05 1.08435194839996e-06 -0.6 -3.86457051159172e-06 2.27548573707159e-07 -0.55 -6.51915756726499e-07 4.77508310125495e-08 -0.5 -1.10379181034682e-07 1.0020756668986e-08 -0.45 -1.87737258191766e-08 2.10317048912053e-09 -0.4 -3.21100942064045e-09 4.41648485056683e-10 -0.35 -5.53218963602293e-10 9.29434037817859e-11 -0.3 -9.64208472009063e-11 1.97291461828147e-11 -0.25 -1.72629192631765e-11 4.32583892443438e-12 -0.2 -3.3599180121584e-12 1.05399192555304e-12 -0.15 -8.26341358303957e-13 3.27896677162355e-13 -0.0999999999999997 -2.92557394991567e-13 1.36020050116805e-13 -0.0499999999999997 -1.14300906252688e-13 5.62476512807162e-14 3.19189119579733e-16 5.74617873307404e-22 -5.74617535674937e-22 0.0500000000000003 1.02649084646784e-13 -5.13110528367314e-14 0.1 2.0314689757082e-13 -1.01586174585377e-13 0.15 3.03242071500376e-13 -1.51643910319007e-13 0.2 4.03260854364996e-13 -2.01656029822995e-13 0.25 5.03264949830319e-13 -2.51658579330076e-13 0.3 6.03266184983257e-13 -3.01659124183476e-13 0.35 7.03266857054235e-13 -3.51659253463706e-13 0.4 8.03267419381324e-13 -4.01659302591468e-13 0.45 9.03267966009336e-13 -4.51659345744786e-13 0.5 1.00326851525099e-12 -5.01659397669436e-13 0.55 1.10326907884123e-12 -5.51659469249673e-13 0.6 1.20326966293593e-12 -6.01659566245202e-13 0.65 1.30327027499612e-12 -6.51659695794383e-13 0.700000000000001 1.40327092419636e-12 -7.01659866754906e-13 0.750000000000001 1.50327162186029e-12 -7.51660090124924e-13 0.800000000000001 1.6032723819509e-12 -8.01660379529829e-13 0.850000000000001 1.70327322158156e-12 -8.51660751734191e-13 0.900000000000001 1.80327416148257e-12 -9.01661227112888e-13 0.950000000000001 1.90327522634514e-12 -9.51661830002775e-13 1 2.00327644497845e-12 -1.00166258886974e-12 -1 -8.60371176254274 0.498435427837973 -0.95 -1.84213728258885 0.128935663789577 -0.9 -0.395470605631505 0.0333531777003904 -0.85 -0.0851682168321259 0.00862782592505589 -0.8 -0.0184101258207032 0.00223185271458479 -0.75 -0.00399691799726668 0.000577337394380012 -0.7 -0.000872120770323432 0.000149346085647428 -0.65 -0.000191387891614955 3.86329612906097e-05 -0.6 -4.22741856901117e-05 9.99360421369521e-06 -0.55 -9.40628709042089e-06 2.58515303334836e-06 -0.5 -2.11002386781702e-06 6.68729088106644e-07 -0.45 -4.77521198628455e-07 1.72987015700744e-07 -0.4 -1.09092290753069e-07 4.47480341213109e-08 -0.35 -2.51699634650821e-08 1.15750376504354e-08 -0.3 -5.86614433264537e-09 2.99378407983378e-09 -0.25 -1.38079129489271e-09 7.73941672042732e-10 -0.2 -3.27832028911819e-10 1.99674047073389e-10 -0.15 -7.80677299507629e-11 5.10849856410025e-11 -0.0999999999999997 -1.81784123717131e-11 1.26107858011525e-11 -0.0499999999999997 -3.62490496361018e-12 2.62118391695723e-12 3.19189119579733e-16 5.0744281634402e-20 -5.07442784032277e-20 0.0500000000000003 9.66676167702485e-13 -7.15115981233632e-13 0.1 1.2813803247718e-12 -9.37168817286051e-13 0.15 1.43496539435701e-12 -1.03167582623155e-12 0.2 1.54846310937494e-12 -1.09318937613291e-12 0.25 1.65192671194259e-12 -1.14616845925583e-12 0.3 1.75286535655943e-12 -1.19694030310778e-12 0.35 1.85316573870871e-12 -1.24714185049408e-12 0.4 1.95330439339409e-12 -1.29719682313256e-12 0.45 2.05340248664674e-12 -1.34721518359116e-12 0.5 2.15349131969821e-12 -1.39722582318672e-12 0.55 2.25357978329625e-12 -1.44723708262421e-12 0.6 2.35366994360875e-12 -1.497250872298e-12 0.65 2.45376414663607e-12 -1.54726946636763e-12 0.700000000000001 2.55386376289333e-12 -1.59729418126597e-12 0.750000000000001 2.65397045985654e-12 -1.64732663369485e-12 0.800000000000001 2.75408626973082e-12 -1.69736880506289e-12 0.850000000000001 2.85421366217923e-12 -1.74742311347794e-12 0.900000000000001 2.95435561817599e-12 -1.79749248769248e-12 0.950000000000001 3.05451569702332e-12 -1.84758043467114e-12 1 3.15469808707778e-12 -1.89769109120308e-12 -1 -13.2713453743622 2.68370675662406 -0.95 -3.50376299930901 0.814493889989311 -0.9 -0.930272604889327 0.247195523519849 -0.85 -0.248525207887812 0.0750228179155004 -0.8 -0.0668389569897212 0.0227691145607402 -0.75 -0.0181041363260139 0.00691033192322964 -0.7 -0.00494049253498062 0.00209725704818036 -0.65 -0.00135867591960517 0.00063650874973141 -0.6 -0.000376589981755516 0.000193177688625406 -0.55 -0.000105205733627814 5.86285469385737e-05 -0.5 -2.96206986250244e-05 1.77934394361737e-05 -0.45 -8.403275486337e-06 5.40015333199813e-06 -0.4 -2.4013493108721e-06 1.63884227284598e-06 -0.35 -6.90892342037809e-07 4.97299903421936e-07 -0.3 -1.99989459049952e-07 1.50846485469852e-07 -0.25 -5.81667069048459e-08 4.56992726157379e-08 -0.2 -1.69431760517607e-08 1.37874939994929e-08 -0.15 -4.89383916909253e-09 4.10236647921958e-09 -0.0999999999999997 -1.3541234465785e-09 1.16293554802216e-09 -0.0499999999999997 -3.09539300769476e-10 2.70795604191505e-10 3.19189119579733e-16 1.25417965065276e-18 -1.25417953534519e-18 0.0500000000000003 9.2097118672452e-11 -8.22201734607001e-11 0.1 1.1963358351171e-10 -1.07208484606359e-10 0.15 1.27939733422291e-10 -1.14827167020285e-10 0.2 1.30501840724346e-10 -1.17174246271727e-10 0.25 1.31344060002507e-10 -1.1792142768244e-10 0.3 1.31670227186215e-10 -1.18183065286824e-10 0.35 1.31841273489442e-10 -1.18297370123001e-10 0.4 1.31965627577535e-10 -1.18367000129002e-10 0.45 1.32075929159693e-10 -1.18423127544111e-10 0.5 1.321820340354e-10 -1.18475233362469e-10 0.55 1.32286942410586e-10 -1.18526220523547e-10 0.6 1.32391665641871e-10 -1.18577073681017e-10 0.65 1.32496333930453e-10 -1.18627914318147e-10 0.700000000000001 1.32601251806177e-10 -1.18679042854951e-10 0.750000000000001 1.32706499049914e-10 -1.18730536151229e-10 0.800000000000001 1.32812171695968e-10 -1.18782487624231e-10 0.850000000000001 1.32918385400224e-10 -1.18835010383538e-10 0.900000000000001 1.33025278912553e-10 -1.18888240644765e-10 0.950000000000001 1.33133017528126e-10 -1.18942341176229e-10 1 1.33241796204426e-10 -1.18997504434247e-10 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_1D_breakdown_dc.standard0000644000175000017500000001544314163340332026256 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002002e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24833004903471e-28 5.44087535241038e-28 0.0500000000000003 -5.00000000172099e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732967e-13 5.05259770605553e-13 0.3 -3.00001561179702e-13 6.19324037995477e-13 0.35 -3.50014977027496e-13 7.70944534001906e-13 0.4 -4.00143680477532e-13 1.06045936684611e-12 0.45 -4.51378382653458e-13 1.85671697271935e-12 0.5 -5.13223359838493e-13 4.51945012807264e-12 0.55 -6.76856822893239e-13 1.40984637154991e-11 0.6 -1.81698673391414e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.7 -1.12703055744962e-10 3.47593602243085e-09 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964245e-13 -0.2 2.00047134849492e-13 -4.14897162929442e-13 -0.15 1.50046886985272e-13 -3.14379680798671e-13 -0.0999999999999997 1.00045555694827e-13 -2.13018560796766e-13 -0.0499999999999997 5.00384052730517e-14 -1.09436572570534e-13 3.19189119579733e-16 4.12241672939325e-23 -4.12237543930414e-23 0.0500000000000003 -5.02062761158823e-14 1.24914117034009e-13 0.1 -1.01314194087917e-13 2.90980896152449e-13 0.15 -1.57264867824796e-13 5.6772530706186e-13 0.2 -2.3922618334048e-13 1.14882509115062e-12 0.25 -4.60891729951517e-13 2.60210366156926e-12 0.3 -1.43291446464738e-12 6.7361005262029e-12 0.35 -6.43513660098853e-12 2.00061162068745e-11 0.4 -3.3083725924125e-11 6.85489977652525e-11 0.45 -1.75995846089847e-10 2.70515774412069e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.7 -7.84663581577333e-07 9.28415745768918e-07 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102723e-13 -6.75373800064315e-13 -0.25 2.51658562604104e-13 -5.74880432730861e-13 -0.2 2.01656020281097e-13 -4.73668387073436e-13 -0.15 1.51643905151379e-13 -3.7068792509707e-13 -0.0999999999999997 1.01586171991483e-13 -2.63345274810061e-13 -0.0499999999999997 5.13110517666997e-14 -1.45191279608749e-13 3.19189119579733e-16 5.73187626578003e-22 -5.73186882780777e-22 0.0500000000000003 -5.62476501263905e-14 2.1395076361758e-13 0.1 -1.36020047178325e-13 6.08121963869111e-13 0.15 -3.27896671402011e-13 1.49931858969372e-12 0.2 -1.05399191610206e-12 3.87148001995185e-12 0.25 -4.32583891173358e-12 1.11248349371637e-11 0.3 -1.97291461695124e-11 3.63099468894291e-11 0.35 -9.29434037716976e-11 1.33935721720875e-10 0.4 -4.41648485051716e-10 5.45224221543533e-10 0.45 -2.10317048911922e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.7 -5.16734064081562e-06 5.53886593993007e-06 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105082e-10 -0.6 1.18575135234565e-10 -1.30294766063313e-10 -0.55 1.18524897840166e-10 -1.30191699950076e-10 -0.5 1.1847435303484e-10 -1.30085539519985e-10 -0.45 1.18422557934566e-10 -1.29972596875661e-10 -0.4 1.18366643189143e-10 -1.29844551137541e-10 -0.35 1.18297154466393e-10 -1.29681120696714e-10 -0.3 1.18182940325545e-10 -1.29429638088204e-10 -0.25 1.17921358696592e-10 -1.2894466132045e-10 -0.2 1.17174210319454e-10 -1.27802689184034e-10 -0.15 1.14827149614377e-10 -1.24718744458678e-10 -0.0999999999999997 1.07208477085037e-10 -1.15677456402344e-10 -0.0499999999999997 8.22201709703041e-11 -8.78797381909894e-11 3.19189119579733e-16 1.25105797603415e-18 -1.25105791787301e-18 0.0500000000000003 -2.70795603007843e-10 2.82482764700739e-10 0.1 -1.16293554640168e-09 1.19968102048681e-09 0.15 -4.10236647769957e-09 4.19605719139159e-09 0.2 -1.37874939984302e-08 1.40217410358373e-08 0.25 -4.56992726152112e-08 4.631725770677e-08 0.3 -1.50846485469688e-07 1.5262548013658e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.7 -0.00209725704818037 0.00214673139842961 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full_subcoupl_peri_con.standard0000644000175000017500000003037314163340332030446 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704452e-13 3.19189119579733e-16 -2.24597758604642e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732606e-13 0.15 -1.50000001763804e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.0275053895663e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937575833e-13 4.68053043062289e-11 0.6 -1.81705065604636e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.700000000000001 -1.12996695978014e-10 5.98410414791998e-09 0.750000000000001 -1.10383363062539e-09 4.77985420901422e-08 0.800000000000001 -1.35637981711526e-08 4.67751956176057e-07 0.850000000000001 -4.58638043204062e-07 5.40334615789862e-06 0.900000000000001 -7.90023889136148e-06 3.73380939339645e-05 0.950000000000001 -3.39922579325693e-05 0.000117420896214554 1 -0.000154833994508258 0.000438766155241503 -1 1.0000002982035e-12 -5.68278336533812e-08 -0.95 9.50000313067236e-13 -4.03167332210399e-08 -0.9 9.00000324036022e-13 -2.81325130735503e-08 -0.85 8.50000332004957e-13 -1.92808077777511e-08 -0.8 8.00000337697016e-13 -1.29584696139916e-08 -0.75 7.50000341688261e-13 -8.5255512560363e-09 -0.7 7.00000344430938e-13 -5.47965562890097e-09 -0.65 6.5000034627436e-13 -3.43273255421563e-09 -0.6 6.00000347483557e-13 -2.09036215699508e-09 -0.55 5.50000348255685e-13 -1.23352296375787e-09 -0.5 5.00000348734246e-13 -7.02799433949326e-10 -0.45 4.50000349021187e-13 -3.84940855613794e-10 -0.4 4.00000349186995e-13 -2.01642835913021e-10 -0.35 3.500003492781e-13 -1.00385894855907e-10 -0.3 3.00000349322309e-13 -4.71348148509438e-11 -0.25 2.50000349318231e-13 -2.0679168066103e-11 -0.2 2.00000349148171e-13 -8.3812881398913e-12 -0.15 1.50000348000001e-13 -3.0938185517782e-12 -0.0999999999999997 1.00000340685856e-13 -1.01511042749411e-12 -0.0499999999999997 5.00002942845008e-14 -2.66565792219188e-13 3.19189119579733e-16 1.02427433355106e-24 -1.02360066706582e-24 0.0500000000000003 -5.00018663360794e-14 1.06858255881035e-13 0.1 -1.00013702555122e-13 2.28016548054588e-13 0.15 -1.50088767231819e-13 3.93536131422773e-13 0.2 -2.0056482332969e-13 6.9723912940615e-13 0.25 -2.53583944846536e-13 1.43345259688129e-12 0.3 -3.22731045966219e-13 3.53194746358105e-12 0.35 -4.94160897510034e-13 9.96129933865168e-12 0.4 -1.31426230036285e-12 3.03702666019944e-11 0.45 -6.24820365205201e-12 9.71096638827245e-11 0.5 -3.72719133314288e-11 3.24549388137495e-10 0.55 -2.337560058302e-10 1.22463940392688e-09 0.6 -1.47958705356281e-09 5.04803121258619e-09 0.65 -9.38019704061828e-09 2.40380673867312e-08 0.700000000000001 -5.94707425701523e-08 1.31450276938143e-07 0.750000000000001 -3.76383527757084e-07 7.96940629998527e-07 0.800000000000001 -2.36202880056644e-06 5.26585614597166e-06 0.850000000000001 -1.53725999922114e-05 4.08247885827873e-05 0.900000000000001 -8.82494684704838e-05 0.00022043903613647 0.950000000000001 -0.000412204086660809 0.000948535102937217 1 -0.00160310714897992 0.00366464893990476 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269568898553e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818038e-13 1.00655442764905e-12 0.2 -2.392261833329e-13 2.4686168200509e-12 0.25 -4.60891730126659e-13 6.50161794905516e-12 0.3 -1.43291446909279e-12 1.81936338777374e-11 0.35 -6.43513668087515e-12 5.36311283875837e-11 0.4 -3.30837269308013e-11 1.67343321508011e-10 0.45 -1.75995843393442e-10 5.61862996859267e-10 0.5 -9.4336336790804e-10 2.12265134113273e-09 0.55 -5.06466960799943e-09 8.79986154130922e-09 0.6 -2.71986734396158e-08 4.02471813831143e-08 0.65 -1.46027831551634e-07 1.98537070563537e-07 0.700000000000001 -7.82462249095182e-07 1.03033998827937e-06 0.750000000000001 -4.14363398953671e-06 5.52786065364017e-06 0.800000000000001 -2.07267854586308e-05 3.06105742729758e-05 0.850000000000001 -9.37393740924608e-05 0.000179433076227421 0.900000000000001 -0.00040078352345378 0.000841191972235444 0.950000000000001 -0.00143054199241599 0.00307957135286778 1 -0.00377218585876662 0.00835618637775835 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.51659191929466e-13 -3.90866824567585e-08 -0.9 9.01659206073289e-13 -2.70260964040471e-08 -0.85 8.51659216262979e-13 -1.83375518111264e-08 -0.8 8.01659223474039e-13 -1.21891502070679e-08 -0.75 7.51659228478706e-13 -7.92233344451718e-09 -0.7 7.01659231878798e-13 -5.02387788068211e-09 -0.65 6.51659234135313e-13 -3.10064995027489e-09 -0.6 6.01659235594741e-13 -1.85716530848194e-09 -0.55 5.51659236512104e-13 -1.07594357716056e-09 -0.5 5.01659237070785e-13 -6.00599391563765e-10 -0.45 4.51659237399277e-13 -3.21559863064465e-10 -0.4 4.01659231345794e-13 -1.64250947092331e-10 -0.35 3.51659207953393e-13 -7.95528875151551e-11 -0.3 3.01659096052372e-13 -3.62902374056185e-11 -0.25 2.51658562579395e-13 -1.54970463877905e-11 -0.2 2.01656020268574e-13 -6.18429190148618e-12 -0.15 1.51643905144667e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987887e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654174e-14 -3.08743136986356e-13 3.19189119579733e-16 5.74616870270763e-22 -5.74615219579319e-22 0.0500000000000003 -5.62476501202554e-14 3.95603754082254e-13 0.1 -1.36020047159744e-13 1.28245455931911e-12 0.15 -3.27896671323952e-13 3.51019833369455e-12 0.2 -1.05399191551394e-12 9.50982884578744e-12 0.25 -4.32583890386713e-12 2.66176081161696e-11 0.3 -1.97291460034729e-11 7.86247088302977e-11 0.35 -9.29433994107565e-11 2.49539765671534e-10 0.4 -4.41648364176036e-10 8.6266096966194e-10 0.45 -2.10316715335933e-09 3.2817653250288e-09 0.5 -1.00206658862656e-08 1.34459228649873e-08 0.55 -4.77483983262124e-08 5.85353412605262e-08 0.6 -2.27484391108618e-07 2.65709517695177e-07 0.65 -1.08268899576151e-06 1.23885944352075e-06 0.700000000000001 -5.12525620261219e-06 5.87041577473624e-06 0.750000000000001 -2.36176697985174e-05 2.80399517998106e-05 0.800000000000001 -9.8235389184985e-05 0.000133349988584112 0.850000000000001 -0.000345683650587034 0.000611889641257962 0.900000000000001 -0.00110984297273814 0.00230493552718344 0.950000000000001 -0.0029233145424265 0.0064454872166588 1 -0.00593312682012173 0.0135267371583964 -1 1.89720565797175e-12 -5.40738965276465e-08 -0.95 1.84720568061488e-12 -3.76904764123013e-08 -0.9 1.7972056970803e-12 -2.57947267709649e-08 -0.85 1.74720570885579e-12 -1.7305874224078e-08 -0.8 1.69720571712838e-12 -1.13616361565276e-08 -0.75 1.64720572283084e-12 -7.28441633717834e-09 -0.7 1.59720572668406e-12 -4.55054604641475e-09 -0.65 1.54720572923508e-12 -2.76267170564357e-09 -0.6 1.49720573089079e-12 -1.6253326004859e-09 -0.55 1.44720573194733e-12 -9.23711672954931e-10 -0.5 1.39720452887322e-12 -5.05480532517248e-10 -0.45 1.3472010796548e-12 -2.65599377357061e-10 -0.4 1.29718774441431e-12 -1.33876228273689e-10 -0.35 1.24713619257124e-12 -6.50407814646737e-11 -0.3 1.19693690441723e-12 -3.10490659919122e-11 -0.25 1.14616650186896e-12 -1.53083418037055e-11 -0.2 1.09318830286527e-12 -8.49850504922242e-12 -0.15 1.0316752725573e-12 -5.66574495721884e-12 -0.0999999999999997 9.3716855687561e-13 -4.27046691435299e-12 -0.0499999999999997 7.15115883834945e-13 -2.86541904273985e-12 3.19189119579733e-16 5.07442640648919e-20 -5.07442428603108e-20 0.0500000000000003 -2.6211838406522e-12 7.41304207544626e-12 0.1 -1.26107855905388e-11 2.84695356319931e-11 0.15 -5.10849844353254e-11 9.27379333940439e-11 0.2 -1.99674032738752e-10 3.02109349283739e-10 0.25 -7.73941467395511e-10 1.02204599157948e-09 0.3 -2.99378102958321e-09 3.60097557720966e-09 0.35 -1.15749912502958e-08 1.31093539116816e-08 0.4 -4.47473189774876e-08 4.88608825004607e-08 0.45 -1.72975897156987e-07 1.8494492503403e-07 0.5 -6.68555206297658e-07 7.07147624287588e-07 0.55 -2.58242623093903e-06 2.720856186321e-06 0.6 -9.95092381197296e-06 1.05007978150979e-05 0.65 -3.79729276746011e-05 4.04382303023487e-05 0.700000000000001 -0.00013966194819932 0.00015309862387393 0.750000000000001 -0.000458375428808755 0.000545526981306603 0.800000000000001 -0.00120350334166392 0.00167452976895611 0.850000000000001 -0.00246729166564191 0.00409272500932223 0.900000000000001 -0.00423027241542248 0.00812024026600905 0.950000000000001 -0.00660167239594483 0.0141374968656813 1 -0.00968365059099473 0.022355454256567 -1 1.18975126033603e-10 -5.24882212949519e-08 -0.95 1.18925126063715e-10 -3.62494799011578e-08 -0.9 1.18875126086823e-10 -2.45717858086152e-08 -0.85 1.18825126104659e-10 -1.63270792058133e-08 -0.8 1.18775126118596e-10 -1.0621942814985e-08 -0.75 1.18725126129705e-10 -6.76014645165473e-09 -0.7 1.18675126138812e-10 -4.20869529378632e-09 -0.65 1.18625126146545e-10 -2.56749571269029e-09 -0.6 1.18575126153397e-10 -1.54268194493583e-09 -0.55 1.18524888765126e-10 -9.23572330132681e-10 -0.5 1.18474343965553e-10 -5.63149550253759e-10 -0.45 1.1842254887086e-10 -3.61883156256586e-10 -0.4 1.18366634131114e-10 -2.546488004522e-10 -0.35 1.18297145414736e-10 -2.004356138805e-10 -0.3 1.1818293128271e-10 -1.74484344328586e-10 -0.25 1.1792134967053e-10 -1.62450012854207e-10 -0.2 1.17174201335644e-10 -1.56108897563765e-10 -0.15 1.14827140755257e-10 -1.49934768111583e-10 -0.0999999999999997 1.07208468629427e-10 -1.37244090970146e-10 -0.0499999999999997 8.22201639941173e-11 -1.02550375876865e-10 3.19189119579733e-16 1.25417742922045e-18 -1.25417750030628e-18 0.0500000000000003 -2.70795556005994e-10 3.14437582760157e-10 0.1 -1.16293508147474e-09 1.30224166663192e-09 0.15 -4.10236177487937e-09 4.45785542339823e-09 0.2 -1.37874442094665e-08 1.46542714148567e-08 0.25 -4.56987349224051e-08 4.78536221405684e-08 0.3 -1.50840630793657e-07 1.56502335408947e-07 0.35 -4.9723588962756e-07 5.13260740274276e-07 0.4 -1.63814058712925e-06 1.68719320919794e-06 0.45 -5.39245313573965e-06 5.55350009367142e-06 0.5 -1.77090933885614e-05 1.82702549211288e-05 0.55 -5.77133981528126e-05 5.97925641115175e-05 0.6 -0.000183570977156428 0.000192012203239319 0.65 -0.00054499416403684 0.000583676271462722 0.700000000000001 -0.00139249436101492 0.00157084215278601 0.750000000000001 -0.00287326010566414 0.00352482219649895 0.800000000000001 -0.00486540015194994 0.00660445199248068 0.850000000000001 -0.00716230504682151 0.0108124964402168 0.900000000000001 -0.00962809418949229 0.0161999064321913 0.950000000000001 -0.0122065350538203 0.0228978933720334 1 -0.0150386749819639 0.0309412041527181 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_lat_nqs.standard0000644000175000017500000003036714163340332025356 0ustar carstencarstenV(base) I(coll) I(base) -1 9.99999999992886e-13 -2.00000791472521e-12 -0.95 9.49999999993391e-13 -1.90000791472622e-12 -0.9 8.99999999993891e-13 -1.80000791472722e-12 -0.85 8.49999999994385e-13 -1.70000791472821e-12 -0.8 7.99999999994873e-13 -1.60000791472918e-12 -0.75 7.49999999995357e-13 -1.50000791473015e-12 -0.7 6.99999999995835e-13 -1.40000791473111e-12 -0.65 6.49999999996308e-13 -1.30000791473205e-12 -0.6 5.99999999996776e-13 -1.20000791473299e-12 -0.55 5.49999999997239e-13 -1.10000791473392e-12 -0.5 4.99999999997697e-13 -1.00000791471696e-12 -0.45 4.4999999999815e-13 -9.00007914670163e-13 -0.4 3.99999999998598e-13 -8.00007914495994e-13 -0.35 3.49999999999041e-13 -7.0000791385444e-13 -0.3 2.99999999999479e-13 -6.00007911497736e-13 -0.25 2.49999999999912e-13 -5.00007902846924e-13 -0.2 2.0000000000034e-13 -4.00007871098472e-13 -0.15 1.50000000000761e-13 -3.00007754587986e-13 -0.0999999999999997 1.00000000001159e-13 -2.0000732702388e-13 -0.0499999999999997 5.00000000013855e-14 -1.00005757977433e-13 3.19189119579733e-16 -2.24597758607213e-28 5.42736302792056e-28 0.0500000000000003 -5.00000000168068e-14 1.00021130225445e-13 0.1 -1.0000000018151e-13 2.0009867251583e-13 0.15 -1.50000001765011e-13 3.0038323263826e-13 0.2 -2.00000016959606e-13 4.01427500436222e-13 0.25 -2.50000162730981e-13 5.05259770601309e-13 0.3 -3.00001561177281e-13 6.19324037989424e-13 0.35 -3.50014977024497e-13 7.70944533990404e-13 0.4 -4.00143680473405e-13 1.06045936681025e-12 0.45 -4.51378382645889e-13 1.85671697252829e-12 0.5 -5.13223359811045e-13 4.51945012646338e-12 0.55 -6.76856822535271e-13 1.4098463697296e-11 0.6 -1.81698671997395e-12 6.65231387420044e-11 0.65 -1.23250252489551e-11 4.0235043535985e-10 0.700000000000001 -1.12702990963354e-10 3.47667549451757e-09 0.750000000000001 -1.07523222070772e-09 3.70526301265343e-08 0.800000000000001 -1.03080806411378e-08 4.20862882965585e-07 0.850000000000001 -9.88070497107414e-08 5.1946093933294e-06 0.900000000000001 -9.43446882156498e-07 3.63337982605815e-05 0.950000000000001 -8.97025627227336e-06 0.000111456585141501 1 -8.49627836494226e-05 0.000400804468198351 -1 1.0000003493651e-12 -2.00170685362387e-12 -0.95 9.5000034936564e-13 -1.90170685362494e-12 -0.9 9.0000034936617e-13 -1.801706853626e-12 -0.85 8.50000349366693e-13 -1.70170685362705e-12 -0.8 8.00000349367212e-13 -1.60170685362808e-12 -0.75 7.50000349367725e-13 -1.50170685362911e-12 -0.7 7.00000349368232e-13 -1.40170685363012e-12 -0.65 6.50000349368734e-13 -1.30170685191126e-12 -0.6 6.00000349369231e-13 -1.20170684865736e-12 -0.55 5.50000349369722e-13 -1.10170683924345e-12 -0.5 5.00000349370208e-13 -1.00170681201157e-12 -0.45 4.50000349370689e-13 -9.01706733240693e-13 -0.4 4.00000349371165e-13 -8.01706505391717e-13 -0.35 3.50000349370788e-13 -7.01705846329028e-13 -0.3 3.00000349366731e-13 -6.01703939966464e-13 -0.25 2.50000349338506e-13 -5.016984257379e-13 -0.2 2.00000349157044e-13 -4.01682475564733e-13 -0.15 1.50000348003782e-13 -3.01636338577736e-13 -0.0999999999999997 1.00000340687434e-13 -2.01502881962142e-13 -0.0499999999999997 5.00002942850727e-14 -1.01116829369693e-13 3.19189119579733e-16 1.0242743331418e-24 -1.02392883320239e-24 0.0500000000000003 -5.00018663365076e-14 1.03231482028287e-13 0.1 -1.00013702555992e-13 2.1258511303965e-13 0.15 -1.50088767233173e-13 3.39681870191398e-13 0.2 -2.00564823331585e-13 5.18321118290389e-13 0.25 -2.53583944846311e-13 8.47446497883373e-13 0.3 -3.22731045874542e-13 1.62074623971858e-12 0.35 -4.94160894910353e-13 3.73538840360204e-12 0.4 -1.31426223347981e-12 1.00900194587775e-11 0.45 -6.24820200754852e-12 3.10042419999178e-11 0.5 -3.72718755897852e-11 1.08679860874887e-10 0.55 -2.33755174457972e-10 5.16714052353503e-10 0.6 -1.4795737543766e-09 2.70353633478468e-09 0.65 -9.38020093238758e-09 1.61012885352608e-08 0.700000000000001 -5.94845439177995e-08 1.03297438167785e-07 0.750000000000001 -3.77212597068107e-07 6.87754574686559e-07 0.800000000000001 -2.39088248115659e-06 4.78017302812396e-06 0.850000000000001 -1.50941060293441e-05 3.84571489170929e-05 0.900000000000001 -9.40635438157276e-05 0.000209379848892034 0.950000000000001 -0.000579925492856519 0.000945393705337797 1 -0.00359802297739672 0.00499145074905965 -1 1.00004719154535e-12 -2.01521474407745e-12 -0.95 9.50047191545903e-13 -1.91521474407854e-12 -0.9 9.00047191546447e-13 -1.81521474407963e-12 -0.85 8.50047191546986e-13 -1.71521474408071e-12 -0.8 8.00047191547519e-13 -1.61521474408178e-12 -0.75 7.50047191548046e-13 -1.51521474408283e-12 -0.7 7.00047191548568e-13 -1.41521472394938e-12 -0.65 6.50047191549084e-13 -1.31521469115216e-12 -0.6 6.00047191549595e-13 -1.21521460492797e-12 -0.55 5.50047191550101e-13 -1.11521437824653e-12 -0.5 5.00047191550601e-13 -1.0152137823089e-12 -0.45 4.50047191551096e-13 -9.1521221561233e-13 -0.4 4.00047191483447e-13 -8.15208096763256e-13 -0.35 3.50047191186095e-13 -7.15197268361914e-13 -0.3 3.00047189586883e-13 -6.15168800131713e-13 -0.25 2.50047180995334e-13 -5.15093953959534e-13 -0.2 2.00047134847608e-13 -4.14897162925663e-13 -0.15 1.50046886983856e-13 -3.14379680795813e-13 -0.0999999999999997 1.0004555569388e-13 -2.13018560794823e-13 -0.0499999999999997 5.00384052725963e-14 -1.09436572569536e-13 3.19189119579733e-16 4.13269573181821e-23 -4.13265421801308e-23 0.0500000000000003 -5.02062761150309e-14 1.24914117032183e-13 0.1 -1.01314194085812e-13 2.90980896146487e-13 0.15 -1.57264867819926e-13 5.67725307041357e-13 0.2 -2.3922618332536e-13 1.14882509106093e-12 0.25 -4.6089172985505e-13 2.60210366104942e-12 0.3 -1.43291446351593e-12 6.73610052224912e-12 0.35 -6.43513658355382e-12 2.0006116167554e-11 0.4 -3.30837256069204e-11 6.85489972496799e-11 0.45 -1.75995839420087e-10 2.70515765621893e-10 0.5 -9.43364019968776e-10 1.25634078552919e-09 0.55 -5.06470830100481e-09 6.17859301081287e-09 0.6 -2.7200307050773e-08 3.20333790405372e-08 0.65 -1.46088643876295e-07 1.71071665617326e-07 0.700000000000001 -7.84565512475998e-07 9.28370685184027e-07 0.750000000000001 -4.21159682652482e-06 5.0957317560057e-06 0.800000000000001 -2.25512853776997e-05 2.85911101567064e-05 0.850000000000001 -0.000119062712503965 0.000171819321519616 0.900000000000001 -0.000611029589133795 0.000853945713827885 0.950000000000001 -0.00313296929420804 0.00395251599525072 1 -0.0163489582116815 0.0197484993189596 -1 1.00165923777738e-12 -2.07571285065079e-12 -0.95 9.51659237777939e-13 -1.97571285065191e-12 -0.9 9.01659237778496e-13 -1.87571285065303e-12 -0.85 8.51659237779047e-13 -1.77571285065413e-12 -0.8 8.01659237779593e-13 -1.67571285065522e-12 -0.75 7.51659237780134e-13 -1.5757127457188e-12 -0.7 7.01659237780668e-13 -1.47571259312223e-12 -0.65 6.51659237781198e-13 -1.37571221862174e-12 -0.6 6.01659237781721e-13 -1.2757112995299e-12 -0.55 5.5165923778224e-13 -1.17570904391477e-12 -0.5 5.01659237782755e-13 -1.07570350823564e-12 -0.45 4.51659237783271e-13 -9.75689922700544e-13 -0.4 4.01659231544558e-13 -8.75656575154862e-13 -0.35 3.51659208052071e-13 -7.75574726200471e-13 -0.3 3.01659096099551e-13 -6.75373800057952e-13 -0.25 2.51658562601424e-13 -5.74880432725457e-13 -0.2 2.01656020278917e-13 -4.73668387068976e-13 -0.15 1.51643905149729e-13 -3.70687925093555e-13 -0.0999999999999997 1.0158617199046e-13 -2.63345274807564e-13 -0.0499999999999997 5.13110517665695e-14 -1.45191279607598e-13 3.19189119579733e-16 5.74616864354307e-22 -5.74616128347082e-22 0.0500000000000003 -5.62476501217247e-14 2.13950763608805e-13 0.1 -1.36020047164856e-13 6.08121963831103e-13 0.15 -3.2789667134351e-13 1.49931858949725e-12 0.2 -1.05399191560416e-12 3.87148001860835e-12 0.25 -4.32583890543355e-12 1.11248349249806e-11 0.3 -1.97291460732348e-11 3.63099467460162e-11 0.35 -9.29434020937211e-11 1.33935719608239e-10 0.4 -4.41648452740887e-10 5.45224184651868e-10 0.45 -2.10316981639636e-09 2.39988750106734e-09 0.5 -1.00207421701475e-08 1.09380217985224e-08 0.55 -4.77505109177635e-08 5.10883843068001e-08 0.6 -2.27541412181684e-07 2.41931769275505e-07 0.65 -1.08419052295199e-06 1.15461035934708e-06 0.700000000000001 -5.16368793899052e-06 5.535340282757e-06 0.750000000000001 -2.45416500529948e-05 2.66120355567639e-05 0.800000000000001 -0.000115494453641723 0.000128131105578953 0.850000000000001 -0.000521587960023515 0.000618614618627282 0.900000000000001 -0.00223798215178467 0.00272795885497742 0.950000000000001 -0.00990895670463259 0.0116115410363288 1 -0.0453211440692819 0.0520545481168062 -1 1.89720573526476e-12 -4.12190327759748e-12 -0.95 1.84720573526541e-12 -4.02190327759877e-12 -0.9 1.79720573526605e-12 -3.92190225628394e-12 -0.85 1.74720573526668e-12 -3.82190105520865e-12 -0.8 1.69720573526731e-12 -3.721898441657e-12 -0.75 1.64720573526794e-12 -3.62189275454461e-12 -0.7 1.59720573526858e-12 -3.52188037933762e-12 -0.65 1.54720573526928e-12 -3.42185345077921e-12 -0.6 1.49720573527018e-12 -3.32179485400285e-12 -0.55 1.44720573527173e-12 -3.22166734691175e-12 -0.5 1.39720453153277e-12 -3.12138868664042e-12 -0.45 1.34720108189502e-12 -3.02078148587267e-12 -0.4 1.29718774638412e-12 -2.91945437814912e-12 -0.35 1.24713619435721e-12 -2.8165440185386e-12 -0.3 1.19693690606723e-12 -2.71012381335545e-12 -0.25 1.1461665034076e-12 -2.59581606483471e-12 -0.2 1.09318830430264e-12 -2.46337786130943e-12 -0.15 1.03167527389042e-12 -2.28774768401825e-12 -0.0999999999999997 9.37168558073828e-13 -2.00366730774302e-12 -0.0499999999999997 7.15115884763796e-13 -1.42765480462526e-12 3.19189119579733e-16 5.07442621968693e-20 -5.07442556840337e-20 0.0500000000000003 -2.62118384600169e-12 4.11796372166832e-12 0.1 -1.26107856437278e-11 1.7328904433958e-11 0.15 -5.10849850585797e-11 6.28591141288991e-11 0.2 -1.99674041204837e-10 2.2722124961868e-10 0.25 -7.73941591432737e-10 8.37924759942764e-10 0.3 -2.99378291971928e-09 3.1468665633711e-09 0.35 -1.15750207178506e-08 1.19668109476006e-08 0.4 -4.47477850361777e-08 4.58739036124549e-08 0.45 -1.72983336209221e-07 1.76649775032978e-07 0.5 -6.68674593767429e-07 6.8217461926692e-07 0.55 -2.58434476788191e-06 2.63879473351743e-06 0.6 -9.98161464831902e-06 1.02138071180625e-05 0.65 -3.84556871592036e-05 3.94743494060418e-05 0.700000000000001 -0.000146763120347877 0.000151260188039609 0.750000000000001 -0.000541652454280842 0.000560990705776321 0.800000000000001 -0.00181031548876771 0.00188600959730401 0.850000000000001 -0.00497932753409006 0.00522924824969989 0.900000000000001 -0.0115236882322018 0.0122619011700503 0.950000000000001 -0.0289639355656955 0.0312204289952559 1 -0.119781573857365 0.129548516633007 -1 1.1897513523368e-10 -1.3109762592168e-10 -0.95 1.18925135233684e-10 -1.30997614186434e-10 -0.9 1.18875135233689e-10 -1.30897590891873e-10 -0.85 1.18825135233693e-10 -1.30797544651987e-10 -0.8 1.187751352337e-10 -1.30697452865456e-10 -0.75 1.18725135233709e-10 -1.30597270668495e-10 -0.7 1.18675135233728e-10 -1.30496909006154e-10 -0.65 1.18625135233771e-10 -1.30396191103689e-10 -0.6 1.1857513523388e-10 -1.30294766061914e-10 -0.55 1.18524897839482e-10 -1.30191699948656e-10 -0.5 1.18474353034152e-10 -1.30085539518516e-10 -0.45 1.18422557933858e-10 -1.29972596874073e-10 -0.4 1.18366643188356e-10 -1.29844551135676e-10 -0.35 1.18297154465326e-10 -1.29681120694176e-10 -0.3 1.18182940323528e-10 -1.29429638083938e-10 -0.25 1.17921358691404e-10 -1.2894466131148e-10 -0.2 1.17174210303851e-10 -1.27802689161651e-10 -0.15 1.1482714956542e-10 -1.24718744397223e-10 -0.0999999999999997 1.07208476936667e-10 -1.15677456231477e-10 -0.0499999999999997 8.2220170600969e-11 -8.7879737787812e-11 3.19189119579733e-16 1.25417772002613e-18 -1.254177661865e-18 0.0500000000000003 -2.70795590211803e-10 2.82482751447136e-10 0.1 -1.16293536853388e-09 1.19968083838898e-09 0.15 -4.1023644411352e-09 4.19605512034854e-09 0.2 -1.37874717228754e-08 1.40217184660428e-08 0.25 -4.56990318150828e-08 4.63170141538056e-08 0.3 -1.50843889288155e-07 1.52622987390806e-07 0.35 -4.97271919283307e-07 5.02870225492323e-07 0.4 -1.63854055516099e-06 1.65747643594007e-06 0.45 -5.39690035170961e-06 5.46416701006415e-06 0.5 -1.77584061740643e-05 1.80043933644154e-05 0.55 -5.82529442825755e-05 5.91648690801169e-05 0.6 -0.000189210845293339 0.000192585939925606 0.65 -0.000596491921147257 0.000608634010380346 0.700000000000001 -0.00173894510817546 0.00177907416074035 0.750000000000001 -0.00435389807049035 0.00446592481147365 0.800000000000001 -0.00896670043527894 0.00921827217434658 0.850000000000001 -0.0155350247628156 0.0160010078031008 0.900000000000001 -0.0237759980410338 0.0245281675871118 0.950000000000001 -0.0335139510676925 0.0346231308818836 1 -0.044827480166586 0.0463736333719312 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_lat_nqs_dc.standard0000644000175000017500000001007614163340332026424 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000201144478410031 2.79275807044319e-07 0.76 0.000289602003324258 3.99610757168002e-07 0.77 0.000416560176373488 5.73387057704005e-07 0.78 0.000598239996084924 8.24695728390678e-07 0.79 0.00085710557734565 1.18856376473597e-06 0.8 0.00122373188162726 1.71593255254572e-06 0.81 0.00173881828753252 2.48090426718582e-06 0.82 0.00245508840948467 3.59129120288201e-06 0.83 0.00343874762418609 5.20398492628171e-06 0.84 0.00477025860275132 7.5474041963685e-06 0.85 0.00654448938589144 1.09545461957967e-05 0.86 0.00887062134674968 1.59128979093359e-05 0.87 0.0118721065500803 2.31461111051823e-05 0.88 0.0156856129634843 3.37824890859758e-05 0.89 0.0204531474585071 4.9907939664353e-05 0.9 0.0262828515318505 7.74680325125717e-05 0.91 0.0330710721043845 0.000142982089056539 0.92 0.0400594276222968 0.000334604818876947 0.93 0.0464112045322708 0.000714261190231892 0.94 0.052404977279411 0.00122198829306252 0.95 0.0585196141444455 0.00181705030079025 0.96 0.0650537292557407 0.00250539131282424 0.97 0.0721994819833024 0.00331639208183334 0.98 0.0800835300528653 0.00429425912117643 0.99 0.0887784448878897 0.00549917976420734 1 0.0983070302924012 0.00701376910361164 1.01 0.108650710198279 0.00895432672055428 1.02 0.119765235504834 0.0114878796097377 1.03 0.131600237622468 0.0148566328792591 1.04 0.144116232283276 0.0194123462137321 1.05 0.157294727856945 0.0256647290475705 0.75 0.000201552528762167 2.76835854454692e-07 0.76 0.000290183368520161 3.9643687194077e-07 0.77 0.000417391462898079 5.69265055181857e-07 0.78 0.000599434927987478 8.1935184930103e-07 0.79 0.000858836227914392 1.1816486837534e-06 0.8 0.00122626441094476 1.70699886602935e-06 0.81 0.00174257320807534 2.4693692809823e-06 0.82 0.00246074011491087 3.57636155894274e-06 0.83 0.00344738220988089 5.18447420042877e-06 0.84 0.00478361331372686 7.52123123613753e-06 0.85 0.00656531515030743 1.09172034132937e-05 0.86 0.00890330488144984 1.58522187157631e-05 0.87 0.0119240779531899 2.30218029341853e-05 0.88 0.0157714712560721 3.34322515192147e-05 0.89 0.0206085726635885 4.85360951084464e-05 0.9 0.0266172417237109 7.04271241504607e-05 0.91 0.033988470569929 0.000102162947103024 0.92 0.0428835108342668 0.000148964885791801 0.93 0.0532328856544454 0.000232642367922313 0.94 0.0636290782166548 0.00051459603350308 0.95 0.0723665948544326 0.00124064054060695 0.96 0.0806997663241075 0.00223960970908916 0.97 0.0894933062366869 0.00335002556715145 0.98 0.0990866898729292 0.0045821066026421 0.99 0.109715415993205 0.00601098263799166 1 0.121562230946378 0.00773822494550179 1.01 0.134748685670984 0.00989320890788404 1.02 0.149324759248524 0.0126471138905611 1.03 0.165269124934665 0.0162353706642395 1.04 0.182505861209252 0.0209905887573972 1.05 0.200934535542803 0.0273895786880925 0.75 0.00020199333289217 1.67595500875473e-07 0.76 0.000290788753965085 2.48062641935654e-07 0.77 0.000418214900586705 3.68026966480176e-07 0.78 0.000600538950797866 5.46975463265911e-07 0.79 0.000860285219053929 8.14054908881261e-07 0.8 0.00122810717670174 1.21288130118905e-06 0.81 0.00174480908643722 1.80871985010915e-06 0.82 0.00246326269134522 2.69913440654489e-06 0.83 0.00344989926944038 4.02963590051764e-06 0.84 0.00478555204369456 6.01643042802804e-06 0.85 0.00656573671509789 8.97916760200447e-06 0.86 0.00890087228888374 1.3387776706258e-05 0.87 0.0119171658167715 1.99292353174044e-05 0.88 0.0157586602861205 2.96025502381989e-05 0.89 0.0205902763139827 4.38533089530803e-05 0.9 0.0266006812668505 6.47627261082184e-05 0.91 0.0340022835701853 9.53100386589759e-05 0.92 0.0430226629445994 0.00013973308417656 0.93 0.053875316963457 0.000204060956859978 0.94 0.0666717728716216 0.000298387532426282 0.95 0.0807617846175263 0.000494565311366638 0.96 0.0925582087405155 0.00127580306422743 0.97 0.10274088664975 0.00272878967040834 0.98 0.113616991828256 0.00436912624019486 0.99 0.125616777796115 0.00610926986881787 1 0.138948146027098 0.00806954639625574 1.01 0.153835607457783 0.010414807057481 1.02 0.170467071597491 0.0133410778658355 1.03 0.18895352610053 0.017096918468322 1.04 0.209311245696877 0.0220157180430878 1.05 0.231468009774655 0.028560671009079 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_1D_breakdown.standard0000644000175000017500000003034614163340332026212 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002003e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24833004910818e-28 5.44087920427027e-28 0.0500000000000003 -5.00000000172099e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732967e-13 5.05259770605553e-13 0.3 -3.00001561179702e-13 6.19324037995477e-13 0.35 -3.50014977027496e-13 7.70944534001906e-13 0.4 -4.00143680477532e-13 1.06045936684611e-12 0.45 -4.51378382653458e-13 1.85671697271935e-12 0.5 -5.13223359838493e-13 4.51945012807264e-12 0.55 -6.76856822893251e-13 1.40984637154991e-11 0.6 -1.81698673391433e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.700000000000001 -1.12703055744962e-10 3.47593602243093e-09 0.750000000000001 -1.07523878099576e-09 3.70437283331312e-08 0.800000000000001 -1.03087878741443e-08 4.2078518234126e-07 0.850000000000001 -9.88893781007048e-08 5.19838085606027e-06 0.900000000000001 -9.48676927691166e-07 3.64426951851013e-05 0.950000000000001 -9.10101825505032e-06 0.00011233505028582 1 -8.73095920185772e-05 0.000408005693289852 -1 1.00000034937479e-12 -2.00170685364324e-12 -0.95 9.50000349374789e-13 -1.90170685364324e-12 -0.9 9.00000349374789e-13 -1.80170685364324e-12 -0.85 8.50000349374789e-13 -1.70170685364324e-12 -0.8 8.00000349374789e-13 -1.60170685364324e-12 -0.75 7.50000349374789e-13 -1.50170685364324e-12 -0.7 7.00000349374788e-13 -1.40170685364324e-12 -0.65 6.50000349374788e-13 -1.30170685192337e-12 -0.6 6.00000349374788e-13 -1.20170684866847e-12 -0.55 5.50000349374788e-13 -1.10170683925358e-12 -0.5 5.00000349374788e-13 -1.00170681202073e-12 -0.45 4.50000349374788e-13 -9.01706733248892e-13 -0.4 4.00000349374788e-13 -8.01706505398964e-13 -0.35 3.50000349373942e-13 -7.01705846335334e-13 -0.3 3.00000349369419e-13 -6.01703939971841e-13 -0.25 2.50000349340734e-13 -5.01698425742357e-13 -0.2 2.00000349158817e-13 -4.01682475568281e-13 -0.15 1.50000348005106e-13 -3.01636338580386e-13 -0.0999999999999997 1.00000340688313e-13 -2.01502881963904e-13 -0.0499999999999997 5.00002942855105e-14 -1.01116829370575e-13 3.19189119579733e-16 1.02172603031734e-24 -1.02139530779766e-24 0.0500000000000003 -5.0001866336959e-14 1.03231482029227e-13 0.1 -1.00013702556928e-13 2.12585113041765e-13 0.15 -1.50088767234705e-13 3.39681870195628e-13 0.2 -2.00564823334044e-13 5.18321118300554e-13 0.25 -2.53583944850839e-13 8.47446497917415e-13 0.3 -3.22731045887857e-13 1.6207462398814e-12 0.35 -4.94160895009033e-13 3.73538840466231e-12 0.4 -1.31426223491663e-12 1.00900194676136e-11 0.45 -6.24820203465038e-12 3.1004242092473e-11 0.5 -3.72718761854815e-11 1.08679862139373e-10 0.55 -2.33755192271124e-10 5.16681810882584e-10 0.6 -1.47957434063713e-09 2.70327986136166e-09 0.65 -9.38022288444418e-09 1.60992979224565e-08 0.700000000000001 -5.94854287492185e-08 1.03283346580654e-07 0.750000000000001 -3.77249586153611e-07 6.8770590306344e-07 0.800000000000001 -2.39249190437502e-06 4.78271225894699e-06 0.850000000000001 -1.51730461610765e-05 3.86808605065979e-05 0.900000000000001 -9.62266090537246e-05 0.000213338659928004 0.950000000000001 -0.000610263789591723 0.000988312614424231 1 -0.00387025895403701 0.00535161304814611 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964245e-13 -0.2 2.00047134849492e-13 -4.14897162929442e-13 -0.15 1.50046886985272e-13 -3.14379680798671e-13 -0.0999999999999997 1.00045555694827e-13 -2.13018560796766e-13 -0.0499999999999997 5.00384052730517e-14 -1.09436572570534e-13 3.19189119579733e-16 4.1224167297014e-23 -4.12237551819023e-23 0.0500000000000003 -5.02062761158823e-14 1.24914117034009e-13 0.1 -1.01314194087917e-13 2.90980896152449e-13 0.15 -1.57264867824796e-13 5.6772530706186e-13 0.2 -2.3922618334048e-13 1.14882509115062e-12 0.25 -4.60891729951517e-13 2.60210366156926e-12 0.3 -1.43291446464738e-12 6.7361005262029e-12 0.35 -6.43513660098853e-12 2.00061162068745e-11 0.4 -3.3083725924125e-11 6.85489977652525e-11 0.45 -1.75995846089847e-10 2.70515774412069e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.700000000000001 -7.84663581577346e-07 9.28415745768935e-07 0.750000000000001 -4.21445744634298e-06 5.09879601067368e-06 0.800000000000001 -2.26360215187804e-05 2.8700178680583e-05 0.850000000000001 -0.000121579001631256 0.000175699566718311 0.900000000000001 -0.000653005827965913 0.000908465051650113 0.950000000000001 -0.0035073212278215 0.00440328372428201 1 -0.0188379669510573 0.0227283557895423 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787924e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102723e-13 -6.75373800064315e-13 -0.25 2.51658562604104e-13 -5.74880432730861e-13 -0.2 2.01656020281097e-13 -4.73668387073436e-13 -0.15 1.51643905151379e-13 -3.7068792509707e-13 -0.0999999999999997 1.01586171991483e-13 -2.63345274810061e-13 -0.0499999999999997 5.13110517666997e-14 -1.45191279608749e-13 3.19189119579733e-16 5.73187626676611e-22 -5.73186879625334e-22 0.0500000000000003 -5.62476501263905e-14 2.1395076361758e-13 0.1 -1.36020047178325e-13 6.08121963869111e-13 0.15 -3.27896671402011e-13 1.49931858969372e-12 0.2 -1.05399191610206e-12 3.87148001995185e-12 0.25 -4.32583891173358e-12 1.11248349371637e-11 0.3 -1.97291461695124e-11 3.63099468894291e-11 0.35 -9.29434037716976e-11 1.33935721720875e-10 0.4 -4.41648485051716e-10 5.45224221543533e-10 0.45 -2.10317048911922e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.700000000000001 -5.16734064081571e-06 5.53886593993017e-06 0.750000000000001 -2.46243103052517e-05 2.67001628198755e-05 0.800000000000001 -0.000117344055554714 0.000130215837064791 0.850000000000001 -0.000559188357169267 0.000665866085586443 0.900000000000001 -0.00266474188743109 0.00323615830897643 0.950000000000001 -0.0126984928103494 0.0148026242803206 1 -0.0605130727475002 0.0694620631135213 -1 1.8972057352866e-12 -4.12190327764117e-12 -0.95 1.8472057352866e-12 -4.02190327764117e-12 -0.9 1.7972057352866e-12 -3.92190225632505e-12 -0.85 1.7472057352866e-12 -3.82190105524851e-12 -0.8 1.69720573528661e-12 -3.7218984416956e-12 -0.75 1.64720573528661e-12 -3.62189275458197e-12 -0.7 1.59720573528664e-12 -3.52188037937375e-12 -0.65 1.54720573528673e-12 -3.42185345081413e-12 -0.6 1.49720573528703e-12 -3.32179485403658e-12 -0.55 1.44720573528798e-12 -3.22166734694431e-12 -0.5 1.39720453154842e-12 -3.12138868667185e-12 -0.45 1.34720108191006e-12 -3.02078148590303e-12 -0.4 1.29718774639851e-12 -2.91945437817854e-12 -0.35 1.24713619437083e-12 -2.81654401856726e-12 -0.3 1.1969369060798e-12 -2.71012381338369e-12 -0.25 1.14616650341841e-12 -2.59581606486311e-12 -0.2 1.09318830431024e-12 -2.4633778613391e-12 -0.15 1.03167527389241e-12 -2.2877476840516e-12 -0.0999999999999997 9.37168558067953e-13 -2.0036673077853e-12 -0.0499999999999997 7.15115884747807e-13 -1.42765480467556e-12 3.19189119579733e-16 5.06180405645274e-20 -5.06180341021788e-20 0.0500000000000003 -2.62118384805672e-12 4.11796372455091e-12 0.1 -1.26107856735121e-11 1.73289044712503e-11 0.15 -5.1084985468524e-11 6.28591145985769e-11 0.2 -1.99674046887522e-10 2.27221255786381e-10 0.25 -7.73941671887745e-10 8.37924844583274e-10 0.3 -2.99378407974064e-09 3.14686776283775e-09 0.35 -1.15750376503994e-08 1.19668282984384e-08 0.4 -4.4748034121304e-08 4.58737379402858e-08 0.45 -1.72987015700746e-07 1.76651608133278e-07 0.5 -6.68729088106657e-07 6.82221512956974e-07 0.55 -2.58515303334841e-06 2.63958184694319e-06 0.6 -9.99360421369542e-06 1.02259253991901e-05 0.65 -3.86329612906105e-05 3.96560267477216e-05 0.700000000000001 -0.000149346085647431 0.00015392770339063 0.750000000000001 -0.000577337394380024 0.000598091405053974 0.800000000000001 -0.00223185271458484 0.00232799821195549 0.850000000000001 -0.00862782592505608 0.00913043853947601 0.900000000000001 -0.0333531777003911 0.0359868248907538 0.950000000000001 -0.12893566378958 0.139462022824438 1 -0.498435427837973 0.540783765228211 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105082e-10 -0.6 1.18575135234565e-10 -1.30294766063313e-10 -0.55 1.18524897840166e-10 -1.30191699950076e-10 -0.5 1.1847435303484e-10 -1.30085539519985e-10 -0.45 1.18422557934566e-10 -1.29972596875661e-10 -0.4 1.18366643189143e-10 -1.29844551137541e-10 -0.35 1.18297154466393e-10 -1.29681120696714e-10 -0.3 1.18182940325545e-10 -1.29429638088204e-10 -0.25 1.17921358696592e-10 -1.2894466132045e-10 -0.2 1.17174210319454e-10 -1.27802689184034e-10 -0.15 1.14827149614377e-10 -1.24718744458678e-10 -0.0999999999999997 1.07208477085037e-10 -1.15677456402344e-10 -0.0499999999999997 8.22201709703041e-11 -8.78797381909894e-11 3.19189119579733e-16 1.2510579695718e-18 -1.25105791787301e-18 0.0500000000000003 -2.70795603007843e-10 2.82482764700739e-10 0.1 -1.16293554640168e-09 1.19968102048681e-09 0.15 -4.10236647769957e-09 4.19605719139159e-09 0.2 -1.37874939984302e-08 1.40217410358373e-08 0.25 -4.56992726152112e-08 4.631725770677e-08 0.3 -1.50846485469688e-07 1.5262548013658e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.700000000000001 -0.00209725704818039 0.00214673139842963 0.750000000000001 -0.00691033192322979 0.0070981937045267 0.800000000000001 -0.0227691145607407 0.0234850661691367 0.850000000000001 -0.075022817915502 0.0778328258163541 0.900000000000001 -0.247195523519854 0.258365553265715 0.950000000000001 -0.814493889989326 0.856020476606635 1 -2.68370675662406 2.83662793163795 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subcoupl_ac.standard0000644000175000017500000000611714163340332027353 0ustar carstencarstenFreq N(coll) 1000 6.73930833920345e-24 3162.27766017779 6.73930833920155e-24 10000.0000000595 6.73930833918252e-24 31622.7766019662 6.73930833899222e-24 100000.000001191 6.73930833708934e-24 316227.766021545 6.739308318067e-24 1000000.00001786 6.73930812849418e-24 3162277.66023428 6.73930629641789e-24 10000000.0002382 6.73929319222533e-24 31622776.6025311 6.73932529164502e-24 100000000.002977 6.74036912157121e-24 316227766.027194 6.75113481521136e-24 1000000000.03572 6.85217015897346e-24 3162277660.29077 7.46580921647413e-24 10000000000.4168 8.5127783589322e-24 31622776603.096 1.11547820994522e-23 100000000000 3.55036204199033e-23 1000 3.90020085096831e-22 3162.27766017779 3.90020084953296e-22 10000.0000000595 3.90020083517947e-22 31622.7766019662 3.90020069164493e-22 100000.000001191 3.90019925633297e-22 316227.766021545 3.90018490655125e-22 1000000.00001786 3.90004174174067e-22 3162277.66023428 3.89864263060887e-22 10000000.0002382 3.88728680238566e-22 31622776.6025311 3.8525885879977e-22 100000000.002977 3.83510455700407e-22 316227766.027194 3.83271694470505e-22 1000000000.03572 3.83335616301119e-22 3162277660.29077 3.83878815644147e-22 10000000000.4168 3.84819174877662e-22 31622776603.096 3.87278978688371e-22 100000000000 4.10008646619784e-22 1000 1.3954721957374e-20 3162.27766017779 1.39547218620103e-20 10000.0000000595 1.39547209083739e-20 31622.7766019662 1.39547113720426e-20 100000.000001191 1.39546160120231e-20 316227.766021545 1.39536627410407e-20 1000000.00001786 1.39441628380899e-20 3162277.66023428 1.38523340208952e-20 10000000.0002382 1.31691604207522e-20 31622776.6025311 1.15939748280784e-20 100000000.002977 1.10018760921624e-20 316227766.027194 1.09258776551085e-20 1000000000.03572 1.09177478303953e-20 3162277660.29077 1.09147319406521e-20 10000000000.4168 1.09044142770707e-20 31622776603.096 1.08216619248406e-20 100000000000 1.01012009698024e-20 1000 2.64240900045418e-20 3162.27766017779 2.64240899537186e-20 10000.0000000595 2.64240894454865e-20 31622.7766019662 2.64240843631848e-20 100000.000001191 2.6424033542033e-20 316227.766021545 2.64235255170086e-20 1000000.00001786 2.64184638472718e-20 3162277.66023428 2.63696388327991e-20 10000000.0002382 2.60121399939083e-20 31622776.6025311 2.52246273316051e-20 100000000.002977 2.49408572229464e-20 316227766.027194 2.49020011691407e-20 1000000000.03572 2.48688345196279e-20 3162277660.29077 2.4583976707107e-20 10000000000.4168 2.23616758412503e-20 31622776603.096 1.61708155442476e-20 100000000000 1.33279292810912e-20 1000 2.61683233754911e-20 3162.27766017779 2.61683233576009e-20 10000.0000000595 2.61683231786993e-20 31622.7766019662 2.61683213896887e-20 100000.000001191 2.61683035001771e-20 316227.766021545 2.61681246644271e-20 1000000.00001786 2.61663422238077e-20 3162277.66023428 2.61490903275742e-20 10000000.0002382 2.60194598536728e-20 31622776.6025311 2.57116584593827e-20 100000000.002977 2.55921391172309e-20 316227766.027194 2.55715676576235e-20 1000000000.03572 2.55189068093973e-20 3162277660.29077 2.50610795071028e-20 10000000000.4168 2.28873965968855e-20 31622776603.096 2.08970218377669e-20 100000000000 2.04777830032148e-20 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_internal.standard0000644000175000017500000003036014163340332025522 0ustar carstencarstenV(base) I(coll) I(base) -1 9.99999999992886e-13 -2.00000791472521e-12 -0.95 9.49999999993391e-13 -1.90000791472622e-12 -0.9 8.99999999993891e-13 -1.80000791472722e-12 -0.85 8.49999999994385e-13 -1.70000791472821e-12 -0.8 7.99999999994873e-13 -1.60000791472918e-12 -0.75 7.49999999995357e-13 -1.50000791473015e-12 -0.7 6.99999999995835e-13 -1.40000791473111e-12 -0.65 6.49999999996308e-13 -1.30000791473205e-12 -0.6 5.99999999996776e-13 -1.20000791473299e-12 -0.55 5.49999999997239e-13 -1.10000791473392e-12 -0.5 4.99999999997697e-13 -1.00000791471696e-12 -0.45 4.4999999999815e-13 -9.00007914670163e-13 -0.4 3.99999999998598e-13 -8.00007914495994e-13 -0.35 3.49999999999041e-13 -7.0000791385444e-13 -0.3 2.99999999999479e-13 -6.00007911497736e-13 -0.25 2.49999999999912e-13 -5.00007902846924e-13 -0.2 2.0000000000034e-13 -4.00007871098472e-13 -0.15 1.50000000000761e-13 -3.00007754587986e-13 -0.0999999999999997 1.00000000001159e-13 -2.0000732702388e-13 -0.0499999999999997 5.00000000013855e-14 -1.00005757977433e-13 3.19189119579733e-16 -2.24597758607213e-28 5.42736302792056e-28 0.0500000000000003 -5.00000000168068e-14 1.00021130225445e-13 0.1 -1.0000000018151e-13 2.0009867251583e-13 0.15 -1.50000001765011e-13 3.0038323263826e-13 0.2 -2.00000016959606e-13 4.01427500436222e-13 0.25 -2.50000162730981e-13 5.05259770601309e-13 0.3 -3.00001561177281e-13 6.19324037989424e-13 0.35 -3.50014977024497e-13 7.70944533990404e-13 0.4 -4.00143680473405e-13 1.06045936681025e-12 0.45 -4.51378382645889e-13 1.85671697252829e-12 0.5 -5.13223359811045e-13 4.51945012646338e-12 0.55 -6.76856822535271e-13 1.4098463697296e-11 0.6 -1.81698671997492e-12 6.65185459031949e-11 0.65 -1.23250252490675e-11 4.02291678584834e-10 0.700000000000001 -1.12702990977118e-10 3.47593398509657e-09 0.750000000000001 -1.0752322223264e-09 3.70434869001741e-08 0.800000000000001 -1.03080808240428e-08 4.20753996567366e-07 0.850000000000001 -9.88070703349248e-08 5.1933014103566e-06 0.900000000000001 -9.43445598651064e-07 3.63429424900702e-05 0.950000000000001 -8.97021064335952e-06 0.00011149465810917 1 -8.49616673896922e-05 0.000400944452679079 -1 1.0000003493651e-12 -2.00170685362387e-12 -0.95 9.5000034936564e-13 -1.90170685362494e-12 -0.9 9.0000034936617e-13 -1.801706853626e-12 -0.85 8.50000349366693e-13 -1.70170685362705e-12 -0.8 8.00000349367212e-13 -1.60170685362808e-12 -0.75 7.50000349367725e-13 -1.50170685362911e-12 -0.7 7.00000349368232e-13 -1.40170685363012e-12 -0.65 6.50000349368734e-13 -1.30170685191126e-12 -0.6 6.00000349369231e-13 -1.20170684865736e-12 -0.55 5.50000349369722e-13 -1.10170683924345e-12 -0.5 5.00000349370208e-13 -1.00170681201157e-12 -0.45 4.50000349370689e-13 -9.01706733240693e-13 -0.4 4.00000349371165e-13 -8.01706505391717e-13 -0.35 3.50000349370788e-13 -7.01705846329028e-13 -0.3 3.00000349366731e-13 -6.01703939966464e-13 -0.25 2.50000349338506e-13 -5.016984257379e-13 -0.2 2.00000349157044e-13 -4.01682475564733e-13 -0.15 1.50000348003782e-13 -3.01636338577736e-13 -0.0999999999999997 1.00000340687434e-13 -2.01502881962142e-13 -0.0499999999999997 5.00002942850727e-14 -1.01116829369693e-13 3.19189119579733e-16 1.0242743331418e-24 -1.02392883320239e-24 0.0500000000000003 -5.00018663365076e-14 1.03231482028287e-13 0.1 -1.00013702555992e-13 2.1258511303965e-13 0.15 -1.50088767233173e-13 3.39681870191398e-13 0.2 -2.00564823331585e-13 5.18321118290389e-13 0.25 -2.53583944846311e-13 8.47446497883373e-13 0.3 -3.22731045874542e-13 1.62074623971858e-12 0.35 -4.94160894910353e-13 3.73538840360204e-12 0.4 -1.31426223347981e-12 1.00900194587775e-11 0.45 -6.24820200754852e-12 3.10042419999178e-11 0.5 -3.72718755897852e-11 1.08679860874887e-10 0.55 -2.33755174459084e-10 5.16681777301398e-10 0.6 -1.47957375443242e-09 2.70327885835043e-09 0.65 -9.3802009351525e-09 1.60992606024626e-08 0.700000000000001 -5.94845440518932e-08 1.03281782186992e-07 0.750000000000001 -3.77212603431982e-07 6.87636169493422e-07 0.800000000000001 -2.39088278883548e-06 4.77925499183098e-06 0.850000000000001 -1.5094115043042e-05 3.84522241681521e-05 0.900000000000001 -9.40629372919652e-05 0.000209423300399225 0.950000000000001 -0.000579912525810917 0.000945558242810121 1 -0.00359788832740898 0.00499171728879978 -1 1.00004719154535e-12 -2.01521474407745e-12 -0.95 9.50047191545903e-13 -1.91521474407854e-12 -0.9 9.00047191546447e-13 -1.81521474407963e-12 -0.85 8.50047191546986e-13 -1.71521474408071e-12 -0.8 8.00047191547519e-13 -1.61521474408178e-12 -0.75 7.50047191548046e-13 -1.51521474408283e-12 -0.7 7.00047191548568e-13 -1.41521472394938e-12 -0.65 6.50047191549084e-13 -1.31521469115216e-12 -0.6 6.00047191549595e-13 -1.21521460492797e-12 -0.55 5.50047191550101e-13 -1.11521437824653e-12 -0.5 5.00047191550601e-13 -1.0152137823089e-12 -0.45 4.50047191551096e-13 -9.1521221561233e-13 -0.4 4.00047191483447e-13 -8.15208096763256e-13 -0.35 3.50047191186095e-13 -7.15197268361914e-13 -0.3 3.00047189586883e-13 -6.15168800131713e-13 -0.25 2.50047180995334e-13 -5.15093953959534e-13 -0.2 2.00047134847608e-13 -4.14897162925663e-13 -0.15 1.50046886983856e-13 -3.14379680795813e-13 -0.0999999999999997 1.0004555569388e-13 -2.13018560794823e-13 -0.0499999999999997 5.00384052725963e-14 -1.09436572569536e-13 3.19189119579733e-16 4.13269573181821e-23 -4.13265421801308e-23 0.0500000000000003 -5.02062761150309e-14 1.24914117032183e-13 0.1 -1.01314194085812e-13 2.90980896146487e-13 0.15 -1.57264867819926e-13 5.67725307041357e-13 0.2 -2.3922618332536e-13 1.14882509106093e-12 0.25 -4.6089172985505e-13 2.60210366104942e-12 0.3 -1.43291446351593e-12 6.73610052224912e-12 0.35 -6.43513658355382e-12 2.0006116167554e-11 0.4 -3.30837256069204e-11 6.85489972496799e-11 0.45 -1.75995839420087e-10 2.70515765621893e-10 0.5 -9.43364019974089e-10 1.25630033431152e-09 0.55 -5.0647083011925e-09 6.17832497902427e-09 0.6 -2.72003070573294e-08 3.20316210605165e-08 0.65 -1.46088644101706e-07 1.71060309748959e-07 0.700000000000001 -7.84565520083045e-07 9.28298608932276e-07 0.750000000000001 -4.21159708242828e-06 5.09527369137156e-06 0.800000000000001 -2.25512943538054e-05 2.85879964249279e-05 0.850000000000001 -0.000119062723971687 0.000171806469911089 0.900000000000001 -0.000611012582288849 0.000854047076587234 0.950000000000001 -0.00313274616520586 0.00395266307027569 1 -0.0163473106858052 0.0197473834668781 -1 1.00165923777738e-12 -2.07571285065079e-12 -0.95 9.51659237777939e-13 -1.97571285065191e-12 -0.9 9.01659237778496e-13 -1.87571285065303e-12 -0.85 8.51659237779047e-13 -1.77571285065413e-12 -0.8 8.01659237779593e-13 -1.67571285065522e-12 -0.75 7.51659237780134e-13 -1.5757127457188e-12 -0.7 7.01659237780668e-13 -1.47571259312223e-12 -0.65 6.51659237781198e-13 -1.37571221862174e-12 -0.6 6.01659237781721e-13 -1.2757112995299e-12 -0.55 5.5165923778224e-13 -1.17570904391477e-12 -0.5 5.01659237782755e-13 -1.07570350823564e-12 -0.45 4.51659237783271e-13 -9.75689922700544e-13 -0.4 4.01659231544558e-13 -8.75656575154862e-13 -0.35 3.51659208052071e-13 -7.75574726200471e-13 -0.3 3.01659096099551e-13 -6.75373800057952e-13 -0.25 2.51658562601424e-13 -5.74880432725457e-13 -0.2 2.01656020278917e-13 -4.73668387068976e-13 -0.15 1.51643905149729e-13 -3.70687925093555e-13 -0.0999999999999997 1.0158617199046e-13 -2.63345274807564e-13 -0.0499999999999997 5.13110517665695e-14 -1.45191279607598e-13 3.19189119579733e-16 5.74616864354307e-22 -5.74616128347082e-22 0.0500000000000003 -5.62476501217247e-14 2.13950763608805e-13 0.1 -1.36020047164856e-13 6.08121963831103e-13 0.15 -3.2789667134351e-13 1.49931858949725e-12 0.2 -1.05399191560416e-12 3.87148001860835e-12 0.25 -4.32583890543355e-12 1.11248349249806e-11 0.3 -1.97291460732348e-11 3.63099467460162e-11 0.35 -9.29434020937211e-11 1.33935719608239e-10 0.4 -4.41648452740887e-10 5.45224184651868e-10 0.45 -2.10316981641582e-09 2.39981808885897e-09 0.5 -1.00207421706813e-08 1.09376190647993e-08 0.55 -4.77505109322858e-08 5.10860663752622e-08 0.6 -2.27541412571994e-07 2.41918580687715e-07 0.65 -1.08419053327853e-06 1.15453641645912e-06 0.700000000000001 -5.16368820900954e-06 5.53492894409049e-06 0.750000000000001 -2.45416571807315e-05 2.6609682320208e-05 0.800000000000001 -0.000115494645364058 0.000128115992462521 0.850000000000001 -0.000521584235789417 0.000618514692613474 0.900000000000001 -0.00223759724936322 0.0027278286157244 0.950000000000001 -0.00990537405901028 0.0116088377721165 1 -0.0453005028707039 0.0520336807925275 -1 1.89720573526476e-12 -4.12190327759748e-12 -0.95 1.84720573526541e-12 -4.02190327759877e-12 -0.9 1.79720573526605e-12 -3.92190225628394e-12 -0.85 1.74720573526668e-12 -3.82190105520865e-12 -0.8 1.69720573526731e-12 -3.721898441657e-12 -0.75 1.64720573526794e-12 -3.62189275454461e-12 -0.7 1.59720573526858e-12 -3.52188037933762e-12 -0.65 1.54720573526928e-12 -3.42185345077921e-12 -0.6 1.49720573527018e-12 -3.32179485400285e-12 -0.55 1.44720573527173e-12 -3.22166734691175e-12 -0.5 1.39720453153277e-12 -3.12138868664042e-12 -0.45 1.34720108189502e-12 -3.02078148587267e-12 -0.4 1.29718774638412e-12 -2.91945437814912e-12 -0.35 1.24713619435721e-12 -2.8165440185386e-12 -0.3 1.19693690606723e-12 -2.71012381335545e-12 -0.25 1.1461665034076e-12 -2.59581606483471e-12 -0.2 1.09318830430264e-12 -2.46337786130943e-12 -0.15 1.03167527389042e-12 -2.28774768401825e-12 -0.0999999999999997 9.37168558073828e-13 -2.00366730774302e-12 -0.0499999999999997 7.15115884763796e-13 -1.42765480462526e-12 3.19189119579733e-16 5.07442621968693e-20 -5.07442556840337e-20 0.0500000000000003 -2.62118384600169e-12 4.11796372166832e-12 0.1 -1.26107856437278e-11 1.7328904433958e-11 0.15 -5.10849850585797e-11 6.28591141288991e-11 0.2 -1.99674041204837e-10 2.2722124961868e-10 0.25 -7.73941591432737e-10 8.37924759942764e-10 0.3 -2.99378291971928e-09 3.1468665633711e-09 0.35 -1.15750207178506e-08 1.19668109476006e-08 0.4 -4.47477850384576e-08 4.58734836978791e-08 0.45 -1.72983336249169e-07 1.76647856867024e-07 0.5 -6.68674594462125e-07 6.82165917276051e-07 0.55 -2.58434477983294e-06 2.63875561946717e-06 0.6 -9.98161485072426e-06 1.02136330370524e-05 0.65 -3.84556905070584e-05 3.94735757315043e-05 0.700000000000001 -0.000146763171928788 0.000151256681125445 0.750000000000001 -0.000541653001409119 0.000560973376866431 0.800000000000001 -0.00181030462799193 0.0018858877086873 0.850000000000001 -0.00497836108767224 0.00522749945687089 0.900000000000001 -0.0114993156328426 0.0122329740647458 0.950000000000001 -0.028723501599493 0.030957465891605 1 -0.117635965228945 0.127236137228514 -1 1.1897513523368e-10 -1.3109762592168e-10 -0.95 1.18925135233684e-10 -1.30997614186434e-10 -0.9 1.18875135233689e-10 -1.30897590891873e-10 -0.85 1.18825135233693e-10 -1.30797544651987e-10 -0.8 1.187751352337e-10 -1.30697452865456e-10 -0.75 1.18725135233709e-10 -1.30597270668495e-10 -0.7 1.18675135233728e-10 -1.30496909006154e-10 -0.65 1.18625135233771e-10 -1.30396191103689e-10 -0.6 1.1857513523388e-10 -1.30294766061914e-10 -0.55 1.18524897839482e-10 -1.30191699948656e-10 -0.5 1.18474353034152e-10 -1.30085539518516e-10 -0.45 1.18422557933858e-10 -1.29972596874073e-10 -0.4 1.18366643188356e-10 -1.29844551135676e-10 -0.35 1.18297154465326e-10 -1.29681120694176e-10 -0.3 1.18182940323528e-10 -1.29429638083938e-10 -0.25 1.17921358691404e-10 -1.2894466131148e-10 -0.2 1.17174210303851e-10 -1.27802689161651e-10 -0.15 1.1482714956542e-10 -1.24718744397223e-10 -0.0999999999999997 1.07208476936667e-10 -1.15677456231477e-10 -0.0499999999999997 8.2220170600969e-11 -8.7879737787812e-11 3.19189119579733e-16 1.25417772002613e-18 -1.254177661865e-18 0.0500000000000003 -2.70795590211803e-10 2.82482751447136e-10 0.1 -1.16293536853388e-09 1.19968083838898e-09 0.15 -4.1023644411352e-09 4.19605512034854e-09 0.2 -1.37874717228754e-08 1.40217184660428e-08 0.25 -4.56990318150828e-08 4.63170141538056e-08 0.3 -1.50843889290395e-07 1.52622855649375e-07 0.35 -4.97271919311366e-07 5.02869721022244e-07 0.4 -1.63854055551065e-06 1.65747451225855e-06 0.45 -5.39690035602878e-06 5.46415971814977e-06 0.5 -1.775840622647e-05 1.80043659810007e-05 0.55 -5.82529448942699e-05 5.91647672480589e-05 0.6 -0.000189210851662315 0.00019258556547556 0.65 -0.000596491962411158 0.000608632645671287 0.700000000000001 -0.00173894473822992 0.0017790686652005 0.750000000000001 -0.00435388338312572 0.00446589173200827 0.800000000000001 -0.00896651820551742 0.00921802562328657 0.850000000000001 -0.0155337342620616 0.0159995022862807 0.900000000000001 -0.0237697184182395 0.024521217380574 0.950000000000001 -0.0334905560913209 0.0345978226045003 1 -0.0447554142165087 0.0462965883616856 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_sh_dc.standard0000644000175000017500000000036214163340332026130 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.0824718421052e-05 7.93428604924756e-08 0.8 0.000884237129493793 1.78992740713022e-06 0.9 0.0156836587472328 6.99992610461294e-05 1 0.0539501798843921 0.00171840828233042 1.1 0.0840305590724336 0.0105289100036325 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_subcoupl_peri_con_dc.standard0000644000175000017500000001015014163340332031510 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000199725416473528 6.15429100445239e-07 0.76 0.00028662799440709 8.47692074390177e-07 0.77 0.000410361592380033 1.17331387667486e-06 0.78 0.000585424982775609 1.63077864773606e-06 0.79 0.000830914430806825 2.27405769570345e-06 0.8 0.00117103426671756 3.17818906756234e-06 0.81 0.0016349377042114 4.44628750313143e-06 0.82 0.00225549389727927 6.21797640110207e-06 0.83 0.00306679054132534 8.67905257482451e-06 0.84 0.00410066939414704 1.20720275804212e-05 0.85 0.00538313531247514 1.67070847128518e-05 0.86 0.00693166922455398 2.29729898667461e-05 0.87 0.00875409618596606 3.13477862410607e-05 0.88 0.0108489626103208 4.24104648765571e-05 0.89 0.0132068291812124 5.6859682795701e-05 0.9 0.0158116948332264 7.55611750645857e-05 0.91 0.0186417263995214 9.9692036691063e-05 0.92 0.0216681168055788 0.000131176794128068 0.93 0.0248498284009278 0.000173878716257615 0.94 0.0281216023969817 0.000236139169641282 0.95 0.0313818234471124 0.000333241981568676 0.96 0.0345125613655098 0.000482303131537167 0.97 0.037451557694661 0.000687787429223648 0.98 0.040227345524946 0.000939599143274181 0.99 0.0428994244217299 0.00122585568304827 1 0.0455120192683103 0.00153965503461938 1.01 0.0480889278900515 0.00187863717421709 1.02 0.0506389991225637 0.0022431090478456 1.03 0.0531610257399723 0.00263476512146762 1.04 0.0556470336528282 0.00305607198404938 1.05 0.0580845520741166 0.00351005392211652 0.75 0.000200934587496839 6.17032299760708e-07 0.76 0.000288801584570576 8.52590789028404e-07 0.77 0.000414332946979327 1.1853337930762e-06 0.78 0.000592744542944355 1.65770592181482e-06 0.79 0.000844410339421616 2.3315145842164e-06 0.8 0.00119571144043369 3.29705270382096e-06 0.81 0.00167929105573884 4.68653382548767e-06 0.82 0.00233319094964106 6.69371831998588e-06 0.83 0.00319845311095651 9.60221076513482e-06 0.84 0.00431523940850635 1.38255485614597e-05 0.85 0.00571823321292962 1.99628084331624e-05 0.86 0.00743257807983973 2.88738776725493e-05 0.87 0.00947142863563165 4.17783995185621e-05 0.88 0.0118354187352847 6.0380977840122e-05 0.89 0.0145135718907906 8.70214330660462e-05 0.9 0.0174848702341861 0.000124841559370652 0.91 0.0207198696150318 0.000177948323943361 0.92 0.0241821193571015 0.000251539064635768 0.93 0.0278294629685673 0.000351942343250699 0.94 0.0316154334327436 0.000486530539629918 0.95 0.0354908433168482 0.000663496989395754 0.96 0.039405230958526 0.000891589969438088 0.97 0.0433070664148537 0.00118008681976298 0.98 0.0471412073220777 0.00153951425929236 0.99 0.0508449178452368 0.00198330821245659 1 0.0543537608841536 0.00252819042410431 1.01 0.0576315322380391 0.00318777513678189 1.02 0.0606989137500118 0.00396152310344722 1.03 0.0636134435444958 0.00483471584743523 1.04 0.0664266415816201 0.00579002667304031 1.05 0.0691673566748402 0.00681494932964649 0.75 0.000202195548785452 5.12141321138536e-07 0.76 0.000291044142419966 7.13043849949475e-07 0.77 0.000418404701589796 1.00205503025944e-06 0.78 0.000600236820586372 1.421923516133e-06 0.79 0.000858266647781455 2.03850985837384e-06 0.8 0.00122124265782746 2.95479602815865e-06 0.81 0.00172573994848379 4.33415878309538e-06 0.82 0.00241588775323645 6.43911885162314e-06 0.83 0.00334134219161992 9.69563871543961e-06 0.84 0.00455316164486485 1.47990439450944e-05 0.85 0.00609800197481517 2.28868588039756e-05 0.86 0.0080118203279899 3.58171860844802e-05 0.87 0.0103143984654077 5.66072059440321e-05 0.88 0.0130052754271506 9.00953512972309e-05 0.89 0.0160607553759159 0.000143864979079257 0.9 0.0194314649369559 0.000229350506842124 0.91 0.0230409686734118 0.000362771379171094 0.92 0.0267878702937492 0.000565141572122731 0.93 0.0305549350580269 0.000860447958131995 0.94 0.0342262354554944 0.00127181503164003 0.95 0.0377069345210023 0.00181703067181507 0.96 0.0409362928648083 0.00250567464671097 0.97 0.0438887158436643 0.00333900509030491 0.98 0.0465657343118055 0.00431188829943339 0.99 0.0489853377525681 0.00541530652952708 1 0.0511731263680884 0.0066384522105404 1.01 0.0531565838068546 0.00797012344656942 1.02 0.0549619883212494 0.00939952204000891 1.03 0.0566130463319001 0.0109166484773615 1.04 0.0581304924814586 0.012512456583152 1.05 0.0595321699511725 0.0141788759360813 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subtran_ac.standard0000644000175000017500000000611514163340332027173 0ustar carstencarstenFreq N(coll) 1000 6.73930833920333e-24 3162.27766017779 6.73930833920038e-24 10000.0000000595 6.73930833917079e-24 31622.7766019662 6.73930833887498e-24 100000.000001191 6.73930833591687e-24 316227.766021545 6.73930830634234e-24 1000000.00001786 6.73930801124765e-24 3162277.66023428 6.73930512395332e-24 10000000.0002382 6.73928146765674e-24 31622776.6025311 6.73920805336703e-24 100000000.002977 6.73919746535272e-24 316227766.027194 6.73949034473903e-24 1000000000.03572 6.74247707442951e-24 3162277660.29077 6.77235022349622e-24 10000000000.4168 7.07106190826674e-24 31622776603.096 1.00561394355526e-23 100000000000 3.97049964589566e-23 1000 3.9002008509683e-22 3162.27766017779 3.90020084953294e-22 10000.0000000595 3.90020083517937e-22 31622.7766019662 3.90020069164389e-22 100000.000001191 3.90019925632255e-22 316227.766021545 3.900184906447e-22 1000000.00001786 3.90004174069818e-22 3162277.66023428 3.89864262018446e-22 10000000.0002382 3.88728669818001e-22 31622776.6025311 3.8525875471575e-22 100000000.002977 3.83509416085439e-22 316227766.027194 3.83261363156773e-22 1000000000.03572 3.83238298884764e-22 3162277660.29077 3.83263850738086e-22 10000000000.4168 3.83545075032789e-22 31622776603.096 3.86357630504521e-22 100000000000 4.1426061561402e-22 1000 1.3954721957374e-20 3162.27766017779 1.39547218620103e-20 10000.0000000595 1.39547209083739e-20 31622.7766019662 1.3954711372043e-20 100000.000001191 1.39546160120266e-20 316227.766021545 1.39536627410753e-20 1000000.00001786 1.39441628384358e-20 3162277.66023428 1.38523340243341e-20 10000000.0002382 1.31691604536476e-20 31622776.6025311 1.15939751224633e-20 100000000.002977 1.10018789040065e-20 316227766.027194 1.0925905434057e-20 1000000000.03572 1.09180093257335e-20 3162277660.29077 1.09163852611447e-20 10000000000.4168 1.0907912449322e-20 31622776603.096 1.08251429267985e-20 100000000000 1.01010347154285e-20 1000 2.64240900045418e-20 3162.27766017779 2.64240899537186e-20 10000.0000000595 2.64240894454866e-20 31622.7766019662 2.64240843631856e-20 100000.000001191 2.64240335420411e-20 316227.766021545 2.64235255170898e-20 1000000.00001786 2.64184638480843e-20 3162277.66023428 2.63696388409252e-20 10000000.0002382 2.60121400752581e-20 31622776.6025311 2.52246281471937e-20 100000000.002977 2.49408653818192e-20 316227766.027194 2.49020822387625e-20 1000000000.03572 2.48695956661735e-20 3162277660.29077 2.45886520779929e-20 10000000000.4168 2.23696954360734e-20 31622776603.096 1.61747815244978e-20 100000000000 1.33265216111692e-20 1000 2.61683233754911e-20 3162.27766017779 2.61683233576009e-20 10000.0000000595 2.61683231786993e-20 31622.7766019662 2.61683213896896e-20 100000.000001191 2.61683035001864e-20 316227.766021545 2.61681246645206e-20 1000000.00001786 2.61663422247421e-20 3162277.66023428 2.61490903368943e-20 10000000.0002382 2.60194599450962e-20 31622776.6025311 2.57116593320278e-20 100000000.002977 2.55921476797047e-20 316227766.027194 2.55716525001788e-20 1000000000.03572 2.55197009937825e-20 3162277660.29077 2.50658548845881e-20 10000000000.4168 2.28954608876116e-20 31622776603.096 2.09033238746804e-20 100000000000 2.04740152822298e-20 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_1D_dc.standard0000644000175000017500000001543014163340332024704 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011834e-12 -1.00000000000228e-12 0.95 1.90000000011824e-12 -9.50000000002217e-13 0.9 1.80000000011816e-12 -9.00000000002167e-13 0.85 1.70000000011809e-12 -8.50000000002128e-13 0.8 1.60000000011802e-12 -8.00000000002097e-13 0.75 1.50000000011796e-12 -7.50000000002074e-13 0.7 1.40000000011791e-12 -7.00000000002056e-13 0.65 1.30000000011786e-12 -6.50000000002042e-13 0.6 1.20000000011781e-12 -6.00000000002031e-13 0.55 1.10000000011777e-12 -5.50000000002023e-13 0.5 1.00000000011773e-12 -5.00000000002017e-13 0.45 9.00000000117685e-13 -4.50000000002013e-13 0.4 8.00000000117645e-13 -4.00000000002009e-13 0.35 7.00000000117605e-13 -3.50000000002007e-13 0.3 6.00000000117566e-13 -3.00000000002005e-13 0.25 5.00000000117526e-13 -2.50000000002004e-13 0.2 4.00000000117483e-13 -2.00000000002003e-13 0.15 3.00000000117398e-13 -1.50000000002001e-13 0.0999999999999997 2.00000000116749e-13 -1.00000000001981e-13 0.0499999999999997 1.00000000108591e-13 -5.00000000017938e-14 -3.19189119579733e-16 -5.43786880097118e-28 2.24597758614192e-28 -0.0500000000000003 -1.00000001454418e-13 5.00000000172105e-14 -0.1 -2.00000020966637e-13 1.00000000182315e-13 -0.15 -3.00000282998544e-13 1.50000001766223e-13 -0.2 -4.00003804287719e-13 2.00000016961274e-13 -0.25 -5.00051147974235e-13 2.5000016273329e-13 -0.3 -6.00687904189815e-13 3.00001561180812e-13 -0.35 -7.09254148570184e-13 3.50014977030612e-13 -0.4 -9.24514992676214e-13 4.00143680484298e-13 -0.45 -2.5755586938206e-12 4.51378382663993e-13 -0.5 -2.35493005008754e-11 5.13223359849035e-13 -0.55 -3.04579309450958e-10 6.7685682289898e-13 -0.6 -4.08569071050287e-09 1.81698673391562e-12 -0.65 -5.49745852082682e-08 1.23250260385069e-11 -0.7 -7.39885022795343e-07 1.12703055744962e-10 1 2.00013968069695e-12 -1.00004739061937e-12 0.95 1.90013960915183e-12 -9.50047345603254e-13 0.9 1.80013954675522e-12 -9.00047309853412e-13 0.85 1.70013949180001e-12 -8.50047281682813e-13 0.8 1.60013944281343e-12 -8.00047259639644e-13 0.75 1.50013939855444e-12 -7.50047242504102e-13 0.7 1.40013935799855e-12 -7.00047229272478e-13 0.65 1.30013932031255e-12 -6.50047219131605e-13 0.6 1.20013928482453e-12 -6.00047211428674e-13 0.55 1.10013925099376e-12 -5.50047205641245e-13 0.5 1.00013921838379e-12 -5.00047201350708e-13 0.45 9.0013918663935e-13 -4.50047198220699e-13 0.4 8.00139155393048e-13 -4.0004719591232e-13 0.35 7.00139124171421e-13 -3.50047194046419e-13 0.3 6.00139091182112e-13 -3.00047191377064e-13 0.25 5.0013904693261e-13 -2.50047182076607e-13 0.2 4.00138935549864e-13 -2.0004713547471e-13 0.15 3.00138418793933e-13 -1.50046887330437e-13 0.0999999999999997 2.00135412867373e-13 -1.00045555872717e-13 0.0499999999999997 1.00116877358359e-13 -5.00384053497001e-14 -3.19189119579733e-16 4.13266370036768e-23 -4.13269573151007e-23 -0.0500000000000003 -1.00748245348355e-13 5.02062762172046e-14 -0.1 -2.05600380652276e-13 1.01314194391344e-13 -0.15 -3.37419087799479e-13 1.57264868541253e-13 -0.2 -6.48097096444784e-13 2.39226184781692e-13 -0.25 -2.15446818459634e-12 4.60891732372883e-13 -0.3 -1.17066561520617e-11 1.43291446790139e-12 -0.35 -7.5690264715366e-11 6.43513660427477e-12 -0.4 -5.09516269048778e-10 3.30837259264049e-11 -0.45 -3.46507616947204e-09 1.75995846090797e-10 -0.5 -2.36626975013433e-08 9.43364185070697e-10 -0.55 -1.62010470861199e-07 5.06471262763448e-09 -0.6 -1.11137485576211e-06 2.72004265233512e-08 -0.65 -7.63528431261753e-06 1.4609204017321e-07 -0.7 -5.25154439546902e-05 7.84663581577332e-07 1 2.00327644497845e-12 -1.00166258886974e-12 0.95 1.90327522634514e-12 -9.51661830002774e-13 0.9 1.80327416148257e-12 -9.01661227112887e-13 0.85 1.70327322158156e-12 -8.51660751734191e-13 0.8 1.6032723819509e-12 -8.01660379529828e-13 0.75 1.50327162186028e-12 -7.51660090124924e-13 0.7 1.40327092419635e-12 -7.01659866754905e-13 0.65 1.30327027499612e-12 -6.51659695794382e-13 0.6 1.20326966293593e-12 -6.01659566245201e-13 0.55 1.10326907884123e-12 -5.51659469249672e-13 0.5 1.00326851525099e-12 -5.01659397669435e-13 0.45 9.03267966009335e-13 -4.51659345744785e-13 0.4 8.03267419381323e-13 -4.01659302591467e-13 0.35 7.03266857054234e-13 -3.51659253463705e-13 0.3 6.03266184983256e-13 -3.01659124183475e-13 0.25 5.03264949830318e-13 -2.51658579330075e-13 0.2 4.03260854364995e-13 -2.01656029822994e-13 0.15 3.03242071500374e-13 -1.51643910319007e-13 0.0999999999999997 2.03146897570819e-13 -1.01586174585377e-13 0.0499999999999997 1.02649084646782e-13 -5.13110528367307e-14 -3.19189119579733e-16 5.74616526327409e-22 -5.74616864157091e-22 -0.0500000000000003 -1.1430090625269e-13 5.6247651280717e-14 -0.1 -2.92557394991571e-13 1.36020050116806e-13 -0.15 -8.26341358303969e-13 3.27896677162359e-13 -0.2 -3.35991801215847e-12 1.05399192555306e-12 -0.25 -1.72629192631769e-11 4.32583892443447e-12 -0.3 -9.64208472009085e-11 1.97291461828151e-11 -0.35 -5.53218963602306e-10 9.29434037817878e-11 -0.4 -3.21100942064052e-09 4.41648485056693e-10 -0.45 -1.8773725819177e-08 2.10317048912057e-09 -0.5 -1.10379181034685e-07 1.00207566689862e-08 -0.55 -6.51915756726515e-07 4.77508310125507e-08 -0.6 -3.86457051159182e-06 2.27548573707165e-07 -0.65 -2.29780330547545e-05 1.08435194839998e-06 -0.7 -0.000136951495045237 5.16734064081562e-06 1 1.33241796204426e-10 -1.18997504434247e-10 0.95 1.33133017528126e-10 -1.18942341176229e-10 0.9 1.33025278912553e-10 -1.18888240644765e-10 0.85 1.32918385400224e-10 -1.18835010383538e-10 0.8 1.32812171695968e-10 -1.18782487624231e-10 0.75 1.32706499049914e-10 -1.18730536151229e-10 0.7 1.32601251806177e-10 -1.18679042854951e-10 0.65 1.32496333930453e-10 -1.18627914318147e-10 0.6 1.32391665641871e-10 -1.18577073681017e-10 0.55 1.32286942410586e-10 -1.18526220523547e-10 0.5 1.321820340354e-10 -1.18475233362469e-10 0.45 1.32075929159693e-10 -1.18423127544111e-10 0.4 1.31965627577535e-10 -1.18367000129002e-10 0.35 1.31841273489442e-10 -1.18297370123001e-10 0.3 1.31670227186215e-10 -1.18183065286824e-10 0.25 1.31344060002507e-10 -1.1792142768244e-10 0.2 1.30501840724346e-10 -1.17174246271727e-10 0.15 1.27939733422291e-10 -1.14827167020285e-10 0.0999999999999997 1.1963358351171e-10 -1.07208484606359e-10 0.0499999999999997 9.20971186724514e-11 -8.22201734606996e-11 -3.19189119579733e-16 1.25417761662856e-18 -1.25417773295083e-18 -0.0500000000000003 -3.09539300769483e-10 2.70795604191511e-10 -0.1 -1.35412344657853e-09 1.16293554802218e-09 -0.15 -4.8938391690926e-09 4.10236647921964e-09 -0.2 -1.6943176051761e-08 1.37874939994932e-08 -0.25 -5.81667069048468e-08 4.56992726157386e-08 -0.3 -1.99989459049955e-07 1.50846485469854e-07 -0.35 -6.9089234203782e-07 4.97299903421944e-07 -0.4 -2.40134931087214e-06 1.638842272846e-06 -0.45 -8.40327548633715e-06 5.40015333199822e-06 -0.5 -2.96206986250249e-05 1.7793439436174e-05 -0.55 -0.000105205733627816 5.86285469385747e-05 -0.6 -0.000376589981755523 0.00019317768862541 -0.65 -0.0013586759196052 0.000636508749731422 -0.7 -0.00494049253498064 0.00209725704818037 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_full_sh.standard0000644000175000017500000010157614163340332025762 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618362856138e-13 1.43177817828401e-13 0.32 6.81733754339169e-13 2.15025316426452e-13 0.34 6.64859525971616e-13 3.10463604183037e-13 0.36 6.53616063496475e-13 4.47044795736405e-13 0.38 6.58137159013565e-13 6.55436026492405e-13 0.4 7.06775211826195e-13 9.89259198232091e-13 0.42 8.78814902089858e-13 1.54234199954301e-12 0.44 1.39584536348996e-12 2.47898320980736e-12 0.46 2.87679721398602e-12 4.08708658415894e-12 0.48 7.04925837450105e-12 6.87150641116957e-12 0.5 1.87316875335711e-11 1.17181496710574e-11 0.52 5.1351872080111e-11 2.01826730992192e-11 0.54 1.42293260018993e-10 3.49987548970653e-11 0.56 3.9551732910056e-10 6.09736807820801e-11 0.58 1.0997657558249e-09 1.06567884717216e-10 0.6 3.05579019750782e-09 1.86683988038682e-10 0.62 8.48035839485043e-09 3.27598747200568e-10 0.64 2.34973264436867e-08 5.75701624715207e-10 0.66 6.49804736305292e-08 1.01316201642305e-09 0.68 1.79275812711e-07 1.78530517532399e-09 0.7 4.93163217027984e-07 3.15082113435889e-09 0.72 1.35162155564772e-06 5.57164093911569e-09 0.74 3.68678121151888e-06 9.87800574671381e-09 0.76 9.98875923790357e-06 1.75752836185886e-08 0.78 2.68444169657233e-05 3.14248147511237e-08 0.800000000000001 7.13631648682993e-05 5.65616810448679e-08 0.820000000000001 0.00018698676384067 1.02652555732991e-07 0.840000000000001 0.000479226433711635 1.87907386461118e-07 0.860000000000001 0.00117472337990195 3.45691787470401e-07 0.880000000000001 0.00264034866282927 6.34287344149701e-07 0.900000000000001 0.00522794423106301 1.16540468112547e-06 0.920000000000001 0.00903034139391363 2.31413352105635e-06 0.940000000000001 0.0137847402545775 6.44271144024526e-06 0.960000000000001 0.0188323182252165 2.8122163664329e-05 0.980000000000001 0.0233426649137917 0.000113265105014797 1 0.0268219609534767 0.000289588737782711 1.02 0.0296395459543091 0.000534059566546979 1.04 0.032350603818986 0.000847740010316985 0.3 1.70062041765647e-12 -3.56822460569247e-13 0.32 1.68173940493378e-12 -2.84975377256185e-13 0.34 1.66487507510193e-12 -1.89538120707971e-13 0.36 1.65365887401311e-12 -5.29594838422021e-14 0.38 1.6582550744167e-12 1.55425433821144e-13 0.4 1.70710008049475e-12 4.89233046716192e-13 0.42 1.87971006414172e-12 1.0422776133543e-12 0.44 2.39831190566345e-12 1.97882515534677e-12 0.46 3.8835923988142e-12 3.58669981770593e-12 0.48 8.06797242558721e-12 6.37056316632242e-12 0.5 1.97831997032254e-11 1.12158575663119e-11 0.52 5.24935626535911e-11 1.96771246218173e-11 0.54 1.43682631687634e-10 3.44853787740277e-11 0.56 3.97586063873162e-10 6.04415750784629e-11 0.58 1.10369483408235e-09 1.05991184644917e-10 0.6 3.06480329483464e-09 1.86001673893405e-10 0.62 8.50323141283648e-09 3.26667742929809e-10 0.64 2.35578745054514e-08 5.74188717224271e-10 0.66 6.51430931250885e-08 1.01015568551262e-09 0.68 1.7971402036562e-07 1.77893390796775e-09 0.7 4.94343624279185e-07 3.13665217509135e-09 0.72 1.35480351293567e-06 5.53955284938787e-09 0.74 3.6954301852012e-06 9.80520290505612e-09 0.76 1.00129431718639e-05 1.74116098335035e-08 0.78 2.69171690284836e-05 3.10639247794348e-08 0.800000000000001 7.16139059747371e-05 5.57957196424516e-08 0.820000000000001 0.00018801645697024 1.0115389067491e-07 0.840000000000001 0.000484052535335885 1.85553253520232e-07 0.860000000000001 0.00119735747877828 3.44731266948972e-07 0.880000000000001 0.00273081505675244 6.47528979492432e-07 0.900000000000001 0.00550778046538153 1.22674667459327e-06 0.920000000000001 0.00971856216912102 2.34614919294201e-06 0.940000000000001 0.0152906421664179 4.53972622575768e-06 0.960000000000001 0.0220275870899555 8.87154001562527e-06 0.980000000000001 0.0296913096222254 1.74671482981024e-05 1 0.0380081361919025 3.61746624275604e-05 1.02 0.0465209044271084 0.000102788742580306 1.04 0.0540489096574508 0.000397090702042938 0.3 2.70062558859461e-12 -8.5682597597556e-13 0.32 2.68175306239611e-12 -7.84984427219884e-13 0.34 2.66491114818165e-12 -6.89561377569559e-13 0.36 2.65375416187929e-12 -5.53019142895919e-13 0.38 2.65850681914913e-12 -3.44727326579771e-13 0.4 2.70776531779269e-12 -1.11573829915672e-14 0.42 2.88146842437971e-12 5.41281608975429e-13 0.44 3.402961029856e-12 1.4762891234682e-12 0.46 4.89588877452527e-12 3.08025498451586e-12 0.48 9.10050573219759e-12 5.85421685673649e-12 0.5 2.08693023148965e-11 1.06744800334208e-11 0.52 5.37215025161896e-11 1.90725974984382e-11 0.54 1.45286166991385e-10 3.37218725905902e-11 0.56 4.00184172749484e-10 5.92787167244894e-11 0.58 1.10892590619292e-09 1.03827468462827e-10 0.6 3.07700092370254e-09 1.81335737997892e-10 0.62 8.53384517644686e-09 3.15762611562836e-10 0.64 2.36371065528966e-08 5.47771725530716e-10 0.66 6.53504513111698e-08 9.45299831236816e-10 0.68 1.80258379570082e-07 1.61918628591588e-09 0.7 4.95773286225093e-07 2.74370242369677e-09 0.72 1.35856397396348e-06 4.5766281181964e-09 0.74 3.70540563134227e-06 7.45871948529144e-09 0.76 1.00400778087353e-05 1.17387460845597e-08 0.78 2.69963258496686e-05 1.74786686381493e-08 0.800000000000001 7.18777894231282e-05 2.36637488895045e-08 0.820000000000001 0.000189071447182561 2.63847055376942e-08 0.840000000000001 0.000488952858222268 1.58712578209186e-08 0.860000000000001 0.0012206702834106 -2.06707217168548e-08 0.880000000000001 0.00282745924294487 -5.45211825618825e-08 0.900000000000001 0.00582178030203719 1.3881574720666e-07 0.920000000000001 0.0105194634190239 1.29316133976693e-06 0.940000000000001 0.0169947729194925 5.41788914580803e-06 0.960000000000001 0.0252208031947919 1.8364062998421e-05 0.980000000000001 0.0351045803927631 5.80146544865056e-05 1 0.0463328878687136 0.000176459432038143 1.02 0.0580985561671264 0.000499597586771613 1.04 0.0689987927300581 0.00124641157753369 0.3 1.25201807434905e-12 3.00903049250311e-12 0.32 1.9592286458014e-12 4.732424378509e-12 0.34 3.62340707052211e-12 7.43265076182885e-12 0.36 7.5022904875515e-12 1.16787904595361e-11 0.38 1.65042252063065e-11 1.83728873060151e-11 0.4 3.73505925492441e-11 2.89457883748463e-11 0.42 8.55652350383318e-11 4.56690426356323e-11 0.44 1.96977197415011e-10 7.21525015597217e-11 0.46 4.5421447559253e-10 1.14140018404871e-10 0.48 1.0476599219718e-09 1.80785773764251e-10 0.5 2.41552057156193e-09 2.86710143993764e-10 0.52 5.5652164437354e-09 4.55330145294429e-10 0.54 1.28095179056525e-08 7.24296365673207e-10 0.56 2.94491128668633e-08 1.15446073358052e-09 0.58 6.76085135937833e-08 1.84490010504142e-09 0.6 1.54953220507763e-07 2.95834534556314e-09 0.62 3.54419982192061e-07 4.76564576995384e-09 0.64 8.08647117100404e-07 7.72485310845053e-09 0.66 1.83941900656688e-06 1.26266107387503e-08 0.68 4.16897834584759e-06 2.0869611358136e-08 0.7 9.40563047219375e-06 3.49989115241286e-08 0.72 2.11216451314179e-05 5.97883003781403e-08 0.74 4.71864377247736e-05 1.04468597737698e-07 0.76 0.000104898548757839 1.87388854805538e-07 0.78 0.000231923721751595 3.45802995100778e-07 0.800000000000001 0.000507459020266167 6.56067644545386e-07 0.820000000000001 0.00108474876765362 1.27313891220163e-06 0.840000000000001 0.00221571474324934 2.49959122463862e-06 0.860000000000001 0.00421212997072024 4.88649010610549e-06 0.880000000000001 0.00731745716225943 9.35749711166543e-06 0.900000000000001 0.0115960807513003 1.73987966127483e-05 0.920000000000001 0.0169345545323636 3.19454321644237e-05 0.940000000000001 0.0230575928027947 6.48067226655911e-05 0.960000000000001 0.0293488936212747 0.000176137446483907 0.980000000000001 0.0348164356715437 0.00046242945082498 1 0.0394278645681096 0.000878921236285129 1.02 0.0437484905334904 0.00137264644165409 1.04 0.0480204664535109 0.00194136554285105 0.3 2.25381743153094e-12 2.50879707308859e-12 0.32 2.96331997747293e-12 4.23194474479731e-12 0.34 4.63271523286267e-12 6.93166756100081e-12 0.36 8.52347688614886e-12 1.11767801449844e-11 0.38 1.75524625326114e-11 1.78687880977068e-11 0.4 3.84604368677691e-11 2.84374540485164e-11 0.42 8.68153681791799e-11 4.51521502488097e-11 0.44 1.9854669208369e-10 7.16183766442786e-11 0.46 4.56510614641936e-10 1.13571324852025e-10 0.48 1.05160819246399e-09 1.8014801462371e-10 0.5 2.42322152992036e-09 2.85934992640831e-10 0.52 5.58143062374444e-09 4.54282947950507e-10 0.54 1.28450146334028e-08 7.22713200247468e-10 0.56 2.95282020484116e-08 1.15182740743201e-09 0.58 6.77859364854836e-08 1.8401917040004e-09 0.6 1.55351934881997e-07 2.94964223260802e-09 0.62 3.55315635435155e-07 4.74926222508744e-09 0.64 8.10657767020587e-07 7.69383766477202e-09 0.66 1.84393863753478e-06 1.25680505371696e-08 0.68 4.1792121597722e-06 2.07600717157353e-08 0.7 9.42926270861569e-06 3.47977089576792e-08 0.72 2.11787835489958e-05 5.94311724391424e-08 0.74 4.73365747227729e-05 1.0388179665233e-07 0.76 0.000105344406775069 1.86623099006391e-07 0.78 0.000233435415123315 3.45759253960864e-07 0.800000000000001 0.000513077944411074 6.61946273030662e-07 0.820000000000001 0.00110592401941919 1.30960029789456e-06 0.840000000000001 0.0022895900548572 2.6711811592441e-06 0.860000000000001 0.00443249535079974 5.58614566947343e-06 0.880000000000001 0.00785833623051034 1.18664854916887e-05 0.900000000000001 0.0127014574867764 2.52930710331632e-05 0.920000000000001 0.0188933222548385 5.33724546841052e-05 0.940000000000001 0.0262336773934942 0.000110027696243286 0.960000000000001 0.0344452927704526 0.000218993762163148 0.980000000000001 0.0431774817393691 0.000419890080080239 1 0.0518040800261282 0.00080813478349382 1.02 0.0593035344955908 0.00158175059704815 1.04 0.0659233995113853 0.00272317768259147 0.3 3.25823365314504e-12 2.00583212634495e-12 0.32 3.9729643322683e-12 3.72563907567958e-12 0.34 5.65377865451106e-12 6.41828025000358e-12 0.36 9.56948585889669e-12 1.06484080053904e-11 0.38 1.86529785731885e-11 1.73087653905611e-11 0.4 3.96800833847526e-11 2.78107031233086e-11 0.42 8.82954554644918e-11 4.43849821411834e-11 0.44 2.00596297090925e-10 7.0556294748528e-11 0.46 4.59805886481055e-10 1.11891068496184e-10 0.48 1.0576284390138e-09 1.77174637211029e-10 0.5 2.43520307649819e-09 2.80262371443564e-10 0.52 5.60645192137603e-09 4.42988580648248e-10 0.54 1.28985499198895e-08 6.99738295564785e-10 0.56 2.96440532749983e-08 1.10464594742404e-09 0.58 6.80378633708555e-08 1.74298712374777e-09 0.6 1.55900703807558e-07 2.74939216095132e-09 0.62 3.56511392312359e-07 4.33751188087428e-09 0.64 8.13263909970691e-07 6.84981528562563e-09 0.66 1.8496296952422e-06 1.08449182991477e-08 0.68 4.19172948447667e-06 1.72592874506353e-08 0.7 9.45725653679868e-06 2.7728451695617e-08 0.72 2.12441452208533e-05 4.5247721843297e-08 0.74 4.75018174091739e-05 7.56400266209488e-08 0.76 0.000105816967623104 1.30875600203646e-07 0.78 0.000234993897367817 2.37099078493467e-07 0.800000000000001 0.000518812351633966 4.55750193317076e-07 0.820000000000001 0.00112775650464925 9.43831027100094e-07 0.840000000000001 0.00236812471641669 2.13448170157324e-06 0.860000000000001 0.00467799689436766 5.27360887167222e-06 0.880000000000001 0.00849367222322945 1.39471636331219e-05 0.900000000000001 0.0140579008364148 3.83485623369502e-05 0.920000000000001 0.0213197316261499 0.000106851593568854 0.940000000000001 0.0298757274216623 0.000292164452555268 0.960000000000001 0.038897276292231 0.000742850567637773 0.980000000000001 0.0473299255245753 0.00165326910247556 1 0.0544869105623819 0.00314258648521332 1.02 0.0602977598410662 0.00519933931868797 1.04 0.0650063678683118 0.00774339617777396 0.3 9.67451174007269e-12 1.65537133080203e-11 0.32 1.99437579976987e-11 2.51291099123597e-11 0.34 4.19939783884256e-11 3.81448443034858e-11 0.36 8.92929379040835e-11 5.79257814249865e-11 0.38 1.90675413525426e-10 8.80260814292527e-11 0.4 4.07836891921696e-10 1.33890327080871e-10 0.42 8.72684854593271e-10 2.03881351322568e-10 0.44 1.86700620805446e-09 3.10889687205188e-10 0.46 3.99218816448291e-09 4.74877398326462e-10 0.48 8.5302778079677e-09 7.26947002077073e-10 0.5 1.82108092978837e-08 1.11594764261095e-09 0.52 3.88361470156717e-08 1.71939698664224e-09 0.54 8.2718111719607e-08 2.66194614496999e-09 0.56 1.75922582871134e-07 4.14723331195228e-09 0.58 3.73485110458036e-07 6.51459872481651e-09 0.6 7.91228749341435e-07 1.03422758256921e-08 0.62 1.67202290915289e-06 1.66404063983091e-08 0.64 3.52331695080779e-06 2.72204780933559e-08 0.66 7.39803708986092e-06 4.54171704076162e-08 0.68 1.54804481126066e-05 7.75230327829152e-08 0.7 3.22727993237e-05 1.35677771901193e-07 0.72 6.70625105935957e-05 2.43738552908254e-07 0.74 0.000138952391020398 4.49246136407086e-07 0.76 0.000286627994402328 8.47692072719949e-07 0.78 0.000585424982770884 1.63077864409403e-06 0.800000000000001 0.00117103426671327 3.17818905926186e-06 0.820000000000001 0.00225549389727742 6.21797638071061e-06 0.840000000000001 0.00410066939415726 1.20720275244989e-05 0.860000000000001 0.00693166922462219 2.29729896914179e-05 0.880000000000001 0.0108489626106714 4.24104642486739e-05 0.900000000000001 0.015811694834976 7.5561172559136e-05 0.920000000000001 0.0216681168142129 0.000131176783424268 0.940000000000001 0.0281216024368184 0.000236139123447494 0.960000000000001 0.03451256151498 0.000482302949140492 0.980000000000001 0.0402273459980473 0.000939598513859886 1 0.0455120207295002 0.00153965303080243 1.02 0.0506390035150981 0.00224310298238676 1.04 0.0556470461935165 0.00305605445963623 0.3 1.07033999342836e-11 1.60500899543287e-11 0.32 2.10046155030581e-11 2.46222245948837e-11 0.34 4.31222498068068e-11 3.76317942416158e-11 0.36 9.05633997143933e-11 5.74011151407419e-11 0.38 1.92245809478549e-10 8.7479595695952e-11 0.4 4.10039905501992e-10 1.33302994309887e-10 0.42 8.7622180204181e-10 2.03217825237931e-10 0.44 1.87335450348885e-09 3.10084580019112e-10 0.46 4.00445728674271e-09 4.73810287697381e-10 0.48 8.55500433330607e-09 7.2539717973986e-10 0.5 1.82617134970929e-08 1.11351272072936e-09 0.52 3.89419763216824e-08 1.71534758620119e-09 0.54 8.29389783837711e-08 2.65494954826163e-09 0.56 1.76383931092648e-07 4.13493932798341e-09 0.58 3.7444833309249e-07 6.49282478336789e-09 0.6 7.93238700917566e-07 1.03036916943378e-08 0.62 1.67622106611414e-06 1.65723730884037e-08 0.64 3.53213166692541e-06 2.71017712686172e-08 0.66 7.41678555954055e-06 4.52140511301121e-08 0.68 1.55215712850271e-05 7.71883146424498e-08 0.7 3.23682253431334e-05 1.35172381806247e-07 0.72 6.73046521395778e-05 2.4315841305748e-07 0.74 0.000139640432327696 4.49403932943325e-07 0.76 0.000288801584565657 8.52590789028421e-07 0.78 0.000592744542939198 1.65770592181485e-06 0.800000000000001 0.00119571144042801 3.29705270382098e-06 0.820000000000001 0.00233319094963429 6.69371831998602e-06 0.840000000000001 0.00431523940849715 1.382554856146e-05 0.860000000000001 0.00743257807982505 2.88738776725503e-05 0.880000000000001 0.0118354187352569 6.03809778401254e-05 0.900000000000001 0.0174848702341262 0.000124841559370674 0.920000000000001 0.0241821193569607 0.000251539064635904 0.940000000000001 0.0316154334324055 0.000486530539630673 0.960000000000001 0.0394052309577422 0.000891589969441712 0.980000000000001 0.0471412073204003 0.00153951425930583 1 0.0543537608809763 0.00252819042413927 1.02 0.0606989137447594 0.00396152310351295 1.04 0.0664266415737058 0.00579002667314176 0.3 1.17731690243713e-11 1.55036634553302e-11 0.32 2.21457888346019e-11 2.40307911782876e-11 0.34 4.44079301301804e-11 3.69520332733322e-11 0.36 9.21415833114055e-11 5.65483185643122e-11 0.38 1.94416182001431e-10 8.62884374962533e-11 0.4 4.13409447182925e-10 1.31451425371143e-10 0.42 8.82020102483835e-10 2.00079750824546e-10 0.44 1.88407266853862e-09 3.0444532404549e-10 0.46 4.02514219966719e-09 4.63318380873033e-10 0.48 8.59587922042179e-09 7.0551090816542e-10 0.5 1.83434799423939e-08 1.07548167656598e-09 0.52 3.91065307456583e-08 1.64235784722481e-09 0.54 8.32710485118346e-08 2.51478917998639e-09 0.56 1.77054727572074e-07 3.86610389194085e-09 0.58 3.75803685536672e-07 5.97833060016662e-09 0.6 7.95977913093149e-07 9.32201854842665e-09 0.62 1.68176556165927e-06 1.47061404151868e-08 0.64 3.5434127678025e-06 2.35687626349759e-08 0.66 7.43998612772385e-06 3.85600860448076e-08 0.68 1.55706535024325e-05 6.47245025288273e-08 0.7 3.24776441031363e-05 1.11977427000027e-07 0.72 6.7570815118482e-05 2.00326846612272e-07 0.74 0.000140368559308562 3.71207943488879e-07 0.76 0.000291044142414929 7.13043849949477e-07 0.78 0.000600236820580947 1.42192351613299e-06 0.800000000000001 0.00122124265782118 2.95479602815865e-06 0.820000000000001 0.00241588775322813 6.43911885162313e-06 0.840000000000001 0.00455316164485117 1.47990439450945e-05 0.860000000000001 0.00801182032795992 3.58171860844814e-05 0.880000000000001 0.0130052754270616 9.00953512972477e-05 0.900000000000001 0.0194314649366194 0.000229350506842381 0.920000000000001 0.0267878702923377 0.000565141572126159 0.940000000000001 0.0342262354499815 0.00127181503167309 0.960000000000001 0.0409362928472421 0.00250567464691037 0.980000000000001 0.0465657342676983 0.0043118883002019 1 0.0511731262778514 0.00663845221264348 1.02 0.0549619881632145 0.00939952204453131 1.04 0.058130492234446 0.0125124565913724 0.3 6.93810226092464e-11 5.85971906475967e-11 0.32 1.40182160831984e-10 8.66316466026264e-11 0.34 2.83896022357307e-10 1.28150336707007e-10 0.36 5.75443383511881e-10 1.89754313855777e-10 0.38 1.16654583219834e-09 2.81371069796467e-10 0.4 2.3642182838689e-09 4.1801908139894e-10 0.42 4.78917402146791e-09 6.2259034058746e-10 0.44 9.69508528670755e-09 9.30311510605547e-10 0.46 1.96110560779094e-08 1.39603394898358e-09 0.48 3.96321506997241e-08 2.10640037704116e-09 0.5 8.00059371704701e-08 3.20062251608558e-09 0.52 1.61302710197e-07 4.90670604826107e-09 0.54 3.24717532815041e-07 7.6062325443176e-09 0.56 6.52530010740812e-07 1.19523183674408e-08 0.58 1.30863737673893e-06 1.90886578192929e-08 0.6 2.61860402666012e-06 3.10626700227665e-08 0.62 5.22683088178297e-06 5.16151290602426e-08 0.64 1.03978862880624e-05 8.77054357765903e-08 0.66 2.06300550513126e-05 1.52481945883183e-07 0.68 4.0822635304418e-05 2.71099653919837e-07 0.7 8.06086113301266e-05 4.92149434755964e-07 0.72 0.000158807350134516 9.1009878181735e-07 0.74 0.000311500075696275 1.70907216273882e-06 0.76 0.000605233257316385 3.24685513475766e-06 0.78 0.00115424949731227 6.21063941517395e-06 0.800000000000001 0.00213178355962473 1.18884693455763e-05 0.820000000000001 0.00375349003782041 2.25985945942528e-05 0.840000000000001 0.00622005183793555 4.22834711818814e-05 0.860000000000001 0.00964945584561174 7.71969809637811e-05 0.880000000000001 0.0140481438458424 0.000136514689822741 0.900000000000001 0.0193254352654558 0.000232828612184102 0.920000000000001 0.0253108898911711 0.000384654204062574 0.940000000000001 0.0316952098728315 0.000634512233304181 0.960000000000001 0.0379180382522141 0.00108024248525713 0.980000000000001 0.0437034234895076 0.00176136263833454 1 0.0492764058113359 0.0026142193627455 1.02 0.0547357476998171 0.0036090612039388 1.04 0.060029242926048 0.00475016275444212 0.3 7.05995029679122e-11 5.80707082641271e-11 0.32 1.41617795923006e-10 8.6084102082837e-11 0.34 2.85765027655402e-10 1.2756521439653e-10 0.36 5.78177366329909e-10 1.89102360689761e-10 0.38 1.17100616910139e-09 2.80600663039907e-10 0.4 2.37212331409364e-09 4.17039482688107e-10 0.42 4.8039493475161e-09 6.21242734246376e-10 0.44 9.72355381275984e-09 9.28319201756907e-10 0.46 1.96667913078447e-08 1.39291727174532e-09 0.48 3.97421172163899e-08 2.10133236593772e-09 0.5 8.02236143621731e-08 3.19217444825387e-09 0.52 1.61733987609976e-07 4.89246714638844e-09 0.54 3.25571800198536e-07 7.58212504085813e-09 0.56 6.54221348574777e-07 1.19115373059926e-08 0.58 1.31198759521053e-06 1.90200246879546e-08 0.6 2.6252612763185e-06 3.09482968696482e-08 0.62 5.24017406211448e-06 5.14278617087143e-08 0.64 1.04250767411492e-05 8.74092658125127e-08 0.66 2.06875242257594e-05 1.52047785124317e-07 0.68 4.09516207053366e-05 2.7058873948763e-07 0.7 8.09243103218247e-05 4.92060468823281e-07 0.72 0.000159661431880421 9.1272517352876e-07 0.74 0.000314021534802405 1.72365024217078e-06 0.76 0.000613055420383314 3.30860139041488e-06 0.78 0.0011784584982494 6.44861248544923e-06 0.800000000000001 0.00220239737159488 1.27532449556624e-05 0.820000000000001 0.00393764397012135 2.55587692827374e-05 0.840000000000001 0.00663446457574638 5.17134154546042e-05 0.860000000000001 0.0104455577540871 0.000104824788422223 0.880000000000001 0.0153625607125678 0.000210342208225949 0.900000000000001 0.0212099992380805 0.000411454063358436 0.920000000000001 0.0276771697989487 0.000771492651971345 0.940000000000001 0.0343817909585673 0.00136615709323579 0.960000000000001 0.0409627045895046 0.00226504142753235 0.980000000000001 0.0471566206149068 0.00351587254006658 1 0.0528149609450754 0.00514797566936354 1.02 0.0579011213685174 0.00718369508578506 1.04 0.062499530601021 0.00960517704921303 0.3 7.21193707901763e-11 5.72277555398204e-11 0.32 1.43613497995626e-10 8.4945108054786e-11 0.34 2.88672250938539e-10 1.25876688628557e-10 0.36 5.82830985538405e-10 1.86395607438297e-10 0.38 1.17900624258544e-09 2.76010752077401e-10 0.4 2.38653674118331e-09 4.08973473751575e-10 0.42 4.83065481397422e-09 6.06773067781301e-10 0.44 9.77381890655119e-09 9.02077433291817e-10 0.46 1.97622079028208e-08 1.34508225756933e-09 0.48 3.99240460181233e-08 2.01398310603755e-09 0.5 8.0571243430882e-08 3.03270171729239e-09 0.52 1.62398842701984e-07 4.60172068325944e-09 0.54 3.26843739439849e-07 7.05318991501063e-09 0.56 6.5665529309315e-07 1.09519264206872e-08 0.58 1.31664994281865e-06 1.72846557136933e-08 0.6 2.63422157482493e-06 2.7821371616244e-08 0.62 5.25753172981913e-06 4.58166761165562e-08 0.64 1.04591571245082e-05 7.73944347729065e-08 0.66 2.07567265444807e-05 1.34270477969188e-07 0.68 4.11002871709803e-05 2.39254862655329e-07 0.7 8.12723564195417e-05 4.37384840411354e-07 0.72 0.000160567645897278 8.19047551258233e-07 0.74 0.000316630741932906 1.56947340601344e-06 0.76 0.000621082669262369 3.07938689664764e-06 0.78 0.00120351695996843 6.20638984799375e-06 0.800000000000001 0.00227725059540414 1.29266813046874e-05 0.820000000000001 0.00413953061043146 2.8010584571647e-05 0.840000000000001 0.00710350968172632 6.32841306822445e-05 0.860000000000001 0.0113572233242421 0.000147759337479272 0.880000000000001 0.0168118930992419 0.000347614518551579 0.900000000000001 0.0230137920873376 0.00078848955513036 0.920000000000001 0.0292405588071617 0.00163776883794404 0.940000000000001 0.0348625578783796 0.00301934931070437 0.960000000000001 0.0396270462943262 0.0049522319317279 0.980000000000001 0.0435793907850863 0.00737937004110688 1 0.0468691669058007 0.0102201180964781 1.02 0.0496455135032666 0.0133981442230266 1.04 0.052028150274329 0.0168496692758101 0.3 2.5765102358415e-09 5.96022151352556e-10 0.32 4.7489622172611e-09 8.56035720178742e-10 0.34 8.74973853358831e-09 1.23623801387602e-09 0.36 1.61125920383313e-08 1.79791634486352e-09 0.38 2.96525051229308e-08 2.63767655021951e-09 0.4 5.45299652730692e-08 3.91043735547081e-09 0.42 1.00192859222506e-07 5.86889566746707e-09 0.44 1.83914614206971e-07 8.93210579589549e-09 0.46 3.37235256179855e-07 1.38057163502943e-08 0.48 6.17661735285916e-07 2.16945744918379e-08 0.5 1.12983178913879e-06 3.46811345365945e-08 0.52 2.06368718258333e-06 5.64026316294074e-08 0.54 3.76319647394209e-06 9.32681545797913e-08 0.56 6.84564795002648e-06 1.566535462327e-07 0.58 1.24327935049556e-05 2.66870201415655e-07 0.6 2.25385270553436e-05 4.60355337911084e-07 0.62 4.07958935795631e-05 8.02714816246083e-07 0.64 7.37397017592887e-05 1.41239138855375e-06 0.66 0.000133030954346064 2.503576600214e-06 0.68 0.000239139794535841 4.46377617371654e-06 0.7 0.000426972502443035 7.99304857475759e-06 0.72 0.000753212385309619 1.4350547688346e-05 0.74 0.00130296685020076 2.57802406471366e-05 0.76 0.00218987326836677 4.62152908235105e-05 0.78 0.00354288421697167 8.23663385683687e-05 0.800000000000001 0.00547982550891768 0.000145229746548704 0.820000000000001 0.00807808142408937 0.000251823296229893 0.840000000000001 0.0113538639495844 0.000426516444042572 0.860000000000001 0.015254967979002 0.000700857207744644 0.880000000000001 0.0196684599868248 0.00111093829619933 0.900000000000001 0.0244419278870632 0.00169281842808623 0.920000000000001 0.0294084385952724 0.00247926094379948 0.940000000000001 0.0344004389605352 0.00350331549247357 0.960000000000001 0.0392666617920312 0.0048046811362846 0.980000000000001 0.0439396868159835 0.00640325969923261 1 0.0484491033913707 0.00826604073342021 1.02 0.0528132873127792 0.0103477613980679 1.04 0.0570048195334895 0.0126217006267726 0.3 2.58547060390676e-09 5.9463891421309e-10 0.32 4.76437648704602e-09 8.54102032632184e-10 0.34 8.77684471212945e-09 1.23341820478464e-09 0.36 1.61608752940005e-08 1.79367542343234e-09 0.38 2.97391306575455e-08 2.63116580252108e-09 0.4 5.46859715816454e-08 3.90031361624702e-09 0.42 1.00474320893328e-07 5.85305782609497e-09 0.44 1.84422766340836e-07 8.90727611548226e-09 0.46 3.3815287545709e-07 1.37668294679423e-08 0.48 6.19319254803147e-07 2.16338942162861e-08 0.5 1.1328284864418e-06 3.45870689196454e-08 0.52 2.06911737759626e-06 5.62584063380758e-08 0.54 3.7730858823975e-06 9.30512181345045e-08 0.56 6.8637933603852e-06 1.56339188293517e-07 0.58 1.2466742560099e-05 2.66449776517732e-07 0.6 2.26040344767436e-05 4.59906545233167e-07 0.62 4.09284898070813e-05 8.02639978618e-07 0.64 7.40260647235206e-05 1.41419859931433e-06 0.66 0.000133696863590446 2.51239293312854e-06 0.68 0.000240797531121136 4.4963268320992e-06 0.7 0.000431295458592899 8.10260190370622e-06 0.72 0.000764638070478365 1.47030858846905e-05 0.74 0.00133242070968339 2.68784559192721e-05 0.76 0.00226112377330492 4.95206816587391e-05 0.78 0.00369933527958896 9.18937776952508e-05 0.800000000000001 0.0057844195186528 0.000171223422618617 0.820000000000001 0.00859611555303779 0.000318111512671282 0.840000000000001 0.0121127306442258 0.000582483431956659 0.860000000000001 0.0161883402532889 0.00103522554683217 0.880000000000001 0.0205744982166247 0.00175837954371466 0.900000000000001 0.0249939877492908 0.00282371495433632 0.920000000000001 0.0292254015195003 0.00427292730630255 0.940000000000001 0.0331428011291955 0.00611266027548958 0.960000000000001 0.0367038877357192 0.00832278681562794 0.980000000000001 0.0399181382054134 0.0108684286602577 1 0.0428194676960225 0.0137095722247161 1.02 0.0454497363970767 0.0168069856586646 1.04 0.0478507686646734 0.0201252198844514 0.3 2.60474513334721e-09 5.82346318598409e-10 0.32 4.79716984796107e-09 8.33668108838445e-10 0.34 8.83315796796816e-09 1.199283071062e-09 0.36 1.62581079099395e-08 1.73652779828028e-09 0.38 2.99075503121725e-08 2.53544680085309e-09 0.4 5.49782221475775e-08 3.7400871986696e-09 0.42 1.00981948090655e-07 5.58520107083828e-09 0.44 1.85304966329131e-07 8.46028545336237e-09 0.46 3.39686661977586e-07 1.30224725463549e-08 0.48 6.21987452589476e-07 2.03972558664581e-08 0.5 1.13747531892345e-06 3.25379729731812e-08 0.52 2.07722829914365e-06 5.2873215781066e-08 0.54 3.78730706939336e-06 8.7478065832616e-08 0.56 6.88887449762802e-06 1.47207303027704e-07 0.58 1.25117357146828e-05 2.51558737773517e-07 0.6 2.26869823871823e-05 4.35789507471176e-07 0.62 4.10883556749667e-05 7.63973435328342e-07 0.64 7.43545494440632e-05 1.35327564367335e-06 0.66 0.000134427030348754 2.41965369448215e-06 0.68 0.000242553753243313 4.36564096442564e-06 0.7 0.000435783696470088 7.9538110396487e-06 0.72 0.0007764330480321 1.46621613287641e-05 0.74 0.00136303701497814 2.74400620281952e-05 0.76 0.00233636626449976 5.23580264129159e-05 0.78 0.0038675559499952 0.000102192908653493 0.800000000000001 0.00611485936204769 0.00020378356048819 0.820000000000001 0.00914765964611251 0.000410854106185785 0.840000000000001 0.0128595775860679 0.000818130639005466 0.860000000000001 0.0169367578503009 0.00155627468432637 0.880000000000001 0.0209706880455418 0.00274592515268652 0.900000000000001 0.0246562197061127 0.00444276945492802 0.920000000000001 0.0278750721419041 0.00663079597631237 0.940000000000001 0.0306390448680599 0.00925394714049679 0.960000000000001 0.0330115001976035 0.0122456871677541 0.980000000000001 0.0350633666565234 0.0155437883778381 1 0.0368570297598159 0.0190951836966631 1.02 0.0384429819827096 0.0228563764473961 1.04 0.039860865799648 0.0267922868496118 0.3 4.39847220998956e-08 5.17695623129998e-09 0.32 7.52052356221354e-08 7.76781816148655e-09 0.34 1.28576066992794e-07 1.17755735562277e-08 0.36 2.19749380853152e-07 1.80540046626249e-08 0.38 3.75375034472488e-07 2.80064251972905e-08 0.4 6.40767403466753e-07 4.39535841830058e-08 0.42 1.09286121474173e-06 6.97532732392468e-08 0.44 1.86206399584924e-06 1.11845830126636e-07 0.46 3.16756808142141e-06 1.81020989014982e-07 0.48 5.38265891832492e-06 2.95407451127612e-07 0.5 9.13386493227383e-06 4.85536218184171e-07 0.52 1.5477902487474e-05 8.02922501792531e-07 0.54 2.61945498501641e-05 1.33461843350907e-06 0.56 4.42748287926089e-05 2.22789543012388e-06 0.58 7.47165287229798e-05 3.7320962551106e-06 0.6 0.0001257794573671 6.26952761878704e-06 0.62 0.000210865990936609 1.05552547514809e-05 0.64 0.00035109499563892 1.77985317546514e-05 0.66 0.000578279339339264 3.00382952396011e-05 0.68 0.000937285410008036 5.06922966548122e-05 0.7 0.0014859178984628 8.54287940769699e-05 0.72 0.00229047717545187 0.000143479700047123 0.74 0.00341669140464549 0.000239449228505909 0.76 0.00491761268757952 0.000395430618374068 0.78 0.0068205619214527 0.000642729678585331 0.800000000000001 0.00911565804130096 0.001021845654569 0.820000000000001 0.0117506993563889 0.00157926151897625 0.840000000000001 0.01463782032771 0.00236093202708228 0.860000000000001 0.0176717679637932 0.00340468850375166 0.880000000000001 0.0207515485403996 0.00473483454869643 0.900000000000001 0.023795729010391 0.00636071064382409 0.920000000000001 0.026747791862153 0.0082786666786889 0.940000000000001 0.0295741469494111 0.0104757739416755 0.960000000000001 0.0322591623613131 0.0129337924042064 0.980000000000001 0.0348001949994541 0.015632454469834 1 0.0372035045906542 0.0185515250382145 1.02 0.0394803095083879 0.0216714189526159 1.04 0.041641872112516 0.0249727120552959 0.3 4.41178569638865e-08 5.16258347374241e-09 0.32 7.54284941372401e-08 7.74641821693547e-09 0.34 1.28951056867312e-07 1.1743690372642e-08 0.36 2.20379908004506e-07 1.8006546748486e-08 0.38 3.76436128951771e-07 2.79359540760343e-08 0.4 6.42554632440353e-07 4.38493620642072e-08 0.42 1.09587520382033e-06 6.96001096242447e-08 0.44 1.86715756209445e-06 1.11623032041401e-07 0.46 3.17619157135877e-06 1.80702676134481e-07 0.48 5.39736915728734e-06 2.94967287302299e-07 0.5 9.15923515898972e-06 4.84967798503327e-07 0.52 1.55224585664017e-05 8.02304539086681e-07 0.54 2.627502473762e-05 1.33430949271814e-06 0.56 4.44260534049184e-05 2.22909510418085e-06 0.58 7.50152800308705e-05 3.73843239216612e-06 0.6 0.0001264028976279 6.29148768462294e-06 0.62 0.000212233737882284 1.06224015921632e-05 0.64 0.000354201649156766 1.79926328422278e-05 0.66 0.000585415090177495 3.05810689402306e-05 0.68 0.000953406304344689 5.21699036298699e-05 0.7 0.00152075312673275 8.93387122651224e-05 0.72 0.00236072709468351 0.000153477037837873 0.74 0.00354632682361205 0.000263942579080704 0.76 0.00513292003523714 0.000452342476814152 0.78 0.00713646410897427 0.000766666395722101 0.800000000000001 0.00951350497172847 0.00127170267846599 0.820000000000001 0.0121570228678564 0.00204105105152197 0.840000000000001 0.0149208641147482 0.00314065943717792 0.860000000000001 0.0176632564978111 0.00461253901722241 0.880000000000001 0.0202809060166735 0.00646855014108545 0.900000000000001 0.0227175647530419 0.00869511938008112 0.920000000000001 0.0249543064632218 0.0112627159152466 0.940000000000001 0.0269951676406139 0.0141346236145143 0.960000000000001 0.0288556344553946 0.0172729699450617 0.980000000000001 0.0305554293659372 0.0206421227387719 1 0.0321146338084288 0.0242102286544156 1.02 0.0335518798080162 0.0279496377800511 1.04 0.0348836779250443 0.0318367440185631 0.3 4.44084866096946e-08 4.98006430923404e-09 0.32 7.58977307293854e-08 7.46045945489668e-09 0.34 1.29709156630147e-07 1.12963327253715e-08 0.36 2.21605365190575e-07 1.73078827723519e-08 0.38 3.78418152735283e-07 2.68468879816245e-08 0.4 6.45762529089881e-07 4.21553461878629e-08 0.42 1.10107263194345e-06 6.69713782518135e-08 0.44 1.87559341362214e-06 1.07554879726625e-07 0.46 3.18990348823269e-06 1.74429830306492e-07 0.48 5.41979267113717e-06 2.85330221028731e-07 0.5 9.19623476715627e-06 4.70236739900833e-07 0.52 1.55844462395907e-05 7.79942249545128e-07 0.54 2.63814607680989e-05 1.30071500107309e-06 0.56 4.46156609299268e-05 2.17949993363422e-06 0.58 7.53703074493417e-05 3.66754161645799e-06 0.6 0.000127108181625217 6.19666728439477e-06 0.62 0.000213720436465235 1.05145953257248e-05 0.64 0.000357486582867456 1.79294177773037e-05 0.66 0.000592848781124021 3.07606457743888e-05 0.68 0.000970133023595502 5.31863856226644e-05 0.7 0.00155703010089186 9.28438462309407e-05 0.72 0.00243438138256047 0.0001637957367242 0.74 0.00368268200149317 0.000291684854914025 0.76 0.00535699311600579 0.000521387671577109 0.78 0.00745196137319797 0.00092447891716992 0.800000000000001 0.0098724860915653 0.00159735059606807 0.820000000000001 0.0124445819666072 0.00263927255624329 0.840000000000001 0.0149801311362089 0.0041181852896911 0.860000000000001 0.0173453513222957 0.0060520136069935 0.880000000000001 0.0194800499776866 0.00841681932593365 0.900000000000001 0.0213772207760833 0.0111664160087639 0.920000000000001 0.0230564056089034 0.0142483044338742 0.940000000000001 0.0245460749908999 0.0176124141988899 0.960000000000001 0.0258749673331479 0.0212146691188307 0.980000000000001 0.0270687190164979 0.0250177843740977 1 0.0281490142257762 0.0289908299296425 1.02 0.0291337655900565 0.0331083603468192 1.04 0.0300376348429197 0.0373494811327951 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_1D_no_aval.standard0000644000175000017500000010141714163340332026263 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618356876401e-13 1.19322476813773e-13 0.32 6.81733740773507e-13 1.72507890613075e-13 0.34 6.64859495417967e-13 2.34687204137646e-13 0.36 6.53615995191183e-13 3.11995286650571e-13 0.38 6.5813700749421e-13 4.14751764727272e-13 0.4 7.06774878456863e-13 5.60315686366595e-13 0.42 8.78814174946167e-13 7.77887743844846e-13 0.44 1.39584379200769e-12 1.11658915224e-12 0.46 2.87679385128007e-12 1.65905401296328e-12 0.48 7.04925125716079e-12 2.54430090426405e-12 0.5 1.87316726605475e-11 4.00622676823414e-12 0.52 5.13518415258992e-11 6.43841673795289e-12 0.54 1.42293199083472e-10 1.05033236201361e-11 0.56 3.9551721633674e-10 1.73163666469018e-11 0.58 1.09976560179889e-09 2.87568364576141e-11 0.6 3.05579040108306e-09 4.79942602318679e-11 0.62 8.48036253967724e-09 8.03831365889333e-11 0.64 2.34973627715837e-08 1.34993669214665e-10 0.66 6.49807600120173e-08 2.27398753109226e-10 0.68 1.79278025421677e-07 3.84002060509509e-10 0.7 4.93180225801102e-07 6.50924138438312e-10 0.72 1.35175163997781e-06 1.10958658182234e-09 0.74 3.68776785930811e-06 1.9077429580676e-09 0.76 9.99613966483677e-06 3.32356879232528e-09 0.78 2.68987182078556e-05 5.90643820406255e-09 0.800000000000001 7.17540232630976e-05 1.08045865394331e-08 0.820000000000001 0.000189726841945392 2.05701493209622e-08 0.840000000000001 0.000497697719504726 4.12435093585049e-08 0.860000000000001 0.00128903470295127 8.81256247647712e-08 0.880000000000001 0.00323620944374432 2.0446393021947e-07 0.900000000000001 0.00763701790538067 5.63676397262319e-07 0.920000000000001 0.0160126695294862 3.15406011455706e-06 0.940000000000001 0.0262639800028727 4.07694816075354e-05 0.960000000000001 0.034816451526705 0.000281239075798722 0.980000000000001 0.0415907008595649 0.000841474895568168 1 0.0486884277334277 0.00174680071564563 1.02 0.0578232919702811 0.00312280919998176 1.04 0.0704841730225884 0.00519706629387135 0.3 1.70062013327894e-12 -3.80677523186228e-13 0.32 1.6817386976843e-12 -3.27492109386926e-13 0.34 1.66487331965417e-12 -2.65312795862355e-13 0.36 1.6536545261224e-12 -1.88004713349433e-13 0.38 1.6582443302115e-12 -8.52482352727365e-14 0.4 1.70707359557669e-12 6.03156863665734e-14 0.42 1.87964495072604e-12 2.77887743844793e-13 0.44 2.39815227946499e-12 6.16589152239864e-13 0.46 3.88320226866072e-12 1.15905401296296e-12 0.48 8.06702205855483e-12 2.04430090426324e-12 0.5 1.9780892697599e-11 3.50622676823214e-12 0.52 5.24879834443664e-11 5.93841673794794e-12 0.54 1.43669193427159e-10 1.00033236201239e-11 0.56 3.9755383699687e-10 1.68163666468716e-11 0.58 1.10361792008637e-09 2.82568364575395e-11 0.6 3.06462075382362e-09 4.74942602316836e-11 0.62 8.502801450764e-09 7.98831365884779e-11 0.64 2.3556875582705e-08 1.3449366921354e-10 0.66 6.51408542847349e-08 2.26757363955296e-10 0.68 1.79709609450162e-07 3.83112026817307e-10 0.7 4.94339967113279e-07 6.49351096772197e-10 0.72 1.35484860913524e-06 1.10614483895425e-09 0.74 3.69596514737373e-06 1.89921260697747e-09 0.76 1.00175731244576e-05 3.30126591714757e-09 0.78 2.69540131901884e-05 5.84701088849326e-09 0.800000000000001 7.18947351394556e-05 1.06450551264873e-08 0.820000000000001 0.000190082762669918 2.0136087952556e-08 0.840000000000001 0.000498614541248717 4.00111477515326e-08 0.860000000000001 0.00129154671698905 8.42085661478882e-08 0.880000000000001 0.00324397969103458 1.88194936216074e-07 0.900000000000001 0.00767589844470874 4.4475682724797e-07 0.920000000000001 0.0166745010595653 1.10185885553287e-06 0.940000000000001 0.0318824832929392 2.87976918766838e-06 0.960000000000001 0.0495000951916976 1.42956414451922e-05 0.980000000000001 0.0651086343043101 0.000323321745439239 1 0.0768378710102564 0.00189148199399547 1.02 0.0883022440055724 0.00423639258277064 1.04 0.103441442891126 0.00727366298110037 0.3 2.70062178881051e-12 -8.80677523186228e-13 0.32 2.68174330518162e-12 -8.27492109386926e-13 0.34 2.66488613586904e-12 -7.65312795862356e-13 0.36 2.65369015492779e-12 -6.88004713349433e-13 0.38 2.65834331452795e-12 -5.85248235272737e-13 0.4 2.70734840313302e-12 -4.39684313633427e-13 0.42 2.88040730649929e-12 -2.22112256155208e-13 0.44 3.40026537151528e-12 1.16589152239864e-13 0.46 4.88905381015567e-12 6.59054012962955e-13 0.48 9.08320905058413e-12 1.54430090426324e-12 0.5 2.08256177476877e-11 3.00622676823214e-12 0.52 5.36113960008586e-11 5.43841673794794e-12 0.54 1.45009221312326e-10 9.50332362012393e-12 0.56 3.99489078887574e-10 1.63163666468716e-11 0.58 1.10718521459787e-09 2.77568364575395e-11 0.6 3.07265200590744e-09 4.69942602316836e-11 0.62 8.52300690830873e-09 7.93831365884779e-11 0.64 2.36101677983087e-08 1.3399366921354e-10 0.66 6.5283692922806e-08 2.26257363955296e-10 0.68 1.80093555351439e-07 3.82611963434553e-10 0.7 4.95368950812171e-07 6.48850922405413e-10 0.72 1.35758923514251e-06 1.10564436095359e-09 0.74 3.70320005234282e-06 1.89871130220321e-09 0.76 1.00363787001975e-05 3.3007623747267e-09 0.78 2.70021074756165e-05 5.84650131361696e-09 0.800000000000001 7.20147604060032e-05 1.06445292710038e-08 0.820000000000001 0.000190371812890492 2.01355172219617e-08 0.840000000000001 0.000499268406918915 4.00104428216319e-08 0.860000000000001 0.00129281424097557 8.42073483640779e-08 0.880000000000001 0.00324545592048243 1.88190423661836e-07 0.900000000000001 0.00767496116285669 4.44714853177813e-07 0.920000000000001 0.016712890594846 1.10106060685809e-06 0.940000000000001 0.0330213457567533 2.82593669701133e-06 0.960000000000001 0.0558341558463989 7.48705508854741e-06 0.980000000000001 0.0788191644185877 3.58537540935713e-05 1 0.0980192952075211 0.00113970715858396 1.02 0.112216959417785 0.00455050991937164 1.04 0.128871928304716 0.0085852850833439 0.3 1.25201374574941e-12 1.09801484483473e-12 0.32 1.959220623427e-12 1.66741508272418e-12 0.34 3.62339231735095e-12 2.5172962583938e-12 0.36 7.50226358044665e-12 3.79643763668013e-12 0.38 1.65041765703898e-11 5.73276638003945e-12 0.4 3.73505055055653e-11 8.6757568920087e-12 0.42 8.55650810462621e-11 1.31619200965739e-11 0.44 1.96976929000546e-10 2.00164362233429e-11 0.46 4.54214018256445e-10 3.05119639475637e-11 0.48 1.04765917681299e-09 4.66192383004023e-11 0.5 2.41551949403252e-09 7.14079859538911e-11 0.52 5.56521553758478e-09 1.09700463619007e-10 0.54 1.28095208856935e-08 1.69163346239369e-10 0.56 2.94491406633811e-08 2.62188943727075e-10 0.58 6.76086781607144e-08 4.09285446362e-10 0.6 1.54954115861486e-07 6.4524102707719e-10 0.62 3.54424761341304e-07 1.03131610087305e-09 0.64 8.08672508823533e-07 1.67946147370755e-09 0.66 1.83955347196254e-06 2.80270401061441e-09 0.68 4.16968686522632e-06 4.82247578665571e-09 0.7 9.40933274376091e-06 8.60204017840805e-09 0.72 2.11408239401411e-05 1.59619572425967e-08 0.74 4.72848481115132e-05 3.08308897083187e-08 0.76 0.000105399509614321 6.18348691162827e-08 0.78 0.000234450130128735 1.28154755113355e-07 0.800000000000001 0.000519929558187847 2.72828620412049e-07 0.820000000000001 0.00114331453170512 5.93056727246554e-07 0.840000000000001 0.00246568447750771 1.30950724497008e-06 0.860000000000001 0.00513265328717693 2.92648676656474e-06 0.880000000000001 0.0101490250175249 6.6254628878061e-06 0.900000000000001 0.0188522420214841 1.58980568282489e-05 0.920000000000001 0.0320623768036091 7.45806076138836e-05 0.940000000000001 0.045141184583453 0.000608797884341455 0.960000000000001 0.0554907774353813 0.00159476286910196 0.980000000000001 0.0669412066681287 0.00289196952596527 1 0.0813014642761015 0.00471809191806435 1.02 0.0994303203143395 0.00750026467859295 1.04 0.121463302661852 0.0120985159066794 0.3 2.25357968352452e-12 5.98014844618752e-13 0.32 2.96283232128965e-12 1.16741508227202e-12 0.34 4.63171727809647e-12 2.01729625744717e-12 0.36 8.52143966030278e-12 3.29643763469829e-12 0.38 1.75483146677896e-11 5.23276637589032e-12 0.4 3.84520153994789e-11 8.17575688332217e-12 0.42 8.67983213315978e-11 1.2661920078388e-11 0.44 1.98512296495842e-10 1.95164361852692e-11 0.46 4.56441452739858e-10 3.00119638678536e-11 0.48 1.05146963386254e-09 4.61192381335229e-11 0.5 2.42294503113849e-09 7.09079856045163e-11 0.52 5.58088117195673e-09 1.09200462887564e-10 0.54 1.28439276963043e-08 1.68663344708036e-10 0.56 2.95260627034737e-08 2.61688940521112e-10 0.58 6.7781753415224e-08 4.08755613365565e-10 0.6 1.55343853153554e-07 6.44672692141553e-10 0.62 3.55300512530161e-07 1.03065979351216e-09 0.64 8.10632449842306e-07 1.6786047983825e-09 0.66 1.8439155729421e-06 2.80139244478474e-09 0.68 4.179329084308e-06 4.82013512664631e-09 0.7 9.43045845116398e-06 8.59738089929822e-09 0.72 2.11867376935208e-05 1.59520836429962e-08 0.74 4.73838623367755e-05 3.08092808174774e-08 0.76 0.000105612334036728 6.17865980920206e-08 0.78 0.000234910109188694 1.28044354425823e-07 0.800000000000001 0.000520942649355772 2.72565542038888e-07 0.820000000000001 0.00114563798290207 5.92376729640181e-07 0.840000000000001 0.00247138927519416 1.30743678127327e-06 0.860000000000001 0.00514776344212017 2.91785191744701e-06 0.880000000000001 0.0101925523614999 6.5629930539102e-06 0.900000000000001 0.0190317639536782 1.48431070034618e-05 0.920000000000001 0.0334814713597857 3.37568391713601e-05 0.940000000000001 0.0545718776710358 9.57782969197862e-05 0.960000000000001 0.0743908373064778 0.00114802696678281 0.980000000000001 0.0895157954423388 0.00322018254042267 1 0.106990663694847 0.00564893537401478 1.02 0.129587934663603 0.00901068334645603 1.04 0.158837417908557 0.0143352908837468 0.3 3.25503095818001e-12 9.80148446187515e-14 0.32 3.96617100639832e-12 6.67415082272018e-13 0.34 5.63939338696905e-12 1.51729625744717e-12 0.36 9.53907648704606e-12 2.79643763469829e-12 0.38 1.8588807975522e-11 4.73276637589032e-12 0.4 3.95449108802612e-11 7.67575688332217e-12 0.42 8.80112400046821e-11 1.2161920078388e-11 0.44 1.99999817230953e-10 1.90164361852692e-11 0.46 4.58556456758559e-10 2.95119638678536e-11 0.48 1.05501644678799e-09 4.56192381335229e-11 0.5 2.42975367803012e-09 7.04079856045163e-11 0.52 5.59510671410566e-09 1.08700462887564e-10 0.54 1.28749811383633e-08 1.68163344708036e-10 0.56 2.95951977629726e-08 2.61188940521112e-10 0.58 6.79368024241657e-08 4.08255613365565e-10 0.6 1.55692009689586e-07 6.44172651621058e-10 0.62 3.56080749593422e-07 1.0301597008288e-09 0.64 8.12374075256804e-07 1.67810458689572e-09 0.66 1.8477816376369e-06 2.80089196359135e-09 0.68 4.18785205895956e-06 4.81963403531968e-09 0.7 9.44902866946286e-06 8.59687843331807e-09 0.72 2.12268284019675e-05 1.59515780852683e-08 0.74 4.74692830433532e-05 3.08087682975993e-08 0.76 0.000105791481122343 6.17860697134163e-08 0.78 0.000235276903097401 1.28043788664901e-07 0.800000000000001 0.000521656330637997 2.72564879912259e-07 0.820000000000001 0.00114686401578258 5.92375757772788e-07 0.840000000000001 0.00247286749118976 1.30743432967579e-06 0.860000000000001 0.00514741737860139 2.91783899795897e-06 0.880000000000001 0.0101843541601618 6.56288409581876e-06 0.900000000000001 0.0190117332223454 1.48416721911643e-05 0.920000000000001 0.0335645556160732 3.36906681422756e-05 0.940000000000001 0.0560838031877873 7.67534257701969e-05 0.960000000000001 0.0857237983682312 0.000291454786880438 0.980000000000001 0.107107374923054 0.00286578694098737 1 0.127093745950384 0.00611320515569874 1.02 0.152255241734344 0.00998881047669585 1.04 0.185408362513134 0.0157878101976399 0.3 9.67445064843513e-12 5.10313892670629e-12 0.32 1.99436539115274e-11 7.51902272544472e-12 0.34 4.19938025704271e-11 1.10643720397313e-11 0.36 8.92926437490675e-11 1.62813053523823e-11 0.38 1.9067492684518e-10 2.39779283680473e-11 0.4 4.07836098062207e-10 3.53652262854364e-11 0.42 8.72683586522564e-10 5.2271310682048e-11 0.44 1.867004258319e-09 7.74838425709336e-11 0.46 3.9921854248344e-09 1.15311513962296e-10 0.48 8.53027499330725e-09 1.72532493136717e-10 0.5 1.82108112806288e-08 2.6004944798529e-10 0.52 3.88361778949807e-08 3.95875464121813e-10 0.54 8.2718283208847e-08 6.10715716538826e-10 0.56 1.75923406824505e-07 9.58578371563276e-10 0.58 3.73488933141391e-07 1.53781145386333e-09 0.6 7.91246336826634e-07 2.53309772993446e-09 0.62 1.67210360469619e-06 4.30106542647913e-09 0.64 3.52368612621201e-06 7.54666748729142e-09 0.66 7.39971655318231e-06 1.36897654554367e-08 0.68 1.54880440495291e-05 2.56318312683778e-08 0.7 3.23069301361423e-05 4.93666949022099e-08 0.72 6.72150780326589e-05 9.73753450716385e-08 0.74 0.000139631133811427 1.95796898862849e-07 0.76 0.000289619060288921 3.99600244746068e-07 0.78 0.000598311804474912 8.24719644300627e-07 0.800000000000001 0.00122403029731916 1.71618380169979e-06 0.820000000000001 0.00245629014403684 3.59269006586593e-06 0.840000000000001 0.00477486005804178 7.5540037408391e-06 0.860000000000001 0.00888723273800905 1.59403718429153e-05 0.880000000000001 0.0157432400131958 3.38534761541827e-05 0.900000000000001 0.0264971342780995 7.64437276022259e-05 0.920000000000001 0.0411470273795821 0.000333430548707855 0.940000000000001 0.054683296405022 0.00133545386981968 0.960000000000001 0.0682647619996281 0.00275225877350301 0.980000000000001 0.0843437920484277 0.00472432540603294 1 0.103775435568034 0.00775447113409019 1.02 0.126553458348577 0.0128106226992325 1.04 0.152341031401668 0.0219124312047412 0.3 1.06997155354126e-11 4.60313887000012e-12 0.32 2.09976261739129e-11 7.01902261436015e-12 0.34 4.31090240063323e-11 1.05643718221222e-11 0.36 9.0538439157162e-11 1.57813049260968e-11 0.38 1.92198835690711e-10 2.34779275329753e-11 0.4 4.09951771336058e-10 3.48652246495719e-11 0.42 8.76056972400509e-10 5.1771307477471e-11 0.44 1.87304728776855e-09 7.69838362933268e-11 0.46 4.0038867391428e-09 1.14811501664777e-10 0.48 8.55394865608967e-09 1.7203246904649e-10 0.5 1.82597673441124e-08 2.59549400793735e-10 0.52 3.89384004910328e-08 3.95375371675906e-10 0.54 8.2932424528393e-08 6.10196335225697e-10 0.56 1.76371932702669e-07 9.58037181089088e-10 0.58 3.74426378319959e-07 1.53722405926338e-09 0.6 7.93198792455203e-07 2.53241267284616e-09 0.62 1.67615152602781e-06 4.30017447459748e-09 0.64 3.53203379404426e-06 7.54534361929597e-09 0.66 7.41680707791981e-06 1.36875343322027e-08 0.68 1.55228202816739e-05 2.56277016732245e-08 0.7 3.2377242838061e-05 4.93585931973824e-08 0.72 6.73566795507895e-05 9.73588901148792e-08 0.74 0.000139916441910362 1.95762632854615e-07 0.76 0.000290197531971997 3.99526934956357e-07 0.78 0.000599502476298533 8.24556148936267e-07 0.800000000000001 0.00122655844418697 1.7157906601833e-06 0.820000000000001 0.00246194637366225 3.59160174923976e-06 0.840000000000001 0.00478826732993174 7.55012445747207e-06 0.860000000000001 0.0089201017143935 1.59193351488484e-05 0.880000000000001 0.0158284887831007 3.36371137084294e-05 0.900000000000001 0.026802087380863 7.11880244651006e-05 0.920000000000001 0.0434654998520397 0.000151626113620052 0.940000000000001 0.0658490439426146 0.000532272611998412 0.960000000000001 0.0848906658732969 0.00254459828429871 0.980000000000001 0.104783336987144 0.00513134653225565 1 0.129100831659313 0.00867042962899676 1.02 0.159163094233715 0.014315131124643 1.04 0.195025864987931 0.0241591810428124 0.3 1.17230581157931e-11 4.10313887000012e-12 0.32 2.20473660506484e-11 6.51902261436015e-12 0.34 4.42149432171995e-11 1.00643718221222e-11 0.36 9.1763825610609e-11 1.52813049260968e-11 0.38 1.9367804771525e-10 2.29779275329753e-11 0.4 4.11969734552164e-10 3.43652246495719e-11 0.42 8.79217158310459e-10 5.1271307477471e-11 0.44 1.87862602596667e-09 7.64838362933268e-11 0.46 4.01457901191412e-09 1.14311501664777e-10 0.48 8.57543411009143e-09 1.7153246904649e-10 0.5 1.83039890848192e-08 2.59049400793735e-10 0.52 3.90304061333178e-08 3.94875371675906e-10 0.54 8.3124579445055e-08 6.09696317476744e-10 0.56 1.76773296679784e-07 9.57537143406248e-10 0.58 3.75263033358812e-07 1.53672397926056e-09 0.6 7.94936778325542e-07 2.53191250334599e-09 0.62 1.67974535070251e-06 4.29967411633321e-09 0.64 3.53942528817566e-06 7.54484286397864e-09 0.66 7.4318672712808e-06 1.36870327444894e-08 0.68 1.55533021188622e-05 2.56271983429914e-08 0.7 3.24383527857319e-05 4.93580862189874e-08 0.72 6.74778790431985e-05 9.73583754514257e-08 0.74 0.000140153350462683 1.95762101707714e-07 0.76 0.000290648257982668 3.99526366870865e-07 0.78 0.000600310695032554 8.24555488683081e-07 0.800000000000001 0.00122782267500706 1.71578970846802e-06 0.820000000000001 0.00246330525612047 3.59159948195444e-06 0.840000000000001 0.00478781376797096 7.55011418896955e-06 0.860000000000001 0.0089127494603479 1.59192672113209e-05 0.880000000000001 0.0158057227673128 3.36365302530156e-05 0.900000000000001 0.0267649783532945 7.1178243745316e-05 0.920000000000001 0.0435523309627734 0.000150785992511406 0.940000000000001 0.0682457711054672 0.000321335655151249 0.960000000000001 0.0967658489659862 0.00155599080372816 0.980000000000001 0.119865029336951 0.005051665816555 1 0.147330421974933 0.00913901692472557 1.02 0.181689012270134 0.0152074783947648 1.04 0.224142429630418 0.025559374600454 0.3 6.93806149986934e-11 1.63791446996432e-11 0.32 1.40181508911345e-10 2.35875338307517e-11 0.34 2.83894990299417e-10 3.39964429938406e-11 0.36 5.75441769922112e-10 4.90933059435603e-11 0.38 1.16654335197303e-09 7.11141295976787e-11 0.4 2.36421457450092e-09 1.03474150319901e-10 0.42 4.78916876820499e-09 1.51493120494561e-10 0.44 9.69507883576126e-09 2.2365243475434e-10 0.46 1.96110519986761e-08 3.33835072866815e-10 0.48 3.96321661832837e-08 5.05418128075315e-10 0.5 8.00060453497729e-08 7.78925939114471e-10 0.52 1.61303213886926e-07 1.22652115163762e-09 0.54 3.24719682619595e-07 1.98006533374462e-09 0.56 6.52538982323118e-07 3.28572539494692e-09 0.58 1.308674613464e-06 5.61142372376829e-09 0.6 2.61875827250889e-06 9.85948220564277e-09 0.62 5.22746815888461e-06 1.77894271710246e-08 0.64 1.04005045176207e-05 3.28615143446446e-08 0.66 2.06407679672847e-05 6.19237608837106e-08 0.68 4.0866278539507e-05 1.18591939244892e-07 0.7 8.0785798311788e-05 2.3003008663939e-07 0.72 0.000159523286885112 4.50565107474718e-07 0.74 0.000314362303817259 8.8904155943543e-07 0.76 0.000616419072953821 1.76380998255104e-06 0.78 0.00119613140070108 3.51330491644205e-06 0.800000000000001 0.00227784933261434 7.01848686952573e-06 0.820000000000001 0.00421376466949084 1.40505502579291e-05 0.840000000000001 0.00750330832849915 2.81735581681722e-05 0.860000000000001 0.0128049298161045 5.65827281619077e-05 0.880000000000001 0.0209676861633199 0.000114239106927956 0.900000000000001 0.0329756928219772 0.00024777250496868 0.920000000000001 0.047934567631102 0.000863214868336644 0.940000000000001 0.0629356697144866 0.00230548703474227 0.960000000000001 0.0799979441837211 0.00437126190873749 0.980000000000001 0.100282026918641 0.00753624361537456 1 0.123793173377491 0.0127734116557804 1.02 0.150000038454237 0.0219868484469627 1.04 0.178545178827331 0.0390327730413022 0.3 7.05726158375118e-11 1.58791414821287e-11 0.32 1.41569604212565e-10 2.30875278223449e-11 0.34 2.85678879782412e-10 3.34964317737041e-11 0.36 5.78023802757541e-10 4.85932849910072e-11 0.38 1.17073325353951e-09 7.06140904707498e-11 0.4 2.37163981863406e-09 1.02974077254028e-10 0.42 4.80309561592796e-09 1.50992984050894e-10 0.44 9.72205138701195e-09 2.23152179958581e-10 0.46 1.96641557501593e-08 3.33334597059618e-10 0.48 3.97375060185829e-08 5.04917239549974e-10 0.5 8.0215555904901e-08 7.78412509147473e-10 0.52 1.61719877415144e-07 1.22599432117059e-09 0.54 3.2554690192996e-07 1.97951177061259e-09 0.56 6.54176665364639e-07 3.28511857151655e-09 0.58 1.31190516416389e-06 5.61071094720474e-09 0.6 2.62510457566583e-06 9.85855898828463e-09 0.62 5.23987668050509e-06 1.77880866859713e-08 0.64 1.04245882692141e-05 3.28593486471541e-08 0.66 2.0687307830478e-05 6.19199623775375e-08 0.68 4.09558078560392e-05 1.18584904101888e-07 0.7 8.09576488168471e-05 2.30016591674423e-07 0.72 0.000159853331770111 4.50538539269178e-07 0.74 0.00031499841474065 8.88987855794477e-07 0.76 0.000617656032158085 1.76369731063619e-06 0.78 0.00119858585410411 3.51305308626984e-06 0.800000000000001 0.00228290343711024 7.01785679246531e-06 0.820000000000001 0.00422465789064624 1.4048633915687e-05 0.840000000000001 0.00752747064262283 2.8165569497617e-05 0.860000000000001 0.0128588216409681 5.65293171627081e-05 0.880000000000001 0.0210944966543627 0.00011354584340261 0.900000000000001 0.0334078996069068 0.000228239336130743 0.920000000000001 0.0512785277014406 0.000464495791311281 0.940000000000001 0.0731464409552096 0.00151824996769492 0.960000000000001 0.0940831455939186 0.00422394505186803 0.980000000000001 0.118953938165168 0.00788601827936336 1 0.14923346533372 0.0136189384790906 1.02 0.185035352501375 0.0234477200631334 1.04 0.225479366899696 0.0412288510874342 0.3 7.1749530564468e-11 1.53791414821287e-11 0.32 1.42926310919218e-10 2.25875278223449e-11 0.34 2.87397572362079e-10 3.29964317737041e-11 0.36 5.80470650188437e-10 4.80932849910072e-11 0.38 1.17464334560634e-09 7.01140904707498e-11 0.4 2.37848696629199e-09 1.02474077254029e-10 0.42 4.8158303705595e-09 1.50492984050894e-10 0.44 9.74657065541526e-09 2.22652179958581e-10 0.46 1.9712221551084e-08 3.32834597059618e-10 0.48 3.98325241442438e-08 5.04417239549974e-10 0.5 8.04039734037963e-08 7.77912494840823e-10 0.52 1.6209355900999e-07 1.22549429238902e-09 0.54 3.26286819215885e-07 1.97901171267165e-09 0.56 6.55637678987648e-07 3.28461845507378e-09 0.58 1.31477965685172e-06 5.61021071364621e-09 0.6 2.63073644754142e-06 9.85805852077422e-09 0.62 5.25085857221819e-06 1.778758575214e-08 0.64 1.04457823108037e-05 3.28588467867324e-08 0.66 2.07280166686981e-05 6.19194586752268e-08 0.68 4.10333681849798e-05 1.18584396730346e-07 0.7 8.11039958163294e-05 2.30016076929013e-07 0.72 0.000160125302611541 4.50538009393688e-07 0.74 0.000315488960536374 8.88987293340239e-07 0.76 0.000618487141264289 1.76369666958014e-06 0.78 0.0011998151374826 3.51305220643063e-06 0.800000000000001 0.00228418452859845 7.01785492148404e-06 0.820000000000001 0.00422446617874859 1.40486268091174e-05 0.840000000000001 0.00752201721720443 2.816553119753e-05 0.860000000000001 0.0128413925364497 5.65290716003444e-05 0.880000000000001 0.0210570124609735 0.000113543697925428 0.900000000000001 0.0333557011962437 0.000228191184889052 0.920000000000001 0.0513602389510594 0.00045881904309523 0.940000000000001 0.0769705122516635 0.000938653214443475 0.960000000000001 0.103796268086872 0.00343667127407192 0.980000000000001 0.131422541472012 0.00782770779632059 1 0.16567112035557 0.0139823018895696 1.02 0.207515671212576 0.0242324639396189 1.04 0.256688157102773 0.0425577160892448 0.3 2.57649963819262e-09 1.51990494795061e-10 0.32 4.74894734399014e-09 2.19570500503831e-10 0.34 8.74971825825164e-09 3.21243127238681e-10 0.36 1.61125659106581e-08 4.77315368605076e-10 0.38 2.96524758345452e-08 7.22053454425101e-10 0.4 5.45299469546357e-08 1.11423227783723e-09 0.42 1.00192905479994e-07 1.75605614899333e-09 0.44 1.83914914043151e-07 2.82733147995574e-09 0.46 3.37236465867275e-07 4.64731893249608e-09 0.48 6.17666135287688e-07 7.78709476056011e-09 0.5 1.12984733099632e-06 1.32740808885469e-08 0.52 2.06374164325303e-06 2.29649746852923e-08 0.54 3.76338684143871e-06 4.02265811589006e-08 0.56 6.84631116986237e-06 7.11799283199162e-08 0.58 1.2435099562462e-05 1.26975296028623e-07 0.6 2.25465211132368e-05 2.27954590806108e-07 0.62 4.08235242513921e-05 4.11269793798695e-07 0.64 7.38348845653531e-05 7.44831193738321e-07 0.66 0.000133357092045397 1.35285010556649e-06 0.68 0.000240246475424771 2.4626216712306e-06 0.7 0.000430663560638741 4.4902204944007e-06 0.72 0.000765173302933562 8.19749050076275e-06 0.74 0.00134003722961894 1.49796629139338e-05 0.76 0.00229780410303144 2.73923280425849e-05 0.78 0.00383353079561548 5.01170157308873e-05 0.800000000000001 0.00619773491867302 9.17306717557185e-05 0.820000000000001 0.00970502088453683 0.000167949683856901 0.840000000000001 0.0147576996097536 0.000307590360916456 0.860000000000001 0.0218847444680325 0.000563712284044133 0.880000000000001 0.0317731441535475 0.0010388348125576 0.900000000000001 0.0449046718889167 0.00203866001409596 0.920000000000001 0.0604573523385969 0.00431811671323885 0.940000000000001 0.0795796795996462 0.00818468169521711 0.960000000000001 0.103327182717937 0.014620622377405 0.980000000000001 0.131550543414265 0.0256392151951131 1 0.163026052833167 0.0448570704953963 1.02 0.196421703851081 0.0789209317841829 1.04 0.231229844259608 0.140092160957657 0.3 2.58458047403937e-09 1.51486477361821e-10 0.32 4.7629338197555e-09 2.19063600600506e-10 0.34 8.77451322415142e-09 3.2073127672044e-10 0.36 1.61571180479597e-08 4.76795015452871e-10 0.38 2.97330913230599e-08 7.21518498080048e-10 0.4 5.46762819733666e-08 1.11366856237817e-09 0.42 1.00458777936678e-07 1.75544628883936e-09 0.44 1.84397754656184e-07 2.82664199890917e-09 0.46 3.38112233768151e-07 4.64649206092029e-09 0.48 6.19251794900133e-07 7.78603076818601e-09 0.5 1.13271201530668e-06 1.32726075800857e-08 0.52 2.06890333590582e-06 2.29627947020251e-08 0.54 3.77265876648157e-06 4.02231809402963e-08 0.56 6.86286571829095e-06 7.11744210512076e-08 0.58 1.24645835764408e-05 1.26966149217765e-07 0.6 2.259883109245e-05 2.27939155596409e-07 0.62 4.09160281592848e-05 4.11243487175937e-07 0.64 7.39980030420338e-05 7.44786074136109e-07 0.66 0.000133643818858811 1.35277237814775e-06 0.68 0.000240748268635891 2.4624872747511e-06 0.7 0.000431536765543116 4.48998714476898e-06 0.72 0.000766685295123533 8.19708282316942e-06 0.74 0.0013426573330156 1.49789427510754e-05 0.76 0.00230240277614456 2.73910277230682e-05 0.78 0.00384180456183028 5.01145562479805e-05 0.800000000000001 0.00621299443481741 9.17255112046748e-05 0.820000000000001 0.0097334689176058 0.000167936043321788 0.840000000000001 0.0148105619076056 0.000307533960427031 0.860000000000001 0.0219834140659439 0.000563266972279707 0.880000000000001 0.0319793811123546 0.00103180237616935 0.900000000000001 0.0457762893806484 0.00189107340432931 0.920000000000001 0.0643467071868733 0.00355484606408402 0.940000000000001 0.0855494497294062 0.00758591172277434 0.960000000000001 0.111929717747319 0.0143856105388423 0.980000000000001 0.145425886122996 0.0257225286482508 1 0.186103657549523 0.0453879329524177 1.02 0.232495942754567 0.0800627864250209 1.04 0.282398040918158 0.141941098441717 0.3 2.59206208016234e-09 1.50986477361821e-10 0.32 4.77579220413818e-09 2.18563600600506e-10 0.34 8.7971879502818e-09 3.2023127672044e-10 0.36 1.61976920534525e-08 4.76295015452871e-10 0.38 2.98062563855325e-08 7.21018498080048e-10 0.4 5.48086907559358e-08 1.11316856237817e-09 0.42 1.0069867458298e-07 1.75494627714036e-09 0.44 1.84832254160752e-07 2.82614197743427e-09 0.46 3.38898254211201e-07 4.64599202154201e-09 0.48 6.20671251006685e-07 7.78553069605916e-09 0.5 1.13526973494962e-06 1.3272107446932e-08 0.52 2.07349977594707e-06 2.29622944588902e-08 0.54 3.78089322842619e-06 4.0222680496957e-08 0.56 6.87750280740143e-06 7.1173920244421e-08 0.58 1.24905391081152e-05 1.26965647750826e-07 0.6 2.264461123998e-05 2.27938652930286e-07 0.62 4.09962815147181e-05 4.11242982324783e-07 0.64 7.41375274885053e-05 7.44785565274527e-07 0.66 0.000133883090629336 1.35277186181102e-06 0.68 0.000241148511044959 2.46248674399899e-06 0.7 0.00043217615433733 4.48998658401652e-06 0.72 0.000767622715344835 8.19708218974637e-06 0.74 0.00134381713176147 1.49789418974632e-05 0.76 0.00230333015009022 2.73910260480973e-05 0.78 0.00384131128147296 5.0114551141832e-05 0.800000000000001 0.00620883900814783 9.17254912416514e-05 0.820000000000001 0.00972222380994464 0.000167935957700917 0.840000000000001 0.0147876778946164 0.0003075335622747 0.860000000000001 0.0219435535934979 0.000563264674463218 0.880000000000001 0.031918137713126 0.00103177766368438 0.900000000000001 0.0457017639642202 0.00189017633133293 0.920000000000001 0.064623748038795 0.00346366198211446 0.940000000000001 0.0895288056651984 0.00659386795960404 0.960000000000001 0.116645899065801 0.013849372851242 0.980000000000001 0.152146806223261 0.0255159654859098 1 0.197163762935677 0.0454339519378313 1.02 0.251467408292063 0.080483359773023 1.04 0.312887899304742 0.142896650383012 0.3 4.3984622477176e-08 1.66073322578654e-09 0.32 7.5205134896816e-08 2.66737919431006e-09 0.34 1.28576019099775e-07 4.30352546350503e-09 0.36 2.19749557390052e-07 6.98793595746993e-09 0.38 3.75375961184929e-07 1.14268826214828e-08 0.4 6.40770679056184e-07 1.88145353555799e-08 0.42 1.09287170592197e-06 3.11739886908371e-08 0.44 1.86209655099004e-06 5.19379414886014e-08 0.46 3.16766798173901e-06 8.69378534361888e-08 0.48 5.38296438759671e-06 1.46089460853763e-07 0.5 9.13479685042875e-06 2.4626559633829e-07 0.52 1.54807395076733e-05 4.16193608876998e-07 0.54 2.6203166107032e-05 7.04805446755774e-07 0.56 4.43009203334528e-05 1.19547615194788e-06 0.58 7.47952089191865e-05 2.03030538141713e-06 0.6 0.000126015186886875 3.45152858067339e-06 0.62 0.000211565037221442 5.87214585627932e-06 0.64 0.000353135150878701 9.99638809334438e-06 0.66 0.000584092616196948 1.70251931346107e-05 0.68 0.000953296929566311 2.90066903935026e-05 0.7 0.0015280916687988 4.94340410539778e-05 0.72 0.00239574053334155 8.42652227449323e-05 0.74 0.00366428253978606 0.00014366258608111 0.76 0.00546558710692687 0.000244960259629907 0.78 0.00796310174722011 0.000417726253553937 0.800000000000001 0.0113648109402209 0.000712398898037706 0.820000000000001 0.0159407459493897 0.00121502890341584 0.840000000000001 0.0220446128951626 0.00207252207073879 0.860000000000001 0.0301371065091416 0.00353703464122815 0.880000000000001 0.0407571941999384 0.00606600770204588 0.900000000000001 0.0540639472110143 0.0106485284468918 0.920000000000001 0.0706108812045892 0.0186053157130544 0.940000000000001 0.0918264492403001 0.0318388909222655 0.960000000000001 0.118659989237856 0.0539989142455562 0.980000000000001 0.151446744306912 0.0912869912252152 1 0.189303453173384 0.154200263405888 1.02 0.23032975816357 0.260617459277274 1.04 0.272929127536559 0.441096113331097 0.3 4.41048100886424e-08 1.65923230071284e-09 0.32 7.54088952613924e-08 2.66526393894469e-09 0.34 1.28921624332043e-07 4.30042276784195e-09 0.36 2.20335611440252e-07 6.98324215676335e-09 0.38 3.76369012994659e-07 1.14196249914997e-08 0.4 6.42451449616426e-07 1.88031464749727e-08 0.42 1.09571221116472e-06 3.11559429640799e-08 0.44 1.86688832068279e-06 5.19091689713299e-08 0.46 3.1757177515223e-06 8.68917960111443e-08 0.48 5.39646712128229e-06 1.46015550708746e-07 0.5 9.15737773833261e-06 2.46146804429895e-07 0.52 1.5518382303069e-05 4.16002494160812e-07 0.54 2.62657131342038e-05 7.0449778930115e-07 0.56 4.44044741594542e-05 1.19498069176345e-06 0.58 7.49658571864564e-05 2.02950727985846e-06 0.6 0.000126294492717744 3.45024276095321e-06 0.62 0.000212017556233673 5.87007402037822e-06 0.64 0.000353857797552791 9.99304939359642e-06 0.66 0.000585225685283085 1.70198122725283e-05 0.68 0.00095503974938339 2.89980167590218e-05 0.7 0.00153073692707301 4.94200556333192e-05 0.72 0.00239975981920633 8.42426605428647e-05 0.74 0.00367050691109212 0.000143626148340731 0.76 0.00547551749993607 0.000244901274626842 0.78 0.00797937555626588 0.000417630209027523 0.800000000000001 0.0113918826724649 0.000712239800715328 0.820000000000001 0.0159859477073198 0.00121474874918598 0.840000000000001 0.0221201636683954 0.0020718906044678 0.860000000000001 0.0302670693577447 0.00353397563603792 0.880000000000001 0.0410482976678405 0.00602812953416633 0.900000000000001 0.055262780433881 0.0102893753728818 0.920000000000001 0.0732694115245503 0.0178572697351131 0.940000000000001 0.0950104096351237 0.0313472955169347 0.960000000000001 0.123334855250561 0.0536715847747901 0.980000000000001 0.159613142802277 0.0911093144597816 1 0.204736766844511 0.154289245676625 1.02 0.258176321879989 0.261162800142287 1.04 0.317510641169389 0.442260070776604 0.3 4.42133417174832e-08 1.65873230071284e-09 0.32 7.5592450470034e-08 2.66476393330993e-09 0.34 1.29232237833684e-07 4.29992275824666e-09 0.36 2.20861130396176e-07 6.98274214035764e-09 0.38 3.77257467526205e-07 1.14191249634686e-08 0.4 6.43951742009966e-07 1.88026464271148e-08 0.42 1.09824181052754e-06 3.11554427663597e-08 0.44 1.8711454789542e-06 5.19086686451721e-08 0.46 3.18284720413898e-06 8.68912954730523e-08 0.48 5.40838989205552e-06 1.46015049820679e-07 0.5 9.17724625455074e-06 2.46146302963838e-07 0.52 1.55513595940052e-05 4.16001991739593e-07 0.54 2.63201918487057e-05 7.0449728529947e-07 0.56 4.44939241103372e-05 1.19498018514056e-06 0.58 7.51113893985408e-05 2.02950676886954e-06 0.6 0.000126527764730174 3.45024224262903e-06 0.62 0.000212382257455017 5.87007348949598e-06 0.64 0.000354404735435936 9.99304884029102e-06 0.66 0.000585990989120284 1.7019811675546e-05 0.68 0.000955990888966326 2.89980160635551e-05 0.7 0.00153167698650315 4.94200546734688e-05 0.72 0.00240020598254837 8.4242658771745e-05 0.74 0.00366958796471604 0.000143626143920052 0.76 0.00547192730719556 0.000244901261426514 0.78 0.00797137352820605 0.000417630166654106 0.800000000000001 0.0113773012499617 0.000712239659393557 0.820000000000001 0.0159621817229375 0.00121474824811902 0.840000000000001 0.0220841690123833 0.00207188853780299 0.860000000000001 0.0302155320079562 0.00353396305562864 0.880000000000001 0.0409788248439424 0.00602795373331461 0.900000000000001 0.0551925470585384 0.0102822937763397 0.920000000000001 0.0739109460170392 0.0175459388164342 0.940000000000001 0.0971089201967032 0.0305363515516362 0.960000000000001 0.125296956894821 0.0532388920972805 0.980000000000001 0.162459270767235 0.0908119966753015 1 0.209977355840436 0.15409379750465 1.02 0.268888053258214 0.261166219903615 1.04 0.338308991770343 0.442638152800022 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_vert_nqs.standard0000644000175000017500000003035414163340332025552 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002003e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24597758751578e-28 5.43852571787823e-28 0.0500000000000003 -5.000000001721e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732966e-13 5.05259770605552e-13 0.3 -3.00001561179699e-13 6.19324037995474e-13 0.35 -3.50014977027487e-13 7.70944534001899e-13 0.4 -4.00143680477496e-13 1.06045936684609e-12 0.45 -4.51378382653116e-13 1.85671697271933e-12 0.5 -5.13223359833108e-13 4.51945012807262e-12 0.55 -6.76856822893218e-13 1.40984637154991e-11 0.6 -1.8169867339145e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.700000000000001 -1.12703055744962e-10 3.47593602243093e-09 0.750000000000001 -1.07523878099576e-09 3.70437283331312e-08 0.800000000000001 -1.03087878741443e-08 4.2078518234126e-07 0.850000000000001 -9.88893781007048e-08 5.19838085606027e-06 0.900000000000001 -9.48676927691166e-07 3.64426951851013e-05 0.950000000000001 -9.10101825505032e-06 0.00011233505028582 1 -8.73095920185772e-05 0.000408005693289852 -1 1.00000034937479e-12 -2.00170685364324e-12 -0.95 9.50000349374789e-13 -1.90170685364324e-12 -0.9 9.00000349374789e-13 -1.80170685364324e-12 -0.85 8.50000349374789e-13 -1.70170685364324e-12 -0.8 8.00000349374789e-13 -1.60170685364324e-12 -0.75 7.50000349374789e-13 -1.50170685364324e-12 -0.7 7.00000349374788e-13 -1.40170685364324e-12 -0.65 6.50000349374788e-13 -1.30170685192337e-12 -0.6 6.00000349374788e-13 -1.20170684866847e-12 -0.55 5.50000349374788e-13 -1.10170683925358e-12 -0.5 5.00000349374788e-13 -1.00170681202073e-12 -0.45 4.50000349374788e-13 -9.01706733248892e-13 -0.4 4.00000349374788e-13 -8.01706505398964e-13 -0.35 3.50000349373942e-13 -7.01705846335334e-13 -0.3 3.00000349369419e-13 -6.01703939971841e-13 -0.25 2.50000349340734e-13 -5.01698425742357e-13 -0.2 2.00000349158817e-13 -4.01682475568281e-13 -0.15 1.50000348005106e-13 -3.01636338580386e-13 -0.0999999999999997 1.00000340688313e-13 -2.01502881963904e-13 -0.0499999999999997 5.00002942855112e-14 -1.01116829370576e-13 3.19189119579733e-16 1.02427433145661e-24 -1.02394362434436e-24 0.0500000000000003 -5.00018663369498e-14 1.03231482029217e-13 0.1 -1.00013702556897e-13 2.12585113041734e-13 0.15 -1.50088767234614e-13 3.39681870195537e-13 0.2 -2.00564823333808e-13 5.18321118300319e-13 0.25 -2.53583944850311e-13 8.47446497916894e-13 0.3 -3.22731045886843e-13 1.62074623988046e-12 0.35 -4.94160895006979e-13 3.73538840466097e-12 0.4 -1.31426223490767e-12 1.00900194676122e-11 0.45 -6.2482020346495e-12 3.10042420924721e-11 0.5 -3.72718761854809e-11 1.08679862139372e-10 0.55 -2.33755192271124e-10 5.16681810882584e-10 0.6 -1.47957434063713e-09 2.70327986136166e-09 0.65 -9.38022288444418e-09 1.60992979224565e-08 0.700000000000001 -5.94854287492185e-08 1.03283346580654e-07 0.750000000000001 -3.77249586153611e-07 6.8770590306344e-07 0.800000000000001 -2.39249190437502e-06 4.78271225894699e-06 0.850000000000001 -1.51730461610765e-05 3.86808605065979e-05 0.900000000000001 -9.62266090537246e-05 0.000213338659928004 0.950000000000001 -0.000610263789591722 0.000988312614424231 1 -0.00387025895403701 0.00535161304814611 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964246e-13 -0.2 2.00047134849492e-13 -4.14897162929443e-13 -0.15 1.50046886985275e-13 -3.14379680798674e-13 -0.0999999999999997 1.00045555694836e-13 -2.13018560796776e-13 -0.0499999999999997 5.00384052730846e-14 -1.09436572570566e-13 3.19189119579733e-16 4.13269572257375e-23 -4.13265453355744e-23 0.0500000000000003 -5.0206276115586e-14 1.24914117033713e-13 0.1 -1.01314194087144e-13 2.90980896151676e-13 0.15 -1.57264867823004e-13 5.67725307060068e-13 0.2 -2.39226183336872e-13 1.14882509114703e-12 0.25 -4.60891729945365e-13 2.60210366156322e-12 0.3 -1.43291446463824e-12 6.73610052619478e-12 0.35 -6.43513660097118e-12 2.00061162068663e-11 0.4 -3.30837259241193e-11 6.85489977652468e-11 0.45 -1.75995846089845e-10 2.70515774412067e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.700000000000001 -7.84663581577346e-07 9.28415745768935e-07 0.750000000000001 -4.21445744634298e-06 5.09879601067368e-06 0.800000000000001 -2.26360215187804e-05 2.8700178680583e-05 0.850000000000001 -0.000121579001631256 0.000175699566718311 0.900000000000001 -0.000653005827965913 0.000908465051650113 0.950000000000001 -0.0035073212278215 0.00440328372428201 1 -0.0188379669510573 0.0227283557895423 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102724e-13 -6.75373800064317e-13 -0.25 2.51658562604109e-13 -5.74880432730867e-13 -0.2 2.01656020281116e-13 -4.73668387073455e-13 -0.15 1.51643905151441e-13 -3.70687925097132e-13 -0.0999999999999997 1.01586171991671e-13 -2.6334527481025e-13 -0.0499999999999997 5.13110517672389e-14 -1.45191279609288e-13 3.19189119579733e-16 5.746168629738e-22 -5.74616115725308e-22 0.0500000000000003 -5.62476501229265e-14 2.13950763614116e-13 0.1 -1.36020047170782e-13 6.08121963861568e-13 0.15 -3.27896671387578e-13 1.49931858967928e-12 0.2 -1.05399191607836e-12 3.87148001992826e-12 0.25 -4.32583891170101e-12 1.1124834937132e-11 0.3 -1.97291461694721e-11 3.63099468893959e-11 0.35 -9.29434037716725e-11 1.3393572172085e-10 0.4 -4.41648485051704e-10 5.45224221543521e-10 0.45 -2.10317048911921e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.700000000000001 -5.16734064081571e-06 5.53886593993017e-06 0.750000000000001 -2.46243103052517e-05 2.67001628198755e-05 0.800000000000001 -0.000117344055554714 0.000130215837064791 0.850000000000001 -0.000559188357169267 0.000665866085586443 0.900000000000001 -0.00266474188743109 0.00323615830897643 0.950000000000001 -0.0126984928103494 0.0148026242803206 1 -0.0605130727475002 0.0694620631135213 -1 1.8972057352866e-12 -4.12190327764117e-12 -0.95 1.8472057352866e-12 -4.02190327764117e-12 -0.9 1.7972057352866e-12 -3.92190225632505e-12 -0.85 1.7472057352866e-12 -3.82190105524851e-12 -0.8 1.69720573528661e-12 -3.7218984416956e-12 -0.75 1.64720573528662e-12 -3.62189275458197e-12 -0.7 1.59720573528664e-12 -3.52188037937375e-12 -0.65 1.54720573528673e-12 -3.42185345081413e-12 -0.6 1.49720573528703e-12 -3.32179485403658e-12 -0.55 1.44720573528798e-12 -3.22166734694432e-12 -0.5 1.39720453154843e-12 -3.12138868667186e-12 -0.45 1.34720108191009e-12 -3.02078148590307e-12 -0.4 1.29718774639861e-12 -2.91945437817864e-12 -0.35 1.24713619437112e-12 -2.81654401856755e-12 -0.3 1.19693690608061e-12 -2.71012381338451e-12 -0.25 1.14616650342061e-12 -2.59581606486531e-12 -0.2 1.09318830431587e-12 -2.46337786134474e-12 -0.15 1.03167527390608e-12 -2.28774768406527e-12 -0.0999999999999997 9.37168558099011e-13 -2.00366730781635e-12 -0.0499999999999997 7.15115884813262e-13 -1.42765480474101e-12 3.19189119579733e-16 5.07442620958951e-20 -5.07442557850078e-20 0.0500000000000003 -2.62118384783783e-12 4.11796372433203e-12 0.1 -1.26107856731784e-11 1.73289044709166e-11 0.15 -5.10849854680896e-11 6.28591145981424e-11 0.2 -1.99674046887053e-10 2.27221255785917e-10 0.25 -7.73941671887358e-10 8.37924844582888e-10 0.3 -2.99378407974041e-09 3.14686776283752e-09 0.35 -1.15750376503994e-08 1.19668282984383e-08 0.4 -4.4748034121304e-08 4.58737379402857e-08 0.45 -1.72987015700746e-07 1.76651608133278e-07 0.5 -6.68729088106657e-07 6.82221512956974e-07 0.55 -2.58515303334841e-06 2.63958184694319e-06 0.6 -9.99360421369542e-06 1.02259253991901e-05 0.65 -3.86329612906105e-05 3.96560267477216e-05 0.700000000000001 -0.000149346085647431 0.00015392770339063 0.750000000000001 -0.000577337394380024 0.000598091405053974 0.800000000000001 -0.00223185271458484 0.00232799821195549 0.850000000000001 -0.00862782592505608 0.00913043853947601 0.900000000000001 -0.0333531777003911 0.0359868248907538 0.950000000000001 -0.12893566378958 0.139462022824438 1 -0.498435427837973 0.540783765228211 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105083e-10 -0.6 1.18575135234566e-10 -1.30294766063313e-10 -0.55 1.18524897840167e-10 -1.30191699950077e-10 -0.5 1.18474353034842e-10 -1.30085539519988e-10 -0.45 1.18422557934573e-10 -1.29972596875668e-10 -0.4 1.1836664318916e-10 -1.29844551137558e-10 -0.35 1.18297154466434e-10 -1.29681120696754e-10 -0.3 1.18182940325636e-10 -1.29429638088295e-10 -0.25 1.17921358696786e-10 -1.28944661320645e-10 -0.2 1.1717421031985e-10 -1.2780268918443e-10 -0.15 1.1482714961513e-10 -1.24718744459431e-10 -0.0999999999999997 1.07208477086367e-10 -1.15677456403674e-10 -0.0499999999999997 8.22201709724528e-11 -8.7879738193138e-11 3.19189119579733e-16 1.25417772648848e-18 -1.25417768125204e-18 0.0500000000000003 -2.70795603003862e-10 2.82482764696758e-10 0.1 -1.16293554639735e-09 1.19968102048248e-09 0.15 -4.10236647769572e-09 4.19605719138774e-09 0.2 -1.37874939984276e-08 1.40217410358346e-08 0.25 -4.56992726152099e-08 4.63172577067687e-08 0.3 -1.50846485469688e-07 1.52625480136579e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.700000000000001 -0.00209725704818039 0.00214673139842963 0.750000000000001 -0.00691033192322979 0.0070981937045267 0.800000000000001 -0.0227691145607407 0.0234850661691367 0.850000000000001 -0.075022817915502 0.0778328258163541 0.900000000000001 -0.247195523519854 0.258365553265715 0.950000000000001 -0.814493889989326 0.856020476606635 1 -2.68370675662406 2.83662793163795 tmp_ns50wwy/tests/hicum2/npn/reference/fout_npn_1D_npn_1D_breakdown.standard0000644000175000017500000012217714163340332027376 0ustar carstencarstenV(coll) I(coll) I(base) 0 -2.72004265233508e-08 3.20317602806374e-08 0.05 6.69866962196715e-07 9.16245564207021e-09 0.1 7.71908719528994e-07 4.09227128447357e-09 0.15 7.87069393821015e-07 2.91037850215566e-09 0.2 7.89507995819039e-07 2.62950541348603e-09 0.25 7.90072533752785e-07 2.55972476444289e-09 0.3 7.90355080931295e-07 2.54117025345291e-09 0.35 7.90590700869971e-07 2.53577226785713e-09 0.4 7.90814720924097e-07 2.53401738470262e-09 0.45 7.91032865936597e-07 2.53335726693461e-09 0.5 7.91246394675381e-07 2.53303988117667e-09 0.55 7.91455852215583e-07 2.53280107833521e-09 0.6 7.91661652637228e-07 2.53250255348648e-09 0.65 7.91864189826508e-07 2.53201399595761e-09 0.7 7.92063879068349e-07 2.53116068198372e-09 0.75 7.92261190303413e-07 2.52968855578075e-09 0.8 7.92456682357414e-07 2.52723179357796e-09 0.85 7.92651039482833e-07 2.52327772734772e-09 0.9 7.92845110420279e-07 2.51713164614128e-09 0.95 7.93039950426631e-07 2.50787813866511e-09 1 7.93236867570973e-07 2.49433755706484e-09 1.05 7.93437475997964e-07 2.47501542293268e-09 1.1 7.93643760756136e-07 2.44804026715244e-09 1.15 7.93858160960928e-07 2.41108314439794e-09 1.2 7.9408367993632e-07 2.36125013806932e-09 1.25 7.94324031485454e-07 2.2949385870255e-09 1.3 7.94583829021627e-07 2.20765008564412e-09 1.35 7.94868817311743e-07 2.09376019221575e-09 1.4 7.95186134403864e-07 1.94625691032781e-09 1.45 7.95544575927553e-07 1.75647543870705e-09 1.5 7.95954821288711e-07 1.51386954016587e-09 1.55 7.96429580157079e-07 1.20586132365114e-09 1.6 7.96983634918763e-07 8.17794323701338e-10 1.65 7.97633788215464e-07 3.32981572344702e-10 1.7 7.98398759950121e-07 -2.67194880118822e-10 1.75 7.99299095730916e-07 -1.00319438436289e-09 1.8 8.00357138276132e-07 -1.89728941088866e-09 1.85 8.01597082246289e-07 -2.97361927841622e-09 1.9 8.0304510055683e-07 -4.25831443491486e-09 1.95 8.04729512690202e-07 -5.77966234400706e-09 2 8.06680966527755e-07 -7.56828692569203e-09 2.05 8.08932617829435e-07 -9.65732594219538e-09 2.1 8.11520306214244e-07 -1.20826052911295e-08 2.15 8.1448273728733e-07 -1.48828198540073e-08 2.2 8.17861685960419e-07 -1.80997358918425e-08 2.25 8.21702237368776e-07 -2.17784313163104e-08 2.3 8.26053081179862e-07 -2.59675895591148e-08 2.35 8.30966874172067e-07 -3.07198618573899e-08 2.4 8.36500685692689e-07 -3.60923125181227e-08 2.45 8.42716541402971e-07 -4.2146962536117e-08 2.5 8.49682082724079e-07 -4.89514489564089e-08 2.55 8.57471362670735e-07 -5.65798206524535e-08 2.6 8.66165803397743e-07 -6.51134958352225e-08 2.65 8.75855346992518e-07 -7.46424128198004e-08 2.7 8.86639839172679e-07 -8.52664137044061e-08 2.75 8.98630696124706e-07 -9.70969111952025e-08 2.8 9.11952918518358e-07 -1.10258902609942e-07 2.85 9.26747534843411e-07 -1.24893413205968e-07 2.9 9.43174580178468e-07 -1.41160474941687e-07 2.95 9.61416748493165e-07 -1.59242778772401e-07 3 9.81683899712479e-07 -1.79350181708959e-07 3.05 1.00421866151938e-06 -2.017253086153e-07 3.1 1.02930344679045e-06 -2.26650569639392e-07 3.15 1.05726932034755e-06 -2.54457026960583e-07 3.2 1.08850730793751e-06 -2.85535703765255e-07 3.25 1.12348296825308e-06 -3.20352156264051e-07 3.3 1.16275537988274e-06 -3.59465460638141e-07 3.35 1.20700218384722e-06 -4.03553255572471e-07 3.4 1.25705305674166e-06 -4.53445215394786e-07 3.45 1.31393511423508e-06 -5.10168453572186e-07 3.5 1.37893550397832e-06 -5.75010115616294e-07 3.54999999999999 1.45368926353545e-06 -6.49605237012096e-07 3.6 1.54030514572849e-06 -7.36062568560106e-07 3.65 1.64154993523661e-06 -8.37148892973347e-07 3.69999999999999 1.76112543369421e-06 -9.56566009973104e-07 3.75 1.90409700248512e-06 -1.09937927908111e-06 3.79999999999999 2.07757915307925e-06 -1.27270320995417e-06 3.84999999999999 2.29187576574551e-06 -1.48684168109521e-06 3.89999999999999 2.56246456437316e-06 -1.75727241467283e-06 3.94999999999999 2.91364162994573e-06 -2.10829148999348e-06 3.99999999999999 3.3856576952149e-06 -2.58014963817382e-06 4.04999999999999 4.04980672690221e-06 -3.24414082434078e-06 4.09999999999999 5.04336251604248e-06 -4.23753883797359e-06 4.14999999999999 6.65900723185428e-06 -5.85302584677278e-06 4.19999999999999 9.59183762149597e-06 -8.78569859641499e-06 4.24999999999999 1.55451417602944e-05 -1.47388451607803e-05 4.29999999999999 2.75320062456684e-05 -2.67255521358745e-05 4.34999999999999 4.70977478401101e-05 -4.62911362828094e-05 4.39999999999999 7.30046807212684e-05 -7.2197911777885e-05 4.44999999999999 0.000104107240684031 -0.000103300314414671 4.49999999999999 0.00014003903496393 -0.00013923195142741 4.54999999999999 0.000180825535964481 -0.000180018295218356 4.59999999999999 0.000226660585223225 -0.00022585318732382 4.64999999999999 0.000277818688402519 -0.00027701113340495 4.69999999999999 0.000334619918945644 -0.000333812206903848 4.74999999999999 0.000397414671524701 -0.000396606802491458 4.79999999999999 0.000466576467660976 -0.000465768441687938 4.84999999999999 0.000542498308708778 -0.000541690125846486 4.89999999999999 0.000625590712205878 -0.000624782372503788 4.94999999999999 0.000716280598904244 -0.000715472102410751 4.99999999999999 0.000815010632451221 -0.000814201979213679 5.04999999999999 0.000922238809982337 -0.000921430000047076 5.09999999999999 0.00103843819608817 -0.00103762922950052 5.14999999999999 0.00116409674029125 -0.00116328761709557 5.19999999999999 0.00129971714344573 -0.00129890786368539 5.24999999999999 0.00144581675243281 -0.00144500731615028 5.29999999999999 0.00160292747052047 -0.00160211787775724 5.34999999999999 0.00177159567548181 -0.00177078592627851 5.39999999999999 0.00195238214044618 -0.00195157223484252 5.44999999999999 0.00214586195425067 -0.0021450518922855 5.49999999999999 0.00235262443921036 -0.00235181422092166 5.54999999999999 0.00257327306497144 -0.00257246269039636 5.59999999999999 0.00280842535761452 -0.00280761482678937 5.64999999999999 0.00305871280350128 -0.00305790211646156 5.69999999999999 0.00332478074760092 -0.00332396990438134 5.74999999999999 0.00360728828618552 -0.00360647728681999 5.79999999999999 0.00390690815388372 -0.00390609699840538 5.84999999999999 0.00422432660519766 -0.00422351529363891 5.89999999999999 0.00456024329058553 -0.00455943182297801 5.94999999999999 0.00491537112731629 -0.0049145595036909 6 0.00529043616527889 -0.00528962438566583 0 -1.46092040173208e-07 1.71064295627729e-07 0.05 4.33017164728483e-06 4.74335994717795e-08 0.1 4.9845029085875e-06 1.91673192940083e-08 0.15 5.08300248326436e-06 1.23676738825932e-08 0.2 5.09854902937226e-06 1.07084670717993e-08 0.25 5.10211379725627e-06 1.02867206669321e-08 0.3 5.1038771515115e-06 1.01724607518132e-08 0.35 5.10533908254334e-06 1.01388513325441e-08 0.4 5.10672492761178e-06 1.01279881916198e-08 0.45 5.10807151504689e-06 1.01240903598718e-08 0.5 5.109387193132e-06 1.0122474881489e-08 0.55 5.11067565090199e-06 1.01215596837418e-08 0.6 5.11193960561839e-06 1.01206296182907e-08 0.65 5.11318149563771e-06 1.01191176822442e-08 0.7 5.11440373074075e-06 1.01162983465135e-08 0.75 5.11560888729256e-06 1.01110910022637e-08 0.8 5.11679990948847e-06 1.01018767413878e-08 0.85 5.11798032647994e-06 1.00862950565808e-08 0.9 5.1191544862271e-06 1.00610377616637e-08 0.95 5.12032780611345e-06 1.00216217629868e-08 1 5.12150704293039e-06 9.9621375422142e-09 1.05 5.12270059052938e-06 9.87496861341789e-09 1.1 5.12391882251152e-06 9.75046537154474e-09 1.15 5.12517450959949e-06 9.5765440433968e-09 1.2 5.12648335538317e-06 9.33816720648434e-09 1.25 5.12786470625559e-06 9.01664987555181e-09 1.3 5.12934249465768e-06 8.58873135317322e-09 1.35 5.13094645916739e-06 8.0253680121239e-09 1.4 5.13271363993805e-06 7.29024662298697e-09 1.45 5.13469006936104e-06 6.33809616072364e-09 1.5 5.13693247848781e-06 5.11297565248784e-09 1.55 5.13950975789457e-06 3.54679861512876e-09 1.6 5.14250390431193e-06 1.5583639216477e-09 1.65 5.14601029575299e-06 -9.46946277343046e-10 1.7 5.15013735375532e-06 -4.07685526445795e-09 1.75 5.15500587898655e-06 -7.95154830484662e-09 1.8 5.16074846012587e-06 -1.2703093429935e-08 1.85 5.16750928860049e-06 -1.84752580538486e-08 1.9 5.17544451138122e-06 -2.54238550972461e-08 1.95 5.1847230448611e-06 -3.37175445985218e-08 2 5.19552765966132e-06 -4.35389038779589e-08 2.05 5.20805615265154e-06 -5.50855851267715e-08 2.1 5.22252250381664e-06 -6.8571459638389e-08 2.15 5.23915801061287e-06 -8.42277419831541e-08 2.2 5.25821246208988e-06 -1.02304156415435e-07 2.25 5.27995544989064e-06 -1.23070242293509e-07 2.3 5.30467792198032e-06 -1.46816903911894e-07 2.35 5.33269408101903e-06 -1.73858306223601e-07 2.4 5.3643437233694e-06 -2.04534212077888e-07 2.45 5.39999511298808e-06 -2.39212854943842e-07 2.5 5.44004848960119e-06 -2.78294446319037e-07 2.55 5.48494032350759e-06 -3.22215430028503e-07 2.6 5.53514845047207e-06 -3.7145361678327e-07 2.65 5.59119825010129e-06 -4.26534362330303e-07 2.7 5.65367007115164e-06 -4.88037992603778e-07 2.75 5.72320815965085e-06 -5.56608731734508e-07 2.8 5.8005314139619e-06 -6.32965457030141e-07 2.85 5.88644637995195e-06 -7.17914694078973e-07 2.9 5.98186301629296e-06 -8.12366381997787e-07 2.95 6.087813914539e-06 -9.17353093464694e-07 3 6.20547786504427e-06 -1.03405360059863e-06 3.05 6.33620893805692e-06 -1.16382195601896e-06 3.1 6.48157262837977e-06 -1.30822363747525e-06 3.15 6.64339113409753e-06 -1.4690808265462e-06 3.2 6.82380056761358e-06 -1.64852961965024e-06 3.25 7.02532392462823e-06 -1.84909299699949e-06 3.3 7.25096510717395e-06 -2.07377484561226e-06 3.35 7.50433143300516e-06 -2.32618246868159e-06 3.4 7.78979521732201e-06 -2.61068816727902e-06 3.45 8.11270975110472e-06 -2.93264521867018e-06 3.5 8.47970225741823e-06 -3.29868083260164e-06 3.54999999999999 8.8990777585215e-06 -3.71710001839353e-06 3.6 9.38138595984268e-06 -4.19845246889891e-06 3.65 9.94023311006238e-06 -4.75634442057212e-06 3.69999999999999 1.05934712626177e-05 -5.40862791495864e-06 3.75 1.13649854592552e-05 -6.17918798223472e-06 3.79999999999999 1.22874588041554e-05 -7.10070771531914e-06 3.84999999999999 1.3406796076367e-05 -8.2190918822954e-06 3.89999999999999 1.47894807223069e-05 -9.60082391890048e-06 3.94999999999999 1.65353792034856e-05 -1.13457702762391e-05 3.99999999999999 1.88012563263523e-05 -1.36106957506189e-05 4.04999999999999 2.18468203862958e-05 -1.66553086275408e-05 4.09999999999999 2.61320783067189e-05 -2.09396158207654e-05 4.14999999999999 3.25427544144192e-05 -2.73493416476834e-05 4.19999999999999 4.29673018303099e-05 -3.77729392200288e-05 4.24999999999999 6.18906277190879e-05 -5.6695315693539e-05 4.29999999999999 0.000100302606314961 -9.51063452936742e-05 4.34999999999999 0.000177643705180294 -0.000172446495574254 4.39999999999999 0.000303883067598989 -0.000298684909810837 4.44999999999999 0.00047103312166147 -0.00046583401608569 4.49999999999999 0.000671701081610429 -0.000666501028633536 4.54999999999999 0.000903521704681646 -0.00089832070468236 4.59999999999999 0.00116665812476993 -0.00116145617811935 4.64999999999999 0.00146235974541347 -0.00145715685247525 4.69999999999999 0.00179239632496696 -0.00178719248609744 4.74999999999999 0.00215883151556998 -0.00215362673111839 4.79999999999999 0.00256392448087692 -0.0025587187511855 4.84999999999999 0.00301008346944529 -0.00300487679484943 4.89999999999999 0.00349984227699636 -0.00349463465782475 4.94999999999999 0.00403584757034509 -0.00403063900691988 4.99999999999999 0.00462085170020541 -0.00461564219284232 5.04999999999999 0.00525770843464651 -0.00525249798365495 5.09999999999999 0.00594937031151652 -0.00594415891719976 5.14999999999999 0.00669888691596841 -0.00669367457862364 5.19999999999999 0.00750940369683155 -0.00750419041675006 5.24999999999999 0.0083841610986657 -0.00837894687613295 5.29999999999999 0.00932649387641115 -0.00932127871170691 5.34999999999999 0.0103398305111331 -0.0103346144045315 5.39999999999999 0.011427692675869 -0.0114224756276388 5.44999999999999 0.0125936947191334 -0.0125884767295378 5.49999999999999 0.0138415431452499 -0.0138363242145469 5.54999999999999 0.01517503607807 -0.0151698162065126 5.59999999999999 0.0165980626994699 -0.0165928418873056 5.64999999999999 0.0181146026572524 -0.018109380904724 5.69999999999999 0.0197287254391908 -0.0197235027465361 5.74999999999999 0.0214445897115157 -0.0214393660789678 5.79999999999999 0.0232664426211335 -0.0232612180489205 5.84999999999999 0.025198619061511 -0.0251933935498566 5.89999999999999 0.0272455409029069 -0.0272403144520299 5.94999999999999 0.0294117161876038 -0.0294064887977189 6 0.0317017382915324 -0.0316965099628497 0 -7.84663581577333e-07 9.28415745768918e-07 0.05 2.74128229314159e-05 2.5975277117929e-07 0.1 3.15317198979441e-05 1.01893840214553e-07 0.15 3.2142232027686e-05 6.27165529486774e-08 0.2 3.22401181147158e-05 5.29199964974561e-08 0.25 3.22625422818033e-05 5.03777286513607e-08 0.3 3.22735169422264e-05 4.96770357938379e-08 0.35 3.22824966852485e-05 4.9468247153863e-08 0.4 3.22909226980839e-05 4.94002995356028e-08 0.45 3.22990452800215e-05 4.93760512364447e-08 0.5 3.23069303745618e-05 4.93664564822343e-08 0.55 3.23146107182089e-05 4.93619024974869e-08 0.6 3.23221100658587e-05 4.93585117841287e-08 0.65 3.23294481768267e-05 4.93537961759863e-08 0.7 3.23366427316911e-05 4.93448973556246e-08 0.75 3.23437107243066e-05 4.93275278229736e-08 0.8 3.23506697894892e-05 4.92949918182443e-08 0.85 3.23575395763594e-05 4.92370645268594e-08 0.9 3.23643431963916e-05 4.91388358697612e-08 0.95 3.23711087567741e-05 4.89794079605753e-08 1 3.23778709848074e-05 4.8730446450602e-08 1.05 3.23846729635432e-05 4.83545940566516e-08 1.1 3.23915680339269e-05 4.78037004194462e-08 1.15 3.23986219752166e-05 4.70167623196192e-08 1.2 3.24059156524885e-05 4.59173897701836e-08 1.25 3.24135484084995e-05 4.44105232137597e-08 1.3 3.2421642553694e-05 4.23780480556857e-08 1.35 3.24303493290139e-05 3.96729286613888e-08 1.4 3.24398566177703e-05 3.61115786097179e-08 1.45 3.24503983982977e-05 3.14644650132967e-08 1.5 3.24622654320915e-05 2.54454398589202e-08 1.55 3.24758160539539e-05 1.77009210941141e-08 1.6 3.24914854127198e-05 7.80057064171771e-09 1.65 3.2509791463757e-05 -4.76882499415882e-09 1.7 3.25313367177641e-05 -2.06052565373304e-08 1.75 3.25568061143583e-05 -4.03895161162461e-08 1.8 3.2586962827781e-05 -6.48811219520399e-08 1.85 3.26226445310854e-05 -9.49146495809226e-08 1.9 3.26647622205425e-05 -1.3139856565425e-07 1.95 3.27143024364336e-05 -1.75317408952717e-07 2 3.27723323948642e-05 -2.27736850294207e-07 2.05 3.28400068300601e-05 -2.89810449372768e-07 2.1 3.29185753871619e-05 -3.62786963445391e-07 2.15 3.30093899193089e-05 -4.48017570787523e-07 2.2 3.31139116429009e-05 -5.46962966589403e-07 2.25 3.32337185446891e-05 -6.61200724999869e-07 2.3 3.33705136542671e-05 -7.92433538959033e-07 2.35 3.35261348506e-05 -9.42499003844762e-07 2.4 3.37025668462649e-05 -1.11338158607007e-06 2.45 3.39019559555765e-05 -1.30722738068972e-06 2.5 3.41266282417204e-05 -1.52636225152393e-06 2.55 3.43791116705233e-05 -1.77331398026441e-06 2.6 3.46621629802279e-05 -2.05083913312707e-06 2.65 3.49788001100178e-05 -2.36195548725613e-06 2.7 3.53323412190684e-05 -2.70998104830228e-06 2.75 3.57264515808861e-05 -3.098580943707e-06 2.8 3.61651999688397e-05 -3.5318238074508e-06 2.85 3.66531265798013e-05 -4.01424970309022e-06 2.9 3.71953251051108e-05 -4.55095219423656e-06 2.95 3.77975422961209e-05 -5.14767790969801e-06 3 3.84662993480608e-05 -5.81094792699794e-06 3.05 3.9209040729574e-05 -6.54820660161018e-06 3.1 4.00343178426745e-05 -7.36800522664532e-06 3.15 4.09520172917468e-05 -8.28023030160608e-06 3.2 4.19736468375233e-05 -9.29638948614206e-06 3.25 4.31126967079396e-05 -1.04299729106999e-05 3.3 4.4385100426101e-05 -1.16969140043005e-05 3.35 4.58098286022272e-05 -1.31161832863073e-05 3.4 4.74096626271929e-05 -1.47105620598042e-05 3.45 4.9212215121907e-05 -1.65076628608218e-05 3.5 5.1251293920788e-05 -1.85412934416704e-05 3.54999999999999 5.35687521986182e-05 -2.0853306897661e-05 3.6 5.62170390385768e-05 -2.34961522350136e-05 3.65 5.9262779509453e-05 -2.65364544479534e-05 3.69999999999999 6.27919018531116e-05 -3.00601417060659e-05 3.75 6.69171480936312e-05 -3.41799559633324e-05 3.79999999999999 7.1789360731008e-05 -3.90467396517365e-05 3.84999999999999 7.76149451485497e-05 -4.48668980885657e-05 3.89999999999999 8.46838062502995e-05 -5.19303361137503e-05 3.94999999999999 9.34158103699686e-05 -6.06569199987137e-05 3.99999999999999 0.000104441649006905 -7.16773411822639e-05 4.04999999999999 0.000118751345826898 -8.59816232713283e-05 4.09999999999999 0.000137985046386519 -0.00010520991176522 4.14999999999999 0.000165047845582873 -0.00013226730150533 4.19999999999999 0.000205533372080633 -0.0001727474211021 4.24999999999999 0.000271367765031125 -0.000238576409654042 4.29999999999999 0.000390874379508556 -0.00035807762218392 4.34999999999999 0.000633456331613262 -0.000600654174741941 4.39999999999999 0.00112188007055689 -0.00108907251649089 4.44999999999999 0.00191908963294132 -0.00188627668398499 4.49999999999999 0.00297462589137995 -0.00294180754979117 4.54999999999999 0.00424178946141603 -0.00420896572940734 4.59999999999999 0.00570563269047162 -0.00567280357021129 4.64999999999999 0.00736717513172507 -0.00733434062533818 4.69999999999999 0.00923429569558919 -0.00920145580515861 4.74999999999999 0.0113181585396385 -0.0112853132672058 4.79999999999999 0.0136317828019572 -0.013598932149524 4.84999999999999 0.0161894212188467 -0.0161565651883749 4.89999999999999 0.0190062668682555 -0.0189734054616686 4.94999999999999 0.0220983044673165 -0.0220654376865004 4.99999999999999 0.0254822302663116 -0.0254493581131154 5.04999999999999 0.0291754066073448 -0.0291425290835817 5.09999999999999 0.0331958349282331 -0.0331629520356809 5.14999999999999 0.0375621389909347 -0.0375292507313368 5.19999999999999 0.0422935539524937 -0.0422606603275597 5.24999999999999 0.0474099188391684 -0.0473770198505748 5.29999999999999 0.0529316710144157 -0.0528987666638067 5.34999999999999 0.0588798418002832 -0.0588469320892712 5.39999999999999 0.0652760527375325 -0.0652431376676988 5.44999999999999 0.0721425121625087 -0.0721095917354041 5.49999999999999 0.0795020118958828 -0.0794690861130284 5.54999999999999 0.0873779239117667 -0.087344992774654 5.59999999999999 0.0957941969023486 -0.0957612604124407 5.64999999999999 0.104775352683713 -0.104742410842444 5.69999999999999 0.114346482408962 -0.11431353521774 5.74999999999999 0.124533242568045 -0.124500290028249 5.79999999999999 0.135361850763605 -0.13532889287659 5.84999999999999 0.146859081258382 -0.146826118025474 5.89999999999999 0.159052260293775 -0.159019291716275 5.94999999999999 0.171969261183891 -0.171936287263076 6 0.185638499189291 -0.185605519926413 0 -4.2144574463429e-06 5.09879601067358e-06 0.05 0.000170626665744129 1.47743940818622e-06 0.1 0.000196234582425224 5.88963092884612e-07 0.15 0.000200064117878401 3.60139627060059e-07 0.2 0.000200697670039086 3.01266743152655e-07 0.25 0.000200853396186575 2.85633094284686e-07 0.3 0.000200932125314172 2.81243565082732e-07 0.35 0.000200994566988601 2.7991698719771e-07 0.4 0.000201050858606546 2.79481131266672e-07 0.45 0.000201103298759575 2.79324985608228e-07 0.5 0.0002011527898633 2.79263908151017e-07 0.55 0.000201199876487029 2.79237166580204e-07 0.6 0.0002012449501273 2.79221978554933e-07 0.65 0.000201288311463165 2.79206555978695e-07 0.7 0.00020133020109614 2.79179825437343e-07 0.75 0.000201370819872755 2.79125820198588e-07 0.8 0.00020141034453921 2.7901868823979e-07 0.85 0.000201448941085061 2.78816800188586e-07 0.9 0.000201486776853118 2.78456581902992e-07 0.95 0.000201524032138489 2.77845319779072e-07 1 0.000201560911637983 2.76852974669325e-07 1.05 0.0002015976559748 2.75303186075842e-07 1.1 0.000201634553562835 2.72963418554498e-07 1.15 0.000201671953249124 2.69533957514307e-07 1.2 0.000201710278495842 2.64635098883197e-07 1.25 0.000201750044323654 2.57791387041809e-07 1.3 0.000201791878776266 2.48411192219247e-07 1.35 0.000201836551133982 2.35759426483045e-07 1.4 0.000201885009228874 2.18921047627045e-07 1.45 0.000201938427598634 1.96753589964286e-07 1.5 0.000201998266443389 1.6782871069322e-07 1.55 0.000202066338254622 1.30365822582449e-07 1.6 0.000202144875073012 8.21648030111738e-08 1.65 0.000202236586104036 2.05480321436271e-08 1.7 0.000202344695119238 -5.76776253843554e-08 1.75 0.000202472951441785 -1.5623258207105e-07 1.8 0.000202625616798801 -2.7935215361724e-07 1.85 0.000202807439276187 -4.3176112087657e-07 1.9 0.000203023630089317 -6.18650826442092e-07 1.95 0.000203279856246176 -8.45671849599149e-07 2 0.000203582254309869 -1.11894751275719e-06 2.05 0.000203937462248001 -1.44510530086583e-06 2.1 0.000204352661907662 -1.831318835203e-06 2.15 0.000204835624906342 -2.28535327410259e-06 2.2 0.000205394757923682 -2.81561017581183e-06 2.25 0.000206039147110256 -3.43117156022479e-06 2.3 0.000206778604063242 -4.14184561929767e-06 2.35 0.00020762371718523 -4.958217881333e-06 2.4 0.000208585912583627 -5.89171197179615e-06 2.45 0.000209677528511865 -6.95466395753528e-06 2.5 0.000210911907119622 -8.16041402968539e-06 2.55 0.000212303507210005 -9.52341921404521e-06 2.6 0.000213868041903253 -1.10593910019014e-05 2.65 0.000215622645614357 -1.27854623041118e-05 2.7 0.000217586075580842 -1.47203889615782e-05 2.75 0.000219778954351693 -1.6884792221071e-05 2.8 0.000222224061220703 -1.93014501583017e-05 2.85 0.000224946682645423 -2.19956480885805e-05 2.9 0.000227975034371538 -2.49956006842846e-05 2.95 0.000231340771476885 -2.83329620129946e-05 3 0.000235079607135964 -3.2043444296895e-05 3.05 0.000239232066974111 -3.61675722624428e-05 3.1 0.000243844413981823 -4.07516080506768e-05 3.15 0.000248969789880955 -4.58486925797937e-05 3.2 0.000254669633711129 -5.15202641282993e-05 3.25 0.000261015458895707 -5.78378353979991e-05 3.3 0.00026809109860794 -6.48852388774386e-05 3.35 0.000275995569579266 -7.27614906477209e-05 3.4 0.000284846762202825 -8.15844804837432e-05 3.45 0.00029478624862251 -9.14957799411559e-05 3.5 0.00030598562426816 -0.000102666983889626 3.54999999999999 0.000318654984257814 -0.000115308186913325 3.6 0.00033305442090096 -0.000129679480812526 3.65 0.000349509874038509 -0.000146106804942073 3.69999999999999 0.000368435379184016 -0.000165004194351195 3.75 0.000390364930050899 -0.000186905642309426 3.79999999999999 0.000415999152643194 -0.000212511774396156 3.84999999999999 0.000446275445473227 -0.000242759988717186 3.89999999999999 0.000482476498145462 -0.000278932974487534 3.94999999999999 0.000526403900947323 -0.000322832321621292 3.99999999999999 0.000580666877659994 -0.000377067253541525 4.04999999999999 0.000649184804337741 -0.000445557145958754 4.09999999999999 0.000738110088128928 -0.000534454405691191 4.14999999999999 0.000857635240918181 -0.000653951544306168 4.19999999999999 0.00102581363049023 -0.000822101929283303 4.24999999999999 0.00127740609049695 -0.00107366639398089 4.29999999999999 0.00168652560721975 -0.00148275792439773 4.34999999999999 0.00242918142138371 -0.00222538576098664 4.39999999999999 0.00393665638714682 -0.00373283275764322 4.44999999999999 0.00697180703687557 -0.00676795544648095 4.49999999999999 0.0119256565711943 -0.01172177702788 4.54999999999999 0.0184844921677796 -0.0182805846792815 4.59999999999999 0.0263579983038356 -0.0261540628776617 4.64999999999999 0.0354531877456354 -0.035249224389074 4.69999999999999 0.0457762966710736 -0.0455723053912004 4.74999999999999 0.0573761806313299 -0.057172161435015 4.79999999999999 0.0703221020675766 -0.0701180549614909 4.84999999999999 0.0846948412527146 -0.0844907662433368 4.89999999999999 0.100582834184052 -0.100378731277674 4.94999999999999 0.11808034965679 -0.117876218859523 4.99999999999999 0.137286564684292 -0.137082406002072 5.04999999999999 0.158305066216906 -0.158100879655499 5.09999999999999 0.181243568287531 -0.18103935385254 5.14999999999999 0.2062137437869 -0.206009501483764 5.19999999999999 0.233331119780981 -0.233126849614988 5.24999999999999 0.262715009138626 -0.26251071111491 5.29999999999999 0.294488463310505 -0.294284137434056 5.34999999999999 0.328778237501475 -0.328573883777138 5.39999999999999 0.365714763013767 -0.36551038144625 5.44999999999999 0.405432123562939 -0.405227714156816 5.49999999999999 0.448068033566002 -0.447863596325714 5.54999999999999 0.493763817128889 -0.49355935205875 5.59999999999999 0.542664386916405 -0.542459894020606 5.64999999999999 0.594918222377694 -0.594713701660304 5.69999999999999 0.650677346989843 -0.650472798454812 5.74999999999999 0.710097304309361 -0.709892727960526 5.79999999999999 0.773337132703836 -0.77313252854492 5.84999999999999 0.840559338697591 -0.84035470673221 5.89999999999999 0.911929868903821 -0.911725209135483 5.94999999999999 0.987618080541039 -0.987413392973146 6 1.06779671056087 -1.06759199519672 0 -2.263602151878e-05 2.87001786805825e-05 0.05 0.00102911807635036 8.96485772851061e-06 0.1 0.00118793813541142 3.73813286866753e-06 0.15 0.00121355559688571 2.2761676573277e-06 0.2 0.0012187834575111 1.87549827500142e-06 0.25 0.00122059153293371 1.7638629050206e-06 0.3 0.00122164628395807 1.73135449139882e-06 0.35 0.00122242807920945 1.72126367965313e-06 0.4 0.00122305735845082 1.71788682625784e-06 0.45 0.0012235823872668 1.71666333094863e-06 0.5 0.00122403029776441 1.71618335643068e-06 0.55 0.00122441888893089 1.71597874853472e-06 0.6 0.00122476066650171 1.71587969942072e-06 0.65 0.00122506476978519 1.71581293252216e-06 0.7 0.00122533807455136 1.7157294770107e-06 0.75 0.00122558588543063 1.71557143581271e-06 0.8 0.00122581239859414 1.71524630440727e-06 0.85 0.00122602102978936 1.71459655944596e-06 0.9 0.00122621465474452 1.71336899461544e-06 0.95 0.00122639579625577 1.71117725941898e-06 1 0.00122656677733634 1.70745751079458e-06 1.05 0.0012267298516684 1.7014187106154e-06 1.1 0.00122688731914374 1.69198803984847e-06 1.15 0.001227041632435 1.67775107697217e-06 1.2 0.00122719550023807 1.65688497924211e-06 1.25 0.00122735199389557 1.62708069440834e-06 1.3 0.00122751466631086 1.58544724424064e-06 1.35 0.00122768769492477 1.52838769525941e-06 1.4 0.00122787606309015 1.45143344318035e-06 1.45 0.0012280857947419 1.34902253357256e-06 1.5 0.00122832425337872 1.2142113367863e-06 1.55 0.00122860050549511 1.03831954391074e-06 1.6 0.00122892572970832 8.10527195777206e-07 1.65 0.00122931362897746 5.17466280992221e-07 1.7 0.00122978078363049 1.428692540111e-07 1.75 0.00123034688103185 -3.32661015161083e-07 1.8 0.00123103478424606 -9.31721539558531e-07 1.85 0.00123187045358749 -1.68003274419747e-06 1.9 0.00123288278934824 -2.60628261058474e-06 1.95 0.0012341034912071 -3.74198630185751e-06 2 0.0012355670138044 -5.12144054567971e-06 2.05 0.00123731065015525 -6.78180465344819e-06 2.1 0.00123937472464109 -8.7632903727333e-06 2.15 0.00124180285029959 -1.11094157982207e-05 2.2 0.00124464220666598 -1.38672799981795e-05 2.25 0.00124794381382295 -1.70878342557143e-05 2.3 0.00125176280096973 -2.08261483274305e-05 2.35 0.0012561586844074 -2.5141686604948e-05 2.4 0.00126119567811663 -3.00986172889066e-05 2.45 0.00126694306215711 -3.57661797208371e-05 2.5 0.00127347563315302 -4.22191340567377e-05 2.55 0.00128087425969399 -4.9538316045042e-05 2.6 0.0012892265650488 -5.78113192541735e-05 2.65 0.00129862776080119 -6.71333283213783e-05 2.7 0.00130918165808829 -7.760812987612e-05 2.75 0.00132100188813909 -8.93493328166653e-05 2.8 0.00133421337092421 -0.000102481836738021 2.85 0.00134895408024984 -0.000117143596834818 2.9 0.00136537716609156 -0.000133487746068718 2.95 0.00138365351118613 -0.000151685151613477 3 0.00140397482006092 -0.00017192750375422 3.05 0.00142655736645704 -0.000194431063194372 3.1 0.00145164656185092 -0.000219441229472955 3.15 0.00147952255683872 -0.000247238142255117 3.2 0.00151050715328398 -0.000278143593395044 3.25 0.00154497239521767 -0.00031252961775927 3.3 0.00158335133056637 -0.00035082925488535 3.35 0.00162615160874257 -0.000393550146508916 3.4 0.00167397282330286 -0.000441291879164402 3.45 0.00172752885835816 -0.000494768330542882 3.5 0.0017876770051081 -0.00055483678597873 3.54999999999999 0.00185545636437894 -0.000622536340943859 3.6 0.00193213917714959 -0.000699139231533856 3.65 0.00201930044976772 -0.000786220459647641 3.69999999999999 0.00211891393834112 -0.000885753777345336 3.75 0.00223348687581308 -0.00100024641389301 3.79999999999999 0.00236625292007543 -0.00113293202384755 3.84999999999999 0.00252145479509299 -0.0012880533281553 3.89999999999999 0.00270476903341041 -0.00147128685663509 3.94999999999999 0.0029239631220223 -0.00169040009382651 3.99999999999999 0.00318994681116945 -0.001956302787766 4.04999999999999 0.00351852055724786 -0.00228479539287729 4.09999999999999 0.00393341855175124 -0.00269961209889682 4.14999999999999 0.00447189723807254 -0.00323800934765942 4.19999999999999 0.00519567803122696 -0.00396170855280675 4.24999999999999 0.00621408366885869 -0.00498003245078059 4.29999999999999 0.00773760779002605 -0.00650347467959545 4.34999999999999 0.010215034728869 -0.00898081957249456 4.39999999999999 0.0147121490555449 -0.0134778516988749 4.44999999999999 0.0238403710594109 -0.0226059913474599 4.49999999999999 0.042218254637668 -0.0409837924149338 4.54999999999999 0.0722115568225129 -0.0709770119330859 4.59999999999999 0.111918402786679 -0.110683775074343 4.64999999999999 0.159579115527036 -0.15834440483536 4.69999999999999 0.2146291191457 -0.213394325318129 4.74999999999999 0.277104647004739 -0.275869769884669 4.79999999999999 0.347299906219537 -0.346064945650395 4.84999999999999 0.42563254480843 -0.424397500633739 4.89999999999999 0.51258981118041 -0.511354683243856 4.94999999999999 0.608705158162144 -0.607469946307633 4.99999999999999 0.714547196652827 -0.713311900724539 5.04999999999999 0.830714089772357 -0.829478709614799 5.09999999999999 0.957830528716033 -0.956595064174087 5.14999999999999 1.09654601326276 -1.09531046418173 5.19999999999999 1.24753382651145 -1.24629819273708 5.24999999999999 1.4114903944649 -1.41025467584344 5.29999999999999 1.58913486555171 -1.58789906192992 5.34999999999999 1.78120881829082 -1.77997292951605 5.39999999999999 1.98847604406765 -1.98724006998782 5.44999999999999 2.21172237340027 -2.2104863138639 5.49999999999999 2.45175552633416 -2.45051938119044 5.54999999999999 2.70940497485581 -2.70816874395455 5.59999999999999 2.98552180962197 -2.9842854928137 5.64999999999999 3.28097860606302 -3.27974220319894 5.69999999999999 3.59666928667338 -3.59543279760541 5.74999999999999 3.93350897745044 -3.93227240203123 5.79999999999999 4.29243385721253 -4.29119719529549 5.84999999999999 4.67440099902631 -4.67316425046559 5.89999999999999 5.08038820334622 -5.07915136799674 5.94999999999999 5.51139382270234 -5.51015690041981 6 5.96843657792799 -5.9671995685689 0 -0.000121579001631253 0.000175699566718307 0.05 0.00512048828445649 6.87103916454699e-05 0.1 0.00614640795328926 3.31199658293353e-05 0.15 0.00637965397779079 1.87774513583673e-05 0.2 0.00645525811356093 1.35701579008876e-05 0.25 0.00649111820249085 1.1831312388727e-05 0.3 0.00651285591538066 1.12617912904747e-05 0.35 0.00652777213870572 1.1070781111912e-05 0.4 0.00653867107693479 1.10035374922169e-05 0.45 0.00654691884786323 1.09783645891983e-05 0.5 0.00655329414207507 1.09682858747074e-05 0.55 0.00655828700527785 1.09639615764455e-05 0.6 0.00656222658560022 1.09619659291857e-05 0.65 0.00656534441137742 1.09609474732691e-05 0.7 0.00656780933579167 1.09602973481879e-05 0.75 0.00656974764057448 1.09596659281748e-05 0.8 0.00657125444265287 1.09587263185317e-05 0.85 0.00657240411049605 1.0956940551898e-05 0.9 0.00657325641174796 1.09534356589017e-05 0.95 0.00657386000000822 1.09468432599932e-05 1 0.00657425526846821 1.09350883578279e-05 1.05 0.00657447659865434 1.09151483893824e-05 1.1 0.00657455412833736 1.08827862184791e-05 1.15 0.00657451517386731 1.0832258107319e-05 1.2 0.00657438541111285 1.07559943475207e-05 1.25 0.00657418989677024 1.06442429712736e-05 1.3 0.00657395400244592 1.04846552380601e-05 1.35 0.00657370433524551 1.02617756745304e-05 1.4 0.00657346972669794 9.95638117740836e-06 1.45 0.00657328238051524 9.5445977859633e-06 1.5 0.00657317926913597 8.99671901412537e-06 1.55 0.00657320384570337 8.27566900579465e-06 1.6 0.0065734080781214 7.33511085506461e-06 1.65 0.00657385470947065 6.11730071894485e-06 1.7 0.00657461952057399 4.5509156107434e-06 1.75 0.00657579326454377 2.54918834246658e-06 1.8 0.00657748293249853 8.6940731947655e-09 1.85 0.00657981215090852 -3.19100766717969e-06 1.9 0.00658292078599345 -7.18694613095416e-06 1.95 0.00658696412085005 -1.21318889061535e-05 2 0.00659211211597497 -1.81935752901934e-05 2.05 0.00659854917800957 -2.55544567989562e-05 2.1 0.00660647460609641 -3.44121143164768e-05 2.15 0.00661610361870539 -4.49802558693448e-05 2.2 0.0066276687197244 -5.74900552046984e-05 2.25 0.00664142117094342 -7.21915993892396e-05 2.3 0.00665763244163178 -8.93553166944371e-05 2.35 0.00667659562664787 -0.000109273376282301 2.4 0.00669862691276719 -0.0001322611391213 2.45 0.00672406721679234 -0.000158658783278133 2.5 0.0067532841296889 -0.00018883323737661 2.55 0.00678667429560646 -0.000223180550667346 2.6 0.00682466634679163 -0.000262128820367068 2.65 0.00686772451290756 -0.000306141794504669 2.7 0.00691635302955221 -0.000355723274852199 2.75 0.0069711014869275 -0.000411422460728811 2.8 0.0070325712861023 -0.00047384040099577 2.85 0.00710142340791431 -0.00054363775919077 2.9 0.00717838774990088 -0.000621544147116222 2.95 0.00726427435255533 -0.00070836934811786 3 0.00735998692198592 -0.000805016837082194 3.05 0.00746653916795707 -0.000912500116092118 3.1 0.00758507462316251 -0.00103196253155675 3.15 0.00771689080388888 -0.0011647014329456 3.2 0.00786346883162595 -0.00131219779265877 3.25 0.0080265099848603 -0.00147615275624889 3.3 0.00820798112660892 -0.00165853306853307 3.35 0.00841017160931861 -0.00186162797720458 3.4 0.00863576517321157 -0.00208812113001055 3.45 0.00888793164512425 -0.00234118227253058 3.5 0.00917044509261078 -0.00262458540131635 3.54999999999999 0.00948783777209428 -0.00294286271128483 3.6 0.00984560317373261 -0.00330150763931161 3.65 0.0102504674158535 -0.00370724625864595 3.69999999999999 0.0107107573663306 -0.00416840539915191 3.75 0.0112369081255658 -0.00469542012980108 3.79999999999999 0.011842175343799 -0.00530154607542727 3.84999999999999 0.0125436553543678 -0.00600387954947912 3.89999999999999 0.0133637795139871 -0.00682485189383511 3.94999999999999 0.014332559829436 -0.00779447510506454 3.99999999999999 0.0154910632877475 -0.00895381616422692 4.04999999999999 0.0168969700890849 -0.0103605552693908 4.09999999999999 0.0186338175318235 -0.0120982297203863 4.14999999999999 0.0208270881256104 -0.0142923220315634 4.19999999999999 0.023673755036689 -0.0171398053768384 4.24999999999999 0.0275001333379076 -0.0209669948394479 4.29999999999999 0.0328841932736472 -0.0263518606766413 4.34999999999999 0.0409387544388984 -0.0344072224985419 4.39999999999999 0.0540363327597021 -0.0475055962483885 4.44999999999999 0.077810916594187 -0.071280970303389 4.49999999999999 0.12606545833987 -0.119536297081852 4.54999999999999 0.223204187516805 -0.216675806126181 4.59999999999999 0.381705151545116 -0.37517754488026 4.64999999999999 0.591483111218903 -0.584956274163232 4.69999999999999 0.843211868220041 -0.83668579568317 4.74999999999999 1.13388599316487 -1.12736068008366 4.79999999999999 1.46367590380658 -1.45715134514607 4.84999999999999 1.83411440641548 -1.82759059716975 4.89999999999999 2.24738510710443 -2.24086204229733 4.94999999999999 2.7060375967616 -2.69951527144742 4.99999999999999 3.21286364278191 -3.20634205204604 5.04999999999999 3.77083868966773 -3.76431782862708 5.09999999999999 4.38309213020305 -4.3765719940066 5.14999999999999 5.05289122931078 -5.04637181313994 5.19999999999999 5.78363194746229 -5.77711324653126 5.24999999999999 6.57883343578009 -6.57231544533614 5.29999999999999 7.44213456693155 -7.43561728225527 5.34999999999999 8.37729162987837 -8.37077504628389 5.39999999999999 9.38817670316779 -9.38166081600293 5.44999999999999 10.4787764264307 -10.4722612310771 5.49999999999999 11.6531910029582 -11.6466764948314 5.54999999999999 12.9156333310528 -12.9091195056022 5.59999999999999 14.2704282001904 -14.2639150528996 5.64999999999999 15.7220115113292 -15.7154990377157 5.69999999999999 17.2749294952943 -17.2684176909095 5.74999999999999 18.9338379124443 -18.9273267728737 5.79999999999999 20.7035012228927 -20.6969907437555 5.84999999999999 22.588791720619 -22.5822818975682 5.89999999999999 24.5946886274431 -24.5881794561655 5.94999999999999 26.7262771448029 -26.7197686210188 6 28.9887474625029 -28.9822395819659 0 -0.000653005827965899 0.000908465051650094 0.05 0.0119525966284137 0.000425773318643532 0.1 0.0175740326450616 0.000360766210849536 0.15 0.0208662262474148 0.000327810302127417 0.2 0.0231323162231824 0.000279093551334192 0.25 0.0245817986399266 0.00021458732266654 0.3 0.0254201378112306 0.000154778564811026 0.35 0.025903936195729 0.000114532578493745 0.4 0.0261952063377517 9.25207471562831e-05 0.45 0.0263774991540897 8.16461090431808e-05 0.5 0.026497134278248 7.64437274534041e-05 0.55 0.0265794861901082 7.39329263190298e-05 0.6 0.02663846506238 7.26816294230433e-05 0.65 0.0266820917022657 7.20259602174131e-05 0.7 0.0267156298349666 7.16529822257158e-05 0.75 0.0267425159974618 7.14253758680678e-05 0.8 0.0267634440691347 7.12996787452943e-05 0.85 0.0267789492954003 7.12349670865877e-05 0.9 0.0267900153753093 7.11981184985814e-05 0.95 0.0267975169279719 7.11692844063283e-05 1 0.0268021403408562 7.11350644715921e-05 1.05 0.0268044198914756 7.10832970172742e-05 1.1 0.0268047781185679 7.09998984702864e-05 1.15 0.0268035567671817 7.08667519812249e-05 1.2 0.0268010393596286 7.06600434511489e-05 1.25 0.0267974678002102 7.03487418935195e-05 1.3 0.0267930549258027 6.98930491846896e-05 1.35 0.0267879943745531 6.92426700075767e-05 1.4 0.026782468787476 6.83347217022906e-05 1.45 0.0267766571520351 6.70910449980985e-05 1.5 0.0267707419776619 6.54146193775188e-05 1.55 0.0267649168902682 6.3184771523515e-05 1.6 0.0267593950714463 6.02509463933513e-05 1.65 0.0267544186791589 5.6425044062547e-05 1.7 0.0267502689397711 5.14727340335297e-05 1.75 0.0267472760575079 4.51046759112163e-05 1.8 0.0267458276417105 3.69690030952155e-05 1.85 0.0267463742984642 2.66464681528814e-05 1.9 0.0267494315998255 1.36490740999915e-05 1.95 0.0267555787556121 -2.5781018013795e-06 2 0.0267654554874129 -2.26533654594576e-05 2.05 0.026779759189441 -4.72552093960633e-05 2.1 0.0267992441088846 -7.71211812872821e-05 2.15 0.0268247232389322 -0.000113049502518005 2.2 0.0268570725346162 -0.000155903042275129 2.25 0.0268972364768702 -0.000206614669765621 2.3 0.0269462340442723 -0.000266193041682646 2.35 0.0270051645720377 -0.000335728301945189 2.4 0.0270752134668423 -0.00041639765946544 2.45 0.0271576581027024 -0.000509471166224271 2.5 0.0272538743995758 -0.000616318194491078 2.55 0.0273653446282137 -0.000738415154162317 2.6 0.0274936669616928 -0.000877354968443822 2.65 0.0276405672611381 -0.00103485879353898 2.7 0.0278079135720588 -0.00121279045724259 2.75 0.0279977338321962 -0.00141317411608792 2.8 0.0282122373562006 -0.00163821569534057 2.85 0.0284538407685481 -0.00189032878240469 2.9 0.0287251992069162 -0.00217216579515799 2.95 0.0290292438202579 -0.00248665544886904 3 0.029369226850322 -0.00283704780994963 3.05 0.0297487759296478 -0.00322696856914807 3.1 0.0301719596781683 -0.00366048461595866 3.15 0.0306433672699866 -0.00414218358550288 3.2 0.0311682054216845 -0.00467727082897257 3.25 0.0317524172945 -0.00527168829974083 3.3 0.0324028292059811 -0.00593226125054462 3.35 0.0331273329581654 -0.00666688054861407 3.4 0.0339351142220847 -0.00748473104839046 3.45 0.0348369410879819 -0.00839658013108623 3.5 0.0358455320710879 -0.0094151457008143 3.54999999999999 0.0369760302774092 -0.0105555703416317 3.6 0.038246621205104 -0.0118360391109828 3.65 0.0396793475584665 -0.0132785943464788 3.69999999999999 0.0413011983426487 -0.014910224754069 3.75 0.0431455860980325 -0.0167643426364522 3.79999999999999 0.0452543833675536 -0.0188828203549722 3.84999999999999 0.0476807811189842 -0.0213188487469512 3.89999999999999 0.0504933823607415 -0.0241410307369835 3.94999999999999 0.0537821986304785 -0.027439377821404 3.99999999999999 0.0576676611884534 -0.031334321257891 4.04999999999999 0.0623145626246179 -0.0359906536691099 4.09999999999999 0.06795436046514 -0.0416398326460854 4.14999999999999 0.0749222699131216 -0.0486170734860334 4.19999999999999 0.083721819565213 -0.057425904906333 4.24999999999999 0.0951434048564955 -0.0688567224869855 4.29999999999999 0.110496416687704 -0.0842189172956165 4.34999999999999 0.132100012722082 -0.10583164718229 4.39999999999999 0.164419370382773 -0.138160089775031 4.44999999999999 0.216973815116089 -0.190723570741373 4.49999999999999 0.312367256635843 -0.286126000031111 4.54999999999999 0.505970275003825 -0.479737957955332 4.59999999999999 0.895644299789788 -0.869420874345056 4.64999999999999 1.5313201126255 -1.50510553110407 4.69999999999999 2.37238655603489 -2.34618077103794 4.74999999999999 3.38131286761676 -3.35511583203571 4.79999999999999 4.5459428975765 -4.51975456460058 4.84999999999999 5.86686160267312 -5.84068192579618 4.89999999999999 7.35011391487879 -7.3239428479052 4.94999999999999 9.00434785608567 -8.97818535313552 4.99999999999999 10.8396709144568 -10.8135169299704 5.04999999999999 12.8671527218397 -12.8410072105814 5.09999999999999 15.0985898778787 -15.0724527949405 5.14999999999999 17.5463862559126 -17.5202575567163 5.19999999999999 20.22348810985 -20.19736775015 5.24999999999999 23.1433468770015 -23.1172348128864 5.29999999999999 26.3198967216842 -26.2937929095782 5.34999999999999 29.7675402541451 -29.7414446508089 5.39999999999999 33.5011389256276 -33.4750514881595 5.44999999999999 37.5360061521521 -37.5099268379878 5.49999999999999 41.8879020422522 -41.861830809165 5.54999999999999 46.5730290582438 -46.5469658643446 5.59999999999999 51.6080282007798 -51.5819730045162 5.64999999999999 57.0099754602117 -56.9839282203677 5.69999999999999 62.7963783719351 -62.77033904763 5.74999999999999 68.9851725712371 -68.9591411219243 5.79999999999999 75.5947182805326 -75.5686946659984 5.84999999999999 82.6437966861687 -82.6177808665308 5.89999999999999 90.1516061781039 -90.1255981138099 5.94999999999999 98.1377584367008 -98.1117580885263 6 106.622274358302 -106.596281687349 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_vert_nqs_dc.standard0000644000175000017500000001007314163340332026621 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000201152789864218 2.79263907233001e-07 0.76 0.000289619060681081 3.99599852581059e-07 0.77 0.000416595196314233 5.73384397012998e-07 0.78 0.00059831180490399 8.24719215214542e-07 0.79 0.000857252357406906 1.18865480385448e-06 0.8 0.00122403029776552 1.71618335532028e-06 0.81 0.00173942025564027 2.48151520763053e-06 0.82 0.00245629014447223 3.59268963043772e-06 0.83 0.00344111627840722 5.20706627005835e-06 0.84 0.00477486005843305 7.55400334948315e-06 0.85 0.006553294142076 1.09682858738174e-05 0.86 0.00888723273832743 1.59403715244414e-05 0.87 0.011903107956764 2.31966177976826e-05 0.88 0.0157432400134272 3.38534759225134e-05 0.89 0.0205614682734236 4.98762585393171e-05 0.9 0.0264971342782484 7.64437274530331e-05 0.91 0.0335526769756589 0.000137450156124135 0.92 0.0411470273796635 0.000333430548626019 0.93 0.048168469951203 0.000762411879252562 0.94 0.0546832964050568 0.00133545386978461 0.95 0.0612610929503956 0.00199500820822076 0.96 0.0682647619996404 0.00275225877349027 0.97 0.0759138212112438 0.00364449779743618 0.98 0.0843437920484314 0.00472432540602886 0.99 0.0936257089996614 0.00606212641268967 1 0.103775435568034 0.00775447113408898 1.01 0.114767106122293 0.00993805794330853 1.02 0.126553458348577 0.0128106226992321 1.03 0.139087865349673 0.0166610771949609 1.04 0.152341031401667 0.0219124312047409 1.05 0.166309023209055 0.0291832240794478 0.75 0.000201560917504609 2.76847108042968e-07 0.76 0.000290200598784479 3.96460122470866e-07 0.77 0.000417426866346525 5.69313278556165e-07 0.78 0.000599507580249457 8.19452198003955e-07 0.79 0.000858984846839816 1.18185807586414e-06 0.8 0.00122656679807209 1.70743677504318e-06 0.81 0.00174318365512566 2.47028671488014e-06 0.82 0.00246195968928928 3.5782861221817e-06 0.83 0.00344978759539422 5.18851490419237e-06 0.84 0.00478828773630014 7.52971808898639e-06 0.85 0.00657425533007271 1.09350267533624e-05 0.86 0.00892013142376122 1.58896257810198e-05 0.87 0.0119552720118283 2.3100213115591e-05 0.88 0.0158285296270133 3.3596269795636e-05 0.89 0.0207117664467935 4.88780078826114e-05 0.9 0.0268021404728432 7.11349324846942e-05 0.91 0.0343171431658399 0.00010359704927601 0.92 0.0434655653078224 0.000151560657836748 0.93 0.0543108194230616 0.000234245732247112 0.94 0.0658491185547377 0.00053219799987488 0.95 0.0757442262181917 0.00140240824953451 0.96 0.0848907374565069 0.0025445267010881 0.97 0.0944173807465007 0.00377186627336069 0.98 0.104783401980128 0.005131281539272 0.99 0.116276351163251 0.00672284533836144 1 0.129100889833189 0.00867037145512015 1.01 0.143382622769808 0.011130923297321 1.02 0.159163145650811 0.0143150797075458 1.03 0.176406780189503 0.0185171020484627 1.04 0.195025909519814 0.0241591365109277 1.05 0.214918499978404 0.0318551120244312 0.75 0.000201998495064712 1.67600089370175e-07 0.76 0.00029079971160375 2.48072745784478e-07 0.77 0.000418238158867029 3.68049278784824e-07 0.78 0.000600588225676051 5.47024845178272e-07 0.79 0.0008603892131958 8.14164396857941e-07 0.8 0.00122832534031333 1.21312440217847e-06 0.81 0.00174526292653806 1.80926018142717e-06 0.82 0.00246419651963093 2.70033597146542e-06 0.83 0.0034517950974295 4.03230701513215e-06 0.84 0.00478934152236745 6.02235979239141e-06 0.85 0.00657318369550098 8.99229264915398e-06 0.86 0.00891525202156798 1.34167059911398e-05 0.87 0.0119444569281812 1.99926402124321e-05 0.88 0.0158096187244504 2.97405731151689e-05 0.89 0.0206840127927378 4.41514461704617e-05 0.9 0.0267707553579749 6.54012390646625e-05 0.91 0.0343068474246513 9.66647054796226e-05 0.92 0.0435605406967309 0.000142576258553285 0.93 0.0548088901551428 0.000209941037888117 0.94 0.0682569746468201 0.000310132113797856 0.95 0.0834966278848232 0.000527105413242058 0.96 0.0967796424953794 0.00154219727433427 0.97 0.108038786535259 0.00324801651366581 0.98 0.119879819081177 0.00503687607232825 0.99 0.132879485118657 0.00693766578153824 1 0.147346105491181 0.00912333340847698 1.01 0.163553122113229 0.011794110742269 1.02 0.181705640829183 0.0151908498357148 1.03 0.201909437714106 0.0196285583785384 1.04 0.224160002325997 0.0255418019048734 1.05 0.24836010804856 0.0335490733607697 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_lat_nqs_ac.standard0000644000175000017500000002653314163340332026141 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 6.29158476122549e-05 -9.48743907555357e-08 0.0434109137534605 3.34030982338096e-06 2.7055339806545e-14 3.35463629826855e-15 8.14905916570639e-15 3.95296690522714e-15 158489319.2463 6.29176295871836e-05 -9.50953869092081e-08 0.0434109130213229 3.34040062128799e-06 2.70553394881611e-14 3.35463625878337e-15 8.14905903489601e-15 3.95296688900436e-15 251188643.151556 6.2922105705604e-05 -9.56505041118895e-08 0.0434109111822765 3.34062869530339e-06 2.7055338688417e-14 3.35463615960107e-15 8.14905870631523e-15 3.95296684825458e-15 398107170.55492 6.29333492046247e-05 -9.70448952468355e-08 0.0434109065628016 3.34120159123178e-06 2.7055336679551e-14 3.35463591046644e-15 8.14905788095774e-15 3.95296674589577e-15 630957344.483199 6.29615915854753e-05 -1.00547445940155e-07 0.0434108949592102 3.34264064013341e-06 2.70553316335099e-14 3.35463528466881e-15 8.14905580775435e-15 3.95296648878218e-15 1000000000.00595 6.3032533163504e-05 -1.09345446171956e-07 0.0434108658123373 3.34625536371021e-06 2.7055318958441e-14 3.35463371273791e-15 8.14905060010841e-15 3.95296584294272e-15 1584893192.47244 6.32107298759732e-05 -1.31444964707756e-07 0.0434107925988978 3.35533511462891e-06 2.70552871201924e-14 3.35462976423653e-15 8.14903751912808e-15 3.95296422067167e-15 2511886431.53052 6.3658336785205e-05 -1.86956074013141e-07 0.0434106086962829 3.37814226515106e-06 2.70552071466628e-14 3.35461984611585e-15 8.14900466141096e-15 3.95296014573832e-15 3981071705.5729 6.47826556094688e-05 -3.26391332642928e-07 0.0434101467615643 3.43543027419031e-06 2.70550062656154e-14 3.35459493334183e-15 8.14892212794436e-15 3.95294991014054e-15 6309573444.86956 6.76066975787426e-05 -6.76622080241806e-07 0.0434089864829988 3.57932517158881e-06 2.70545016965408e-14 3.3545323579247e-15 8.14871482200187e-15 3.95292420056681e-15 10000000000.1191 7.46996180808479e-05 -1.55626865673328e-06 0.0434060723040613 3.94073448456025e-06 2.70532344107238e-14 3.35437519225084e-15 8.14819414823505e-15 3.95285962788531e-15 15848931924.8188 9.25114841804631e-05 -3.76525253449496e-06 0.0433987541669119 4.84831187639311e-06 2.70500519804012e-14 3.35398051506006e-15 8.14688662315941e-15 3.95269747183745e-15 25118864315.4548 0.000137222954400468 -9.31025923478211e-06 0.043380384128119 7.12651896038582e-06 2.70420634216618e-14 3.35298979362957e-15 8.14360446461665e-15 3.95229042659779e-15 39810717055.9661 0.000249344694202347 -2.32153219712529e-05 0.0433343180806473 1.28395170038238e-05 2.70220307298276e-14 3.3505053883998e-15 8.13537388476076e-15 3.95126969030297e-15 63095734449.0713 0.000529798635056505 -5.79965307641228e-05 0.0432190915012539 2.71296343192171e-05 2.69719222728883e-14 3.3442910606646e-15 8.11478645398971e-15 3.948716487713e-15 100000000000 0.00122688904617518 -0.000144447971106804 0.0429326867413261 6.26488490750568e-05 2.68473737472303e-14 3.32884485847339e-15 8.06361476948297e-15 3.94237030110678e-15 100000000 0.000407022750391978 -3.05987266317309e-07 0.204010977422084 6.05363547584706e-06 6.05766807486116e-14 3.39155382225995e-15 5.28702942794025e-14 6.18271694303285e-15 158489319.2463 0.000407031507361072 -3.06478453043298e-07 0.204010964726502 6.05434758312518e-06 6.05766771293109e-14 3.39155361924993e-15 5.28702890322526e-14 6.18271664871522e-15 251188643.151556 0.000407053503865107 -3.07712257873867e-07 0.204010932836653 6.05613631509437e-06 6.05766680380417e-14 3.391553109312e-15 5.28702758520126e-14 6.18271590942303e-15 398107170.55492 0.000407108756535352 -3.10811432699463e-07 0.204010852733046 6.06062940261626e-06 6.05766452018267e-14 3.39155182840698e-15 5.28702427447764e-14 6.18271405240666e-15 630957344.483199 0.000407247544654626 -3.18596190305195e-07 0.204010651522336 6.07191550270017e-06 6.05765878399775e-14 3.3915486109263e-15 5.28701595833469e-14 6.18270938780299e-15 1000000000.00595 0.000407596162669693 -3.3815050633827e-07 0.204010146106752 6.10026474348569e-06 6.05764437543445e-14 3.39154052902611e-15 5.28699506924659e-14 6.1826976709148e-15 1584893192.47244 0.000408471839049129 -3.87268027300847e-07 0.204008876578302 6.17147380169055e-06 6.05760818327571e-14 3.39152022850005e-15 5.28694259897758e-14 6.18266823984187e-15 2511886431.53052 0.000410671359908382 -5.1064124423123e-07 0.204005687781192 6.35033646440537e-06 6.05751727593831e-14 3.3914692377099e-15 5.28681080433987e-14 6.1825943149761e-15 3981071705.5729 0.000416195809640779 -8.20512883942215e-07 0.203997678605345 6.79957875505415e-06 6.05728894756683e-14 3.39134116615474e-15 5.28647978094994e-14 6.18240864080838e-15 6309573444.86956 0.000430069465715999 -1.59869944822649e-06 0.203977565009145 7.92776949563705e-06 6.05671554216874e-14 3.39101953761338e-15 5.28564847559154e-14 6.18194235372643e-15 10000000000.1191 0.000464898750877907 -3.55230717856519e-06 0.203927070591965 1.07600493797371e-05 6.05527602975651e-14 3.39021210141038e-15 5.28356151515175e-14 6.18077175776699e-15 15848931924.8188 0.000552261459342146 -8.45256458567858e-06 0.203800414847334 1.78642905564821e-05 6.05166528372438e-14 3.38818679961969e-15 5.2783267675642e-14 6.17783553805823e-15 25118864315.4548 0.000770924235569015 -2.07175676711131e-05 0.203483404337552 3.56457115540734e-05 6.04262783782192e-14 3.38311761025921e-15 5.26522455884764e-14 6.17048638457598e-15 39810717055.9661 0.00131529243611009 -5.12516977798556e-05 0.202694196207387 7.99131461789823e-05 6.02012881787759e-14 3.37049769598766e-15 5.23260617767998e-14 6.15219042435054e-15 63095734449.0713 0.00265259867689185 -0.000126262476717111 0.200755411104407 0.000188661446554428 5.9648572576485e-14 3.33949535217568e-15 5.15247518425248e-14 6.10724418802325e-15 100000000000 0.0058331732216674 -0.000304663927930083 0.196144312794775 0.00044730233628778 5.83340246281263e-14 3.2657611075055e-15 4.96189610059089e-14 6.00034656742853e-15 100000000 0.00261983883412242 -9.00833167653303e-07 0.665844413653872 7.35665463980115e-05 1.64368000325336e-13 3.61288216807939e-15 4.1949494014636e-13 1.27321108211073e-14 158489319.2463 0.00261989961626513 -9.02187651729573e-07 0.665844124634248 7.35729869817423e-05 1.64367929898856e-13 3.61288059867855e-15 4.19494605267827e-13 1.27321033585925e-14 251188643.151556 0.0026200522936749 -9.05589952328056e-07 0.665843398651817 7.35891649511002e-05 1.64367752996035e-13 3.61287665653298e-15 4.1949376409335e-13 1.27320846136555e-14 398107170.55492 0.00262043579927807 -9.14136084627389e-07 0.665841575079291 7.36298018855701e-05 1.64367308639379e-13 3.61286675438099e-15 4.19491651173532e-13 1.27320375288355e-14 630957344.483199 0.00262139910469478 -9.35602617238645e-07 0.665836994553537 7.37318754374958e-05 1.64366192485742e-13 3.61284188174141e-15 4.19486343853144e-13 1.27319192592149e-14 1000000000.00595 0.00262381871058598 -9.89521704440745e-07 0.665825489306181 7.39882611727694e-05 1.64363388959604e-13 3.61277940728189e-15 4.19473013061628e-13 1.27316221926087e-14 1584893192.47244 0.00262989580498324 -1.12494515663999e-06 0.665796592668715 7.46322008825655e-05 1.64356347609173e-13 3.61262249611329e-15 4.19439531378215e-13 1.27308760786179e-14 2511886431.53052 0.00264515648166547 -1.46501779400432e-06 0.665724028016475 7.62492492730597e-05 1.64338665512219e-13 3.61222846395662e-15 4.1935545285122e-13 1.27290024522371e-14 3981071705.5729 0.00268346249460644 -2.31863831942668e-06 0.665541882587038 8.03082224013455e-05 1.64294281462358e-13 3.6112393989756e-15 4.19144406302615e-13 1.27242994395277e-14 6309573444.86956 0.00277951236190987 -4.45903696442911e-06 0.665085164620741 9.04858368390788e-05 1.64182991307832e-13 3.60875938205691e-15 4.18615220636137e-13 1.27125069372028e-14 10000000000.1191 0.00301970833441684 -9.81162253817899e-06 0.663943030652669 0.000115937428458143 1.63904683303381e-13 3.60255749867755e-15 4.17291863619984e-13 1.26830169270263e-14 15848931924.8188 0.00361638279272736 -2.31080615435646e-05 0.661105838340056 0.000179162113218443 1.63213334168483e-13 3.58715130611212e-15 4.14004492385056e-13 1.26097603454776e-14 25118864315.4548 0.0050743489688313 -5.55977350371639e-05 0.654173196311765 0.000333650797276324 1.61524031667728e-13 3.5495064775962e-15 4.05971844092399e-13 1.24307588538142e-14 39810717055.9661 0.00849778170312965 -0.000131886344188495 0.637894743461612 0.000696403806743074 1.57557400909069e-13 3.46111311132286e-15 3.8711047984479e-13 1.20104476174546e-14 63095734449.0713 0.0158362232499686 -0.000295417963588469 0.603000389173004 0.00147399809952454 1.49054564656826e-13 3.27163383660941e-15 3.46679418460702e-13 1.11094719947697e-14 100000000000 0.0288961397053499 -0.000586448323855744 0.540900371224372 0.00285785002981372 1.33922423809303e-13 2.93442552310176e-15 2.74725955248061e-13 9.50604348948062e-15 100000000 0.0908561435382035 -0.00195447223712763 0.829958162347648 0.0241424491468027 6.94356748722277e-12 1.75492650018095e-13 1.42333612897296e-11 3.6479177177281e-13 158489319.2463 0.0909264981988189 -0.00195625844107533 0.829806322739359 0.0241463041367262 6.94230962455273e-12 1.7546071468862e-13 1.42306465673014e-11 3.64722848863145e-13 251188643.151556 0.091103102799174 -0.00196074217863553 0.829425174239666 0.0241559809505841 6.9391521317555e-12 1.75380550474197e-13 1.42238320582794e-11 3.64549838250765e-13 398107170.55492 0.0915459683645982 -0.00197198590029293 0.82846938064489 0.0241802471793917 6.93123419060247e-12 1.75179525302282e-13 1.42067435374533e-11 3.6411598521114e-13 630957344.483199 0.0926537169107842 -0.00200011004742046 0.826078634902325 0.0242409447855767 6.91142888514221e-12 1.74676696996538e-13 1.41639996766084e-11 3.63030779877006e-13 1000000000.00595 0.0954070748005393 -0.00207001385605358 0.820136330870101 0.0243918113639659 6.862201924533e-12 1.73426895055853e-13 1.40577579244517e-11 3.60333454135501e-13 1584893192.47244 0.102144379675805 -0.00224106436585327 0.805595862275162 0.0247609730112325 6.74174644617293e-12 1.7036870318787e-13 1.37977906033033e-11 3.53733256632647e-13 2511886431.53052 0.118017422810837 -0.00264405816984265 0.7713386200271 0.0256307152686113 6.45795418216544e-12 1.6316362454969e-13 1.31853094140615e-11 3.38183237507471e-13 3981071705.5729 0.152296574088968 -0.00351435666607828 0.697357268158837 0.0275089957067126 5.84508128396197e-12 1.47603660495669e-13 1.18626055593298e-11 3.04601683331931e-13 6309573444.86956 0.214172231339824 -0.00508529087684933 0.563817066593925 0.0308993899339784 4.73881371391945e-12 1.19517113228774e-13 9.47505606326108e-12 2.43985225262201e-13 10000000000.1191 0.296627946058786 -0.00717872323588586 0.385860932421361 0.0354174409997612 3.2645977263874e-12 8.20888832628179e-14 6.29339935249508e-12 1.63207523724292e-13 15848931924.8188 0.371252459338333 -0.009073332619956 0.224806117203277 0.0395063918129988 1.93039486472441e-12 4.82153857903361e-14 3.41391932769919e-12 9.0101654935785e-14 25118864315.4548 0.418561309012628 -0.0102744364744859 0.122704036966836 0.0420986172205454 1.08456552737278e-12 2.67409917950932e-14 1.58844829081756e-12 4.37555629503237e-14 39810717055.9661 0.442157119056382 -0.0108735002561975 0.0717794994454732 0.0433915182047834 6.6269882566712e-13 1.60304011761081e-14 6.77974497369201e-13 2.06399389119426e-14 63095734449.0713 0.452524187095391 -0.0111367052478123 0.0494052667168611 0.0439595678901489 4.77347240285424e-13 1.13245902088601e-14 2.77948232243669e-13 1.04838456595518e-14 100000000000 0.456823676123973 -0.0112458631089797 0.0401260985106108 0.0441951526650079 4.00477183603994e-13 9.37296969782142e-15 1.12047079518504e-13 6.27185328643305e-15 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_full_subcoupl.standard0000644000175000017500000003034514163340332026566 0ustar carstencarstenV(coll) I(coll) I(base) -1 -0.0420005746236062 2.51799212365518e-05 -0.95 -0.0239438824489376 5.27104866712118e-06 -0.9 -0.00923927170082363 8.62771660186297e-07 -0.85 -0.00167927157122532 1.06569743663155e-07 -0.8 -0.000223030988549806 1.11799304976569e-08 -0.75 -4.29506163536485e-05 1.1245237209048e-09 -0.7 -5.98678692934733e-06 1.13630813682119e-10 -0.65 -5.16315554580103e-07 1.2332317232448e-11 -0.6 -4.03488062682082e-08 1.81703484837798e-12 -0.55 -3.12645484558141e-09 6.76857127941896e-13 -0.5 -2.42964386270622e-10 5.13223361284921e-13 -0.45 -1.96351386333047e-11 4.51378382625705e-13 -0.4 -2.25089540547093e-12 4.00143680474638e-13 -0.35 -8.12380035848539e-13 3.50014977024398e-13 -0.3 -6.08705925424048e-13 3.00001561175658e-13 -0.25 -5.00674546330498e-13 2.50000162729004e-13 -0.2 -4.00052271783119e-13 2.00000016957843e-13 -0.15 -3.00004049703339e-13 1.50000001763648e-13 -0.0999999999999997 -2.00000312192269e-13 1.00000000180596e-13 -0.0499999999999997 -1.00000022462903e-13 5.00000000163501e-14 3.19189119579733e-16 7.32062920045099e-28 -4.13763715613606e-28 0.0500000000000003 1.00000001741141e-13 -5.00000000009859e-14 0.1 2.0000000187537e-13 -1.00000000000363e-13 0.15 3.00000001884962e-13 -1.49999999999571e-13 0.2 4.00000001884883e-13 -1.99999999998761e-13 0.25 5.00000001884052e-13 -2.49999999997948e-13 0.3 6.00000001883163e-13 -2.99999999997134e-13 0.35 7.00000001882268e-13 -3.49999999996318e-13 0.4 8.00000001881373e-13 -3.99999999995502e-13 0.45 9.00000001880477e-13 -4.49999999994686e-13 0.5 1.00000000187958e-12 -4.9999999999387e-13 0.55 1.10000000187869e-12 -5.49999999993054e-13 0.6 1.20000000187779e-12 -5.99999999992239e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.700000000000001 1.40000000187601e-12 -6.99999999990613e-13 0.750000000000001 1.50000000187513e-12 -7.49999999989805e-13 0.800000000000001 1.60000000187425e-12 -7.99999999989e-13 0.850000000000001 1.70000000187337e-12 -8.49999999988201e-13 0.900000000000001 1.8000000018725e-12 -8.99999999987409e-13 0.950000000000001 1.90000000187164e-12 -9.49999999986627e-13 1 2.0000000018708e-12 -9.99999999985856e-13 -1 -0.0510819684214995 0.000800766946861 -0.95 -0.0333252205565215 0.000258990752476671 -0.9 -0.0171346047284725 6.72619502664191e-05 -0.85 -0.00566973795248041 1.39550222613277e-05 -0.8 -0.00115063693362335 2.40149093036034e-06 -0.75 -0.000259421788834142 3.83914916799907e-07 -0.7 -8.62779396009174e-05 6.04194281603884e-08 -0.65 -2.5885253113959e-05 9.44982477145574e-09 -0.6 -4.72844063105026e-06 1.48169987474121e-09 -0.55 -6.33787480386872e-07 2.33793474186983e-10 -0.5 -7.93932325292752e-08 3.72724834454991e-11 -0.45 -9.85410817027385e-09 6.24821133371092e-12 -0.4 -1.22231838069718e-09 1.31426237174316e-12 -0.35 -1.52124925538151e-10 4.94160897160735e-13 -0.3 -1.93728011154715e-11 3.2273104624209e-13 -0.25 -2.82755201492818e-12 2.53583945049651e-13 -0.2 -6.88567668656236e-13 2.0056482342391e-13 -0.15 -3.35729388125505e-13 1.50088767268053e-13 -0.0999999999999997 -2.04372215539048e-13 1.00013702567131e-13 -0.0499999999999997 -1.00482584564055e-13 5.00018663392898e-14 3.19189119579733e-16 1.02520363242523e-24 -1.02491263365509e-24 0.0500000000000003 1.00059890110701e-13 -5.00002942865441e-14 0.1 2.00067325493415e-13 -1.00000340690779e-13 0.15 3.00068249433837e-13 -1.50000348010429e-13 0.2 4.00068364767331e-13 -2.00000349169414e-13 0.25 5.00068379635728e-13 -2.50000349360271e-13 0.3 6.00068382013356e-13 -3.00000349403208e-13 0.35 7.0006838286778e-13 -3.5000034942944e-13 0.4 8.0006838347611e-13 -4.00000349462196e-13 0.45 9.00068384090464e-13 -4.50000349507768e-13 0.5 1.00006838471678e-12 -5.00000349571327e-13 0.55 1.10006838536083e-12 -5.50000349658255e-13 0.6 1.20006838602965e-12 -6.00000349775264e-13 0.65 1.30006838673201e-12 -6.50000349930759e-13 0.700000000000001 1.40006838747885e-12 -7.00000350135319e-13 0.750000000000001 1.50006838828387e-12 -7.50000350402272e-13 0.800000000000001 1.60006838916421e-12 -8.00000350748325e-13 0.850000000000001 1.70006839014097e-12 -8.50000351194159e-13 0.900000000000001 1.80006839123967e-12 -9.00000351764851e-13 0.950000000000001 1.90006839249037e-12 -9.5000035249005e-13 1 2.00006839392759e-12 -1.00000035340386e-12 -1 -0.0528861378591681 0.00264236347865258 -0.95 -0.037377365825894 0.00112975872717231 -0.9 -0.0217689886260968 0.000381618888490051 -0.85 -0.00902874450704327 0.000101241519757424 -0.8 -0.00237373559198578 2.18064839787966e-05 -0.75 -0.000553637557053587 4.2089905587825e-06 -0.7 -0.000183922652386898 7.89471756002578e-07 -0.65 -7.5404475310964e-05 1.47034530635168e-07 -0.6 -2.4723036652354e-05 2.72884546012859e-08 -0.55 -5.20179260655339e-06 5.06829855753223e-09 -0.5 -8.4154500688291e-07 9.43454263173365e-10 -0.45 -1.27550328714628e-07 1.75997802009887e-10 -0.4 -1.91249072375249e-08 3.30837657436738e-11 -0.35 -2.86361143272922e-09 6.43513735018991e-12 -0.3 -4.29127106426984e-10 1.43291447908243e-12 -0.25 -6.46467847146759e-11 4.60891732325675e-13 -0.2 -1.00004137497242e-11 2.3922618474946e-13 -0.15 -1.73364374488714e-12 1.57264868534018e-13 -0.0999999999999997 -4.10644435004066e-13 1.01314194388711e-13 -0.0499999999999997 -1.27449588436161e-13 5.02062762161084e-14 3.19189119579733e-16 4.13279810624219e-23 -4.1327596394123e-23 0.0500000000000003 1.04114583320932e-13 -5.00384053487149e-14 0.1 2.04731652502385e-13 -1.00045555870753e-13 0.15 3.04824270460871e-13 -1.50046887327495e-13 0.2 4.04838203865248e-13 -2.00047135470788e-13 0.25 5.04840323978202e-13 -2.50047182071703e-13 0.3 6.04840668972566e-13 -3.00047191371176e-13 0.35 7.04840746988391e-13 -3.50047194039545e-13 0.4 8.04840786137623e-13 -4.00047195904461e-13 0.45 9.04840817382997e-13 -4.5004719821185e-13 0.5 1.00484084912651e-12 -5.0004720134087e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.6 1.20484091556539e-12 -6.00047211416852e-13 0.65 1.30484095105248e-12 -6.50047219118788e-13 0.700000000000001 1.40484098873755e-12 -7.00047229258665e-13 0.750000000000001 1.50484102929251e-12 -7.50047242489291e-13 0.800000000000001 1.60484107355056e-12 -8.00047259623834e-13 0.850000000000001 1.70484112253622e-12 -8.50047281666002e-13 0.900000000000001 1.80484117749049e-12 -9.000473098356e-13 0.950000000000001 1.90484123988616e-12 -9.50047345584438e-13 1 2.00484131143035e-12 -1.00004739059955e-12 -1 -0.0517924774279813 0.00526480873277198 -0.95 -0.038833414437255 0.00279568935978204 -0.9 -0.0249725934328624 0.0012065812123386 -0.85 -0.0122426925211171 0.000405246408730453 -0.8 -0.00401613563711059 0.000106810188163717 -0.75 -0.00102664872769215 2.40929623783884e-05 -0.7 -0.000322792944300932 5.14801366031499e-06 -0.65 -0.000139812054062121 1.08600986889958e-06 -0.6 -6.14762523507641e-05 2.28120825388384e-07 -0.55 -2.00911290891247e-05 4.78110889835068e-08 -0.5 -4.46378409661191e-06 1.0023506904677e-08 -0.45 -8.13481061898314e-07 2.10325125783361e-09 -0.4 -1.41008646161833e-07 4.41650446107931e-10 -0.35 -2.42176368503051e-08 9.29434423950321e-11 -0.3 -4.15350961141146e-09 1.97291465464896e-11 -0.25 -7.12549761094994e-10 4.32583890365217e-12 -0.2 -1.22438769419588e-10 1.0539919234833e-12 -0.15 -2.11496893063268e-11 3.27896677000643e-13 -0.0999999999999997 -3.69050180563198e-12 1.3602005009892e-13 -0.0499999999999997 -6.11457127635024e-13 5.62476512775775e-14 3.19189119579733e-16 5.7461910708586e-22 -5.74617538830381e-22 0.0500000000000003 1.87854994210955e-13 -5.13110528350823e-14 0.1 3.02955957311903e-13 -1.01586174582293e-13 0.15 4.05553915330198e-13 -1.51643910314519e-13 0.2 5.06001641820564e-13 -2.01656029817105e-13 0.25 6.06079252469769e-13 -2.51658579322782e-13 0.3 7.06093087138515e-13 -3.01659124174776e-13 0.35 8.0609591859677e-13 -3.51659253453597e-13 0.4 9.06096927560875e-13 -4.01659302579948e-13 0.45 1.00609747418798e-12 -4.51659345731853e-13 0.5 1.10609802342872e-12 -5.01659397655088e-13 0.55 1.20609858701805e-12 -5.51659469233907e-13 0.6 1.30609917111184e-12 -6.01659566228016e-13 0.65 1.40609978317112e-12 -6.51659695775775e-13 0.700000000000001 1.50610043237044e-12 -7.01659866734874e-13 0.750000000000001 1.60610113003345e-12 -7.51660090103465e-13 0.800000000000001 1.70610189012316e-12 -8.01660379506941e-13 0.850000000000001 1.8061027297529e-12 -8.51660751709872e-13 0.900000000000001 1.90610366965299e-12 -9.01661227087135e-13 0.950000000000001 2.00610473451465e-12 -9.51661829975587e-13 1 2.10610595314704e-12 -1.00166258884111e-12 -1 -0.0456973033409431 0.0126921207550067 -0.95 -0.0367002091264279 0.00890177731843824 -0.9 -0.0271780797878671 0.00566207877200787 -0.85 -0.0175256359218928 0.00310925386510896 -0.8 -0.00896626071837107 0.0013846512209314 -0.75 -0.00340706884615127 0.000483719088878561 -0.7 -0.00111624841566207 0.0001408647423768 -0.65 -0.000426503297820491 3.78459511715313e-05 -0.6 -0.000208194399990031 9.91490991328714e-06 -0.55 -0.000109571774451133 2.57802407490319e-06 -0.5 -5.04085271605275e-05 6.68286453751651e-07 -0.45 -1.74429907191968e-05 1.72966492702197e-07 -0.4 -4.57140758787344e-06 4.47462785288505e-08 -0.35 -1.04638541939123e-06 1.1574864028019e-08 -0.3 -2.30261877814469e-07 2.99376979890153e-09 -0.25 -5.02056489552211e-08 7.73940631321031e-10 -0.2 -1.09145053976149e-08 1.99673976313215e-10 -0.15 -2.35806579094142e-09 5.10849810463145e-11 -0.0999999999999997 -4.94684226339092e-10 1.26107855172266e-11 -0.0499999999999997 -8.86155938442457e-11 2.62118390182154e-12 3.19189119579733e-16 5.07626524757015e-20 -5.07442771915374e-20 0.0500000000000003 1.94164763249395e-11 -7.15115980775423e-13 0.1 2.37362627680824e-11 -9.37168816929254e-13 0.15 2.4759270793541e-11 -1.03167582591155e-12 0.2 2.50615027661855e-11 -1.09318937581802e-12 0.25 2.52059367840493e-11 -1.14616845893645e-12 0.3 2.53157692826524e-11 -1.19694030278118e-12 0.35 2.5418000341831e-11 -1.24714185015952e-12 0.4 2.55185581077378e-11 -1.29719682278983e-12 0.45 2.56187471816472e-11 -1.34721518324021e-12 0.5 2.5718861240894e-11 -1.3972258228275e-12 0.55 2.58189497045321e-11 -1.44723708225669e-12 0.6 2.59190398648851e-11 -1.49725087192221e-12 0.65 2.60191340679526e-11 -1.54726946598352e-12 0.700000000000001 2.61192336842503e-11 -1.59729418087354e-12 0.750000000000001 2.6219340381254e-11 -1.64732663329408e-12 0.800000000000001 2.63194561911687e-11 -1.69736880465378e-12 0.850000000000001 2.64195835836579e-11 -1.74742311306047e-12 0.900000000000001 2.65197255396955e-11 -1.79749248726664e-12 0.950000000000001 2.66198856185836e-11 -1.84758043423692e-12 1 2.67200680086793e-11 -1.89769109076048e-12 -1 -0.0408524667873275 0.0206444274680498 -0.95 -0.0337949764790782 0.0162898064022246 -0.9 -0.0267305475102247 0.0122964511941368 -0.85 -0.0197734939283864 0.00869784212965326 -0.8 -0.0132156393523798 0.00558634385502622 -0.75 -0.00760606839059777 0.00311363640227946 -0.7 -0.00363315050990837 0.00143662489158125 -0.65 -0.00151392694442044 0.000546346821897206 -0.6 -0.000647380303581341 0.000182279838469013 -0.55 -0.000321089040485894 5.72872042070036e-05 -0.5 -0.000177493883072892 1.76182910672218e-05 -0.45 -9.59962174965402e-05 5.37748239321165e-06 -0.4 -4.45760869424325e-05 1.63619808966475e-06 -0.35 -1.63876718263815e-05 4.97028233147057e-07 -0.3 -4.93363087986769e-06 1.50820779420575e-07 -0.25 -1.34665282126938e-06 4.56969518221711e-08 -0.2 -3.55164282874662e-07 1.37872904227592e-08 -0.15 -9.19842411417629e-08 4.10234906561919e-09 -0.0999999999999997 -2.28651910005344e-08 1.16293413041323e-09 -0.0499999999999997 -4.74961903718988e-09 2.70795508418281e-10 3.19189119579733e-16 1.2541930050326e-18 -1.25417949500768e-18 0.0500000000000003 1.2466910460618e-09 -8.22201707510676e-11 0.1 1.57445013438105e-09 -1.07208483379248e-10 0.15 1.66082036132502e-09 -1.14827166458813e-10 0.2 1.6836806625522e-09 -1.17174245940183e-10 0.25 1.68980080595436e-09 -1.17921427429904e-10 0.3 1.69149933549353e-09 -1.18183065065166e-10 0.35 1.69202722259336e-09 -1.18297369917215e-10 0.4 1.69224436226364e-09 -1.18366999934448e-10 0.45 1.69237878997501e-09 -1.18423127359363e-10 0.5 1.69249116819691e-09 -1.18475233187093e-10 0.55 1.69259828101813e-09 -1.18526220357415e-10 0.6 1.69270300436707e-09 -1.18577073524106e-10 0.65 1.6928076727734e-09 -1.1862791417044e-10 0.700000000000001 1.69291259076704e-09 -1.18679042716462e-10 0.750000000000001 1.69301783812884e-09 -1.18730536021971e-10 0.800000000000001 1.69312351089318e-09 -1.18782487504224e-10 0.850000000000001 1.69322972471597e-09 -1.18835010272802e-10 0.900000000000001 1.69333661834713e-09 -1.18888240543327e-10 0.950000000000001 1.69344435708192e-09 -1.18942341084121e-10 1 1.69355313587788e-09 -1.1899750435151e-10 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_subcoupl_ac.standard0000644000175000017500000002661714163340332027361 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 0.000106845632352258 -7.90320117298337e-08 0.0396996184043161 4.96667480709423e-06 7.70073130204287e-14 2.58066653424409e-14 5.04150560239797e-13 3.2493456770171e-14 158489319.2463 0.000106658846725758 -8.79290282369687e-08 0.0396651793269502 4.03069058529937e-06 7.85687651942146e-14 2.57589917387347e-14 2.30456264159056e-13 4.08437340730848e-14 251188643.151556 0.000106602153312636 -9.76838217463966e-08 0.0396509743205899 3.88571768106249e-06 7.92112111208515e-14 2.57393604986456e-14 1.17845008507681e-13 4.42696760489546e-14 398107170.55492 0.000106630109502384 -1.16976345721344e-07 0.0396451553188157 4.42678249862327e-06 7.94703816336247e-14 2.57314001713898e-14 7.24109519642879e-14 4.56275137109248e-14 630957344.483199 0.000106769162052488 -1.63275591572719e-07 0.039642608235759 6.11509472420169e-06 7.95740694278099e-14 2.57281150208236e-14 5.42207451386426e-14 4.61113157577469e-14 1000000000.00595 0.000107145976691667 -2.78376341840638e-07 0.0396410655947964 1.02715487105276e-05 7.96153352869496e-14 2.57265689780553e-14 4.69494604665624e-14 4.61634204884064e-14 1584893192.47244 0.000108103292894291 -5.65222442989356e-07 0.0396392459304026 1.95091697903771e-05 7.96315317662264e-14 2.57254362773767e-14 4.40214047901615e-14 4.58788724243058e-14 2511886431.53052 0.000110511432247149 -1.27684249368646e-06 0.0396360184307772 3.70275172865142e-05 7.9637398276815e-14 2.57240202606359e-14 4.27996716741574e-14 4.52155367424492e-14 3981071705.5729 0.0001165591019207 -3.03593616046496e-06 0.0396300750730268 6.25944442329551e-05 7.96383723420785e-14 2.57220672248126e-14 4.22412808139892e-14 4.42437665137065e-14 6309573444.86956 0.000131743958353155 -7.39812109533924e-06 0.0396189526061953 9.02364614029927e-05 7.96355281947746e-14 2.57196705434625e-14 4.1960952233291e-14 4.3297741480841e-14 10000000000.1191 0.000169872524448205 -1.82890553063709e-05 0.0395953058643643 0.000117579143021074 7.9626456748629e-14 2.5716410692237e-14 4.18191366537938e-14 4.26637432432253e-14 15848931924.8188 0.000265593133193839 -4.55880880243125e-05 0.0395390172841998 0.000155842187766708 7.9603002704725e-14 2.57101973406878e-14 4.17440995364019e-14 4.23338966950747e-14 25118864315.4548 0.000505718573029082 -0.000114065603322312 0.0393994354611262 0.000235740126214801 7.95439229492303e-14 2.56956522218971e-14 4.16846457259208e-14 4.21773299033366e-14 39810717055.9661 0.0011069278218668 -0.000285623720486467 0.0390506464476778 0.000428840031861777 7.93959244150079e-14 2.56596955830836e-14 4.15905860308596e-14 4.20879508175898e-14 63095734449.0713 0.0026048611689259 -0.000713812038714447 0.0381816244591741 0.000909027011341046 7.90272265235348e-14 2.55702449440304e-14 4.13785842002083e-14 4.19913673752631e-14 100000000000 0.00629208138316655 -0.00177245450567603 0.0360407048819441 0.00210287123777042 7.81201498220353e-14 2.53497695493878e-14 4.08656565252811e-14 4.18030713561948e-14 100000000 0.00056444299032176 4.46101214380959e-08 0.139925325593444 2.82404014346205e-05 5.51611682513982e-14 2.80261862852778e-14 4.64421618653134e-12 -1.44329398230164e-13 158489319.2463 0.000561078130953978 -1.04524673138017e-07 0.139616089107265 1.50623184460574e-05 8.4679038366147e-14 2.67568204081476e-14 1.94880517808506e-12 -2.84233933688743e-14 251188643.151556 0.000559745219368129 -1.72984322059662e-07 0.13948941149877 9.9152229187105e-06 9.675812181164e-14 2.62373615352651e-14 8.45803540636264e-13 1.89970621361797e-14 398107170.55492 0.000559319621021919 -2.19259803112644e-07 0.139438083027744 8.45606464677795e-06 1.01620410133765e-13 2.60282136965688e-14 4.01789679500697e-13 3.80613001871708e-14 630957344.483199 0.000559428473979894 -2.84783077710112e-07 0.139416727611811 9.37688207874876e-06 1.03564573858723e-13 2.59444736575335e-14 2.24218301337434e-13 4.56244895973321e-14 1000000000.00595 0.000560173031030874 -4.2874290850097e-07 0.139406200428213 1.33065949370348e-05 1.04339569568328e-13 2.59108222935109e-14 1.53350610000433e-13 4.84987621621515e-14 1584893192.47244 0.00056223053755154 -7.80302797943491e-07 0.139397369732936 2.26437454796669e-05 1.04647443139576e-13 2.58968515327028e-14 1.25008940836473e-13 4.9336201897791e-14 2511886431.53052 0.000567470354422617 -1.65125820563733e-06 0.139384048259409 4.06388281930514e-05 1.04767964591207e-13 2.5890207856906e-14 1.13526144474862e-13 4.91156654357582e-14 3981071705.5729 0.000580650784148163 -3.80890545606569e-06 0.139359836613731 6.73817779793806e-05 1.04811095273024e-13 2.58858975735035e-14 1.08698951230509e-13 4.83153206826485e-14 6309573444.86956 0.000613743204075964 -9.17048652872542e-06 0.139313042516377 9.7796074452372e-05 1.04816738943448e-13 2.58818927707395e-14 1.06566719153469e-13 4.74334012566228e-14 10000000000.1191 0.000696803748880555 -2.25672658314412e-05 0.139210850430068 0.000131892871983508 1.0479067243765e-13 2.5876331987547e-14 1.05594567301601e-13 4.6820894447888e-14 15848931924.8188 0.000905140219112258 -5.61373123460583e-05 0.138965397125564 0.000186954740606371 1.04709595970656e-13 2.58650503052663e-14 1.05098827326041e-13 4.6492106502042e-14 25118864315.4548 0.00142664287003509 -0.000140223315536313 0.138356735669315 0.000308776018966894 1.04500519261583e-13 2.58381244542114e-14 1.04688897836252e-13 4.63178747355266e-14 39810717055.9661 0.00272530633301468 -0.000350095185974957 0.136843676107089 0.000605859863750113 1.0397755431945e-13 2.57716120174352e-14 1.04009647435381e-13 4.61766922780358e-14 63095734449.0713 0.00591790781446365 -0.000869064571898273 0.13312554199404 0.00133928618219686 1.02691565899447e-13 2.56080951433616e-14 1.0247661838343e-13 4.59503180445121e-14 100000000000 0.0135246665656177 -0.00212388592947283 0.124269913242538 0.00312237320885028 9.96307982107169e-14 2.52171326715172e-14 9.88807853068608e-14 4.54554281839518e-14 100000000 0.00268931760432536 3.516519513902e-06 0.265862597757808 0.000107275251325478 -3.26924742999382e-13 6.19238856825245e-14 1.20542375421337e-11 -8.48203439988316e-13 158489319.2463 0.00266054208591455 1.30453333977427e-06 0.265133648219149 5.15782956208577e-05 -4.87700670590393e-14 4.06191462471902e-14 5.02068580823352e-12 -3.09486990666681e-13 251188643.151556 0.00264892124786111 3.94413799365405e-07 0.264836487178287 2.91571831279591e-05 6.44885202165315e-14 3.19442900484712e-14 2.15676655085342e-12 -9.01431666508862e-14 398107170.55492 0.00264449443996403 5.01443262680956e-09 0.264716236170462 2.07923643020247e-05 1.09987482187672e-13 2.84593074108082e-14 1.00623309030751e-12 -2.051643444617e-15 630957344.483199 0.00264333318303503 -2.10302880872768e-07 0.264666019617813 1.90277732824429e-05 1.28166147940637e-13 2.70667580800171e-14 5.46495586068719e-13 3.30839850616159e-14 1000000000.00595 0.002644396491181 -4.45901699891645e-07 0.264640694388722 2.20658645795346e-05 1.3541253089208e-13 2.65112765593527e-14 3.63107964279745e-13 4.69470605564498e-14 1584893192.47244 0.00264865311929563 -9.14099356518369e-07 0.264618083447359 3.14728421161869e-05 1.38296261454852e-13 2.6289339357917e-14 2.89843904938074e-13 5.21555637710229e-14 2511886431.53052 0.00265997049840623 -2.03254116746923e-06 0.264581197166174 5.04606129531626e-05 1.39437845923802e-13 2.61996314662394e-14 2.60281624285077e-13 5.36651597661752e-14 3981071705.5729 0.00268862440804778 -4.79282303991451e-06 0.264507555119682 7.97358396020242e-05 1.39876222888621e-13 2.61616433638722e-14 2.47997988832256e-13 5.35408389194285e-14 6309573444.86956 0.00276062206231177 -1.16577699895236e-05 0.264350161175611 0.000116084323518839 1.40011533664873e-13 2.61427542063564e-14 2.42650927085699e-13 5.29165918023586e-14 10000000000.1191 0.00294122081106319 -2.88144652366362e-05 0.26398494848228 0.000164559189634039 1.39968258649672e-13 2.61276049236456e-14 2.40156885160713e-13 5.23940125609276e-14 15848931924.8188 0.00339329843368359 -7.17504208276524e-05 0.263091695391497 0.000255230893564162 1.39708553051203e-13 2.61033750467147e-14 2.38634559885453e-13 5.20758806418491e-14 25118864315.4548 0.00451917147614101 -0.000178884383367524 0.260878242996115 0.000465226528335583 1.3900211774577e-13 2.60486964529006e-14 2.36824885189537e-13 5.1845086494148e-14 39810717055.9661 0.00728758548020216 -0.000443728426085672 0.255441415478833 0.000976897292862378 1.37242156893724e-13 2.59164177490824e-14 2.3317695460942e-13 5.15334178189634e-14 63095734449.0713 0.0138868636889167 -0.00108368195745917 0.242489038376926 0.00220903766216701 1.33040755141331e-13 2.56012944066924e-14 2.24798632448399e-13 5.08938327818434e-14 100000000000 0.0285219971221083 -0.00255247998149954 0.213799024057911 0.00502868756423869 1.23736857970834e-13 2.48988309856584e-14 2.06367725354104e-13 4.95082642854166e-14 100000000 0.0107917935303041 2.52169893692595e-05 0.346862468529489 0.00029569265085988 -2.18187597933475e-12 3.63532947512906e-13 1.14917692960908e-11 -1.50235772720323e-12 158489319.2463 0.0106502167661352 5.12422388605845e-06 0.346200670714297 0.000202051560727612 -7.70816591256098e-13 1.63480942545476e-13 4.90390093014485e-12 -5.68372805609571e-13 251188643.151556 0.0105928536282364 -3.06068323898195e-06 0.345930815364229 0.000164256084664471 -1.97041748363488e-13 8.21343363041794e-14 2.22508514567181e-12 -1.88599539292933e-13 398107170.55492 0.0105703401491623 -6.38384388491973e-06 0.345820582567904 0.000149783502605472 3.33324768151903e-14 4.9473009188044e-14 1.14949710356617e-12 -3.61436383002387e-14 630957344.483199 0.0105626498115104 -7.80393649147917e-06 0.345771846230274 0.000145729863484156 1.25356854450408e-13 3.64258686559144e-14 7.19781575410082e-13 2.46933940923454e-14 1000000000.00595 0.0105628577444756 -8.60240353988591e-06 0.345740803339228 0.000148225142305447 1.62038591331388e-13 3.12242352164513e-14 5.48337382671242e-13 4.8796404260281e-14 1584893192.47244 0.0105711623644057 -9.50213071604344e-06 0.34570035294344 0.000158306239577077 1.76641053998651e-13 2.91513067688553e-14 4.79742703275918e-13 5.80736664238091e-14 2511886431.53052 0.0105951100007975 -1.1312417167713e-05 0.345618548123719 0.000179639000312981 1.82434173739731e-13 2.83237349526357e-14 4.51866357889582e-13 6.11860400019057e-14 3981071705.5729 0.0106564383381618 -1.56513089100291e-05 0.345435981103873 0.000214618612756456 1.84687754686933e-13 2.79900061421113e-14 4.39981617207552e-13 6.16769353960205e-14 6309573444.86956 0.0108107194476105 -2.64067285413946e-05 0.345013844218856 0.00026452826976725 1.85454086638839e-13 2.78485741568367e-14 4.34400434117528e-13 6.12720094928704e-14 10000000000.1191 0.0111970945844045 -5.32501816976665e-05 0.343996203528514 0.000346111557810169 1.85433372949141e-13 2.77727478064002e-14 4.31097129066147e-13 6.07971676105651e-14 15848931924.8188 0.0121595631110787 -0.000120150203066477 0.341489127289446 0.000518442432418553 1.84615233094157e-13 2.76949167273746e-14 4.27602539245328e-13 6.04094693133894e-14 25118864315.4548 0.0145272875849024 -0.000285292849143677 0.33533666691415 0.000927185133442532 1.82302485869484e-13 2.75472400951059e-14 4.21012428887854e-13 5.99371648621752e-14 39810717055.9661 0.0201775837257191 -0.000682995533267197 0.32066472508581 0.00190178391813789 1.76670293789758e-13 2.72114559509001e-14 4.06092661044606e-13 5.90296102961722e-14 63095734449.0713 0.0327377015395726 -0.00158796586549639 0.288075266695613 0.00410158939498817 1.64120973247895e-13 2.64697436811266e-14 3.73259737444403e-13 5.70966432617896e-14 100000000000 0.0567509783678913 -0.00342680498446061 0.225886873483625 0.00849388150046387 1.40180314589944e-13 2.50460883048516e-14 3.10767306063272e-13 5.34216050919078e-14 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_dc.standard0000644000175000017500000001016514163340332025724 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000198932934336656 6.11501442806688e-07 0.76 0.00028506059696585 8.39889658205762e-07 0.77 0.000407291038251369 1.15783742834348e-06 0.78 0.000579489286888004 1.60020108573775e-06 0.79 0.000819644894430743 2.21406246467679e-06 0.8 0.00115013616150002 3.06170736205e-06 0.81 0.00159731804343143 4.22340856404583e-06 0.82 0.00219015482338143 5.79947283588004e-06 0.83 0.00295788070572487 7.91104779702086e-06 0.84 0.0039271023948528 1.06994757384555e-05 0.85 0.0051191086091708 1.43244502017051e-05 0.86 0.0065481302705414 1.89617074497762e-05 0.87 0.00822087133698357 2.48014979182614e-05 0.88 0.0101370974703204 3.20502476861012e-05 0.89 0.0122907455875397 4.09414621862401e-05 0.9 0.0146709579353255 5.17730667106882e-05 0.91 0.017262451109238 6.50212615607936e-05 0.92 0.0200443820676863 8.16724766775843e-05 0.93 0.0229860231290677 0.000104129464072303 0.94 0.0260365311731058 0.000138301633365719 0.95 0.0291099995123472 0.000196559408134859 0.96 0.0320860254836111 0.00029615402038683 0.97 0.0348613894830766 0.00044621105941113 0.98 0.0374250717862737 0.000639448693827507 0.99 0.0398360501030314 0.000863340478576728 1 0.0421558349100468 0.00110968995779143 1.01 0.0444268185798251 0.00137525619297864 1.02 0.0466739714109179 0.00165989273898234 1.03 0.0489094425203361 0.0019651338720995 1.04 0.0511360683890398 0.002293475485448 1.05 0.0533497924815764 0.00264809328091372 0.75 0.000199332506439964 6.09111173420781e-07 0.76 0.000285624772509797 8.36797762685886e-07 0.77 0.000408087551573032 1.1538512344439e-06 0.78 0.000580614075080642 1.5950816399136e-06 0.79 0.000821234522519581 2.20751451059357e-06 0.8 0.00115238627435061 3.05336227368133e-06 0.81 0.00160051027371258 4.21278773018602e-06 0.82 0.00219469401517172 5.78590268303096e-06 0.83 0.00296434209770016 7.8934671511483e-06 0.84 0.00393628533343157 1.0676021026415e-05 0.85 0.00513209290515645 1.42915941923526e-05 0.86 0.00656633859885553 1.89124668828225e-05 0.87 0.00824616006319308 2.47215232253186e-05 0.88 0.0101719318782326 3.19086132151858e-05 0.89 0.0123385730421553 4.06671926319705e-05 0.9 0.0147370081154802 5.11914651631547e-05 0.91 0.0173554676582056 6.36743206267974e-05 0.92 0.0201804922460998 7.83065636479794e-05 0.93 0.0231976200260681 9.5278454014909e-05 0.94 0.0263917836887916 0.000114786224690098 0.95 0.0297474288199703 0.000137051845898381 0.96 0.0332482660618469 0.000162383895009895 0.97 0.036876237907018 0.000191374958028406 0.98 0.0406082619260458 0.000225548063431176 0.99 0.0444068009499276 0.000269328654632324 1 0.0481984380695761 0.000334799667234967 1.01 0.0518542654383783 0.000447041869542038 1.02 0.055242805851937 0.000634978029209503 1.03 0.0583463426545732 0.000904751175024917 1.04 0.0612518012581271 0.00123602314800671 1.05 0.0640526227030844 0.00160395110492789 0.75 0.000199767015220033 5.01379883968754e-07 0.76 0.000286217961736307 6.91350922870809e-07 0.77 0.000408887970477511 9.5825515112846e-07 0.78 0.000581676310724472 1.33347869956923e-06 0.79 0.000822611962945041 1.8602305168069e-06 0.8 0.00115411719016871 2.59688320189603e-06 0.81 0.00160259661511101 3.62037931697063e-06 0.82 0.00219707601092017 5.02911827837451e-06 0.83 0.0029668767403858 6.94461482332616e-06 0.84 0.00393873971078055 9.51134860194472e-06 0.85 0.0051341603691924 1.28946280854077e-05 0.86 0.00656767757501089 1.72767937915148e-05 0.87 0.00824644793677916 2.28524265023231e-05 0.88 0.0101709258293926 2.98232816842885e-05 0.89 0.0123361763113842 3.83935203747988e-05 0.9 0.0147333497911759 4.87656033038764e-05 0.91 0.0173510127481885 6.11370553287125e-05 0.92 0.0201762056229304 7.56982099932648e-05 0.93 0.0231952150999982 9.26309941411439e-05 0.94 0.026394101040412 0.000112108795874798 0.95 0.029759031510702 0.000134297472894857 0.96 0.0332764742539818 0.000159357615628856 0.97 0.0369332818652615 0.000187448340188677 0.98 0.0407166951853638 0.000218733382848193 0.99 0.0446142720265179 0.000253392005583279 1 0.0486137092202882 0.000291643706463591 1.01 0.0527024021936575 0.00033382032625068 1.02 0.0568661588445888 0.000380610565436024 1.03 0.0610850852117071 0.000433917336943235 1.04 0.0653210462289073 0.000499646894964191 1.05 0.0694886505045041 0.000594726207476925 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_full_subtran.standard0000644000175000017500000003033714163340332026411 0ustar carstencarstenV(coll) I(coll) I(base) -1 -0.0520113174807833 4.20712208999021e-07 -0.95 -0.0346100468270519 2.65093720799667e-07 -0.9 -0.0187994257705838 1.40032978330164e-07 -0.85 -0.00654717236322926 5.08869488656954e-08 -0.8 -0.000998181345118348 9.31560241472968e-09 -0.75 -8.62756876319437e-05 1.06584190245026e-09 -0.7 -6.73878381839292e-06 1.12625887940644e-10 -0.65 -5.21783797946706e-07 1.23243986721383e-11 -0.6 -4.03824105392833e-08 1.81698155918604e-12 -0.55 -3.12665824798679e-09 6.76856774371667e-13 -0.5 -2.42965615970232e-10 5.13223358941595e-13 -0.45 -1.96351460669463e-11 4.51378382610176e-13 -0.4 -2.25089545040795e-12 4.00143680474535e-13 -0.35 -8.12380036120183e-13 3.50014977024397e-13 -0.3 -6.0870592542569e-13 3.00001561175658e-13 -0.25 -5.00674546330508e-13 2.50000162729004e-13 -0.2 -4.00052271783119e-13 2.00000016957843e-13 -0.15 -3.00004049703339e-13 1.50000001763648e-13 -0.0999999999999997 -2.00000312192269e-13 1.00000000180596e-13 -0.0499999999999997 -1.00000022462903e-13 5.00000000163501e-14 3.19189119579733e-16 7.32062920045099e-28 -4.13763715613606e-28 0.0500000000000003 1.00000001741141e-13 -5.00000000009859e-14 0.1 2.0000000187537e-13 -1.00000000000363e-13 0.15 3.00000001884962e-13 -1.49999999999571e-13 0.2 4.00000001884883e-13 -1.99999999998761e-13 0.25 5.00000001884052e-13 -2.49999999997948e-13 0.3 6.00000001883163e-13 -2.99999999997134e-13 0.35 7.00000001882268e-13 -3.49999999996318e-13 0.4 8.00000001881373e-13 -3.99999999995502e-13 0.45 9.00000001880477e-13 -4.49999999994686e-13 0.5 1.00000000187958e-12 -4.9999999999387e-13 0.55 1.10000000187869e-12 -5.49999999993054e-13 0.6 1.20000000187779e-12 -5.99999999992239e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.700000000000001 1.40000000187601e-12 -6.99999999990613e-13 0.750000000000001 1.50000000187513e-12 -7.49999999989805e-13 0.800000000000001 1.60000000187425e-12 -7.99999999989e-13 0.850000000000001 1.70000000187337e-12 -8.49999999988201e-13 0.900000000000001 1.8000000018725e-12 -8.99999999987409e-13 0.950000000000001 1.90000000187164e-12 -9.49999999986627e-13 1 2.0000000018708e-12 -9.99999999985856e-13 -1 -0.0703825488740414 7.5986969134449e-06 -0.95 -0.0527730897778253 5.7086292788202e-06 -0.9 -0.0360629809604597 3.95539285716696e-06 -0.85 -0.0209387551764245 2.37914713400335e-06 -0.8 -0.00888118232758176 1.09024140498308e-06 -0.75 -0.00217956314295522 3.11032483690855e-07 -0.7 -0.000326192593393373 5.77894593229088e-08 -0.65 -4.16060534061813e-05 9.34561822815904e-09 -0.6 -5.1747329439235e-06 1.47889313090219e-09 -0.55 -6.41562053787962e-07 2.33741839086217e-10 -0.5 -7.95149897654552e-08 3.7271614360115e-11 -0.45 -9.85598716780062e-09 6.24819688214121e-12 -0.4 -1.2223473243613e-09 1.31426213179033e-12 -0.35 -1.52125371277211e-10 4.94160893177278e-13 -0.3 -1.93728079797398e-11 3.22731046175962e-13 -0.25 -2.82755212063365e-12 2.53583945048554e-13 -0.2 -6.8856767028373e-13 2.00564823423892e-13 -0.15 -3.35729388150526e-13 1.50088767268052e-13 -0.0999999999999997 -2.04372215539428e-13 1.00013702567131e-13 -0.0499999999999997 -1.0048258456406e-13 5.00018663392898e-14 3.19189119579733e-16 1.02522887597419e-24 -1.02491263365509e-24 0.0500000000000003 1.00059890110701e-13 -5.00002942865441e-14 0.1 2.00067325493415e-13 -1.00000340690779e-13 0.15 3.00068249433837e-13 -1.50000348010429e-13 0.2 4.00068364767331e-13 -2.00000349169414e-13 0.25 5.00068379635728e-13 -2.50000349360271e-13 0.3 6.00068382013356e-13 -3.00000349403208e-13 0.35 7.0006838286778e-13 -3.5000034942944e-13 0.4 8.0006838347611e-13 -4.00000349462196e-13 0.45 9.00068384090464e-13 -4.50000349507768e-13 0.5 1.00006838471678e-12 -5.00000349571327e-13 0.55 1.10006838536083e-12 -5.50000349658255e-13 0.6 1.20006838602965e-12 -6.00000349775264e-13 0.65 1.30006838673201e-12 -6.50000349930759e-13 0.700000000000001 1.40006838747885e-12 -7.00000350135319e-13 0.750000000000001 1.50006838828387e-12 -7.50000350402272e-13 0.800000000000001 1.60006838916421e-12 -8.00000350748325e-13 0.850000000000001 1.70006839014097e-12 -8.50000351194159e-13 0.900000000000001 1.80006839123967e-12 -9.00000351764851e-13 0.950000000000001 1.90006839249037e-12 -9.5000035249005e-13 1 2.00006839392759e-12 -1.00000035340386e-12 -1 -0.0809385785378155 2.58806867672907e-05 -0.95 -0.0632073002134127 2.04246217165291e-05 -0.9 -0.0461854511686571 1.5207280663008e-05 -0.85 -0.0303117961204215 1.03085994470561e-05 -0.8 -0.0164648115676533 5.92402659852601e-06 -0.75 -0.00632830359675792 2.51701837349361e-06 -0.7 -0.00148561438994417 6.95161557751108e-07 -0.65 -0.000249319753928541 1.43148765244338e-07 -0.6 -3.80373637569791e-05 2.71159592590012e-08 -0.55 -5.70770391853374e-06 5.0623450913958e-09 -0.5 -8.54346155495542e-07 9.43298045785592e-10 -0.45 -1.2784306097037e-07 1.75993998582587e-10 -0.4 -1.91314890250821e-08 3.30836742690138e-11 -0.35 -2.86375903617674e-09 6.43513515406283e-12 -0.3 -4.29130415279773e-10 1.4329144263712e-12 -0.25 -6.46468588814826e-11 4.60891731060616e-13 -0.2 -1.00004154115368e-11 2.3922618471911e-13 -0.15 -1.73364378203162e-12 1.57264868533292e-13 -0.0999999999999997 -4.10644435820768e-13 1.01314194388694e-13 -0.0499999999999997 -1.27449588452084e-13 5.02062762161081e-14 3.19189119579733e-16 4.13279810624219e-23 -4.13275963694711e-23 0.0500000000000003 1.04114583320986e-13 -5.00384053487149e-14 0.1 2.04731652502394e-13 -1.00045555870753e-13 0.15 3.04824270460872e-13 -1.50046887327495e-13 0.2 4.04838203865248e-13 -2.00047135470788e-13 0.25 5.04840323978202e-13 -2.50047182071703e-13 0.3 6.04840668972566e-13 -3.00047191371176e-13 0.35 7.04840746988391e-13 -3.50047194039545e-13 0.4 8.04840786137623e-13 -4.00047195904461e-13 0.45 9.04840817382997e-13 -4.5004719821185e-13 0.5 1.00484084912651e-12 -5.0004720134087e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.6 1.20484091556539e-12 -6.00047211416852e-13 0.65 1.30484095105248e-12 -6.50047219118788e-13 0.700000000000001 1.40484098873755e-12 -7.00047229258665e-13 0.750000000000001 1.50484102929251e-12 -7.50047242489291e-13 0.800000000000001 1.60484107355056e-12 -8.00047259623834e-13 0.850000000000001 1.70484112253622e-12 -8.50047281666002e-13 0.900000000000001 1.80484117749049e-12 -9.000473098356e-13 0.950000000000001 1.90484123988616e-12 -9.50047345584438e-13 1 2.00484131143035e-12 -1.00004739059955e-12 -1 -0.0901582266494339 6.37825347343624e-05 -0.95 -0.0723296898057687 5.19282363042761e-05 -0.9 -0.0550968586345848 4.03956963221406e-05 -0.85 -0.0387755678013749 2.93155350688671e-05 -0.8 -0.0239561786533135 1.89778075543776e-05 -0.75 -0.0117756087595943 1.0053277447747e-05 -0.7 -0.00396498354486824 3.82097334931164e-06 -0.65 -0.000886473452927031 1.01350424264434e-06 -0.6 -0.000161688327029087 2.24756906172371e-07 -0.55 -2.80231403443391e-05 4.76485792986311e-08 -0.5 -4.81109778001184e-06 1.00170611332649e-08 -0.45 -8.2469839196095e-07 2.10303718609914e-09 -0.4 -1.4134396982677e-07 4.41643675949495e-10 -0.35 -2.4227516485103e-08 9.2943230153566e-11 -0.3 -4.15379995551288e-09 1.97291399022122e-11 -0.25 -7.12558289198761e-10 4.32583869571653e-12 -0.2 -1.22439019743414e-10 1.05399191697992e-12 -0.15 -2.11496966285004e-11 3.27896676797948e-13 -0.0999999999999997 -3.69050201544787e-12 1.36020050092731e-13 -0.0499999999999997 -6.11457132896305e-13 5.62476512774122e-14 3.19189119579733e-16 5.7461910708586e-22 -5.74617538830381e-22 0.0500000000000003 1.87854994237441e-13 -5.13110528350813e-14 0.1 3.0295595731722e-13 -1.01586174582293e-13 0.15 4.05553915331132e-13 -1.51643910314519e-13 0.2 5.06001641820725e-13 -2.01656029817105e-13 0.25 6.06079252469796e-13 -2.51658579322782e-13 0.3 7.0609308713852e-13 -3.01659124174776e-13 0.35 8.06095918596771e-13 -3.51659253453597e-13 0.4 9.06096927560875e-13 -4.01659302579948e-13 0.45 1.00609747418798e-12 -4.51659345731853e-13 0.5 1.10609802342872e-12 -5.01659397655088e-13 0.55 1.20609858701805e-12 -5.51659469233907e-13 0.6 1.30609917111184e-12 -6.01659566228016e-13 0.65 1.40609978317112e-12 -6.51659695775775e-13 0.700000000000001 1.50610043237044e-12 -7.01659866734874e-13 0.750000000000001 1.60610113003345e-12 -7.51660090103465e-13 0.800000000000001 1.70610189012316e-12 -8.01660379506941e-13 0.850000000000001 1.8061027297529e-12 -8.51660751709872e-13 0.900000000000001 1.90610366965299e-12 -9.01661227087135e-13 0.950000000000001 2.00610473451465e-12 -9.51661829975587e-13 1 2.10610595314704e-12 -1.00166258884111e-12 -1 -0.110743783023597 0.000314995475986577 -0.95 -0.0927333034154659 0.000269815036849489 -0.9 -0.0751565159682735 0.000224550656481459 -0.85 -0.0581879538929606 0.000179486811908529 -0.8 -0.0421161840348076 0.000135182605945643 -0.75 -0.0274443708531752 9.27880583668619e-05 -0.7 -0.0150627875499399 5.47115320943841e-05 -0.65 -0.00630287371918794 2.53639128974938e-05 -0.6 -0.00190283690455268 8.79895193405334e-06 -0.55 -0.000460405627788717 2.50649977029482e-06 -0.5 -0.000102725781936177 6.64117785930846e-07 -0.45 -2.24536180330178e-05 1.72724430398526e-07 -0.4 -4.88606101444458e-06 4.47331684197559e-08 -0.35 -1.06243935015202e-06 1.15741963852966e-08 -0.3 -2.31032409282603e-07 2.99373642805017e-09 -0.25 -5.02420933070778e-08 7.73938969685519e-10 -0.2 -1.0916221320447e-08 1.99673893729005e-10 -0.15 -2.35814601792231e-09 5.10849769678289e-11 -0.0999999999999997 -4.94687866159074e-10 1.26107853217443e-11 -0.0499999999999997 -8.86157347744243e-11 2.62118389382508e-12 3.19189119579733e-16 5.07445191257107e-20 -5.07442792110213e-20 0.0500000000000003 1.94164777666028e-11 -7.15115980684117e-13 0.1 2.37362631489751e-11 -9.37168816903767e-13 0.15 2.47592708794265e-11 -1.03167582590547e-12 0.2 2.50615027849804e-11 -1.09318937581662e-12 0.25 2.52059367881364e-11 -1.14616845893612e-12 0.3 2.531576928354e-11 -1.1969403027811e-12 0.35 2.54180003420237e-11 -1.24714185015951e-12 0.4 2.55185581077797e-11 -1.29719682278983e-12 0.45 2.56187471816562e-11 -1.3472151832402e-12 0.5 2.5718861240894e-11 -1.3972258228275e-12 0.55 2.58189497045321e-11 -1.44723708225669e-12 0.6 2.59190398648851e-11 -1.49725087192221e-12 0.65 2.60191340679526e-11 -1.54726946598352e-12 0.700000000000001 2.61192336842503e-11 -1.59729418087354e-12 0.750000000000001 2.6219340381254e-11 -1.64732663329408e-12 0.800000000000001 2.63194561911687e-11 -1.69736880465378e-12 0.850000000000001 2.64195835836579e-11 -1.74742311306047e-12 0.900000000000001 2.65197255396955e-11 -1.79749248726664e-12 0.950000000000001 2.66198856185836e-11 -1.84758043423692e-12 1 2.67200680086793e-11 -1.89769109076048e-12 -1 -0.131919958294417 0.00103205198706612 -0.95 -0.113766087354581 0.000920110905009286 -0.9 -0.0959479548160991 0.000804723823044846 -0.85 -0.0785737886245484 0.000686070821908316 -0.8 -0.0618075988683638 0.000564700719451459 -0.75 -0.04590900268868 0.000441914349457079 -0.7 -0.0313054041200267 0.000320568658666913 -0.65 -0.018704976543953 0.000206652232214985 -0.6 -0.00914609086177926 0.000111237725957658 -0.55 -0.00346425618992814 4.75197739761625e-05 -0.5 -0.00105771189078854 1.66810398455425e-05 -0.45 -0.000289987968522632 5.30466820852998e-06 -0.4 -7.66844232894153e-05 1.63105721430182e-06 -0.35 -2.00792592293582e-05 4.96673546352121e-07 -0.3 -5.24529025087894e-06 1.50796198969352e-07 -0.25 -1.3692362766348e-06 4.56952331474514e-08 -0.2 -3.56715769455681e-07 1.37871696314938e-08 -0.15 -9.2088298377075e-08 4.10234062584668e-09 -0.0999999999999997 -2.28718769828144e-08 1.16293356244696e-09 -0.0499999999999997 -4.74997791826563e-09 2.70795476437916e-10 3.19189119579733e-16 1.25419294976992e-18 -1.25417949496255e-18 0.0500000000000003 1.24669735588119e-09 -8.22201701316992e-11 0.1 1.57445220167567e-09 -1.07208483166248e-10 0.15 1.66082092770551e-09 -1.14827166397559e-10 0.2 1.68368081177221e-09 -1.17174245923244e-10 0.25 1.6898008448863e-09 -1.17921427425265e-10 0.3 1.6914993456255e-09 -1.18183065063899e-10 0.35 1.69202722522847e-09 -1.18297369916869e-10 0.4 1.69224436294886e-09 -1.18366999934353e-10 0.45 1.69237879015318e-09 -1.18423127359337e-10 0.5 1.69249116824324e-09 -1.18475233187086e-10 0.55 1.69259828101813e-09 -1.18526220357413e-10 0.6 1.69270300436707e-09 -1.18577073524106e-10 0.65 1.6928076727734e-09 -1.1862791417044e-10 0.700000000000001 1.69291259076704e-09 -1.18679042716462e-10 0.750000000000001 1.69301783812884e-09 -1.18730536021971e-10 0.800000000000001 1.69312351089318e-09 -1.18782487504224e-10 0.850000000000001 1.69322972471597e-09 -1.18835010272802e-10 0.900000000000001 1.69333661834713e-09 -1.18888240543327e-10 0.950000000000001 1.69344435708192e-09 -1.18942341084121e-10 1 1.69355313587788e-09 -1.1899750435151e-10 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_sh_ac.standard0000644000175000017500000020136114163340332026413 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 10000000000 6.91889682297889e-05 -2.12327813064436e-05 0.0071799380396357 2.6935026098851e-05 7.34019197073553e-14 2.74112728058529e-14 3.01455682284867e-14 4.95927860655873e-14 12599210498.9563 9.84232754206027e-05 -3.37013763900279e-05 0.00716576035959568 4.21979029683328e-05 7.33957654048775e-14 2.74087557573256e-14 3.01422921024236e-14 4.95905847019625e-14 15874010519.701 0.00014481735200279 -5.34890813907522e-05 0.00714326057165229 6.64228038790293e-05 7.33859971190923e-14 2.74047613227592e-14 3.01374294596828e-14 4.95870720907249e-14 20000000000 0.000218431893220918 -8.48876235122269e-05 0.00710755910090021 0.000104868853568141 7.33704966456444e-14 2.73984232316794e-14 3.01299256795542e-14 4.95814858657452e-14 10000000000 7.85118357332132e-05 -2.14631245446247e-05 0.0102424522352055 2.77196302873595e-05 7.42294092409832e-14 2.74691670336648e-14 3.14202663764367e-14 4.97934612949534e-14 12599210498.9563 0.000108711515541143 -3.40667389455913e-05 0.0102273406759049 4.31843850916547e-05 7.42229184531763e-14 2.74665862076343e-14 3.14163867520985e-14 4.97912136158899e-14 15874010519.701 0.000156637056107236 -5.40685567670545e-05 0.0102033591625528 6.77295691243196e-05 7.42126147019425e-14 2.74624906905316e-14 3.14108908248651e-14 4.97876091332405e-14 20000000000 0.00023268020354987 -8.5806435630824e-05 0.0101653073211377 0.000106683583586786 7.41962639022706e-14 2.74559923675899e-14 3.14025866506289e-14 4.97818656042061e-14 10000000000 9.16016561990104e-05 -2.17549872224266e-05 0.0145245132113977 2.88591438141195e-05 7.53657417539171e-14 2.75294157104145e-14 3.32345348584253e-14 5.00543513176367e-14 12599210498.9563 0.000123161613552193 -3.45296247352447e-05 0.0145080403124031 4.45980742550534e-05 7.53587653489027e-14 2.75267488433132e-14 3.32296111075486e-14 5.00520486328644e-14 15874010519.701 0.00017324502229804 -5.48026206428986e-05 0.0144818989224534 6.95782266604827e-05 7.53476880016091e-14 2.75225170227158e-14 3.32230786028216e-14 5.00483211368639e-14 20000000000 0.000252709951412213 -8.69702022937443e-05 0.0144404211470735 0.000109222051261515 7.53301082512461e-14 2.75158026906839e-14 3.32135206064474e-14 5.0042359987557e-14 10000000000 0.000109924533039156 -2.21291884059413e-05 0.0204266643651578 3.05476161674978e-05 7.69138459376311e-14 2.75925653726563e-14 3.58156018981026e-14 5.03955877496026e-14 12599210498.9563 0.000143400162958234 -3.51230025584342e-05 0.0204081869297039 4.66627632748629e-05 7.69061639202851e-14 2.75897811843904e-14 3.58088639958012e-14 5.03932242282153e-14 15874010519.701 0.000196522347023041 -5.57434874680991e-05 0.0203788653226683 7.22397395593321e-05 7.68939610437347e-14 2.75853636302338e-14 3.58006105846886e-14 5.0389331883425e-14 20000000000 0.000280805578855675 -8.84615857736525e-05 0.0203323434816083 0.000112829982516549 7.6874592406573e-14 2.75783550521226e-14 3.57890517174515e-14 5.03830662564237e-14 10000000000 0.000135423715362181 -2.26104307499273e-05 0.0284063344102437 3.30950069623026e-05 7.89920451558102e-14 2.76593633995618e-14 3.94710519332082e-14 5.0840714224545e-14 12599210498.9563 0.000171582824566772 -3.58859401928798e-05 0.0283848826072202 4.97283210100785e-05 7.89833337411875e-14 2.76564186261532e-14 3.94611880921612e-14 5.0838292603046e-14 15874010519.701 0.000228961457388199 -5.69529688015131e-05 0.0283508424211035 7.61272570231064e-05 7.89694862525683e-14 2.76517470792527e-14 3.94500665292346e-14 5.08341803761258e-14 20000000000 0.000319993048204792 -9.03783517052637e-05 0.0282968371834818 0.000118020791181839 7.89475022398297e-14 2.76443362990596e-14 3.94352753202702e-14 5.08274856336081e-14 10000000000 0.000170595357712282 -2.32255622253383e-05 0.0389269714416843 3.69912689016094e-05 8.17220042372713e-14 2.77308129474531e-14 4.459794553191e-14 5.14145892570244e-14 12599210498.9563 0.00021047333425433 -3.68607705357069e-05 0.0389010898540234 5.4335835209085e-05 8.17117906760436e-14 2.77276490904006e-14 4.45828098233136e-14 5.14121305384886e-14 15874010519.701 0.000273750180292888 -5.84978935810401e-05 0.0388600227569574 8.18629225761702e-05 8.16955388651923e-14 2.77226314662642e-14 4.4566946117922e-14 5.14077277340578e-14 20000000000 0.000374131707894909 -9.28260010888509e-05 0.0387948745387134 0.000125544986326387 8.16697289016498e-14 2.77146730089849e-14 4.45469143083541e-14 5.14004263345249e-14 10000000000 0.000218522714740984 -2.40002787698047e-05 0.0523688919223876 4.29883013403631e-05 8.52071430172816e-14 2.78082299925175e-14 5.16718729812624e-14 5.21394991789351e-14 12599210498.9563 0.000263467427630184 -3.8087688423817e-05 0.0523364305758273 6.12983271707224e-05 8.519474895801e-14 2.78047703893484e-14 5.16481475032449e-14 5.21370568250309e-14 15874010519.701 0.000334779231462317 -6.04413556579444e-05 0.0522849271935512 9.03565970797327e-05 8.51749999129149e-14 2.77992864153263e-14 5.16246022898853e-14 5.21322749052296e-14 20000000000 0.000447895357504355 -9.59036849881687e-05 0.0522032322012639 0.000136465669499319 8.5143621084743e-14 2.77905905841534e-14 5.15961323197827e-14 5.21241174469701e-14 10000000000 0.000282847775760068 -2.4954999242173e-05 0.0689145633845314 5.21838509000006e-05 8.95046901937636e-14 2.78933067491346e-14 6.12002984021995e-14 5.3030010293009e-14 12599210498.9563 0.000334532655149326 -3.95978255125889e-05 0.068872441429582 7.17795401130594e-05 8.94891710393033e-14 2.78894548930873e-14 6.11632086877641e-14 5.30276876264746e-14 15874010519.701 0.000416531364113536 -6.28313406709919e-05 0.0688056172883611 0.000102876500700011 8.94643987425891e-14 2.7883353924201e-14 6.11276154743699e-14 5.30224185818421e-14 20000000000 0.000546580576972272 -9.9685762939512e-05 0.0686996364271483 0.000152216166124153 8.94250155489148e-14 2.78736836960905e-14 6.10858039476949e-14 5.30130629061644e-14 10000000000 0.000367686481229737 -2.61022264335081e-05 0.0884482087761738 6.6077292714628e-05 9.46015472936217e-14 2.79882147224435e-14 7.36343480751516e-14 5.40884021323826e-14 12599210498.9563 0.000428069804774859 -4.14082381360389e-05 0.0883922116514203 8.73404315127058e-05 9.4581643982002e-14 2.79838546589371e-14 7.35775818171815e-14 5.40863689990866e-14 15874010519.701 0.000523857271436908 -6.56919507592454e-05 0.0883033868280527 0.000121080930828243 9.45498083715087e-14 2.79769570818166e-14 7.35238643477094e-14 5.40804845124458e-14 20000000000 0.000675746555945919 -0.000104207064465772 0.0881625413239921 0.000174608218466266 9.44991624243605e-14 2.79660308969589e-14 7.34615584178248e-14 5.40694773699043e-14 10000000000 0.000477538809056909 -2.74492592242466e-05 0.110523552099528 8.65724691828107e-05 1.00408362146377e-13 2.80958563850672e-14 8.92605121484926e-14 5.53033683039065e-14 12599210498.9563 0.000548764584174814 -4.3524432604949e-05 0.110448248965094 0.000109931474325142 1.00382485237766e-13 2.8090854967132e-14 8.91764629635597e-14 5.5301870609951e-14 15874010519.701 0.000661734533940369 -6.90256448474534e-05 0.110328819221886 0.000146993822125685 1.00341002323869e-13 2.80829569628671e-14 8.90967470924401e-14 5.52952215451775e-14 20000000000 0.000840826778354512 -0.000109464706591647 0.110139491698825 0.000205780939795175 1.00274963279877e-13 2.80704571098545e-14 8.90041082609064e-14 5.528198817673e-14 10000000000 0.000617282162742726 -2.90112837121926e-05 0.134429739508161 0.000115949698104523 1.06782018278168e-13 2.82205533063868e-14 1.08124533698879e-13 5.66540263957575e-14 12599210498.9563 0.000701555220066655 -4.59572187006192e-05 0.134328574898445 0.000141859719462789 1.06748269015704e-13 2.82147618555489e-14 1.08004847656942e-13 5.66533808590904e-14 15874010519.701 0.000835194374451829 -7.28360736341591e-05 0.1341681597656 0.000182963963121952 1.06694040209648e-13 2.82056397631156e-14 1.07889610390384e-13 5.6645793359464e-14 20000000000 0.00104699118161718 -0.000115450447258749 0.133913935964006 0.000248147594624104 1.06607651271243e-13 2.81912204744949e-14 1.07753902769176e-13 5.66296344068889e-14 10000000000 0.000792350539928887 -3.0843065698367e-05 0.159330835228765 0.000156918238851556 1.13576621440074e-13 2.83698872139711e-14 1.30046242054476e-13 5.81197634355789e-14 12599210498.9563 0.000891864917274248 -4.87638827756638e-05 0.159196325863833 0.000185851399791437 1.13532809956065e-13 2.83631366679255e-14 1.29882437706161e-13 5.81203280374233e-14 15874010519.701 0.00104963870406914 -7.71842796742284e-05 0.158983083953532 0.000231743677053253 1.13462248265202e-13 2.83525417163738e-14 1.29720758213271e-13 5.81115832633852e-14 20000000000 0.00129959746825357 -0.000122230683115523 0.158645260640645 0.000304499766202393 1.13349767906165e-13 2.83358224493251e-14 1.29526290921266e-13 5.80916597837694e-14 10000000000 0.00100925472476745 -3.31111030918884e-05 0.184413173089926 0.000212976276331489 1.20720317823579e-13 2.85594943131527e-14 1.54764168121668e-13 5.96971245198149e-14 12599210498.9563 0.00112630824478834 -5.21399156152857e-05 0.184236928775681 0.000245450867858155 1.20663854628187e-13 2.85515716052794e-14 1.54547899340954e-13 5.96992252363744e-14 15874010519.701 0.00131184126861261 -8.23113794267117e-05 0.183957595213487 0.000296949417211534 1.20572712425162e-13 2.85391957809064e-14 1.54327372614852e-13 5.96889864546761e-14 20000000000 0.00160565815007269 -0.000130117968195943 0.183515250296085 0.000378565386848495 1.20427344134721e-13 2.85197094178555e-14 1.54055054355359e-13 5.96642321954049e-14 10000000000 0.00127689117955996 -3.62734782247445e-05 0.208980702390993 0.000289487777799968 1.28335839772542e-13 2.88255046944169e-14 1.82254435797066e-13 6.14324608616176e-14 12599210498.9563 0.00141443513788411 -5.66436540115782e-05 0.208752623743573 0.00032619954497165 1.28263196812517e-13 2.88160806208752e-14 1.81976641586808e-13 6.1436216255897e-14 15874010519.701 0.00163237890182739 -8.89339111289814e-05 0.208391247321654 0.000384402030287778 1.28145716050586e-13 2.88014468354458e-14 1.81681873376961e-13 6.14238013107328e-14 20000000000 0.00197735413669999 -0.000140077620210921 0.207819261876478 0.000476603204527415 1.27958271445707e-13 2.87784691338865e-14 1.81306744882301e-13 6.13925954168121e-14 10000000000 0.00161013037830986 -4.15739701689474e-05 0.232474523843375 0.000396368508406741 1.36986493998098e-13 2.92573565874891e-14 2.13396282955099e-13 6.35016624625031e-14 12599210498.9563 0.00177338639506507 -6.38100765924418e-05 0.232179575980936 0.00043860121794026 1.36891388563283e-13 2.92457752842435e-14 2.1304331258522e-13 6.35065076093005e-14 15874010519.701 0.00203196907111344 -9.9046344799444e-05 0.231712433471999 0.000505532677234244 1.36737438233528e-13 2.92279101776923e-14 2.12649934656283e-13 6.34901845478949e-14 20000000000 0.00244101248936002 -0.00015482662036083 0.230973507929499 0.000611501388026625 1.36491834655103e-13 2.91999477636758e-14 2.12131835318942e-13 6.3449272063651e-14 10000000000 0.00204058134948849 -5.24973844664122e-05 0.254415184803332 0.000554810924875138 1.48296545661086e-13 3.00862817776875e-14 2.51591854440875e-13 6.64300306500061e-14 12599210498.9563 0.00224171648431834 -7.79699520194841e-05 0.25402285608737 0.000605710276659232 1.48163902470569e-13 3.00708832674656e-14 2.51131778347961e-13 6.64331821202367e-14 15874010519.701 0.00256010213658369 -0.000118312936008956 0.25340185570763 0.000686330765229337 1.47949464827174e-13 3.0047255162828e-14 2.50585152966488e-13 6.64077870125368e-14 20000000000 0.00306326051701189 -0.000182122568311492 0.252420505120686 0.000813856967152193 1.47607782761042e-13 3.00103800317526e-14 2.49835441589931e-13 6.63485578099043e-14 10000000000 0.00265098633405642 -7.93130411856333e-05 0.274238008959924 0.000815452054207466 1.66636979984034e-13 3.1924404343823e-14 3.0715813787411e-13 7.17096542685156e-14 12599210498.9563 0.00292404518296725 -0.000112050648992179 0.27366665037414 0.000884355139005588 1.66419763706792e-13 3.18998900095848e-14 3.06486606053448e-13 7.16999893238556e-14 15874010519.701 0.00335575766024527 -0.000163840538253008 0.272763362308563 0.000993362798702324 1.66070492786993e-13 3.18622706824795e-14 3.05616920179956e-13 7.16473183689219e-14 20000000000 0.00403670407796877 -0.000245607590181618 0.271338655951912 0.00116547047134508 1.6551593670064e-13 3.18036425413676e-14 3.04365697239668e-13 7.15407672569397e-14 10000000000 0.00369157409262958 -0.000154203446248616 0.29085616431171 0.00131180004155018 2.03519731489537e-13 3.6370571880278e-14 4.08965397679653e-13 8.34133498804784e-14 12599210498.9563 0.00414714902510068 -0.000207715849604853 0.289837840699802 0.00143105952537004 2.03025427002748e-13 3.63146010633034e-14 4.07632770856982e-13 8.3339316940639e-14 15874010519.701 0.004865092352381 -0.000292101958138295 0.288233124449912 0.00161912311129725 2.02239059154078e-13 3.62280948646253e-14 4.05728098578319e-13 8.31778878197989e-14 20000000000 0.00599174736168475 -0.00042466711180679 0.285714991843406 0.00191454305217176 2.01000470536619e-13 3.6093398865987e-14 4.02861533719652e-13 8.28965505257618e-14 10000000000 0.0059894597669595 -0.000384238862911782 0.301360158100462 0.00242557271892557 2.8651399570174e-13 4.71799796288102e-14 6.28171693925053e-13 1.11342866928186e-13 12599210498.9563 0.00703489541779136 -0.000509849351251599 0.298883084802331 0.00272221173752341 2.8467810835476e-13 4.69633802837618e-14 6.23588192196964e-13 1.10891080629254e-13 15874010519.701 0.0086642363935079 -0.000705753365620823 0.295022643583836 0.00318482028551076 2.81807962932916e-13 4.66282833319485e-14 6.16633882416963e-13 1.10135232399071e-13 20000000000 0.011177283619044 -0.00100824861547247 0.28906873244076 0.00389903675743919 2.77375966197727e-13 4.61129792853263e-14 6.06025649203901e-13 1.08937440918449e-13 10000000000 0.0121787508394441 -0.00110912678928977 0.297597593125745 0.00522036937623527 4.61336150410522e-13 7.03072489300447e-14 1.08047280051439e-12 1.7074412462596e-13 12599210498.9563 0.0152508004689774 -0.00149178864959474 0.290042525582337 0.00616008195089096 4.51332568435514e-13 6.90702891105933e-14 1.05563642827809e-12 1.67774453933153e-13 15874010519.701 0.0198458592309238 -0.00206458274697362 0.278742389837004 0.00756653920375949 4.36360581579295e-13 6.7223583755954e-14 1.01865518168356e-12 1.63277117059932e-13 20000000000 0.0265073038672413 -0.00289596964253325 0.262361660707731 0.0096075399034482 4.14652369311574e-13 6.45486559651444e-14 9.65148811175982e-13 1.56724714290611e-13 10000000000 0.0274256181136409 -0.00297217600489193 0.265246522317115 0.0115006069298689 7.2551772577959e-13 1.04520439532821e-13 1.73219642121791e-12 2.55051577185611e-13 12599210498.9563 0.0353524218629169 -0.00397323537718871 0.245729995420626 0.0139639536374332 6.77819983671812e-13 9.85162145082698e-14 1.61452997838326e-12 2.40352180385317e-13 15874010519.701 0.0459244053062874 -0.00530950417935232 0.219702000473762 0.0172516824014124 6.14202014785369e-13 9.05130369541663e-14 1.45773216590862e-12 2.20698055314709e-13 20000000000 0.0590228220474912 -0.00696762613067571 0.187456591512898 0.0213302325860779 5.3538887470803e-13 8.06008404634718e-14 1.26356098292522e-12 1.96322670861822e-13 10000000000 0.0508697350845055 -0.00575080684255548 0.209456720773546 0.0203963474876342 9.39741436674206e-13 1.30072260223861e-13 2.17096200457532e-12 3.0686646146644e-13 12599210498.9563 0.0637112152453539 -0.00735042030785879 0.179104663924175 0.0241762971841263 8.17077366540229e-13 1.14825487542069e-13 1.8808176663476e-12 2.70924642006726e-13 15874010519.701 0.0782449945948953 -0.00916291095864645 0.144754562980618 0.0284586627179947 6.78257861899094e-13 9.75753713013176e-14 1.55254930040597e-12 2.3021025095438e-13 20000000000 0.0931023341801388 -0.0110198362917446 0.109643395775615 0.0328447835056797 5.36377687085133e-13 7.99468736423305e-14 1.2170875202728e-12 1.88578320068379e-13 10000000000 0.071595244671876 -0.00792623798436885 0.163576118863211 0.0275114115164674 1.03731216830232e-12 1.38143364607313e-13 2.24817820799371e-12 3.07439198122775e-13 12599210498.9563 0.0863781116367349 -0.00970671162848175 0.130906171949156 0.0314460744681352 8.52424056000158e-13 1.1591926869234e-13 1.83938455454791e-12 2.584331104537e-13 15874010519.701 0.101227952222151 -0.0114979236991452 0.0980900466881998 0.0354041695452801 6.66720270633069e-13 9.36015367727833e-14 1.42884542771429e-12 2.09178168047938e-13 20000000000 0.114682128090205 -0.0131257467553338 0.068361541198739 0.0390006588234337 4.98518349613998e-13 7.33887484471277e-14 1.0570251227166e-12 1.645492430525e-13 10000000000 0.0857116246500984 -0.00905402940698027 0.137923635103522 0.0317407422733357 1.08645272635011e-12 1.38714757008838e-13 2.20521535679369e-12 2.91195884771209e-13 12599210498.9563 0.101101702821776 -0.0108284217599318 0.106138563303003 0.0354059275205776 8.65711327044515e-13 1.13314814046782e-13 1.74914972738969e-12 2.3886198655997e-13 15874010519.701 0.115633895998803 -0.0125068842279855 0.0761267304741593 0.0388731551921731 6.57303365806257e-13 8.93385625771639e-14 1.318608989393e-12 1.89421223884691e-13 20000000000 0.128066163376034 -0.0139481884912491 0.0504542732409716 0.0418508269097733 4.79068870370115e-13 6.88351530503244e-14 9.50421920312277e-13 1.47123555709597e-13 10000000000 0.09569334466856 -0.00959267067221116 0.124294517085802 0.034421277824358 1.1256668173897e-12 1.38096800722009e-13 2.16392890420453e-12 2.763627415915e-13 12599210498.9563 0.111477292955203 -0.0113371961340562 0.0934734744020743 0.0378288844098486 8.82189331079633e-13 1.11239260476576e-13 1.68834664336552e-12 2.24060586214287e-13 15874010519.701 0.125909311551438 -0.0129354490237512 0.0652933709574766 0.0409514164919098 6.59598021454555e-13 8.66905842231501e-14 1.25359654192284e-12 1.7621352589945e-13 20000000000 0.137908204228868 -0.0142698649935554 0.0418660791574315 0.0435596217328063 4.74596153438092e-13 6.62891740116766e-14 8.92279405634482e-13 1.36431358844515e-13 10000000000 0.103926158801852 -0.00996593449860659 0.115728825665866 0.03663128470293 1.16068383133631e-12 1.38213208841098e-13 2.13985354877066e-12 2.66630121262321e-13 12599210498.9563 0.120049356656146 -0.0116936592539353 0.0855768589053994 0.03986382921578 8.99568788327269e-13 1.10286086428152e-13 1.65141359425314e-12 2.14565073042844e-13 15874010519.701 0.134484254274038 -0.0132437289923879 0.0585828952383622 0.0427649828229605 6.65829216112633e-13 8.52923930095264e-14 1.214211907068e-12 1.67925509164691e-13 20000000000 0.146268558643756 -0.0145149324578146 0.0365469310553597 0.0451459579842953 4.75074052947225e-13 6.48969146406018e-14 8.57424296332502e-13 1.29847165942188e-13 10000000000 0.111735126487873 -0.0104219157465142 0.108642095847767 0.0389420050737529 1.19008187121429e-12 1.39756286114269e-13 2.12531337352405e-12 2.62098503159901e-13 12599210498.9563 0.128096079843586 -0.0121524335381595 0.0790367320903555 0.0420752515018619 9.13308742318726e-13 1.1053437661333e-13 1.62437779421614e-12 2.09403302635114e-13 15874010519.701 0.142475714535518 -0.0136767217189294 0.0530170424230388 0.0448363843093403 6.70087860645654e-13 8.48611038978896e-14 1.18419386576725e-12 1.63061532293741e-13 20000000000 0.154031871328967 -0.0149075715344902 0.0321071741178478 0.0470682150324393 4.74689766663758e-13 6.42379428258876e-14 8.30571113923186e-13 1.25815256991058e-13 10000000000 0.119767322212163 -0.0110980988040538 0.101330939202237 0.0416592275476553 1.21199702656375e-12 1.43018729818914e-13 2.11094107092775e-12 2.62162396312809e-13 12599210498.9563 0.136208103373518 -0.0128510539988257 0.0723414043467998 0.0447522590751412 9.20551158142829e-13 1.11995446374415e-13 1.59695158470022e-12 2.07664235819242e-13 15874010519.701 0.150381053853508 -0.0143655989404208 0.0473509067589345 0.0474261400887601 6.69343743972251e-13 8.52621661366749e-14 1.15394596437247e-12 1.60654584117636e-13 20000000000 0.161588384938325 -0.0155691454166649 0.0275899613530199 0.0495535935138433 4.7076780792523e-13 6.41322840580994e-14 8.0376489191002e-13 1.23477343607159e-13 10000000000 0.128308753380002 -0.0120768453256748 0.0930126629992453 0.0449708179672803 1.22477512951668e-12 1.48018733591017e-13 2.08871517476669e-12 2.65967911566359e-13 12599210498.9563 0.144626760950031 -0.0138681354608306 0.0648578460574507 0.0480637735706898 9.19647223089854e-13 1.14573176852262e-13 1.56218193197451e-12 2.08488667324387e-13 15874010519.701 0.15839624400287 -0.0153830879603423 0.041100273484105 0.0506813076381984 6.62212515997713e-13 8.63626458633961e-14 1.11796352958087e-12 1.59957529016484e-13 20000000000 0.169095121826593 -0.0165661281232655 0.0226407643566659 0.0527283259122652 4.62255888152337e-13 6.44533533812604e-14 7.72933179935529e-13 1.22245202322328e-13 10000000000 0.137446760339122 -0.0134129006263618 0.0833970743173325 0.0490037567440714 1.22684393177224e-12 1.54513545975411e-13 2.0521195726599e-12 2.72427777049173e-13 12599210498.9563 0.153405854339331 -0.0152509231370459 0.056402302240864 0.0521152214710514 9.09599727964361e-13 1.18023470305086e-13 1.51545452555689e-12 2.10955430120997e-13 15874010519.701 0.166559355990165 -0.0167692556798026 0.0341530919143368 0.0546874120192666 6.4816804098201e-13 8.79607469777675e-14 1.07321410019383e-12 1.60262031134511e-13 20000000000 0.176588097120137 -0.0179327813398044 0.0171892705575195 0.0566617857702436 4.48915247631452e-13 6.50508873166519e-14 7.36160134152819e-13 1.21608985455338e-13 10000000000 0.147140113633815 -0.0151414687422529 0.0725118408063143 0.0538342354060691 1.21675104862474e-12 1.62001012099607e-13 1.9962898426101e-12 2.80192685051275e-13 12599210498.9563 0.162484861120968 -0.017023808937965 0.0470609018652823 0.0569588918061923 8.89881110803651e-13 1.21948433082577e-13 1.45411903055666e-12 2.14035062772668e-13 15874010519.701 0.174817166092426 -0.0185400285669687 0.0266061961518133 0.0594778781013103 6.27225740276084e-13 8.97721959023556e-14 1.01846400076909e-12 1.60839703070687e-13 20000000000 0.184035174462845 -0.0196791661763012 0.0113165553676121 0.0613739260962393 4.30975520322699e-13 6.57336498364144e-14 6.92954216916498e-13 1.21077422556122e-13 10000000000 6.58230104145168e-05 -1.78047524818639e-05 0.00722359160983842 2.21029338520196e-05 7.15503775555956e-14 2.55908660975684e-14 2.82205375502615e-14 4.51823053287621e-14 12599210498.9563 9.30398744586894e-05 -2.82465911699931e-05 0.00721157835863508 3.46575612755196e-05 7.15448983373806e-14 2.55889230839192e-14 2.8217523867996e-14 4.51806812197993e-14 15874010519.701 0.000136233278347146 -4.48183838714397e-05 0.00719251293210705 5.45845075478057e-05 7.15361995272175e-14 2.55858395505418e-14 2.82134225450386e-14 4.5178084474816e-14 20000000000 0.000204771647140732 -7.11154155580068e-05 0.00716225942147805 8.62108087715807e-05 7.15223944799394e-14 2.5580946609756e-14 2.82073437615903e-14 4.51739513641683e-14 10000000000 7.5125521225547e-05 -1.79639432726037e-05 0.0103168274026808 2.26239974703835e-05 7.23333850788069e-14 2.5616040319163e-14 2.94217506103398e-14 4.53291031284918e-14 12599210498.9563 0.000103228411158205 -2.84947711919882e-05 0.0103039869274022 3.53226879028501e-05 7.23276090607931e-14 2.56140532439353e-14 2.94178241588425e-14 4.53274535238438e-14 15874010519.701 0.000147827462640955 -4.52076766213001e-05 0.0102836089864375 5.54782034377088e-05 7.23184360535111e-14 2.56108999051489e-14 2.94129356013586e-14 4.53247976093773e-14 20000000000 0.000218595065231198 -7.17283360632624e-05 0.0102512733937373 8.74670378228082e-05 7.23038767602879e-14 2.56058963273626e-14 2.94060242537309e-14 4.53205588526383e-14 10000000000 8.82915118620949e-05 -1.81731245821216e-05 0.0146540978187119 2.33321570047296e-05 7.34209598892186e-14 2.56416505746076e-14 3.11491236198824e-14 4.55256395315958e-14 12599210498.9563 0.000117657590407043 -2.8821019793982e-05 0.0146400352031383 3.62316891319714e-05 7.34147514293023e-14 2.56396023505475e-14 3.11435312642588e-14 4.55239630856181e-14 15874010519.701 0.000164260581864599 -4.57195445073047e-05 0.014617718237354 5.67058484877148e-05 7.34048858153888e-14 2.56363521971794e-14 3.11372707022245e-14 4.55212280378041e-14 20000000000 0.000238206099845892 -7.25343189223906e-05 0.0145823068491973 8.92000552352723e-05 7.33892238527448e-14 2.56311952210664e-14 3.11289834310208e-14 4.55168407447145e-14 10000000000 0.000106906575324428 -1.84491604897162e-05 0.0206541078359001 2.42843425351524e-05 7.49171069523703e-14 2.56677787679895e-14 3.36308557893159e-14 4.57888037943741e-14 12599210498.9563 0.000138070014217346 -2.92518309767889e-05 0.0206382221634736 3.74653540019532e-05 7.49102652118068e-14 2.56656452551132e-14 3.36222420487579e-14 4.57871057834783e-14 15874010519.701 0.000187524238078529 -4.63957372341569e-05 0.0206130129295538 5.83860736518838e-05 7.48993821430863e-14 2.56622601877372e-14 3.36135782656783e-14 4.57842662459731e-14 20000000000 0.000265991020741353 -7.35992531805268e-05 0.0205730139419473 9.15884784199461e-05 7.48820984177854e-14 2.56568895357894e-14 3.36029842420529e-14 4.5779668967723e-14 10000000000 0.000133150998297544 -1.88118098010319e-05 0.0288026225823719 2.55430221950403e-05 7.69432316798998e-14 2.56945432633601e-14 3.71811723846369e-14 4.61383634555684e-14 12599210498.9563 0.0001668569164163 -2.98183086091689e-05 0.0287839949991839 3.91184497795516e-05 7.69354595282916e-14 2.56922908688758e-14 3.71671735286521e-14 4.61366636679908e-14 15874010519.701 0.000220344137083581 -4.72853224739191e-05 0.0287544360452035 6.06648655069875e-05 7.69230757897237e-14 2.56887179857579e-14 3.7154326873916e-14 4.61336889853214e-14 20000000000 0.000305205502907297 -7.50006082138378e-05 0.0287075382991487 9.48594612226184e-05 7.69033966022167e-14 2.56830500467328e-14 3.71398442004457e-14 4.61287940479226e-14 10000000000 0.000169972292364914 -1.92819672393591e-05 0.0396027629523165 2.7167720716037e-05 7.96269256101024e-14 2.57221113512635e-14 4.22142805958805e-14 4.65950997238026e-14 12599210498.9563 0.000207236744645738 -3.05534412418222e-05 0.0395799910859912 4.12922718588948e-05 7.9617786228046e-14 2.57196943421758e-14 4.21909605789994e-14 4.65934456461956e-14 15874010519.701 0.00026636817886492 -4.84404210015523e-05 0.039543858288678 6.37097394862174e-05 7.96031868800884e-14 2.57158618587943e-14 4.2170968597431e-14 4.65903011618457e-14 20000000000 0.000360177567597612 -7.68207106273954e-05 0.0394865354984611 9.92854077916938e-05 7.9579964867372e-14 2.57097833486416e-14 4.21499654529346e-14 4.65849843878879e-14 10000000000 0.00022127758168549 -1.98782475062761e-05 0.0534818969248006 2.92020753933642e-05 8.30804257951135e-14 2.5750710798393e-14 4.92387268517352e-14 4.71772305135381e-14 12599210498.9563 0.000263440783028675 -3.14867852377045e-05 0.0534528687554931 4.40807206906202e-05 8.30692872546234e-14 2.57480688122302e-14 4.91999280193185e-14 4.71757168209944e-14 15874010519.701 0.000330341199043834 -4.99078666318326e-05 0.0534068130272538 6.76942416763526e-05 8.30514302932459e-14 2.57438824541971e-14 4.9168107119652e-14 4.71723668668082e-14 20000000000 0.000436464692746522 -7.91335910731193e-05 0.0533337566060732 0.000105165919823513 8.30229888163211e-14 2.57372449401568e-14 4.91363578695977e-14 4.71664547687133e-14 10000000000 0.000292148084886132 -2.0612223922339e-05 0.0706644157001775 3.1660587716198e-05 8.73708992715035e-14 2.57806351888797e-14 5.88127518289915e-14 4.7895453006948e-14 12599210498.9563 0.000340898097272502 -3.26370453499175e-05 0.0706260413953253 4.75523841298453e-05 8.73568744897676e-14 2.57776917565464e-14 5.87495767454131e-14 4.789424624405e-14 15874010519.701 0.00041824284874676 -5.17175645357443e-05 0.0705651641071082 7.27725919819622e-05 8.73342841055102e-14 2.57730330376413e-14 5.86990007657664e-14 4.78906590291365e-14 20000000000 0.000540916533312846 -8.19866332020227e-05 0.0704686119493205 0.000112790562008636 8.72982412482176e-14 2.57656506442493e-14 5.86500489186249e-14 4.78839150631746e-14 10000000000 0.000389105716075647 -2.14838347257255e-05 0.0910513506295272 3.45245439393738e-05 9.24921930340889e-14 2.58122366161987e-14 7.14489538567826e-14 4.87481792489563e-14 12599210498.9563 0.000446445794571089 -3.40049218284745e-05 0.0909993162538232 5.17372968583119e-05 9.24740936627138e-14 2.58088995369378e-14 7.13497189922627e-14 4.87475429844482e-14 15874010519.701 0.00053740825604693 -5.38712800379866e-05 0.090916779989243 7.90518754417713e-05 9.24447703869418e-14 2.58036274481099e-14 7.12709321779981e-14 4.87436970699413e-14 20000000000 0.000681652947783433 -8.5382931103022e-05 0.0907859029862317 0.000122387865005735 9.23978868267302e-14 2.5795280286606e-14 7.11955021400022e-14 4.8735810987957e-14 10000000000 0.000520505836965942 -2.24793872880178e-05 0.114170194990867 3.7758503289187e-05 9.83530604611845e-14 2.58459041898463e-14 8.74861386270309e-14 4.97194460384091e-14 12599210498.9563 0.000588651879551992 -3.55700143734485e-05 0.114098843499313 5.66317480147904e-05 9.83293917682536e-14 2.58420678767222e-14 8.73370883497258e-14 4.97197581321631e-14 15874010519.701 0.00069673987945729 -5.63378099321021e-05 0.113985685506733 8.65782993547115e-05 9.82907812823174e-14 2.58360244732891e-14 8.72182756696062e-14 4.97156493072439e-14 20000000000 0.00086809952732031 -8.92737457021402e-05 0.113806297604697 0.000134082118049606 9.82288976288568e-14 2.58264687469923e-14 8.7103939581514e-14 4.97062353436079e-14 10000000000 0.000697156735704101 -2.35740155706348e-05 0.139238724185637 4.1351884828178e-05 1.04792426098695e-13 2.5882042958527e-14 1.06983562734421e-13 5.07812767534552e-14 12599210498.9563 0.000778383874422893 -3.72946370399983e-05 0.139141156365981 6.22308859659637e-05 1.04761443639644e-13 2.58775913575121e-14 1.06770315934439e-13 5.07830291187383e-14 15874010519.701 0.000907195541113486 -5.90589725483609e-05 0.138986451579516 9.53555625354263e-05 1.04710495871193e-13 2.58706094802069e-14 1.06597992479192e-13 5.07786748752234e-14 20000000000 0.00111134807926207 -9.35679993496116e-05 0.138741275885236 0.000147889204484164 1.0462860866933e-13 2.58595917356776e-14 1.06429256934067e-13 5.07672821494237e-14 10000000000 0.000933232318690711 -2.47382960772878e-05 0.165323320212562 4.5376975988054e-05 1.11617602514159e-13 2.59210965924454e-14 1.29698495625514e-13 5.18998761372124e-14 12599210498.9563 0.00102972255747127 -3.9133986530717e-05 0.165191714617399 6.85859149126555e-05 1.11577425561353e-13 2.59159037376918e-14 1.29407790412281e-13 5.1903649733888e-14 15874010519.701 0.00118270412530911 -6.19654309110854e-05 0.164983086247134 0.000105400812892453 1.11510734290452e-13 2.59078128717697e-14 1.29167809655843e-13 5.18990860871681e-14 20000000000 0.00142507619411627 -9.81571158831385e-05 0.164652572674069 0.000163770724610546 1.11403193797392e-13 2.58950824631197e-14 1.28926612668679e-13 5.18852167985674e-14 10000000000 0.00124745274216809 -2.59468930663756e-05 0.191515948513244 5.0047631786454e-05 1.18648461639034e-13 2.59636948170192e-14 1.5516317299088e-13 5.30429251855499e-14 12599210498.9563 0.00136120237710258 -4.10491946825466e-05 0.191341976845864 7.58715661331455e-05 1.18597206696263e-13 2.5957619491187e-14 1.54784307803099e-13 5.30493372427595e-14 15874010519.701 0.00154150113046304 -6.49967398325076e-05 0.191066258063797 0.000116826088863542 1.18511169641629e-13 2.59482450989929e-14 1.54462812695149e-13 5.30446003979594e-14 20000000000 0.00182703442570238 -0.000102946167653915 0.190629639579923 0.000181737732507292 1.18371902818218e-13 2.59335580618696e-14 1.54129198291628e-13 5.3027722154372e-14 10000000000 0.00166441479352198 -2.71875831519324e-05 0.217055277129635 5.57703555987832e-05 1.25751222659178e-13 2.60110495560173e-14 1.82820694644913e-13 5.41854244855843e-14 12599210498.9563 0.00179723853290166 -4.30204759683573e-05 0.216830429020553 8.44524151007997e-05 1.25687102524569e-13 2.60039208522411e-14 1.82346249833914e-13 5.41950475998216e-14 15874010519.701 0.00200770914400091 -6.81210111096115e-05 0.2164741806331 0.000129928818233704 1.25578014751443e-13 2.59930733362025e-14 1.81930208317707e-13 5.41901318224657e-14 20000000000 0.00234086999812399 -0.000107883819854343 0.215910300242037 0.00020197961208146 1.25400635028699e-13 2.59761823874657e-14 1.81482799984181e-13 5.41696653323586e-14 10000000000 0.00221589612909782 -2.84716500564121e-05 0.241366031955154 6.31933833641352e-05 1.32857070780848e-13 2.6065773586951e-14 2.12163561789222e-13 5.53136396243682e-14 12599210498.9563 0.00236953905342998 -4.50614933187398e-05 0.241081683381285 9.4950225870416e-05 1.32778401611738e-13 2.60573643422911e-14 2.11589294814953e-13 5.53268907890088e-14 15874010519.701 0.00261292039464495 -7.13555256850283e-05 0.240631305610862 0.000145288050618697 1.32642393456964e-13 2.60448143181027e-14 2.11066380123144e-13 5.53216723415581e-14 20000000000 0.00299797819552066 -0.000112992715701535 0.239918801489325 0.000225005921967947 1.32420058846471e-13 2.60254407108779e-14 2.10482230239181e-13 5.52969340696967e-14 10000000000 0.00294191059858249 -2.98500755774524e-05 0.264036687345858 7.32676506893237e-05 1.39971508370409e-13 2.61333660663305e-14 2.42845689984265e-13 5.64288073469785e-14 12599210498.9563 0.00311827270859491 -4.72408486973375e-05 0.263683790389012 0.000108326754619581 1.39876560178632e-13 2.61233501582354e-14 2.4216964469737e-13 5.64457987364498e-14 15874010519.701 0.00339754180035291 -7.47965369624803e-05 0.263125037084658 0.000163881680793787 1.39709285123577e-13 2.61087852098158e-14 2.41527263579048e-13 5.64399103948931e-14 20000000000 0.00383912464410577 -0.00011841222785951 0.262241587816863 0.00025181765052279 1.39434161397463e-13 2.60865658488449e-14 2.40780606451203e-13 5.64099843077129e-14 10000000000 0.00389123610598626 -3.14448230345325e-05 0.284770857333173 8.73410925000262e-05 1.47184385940021e-13 2.62247776224855e-14 2.74774730266367e-13 5.75534239411385e-14 12599210498.9563 0.00409273349827014 -4.97226655866679e-05 0.28433912382298 0.00012600987160033 1.47070977381458e-13 2.62126643641415e-14 2.73995486298781e-13 5.75737564221932e-14 15874010519.701 0.0044116733432312 -7.86744355581904e-05 0.283655821148258 0.0001872625899072 1.46866908178682e-13 2.61956176968639e-14 2.73218605597305e-13 5.7566383367044e-14 20000000000 0.0049156557727114 -0.000124476327956246 0.28257614772268 0.000284161526946769 1.46529025559627e-13 2.6170013222827e-14 2.7227782276015e-13 5.75298766078169e-14 10000000000 0.00512116396079996 -3.35178485385043e-05 0.303339532618694 0.000107349622209652 1.54693343231721e-13 2.63610875688736e-14 3.08221136549504e-13 5.87444065915521e-14 12599210498.9563 0.0053513074535027 -5.28543744808402e-05 0.302815857668463 0.000150142632905026 1.54557979316673e-13 2.63461193904254e-14 3.07334731734907e-13 5.87668652642011e-14 15874010519.701 0.00571541420680754 -8.34709745226025e-05 0.301987432763238 0.000217898894281365 1.5430901826367e-13 2.63258485810125e-14 3.06401665440619e-13 5.87563983794658e-14 20000000000 0.00629032915121694 -0.000131876647909 0.300679452577667 0.000325012429340632 1.5389407832967e-13 2.62959783417277e-14 3.05223094139709e-13 5.87109810293397e-14 10000000000 0.0066966831351795 -3.66485918289351e-05 0.319546002861268 0.000136345701555296 1.62871747294506e-13 2.65837330831712e-14 3.44041994975821e-13 6.01238778220669e-14 12599210498.9563 0.00696113603625982 -5.73890810290738e-05 0.318911375616924 0.00018424465455924 1.62707768609828e-13 2.65647085751704e-14 3.43036023907171e-13 6.01459209817921e-14 15874010519.701 0.00737927332049407 -9.0211983954229e-05 0.317908022636219 0.000260043582128 1.62400366744667e-13 2.65399627519594e-14 3.41909848435188e-13 6.01292914032664e-14 20000000000 0.0080388768584182 -0.000142064657834218 0.316325348902552 0.000379767305547229 1.61885265601303e-13 2.65042691407518e-14 3.40424816543565e-13 6.00707419973383e-14 10000000000 0.00869126844243045 -4.22654100251273e-05 0.333198680513505 0.000180238015953849 1.72488935337954e-13 2.69822975010851e-14 3.84349014271591e-13 6.19639186486638e-14 12599210498.9563 0.0090003201831934 -6.51484433843786e-05 0.332420880569336 0.000235334691768063 1.72281876734964e-13 2.69571842582294e-14 3.83188728987261e-13 6.19805756874802e-14 15874010519.701 0.00948858085366201 -0.000101336094498605 0.33119215190636 0.000322456938221471 1.71889868065942e-13 2.69256423484893e-14 3.817962933782e-13 6.19516523176221e-14 20000000000 0.0102578222778826 -0.0001584402160075 0.329256439801206 0.000459900084552101 1.71231614233864e-13 2.68810429121401e-14 3.79878944973434e-13 6.18714361968587e-14 10000000000 0.0111980849675431 -5.4385665827169e-05 0.344059709827217 0.000253706135636966 1.85437413134668e-13 2.77787288758825e-14 4.34721541492804e-13 6.49460289300566e-14 12599210498.9563 0.0115740415162847 -8.12099419410449e-05 0.343071459420827 0.000321157145927231 1.85150341462551e-13 2.77435004096941e-14 4.33306959002476e-13 6.49465787171631e-14 15874010519.701 0.0121672584353817 -0.000123580537862288 0.341512217556298 0.000427683128092382 1.84612217491411e-13 2.76999881777252e-14 4.31472727667671e-13 6.48910532948919e-14 20000000000 0.0131000093411305 -0.000190318326280698 0.339060674156441 0.000595412862729905 1.83712805049834e-13 2.76391257739073e-14 4.28837931116531e-13 6.476841707949e-14 10000000000 0.0143815593361995 -8.54673931190482e-05 0.351668272409245 0.000399807475427727 2.06950991567617e-13 2.95755280924526e-14 5.11099670071256e-13 7.09387927889222e-14 12599210498.9563 0.0148842398468774 -0.000121422145508827 0.350290920044763 0.000494766084795151 2.06466782654632e-13 2.95195006015367e-14 5.09095824958527e-13 7.08932063804203e-14 15874010519.701 0.0156754647438309 -0.000178078111520262 0.348123082004689 0.000644363307992835 2.0559609552986e-13 2.94487373774946e-14 5.06278419281086e-13 7.07674406376873e-14 20000000000 0.016914757347895 -0.000266979754684539 0.344727811208866 0.000878998569982858 2.04164608412388e-13 2.93487793126149e-14 5.02076117973334e-13 7.05366942298425e-14 10000000000 0.0186656690636396 -0.000176152009351262 0.35474142364307 0.00075323860087706 2.51179837448094e-13 3.39739877832922e-14 6.57452215197988e-13 8.49678505629797e-14 12599210498.9563 0.019486518387062 -0.000238797020434121 0.352397878134146 0.000928135889456783 2.50020213260409e-13 3.38555340165639e-14 6.53448084731087e-13 8.47545170410262e-14 15874010519.701 0.0207702795966583 -0.000336878024820173 0.348732900988256 0.00120188405091215 2.48073219193754e-13 3.36946198492461e-14 6.47444964815835e-13 8.43737157512704e-14 20000000000 0.0227609779724893 -0.000489244216140252 0.343050065870731 0.00162691882947019 2.44971421330068e-13 3.34602008025713e-14 6.38297594305466e-13 8.37539269247218e-14 10000000000 0.0253453406980238 -0.00046003575291804 0.349323048002371 0.0017380662712595 3.49258410411071e-13 4.44822595994895e-14 9.71606060534392e-13 1.18134538053907e-13 12599210498.9563 0.0271468057710367 -0.000614073763748141 0.343984589133264 0.00219033550460168 3.44934500309173e-13 4.40728190835365e-14 9.58083006595988e-13 1.17065760849493e-13 15874010519.701 0.029905690738484 -0.000850227189202645 0.335809311794393 0.00288346199549844 3.38158199502715e-13 4.34781257395817e-14 9.37542309722366e-13 1.15393968879173e-13 20000000000 0.0340483201269838 -0.00120544119119051 0.323534499673855 0.00392542891180597 3.27889994223582e-13 4.26048787842015e-14 9.0680494899817e-13 1.12862468003155e-13 10000000000 0.0379248969889344 -0.00131284799509765 0.3249216939237 0.00450386044049572 5.35018630525907e-13 6.50113190655095e-14 1.55865984541e-12 1.82699715073074e-13 12599210498.9563 0.0425933781591169 -0.00175476134596056 0.310749419821476 0.00584110798744764 5.14436335745816e-13 6.30151790320582e-14 1.49545637429787e-12 1.76806733794859e-13 15874010519.701 0.0492678721537398 -0.0023872436341125 0.290488456868497 0.00775428269099065 4.84854265383004e-13 6.01999123588216e-14 1.40517746145655e-12 1.68363910915859e-13 20000000000 0.0583396516375059 -0.00324847125556602 0.262952619594251 0.0103576546805368 4.44561874286795e-13 5.63959099577841e-14 1.2825331683574e-12 1.56879453079468e-13 10000000000 0.060639226637367 -0.0032110451828059 0.269795155277521 0.0104162397982004 7.53816907257667e-13 8.97393354617005e-14 2.23780449324385e-12 2.59439287379524e-13 12599210498.9563 0.0701567037656555 -0.00416471543252841 0.240719356198762 0.0133254998035869 6.79887270374082e-13 8.22800280155687e-14 2.01122854032456e-12 2.36841757316136e-13 15874010519.701 0.0818339567367093 -0.00533632785619764 0.205047681226843 0.0168979138145321 5.89061336056331e-13 7.31660711882687e-14 1.73327433899383e-12 2.09116554051503e-13 20000000000 0.0948995781548425 -0.00665040017036034 0.165139327648572 0.0209011894707817 4.87389823134627e-13 6.29893722351147e-14 1.42233820076453e-12 1.78099175410637e-13 10000000000 0.0879742753986261 -0.00557792986566223 0.20321026546405 0.0174905091807678 8.64295719389697e-13 1.02611144952561e-13 2.55498972798427e-12 2.96795228789433e-13 12599210498.9563 0.100218699355458 -0.00683112942879513 0.166127928159988 0.0212818806002664 7.20593328039174e-13 8.78509561395479e-14 2.11907679281479e-12 2.52308940559021e-13 15874010519.701 0.112869583215658 -0.0081282559548447 0.127817725887933 0.0252036763233999 5.72050470839498e-13 7.26342902909602e-14 1.6687413252669e-12 2.06358497095764e-13 20000000000 0.124647827201289 -0.00934028777400667 0.0921558990328393 0.0288635439556792 4.33751460599409e-13 5.84857524127089e-14 1.24958484456067e-12 1.63592324520332e-13 10000000000 0.109024354464027 -0.00721153968155276 0.158783401735318 0.0220315357567788 8.76484738503628e-13 1.03934356844361e-13 2.54641158403598e-12 2.9623184226766e-13 12599210498.9563 0.121331335044031 -0.00847172632399584 0.122202789828867 0.0257736347767231 6.94226075503558e-13 8.521461774844e-14 2.00398923424576e-12 2.40829378988184e-13 15874010519.701 0.13278182552462 -0.00964695954642486 0.088171204325859 0.0292608024098471 5.24611437531158e-13 6.78289893496673e-14 1.49938215745805e-12 1.89302156515986e-13 20000000000 0.142449319003285 -0.0106441310874728 0.0594445910136867 0.0322148413344573 3.81431858878213e-13 5.31684651567995e-14 1.07350340668652e-12 1.45819084345779e-13 10000000000 0.122199442884514 -0.00794105193405817 0.138822151021227 0.0237706770685686 8.72485807422808e-13 1.02757620595146e-13 2.4797219321671e-12 2.8724308177801e-13 12599210498.9563 0.134210592920023 -0.00915902854027241 0.103929340150569 0.0273056995952612 6.76017118216225e-13 8.27661624443453e-14 1.90831312990171e-12 2.29429241655922e-13 15874010519.701 0.144913049572586 -0.0102472125283169 0.0728413125987741 0.0304614986865354 5.00925196325368e-13 6.49853623493123e-14 1.3992313498703e-12 1.77939083667369e-13 20000000000 0.153615258457378 -0.0111371667638195 0.0475687602494388 0.0330379797521995 3.58589939516233e-13 5.05462654490244e-14 9.85458612369291e-13 1.3609565790951e-13 10000000000 0.130411347913602 -0.00812320252057818 0.132439735238937 0.023974141050466 8.75585641541678e-13 1.0211159662626e-13 2.43745809804078e-12 2.8027614386733e-13 12599210498.9563 0.142393227779986 -0.00932327992634209 0.0983811950679893 0.02738245970982 6.74421663016131e-13 8.18773082234927e-14 1.8650128912354e-12 2.23044503104907e-13 15874010519.701 0.152952356611432 -0.010383820987608 0.0683694651181462 0.0303922125229643 4.97113844713025e-13 6.40816470313115e-14 1.36059907683383e-12 1.72638270575135e-13 20000000000 0.161457818597659 -0.0112433083415612 0.0441993887872871 0.0328273961978799 3.5432308232534e-13 4.97670303462855e-14 9.54444920437604e-13 1.32060706648568e-13 10000000000 0.136068949736459 -0.00806129245694305 0.131774366621769 0.0235856871668321 8.81522822520733e-13 1.01995346910187e-13 2.41287095569003e-12 2.7586225759875e-13 12599210498.9563 0.148163680738091 -0.00926110849251006 0.0980027837011247 0.026933249707718 6.79717214865001e-13 8.18687309756164e-14 1.84876445304503e-12 2.1997056261343e-13 15874010519.701 0.158849787832197 -0.0103241501387743 0.0681667557469467 0.0298971679116493 5.01379526805806e-13 6.4127318742651e-14 1.35040011506261e-12 1.70624376093092e-13 20000000000 0.16747622708601 -0.0111875178319688 0.0440854558077502 0.0323007838666005 3.57442889396855e-13 4.98274070354097e-14 9.48232300740162e-13 1.30816266309483e-13 10000000000 6.10082555512931e-05 -1.66243187884411e-05 0.00726592751680692 2.00809505496724e-05 7.0601692427863e-14 2.46355679690051e-14 2.72133115113985e-14 4.24359746896238e-14 12599210498.9563 8.72467205245315e-05 -2.60017406691291e-05 0.0072550477305046 3.11123700582616e-05 7.05965276019498e-14 2.46339070629204e-14 2.72102350878443e-14 4.24346434101181e-14 15874010519.701 0.000128887818915639 -4.08845035209816e-05 0.00723778092293721 4.8621889760514e-05 7.05883264566743e-14 2.4631271199454e-14 2.72063867350872e-14 4.24325110642578e-14 20000000000 0.000194964086117359 -6.45019452315465e-05 0.00721038083359744 7.64120632927301e-05 7.05753101369882e-14 2.46270885324027e-14 2.72009313247013e-14 4.24291146814212e-14 10000000000 6.92996934172387e-05 -1.6987551277337e-05 0.0103891972988721 2.07724811013277e-05 7.1379145063688e-14 2.46494539612588e-14 2.83867316841545e-14 4.25606688293938e-14 12599210498.9563 9.64058438145446e-05 -2.64375282217276e-05 0.0103775341593513 3.19244518249273e-05 7.13736953897853e-14 2.4647756178517e-14 2.83823968166902e-14 4.25593206416481e-14 15874010519.701 0.000139423518206237 -4.14353410028613e-05 0.0103590244677494 4.96252419079912e-05 7.13650376982264e-14 2.46450619012011e-14 2.83775600815524e-14 4.25571423261631e-14 20000000000 0.000207682976510374 -6.52351008159243e-05 0.0103296527192101 7.77188000798956e-05 7.1351294291369e-14 2.46407866563587e-14 2.83711717346397e-14 4.25536609659184e-14 10000000000 8.12600974098594e-05 -1.74787572304283e-05 0.0147802604639472 2.17155238984024e-05 7.24662175479521e-14 2.46634435010497e-14 3.00856639027961e-14 4.2730625704942e-14 12599210498.9563 0.00010961248929347 -2.70266610874588e-05 0.0147674295757804 3.30381896948007e-05 7.24603503572366e-14 2.46616936415823e-14 3.00789789184188e-14 4.27292626810078e-14 15874010519.701 0.000154607254600731 -4.21797427333922e-05 0.0147470672096069 5.10098021693217e-05 7.24510209889832e-14 2.46589169309761e-14 3.00723611858977e-14 4.27270232902251e-14 20000000000 0.000226002140352256 -6.62255223838403e-05 0.0147147566018196 7.95329047348914e-05 7.24362063599851e-14 2.46545110833375e-14 3.00643742008394e-14 4.27234214112352e-14 10000000000 9.85620347102522e-05 -1.81401907495717e-05 0.0208755854550287 2.2986780148393e-05 7.39714157268644e-14 2.46775041497868e-14 3.25448024641006e-14 4.29614617603433e-14 12599210498.9563 0.000128701261192187 -2.78202617834686e-05 0.020860995211949 3.45518776567188e-05 7.39649334987937e-14 2.46756805788912e-14 3.25337732580541e-14 4.29600945354324e-14 15874010519.701 0.00017653061277775 -4.31828812851355e-05 0.0208378417526097 5.29081136522724e-05 7.39546098531657e-14 2.46727873066278e-14 3.25239473213037e-14 4.29577758879503e-14 20000000000 0.000252420494945526 -6.75606159660352e-05 0.0208011039907245 8.20412149575289e-05 7.39382065636927e-14 2.46681968702769e-14 3.25131914212214e-14 4.29540025831919e-14 10000000000 0.000123640956141823 -1.90229578430868e-05 0.0291889745338632 2.46700143446965e-05 7.60237426197939e-14 2.4691596928815e-14 3.60931677104599e-14 4.32716325024597e-14 12599210498.9563 0.000156329417446966 -2.88800169750035e-05 0.0291717070059879 3.65789695985774e-05 7.60163509679739e-14 2.46896692321983e-14 3.60742691058806e-14 4.32702895076306e-14 15874010519.701 0.000208202551903242 -4.45231975900757e-05 0.0291443065653443 5.54807132491786e-05 7.60045478840243e-14 2.46866115442907e-14 3.60587289099652e-14 4.32678715913397e-14 20000000000 0.000290504292813915 -6.93453139406055e-05 0.0291008329763253 8.54788848800858e-05 7.59857751688625e-14 2.46817609102746e-14 3.60431729199638e-14 4.32638541305913e-14 10000000000 0.000160029983367512 -2.01844793916813e-05 0.0402634136256315 2.68414531229277e-05 7.87625464302461e-14 2.47056768473279e-14 4.11742820338418e-14 4.36807687997938e-14 12599210498.9563 0.000196322154834293 -3.02748278523557e-05 0.0402420422767908 3.92348409725685e-05 7.87538084711095e-14 2.47036030566285e-14 4.11415685155979e-14 4.36795118037549e-14 15874010519.701 0.000253911244014874 -4.62877553075675e-05 0.0402081325677674 5.8905042868429e-05 7.87397978771587e-14 2.47003151809455e-14 4.11160837970706e-14 4.36769757711984e-14 20000000000 0.000345274956548999 -7.16953568213946e-05 0.0401543363804661 9.01216724601972e-05 7.87174793314452e-14 2.46951006160829e-14 4.10922941588409e-14 4.36726107289667e-14 10000000000 0.000212829645266007 -2.16820523469478e-05 0.0545744052308265 2.95434798905925e-05 8.23162828226772e-14 2.47196934424205e-14 4.83478484861234e-14 4.42062972452086e-14 12599210498.9563 0.000254141392836853 -3.20726579171601e-05 0.0545467349046944 4.2610099124929e-05 8.23055594237229e-14 2.47174171870059e-14 4.82919112569998e-14 4.42052447313126e-14 15874010519.701 0.000319691171149063 -4.85613618255448e-05 0.0545028352449343 6.3348127569085e-05 8.22882613328067e-14 2.47138113325309e-14 4.82497254317946e-14 4.42025782293632e-14 20000000000 0.000423673058476025 -7.47220685005969e-05 0.0544331993409237 9.62575569903867e-05 8.22606433783542e-14 2.47080947680494e-14 4.82121311100099e-14 4.41977199787403e-14 10000000000 0.000289375750732284 -2.35616294943933e-05 0.072389783356395 3.2748161866103e-05 8.67713804869683e-14 2.47335882999235e-14 5.82495442334909e-14 4.48585096070613e-14 12599210498.9563 0.000337529601150978 -3.43267901946211e-05 0.0723525227874007 4.67301485696514e-05 8.6757763779549e-14 2.47310365467914e-14 5.8156668282082e-14 4.48578670957926e-14 15874010519.701 0.000413928541409905 -5.14088158617847e-05 0.0722934155237655 6.89198207793895e-05 8.67356164048921e-14 2.47270001415478e-14 5.80877372957351e-14 4.48550719454325e-14 20000000000 0.000535102154112518 -7.85082258847129e-05 0.072199672444427 0.000104129873275627 8.67001475296994e-14 2.47206053587862e-14 5.80277861042672e-14 4.4849519460801e-14 10000000000 0.000400232254784192 -2.58428164359672e-05 0.0936266116964882 3.63213049820454e-05 9.21405808107606e-14 2.47472826763636e-14 7.149058740646e-14 4.56355030513987e-14 12599210498.9563 0.000457448490824472 -3.70582509620659e-05 0.0935750402965075 5.15104792441212e-05 9.21228424355738e-14 2.47443647361978e-14 7.1342705344652e-14 4.56355946654008e-14 15874010519.701 0.000548213713165197 -5.48532468498315e-05 0.0934932439378061 7.56141420695799e-05 9.20936796690848e-14 2.47397604481866e-14 7.12333435711922e-14 4.56326956856145e-14 20000000000 0.000692143590108156 -8.30799163457104e-05 0.0933635449420688 0.00011385642041406 9.20467917727801e-14 2.47324741870683e-14 7.11387654497827e-14 4.56261807048834e-14 10000000000 0.000560757686586374 -2.85038287571112e-05 0.117777368690411 4.00065545171358e-05 9.83472543576844e-14 2.47606450033679e-14 8.85110550042188e-14 4.6520537678235e-14 12599210498.9563 0.000629572580173846 -4.02394867201918e-05 0.11770511471604 5.67287137281936e-05 9.83238440624275e-14 2.47572526595312e-14 8.82870517424042e-14 4.65218271477835e-14 15874010519.701 0.000738718898312417 -5.88577692719333e-05 0.117590534884755 8.32621683751755e-05 9.82848280851203e-14 2.47519216528347e-14 8.81203651896271e-14 4.65188788335392e-14 20000000000 0.000911749785572973 -8.83850059869176e-05 0.117408904076733 0.000125351894246673 9.82217903743192e-14 2.47435007832583e-14 8.79748322777155e-14 4.65110599013084e-14 10000000000 0.000793655020663406 -3.14718379932329e-05 0.143964209791513 4.3446327429697e-05 1.05238680322787e-13 2.4773430003564e-14 1.09448672297151e-13 4.74839068243341e-14 12599210498.9563 0.000876782578277237 -4.37857917368897e-05 0.14386325537337 6.20354435840187e-05 1.05207811178624e-13 2.4769436728169e-14 1.09127061734508e-13 4.74869916820591e-14 15874010519.701 0.00100860183822138 -6.33186433243967e-05 0.143703196893437 9.1526850143242e-05 1.05155464086245e-13 2.47632031580437e-14 1.08884260824037e-13 4.7484076234804e-14 20000000000 0.00121750541593387 -9.42890931564428e-05 0.14344956129747 0.000138297297240186 1.05070370582161e-13 2.47533855123055e-14 1.08667628474866e-13 4.74745404538531e-14 10000000000 0.0011330344723739 -3.46227137816456e-05 0.171108195943449 4.62364737331966e-05 1.12624017307615e-13 2.47851928136999e-14 1.34097488760588e-13 4.8488913238699e-14 12599210498.9563 0.00123322440079396 -4.75581795230075e-05 0.170969126747105 6.70066424728333e-05 1.12583855103353e-13 2.47804477628891e-14 1.33659734588725e-13 4.84944758200334e-14 15874010519.701 0.00139205891421423 -6.80731269279876e-05 0.170748694815455 9.99518902107255e-05 1.12514196321851e-13 2.47731198628363e-14 1.33321951034284e-13 4.84916822404969e-14 20000000000 0.0016436713956023 -0.000100591300515773 0.170399533856355 0.000152183303362363 1.12400084372974e-13 2.47616327247807e-14 1.33010975539349e-13 4.84799482693612e-14 10000000000 0.00163048175736103 -3.77901222153415e-05 0.198124774068252 4.79881758537748e-05 1.20314553451741e-13 2.47952024169942e-14 1.61973504028019e-13 4.94989227330831e-14 12599210498.9563 0.0017504260864017 -5.13759083367505e-05 0.197937166191498 7.12121797739607e-05 1.20263508819116e-13 2.4789513393931e-14 1.61406945350424e-13 4.95076254597374e-14 15874010519.701 0.00194051935473511 -7.2917441709373e-05 0.197639885880313 0.000108040796224007 1.20172266749724e-13 2.47808756370461e-14 1.60956920960888e-13 4.95049974672685e-14 20000000000 0.00224150191685482 -0.000107050879446552 0.197169228311166 0.000166406145978737 1.20021298038218e-13 2.47674354700622e-14 1.60526091735206e-13 4.94905051316095e-14 10000000000 0.00236327352586054 -4.07804506956261e-05 0.224049290054324 4.83652928837119e-05 1.2814156845488e-13 2.48024041274626e-14 1.92421743890042e-13 5.04822550779921e-14 12599210498.9563 0.00250556674998139 -5.50332590990897e-05 0.223802110364034 7.42632444327707e-05 1.28078698923545e-13 2.47955032433105e-14 1.91721509705452e-13 5.04945722443112e-14 15874010519.701 0.00273099904680862 -7.76264819350289e-05 0.223410567852197 0.000115320326787571 1.27961576766137e-13 2.47852953835792e-14 1.91144735468446e-13 5.04920153045348e-14 20000000000 0.00308773272796633 -0.000113411547856443 0.222791023779612 0.000180356558255823 1.27765229357197e-13 2.47695957805028e-14 1.90566903033411e-13 5.04740880544801e-14 10000000000 0.00344385104554803 -4.33897480469406e-05 0.248056839940015 4.70809917517689e-05 1.35940977892822e-13 2.48055045037386e-14 2.24670413263819e-13 5.14138340866301e-14 12599210498.9563 0.00361094414248718 -5.8316062075366e-05 0.247738876973877 7.58154004376621e-05 1.35866539151359e-13 2.47969904356964e-14 2.23840448420833e-13 5.1429816132534e-14 15874010519.701 0.00387555839649639 -8.19696802479127e-05 0.247235409249646 0.000121353765592691 1.35719585141436e-13 2.47848713484858e-14 2.23125852484193e-13 5.14269608694397e-14 20000000000 0.00429402365666265 -0.000119416299104346 0.246439278694178 0.000193449325361417 1.35468928666934e-13 2.47665606878478e-14 2.22372748235668e-13 5.1404739048691e-14 10000000000 0.00502729500881675 -4.54216100652547e-05 0.269408804615627 4.38598833555903e-05 1.43511016294486e-13 2.48032573838576e-14 2.57780823274636e-13 5.22748047987992e-14 12599210498.9563 0.00522134091089014 -6.10175413911442e-05 0.269009351208774 7.55301887048199e-05 1.43427207202238e-13 2.47925101960151e-14 2.56834583499843e-13 5.2293778477003e-14 15874010519.701 0.00552849720612811 -8.5723636618916e-05 0.26837713300809 0.00012570175665616 1.43247416619987e-13 2.47780068703034e-14 2.55975337499729e-13 5.22898086066759e-14 20000000000 0.00601388376267317 -0.000124814993207409 0.267378138993598 0.000205083113328841 1.4293370708835e-13 2.47566604441497e-14 2.55018687109739e-13 5.22621680482118e-14 10000000000 0.00730959300567645 -4.67083491883804e-05 0.287393898201374 3.8393556479499e-05 1.50563155099743e-13 2.47949763469673e-14 2.90521137022609e-13 5.3052119949857e-14 12599210498.9563 0.00753208778488017 -6.29572167123468e-05 0.286904010214455 7.30255233657995e-05 1.50475007197355e-13 2.47810494980847e-14 2.89482343122386e-13 5.30723523164543e-14 15874010519.701 0.00788409651074325 -8.86874899223748e-05 0.286129047324931 0.000127864760323226 1.50261280075962e-13 2.47634966097887e-14 2.88477487203964e-13 5.30658234258612e-14 20000000000 0.00843991040209896 -0.000129374306164661 0.284905487359569 0.000214570866713115 1.49877194203291e-13 2.47385905215421e-14 2.87291869187087e-13 5.30313094833956e-14 10000000000 0.0105062927290451 -4.71381939713352e-05 0.301334527528818 3.03357817012517e-05 1.56699618572576e-13 2.47811431496997e-14 3.21277511496228e-13 5.3739360890206e-14 12599210498.9563 0.0107575046955607 -6.40072669739934e-05 0.300748998140123 6.78679595049747e-05 1.5661574535005e-13 2.47626575989693e-14 3.20180608734689e-13 5.37577700219676e-14 15874010519.701 0.011154728504479 -9.07080619701107e-05 0.299823239906511 0.000127271015786246 1.56370139480912e-13 2.4741143553411e-14 3.19037736265082e-13 5.37464750447193e-14 20000000000 0.0117813870549804 -0.000132901208533666 0.298362872571651 0.00022112182889189 1.55911792194115e-13 2.47120405545783e-14 3.17606051979421e-13 5.37032924996549e-14 10000000000 0.0148055782831117 -4.66847646544762e-05 0.310697476668439 1.93769184694825e-05 1.61456004606371e-13 2.47637754238841e-14 3.48166333383003e-13 5.43384184663375e-14 12599210498.9563 0.0150839413687172 -6.41239427866883e-05 0.310017076688937 5.96541806687778e-05 1.61388647977325e-13 2.4738867039538e-14 3.47055374742131e-13 5.43504810267531e-14 15874010519.701 0.0155238466355535 -9.17144318404342e-05 0.30894192949599 0.000123369605032841 1.61117474269874e-13 2.47122146786229e-14 3.45793442630776e-13 5.4331446020109e-14 20000000000 0.0162172086041729 -0.000135282772903919 0.307247444851803 0.000223953811213651 1.60586771662914e-13 2.46781732032379e-14 3.44114185203166e-13 5.42775398208548e-14 10000000000 0.0203076540285876 -4.54236932847289e-05 0.315270001536674 5.37827318775053e-06 1.64419768274422e-13 2.47462063908166e-14 3.69430082528994e-13 5.48601981791477e-14 12599210498.9563 0.0206094806338437 -6.33688133685987e-05 0.314502837296422 4.8164725173605e-05 1.64383593323331e-13 2.47125835598775e-14 3.68354631310702e-13 5.48602033552916e-14 15874010519.701 0.0210861978871748 -9.17465036171226e-05 0.313291266596308 0.000115814926115454 1.64097557687606e-13 2.46793934866957e-14 3.67004712705696e-13 5.48298806731177e-14 20000000000 0.0218369060161435 -0.000136526287921392 0.311383490139468 0.000222526441457815 1.63503674487014e-13 2.46396051792358e-14 3.65097604984093e-13 5.47631072761949e-14 10000000000 0.026982240623413 -4.35193843599609e-05 0.315281081361132 -1.15261474104567e-05 1.65371537315612e-13 2.47323370863527e-14 3.83957664921467e-13 5.53228230210839e-14 12599210498.9563 0.0273020528265449 -6.19006611437254e-05 0.314441938492061 3.34888630732499e-05 1.65381222343328e-13 2.46874629012267e-14 3.82965858493191e-13 5.53044767833802e-14 15874010519.701 0.0278069116687581 -9.09548725661668e-05 0.313117390468697 0.000104627742705754 1.65094049924633e-13 2.46462217873048e-14 3.81567932147618e-13 5.52591117823871e-14 20000000000 0.0286012643784791 -0.000136771310883576 0.311033481058267 0.000216758247388926 1.64452753676659e-13 2.45998688647201e-14 3.79473623345643e-13 5.51774456957482e-14 10000000000 0.0346713621238313 -4.11840532459729e-05 0.311364898008057 -3.0942645156351e-05 1.64359634789723e-13 2.472593570622e-14 3.91597034841188e-13 5.57480876951561e-14 12599210498.9563 0.0350027834590612 -5.99374143793102e-05 0.310472563630119 1.6024929926417e-05 1.64427131507959e-13 2.46672789290273e-14 3.90728181432346e-13 5.57052600360222e-14 15874010519.701 0.0355257236219899 -8.95671014207544e-05 0.309064718718003 9.02158524024865e-05 1.64153008668397e-13 2.46164980643261e-14 3.89324455762534e-13 5.56412988269133e-14 20000000000 0.0363479034993358 -0.000136262191965913 0.306851439142291 0.000207077447006376 1.63483721874854e-13 2.45628096720054e-14 3.87097082816771e-13 5.55429893284692e-14 10000000000 0.0431330497027125 -3.86339336581635e-05 0.30438728567614 -5.23285877283564e-05 1.61666908357519e-13 2.47305356089038e-14 3.93077496844995e-13 5.61586016753288e-14 12599210498.9563 0.0434698615496096 -5.77122855108904e-05 0.303461080687616 -3.63193412528107e-06 1.61799479179756e-13 2.46558002967311e-14 3.92357116850857e-13 5.60859354793022e-14 15874010519.701 0.0440010936573976 -8.78435670243567e-05 0.302000392048276 7.32587667067741e-05 1.61550405953835e-13 2.45941345756669e-14 3.90984735672125e-13 5.60003204795395e-14 20000000000 0.0448357637735548 -0.000135302992545803 0.299705546673034 0.000194300077208831 1.60872325998327e-13 2.45324217955887e-14 3.88680773494749e-13 5.58839402165366e-14 10000000000 0.0520973714048443 -3.60667363344167e-05 0.295246706483984 -7.51189697211774e-05 1.57710018608695e-13 2.47499471145543e-14 3.89666111658784e-13 5.65771941521129e-14 12599210498.9563 0.0524343355480901 -5.5449707106849e-05 0.294303614275818 -2.48259684500485e-05 1.57909586501617e-13 2.46572182420415e-14 3.89104649023049e-13 5.64704161337051e-14 15874010519.701 0.0529656274527939 -8.60509283060459e-05 0.292816807759844 5.45560119153965e-05 1.57693610099437e-13 2.45835332842249e-14 3.87790551983966e-13 5.63606960360131e-14 20000000000 0.0537999254519624 -0.000134226909835943 0.290482242292329 0.000179453082744974 1.57022487066404e-13 2.4513193491216e-14 3.85458832545826e-13 5.62250773544056e-14 10000000000 0.0613101577771025 -3.36644896706286e-05 0.28473777356856 -9.88140316585118e-05 1.52937121279706e-13 2.4789006790611e-14 3.82800582293523e-13 5.70282481448001e-14 12599210498.9563 0.0616434489320701 -5.33669381598108e-05 0.283790790916932 -4.69369528314778e-05 1.53200735607818e-13 2.46768002908703e-14 3.82395009987083e-13 5.68841926217983e-14 15874010519.701 0.0621687968859957 -8.44618090502901e-05 0.282298296419885 3.49174861097312e-05 1.53021334561587e-13 2.45901833505921e-14 3.81153842811172e-13 5.6748465713604e-14 20000000000 0.0629933624536898 -0.000133393006454824 0.279955941707487 0.000163643498635013 1.52367681389268e-13 2.45106755264402e-14 3.78829442867938e-13 5.65925548564045e-14 10000000000 0.0705568308812636 -3.16106304446475e-05 0.273494329487355 -0.00012302678186793 1.4776050893858e-13 2.4854223512628e-14 3.73841702782483e-13 5.75397825167619e-14 12599210498.9563 0.0708841382567056 -5.16909450537074e-05 0.272551915016324 -6.94308371116947e-05 1.48081393392267e-13 2.47214621686291e-14 3.7357845774311e-13 5.73562258465556e-14 15874010519.701 0.071399919136226 -8.33713928080936e-05 0.271067022000696 1.51080375336843e-05 1.47937719487895e-13 2.46211893891794e-14 3.72412816921632e-13 5.7192975527908e-14 20000000000 0.072209113513105 -0.000133202483917266 0.268737629923702 0.000147995815247937 1.47306328950865e-13 2.45319866792173e-14 3.70114758334026e-13 5.70156369027756e-14 10000000000 0.0796701374124749 -3.01085500739348e-05 0.261987411070828 -0.000147511906377296 1.42526662795146e-13 2.49541952907804e-14 3.6395977093122e-13 5.81453901591217e-14 12599210498.9563 0.0799905711957947 -5.06777710887388e-05 0.261053608378737 -9.18862812669952e-05 1.42895363300351e-13 2.48001393708104e-14 3.63817735599241e-13 5.79207930331079e-14 15874010519.701 0.080495390296185 -8.31181052200434e-05 0.259582676571166 -4.1752936949524e-06 1.4278288879749e-13 2.46856148053638e-14 3.62719539887561e-13 5.77286668112812e-14 20000000000 0.0812870454086966 -0.000134121481050463 0.257276191975995 0.000133635314437997 1.42173136384881e-13 2.45861396947449e-14 3.60450905025193e-13 5.75284540284119e-14 10000000000 0.0885283103877271 -2.93943020015552e-05 0.250548910845974 -0.000172192285839756 1.3751145192294e-13 2.5099820105435e-14 3.54111505520967e-13 5.88856929399782e-14 12599210498.9563 0.0888422321842537 -5.06270022794886e-05 0.249623756166381 -0.000114014394664685 1.37916796665096e-13 2.49239751301369e-14 3.54064344712338e-13 5.86189107131649e-14 15874010519.701 0.0893366530782988 -8.41008081919323e-05 0.248166869135067 -2.23124594438962e-05 1.37828006304684e-13 2.47946522105153e-14 3.53016354040451e-13 5.83964683923005e-14 20000000000 0.0901116402944301 -0.000136702460375145 0.245883483081984 0.000121695177126957 1.37234432938288e-13 2.46841958284963e-14 3.5076535058594e-13 5.81713595785461e-14 10000000000 0.0970487908296211 -2.97417988270139e-05 0.239401982952841 -0.000197187623648232 1.32927919776216e-13 2.53043678040783e-14 3.45061905878017e-13 5.98093145724443e-14 12599210498.9563 0.0973576438224784 -5.18897403593404e-05 0.238481942448053 -0.000135676533196294 1.33357671602353e-13 2.51063818361066e-14 3.45079514569797e-13 5.9499298170356e-14 15874010519.701 0.0978439182102523 -8.67910233180175e-05 0.237033606585441 -3.87615203613079e-05 1.33282585190137e-13 2.49616710834477e-14 3.44056401298266e-13 5.92447294531493e-14 20000000000 0.0986057182045065 -0.000141602810315869 0.234764877455319 0.000113340620153945 1.32695411070733e-13 2.48392929889389e-14 3.41797320972973e-13 5.89918058497845e-14 10000000000 0.105180615874667 -3.14621992345222e-05 0.228689227652629 -0.000222841521872019 1.28938383588131e-13 2.55834681973934e-14 3.37421459027831e-13 6.09734861551789e-14 12599210498.9563 0.10548679439095 -5.48720598667264e-05 0.227767526289684 -0.000156895806575297 1.29379560529224e-13 2.53630219999183e-14 3.37470492842645e-13 6.06189681240186e-14 15874010519.701 0.105968653034895 -9.17425620534859e-05 0.226317202171261 -5.30463964291683e-05 1.29305978794259e-13 2.52021819285184e-14 3.36439142651462e-13 6.03297583506654e-14 20000000000 0.106723019143176 -0.00014960358516135 0.224046921282398 0.000109816554116904 1.28711341061913e-13 2.50665807791895e-14 3.34132546667037e-13 6.00447861291395e-14 10000000000 0.112897081904989 -3.4900571300403e-05 0.218495642270729 -0.000249739625512169 1.25666523160911e-13 2.59550455239897e-14 3.31683754438835e-13 6.24443988596991e-14 12599210498.9563 0.113203858159902 -6.00374395217296e-05 0.217562417149574 -0.00017785344363247 1.26105397698575e-13 2.5711731517547e-14 3.31727263356147e-13 6.20435385820198e-14 15874010519.701 0.11368638944437 -9.96026246411401e-05 0.216094782360422 -6.47203020270326e-05 1.26018816196303e-13 2.5533733039969e-14 3.3064610133871e-13 6.17160413051417e-14 20000000000 0.114441142650216 -0.000161633191169692 0.213799437432294 0.000112532475498584 1.25398604081857e-13 2.53830715534322e-14 3.28237781275019e-13 6.13928937686459e-14 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_ac.standard0000644000175000017500000000611614163340332025436 0ustar carstencarstenFreq N(coll) 1000 6.7322601334429e-24 3162.27766017779 6.73226013344293e-24 10000.0000000595 6.73226013344322e-24 31622.7766019662 6.73226013344621e-24 100000.000001191 6.73226013347607e-24 316227.766021545 6.73226013377468e-24 1000000.00001786 6.73226013676073e-24 3162277.66023428 6.73226016662117e-24 10000000.0002382 6.7322604652256e-24 31622776.6025311 6.73226345126988e-24 100000000.002977 6.73229331171259e-24 316227766.027194 6.73259191611917e-24 1000000000.03572 6.73557795814477e-24 3162277660.29077 6.76543817437139e-24 10000000000.4168 7.06401993573536e-24 31622776603.096 1.00477995038182e-23 100000000000 3.96838091205767e-23 1000 3.70228315856428e-22 3162.27766017779 3.70228315856428e-22 10000.0000000595 3.70228315856428e-22 31622.7766019662 3.70228315856431e-22 100000.000001191 3.70228315856459e-22 316227.766021545 3.70228315856741e-22 1000000.00001786 3.70228315859558e-22 3162277.66023428 3.70228315887731e-22 10000000.0002382 3.70228316169457e-22 31622776.6025311 3.70228318986726e-22 100000000.002977 3.70228347159412e-22 316227766.027194 3.7022862888625e-22 1000000000.03572 3.70231446152355e-22 3162277660.29077 3.70259618586391e-22 10000000000.4168 3.70541320228227e-22 31622776603.096 3.73356070166799e-22 100000000000 4.01280227200612e-22 1000 9.16175363291414e-21 3162.27766017779 9.16175363291414e-21 10000.0000000595 9.16175363291413e-21 31622.7766019662 9.16175363291408e-21 100000.000001191 9.16175363291349e-21 316227.766021545 9.16175363290763e-21 1000000.00001786 9.161753632849e-21 3162277.66023428 9.16175363226271e-21 10000000.0002382 9.16175362639982e-21 31622776.6025311 9.16175356777093e-21 100000000.002977 9.16175298148208e-21 316227766.027194 9.16174711860069e-21 1000000000.03572 9.16168849049436e-21 3162277660.29077 9.16110228018379e-21 10000000000.4168 9.15524724388071e-21 31622776603.096 9.0973951963196e-21 100000000000 8.58123649903566e-21 1000 2.01815827871675e-20 3162.27766017779 2.01815827871675e-20 10000.0000000595 2.01815827871671e-20 31622.7766019662 2.01815827871638e-20 100000.000001191 2.01815827871302e-20 316227.766021545 2.01815827867948e-20 1000000.00001786 2.01815827834411e-20 3162277.66023428 2.01815827499033e-20 10000000.0002382 2.01815824145257e-20 31622776.6025311 2.0181579060751e-20 100000000.002977 2.01815455231373e-20 316227766.027194 2.01812101603538e-20 1000000000.03572 2.01778578673018e-20 3162277660.29077 2.01444678806846e-20 10000000000.4168 1.98233486221661e-20 31622776603.096 1.75238479248818e-20 100000000000 1.27479227510178e-20 1000 1.31853332810094e-20 3162.27766017779 1.31853332810101e-20 10000.0000000595 1.31853332810173e-20 31622.7766019662 1.31853332810893e-20 100000.000001191 1.31853332818098e-20 316227.766021545 1.31853332890148e-20 1000000.00001786 1.31853333610645e-20 3162277.66023428 1.31853340815614e-20 10000000.0002382 1.31853412865204e-20 31622776.6025311 1.31854133350869e-20 100000000.002977 1.31861337184069e-20 316227766.027194 1.31933273318236e-20 1000000000.03572 1.32642559304709e-20 3162277660.29077 1.38854189605813e-20 10000000000.4168 1.64727438144497e-20 31622776603.096 1.8395034240445e-20 100000000000 1.86638591097588e-20 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_1D_dc.standard0000644000175000017500000000035714163340332024744 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08296576508956e-05 2.45775095660876e-08 0.8 0.000903303312835216 8.70865242431547e-07 0.9 0.0238350870018373 4.05334612594097e-05 1 0.12042473538473 0.00730619530687674 1.1 0.315079560635942 0.117541124487458 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full_sh.standard0000644000175000017500000003037614163340332025351 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964114e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802728e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704444e-13 3.19189119579733e-16 -2.24597758604642e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336811e-13 0.1 -1.00000000180705e-13 2.00168386731406e-13 0.15 -1.50000001763804e-13 3.0069212854088e-13 0.2 -2.00000016957996e-13 4.02750538790327e-13 0.25 -2.50000162728964e-13 5.10882824752989e-13 0.3 -3.00001561174843e-13 6.43179384985094e-13 0.35 -3.50014977021663e-13 8.72105835750342e-13 0.4 -4.0014368047636e-13 1.4894032121023e-12 0.45 -4.51378383027313e-13 3.67549234987265e-12 0.5 -5.13223380803581e-13 1.22313879887219e-11 0.55 -6.76857937575945e-13 4.6800215685024e-11 0.6 -1.81705065605479e-12 2.05208788215455e-10 0.65 -1.23289421879791e-11 9.90747303906032e-10 0.700000000000001 -1.12996696079871e-10 5.9758865147934e-09 0.750000000000001 -1.10383364313316e-09 4.77021314879904e-08 0.800000000000001 -1.35638003835304e-08 4.66620957301192e-07 0.850000000000001 -4.58639298342171e-07 5.39009448920126e-06 0.900000000000001 -7.90033270247433e-06 3.71835972215339e-05 0.950000000000001 -3.39967383747671e-05 0.000115640582770969 1 -0.000155082953195505 0.000419453567886049 -1 1.0000002982035e-12 -5.68278336533802e-08 -0.95 9.50000313067242e-13 -4.03167332210389e-08 -0.9 9.00000324036028e-13 -2.81325130735493e-08 -0.85 8.50000332004963e-13 -1.928080777775e-08 -0.8 8.00000337697021e-13 -1.29584696139906e-08 -0.75 7.50000341688266e-13 -8.52555125603526e-09 -0.7 7.00000344430943e-13 -5.47965562889993e-09 -0.65 6.50000346274365e-13 -3.43273255421459e-09 -0.6 6.00000347483561e-13 -2.09036215699404e-09 -0.55 5.50000348255689e-13 -1.23352296375684e-09 -0.5 5.0000034873425e-13 -7.02799433948287e-10 -0.45 4.50000349021191e-13 -3.84940855612756e-10 -0.4 4.00000349186998e-13 -2.01642835911982e-10 -0.35 3.50000349278102e-13 -1.00385894854869e-10 -0.3 3.00000349322311e-13 -4.71348148499051e-11 -0.25 2.50000349318233e-13 -2.06791680650644e-11 -0.2 2.00000349148173e-13 -8.38128813885296e-12 -0.15 1.50000348000003e-13 -3.09381855074201e-12 -0.0999999999999997 1.00000340685857e-13 -1.01511042647402e-12 -0.0499999999999997 5.00002942845011e-14 -2.6656579131946e-13 3.19189119579733e-16 1.02427433306957e-24 -1.02360066706582e-24 0.0500000000000003 -5.00018663360797e-14 1.06858249155241e-13 0.1 -1.00013702555123e-13 2.28016491051036e-13 0.15 -1.5008876723182e-13 3.93535698574651e-13 0.2 -2.00564823329692e-13 6.97235886982869e-13 0.25 -2.53583944846538e-13 1.43342835185962e-12 0.3 -3.22731045966222e-13 3.53176621648108e-12 0.35 -4.94160897510057e-13 9.959944443791e-12 0.4 -1.31426230036361e-12 3.03601382623643e-11 0.45 -6.2482036520936e-12 9.70339508463809e-11 0.5 -3.72719133333934e-11 3.23983405610125e-10 0.55 -2.33756005923353e-10 1.22040847897333e-09 0.6 -1.47958705797575e-09 5.0164035321159e-09 0.65 -9.38019724982526e-09 2.38016399741323e-08 0.700000000000001 -5.94707524822271e-08 1.2968294124692e-07 0.750000000000001 -3.76383995653622e-07 7.83731293590096e-07 0.800000000000001 -2.36205059858842e-06 5.1672198592405e-06 0.850000000000001 -1.53737152309583e-05 4.00938104529104e-05 0.900000000000001 -8.82880363029547e-05 0.000215177392308018 0.950000000000001 -0.000413331567982608 0.000915030520833476 1 -0.00162089287206514 0.00352322769459212 -1 1.00004713212806e-12 -5.61643810093382e-08 -0.95 9.50047149574575e-13 -3.96720334194462e-08 -0.9 9.00047162397927e-13 -2.7550220734723e-08 -0.85 8.50047171673199e-13 -1.87826015064205e-08 -0.8 8.00047178266116e-13 -1.25507565112721e-08 -0.75 7.50047182864142e-13 -8.20478971866531e-09 -0.7 7.00047186004901e-13 -5.23645320384952e-09 -0.65 6.50047188101854e-13 -3.25488076812882e-09 -0.6 6.00047189467158e-13 -1.96497148416249e-09 -0.55 5.50047190331739e-13 -1.14841822669851e-09 -0.5 5.00047190862616e-13 -6.47328916512928e-10 -0.45 4.50047191177589e-13 -3.50341430471441e-10 -0.4 4.000471912893e-13 -1.81088882299381e-10 -0.35 3.50047191089861e-13 -8.88323679168347e-11 -0.3 3.00047189541522e-13 -4.104541367401e-11 -0.25 2.5004718097498e-13 -1.77102104009089e-11 -0.2 2.00047134838832e-13 -7.07181999891841e-12 -0.15 1.5004688698014e-13 -2.59384509602248e-12 -0.0999999999999997 1.00045555692315e-13 -8.67647784359965e-13 -0.0499999999999997 5.00384052720117e-14 -2.4612061584439e-13 3.19189119579733e-16 4.13269573366711e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145329e-14 1.60031662079025e-13 0.1 -1.0131419408468e-13 4.28890747107815e-13 0.15 -1.57264867818105e-13 1.00652612714761e-12 0.2 -2.39226183332991e-13 2.46843966855197e-12 0.25 -4.60891730126788e-13 6.50051226635288e-12 0.3 -1.4329144690935e-12 1.81867360256245e-11 0.35 -6.43513668089688e-12 5.35880990342276e-11 0.4 -3.30837269315501e-11 1.6707490417506e-10 0.45 -1.75995843418763e-10 5.60188611427869e-10 0.5 -9.43363368757832e-10 2.1122065424613e-09 0.55 -5.06466963648339e-09 8.73470707776495e-09 0.6 -2.71986743939348e-08 3.98407514644345e-08 0.65 -1.46027863500081e-07 1.96001862768085e-07 0.700000000000001 -7.82463314103395e-07 1.01452864787302e-06 0.750000000000001 -4.14366862909447e-06 5.42933943073312e-06 0.800000000000001 -2.07277969862754e-05 2.99997180278691e-05 0.850000000000001 -9.37666059880353e-05 0.000175748855550209 0.900000000000001 -0.000401390164735837 0.000821117102831043 0.950000000000001 -0.00143884086581008 0.00299901182590006 1 -0.00381974700049741 0.0081593151944858 -1 1.00165917262577e-12 -5.55552264587846e-08 -0.95 9.51659191938014e-13 -3.90866824531864e-08 -0.9 9.01659206081387e-13 -2.70260964004749e-08 -0.85 8.51659216270628e-13 -1.83375518075542e-08 -0.8 8.01659223481238e-13 -1.21891502034958e-08 -0.75 7.51659228485456e-13 -7.92233344094503e-09 -0.7 7.01659231885099e-13 -5.02387787710995e-09 -0.65 6.51659234141164e-13 -3.10064994670273e-09 -0.6 6.01659235600142e-13 -1.85716530490979e-09 -0.55 5.51659236517056e-13 -1.0759435735884e-09 -0.5 5.01659237075288e-13 -6.00599387991606e-10 -0.45 4.5165923740333e-13 -3.21559859492307e-10 -0.4 4.01659231349398e-13 -1.64250943520177e-10 -0.35 3.51659207956548e-13 -7.95528839430209e-11 -0.3 3.01659096055077e-13 -3.62902338335926e-11 -0.25 2.5165856258165e-13 -1.54970428163576e-11 -0.2 2.0165602027038e-13 -6.18428833330062e-12 -0.15 1.51643905146023e-13 -2.33538160633362e-12 -0.0999999999999997 1.01586171988794e-13 -8.66384377973613e-13 -0.0499999999999997 5.13110517658733e-14 -3.08740217166106e-13 3.19189119579733e-16 5.74616864255699e-22 -5.74615219579319e-22 0.0500000000000003 -5.6247650120732e-14 3.95587765349087e-13 0.1 -1.36020047160779e-13 1.28235101739211e-12 0.15 -3.27896671325851e-13 3.50961535655099e-12 0.2 -1.05399191551782e-12 9.50662051465433e-12 0.25 -4.32583890387997e-12 2.66000235287292e-11 0.3 -1.97291460036267e-11 7.85284008612682e-11 0.35 -9.29433994145704e-11 2.49012373941188e-10 0.4 -4.41648364277424e-10 8.59772993498026e-10 0.45 -2.10316715602819e-09 3.26595096020147e-09 0.5 -1.0020665956095e-08 1.33593246851408e-08 0.55 -4.77484001495407e-08 5.80611406507811e-08 0.6 -2.27484438672063e-07 2.63112956742913e-07 0.65 -1.08269023355807e-06 1.22464418932153e-06 0.700000000000001 -5.12528803939137e-06 5.79266079457144e-06 0.750000000000001 -2.36184433306227e-05 2.7616406979642e-05 0.800000000000001 -9.82508932676661e-05 0.000131085280466662 0.850000000000001 -0.00034593973601612 0.000600656074811613 0.900000000000001 -0.00111310364808503 0.00225997518652384 0.950000000000001 -0.0029450491283354 0.00632401446246746 1 -0.00600454721727551 0.0133026463187316 -1 1.89720566081521e-12 -5.40738950622553e-08 -0.95 1.8472056833695e-12 -3.769047494691e-08 -0.9 1.79720569974608e-12 -2.57947253055733e-08 -0.85 1.74720571143273e-12 -1.73058727586864e-08 -0.8 1.69720571961648e-12 -1.13616346911356e-08 -0.75 1.6472057252301e-12 -7.28441487178628e-09 -0.7 1.59720572899448e-12 -4.55054458102264e-09 -0.65 1.54720573145667e-12 -2.76267024025145e-09 -0.6 1.49720573302353e-12 -1.62533113509371e-09 -0.55 1.44720573399124e-12 -9.23710207562861e-10 -0.5 1.39720453082828e-12 -5.05479067125612e-10 -0.45 1.34720108152102e-12 -2.65597911967399e-10 -0.4 1.29718774619167e-12 -1.33874762892667e-10 -0.35 1.24713619425968e-12 -6.50393161213395e-11 -0.3 1.19693690601653e-12 -3.10476008129231e-11 -0.25 1.14616650337832e-12 -1.53068773413037e-11 -0.2 1.09318830428162e-12 -8.49704371130467e-12 -0.15 1.03167527386925e-12 -5.66429724275096e-12 -0.0999999999999997 9.37168558041034e-13 -4.26907860116946e-12 -0.0499999999999997 7.15115884699073e-13 -2.86428973242023e-12 3.19189119579733e-16 5.07442621968693e-20 -5.07442426583624e-20 0.0500000000000003 -2.62118384353826e-12 7.40811803029243e-12 0.1 -1.26107856034698e-11 2.84431416505543e-11 0.15 -5.10849844833329e-11 9.26179256976204e-11 0.2 -1.99674032910855e-10 3.01581164906462e-10 0.25 -7.7394146806568e-10 1.01973806604173e-09 0.3 -2.99378103339977e-09 3.59090758783073e-09 0.35 -1.1574991290818e-08 1.30654503936758e-08 0.4 -4.47473195908286e-08 4.86694498925865e-08 0.45 -1.72975907322331e-07 1.84110255565012e-07 0.5 -6.68555377321561e-07 7.03508683307024e-07 0.55 -2.58242910907759e-06 2.70499647218447e-06 0.6 -9.9509719646427e-06 1.04317616414491e-05 0.65 -3.79737149209333e-05 4.01391395116261e-05 0.700000000000001 -0.000139673770130776 0.000151824971696778 0.750000000000001 -0.000458514068291757 0.000540387736668585 0.800000000000001 -0.00120455918294493 0.00165613140523589 0.850000000000001 -0.00247256271805011 0.00403692796388955 0.900000000000001 -0.00425036894903407 0.00797953480154495 0.950000000000001 -0.00666462642405866 0.0138600415152542 1 -0.00983014525251062 0.0219282259443325 -1 1.18975135152357e-10 -5.24880699391842e-08 -0.95 1.189251351773e-10 -3.62493285453486e-08 -0.9 1.18875135195239e-10 -2.45716344527744e-08 -0.85 1.18825135207906e-10 -1.63269278499491e-08 -0.8 1.18775135216674e-10 -1.06217914591039e-08 -0.75 1.18725135222614e-10 -6.75999509576158e-09 -0.7 1.18675135226552e-10 -4.2085439378859e-09 -0.65 1.18625135229116e-10 -2.5673443567891e-09 -0.6 1.18575135230799e-10 -1.54253058904944e-09 -0.55 1.18524897837337e-10 -9.2342097431264e-10 -0.5 1.18474353032543e-10 -5.62998194684534e-10 -0.45 1.18422557932515e-10 -3.61731801611264e-10 -0.4 1.18366643187059e-10 -2.54497449194966e-10 -0.35 1.18297154463758e-10 -2.00284275038608e-10 -0.3 1.18182940320882e-10 -1.74333050976209e-10 -0.25 1.17921358685164e-10 -1.62298886171316e-10 -0.2 1.17174210285878e-10 -1.55958381541255e-10 -0.15 1.14827149509893e-10 -1.49786489487052e-10 -0.0999999999999997 1.07208476768789e-10 -1.37104009945538e-10 -0.0499999999999997 8.22201701815567e-11 -1.02440330029083e-10 3.19189119579733e-16 1.25417769417674e-18 -1.25417751969333e-18 0.0500000000000003 -2.70795575537001e-10 3.14034385932236e-10 0.1 -1.16293516232925e-09 1.30036119774443e-09 0.15 -4.1023620476332e-09 4.45056238314179e-09 0.2 -1.37874450883423e-08 1.46271473089844e-08 0.25 -4.56987378354749e-08 4.77538395978037e-08 0.3 -1.5084064214968e-07 1.56136346704101e-07 0.35 -4.97235954543191e-07 5.11919483516112e-07 0.4 -1.63814115629387e-06 1.68227968708893e-06 0.45 -5.3924593734013e-06 5.53551042839562e-06 0.5 -1.77091663689186e-05 1.82045029908749e-05 0.55 -5.77142510721546e-05 5.95535595315204e-05 0.6 -0.000183580405647599 0.000191158066138396 0.65 -0.000545082700109929 0.000580761559436645 0.700000000000001 -0.00139309111136283 0.00156179007908436 0.750000000000001 -0.00287591604275475 0.00350001346986122 0.800000000000001 -0.0048739448662135 0.00654385058421534 0.850000000000001 -0.00718478946167308 0.0106784863151324 0.900000000000001 -0.0096798208346378 0.0159324124425297 0.950000000000001 -0.0123043058614968 0.0224236838110127 1 -0.0150392517097412 0.0302360924336709 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_vert_nqs_dc.standard0000644000175000017500000000035714163340332026341 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08296576508956e-05 2.45775095660876e-08 0.8 0.000903303312835216 8.70865242431547e-07 0.9 0.0238350870018373 4.05334612594097e-05 1 0.12042473538473 0.00730619530687674 1.1 0.315079560635942 0.117541124487458 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_sh_dc.standard0000644000175000017500000001014314163340332026412 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000199725416468772 6.15429099303043e-07 0.76 0.000286627994402323 8.47692072719937e-07 0.77 0.000410361592375268 1.17331387421831e-06 0.78 0.000585424982770872 1.630778644094e-06 0.79 0.000830914430802198 2.27405769024477e-06 0.8 0.00117103426671325 3.1781890592618e-06 0.81 0.00163493770420782 4.44628749027163e-06 0.82 0.0022554938972774 6.21797638071056e-06 0.83 0.00306679054132723 8.67905254158213e-06 0.84 0.00410066939415721 1.20720275244987e-05 0.85 0.00538313531250345 1.67070846155332e-05 0.86 0.00693166922462215 2.29729896914176e-05 0.87 0.00875409618612201 3.13477859143826e-05 0.88 0.0108489626106713 4.24104642486733e-05 0.89 0.0132068291819961 5.68596815555416e-05 0.9 0.0158116948349759 7.55611725591348e-05 0.91 0.0186417264034194 9.96920315412474e-05 0.92 0.0216681168142128 0.000131176783424267 0.93 0.0248498284197689 0.000173878693934651 0.94 0.0281216024368182 0.000236139123447492 0.95 0.0313818235268711 0.000333241888137728 0.96 0.0345125615149798 0.000482302949140481 0.97 0.0374515579624899 0.000687787085722666 0.98 0.0402273459980472 0.000939598513859871 0.99 0.0428994252546999 0.00122585455179779 1 0.0455120207295001 0.00153965303080242 1.01 0.0480889304361093 0.00187863366800309 1.02 0.050639003515098 0.00224310298238675 1.03 0.0531610332206047 0.00263475474862184 1.04 0.0556470461935164 0.00305605445963621 1.05 0.0580845727150863 0.00351002470560105 0.75 0.000200934587491984 6.17032299760708e-07 0.76 0.000288801584565652 8.52590789028404e-07 0.77 0.000414332946974303 1.1853337930762e-06 0.78 0.000592744542939186 1.65770592181482e-06 0.79 0.000844410339416235 2.3315145842164e-06 0.8 0.001195711440428 3.29705270382096e-06 0.81 0.0016792910557327 4.68653382548769e-06 0.82 0.00233319094963425 6.6937183199859e-06 0.83 0.00319845311094874 9.60221076513487e-06 0.84 0.0043152394084971 1.38255485614598e-05 0.85 0.00571823321291819 1.99628084331626e-05 0.86 0.00743257807982494 2.88738776725496e-05 0.87 0.0094714286356118 4.17783995185637e-05 0.88 0.0118354187352569 6.03809778401252e-05 0.89 0.0145135718907502 8.70214330660546e-05 0.9 0.017484870234126 0.000124841559370672 0.91 0.0207198696149403 0.000177948323943415 0.92 0.0241821193569605 0.0002515390646359 0.93 0.0278294629683486 0.000351942343251015 0.94 0.0316154334324054 0.000486530539630668 0.95 0.0354908433163294 0.000663496989397439 0.96 0.0394052309577419 0.000891589969441695 0.97 0.0433070664136923 0.00118008681977021 0.98 0.0471412073204002 0.00153951425930581 0.99 0.0508449178428869 0.00198330821247938 1 0.0543537608809762 0.00252819042413925 1.01 0.0576315322338925 0.00318777513683101 1.02 0.0606989137447592 0.00396152310351291 1.03 0.0636134435379907 0.0048347158475197 1.04 0.0664266415737056 0.00579002667314169 1.05 0.0691673566653614 0.00681494932975288 0.75 0.000202195548780516 5.12141321138528e-07 0.76 0.000291044142414924 7.13043849949463e-07 0.77 0.000418404701584597 1.00205503025943e-06 0.78 0.000600236820580942 1.42192351613298e-06 0.79 0.00085826664777568 2.03850985837381e-06 0.8 0.00122124265782116 2.9547960281586e-06 0.81 0.00172573994847669 4.33415878309534e-06 0.82 0.00241588775322811 6.43911885162308e-06 0.83 0.00334134219160953 9.69563871543938e-06 0.84 0.00455316164485113 1.47990439450943e-05 0.85 0.00609800197479559 2.28868588039754e-05 0.86 0.00801182032795984 3.58171860844807e-05 0.87 0.0103143984653578 5.66072059440355e-05 0.88 0.0130052754270615 9.00953512972469e-05 0.89 0.0160607553757467 0.000143864979079321 0.9 0.0194314649366193 0.000229350506842376 0.91 0.0230409686727239 0.000362771379172048 0.92 0.0267878702923376 0.000565141572126152 0.93 0.0305549350551831 0.000860447958143209 0.94 0.0342262354499814 0.00127181503167308 0.95 0.0377069345108628 0.00181703067190135 0.96 0.0409362928472419 0.00250567464691033 0.97 0.0438887158150224 0.0033390050907164 0.98 0.0465657342676982 0.00431188830020186 0.99 0.0489853376880465 0.00541530653084473 1 0.0511731262778513 0.00663845221264344 1.01 0.0531565836854439 0.00797012344973112 1.02 0.0549619881632143 0.00939952204453121 1.03 0.0566130461319233 0.0109166484835663 1.04 0.058130492234446 0.0125124565913723 1.05 0.0595321696523116 0.0141788759466543 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_1D_no_aval_dc.standard0000644000175000017500000000031114163340332026430 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00122655844418695 1.71579066018327e-06 0.85 0.00657423053537627 1.09598214498014e-05 0.9 0.0268020873808628 7.11880244650996e-05 0.95 0.0757441520754421 0.001402482392284 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_1D_no_aval_dc.standard0000644000175000017500000001540014163340332026400 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011806e-12 -1.000000000002e-12 0.95 1.90000000011803e-12 -9.50000000002003e-13 0.9 1.800000000118e-12 -9.00000000002003e-13 0.85 1.70000000011796e-12 -8.50000000002003e-13 0.8 1.60000000011793e-12 -8.00000000002003e-13 0.75 1.50000000011789e-12 -7.50000000002003e-13 0.7 1.40000000011785e-12 -7.00000000002002e-13 0.65 1.30000000011782e-12 -6.50000000002002e-13 0.6 1.20000000011778e-12 -6.00000000002002e-13 0.55 1.10000000011775e-12 -5.50000000002002e-13 0.5 1.00000000011771e-12 -5.00000000002002e-13 0.45 9.00000000117675e-13 -4.50000000002002e-13 0.4 8.00000000117638e-13 -4.00000000002002e-13 0.35 7.00000000117601e-13 -3.50000000002002e-13 0.3 6.00000000117563e-13 -3.00000000002002e-13 0.25 5.00000000117524e-13 -2.50000000002002e-13 0.2 4.00000000117482e-13 -2.00000000002002e-13 0.15 3.00000000117397e-13 -1.50000000002e-13 0.0999999999999997 2.00000000116749e-13 -1.00000000001981e-13 0.0499999999999997 1.00000000108591e-13 -5.00000000017936e-14 -3.19189119579733e-16 -6.38378241110775e-28 3.1918911960838e-28 -0.0500000000000003 -1.00000001454418e-13 5.00000000172105e-14 -0.1 -2.00000020966637e-13 1.00000000182315e-13 -0.15 -3.00000282998544e-13 1.50000001766223e-13 -0.2 -4.00003804287719e-13 2.00000016961274e-13 -0.25 -5.00051147974235e-13 2.5000016273329e-13 -0.3 -6.00687904189815e-13 3.00001561180812e-13 -0.35 -7.09254148570184e-13 3.50014977030612e-13 -0.4 -9.24514992676214e-13 4.00143680484298e-13 -0.45 -2.5755586938206e-12 4.51378382663993e-13 -0.5 -2.35493005008754e-11 5.13223359849035e-13 -0.55 -3.04579309450958e-10 6.7685682289898e-13 -0.6 -4.08569071050287e-09 1.81698673391562e-12 -0.65 -5.49745852082682e-08 1.23250260385069e-11 -0.7 -7.39885022795343e-07 1.12703055744962e-10 1 2.00013948163295e-12 -1.00004719155537e-12 0.95 1.90013945510395e-12 -9.50047191555375e-13 0.9 1.80013942845718e-12 -9.00047191555375e-13 0.85 1.70013940167258e-12 -8.50047191555375e-13 0.8 1.60013937472916e-12 -8.00047191555375e-13 0.75 1.50013934760572e-12 -7.50047191555375e-13 0.7 1.40013932028145e-12 -7.00047191555375e-13 0.65 1.30013929273632e-12 -6.50047191555375e-13 0.6 1.20013926495123e-12 -6.00047191555375e-13 0.55 1.10013923690789e-12 -5.50047191555375e-13 0.5 1.00013920858846e-12 -5.00047191555375e-13 0.45 9.00139179974026e-13 -4.50047191555375e-13 0.4 8.00139150967964e-13 -4.00047191487236e-13 0.35 7.00139121314399e-13 -3.50047191189397e-13 0.3 6.00139089394741e-13 -3.00047189589692e-13 0.25 5.00139045853616e-13 -2.50047180997613e-13 0.2 4.00138934924355e-13 -2.00047134849201e-13 0.15 3.00138418447674e-13 -1.50046886984178e-13 0.0999999999999997 2.0013541268557e-13 -1.00045555690914e-13 0.0499999999999997 1.00116877268553e-13 -5.00384052598932e-14 -3.19189119579733e-16 -6.40012713167122e-28 3.19695126304548e-28 -0.0500000000000003 -1.00748245365856e-13 5.02062762347062e-14 -0.1 -2.05600380658993e-13 1.01314194398061e-13 -0.15 -3.3741908780177e-13 1.57264868543545e-13 -0.2 -6.48097096445462e-13 2.3922618478237e-13 -0.25 -2.15446818459651e-12 4.60891732373051e-13 -0.3 -1.17066561520618e-11 1.43291446790143e-12 -0.35 -7.5690264715366e-11 6.43513660427478e-12 -0.4 -5.09516269048778e-10 3.30837259264049e-11 -0.45 -3.46507616947204e-09 1.75995846090797e-10 -0.5 -2.36626975013433e-08 9.43364185070697e-10 -0.55 -1.62010470861199e-07 5.06471262763448e-09 -0.6 -1.11137485576211e-06 2.72004265233512e-08 -0.65 -7.63528431261753e-06 1.4609204017321e-07 -0.7 -5.25154439546902e-05 7.84663581577332e-07 1 2.00327309389664e-12 -1.00165923778792e-12 0.95 1.90327263413029e-12 -9.51659237787923e-13 0.9 1.80327217215761e-12 -9.01659237787923e-13 0.85 1.70327170763529e-12 -8.51659237787923e-13 0.8 1.603271240209e-12 -8.01659237787923e-13 0.75 1.50327076952328e-12 -7.51659237787923e-13 0.7 1.40327029522937e-12 -7.01659237787923e-13 0.65 1.30326981698966e-12 -6.51659237787923e-13 0.6 1.20326933447866e-12 -6.01659237787923e-13 0.55 1.10326884737948e-12 -5.51659237787923e-13 0.5 1.00326835536948e-12 -5.01659237787923e-13 0.45 9.03267858052473e-13 -4.51659237787923e-13 0.4 8.03267348338529e-13 -4.01659231548673e-13 0.35 7.03266811646088e-13 -3.5165920805556e-13 0.3 6.03266156901861e-13 -3.0165909610208e-13 0.25 5.03264933102077e-13 -2.51658562601834e-13 0.2 4.03260844815409e-13 -2.01656020273409e-13 0.15 3.03242066307945e-13 -1.51643905126578e-13 0.0999999999999997 2.03146894901273e-13 -1.01586171915831e-13 0.0499999999999997 1.02649083360477e-13 -5.13110515504252e-14 -3.19189119579733e-16 -6.73489997832439e-28 3.35857530397846e-28 -0.0500000000000003 -1.1430090648748e-13 5.62476515155077e-14 -0.1 -2.9255739507784e-13 1.36020050203075e-13 -0.15 -8.26341358331857e-13 3.27896677190247e-13 -0.2 -3.35991801216618e-12 1.05399192556076e-12 -0.25 -1.72629192631786e-11 4.32583892443622e-12 -0.3 -9.64208472009089e-11 1.97291461828154e-11 -0.35 -5.53218963602306e-10 9.29434037817879e-11 -0.4 -3.21100942064052e-09 4.41648485056693e-10 -0.45 -1.8773725819177e-08 2.10317048912057e-09 -0.5 -1.10379181034685e-07 1.00207566689862e-08 -0.55 -6.51915756726515e-07 4.77508310125507e-08 -0.6 -3.86457051159182e-06 2.27548573707165e-07 -0.65 -2.29780330547545e-05 1.08435194839998e-06 -0.7 -0.000136951495045237 5.16734064081562e-06 1 1.33219427004579e-10 -1.189751352344e-10 0.95 1.33115811586297e-10 -1.189251352344e-10 0.9 1.33012173502187e-10 -1.188751352344e-10 0.85 1.32908510251085e-10 -1.188251352344e-10 0.8 1.32804819306136e-10 -1.187751352344e-10 0.75 1.32701098133085e-10 -1.187251352344e-10 0.7 1.32597344185626e-10 -1.186751352344e-10 0.65 1.32493554846706e-10 -1.186251352344e-10 0.6 1.32389727195254e-10 -1.185751352344e-10 0.55 1.32285619726768e-10 -1.18524897839728e-10 0.5 1.32181153706638e-10 -1.18474353033708e-10 0.45 1.32075359547305e-10 -1.18422557931724e-10 0.4 1.31965270630762e-10 -1.1836664318223e-10 0.35 1.31841057816621e-10 -1.1829715445018e-10 0.3 1.31670102188461e-10 -1.18182940289071e-10 0.25 1.31343990938434e-10 -1.17921358618367e-10 0.2 1.30501804613313e-10 -1.17174210160694e-10 0.15 1.27939715714198e-10 -1.14827149312192e-10 0.0999999999999997 1.19633575456885e-10 -1.07208476551534e-10 0.0499999999999997 9.20971153203884e-11 -8.22201701086366e-11 -3.19189119579733e-16 -1.01458872008457e-24 8.98266446444303e-25 -0.0500000000000003 -3.09539301181982e-10 2.70795604604009e-10 -0.1 -1.35412344669431e-09 1.16293554813797e-09 -0.15 -4.89383916911926e-09 4.10236647924629e-09 -0.2 -1.69431760517658e-08 1.37874939994979e-08 -0.25 -5.81667069048474e-08 4.56992726157392e-08 -0.3 -1.99989459049955e-07 1.50846485469855e-07 -0.35 -6.9089234203782e-07 4.97299903421944e-07 -0.4 -2.40134931087214e-06 1.638842272846e-06 -0.45 -8.40327548633715e-06 5.40015333199822e-06 -0.5 -2.96206986250249e-05 1.7793439436174e-05 -0.55 -0.000105205733627816 5.86285469385747e-05 -0.6 -0.000376589981755523 0.00019317768862541 -0.65 -0.0013586759196052 0.000636508749731422 -0.7 -0.00494049253498064 0.00209725704818037 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_vert_nqs_dc.standard0000644000175000017500000000031314163340332026330 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00122656679807209 1.70743677504318e-06 0.85 0.00657425533007271 1.09350267533624e-05 0.9 0.0268021404728432 7.11349324846942e-05 0.95 0.0757442262181916 0.00140240824953449 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full.standard0000644000175000017500000003037514163340332024656 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011217e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964114e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802728e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704444e-13 3.19189119579733e-16 -2.24597758603907e-28 1.21169035041947e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336811e-13 0.1 -1.00000000180705e-13 2.00168386731406e-13 0.15 -1.50000001763804e-13 3.0069212854088e-13 0.2 -2.00000016957996e-13 4.02750538790327e-13 0.25 -2.50000162728964e-13 5.10882824752989e-13 0.3 -3.00001561174843e-13 6.43179384985094e-13 0.35 -3.50014977021663e-13 8.72105835750342e-13 0.4 -4.0014368047636e-13 1.4894032121023e-12 0.45 -4.51378383027313e-13 3.67549234987265e-12 0.5 -5.13223380803581e-13 1.22313879887219e-11 0.55 -6.76857937575945e-13 4.6800215685024e-11 0.6 -1.81705065605479e-12 2.05208788215455e-10 0.65 -1.23289421879791e-11 9.90747303906032e-10 0.700000000000001 -1.12996696079871e-10 5.9758865147934e-09 0.750000000000001 -1.10383364313316e-09 4.77021314879904e-08 0.800000000000001 -1.35638003840213e-08 4.66620957301136e-07 0.850000000000001 -4.58639298253585e-07 5.39009448867008e-06 0.900000000000001 -7.90033263972685e-06 3.71835970080253e-05 0.950000000000001 -3.39967359305663e-05 0.000115640576214224 1 -0.000155082882777816 0.00041945340477099 -1 1.0000002982035e-12 -5.68278336533802e-08 -0.95 9.50000313067242e-13 -4.03167332210389e-08 -0.9 9.00000324036028e-13 -2.81325130735493e-08 -0.85 8.50000332004963e-13 -1.928080777775e-08 -0.8 8.00000337697021e-13 -1.29584696139906e-08 -0.75 7.50000341688266e-13 -8.52555125603526e-09 -0.7 7.00000344430943e-13 -5.47965562889993e-09 -0.65 6.50000346274365e-13 -3.43273255421459e-09 -0.6 6.00000347483561e-13 -2.09036215699404e-09 -0.55 5.50000348255689e-13 -1.23352296375684e-09 -0.5 5.0000034873425e-13 -7.02799433948287e-10 -0.45 4.50000349021191e-13 -3.84940855612756e-10 -0.4 4.00000349186998e-13 -2.01642835911982e-10 -0.35 3.50000349278102e-13 -1.00385894854869e-10 -0.3 3.00000349322311e-13 -4.71348148499051e-11 -0.25 2.50000349318233e-13 -2.06791680650644e-11 -0.2 2.00000349148173e-13 -8.38128813885296e-12 -0.15 1.50000348000003e-13 -3.09381855074201e-12 -0.0999999999999997 1.00000340685857e-13 -1.01511042647402e-12 -0.0499999999999997 5.00002942845011e-14 -2.6656579131946e-13 3.19189119579733e-16 1.0242743330455e-24 -1.02344920577202e-24 0.0500000000000003 -5.00018663360797e-14 1.06858249155241e-13 0.1 -1.00013702555123e-13 2.28016491051036e-13 0.15 -1.5008876723182e-13 3.93535698574651e-13 0.2 -2.00564823329692e-13 6.97235886982869e-13 0.25 -2.53583944846538e-13 1.43342835185962e-12 0.3 -3.22731045966222e-13 3.53176621648108e-12 0.35 -4.94160897510057e-13 9.959944443791e-12 0.4 -1.31426230036361e-12 3.03601382623643e-11 0.45 -6.2482036520936e-12 9.70339508463809e-11 0.5 -3.72719133333934e-11 3.23983405610125e-10 0.55 -2.33756005923353e-10 1.22040847897333e-09 0.6 -1.47958705797575e-09 5.0164035321159e-09 0.65 -9.38019724982526e-09 2.38016399741323e-08 0.700000000000001 -5.94707524822271e-08 1.2968294124692e-07 0.750000000000001 -3.76383995653365e-07 7.83731293590085e-07 0.800000000000001 -2.36205059858455e-06 5.16721985922926e-06 0.850000000000001 -1.53737152298865e-05 4.00938104509201e-05 0.900000000000001 -8.82880361300483e-05 0.000215177391965002 0.950000000000001 -0.000413331113512488 0.000915029603418413 1 -0.00162085655640695 0.00352315198250506 -1 1.00004713212806e-12 -5.61643810093382e-08 -0.95 9.50047149574575e-13 -3.96720334194462e-08 -0.9 9.00047162397927e-13 -2.7550220734723e-08 -0.85 8.50047171673199e-13 -1.87826015064205e-08 -0.8 8.00047178266116e-13 -1.25507565112721e-08 -0.75 7.50047182864142e-13 -8.20478971866531e-09 -0.7 7.00047186004901e-13 -5.23645320384952e-09 -0.65 6.50047188101854e-13 -3.25488076812882e-09 -0.6 6.00047189467158e-13 -1.96497148416249e-09 -0.55 5.50047190331739e-13 -1.14841822669851e-09 -0.5 5.00047190862616e-13 -6.47328916512928e-10 -0.45 4.50047191177589e-13 -3.50341430471441e-10 -0.4 4.000471912893e-13 -1.81088882299381e-10 -0.35 3.50047191089861e-13 -8.88323679168347e-11 -0.3 3.00047189541522e-13 -4.104541367401e-11 -0.25 2.5004718097498e-13 -1.77102104009089e-11 -0.2 2.00047134838832e-13 -7.07181999891841e-12 -0.15 1.5004688698014e-13 -2.59384509602248e-12 -0.0999999999999997 1.00045555692315e-13 -8.67647784359965e-13 -0.0499999999999997 5.00384052720117e-14 -2.4612061584439e-13 3.19189119579733e-16 4.13269573366711e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145329e-14 1.60031662079025e-13 0.1 -1.0131419408468e-13 4.28890747107815e-13 0.15 -1.57264867818105e-13 1.00652612714761e-12 0.2 -2.39226183332991e-13 2.46843966855197e-12 0.25 -4.60891730126788e-13 6.50051226635288e-12 0.3 -1.4329144690935e-12 1.81867360256245e-11 0.35 -6.43513668089688e-12 5.35880990342276e-11 0.4 -3.30837269315501e-11 1.6707490417506e-10 0.45 -1.75995843418763e-10 5.60188611427869e-10 0.5 -9.43363368757832e-10 2.1122065424613e-09 0.55 -5.06466963648339e-09 8.73470707776495e-09 0.6 -2.71986743939348e-08 3.98407514644345e-08 0.65 -1.46027863500081e-07 1.96001862768085e-07 0.700000000000001 -7.82463314103279e-07 1.01452864787275e-06 0.750000000000001 -4.1436686288927e-06 5.42933943049596e-06 0.800000000000001 -2.07277968768423e-05 2.99997178844949e-05 0.850000000000001 -9.37665899514637e-05 0.000175748828441745 0.900000000000001 -0.000401388910189876 0.000821114663202045 0.950000000000001 -0.00143878601984262 0.00299889806409545 1 -0.00381906433410471 0.00815783411945293 -1 1.00165917262577e-12 -5.55552264587846e-08 -0.95 9.51659191938014e-13 -3.90866824531864e-08 -0.9 9.01659206081387e-13 -2.70260964004749e-08 -0.85 8.51659216270628e-13 -1.83375518075542e-08 -0.8 8.01659223481238e-13 -1.21891502034958e-08 -0.75 7.51659228485456e-13 -7.92233344094503e-09 -0.7 7.01659231885099e-13 -5.02387787710995e-09 -0.65 6.51659234141164e-13 -3.10064994670273e-09 -0.6 6.01659235600142e-13 -1.85716530490979e-09 -0.55 5.51659236517056e-13 -1.0759435735884e-09 -0.5 5.01659237075288e-13 -6.00599387991606e-10 -0.45 4.5165923740333e-13 -3.21559859492307e-10 -0.4 4.01659231349398e-13 -1.64250943520177e-10 -0.35 3.51659207956548e-13 -7.95528839430209e-11 -0.3 3.01659096055077e-13 -3.62902338335926e-11 -0.25 2.5165856258165e-13 -1.54970428163576e-11 -0.2 2.0165602027038e-13 -6.18428833330062e-12 -0.15 1.51643905146023e-13 -2.33538160633362e-12 -0.0999999999999997 1.01586171988794e-13 -8.66384377973613e-13 -0.0499999999999997 5.13110517658733e-14 -3.08740217166106e-13 3.19189119579733e-16 5.74616864157091e-22 -5.74615169092221e-22 0.0500000000000003 -5.6247650120732e-14 3.95587765349087e-13 0.1 -1.36020047160779e-13 1.28235101739211e-12 0.15 -3.27896671325851e-13 3.50961535655099e-12 0.2 -1.05399191551782e-12 9.50662051465433e-12 0.25 -4.32583890387997e-12 2.66000235287292e-11 0.3 -1.97291460036267e-11 7.85284008612682e-11 0.35 -9.29433994145704e-11 2.49012373941188e-10 0.4 -4.41648364277424e-10 8.59772993498026e-10 0.45 -2.10316715602819e-09 3.26595096020147e-09 0.5 -1.0020665956095e-08 1.33593246851408e-08 0.55 -4.77484001495407e-08 5.80611406507811e-08 0.6 -2.27484438672063e-07 2.63112956742913e-07 0.65 -1.08269023355779e-06 1.22464418932117e-06 0.700000000000001 -5.12528803920945e-06 5.79266079437448e-06 0.750000000000001 -2.36184432462849e-05 2.76164068842251e-05 0.800000000000001 -9.8250871936936e-05 0.000131085252457222 0.850000000000001 -0.000345938297840558 0.00060065365389618 0.900000000000001 -0.00111306894718731 0.00225990352810641 0.950000000000001 -0.00294463267466778 0.0063230475173217 1 -0.00600243451966373 0.013297292609508 -1 1.89720566081521e-12 -5.40738950622553e-08 -0.95 1.8472056833695e-12 -3.769047494691e-08 -0.9 1.79720569974608e-12 -2.57947253055733e-08 -0.85 1.74720571143273e-12 -1.73058727586864e-08 -0.8 1.69720571961648e-12 -1.13616346911356e-08 -0.75 1.6472057252301e-12 -7.28441487178628e-09 -0.7 1.59720572899448e-12 -4.55054458102264e-09 -0.65 1.54720573145667e-12 -2.76267024025145e-09 -0.6 1.49720573302353e-12 -1.62533113509371e-09 -0.55 1.44720573399124e-12 -9.23710207562861e-10 -0.5 1.39720453082828e-12 -5.05479067125612e-10 -0.45 1.34720108152102e-12 -2.65597911967399e-10 -0.4 1.29718774619167e-12 -1.33874762892667e-10 -0.35 1.24713619425968e-12 -6.50393161213395e-11 -0.3 1.19693690601653e-12 -3.10476008129231e-11 -0.25 1.14616650337832e-12 -1.53068773413037e-11 -0.2 1.09318830428162e-12 -8.49704371130467e-12 -0.15 1.03167527386925e-12 -5.66429724275096e-12 -0.0999999999999997 9.37168558041034e-13 -4.26907860116946e-12 -0.0499999999999997 7.15115884699073e-13 -2.86428973242023e-12 3.19189119579733e-16 5.07442621968693e-20 -5.07442426583624e-20 0.0500000000000003 -2.62118384353826e-12 7.40811803029243e-12 0.1 -1.26107856034698e-11 2.84431416505543e-11 0.15 -5.10849844833329e-11 9.26179256976204e-11 0.2 -1.99674032910855e-10 3.01581164906462e-10 0.25 -7.7394146806568e-10 1.01973806604173e-09 0.3 -2.99378103339977e-09 3.59090758783073e-09 0.35 -1.1574991290818e-08 1.30654503936758e-08 0.4 -4.47473195908286e-08 4.86694498925865e-08 0.45 -1.72975907322331e-07 1.84110255565012e-07 0.5 -6.68555377321558e-07 7.0350868330702e-07 0.55 -2.58242910907618e-06 2.70499647218301e-06 0.6 -9.95097196430607e-06 1.04317616410987e-05 0.65 -3.79737148451087e-05 4.01391394317245e-05 0.700000000000001 -0.000139673756104485 0.00015182495635283 0.750000000000001 -0.000458512639903164 0.000540386014956755 0.800000000000001 -0.00120451283231257 0.00165606707784834 0.850000000000001 -0.00247212179323458 0.00403625109199195 0.900000000000001 -0.00424862656131454 0.00797674336928362 0.950000000000001 -0.00666076883991876 0.0138538780661483 1 -0.00982433604747805 0.0219192148015279 -1 1.18975135152357e-10 -5.24880699391842e-08 -0.95 1.189251351773e-10 -3.62493285453486e-08 -0.9 1.18875135195239e-10 -2.45716344527744e-08 -0.85 1.18825135207906e-10 -1.63269278499491e-08 -0.8 1.18775135216674e-10 -1.06217914591039e-08 -0.75 1.18725135222614e-10 -6.75999509576158e-09 -0.7 1.18675135226552e-10 -4.2085439378859e-09 -0.65 1.18625135229116e-10 -2.5673443567891e-09 -0.6 1.18575135230799e-10 -1.54253058904944e-09 -0.55 1.18524897837337e-10 -9.2342097431264e-10 -0.5 1.18474353032543e-10 -5.62998194684534e-10 -0.45 1.18422557932515e-10 -3.61731801611264e-10 -0.4 1.18366643187059e-10 -2.54497449194966e-10 -0.35 1.18297154463758e-10 -2.00284275038608e-10 -0.3 1.18182940320882e-10 -1.74333050976209e-10 -0.25 1.17921358685164e-10 -1.62298886171316e-10 -0.2 1.17174210285878e-10 -1.55958381541255e-10 -0.15 1.14827149509893e-10 -1.49786489487052e-10 -0.0999999999999997 1.07208476768789e-10 -1.37104009945538e-10 -0.0499999999999997 8.22201701815567e-11 -1.02440330029083e-10 3.19189119579733e-16 1.25417769417674e-18 -1.25417751969333e-18 0.0500000000000003 -2.70795575537001e-10 3.14034385932236e-10 0.1 -1.16293516232925e-09 1.30036119774443e-09 0.15 -4.1023620476332e-09 4.45056238314179e-09 0.2 -1.37874450883423e-08 1.46271473089844e-08 0.25 -4.56987378354749e-08 4.77538395978037e-08 0.3 -1.5084064214968e-07 1.56136346704101e-07 0.35 -4.97235954543191e-07 5.11919483516112e-07 0.4 -1.63814115629384e-06 1.68227968708889e-06 0.45 -5.39245937339608e-06 5.53551042839028e-06 0.5 -1.77091663682593e-05 1.82045029901989e-05 0.55 -5.77142509929298e-05 5.95535594498789e-05 0.6 -0.000183580397283889 0.00019115805741361 0.65 -0.000545082080399613 0.000580760893049513 0.700000000000001 -0.00139306927754893 0.00156176519038866 0.750000000000001 -0.00287563088477977 0.00349966560665439 0.800000000000001 -0.00487235012307329 0.00654180646944445 0.850000000000001 -0.00717973532956243 0.0106717663989803 0.900000000000001 -0.00966880701857439 0.0159170691195631 0.950000000000001 -0.0122860487977798 0.0223964487042878 1 -0.0150149253487059 0.0301965726115589 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_full.standard0000644000175000017500000003035314163340332024651 0ustar carstencarstenV(coll) I(coll) I(base) -1 -0.0366084990500513 1.38357135256687e-06 -0.95 -0.0209875915163122 8.45496545536041e-07 -0.9 -0.00825013140371825 3.7277559619124e-07 -0.85 -0.00148506741520282 8.35843952705631e-08 -0.8 -0.000131724129118788 1.01561824988379e-08 -0.75 -9.94490691381498e-06 1.07402940935274e-09 -0.7 -7.39813422884471e-07 1.12693671470237e-10 -0.65 -5.49741898050082e-08 1.23249533091576e-11 -0.6 -4.08568852583682e-09 1.81698616831927e-12 -0.55 -3.0457929729326e-10 6.76856818338706e-13 -0.5 -2.35493004273894e-11 5.13223359792425e-13 -0.45 -2.57555869298216e-12 4.51378382661732e-13 -0.4 -9.24514992636113e-13 4.00143680477876e-13 -0.35 -7.09254148561677e-13 3.50014977024656e-13 -0.3 -6.00687904184119e-13 3.00001561175678e-13 -0.25 -5.00051147969585e-13 2.50000162729006e-13 -0.2 -4.00003804284003e-13 2.00000016957843e-13 -0.15 -3.00000282995756e-13 1.50000001763648e-13 -0.0999999999999997 -2.00000020964777e-13 1.00000000180596e-13 -0.0499999999999997 -1.00000001453487e-13 5.00000000163501e-14 3.19189119579733e-16 7.32062920045099e-28 -4.13773487556919e-28 0.0500000000000003 1.00000000107662e-13 -5.00000000009859e-14 0.1 2.00000000114889e-13 -1.00000000000363e-13 0.15 3.00000000114606e-13 -1.49999999999571e-13 0.2 4.00000000113759e-13 -1.99999999998761e-13 0.25 5.00000000112868e-13 -2.49999999997948e-13 0.3 6.00000000111974e-13 -2.99999999997134e-13 0.35 7.00000000111079e-13 -3.49999999996318e-13 0.4 8.00000000110184e-13 -3.99999999995502e-13 0.45 9.00000000109289e-13 -4.49999999994686e-13 0.5 1.00000000010839e-12 -4.9999999999387e-13 0.55 1.1000000001075e-12 -5.49999999993054e-13 0.6 1.20000000010661e-12 -5.99999999992239e-13 0.65 1.30000000010571e-12 -6.49999999991425e-13 0.700000000000001 1.40000000010482e-12 -6.99999999990613e-13 0.750000000000001 1.50000000010394e-12 -7.49999999989805e-13 0.800000000000001 1.60000000010306e-12 -7.99999999989e-13 0.850000000000001 1.70000000010218e-12 -8.49999999988201e-13 0.900000000000001 1.80000000010131e-12 -8.99999999987409e-13 0.950000000000001 1.90000000010046e-12 -9.49999999986627e-13 1 2.00000000009961e-12 -9.99999999985856e-13 -1 -0.0443390617437555 6.45448532030139e-05 -0.95 -0.0285510790365105 4.36976841472e-05 -0.9 -0.0147994574454595 2.45215667531068e-05 -0.85 -0.00502319964381245 9.53700876310042e-06 -0.8 -0.000930424570754974 2.19508439845882e-06 -0.75 -0.000121421129719253 3.73025688913844e-07 -0.7 -1.47025063667224e-05 5.94041704053422e-08 -0.65 -1.76294698458515e-06 9.37868029480349e-09 -0.6 -2.11211906733932e-07 1.47954506508956e-09 -0.55 -2.53144163431471e-08 2.33754635677691e-10 -0.5 -3.03677679284692e-09 3.72718655695281e-11 -0.45 -3.65302837559025e-10 6.24820183076972e-12 -0.4 -4.45935650822096e-11 1.31426223136282e-12 -0.35 -5.97128211167285e-12 4.94160895447171e-13 -0.3 -1.23577751960621e-12 3.2273104625834e-13 -0.25 -5.76883361226476e-13 2.53583945054888e-13 -0.2 -4.09327462227031e-13 2.00564823424601e-13 -0.15 -3.01134908273734e-13 1.50088767268139e-13 -0.0999999999999997 -2.00137208879617e-13 1.00013702567142e-13 -0.0499999999999997 -1.00015056784201e-13 5.00018663392909e-14 3.19189119579733e-16 1.02521625419971e-24 -1.02491263365509e-24 0.0500000000000003 1.00001871942078e-13 -5.00002942865442e-14 0.1 2.00002107521839e-13 -1.00000340690779e-13 0.15 3.00002137997958e-13 -1.50000348010429e-13 0.2 4.00002142456409e-13 -2.00000349169414e-13 0.25 5.00002143565694e-13 -2.50000349360271e-13 0.3 6.00002144235877e-13 -3.00000349403208e-13 0.35 7.00002144848395e-13 -3.5000034942944e-13 0.4 8.00002145456724e-13 -4.00000349462196e-13 0.45 9.00002146071079e-13 -4.50000349507769e-13 0.5 1.0000021466974e-12 -5.00000349571327e-13 0.55 1.10000214734144e-12 -5.50000349658255e-13 0.6 1.20000214801027e-12 -6.00000349775264e-13 0.65 1.30000214871263e-12 -6.50000349930759e-13 0.700000000000001 1.40000214945946e-12 -7.00000350135319e-13 0.750000000000001 1.50000215026449e-12 -7.50000350402272e-13 0.800000000000001 1.60000215114483e-12 -8.00000350748325e-13 0.850000000000001 1.70000215212159e-12 -8.50000351194159e-13 0.900000000000001 1.80000215322028e-12 -9.00000351764852e-13 0.950000000000001 1.90000215447098e-12 -9.5000035249005e-13 1 2.0000021559082e-12 -1.00000035340386e-12 -1 -0.0485107962063572 0.00030617167338662 -0.95 -0.032781125795305 0.000216294153225593 -0.9 -0.0187599106617511 0.000132320932087109 -0.85 -0.00789415103019237 6.20128040614492e-05 -0.8 -0.00203653248800436 1.90137535184626e-05 -0.75 -0.000349184097031531 4.0895246169082e-06 -0.7 -5.22413855015006e-05 7.81108138007514e-07 -0.65 -7.62939082859921e-06 1.45994093116683e-07 -0.6 -1.11124820809003e-06 2.71977319796349e-08 -0.55 -1.62007734411507e-07 5.06463818528165e-09 -0.5 -2.3662637916791e-08 9.43362115804456e-10 -0.45 -3.4650748591284e-09 1.75995788116385e-10 -0.4 -5.09516239831959e-10 3.30837242835471e-11 -0.35 -7.56902640464155e-11 6.43513655656355e-12 -0.3 -1.17066561354271e-11 1.43291446639801e-12 -0.25 -2.15446818404186e-12 4.60891732304547e-13 -0.2 -6.48097096408551e-13 2.39226184772734e-13 -0.15 -3.37419087793704e-13 1.57264868537606e-13 -0.0999999999999997 -2.05600380650129e-13 1.01314194389227e-13 -0.0499999999999997 -1.00748245347407e-13 5.0206276216175e-14 3.19189119579733e-16 4.1327930575324e-23 -4.13275964187749e-23 0.0500000000000003 1.00116877357438e-13 -5.00384053487248e-14 0.1 2.00135412865529e-13 -1.00045555870765e-13 0.15 3.00138418791166e-13 -1.50046887327507e-13 0.2 4.00138935546174e-13 -2.000471354708e-13 0.25 5.00139046927994e-13 -2.50047182071714e-13 0.3 6.00139091176572e-13 -3.00047191371188e-13 0.35 7.00139124164954e-13 -3.50047194039557e-13 0.4 8.00139155385655e-13 -4.00047195904472e-13 0.45 9.00139186631029e-13 -4.50047198211862e-13 0.5 1.00013921837454e-12 -5.00047201340882e-13 0.55 1.10013925098358e-12 -5.50047205630427e-13 0.6 1.20013928481342e-12 -6.00047211416864e-13 0.65 1.30013932030051e-12 -6.50047219118799e-13 0.700000000000001 1.40013935798559e-12 -7.00047229258677e-13 0.750000000000001 1.50013939854054e-12 -7.50047242489303e-13 0.800000000000001 1.60013944279859e-12 -8.00047259623845e-13 0.850000000000001 1.70013949178425e-12 -8.50047281666014e-13 0.900000000000001 1.80013954673852e-12 -9.00047309835611e-13 0.950000000000001 1.9001396091342e-12 -9.5004734558445e-13 1 2.00013968067838e-12 -1.00004739059956e-12 -1 -0.0513918456757232 0.00092882861705816 -0.95 -0.0359926341218348 0.000677272100799906 -0.9 -0.0220547860279365 0.000439776479016355 -0.85 -0.0106782323841146 0.000232721525471797 -0.8 -0.00350320157353697 8.77940301489304e-05 -0.75 -0.000759958626934911 2.31017188820878e-05 -0.7 -0.00013514503979674 5.10789768162238e-06 -0.65 -2.29251666460162e-05 1.08217442674277e-06 -0.6 -3.8630297696013e-06 2.27469251619956e-07 -0.55 -6.51870456759208e-07 4.77479231977121e-08 -0.5 -1.10377832234077e-07 1.00206490642336e-08 -0.45 -1.87736850538269e-08 2.10316646316469e-09 -0.4 -3.21100816721824e-09 4.4164833255561e-10 -0.35 -5.53218924279597e-10 9.29433979217154e-11 -0.3 -9.64208459339514e-11 1.97291459530116e-11 -0.25 -1.72629192203273e-11 4.32583891501048e-12 -0.2 -3.35991801051756e-12 1.05399192510705e-12 -0.15 -8.26341358217645e-13 3.27896677129289e-13 -0.0999999999999997 -2.92557394983471e-13 1.36020050111027e-13 -0.0499999999999997 -1.14300906251254e-13 5.62476512789479e-14 3.19189119579733e-16 5.74617870151961e-22 -5.74617537252659e-22 0.0500000000000003 1.02649084645842e-13 -5.13110528352948e-14 0.1 2.03146897568975e-13 -1.01586174582541e-13 0.15 3.03242071497626e-13 -1.51643910314772e-13 0.2 4.03260854361339e-13 -2.01656029817359e-13 0.25 5.03264949825754e-13 -2.51658579323036e-13 0.3 6.03266184977783e-13 -3.01659124175031e-13 0.35 7.03266857047851e-13 -3.51659253453852e-13 0.4 8.0326741937403e-13 -4.01659302580203e-13 0.45 9.03267966001131e-13 -4.51659345732108e-13 0.5 1.00326851524187e-12 -5.01659397655343e-13 0.55 1.1032690788312e-12 -5.51659469234162e-13 0.6 1.20326966292499e-12 -6.0165956622827e-13 0.65 1.30327027498426e-12 -6.51659695776029e-13 0.700000000000001 1.40327092418359e-12 -7.01659866735128e-13 0.750000000000001 1.5032716218466e-12 -7.51660090103719e-13 0.800000000000001 1.6032723819363e-12 -8.01660379507196e-13 0.850000000000001 1.70327322156605e-12 -8.51660751710127e-13 0.900000000000001 1.80327416146614e-12 -9.0166122708739e-13 0.950000000000001 1.90327522632779e-12 -9.51661829975841e-13 1 2.00327644496018e-12 -1.00166258884136e-12 -1 -0.0513704367536829 0.00554582298801613 -0.95 -0.038532346828002 0.00429720514318476 -0.9 -0.0266356309699137 0.00309812122690977 -0.85 -0.0161820077579138 0.00199276263432392 -0.8 -0.00798189429594617 0.00106576148635515 -0.75 -0.00291699179551267 0.000436606768715813 -0.7 -0.000797169335360461 0.000137862619648601 -0.65 -0.00018718199476957 3.78728261529484e-05 -0.6 -4.20514431781316e-05 9.9462653706463e-06 -0.55 -9.39451341216727e-06 2.58222847740497e-06 -0.5 -2.10939337833518e-06 6.68547408412806e-07 -0.45 -4.77486864316801e-07 1.72975634403846e-07 -0.4 -1.0909038773176e-07 4.47473150240625e-08 -0.35 -2.51698561089497e-08 1.15749918507273e-08 -0.3 -5.86613817107152e-09 2.99378114148446e-09 -0.25 -1.38079093545529e-09 7.73941482289535e-10 -0.2 -3.2783200765013e-10 1.99674034746828e-10 -0.15 -7.80677286852396e-11 5.10849848359782e-11 -0.0999999999999997 -1.81784122982112e-11 1.26107857484937e-11 -0.0499999999999997 -3.62490496002113e-12 2.62118391369634e-12 3.19189119579733e-16 5.0744281634402e-20 -5.07442775954342e-20 0.0500000000000003 9.66676167670369e-13 -7.15115981014539e-13 0.1 1.2813803247892e-12 -9.37168817046322e-13 0.15 1.43496539439221e-12 -1.03167582598253e-12 0.2 1.54846310941623e-12 -1.09318937587457e-12 0.25 1.65192671198666e-12 -1.14616845898786e-12 0.3 1.75286535660541e-12 -1.19694030283003e-12 0.35 1.85316573875637e-12 -1.2471418502065e-12 0.4 1.95330439344336e-12 -1.29719682283514e-12 0.45 2.05340248669761e-12 -1.34721518328387e-12 0.5 2.15349131975069e-12 -1.39722582286955e-12 0.55 2.25357978335034e-12 -1.44723708229713e-12 0.6 2.35366994366446e-12 -1.49725087196102e-12 0.65 2.45376414669341e-12 -1.54726946602072e-12 0.700000000000001 2.5538637629523e-12 -1.59729418090912e-12 0.750000000000001 2.65397045991715e-12 -1.64732663332805e-12 0.800000000000001 2.75408626979309e-12 -1.69736880468613e-12 0.850000000000001 2.85421366224316e-12 -1.7474231130912e-12 0.900000000000001 2.95435561824159e-12 -1.79749248729574e-12 0.950000000000001 3.05451569709061e-12 -1.8475804342644e-12 1 3.15469808714677e-12 -1.89769109078633e-12 -1 -0.0431660303805227 0.015068395956812 -0.95 -0.0345211815544318 0.0123204895996803 -0.9 -0.0263554444220789 0.0096528748052668 -0.85 -0.0188325110271226 0.00711549944369315 -0.8 -0.0122033355075741 0.00479221507201087 -0.75 -0.00683281496697459 0.00281882114415036 -0.7 -0.00312121914743514 0.00137160184350454 -0.65 -0.00114093370414991 0.000541105202295822 -0.6 -0.00035574737727078 0.000183161409010159 -0.55 -0.000103400752515944 5.76818060046389e-05 -0.5 -2.94686689759387e-05 1.7707003630553e-05 -0.45 -8.39048122262206e-06 5.39232758456498e-06 -0.4 -2.40026484299502e-06 1.63813396456841e-06 -0.35 -6.90799594858783e-07 4.97235681907089e-07 -0.3 -1.99981458334747e-07 1.50840651582635e-07 -0.25 -5.81660118203643e-08 4.56987421499007e-08 -0.2 -1.69431154670891e-08 1.3787445857004e-08 -0.15 -4.89383393005888e-09 4.10236215826469e-09 -0.0999999999999997 -1.35412301371505e-09 1.16293517666e-09 -0.0499999999999997 -3.0953927157483e-10 2.70795577639145e-10 3.19189119579733e-16 1.25417961077836e-18 -1.25417949410381e-18 0.0500000000000003 9.20971180889145e-11 -8.22201725547156e-11 0.1 1.19633583483081e-10 -1.07208484081372e-10 0.15 1.27939733625892e-10 -1.14827166671112e-10 0.2 1.3050184100395e-10 -1.17174245981339e-10 0.25 1.31344060305878e-10 -1.17921427410259e-10 0.3 1.31670227497172e-10 -1.18183065020064e-10 0.35 1.31841273803068e-10 -1.18297369857734e-10 0.4 1.31965627892343e-10 -1.18366999864033e-10 0.45 1.32075929475231e-10 -1.18423127279078e-10 0.5 1.32182034351531e-10 -1.18475233097264e-10 0.55 1.32286942727268e-10 -1.18526220258138e-10 0.6 1.32391665959095e-10 -1.18577073415401e-10 0.65 1.32496334248212e-10 -1.18627914052323e-10 0.700000000000001 1.32601252124475e-10 -1.18679042588923e-10 0.750000000000001 1.32706499368756e-10 -1.18730535885004e-10 0.800000000000001 1.32812172015361e-10 -1.18782487357818e-10 0.850000000000001 1.32918385720178e-10 -1.18835010116947e-10 0.900000000000001 1.33025279233083e-10 -1.18888240378008e-10 0.950000000000001 1.3313301784925e-10 -1.18942340909321e-10 1 1.33241796526165e-10 -1.18997504167208e-10 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_vert_nqs_dc.standard0000644000175000017500000001543014163340332026301 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011834e-12 -1.00000000000228e-12 0.95 1.90000000011824e-12 -9.50000000002217e-13 0.9 1.80000000011816e-12 -9.00000000002167e-13 0.85 1.70000000011809e-12 -8.50000000002128e-13 0.8 1.60000000011802e-12 -8.00000000002097e-13 0.75 1.50000000011796e-12 -7.50000000002074e-13 0.7 1.40000000011791e-12 -7.00000000002056e-13 0.65 1.30000000011786e-12 -6.50000000002042e-13 0.6 1.20000000011781e-12 -6.00000000002031e-13 0.55 1.10000000011777e-12 -5.50000000002023e-13 0.5 1.00000000011773e-12 -5.00000000002017e-13 0.45 9.00000000117685e-13 -4.50000000002013e-13 0.4 8.00000000117645e-13 -4.00000000002009e-13 0.35 7.00000000117605e-13 -3.50000000002007e-13 0.3 6.00000000117566e-13 -3.00000000002005e-13 0.25 5.00000000117526e-13 -2.50000000002004e-13 0.2 4.00000000117483e-13 -2.00000000002003e-13 0.15 3.00000000117397e-13 -1.50000000002001e-13 0.0999999999999997 2.00000000116749e-13 -1.00000000001981e-13 0.0499999999999997 1.00000000108591e-13 -5.00000000017938e-14 -3.19189119579733e-16 -5.43786880097118e-28 2.24597758614192e-28 -0.0500000000000003 -1.00000001454418e-13 5.00000000172105e-14 -0.1 -2.00000020966637e-13 1.00000000182315e-13 -0.15 -3.00000282998544e-13 1.50000001766223e-13 -0.2 -4.00003804287719e-13 2.00000016961274e-13 -0.25 -5.00051147974235e-13 2.5000016273329e-13 -0.3 -6.00687904189815e-13 3.00001561180812e-13 -0.35 -7.09254148570184e-13 3.50014977030612e-13 -0.4 -9.24514992676214e-13 4.00143680484298e-13 -0.45 -2.5755586938206e-12 4.51378382663993e-13 -0.5 -2.35493005008754e-11 5.13223359849035e-13 -0.55 -3.04579309450958e-10 6.7685682289898e-13 -0.6 -4.08569071050287e-09 1.81698673391562e-12 -0.65 -5.49745852082682e-08 1.23250260385069e-11 -0.7 -7.39885022795343e-07 1.12703055744962e-10 1 2.00013968069695e-12 -1.00004739061937e-12 0.95 1.90013960915183e-12 -9.50047345603254e-13 0.9 1.80013954675522e-12 -9.00047309853412e-13 0.85 1.70013949180002e-12 -8.50047281682813e-13 0.8 1.60013944281343e-12 -8.00047259639644e-13 0.75 1.50013939855444e-12 -7.50047242504102e-13 0.7 1.40013935799855e-12 -7.00047229272478e-13 0.65 1.30013932031255e-12 -6.50047219131605e-13 0.6 1.20013928482453e-12 -6.00047211428674e-13 0.55 1.10013925099376e-12 -5.50047205641245e-13 0.5 1.00013921838379e-12 -5.00047201350708e-13 0.45 9.0013918663935e-13 -4.50047198220699e-13 0.4 8.00139155393048e-13 -4.0004719591232e-13 0.35 7.00139124171421e-13 -3.50047194046419e-13 0.3 6.00139091182113e-13 -3.00047191377064e-13 0.25 5.0013904693261e-13 -2.50047182076607e-13 0.2 4.00138935549864e-13 -2.0004713547471e-13 0.15 3.00138418793933e-13 -1.50046887330437e-13 0.0999999999999997 2.00135412867373e-13 -1.00045555872717e-13 0.0499999999999997 1.00116877358359e-13 -5.00384053497001e-14 -3.19189119579733e-16 4.13266370036768e-23 -4.13269573151007e-23 -0.0500000000000003 -1.00748245348355e-13 5.02062762172046e-14 -0.1 -2.05600380652276e-13 1.01314194391344e-13 -0.15 -3.37419087799479e-13 1.57264868541253e-13 -0.2 -6.48097096444784e-13 2.39226184781692e-13 -0.25 -2.15446818459634e-12 4.60891732372883e-13 -0.3 -1.17066561520617e-11 1.43291446790139e-12 -0.35 -7.5690264715366e-11 6.43513660427477e-12 -0.4 -5.09516269048778e-10 3.30837259264049e-11 -0.45 -3.46507616947204e-09 1.75995846090797e-10 -0.5 -2.36626975013433e-08 9.43364185070697e-10 -0.55 -1.62010470861199e-07 5.06471262763448e-09 -0.6 -1.11137485576211e-06 2.72004265233512e-08 -0.65 -7.63528431261753e-06 1.4609204017321e-07 -0.7 -5.25154439546902e-05 7.84663581577332e-07 1 2.00327644497845e-12 -1.00166258886974e-12 0.95 1.90327522634514e-12 -9.51661830002774e-13 0.9 1.80327416148257e-12 -9.01661227112887e-13 0.85 1.70327322158156e-12 -8.51660751734191e-13 0.8 1.6032723819509e-12 -8.01660379529828e-13 0.75 1.50327162186028e-12 -7.51660090124924e-13 0.7 1.40327092419635e-12 -7.01659866754905e-13 0.65 1.30327027499612e-12 -6.51659695794382e-13 0.6 1.20326966293593e-12 -6.01659566245201e-13 0.55 1.10326907884123e-12 -5.51659469249672e-13 0.5 1.00326851525099e-12 -5.01659397669435e-13 0.45 9.03267966009335e-13 -4.51659345744785e-13 0.4 8.03267419381323e-13 -4.01659302591467e-13 0.35 7.03266857054234e-13 -3.51659253463705e-13 0.3 6.03266184983256e-13 -3.01659124183475e-13 0.25 5.03264949830318e-13 -2.51658579330075e-13 0.2 4.03260854364995e-13 -2.01656029822994e-13 0.15 3.03242071500374e-13 -1.51643910319007e-13 0.0999999999999997 2.03146897570819e-13 -1.01586174585377e-13 0.0499999999999997 1.02649084646782e-13 -5.13110528367307e-14 -3.19189119579733e-16 5.74616526327409e-22 -5.74616864157091e-22 -0.0500000000000003 -1.1430090625269e-13 5.6247651280717e-14 -0.1 -2.92557394991571e-13 1.36020050116806e-13 -0.15 -8.26341358303969e-13 3.27896677162359e-13 -0.2 -3.35991801215847e-12 1.05399192555306e-12 -0.25 -1.72629192631769e-11 4.32583892443447e-12 -0.3 -9.64208472009085e-11 1.97291461828151e-11 -0.35 -5.53218963602306e-10 9.29434037817878e-11 -0.4 -3.21100942064052e-09 4.41648485056693e-10 -0.45 -1.8773725819177e-08 2.10317048912057e-09 -0.5 -1.10379181034685e-07 1.00207566689862e-08 -0.55 -6.51915756726515e-07 4.77508310125507e-08 -0.6 -3.86457051159182e-06 2.27548573707165e-07 -0.65 -2.29780330547545e-05 1.08435194839998e-06 -0.7 -0.000136951495045237 5.16734064081562e-06 1 1.33241796204426e-10 -1.18997504434247e-10 0.95 1.33133017528126e-10 -1.18942341176229e-10 0.9 1.33025278912553e-10 -1.18888240644765e-10 0.85 1.32918385400224e-10 -1.18835010383538e-10 0.8 1.32812171695968e-10 -1.18782487624231e-10 0.75 1.32706499049914e-10 -1.18730536151229e-10 0.7 1.32601251806177e-10 -1.18679042854951e-10 0.65 1.32496333930453e-10 -1.18627914318147e-10 0.6 1.32391665641871e-10 -1.18577073681017e-10 0.55 1.32286942410586e-10 -1.18526220523547e-10 0.5 1.321820340354e-10 -1.18475233362469e-10 0.45 1.32075929159693e-10 -1.18423127544111e-10 0.4 1.31965627577535e-10 -1.18367000129002e-10 0.35 1.31841273489442e-10 -1.18297370123001e-10 0.3 1.31670227186215e-10 -1.18183065286824e-10 0.25 1.31344060002507e-10 -1.1792142768244e-10 0.2 1.30501840724346e-10 -1.17174246271727e-10 0.15 1.27939733422291e-10 -1.14827167020285e-10 0.0999999999999997 1.1963358351171e-10 -1.07208484606359e-10 0.0499999999999997 9.20971186724514e-11 -8.22201734606996e-11 -3.19189119579733e-16 1.25417761662856e-18 -1.25417773295083e-18 -0.0500000000000003 -3.09539300769483e-10 2.70795604191511e-10 -0.1 -1.35412344657853e-09 1.16293554802218e-09 -0.15 -4.8938391690926e-09 4.10236647921964e-09 -0.2 -1.6943176051761e-08 1.37874939994932e-08 -0.25 -5.81667069048468e-08 4.56992726157386e-08 -0.3 -1.99989459049955e-07 1.50846485469854e-07 -0.35 -6.9089234203782e-07 4.97299903421944e-07 -0.4 -2.40134931087214e-06 1.638842272846e-06 -0.45 -8.40327548633715e-06 5.40015333199822e-06 -0.5 -2.96206986250249e-05 1.7793439436174e-05 -0.55 -0.000105205733627816 5.86285469385747e-05 -0.6 -0.000376589981755523 0.00019317768862541 -0.65 -0.0013586759196052 0.000636508749731422 -0.7 -0.00494049253498064 0.00209725704818037 tmp_ns50wwy/tests/hicum2/npn/reference/vbe_0_npn_1D_no_aval.standard0000644000175000017500000003026214163340332025651 0ustar carstencarstenV(coll) I(coll) I(base) -1 -4.39311947779146 8.73095920185774e-05 -0.95 -0.326495882608939 9.10101825505025e-06 -0.9 -0.0242652075254397 9.48676927690936e-07 -0.85 -0.00180337458260026 9.88893781007038e-08 -0.8 -0.000134013005345667 1.03087878741381e-08 -0.75 -9.95785113724838e-06 1.07523878099564e-09 -0.7 -7.39885022795332e-07 1.12703055744961e-10 -0.65 -5.49745852082662e-08 1.23250260385065e-11 -0.6 -4.0856907105027e-09 1.81698673391558e-12 -0.55 -3.04579309450946e-10 6.76856822898975e-13 -0.5 -2.35493005008745e-11 5.13223359849034e-13 -0.45 -2.57555869382054e-12 4.51378382663993e-13 -0.4 -9.24514992676208e-13 4.00143680484297e-13 -0.35 -7.09254148570182e-13 3.50014977030611e-13 -0.3 -6.00687904189814e-13 3.00001561180811e-13 -0.25 -5.00051147974233e-13 2.50000162733289e-13 -0.2 -4.00003804287718e-13 2.00000016961273e-13 -0.15 -3.00000282998543e-13 1.50000001766223e-13 -0.0999999999999997 -2.00000020966635e-13 1.00000000182314e-13 -0.0499999999999997 -1.00000001454416e-13 5.00000000172099e-14 3.19189119579733e-16 6.3837824112253e-28 -3.19189119606176e-28 0.0500000000000003 1.00000000108592e-13 -5.00000000017943e-14 0.1 2.0000000011675e-13 -1.00000000001981e-13 0.15 3.00000000117398e-13 -1.50000000002001e-13 0.2 4.00000000117483e-13 -2.00000000002003e-13 0.25 5.00000000117525e-13 -2.50000000002003e-13 0.3 6.00000000117564e-13 -3.00000000002003e-13 0.35 7.00000000117602e-13 -3.50000000002003e-13 0.4 8.00000000117639e-13 -4.00000000002003e-13 0.45 9.00000000117676e-13 -4.50000000002003e-13 0.5 1.00000000011771e-12 -5.00000000002003e-13 0.55 1.10000000011775e-12 -5.50000000002003e-13 0.6 1.20000000011779e-12 -6.00000000002003e-13 0.65 1.30000000011782e-12 -6.50000000002003e-13 0.700000000000001 1.40000000011786e-12 -7.00000000002003e-13 0.750000000000001 1.50000000011789e-12 -7.50000000002003e-13 0.800000000000001 1.60000000011793e-12 -8.00000000002003e-13 0.850000000000001 1.70000000011796e-12 -8.50000000002003e-13 0.900000000000001 1.800000000118e-12 -9.00000000002003e-13 0.950000000000001 1.90000000011803e-12 -9.50000000002003e-13 1 2.00000000011806e-12 -1.000000000002e-12 -1 -5.01125870772451 0.00387025895403701 -0.95 -0.599603807674249 0.000610263789591701 -0.9 -0.0717490490774907 9.62266090537215e-05 -0.85 -0.00858642785159137 1.51730461610763e-05 -0.8 -0.00102768204190415 2.39249190437493e-06 -0.75 -0.00012300973436108 3.77249586153604e-07 -0.7 -1.47257234073122e-05 5.94854287492162e-08 -0.65 -1.76328165158324e-06 9.38022288444381e-09 -0.6 -2.11216730441902e-07 1.47957434063709e-09 -0.55 -2.53144860204727e-08 2.33755192271139e-10 -0.5 -3.03677780294313e-09 3.72718761856141e-11 -0.45 -3.6530285232326e-10 6.24820203501557e-12 -0.4 -4.45935653058417e-11 1.31426223546667e-12 -0.35 -5.97128211579083e-12 4.94160895546791e-13 -0.3 -1.23577751975776e-12 3.22731046267901e-13 -0.25 -5.76883361241871e-13 2.5358394505986e-13 -0.2 -4.09327462231741e-13 2.00564823428333e-13 -0.15 -3.01134908276659e-13 1.50088767270959e-13 -0.0999999999999997 -2.00137208881651e-13 1.00013702569157e-13 -0.0499999999999997 -1.00015056785575e-13 5.00018663406591e-14 3.19189119579733e-16 6.38407257965481e-28 -3.19193228961041e-28 0.0500000000000003 1.00001871940843e-13 -5.00002942852498e-14 0.1 2.00002107519429e-13 -1.00000340688251e-13 0.15 3.00002137992798e-13 -1.50000348005093e-13 0.2 4.00002142446043e-13 -2.00000349158815e-13 0.25 5.00002143546447e-13 -2.50000349340734e-13 0.3 6.00002144202434e-13 -3.00000349369419e-13 0.35 7.00002144793298e-13 -3.50000349373942e-13 0.4 8.00002145369772e-13 -4.00000349374789e-13 0.45 9.00002145938608e-13 -4.50000349374789e-13 0.5 1.00000214650142e-12 -5.00000349374789e-13 0.55 1.10000214705859e-12 -5.50000349374789e-13 0.6 1.20000214761046e-12 -6.00000349374789e-13 0.65 1.30000214815737e-12 -6.50000349374789e-13 0.700000000000001 1.4000021486997e-12 -7.00000349374789e-13 0.750000000000001 1.50000214923782e-12 -7.50000349374789e-13 0.800000000000001 1.60000214977216e-12 -8.00000349374789e-13 0.850000000000001 1.70000215030313e-12 -8.50000349374789e-13 0.900000000000001 1.80000215083118e-12 -9.00000349374789e-13 0.950000000000001 1.90000215135673e-12 -9.50000349374789e-13 1 2.00000215188019e-12 -1.00000034937479e-12 -1 -5.63011191772884 0.0188379669510573 -0.95 -0.816075043280541 0.00350732122782141 -0.9 -0.118320895889505 0.000653005827965896 -0.85 -0.017161068960037 0.000121579001631253 -0.8 -0.00249011267932276 2.26360215187798e-05 -0.75 -0.000361508691123472 4.21445744634287e-06 -0.7 -5.25154439546897e-05 7.84663581577327e-07 -0.65 -7.63528431261732e-06 1.46092040173207e-07 -0.6 -1.11137485576208e-06 2.72004265233506e-08 -0.55 -1.62010470861195e-07 5.06471262763436e-09 -0.5 -2.36626975013426e-08 9.43364185070673e-10 -0.45 -3.46507616947195e-09 1.75995846090794e-10 -0.4 -5.09516269048764e-10 3.30837259264042e-11 -0.35 -7.56902647153641e-11 6.43513660427464e-12 -0.3 -1.17066561520615e-11 1.4329144679014e-12 -0.25 -2.15446818459647e-12 4.60891732373046e-13 -0.2 -6.48097096445454e-13 2.39226184782368e-13 -0.15 -3.37419087801768e-13 1.57264868543544e-13 -0.0999999999999997 -2.05600380658991e-13 1.01314194398061e-13 -0.0499999999999997 -1.00748245365855e-13 5.02062762347055e-14 3.19189119579733e-16 6.40160624586851e-28 -3.19685881840815e-28 0.0500000000000003 1.00116877268554e-13 -5.00384052598939e-14 0.1 2.00135412685572e-13 -1.00045555690915e-13 0.15 3.00138418447675e-13 -1.50046886984178e-13 0.2 4.00138934924357e-13 -2.00047134849202e-13 0.25 5.00139045853617e-13 -2.50047180997614e-13 0.3 6.00139089394742e-13 -3.00047189589693e-13 0.35 7.001391213144e-13 -3.50047191189398e-13 0.4 8.00139150967965e-13 -4.00047191487236e-13 0.45 9.00139179974027e-13 -4.50047191555376e-13 0.5 1.00013920858846e-12 -5.00047191555376e-13 0.55 1.10013923690789e-12 -5.50047191555375e-13 0.6 1.20013926495123e-12 -6.00047191555376e-13 0.65 1.30013929273632e-12 -6.50047191555376e-13 0.700000000000001 1.40013932028145e-12 -7.00047191555376e-13 0.750000000000001 1.50013934760572e-12 -7.50047191555376e-13 0.800000000000001 1.60013937472916e-12 -8.00047191555376e-13 0.850000000000001 1.70013940167258e-12 -8.50047191555376e-13 0.900000000000001 1.80013942845718e-12 -9.00047191555376e-13 0.950000000000001 1.90013945510395e-12 -9.50047191555376e-13 1 2.00013948163295e-12 -1.00004719155537e-12 -1 -6.32098889840421 0.0605130727475002 -0.95 -1.05300188876589 0.0126984928103491 -0.9 -0.175532099505921 0.00266474188743102 -0.85 -0.0292845993037305 0.000559188357169254 -0.8 -0.00489064783660784 0.000117344055554711 -0.75 -0.000817785733770458 2.46243103052511e-05 -0.7 -0.000136951495045236 5.16734064081559e-06 -0.65 -2.29780330547539e-05 1.08435194839996e-06 -0.6 -3.86457051159172e-06 2.27548573707159e-07 -0.55 -6.51915756726499e-07 4.77508310125495e-08 -0.5 -1.10379181034682e-07 1.0020756668986e-08 -0.45 -1.87737258191766e-08 2.10317048912053e-09 -0.4 -3.21100942064045e-09 4.41648485056683e-10 -0.35 -5.53218963602293e-10 9.29434037817859e-11 -0.3 -9.64208472009066e-11 1.9729146182815e-11 -0.25 -1.72629192631783e-11 4.32583892443613e-12 -0.2 -3.35991801216611e-12 1.05399192556075e-12 -0.15 -8.26341358331844e-13 3.27896677190243e-13 -0.0999999999999997 -2.92557395077837e-13 1.36020050203074e-13 -0.0499999999999997 -1.14300906487479e-13 5.62476515155069e-14 3.19189119579733e-16 6.72109491248302e-28 -3.3526588471893e-28 0.0500000000000003 1.02649083360478e-13 -5.13110515504258e-14 0.1 2.03146894901274e-13 -1.01586171915831e-13 0.15 3.03242066307947e-13 -1.51643905126578e-13 0.2 4.03260844815411e-13 -2.0165602027341e-13 0.25 5.03264933102078e-13 -2.51658562601835e-13 0.3 6.03266156901862e-13 -3.01659096102081e-13 0.35 7.03266811646089e-13 -3.5165920805556e-13 0.4 8.0326734833853e-13 -4.01659231548673e-13 0.45 9.03267858052474e-13 -4.51659237787924e-13 0.5 1.00326835536948e-12 -5.01659237787923e-13 0.55 1.10326884737948e-12 -5.51659237787923e-13 0.6 1.20326933447866e-12 -6.01659237787923e-13 0.65 1.30326981698966e-12 -6.51659237787924e-13 0.700000000000001 1.40327029522937e-12 -7.01659237787924e-13 0.750000000000001 1.50327076952329e-12 -7.51659237787924e-13 0.800000000000001 1.603271240209e-12 -8.01659237787924e-13 0.850000000000001 1.70327170763529e-12 -8.51659237787924e-13 0.900000000000001 1.80327217215761e-12 -9.01659237787924e-13 0.950000000000001 1.90327263413029e-12 -9.51659237787924e-13 1 2.00327309389664e-12 -1.00165923778792e-12 -1 -8.60371176254274 0.498435427837973 -0.95 -1.84213728258885 0.128935663789577 -0.9 -0.395470605631505 0.0333531777003904 -0.85 -0.0851682168321259 0.00862782592505589 -0.8 -0.0184101258207032 0.00223185271458479 -0.75 -0.00399691799726668 0.000577337394380012 -0.7 -0.000872120770323432 0.000149346085647428 -0.65 -0.000191387891614955 3.86329612906097e-05 -0.6 -4.22741856901117e-05 9.99360421369521e-06 -0.55 -9.40628709042089e-06 2.58515303334836e-06 -0.5 -2.11002386781702e-06 6.68729088106644e-07 -0.45 -4.77521198628455e-07 1.72987015700744e-07 -0.4 -1.09092290753069e-07 4.47480341213109e-08 -0.35 -2.51699634650821e-08 1.15750376504354e-08 -0.3 -5.86614433264538e-09 2.99378407983379e-09 -0.25 -1.38079129489278e-09 7.73941672042803e-10 -0.2 -3.27832028912216e-10 1.99674047073787e-10 -0.15 -7.80677299524913e-11 5.10849856427309e-11 -0.0999999999999997 -1.81784123778899e-11 1.26107858073294e-11 -0.0499999999999997 -3.62490498248308e-12 2.62118393583013e-12 3.19189119579733e-16 1.13091099372484e-26 -8.07793566946316e-27 0.0500000000000003 9.66676044964888e-13 -7.15115858496036e-13 0.1 1.28138005309539e-12 -9.3716854560964e-13 0.15 1.43496483653367e-12 -1.0316752684082e-12 0.2 1.54846203528836e-12 -1.09318830204633e-12 0.25 1.65192475522096e-12 -1.1461665025342e-12 0.3 1.75286195920232e-12 -1.19693690575066e-12 0.35 1.85316008246799e-12 -1.24713619425335e-12 0.4 1.95329531661961e-12 -1.29718774635808e-12 0.45 2.05338838495217e-12 -1.3472010818966e-12 0.5 2.15347002805555e-12 -1.39720453154406e-12 0.55 2.25354843595865e-12 -1.4472057352866e-12 0.6 2.35362480659735e-12 -1.4972057352866e-12 0.65 2.45370041555504e-12 -1.5472057352866e-12 0.700000000000001 2.55377531691396e-12 -1.5972057352866e-12 0.750000000000001 2.65384956144829e-12 -1.6472057352866e-12 0.800000000000001 2.75392319995453e-12 -1.6972057352866e-12 0.850000000000001 2.85399628398789e-12 -1.7472057352866e-12 0.900000000000001 2.95406886577012e-12 -1.7972057352866e-12 0.950000000000001 3.05414099763878e-12 -1.8472057352866e-12 1 3.1542127311613e-12 -1.8972057352866e-12 -1 -13.2713453743622 2.68370675662406 -0.95 -3.50376299930901 0.814493889989311 -0.9 -0.930272604889327 0.247195523519849 -0.85 -0.248525207887812 0.0750228179155004 -0.8 -0.0668389569897212 0.0227691145607402 -0.75 -0.0181041363260139 0.00691033192322964 -0.7 -0.00494049253498062 0.00209725704818036 -0.65 -0.00135867591960517 0.00063650874973141 -0.6 -0.000376589981755516 0.000193177688625406 -0.55 -0.000105205733627814 5.86285469385737e-05 -0.5 -2.96206986250244e-05 1.77934394361737e-05 -0.45 -8.403275486337e-06 5.40015333199813e-06 -0.4 -2.4013493108721e-06 1.63884227284598e-06 -0.35 -6.90892342037809e-07 4.97299903421936e-07 -0.3 -1.99989459049952e-07 1.50846485469852e-07 -0.25 -5.81667069048465e-08 4.56992726157385e-08 -0.2 -1.69431760517655e-08 1.37874939994977e-08 -0.15 -4.89383916911918e-09 4.10236647924623e-09 -0.0999999999999997 -1.35412344669429e-09 1.16293554813795e-09 -0.0499999999999997 -3.09539301181975e-10 2.70795604604003e-10 3.19189119579733e-16 1.01943548148625e-24 -9.04072298266011e-25 0.0500000000000003 9.2097115320389e-11 -8.22201701086371e-11 0.1 1.19633575456886e-10 -1.07208476551535e-10 0.15 1.27939715714198e-10 -1.14827149312192e-10 0.2 1.30501804613313e-10 -1.17174210160695e-10 0.25 1.31343990938434e-10 -1.17921358618367e-10 0.3 1.31670102188461e-10 -1.18182940289071e-10 0.35 1.31841057816621e-10 -1.1829715445018e-10 0.4 1.31965270630762e-10 -1.1836664318223e-10 0.45 1.32075359547305e-10 -1.18422557931724e-10 0.5 1.32181153706638e-10 -1.18474353033708e-10 0.55 1.32285619726767e-10 -1.18524897839728e-10 0.6 1.32389727195254e-10 -1.185751352344e-10 0.65 1.32493554846705e-10 -1.186251352344e-10 0.700000000000001 1.32597344185626e-10 -1.186751352344e-10 0.750000000000001 1.32701098133085e-10 -1.187251352344e-10 0.800000000000001 1.32804819306136e-10 -1.187751352344e-10 0.850000000000001 1.32908510251085e-10 -1.188251352344e-10 0.900000000000001 1.33012173502187e-10 -1.188751352344e-10 0.950000000000001 1.33115811586297e-10 -1.189251352344e-10 1 1.33219427004579e-10 -1.189751352344e-10 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_lat_nqs_dc.standard0000644000175000017500000001542014163340332026100 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011415e-12 -9.99999999993901e-13 0.95 1.90000000011427e-12 -9.49999999994269e-13 0.9 1.8000000001144e-12 -8.99999999994649e-13 0.85 1.70000000011454e-12 -8.49999999995038e-13 0.8 1.60000000011469e-12 -7.99999999995435e-13 0.75 1.50000000011484e-12 -7.49999999995838e-13 0.7 1.400000000115e-12 -6.99999999996244e-13 0.65 1.30000000011517e-12 -6.49999999996654e-13 0.6 1.20000000011533e-12 -5.99999999997065e-13 0.55 1.1000000001155e-12 -5.49999999997478e-13 0.5 1.00000000011566e-12 -4.99999999997892e-13 0.45 9.00000000115832e-13 -4.49999999998306e-13 0.4 8.00000000116e-13 -3.9999999999872e-13 0.35 7.00000000116168e-13 -3.49999999999133e-13 0.3 6.00000000116336e-13 -2.99999999999546e-13 0.25 5.00000000116503e-13 -2.49999999999958e-13 0.2 4.00000000116666e-13 -2.00000000000369e-13 0.15 3.00000000116786e-13 -1.50000000000778e-13 0.0999999999999997 2.00000000116342e-13 -1.00000000001167e-13 0.0499999999999997 1.00000000108388e-13 -5.00000000013875e-14 -3.19189119579733e-16 -5.43786880085363e-28 2.24591164906751e-28 -0.0500000000000003 -1.00000001454215e-13 5.00000000168056e-14 -0.1 -2.00000020966233e-13 1.00000000181506e-13 -0.15 -3.00000282997939e-13 1.50000001765013e-13 -0.2 -4.00003804286914e-13 2.00000016959663e-13 -0.25 -5.00051147973227e-13 2.5000016273128e-13 -0.3 -6.00687904188569e-13 3.00001561178405e-13 -0.35 -7.09254148568113e-13 3.50014977027808e-13 -0.4 -9.24514992664328e-13 4.0014368048109e-13 -0.45 -2.57555869366297e-12 4.51378382660282e-13 -0.5 -2.3549300498494e-11 5.13223359843731e-13 -0.55 -3.04579309408817e-10 6.76856822878198e-13 -0.6 -4.08569070898393e-09 1.81698673350532e-12 -0.65 -5.49745850699349e-08 1.23250260127089e-11 -0.7 -7.39885005814236e-07 1.12703053495311e-10 1 2.00013968069239e-12 -1.00004739060888e-12 0.95 1.9001396091475e-12 -9.500473455933e-13 0.9 1.80013954675112e-12 -9.00047309843996e-13 0.85 1.70013949179616e-12 -8.50047281673932e-13 0.8 1.6001394428098e-12 -8.00047259631298e-13 0.75 1.50013939855105e-12 -7.50047242496289e-13 0.7 1.40013935799539e-12 -7.00047229265197e-13 0.65 1.30013932030962e-12 -6.50047219124854e-13 0.6 1.20013928482182e-12 -6.00047211422453e-13 0.55 1.10013925099128e-12 -5.50047205635551e-13 0.5 1.00013921838155e-12 -5.0004720134554e-13 0.45 9.00139186637332e-13 -4.50047198216054e-13 0.4 8.00139155391257e-13 -4.00047195908199e-13 0.35 7.00139124169856e-13 -3.50047194042818e-13 0.3 6.00139091180773e-13 -3.00047191373982e-13 0.25 5.00139046931495e-13 -2.50047182074043e-13 0.2 4.00138935548975e-13 -2.00047135472663e-13 0.15 3.00138418793267e-13 -1.50046887328904e-13 0.0999999999999997 2.00135412866929e-13 -1.00045555871696e-13 0.0499999999999997 1.00116877358138e-13 -5.00384053491905e-14 -3.19189119579733e-16 4.13266369913508e-23 -4.13269574907455e-23 -0.0500000000000003 -1.00748245348126e-13 5.02062762166932e-14 -0.1 -2.05600380651734e-13 1.01314194390297e-13 -0.15 -3.37419087797813e-13 1.57264868539493e-13 -0.2 -6.48097096433907e-13 2.39226184777887e-13 -0.25 -2.15446818446787e-12 4.60891732353883e-13 -0.3 -1.17066561494131e-11 1.4329144676477e-12 -0.35 -7.56902646351702e-11 6.43513659845002e-12 -0.4 -5.09516266252624e-10 3.30837257673465e-11 -0.45 -3.46507606823148e-09 1.75995841563531e-10 -0.5 -2.3662693798029e-08 9.43364055062962e-10 -0.55 -1.62010334901156e-07 5.06470888764686e-09 -0.6 -1.1113698548399e-06 2.72003189058533e-08 -0.65 -7.6351001490334e-06 1.46088943824131e-07 -0.7 -5.25086575807215e-05 7.84574524093006e-07 1 2.00327644497403e-12 -1.00166258885413e-12 0.95 1.90327522634095e-12 -9.51661829987974e-13 0.9 1.80327416147861e-12 -9.01661227098885e-13 0.85 1.70327322157782e-12 -8.51660751720984e-13 0.8 1.60327238194739e-12 -8.01660379517416e-13 0.75 1.50327162185699e-12 -7.51660090113302e-13 0.7 1.40327092419329e-12 -7.01659866744074e-13 0.65 1.30327027499328e-12 -6.51659695784337e-13 0.6 1.20326966293331e-12 -6.01659566235941e-13 0.55 1.10326907883883e-12 -5.51659469241195e-13 0.5 1.00326851524881e-12 -5.01659397661738e-13 0.45 9.03267966007376e-13 -4.51659345737866e-13 0.4 8.03267419379584e-13 -4.01659302585323e-13 0.35 7.03266857052713e-13 -3.51659253458335e-13 0.3 6.03266184981954e-13 -3.01659124178876e-13 0.25 5.03264949829233e-13 -2.51658579326244e-13 0.2 4.03260854364127e-13 -2.0165602981993e-13 0.15 3.03242071499722e-13 -1.51643910316706e-13 0.0999999999999997 2.03146897570381e-13 -1.01586174583837e-13 0.0499999999999997 1.02649084646558e-13 -5.13110528359524e-14 -3.19189119579733e-16 5.74616526524624e-22 -5.74616865734813e-22 -0.0500000000000003 -1.14300906252299e-13 5.62476512798067e-14 -0.1 -2.92557394988997e-13 1.36020050114038e-13 -0.15 -8.26341358275864e-13 3.27896677149148e-13 -0.2 -3.35991801167142e-12 1.05399192541054e-12 -0.25 -1.72629192519084e-11 4.32583892189599e-12 -0.3 -9.64208469066562e-11 1.97291461288618e-11 -0.35 -5.53218955592075e-10 9.29434025782216e-11 -0.4 -3.2110091991266e-09 4.41648457884488e-10 -0.45 -1.87737196442633e-08 2.10316987394419e-09 -0.5 -1.10379007982035e-07 1.002074273325e-08 -0.55 -6.51910887252282e-07 4.77505153092966e-08 -0.6 -3.86443305873982e-06 2.27541422639762e-07 -0.65 -2.29741440985882e-05 1.08419002076489e-06 -0.7 -0.000136841343558619 5.16367754246438e-06 1 1.33241796420608e-10 -1.18997504338438e-10 0.95 1.33133017743777e-10 -1.18942341080528e-10 0.9 1.3302527912769e-10 -1.18888240549187e-10 0.85 1.32918385614859e-10 -1.18835010288094e-10 0.8 1.32812171910111e-10 -1.18782487528931e-10 0.75 1.32706499263572e-10 -1.18730536056082e-10 0.7 1.32601252019355e-10 -1.18679042759963e-10 0.65 1.32496334143154e-10 -1.18627914223323e-10 0.6 1.32391665854098e-10 -1.18577073586362e-10 0.55 1.32286942622334e-10 -1.18526220429061e-10 0.5 1.32182034246665e-10 -1.18475233268153e-10 0.45 1.32075929370453e-10 -1.1842312744995e-10 0.4 1.31965627787721e-10 -1.18367000034944e-10 0.35 1.31841273698829e-10 -1.18297370028869e-10 0.3 1.31670227394066e-10 -1.18183065192031e-10 0.25 1.31344060206389e-10 -1.17921427585057e-10 0.2 1.30501840916263e-10 -1.17174246165479e-10 0.15 1.27939733576446e-10 -1.14827166885262e-10 0.0999999999999997 1.19633583550831e-10 -1.07208484385074e-10 0.0499999999999997 9.20971184342487e-11 -8.22201730505392e-11 -3.19189119579733e-16 1.25417761016621e-18 -1.25417773295083e-18 -0.0500000000000003 -3.09539287058435e-10 2.70795591663697e-10 -0.1 -1.3541232431065e-09 1.16293537315251e-09 -0.15 -4.89383672056619e-09 4.10236445773503e-09 -0.2 -1.69431479887297e-08 1.37874716806327e-08 -0.25 -5.81663885283876e-08 4.56990294206311e-08 -0.3 -1.99985843069292e-07 1.50843846051261e-07 -0.35 -6.9085107654328e-07 4.972712946193e-07 -0.4 -2.40087550170652e-06 1.63853236125606e-06 -0.45 -8.39779981514007e-06 5.39679839313927e-06 -0.5 -2.95570480011192e-05 1.77571808786904e-05 -0.55 -0.000104463914776383 5.823865265585e-05 -0.6 -0.000368015514479477 0.000189050517538463 -0.65 -0.0012634861813931 0.000594824816067526 -0.7 -0.00400047261301389 0.00172438470733699 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_full_subtran_dc.standard0000644000175000017500000001015014163340332027454 0ustar carstencarstenV(base) I(coll) I(base) 0.75 0.000199725416473528 6.15429100445239e-07 0.76 0.00028662799440709 8.47692074390177e-07 0.77 0.000410361592380033 1.17331387667486e-06 0.78 0.000585424982775609 1.63077864773606e-06 0.79 0.000830914430806825 2.27405769570345e-06 0.8 0.00117103426671756 3.17818906756234e-06 0.81 0.0016349377042114 4.44628750313143e-06 0.82 0.00225549389727927 6.21797640110207e-06 0.83 0.00306679054132534 8.67905257482451e-06 0.84 0.00410066939414704 1.20720275804212e-05 0.85 0.00538313531247514 1.67070847128518e-05 0.86 0.00693166922455398 2.29729898667461e-05 0.87 0.00875409618596606 3.13477862410607e-05 0.88 0.0108489626103208 4.24104648765571e-05 0.89 0.0132068291812124 5.6859682795701e-05 0.9 0.0158116948332264 7.55611750645857e-05 0.91 0.0186417263995214 9.9692036691063e-05 0.92 0.0216681168055788 0.000131176794128068 0.93 0.0248498284009278 0.000173878716257615 0.94 0.0281216023969817 0.000236139169641282 0.95 0.0313818234471124 0.000333241981568676 0.96 0.0345125613655098 0.000482303131537167 0.97 0.037451557694661 0.000687787429223648 0.98 0.040227345524946 0.000939599143274181 0.99 0.0428994244217299 0.00122585568304827 1 0.0455120192683103 0.00153965503461938 1.01 0.0480889278900515 0.00187863717421709 1.02 0.0506389991225637 0.0022431090478456 1.03 0.0531610257399723 0.00263476512146762 1.04 0.0556470336528282 0.00305607198404938 1.05 0.0580845520741166 0.00351005392211652 0.75 0.000200934587496839 6.17032299760708e-07 0.76 0.000288801584570576 8.52590789028404e-07 0.77 0.000414332946979327 1.1853337930762e-06 0.78 0.000592744542944355 1.65770592181482e-06 0.79 0.000844410339421616 2.3315145842164e-06 0.8 0.00119571144043369 3.29705270382096e-06 0.81 0.00167929105573884 4.68653382548767e-06 0.82 0.00233319094964106 6.69371831998588e-06 0.83 0.00319845311095651 9.60221076513482e-06 0.84 0.00431523940850635 1.38255485614597e-05 0.85 0.00571823321292962 1.99628084331624e-05 0.86 0.00743257807983973 2.88738776725493e-05 0.87 0.00947142863563165 4.17783995185621e-05 0.88 0.0118354187352847 6.0380977840122e-05 0.89 0.0145135718907906 8.70214330660462e-05 0.9 0.0174848702341861 0.000124841559370652 0.91 0.0207198696150318 0.000177948323943361 0.92 0.0241821193571015 0.000251539064635768 0.93 0.0278294629685673 0.000351942343250699 0.94 0.0316154334327436 0.000486530539629918 0.95 0.0354908433168482 0.000663496989395754 0.96 0.039405230958526 0.000891589969438088 0.97 0.0433070664148537 0.00118008681976298 0.98 0.0471412073220777 0.00153951425929236 0.99 0.0508449178452368 0.00198330821245659 1 0.0543537608841536 0.00252819042410431 1.01 0.0576315322380391 0.00318777513678189 1.02 0.0606989137500118 0.00396152310344722 1.03 0.0636134435444958 0.00483471584743523 1.04 0.0664266415816201 0.00579002667304031 1.05 0.0691673566748402 0.00681494932964649 0.75 0.000202195548785452 5.12141321138536e-07 0.76 0.000291044142419966 7.13043849949475e-07 0.77 0.000418404701589796 1.00205503025944e-06 0.78 0.000600236820586372 1.421923516133e-06 0.79 0.000858266647781455 2.03850985837384e-06 0.8 0.00122124265782746 2.95479602815865e-06 0.81 0.00172573994848379 4.33415878309538e-06 0.82 0.00241588775323645 6.43911885162314e-06 0.83 0.00334134219161992 9.69563871543961e-06 0.84 0.00455316164486485 1.47990439450944e-05 0.85 0.00609800197481517 2.28868588039756e-05 0.86 0.0080118203279899 3.58171860844802e-05 0.87 0.0103143984654077 5.66072059440321e-05 0.88 0.0130052754271506 9.00953512972309e-05 0.89 0.0160607553759159 0.000143864979079257 0.9 0.0194314649369559 0.000229350506842124 0.91 0.0230409686734118 0.000362771379171094 0.92 0.0267878702937492 0.000565141572122731 0.93 0.0305549350580269 0.000860447958131995 0.94 0.0342262354554944 0.00127181503164003 0.95 0.0377069345210023 0.00181703067181507 0.96 0.0409362928648083 0.00250567464671097 0.97 0.0438887158436643 0.00333900509030491 0.98 0.0465657343118055 0.00431188829943339 0.99 0.0489853377525681 0.00541530652952708 1 0.0511731263680884 0.0066384522105404 1.01 0.0531565838068546 0.00797012344656942 1.02 0.0549619883212494 0.00939952204000891 1.03 0.0566130463319001 0.0109166484773615 1.04 0.0581304924814586 0.012512456583152 1.05 0.0595321699511725 0.0141788759360813 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_vert_nqs_ac.standard0000644000175000017500000002653614163340332026344 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 6.29471453689079e-05 -9.47516846965558e-08 0.0434322878000441 3.33327275026069e-06 2.7071341637813e-14 3.35550769112742e-15 6.35692177710303e-15 3.35856612859133e-15 158489319.2463 6.29473347487578e-05 -9.4751616264547e-08 0.0434322877176913 3.33327274412003e-06 2.70713416311972e-14 3.35550769112981e-15 6.35692177426061e-15 3.35856612859154e-15 251188643.151556 6.29478104494306e-05 -9.47514443711141e-08 0.0434322875108304 3.33327272869539e-06 2.70713416145793e-14 3.35550769113581e-15 6.35692176712077e-15 3.35856612859207e-15 398107170.55492 6.29490053554985e-05 -9.47510125943339e-08 0.0434322869912192 3.33327268995044e-06 2.7071341572837e-14 3.3555076911509e-15 6.3569217491863e-15 3.35856612859341e-15 630957344.483199 6.29520068237868e-05 -9.47499280201169e-08 0.043432285686015 3.33327259262753e-06 2.70713414679851e-14 3.35550769118879e-15 6.35692170413695e-15 3.35856612859677e-15 1000000000.00595 6.29595461709483e-05 -9.47472036929671e-08 0.0434322824074903 3.33327234816345e-06 2.7071341204609e-14 3.35550769128396e-15 6.35692159097809e-15 3.35856612860521e-15 1584893192.47244 6.29784841528596e-05 -9.47403604932621e-08 0.0434322741722092 3.33327173409746e-06 2.70713405430383e-14 3.35550769152301e-15 6.3569213067359e-15 3.3585661286264e-15 2511886431.53052 6.30260542004879e-05 -9.47231711571716e-08 0.0434322534861217 3.3332701916337e-06 2.70713388812481e-14 3.3555076921235e-15 6.35692059275179e-15 3.35856612867964e-15 3981071705.5729 6.31455446808898e-05 -9.46799935248224e-08 0.0434322015250408 3.33326631714154e-06 2.70713347070226e-14 3.35550769363185e-15 6.35691879930478e-15 3.35856612881337e-15 6309573444.86956 6.34456907128844e-05 -9.45715363910297e-08 0.0434320710048441 3.33325658486746e-06 2.70713242218592e-14 3.35550769742064e-15 6.35691429436957e-15 3.35856612914928e-15 10000000000.1191 6.41996204015515e-05 -9.42991054927412e-08 0.0434317431537979 3.33323213856476e-06 2.70712978844262e-14 3.35550770693761e-15 6.35690297848395e-15 3.35856612999305e-15 15848931924.8188 6.60933868713629e-05 -9.36147969845679e-08 0.0434309196346616 3.33317073263568e-06 2.70712317284593e-14 3.35550773084293e-15 6.35687455426441e-15 3.35856613211251e-15 25118864315.4548 7.08501914917328e-05 -9.18959356965852e-08 0.043428851082556 3.33301649048359e-06 2.70710655564344e-14 3.35550779088884e-15 6.35680315585316e-15 3.35856613743635e-15 39810717055.9661 8.27979767835266e-05 -8.75786287533348e-08 0.0434236553319063 3.3326290679189e-06 2.70706481779979e-14 3.35550794170766e-15 6.35662381115503e-15 3.35856615080924e-15 63095734449.0713 0.000112804613609128 -7.67357940064058e-08 0.0434106055678465 3.33165600870154e-06 2.70695999399473e-14 3.35550832048626e-15 6.35617331767802e-15 3.35856618440041e-15 100000000000 0.000188147334431007 -4.95108612022372e-08 0.0433778347012147 3.32921244009062e-06 2.70669679519888e-14 3.35550927154954e-15 6.35504172980812e-15 3.35856626877757e-15 100000000 0.000408339620041127 -3.05793843150479e-07 0.204583473431114 6.06025910838748e-06 6.0821846155784e-14 3.39706245984625e-15 1.75299876748119e-14 3.40767125580918e-15 158489319.2463 0.000408340512077228 -3.05793613675081e-07 0.204583473043227 6.06025909747675e-06 6.08218461246231e-14 3.39706245985426e-15 1.75299876614244e-14 3.40767125580956e-15 251188643.151556 0.000408342752770651 -3.05793037258942e-07 0.204583472068898 6.06025907007023e-06 6.08218460463506e-14 3.3970624598744e-15 1.75299876277965e-14 3.4076712558105e-15 398107170.55492 0.000408348381137903 -3.05791589367076e-07 0.204583469621495 6.06025900122817e-06 6.08218458497391e-14 3.39706245992498e-15 1.7529987543327e-14 3.40767125581288e-15 630957344.483199 0.000408362518957073 -3.057879524272e-07 0.204583463473896 6.06025882830475e-06 6.08218453558731e-14 3.39706246005203e-15 1.75299873311493e-14 3.40767125581885e-15 1000000000.00595 0.00040839803155177 -3.05778816847644e-07 0.204583448031826 6.06025839394076e-06 6.08218441153378e-14 3.39706246037115e-15 1.75299867981831e-14 3.40767125583384e-15 1584893192.47244 0.000408487235147494 -3.0575586931165e-07 0.204583409243103 6.06025730286781e-06 6.08218409992545e-14 3.39706246117276e-15 1.75299854594324e-14 3.4076712558715e-15 2511886431.53052 0.000408711304391912 -3.05698227722097e-07 0.204583311810252 6.06025456221692e-06 6.08218331720093e-14 3.39706246318631e-15 1.75299820966428e-14 3.40767125596609e-15 3981071705.5729 0.000409274140524998 -3.0555343868843e-07 0.204583067070097 6.06024767801604e-06 6.08218135108707e-14 3.39706246824412e-15 1.75299736496971e-14 3.40767125620369e-15 6309573444.86956 0.000410687918689249 -3.05189745666291e-07 0.204582452311268 6.0602303857034e-06 6.0821764124403e-14 3.39706248094874e-15 1.7529952431929e-14 3.40767125680051e-15 10000000000.1191 0.000414239154480842 -3.04276193802183e-07 0.204580908110981 6.06018694949253e-06 6.08216400717081e-14 3.39706251286117e-15 1.7529899135305e-14 3.40767125829968e-15 15848931924.8188 0.000423159364647124 -3.01981478637127e-07 0.204577029280938 6.06007784338685e-06 6.08213284685998e-14 3.39706259302076e-15 1.75297652602385e-14 3.40767126206539e-15 25118864315.4548 0.000445565346424596 -2.96217562180669e-07 0.204567286262584 6.05980378580286e-06 6.08205457770001e-14 3.39706279436739e-15 1.7529428981276e-14 3.40767127152446e-15 39810717055.9661 0.000501843012242944 -2.81740188800485e-07 0.204542813930481 6.05911541306588e-06 6.08185798708984e-14 3.39706330009478e-15 1.75285842867238e-14 3.40767129528454e-15 63095734449.0713 0.000643183307395504 -2.45380538896155e-07 0.2044813486709 6.05738648062134e-06 6.08136425348413e-14 3.39706457021955e-15 1.75264625101127e-14 3.40767135496717e-15 100000000000 0.000998070220462914 -1.54086234601436e-07 0.204326995699153 6.0530447457522e-06 6.08012455326262e-14 3.397067759336e-15 1.75211328509756e-14 3.40767150488309e-15 100000000 0.00267085936068366 -8.195512630484e-07 0.676550962133744 6.74606092731543e-05 1.67598419370078e-13 3.62097037963984e-15 5.28056870221227e-14 3.45576268994495e-15 158489319.2463 0.00267086265441175 -8.19554795412566e-07 0.676550960701639 6.74606091318681e-05 1.67598419248506e-13 3.62097037950946e-15 5.28056869698965e-14 3.4557626899501e-15 251188643.151556 0.00267087092788252 -8.19563668310156e-07 0.676550957104354 6.74606087769735e-05 1.67598418943131e-13 3.62097037918196e-15 5.28056868387103e-14 3.45576268996304e-15 398107170.55492 0.00267089170990146 -8.19585956021078e-07 0.676550948068383 6.74606078855184e-05 1.67598418176063e-13 3.62097037835932e-15 5.28056865091853e-14 3.45576268999555e-15 630957344.483199 0.00267094391197191 -8.19641940218724e-07 0.67655092537105 6.74606056462846e-05 1.67598416249276e-13 3.62097037629293e-15 5.28056856814559e-14 3.45576269007721e-15 1000000000.00595 0.00267107503763848 -8.19782566158784e-07 0.676550868357931 6.74606000215835e-05 1.67598411409405e-13 3.6209703711024e-15 5.28056836022937e-14 3.45576269028233e-15 1584893192.47244 0.00267140441038354 -8.20135802509411e-07 0.67655072514746 6.74605858929745e-05 1.675983992522e-13 3.62097035806439e-15 5.28056783796745e-14 3.45576269079758e-15 2511886431.53052 0.00267223175707658 -8.2102309185226e-07 0.676550365419087 6.74605504035196e-05 1.67598368714692e-13 3.62097032531439e-15 5.28056652610481e-14 3.45576269209181e-15 3981071705.5729 0.00267430995651836 -8.23251860314671e-07 0.676549461822689 6.74604612580811e-05 1.67598292007994e-13 3.62097024305016e-15 5.28056323085484e-14 3.45576269534278e-15 6309573444.86956 0.00267953014809234 -8.28850263487066e-07 0.676547192093822 6.74602373351264e-05 1.67598099329827e-13 3.62097003641214e-15 5.28055495356116e-14 3.45576270350885e-15 10000000000.1191 0.00269264261713047 -8.42912752807653e-07 0.676541490809468 6.74596748677514e-05 1.67597615346346e-13 3.62096951736325e-15 5.28053416193947e-14 3.45576272402109e-15 15848931924.8188 0.00272557927574388 -8.78235727349262e-07 0.676527169936619 6.74582620240376e-05 1.67596399648625e-13 3.6209682135862e-15 5.28048193574709e-14 3.45576277554549e-15 25118864315.4548 0.00280831005909017 -9.66960494127909e-07 0.676491198199011 6.74547131870437e-05 1.67593346041218e-13 3.62096493873983e-15 5.2803507494834e-14 3.45576290496895e-15 39810717055.9661 0.0030161054859158 -1.18981104669179e-06 0.676400845498353 6.74457993277774e-05 1.67585676276363e-13 3.6209567132877e-15 5.28002122449296e-14 3.45576323006597e-15 63095734449.0713 0.0035379699716735 -1.74948548607314e-06 0.676173916402273 6.74234113525299e-05 1.67566414168658e-13 3.62093605560812e-15 5.27919349522481e-14 3.45576404667269e-15 100000000000 0.00484824131836335 -3.15468818027678e-06 0.67560406439831 6.7367191886715e-05 1.6751805182845e-13 3.62088418933559e-15 5.27711433464088e-14 3.4557660978947e-15 100000000 0.107346063329171 -0.00215742254190102 0.922867656888048 0.0239951383098375 1.00096003122268e-11 2.35607488965976e-13 3.30069641987674e-12 -8.22078200745883e-14 158489319.2463 0.107356845619617 -0.00215767300278171 0.922862969487822 0.0239950164401966 1.0009580817556e-11 2.35607036125976e-13 3.30068804640287e-12 -8.22076023692069e-14 251188643.151556 0.107383929323107 -0.00215830212775866 0.922851195323302 0.0239947103188644 1.00095318494925e-11 2.35605898651117e-13 3.30066701318746e-12 -8.22070555180134e-14 398107170.55492 0.107451959339494 -0.00215988239105273 0.922821620290504 0.0239939413854573 1.00094088493954e-11 2.35603041492629e-13 3.30061418013912e-12 -8.22056818899216e-14 630957344.483199 0.107622835626923 -0.00216385166137181 0.922747333257411 0.0239920099664172 1.00090999004773e-11 2.35595864945263e-13 3.30048146952264e-12 -8.22022314921762e-14 1000000000.00595 0.108052010847386 -0.00217382093499009 0.922560745859222 0.0239871588041281 1.00083239401494e-11 2.35577840230748e-13 3.3001481155381e-12 -8.21935644852164e-14 1584893192.47244 0.109129756276875 -0.00219885578920618 0.922092142775884 0.02397497540038 1.00063753474606e-11 2.35532576541795e-13 3.29931076838262e-12 -8.21717939531067e-14 2511886431.53052 0.111835076901093 -0.002261697445113 0.920915590969783 0.0239443857474435 1.00014840550969e-11 2.35418957139751e-13 3.29720745051527e-12 -8.21171089292566e-14 3981071705.5729 0.118618862661155 -0.00241927741055703 0.917963552979327 0.0238676345010343 9.98921878820453e-12 2.35134048329034e-13 3.29192420380054e-12 -8.19797476311455e-14 6309573444.86956 0.135585666840753 -0.00281339781926113 0.910569485909944 0.0236753931188287 9.95854235045529e-12 2.34421468042532e-13 3.27865405941133e-12 -8.16347317047936e-14 10000000000.1191 0.177747410850332 -0.00379276927925088 0.892131632882974 0.0231960198162135 9.88231278466208e-12 2.3265073813325e-13 3.24533304457738e-12 -8.07684049744483e-14 15848931924.8188 0.28085463400078 -0.00618783793792402 0.846699433866286 0.0220148094412396 9.69589215535611e-12 2.28320389657766e-13 3.16182017886577e-12 -7.85971197283586e-14 25118864315.4548 0.523437802217255 -0.0118227811122654 0.738495919549146 0.0192015818958791 9.25729527051938e-12 2.18132261022672e-13 2.95476424829373e-12 -7.32137876712477e-14 39810717055.9661 1.04570886883304 -0.0239545699895399 0.506457921686017 0.0131687308255749 8.31301515190201e-12 1.96197660826829e-13 2.46944788158987e-12 -6.05958484144517e-14 63095734449.0713 1.98291065025141 -0.0457247481103541 0.14449149519949 0.00375781725299897 6.6185291543133e-12 1.5683659395508e-13 1.56180481191699e-12 -3.69976640017409e-14 100000000000 3.220897631159 -0.0744818392938758 -0.114031049135218 -0.00296361640291196 4.38021543582009e-12 1.04843000571046e-13 6.02865039179821e-13 -1.20657955681613e-14 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_1D_dc.standard0000644000175000017500000000031314163340332024733 0ustar carstencarstenV(base) I(coll) I(base) 0.8 0.00122656679807209 1.70743677504318e-06 0.85 0.00657425533007271 1.09350267533624e-05 0.9 0.0268021404728432 7.11349324846942e-05 0.95 0.0757442262181916 0.00140240824953449 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_internal_dc.standard0000644000175000017500000001544514163340332025574 0ustar carstencarstenV(base) I(coll) I(base) -1 9.99999999992886e-13 -2.00000791472521e-12 -0.95 9.49999999993391e-13 -1.90000791472622e-12 -0.9 8.99999999993891e-13 -1.80000791472722e-12 -0.85 8.49999999994385e-13 -1.70000791472821e-12 -0.8 7.99999999994873e-13 -1.60000791472918e-12 -0.75 7.49999999995357e-13 -1.50000791473015e-12 -0.7 6.99999999995835e-13 -1.40000791473111e-12 -0.65 6.49999999996308e-13 -1.30000791473205e-12 -0.6 5.99999999996777e-13 -1.20000791473299e-12 -0.55 5.49999999997239e-13 -1.10000791473392e-12 -0.5 4.99999999997697e-13 -1.00000791471696e-12 -0.45 4.4999999999815e-13 -9.00007914670163e-13 -0.4 3.99999999998598e-13 -8.00007914495994e-13 -0.35 3.49999999999041e-13 -7.0000791385444e-13 -0.3 2.99999999999479e-13 -6.00007911497736e-13 -0.25 2.49999999999912e-13 -5.00007902846924e-13 -0.2 2.0000000000034e-13 -4.00007871098472e-13 -0.15 1.50000000000761e-13 -3.00007754587986e-13 -0.0999999999999997 1.00000000001159e-13 -2.0000732702388e-13 -0.0499999999999997 5.00000000013855e-14 -1.00005757977433e-13 3.19189119579733e-16 -2.24597758605009e-28 5.17492753824984e-28 0.0500000000000003 -5.00000000168068e-14 1.00021130225445e-13 0.1 -1.0000000018151e-13 2.0009867251583e-13 0.15 -1.50000001765011e-13 3.0038323263826e-13 0.2 -2.00000016959606e-13 4.01427500436222e-13 0.25 -2.50000162730981e-13 5.05259770601309e-13 0.3 -3.00001561177281e-13 6.19324037989424e-13 0.35 -3.50014977024497e-13 7.70944533990404e-13 0.4 -4.00143680473405e-13 1.06045936681025e-12 0.45 -4.51378382645889e-13 1.85671697252829e-12 0.5 -5.13223359811045e-13 4.51945012646338e-12 0.55 -6.76856822535259e-13 1.4098463697296e-11 0.6 -1.81698671997473e-12 6.65185459031949e-11 0.65 -1.23250252490675e-11 4.02291678584834e-10 0.7 -1.12702990977118e-10 3.47593398509646e-09 -1 1.00004719154535e-12 -2.01521474407745e-12 -0.95 9.50047191545903e-13 -1.91521474407854e-12 -0.9 9.00047191546447e-13 -1.81521474407963e-12 -0.85 8.50047191546986e-13 -1.71521474408071e-12 -0.8 8.00047191547519e-13 -1.61521474408178e-12 -0.75 7.50047191548046e-13 -1.51521474408283e-12 -0.7 7.00047191548568e-13 -1.41521472394938e-12 -0.65 6.50047191549084e-13 -1.31521469115216e-12 -0.6 6.00047191549595e-13 -1.21521460492797e-12 -0.55 5.50047191550101e-13 -1.11521437824653e-12 -0.5 5.00047191550601e-13 -1.0152137823089e-12 -0.45 4.50047191551096e-13 -9.1521221561233e-13 -0.4 4.00047191483447e-13 -8.15208096763256e-13 -0.35 3.50047191186095e-13 -7.15197268361914e-13 -0.3 3.00047189586883e-13 -6.15168800131713e-13 -0.25 2.50047180995334e-13 -5.15093953959534e-13 -0.2 2.00047134847608e-13 -4.14897162925663e-13 -0.15 1.50046886983856e-13 -3.14379680795813e-13 -0.0999999999999997 1.0004555569388e-13 -2.13018560794823e-13 -0.0499999999999997 5.00384052725963e-14 -1.09436572569535e-13 3.19189119579733e-16 4.13269573120192e-23 -4.13265548019053e-23 0.0500000000000003 -5.02062761150309e-14 1.24914117032183e-13 0.1 -1.01314194085812e-13 2.90980896146487e-13 0.15 -1.57264867819926e-13 5.67725307041357e-13 0.2 -2.3922618332536e-13 1.14882509106093e-12 0.25 -4.6089172985505e-13 2.60210366104942e-12 0.3 -1.43291446351593e-12 6.73610052224912e-12 0.35 -6.43513658355382e-12 2.0006116167554e-11 0.4 -3.30837256069204e-11 6.85489972496799e-11 0.45 -1.75995839420087e-10 2.70515765621893e-10 0.5 -9.43364019974089e-10 1.25630033431152e-09 0.55 -5.0647083011925e-09 6.17832497902427e-09 0.6 -2.72003070573294e-08 3.20316210605165e-08 0.65 -1.46088644101706e-07 1.71060309748959e-07 0.7 -7.84565520083031e-07 9.2829860893226e-07 -1 1.00165923777738e-12 -2.07571285065078e-12 -0.95 9.51659237777939e-13 -1.97571285065191e-12 -0.9 9.01659237778496e-13 -1.87571285065303e-12 -0.85 8.51659237779047e-13 -1.77571285065413e-12 -0.8 8.01659237779593e-13 -1.67571285065522e-12 -0.75 7.51659237780134e-13 -1.57571274571881e-12 -0.7 7.01659237780669e-13 -1.47571259312223e-12 -0.65 6.51659237781198e-13 -1.37571221862174e-12 -0.6 6.01659237781721e-13 -1.2757112995299e-12 -0.55 5.5165923778224e-13 -1.17570904391477e-12 -0.5 5.01659237782755e-13 -1.07570350823564e-12 -0.45 4.51659237783271e-13 -9.75689922700544e-13 -0.4 4.01659231544558e-13 -8.75656575154862e-13 -0.35 3.51659208052071e-13 -7.75574726200471e-13 -0.3 3.01659096099551e-13 -6.75373800057952e-13 -0.25 2.51658562601424e-13 -5.74880432725457e-13 -0.2 2.01656020278917e-13 -4.73668387068976e-13 -0.15 1.51643905149729e-13 -3.70687925093555e-13 -0.0999999999999997 1.0158617199046e-13 -2.63345274807564e-13 -0.0499999999999997 5.13110517665695e-14 -1.45191279607598e-13 3.19189119579733e-16 5.74616864058484e-22 -5.74616077859984e-22 0.0500000000000003 -5.62476501217247e-14 2.13950763608805e-13 0.1 -1.36020047164856e-13 6.08121963831103e-13 0.15 -3.2789667134351e-13 1.49931858949725e-12 0.2 -1.05399191560416e-12 3.87148001860835e-12 0.25 -4.32583890543355e-12 1.11248349249806e-11 0.3 -1.97291460732348e-11 3.63099467460162e-11 0.35 -9.29434020937211e-11 1.33935719608239e-10 0.4 -4.41648452740887e-10 5.45224184651868e-10 0.45 -2.10316981641582e-09 2.39981808885897e-09 0.5 -1.00207421706813e-08 1.09376190647993e-08 0.55 -4.77505109322858e-08 5.10860663752622e-08 0.6 -2.27541412571994e-07 2.41918580687715e-07 0.65 -1.08419053327853e-06 1.15453641645912e-06 0.7 -5.16368820900947e-06 5.53492894409041e-06 -1 1.1897513523368e-10 -1.3109762592168e-10 -0.95 1.18925135233684e-10 -1.30997614186434e-10 -0.9 1.18875135233688e-10 -1.30897590891873e-10 -0.85 1.18825135233693e-10 -1.30797544651987e-10 -0.8 1.187751352337e-10 -1.30697452865456e-10 -0.75 1.18725135233709e-10 -1.30597270668495e-10 -0.7 1.18675135233728e-10 -1.30496909006154e-10 -0.65 1.18625135233771e-10 -1.30396191103689e-10 -0.6 1.1857513523388e-10 -1.30294766061914e-10 -0.55 1.18524897839482e-10 -1.30191699948656e-10 -0.5 1.18474353034152e-10 -1.30085539518516e-10 -0.45 1.18422557933858e-10 -1.29972596874073e-10 -0.4 1.18366643188356e-10 -1.29844551135676e-10 -0.35 1.18297154465326e-10 -1.29681120694176e-10 -0.3 1.18182940323528e-10 -1.29429638083938e-10 -0.25 1.17921358691404e-10 -1.2894466131148e-10 -0.2 1.17174210303851e-10 -1.27802689161651e-10 -0.15 1.1482714956542e-10 -1.24718744397223e-10 -0.0999999999999997 1.07208476936667e-10 -1.15677456231477e-10 -0.0499999999999997 8.2220170600969e-11 -8.7879737787812e-11 3.19189119579733e-16 1.25417770710144e-18 -1.25417765540265e-18 0.0500000000000003 -2.70795590211803e-10 2.82482751447136e-10 0.1 -1.16293536853388e-09 1.19968083838898e-09 0.15 -4.1023644411352e-09 4.19605512034854e-09 0.2 -1.37874717228754e-08 1.40217184660428e-08 0.25 -4.56990318150828e-08 4.63170141538056e-08 0.3 -1.50843889290395e-07 1.52622855649375e-07 0.35 -4.97271919311366e-07 5.02869721022244e-07 0.4 -1.63854055551065e-06 1.65747451225855e-06 0.45 -5.39690035602878e-06 5.46415971814977e-06 0.5 -1.775840622647e-05 1.80043659810007e-05 0.55 -5.82529448942699e-05 5.91647672480589e-05 0.6 -0.000189210851662315 0.00019258556547556 0.65 -0.000596491962411158 0.000608632645671287 0.7 -0.00173894473822991 0.00177906866520049 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_full_subcoupl_dc.standard0000644000175000017500000001541314163340332027317 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.0000000018708e-12 -9.99999999985856e-13 0.95 1.90000000187164e-12 -9.49999999986627e-13 0.9 1.8000000018725e-12 -8.99999999987409e-13 0.85 1.70000000187337e-12 -8.499999999882e-13 0.8 1.60000000187424e-12 -7.99999999988999e-13 0.75 1.50000000187512e-12 -7.49999999989804e-13 0.7 1.40000000187601e-12 -6.99999999990613e-13 0.65 1.3000000018769e-12 -6.49999999991425e-13 0.6 1.20000000187779e-12 -5.99999999992238e-13 0.55 1.10000000187869e-12 -5.49999999993053e-13 0.5 1.00000000187958e-12 -4.99999999993869e-13 0.45 9.00000001880476e-13 -4.49999999994686e-13 0.4 8.00000001881371e-13 -3.99999999995502e-13 0.35 7.00000001882267e-13 -3.49999999996318e-13 0.3 6.00000001883162e-13 -2.99999999997133e-13 0.25 5.00000001884051e-13 -2.49999999997947e-13 0.2 4.00000001884881e-13 -1.9999999999876e-13 0.15 3.00000001884961e-13 -1.49999999999571e-13 0.0999999999999997 2.0000000187537e-13 -1.00000000000362e-13 0.0499999999999997 1.0000000174114e-13 -5.00000000009852e-14 -3.19189119579733e-16 -5.80601626242665e-28 2.24617938855788e-28 -0.0500000000000003 -1.00000022462904e-13 5.00000000163508e-14 -0.1 -2.0000031219227e-13 1.00000000180597e-13 -0.15 -3.0000404970334e-13 1.50000001763649e-13 -0.2 -4.0005227178312e-13 2.00000016957844e-13 -0.25 -5.00674546330499e-13 2.50000162729005e-13 -0.3 -6.08705925424049e-13 3.00001561175658e-13 -0.35 -8.12380035848544e-13 3.50014977024399e-13 -0.4 -2.25089540547131e-12 4.00143680474639e-13 -0.45 -1.96351386333044e-11 4.51378382632088e-13 -0.5 -2.4296438627063e-10 5.13223361284922e-13 -0.55 -3.12645484558152e-09 6.76857127941902e-13 -0.6 -4.03488062682106e-08 1.81703484837802e-12 -0.65 -5.1631555458008e-07 1.23323172324483e-11 -0.7 -5.9867869293474e-06 1.13630813682121e-10 1 2.00484131143035e-12 -1.00004739059955e-12 0.95 1.90484123988616e-12 -9.50047345584437e-13 0.9 1.80484117749048e-12 -9.00047309835599e-13 0.85 1.70484112253622e-12 -8.50047281666002e-13 0.8 1.60484107355056e-12 -8.00047259623833e-13 0.75 1.50484102929251e-12 -7.5004724248929e-13 0.7 1.40484098873755e-12 -7.00047229258664e-13 0.65 1.30484095105248e-12 -6.50047219118787e-13 0.6 1.20484091556539e-12 -6.00047211416851e-13 0.55 1.10484088173555e-12 -5.50047205630415e-13 0.5 1.00484084912651e-12 -5.00047201340869e-13 0.45 9.04840817382996e-13 -4.5004719821185e-13 0.4 8.04840786137622e-13 -4.0004719590446e-13 0.35 7.0484074698839e-13 -3.50047194039545e-13 0.3 6.04840668972564e-13 -3.00047191371175e-13 0.25 5.048403239782e-13 -2.50047182071702e-13 0.2 4.04838203865247e-13 -2.00047135470787e-13 0.15 3.0482427046087e-13 -1.50046887327494e-13 0.0999999999999997 2.04731652502384e-13 -1.00045555870753e-13 0.0499999999999997 1.04114583320931e-13 -5.00384053487143e-14 -3.19189119579733e-16 4.13265295583563e-23 -4.13269575924346e-23 -0.0500000000000003 -1.27449588436163e-13 5.02062762161091e-14 -0.1 -4.10644435004074e-13 1.01314194388712e-13 -0.15 -1.7336437448872e-12 1.57264868534019e-13 -0.2 -1.00004137497317e-11 2.39226184749461e-13 -0.25 -6.46467847146634e-11 4.60891732325681e-13 -0.3 -4.29127106426995e-10 1.43291447908246e-12 -0.35 -2.86361143272929e-09 6.43513735019006e-12 -0.4 -1.91249072375253e-08 3.30837657436746e-11 -0.45 -1.27550328714638e-07 1.75997802009891e-10 -0.5 -8.41545006882791e-07 9.43454263173389e-10 -0.55 -5.2017926065538e-06 5.06829855753235e-09 -0.6 -2.47230366523546e-05 2.72884546012867e-08 -0.65 -7.54044753109652e-05 1.47034530635172e-07 -0.7 -0.000183922652386898 7.89471756002581e-07 1 2.10610595314704e-12 -1.00166258884111e-12 0.95 2.00610473451465e-12 -9.51661829975586e-13 0.9 1.90610366965299e-12 -9.01661227087135e-13 0.85 1.8061027297529e-12 -8.51660751709871e-13 0.8 1.70610189012315e-12 -8.0166037950694e-13 0.75 1.60610113003345e-12 -7.51660090103464e-13 0.7 1.50610043237044e-12 -7.01659866734873e-13 0.65 1.40609978317111e-12 -6.51659695775774e-13 0.6 1.30609917111184e-12 -6.01659566228015e-13 0.55 1.20609858701805e-12 -5.51659469233906e-13 0.5 1.10609802342872e-12 -5.01659397655087e-13 0.45 1.00609747418797e-12 -4.51659345731852e-13 0.4 9.06096927560873e-13 -4.01659302579948e-13 0.35 8.06095918596769e-13 -3.51659253453597e-13 0.3 7.06093087138514e-13 -3.01659124174775e-13 0.25 6.06079252469767e-13 -2.51658579322781e-13 0.2 5.06001641820563e-13 -2.01656029817104e-13 0.15 4.05553915330197e-13 -1.51643910314518e-13 0.0999999999999997 3.02955957311901e-13 -1.01586174582292e-13 0.0499999999999997 1.87854994210953e-13 -5.13110528350816e-14 -3.19189119579733e-16 5.74615320553515e-22 -5.74616876581651e-22 -0.0500000000000003 -6.1145712763504e-13 5.62476512775783e-14 -0.1 -3.69050180563226e-12 1.36020050098921e-13 -0.15 -2.1149689306327e-11 3.27896677000647e-13 -0.2 -1.22438769419516e-10 1.05399192348332e-12 -0.25 -7.12549761095011e-10 4.32583890365225e-12 -0.3 -4.15350961141156e-09 1.972914654649e-11 -0.35 -2.42176368503056e-08 9.29434423950342e-11 -0.4 -1.41008646161838e-07 4.41650446107939e-10 -0.45 -8.1348106189828e-07 2.10325125783367e-09 -0.5 -4.46378409661205e-06 1.00235069046772e-08 -0.55 -2.00911290891188e-05 4.78110889835082e-08 -0.6 -6.1476252350765e-05 2.2812082538839e-07 -0.65 -0.000139812054062122 1.08600986889959e-06 -0.7 -0.000322792944300933 5.14801366031498e-06 1 1.69355313587789e-09 -1.18997504351511e-10 0.95 1.69344435708191e-09 -1.1894234108412e-10 0.9 1.69333661834714e-09 -1.18888240543327e-10 0.85 1.69322972471596e-09 -1.18835010272802e-10 0.8 1.69312351089318e-09 -1.18782487504223e-10 0.75 1.69301783812884e-09 -1.18730536021972e-10 0.7 1.69291259076703e-09 -1.18679042716462e-10 0.65 1.69280767277341e-09 -1.18627914170441e-10 0.6 1.69270300436707e-09 -1.18577073524106e-10 0.55 1.69259828101812e-09 -1.18526220357414e-10 0.5 1.69249116819691e-09 -1.18475233187093e-10 0.45 1.692378789975e-09 -1.18423127359362e-10 0.4 1.69224436226362e-09 -1.18366999934447e-10 0.35 1.69202722259334e-09 -1.18297369917214e-10 0.3 1.69149933549354e-09 -1.18183065065167e-10 0.25 1.68980080595437e-09 -1.17921427429904e-10 0.2 1.6836806625522e-09 -1.17174245940183e-10 0.15 1.66082036132501e-09 -1.14827166458813e-10 0.0999999999999997 1.57445013438106e-09 -1.07208483379247e-10 0.0499999999999997 1.2466910460618e-09 -8.22201707510671e-11 -3.19189119579733e-16 1.25416413756559e-18 -1.25417768583095e-18 -0.0500000000000003 -4.74961903718999e-09 2.70795508418287e-10 -0.1 -2.28651910005348e-08 1.16293413041325e-09 -0.15 -9.19842411417646e-08 4.10234906561925e-09 -0.2 -3.55164282874679e-07 1.37872904227595e-08 -0.25 -1.34665282126931e-06 4.56969518221718e-08 -0.3 -4.93363087986778e-06 1.50820779420578e-07 -0.35 -1.6387671826382e-05 4.97028233147064e-07 -0.4 -4.45760869424224e-05 1.63619808966478e-06 -0.45 -9.59962174965524e-05 5.37748239321171e-06 -0.5 -0.000177493883072894 1.76182910672221e-05 -0.55 -0.000321089040485888 5.72872042070051e-05 -0.6 -0.000647380303581349 0.000182279838469016 -0.65 -0.00151392694442046 0.000546346821897211 -0.7 -0.00363315050990839 0.00143662489158125 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_1D_breakdown_dc.standard0000644000175000017500000001542514163340332026744 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011834e-12 -1.00000000000228e-12 0.95 1.90000000011824e-12 -9.50000000002217e-13 0.9 1.80000000011816e-12 -9.00000000002167e-13 0.85 1.70000000011808e-12 -8.50000000002128e-13 0.8 1.60000000011802e-12 -8.00000000002097e-13 0.75 1.50000000011796e-12 -7.50000000002074e-13 0.7 1.40000000011791e-12 -7.00000000002055e-13 0.65 1.30000000011786e-12 -6.50000000002042e-13 0.6 1.20000000011781e-12 -6.00000000002031e-13 0.55 1.10000000011777e-12 -5.50000000002023e-13 0.5 1.00000000011773e-12 -5.00000000002017e-13 0.45 9.00000000117685e-13 -4.50000000002013e-13 0.4 8.00000000117645e-13 -4.00000000002009e-13 0.35 7.00000000117605e-13 -3.50000000002007e-13 0.3 6.00000000117566e-13 -3.00000000002005e-13 0.25 5.00000000117526e-13 -2.50000000002004e-13 0.2 4.00000000117483e-13 -2.00000000002003e-13 0.15 3.00000000117398e-13 -1.50000000002001e-13 0.0999999999999997 2.00000000116749e-13 -1.00000000001981e-13 0.0499999999999997 1.00000000108591e-13 -5.00000000017938e-14 -3.19189119579733e-16 -5.44022126397784e-28 2.24833004913022e-28 -0.0500000000000003 -1.00000001454418e-13 5.00000000172105e-14 -0.1 -2.00000020966637e-13 1.00000000182315e-13 -0.15 -3.00000282998544e-13 1.50000001766223e-13 -0.2 -4.00003804287719e-13 2.00000016961274e-13 -0.25 -5.00051147974235e-13 2.5000016273329e-13 -0.3 -6.00687904189815e-13 3.00001561180812e-13 -0.35 -7.09254148570184e-13 3.50014977030612e-13 -0.4 -9.24514992676214e-13 4.00143680484298e-13 -0.45 -2.5755586938206e-12 4.51378382663993e-13 -0.5 -2.35493005008754e-11 5.13223359849035e-13 -0.55 -3.04579309450958e-10 6.7685682289898e-13 -0.6 -4.08569071050287e-09 1.81698673391562e-12 -0.65 -5.49745852082682e-08 1.23250260385069e-11 -0.7 -7.39885022795343e-07 1.12703055744962e-10 1 2.00013968054334e-12 -1.00004739046576e-12 0.95 1.90013960897316e-12 -9.50047345424584e-13 0.9 1.80013954658156e-12 -9.00047309679753e-13 0.85 1.70013949164583e-12 -8.50047281528628e-13 0.8 1.60013944268402e-12 -8.00047259510237e-13 0.75 1.50013939845008e-12 -7.50047242399742e-13 0.7 1.400139357917e-12 -7.00047229190921e-13 0.65 1.30013932025051e-12 -6.50047219069565e-13 0.6 1.2001392847785e-12 -6.00047211382645e-13 0.55 1.10013925096043e-12 -5.50047205607917e-13 0.5 1.00013921836025e-12 -5.0004720132717e-13 0.45 9.00139186623153e-13 -4.50047198204502e-13 0.4 8.0013915538221e-13 -4.00047195901482e-13 0.35 7.00139124164384e-13 -3.50047194039382e-13 0.3 6.00139091177694e-13 -3.00047191372645e-13 0.25 5.00139046929936e-13 -2.50047182073933e-13 0.2 4.00138935548312e-13 -2.00047135473158e-13 0.15 3.00138418793073e-13 -1.50046887329577e-13 0.0999999999999997 2.00135412866921e-13 -1.00045555872265e-13 0.0499999999999997 1.00116877358136e-13 -5.00384053494768e-14 -3.19189119579733e-16 4.12238469855901e-23 -4.1224167297014e-23 -0.0500000000000003 -1.00748245348398e-13 5.02062762172481e-14 -0.1 -2.05600380652292e-13 1.01314194391361e-13 -0.15 -3.37419087799485e-13 1.57264868541259e-13 -0.2 -6.48097096444786e-13 2.39226184781694e-13 -0.25 -2.15446818459634e-12 4.60891732372884e-13 -0.3 -1.17066561520617e-11 1.43291446790139e-12 -0.35 -7.5690264715366e-11 6.43513660427477e-12 -0.4 -5.09516269048778e-10 3.30837259264049e-11 -0.45 -3.46507616947204e-09 1.75995846090797e-10 -0.5 -2.36626975013433e-08 9.43364185070697e-10 -0.55 -1.62010470861199e-07 5.06471262763448e-09 -0.6 -1.11137485576211e-06 2.72004265233512e-08 -0.65 -7.63528431261753e-06 1.4609204017321e-07 -0.7 -5.25154439546902e-05 7.84663581577332e-07 1 2.00327644230659e-12 -1.00166258619788e-12 0.95 1.90327522328579e-12 -9.51661826943426e-13 0.9 1.80327415852984e-12 -9.01661224160155e-13 0.85 1.70327321897151e-12 -8.51660749124144e-13 0.8 1.60327237976827e-12 -8.01660377347196e-13 0.75 1.50327162010653e-12 -7.51660088371167e-13 0.7 1.40327092283136e-12 -7.01659865389912e-13 0.65 1.30327027396266e-12 -6.51659694760923e-13 0.6 1.20326966217333e-12 -6.01659565482598e-13 0.55 1.1032690782925e-12 -5.51659468700945e-13 0.5 1.00326851486618e-12 -5.01659397284628e-13 0.45 9.03267965746672e-13 -4.51659345482122e-13 0.4 8.03267419207149e-13 -4.01659302417293e-13 0.35 7.0326685694232e-13 -3.51659253351791e-13 0.3 6.032661849138e-13 -3.0165912411402e-13 0.25 5.03264949788847e-13 -2.51658579288604e-13 0.2 4.03260854341286e-13 -2.01656029799285e-13 0.15 3.03242071487471e-13 -1.51643910306104e-13 0.0999999999999997 2.03146897564182e-13 -1.0158617457874e-13 0.0499999999999997 1.02649084643584e-13 -5.13110528335318e-14 -3.19189119579733e-16 5.73187288846928e-22 -5.73187626578003e-22 -0.0500000000000003 -1.14300906253274e-13 5.6247651281301e-14 -0.1 -2.92557394991785e-13 1.36020050117021e-13 -0.15 -8.26341358304039e-13 3.27896677162428e-13 -0.2 -3.35991801215849e-12 1.05399192555308e-12 -0.25 -1.72629192631769e-11 4.32583892443447e-12 -0.3 -9.64208472009085e-11 1.97291461828151e-11 -0.35 -5.53218963602306e-10 9.29434037817878e-11 -0.4 -3.21100942064052e-09 4.41648485056693e-10 -0.45 -1.8773725819177e-08 2.10317048912057e-09 -0.5 -1.10379181034685e-07 1.00207566689862e-08 -0.55 -6.51915756726515e-07 4.77508310125507e-08 -0.6 -3.86457051159182e-06 2.27548573707165e-07 -0.65 -2.29780330547545e-05 1.08435194839998e-06 -0.7 -0.000136951495045237 5.16734064081562e-06 1 1.3324177454236e-10 -1.18997482772182e-10 0.95 1.33132994831121e-10 -1.18942318479224e-10 0.9 1.33025257975297e-10 -1.18888219707509e-10 0.85 1.32918367457781e-10 -1.18834992441096e-10 0.8 1.32812157077927e-10 -1.18782473006191e-10 0.75 1.32706487596232e-10 -1.18730524697547e-10 0.7 1.32601243123117e-10 -1.18679034171892e-10 0.65 1.32496327542118e-10 -1.18627907929813e-10 0.6 1.32391661075247e-10 -1.18577069114393e-10 0.55 1.32286939239255e-10 -1.18526217352216e-10 0.5 1.32182031898218e-10 -1.18475231225288e-10 0.45 1.32075927764809e-10 -1.18423126149228e-10 0.4 1.31965626698272e-10 -1.18366999249739e-10 0.35 1.31841272956105e-10 -1.18297369589664e-10 0.3 1.31670226876337e-10 -1.18183064976947e-10 0.25 1.31344059831029e-10 -1.17921427510962e-10 0.2 1.30501840634606e-10 -1.17174246181987e-10 0.15 1.27939733378262e-10 -1.14827166976256e-10 0.0999999999999997 1.19633583491678e-10 -1.07208484586327e-10 0.0499999999999997 9.20971186641137e-11 -8.22201734523618e-11 -3.19189119579733e-16 1.25105785971187e-18 -1.2510579695718e-18 -0.0500000000000003 -3.09539300770509e-10 2.70795604192537e-10 -0.1 -1.35412344657882e-09 1.16293554802247e-09 -0.15 -4.89383916909267e-09 4.10236647921971e-09 -0.2 -1.6943176051761e-08 1.37874939994932e-08 -0.25 -5.81667069048468e-08 4.56992726157386e-08 -0.3 -1.99989459049955e-07 1.50846485469854e-07 -0.35 -6.9089234203782e-07 4.97299903421944e-07 -0.4 -2.40134931087214e-06 1.638842272846e-06 -0.45 -8.40327548633715e-06 5.40015333199822e-06 -0.5 -2.96206986250249e-05 1.7793439436174e-05 -0.55 -0.000105205733627816 5.86285469385747e-05 -0.6 -0.000376589981755523 0.00019317768862541 -0.65 -0.0013586759196052 0.000636508749731422 -0.7 -0.00494049253498064 0.00209725704818037 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_full_subtran.standard0000644000175000017500000003036514163340332026413 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964115e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802729e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704452e-13 3.19189119579733e-16 -2.24597758604642e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336906e-13 0.1 -1.00000000180705e-13 2.00168386732606e-13 0.15 -1.50000001763804e-13 3.00692128555047e-13 0.2 -2.00000016957996e-13 4.0275053895663e-13 0.25 -2.50000162728964e-13 5.10882826704198e-13 0.3 -3.00001561174843e-13 6.43179407877317e-13 0.35 -3.50014977021663e-13 8.72106104328386e-13 0.4 -4.0014368047636e-13 1.48940636313509e-12 0.45 -4.51378383027313e-13 3.67552931867015e-12 0.5 -5.13223380803579e-13 1.22318217169869e-11 0.55 -6.76857937575833e-13 4.68053043062289e-11 0.6 -1.81705065604636e-12 2.05268489339868e-10 0.65 -1.23289421870394e-11 9.91447734068259e-10 0.700000000000001 -1.12996695978014e-10 5.98410414791998e-09 0.750000000000001 -1.10383363062539e-09 4.77985420901422e-08 0.800000000000001 -1.35637981711526e-08 4.67751956176057e-07 0.850000000000001 -4.58638043204062e-07 5.40334615789862e-06 0.900000000000001 -7.90023889136148e-06 3.73380939339645e-05 0.950000000000001 -3.39922579325693e-05 0.000117420896214554 1 -0.000154833994508258 0.000438766155241503 -1 1.0000002982035e-12 -5.68278336533812e-08 -0.95 9.50000313067236e-13 -4.03167332210399e-08 -0.9 9.00000324036022e-13 -2.81325130735503e-08 -0.85 8.50000332004957e-13 -1.92808077777511e-08 -0.8 8.00000337697016e-13 -1.29584696139916e-08 -0.75 7.50000341688261e-13 -8.5255512560363e-09 -0.7 7.00000344430938e-13 -5.47965562890097e-09 -0.65 6.5000034627436e-13 -3.43273255421563e-09 -0.6 6.00000347483557e-13 -2.09036215699508e-09 -0.55 5.50000348255685e-13 -1.23352296375787e-09 -0.5 5.00000348734246e-13 -7.02799433949326e-10 -0.45 4.50000349021187e-13 -3.84940855613794e-10 -0.4 4.00000349186995e-13 -2.01642835913021e-10 -0.35 3.500003492781e-13 -1.00385894855907e-10 -0.3 3.00000349322309e-13 -4.71348148509438e-11 -0.25 2.50000349318231e-13 -2.0679168066103e-11 -0.2 2.00000349148171e-13 -8.3812881398913e-12 -0.15 1.50000348000001e-13 -3.0938185517782e-12 -0.0999999999999997 1.00000340685856e-13 -1.01511042749411e-12 -0.0499999999999997 5.00002942845008e-14 -2.66565792219188e-13 3.19189119579733e-16 1.02427433441772e-24 -1.02360066706582e-24 0.0500000000000003 -5.00018663360794e-14 1.06858255881035e-13 0.1 -1.00013702555122e-13 2.28016548054588e-13 0.15 -1.50088767231819e-13 3.93536131422773e-13 0.2 -2.0056482332969e-13 6.9723912940615e-13 0.25 -2.53583944846536e-13 1.43345259688129e-12 0.3 -3.22731045966219e-13 3.53194746358105e-12 0.35 -4.94160897510032e-13 9.96129933865168e-12 0.4 -1.31426230036284e-12 3.03702666019944e-11 0.45 -6.24820365205194e-12 9.71096638827245e-11 0.5 -3.7271913331428e-11 3.24549388137495e-10 0.55 -2.33756005830197e-10 1.22463940392688e-09 0.6 -1.47958705356278e-09 5.04803121258619e-09 0.65 -9.38019704061807e-09 2.40380673867312e-08 0.700000000000001 -5.94707425701506e-08 1.31450276938143e-07 0.750000000000001 -3.76383527757071e-07 7.96940629998527e-07 0.800000000000001 -2.36202880056634e-06 5.26585614597166e-06 0.850000000000001 -1.53725999922105e-05 4.08247885827873e-05 0.900000000000001 -8.82494684704766e-05 0.00022043903613647 0.950000000000001 -0.000412204086660742 0.00094853510293722 1 -0.00160310714897873 0.003664648939905 -1 1.00004713212761e-12 -5.61643810094553e-08 -0.95 9.50047149574154e-13 -3.96720334195633e-08 -0.9 9.00047162397528e-13 -2.75502207348401e-08 -0.85 8.50047171672822e-13 -1.87826015065376e-08 -0.8 8.00047178265762e-13 -1.25507565113892e-08 -0.75 7.5004718286381e-13 -8.20478971878238e-09 -0.7 7.00047186004591e-13 -5.23645320396659e-09 -0.65 6.50047188101565e-13 -3.2548807682459e-09 -0.6 6.00047189466892e-13 -1.96497148427957e-09 -0.55 5.50047190331495e-13 -1.14841822681558e-09 -0.5 5.00047190862395e-13 -6.4732891663e-10 -0.45 4.5004719117739e-13 -3.50341430588513e-10 -0.4 4.00047191289123e-13 -1.81088882416453e-10 -0.35 3.50047191089706e-13 -8.88323680339063e-11 -0.3 3.00047189541389e-13 -4.10454137910799e-11 -0.25 2.5004718097487e-13 -1.77102105179684e-11 -0.2 2.00047134838743e-13 -7.07182011591301e-12 -0.15 1.50046886980074e-13 -2.5938452126121e-12 -0.0999999999999997 1.0004555569227e-13 -8.6764789842329e-13 -0.0499999999999997 5.00384052719895e-14 -2.46120714148739e-13 3.19189119579733e-16 4.13269573705674e-23 -4.13261382833473e-23 0.0500000000000003 -5.02062761145107e-14 1.60032275300687e-13 0.1 -1.01314194084635e-13 4.28895185600776e-13 0.15 -1.57264867818035e-13 1.00655442764905e-12 0.2 -2.39226183332884e-13 2.4686168200509e-12 0.25 -4.6089173012656e-13 6.50161794905516e-12 0.3 -1.43291446909217e-12 1.81936338777374e-11 0.35 -6.43513668087131e-12 5.36311283875837e-11 0.4 -3.30837269307773e-11 1.67343321508011e-10 0.45 -1.75995843393292e-10 5.61862996859267e-10 0.5 -9.4336336790711e-10 2.12265134113273e-09 0.55 -5.06466960799361e-09 8.79986154130922e-09 0.6 -2.71986734395795e-08 4.02471813831143e-08 0.65 -1.46027831551408e-07 1.98537070563537e-07 0.700000000000001 -7.82462249093772e-07 1.03033998827937e-06 0.750000000000001 -4.1436339895279e-06 5.52786065364017e-06 0.800000000000001 -2.0726785458584e-05 3.0610574272976e-05 0.850000000000001 -9.37393740922198e-05 0.000179433076227424 0.900000000000001 -0.000400783523452451 0.000841191972235509 0.950000000000001 -0.0014305419924043 0.00307957135286966 1 -0.00377218585829972 0.00835618637791529 -1 1.00165917261677e-12 -5.55552264623567e-08 -0.95 9.5165919192946e-13 -3.90866824567585e-08 -0.9 9.01659206073283e-13 -2.70260964040471e-08 -0.85 8.51659216262973e-13 -1.83375518111264e-08 -0.8 8.01659223474032e-13 -1.21891502070679e-08 -0.75 7.51659228478699e-13 -7.92233344451718e-09 -0.7 7.01659231878792e-13 -5.02387788068211e-09 -0.65 6.51659234135306e-13 -3.10064995027489e-09 -0.6 6.01659235594734e-13 -1.85716530848194e-09 -0.55 5.51659236512098e-13 -1.07594357716056e-09 -0.5 5.01659237070778e-13 -6.00599391563765e-10 -0.45 4.5165923739927e-13 -3.21559863064465e-10 -0.4 4.01659231345787e-13 -1.64250947092331e-10 -0.35 3.51659207953387e-13 -7.95528875151551e-11 -0.3 3.01659096052366e-13 -3.62902374056185e-11 -0.25 2.51658562579388e-13 -1.54970463877905e-11 -0.2 2.01656020268568e-13 -6.18429190148618e-12 -0.15 1.5164390514466e-13 -2.33538515673711e-12 -0.0999999999999997 1.01586171987881e-13 -8.66387831003729e-13 -0.0499999999999997 5.13110517654121e-14 -3.08743136986356e-13 3.19189119579733e-16 5.74616866425067e-22 -5.74615219579319e-22 0.0500000000000003 -5.62476501202264e-14 3.95603754082254e-13 0.1 -1.36020047159556e-13 1.28245455931911e-12 0.15 -3.27896671322894e-13 3.51019833369455e-12 0.2 -1.05399191550812e-12 9.50982884578744e-12 0.25 -4.32583890383524e-12 2.66176081161696e-11 0.3 -1.97291460032982e-11 7.86247088302977e-11 0.35 -9.29433994098e-11 2.49539765671534e-10 0.4 -4.41648364170798e-10 8.6266096966194e-10 0.45 -2.10316715333065e-09 3.2817653250288e-09 0.5 -1.00206658861085e-08 1.34459228649873e-08 0.55 -4.77483983253542e-08 5.85353412605264e-08 0.6 -2.27484391103909e-07 2.65709517695177e-07 0.65 -1.08268899573578e-06 1.23885944352075e-06 0.700000000000001 -5.12525620247226e-06 5.8704157747363e-06 0.750000000000001 -2.36176697977738e-05 2.8039951799812e-05 0.800000000000001 -9.82353891814296e-05 0.000133349988584145 0.850000000000001 -0.000345683650571982 0.00061188964125854 0.900000000000001 -0.00110984297266297 0.00230493552719243 0.950000000000001 -0.00292331454171664 0.00644548721684815 1 -0.00593312679543517 0.013526737168686 -1 1.89720565744427e-12 -5.40738965276465e-08 -0.95 1.8472056800874e-12 -3.76904764123013e-08 -0.9 1.79720569655281e-12 -2.57947267709649e-08 -0.85 1.74720570832831e-12 -1.7305874224078e-08 -0.8 1.6972057166009e-12 -1.13616361565276e-08 -0.75 1.64720572230335e-12 -7.28441633717834e-09 -0.7 1.59720572615657e-12 -4.55054604641475e-09 -0.65 1.5472057287076e-12 -2.76267170564357e-09 -0.6 1.49720573036331e-12 -1.6253326004859e-09 -0.55 1.44720573141985e-12 -9.23711672954931e-10 -0.5 1.39720452834573e-12 -5.05480532517248e-10 -0.45 1.34720107912732e-12 -2.65599377357061e-10 -0.4 1.29718774388683e-12 -1.33876228273689e-10 -0.35 1.24713619204377e-12 -6.50407814646737e-11 -0.3 1.19693690388982e-12 -3.10490659919122e-11 -0.25 1.14616650134181e-12 -1.53083418037055e-11 -0.2 1.09318830233924e-12 -8.49850504922245e-12 -0.15 1.03167527203618e-12 -5.66574495721887e-12 -0.0999999999999997 9.37168556375872e-13 -4.27046691435302e-12 -0.0499999999999997 7.1511588342844e-13 -2.86541904273988e-12 3.19189119579733e-16 5.07442597230015e-20 -5.07442426583624e-20 0.0500000000000003 -2.62118383887975e-12 7.41304207544637e-12 0.1 -1.26107855810381e-11 2.84695356319937e-11 0.15 -5.10849843921276e-11 9.27379333940465e-11 0.2 -1.99674032548628e-10 3.0210934928375e-10 0.25 -7.73941466564754e-10 1.02204599157953e-09 0.3 -2.99378102595914e-09 3.60097557720988e-09 0.35 -1.15749912344923e-08 1.31093539116825e-08 0.4 -4.47473189085802e-08 4.8860882500465e-08 0.45 -1.72975896856549e-07 1.84944925034052e-07 0.5 -6.68555204987925e-07 7.07147624287725e-07 0.55 -2.58242622523274e-06 2.72085618632233e-06 0.6 -9.95092378716917e-06 1.0500797815116e-05 0.65 -3.79729275677691e-05 4.04382303026283e-05 0.700000000000001 -0.000139661947754339 0.000153098623878163 0.750000000000001 -0.000458375427118918 0.000545526981359675 0.800000000000001 -0.00120350333595607 0.00167452976941924 0.850000000000001 -0.00246729164460425 0.00409272501248311 0.900000000000001 -0.00423027226546971 0.00812024029852289 0.950000000000001 -0.00660166714715758 0.0141374983054262 1 -0.00968252295903999 0.0223558205470944 -1 1.18975122852306e-10 -5.24882212949522e-08 -0.95 1.18925122882418e-10 -3.62494799011581e-08 -0.9 1.18875122905526e-10 -2.45717858086155e-08 -0.85 1.18825122923362e-10 -1.63270792058136e-08 -0.8 1.187751229373e-10 -1.06219428149853e-08 -0.75 1.18725122948409e-10 -6.76014645165503e-09 -0.7 1.18675122957516e-10 -4.20869529378662e-09 -0.65 1.18625122965249e-10 -2.56749571269059e-09 -0.6 1.18575122972101e-10 -1.54268194493612e-09 -0.55 1.18524885583833e-10 -9.23572330132978e-10 -0.5 1.18474340784264e-10 -5.63149550254057e-10 -0.45 1.18422545689592e-10 -3.61883156256884e-10 -0.4 1.18366630949916e-10 -2.54648800452498e-10 -0.35 1.18297142233799e-10 -2.00435613880798e-10 -0.3 1.1818292810273e-10 -1.74484344328883e-10 -0.25 1.17921346494053e-10 -1.62450012854504e-10 -0.2 1.17174198172003e-10 -1.5610889756406e-10 -0.15 1.14827137638644e-10 -1.49934768111874e-10 -0.0999999999999997 1.07208465685119e-10 -1.37244090970421e-10 -0.0499999999999997 8.22201616811117e-11 -1.02550375877081e-10 3.19189119579733e-16 1.25417751323098e-18 -1.25417751969333e-18 0.0500000000000003 -2.70795547531442e-10 3.14437582760949e-10 0.1 -1.16293504195051e-09 1.30224166663562e-09 0.15 -4.1023616215931e-09 4.45785542341261e-09 0.2 -1.37874436393713e-08 1.46542714149105e-08 0.25 -4.5698732825188e-08 4.78536221407701e-08 0.3 -1.50840623101441e-07 1.56502335409735e-07 0.35 -4.97235861438282e-07 5.13260740277737e-07 0.4 -1.6381404838698e-06 1.68719320921755e-06 0.45 -5.39245275777982e-06 5.55350009382666e-06 0.5 -1.77090920083315e-05 1.82702549226938e-05 0.55 -5.77133931501787e-05 5.97925641288648e-05 0.6 -0.000183570959439493 0.000192012203428235 0.65 -0.000544994105032721 0.000583676273243399 0.700000000000001 -0.00139249418541045 0.00157084216510262 0.750000000000001 -0.00287325962962845 0.00352482225566535 0.800000000000001 -0.00486539876456677 0.00660445223460127 0.850000000000001 -0.0071622987991918 0.0108124977621364 0.900000000000001 -0.0096280048786915 0.0161999275726896 0.950000000000001 -0.0121974506713607 0.0229002074588892 1 -0.0148411431114416 0.0309945479240723 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_1D.standard0000644000175000017500000003035714163340332024160 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002003e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017937e-14 -1.0000575797825e-13 3.19189119579733e-16 -2.24597758610152e-28 5.43852571787823e-28 0.0500000000000003 -5.00000000172099e-14 1.00021130226251e-13 0.1 -1.00000000182311e-13 2.00098672517436e-13 0.15 -1.50000001766206e-13 3.00383232640664e-13 0.2 -2.00000016961194e-13 4.01427500439457e-13 0.25 -2.50000162732966e-13 5.05259770605552e-13 0.3 -3.00001561179699e-13 6.19324037995474e-13 0.35 -3.50014977027488e-13 7.70944534001899e-13 0.4 -4.00143680477515e-13 1.06045936684609e-12 0.45 -4.51378382653432e-13 1.85671697271933e-12 0.5 -5.13223359838464e-13 4.51945012807262e-12 0.55 -6.768568228932e-13 1.40984637154991e-11 0.6 -1.81698673391433e-12 6.6518546437384e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.700000000000001 -1.12703055744962e-10 3.47593602243093e-09 0.750000000000001 -1.07523878099576e-09 3.70437283331312e-08 0.800000000000001 -1.03087878741443e-08 4.2078518234126e-07 0.850000000000001 -9.88893781007048e-08 5.19838085606027e-06 0.900000000000001 -9.48676927691166e-07 3.64426951851013e-05 0.950000000000001 -9.10101825505032e-06 0.00011233505028582 1 -8.73095920185772e-05 0.000408005693289852 -1 1.00000034937479e-12 -2.00170685364324e-12 -0.95 9.50000349374789e-13 -1.90170685364324e-12 -0.9 9.00000349374789e-13 -1.80170685364324e-12 -0.85 8.50000349374789e-13 -1.70170685364324e-12 -0.8 8.00000349374789e-13 -1.60170685364324e-12 -0.75 7.50000349374789e-13 -1.50170685364324e-12 -0.7 7.00000349374788e-13 -1.40170685364324e-12 -0.65 6.50000349374788e-13 -1.30170685192337e-12 -0.6 6.00000349374788e-13 -1.20170684866847e-12 -0.55 5.50000349374788e-13 -1.10170683925358e-12 -0.5 5.00000349374788e-13 -1.00170681202073e-12 -0.45 4.50000349374788e-13 -9.01706733248892e-13 -0.4 4.00000349374788e-13 -8.01706505398964e-13 -0.35 3.50000349373942e-13 -7.01705846335334e-13 -0.3 3.00000349369419e-13 -6.01703939971841e-13 -0.25 2.50000349340734e-13 -5.01698425742357e-13 -0.2 2.00000349158817e-13 -4.01682475568281e-13 -0.15 1.50000348005106e-13 -3.01636338580386e-13 -0.0999999999999997 1.00000340688313e-13 -2.01502881963904e-13 -0.0499999999999997 5.00002942855112e-14 -1.01116829370576e-13 3.19189119579733e-16 1.02427433338254e-24 -1.02394362434436e-24 0.0500000000000003 -5.00018663369498e-14 1.03231482029217e-13 0.1 -1.00013702556897e-13 2.12585113041734e-13 0.15 -1.50088767234614e-13 3.39681870195537e-13 0.2 -2.00564823333809e-13 5.18321118300319e-13 0.25 -2.53583944850317e-13 8.47446497916894e-13 0.3 -3.22731045886909e-13 1.62074623988046e-12 0.35 -4.94160895007691e-13 3.73538840466097e-12 0.4 -1.31426223491526e-12 1.00900194676122e-11 0.45 -6.2482020346495e-12 3.10042420924721e-11 0.5 -3.72718761854811e-11 1.08679862139372e-10 0.55 -2.33755192271124e-10 5.16681810882584e-10 0.6 -1.47957434063713e-09 2.70327986136166e-09 0.65 -9.38022288444418e-09 1.60992979224565e-08 0.700000000000001 -5.94854287492185e-08 1.03283346580654e-07 0.750000000000001 -3.77249586153611e-07 6.8770590306344e-07 0.800000000000001 -2.39249190437502e-06 4.78271225894699e-06 0.850000000000001 -1.51730461610765e-05 3.86808605065979e-05 0.900000000000001 -9.62266090537246e-05 0.000213338659928004 0.950000000000001 -0.000610263789591723 0.000988312614424231 1 -0.00387025895403701 0.00535161304814611 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620888e-13 -0.4 4.00047191487237e-13 -8.15208096770836e-13 -0.35 3.50047191189401e-13 -7.15197268368526e-13 -0.3 3.0004718958971e-13 -6.15168800137369e-13 -0.25 2.50047180997687e-13 -5.15093953964246e-13 -0.2 2.00047134849492e-13 -4.14897162929443e-13 -0.15 1.50046886985275e-13 -3.14379680798674e-13 -0.0999999999999997 1.00045555694836e-13 -2.13018560796776e-13 -0.0499999999999997 5.00384052730846e-14 -1.09436572570566e-13 3.19189119579733e-16 4.13269573151007e-23 -4.13265453355744e-23 0.0500000000000003 -5.0206276115586e-14 1.24914117033713e-13 0.1 -1.01314194087144e-13 2.90980896151676e-13 0.15 -1.57264867823004e-13 5.67725307060068e-13 0.2 -2.39226183336884e-13 1.14882509114703e-12 0.25 -4.60891729945478e-13 2.60210366156322e-12 0.3 -1.43291446463927e-12 6.73610052619478e-12 0.35 -6.43513660098033e-12 2.00061162068663e-11 0.4 -3.30837259241193e-11 6.85489977652468e-11 0.45 -1.75995846089845e-10 2.70515774412067e-10 0.5 -9.43364185070503e-10 1.25630053792734e-09 0.55 -5.06471262763447e-09 6.17833007841585e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.700000000000001 -7.84663581577346e-07 9.28415745768935e-07 0.750000000000001 -4.21445744634298e-06 5.09879601067368e-06 0.800000000000001 -2.26360215187804e-05 2.8700178680583e-05 0.850000000000001 -0.000121579001631256 0.000175699566718311 0.900000000000001 -0.000653005827965913 0.000908465051650113 0.950000000000001 -0.0035073212278215 0.00440328372428201 1 -0.0188379669510573 0.0227283557895423 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787924e-13 -1.17570904392614e-12 -0.5 5.01659237787926e-13 -1.07570350824598e-12 -0.45 4.51659237787935e-13 -9.75689922709873e-13 -0.4 4.01659231548719e-13 -8.75656575163189e-13 -0.35 3.51659208055735e-13 -7.75574726207809e-13 -0.3 3.01659096102724e-13 -6.75373800064317e-13 -0.25 2.51658562604109e-13 -5.74880432730867e-13 -0.2 2.01656020281116e-13 -4.73668387073455e-13 -0.15 1.51643905151441e-13 -3.70687925097132e-13 -0.0999999999999997 1.01586171991671e-13 -2.6334527481025e-13 -0.0499999999999997 5.13110517672389e-14 -1.45191279609288e-13 3.19189119579733e-16 5.74616864354307e-22 -5.74616115725308e-22 0.0500000000000003 -5.62476501229265e-14 2.13950763614116e-13 0.1 -1.36020047170782e-13 6.08121963861568e-13 0.15 -3.27896671387576e-13 1.49931858967928e-12 0.2 -1.05399191607847e-12 3.87148001992826e-12 0.25 -4.3258389117019e-12 1.1124834937132e-11 0.3 -1.97291461694792e-11 3.63099468893959e-11 0.35 -9.29434037716724e-11 1.33935721720849e-10 0.4 -4.41648485051704e-10 5.45224221543521e-10 0.45 -2.10317048911921e-09 2.39981882609061e-09 0.5 -1.0020756668986e-08 1.09376345861641e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.700000000000001 -5.16734064081571e-06 5.53886593993017e-06 0.750000000000001 -2.46243103052517e-05 2.67001628198755e-05 0.800000000000001 -0.000117344055554714 0.000130215837064791 0.850000000000001 -0.000559188357169267 0.000665866085586443 0.900000000000001 -0.00266474188743109 0.00323615830897643 0.950000000000001 -0.0126984928103494 0.0148026242803206 1 -0.0605130727475002 0.0694620631135213 -1 1.8972057352866e-12 -4.12190327764117e-12 -0.95 1.8472057352866e-12 -4.02190327764117e-12 -0.9 1.7972057352866e-12 -3.92190225632505e-12 -0.85 1.7472057352866e-12 -3.82190105524851e-12 -0.8 1.69720573528661e-12 -3.7218984416956e-12 -0.75 1.64720573528662e-12 -3.62189275458197e-12 -0.7 1.59720573528664e-12 -3.52188037937375e-12 -0.65 1.54720573528673e-12 -3.42185345081413e-12 -0.6 1.49720573528703e-12 -3.32179485403658e-12 -0.55 1.44720573528798e-12 -3.22166734694432e-12 -0.5 1.39720453154843e-12 -3.12138868667186e-12 -0.45 1.34720108191009e-12 -3.02078148590307e-12 -0.4 1.29718774639861e-12 -2.91945437817864e-12 -0.35 1.24713619437112e-12 -2.81654401856755e-12 -0.3 1.19693690608061e-12 -2.71012381338451e-12 -0.25 1.14616650342061e-12 -2.59581606486531e-12 -0.2 1.09318830431587e-12 -2.46337786134474e-12 -0.15 1.03167527390608e-12 -2.28774768406527e-12 -0.0999999999999997 9.37168558099011e-13 -2.00366730781635e-12 -0.0499999999999997 7.15115884813262e-13 -1.42765480474101e-12 3.19189119579733e-16 5.07442622473564e-20 -5.07442557850078e-20 0.0500000000000003 -2.62118384783783e-12 4.11796372433203e-12 0.1 -1.26107856731784e-11 1.73289044709166e-11 0.15 -5.10849854680895e-11 6.28591145981424e-11 0.2 -1.99674046887058e-10 2.27221255785917e-10 0.25 -7.73941671887358e-10 8.37924844582888e-10 0.3 -2.99378407974041e-09 3.14686776283752e-09 0.35 -1.15750376503994e-08 1.19668282984383e-08 0.4 -4.4748034121304e-08 4.58737379402857e-08 0.45 -1.72987015700746e-07 1.76651608133278e-07 0.5 -6.68729088106657e-07 6.82221512956974e-07 0.55 -2.58515303334841e-06 2.63958184694319e-06 0.6 -9.99360421369542e-06 1.02259253991901e-05 0.65 -3.86329612906105e-05 3.96560267477216e-05 0.700000000000001 -0.000149346085647431 0.00015392770339063 0.750000000000001 -0.000577337394380024 0.000598091405053974 0.800000000000001 -0.00223185271458484 0.00232799821195549 0.850000000000001 -0.00862782592505608 0.00913043853947601 0.900000000000001 -0.0333531777003911 0.0359868248907538 0.950000000000001 -0.12893566378958 0.139462022824438 1 -0.498435427837973 0.540783765228211 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.18825135234401e-10 -1.30797544653402e-10 -0.8 1.18775135234403e-10 -1.30697452866864e-10 -0.75 1.18725135234408e-10 -1.30597270669896e-10 -0.7 1.18675135234422e-10 -1.3049690900755e-10 -0.65 1.18625135234461e-10 -1.30396191105083e-10 -0.6 1.18575135234566e-10 -1.30294766063313e-10 -0.55 1.18524897840167e-10 -1.30191699950077e-10 -0.5 1.18474353034842e-10 -1.30085539519988e-10 -0.45 1.18422557934573e-10 -1.29972596875668e-10 -0.4 1.1836664318916e-10 -1.29844551137558e-10 -0.35 1.18297154466434e-10 -1.29681120696754e-10 -0.3 1.18182940325636e-10 -1.29429638088295e-10 -0.25 1.17921358696786e-10 -1.28944661320645e-10 -0.2 1.1717421031985e-10 -1.2780268918443e-10 -0.15 1.1482714961513e-10 -1.24718744459431e-10 -0.0999999999999997 1.07208477086367e-10 -1.15677456403674e-10 -0.0499999999999997 8.22201709724528e-11 -8.7879738193138e-11 3.19189119579733e-16 1.25417773295083e-18 -1.25417768125204e-18 0.0500000000000003 -2.70795603003862e-10 2.82482764696758e-10 0.1 -1.16293554639735e-09 1.19968102048248e-09 0.15 -4.10236647769572e-09 4.19605719138774e-09 0.2 -1.37874939984276e-08 1.40217410358346e-08 0.25 -4.56992726152099e-08 4.63172577067687e-08 0.3 -1.50846485469688e-07 1.52625480136579e-07 0.35 -4.97299903421916e-07 5.0289801847986e-07 0.4 -1.638842272846e-06 1.6577798757615e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.700000000000001 -0.00209725704818039 0.00214673139842963 0.750000000000001 -0.00691033192322979 0.0070981937045267 0.800000000000001 -0.0227691145607407 0.0234850661691367 0.850000000000001 -0.075022817915502 0.0778328258163541 0.900000000000001 -0.247195523519854 0.258365553265715 0.950000000000001 -0.814493889989326 0.856020476606635 1 -2.68370675662406 2.83662793163795 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_dc.standard0000644000175000017500000001544414163340332024721 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964114e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802728e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704443e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336811e-13 0.1 -1.00000000180705e-13 2.00168386731406e-13 0.15 -1.50000001763803e-13 3.0069212854088e-13 0.2 -2.00000016957996e-13 4.02750538790327e-13 0.25 -2.50000162728964e-13 5.10882824752989e-13 0.3 -3.00001561174843e-13 6.43179384985094e-13 0.35 -3.50014977021663e-13 8.72105835750342e-13 0.4 -4.0014368047636e-13 1.4894032121023e-12 0.45 -4.51378383027313e-13 3.67549234987265e-12 0.5 -5.13223380803581e-13 1.22313879887219e-11 0.55 -6.76857937575984e-13 4.6800215685024e-11 0.6 -1.81705065605584e-12 2.05208788215455e-10 0.65 -1.23289421879791e-11 9.90747303906032e-10 0.7 -1.12996696079871e-10 5.97588651479328e-09 -1 1.00004713212806e-12 -5.61643810093382e-08 -0.95 9.50047149574575e-13 -3.96720334194462e-08 -0.9 9.00047162397927e-13 -2.7550220734723e-08 -0.85 8.50047171673199e-13 -1.87826015064205e-08 -0.8 8.00047178266116e-13 -1.25507565112721e-08 -0.75 7.50047182864142e-13 -8.20478971866531e-09 -0.7 7.00047186004901e-13 -5.23645320384952e-09 -0.65 6.50047188101854e-13 -3.25488076812882e-09 -0.6 6.00047189467158e-13 -1.96497148416249e-09 -0.55 5.50047190331739e-13 -1.14841822669851e-09 -0.5 5.00047190862616e-13 -6.47328916512928e-10 -0.45 4.50047191177589e-13 -3.50341430471441e-10 -0.4 4.000471912893e-13 -1.81088882299381e-10 -0.35 3.50047191089861e-13 -8.88323679168347e-11 -0.3 3.00047189541522e-13 -4.104541367401e-11 -0.25 2.5004718097498e-13 -1.77102104009089e-11 -0.2 2.00047134838832e-13 -7.07181999891841e-12 -0.15 1.5004688698014e-13 -2.59384509602248e-12 -0.0999999999999997 1.00045555692315e-13 -8.67647784359964e-13 -0.0499999999999997 5.00384052720117e-14 -2.46120615844389e-13 3.19189119579733e-16 4.13269573212636e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145329e-14 1.60031662079025e-13 0.1 -1.0131419408468e-13 4.28890747107815e-13 0.15 -1.57264867818105e-13 1.00652612714761e-12 0.2 -2.39226183332991e-13 2.46843966855197e-12 0.25 -4.60891730126788e-13 6.50051226635288e-12 0.3 -1.4329144690935e-12 1.81867360256245e-11 0.35 -6.43513668089688e-12 5.35880990342276e-11 0.4 -3.30837269315501e-11 1.6707490417506e-10 0.45 -1.75995843418763e-10 5.60188611427869e-10 0.5 -9.43363368757832e-10 2.1122065424613e-09 0.55 -5.06466963648339e-09 8.73470707776495e-09 0.6 -2.71986743939348e-08 3.98407514644345e-08 0.65 -1.46027863500081e-07 1.96001862768085e-07 0.7 -7.82463314103258e-07 1.01452864787273e-06 -1 1.00165917262577e-12 -5.55552264587846e-08 -0.95 9.51659191938014e-13 -3.90866824531864e-08 -0.9 9.01659206081387e-13 -2.70260964004749e-08 -0.85 8.51659216270628e-13 -1.83375518075542e-08 -0.8 8.01659223481238e-13 -1.21891502034958e-08 -0.75 7.51659228485456e-13 -7.92233344094503e-09 -0.7 7.01659231885099e-13 -5.02387787710995e-09 -0.65 6.51659234141164e-13 -3.10064994670273e-09 -0.6 6.01659235600142e-13 -1.85716530490979e-09 -0.55 5.51659236517056e-13 -1.0759435735884e-09 -0.5 5.01659237075288e-13 -6.00599387991606e-10 -0.45 4.5165923740333e-13 -3.21559859492307e-10 -0.4 4.01659231349398e-13 -1.64250943520177e-10 -0.35 3.51659207956548e-13 -7.95528839430209e-11 -0.3 3.01659096055077e-13 -3.62902338335926e-11 -0.25 2.5165856258165e-13 -1.54970428163576e-11 -0.2 2.0165602027038e-13 -6.18428833330062e-12 -0.15 1.51643905146023e-13 -2.33538160633361e-12 -0.0999999999999997 1.01586171988794e-13 -8.66384377973613e-13 -0.0499999999999997 5.13110517658733e-14 -3.08740217166106e-13 3.19189119579733e-16 5.74616864058484e-22 -5.74615169092221e-22 0.0500000000000003 -5.6247650120732e-14 3.95587765349087e-13 0.1 -1.36020047160779e-13 1.28235101739212e-12 0.15 -3.27896671325851e-13 3.50961535655099e-12 0.2 -1.05399191551782e-12 9.50662051465433e-12 0.25 -4.32583890387995e-12 2.66000235287292e-11 0.3 -1.97291460036267e-11 7.85284008612682e-11 0.35 -9.29433994145704e-11 2.49012373941188e-10 0.4 -4.41648364277424e-10 8.59772993498026e-10 0.45 -2.10316715602819e-09 3.26595096020147e-09 0.5 -1.0020665956095e-08 1.33593246851408e-08 0.55 -4.77484001495407e-08 5.80611406507811e-08 0.6 -2.27484438672063e-07 2.63112956742913e-07 0.65 -1.08269023355774e-06 1.22464418932117e-06 0.7 -5.12528803920965e-06 5.79266079437438e-06 -1 1.18975135152357e-10 -5.24880699391842e-08 -0.95 1.189251351773e-10 -3.62493285453486e-08 -0.9 1.18875135195239e-10 -2.45716344527744e-08 -0.85 1.18825135207906e-10 -1.63269278499491e-08 -0.8 1.18775135216674e-10 -1.06217914591039e-08 -0.75 1.18725135222614e-10 -6.75999509576158e-09 -0.7 1.18675135226552e-10 -4.2085439378859e-09 -0.65 1.18625135229116e-10 -2.5673443567891e-09 -0.6 1.18575135230799e-10 -1.54253058904944e-09 -0.55 1.18524897837337e-10 -9.2342097431264e-10 -0.5 1.18474353032543e-10 -5.62998194684534e-10 -0.45 1.18422557932515e-10 -3.61731801611264e-10 -0.4 1.18366643187059e-10 -2.54497449194966e-10 -0.35 1.18297154463758e-10 -2.00284275038608e-10 -0.3 1.18182940320882e-10 -1.74333050976209e-10 -0.25 1.17921358685164e-10 -1.62298886171316e-10 -0.2 1.17174210285878e-10 -1.55958381541255e-10 -0.15 1.14827149509893e-10 -1.49786489487052e-10 -0.0999999999999997 1.07208476768789e-10 -1.37104009945538e-10 -0.0499999999999997 8.22201701815567e-11 -1.02440330029083e-10 3.19189119579733e-16 1.25417769417674e-18 -1.25417751323098e-18 0.0500000000000003 -2.70795575537001e-10 3.14034385932236e-10 0.1 -1.16293516232925e-09 1.30036119774443e-09 0.15 -4.1023620476332e-09 4.45056238314179e-09 0.2 -1.37874450883423e-08 1.46271473089844e-08 0.25 -4.56987378354749e-08 4.77538395978037e-08 0.3 -1.5084064214968e-07 1.56136346704101e-07 0.35 -4.97235954543191e-07 5.11919483516112e-07 0.4 -1.63814115629384e-06 1.68227968708889e-06 0.45 -5.39245937339608e-06 5.53551042839028e-06 0.5 -1.77091663682593e-05 1.82045029901989e-05 0.55 -5.77142509929298e-05 5.95535594498789e-05 0.6 -0.000183580397283889 0.00019115805741361 0.65 -0.000545082080399613 0.000580760893049513 0.7 -0.00139306927754892 0.00156176519038864 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_sh_ac.standard0000644000175000017500000000610714163340332026130 0ustar carstencarstenFreq N(coll) 1000 6.73930833886999e-24 3162.27766017779 6.73930833886703e-24 10000.0000000595 6.73930833883746e-24 31622.7766019662 6.7393083385417e-24 100000.000001191 6.73930833558415e-24 316227.766021545 6.73930830601522e-24 1000000.00001786 6.73930801097637e-24 3162277.66023428 6.73930512422836e-24 10000000.0002382 6.7392814723992e-24 31622776.6025311 6.73920807164267e-24 100000000.002977 6.73919748085143e-24 316227766.027194 6.739490256355e-24 1000000000.03572 6.74247593616037e-24 3162277660.29077 6.77233858533458e-24 10000000000.4168 7.0709452825196e-24 31622776603.096 1.0054974078301e-23 100000000000 3.96934570457e-23 1000 3.90020085096397e-22 3162.27766017779 3.90020084952862e-22 10000.0000000595 3.90020083517514e-22 31622.7766019662 3.90020069164058e-22 100000.000001191 3.90019925632847e-22 316227.766021545 3.90018490654513e-22 1000000.00001786 3.90004174171635e-22 3162277.66023428 3.89864263019385e-22 10000000.0002382 3.88728678116808e-22 31622776.6025311 3.85258785315297e-22 100000000.002977 3.83509457920281e-22 316227766.027194 3.83261406495e-22 1000000000.03572 3.83238341460131e-22 3162277660.29077 3.83263884038121e-22 10000000000.4168 3.83545015425711e-22 31622776603.096 3.86356642967077e-22 100000000000 4.14250462846209e-22 1000 1.39547219573341e-20 3162.27766017779 1.39547218619705e-20 10000.0000000595 1.39547209083349e-20 31622.7766019662 1.3954711372012e-20 100000.000001191 1.39546160120766e-20 316227.766021545 1.39536627419335e-20 1000000.00001786 1.39441628473489e-20 3162277.66023428 1.38523341111547e-20 10000000.0002382 1.31691611227095e-20 31622776.6025311 1.15939771517138e-20 100000000.002977 1.10018814509244e-20 316227766.027194 1.09259080475836e-20 1000000000.03572 1.09180119455098e-20 3162277660.29077 1.09163878755138e-20 10000000000.4168 1.09079150029691e-20 31622776603.096 1.08251448883022e-20 100000000000 1.01010320895189e-20 1000 2.64240900018093e-20 3162.27766017779 2.64240899509862e-20 10000.0000000595 2.64240894427553e-20 31622.7766019662 2.64240843604643e-20 100000.000001191 2.64240335394205e-20 316227.766021545 2.64235255154752e-20 1000000.00001786 2.64184638564944e-20 3162277.66023428 2.63696389461277e-20 10000000.0002382 2.60121408943467e-20 31622776.6025311 2.52246305708356e-20 100000000.002977 2.49408683928184e-20 316227766.027194 2.4902085313775e-20 1000000000.03572 2.48695986402393e-20 3162277660.29077 2.45886540087825e-20 10000000000.4168 2.23696900108704e-20 31622776603.096 1.61747622418096e-20 100000000000 1.33264682583079e-20 1000 2.61683233851398e-20 3162.27766017779 2.61683233672496e-20 10000.0000000595 2.6168323188348e-20 31622.7766019662 2.61683213993371e-20 100000.000001191 2.61683035098223e-20 316227.766021545 2.61681246740411e-20 1000000.00001786 2.61663422331126e-20 3162277.66023428 2.61490903341808e-20 10000000.0002382 2.60194598618122e-20 31622776.6025311 2.57116590764793e-20 100000000.002977 2.55921473622429e-20 316227766.027194 2.55716521488036e-20 1000000000.03572 2.55197003797161e-20 3162277660.29077 2.50658519557439e-20 10000000000.4168 2.28954476435377e-20 31622776603.096 2.09032914490317e-20 100000000000 2.04738530305073e-20 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_vert_nqs_ac.standard0000644000175000017500000020075314163340332026624 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 10000000000 1.01773916629175e-05 -1.02439088280784e-09 0.0073385835886345 9.64265296946346e-07 2.01445604892069e-14 3.97282514357049e-15 4.48004139752136e-15 3.97089995096268e-15 12599210498.9563 1.03031355626728e-05 -1.17566935807834e-09 0.00733852899397264 9.64258123773149e-07 2.01445560749678e-14 3.97282513825986e-15 4.4800395039131e-15 3.97089995121148e-15 15874010519.701 1.05027400854994e-05 -1.41580719322469e-09 0.00733844233076603 9.64246737125265e-07 2.01445490678518e-14 3.97282512982982e-15 4.48003649799736e-15 3.97089995160643e-15 20000000000 1.08195887959644e-05 -1.79699777108685e-09 0.00733830476255163 9.64228662086519e-07 2.01445379448791e-14 3.97282511644813e-15 4.48003172640355e-15 3.97089995223337e-15 10000000000 1.46842891012267e-05 -1.51920751551474e-09 0.0105451016367493 1.42410478337514e-06 2.08412183067203e-14 3.99399255705624e-15 4.72301465738711e-15 3.99104818953974e-15 12599210498.9563 1.48651671110045e-05 -1.75096644802308e-09 0.010545023110664 1.42409417902481e-06 2.0841211953889e-14 3.99399254891636e-15 4.72301193238696e-15 3.99104818990773e-15 15874010519.701 1.5152290928858e-05 -2.1188580983445e-09 0.0105448984588739 1.42407734574901e-06 2.08412018694727e-14 3.9939925359952e-15 4.72300760671886e-15 3.99104819049188e-15 20000000000 1.56080662244119e-05 -2.70284282977458e-09 0.0105447005880043 1.42405062479364e-06 2.08411858616476e-14 3.99399251548438e-15 4.72300074014877e-15 3.99104819141916e-15 10000000000 2.12186044125524e-05 -2.26849159654584e-09 0.0151176575103103 2.13842302527988e-06 2.18270200835695e-14 4.01613753382994e-15 5.06156057513014e-15 4.0116452586401e-15 12599210498.9563 2.14782078160988e-05 -2.62246288953276e-09 0.0151175448163033 2.13840708518517e-06 2.18270109609722e-14 4.0161375213912e-15 5.06155666239927e-15 4.01164525919353e-15 15874010519.701 2.18902994787059e-05 -3.18435312922009e-09 0.0151173659265805 2.13838178198409e-06 2.18269964798591e-14 4.01613750164609e-15 5.06155045132617e-15 4.01164526007207e-15 20000000000 2.25444465237628e-05 -4.07628779641399e-09 0.0151170819590202 2.13834161596353e-06 2.18269734927953e-14 4.01613747030305e-15 5.06154059186219e-15 4.01164526146665e-15 10000000000 3.06984680298877e-05 -3.41759861888455e-09 0.0215967628126916 3.27912175248785e-06 2.32166396749168e-14 4.03953182638302e-15 5.53343683784932e-15 4.03269889164979e-15 12599210498.9563 3.10697804494205e-05 -3.95614304686668e-09 0.0215966016409758 3.27909728210914e-06 2.32166266195368e-14 4.03953180744774e-15 5.53343123885645e-15 4.03269889249987e-15 15874010519.701 3.16591978028013e-05 -4.81102269732867e-09 0.0215963457980597 3.27905843799177e-06 2.32166058955666e-14 4.03953177739009e-15 5.5334223510093e-15 4.0326988938493e-15 20000000000 3.25948285130368e-05 -6.16804357555746e-09 0.0215959396758579 3.27899677727152e-06 2.32165729987017e-14 4.03953172967711e-15 5.53340824243138e-15 4.03269889599137e-15 10000000000 4.44584444569756e-05 -5.21113610447762e-09 0.0306974595473703 5.15389043835487e-06 2.51620044277236e-14 4.06456060893765e-15 6.18865383406529e-15 4.05420855993905e-15 12599210498.9563 4.49869108705807e-05 -6.02645889164053e-09 0.030697230185394 5.1538519313961e-06 2.51619858356924e-14 4.0645605802537e-15 6.18864586142964e-15 4.05420856127755e-15 15874010519.701 4.58257927816396e-05 -7.32069353024698e-09 0.0306968660977113 5.15379080570466e-06 2.51619563229016e-14 4.06456053472109e-15 6.18863320565941e-15 4.05420856340229e-15 20000000000 4.71574191117796e-05 -9.37513873811646e-09 0.030696288148975 5.15369377546225e-06 2.51619094748188e-14 4.06456046244345e-15 6.18861311587647e-15 4.05420856677511e-15 10000000000 6.44382547395578e-05 -8.08087351331514e-09 0.0433334607900877 8.3160941291922e-06 2.78576570108586e-14 4.09176298900308e-15 7.0912253343354e-15 4.07615788918325e-15 12599210498.9563 6.51853058234818e-05 -9.30758417415171e-09 0.0433331365970856 8.3160319153803e-06 2.78576307117889e-14 4.09176294581815e-15 7.09121405808341e-15 4.0761578913472e-15 15874010519.701 6.63711666819696e-05 -1.12548514878518e-08 0.0433326219752636 8.31593315758778e-06 2.78575889649285e-14 4.09176287726686e-15 7.09119615814915e-15 4.07615789478226e-15 20000000000 6.82535812365817e-05 -1.43459091838422e-08 0.0433318050703178 8.31577639056839e-06 2.78575226967006e-14 4.09176276844974e-15 7.0911677437747e-15 4.07615790023508e-15 10000000000 9.34572553487167e-05 -1.28378824866168e-08 0.060621749568316 1.37496568916367e-05 3.15421790596898e-14 4.12188439808121e-15 8.31961466559963e-15 4.0985018147577e-15 12599210498.9563 9.45039794614105e-05 -1.46699085352971e-08 0.0606212953882234 1.37495538813268e-05 3.15421421846926e-14 4.12188433354084e-15 8.31959885679916e-15 4.09850181834321e-15 15874010519.701 9.61655380461293e-05 -1.75780469565853e-08 0.0606205744257607 1.37493903634451e-05 3.15420836497191e-14 4.12188423109017e-15 8.31957376189267e-15 4.09850182403486e-15 20000000000 9.88030667141135e-05 -2.21943743778166e-08 0.0606194299779938 1.37491307969845e-05 3.15419907323389e-14 4.12188406846177e-15 8.31953392621174e-15 4.09850183306979e-15 10000000000 0.000135614678837475 -2.11289808385518e-08 0.0838568774111101 2.31561691781484e-05 3.64937080943577e-14 4.15595705485143e-15 9.96522680780646e-15 4.12114649869518e-15 12599210498.9563 0.000137065197992388 -2.3843235469458e-08 0.0838562481173038 2.31559954090368e-05 3.64936569519929e-14 4.15595695915231e-15 9.96520488572151e-15 4.1211465047486e-15 15874010519.701 0.000139367736450562 -2.81518139889163e-08 0.083855249180503 2.31557195691052e-05 3.64935757691549e-14 4.15595680724057e-15 9.96517008658081e-15 4.12114651435781e-15 20000000000 0.00014302274514548 -3.49911750842657e-08 0.0838536634793941 2.3155281703882e-05 3.64934469009581e-14 4.15595656609856e-15 9.96511484638829e-15 4.12114652961148e-15 10000000000 0.000196876410147292 -3.66222469399618e-08 0.114454747626452 3.93588084259395e-05 4.30206437275214e-14 4.19547633100581e-15 1.21293088748544e-14 4.14392071468442e-15 12599210498.9563 0.000198860700462251 -4.06172554994583e-08 0.114453886911762 3.93585124474911e-05 4.3020573692081e-14 4.19547619000216e-15 1.21292788595374e-14 4.14392072500594e-15 15874010519.701 0.000202010541452222 -4.69588888889906e-08 0.114452520619005 3.93580426132763e-05 4.30204625185803e-14 4.19547596617448e-15 1.21292312131915e-14 4.14392074139034e-15 20000000000 0.000207010543028293 -5.70254849627353e-08 0.114450351781193 3.93572968037087e-05 4.30202860437421e-14 4.19547561087441e-15 1.21291555793319e-14 4.14392076739895e-15 10000000000 0.000285945036941554 -6.83970029461052e-08 0.153886539064016 6.68240696196329e-05 5.1456172458153e-14 4.24292445758647e-15 1.49211075252521e-14 4.16653750532372e-15 12599210498.9563 0.000288621994429127 -7.42763432948693e-08 0.15388537812885 6.68235654991242e-05 5.14560778246126e-14 4.242924249745e-15 1.49210669760174e-14 4.16653752293168e-15 15874010519.701 0.000292871367697822 -8.36091443691722e-08 0.153883535268139 6.68227652616035e-05 5.14559276043575e-14 4.2429239198197e-15 1.49210026081197e-14 4.16653755088257e-15 20000000000 0.000299616747005916 -9.84238662757187e-08 0.15388060993177 6.68214949735622e-05 5.14556891474047e-14 4.24292339610216e-15 1.49209004304513e-14 4.16653759525185e-15 10000000000 0.000415585421585332 -1.41726326222329e-07 0.203641540648379 0.000112370800664485 6.21802296328444e-14 4.30353980952982e-15 1.84650770479652e-14 4.18853629736402e-15 12599210498.9563 0.000419150202953283 -1.50535173995785e-07 0.20363999503804 0.000112369947795499 6.21801032320917e-14 4.30353949718388e-15 1.84650228992847e-14 4.1885363272433e-15 15874010519.701 0.000424808897958772 -1.64518242732687e-07 0.203637541546608 0.00011236859395702 6.21799025849177e-14 4.30353900136935e-15 1.84649369436124e-14 4.18853637467371e-15 20000000000 0.000433791408797789 -1.86714714952773e-07 0.203633646902081 0.000112366444889144 6.21795840811966e-14 4.30353821432226e-15 1.8464800497488e-14 4.18853644996479e-15 10000000000 0.000604799033912704 -3.36781631151312e-07 0.265246028548372 0.000186562621024883 7.57298184789936e-14 4.39162336757118e-15 2.29372388468535e-14 4.20914821342792e-15 12599210498.9563 0.000609508465396105 -3.50800651582068e-07 0.26524398715396 0.000186561185209023 7.57296503249074e-14 4.39162286701064e-15 2.29371668295232e-14 4.20914826408135e-15 15874010519.701 0.000616984164701492 -3.7305428913193e-07 0.265240746658455 0.000186558906004763 7.5729383398976e-14 4.39162207242639e-15 2.29370525091374e-14 4.20914834448866e-15 20000000000 0.000628850953546828 -4.08379307843322e-07 0.265235602733135 0.000186555288022116 7.57289596856166e-14 4.39162081111783e-15 2.29368710368368e-14 4.2091484721273e-15 10000000000 0.000883178037129059 -9.48240888325767e-07 0.340297225034573 0.000307892212950202 9.31961628137277e-14 4.55441893471921e-15 2.86961853465653e-14 4.22682650166641e-15 12599210498.9563 0.000889443448545506 -9.7399432574278e-07 0.340294509842008 0.000307889756331594 9.31959350311004e-14 4.55441799843822e-15 2.86960878155089e-14 4.22682658990936e-15 15874010519.701 0.000899389090345472 -1.01487503518791e-06 0.34029019976472 0.00030788585671276 9.31955734515857e-14 4.55441651219657e-15 2.86959329946074e-14 4.22682672998632e-15 20000000000 0.0009151766138556 -1.07976829943933e-06 0.340283357999557 0.00030787966650444 9.31949994871093e-14 4.55441415296471e-15 2.86956872317457e-14 4.22682695234462e-15 10000000000 0.00130410796607978 -3.25479861729444e-06 0.430313588463105 0.000517427090111366 1.17764053794154e-13 4.97256511713246e-15 3.6790997545073e-14 4.23725349347844e-15 12599210498.9563 0.00131287379214934 -3.31653298863298e-06 0.430309790314013 0.000517422523084417 1.17763718607976e-13 4.97256275654398e-15 3.67908540500111e-14 4.23725366602191e-15 15874010519.701 0.00132678855160097 -3.41452933492836e-06 0.430303761162573 0.000517415273422426 1.17763186537751e-13 4.97255900937622e-15 3.67906262657991e-14 4.23725393991759e-15 20000000000 0.00134887654779404 -3.57008667182891e-06 0.430294190567982 0.000517403765405663 1.17762341940678e-13 4.97255306120101e-15 3.67902646809017e-14 4.23725437469988e-15 10000000000 0.0020110254738325 -1.3886153558302e-05 0.535783503870612 0.000932312346041407 1.62190050546327e-13 6.45514181908569e-15 5.1428989994343e-14 4.22256563435536e-15 12599210498.9563 0.00202581158996578 -1.41081257793957e-05 0.535777096199015 0.000932301196153993 1.62189392420496e-13 6.45513193916515e-15 5.14287082026012e-14 4.22256612469668e-15 15874010519.701 0.00204928280727308 -1.44604805283021e-05 0.535766924733073 0.000932283496947913 1.62188347723279e-13 6.45511625595533e-15 5.14282608860941e-14 4.22256690306502e-15 20000000000 0.00208654033930451 -1.50197982736049e-05 0.535750778735632 0.000932255401554614 1.62186689401107e-13 6.45509136088131e-15 5.14275508154016e-14 4.22256813864774e-15 10000000000 0.00370051003637136 -7.29296827508756e-05 0.652029868998284 0.00195912661076124 2.95332486793709e-13 1.32773939349247e-14 9.53304511881267e-14 4.06022349178811e-15 12599210498.9563 0.00374577055247958 -7.4394390443927e-05 0.652010236585403 0.00195906762223687 2.95329290331334e-13 1.32772904919366e-14 9.53290812351953e-14 4.06022760801684e-15 15874010519.701 0.00381761499333964 -7.67193993982995e-05 0.651979072679605 0.00195897398561526 2.9532421641544e-13 1.32771262913423e-14 9.5326906570482e-14 4.06023414212262e-15 20000000000 0.00393165551694077 -8.04099457420344e-05 0.65192960459258 0.00195882535134018 2.95316162458609e-13 1.32768656515276e-14 9.53234545054728e-14 4.06024451436887e-15 10000000000 0.0109046649273843 -0.00041898343073869 0.750384779149117 0.00517044417111878 9.2571717767444e-13 4.74097820658774e-14 3.03293848692761e-13 2.30386712267013e-15 12599210498.9563 0.0113283628342688 -0.000439098249670389 0.75020072673222 0.00516917597975079 9.25631778433562e-13 4.74057277851287e-14 3.0325718603513e-13 2.30411974236792e-15 15874010519.701 0.0120007774592092 -0.000471020754379363 0.749908608141309 0.00516716317121685 9.25496248619532e-13 4.73992935837206e-14 3.03198987713509e-13 2.30452075100642e-15 20000000000 0.0130677563936488 -0.000521674976931474 0.74944501579976 0.00516396884312417 9.25281191642489e-13 4.73890838751454e-14 3.03106603715198e-13 2.30515731199906e-15 10000000000 0.0397349792927619 -0.00163988441744221 0.739649407417508 0.0141528245072271 3.05901633216148e-12 1.41919593468814e-13 1.00667304933306e-12 -1.47835527196371e-14 12599210498.9563 0.0445435318841333 -0.00185741676388462 0.737556285522931 0.0141127736823982 3.05572680276808e-12 1.41770779655501e-13 1.005253899613e-12 -1.47563980102093e-14 15874010519.701 0.0521552989055944 -0.00220176269944173 0.734239826070546 0.0140493149144575 3.05051959521923e-12 1.41535212703702e-13 1.00300124012322e-12 -1.47132945144893e-14 20000000000 0.064184762296717 -0.00274595918023089 0.728990914185975 0.0139488796502831 3.04229024290166e-12 1.41162928053524e-13 9.99425765143775e-13 -1.46448796159338e-14 10000000000 0.0780523807416285 -0.00240013557330693 0.654827116985465 0.0247956332756591 5.13969606276365e-12 1.78606775895715e-13 1.69034781060689e-12 -5.94124659204539e-14 12599210498.9563 0.0932324742129751 -0.00291649166909 0.648192333219168 0.0245444011711849 5.12008740102158e-12 1.77939780528409e-13 1.68178667711283e-12 -5.90882908365087e-14 15874010519.701 0.117092060204675 -0.00372808368549817 0.637732532957673 0.0241483313481676 5.08926713289214e-12 1.76891418517177e-13 1.66820424837345e-12 -5.85739798542279e-14 20000000000 0.15438032139876 -0.00499645670342856 0.621314539648856 0.0235266491418582 5.04110057172539e-12 1.75253016387552e-13 1.64667303260964e-12 -5.77586808424188e-14 10000000000 0.100889292488527 -0.00179052349579144 0.629822502078205 0.0315813909561886 6.18104638209037e-12 1.38800859935627e-13 2.03086061046991e-12 -9.71509566720018e-14 12599210498.9563 0.123481319366404 -0.00228306901295458 0.619920365883993 0.0310848651805177 6.1447497609447e-12 1.38009530404634e-13 2.0148748912042e-12 -9.63493799715417e-14 15874010519.701 0.158802410733727 -0.00305313029644751 0.60437289676788 0.0303052637883344 6.08800247223345e-12 1.3677234071745e-13 1.9895322081909e-12 -9.50786142403942e-14 20000000000 0.213546694674731 -0.00424665099254102 0.58013663244313 0.0290899775402776 6.00004964954789e-12 1.34854816062854e-13 1.94943168769487e-12 -9.30678418521356e-14 10000000000 0.119681530791119 -0.000864818668520373 0.653000100780425 0.0363372388740375 7.07999092965682e-12 9.21704620742142e-14 2.32481919001484e-12 -1.24624561749612e-13 12599210498.9563 0.14809413447653 -0.00121762623676539 0.640526935069485 0.0356431498457753 7.02972117615686e-12 9.15462479161254e-14 2.30256604522587e-12 -1.2338625032168e-13 15874010519.701 0.192374789900354 -0.00176747202116972 0.620992418012077 0.0345561207565959 6.95137645078009e-12 9.05734186622126e-14 2.267308401149e-12 -1.21424282968463e-13 20000000000 0.260668928160159 -0.00261550021005416 0.590673784574911 0.032868992459873 6.83054523327447e-12 8.90730222716441e-14 2.21159911356986e-12 -1.18324251574903e-13 10000000000 0.143478406732682 -3.68837534092486e-05 0.702815160146973 0.0404196409062305 8.2296983541834e-12 5.84373132417422e-14 2.70085468998447e-12 -1.50539487613215e-13 12599210498.9563 0.178947781331325 -0.000269766773917543 0.687222303747829 0.0395228797229855 8.1621196384243e-12 5.79936083378319e-14 2.67080215493056e-12 -1.48811135462423e-13 15874010519.701 0.234068304573989 -0.000631674309361948 0.662859935226991 0.0381217748925329 8.05710018953751e-12 5.7304076967583e-14 2.6232173395553e-12 -1.46074483867097e-13 20000000000 0.31870547074114 -0.00118738072164875 0.62520372562129 0.0359561276103338 7.89584358268195e-12 5.62453065182479e-14 2.54814395935114e-12 -1.41756936681466e-13 10000000000 0.177316665388689 0.000640883417580924 0.767426934558076 0.0445118382511286 9.78766245137431e-12 4.05664962393762e-14 3.20973298745742e-12 -1.81338492298828e-13 12599210498.9563 0.222922229049822 0.000472807829126848 0.747343439084563 0.043346967982651 9.69338848298375e-12 4.02190572113033e-14 3.16756570323468e-12 -1.78892732009823e-13 15874010519.701 0.293536094592559 0.000212566182026512 0.716063329091631 0.0415326787234167 9.54741836895172e-12 3.96810962512121e-14 3.10086107571024e-12 -1.75023772172848e-13 20000000000 0.401354858690782 -0.000184791086855234 0.667979489145539 0.038743750091879 9.32453980014307e-12 3.88596954483482e-14 2.99585639122581e-12 -1.68933356529411e-13 10000000000 0.226578777037006 0.00116971633411488 0.838069991162833 0.0490351369374109 1.18860244600332e-11 3.99936164988706e-14 3.89318974887356e-12 -2.22915846191891e-13 12599210498.9563 0.287468801142086 0.000988125713714445 0.81119151323384 0.0474624890119181 1.17468856323914e-11 3.95786666543828e-14 3.83043531460447e-12 -2.19244111835151e-13 15874010519.701 0.381246947874568 0.000708453762595384 0.769528743747699 0.0450248186878857 1.1532594677731e-11 3.89395927178076e-14 3.7313250202759e-12 -2.1344521209155e-13 20000000000 0.523270932222247 0.000284899595743211 0.706025068449465 0.0413092465679624 1.12080579252894e-11 3.79717358137457e-14 3.57590129685565e-12 -2.0435143837211e-13 10000000000 0.299492477832561 0.00150786988321663 0.90605085622228 0.0542097612791828 1.46910618052444e-11 6.00828629936687e-14 4.80233761744871e-12 -2.82406673723889e-13 12599210498.9563 0.383982686670378 0.00118860972176772 0.868629995095421 0.0519708422476279 1.44724442533141e-11 5.92567805885603e-14 4.70250496561281e-12 -2.76433609036568e-13 15874010519.701 0.513051200580836 0.000700903096872033 0.811078827255123 0.0485275114132832 1.41384807925709e-11 5.79948446807017e-14 4.54531901493242e-12 -2.6702905216979e-13 20000000000 0.706118924300871 -2.86350767612006e-05 0.724574529234966 0.0433518924318801 1.36389200304775e-11 5.61071721118529e-14 4.30055722172461e-12 -2.52384764985892e-13 10000000000 0.409642034350721 0.00150883602260051 0.96175790405764 0.0599507349597085 1.84209521168469e-11 1.06938763773549e-13 6.00091017617916e-12 -3.69087523235925e-13 12599210498.9563 0.531127807977457 0.000833761255459286 0.907713577319496 0.0565819096007626 1.80554763506872e-11 1.0490788015343e-13 5.83087981695541e-12 -3.58488768093336e-13 15874010519.701 0.714367245477143 -0.000184467603018063 0.825702923957733 0.0514698176306384 1.75042218966748e-11 1.01844657513705e-13 5.56481364837625e-12 -3.41903670082772e-13 20000000000 0.983303478204324 -0.00167889826155718 0.705370402223968 0.0439689516713533 1.66951586395557e-11 9.73488373563559e-14 5.15618969937122e-12 -3.16432306023587e-13 10000000000 0.579410571561114 0.000838875461835253 0.994065285209153 0.0656747683868249 2.33403817514601e-11 1.89307560985434e-13 7.55720861085788e-12 -4.94241339332873e-13 12599210498.9563 0.759058831235197 -0.000583000166604013 0.913753904496251 0.0603688531980415 2.26954119146095e-11 1.84202769579384e-13 7.24885725233143e-12 -4.73869554634809e-13 15874010519.701 1.02468451475345 -0.00268536779525411 0.794758261791469 0.0525071929648123 2.17417675315641e-11 1.76654888464864e-13 6.77254121089237e-12 -4.42400882368206e-13 20000000000 1.40332861345185 -0.00568225079745159 0.627513181060796 0.0414578472030897 2.03823665387296e-11 1.65895534912015e-13 6.06101132349073e-12 -3.9539238614606e-13 10000000000 0.84460700154604 -0.00114155294932346 0.989075479784198 0.0700635139494813 2.97211077588932e-11 3.17546100044458e-13 9.51571325090332e-12 -6.68957897342495e-13 12599210498.9563 1.11417209167685 -0.00398021566991496 0.868277044441641 0.0615064800090934 2.85389611293955e-11 3.05097471901253e-13 8.92894809233935e-12 -6.27393042941603e-13 15874010519.701 1.50063258919249 -0.0080498487472047 0.696964658134044 0.0493711746147322 2.68441831655632e-11 2.87250565154997e-13 8.04713293424309e-12 -5.64927645806448e-13 20000000000 2.02790647021446 -0.0136023210976576 0.474218683359516 0.033592453136881 2.45318843401855e-11 2.62900837705933e-13 6.80043944671796e-12 -4.76615256198412e-13 10000000000 1.25959261331643 -0.00552239416641792 0.928318098156844 0.0708448092996204 3.77434634965303e-11 5.01063836763295e-13 1.18283150994066e-11 -8.97493444210299e-13 12599210498.9563 1.66197770892921 -0.0108156253261111 0.749724733259225 0.0572154377139622 3.55470089409035e-11 4.7217026734073e-13 1.06881746867059e-11 -8.10483507679722e-13 15874010519.701 2.21263864566971 -0.0180593718280579 0.5161489984566 0.0393900807369934 3.25411776208656e-11 4.32629637785909e-13 9.0693716277054e-12 -6.86944380524769e-13 20000000000 2.91806238978932 -0.0273389673793666 0.251493076773282 0.0191928360015321 2.86905598586466e-11 3.81976146527725e-13 7.00404524628813e-12 -5.29328778656606e-13 10000000000 1.90005942388925 -0.01394701570211 0.789445449988504 0.064834011281093 4.73104271675338e-11 7.43274854644651e-13 1.42197376162818e-11 -1.16254128801619e-12 12599210498.9563 2.48239426216745 -0.0230396855694388 0.542573117619425 0.0445594182268609 4.32983428644227e-11 6.80629524758594e-13 1.20585916334212e-11 -9.85055399205529e-13 15874010519.701 3.22796135090392 -0.0346810900608312 0.263242319607261 0.0216191470232668 3.81616451829304e-11 6.00424300622975e-13 9.30422326365498e-12 -7.58850634651471e-13 20000000000 4.10564496819804 -0.0483853832877563 0.0113257407214205 0.000930291080961596 3.21147106144008e-11 5.06006491268572e-13 6.33369901578936e-12 -5.14893891077772e-13 10000000000 2.85713279982749 -0.0284946275224381 0.5574704436213 0.0490175611335821 5.77855692615018e-11 1.03369790207203e-12 1.60143266154374e-11 -1.4027602011349e-12 12599210498.9563 3.65011526783245 -0.0426171978192103 0.263036923834283 0.0231285636629954 5.082446747024e-11 9.0972460712969e-13 1.22890313450779e-11 -1.07520184466349e-12 15874010519.701 4.57943696401284 -0.0591678928372763 0.00106182893271824 9.35757507176173e-05 4.26665280643218e-11 7.64436309613171e-13 8.30959410341147e-12 -7.25297252420104e-13 20000000000 5.56623404335494 -0.0767421919976597 -0.164307176138521 -0.0144470164926508 3.40040478787228e-11 6.10162425509148e-13 4.88631899127993e-12 -4.24294972573691e-13 10000000000 1.01121587752988e-05 -2.47145613620129e-08 0.00735297883854209 7.35417045362031e-07 1.94798566207668e-14 3.31176480800332e-15 3.82030713311969e-15 3.31239270626786e-15 12599210498.9563 1.02368586434327e-05 -2.46596887493847e-08 0.00735292460884874 7.35411804436471e-07 1.94798522620897e-14 3.3117648099213e-15 3.82030526029618e-15 3.31239270644886e-15 15874010519.701 1.04348058942378e-05 -2.45725845448912e-08 0.00735283852498716 7.35403485025414e-07 1.94798453431718e-14 3.31176481296588e-15 3.82030228737417e-15 3.31239270673617e-15 20000000000 1.07490239120284e-05 -2.44343168479889e-08 0.00735270187640964 7.35390278883567e-07 1.9479834360202e-14 3.3117648177988e-15 3.82029756815465e-15 3.31239270719225e-15 10000000000 1.45994581401294e-05 -3.25113286573773e-08 0.0105657875363583 1.01962483528778e-06 2.01611738381386e-14 3.32055166779566e-15 4.0511744697677e-15 3.32142350656608e-15 12599210498.9563 1.47786024939791e-05 -3.24351462203186e-08 0.0105657096306527 1.0196175578141e-06 2.01611675772148e-14 3.32055167045816e-15 4.05117177962353e-15 3.32142350681738e-15 15874010519.701 1.50629743456595e-05 -3.23142150258577e-08 0.0105655859636434 1.01960600559981e-06 2.01611576386907e-14 3.32055167468459e-15 4.05116750928585e-15 3.32142350721628e-15 20000000000 1.55143812706983e-05 -3.21222509537795e-08 0.0105653896559892 1.01958766774154e-06 2.01611418624506e-14 3.32055168139356e-15 4.05116073054732e-15 3.32142350784951e-15 10000000000 2.11084555477643e-05 -4.26633411034662e-08 0.015147608227602 1.40235937183229e-06 2.11287687452166e-14 3.32934984920938e-15 4.37663355134888e-15 3.33055524825946e-15 12599210498.9563 2.13652276347511e-05 -4.2558053531473e-08 0.0151474965646929 1.40234934987674e-06 2.11287597723406e-14 3.32934985288865e-15 4.37662969599906e-15 3.33055524860549e-15 15874010519.701 2.17728249293005e-05 -4.23909211535033e-08 0.0151473193117189 1.40233344108982e-06 2.11287455288922e-14 3.32934985872907e-15 4.3766235760127e-15 3.33055524915477e-15 20000000000 2.24198377781694e-05 -4.21256181265829e-08 0.0151470379422915 1.40230818765589e-06 2.11287229190902e-14 3.32934986800006e-15 4.37661386113991e-15 3.33055525002669e-15 10000000000 3.05557137356385e-05 -5.58134682778528e-08 0.0216405915359207 1.90654996511104e-06 2.24959826625023e-14 3.33813131525585e-15 4.8340905814802e-15 3.33978862096591e-15 12599210498.9563 3.09224715822556e-05 -5.56688304984876e-08 0.0216404320451415 1.90653632694119e-06 2.24959698476414e-14 3.33813132030963e-15 4.83408507541867e-15 3.33978862143673e-15 15874010519.701 3.15046591091011e-05 -5.54392340172301e-08 0.0216401788705178 1.90651467779924e-06 2.24959495054667e-14 3.33813132833195e-15 4.83407633509081e-15 3.33978862218413e-15 20000000000 3.24288134554421e-05 -5.50747765593222e-08 0.0216397769838954 1.90648031218862e-06 2.24959172146527e-14 3.33813134106643e-15 4.83406246068518e-15 3.33978862337054e-15 10000000000 4.42737843354307e-05 -7.27303294247219e-08 0.0307625190125941 2.54982515259323e-06 2.44128479895507e-14 3.34686272020308e-15 5.47306398407809e-15 3.34912478074611e-15 12599210498.9563 4.47950306321061e-05 -7.2533209900486e-08 0.030762292342466 2.54980690276112e-06 2.44128297786977e-14 3.34686272708988e-15 5.47305615965016e-15 3.34912478137608e-15 15874010519.701 4.56224514919954e-05 -7.22203044519769e-08 0.0307619325277813 2.54977793309652e-06 2.44128008709821e-14 3.3468627380219e-15 5.47304373914505e-15 3.34912478237609e-15 20000000000 4.69358849659149e-05 -7.17236037883046e-08 0.0307613613618941 2.5497319469684e-06 2.44127549833775e-14 3.3468627553752e-15 5.47302402282218e-15 3.3491247839635e-15 10000000000 6.41996204015239e-05 -9.42991054927519e-08 0.043431743153798 3.33323213856476e-06 2.70712978844262e-14 3.35550770693761e-15 6.35690297848395e-15 3.35856612999305e-15 12599210498.9563 6.49353935044987e-05 -9.40332354382991e-08 0.0434314231976166 3.33320828094481e-06 2.7071272181267e-14 3.35550771622539e-15 6.35689193505098e-15 3.35856613081651e-15 15874010519.701 6.61033519501465e-05 -9.36111961244274e-08 0.0434309153012582 3.33317040951428e-06 2.70712313803438e-14 3.35550773096872e-15 6.35687440469387e-15 3.35856613212366e-15 20000000000 6.79573488659817e-05 -9.29412582604615e-08 0.0434301090721435 3.33311029282039e-06 2.70711666136682e-14 3.35550775437202e-15 6.35684657698658e-15 3.35856613419865e-15 10000000000 9.31481671240754e-05 -1.21487685289737e-07 0.0607730399438263 4.2236986969798e-06 3.07063962825668e-14 3.36403199015131e-15 7.5631926909844e-15 3.36811752705893e-15 12599210498.9563 9.41775318640211e-05 -1.21133818991651e-07 0.0607725923218982 4.22366848652695e-06 3.07063603266523e-14 3.36403200251192e-15 7.56317724258819e-15 3.36811752810156e-15 15874010519.701 9.58115345728701e-05 -1.20572095370075e-07 0.0607718817697642 4.2236205306508e-06 3.07063032506138e-14 3.36403202213304e-15 7.5631527197878e-15 3.36811752975663e-15 20000000000 9.84053220493861e-05 -1.19680425064382e-07 0.0607707538470903 4.22354440601832e-06 3.07062126491031e-14 3.36403205327926e-15 7.5631137922687e-15 3.36811753238389e-15 10000000000 0.00013520993884654 -1.55280513973061e-07 0.0840936483277015 5.13240515275953e-06 3.55913880790189e-14 3.37241225912682e-15 9.18211939864048e-15 3.37778777479049e-15 12599210498.9563 0.000136634081008897 -1.5481730811065e-07 0.0840930290419888 5.13236850558615e-06 3.55913383376171e-14 3.37241227530533e-15 9.18209802754762e-15 3.37778777605516e-15 15874010519.701 0.000138894749228496 -1.54082020019372e-07 0.0840920459918801 5.13231033210172e-06 3.55912593786416e-14 3.37241230098694e-15 9.18206410305234e-15 3.37778777806269e-15 20000000000 0.000142483294642879 -1.52914836491361e-07 0.0840904855089041 5.13221798814965e-06 3.55911340405371e-14 3.37241234175348e-15 9.18201025127289e-15 3.37778778124945e-15 10000000000 0.000196329570853406 -1.96580953109667e-07 0.114829168486109 5.89755053157354e-06 4.20266593970469e-14 3.38065079030888e-15 1.13128252976382e-14 3.38759080117522e-15 12599210498.9563 0.000198274019230741 -1.95987022721242e-07 0.114828322954352 5.89750856019961e-06 4.2026591486706e-14 3.38065081105204e-15 1.13127961206533e-14 3.38759080262354e-15 15874010519.701 0.000201360616040524 -1.95044223897938e-07 0.114826980762744 5.89744193511382e-06 4.20264836865483e-14 3.38065084397953e-15 1.13127498050767e-14 3.3875908049226e-15 20000000000 0.000206260226141055 -1.93547641440905e-07 0.114824850182485 5.89733617518224e-06 4.20263125664526e-14 3.38065089624804e-15 1.13126762836817e-14 3.38759080857213e-15 10000000000 0.000285149136082478 -2.46100222307915e-07 0.154480158510541 6.28862832312361e-06 5.03275430905971e-14 3.38880412090276e-15 1.4059381278283e-14 3.39754535037165e-15 12599210498.9563 0.000287765082366626 -2.45358496798795e-07 0.154479020992881 6.28858383750611e-06 5.0327451727231e-14 3.38880414680793e-15 1.4059342025323e-14 3.39754535190674e-15 15874010519.701 0.000291917607858257 -2.44181089562608e-07 0.154477215304754 6.28851322132646e-06 5.03273066979892e-14 3.38880418792953e-15 1.4059279715133e-14 3.39754535434355e-15 20000000000 0.000298509254610772 -2.42312093791135e-07 0.154474348975194 6.2884011259762e-06 5.03270764810926e-14 3.38880425320524e-15 1.4059180803872e-14 3.39754535821173e-15 10000000000 0.000414239154480713 -3.04276193802219e-07 0.204580908110981 6.06018694949253e-06 6.08216400717081e-14 3.39706251286117e-15 1.7529899135305e-14 3.40767125829968e-15 12599210498.9563 0.000417704867289407 -3.03384642640132e-07 0.204579401096033 6.06014455925363e-06 6.08215190065243e-14 3.39706254400507e-15 1.75298471219042e-14 3.40767125976274e-15 15874010519.701 0.000423206303168116 -3.01969403749444e-07 0.204577008870319 6.06007726926447e-06 6.08213268289312e-14 3.39706259344256e-15 1.75297645557771e-14 3.40767126208521e-15 20000000000 0.000431939186772393 -2.99722878155566e-07 0.20457321147743 6.05997045387287e-06 6.08210217695633e-14 3.39706267191878e-15 1.75296334902201e-14 3.4076712657719e-15 10000000000 0.000601897285139332 -3.71303902094698e-07 0.266739964015157 5.11270142891538e-06 7.38704067823076e-14 3.40601542317977e-15 2.18436511376693e-14 3.41797835974741e-15 12599210498.9563 0.000606422335989806 -3.70307615664825e-07 0.266737996383983 5.1126664627024e-06 7.38702486022765e-14 3.40601545800647e-15 2.18435831793095e-14 3.41797836095508e-15 15874010519.701 0.000613605353805399 -3.68726121133231e-07 0.266734872979092 5.11261095756398e-06 7.38699975089697e-14 3.40601551329002e-15 2.18434753021378e-14 3.41797836287214e-15 20000000000 0.00062500755113732 -3.66215684267899e-07 0.266729914920439 5.11252284931628e-06 7.38695989278292e-14 3.40601560104615e-15 2.18433040578021e-14 3.41797836591527e-15 10000000000 0.000874779682264667 -4.47476662635745e-07 0.342755055094811 3.94169849198177e-06 8.99352895784974e-14 3.41754367379575e-15 2.71528898476144e-14 3.42843551441762e-15 12599210498.9563 0.000880617968552364 -4.46572308820701e-07 0.34275251646074 3.94167261347251e-06 8.99350850782563e-14 3.41754370547295e-15 2.71528019899696e-14 3.42843551531323e-15 15874010519.701 0.000889885602122268 -4.45136747191395e-07 0.342748486649651 3.94163153409651e-06 8.9934760456748e-14 3.41754375575701e-15 2.71526625246519e-14 3.42843551673493e-15 20000000000 0.000904596881487264 -4.42857961780318e-07 0.342742089771941 3.94156632514778e-06 8.9934245158246e-14 3.41754383557703e-15 2.71524411372599e-14 3.42843551899172e-15 10000000000 0.00127176468682676 -5.34631217486665e-07 0.434745924311191 4.99736852704286e-06 1.09733740160781e-13 3.43768204764646e-15 3.36943282575069e-14 3.43887557728189e-15 12599210498.9563 0.00127925077656201 -5.34508355406823e-07 0.434742669220642 4.99733508133117e-06 1.09733476516074e-13 3.43768205197341e-15 3.3694214991874e-14 3.43887557844568e-15 15874010519.701 0.00129113411484804 -5.34313325463427e-07 0.434737502111507 4.9972819898304e-06 1.09733058009303e-13 3.43768205884197e-15 3.36940351938894e-14 3.43887558029309e-15 20000000000 0.00130999751570613 -5.34003738383351e-07 0.434729299900093 4.9971977129742e-06 1.09732393679063e-13 3.43768206974499e-15 3.36937497823796e-14 3.43887558322566e-15 10000000000 0.00184970649109868 -6.43317285727515e-07 0.545179776045281 1.69258496611085e-05 1.34619449798191e-13 3.48547709997094e-15 4.19146108085828e-14 3.448685984491e-15 12599210498.9563 0.00185935559355419 -6.46268224697097e-07 0.545175580517049 1.69257241745656e-05 1.34619105281279e-13 3.48547699460897e-15 4.19144628018645e-14 3.44868598891782e-15 15874010519.701 0.00187467247178435 -6.50952512491709e-07 0.545168920564274 1.6925524978087e-05 1.34618558398954e-13 3.48547682735856e-15 4.19142278558443e-14 3.44868599594496e-15 20000000000 0.00189898620518324 -6.58388265579945e-07 0.545158348631778 1.69252087758862e-05 1.34617690287916e-13 3.48547656186831e-15 4.19138549022849e-14 3.44868600709985e-15 10000000000 0.0026926426171299 -8.42912752807089e-07 0.676541490809468 6.74596748677514e-05 1.67597615346345e-13 3.62096951736325e-15 5.28053416193947e-14 3.45576272402109e-15 12599210498.9563 0.00270543929531377 -8.56636571698711e-07 0.676535926818137 6.74591259451921e-05 1.67597143018758e-13 3.62096901081474e-15 5.2805138709178e-14 3.45576274403945e-15 15874010519.701 0.00272575258967865 -8.78421598168031e-07 0.676527094579433 6.74582545895797e-05 1.67596393251578e-13 3.62096820672567e-15 5.28048166092865e-14 3.45576277581662e-15 20000000000 0.0027579975161191 -9.13002723385411e-07 0.676513074392827 6.74568714104453e-05 1.67595203085811e-13 3.62096693033041e-15 5.28043053075806e-14 3.45576282625973e-15 10000000000 0.00393438240543472 -1.7748041794151e-06 0.83006282671393 0.000241562649892881 2.16629908054693e-13 4.05628244794829e-15 6.89937055372185e-14 3.45256956185624e-15 12599210498.9563 0.00395277267691016 -1.82896762327159e-06 0.830054830875802 0.000241560330802915 2.16629173431742e-13 4.05628028432014e-15 6.89933899550724e-14 3.45256965338678e-15 15874010519.701 0.00398196513369822 -1.91494590784366e-06 0.830042138353036 0.000241556649500002 2.16628007301662e-13 4.05627684980744e-15 6.8992888999642e-14 3.45256979868246e-15 20000000000 0.00402830456603513 -2.05142585296397e-06 0.830021990428349 0.00024155080585369 2.1662615621368e-13 4.0562713979412e-15 6.89920937824657e-14 3.45257002932497e-15 10000000000 0.00594896010675586 -1.21627834434087e-05 1.00154283599377 0.000810023466160586 3.16398100114994e-13 6.02781577691136e-15 1.01924377377211e-13 3.40314044532158e-15 12599210498.9563 0.00598336546487158 -1.24563507201484e-05 1.001527877596 0.000810011381831073 3.16396388788126e-13 6.02780117483785e-15 1.01923642243092e-13 3.40314103920891e-15 15874010519.701 0.0060379797558118 -1.29223528064667e-05 1.00150413284904 0.000809992199339028 3.16393672266382e-13 6.02777799583509e-15 1.01922475290419e-13 3.40314198194629e-15 20000000000 0.00612467249586091 -1.36620675777464e-05 1.00146644099086 0.000809961749498013 3.16389360158517e-13 6.02774120232873e-15 1.01920622868525e-13 3.40314347844858e-15 10000000000 0.0130110795371021 -0.000183520994701228 1.15632226918253 0.00306869521179022 8.70121132432457e-13 2.45594354638745e-14 2.84654822899956e-13 2.74800807020128e-15 12599210498.9563 0.0132541522468848 -0.000189530937867583 1.1562165897077 0.00306841484786979 8.70091224858859e-13 2.45586960027571e-14 2.84641974566525e-13 2.74804215637684e-15 15874010519.701 0.0136399710787481 -0.000199070261529547 1.15604884391986 0.00306796982420942 8.70043753856787e-13 2.45575222880083e-14 2.84621579109477e-13 2.74809626480524e-15 20000000000 0.0142523320104293 -0.000214210811038334 1.15578258908668 0.00306726345952524 8.69968409201068e-13 2.45556594005654e-14 2.84589203343335e-13 2.74818215657123e-15 10000000000 0.0737403755360472 -0.00197189272615579 1.08208026193728 0.0131187411295915 5.18721249069077e-12 1.58997938834915e-13 1.70800958341091e-12 -1.71577274794498e-14 12599210498.9563 0.0832272375614796 -0.00225726998321472 1.07794691516375 0.0130686341415273 5.17967455185799e-12 1.58771187744595e-13 1.70475110957978e-12 -1.71182262427258e-14 15874010519.701 0.0982300020598003 -0.00270857282385413 1.07140214299989 0.0129892943622477 5.16775386398376e-12 1.58412597812679e-13 1.69957902253516e-12 -1.70555270021317e-14 20000000000 0.121903613284087 -0.00342070611068334 1.06105493449786 0.0128638590960295 5.14894361535978e-12 1.57846760853891e-13 1.69137050575844e-12 -1.69560182808238e-14 10000000000 0.177747410848678 -0.00379276927921242 0.892131632883699 0.0231960198162325 9.88231278466511e-12 2.32650738133318e-13 3.24533304457871e-12 -8.07684049744834e-14 12599210498.9563 0.218275175750732 -0.00473418518158182 0.874328102411255 0.0227331385258619 9.80903749699315e-12 2.30948632891843e-13 3.21284573885182e-12 -7.99237541891349e-14 15874010519.701 0.281386885895361 -0.00620020157058015 0.846463790397747 0.0220086828500586 9.69492982963245e-12 2.2829803587779e-13 3.16138178796884e-12 -7.8585721823636e-14 20000000000 0.37860433964096 -0.00845845729144597 0.803265699980436 0.0208855579808167 9.51915806163192e-12 2.24215048869175e-13 3.08009805224495e-12 -7.64723926423118e-14 10000000000 0.203080015770098 -0.00250503124674164 0.88640595022808 0.0277707330251938 1.08103595955079e-11 1.60421334174274e-13 3.54720297220904e-12 -1.07488766417363e-13 12599210498.9563 0.251497738386438 -0.00320890870714637 0.865097709479027 0.027103181349206 1.07143821475363e-11 1.59026052474024e-13 3.50439406821476e-12 -1.06147634789223e-13 15874010519.701 0.3266121650323 -0.00430089215887122 0.831853876344592 0.0260617074524867 1.05654843765188e-11 1.56861436311586e-13 3.4366393838403e-12 -1.04024993429813e-13 20000000000 0.441647048280844 -0.00597322322079551 0.780599767884219 0.0244560016409685 1.03374531118227e-11 1.53546409110514e-13 3.32985097870016e-12 -1.00679490642093e-13 10000000000 0.216012255361956 -0.00103069270949728 0.950508060428308 0.0313057316554961 1.14302098658831e-11 8.90299084269305e-14 3.75125731153481e-12 -1.19889165466867e-13 12599210498.9563 0.266566341136406 -0.00140940118043069 0.928265841267462 0.0305731920275914 1.13313213771591e-11 8.8289119472213e-14 3.70719104789541e-12 -1.18437858646441e-13 15874010519.701 0.345041122991825 -0.0019972679015478 0.893547437133263 0.0294297536565371 1.11778174128061e-11 8.71391975473713e-14 3.63743600231263e-12 -1.16140500870844e-13 20000000000 0.465330912126078 -0.00289837730574474 0.839972907653633 0.0276652954607802 1.09425194092089e-11 8.53765438312398e-14 3.52745624467817e-12 -1.12518356418801e-13 10000000000 0.24379297854521 1.32613398768527e-05 1.0460436472743 0.034564218935044 1.26512465440933e-11 4.28917419706304e-14 4.15200725307271e-12 -1.33519761999299e-13 12599210498.9563 0.300054961069997 -0.000161937258740251 1.02128729397679 0.0337462244003901 1.25405759691173e-11 4.25471161900617e-14 4.10267163837974e-12 -1.31889624365631e-13 15874010519.701 0.387368691010865 -0.000433830328255405 0.9826526023972 0.0324696645541009 1.23688248103024e-11 4.20122867904403e-14 4.02458021157247e-12 -1.2930934286924e-13 20000000000 0.521156761724393 -0.000850443491333501 0.923056560034139 0.030500503896465 1.21056559341562e-11 4.1192784593195e-14 3.90147474076046e-12 -1.25241716224069e-13 10000000000 0.292567131801929 0.000740837832299636 1.16157097858651 0.0378629281787901 1.46269896382961e-11 1.83432576827208e-14 4.79879303426369e-12 -1.52737618697901e-13 12599210498.9563 0.360054069259941 0.000672567725893125 1.13185096411612 0.036894191348991 1.44890280855732e-11 1.82036951208508e-14 4.73712038789278e-12 -1.50727371899731e-13 15874010519.701 0.464603902959676 0.000566804617648587 1.08554038254549 0.0353846777509547 1.42752999488785e-11 1.79874867228435e-14 4.63954592781943e-12 -1.47546889830484e-13 20000000000 0.624369478496359 0.000405185002759809 1.01429348629937 0.0330623541036612 1.39486959021854e-11 1.76570925182701e-14 4.48589392806867e-12 -1.42538535905248e-13 10000000000 0.368490764851437 0.00126400346051834 1.28783939575761 0.0415046062943688 1.74668568250278e-11 1.18607538743514e-14 5.72600540808532e-12 -1.80841188887866e-13 12599210498.9563 0.454632350257 0.00122310966393367 1.24984291052485 0.0402800809603345 1.72779420241146e-11 1.17710707857015e-14 5.64108363716905e-12 -1.78104386805752e-13 15874010519.701 0.587607710669936 0.00115998257712773 1.19082235209015 0.0383780058449805 1.69863173271638e-11 1.16326284644924e-14 5.50686425103824e-12 -1.73778854124797e-13 20000000000 0.789705891008336 0.00106404097310479 1.10052487607227 0.0354679591312932 1.65431012274857e-11 1.14222215055544e-14 5.29601839131426e-12 -1.66983854660329e-13 10000000000 0.482506683294239 0.00161968552378703 1.41362629368517 0.0457397670607897 2.13569494386641e-11 2.33681269532294e-14 6.99122733743863e-12 -2.22499630512771e-13 12599210498.9563 0.598277281641009 0.00151238207513012 1.36242971421617 0.0440832674324538 2.10761078631125e-11 2.31078253739575e-14 6.86381117833318e-12 -2.18376995321293e-13 15874010519.701 0.775921633152247 0.00134773015293413 1.28334786339021 0.0415245211673711 2.06451701269456e-11 2.27084052629151e-14 6.66284017065706e-12 -2.11874443725569e-13 20000000000 1.0434528190481 0.0010997654772752 1.16355043918538 0.0376483952478443 1.99961808254383e-11 2.21068812906145e-14 6.34862838944915e-12 -2.01707911035532e-13 10000000000 0.653598455524811 0.0017518995345186 1.52507929845116 0.0506539894019249 2.65835444780512e-11 5.6226700629779e-14 8.68035090695019e-12 -2.84581493104169e-13 12599210498.9563 0.81619821878013 0.00142980221495946 1.4529079617824 0.0482569330657742 2.6133796724396e-11 5.53357857660064e-14 8.47332988651551e-12 -2.77705618669048e-13 15874010519.701 1.06329875402989 0.000940315524006509 1.34250061845236 0.0445899284888539 2.54503214939858e-11 5.39818751864779e-14 8.14813286295073e-12 -2.66904715958725e-13 20000000000 1.43004466493877 0.000213820770889683 1.17812397814216 0.0391304194183887 2.44359095029025e-11 5.19724049589997e-14 7.64440759312634e-12 -2.50174281059709e-13 10000000000 0.913555892462004 0.00146507920273872 1.60578300577595 0.0559923366471963 3.35315612717161e-11 1.16890121183131e-13 1.09007732095711e-11 -3.76353115118683e-13 12599210498.9563 1.15032861367201 0.000664793463275597 1.50019254528261 0.0523105405337974 3.27625102955206e-11 1.14290748561047e-13 1.05389210340774e-11 -3.63735820647826e-13 15874010519.701 1.50465004417846 -0.000532803905928824 1.34140485438703 0.0467738291636283 3.16116545692975e-11 1.10400885652985e-13 9.97531913933253e-12 -3.44083787160327e-13 20000000000 2.01865457087622 -0.00227012605450039 1.11219125624656 0.0387814619476053 2.99421392594016e-11 1.04757966622882e-13 9.1184822927836e-12 -3.14207048705913e-13 10000000000 1.31399531316889 0.000338539434194538 1.63600795419258 0.0609399384880693 4.26471643704235e-11 2.14157340856129e-13 1.37534978566931e-11 -5.08535067759334e-13 12599210498.9563 1.66730093381204 -0.00140630386581094 1.47775781770137 0.0550453314110798 4.12630007031094e-11 2.07321478192446e-13 1.30812116721478e-11 -4.83493301672749e-13 15874010519.701 2.18333048010326 -0.00395477930419223 1.24710017685367 0.0464536411146353 3.92413251126203e-11 1.97337184417474e-13 1.20529118734213e-11 -4.45190502033921e-13 20000000000 2.90608763324731 -0.00752420447749902 0.932310881687798 0.034728158608348 3.64097421056695e-11 1.83353063165473e-13 1.05476684174456e-11 -3.89122185601983e-13 10000000000 1.93541482759581 -0.002394883793613 1.59020898147222 0.0638939320384396 5.43299110243364e-11 3.57496973833027e-13 1.72595562305583e-11 -6.89684268115615e-13 12599210498.9563 2.46634925356377 -0.00585405761468487 1.35268878735897 0.0543505853412994 5.17641817515581e-11 3.40780590230341e-13 1.59602414424067e-11 -6.37478974421137e-13 15874010519.701 3.21332440692456 -0.0107207921286241 1.02601757683537 0.0412252313913333 4.81544402782647e-11 3.17262199644744e-13 1.40479606489116e-11 -5.60645260712129e-13 20000000000 4.20638939165761 -0.0171908649470309 0.623236424388679 0.0250418487731814 4.33554749513216e-11 2.85995710949971e-13 1.14484849861852e-11 -4.56200678335493e-13 10000000000 6.76518076607571e-06 -6.58185521127387e-07 0.00736690762822732 1.27346038987716e-06 1.91556446442236e-14 2.97020496371588e-15 3.484952011357e-15 2.97131283228617e-15 12599210498.9563 6.89248778360864e-06 -6.58091328256098e-07 0.0073668522474106 1.27345576361065e-06 1.91556401506694e-14 2.97020496704061e-15 3.4849500799755e-15 2.97131283244751e-15 15874010519.701 7.0945735665045e-06 -6.57941807510843e-07 0.00736676433627157 1.27344841990604e-06 1.915563301765e-14 2.97020497231824e-15 3.48494701409848e-15 2.97131283270362e-15 20000000000 7.41536094428497e-06 -6.57704460938973e-07 0.00736662478711476 1.27343676259165e-06 1.9155621694822e-14 2.97020498069586e-15 3.48494214732207e-15 2.97131283311017e-15 10000000000 1.00711924304301e-05 -8.99689501653622e-07 0.0105843229811951 1.73661857234606e-06 1.98395301086536e-14 2.97449789940576e-15 3.71388550042623e-15 2.97607928825078e-15 12599210498.9563 1.02540173635457e-05 -8.99555318371916e-07 0.0105842434492163 1.73661228253459e-06 1.98395236570244e-14 2.9744979041409e-15 3.71388272744563e-15 2.97607928847008e-15 15874010519.701 1.05442316862819e-05 -8.99342317280876e-07 0.0105841172006835 1.7366022981298e-06 1.9839513415778e-14 2.9744979116574e-15 3.71387832561331e-15 2.9760792888182e-15 20000000000 1.10049127434953e-05 -8.99004203135156e-07 0.0105839167951767 1.73658644899747e-06 1.98394971590054e-14 2.97449792358896e-15 3.71387133814006e-15 2.97607928937081e-15 10000000000 1.50009858543459e-05 -1.22826988820144e-06 0.0151716211020124 2.34525534958261e-06 2.08122422437917e-14 2.97867968662153e-15 4.03827767847621e-15 2.98093206027102e-15 12599210498.9563 1.52629305124234e-05 -1.22807924592372e-06 0.0151715071516764 2.34524695918474e-06 2.08122330023376e-14 2.97867969334742e-15 4.03827370640119e-15 2.98093206056349e-15 15874010519.701 1.56787386328659e-05 -1.22777662243159e-06 0.0151713262676723 2.34523364032307e-06 2.08122183325531e-14 2.97867970402403e-15 4.03826740112511e-15 2.98093206102776e-15 20000000000 1.6338785055787e-05 -1.22729624327675e-06 0.0151710391344295 2.34521249811117e-06 2.08121950459979e-14 2.97867972097189e-15 4.03825739212325e-15 2.98093206176474e-15 10000000000 2.23549737307716e-05 -1.67373628573026e-06 0.0216704122871724 3.12113821195852e-06 2.21878873959032e-14 2.98267315188812e-15 4.49580256146878e-15 2.98587098271336e-15 12599210498.9563 2.27289550154081e-05 -1.67346647481892e-06 0.0216702495989367 3.12112734502079e-06 2.21878742048975e-14 2.98267316140485e-15 4.49579689183179e-15 2.98587098309207e-15 15874010519.701 2.33226088686138e-05 -1.6730381798915e-06 0.0216699913487148 3.12111009491621e-06 2.21878532656375e-14 2.98267317651159e-15 4.49578789184408e-15 2.98587098369323e-15 20000000000 2.42649644533071e-05 -1.67235831212923e-06 0.0216695814052025 3.12108271229323e-06 2.2187820027028e-14 2.98267320049178e-15 4.49577360525413e-15 2.98587098464752e-15 10000000000 3.33298804192417e-05 -2.2746200420717e-06 0.0307970622984754 4.0635985102488e-06 2.41173288181348e-14 2.98637837047393e-15 5.13627553183079e-15 2.99089803067601e-15 12599210498.9563 3.3861128003072e-05 -2.27424025957127e-06 0.0307968311962227 4.06358508570133e-06 2.41173100844676e-14 2.9863783838664e-15 5.13626747988069e-15 2.99089803114375e-15 15874010519.701 3.47044246845033e-05 -2.27363739692863e-06 0.0307964643460451 4.06356377566404e-06 2.41172803468465e-14 2.98637840512547e-15 5.13625469820663e-15 2.99089803188622e-15 20000000000 3.60430588691283e-05 -2.27268042346978e-06 0.0307958820121762 4.06352994834918e-06 2.41172331418745e-14 2.98637843887173e-15 5.13623440856381e-15 2.99089803306483e-15 10000000000 4.97142162294115e-05 -3.07956344712831e-06 0.0434669961912837 5.11928033532698e-06 2.67932723155135e-14 2.98967099826023e-15 6.02333370332278e-15 2.99601953019904e-15 12599210498.9563 5.04636825617346e-05 -3.0790328094442e-06 0.0434666701585465 5.11926503763574e-06 2.67932458928636e-14 2.98967101696801e-15 6.02332234650879e-15 2.99601953073191e-15 15874010519.701 5.16533773336992e-05 -3.07819048090806e-06 0.0434661526163485 5.11924075418243e-06 2.67932039498343e-14 2.98967104666455e-15 6.02330431869032e-15 2.99601953157779e-15 20000000000 5.35418777095608e-05 -3.07685338353267e-06 0.0434653310756489 5.11920220690011e-06 2.67931373702136e-14 2.98967109380429e-15 6.02327570131234e-15 2.99601953292054e-15 10000000000 7.41763531310015e-05 -4.14811550918332e-06 0.060799795917792 6.13265286602123e-06 3.04512966414654e-14 2.99240417213174e-15 7.23477842914255e-15 3.00124966367877e-15 12599210498.9563 7.52242042109097e-05 -4.14738122130508e-06 0.0607993400785548 6.13263799185643e-06 3.04512597077436e-14 2.99240419801326e-15 7.23476255441523e-15 3.00124966419677e-15 15874010519.701 7.68875517184749e-05 -4.14621562064336e-06 0.0607986164823805 6.13261438070613e-06 3.04512010795516e-14 2.99240423909732e-15 7.2347373548564e-15 3.00124966501904e-15 20000000000 7.95279200587303e-05 -4.14436536682054e-06 0.0607974678538983 6.13257690062996e-06 3.04511080141993e-14 2.99240430431341e-15 7.23469735305023e-15 3.00124966632431e-15 10000000000 0.00011068386916905 -5.55042420633947e-06 0.0840946797430585 6.77633130147478e-06 3.53646535374219e-14 2.99441549787957e-15 8.86086165558488e-15 3.00661529950014e-15 12599210498.9563 0.000112132548428849 -5.54942030210897e-06 0.0840940495278631 6.77632212448128e-06 3.53646024873227e-14 2.99441553325622e-15 8.86083971317738e-15 3.00661529981966e-15 15874010519.701 0.000114432166275781 -5.54782671535096e-06 0.0840930491284501 6.7763075569828e-06 3.53645214509453e-14 2.99441558941272e-15 8.86080488177664e-15 3.00661530032686e-15 20000000000 0.000118082538890568 -5.54529708397392e-06 0.0840914611055939 6.77628443269838e-06 3.53643928152361e-14 2.99441567855456e-15 8.8607495903745e-15 3.006615301132e-15 10000000000 0.00016510641524646 -7.36542621420807e-06 0.114776600987135 6.47085710056395e-06 4.1832952024968e-14 2.99553916604222e-15 1.10005533865271e-14 3.01216144540442e-15 12599210498.9563 0.000167082787445702 -7.3640732818667e-06 0.11477574119894 6.47086382084961e-06 4.18328823947745e-14 2.99553921370781e-15 1.10005234575827e-14 3.01216144517049e-15 15874010519.701 0.000170220059388881 -7.36192565163936e-06 0.11477437637687 6.47087448858642e-06 4.18327718645553e-14 2.99553928937165e-15 1.10004759483447e-14 3.01216144479915e-15 20000000000 0.000175200109296453 -7.35851654146054e-06 0.11477220987355 6.47089142243276e-06 4.18325964108432e-14 2.99553940947909e-15 1.10004005321306e-14 3.01216144420968e-15 10000000000 0.000246075770342236 -9.6775861281227e-06 0.154334401681413 4.31823646746498e-06 5.0169455601608e-14 2.99562156920273e-15 1.37573503609738e-14 3.0179556445638e-15 12599210498.9563 0.000248732255608909 -9.67579229133632e-06 0.154333246000383 4.31827663226037e-06 5.01693620285883e-14 2.9956216323895e-15 1.37573101400286e-14 3.01795564316595e-15 15874010519.701 0.000252949131722697 -9.67294477413326e-06 0.154331411479989 4.31834038958992e-06 5.01692134917844e-14 2.9956217326915e-15 1.37572462932579e-14 3.01795564094701e-15 20000000000 0.000259642926197399 -9.6684246757462e-06 0.154328499382784 4.31844159726348e-06 5.01689777070918e-14 2.99562189190911e-15 1.37571449428269e-14 3.01795563742465e-15 10000000000 0.00036621430342822 -1.25729596386738e-05 0.204292812212673 -9.17455354011569e-07 6.06964918090748e-14 2.99454220925176e-15 1.72377609584379e-14 3.02408908961796e-15 12599210498.9563 0.000369729743582655 -1.25706231734845e-05 0.20429128281734 -9.17354307181175e-07 6.06963679965339e-14 2.99454229154122e-15 1.72377077383311e-14 3.02408908610172e-15 15874010519.701 0.000375310115449323 -1.25669142937888e-05 0.20428885506534 -9.17193906113275e-07 6.0696171457839e-14 2.99454242216664e-15 1.72376232566776e-14 3.02408908052003e-15 20000000000 0.000384168298966814 -1.25610268838146e-05 0.204285001278893 -9.16939287247212e-07 6.06958594757938e-14 2.9945426295191e-15 1.7237489150412e-14 3.02408907165966e-15 10000000000 0.00054390618259105 -1.61359492671407e-05 0.266258508052522 -1.07541891776569e-05 7.37596555727285e-14 2.99226343437717e-15 2.15559920700011e-14 3.03067275131564e-15 12599210498.9563 0.000548488234142882 -1.61329650480372e-05 0.26625651457714 -1.0753987769424e-05 7.37594941883807e-14 2.9922635394843e-15 2.15559226981358e-14 3.03067274430674e-15 15874010519.701 0.000555761733458412 -1.61282279307523e-05 0.26625335014755 -1.0753668055332e-05 7.3759238008604e-14 2.99226370633021e-15 2.1555812577164e-14 3.03067273318081e-15 20000000000 0.000567307557506049 -1.61207083146374e-05 0.266248326967318 -1.07531605447488e-05 7.37588313533618e-14 2.99226397117846e-15 2.15556377710176e-14 3.0306727155195e-15 10000000000 0.000805880010594418 -2.04480727997359e-05 0.342047309206835 -2.68345289215418e-05 8.97689981180656e-14 2.98900238973728e-15 2.68475424721234e-14 3.03782738429979e-15 12599210498.9563 0.0008117720764873 -2.04443520957575e-05 0.342044745725037 -2.68341744424725e-05 8.97687904911159e-14 2.98900252084892e-15 2.68474532202328e-14 3.03782737195801e-15 15874010519.701 0.000821125078398838 -2.04384458903525e-05 0.342040676471067 -2.68336117447536e-05 8.97684609063333e-14 2.98900272897412e-15 2.68473115416878e-14 3.03782735236666e-15 20000000000 0.000835971867879508 -2.04290704845624e-05 0.342034216982756 -2.68327185246784e-05 8.97679377292902e-14 2.98900305934838e-15 2.68470866410166e-14 3.03782732126732e-15 10000000000 0.00119100128763556 -2.55892615270873e-05 0.433853617613962 -5.05696136585577e-05 1.09278323406605e-13 2.98581217255651e-15 3.32953738545923e-14 3.04566263068193e-15 12599210498.9563 0.00119849950893218 -2.55847975133982e-05 0.433850355247305 -5.05690408195002e-05 1.09278058743334e-13 2.98581233012193e-15 3.32952600815786e-14 3.04566261070452e-15 15874010519.701 0.00121040210433121 -2.55777113863428e-05 0.433845176588237 -5.05681314986016e-05 1.09277638619719e-13 2.9858125802396e-15 3.32950794781771e-14 3.04566257899236e-15 20000000000 0.00122929607258873 -2.55664629942766e-05 0.433836956042873 -5.05666880527984e-05 1.09276971722965e-13 2.98581297727192e-15 3.32947927881477e-14 3.04566252865245e-15 10000000000 0.00175585483859113 -3.16411527658039e-05 0.544390031665459 -8.21938013794886e-05 1.33140802116938e-13 2.98638308155336e-15 4.11812687323594e-14 3.05422327665821e-15 12599210498.9563 0.00176534835105171 -3.16362307193525e-05 0.544385901073223 -8.21929374452604e-05 1.33140465515932e-13 2.98638325606893e-15 4.11811240312329e-14 3.05422324639323e-15 15874010519.701 0.00178041824904909 -3.16284175165713e-05 0.544379344198951 -8.21915660418901e-05 1.3313993119917e-13 2.98638353309305e-15 4.11808943325126e-14 3.05422319835059e-15 20000000000 0.00180433993455859 -3.16160149787581e-05 0.544368935890945 -8.21893890917021e-05 1.33139083034336e-13 2.98638397283616e-15 4.11805297085225e-14 3.05422312208764e-15 10000000000 0.00258297744529896 -3.86912541828632e-05 0.676894180752539 -0.000117989617024132 1.62861572797427e-13 3.00227152003244e-15 5.10021946552565e-14 3.06332593502308e-15 12599210498.9563 0.00259504809992292 -3.86871008961474e-05 0.676888928758031 -0.000117988401119494 1.62861140017683e-13 3.00227166894386e-15 5.10020086044532e-14 3.06332589194992e-15 15874010519.701 0.00261420892198198 -3.8680508015297e-05 0.676880591778276 -0.000117986471000883 1.62860453027961e-13 3.00227190532419e-15 5.10017132672124e-14 3.06332582357553e-15 20000000000 0.00264462445867526 -3.86700425974353e-05 0.676867357753301 -0.000117983407152983 1.62859362513106e-13 3.00227228054997e-15 5.10012444485662e-14 3.06332571503795e-15 10000000000 0.00379309094701823 -4.68377887395038e-05 0.834805189779138 -0.000142224705777929 2.01472105820855e-13 3.06738126698603e-15 6.37588465478057e-14 3.07203119636656e-15 12599210498.9563 0.00380877533212218 -4.68385652128408e-05 0.834798365404832 -0.000142223160095331 2.01471528605556e-13 3.06738123841033e-15 6.37585984033599e-14 3.07203114016323e-15 15874010519.701 0.00383367253921178 -4.68397977774166e-05 0.834787532443174 -0.000142220706490126 2.01470612340829e-13 3.0673811930496e-15 6.37582044986059e-14 3.07203105094601e-15 20000000000 0.0038731938821205 -4.68417543264817e-05 0.834770336332818 -0.000142216811667342 2.01469157879999e-13 3.06738112104486e-15 6.37575792137855e-14 3.0720309093225e-15 10000000000 0.00556394776136202 -5.62101117917362e-05 1.02063157558238 -0.000104862615637983 2.55745938510184e-13 3.27712079463681e-15 8.16868274299586e-14 3.07682389984404e-15 12599210498.9563 0.00558547037437027 -5.6229342389498e-05 1.02062221117191 -0.000104861138320783 2.55745099379825e-13 3.27712004486826e-15 8.16864666962387e-14 3.07682384293516e-15 15874010519.701 0.00561963508129718 -5.62598687821953e-05 1.02060734618512 -0.000104858793239827 2.55743767355559e-13 3.27711885469572e-15 8.16858940671525e-14 3.07682375259794e-15 20000000000 0.00567386738783558 -5.63083257085143e-05 1.02058374971181 -0.000104855070690928 2.55741652929451e-13 3.27711696544194e-15 8.16849850751398e-14 3.07682360919654e-15 10000000000 0.00817156364727802 -6.73754984747591e-05 1.23280904471388 0.000137982288227353 3.42564625231463e-13 3.91801848390039e-15 1.10357353785749e-13 3.06443032412533e-15 12599210498.9563 0.00820474480159094 -6.74620488960859e-05 1.23279460872192 0.000137981453022415 3.42563163751809e-13 3.9180146717461e-15 1.10356725552397e-13 3.06443036047223e-15 15874010519.701 0.00825741598775435 -6.75994375267284e-05 1.2327716931867 0.000137980127227262 3.42560843824472e-13 3.9180086203988e-15 1.10355728294114e-13 3.06443041816934e-15 20000000000 0.00834102473920072 -6.78175243538474e-05 1.23273531747947 0.000137978022683951 3.42557161237422e-13 3.91799901466123e-15 1.10354145245268e-13 3.0644305097578e-15 10000000000 0.0126083434996976 -9.68146673829251e-05 1.45488745325987 0.00104794365861867 5.54015723556348e-13 7.14780541709106e-15 1.80159154134971e-13 2.95891377095544e-15 12599210498.9563 0.0126849536412568 -9.73961800037647e-05 1.4548541289859 0.00104792144907378 5.54011004297243e-13 7.14776959534899e-15 1.80157125860699e-13 2.95891512273428e-15 15874010519.701 0.01280656189177 -9.83192527332059e-05 1.45480123078229 0.00104788619414133 5.54003513110936e-13 7.14771273317261e-15 1.80153906175995e-13 2.95891726854943e-15 20000000000 0.0129995959799642 -9.9784486398784e-05 1.45471726209373 0.00104783023174107 5.53991622023677e-13 7.14762247335614e-15 1.80148795245147e-13 2.95892067481864e-15 10000000000 0.0483168426036209 -0.000803245816434152 1.51989893970716 0.00634926899507199 3.3524072795e-12 6.97369276531769e-14 1.10347883311012e-12 -1.44794437688102e-15 12599210498.9563 0.0511460431052127 -0.000859795676972152 1.51866827680913 0.00634420132284655 3.35137132227185e-12 6.97162210129998e-14 1.10303320619649e-12 -1.44610935679813e-15 15874010519.701 0.0556335107965724 -0.000949490865408733 1.51671574851227 0.00633616112480756 3.34972816386425e-12 6.96833776783761e-14 1.10232582016497e-12 -1.44319645469443e-15 20000000000 0.0627478441413458 -0.00109169165967602 1.51361889689335 0.00632340878705471 3.34712313638463e-12 6.96313085724264e-14 1.10120292521944e-12 -1.43857255359474e-15 10000000000 0.261618472423214 -0.00441022040581717 1.10719009615631 0.0186982082748698 1.36485237379856e-11 2.46216020103128e-13 4.47846515795088e-12 -7.20856832043017e-14 12599210498.9563 0.323393245719421 -0.00551206810873216 1.07999651664561 0.0182414221456953 1.35247593427939e-11 2.44008492543443e-13 4.42321872650185e-12 -7.11576772548687e-14 15874010519.701 0.419183565930082 -0.00722063519289642 1.03758826363528 0.0175290664320968 1.33328455499379e-11 2.40585416091148e-13 4.33578968290056e-12 -6.96890815376938e-14 20000000000 0.565774440756417 -0.00983530798046316 0.972252035194384 0.0164315763840271 1.30391539668621e-11 2.35346976855996e-13 4.19803284873536e-12 -6.73751010990059e-14 10000000000 0.31749466470507 -0.00345661197288697 1.07708473661869 0.0221893102636596 1.54181525677896e-11 1.86748053801038e-13 5.05037706823421e-12 -1.00389482969806e-13 12599210498.9563 0.397215519582929 -0.00440729188672601 1.04187517997892 0.0214673991212983 1.52342609605751e-11 1.84555126271972e-13 4.96734310531357e-12 -9.86870149824892e-14 15874010519.701 0.519927445327808 -0.00587064502277681 0.987326910626547 0.0203489810780128 1.49512021137504e-11 1.81179618564196e-13 4.8362290680198e-12 -9.5998748117594e-14 20000000000 0.705613814939535 -0.00808497528973169 0.90425846029808 0.0186458059859677 1.45228805033256e-11 1.76071836512462e-13 4.63070648784453e-12 -9.17848626048244e-14 10000000000 0.30802038624117 -0.0015290823496518 1.18150253882485 0.0247964607607488 1.52635838213651e-11 9.85909424610592e-14 5.00621030542152e-12 -1.01431845987756e-13 12599210498.9563 0.380095582615676 -0.0019805048143577 1.14974342185209 0.0241328869128246 1.51126084295538e-11 9.76453510938533e-14 4.93859206905566e-12 -1.00019032988779e-13 15874010519.701 0.491621688245378 -0.00267901681314315 1.10030666636522 0.0230999571215004 1.48789955038651e-11 9.6182183069259e-14 4.83164583871581e-12 -9.77845022980023e-14 20000000000 0.661739177447222 -0.00374449925548081 1.02438841725025 0.0215137239546241 1.45226516313801e-11 9.39503247144908e-14 4.66336578464057e-12 -9.42684648997526e-14 10000000000 0.32710890354621 -0.000314545085732169 1.31336907789591 0.0274408917937542 1.60587599937286e-11 4.24372707978265e-14 5.27027854908751e-12 -1.06479732922781e-13 12599210498.9563 0.399284679481424 -0.000491498053593389 1.281601915509 0.0267799405788445 1.59152488871255e-11 4.20854253773177e-14 5.20625196808166e-12 -1.05147588553482e-13 15874010519.701 0.511241585833672 -0.000765982208351539 1.2320465437133 0.0257488858439348 1.56926387479994e-11 4.15396532774138e-14 5.10491910970408e-12 -1.03039245509203e-13 20000000000 0.682663129503923 -0.00118625549969835 1.15565964957207 0.0241595713854729 1.53517917656294e-11 4.07040005347116e-14 4.94522130930683e-12 -9.97165548040847e-14 10000000000 0.381190358648974 0.000430385210491903 1.46753762727327 0.0301004448654452 1.80232377870407e-11 1.233091037073e-14 5.91505350556872e-12 -1.17661094143491e-13 12599210498.9563 0.462537930117541 0.000388754468497797 1.43173037817319 0.0293689235407427 1.78607915568653e-11 1.22477762712816e-14 5.84255690814482e-12 -1.16180030718716e-13 15874010519.701 0.58869732035495 0.000324190660011682 1.37588199592222 0.0282279734930989 1.76088588073643e-11 1.21188462109861e-14 5.72782456619024e-12 -1.13836115537232e-13 20000000000 0.781807051840447 0.000225364090725216 1.28981996065882 0.0264697760435678 1.72232302345171e-11 1.19214954685861e-14 5.54703101059389e-12 -1.10142608088003e-13 10000000000 0.473603328971063 0.000923524095937886 1.63892012961775 0.0329406441887228 2.11565362552461e-11 4.55537784804473e-16 6.94009189396263e-12 -1.3577614170988e-13 12599210498.9563 0.573496508949434 0.000936130344863402 1.59490383487867 0.0320593033025422 2.09473814827462e-11 4.81932550960323e-16 6.84641982048401e-12 -1.33900540214129e-13 15874010519.701 0.728070307866012 0.000955637139891126 1.52638605869793 0.0306873677969247 2.06237372884795e-11 5.22775572246748e-16 6.69826546685241e-12 -1.30934036784087e-13 20000000000 0.963858815440793 0.000985393011322068 1.42116226398031 0.0285804655000944 2.01300470118203e-11 5.85077948855662e-16 6.46514102688679e-12 -1.26266172264194e-13 10000000000 0.615156646021621 0.00126112763080623 1.81655320202296 0.0361867371088482 2.55899662245206e-11 3.73510206370759e-15 8.38585981270943e-12 -1.632601681726e-13 12599210498.9563 0.745738432573588 0.00125803833383319 1.75890162345623 0.0350424007293635 2.52931107130167e-11 3.7280790717779e-15 8.25199495333774e-12 -1.60603060902999e-13 15874010519.701 0.946910739166265 0.00125327901008502 1.6695145483283 0.0332681408657552 2.48357796444895e-11 3.71725955764057e-15 8.04055644724133e-12 -1.56406180599541e-13 20000000000 1.25171891444298 0.00124606787445805 1.53320124360113 0.0305624339712505 2.41428500317801e-11 3.70086626565403e-15 7.70890409529139e-12 -1.49823154408182e-13 10000000000 0.826860622457806 0.00145080700325646 1.98439672121521 0.0400064684977129 3.16113667571652e-11 2.29854937636244e-14 1.03401490168074e-11 -2.04558923093946e-13 12599210498.9563 1.00625618912166 0.00133810344689066 1.90495432670749 0.0384102750493444 3.11542229557384e-11 2.26982975237757e-14 1.01316814899903e-11 -2.00370296825001e-13 15874010519.701 1.28060684401433 0.00116574526060597 1.78264221169546 0.0359527232868618 3.04551103542739e-11 2.22590866895813e-14 9.80330035874545e-12 -1.93772310781039e-13 20000000000 1.69168129661277 0.000907491650438541 1.59843504120077 0.0322515473529273 2.9407592060344e-11 2.16009932969762e-14 9.29142841920533e-12 -1.83487542284815e-13 10000000000 1.14475510435181 0.00140215448399599 2.12227627765073 0.0443744878149483 3.96608000881449e-11 6.21450295374573e-14 1.29316670760953e-11 -2.66321213220962e-13 12599210498.9563 1.40157080538054 0.00101993489723575 2.00807136709527 0.0419941483842577 3.89043599245628e-11 6.10192173477236e-14 1.25806634021936e-11 -2.59005346668097e-13 15874010519.701 1.7897050037415 0.000442273592608378 1.8343871981857 0.0383741002293103 3.7761126487807e-11 5.93177395563854e-14 1.20308150126748e-11 -2.47545018070076e-13 20000000000 2.36105229011939 -0.000408064306597853 1.5785310180886 0.0330413649632964 3.60782463794701e-11 5.68131039869908e-14 1.1184345555723e-11 -2.29902303624103e-13 10000000000 1.62803100068885 0.000876439957135937 2.20623159953173 0.0488965732351712 5.03036581690152e-11 1.27670122806105e-13 1.63085299131807e-11 -3.57145863774516e-13 12599210498.9563 2.00745904240513 -6.31064252639545e-05 2.03667053519206 0.0451498108258494 4.8974078173736e-11 1.24377793464749e-13 1.56753217540693e-11 -3.43153969249237e-13 15874010519.701 2.57021843826402 -0.00145662112741698 1.7844423630209 0.0395763671951245 4.70020741238906e-11 1.1949468239386e-13 1.46949723263121e-11 -3.21491352314004e-13 20000000000 3.37603394053528 -0.00345199563009236 1.42741728263492 0.031687243854311 4.41783603918757e-11 1.12502552845799e-13 1.32235170551402e-11 -2.88976851897911e-13 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_1D.standard0000644000175000017500000010142414163340332024562 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618362860586e-13 1.19322470829588e-13 0.32 6.81733754343427e-13 1.72507877043156e-13 0.34 6.64859525976109e-13 2.34687173579504e-13 0.36 6.5361606350279e-13 3.11995218338964e-13 0.38 6.58137159027742e-13 4.1475161319374e-13 0.4 7.06775211872195e-13 5.60315352951264e-13 0.42 8.78814902267774e-13 7.7788701652324e-13 0.44 1.3958453642412e-12 1.11658758000648e-12 0.46 2.87679721736392e-12 1.65905064687943e-12 0.48 7.04925839058108e-12 2.54429377084376e-12 0.5 1.8731687614669e-11 4.00621181411272e-12 0.52 5.13518725153593e-11 6.4383857484928e-12 0.54 1.4229326251835e-10 1.05032601852582e-11 0.56 3.95517344493408e-10 1.73162384902336e-11 0.58 1.09976585710038e-09 2.87565811561292e-11 0.6 3.05579090206304e-09 4.79937592518883e-11 0.62 8.48036350694388e-09 8.03821693222927e-11 0.64 2.34973646067389e-08 1.3499183405941e-10 0.66 6.4980763428404e-08 2.27395336722597e-10 0.68 1.79278031651889e-07 3.83995830297573e-10 0.7 4.93180236909135e-07 6.50913030406106e-10 0.72 1.35175165929645e-06 1.10956726317243e-09 0.74 3.68776789199246e-06 1.90771027371643e-09 0.76 9.99613971843157e-06 3.3235151975254e-09 0.78 2.68987182927784e-05 5.90635328120692e-09 0.800000000000001 7.17540233926327e-05 1.08044570042777e-08 0.820000000000001 0.000189726842135058 2.05699596551086e-08 0.840000000000001 0.000497697719770728 4.12432433557345e-08 0.860000000000001 0.00128903470330565 8.81252703792335e-08 0.880000000000001 0.0032362094441829 2.04463491642645e-07 0.900000000000001 0.00763701790586737 5.63675910563795e-07 0.920000000000001 0.0160126695299415 3.1540596591743e-06 0.940000000000001 0.0262639800031871 4.07694812931551e-05 0.960000000000001 0.0348164515268693 0.000281239075634444 0.980000000000001 0.0415907008596367 0.000841474895496324 1 0.048688427733456 0.00174680071561732 1.02 0.0578232919702914 0.00312280919997147 1.04 0.0704841730225918 0.00519706629386792 0.3 1.70062041767013e-12 -3.80677807577422e-13 0.32 1.68173940494711e-12 -3.27492816649741e-13 0.34 1.66487507511512e-12 -2.65314551323307e-13 0.36 1.6536588740271e-12 -1.88009061254135e-13 0.38 1.65825507443567e-12 -8.52589794969041e-14 0.4 1.70710008053715e-12 6.02892014061144e-14 0.42 1.87971006428977e-12 2.77822630281072e-13 0.44 2.39831190628908e-12 6.16429525415776e-13 0.46 3.8835924016266e-12 1.15866387999707e-12 0.48 8.06797243856136e-12 2.04335052425671e-12 0.5 1.97831997642317e-11 3.50391970159939e-12 0.52 5.24935629472187e-11 5.93283723509562e-12 0.54 1.43682633153998e-10 9.98988389328519e-12 0.56 3.97586071652839e-10 1.67841319909021e-11 0.58 1.103694879209e-09 2.81798773349043e-11 0.6 3.0648035865939e-09 4.73114274614004e-11 0.62 8.50323350522878e-09 7.94510821237013e-11 0.64 2.35578907144306e-08 1.33478537487921e-10 0.66 6.51432244650448e-08 2.24387183645355e-10 0.68 1.79715105434117e-07 3.77616042861884e-10 0.7 4.94352613922831e-07 6.36704287219913e-10 0.72 1.35487746041505e-06 1.07729355913759e-09 0.74 3.69603031857282e-06 1.83404140788969e-09 0.76 1.0017718592873e-05 3.15579750170532e-09 0.78 2.69543336817924e-05 5.5265192844963e-09 0.800000000000001 7.18954309049642e-05 9.94928961785123e-09 0.820000000000001 0.00019008425044006 1.86483178106236e-08 0.840000000000001 0.000498617676704709 3.68756917590189e-08 0.860000000000001 0.00129155319669404 7.77288611623391e-08 0.880000000000001 0.00324399258065894 1.75305311856007e-07 0.900000000000001 0.00767592241347613 4.2078805985542e-07 0.920000000000001 0.0166745416457419 1.06127267885745e-06 0.940000000000001 0.031882543264323 2.81979780389553e-06 0.960000000000001 0.0495001664951508 1.42243379920405e-05 0.980000000000001 0.06510870543762 0.000323250612129316 1 0.0768379340348002 0.00189141896945163 1.02 0.0883022977964081 0.00423633879193499 1.04 0.103441489155297 0.00727361671692988 0.3 2.70062558861753e-12 -8.80681322993249e-13 0.32 2.68175306241856e-12 -8.27501866623872e-13 0.34 2.66491114820359e-12 -7.65337808196905e-13 0.36 2.65375416190097e-12 -6.88068720322616e-13 0.38 2.65850681917282e-12 -5.85411739917604e-13 0.4 2.70776531783119e-12 -4.4010122833159e-13 0.42 2.88146842449688e-12 -2.23173374152794e-13 0.44 3.40296103035247e-12 1.13893493402679e-13 0.46 4.89588877675639e-12 6.52219046362234e-13 0.48 9.10050574197595e-12 1.52700421287142e-12 0.5 2.08693023552168e-11 2.96254216070302e-12 0.52 5.37215026640352e-11 5.32831007477133e-12 0.54 1.45286167395255e-10 9.2263775371949e-12 0.56 4.00184172707264e-10 1.56212728271817e-11 0.58 1.10892589370233e-09 2.60161573530854e-11 0.6 3.07700079240008e-09 4.26454737390397e-11 0.62 8.53384417780671e-09 6.8545867090499e-11 0.64 2.3637100315188e-08 1.07061152334219e-10 0.66 6.53504208171936e-08 1.59529469567744e-10 0.68 1.80258307774288e-07 2.17859540585756e-10 0.7 4.95774090346404e-07 2.43711388172209e-10 0.72 1.35858072602834e-06 1.14153475126032e-10 0.74 3.70561232062756e-06 -5.13556982529293e-10 0.76 1.0042202553125e-05 -2.52309055274169e-09 0.78 2.7016046705386e-05 -8.09272845584563e-09 0.800000000000001 7.20477861504113e-05 -2.23812151370477e-08 0.820000000000001 0.000190449251828925 -5.73034212115487e-08 0.840000000000001 0.00049944825274296 -1.39835381223252e-07 0.860000000000001 0.00129322590177276 -3.27453448816585e-07 0.880000000000001 0.00324636768716058 -7.23576254486975e-07 0.900000000000001 0.00767685958647622 -1.45370876635014e-06 0.920000000000001 0.0167165223459032 -2.53069045031837e-06 0.940000000000001 0.0330276347005157 -3.46300706546143e-06 0.960000000000001 0.0558434519900176 -1.80908853014248e-06 0.980000000000001 0.0788306059804647 2.44121922166166e-05 1 0.0980316653389515 0.00112733702715359 1.02 0.112229234257974 0.00453823507918271 1.04 0.128884107570148 0.00857310581791224 0.3 1.25201807478122e-12 1.09801051580292e-12 0.32 1.95922864733017e-12 1.66740705882101e-12 0.34 3.62340707598925e-12 2.5172814997555e-12 0.36 7.50229050731837e-12 3.79641070980841e-12 0.38 1.65042252787138e-11 5.7327176717155e-12 0.4 3.73505928188823e-11 8.67566957869171e-12 0.42 8.55652360641704e-11 1.31617650786657e-11 0.44 1.96977201427999e-10 2.00161637958893e-11 0.46 4.54214491852244e-10 3.05114903517646e-11 0.48 1.04765999066767e-09 4.66184244457245e-11 0.5 2.41552087547256e-09 7.14066045138467e-11 0.52 5.56521785174292e-09 1.09698149460873e-10 0.54 1.28095247079479e-08 1.69159523984912e-10 0.56 2.94491468814396e-08 2.62182725668538e-10 0.58 6.76086881121679e-08 4.0927549490846e-10 0.6 1.54954131508682e-07 6.45225379881431e-10 0.62 3.54424785476276e-07 1.03129196590023e-09 0.64 8.08672545279106e-07 1.67942501813453e-09 0.66 1.83955352578087e-06 2.80265019229262e-09 0.68 4.16968694271104e-06 4.82239830193422e-09 0.7 9.40933285227021e-06 8.60193166910277e-09 0.72 2.11408240876671e-05 1.59618097165834e-08 0.74 4.72848483057757e-05 3.08306954457767e-08 0.76 0.000105399509861736 6.18346217009274e-08 0.78 0.000234450130433062 1.28154450787264e-07 0.800000000000001 0.000519929558547868 2.72828260390056e-07 0.820000000000001 0.00114331453211106 5.93056321304273e-07 0.840000000000001 0.00246568447793741 1.30950681527178e-06 0.860000000000001 0.00513265328759517 2.92648634831741e-06 0.880000000000001 0.0101490250178913 6.62546252143862e-06 0.900000000000001 0.0188522420217679 1.58980565444577e-05 0.920000000000001 0.0320623768037972 7.45806074258463e-05 0.940000000000001 0.0451411845835485 0.000608797884245947 0.960000000000001 0.0554907774354201 0.00159476286906315 0.980000000000001 0.0669412066681427 0.00289196952595127 1 0.0813014642761061 0.00471809191805982 1.02 0.0994303203143408 0.00750026467859166 1.04 0.121463302661853 0.0120985159066791 0.3 2.25381743189674e-12 5.97777096246537e-13 0.32 2.96331997878682e-12 1.16692742477484e-12 0.34 4.63271523755781e-12 2.01629829798583e-12 0.36 8.52347690272999e-12 3.29440039227108e-12 0.38 1.75524625903634e-11 5.22861845331649e-12 0.4 3.84604370655832e-11 8.16733521721789e-12 0.42 8.68153688421547e-11 1.2644872567831e-11 0.44 1.9854669424063e-10 1.94820384404812e-11 0.46 4.56510621372933e-10 2.99427952347787e-11 0.48 1.05160821225589e-09 4.59806597401741e-11 0.5 2.42322158338933e-09 7.0631433353677e-11 0.52 5.58143075326153e-09 1.08650881582764e-10 0.54 1.28450149338701e-08 1.67576107142241e-10 0.56 2.95282031422254e-08 2.59548501769476e-10 0.58 6.77859451498306e-08 4.04563878758923e-10 0.6 1.55352015146518e-07 6.36510699177e-10 0.62 3.55316305809901e-07 1.01486651377149e-09 0.64 8.10662798375438e-07 1.64825626525061e-09 0.66 1.84397344372465e-06 2.74352166223316e-09 0.68 4.17943850419652e-06 4.71071523812119e-09 0.7 9.43066335715843e-06 8.39247490484792e-09 0.72 2.11871176790443e-05 1.55720981194682e-08 0.74 4.7384559838379e-05 3.01117792139938e-08 0.76 0.00010561360240842 6.05182264007436e-08 0.78 0.00023491239648792 1.25757055199888e-07 0.800000000000001 0.000520946734722732 2.68480175078878e-07 0.820000000000001 0.00114564516891093 5.85190720780886e-07 0.840000000000001 0.00247140158350191 1.29512847351572e-06 0.860000000000001 0.0051477836414569 2.89765258072098e-06 0.880000000000001 0.0101925836166393 6.53173791452184e-06 0.900000000000001 0.0190318091701026 1.47978905790753e-05 0.920000000000001 0.0334815324320069 3.36957669501408e-05 0.940000000000001 0.0545719533614447 9.57026065108205e-05 0.960000000000001 0.0743909149639733 0.00114794930928729 0.980000000000001 0.0895158650155631 0.00322011296719837 1 0.106990724895673 0.00564887417318909 1.02 0.129587988554209 0.00901062945584958 1.04 0.158837465306023 0.0143352434862808 0.3 3.25823365344295e-12 9.48121493558103e-14 0.32 3.97296433336239e-12 6.60621755307947e-13 0.34 5.65377865841343e-12 1.50291098600279e-12 0.36 9.56948587218967e-12 2.76602824955468e-12 0.38 1.86529786157567e-11 4.66859573565557e-12 0.4 3.96800835080159e-11 7.54058425556748e-12 0.42 8.82954557507307e-11 1.18777043323394e-11 0.44 2.00596297322291e-10 1.8419956093931e-11 0.46 4.59805883339197e-10 2.82625372872152e-11 0.48 1.05762840821501e-09 4.3007276706498e-11 0.5 2.43520287132275e-09 6.495879231189e-11 0.52 5.60645073276419e-09 9.73564442290335e-11 0.54 1.28985435280265e-08 1.44600955044843e-10 0.56 2.96440205371166e-08 2.12366166377191e-10 0.58 6.80377018478812e-08 3.07356189650032e-10 0.6 1.55899932829105e-07 4.3624951210268e-10 0.62 3.56507833302559e-07 6.03075991691764e-10 0.64 8.13248093569634e-07 8.04086274064836e-10 0.66 1.84956269483086e-06 1.01983476963682e-09 0.68 4.1914639064939e-06 1.20778650097754e-09 0.7 9.45631089713672e-06 1.31465075945681e-09 0.72 2.12414267648771e-05 1.35321517562149e-09 0.74 4.74983732173242e-05 1.71859432657376e-09 0.76 0.000105849162593888 4.10459816813175e-09 0.78 0.000235390853108942 1.40937771232533e-08 0.800000000000001 0.000521880368883811 4.85266340981025e-08 0.820000000000001 0.00114729998623445 1.56405305898731e-07 0.840000000000001 0.00247369792745489 4.76998064546056e-07 0.860000000000001 0.00514894126577034 1.39395182900338e-06 0.880000000000001 0.0101870062871646 3.91075709307758e-06 0.900000000000001 0.0190160779093056 1.04969852309886e-05 0.920000000000001 0.0335712700421447 2.6976242070834e-05 0.940000000000001 0.0560935982314932 6.69583820643275e-05 0.960000000000001 0.0857368328351994 0.000278420319912235 0.980000000000001 0.107121511570622 0.0028516502934201 1 0.127108261275351 0.00609868983073257 1.02 0.152270239156441 0.00997381305459979 1.04 0.185424059102101 0.0157721136086737 0.3 9.67451177160206e-12 5.10307780353936e-12 0.32 1.99437581002328e-11 7.51891853673929e-12 0.34 4.19939787243034e-11 1.1064195885855e-11 0.36 8.9292939016174e-11 1.62810100852757e-11 0.38 1.9067541726376e-10 2.39774379494671e-11 0.4 4.07836904751936e-10 3.53644195957073e-11 0.42 8.72684899845105e-10 5.22699973595066e-11 0.44 1.86700637314647e-09 7.7481727743463e-11 0.46 3.99218879074973e-09 1.15308148046968e-10 0.48 8.53028028397887e-09 1.72527202465099e-10 0.5 1.8210819486342e-08 2.60041242272051e-10 0.52 3.88361904407211e-08 3.95862918381423e-10 0.54 8.27183020964984e-08 6.10696828887337e-10 0.56 1.75923434790514e-07 9.58550405554573e-10 0.58 3.73488973809573e-07 1.53777078568061e-09 0.6 7.91246394819651e-07 2.53303973691795e-09 0.62 1.67210368565289e-06 4.30098446977819e-09 0.64 3.52368623664794e-06 7.54655705135542e-09 0.66 7.39971670005385e-06 1.36896185838904e-08 0.68 1.54880442396458e-05 2.56316411516389e-08 0.7 3.23069303751568e-05 4.93664558876693e-08 0.72 6.72150783240705e-05 9.73750536600533e-08 0.74 0.000139631134155473 1.9579655481643e-07 0.76 0.000289619060681086 3.99599852581066e-07 0.78 0.000598311804903998 8.24719215214556e-07 0.800000000000001 0.00122403029776554 1.7161833553203e-06 0.820000000000001 0.00245629014447227 3.59268963043779e-06 0.840000000000001 0.00477486005843313 7.55400334948325e-06 0.860000000000001 0.00888723273832753 1.59403715244417e-05 0.880000000000001 0.0157432400134274 3.38534759225139e-05 0.900000000000001 0.0264971342782487 7.64437274530345e-05 0.920000000000001 0.0411470273796639 0.000333430548626036 0.940000000000001 0.054683296405057 0.00133545386978463 0.960000000000001 0.0682647619996408 0.00275225877349031 0.980000000000001 0.0843437920484317 0.00472432540602891 1 0.103775435568035 0.00775447113408909 1.02 0.126553458348577 0.0128106226992323 1.04 0.152341031401668 0.0219124312047412 0.3 1.07033999608144e-11 4.59945444459834e-12 0.32 2.10046155850833e-11 7.01203320318977e-12 0.34 4.31222500547251e-11 1.05511457737294e-11 0.36 9.05634004409177e-11 1.57563436423411e-11 0.38 1.9224581151095e-10 2.34309517127357e-11 0.4 4.10039910761795e-10 3.4777085223835e-11 0.42 8.76221813701769e-10 5.16064661762107e-11 0.44 1.87335451976774e-09 7.667660429414e-11 0.46 4.00445725536656e-09 1.14240985441019e-10 0.48 8.55500391159117e-09 1.70977213544995e-10 0.5 1.8261710960563e-08 2.57605784343139e-10 0.52 3.89419640795665e-08 3.91811783142195e-10 0.54 8.2938926289775e-08 6.0369457384376e-10 0.56 1.76383732110987e-07 9.46237772771285e-10 0.58 3.7444766782627e-07 1.51593455295173e-09 0.6 7.93236961059667e-07 2.49424406838211e-09 0.62 1.67621948189941e-06 4.23221860299794e-09 0.64 3.53215388087395e-06 7.42525678960368e-09 0.66 7.4170175088549e-06 1.34771033971089e-08 0.68 1.55231859126539e-05 2.52620706932288e-08 0.7 3.23778725415176e-05 4.87288897407929e-08 0.72 6.73577550860766e-05 9.62833548277638e-08 0.74 0.000139918265205595 1.93939337621748e-07 0.76 0.000290200598784483 3.96460122470873e-07 0.78 0.000599507580249465 8.19452198003969e-07 0.800000000000001 0.00122656679807211 1.70743677504321e-06 0.820000000000001 0.00246195968928931 3.57828612218176e-06 0.840000000000001 0.00478828773630023 7.5297180889865e-06 0.860000000000001 0.00892013142376132 1.58896257810202e-05 0.880000000000001 0.0158285296270135 3.35962697956365e-05 0.900000000000001 0.0268021404728434 7.11349324846952e-05 0.920000000000001 0.043465565307823 0.00015156065783675 0.940000000000001 0.0658491185547381 0.000532197999874902 0.960000000000001 0.0848907374565074 0.00254452670108817 0.980000000000001 0.104783401980128 0.00513128153927206 1 0.12910088983319 0.00867037145512027 1.02 0.159163145650812 0.0143150797075459 1.04 0.195025909519815 0.0241591365109279 0.3 1.17731690457231e-11 4.05302794007017e-12 0.32 2.21457888952727e-11 6.42059976973587e-12 0.34 4.44079302862869e-11 9.87138475303484e-12 0.36 9.21415836352311e-11 1.49035469014747e-11 0.38 1.94416182253186e-10 2.22397929950397e-11 0.4 4.13409444551266e-10 3.29255146504696e-11 0.42 8.82020079187911e-10 4.84683866000184e-11 0.44 1.88407253025828e-09 7.10373320017231e-11 0.46 4.02514148660461e-09 1.0374902697429e-10 0.48 8.59587580093593e-09 1.51090778201987e-10 0.5 1.83434642666076e-08 2.19574219005323e-10 0.52 3.9106461128714e-08 3.18820376279724e-10 0.54 8.32707469398285e-08 4.63528822703279e-10 0.56 1.770534490702e-07 6.77384752990772e-10 0.58 3.75798375360179e-07 1.00138197789373e-09 0.6 7.95956317954006e-07 1.51237287488131e-09 0.62 1.68167972791065e-06 2.36529690819607e-09 0.64 3.54308034941215e-06 3.88978162749421e-09 0.66 7.43874025781685e-06 6.81404620843971e-09 0.68 1.5566165535234e-05 1.27637819711611e-08 0.7 3.24623109689196e-05 2.53999030312507e-08 0.72 6.75223179497339e-05 5.29194689159663e-08 0.74 0.000140235522443283 1.13590121108212e-07 0.76 0.000290799711603754 2.48072745784483e-07 0.78 0.000600588225676059 5.47024845178283e-07 0.800000000000001 0.00122832534031335 1.21312440217849e-06 0.820000000000001 0.00246419651963096 2.70033597146548e-06 0.840000000000001 0.00478934152236754 6.02235979239149e-06 0.860000000000001 0.00891525202156808 1.34167059911401e-05 0.880000000000001 0.0158096187244507 2.97405731151693e-05 0.900000000000001 0.0267707553579751 6.54012390646635e-05 0.920000000000001 0.0435605406967315 0.000142576258553287 0.940000000000001 0.0682569746468206 0.000310132113797861 0.960000000000001 0.09677964249538 0.00154219727433435 0.980000000000001 0.119879819081178 0.00503687607232831 1 0.147346105491181 0.00912333340847712 1.02 0.181705640829184 0.015190849835715 1.04 0.224160002325998 0.0255418019048737 0.3 6.93810233655882e-11 1.63787363327484e-11 0.32 1.40182163118042e-10 2.35868796240551e-11 0.34 2.83896029336975e-10 3.39954039562835e-11 0.36 5.75443405137191e-10 4.90916707284816e-11 0.38 1.16654590057634e-09 7.11115809943643e-11 0.4 2.36421850590777e-09 1.0347021891305e-10 0.42 4.78917476642261e-09 1.51487122276945e-10 0.44 9.69508788072924e-09 2.23643389786358e-10 0.46 1.96110654682067e-08 3.33821603336172e-10 0.48 3.96321859744559e-08 5.05398336903162e-10 0.5 8.00060740136058e-08 7.78897275281586e-10 0.52 1.61303254762223e-07 1.22648027634087e-09 0.54 3.24719739940771e-07 1.98000801256823e-09 0.56 6.52539061264192e-07 3.28564645387279e-09 0.58 1.30867472007195e-06 5.61131711581747e-09 0.6 2.61875841347007e-06 9.85934124446767e-09 0.62 5.22746834105432e-06 1.77892450013147e-08 0.64 1.04005047471462e-05 3.28612848191367e-08 0.66 2.06407682489271e-05 6.19234792412644e-08 0.68 4.0866278875425e-05 1.1859160332692e-07 0.7 8.07857987006394e-05 2.30029697787904e-07 0.72 0.000159523287321018 4.50564671568871e-07 0.74 0.000314362304288628 8.89041088066534e-07 0.76 0.0006164190734424 1.76380949397217e-06 0.78 0.00119613140118197 3.51330443555236e-06 0.800000000000001 0.0022778493330581 7.01848642577182e-06 0.820000000000001 0.00421376466986889 1.40505498798839e-05 0.840000000000001 0.00750330832879203 2.81735578752923e-05 0.860000000000001 0.0128049298163085 5.65827279578999e-05 0.880000000000001 0.0209676861634468 0.00011423910680109 0.900000000000001 0.032975692822047 0.000247772504898861 0.920000000000001 0.0479345676311343 0.0008632148683043 0.940000000000001 0.0629356697144988 0.00230548703473012 0.960000000000001 0.079997944183725 0.00437126190873359 0.980000000000001 0.100282026918642 0.00753624361537349 1 0.123793173377492 0.0127734116557801 1.02 0.150000038454237 0.0219868484469626 1.04 0.178545178827331 0.0390327730413022 0.3 7.05995034931809e-11 1.58522538264595e-11 0.32 1.41617797290213e-10 2.30393347446969e-11 0.34 2.85765030966212e-10 3.34102805899041e-11 0.36 5.78177373293951e-10 4.84397144545966e-11 0.38 1.1710061789415e-09 7.0341165068759e-11 0.4 2.3721233028166e-09 1.02490593071491e-10 0.42 4.80394916463746e-09 1.501394353414e-10 0.44 9.72355272671857e-09 2.21650840251971e-10 0.46 1.96667861449834e-08 3.30704202235503e-10 0.48 3.97420951293864e-08 5.00328128746551e-10 0.5 8.0223525952748e-08 7.70442461300501e-10 0.52 1.61733651372169e-07 1.21222036414643e-09 0.54 3.255705797303e-07 1.95583397027208e-09 0.56 6.54217133293891e-07 3.2446506422647e-09 0.58 1.31197389853993e-06 5.54197657116694e-09 0.6 2.62522054644511e-06 9.74258820900021e-09 0.62 5.24007096172697e-06 1.75938054640832e-08 0.64 1.04249110824384e-05 3.25365354229353e-08 0.66 2.06878401173785e-05 6.13876754770462e-08 0.68 4.09566787378649e-05 1.17714022276225e-07 0.7 8.09590634217402e-05 2.28601986781367e-07 0.72 0.000159855613350677 4.48256958703614e-07 0.74 0.000315002064180629 8.85338415815561e-07 0.76 0.000617661802344362 1.7579271243595e-06 0.78 0.00119859482021183 3.50408697854715e-06 0.800000000000001 0.00228291701131384 7.00428258886415e-06 0.820000000000001 0.00422467770284909 1.40288217128402e-05 0.840000000000001 0.00752749825704322 2.8137955077229e-05 0.860000000000001 0.0128588582222727 5.64927358580982e-05 0.880000000000001 0.0210945427650936 0.000113499732671709 0.900000000000001 0.0334079551743977 0.000228183768639819 0.920000000000001 0.0512785919332793 0.000464431559472631 0.940000000000001 0.0731465092007114 0.00151818172219321 0.960000000000001 0.0940832102151722 0.00422388043061445 0.980000000000001 0.118953997568148 0.00788595887638358 1 0.149233518800051 0.0136188850127587 1.02 0.185035399390691 0.0234476731738181 1.04 0.22547940670252 0.0412288112846098 0.3 7.2119371072725e-11 1.50093009738717e-11 0.32 1.43613498397693e-10 2.19003403438698e-11 0.34 2.88672250399781e-10 3.1721753736002e-11 0.36 5.82830977145032e-10 4.57329580344129e-11 0.38 1.17900619123276e-09 6.57512448443325e-11 0.4 2.38653648654387e-09 9.44245570021467e-11 0.42 4.83065366548022e-09 1.35669689130174e-10 0.44 9.7738139990915e-09 1.95408836282346e-10 0.46 1.97621876603242e-08 2.82868487819371e-10 0.48 3.99239646167032e-08 4.12976767090558e-10 0.5 8.05709225563273e-08 6.10963342309831e-10 0.52 1.62397599131334e-07 9.21454171045365e-10 0.54 3.26838994228871e-07 1.42683669968601e-09 0.56 6.56637457921042e-07 2.28483952167937e-09 0.58 1.31658392131363e-06 3.8059462517436e-09 0.6 2.63398108353487e-06 6.61342252732865e-09 0.62 5.25667131447462e-06 1.19748434957045e-08 0.64 1.04561470219051e-05 2.24941356853271e-08 0.66 2.07464253092711e-05 4.35108181022398e-08 0.68 4.10659373115574e-05 8.60152701527284e-08 0.7 8.11614397921453e-05 1.72572101113084e-07 0.72 0.00016022634207548 3.49498545454889e-07 0.74 0.000315666013437581 7.11934392133363e-07 0.76 0.000618795286984286 1.45555094958281e-06 0.78 0.00120034482709927 2.98336258976177e-06 0.800000000000001 0.00228507628863871 6.12609488121864e-06 0.820000000000001 0.00422592155809886 1.25932474588422e-05 0.840000000000001 0.00752429887705025 2.58838713517011e-05 0.860000000000001 0.0128448139809929 5.31076270571292e-05 0.880000000000001 0.0210619281538963 0.00010862800500264 0.900000000000001 0.0333625057085934 0.000221386672539382 0.920000000000001 0.0513693690850275 0.00044968890912715 0.940000000000001 0.0769824004270039 0.000926765039103062 0.960000000000001 0.103810153583738 0.00342278577720613 0.980000000000001 0.131437719467841 0.00781252980049144 1 0.165687581395577 0.0139658408495624 1.02 0.207533345837184 0.0242147893150115 1.04 0.256706826726677 0.0425390464653405 0.3 2.57651045078574e-09 1.51979682201935e-10 0.32 4.74896279465112e-09 2.19555049842851e-10 0.34 8.74974011894899e-09 3.21221266541335e-10 0.36 1.61125965163536e-08 4.77284762909583e-10 0.38 2.96525182043983e-08 7.22011084572034e-10 0.4 5.45300049100065e-08 1.11417432246636e-09 0.42 1.00192983741089e-07 1.75597788789822e-09 0.44 1.83915018278807e-07 2.82722724429989e-09 0.46 3.37236602666249e-07 4.64718213352221e-09 0.48 6.17666312009684e-07 7.78691803856383e-09 0.5 1.12984755544843e-06 1.32738564364317e-08 0.52 2.0637419231491e-06 2.29646947892228e-08 0.54 3.76338718362811e-06 4.02262389695039e-08 0.56 6.84631157910096e-06 7.11795190813231e-08 0.58 1.24351000408665e-05 1.26974817624032e-07 0.6 2.25465216588359e-05 2.27954045207018e-07 0.62 4.08235248574452e-05 4.11269187745564e-07 0.64 7.38348852197721e-05 7.44830539319282e-07 0.66 0.00013335709273041 1.35284942055313e-06 0.68 0.000240246476117057 2.46262097894496e-06 0.7 0.00043066356131042 4.49021982272194e-06 0.72 0.000765173303554462 8.19748987986286e-06 0.74 0.00134003723016046 1.49796623724119e-05 0.76 0.00229780410347191 2.73923276021097e-05 0.78 0.00383353079594564 5.01170154007308e-05 0.800000000000001 0.00619773491889864 9.1730671530093e-05 0.820000000000001 0.00970502088467624 0.000167949683717482 0.840000000000001 0.0147576996098309 0.000307590360839073 0.860000000000001 0.0218847444680708 0.000563712284005813 0.880000000000001 0.0317731441535643 0.00103883481254083 0.900000000000001 0.044904671888923 0.00203866001408961 0.920000000000001 0.0604573523385989 0.00431811671323685 0.940000000000001 0.0795796795996467 0.00818468169521659 0.960000000000001 0.103327182717938 0.0146206223774048 0.980000000000001 0.131550543414265 0.0256392151951131 1 0.163026052833167 0.0448570704953963 1.02 0.196421703851081 0.0789209317841829 1.04 0.231229844259608 0.140092160957657 0.3 2.58547054852653e-09 1.50596402874658e-10 0.32 4.76437616984892e-09 2.17621250507085e-10 0.34 8.77684334235395e-09 3.18401158517904e-10 0.36 1.61608700302305e-08 4.73043033182077e-10 0.38 2.97391116983803e-08 7.15498122759646e-10 0.4 5.46859061062917e-08 1.10404442945309e-09 0.42 1.00474101552592e-07 1.74012267292546e-09 0.44 1.84422048943727e-07 2.80234771136572e-09 0.46 3.38150575960133e-07 4.60814986893803e-09 0.48 6.19312018499794e-07 7.7258071685252e-09 0.5 1.13280612569024e-06 1.31784971965186e-08 0.52 2.06904959644514e-06 2.28165341627005e-08 0.54 3.77288474360157e-06 3.99972038203002e-08 0.56 6.86321247067807e-06 7.08276686640827e-08 0.58 1.24651123341651e-05 1.26437391493524e-07 0.6 2.25996320202025e-05 2.27138227843859e-07 0.62 4.09172334231484e-05 4.10038223312267e-07 0.64 7.39998049216866e-05 7.42984194483372e-07 0.66 0.000133646493609858 1.35009762710063e-06 0.68 0.000240752205096465 2.45855081417775e-06 0.7 0.000431542493604465 4.48425908341949e-06 0.72 0.000766693501338597 8.18887660810535e-06 0.74 0.00134266883983062 1.49674359360521e-05 0.76 0.00230241845779485 2.7375346072779e-05 0.78 0.00384182519367343 5.00939244048339e-05 0.800000000000001 0.00621302052452993 9.16994214921564e-05 0.820000000000001 0.00973350059583582 0.000167904365091765 0.840000000000001 0.0148105989175227 0.000307496950509899 0.860000000000001 0.0219834558271945 0.000563225211029055 0.880000000000001 0.0319794268093541 0.00103175667916983 0.900000000000001 0.0457763380337543 0.00189102475122344 0.920000000000001 0.0643467574490343 0.00355479580192301 0.940000000000001 0.0855494982157594 0.00758586323642106 0.960000000000001 0.111929763151422 0.0143855651347392 0.980000000000001 0.145425927731212 0.0257224870400354 1 0.186103694520332 0.0453878959816079 1.02 0.232495974286946 0.0800627548926417 1.04 0.282398066595445 0.14194107276443 0.3 2.60474479250726e-09 1.38303765016901e-10 0.32 4.79716858880871e-09 1.97187215929967e-10 0.34 8.83315349548879e-09 2.84265731513445e-10 0.36 1.62580924465012e-08 4.15894622404175e-10 0.38 2.99074978968586e-08 6.19776986753978e-10 0.4 5.49780471990253e-08 9.43812119288677e-10 0.42 1.00981371500354e-07 1.47224935976637e-09 0.44 1.85303086481972e-07 2.35530965621421e-09 0.46 3.39680591460926e-07 3.86365477181619e-09 0.48 6.21968022899076e-07 6.48875880366821e-09 0.5 1.13741367749844e-06 1.11281648981103e-08 0.52 2.07703450718474e-06 1.94275632212179e-08 0.54 3.78670355071275e-06 3.44123582103944e-08 0.56 6.88701742507704e-06 6.1659302568807e-08 0.58 1.25060730386756e-05 1.11431717190433e-07 0.6 2.26698908345851e-05 2.02659058325221e-07 0.62 4.10373017160511e-05 3.70222780991762e-07 0.64 7.42039105080257e-05 6.78402545754173e-07 0.66 0.000133990192989469 1.24566950167796e-06 0.68 0.000241320566831017 2.29043095794069e-06 0.7 0.000432450677414178 4.21546350716859e-06 0.72 0.000768056009743745 7.76378779083654e-06 0.74 0.00134448985317503 1.43062204839008e-05 0.76 0.00230435064175776 2.63705343805557e-05 0.78 0.00384281422307887 4.86116095359201e-05 0.800000000000001 0.00621097935090726 8.9585148482216e-05 0.820000000000001 0.00972516956622996 0.000164990201415602 0.840000000000001 0.0147916059851536 0.000303605471737536 0.860000000000001 0.0219486500936692 0.00055816817429192 0.880000000000001 0.0319246010652222 0.00102531431158816 0.900000000000001 0.045709808767651 0.00188213152790213 0.920000000000001 0.0646336057529116 0.00345380426799785 0.940000000000001 0.0895406011858991 0.00658207243890339 0.960000000000001 0.116659126897415 0.0138361450196284 0.980000000000001 0.152161602892709 0.025501168816462 1 0.19718014414853 0.0454175707249779 1.02 0.251485185730178 0.0804655823349082 1.04 0.312906640875321 0.142877908812433 0.3 4.39847426447232e-08 1.66061305823932e-09 0.32 7.52052908801676e-08 2.66722321095843e-09 0.34 1.28576219270154e-07 4.30332529312638e-09 0.36 2.19749811145024e-07 6.98768220249736e-09 0.38 3.75376278687266e-07 1.14265651191458e-08 0.4 6.40771070781361e-07 1.88141436304032e-08 0.42 1.09287218198059e-06 3.11735126322206e-08 0.44 1.86209712021256e-06 5.19373722660844e-08 0.46 3.16766865023211e-06 8.6937184943093e-08 0.48 5.3829651581512e-06 1.46088690299266e-07 0.5 9.13479772069193e-06 2.46264726075117e-07 0.52 1.54807404692602e-05 4.16192647290137e-07 0.54 2.62031671448548e-05 7.04804408932935e-07 0.56 4.43009214255102e-05 1.19547505989047e-06 0.58 7.47952100368744e-05 2.0303042637293e-06 0.6 0.000126015187995986 3.45152747156245e-06 0.62 0.0002115650382841 5.87214479362062e-06 0.64 0.00035313515185643 9.99638711561514e-06 0.66 0.000584092617054897 1.70251922766614e-05 0.68 0.000953296930278345 2.90066896814688e-05 0.7 0.00152809166935246 4.94340405003126e-05 0.72 0.00239574053374104 8.42652223454378e-05 0.74 0.00366428254005115 0.000143662585816016 0.76 0.00546558710708737 0.000244960259469401 0.78 0.00796310174730814 0.000417726253465907 0.800000000000001 0.0113648109402643 0.000712398897994307 0.820000000000001 0.0159407459494088 0.00121502890339678 0.840000000000001 0.02204461289517 0.00207252207073143 0.860000000000001 0.0301371065091441 0.00353703464122569 0.880000000000001 0.0407571941999391 0.00606600770204519 0.900000000000001 0.0540639472110145 0.0106485284468916 0.920000000000001 0.0706108812045892 0.0186053157130544 0.940000000000001 0.0918264492403001 0.0318388909222655 0.960000000000001 0.118659989237856 0.0539989142455562 0.980000000000001 0.151446744306912 0.0912869912252152 1 0.189303453173384 0.154200263405888 1.02 0.23032975816357 0.260617459277274 1.04 0.272929127536559 0.441096113331097 0.3 4.41178092189039e-08 1.64623317045135e-09 0.32 7.54283548420455e-08 2.64580435829167e-09 0.34 1.289506554376e-07 4.27139166228518e-09 0.36 2.20378764841379e-07 6.94008875563674e-09 0.38 3.7643291067528e-07 1.13557273108792e-08 0.4 6.42545673181099e-07 1.87089229102997e-08 0.42 1.09585054036172e-06 3.1017613767078e-08 0.44 1.86709044390218e-06 5.17070457519428e-08 0.46 3.17601146691071e-06 8.65980806227314e-08 0.48 5.3968917457519e-06 1.45590926239136e-07 0.5 9.15798813513429e-06 2.45536407628215e-07 0.52 1.55192546184429e-05 4.15130178786878e-07 0.54 2.62669523358349e-05 7.03258587670089e-07 0.56 4.44062237569936e-05 1.19323109422406e-06 0.58 7.49683110653611e-05 2.02705340095379e-06 0.6 0.000126297908193573 3.446827285124e-06 0.62 0.000212022265860869 5.86536439318135e-06 0.64 0.000353864214454172 9.98663249221564e-06 0.66 0.000585234293037663 1.70112045179502e-05 0.68 0.000955051065300387 2.89867008420249e-05 0.7 0.00153075143266076 4.94055500455687e-05 0.72 0.00239977786824839 8.4224611500806e-05 0.74 0.00367052864591628 0.000143604413516578 0.76 0.00547554280940681 0.000244875965156106 0.78 0.00797940408708001 0.000417601678213389 0.800000000000001 0.0113919138789454 0.000712208594234792 0.820000000000001 0.0159859809155002 0.00121471554100556 0.840000000000001 0.0221201981366907 0.00207185613617246 0.860000000000001 0.0302671043266992 0.00353394066708343 0.880000000000001 0.0410483323978229 0.00602809480418393 0.900000000000001 0.0552628142235635 0.0102893415831993 0.920000000000001 0.0732694434438699 0.0178572378157935 0.940000000000001 0.0950104386801419 0.0313472664719165 0.960000000000001 0.123334881279271 0.0536715587460807 0.980000000000001 0.159613165650566 0.0911092916114932 1 0.204736786349562 0.154289226171574 1.02 0.258176337916531 0.261162784105745 1.04 0.317510653744857 0.442260058201136 0.3 4.44083669693171e-08 1.46370704887897e-09 0.32 7.5897387233895e-08 2.3598271694489e-09 0.34 1.29708175730992e-07 3.82398486093876e-09 0.36 2.21602579915934e-07 6.24129262060035e-09 0.38 3.78410289394488e-07 1.02663030951857e-08 0.4 6.45740458839385e-07 1.70139295976965e-08 0.42 1.10101105536715e-06 2.83861979267499e-08 0.44 1.87542266491774e-06 4.76314826816315e-08 0.46 3.18943379667234e-06 8.03047029396878e-08 0.48 5.41850814715491e-06 1.35896794721295e-07 0.5 9.1927461366239e-06 2.30646420890676e-07 0.52 1.5575036944315e-05 3.92324641429755e-07 0.54 2.63562625590885e-05 6.68426574916735e-07 0.56 4.45487263845085e-05 1.14017791096932e-06 0.58 7.51944019310635e-05 1.94649423634689e-06 0.6 0.00012665303419516 3.32497277764389e-06 0.62 0.000212570298080655 5.68203286385878e-06 0.64 0.000354684844951432 9.71293932479494e-06 0.66 0.000586403656842031 1.66071439537992e-05 0.68 0.000956589567338853 2.8399337691028e-05 0.7 0.00153252821510026 4.85688260763544e-05 0.72 0.00240138720796098 8.30614333591311e-05 0.74 0.00367118357615469 0.000142030532481398 0.76 0.0054740245440363 0.000242804024585771 0.78 0.00797405984944612 0.000414943845414029 0.800000000000001 0.0113806636363581 0.000708877272997181 0.820000000000001 0.015966307377012 0.00121062259404446 0.840000000000001 0.022089146636116 0.0020669109140703 0.860000000000001 0.0302214530263639 0.00352804203722086 0.880000000000001 0.0409857841951869 0.00602099438207017 0.900000000000001 0.0552006432448286 0.0102741975900495 0.920000000000001 0.0739202779906867 0.0175366068427867 0.940000000000001 0.0971194346041152 0.0305258371442243 0.960000000000001 0.12530854578031 0.0532273032117909 0.980000000000001 0.162472054261999 0.0907992131805371 1 0.209991352334 0.154079801011086 1.02 0.268903168041673 0.261151105120157 1.04 0.338324953071619 0.442622191498746 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_internal_ac.standard0000644000175000017500000002651514163340332026314 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 6.29158312807909e-05 -9.4870017179291e-08 0.0434109140380634 3.34028839385577e-06 2.70553352092936e-14 3.35463583809748e-15 8.15007483628066e-15 3.95296795712617e-15 158489319.2463 6.29176139163024e-05 -9.50910487955775e-08 0.0434109135010671 3.34035497682223e-06 2.70553350125078e-14 3.35463581369772e-15 8.15007477700142e-15 3.95296794977605e-15 251188643.151556 6.29220916942841e-05 -9.56462550992814e-08 0.0434109121521934 3.34052222566796e-06 2.70553345182041e-14 3.35463575240827e-15 8.15007462809872e-15 3.95296793131338e-15 398107170.55492 6.29333393631359e-05 -9.70408701907651e-08 0.043410908763976 3.34094233574728e-06 2.70553332765695e-14 3.35463559845616e-15 8.15007425407207e-15 3.95296788493726e-15 630957344.483199 6.29615922254911e-05 -1.00543984351656e-07 0.0434109002531602 3.34199760438521e-06 2.70553301577249e-14 3.35463521174601e-15 8.15007331455974e-15 3.95296776844574e-15 1000000000.00595 6.3032560178311e-05 -1.09343405718102e-07 0.043410878874966 3.3446483182853e-06 2.70553223235445e-14 3.3546342403744e-15 8.15007095461243e-15 3.95296747583239e-15 1584893192.47244 6.3210823434745e-05 -1.31446530376812e-07 0.0434108251754246 3.35130660379392e-06 2.70553026449932e-14 3.35463180040174e-15 8.15006502669884e-15 3.95296674082162e-15 2511886431.53052 6.36585993462058e-05 -1.8696692748216e-07 0.0434106902886197 3.368031418099e-06 2.70552532148334e-14 3.35462567148317e-15 8.15005013649116e-15 3.95296489456276e-15 3981071705.5729 6.47833543658549e-05 -3.26426964832682e-07 0.0434103514704588 3.41004198267117e-06 2.70551290526823e-14 3.35461027643454e-15 8.15001273422049e-15 3.95296025699994e-15 6309573444.86956 6.76085657048686e-05 -6.76729094619215e-07 0.043409500411434 3.51556604908297e-06 2.70548171764863e-14 3.35457160644402e-15 8.14991878547846e-15 3.95294860815655e-15 10000000000.1191 7.47048884490731e-05 -1.5566126405478e-06 0.0434073627343579 3.78061978938364e-06 2.70540338106146e-14 3.35447447575171e-15 8.14968280646137e-15 3.95291934876943e-15 15848931924.8188 9.25282328273491e-05 -3.76655545418554e-06 0.0434019936782891 4.44633698720566e-06 2.70520662845861e-14 3.35423051929129e-15 8.14909011424045e-15 3.95284585998491e-15 25118864315.4548 0.00013728701728466 -9.31626329573182e-06 0.0433885106630803 6.11811597180463e-06 2.70471253446842e-14 3.3536178848498e-15 8.14760171886397e-15 3.95266131164223e-15 39810717055.9661 0.000249643918257381 -2.324756151887e-05 0.0433546645740277 1.03147425803747e-05 2.703472222199e-14 3.35208000333424e-15 8.14386543571978e-15 3.95219804437269e-15 63095734449.0713 0.000531417698667658 -5.81851090337371e-05 0.0432697838022915 2.08392349277969e-05 2.70036171030326e-14 3.34822323365912e-15 8.13449541378868e-15 3.95103624150389e-15 100000000000 0.00123634977136475 -0.00014559067866745 0.0430574319707442 4.71690523925358e-05 2.69257993729861e-14 3.33857449829049e-15 8.11105381119711e-15 3.94812968255019e-15 100000000 0.00040702186349309 -3.05885797943694e-07 0.204011520816879 6.04257145254539e-06 6.05743025721267e-14 3.39149595538821e-15 5.29599108726762e-14 6.18268627768301e-15 158489319.2463 0.000407030646040363 -3.06377523109954e-07 0.204011513138325 6.04300136638747e-06 6.05743004387187e-14 3.39149583594104e-15 5.29599090074439e-14 6.1826861732507e-15 251188643.151556 0.000407052706798916 -3.07612680730343e-07 0.204011493850669 6.04408126100052e-06 6.05742950798406e-14 3.39149553590334e-15 5.29599043221928e-14 6.18268591092864e-15 398107170.55492 0.00040710812090175 -3.10715255433844e-07 0.204011445402285 6.04679383278376e-06 6.05742816189516e-14 3.39149478224296e-15 5.29598925533778e-14 6.18268525200562e-15 630957344.483199 0.000407247314726217 -3.18508564652309e-07 0.204011323705541 6.0536074997231e-06 6.05742478067534e-14 3.39149288913516e-15 5.29598629914741e-14 6.18268359686714e-15 1000000000.00595 0.000407596953119815 -3.38084433959887e-07 0.204011018017739 6.07072262370582e-06 6.05741628745182e-14 3.39148813387268e-15 5.29597887354749e-14 6.18267943935537e-15 1584893192.47244 0.000408475200732034 -3.87256552330856e-07 0.204010250168478 6.11371365972008e-06 6.05739495354396e-14 3.39147618925218e-15 5.29596022137566e-14 6.1826689962094e-15 2511886431.53052 0.0004106812317069 -5.10769801573307e-07 0.204008321442195 6.22170092409539e-06 6.05734136585309e-14 3.39144618609314e-15 5.29591336981782e-14 6.18264276453719e-15 3981071705.5729 0.00041622235882427 -8.21011417640335e-07 0.204003476851331 6.49294424106692e-06 6.0572067638414e-14 3.39137082390645e-15 5.2957956876816e-14 6.18257687560278e-15 6309573444.86956 0.000430139954709974 -1.60024231198751e-06 0.203991308738876 7.17422348125679e-06 6.05686868525839e-14 3.39118153742424e-15 5.2955001065877e-14 6.18241138299755e-15 10000000000.1191 0.000465092523417199 -3.55719821134209e-06 0.203960749812601 8.88518417066109e-06 6.05601963668722e-14 3.39070616446264e-15 5.29475778596148e-14 6.1819957658391e-15 15848931924.8188 0.000552846199780355 -8.47043008529921e-06 0.203884027035835 1.31808081022179e-05 6.05388797265543e-14 3.38951266920413e-15 5.29289407847445e-14 6.18095229650442e-15 25118864315.4548 0.000773001227650449 -2.07966680843416e-05 0.203691546153468 2.39576011160812e-05 6.04854008782851e-14 3.38651844727762e-15 5.28821843876621e-14 6.17833445723002e-15 39810717055.9661 0.00132429384966767 -5.16629359676772e-05 0.203209552662996 5.09438868031664e-05 6.03514839072762e-14 3.3790205832827e-15 5.27651011804646e-14 6.17177909716593e-15 63095734449.0713 0.00269837052908395 -0.000128595978757024 0.202008201532148 0.000118206216001409 6.00177007592846e-14 3.36033243174686e-15 5.2473275572546e-14 6.1554401021758e-15 100000000000 0.00608377457398193 -0.000318141029733369 0.199048352901691 0.000283924887126608 5.91953370322403e-14 3.31428919067535e-15 5.17542854257425e-14 6.11518463422576e-15 100000000 0.00261867207773986 -8.26090815078082e-07 0.666289478138181 6.16528600123793e-05 1.63315335011692e-13 3.57976296114204e-15 4.22768192816873e-13 1.26520083477705e-14 158489319.2463 0.00261873342709051 -8.27435548549108e-07 0.666289319325422 6.16563410733991e-05 1.633152964004e-13 3.57976211481041e-15 4.22768092865273e-13 1.26520061569036e-14 251188643.151556 0.00261888752956391 -8.30813363504431e-07 0.666288920406138 6.1665085096082e-05 1.63315199413301e-13 3.57975998892322e-15 4.22767841798413e-13 1.26520006536993e-14 398107170.55492 0.00261927461666872 -8.39298033363376e-07 0.666287918368291 6.16870490422083e-05 1.63314955793231e-13 3.57975464894718e-15 4.2276721114829e-13 1.26519868303039e-14 630957344.483199 0.0026202469304214 -8.60610448807536e-07 0.666285401376206 6.17422196914404e-05 1.63314343850488e-13 3.57974123560409e-15 4.227656270351e-13 1.26519521076865e-14 1000000000.00595 0.00262268924000525 -9.14144111528382e-07 0.666279079061134 6.18808002730651e-05 1.63312806740043e-13 3.57970754325293e-15 4.22761647975034e-13 1.26518648895628e-14 1584893192.47244 0.00262882384153662 -1.04861014789189e-06 0.666263198648604 6.22288874500102e-05 1.63308945820791e-13 3.57962291469053e-15 4.22751653358408e-13 1.26516458147825e-14 2511886431.53052 0.00264423198458841 -1.38634551885237e-06 0.666223312167513 6.3103170317353e-05 1.63299248435258e-13 3.5794103550012e-15 4.22726550100774e-13 1.26510955694998e-14 3981071705.5729 0.0026829274201064 -2.23452152716358e-06 0.666123142747231 6.52988116872482e-05 1.63274894783081e-13 3.57887654052889e-15 4.22663506716258e-13 1.26497137040287e-14 6309573444.86956 0.00278007507129224 -4.36392790020201e-06 0.665871660272082 7.08111259712502e-05 1.63213753202035e-13 3.57753636121681e-15 4.22505231802266e-13 1.26462444321891e-14 10000000000.1191 0.00302377832466699 -9.70572725955e-06 0.665240794815097 8.46392413012475e-05 1.63060374277939e-13 3.57417440594075e-15 4.22108185543334e-13 1.26375414648621e-14 15848931924.8188 0.00363391770129962 -2.30795418725086e-05 0.663661349931476 0.000119259532785308 1.6267637234181e-13 3.56575736075159e-15 4.21114134156803e-13 1.26157525761781e-14 25118864315.4548 0.00515391786766206 -5.63968480735762e-05 0.65972658260157 0.000205506791740656 1.6171973353246e-13 3.54478852874731e-15 4.18637719208404e-13 1.25614713484897e-14 39810717055.9661 0.00889428236205381 -0.000138382937233999 0.65004404154653 0.000417741100837609 1.59365669424026e-13 3.4931891431332e-15 4.12543841884339e-13 1.24278979573475e-14 63095734449.0713 0.0178262984872053 -0.000334166281749491 0.626922066945996 0.000924558089932322 1.53744148150443e-13 3.36996945557488e-15 3.97991620943074e-13 1.2108923781071e-14 100000000000 0.0377093444302559 -0.000769988293190342 0.575451572845354 0.0020527541587362 1.41230403864005e-13 3.09567721578464e-15 3.65597761203634e-13 1.13988737640659e-14 100000000 0.0910193593450414 -0.00204746596066056 0.85474725821971 0.0238482873284582 6.83622097108027e-12 1.79734515792631e-13 1.53681009727448e-11 4.07474581738084e-13 158489319.2463 0.0910926837226632 -0.00204939376857028 0.854582422055281 0.0238526211185551 6.83490289367006e-12 1.79699861559763e-13 1.53651378814542e-11 4.07396677621983e-13 251188643.151556 0.0912767415787218 -0.00205423292578191 0.854168652555833 0.02386349973955 6.83159427367067e-12 1.79612872975448e-13 1.53576999699718e-11 4.07201123768644e-13 398107170.55492 0.0917382889883672 -0.00206636769972594 0.853131075324686 0.0238907792018248 6.82329750751835e-12 1.79394738544139e-13 1.53390485043327e-11 4.06710748750769e-13 630957344.483199 0.092892713961552 -0.00209671926446706 0.850535881326816 0.0239590107460756 6.80254558942116e-12 1.78849139479446e-13 1.52923973537243e-11 4.05484220001975e-13 1000000000.00595 0.0957617611428664 -0.00217215081982291 0.844086147305545 0.0241285839312169 6.75097165997011e-12 1.77493183488327e-13 1.51764570758657e-11 4.02435976130552e-13 1584893192.47244 0.102780184582572 -0.00235667570308414 0.828308447750945 0.0245434033266914 6.62480863354989e-12 1.74176168218149e-13 1.48928374933686e-11 3.94979191740086e-13 2511886431.53052 0.119304512597093 -0.002791125081074 0.791161090514019 0.0255200630874616 6.32776767416889e-12 1.66366515690846e-13 1.42250774112382e-11 3.77422777217627e-13 3981071705.5729 0.15493742753203 -0.0037279678813286 0.711056857572267 0.027626123566612 5.68723117377296e-12 1.49525849980732e-13 1.27851254699194e-11 3.39564280055654e-13 6309573444.86956 0.219074780153946 -0.00541423511882366 0.566873496652332 0.0314169204700085 4.53429952425411e-12 1.19213546959506e-13 1.01932885240055e-11 2.71420997737972e-13 10000000000.1191 0.304182456895656 -0.00765184364306179 0.375547999557929 0.0364471548694481 3.0044057864978e-12 7.89903450129729e-14 6.75402556813647e-12 1.80997614069489e-13 15848931924.8188 0.380852809548563 -0.00966762225693631 0.203189948024707 0.0409787066647375 1.6261812022311e-12 4.27547526888045e-14 3.6557209992923e-12 9.95385379984587e-14 25118864315.4548 0.429285346865378 -0.0109409863352378 0.0943116466488507 0.0438412805780469 7.55558969532668e-13 1.98647878365213e-14 1.69852703243089e-12 4.80809718716395e-14 39810717055.9661 0.453391562776767 -0.011574774922537 0.0401198989841985 0.0452660629379954 3.22226158959527e-13 8.47181803764857e-15 7.24377360341573e-13 2.24691152965139e-14 63095734449.0713 0.463972375852991 -0.0118529603746506 0.0163338035463545 0.0458914350777095 1.32025694261004e-13 3.47116242798969e-15 2.96799028407188e-13 1.12274393755566e-14 100000000000 0.468358630748384 -0.0119682815973553 0.0064733252631722 0.0461506818472632 5.31784720882106e-14 1.39815064807967e-15 1.19547286211183e-13 6.56722510983855e-15 tmp_ns50wwy/tests/hicum2/npn/reference/ypara_npn_full_subcoupl_peri_con_ac.standard0000644000175000017500000002662014163340332031231 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 100000000 0.000106845632352258 -7.90320117298337e-08 0.0396996184043161 4.96667480709423e-06 7.70073130204287e-14 2.58066653424409e-14 5.04150560239797e-13 4.6493456770171e-14 158489319.2463 0.000106658846725758 -8.79290282369687e-08 0.0396651793269502 4.03069058529937e-06 7.85687651942146e-14 2.57589917387347e-14 2.30456264159056e-13 5.48437340730848e-14 251188643.151556 0.000106602153312636 -9.76838217463966e-08 0.0396509743205899 3.88571768106249e-06 7.92112111208515e-14 2.57393604986456e-14 1.17845008507681e-13 5.82696760489546e-14 398107170.55492 0.000106630109502384 -1.16976345721344e-07 0.0396451553188157 4.42678249862327e-06 7.94703816336247e-14 2.57314001713898e-14 7.24109519642879e-14 5.96275137109248e-14 630957344.483199 0.000106769162052488 -1.63275591572719e-07 0.039642608235759 6.11509472420169e-06 7.95740694278099e-14 2.57281150208236e-14 5.42207451386426e-14 6.01113157577469e-14 1000000000.00595 0.000107145976691667 -2.78376341840638e-07 0.0396410655947964 1.02715487105276e-05 7.96153352869496e-14 2.57265689780553e-14 4.69494604665624e-14 6.01634204884064e-14 1584893192.47244 0.000108103292894291 -5.65222442989356e-07 0.0396392459304026 1.95091697903771e-05 7.96315317662264e-14 2.57254362773767e-14 4.40214047901615e-14 5.98788724243058e-14 2511886431.53052 0.000110511432247149 -1.27684249368646e-06 0.0396360184307772 3.70275172865142e-05 7.9637398276815e-14 2.57240202606359e-14 4.27996716741574e-14 5.92155367424492e-14 3981071705.5729 0.0001165591019207 -3.03593616046496e-06 0.0396300750730268 6.25944442329551e-05 7.96383723420785e-14 2.57220672248126e-14 4.22412808139892e-14 5.82437665137065e-14 6309573444.86956 0.000131743958353155 -7.39812109533924e-06 0.0396189526061953 9.02364614029927e-05 7.96355281947746e-14 2.57196705434625e-14 4.1960952233291e-14 5.7297741480841e-14 10000000000.1191 0.000169872524448205 -1.82890553063709e-05 0.0395953058643643 0.000117579143021074 7.9626456748629e-14 2.5716410692237e-14 4.18191366537938e-14 5.66637432432253e-14 15848931924.8188 0.000265593133193839 -4.55880880243125e-05 0.0395390172841998 0.000155842187766708 7.9603002704725e-14 2.57101973406878e-14 4.17440995364019e-14 5.63338966950747e-14 25118864315.4548 0.000505718573029082 -0.000114065603322312 0.0393994354611262 0.000235740126214801 7.95439229492303e-14 2.56956522218971e-14 4.16846457259208e-14 5.61773299033366e-14 39810717055.9661 0.0011069278218668 -0.000285623720486467 0.0390506464476778 0.000428840031861777 7.93959244150079e-14 2.56596955830836e-14 4.15905860308596e-14 5.60879508175898e-14 63095734449.0713 0.0026048611689259 -0.000713812038714447 0.0381816244591741 0.000909027011341046 7.90272265235348e-14 2.55702449440304e-14 4.13785842002083e-14 5.59913673752631e-14 100000000000 0.00629208138316655 -0.00177245450567603 0.0360407048819441 0.00210287123777042 7.81201498220353e-14 2.53497695493878e-14 4.08656565252811e-14 5.58030713561948e-14 100000000 0.00056444299032176 4.46101214380959e-08 0.139925325593444 2.82404014346205e-05 5.51611682513982e-14 2.80261862852778e-14 4.64421618653134e-12 -1.30329398230164e-13 158489319.2463 0.000561078130953978 -1.04524673138017e-07 0.139616089107265 1.50623184460574e-05 8.4679038366147e-14 2.67568204081476e-14 1.94880517808506e-12 -1.44233933688743e-14 251188643.151556 0.000559745219368129 -1.72984322059662e-07 0.13948941149877 9.9152229187105e-06 9.675812181164e-14 2.62373615352651e-14 8.45803540636264e-13 3.29970621361797e-14 398107170.55492 0.000559319621021919 -2.19259803112644e-07 0.139438083027744 8.45606464677795e-06 1.01620410133765e-13 2.60282136965688e-14 4.01789679500697e-13 5.20613001871708e-14 630957344.483199 0.000559428473979894 -2.84783077710112e-07 0.139416727611811 9.37688207874876e-06 1.03564573858723e-13 2.59444736575335e-14 2.24218301337434e-13 5.96244895973321e-14 1000000000.00595 0.000560173031030874 -4.2874290850097e-07 0.139406200428213 1.33065949370348e-05 1.04339569568328e-13 2.59108222935109e-14 1.53350610000433e-13 6.24987621621515e-14 1584893192.47244 0.00056223053755154 -7.80302797943491e-07 0.139397369732936 2.26437454796669e-05 1.04647443139576e-13 2.58968515327028e-14 1.25008940836473e-13 6.3336201897791e-14 2511886431.53052 0.000567470354422617 -1.65125820563733e-06 0.139384048259409 4.06388281930514e-05 1.04767964591207e-13 2.5890207856906e-14 1.13526144474862e-13 6.31156654357582e-14 3981071705.5729 0.000580650784148163 -3.80890545606569e-06 0.139359836613731 6.73817779793806e-05 1.04811095273024e-13 2.58858975735035e-14 1.08698951230509e-13 6.23153206826484e-14 6309573444.86956 0.000613743204075964 -9.17048652872542e-06 0.139313042516377 9.7796074452372e-05 1.04816738943448e-13 2.58818927707395e-14 1.06566719153469e-13 6.14334012566228e-14 10000000000.1191 0.000696803748880555 -2.25672658314412e-05 0.139210850430068 0.000131892871983508 1.0479067243765e-13 2.5876331987547e-14 1.05594567301601e-13 6.0820894447888e-14 15848931924.8188 0.000905140219112258 -5.61373123460583e-05 0.138965397125564 0.000186954740606371 1.04709595970656e-13 2.58650503052663e-14 1.05098827326041e-13 6.04921065020421e-14 25118864315.4548 0.00142664287003509 -0.000140223315536313 0.138356735669315 0.000308776018966894 1.04500519261583e-13 2.58381244542114e-14 1.04688897836252e-13 6.03178747355266e-14 39810717055.9661 0.00272530633301468 -0.000350095185974957 0.136843676107089 0.000605859863750113 1.0397755431945e-13 2.57716120174352e-14 1.04009647435381e-13 6.01766922780358e-14 63095734449.0713 0.00591790781446365 -0.000869064571898273 0.13312554199404 0.00133928618219686 1.02691565899447e-13 2.56080951433616e-14 1.0247661838343e-13 5.99503180445121e-14 100000000000 0.0135246665656177 -0.00212388592947283 0.124269913242538 0.00312237320885028 9.96307982107169e-14 2.52171326715172e-14 9.88807853068608e-14 5.94554281839518e-14 100000000 0.00268931760432536 3.516519513902e-06 0.265862597757808 0.000107275251325478 -3.26924742999382e-13 6.19238856825245e-14 1.20542375421337e-11 -8.34203439988316e-13 158489319.2463 0.00266054208591455 1.30453333977427e-06 0.265133648219149 5.15782956208577e-05 -4.87700670590393e-14 4.06191462471902e-14 5.02068580823352e-12 -2.95486990666681e-13 251188643.151556 0.00264892124786111 3.94413799365405e-07 0.264836487178287 2.91571831279591e-05 6.44885202165315e-14 3.19442900484712e-14 2.15676655085342e-12 -7.61431666508862e-14 398107170.55492 0.00264449443996403 5.01443262680956e-09 0.264716236170462 2.07923643020247e-05 1.09987482187672e-13 2.84593074108082e-14 1.00623309030751e-12 1.1948356555383e-14 630957344.483199 0.00264333318303503 -2.10302880872768e-07 0.264666019617813 1.90277732824429e-05 1.28166147940637e-13 2.70667580800171e-14 5.46495586068719e-13 4.70839850616159e-14 1000000000.00595 0.002644396491181 -4.45901699891645e-07 0.264640694388722 2.20658645795346e-05 1.3541253089208e-13 2.65112765593527e-14 3.63107964279745e-13 6.09470605564498e-14 1584893192.47244 0.00264865311929563 -9.14099356518369e-07 0.264618083447359 3.14728421161869e-05 1.38296261454852e-13 2.6289339357917e-14 2.89843904938074e-13 6.61555637710229e-14 2511886431.53052 0.00265997049840623 -2.03254116746923e-06 0.264581197166174 5.04606129531626e-05 1.39437845923802e-13 2.61996314662394e-14 2.60281624285077e-13 6.76651597661752e-14 3981071705.5729 0.00268862440804778 -4.79282303991451e-06 0.264507555119682 7.97358396020242e-05 1.39876222888621e-13 2.61616433638722e-14 2.47997988832256e-13 6.75408389194285e-14 6309573444.86956 0.00276062206231177 -1.16577699895236e-05 0.264350161175611 0.000116084323518839 1.40011533664873e-13 2.61427542063564e-14 2.42650927085699e-13 6.69165918023586e-14 10000000000.1191 0.00294122081106319 -2.88144652366362e-05 0.26398494848228 0.000164559189634039 1.39968258649672e-13 2.61276049236456e-14 2.40156885160713e-13 6.63940125609276e-14 15848931924.8188 0.00339329843368359 -7.17504208276524e-05 0.263091695391497 0.000255230893564162 1.39708553051203e-13 2.61033750467147e-14 2.38634559885453e-13 6.60758806418491e-14 25118864315.4548 0.00451917147614101 -0.000178884383367524 0.260878242996115 0.000465226528335583 1.3900211774577e-13 2.60486964529006e-14 2.36824885189537e-13 6.5845086494148e-14 39810717055.9661 0.00728758548020216 -0.000443728426085672 0.255441415478833 0.000976897292862378 1.37242156893724e-13 2.59164177490824e-14 2.3317695460942e-13 6.55334178189634e-14 63095734449.0713 0.0138868636889167 -0.00108368195745917 0.242489038376926 0.00220903766216701 1.33040755141331e-13 2.56012944066924e-14 2.24798632448399e-13 6.48938327818433e-14 100000000000 0.0285219971221083 -0.00255247998149954 0.213799024057911 0.00502868756423869 1.23736857970834e-13 2.48988309856584e-14 2.06367725354104e-13 6.35082642854166e-14 100000000 0.0107917935303041 2.52169893692595e-05 0.346862468529489 0.00029569265085988 -2.18187597933475e-12 3.63532947512906e-13 1.14917692960908e-11 -1.48835772720323e-12 158489319.2463 0.0106502167661352 5.12422388605845e-06 0.346200670714297 0.000202051560727612 -7.70816591256098e-13 1.63480942545476e-13 4.90390093014485e-12 -5.54372805609571e-13 251188643.151556 0.0105928536282364 -3.06068323898195e-06 0.345930815364229 0.000164256084664471 -1.97041748363488e-13 8.21343363041794e-14 2.22508514567181e-12 -1.74599539292933e-13 398107170.55492 0.0105703401491623 -6.38384388491973e-06 0.345820582567904 0.000149783502605472 3.33324768151903e-14 4.9473009188044e-14 1.14949710356617e-12 -2.21436383002387e-14 630957344.483199 0.0105626498115104 -7.80393649147917e-06 0.345771846230274 0.000145729863484156 1.25356854450408e-13 3.64258686559144e-14 7.19781575410082e-13 3.86933940923453e-14 1000000000.00595 0.0105628577444756 -8.60240353988591e-06 0.345740803339228 0.000148225142305447 1.62038591331388e-13 3.12242352164513e-14 5.48337382671242e-13 6.2796404260281e-14 1584893192.47244 0.0105711623644057 -9.50213071604344e-06 0.34570035294344 0.000158306239577077 1.76641053998651e-13 2.91513067688553e-14 4.79742703275918e-13 7.20736664238091e-14 2511886431.53052 0.0105951100007975 -1.1312417167713e-05 0.345618548123719 0.000179639000312981 1.82434173739731e-13 2.83237349526357e-14 4.51866357889582e-13 7.51860400019056e-14 3981071705.5729 0.0106564383381618 -1.56513089100291e-05 0.345435981103873 0.000214618612756456 1.84687754686933e-13 2.79900061421113e-14 4.39981617207552e-13 7.56769353960205e-14 6309573444.86956 0.0108107194476105 -2.64067285413946e-05 0.345013844218856 0.00026452826976725 1.85454086638839e-13 2.78485741568367e-14 4.34400434117528e-13 7.52720094928704e-14 10000000000.1191 0.0111970945844045 -5.32501816976665e-05 0.343996203528514 0.000346111557810169 1.85433372949141e-13 2.77727478064002e-14 4.31097129066147e-13 7.47971676105652e-14 15848931924.8188 0.0121595631110787 -0.000120150203066477 0.341489127289446 0.000518442432418553 1.84615233094157e-13 2.76949167273746e-14 4.27602539245328e-13 7.44094693133894e-14 25118864315.4548 0.0145272875849024 -0.000285292849143677 0.33533666691415 0.000927185133442532 1.82302485869484e-13 2.75472400951059e-14 4.21012428887854e-13 7.39371648621753e-14 39810717055.9661 0.0201775837257191 -0.000682995533267197 0.32066472508581 0.00190178391813789 1.76670293789758e-13 2.72114559509001e-14 4.06092661044606e-13 7.30296102961722e-14 63095734449.0713 0.0327377015395726 -0.00158796586549639 0.288075266695613 0.00410158939498817 1.64120973247895e-13 2.64697436811266e-14 3.73259737444403e-13 7.10966432617897e-14 100000000000 0.0567509783678913 -0.00342680498446061 0.225886873483625 0.00849388150046387 1.40180314589944e-13 2.50460883048516e-14 3.10767306063272e-13 6.74216050919078e-14 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subcoupl_peri_bias_ac.standard0000644000175000017500000000611014163340332031361 0ustar carstencarstenFreq N(coll) 1000 6.73930833920345e-24 3162.27766017779 6.73930833920155e-24 10000.0000000595 6.73930833918254e-24 31622.7766019662 6.73930833899245e-24 100000.000001191 6.73930833709158e-24 316227.766021545 6.73930831808934e-24 1000000.00001786 6.73930812871718e-24 3162277.66023428 6.73930629860458e-24 10000000.0002382 6.7392932105373e-24 31622776.6025311 6.73932536138665e-24 100000000.002977 6.74036921854938e-24 316227766.027194 6.75113491613061e-24 1000000000.03572 6.85217026030277e-24 3162277660.29077 7.46580931783368e-24 10000000000.4168 8.5127784602661e-24 31622776603.096 1.11547822006141e-23 100000000000 3.55036205193986e-23 1000 3.90020085096831e-22 3162.27766017779 3.90020084953299e-22 10000.0000000595 3.90020083517983e-22 31622.7766019662 3.90020069164856e-22 100000.000001191 3.9001992563692e-22 316227.766021545 3.90018490691343e-22 1000000.00001786 3.9000417453549e-22 3162277.66023428 3.89864266600447e-22 10000000.0002382 3.88728709573382e-22 31622776.6025311 3.85258966954603e-22 100000000.002977 3.83510603592499e-22 316227766.027194 3.83271848003286e-22 1000000000.03572 3.83335770419043e-22 3162277660.29077 3.838789698034e-22 10000000000.4168 3.8481932898659e-22 31622776603.096 3.87279132422152e-22 100000000000 4.10008796725253e-22 1000 1.3954721957374e-20 3162.27766017779 1.39547218620106e-20 10000.0000000595 1.39547209083772e-20 31622.7766019662 1.39547113720761e-20 100000.000001191 1.3954616012358e-20 316227.766021545 1.39536627443885e-20 1000000.00001786 1.39441628714632e-20 3162277.66023428 1.38523343445036e-20 10000000.0002382 1.3169162903606e-20 31622776.6025311 1.15939822894785e-20 100000000.002977 1.10018854249424e-20 316227766.027194 1.09258872279554e-20 1000000000.03572 1.09177574276524e-20 3162277660.29077 1.09147415381475e-20 10000000000.4168 1.09044238597112e-20 31622776603.096 1.08216713695319e-20 100000000000 1.01012092079518e-20 1000 2.64240900045418e-20 3162.27766017779 2.64240899537191e-20 10000.0000000595 2.64240894454912e-20 31622.7766019662 2.64240843632311e-20 100000.000001191 2.64240335424964e-20 316227.766021545 2.64235255216409e-20 1000000.00001786 2.64184638934414e-20 3162277.66023428 2.6369639279638e-20 10000000.0002382 2.6012143374457e-20 31622776.6025311 2.52246371744219e-20 100000000.002977 2.49408693915804e-20 316227766.027194 2.49020136278282e-20 1000000000.03572 2.48688469635449e-20 3162277660.29077 2.45839887161499e-20 10000000000.4168 2.23616843935156e-20 31622776603.096 1.61708144500134e-20 100000000000 1.33279238038327e-20 1000 2.61683233754911e-20 3162.27766017779 2.61683233576009e-20 10000.0000000595 2.61683231786988e-20 31622.7766019662 2.61683213896842e-20 100000.000001191 2.61683035001321e-20 316227.766021545 2.61681246639783e-20 1000000.00001786 2.6166342219333e-20 3162277.66023428 2.61490902841334e-20 10000000.0002382 2.60194595174416e-20 31622776.6025311 2.57116574279382e-20 100000000.002977 2.55921378158782e-20 316227766.027194 2.55715663102562e-20 1000000000.03572 2.55189053474245e-20 3162277660.29077 2.50610770444641e-20 10000000000.4168 2.2887389347884e-20 31622776603.096 2.08970102097548e-20 100000000000 2.04777705947638e-20 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_ac_npn_1D_breakdown_ac.standard0000644000175000017500000020052014163340332027253 0ustar carstencarstenFreq g(base,base) g(base,coll) g(coll,base) g(coll,coll) c(base,base) c(base,coll) c(coll,base) c(coll,coll) 10000000000 9.96332179206211e-06 -7.66822764744059e-10 0.00733867653183326 9.64277481244131e-07 2.01445680041291e-14 3.97282515261145e-15 3.97096683808793e-15 3.97096683808793e-15 12599210498.9563 9.96332179206211e-06 -7.66822764744059e-10 0.00733867653183326 9.64277481244131e-07 2.01445680041291e-14 3.97282515261145e-15 3.97096683808792e-15 3.97096683808792e-15 15874010519.701 9.96332179206211e-06 -7.66822764744059e-10 0.00733867653183326 9.64277481244131e-07 2.01445680041291e-14 3.97282515261145e-15 3.97096683808793e-15 3.97096683808793e-15 20000000000 9.96332179206211e-06 -7.66822764744059e-10 0.00733867653183326 9.64277481244131e-07 2.01445680041291e-14 3.97282515261145e-15 3.97096683808793e-15 3.97096683808793e-15 10000000000 1.4376357400638e-05 -1.1246246482035e-09 0.0105452353213537 1.42412280638759e-06 2.08412291219552e-14 3.9939925709138e-15 3.99114702269515e-15 3.99114702269515e-15 12599210498.9563 1.4376357400638e-05 -1.1246246482035e-09 0.0105452353213537 1.42412280638759e-06 2.08412291219551e-14 3.99399257091379e-15 3.99114702269515e-15 3.99114702269515e-15 15874010519.701 1.4376357400638e-05 -1.1246246482035e-09 0.0105452353213537 1.42412280638759e-06 2.08412291219551e-14 3.9939925709138e-15 3.99114702269515e-15 3.99114702269515e-15 20000000000 1.4376357400638e-05 -1.1246246482035e-09 0.0105452353213537 1.42412280638759e-06 2.08412291219551e-14 3.9939925709138e-15 3.99114702269515e-15 3.99114702269515e-15 10000000000 2.07766484287871e-05 -1.66584850501289e-09 0.0151178493631705 2.13845012945552e-06 2.18270356141304e-14 4.01613755500598e-15 4.01179374375608e-15 4.01179374375608e-15 12599210498.9563 2.07766484287871e-05 -1.66584850501289e-09 0.0151178493631705 2.13845012945552e-06 2.18270356141304e-14 4.01613755500598e-15 4.01179374375608e-15 4.01179374375608e-15 15874010519.701 2.07766484287871e-05 -1.66584850501289e-09 0.0151178493631705 2.13845012945552e-06 2.18270356141304e-14 4.01613755500598e-15 4.01179374375609e-15 4.01179374375609e-15 20000000000 2.07766484287871e-05 -1.66584850501289e-09 0.0151178493631705 2.13845012945552e-06 2.18270356141304e-14 4.01613755500598e-15 4.01179374375608e-15 4.01179374375608e-15 10000000000 3.00663355322769e-05 -2.50073075943373e-09 0.0215970371951187 3.27916337644655e-06 2.32166619007558e-14 4.03953185861895e-15 4.03292671109609e-15 4.03292671109609e-15 12599210498.9563 3.00663355322769e-05 -2.50073075943373e-09 0.0215970371951187 3.27916337644655e-06 2.32166619007558e-14 4.03953185861895e-15 4.03292671109609e-15 4.03292671109609e-15 15874010519.701 3.00663355322769e-05 -2.50073075943373e-09 0.0215970371951187 3.27916337644655e-06 2.32166619007558e-14 4.03953185861895e-15 4.0329267110961e-15 4.0329267110961e-15 20000000000 3.00663355322769e-05 -2.50073075943373e-09 0.0215970371951187 3.27916337644655e-06 2.32166619007558e-14 4.03953185861895e-15 4.03292671109609e-15 4.03292671109609e-15 10000000000 4.35587686569652e-05 -3.82307102735714e-09 0.0306978500184668 5.15395595641571e-06 2.51620360793105e-14 4.06456065777001e-15 4.05456684600284e-15 4.05456684600284e-15 12599210498.9563 4.35587686569652e-05 -3.82307102735714e-09 0.0306978500184668 5.15395595641571e-06 2.51620360793105e-14 4.06456065777001e-15 4.05456684600284e-15 4.05456684600284e-15 15874010519.701 4.35587686569652e-05 -3.82307102735714e-09 0.0306978500184668 5.15395595641571e-06 2.51620360793105e-14 4.06456065777001e-15 4.05456684600284e-15 4.05456684600284e-15 20000000000 4.35587686569652e-05 -3.82307102735714e-09 0.0306978500184668 5.15395595641571e-06 2.51620360793105e-14 4.06456065777001e-15 4.05456684600284e-15 4.05456684600284e-15 10000000000 6.31664543519407e-05 -5.99244865749913e-09 0.0433340127037067 8.31620000465328e-06 2.78577017831208e-14 4.0917630625223e-15 4.07673638053732e-15 4.07673638053732e-15 12599210498.9563 6.31664543519407e-05 -5.99244865749913e-09 0.0433340127037067 8.31620000465328e-06 2.78577017831208e-14 4.0917630625223e-15 4.07673638053732e-15 4.07673638053732e-15 15874010519.701 6.31664543519407e-05 -5.99244865749913e-09 0.0433340127037067 8.31620000465328e-06 2.78577017831208e-14 4.0917630625223e-15 4.07673638053732e-15 4.07673638053732e-15 20000000000 6.31664543519407e-05 -5.99244865749913e-09 0.0433340127037067 8.31620000465328e-06 2.78577017831208e-14 4.0917630625223e-15 4.07673638053732e-15 4.07673638053732e-15 10000000000 9.16752833025786e-05 -9.71895081952923e-09 0.0606225227749536 1.37498322188448e-05 3.15422418367038e-14 4.12188450795651e-15 4.09945896711481e-15 4.09945896711481e-15 12599210498.9563 9.16752833025786e-05 -9.71895081952923e-09 0.0606225227749536 1.37498322188448e-05 3.15422418367038e-14 4.12188450795651e-15 4.09945896711481e-15 4.09945896711481e-15 15874010519.701 9.16752833025786e-05 -9.71895081952923e-09 0.0606225227749536 1.37498322188448e-05 3.15422418367038e-14 4.12188450795651e-15 4.09945896711481e-15 4.09945896711481e-15 20000000000 9.16752833025786e-05 -9.71895081952923e-09 0.0606225227749536 1.37498322188448e-05 3.15422418367038e-14 4.12188450795651e-15 4.09945896711481e-15 4.09945896711481e-15 10000000000 0.000133145274923061 -1.65081183311465e-08 0.0838579487353727 2.31564649662992e-05 3.64937951605334e-14 4.15595721777225e-15 4.1227597996551e-15 4.1227597996551e-15 12599210498.9563 0.000133145274923061 -1.65081183311465e-08 0.0838579487353727 2.31564649662992e-05 3.64937951605334e-14 4.15595721777225e-15 4.1227597996551e-15 4.1227597996551e-15 15874010519.701 0.000133145274923061 -1.65081183311465e-08 0.0838579487353727 2.31564649662992e-05 3.64937951605334e-14 4.15595721777225e-15 4.1227597996551e-15 4.1227597996551e-15 20000000000 0.000133145274923061 -1.65081183311465e-08 0.0838579487353727 2.31564649662992e-05 3.64937951605334e-14 4.15595721777225e-15 4.1227597996551e-15 4.1227597996551e-15 10000000000 0.000193498299395755 -2.98209937480478e-08 0.11445621292697 3.93593122664063e-05 4.30207629577933e-14 4.19547657105433e-15 4.14666574780123e-15 4.14666574780123e-15 12599210498.9563 0.000193498299395755 -2.98209937480478e-08 0.11445621292697 3.93593122664063e-05 4.30207629577933e-14 4.19547657105433e-15 4.14666574780123e-15 4.14666574780123e-15 15874010519.701 0.000193498299395755 -2.98209937480478e-08 0.11445621292697 3.93593122664063e-05 4.30207629577933e-14 4.19547657105433e-15 4.14666574780123e-15 4.14666574780123e-15 20000000000 0.000193498299395755 -2.98209937480478e-08 0.11445621292697 3.93593122664063e-05 4.30207629577933e-14 4.19547657105433e-15 4.14666574780123e-15 4.14666574780123e-15 10000000000 0.000281387710310979 -5.83878121072581e-08 0.153888515466823 6.6824927807139e-05 5.14563335649151e-14 4.24292481142156e-15 4.17120550594256e-15 4.17120550594256e-15 12599210498.9563 0.000281387710310979 -5.83878121072581e-08 0.153888515466823 6.6824927807139e-05 5.14563335649151e-14 4.24292481142156e-15 4.17120550594255e-15 4.17120550594255e-15 15874010519.701 0.000281387710310979 -5.83878121072581e-08 0.153888515466823 6.6824927807139e-05 5.14563335649151e-14 4.24292481142156e-15 4.17120550594256e-15 4.17120550594256e-15 20000000000 0.000281387710310979 -5.83878121072581e-08 0.153888515466823 6.6824927807139e-05 5.14563335649151e-14 4.24292481142156e-15 4.17120550594256e-15 4.17120550594256e-15 10000000000 0.000409516638683367 -1.26729862088779e-07 0.203644171931155 0.00011237225257154 6.21804448209993e-14 4.30354034127624e-15 4.19640975906102e-15 4.19640975906102e-15 12599210498.9563 0.000409516638683367 -1.26729862088779e-07 0.203644171931155 0.00011237225257154 6.21804448209992e-14 4.30354034127623e-15 4.19640975906102e-15 4.19640975906102e-15 15874010519.701 0.000409516638683367 -1.26729862088779e-07 0.203644171931155 0.00011237225257154 6.21804448209993e-14 4.30354034127624e-15 4.19640975906102e-15 4.19640975906102e-15 20000000000 0.000409516638683367 -1.26729862088779e-07 0.203644171931155 0.00011237225257154 6.21804448209993e-14 4.30354034127624e-15 4.19640975906102e-15 4.19640975906102e-15 10000000000 0.000596781565949354 -3.12915224459096e-07 0.265249503865664 0.000186565065357185 7.57301047492158e-14 4.39162421973946e-15 4.2223113677596e-15 4.2223113677596e-15 12599210498.9563 0.000596781565949354 -3.12915224459096e-07 0.265249503865664 0.000186565065357185 7.57301047492158e-14 4.39162421973946e-15 4.2223113677596e-15 4.2223113677596e-15 15874010519.701 0.000596781565949354 -3.12915224459096e-07 0.265249503865664 0.000186565065357185 7.57301047492158e-14 4.39162421973946e-15 4.2223113677596e-15 4.2223113677596e-15 20000000000 0.000596781565949354 -3.12915224459096e-07 0.265249503865664 0.000186565065357185 7.57301047492158e-14 4.39162421973946e-15 4.2223113677596e-15 4.2223113677596e-15 10000000000 0.000872511622252437 -9.04397472362053e-07 0.340301847442379 0.000307896395125082 9.31965505973607e-14 4.55442052867065e-15 4.24894557524309e-15 4.24894557524309e-15 12599210498.9563 0.000872511622252437 -9.04397472362053e-07 0.340301847442379 0.000307896395125082 9.31965505973607e-14 4.55442052867064e-15 4.24894557524309e-15 4.24894557524309e-15 15874010519.701 0.000872511622252437 -9.04397472362053e-07 0.340301847442379 0.000307896395125082 9.31965505973607e-14 4.55442052867065e-15 4.24894557524309e-15 4.24894557524309e-15 20000000000 0.000872511622252437 -9.04397472362053e-07 0.340301847442379 0.000307896395125082 9.31965505973607e-14 4.55442052867065e-15 4.24894557524309e-15 4.24894557524309e-15 10000000000 0.0012891847609427 -3.14970014590654e-06 0.430320054525321 0.000517434865103459 1.17764624425155e-13 4.97256913586906e-15 4.27635023952314e-15 4.27635023952314e-15 12599210498.9563 0.0012891847609427 -3.14970014590654e-06 0.430320054525321 0.000517434865103459 1.17764624425155e-13 4.97256913586906e-15 4.27635023952314e-15 4.27635023952314e-15 15874010519.701 0.0012891847609427 -3.14970014590654e-06 0.430320054525321 0.000517434865103459 1.17764624425155e-13 4.97256913586906e-15 4.27635023952314e-15 4.27635023952314e-15 20000000000 0.0012891847609427 -3.14970014590654e-06 0.430320054525321 0.000517434865103459 1.17764624425155e-13 4.97256913586906e-15 4.27635023952314e-15 4.27635023952314e-15 10000000000 0.00198585306451622 -1.35082601421071e-05 0.535794412471059 0.000932331327900906 1.62191170963117e-13 6.45515863901333e-15 4.3045660947355e-15 4.3045660947355e-15 12599210498.9563 0.00198585306451622 -1.35082601421071e-05 0.535794412471059 0.000932331327900906 1.62191170963117e-13 6.45515863901333e-15 4.3045660947355e-15 4.3045660947355e-15 15874010519.701 0.00198585306451622 -1.35082601421071e-05 0.535794412471059 0.000932331327900906 1.62191170963117e-13 6.45515863901333e-15 4.3045660947355e-15 4.3045660947355e-15 20000000000 0.00198585306451622 -1.35082601421071e-05 0.535794412471059 0.000932331327900906 1.62191170963117e-13 6.45515863901333e-15 4.3045660947355e-15 4.3045660947355e-15 10000000000 0.00362345547430091 -7.04360653469929e-05 0.652063292180316 0.00195922703569802 2.95337928667324e-13 1.32775700432601e-14 4.33363704622085e-15 4.33363704622085e-15 12599210498.9563 0.00362345547430091 -7.04360653469929e-05 0.652063292180316 0.00195922703569802 2.95337928667324e-13 1.32775700432601e-14 4.33363704622085e-15 4.33363704622085e-15 15874010519.701 0.00362345547430091 -7.04360653469929e-05 0.652063292180316 0.00195922703569802 2.95337928667324e-13 1.32775700432601e-14 4.33363704622085e-15 4.33363704622085e-15 20000000000 0.00362345547430091 -7.04360653469929e-05 0.652063292180316 0.00195922703569802 2.95337928667324e-13 1.32775700432601e-14 4.33363704622085e-15 4.33363704622085e-15 10000000000 0.0101831718779116 -0.000384730955517815 0.75069816458803 0.00517260351633392 9.25862599584064e-13 4.74166858889393e-14 4.36361050497457e-15 4.36361050497457e-15 12599210498.9563 0.0101831718779116 -0.000384730955517815 0.75069816458803 0.00517260351633392 9.25862599584064e-13 4.74166858889392e-14 4.36361050497457e-15 4.36361050497457e-15 15874010519.701 0.0101831718779116 -0.000384730955517815 0.75069816458803 0.00517260351633392 9.25862599584065e-13 4.74166858889393e-14 4.36361050497457e-15 4.36361050497457e-15 20000000000 0.0101831718779116 -0.000384730955517815 0.75069816458803 0.00517260351633392 9.25862599584064e-13 4.74166858889392e-14 4.36361050497457e-15 4.36361050497457e-15 10000000000 0.0315248217050257 -0.0012684681105937 0.743219632861082 0.0142211389585675 3.06463289851822e-12 1.42173679253531e-13 4.3945377682734e-15 4.3945377682734e-15 12599210498.9563 0.0315248217050257 -0.0012684681105937 0.743219632861082 0.0142211389585675 3.06463289851822e-12 1.42173679253531e-13 4.3945377682734e-15 4.3945377682734e-15 15874010519.701 0.0315248217050257 -0.0012684681105937 0.743219632861082 0.0142211389585675 3.06463289851822e-12 1.42173679253531e-13 4.3945377682734e-15 4.3945377682734e-15 20000000000 0.0315248217050257 -0.0012684681105937 0.743219632861082 0.0142211389585675 3.06463289851822e-12 1.42173679253531e-13 4.3945377682734e-15 4.3945377682734e-15 10000000000 0.0519393415261918 -0.00151189157112868 0.666201676578759 0.0252263412903729 5.17342719584258e-12 1.79754151978468e-13 4.4264744548171e-15 4.4264744548171e-15 12599210498.9563 0.0519393415261918 -0.00151189157112868 0.666201676578759 0.0252263412903729 5.17342719584258e-12 1.79754151978468e-13 4.4264744548171e-15 4.4264744548171e-15 15874010519.701 0.0519393415261918 -0.00151189157112868 0.666201676578759 0.0252263412903729 5.17342719584258e-12 1.79754151978468e-13 4.4264744548171e-15 4.4264744548171e-15 20000000000 0.0519393415261918 -0.00151189157112868 0.666201676578759 0.0252263412903729 5.17342719584258e-12 1.79754151978468e-13 4.4264744548171e-15 4.4264744548171e-15 10000000000 0.0618061598862038 -0.000938443163905302 0.646866558923453 0.0324360361943099 6.24383781133753e-12 1.40169822408943e-13 4.45948100468724e-15 4.45948100468724e-15 12599210498.9563 0.0618061598862038 -0.000938443163905302 0.646866558923453 0.0324360361943099 6.24383781133753e-12 1.40169822408943e-13 4.45948100468723e-15 4.45948100468723e-15 15874010519.701 0.0618061598862038 -0.000938443163905302 0.646866558923453 0.0324360361943099 6.24383781133753e-12 1.40169822408943e-13 4.45948100468724e-15 4.45948100468724e-15 20000000000 0.0618061598862038 -0.000938443163905302 0.646866558923453 0.0324360361943099 6.24383781133753e-12 1.40169822408943e-13 4.45948100468724e-15 4.45948100468724e-15 10000000000 0.0703626193321949 -0.000252411392754165 0.674522439738704 0.0375348834559848 7.16724972330267e-12 9.32539799078858e-14 4.49362325696833e-15 4.49362325696833e-15 12599210498.9563 0.0703626193321949 -0.000252411392754165 0.674522439738704 0.0375348834559848 7.16724972330267e-12 9.32539799078858e-14 4.49362325696833e-15 4.49362325696833e-15 15874010519.701 0.0703626193321949 -0.000252411392754165 0.674522439738704 0.0375348834559848 7.16724972330267e-12 9.32539799078858e-14 4.49362325696833e-15 4.49362325696833e-15 20000000000 0.0703626193321949 -0.000252411392754165 0.674522439738704 0.0375348834559848 7.16724972330267e-12 9.32539799078857e-14 4.49362325696833e-15 4.49362325696833e-15 10000000000 0.0817211771301653 0.000368598731998918 0.729781770300608 0.041970518347183 8.34736251693234e-12 5.92098666328471e-14 4.52897312119696e-15 4.52897312119696e-15 12599210498.9563 0.0817211771301653 0.000368598731998918 0.729781770300608 0.041970518347183 8.34736251693234e-12 5.92098666328471e-14 4.52897312119696e-15 4.52897312119696e-15 15874010519.701 0.0817211771301653 0.000368598731998918 0.729781770300608 0.041970518347183 8.34736251693235e-12 5.92098666328471e-14 4.52897312119696e-15 4.52897312119696e-15 20000000000 0.0817211771301653 0.000368598731998918 0.729781770300608 0.041970518347183 8.34736251693234e-12 5.92098666328471e-14 4.52897312119696e-15 4.52897312119696e-15 10000000000 0.0975979880024472 0.000934680106776301 0.802263283463247 0.0465323942422626 9.95245366254955e-12 4.11738208192486e-14 4.56560936317304e-15 4.56560936317304e-15 12599210498.9563 0.0975979880024472 0.000934680106776301 0.802263283463247 0.0465323942422626 9.95245366254954e-12 4.11738208192485e-14 4.56560936317304e-15 4.56560936317304e-15 15874010519.701 0.0975979880024472 0.000934680106776301 0.802263283463247 0.0465323942422626 9.95245366254955e-12 4.11738208192486e-14 4.56560936317304e-15 4.56560936317304e-15 20000000000 0.0975979880024472 0.000934680106776301 0.802263283463247 0.0465323942422626 9.95245366254955e-12 4.11738208192486e-14 4.56560936317304e-15 4.56560936317304e-15 10000000000 0.119526674407592 0.0014889748336376 0.884902499378383 0.0517752864014305 1.21306475206307e-11 4.07231490288873e-14 4.60361853145577e-15 4.60361853145577e-15 12599210498.9563 0.119526674407592 0.0014889748336376 0.884902499378383 0.0517752864014305 1.21306475206307e-11 4.07231490288873e-14 4.60361853145577e-15 4.60361853145577e-15 15874010519.701 0.119526674407592 0.0014889748336376 0.884902499378383 0.0517752864014305 1.21306475206307e-11 4.07231490288873e-14 4.60361853145577e-15 4.60361853145577e-15 20000000000 0.119526674407592 0.0014889748336376 0.884902499378383 0.0517752864014305 1.21306475206307e-11 4.07231490288873e-14 4.60361853145577e-15 4.60361853145577e-15 10000000000 0.149620157741974 0.00207418711413653 0.971723436308317 0.0581390024825709 1.50788549018768e-11 6.15482030412624e-14 4.64309605858119e-15 4.64309605858119e-15 12599210498.9563 0.149620157741974 0.00207418711413653 0.971723436308317 0.0581390024825709 1.50788549018768e-11 6.15482030412623e-14 4.64309605858118e-15 4.64309605858118e-15 15874010519.701 0.149620157741974 0.00207418711413653 0.971723436308317 0.0581390024825709 1.50788549018768e-11 6.15482030412624e-14 4.64309605858119e-15 4.64309605858119e-15 20000000000 0.149620157741974 0.00207418711413653 0.971723436308317 0.0581390024825709 1.50788549018768e-11 6.15482030412624e-14 4.64309605858119e-15 4.64309605858119e-15 10000000000 0.191092759626374 0.00272327534614429 1.0577554033078 0.0659346897869423 1.90784320936296e-11 1.10592262689318e-13 4.68414758137253e-15 4.68414758137253e-15 12599210498.9563 0.191092759626374 0.00272327534614429 1.0577554033078 0.0659346897869423 1.90784320936296e-11 1.10592262689318e-13 4.68414758137253e-15 4.68414758137253e-15 15874010519.701 0.191092759626374 0.00272327534614429 1.0577554033078 0.0659346897869423 1.90784320936296e-11 1.10592262689318e-13 4.68414758137253e-15 4.68414758137253e-15 20000000000 0.191092759626374 0.00272327534614429 1.0577554033078 0.0659346897869423 1.90784320936296e-11 1.10592262689318e-13 4.68414758137253e-15 4.68414758137253e-15 10000000000 0.248870779061842 0.00345502368412671 1.13975237010281 0.075299846547418 2.45270795598754e-11 1.98700007620705e-13 4.72689053860795e-15 4.72689053860795e-15 12599210498.9563 0.248870779061842 0.00345502368412671 1.13975237010281 0.075299846547418 2.45270795598754e-11 1.98700007620705e-13 4.72689053860795e-15 4.72689053860795e-15 15874010519.701 0.248870779061842 0.00345502368412671 1.13975237010281 0.075299846547418 2.45270795598754e-11 1.98700007620705e-13 4.72689053860795e-15 4.72689053860795e-15 20000000000 0.248870779061842 0.00345502368412671 1.13975237010281 0.075299846547418 2.45270795598754e-11 1.98700007620705e-13 4.72689053860795e-15 4.72689053860795e-15 10000000000 0.330387161363926 0.00427345345898106 1.21671232354678 0.0861886913380408 3.19761595929315e-11 3.41292986450186e-13 4.77145612303122e-15 4.77145612303122e-15 12599210498.9563 0.330387161363926 0.00427345345898106 1.21671232354678 0.0861886913380408 3.19761595929315e-11 3.41292986450186e-13 4.77145612303122e-15 4.77145612303122e-15 15874010519.701 0.330387161363926 0.00427345345898106 1.21671232354678 0.0861886913380408 3.19761595929315e-11 3.41292986450186e-13 4.77145612303122e-15 4.77145612303122e-15 20000000000 0.330387161363926 0.00427345345898106 1.21671232354678 0.0861886913380408 3.19761595929315e-11 3.41292986450186e-13 4.77145612303122e-15 4.77145612303122e-15 10000000000 0.446653569993268 0.00517152646326208 1.2896678670826 0.0984212552437578 4.21809630078747e-11 5.59437546278557e-13 4.81799168993395e-15 4.81799168993395e-15 12599210498.9563 0.446653569993268 0.00517152646326208 1.2896678670826 0.0984212552437578 4.21809630078747e-11 5.59437546278557e-13 4.81799168993395e-15 4.81799168993395e-15 15874010519.701 0.446653569993268 0.00517152646326208 1.2896678670826 0.0984212552437578 4.21809630078747e-11 5.59437546278557e-13 4.81799168993395e-15 4.81799168993395e-15 20000000000 0.446653569993268 0.00517152646326208 1.2896678670826 0.0984212552437578 4.21809630078747e-11 5.59437546278557e-13 4.81799168993395e-15 4.81799168993395e-15 10000000000 0.613781343034454 0.0061371372250527 1.36089961980668 0.111765154317755 5.61724353429196e-11 8.81647676264945e-13 4.86666375852506e-15 4.86666375852506e-15 12599210498.9563 0.613781343034454 0.0061371372250527 1.36089961980668 0.111765154317755 5.61724353429196e-11 8.81647676264945e-13 4.86666375852506e-15 4.86666375852506e-15 15874010519.701 0.613781343034454 0.0061371372250527 1.36089961980668 0.111765154317755 5.61724353429197e-11 8.81647676264945e-13 4.86666375852506e-15 4.86666375852506e-15 20000000000 0.613781343034454 0.0061371372250527 1.36089961980668 0.111765154317755 5.61724353429196e-11 8.81647676264945e-13 4.86666375852506e-15 4.86666375852506e-15 10000000000 0.855213390731316 0.00715842752499938 1.43307298438981 0.126007680939211 7.53591794570481e-11 1.3466739833454e-12 4.91766178788961e-15 4.91766178788961e-15 12599210498.9563 0.855213390731316 0.00715842752499938 1.43307298438981 0.126007680939211 7.53591794570481e-11 1.3466739833454e-12 4.91766178788961e-15 4.91766178788961e-15 15874010519.701 0.855213390731316 0.00715842752499938 1.43307298438981 0.126007680939211 7.53591794570482e-11 1.3466739833454e-12 4.91766178788961e-15 4.91766178788961e-15 20000000000 0.855213390731316 0.00715842752499938 1.43307298438981 0.126007680939211 7.53591794570481e-11 1.3466739833454e-12 4.91766178788961e-15 4.91766178788961e-15 10000000000 9.90001909540242e-06 -2.47467329833125e-08 0.00735307100761744 7.35364722614598e-07 1.94798640410982e-14 3.3117648047381e-15 3.3124417879481e-15 3.3124417879481e-15 12599210498.9563 9.90001909540242e-06 -2.47467329833125e-08 0.00735307100761744 7.35364722614598e-07 1.94798640410982e-14 3.31176480473809e-15 3.3124417879481e-15 3.3124417879481e-15 15874010519.701 9.90001909540242e-06 -2.47467329833125e-08 0.00735307100761744 7.35364722614598e-07 1.94798640410982e-14 3.3117648047381e-15 3.3124417879481e-15 3.3124417879481e-15 20000000000 9.90001909540242e-06 -2.47467329833125e-08 0.00735307100761744 7.35364722614598e-07 1.94798640410982e-14 3.3117648047381e-15 3.3124417879481e-15 3.3124417879481e-15 10000000000 1.42946740880206e-05 -3.25603792596623e-08 0.0105659199686058 1.01955658015828e-06 2.01611844969068e-14 3.32055166326294e-15 3.32149166906251e-15 3.32149166906251e-15 12599210498.9563 1.42946740880206e-05 -3.25603792596623e-08 0.0105659199686058 1.01955658015828e-06 2.01611844969068e-14 3.32055166326294e-15 3.3214916690625e-15 3.3214916690625e-15 15874010519.701 1.42946740880206e-05 -3.25603792596623e-08 0.0105659199686058 1.01955658015828e-06 2.01611844969068e-14 3.32055166326294e-15 3.32149166906251e-15 3.32149166906251e-15 20000000000 1.42946740880206e-05 -3.25603792596623e-08 0.0105659199686058 1.01955658015828e-06 2.01611844969068e-14 3.32055166326294e-15 3.32149166906251e-15 3.32149166906251e-15 10000000000 2.06715704572439e-05 -4.27366631673504e-08 0.0151477980743422 1.40227051105374e-06 2.11287840208867e-14 3.3293498429457e-15 3.33064912732367e-15 3.33064912732367e-15 12599210498.9563 2.06715704572439e-05 -4.27366631673504e-08 0.0151477980743422 1.40227051105374e-06 2.11287840208867e-14 3.3293498429457e-15 3.33064912732367e-15 3.33064912732367e-15 15874010519.701 2.06715704572439e-05 -4.27366631673504e-08 0.0151477980743422 1.40227051105374e-06 2.11287840208867e-14 3.3293498429457e-15 3.33064912732367e-15 3.33064912732367e-15 20000000000 2.06715704572439e-05 -4.27366631673504e-08 0.0151477980743422 1.40227051105374e-06 2.11287840208867e-14 3.3293498429457e-15 3.33064912732367e-15 3.33064912732367e-15 10000000000 2.99316535464035e-05 -5.5921016460163e-08 0.021640862738248 1.90643449590551e-06 2.24960044788727e-14 3.33813130665216e-15 3.33991638886273e-15 3.33991638886273e-15 12599210498.9563 2.99316535464035e-05 -5.5921016460163e-08 0.021640862738248 1.90643449590551e-06 2.24960044788727e-14 3.33813130665216e-15 3.33991638886273e-15 3.33991638886273e-15 15874010519.701 2.99316535464035e-05 -5.5921016460163e-08 0.021640862738248 1.90643449590551e-06 2.24960044788727e-14 3.33813130665216e-15 3.33991638886273e-15 3.33991638886273e-15 20000000000 2.99316535464035e-05 -5.5921016460163e-08 0.021640862738248 1.90643449590551e-06 2.24960044788727e-14 3.33813130665216e-15 3.33991638886273e-15 3.33991638886273e-15 10000000000 4.33868013629088e-05 -7.28850490966411e-08 0.0307629044999932 2.54967535951615e-06 2.4412878992206e-14 3.34686270847882e-15 3.3492957711349e-15 3.3492957711349e-15 12599210498.9563 4.33868013629088e-05 -7.28850490966411e-08 0.0307629044999932 2.54967535951615e-06 2.4412878992206e-14 3.34686270847882e-15 3.3492957711349e-15 3.3492957711349e-15 15874010519.701 4.33868013629088e-05 -7.28850490966411e-08 0.0307629044999932 2.54967535951615e-06 2.4412878992206e-14 3.34686270847882e-15 3.3492957711349e-15 3.3492957711349e-15 20000000000 4.33868013629088e-05 -7.28850490966411e-08 0.0307629044999932 2.54967535951615e-06 2.4412878992206e-14 3.34686270847882e-15 3.3492957711349e-15 3.3492957711349e-15 10000000000 6.29475197485139e-05 -9.45170683725165e-08 0.0434322873548741 3.33303809273558e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512872e-15 3.35878968512872e-15 12599210498.9563 6.29475197485139e-05 -9.45170683725165e-08 0.0434322873548741 3.33303809273558e-06 2.70713416421887e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 15874010519.701 6.29475197485139e-05 -9.45170683725165e-08 0.0434322873548741 3.33303809273558e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 20000000000 6.29475197485139e-05 -9.45170683725165e-08 0.0434322873548741 3.33303809273558e-06 2.70713416421888e-14 3.35550769112584e-15 3.35878968512871e-15 3.35878968512871e-15 10000000000 9.13963625856786e-05 -1.21787611471268e-07 0.0607738013714267 4.22344762244459e-06 3.07064574949007e-14 3.36403196910825e-15 3.36840063778165e-15 3.36840063778165e-15 12599210498.9563 9.13963625856786e-05 -1.21787611471268e-07 0.0607738013714267 4.22344762244459e-06 3.07064574949007e-14 3.36403196910825e-15 3.36840063778165e-15 3.36840063778165e-15 15874010519.701 9.13963625856786e-05 -1.21787611471268e-07 0.0607738013714267 4.22344762244459e-06 3.07064574949007e-14 3.36403196910825e-15 3.36840063778165e-15 3.36840063778165e-15 20000000000 9.13963625856786e-05 -1.21787611471268e-07 0.0607738013714267 4.22344762244459e-06 3.07064574949007e-14 3.36403196910825e-15 3.36840063778165e-15 3.36840063778165e-15 10000000000 0.000132786182900861 -1.55682238905971e-07 0.0840947018711606 5.13208069232646e-06 3.55914727601441e-14 3.37241223158406e-15 3.37813123461225e-15 3.37813123461225e-15 12599210498.9563 0.000132786182900861 -1.55682238905971e-07 0.0840947018711606 5.13208069232646e-06 3.55914727601441e-14 3.37241223158406e-15 3.37813123461225e-15 3.37813123461225e-15 15874010519.701 0.000132786182900861 -1.55682238905971e-07 0.0840947018711606 5.13208069232646e-06 3.55914727601441e-14 3.37241223158406e-15 3.37813123461225e-15 3.37813123461225e-15 20000000000 0.000132786182900861 -1.55682238905971e-07 0.0840947018711606 5.13208069232646e-06 3.55914727601441e-14 3.37241223158406e-15 3.37813123461225e-15 3.37813123461225e-15 10000000000 0.000193020169475559 -1.97102143803312e-07 0.114830607057883 5.897132051928e-06 4.20267750094719e-14 3.38065075499515e-15 3.38798418257932e-15 3.38798418257932e-15 12599210498.9563 0.000193020169475559 -1.97102143803312e-07 0.114830607057883 5.897132051928e-06 4.20267750094719e-14 3.38065075499515e-15 3.38798418257932e-15 3.38798418257932e-15 15874010519.701 0.000193020169475559 -1.97102143803312e-07 0.114830607057883 5.897132051928e-06 4.20267750094719e-14 3.38065075499515e-15 3.38798418257932e-15 3.38798418257932e-15 20000000000 0.000193020169475559 -1.97102143803312e-07 0.114830607057883 5.897132051928e-06 4.20267750094719e-14 3.38065075499515e-15 3.38798418257932e-15 3.38798418257932e-15 10000000000 0.000280696699539759 -2.46749477365209e-07 0.154482094024518 6.2880905776846e-06 5.03276986300945e-14 3.38880407680109e-15 3.39796229317964e-15 3.39796229317964e-15 12599210498.9563 0.000280696699539759 -2.46749477365209e-07 0.154482094024518 6.2880905776846e-06 5.03276986300945e-14 3.38880407680109e-15 3.39796229317964e-15 3.39796229317964e-15 15874010519.701 0.000280696699539759 -2.46749477365209e-07 0.154482094024518 6.2880905776846e-06 5.03276986300945e-14 3.38880407680109e-15 3.39796229317964e-15 3.39796229317964e-15 20000000000 0.000280696699539759 -2.46749477365209e-07 0.154482094024518 6.2880905776846e-06 5.03276986300945e-14 3.38880407680109e-15 3.39796229317964e-15 3.39796229317964e-15 10000000000 0.000408340188719389 -3.05035569599762e-07 0.204583472528979 6.05950069027255e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 12599210498.9563 0.000408340188719389 -3.05035569599762e-07 0.204583472528979 6.05950069027255e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 15874010519.701 0.000408340188719389 -3.05035569599762e-07 0.204583472528979 6.05950069027255e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 20000000000 0.000408340188719389 -3.05035569599762e-07 0.204583472528979 6.05950069027255e-06 6.08218461763945e-14 3.39706245984095e-15 3.40806848579619e-15 3.40806848579619e-15 10000000000 0.000594194997411469 -3.72075234449458e-07 0.266743312472544 5.11183618321373e-06 7.38706760723299e-14 3.40601536388983e-15 3.41830579130992e-15 3.41830579130992e-15 12599210498.9563 0.000594194997411469 -3.72075234449458e-07 0.266743312472544 5.11183618321373e-06 7.38706760723299e-14 3.40601536388983e-15 3.41830579130992e-15 3.41830579130992e-15 15874010519.701 0.000594194997411469 -3.72075234449458e-07 0.266743312472544 5.11183618321373e-06 7.38706760723299e-14 3.40601536388983e-15 3.41830579130992e-15 3.41830579130992e-15 20000000000 0.000594194997411469 -3.72075234449458e-07 0.266743312472544 5.11183618321373e-06 7.38706760723299e-14 3.40601536388983e-15 3.41830579130992e-15 3.41830579130992e-15 10000000000 0.000864841811761281 -4.47904654852975e-07 0.342759375535126 3.94063094358528e-06 8.99356377253264e-14 3.41754361986761e-15 3.42867735598881e-15 3.42867735598881e-15 12599210498.9563 0.000864841811761281 -4.47904654852975e-07 0.342759375535126 3.94063094358528e-06 8.99356377253264e-14 3.41754361986761e-15 3.42867735598881e-15 3.42867735598881e-15 15874010519.701 0.000864841811761281 -4.47904654852975e-07 0.342759375535126 3.94063094358528e-06 8.99356377253264e-14 3.41754361986761e-15 3.42867735598881e-15 3.42867735598881e-15 20000000000 0.000864841811761281 -4.47904654852975e-07 0.342759375535126 3.94063094358528e-06 8.99356377253264e-14 3.41754361986761e-15 3.42867735598881e-15 3.42867735598881e-15 10000000000 0.00125902163205272 -5.33523133717683e-07 0.434751464381066 4.99610821822484e-06 1.09734188996811e-13 3.43768204028015e-15 3.43918644566936e-15 3.43918644566936e-15 12599210498.9563 0.00125902163205272 -5.33523133717683e-07 0.434751464381066 4.99610821822484e-06 1.09734188996811e-13 3.43768204028014e-15 3.43918644566936e-15 3.43918644566936e-15 15874010519.701 0.00125902163205272 -5.33523133717683e-07 0.434751464381066 4.99610821822484e-06 1.09734188996811e-13 3.43768204028015e-15 3.43918644566936e-15 3.43918644566936e-15 20000000000 0.00125902163205272 -5.33523133717683e-07 0.434751464381066 4.99610821822484e-06 1.09734188996811e-13 3.43768204028015e-15 3.43918644566936e-15 3.43918644566936e-15 10000000000 0.00183328111724408 -6.3675404999886e-07 0.545186917081837 1.69245238176687e-05 1.34620036313423e-13 3.48547727934209e-15 3.44983645024655e-15 3.44983645024655e-15 12599210498.9563 0.00183328111724408 -6.3675404999886e-07 0.545186917081837 1.69245238176687e-05 1.34620036313423e-13 3.48547727934209e-15 3.44983645024655e-15 3.44983645024655e-15 15874010519.701 0.00183328111724408 -6.3675404999886e-07 0.545186917081837 1.69245238176687e-05 1.34620036313423e-13 3.48547727934209e-15 3.44983645024655e-15 3.44983645024655e-15 20000000000 0.00183328111724408 -6.3675404999886e-07 0.545186917081837 1.69245238176687e-05 1.34620036313423e-13 3.48547727934209e-15 3.44983645024655e-15 3.44983645024655e-15 10000000000 0.00267085873854793 -8.17773344845347e-07 0.676550961524555 6.74588337847966e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848974e-15 3.46063088848974e-15 12599210498.9563 0.00267085873854793 -8.17773344845347e-07 0.676550961524555 6.74588337847966e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 15874010519.701 0.00267085873854793 -8.17773344845347e-07 0.676550961524555 6.74588337847966e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 20000000000 0.00267085873854793 -8.17773344845347e-07 0.676550961524555 6.74588337847966e-05 1.67598419450489e-13 3.62097037972608e-15 3.46063088848973e-15 3.46063088848973e-15 10000000000 0.00390307577745643 -1.68057251061081e-06 0.830076437484578 0.000241564575849876 2.16631158699877e-13 4.0562861313768e-15 3.47157341320345e-15 3.47157341320345e-15 12599210498.9563 0.00390307577745643 -1.68057251061081e-06 0.830076437484578 0.000241564575849876 2.16631158699877e-13 4.0562861313768e-15 3.47157341320345e-15 3.47157341320345e-15 15874010519.701 0.00390307577745643 -1.68057251061081e-06 0.830076437484578 0.000241564575849876 2.16631158699877e-13 4.0562861313768e-15 3.47157341320345e-15 3.47157341320345e-15 20000000000 0.00390307577745643 -1.68057251061081e-06 0.830076437484578 0.000241564575849876 2.16631158699877e-13 4.0562861313768e-15 3.47157341320345e-15 3.47157341320345e-15 10000000000 0.00589038850137192 -1.1660728629348e-05 1.00156830016298 0.000810041764993845 3.16401013547641e-13 6.02784063607676e-15 3.48266781675364e-15 3.48266781675364e-15 12599210498.9563 0.00589038850137192 -1.1660728629348e-05 1.00156830016298 0.000810041764993845 3.16401013547641e-13 6.02784063607676e-15 3.48266781675364e-15 3.48266781675364e-15 15874010519.701 0.00589038850137192 -1.1660728629348e-05 1.00156830016298 0.000810041764993845 3.16401013547641e-13 6.02784063607676e-15 3.48266781675364e-15 3.48266781675364e-15 20000000000 0.00589038850137192 -1.1660728629348e-05 1.00156830016298 0.000810041764993845 3.16401013547641e-13 6.02784063607676e-15 3.48266781675364e-15 3.48266781675364e-15 10000000000 0.0125972310510142 -0.000173286089204229 1.15650218930166 0.00306917001570592 8.70172052346337e-13 2.4560694452548e-14 3.49391803698151e-15 3.49391803698151e-15 12599210498.9563 0.0125972310510142 -0.000173286089204229 1.15650218930166 0.00306917001570592 8.70172052346337e-13 2.4560694452548e-14 3.49391803698151e-15 3.49391803698151e-15 15874010519.701 0.0125972310510142 -0.000173286089204229 1.15650218930166 0.00306917001570592 8.70172052346337e-13 2.4560694452548e-14 3.49391803698151e-15 3.49391803698151e-15 20000000000 0.0125972310510142 -0.000173286089204229 1.15650218930166 0.00306917001570592 8.70172052346337e-13 2.4560694452548e-14 3.49391803698151e-15 3.49391803698151e-15 10000000000 0.0575259065094766 -0.00148413748696197 1.08913527647143 0.0132042636622754 5.20009595819265e-12 1.59385490441256e-13 3.50532816352934e-15 3.50532816352934e-15 12599210498.9563 0.0575259065094766 -0.00148413748696197 1.08913527647143 0.0132042636622754 5.20009595819265e-12 1.59385490441256e-13 3.50532816352934e-15 3.50532816352934e-15 15874010519.701 0.0575259065094766 -0.00148413748696197 1.08913527647143 0.0132042636622754 5.20009595819266e-12 1.59385490441256e-13 3.50532816352934e-15 3.50532816352934e-15 20000000000 0.0575259065094766 -0.00148413748696197 1.08913527647143 0.0132042636622754 5.20009595819265e-12 1.59385490441256e-13 3.50532816352934e-15 3.50532816352934e-15 10000000000 0.107338931149851 -0.00215725409925201 0.922870757735943 0.0239952161367382 1.00096132065379e-11 2.35607788486799e-13 3.51690244460448e-15 3.51690244460448e-15 12599210498.9563 0.107338931149851 -0.00215725409925201 0.922870757735943 0.0239952161367382 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 15874010519.701 0.107338931149851 -0.00215725409925201 0.922870757735943 0.0239952161367382 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 20000000000 0.107338931149851 -0.00215725409925201 0.922870757735943 0.0239952161367382 1.00096132065379e-11 2.35607788486799e-13 3.51690244460447e-15 3.51690244460447e-15 10000000000 0.118623222800681 -0.00127722948523903 0.923307710760011 0.0289268009281097 1.09777765441721e-11 1.62855174724526e-13 3.52864529421027e-15 3.52864529421027e-15 12599210498.9563 0.118623222800681 -0.00127722948523903 0.923307710760011 0.0289268009281097 1.09777765441721e-11 1.62855174724525e-13 3.52864529421027e-15 3.52864529421027e-15 15874010519.701 0.118623222800681 -0.00127722948523903 0.923307710760011 0.0289268009281097 1.09777765441721e-11 1.62855174724525e-13 3.52864529421027e-15 3.52864529421027e-15 20000000000 0.118623222800681 -0.00127722948523903 0.923307710760011 0.0289268009281097 1.09777765441721e-11 1.62855174724526e-13 3.52864529421027e-15 3.52864529421027e-15 10000000000 0.127884550153033 -0.000370511784225334 0.989008948207957 0.0325737420919896 1.16025958435407e-11 9.0321278432124e-14 3.54056129987521e-15 3.54056129987521e-15 12599210498.9563 0.127884550153033 -0.000370511784225334 0.989008948207957 0.0325737420919896 1.16025958435407e-11 9.0321278432124e-14 3.54056129987521e-15 3.54056129987521e-15 15874010519.701 0.127884550153033 -0.000370511784225334 0.989008948207957 0.0325737420919896 1.16025958435407e-11 9.0321278432124e-14 3.54056129987521e-15 3.54056129987521e-15 20000000000 0.127884550153033 -0.000370511784225334 0.989008948207957 0.0325737420919896 1.16025958435407e-11 9.0321278432124e-14 3.54056129987521e-15 3.54056129987521e-15 10000000000 0.145689241252898 0.000318756842916238 1.08890496408276 0.0359804314827019 1.28442222700105e-11 4.34926642138682e-14 3.55265523091421e-15 3.55265523091421e-15 12599210498.9563 0.145689241252898 0.000318756842916238 1.08890496408276 0.0359804314827019 1.28442222700105e-11 4.34926642138682e-14 3.55265523091421e-15 3.55265523091421e-15 15874010519.701 0.145689241252898 0.000318756842916238 1.08890496408276 0.0359804314827019 1.28442222700105e-11 4.34926642138682e-14 3.55265523091421e-15 3.55265523091421e-15 20000000000 0.145689241252898 0.000318756842916238 1.08890496408276 0.0359804314827019 1.28442222700105e-11 4.34926642138682e-14 3.55265523091421e-15 3.55265523091421e-15 10000000000 0.174667495453037 0.000860108161507932 1.21309997826897 0.0395425358647287 1.48680083804674e-11 1.85870733868226e-14 3.56493204725938e-15 3.56493204725938e-15 12599210498.9563 0.174667495453037 0.000860108161507932 1.21309997826897 0.0395425358647287 1.48680083804674e-11 1.85870733868226e-14 3.56493204725938e-15 3.56493204725938e-15 15874010519.701 0.174667495453037 0.000860108161507932 1.21309997826897 0.0395425358647287 1.48680083804674e-11 1.85870733868226e-14 3.56493204725938e-15 3.56493204725938e-15 20000000000 0.174667495453037 0.000860108161507932 1.21309997826897 0.0395425358647287 1.48680083804674e-11 1.85870733868226e-14 3.56493204725938e-15 3.56493204725938e-15 10000000000 0.217422003245154 0.00133572239285799 1.35391377066385 0.0436340046587617 1.77981616730849e-11 1.20180334623712e-14 3.57739690890077e-15 3.57739690890077e-15 12599210498.9563 0.217422003245154 0.00133572239285799 1.35391377066385 0.0436340046587617 1.77981616730849e-11 1.20180334623712e-14 3.57739690890077e-15 3.57739690890077e-15 15874010519.701 0.217422003245154 0.00133572239285799 1.35391377066385 0.0436340046587617 1.77981616730849e-11 1.20180334623712e-14 3.57739690890077e-15 3.57739690890077e-15 20000000000 0.217422003245154 0.00133572239285799 1.35391377066385 0.0436340046587617 1.77981616730849e-11 1.20180334623712e-14 3.57739690890077e-15 3.57739690890077e-15 10000000000 0.27814879436823 0.00180909954019535 1.50311670034217 0.0486352867822203 2.18526900851357e-11 2.38276104642887e-14 3.59005518598151e-15 3.59005518598151e-15 12599210498.9563 0.27814879436823 0.00180909954019535 1.50311670034217 0.0486352867822203 2.18526900851357e-11 2.38276104642887e-14 3.59005518598151e-15 3.59005518598151e-15 15874010519.701 0.27814879436823 0.00180909954019535 1.50311670034217 0.0486352867822203 2.18526900851357e-11 2.38276104642887e-14 3.59005518598151e-15 3.59005518598151e-15 20000000000 0.27814879436823 0.00180909954019535 1.50311670034217 0.0486352867822203 2.18526900851357e-11 2.38276104642887e-14 3.59005518598151e-15 3.59005518598151e-15 10000000000 0.363514480455565 0.00232653524762789 1.65234923602711 0.0548810560238548 2.73859110569871e-11 5.78161256031309e-14 3.60291246959585e-15 3.60291246959585e-15 12599210498.9563 0.363514480455565 0.00232653524762789 1.65234923602711 0.0548810560238548 2.73859110569871e-11 5.78161256031309e-14 3.60291246959584e-15 3.60291246959584e-15 15874010519.701 0.363514480455565 0.00232653524762789 1.65234923602711 0.0548810560238548 2.73859110569871e-11 5.78161256031309e-14 3.60291246959585e-15 3.60291246959585e-15 20000000000 0.363514480455565 0.00232653524762789 1.65234923602711 0.0548810560238548 2.73859110569871e-11 5.78161256031309e-14 3.60291246959585e-15 3.60291246959585e-15 10000000000 0.483821031332422 0.00291757414814773 1.79485077328081 0.0625848710677625 3.49273640149952e-11 1.21607898741462e-13 3.61597458334314e-15 3.61597458334314e-15 12599210498.9563 0.483821031332422 0.00291757414814773 1.79485077328081 0.0625848710677625 3.49273640149952e-11 1.21607898741462e-13 3.61597458334314e-15 3.61597458334314e-15 15874010519.701 0.483821031332422 0.00291757414814773 1.79485077328081 0.0625848710677625 3.49273640149952e-11 1.21607898741462e-13 3.61597458334314e-15 3.61597458334314e-15 20000000000 0.483821031332422 0.00291757414814773 1.79485077328081 0.0625848710677625 3.49273640149952e-11 1.21607898741462e-13 3.61597458334314e-15 3.61597458334314e-15 10000000000 0.654668390997788 0.00359470860250588 1.92721277180228 0.0717869285422664 4.52302434838794e-11 2.26914195038899e-13 3.62924759569611e-15 3.62924759569611e-15 12599210498.9563 0.654668390997788 0.00359470860250588 1.92721277180228 0.0717869285422664 4.52302434838794e-11 2.26914195038899e-13 3.62924759569611e-15 3.62924759569611e-15 15874010519.701 0.654668390997788 0.00359470860250588 1.92721277180228 0.0717869285422664 4.52302434838794e-11 2.26914195038899e-13 3.62924759569611e-15 3.62924759569611e-15 20000000000 0.654668390997788 0.00359470860250588 1.92721277180228 0.0717869285422664 4.52302434838794e-11 2.26914195038899e-13 3.62924759569611e-15 3.62924759569611e-15 10000000000 0.899264951028913 0.00435590001515372 2.04991401705792 0.0823644629040669 5.93370831665532e-11 3.90119983276008e-13 3.64273783324701e-15 3.64273783324701e-15 12599210498.9563 0.899264951028913 0.00435590001515372 2.04991401705792 0.0823644629040669 5.93370831665531e-11 3.90119983276008e-13 3.64273783324701e-15 3.64273783324701e-15 15874010519.701 0.899264951028913 0.00435590001515372 2.04991401705792 0.0823644629040669 5.93370831665532e-11 3.90119983276008e-13 3.64273783324701e-15 3.64273783324701e-15 20000000000 0.899264951028913 0.00435590001515372 2.04991401705792 0.0823644629040669 5.93370831665532e-11 3.90119983276008e-13 3.64273783324701e-15 3.64273783324701e-15 10000000000 6.55572982052538e-06 -6.57286528864322e-07 0.00736699462976096 1.27240891692583e-06 1.91556522941746e-14 2.97020495805578e-15 2.97135573582919e-15 2.97135573582919e-15 12599210498.9563 6.55572982052538e-06 -6.57286528864322e-07 0.00736699462976096 1.27240891692583e-06 1.91556522941746e-14 2.97020495805578e-15 2.97135573582919e-15 2.97135573582919e-15 15874010519.701 6.55572982052538e-06 -6.57286528864322e-07 0.00736699462976096 1.27240891692583e-06 1.91556522941746e-14 2.97020495805578e-15 2.97135573582919e-15 2.97135573582919e-15 20000000000 6.55572982052538e-06 -6.57286528864322e-07 0.00736699462976096 1.27240891692583e-06 1.91556522941746e-14 2.97020495805578e-15 2.97135573582919e-15 2.97135573582919e-15 10000000000 9.76988530545487e-06 -8.98424437745104e-07 0.0105844484391676 1.7351357790259e-06 1.98395410920857e-14 2.97449789134454e-15 2.97613763327211e-15 2.97613763327211e-15 12599210498.9563 9.76988530545487e-06 -8.98424437745104e-07 0.0105844484391676 1.7351357790259e-06 1.98395410920857e-14 2.97449789134454e-15 2.97613763327211e-15 2.97613763327211e-15 15874010519.701 9.76988530545487e-06 -8.98424437745104e-07 0.0105844484391676 1.7351357790259e-06 1.98395410920857e-14 2.97449789134454e-15 2.97613763327211e-15 2.97613763327211e-15 20000000000 9.76988530545487e-06 -8.98424437745104e-07 0.0105844484391676 1.7351357790259e-06 1.98395410920857e-14 2.97449789134454e-15 2.97613763327211e-15 2.97613763327211e-15 10000000000 1.4568564128492e-05 -1.2264965850586e-06 0.0151718015735819 2.34317177575897e-06 2.08122579766989e-14 2.97867967517118e-15 2.98100990907388e-15 2.98100990907388e-15 12599210498.9563 1.4568564128492e-05 -1.2264965850586e-06 0.0151718015735819 2.34317177575897e-06 2.08122579766989e-14 2.97867967517118e-15 2.98100990907388e-15 2.98100990907388e-15 15874010519.701 1.4568564128492e-05 -1.2264965850586e-06 0.0151718015735819 2.34317177575897e-06 2.08122579766989e-14 2.97867967517118e-15 2.98100990907388e-15 2.98100990907388e-15 20000000000 1.4568564128492e-05 -1.2264965850586e-06 0.0151718015735819 2.34317177575897e-06 2.08122579766989e-14 2.97867967517118e-15 2.98100990907388e-15 2.98100990907388e-15 10000000000 2.17365983630143e-05 -1.67126073459313e-06 0.0216706709506559 3.11822182738876e-06 2.21879098526361e-14 2.98267313568658e-15 2.98597183349974e-15 2.98597183349974e-15 12599210498.9563 2.17365983630143e-05 -1.67126073459313e-06 0.0216706709506559 3.11822182738876e-06 2.21879098526361e-14 2.98267313568658e-15 2.98597183349974e-15 2.98597183349974e-15 15874010519.701 2.17365983630143e-05 -1.67126073459313e-06 0.0216706709506559 3.11822182738876e-06 2.21879098526361e-14 2.98267313568658e-15 2.98597183349974e-15 2.98597183349974e-15 20000000000 2.17365983630143e-05 -1.67126073459313e-06 0.0216706709506559 3.11822182738876e-06 2.21879098526361e-14 2.98267313568658e-15 2.98597183349974e-15 2.98597183349974e-15 10000000000 3.24500790365988e-05 -2.27117984280989e-06 0.0307974311230765 4.05953461301565e-06 2.41173607108479e-14 2.98637834767421e-15 2.99102264672305e-15 2.99102264672305e-15 12599210498.9563 3.24500790365988e-05 -2.27117984280989e-06 0.0307974311230765 4.05953461301565e-06 2.41173607108479e-14 2.98637834767421e-15 2.99102264672305e-15 2.99102264672305e-15 15874010519.701 3.24500790365988e-05 -2.27117984280989e-06 0.0307974311230765 4.05953461301565e-06 2.41173607108479e-14 2.98637834767421e-15 2.99102264672305e-15 2.99102264672305e-15 20000000000 3.24500790365988e-05 -2.27117984280989e-06 0.0307974311230765 4.05953461301565e-06 2.41173607108479e-14 2.98637834767421e-15 2.99102264672305e-15 2.99102264672305e-15 10000000000 4.8471113529063e-05 -3.07480772662816e-06 0.0434675184274164 5.11364728570586e-06 2.6793317298163e-14 2.98967096641158e-15 2.99616156729959e-15 2.99616156729959e-15 12599210498.9563 4.8471113529063e-05 -3.07480772662816e-06 0.0434675184274164 5.11364728570586e-06 2.6793317298163e-14 2.98967096641158e-15 2.99616156729959e-15 2.99616156729959e-15 15874010519.701 4.8471113529063e-05 -3.07480772662816e-06 0.0434675184274164 5.11364728570586e-06 2.6793317298163e-14 2.98967096641158e-15 2.99616156729959e-15 2.99616156729959e-15 20000000000 4.8471113529063e-05 -3.07480772662816e-06 0.0434675184274164 5.11364728570586e-06 2.6793317298163e-14 2.98967096641158e-15 2.99616156729959e-15 2.99616156729959e-15 10000000000 7.2435731193633e-05 -4.1415818248623e-06 0.0608005286802965 6.12489443184225e-06 3.04513595184543e-14 2.99240412807031e-15 3.00138780042683e-15 3.00138780042683e-15 12599210498.9563 7.2435731193633e-05 -4.1415818248623e-06 0.0608005286802965 6.12489443184225e-06 3.04513595184543e-14 2.99240412807031e-15 3.00138780042683e-15 3.00138780042683e-15 15874010519.701 7.2435731193633e-05 -4.1415818248623e-06 0.0608005286802965 6.12489443184225e-06 3.04513595184543e-14 2.99240412807031e-15 3.00138780042683e-15 3.00138780042683e-15 20000000000 7.2435731193633e-05 -4.1415818248623e-06 0.0608005286802965 6.12489443184225e-06 3.04513595184543e-14 2.99240412807031e-15 3.00138780042683e-15 3.00138780042683e-15 10000000000 0.000108273903828554 -5.54151390389932e-06 0.0840956963296443 6.76572754785739e-06 3.53647404465214e-14 2.9944154376534e-15 3.00670054593472e-15 3.00670054593472e-15 12599210498.9563 0.000108273903828554 -5.54151390389932e-06 0.0840956963296443 6.76572754785739e-06 3.53647404465214e-14 2.9944154376534e-15 3.00670054593472e-15 3.00670054593472e-15 15874010519.701 0.000108273903828554 -5.54151390389932e-06 0.0840956963296443 6.76572754785739e-06 3.53647404465214e-14 2.9944154376534e-15 3.00670054593472e-15 3.00670054593472e-15 20000000000 0.000108273903828554 -5.54151390389932e-06 0.0840956963296443 6.76572754785739e-06 3.53647404465214e-14 2.9944154376534e-15 3.00670054593472e-15 3.00670054593472e-15 10000000000 0.000161813919999201 -7.35338075917318e-06 0.114777992574951 6.45649693536558e-06 4.1833070565333e-14 2.99553908489501e-15 3.01209900596215e-15 3.01209900596215e-15 12599210498.9563 0.000161813919999201 -7.35338075917318e-06 0.114777992574951 6.45649693536558e-06 4.1833070565333e-14 2.99553908489501e-15 3.01209900596215e-15 3.01209900596215e-15 15874010519.701 0.000161813919999201 -7.35338075917318e-06 0.114777992574951 6.45649693536558e-06 4.1833070565333e-14 2.99553908489501e-15 3.01209900596215e-15 3.01209900596215e-15 20000000000 0.000161813919999201 -7.35338075917318e-06 0.114777992574951 6.45649693536558e-06 4.1833070565333e-14 2.99553908489501e-15 3.01209900596215e-15 3.01209900596215e-15 10000000000 0.000241644115753382 -9.66146737967263e-06 0.154336278320074 4.29899546425048e-06 5.01696149029012e-14 2.99562146163182e-15 3.01758239228065e-15 3.01758239228065e-15 12599210498.9563 0.000241644115753382 -9.66146737967263e-06 0.154336278320074 4.29899546425048e-06 5.01696149029012e-14 2.99562146163182e-15 3.01758239228065e-15 3.01758239228065e-15 15874010519.701 0.000241644115753382 -9.66146737967263e-06 0.154336278320074 4.29899546425048e-06 5.01696149029012e-14 2.99562146163182e-15 3.01758239228065e-15 3.01758239228065e-15 20000000000 0.000241644115753382 -9.66146737967263e-06 0.154336278320074 4.29899546425048e-06 5.01696149029012e-14 2.99562146163182e-15 3.01758239228065e-15 3.01758239228065e-15 10000000000 0.000360341790625655 -1.25516355169703e-05 0.204295303620854 -9.42929163028824e-07 6.06967025909638e-14 2.9945420691599e-15 3.02314993323475e-15 3.02314993323475e-15 12599210498.9563 0.000360341790625655 -1.25516355169703e-05 0.204295303620854 -9.42929163028824e-07 6.06967025909638e-14 2.9945420691599e-15 3.02314993323475e-15 3.02314993323475e-15 15874010519.701 0.000360341790625655 -1.25516355169703e-05 0.204295303620854 -9.42929163028824e-07 6.06967025909638e-14 2.9945420691599e-15 3.02314993323475e-15 3.02314993323475e-15 20000000000 0.000360341790625655 -1.25516355169703e-05 0.204295303620854 -9.42929163028824e-07 6.06967025909638e-14 2.9945420691599e-15 3.02314993323475e-15 3.02314993323475e-15 10000000000 0.00053624186964562 -1.61080804062277e-05 0.266261765492691 -1.07874813375991e-05 7.37599303178994e-14 2.99226325543991e-15 3.02880088027532e-15 3.02880088027532e-15 12599210498.9563 0.00053624186964562 -1.61080804062277e-05 0.266261765492691 -1.07874813375991e-05 7.37599303178994e-14 2.9922632554399e-15 3.02880088027532e-15 3.02880088027532e-15 15874010519.701 0.00053624186964562 -1.61080804062277e-05 0.266261765492691 -1.07874813375991e-05 7.37599303178994e-14 2.99226325543991e-15 3.02880088027532e-15 3.02880088027532e-15 20000000000 0.00053624186964562 -1.61080804062277e-05 0.266261765492691 -1.07874813375991e-05 7.37599303178994e-14 2.99226325543991e-15 3.02880088027532e-15 3.02880088027532e-15 10000000000 0.000796011898917667 -2.04120803374282e-05 0.342051510633115 -2.68774590864343e-05 8.97693515879216e-14 2.9890021665292e-15 3.03453451406948e-15 3.03453451406948e-15 12599210498.9563 0.000796011898917667 -2.04120803374282e-05 0.342051510633115 -2.68774590864343e-05 8.97693515879216e-14 2.9890021665292e-15 3.03453451406947e-15 3.03453451406947e-15 15874010519.701 0.000796011898917667 -2.04120803374282e-05 0.342051510633115 -2.68774590864343e-05 8.97693515879217e-14 2.9890021665292e-15 3.03453451406947e-15 3.03453451406947e-15 20000000000 0.000796011898917667 -2.04120803374282e-05 0.342051510633115 -2.68774590864343e-05 8.97693515879216e-14 2.9890021665292e-15 3.03453451406948e-15 3.03453451406948e-15 10000000000 0.00117842746206169 -2.55432158545924e-05 0.433858980188225 -5.06242342059081e-05 1.09278773976683e-13 2.98581190431276e-15 3.0403501501767e-15 3.0403501501767e-15 12599210498.9563 0.00117842746206169 -2.55432158545924e-05 0.433858980188225 -5.06242342059081e-05 1.09278773976683e-13 2.98581190431276e-15 3.0403501501767e-15 3.0403501501767e-15 15874010519.701 0.00117842746206169 -2.55432158545924e-05 0.433858980188225 -5.06242342059081e-05 1.09278773976683e-13 2.98581190431276e-15 3.0403501501767e-15 3.0403501501767e-15 20000000000 0.00117842746206169 -2.55432158545924e-05 0.433858980188225 -5.06242342059081e-05 1.09278773976683e-13 2.98581190431276e-15 3.0403501501767e-15 3.0403501501767e-15 10000000000 0.00173991503049307 -3.1582410700934e-05 0.544396841469754 -8.2262393654647e-05 1.33141375155847e-13 2.98638278445319e-15 3.04624714428712e-15 3.04624714428712e-15 12599210498.9563 0.00173991503049307 -3.1582410700934e-05 0.544396841469754 -8.2262393654647e-05 1.33141375155847e-13 2.98638278445319e-15 3.04624714428712e-15 3.04624714428712e-15 15874010519.701 0.00173991503049307 -3.1582410700934e-05 0.544396841469754 -8.2262393654647e-05 1.33141375155847e-13 2.98638278445319e-15 3.04624714428712e-15 3.04624714428712e-15 20000000000 0.00173991503049307 -3.1582410700934e-05 0.544396841469754 -8.2262393654647e-05 1.33141375155847e-13 2.98638278445319e-15 3.04624714428712e-15 3.04624714428712e-15 10000000000 0.00256268330581112 -3.86153424440617e-05 0.676902866588298 -0.000118074669419337 1.62862309573823e-13 3.00227126652145e-15 3.05222489702304e-15 3.05222489702304e-15 12599210498.9563 0.00256268330581112 -3.86153424440617e-05 0.676902866588298 -0.000118074669419337 1.62862309573823e-13 3.00227126652145e-15 3.05222489702304e-15 3.05222489702304e-15 15874010519.701 0.00256268330581112 -3.86153424440617e-05 0.676902866588298 -0.000118074669419337 1.62862309573824e-13 3.00227126652145e-15 3.05222489702304e-15 3.05222489702304e-15 20000000000 0.00256268330581112 -3.86153424440617e-05 0.676902866588298 -0.000118074669419337 1.62862309573823e-13 3.00227126652145e-15 3.05222489702304e-15 3.05222489702304e-15 10000000000 0.00376667981485604 -4.67349996377414e-05 0.83481651733902 -0.000142328804395917 2.01473088488823e-13 3.06738131563412e-15 3.05828285830982e-15 3.05828285830982e-15 12599210498.9563 0.00376667981485604 -4.67349996377414e-05 0.83481651733902 -0.000142328804395917 2.01473088488823e-13 3.06738131563412e-15 3.05828285830982e-15 3.05828285830982e-15 15874010519.701 0.00376667981485604 -4.67349996377414e-05 0.83481651733902 -0.000142328804395917 2.01473088488823e-13 3.06738131563412e-15 3.05828285830982e-15 3.05828285830982e-15 20000000000 0.00376667981485604 -4.67349996377414e-05 0.83481651733902 -0.000142328804395917 2.01473088488823e-13 3.06738131563412e-15 3.05828285830982e-15 3.05828285830982e-15 10000000000 0.00552763385367869 -5.60545605871238e-05 1.02064719094097 -0.000104987943106127 2.55747367071385e-13 3.27712207106574e-15 3.06442053132636e-15 3.06442053132636e-15 12599210498.9563 0.00552763385367869 -5.60545605871238e-05 1.02064719094097 -0.000104987943106127 2.55747367071385e-13 3.27712207106574e-15 3.06442053132636e-15 3.06442053132636e-15 15874010519.701 0.00552763385367869 -5.60545605871238e-05 1.02064719094097 -0.000104987943106127 2.55747367071385e-13 3.27712207106574e-15 3.06442053132636e-15 3.06442053132636e-15 20000000000 0.00552763385367869 -5.60545605871238e-05 1.02064719094097 -0.000104987943106127 2.55747367071385e-13 3.27712207106574e-15 3.06442053132635e-15 3.06442053132635e-15 10000000000 0.00811543700886858 -6.70809513599193e-05 1.23283325882596 0.000137836509462227 3.42567113305698e-13 3.9180249738456e-15 3.07063747604912e-15 3.07063747604912e-15 12599210498.9563 0.00811543700886858 -6.70809513599193e-05 1.23283325882596 0.000137836509462227 3.42567113305698e-13 3.91802497384559e-15 3.07063747604912e-15 3.07063747604912e-15 15874010519.701 0.00811543700886858 -6.70809513599193e-05 1.23283325882596 0.000137836509462227 3.42567113305698e-13 3.9180249738456e-15 3.07063747604912e-15 3.07063747604912e-15 20000000000 0.00811543700886858 -6.70809513599193e-05 1.23283325882596 0.000137836509462227 3.42567113305698e-13 3.9180249738456e-15 3.07063747604911e-15 3.07063747604911e-15 10000000000 0.012478306884441 -9.56500337518679e-05 1.45494379716806 0.00104780683441377 5.54023757881985e-13 7.14786640199022e-15 3.07693331240678e-15 3.07693331240678e-15 12599210498.9563 0.012478306884441 -9.56500337518679e-05 1.45494379716806 0.00104780683441377 5.54023757881984e-13 7.14786640199022e-15 3.07693331240678e-15 3.07693331240678e-15 15874010519.701 0.012478306884441 -9.56500337518679e-05 1.45494379716806 0.00104780683441377 5.54023757881985e-13 7.14786640199022e-15 3.07693331240678e-15 3.07693331240678e-15 20000000000 0.012478306884441 -9.56500337518679e-05 1.45494379716806 0.00104780683441377 5.54023757881985e-13 7.14786640199022e-15 3.07693331240678e-15 3.07693331240678e-15 10000000000 0.0434966725728765 -0.000706688914627538 1.52199483805179 0.0063576962883935 3.35417238985495e-12 6.97722085547427e-14 3.08330772306507e-15 3.08330772306507e-15 12599210498.9563 0.0434966725728765 -0.000706688914627538 1.52199483805179 0.0063576962883935 3.35417238985495e-12 6.97722085547427e-14 3.08330772306507e-15 3.08330772306507e-15 15874010519.701 0.0434966725728765 -0.000706688914627538 1.52199483805179 0.0063576962883935 3.35417238985495e-12 6.97722085547427e-14 3.08330772306507e-15 3.08330772306507e-15 20000000000 0.0434966725728765 -0.000706688914627538 1.52199483805179 0.0063576962883935 3.35417238985495e-12 6.97722085547427e-14 3.08330772306507e-15 3.08330772306507e-15 10000000000 0.153806974082989 -0.0024870050326059 1.15430238944096 0.0194893541032168 1.38645220326552e-11 2.50068680535795e-13 3.08976045586343e-15 3.08976045586343e-15 12599210498.9563 0.153806974082989 -0.0024870050326059 1.15430238944096 0.0194893541032168 1.38645220326552e-11 2.50068680535795e-13 3.08976045586343e-15 3.08976045586343e-15 15874010519.701 0.153806974082989 -0.0024870050326059 1.15430238944096 0.0194893541032168 1.38645220326552e-11 2.50068680535795e-13 3.08976045586343e-15 3.08976045586343e-15 20000000000 0.153806974082989 -0.0024870050326059 1.15430238944096 0.0194893541032168 1.38645220326552e-11 2.50068680535795e-13 3.08976045586343e-15 3.08976045586343e-15 10000000000 0.177251390436564 -0.00178395124333293 1.13846224957349 0.0234475098375659 1.57416511555386e-11 1.90605809842409e-13 3.09629132592672e-15 3.09629132592672e-15 12599210498.9563 0.177251390436564 -0.00178395124333293 1.13846224957349 0.0234475098375659 1.57416511555386e-11 1.90605809842409e-13 3.09629132592672e-15 3.09629132592672e-15 15874010519.701 0.177251390436564 -0.00178395124333293 1.13846224957349 0.0234475098375659 1.57416511555386e-11 1.90605809842409e-13 3.09629132592672e-15 3.09629132592672e-15 20000000000 0.177251390436564 -0.00178395124333293 1.13846224957349 0.0234475098375659 1.57416511555386e-11 1.90605809842409e-13 3.09629132592672e-15 3.09629132592672e-15 10000000000 0.181944706081546 -0.000739187544148204 1.23662056326054 0.0259478422750092 1.55276738810562e-11 1.00244995334265e-13 3.10290021747626e-15 3.10290021747626e-15 12599210498.9563 0.181944706081546 -0.000739187544148204 1.23662056326054 0.0259478422750092 1.55276738810562e-11 1.00244995334265e-13 3.10290021747626e-15 3.10290021747626e-15 15874010519.701 0.181944706081546 -0.000739187544148204 1.23662056326054 0.0259478422750092 1.55276738810562e-11 1.00244995334265e-13 3.10290021747626e-15 3.10290021747626e-15 20000000000 0.181944706081546 -0.000739187544148204 1.23662056326054 0.0259478422750092 1.55276738810562e-11 1.00244995334265e-13 3.10290021747626e-15 3.10290021747626e-15 10000000000 0.201191614550067 -5.56699043606775e-06 1.36838969619411 0.0285853924436537 1.63091285696786e-11 4.30510981103766e-14 3.1095870853652e-15 3.1095870853652e-15 12599210498.9563 0.201191614550067 -5.56699043606775e-06 1.36838969619411 0.0285853924436537 1.63091285696785e-11 4.30510981103766e-14 3.1095870853652e-15 3.1095870853652e-15 15874010519.701 0.201191614550067 -5.56699043606775e-06 1.36838969619411 0.0285853924436537 1.63091285696786e-11 4.30510981103766e-14 3.1095870853652e-15 3.1095870853652e-15 20000000000 0.201191614550067 -5.56699043606775e-06 1.36838969619411 0.0285853924436537 1.63091285696786e-11 4.30510981103766e-14 3.1095870853652e-15 3.1095870853652e-15 10000000000 0.23924232404723 0.000503308646891508 1.52956550042349 0.031367361263211 1.83066997532358e-11 1.24759759426551e-14 3.11635195636369e-15 3.11635195636369e-15 12599210498.9563 0.23924232404723 0.000503308646891508 1.52956550042349 0.031367361263211 1.83066997532358e-11 1.24759759426551e-14 3.11635195636369e-15 3.11635195636369e-15 15874010519.701 0.23924232404723 0.000503308646891508 1.52956550042349 0.031367361263211 1.83066997532358e-11 1.24759759426551e-14 3.11635195636369e-15 3.11635195636369e-15 20000000000 0.23924232404723 0.000503308646891508 1.52956550042349 0.031367361263211 1.83066997532358e-11 1.24759759426551e-14 3.11635195636369e-15 3.11635195636369e-15 10000000000 0.298871774076957 0.000901765962796316 1.71530919263411 0.0344698968836964 2.1522386701622e-11 4.09368448744446e-16 3.12319493021923e-15 3.12319493021923e-15 12599210498.9563 0.298871774076957 0.000901765962796316 1.71530919263411 0.0344698968836964 2.1522386701622e-11 4.09368448744447e-16 3.12319493021923e-15 3.12319493021923e-15 15874010519.701 0.298871774076957 0.000901765962796316 1.71530919263411 0.0344698968836964 2.1522386701622e-11 4.09368448744446e-16 3.12319493021923e-15 3.12319493021923e-15 20000000000 0.298871774076957 0.000901765962796316 1.71530919263411 0.0344698968836964 2.1522386701622e-11 4.09368448744446e-16 3.12319493021923e-15 3.12319493021923e-15 10000000000 0.385652678881259 0.00126686339423384 1.91697822342641 0.0381797874517946 2.61117047972164e-11 3.74744532715883e-15 3.13011618051746e-15 3.13011618051746e-15 12599210498.9563 0.385652678881259 0.00126686339423384 1.91697822342641 0.0381797874517946 2.61117047972164e-11 3.74744532715883e-15 3.13011618051746e-15 3.13011618051746e-15 15874010519.701 0.385652678881259 0.00126686339423384 1.91697822342641 0.0381797874517946 2.61117047972164e-11 3.74744532715883e-15 3.13011618051746e-15 3.13011618051746e-15 20000000000 0.385652678881259 0.00126686339423384 1.91697822342641 0.0381797874517946 2.61117047972164e-11 3.74744532715883e-15 3.13011618051746e-15 3.13011618051746e-15 10000000000 0.509027027505152 0.00165080326771916 2.12367630359016 0.042804620722336 3.24212848462173e-11 2.34943170901909e-14 3.13711595536824e-15 3.13711595536824e-15 12599210498.9563 0.509027027505152 0.00165080326771916 2.12367630359016 0.042804620722336 3.24212848462173e-11 2.34943170901909e-14 3.13711595536824e-15 3.13711595536824e-15 15874010519.701 0.509027027505152 0.00165080326771916 2.12367630359016 0.042804620722336 3.24212848462173e-11 2.34943170901909e-14 3.13711595536824e-15 3.13711595536824e-15 20000000000 0.509027027505152 0.00165080326771916 2.12367630359016 0.042804620722336 3.24212848462173e-11 2.34943170901909e-14 3.13711595536824e-15 3.13711595536824e-15 10000000000 0.683777925609837 0.00208856284715739 2.3247374331735 0.0485939942335776 4.10185898939757e-11 6.41658322236368e-14 3.14419457794106e-15 3.14419457794106e-15 12599210498.9563 0.683777925609837 0.00208856284715739 2.3247374331735 0.0485939942335776 4.10185898939757e-11 6.41658322236368e-14 3.14419457794106e-15 3.14419457794106e-15 15874010519.701 0.683777925609837 0.00208856284715739 2.3247374331735 0.0485939942335776 4.10185898939757e-11 6.41658322236368e-14 3.14419457794106e-15 3.14419457794106e-15 20000000000 0.683777925609837 0.00208856284715739 2.3247374331735 0.0485939942335776 4.10185898939757e-11 6.41658322236368e-14 3.14419457794106e-15 3.14419457794106e-15 10000000000 0.932381075745802 0.00259936908571725 2.51276035798429 0.055669541805999 5.2741333460173e-11 1.33706337185288e-13 3.15135244687339e-15 3.15135244687339e-15 12599210498.9563 0.932381075745802 0.00259936908571725 2.51276035798429 0.055669541805999 5.2741333460173e-11 1.33706337185288e-13 3.15135244687339e-15 3.15135244687339e-15 15874010519.701 0.932381075745802 0.00259936908571725 2.51276035798429 0.055669541805999 5.2741333460173e-11 1.33706337185288e-13 3.15135244687339e-15 3.15135244687339e-15 20000000000 0.932381075745802 0.00259936908571725 2.51276035798429 0.055669541805999 5.2741333460173e-11 1.33706337185288e-13 3.15135244687339e-15 3.15135244687339e-15 tmp_ns50wwy/tests/hicum2/npn/reference/fgum_dc_npn_vert_nqs.standard0000644000175000017500000010142714163340332026162 0ustar carstencarstenV(base) I(coll) I(base) 0.3 7.00618362860586e-13 1.19322470829588e-13 0.32 6.81733754343427e-13 1.72507877043156e-13 0.34 6.64859525976109e-13 2.34687173579504e-13 0.36 6.5361606350279e-13 3.11995218338964e-13 0.38 6.58137159027742e-13 4.1475161319374e-13 0.4 7.06775211872195e-13 5.60315352951264e-13 0.42 8.78814902267774e-13 7.7788701652324e-13 0.44 1.3958453642412e-12 1.11658758000648e-12 0.46 2.87679721736392e-12 1.65905064687943e-12 0.48 7.04925839058107e-12 2.54429377084376e-12 0.5 1.87316876146689e-11 4.00621181411272e-12 0.52 5.13518725153592e-11 6.4383857484928e-12 0.54 1.4229326251835e-10 1.05032601852582e-11 0.56 3.95517344493408e-10 1.73162384902336e-11 0.58 1.09976585710038e-09 2.87565811561292e-11 0.6 3.05579090206304e-09 4.79937592518883e-11 0.62 8.48036350694388e-09 8.03821693222927e-11 0.64 2.34973646067389e-08 1.3499183405941e-10 0.66 6.4980763428404e-08 2.27395336722597e-10 0.68 1.79278031651889e-07 3.83995830297573e-10 0.7 4.93180236909135e-07 6.50913030406106e-10 0.72 1.35175165929645e-06 1.10956726317243e-09 0.74 3.68776789199246e-06 1.90771027371643e-09 0.76 9.99613971843157e-06 3.3235151975254e-09 0.78 2.68987182927784e-05 5.90635328120692e-09 0.800000000000001 7.17540233926327e-05 1.08044570042777e-08 0.820000000000001 0.000189726842135058 2.05699596551086e-08 0.840000000000001 0.000497697719770728 4.12432433557345e-08 0.860000000000001 0.00128903470330565 8.81252703792335e-08 0.880000000000001 0.0032362094441829 2.04463491642645e-07 0.900000000000001 0.00763701790586737 5.63675910563795e-07 0.920000000000001 0.0160126695299415 3.1540596591743e-06 0.940000000000001 0.0262639800031871 4.07694812931551e-05 0.960000000000001 0.0348164515268693 0.000281239075634444 0.980000000000001 0.0415907008596367 0.000841474895496324 1 0.048688427733456 0.00174680071561732 1.02 0.0578232919702914 0.00312280919997147 1.04 0.0704841730225918 0.00519706629386792 0.3 1.70062041767013e-12 -3.80677807577422e-13 0.32 1.68173940494711e-12 -3.27492816649741e-13 0.34 1.66487507511512e-12 -2.65314551323307e-13 0.36 1.6536588740271e-12 -1.88009061254135e-13 0.38 1.65825507443567e-12 -8.52589794969041e-14 0.4 1.70710008053715e-12 6.02892014061144e-14 0.42 1.87971006428977e-12 2.77822630281072e-13 0.44 2.39831190628909e-12 6.16429525415776e-13 0.46 3.88359240162662e-12 1.15866387999707e-12 0.48 8.06797243856141e-12 2.04335052425671e-12 0.5 1.97831997642319e-11 3.50391970159939e-12 0.52 5.24935629472191e-11 5.93283723509562e-12 0.54 1.43682633153999e-10 9.98988389328519e-12 0.56 3.97586071652839e-10 1.67841319909021e-11 0.58 1.103694879209e-09 2.81798773349043e-11 0.6 3.0648035865939e-09 4.73114274614004e-11 0.62 8.50323350522878e-09 7.94510821237013e-11 0.64 2.35578907144306e-08 1.33478537487921e-10 0.66 6.51432244650448e-08 2.24387183645355e-10 0.68 1.79715105434117e-07 3.77616042861884e-10 0.7 4.94352613922831e-07 6.36704287219913e-10 0.72 1.35487746041505e-06 1.07729355913759e-09 0.74 3.69603031857282e-06 1.83404140788969e-09 0.76 1.0017718592873e-05 3.15579750170532e-09 0.78 2.69543336817924e-05 5.5265192844963e-09 0.800000000000001 7.18954309049642e-05 9.94928961785123e-09 0.820000000000001 0.00019008425044006 1.86483178106236e-08 0.840000000000001 0.000498617676704709 3.68756917590189e-08 0.860000000000001 0.00129155319669404 7.77288611623391e-08 0.880000000000001 0.00324399258065894 1.75305311856007e-07 0.900000000000001 0.00767592241347613 4.2078805985542e-07 0.920000000000001 0.0166745416457419 1.06127267885745e-06 0.940000000000001 0.031882543264323 2.81979780389553e-06 0.960000000000001 0.0495001664951508 1.42243379920405e-05 0.980000000000001 0.06510870543762 0.000323250612129316 1 0.0768379340348002 0.00189141896945163 1.02 0.0883022977964081 0.00423633879193499 1.04 0.103441489155297 0.00727361671692988 0.3 2.70062558861753e-12 -8.80681322993249e-13 0.32 2.68175306241856e-12 -8.27501866623872e-13 0.34 2.66491114820359e-12 -7.65337808196905e-13 0.36 2.65375416190097e-12 -6.88068720322616e-13 0.38 2.65850681917282e-12 -5.85411739917604e-13 0.4 2.70776531783119e-12 -4.4010122833159e-13 0.42 2.88146842449688e-12 -2.23173374152794e-13 0.44 3.40296103035247e-12 1.13893493402679e-13 0.46 4.89588877675641e-12 6.52219046362234e-13 0.48 9.10050574197602e-12 1.52700421287142e-12 0.5 2.0869302355217e-11 2.96254216070302e-12 0.52 5.37215026640358e-11 5.32831007477133e-12 0.54 1.45286167395257e-10 9.2263775371949e-12 0.56 4.00184172707264e-10 1.56212728271817e-11 0.58 1.10892589370233e-09 2.60161573530854e-11 0.6 3.07700079240008e-09 4.26454737390397e-11 0.62 8.53384417780671e-09 6.8545867090499e-11 0.64 2.3637100315188e-08 1.07061152334219e-10 0.66 6.53504208171936e-08 1.59529469567744e-10 0.68 1.80258307774288e-07 2.17859540585756e-10 0.7 4.95774090346404e-07 2.43711388172209e-10 0.72 1.35858072602834e-06 1.14153475126032e-10 0.74 3.70561232062756e-06 -5.13556982529293e-10 0.76 1.0042202553125e-05 -2.52309055274169e-09 0.78 2.7016046705386e-05 -8.09272845584563e-09 0.800000000000001 7.20477861504113e-05 -2.23812151370477e-08 0.820000000000001 0.000190449251828925 -5.73034212115487e-08 0.840000000000001 0.00049944825274296 -1.39835381223252e-07 0.860000000000001 0.00129322590177276 -3.27453448816585e-07 0.880000000000001 0.00324636768716058 -7.23576254486975e-07 0.900000000000001 0.00767685958647622 -1.45370876635014e-06 0.920000000000001 0.0167165223459032 -2.53069045031837e-06 0.940000000000001 0.0330276347005157 -3.46300706546143e-06 0.960000000000001 0.0558434519900176 -1.80908853014248e-06 0.980000000000001 0.0788306059804647 2.44121922166166e-05 1 0.0980316653389515 0.00112733702715359 1.02 0.112229234257974 0.00453823507918271 1.04 0.128884107570148 0.00857310581791224 0.3 1.25201807478122e-12 1.09801051580292e-12 0.32 1.95922864733017e-12 1.66740705882101e-12 0.34 3.62340707598926e-12 2.5172814997555e-12 0.36 7.50229050731839e-12 3.79641070980841e-12 0.38 1.65042252787138e-11 5.7327176717155e-12 0.4 3.73505928188823e-11 8.67566957869171e-12 0.42 8.55652360641704e-11 1.31617650786657e-11 0.44 1.96977201427999e-10 2.00161637958893e-11 0.46 4.54214491852244e-10 3.05114903517646e-11 0.48 1.04765999066767e-09 4.66184244457245e-11 0.5 2.41552087547256e-09 7.14066045138467e-11 0.52 5.56521785174292e-09 1.09698149460873e-10 0.54 1.28095247079479e-08 1.69159523984912e-10 0.56 2.94491468814396e-08 2.62182725668538e-10 0.58 6.76086881121679e-08 4.0927549490846e-10 0.6 1.54954131508682e-07 6.45225379881431e-10 0.62 3.54424785476276e-07 1.03129196590023e-09 0.64 8.08672545279106e-07 1.67942501813453e-09 0.66 1.83955352578087e-06 2.80265019229262e-09 0.68 4.16968694271104e-06 4.82239830193422e-09 0.7 9.40933285227021e-06 8.60193166910277e-09 0.72 2.11408240876671e-05 1.59618097165834e-08 0.74 4.72848483057757e-05 3.08306954457767e-08 0.76 0.000105399509861736 6.18346217009274e-08 0.78 0.000234450130433062 1.28154450787264e-07 0.800000000000001 0.000519929558547868 2.72828260390056e-07 0.820000000000001 0.00114331453211106 5.93056321304273e-07 0.840000000000001 0.00246568447793741 1.30950681527178e-06 0.860000000000001 0.00513265328759517 2.92648634831741e-06 0.880000000000001 0.0101490250178913 6.62546252143862e-06 0.900000000000001 0.0188522420217679 1.58980565444577e-05 0.920000000000001 0.0320623768037972 7.45806074258463e-05 0.940000000000001 0.0451411845835485 0.000608797884245947 0.960000000000001 0.0554907774354201 0.00159476286906315 0.980000000000001 0.0669412066681427 0.00289196952595127 1 0.0813014642761061 0.00471809191805982 1.02 0.0994303203143408 0.00750026467859166 1.04 0.121463302661853 0.0120985159066791 0.3 2.25381743189674e-12 5.97777096246537e-13 0.32 2.96331997878683e-12 1.16692742477484e-12 0.34 4.63271523755783e-12 2.01629829798583e-12 0.36 8.52347690273005e-12 3.29440039227108e-12 0.38 1.75524625903636e-11 5.22861845331649e-12 0.4 3.84604370655835e-11 8.16733521721789e-12 0.42 8.68153688421554e-11 1.2644872567831e-11 0.44 1.98546694240632e-10 1.94820384404812e-11 0.46 4.56510621372937e-10 2.99427952347787e-11 0.48 1.05160821225589e-09 4.59806597401741e-11 0.5 2.42322158338933e-09 7.0631433353677e-11 0.52 5.58143075326153e-09 1.08650881582764e-10 0.54 1.28450149338701e-08 1.67576107142241e-10 0.56 2.95282031422254e-08 2.59548501769476e-10 0.58 6.77859451498306e-08 4.04563878758923e-10 0.6 1.55352015146518e-07 6.36510699177e-10 0.62 3.55316305809901e-07 1.01486651377149e-09 0.64 8.10662798375438e-07 1.64825626525061e-09 0.66 1.84397344372465e-06 2.74352166223316e-09 0.68 4.17943850419652e-06 4.71071523812119e-09 0.7 9.43066335715843e-06 8.39247490484792e-09 0.72 2.11871176790443e-05 1.55720981194682e-08 0.74 4.7384559838379e-05 3.01117792139938e-08 0.76 0.00010561360240842 6.05182264007436e-08 0.78 0.00023491239648792 1.25757055199888e-07 0.800000000000001 0.000520946734722732 2.68480175078878e-07 0.820000000000001 0.00114564516891093 5.85190720780886e-07 0.840000000000001 0.00247140158350191 1.29512847351572e-06 0.860000000000001 0.0051477836414569 2.89765258072098e-06 0.880000000000001 0.0101925836166393 6.53173791452184e-06 0.900000000000001 0.0190318091701026 1.47978905790753e-05 0.920000000000001 0.0334815324320069 3.36957669501408e-05 0.940000000000001 0.0545719533614447 9.57026065108205e-05 0.960000000000001 0.0743909149639733 0.00114794930928729 0.980000000000001 0.0895158650155631 0.00322011296719837 1 0.106990724895673 0.00564887417318909 1.02 0.129587988554209 0.00901062945584958 1.04 0.158837465306023 0.0143352434862808 0.3 3.25823365344296e-12 9.48121493558103e-14 0.32 3.9729643333624e-12 6.60621755307947e-13 0.34 5.65377865841345e-12 1.50291098600279e-12 0.36 9.56948587218973e-12 2.76602824955468e-12 0.38 1.86529786157569e-11 4.66859573565557e-12 0.4 3.96800835080162e-11 7.54058425556748e-12 0.42 8.82954557507315e-11 1.18777043323394e-11 0.44 2.00596297322293e-10 1.8419956093931e-11 0.46 4.59805883339202e-10 2.82625372872152e-11 0.48 1.05762840821501e-09 4.3007276706498e-11 0.5 2.43520287132275e-09 6.495879231189e-11 0.52 5.60645073276419e-09 9.73564442290335e-11 0.54 1.28985435280265e-08 1.44600955044843e-10 0.56 2.96440205371166e-08 2.12366166377191e-10 0.58 6.80377018478812e-08 3.07356189650032e-10 0.6 1.55899932829105e-07 4.3624951210268e-10 0.62 3.56507833302559e-07 6.03075991691764e-10 0.64 8.13248093569634e-07 8.04086274064836e-10 0.66 1.84956269483086e-06 1.01983476963682e-09 0.68 4.1914639064939e-06 1.20778650097754e-09 0.7 9.45631089713672e-06 1.31465075945681e-09 0.72 2.12414267648771e-05 1.35321517562149e-09 0.74 4.74983732173242e-05 1.71859432657376e-09 0.76 0.000105849162593888 4.10459816813175e-09 0.78 0.000235390853108942 1.40937771232533e-08 0.800000000000001 0.000521880368883811 4.85266340981025e-08 0.820000000000001 0.00114729998623445 1.56405305898731e-07 0.840000000000001 0.00247369792745489 4.76998064546056e-07 0.860000000000001 0.00514894126577034 1.39395182900338e-06 0.880000000000001 0.0101870062871646 3.91075709307758e-06 0.900000000000001 0.0190160779093056 1.04969852309886e-05 0.920000000000001 0.0335712700421447 2.6976242070834e-05 0.940000000000001 0.0560935982314932 6.69583820643275e-05 0.960000000000001 0.0857368328351994 0.000278420319912235 0.980000000000001 0.107121511570622 0.0028516502934201 1 0.127108261275351 0.00609868983073257 1.02 0.152270239156441 0.00997381305459979 1.04 0.185424059102101 0.0157721136086737 0.3 9.67451177160209e-12 5.10307780353936e-12 0.32 1.99437581002329e-11 7.51891853673929e-12 0.34 4.19939787243036e-11 1.1064195885855e-11 0.36 8.92929390161743e-11 1.62810100852757e-11 0.38 1.9067541726376e-10 2.39774379494671e-11 0.4 4.07836904751936e-10 3.53644195957073e-11 0.42 8.72684899845105e-10 5.22699973595066e-11 0.44 1.86700637314647e-09 7.7481727743463e-11 0.46 3.99218879074973e-09 1.15308148046968e-10 0.48 8.53028028397887e-09 1.72527202465099e-10 0.5 1.8210819486342e-08 2.60041242272051e-10 0.52 3.88361904407211e-08 3.95862918381423e-10 0.54 8.27183020964984e-08 6.10696828887337e-10 0.56 1.75923434790514e-07 9.58550405554573e-10 0.58 3.73488973809573e-07 1.53777078568061e-09 0.6 7.91246394819651e-07 2.53303973691795e-09 0.62 1.67210368565289e-06 4.30098446977819e-09 0.64 3.52368623664794e-06 7.54655705135542e-09 0.66 7.39971670005385e-06 1.36896185838904e-08 0.68 1.54880442396458e-05 2.56316411516389e-08 0.7 3.23069303751568e-05 4.93664558876693e-08 0.72 6.72150783240705e-05 9.73750536600533e-08 0.74 0.000139631134155473 1.9579655481643e-07 0.76 0.000289619060681086 3.99599852581066e-07 0.78 0.000598311804903998 8.24719215214556e-07 0.800000000000001 0.00122403029776554 1.7161833553203e-06 0.820000000000001 0.00245629014447227 3.59268963043779e-06 0.840000000000001 0.00477486005843313 7.55400334948325e-06 0.860000000000001 0.00888723273832753 1.59403715244417e-05 0.880000000000001 0.0157432400134274 3.38534759225139e-05 0.900000000000001 0.0264971342782487 7.64437274530345e-05 0.920000000000001 0.0411470273796639 0.000333430548626036 0.940000000000001 0.054683296405057 0.00133545386978463 0.960000000000001 0.0682647619996408 0.00275225877349031 0.980000000000001 0.0843437920484317 0.00472432540602891 1 0.103775435568035 0.00775447113408909 1.02 0.126553458348577 0.0128106226992323 1.04 0.152341031401668 0.0219124312047412 0.3 1.07033999608145e-11 4.59945444459834e-12 0.32 2.10046155850834e-11 7.01203320318977e-12 0.34 4.31222500547254e-11 1.05511457737294e-11 0.36 9.05634004409183e-11 1.57563436423411e-11 0.38 1.92245811510952e-10 2.34309517127357e-11 0.4 4.10039910761798e-10 3.4777085223835e-11 0.42 8.76221813701769e-10 5.16064661762107e-11 0.44 1.87335451976774e-09 7.667660429414e-11 0.46 4.00445725536656e-09 1.14240985441019e-10 0.48 8.55500391159117e-09 1.70977213544995e-10 0.5 1.8261710960563e-08 2.57605784343139e-10 0.52 3.89419640795665e-08 3.91811783142195e-10 0.54 8.2938926289775e-08 6.0369457384376e-10 0.56 1.76383732110987e-07 9.46237772771285e-10 0.58 3.7444766782627e-07 1.51593455295173e-09 0.6 7.93236961059667e-07 2.49424406838211e-09 0.62 1.67621948189941e-06 4.23221860299794e-09 0.64 3.53215388087395e-06 7.42525678960368e-09 0.66 7.4170175088549e-06 1.34771033971089e-08 0.68 1.55231859126539e-05 2.52620706932288e-08 0.7 3.23778725415176e-05 4.87288897407929e-08 0.72 6.73577550860766e-05 9.62833548277638e-08 0.74 0.000139918265205595 1.93939337621748e-07 0.76 0.000290200598784483 3.96460122470873e-07 0.78 0.000599507580249465 8.19452198003969e-07 0.800000000000001 0.00122656679807211 1.70743677504321e-06 0.820000000000001 0.00246195968928931 3.57828612218176e-06 0.840000000000001 0.00478828773630023 7.5297180889865e-06 0.860000000000001 0.00892013142376132 1.58896257810202e-05 0.880000000000001 0.0158285296270135 3.35962697956365e-05 0.900000000000001 0.0268021404728434 7.11349324846952e-05 0.920000000000001 0.043465565307823 0.00015156065783675 0.940000000000001 0.0658491185547381 0.000532197999874902 0.960000000000001 0.0848907374565074 0.00254452670108817 0.980000000000001 0.104783401980128 0.00513128153927206 1 0.12910088983319 0.00867037145512027 1.02 0.159163145650812 0.0143150797075459 1.04 0.195025909519815 0.0241591365109279 0.3 1.17731690457232e-11 4.05302794007017e-12 0.32 2.21457888952729e-11 6.42059976973587e-12 0.34 4.44079302862872e-11 9.87138475303484e-12 0.36 9.21415836352319e-11 1.49035469014747e-11 0.38 1.94416182253187e-10 2.22397929950397e-11 0.4 4.1340944455127e-10 3.29255146504696e-11 0.42 8.82020079187911e-10 4.84683866000184e-11 0.44 1.88407253025828e-09 7.10373320017231e-11 0.46 4.02514148660461e-09 1.0374902697429e-10 0.48 8.59587580093593e-09 1.51090778201987e-10 0.5 1.83434642666076e-08 2.19574219005323e-10 0.52 3.9106461128714e-08 3.18820376279724e-10 0.54 8.32707469398285e-08 4.63528822703279e-10 0.56 1.770534490702e-07 6.77384752990772e-10 0.58 3.75798375360179e-07 1.00138197789373e-09 0.6 7.95956317954006e-07 1.51237287488131e-09 0.62 1.68167972791065e-06 2.36529690819607e-09 0.64 3.54308034941215e-06 3.88978162749421e-09 0.66 7.43874025781685e-06 6.81404620843971e-09 0.68 1.5566165535234e-05 1.27637819711611e-08 0.7 3.24623109689196e-05 2.53999030312507e-08 0.72 6.75223179497339e-05 5.29194689159663e-08 0.74 0.000140235522443283 1.13590121108212e-07 0.76 0.000290799711603754 2.48072745784483e-07 0.78 0.000600588225676059 5.47024845178283e-07 0.800000000000001 0.00122832534031335 1.21312440217849e-06 0.820000000000001 0.00246419651963096 2.70033597146548e-06 0.840000000000001 0.00478934152236754 6.02235979239149e-06 0.860000000000001 0.00891525202156808 1.34167059911401e-05 0.880000000000001 0.0158096187244507 2.97405731151693e-05 0.900000000000001 0.0267707553579751 6.54012390646635e-05 0.920000000000001 0.0435605406967315 0.000142576258553287 0.940000000000001 0.0682569746468206 0.000310132113797861 0.960000000000001 0.09677964249538 0.00154219727433435 0.980000000000001 0.119879819081178 0.00503687607232831 1 0.147346105491181 0.00912333340847712 1.02 0.181705640829184 0.015190849835715 1.04 0.224160002325998 0.0255418019048737 0.3 6.93810233655884e-11 1.63787363327484e-11 0.32 1.40182163118042e-10 2.35868796240551e-11 0.34 2.83896029336975e-10 3.39954039562835e-11 0.36 5.75443405137192e-10 4.90916707284816e-11 0.38 1.16654590057634e-09 7.11115809943643e-11 0.4 2.36421850590777e-09 1.0347021891305e-10 0.42 4.78917476642261e-09 1.51487122276945e-10 0.44 9.69508788072924e-09 2.23643389786358e-10 0.46 1.96110654682067e-08 3.33821603336172e-10 0.48 3.96321859744559e-08 5.05398336903162e-10 0.5 8.00060740136058e-08 7.78897275281586e-10 0.52 1.61303254762223e-07 1.22648027634087e-09 0.54 3.24719739940771e-07 1.98000801256823e-09 0.56 6.52539061264192e-07 3.28564645387279e-09 0.58 1.30867472007195e-06 5.61131711581747e-09 0.6 2.61875841347007e-06 9.85934124446767e-09 0.62 5.22746834105432e-06 1.77892450013147e-08 0.64 1.04005047471462e-05 3.28612848191367e-08 0.66 2.06407682489271e-05 6.19234792412644e-08 0.68 4.0866278875425e-05 1.1859160332692e-07 0.7 8.07857987006394e-05 2.30029697787904e-07 0.72 0.000159523287321018 4.50564671568871e-07 0.74 0.000314362304288628 8.89041088066534e-07 0.76 0.0006164190734424 1.76380949397217e-06 0.78 0.00119613140118197 3.51330443555236e-06 0.800000000000001 0.0022778493330581 7.01848642577182e-06 0.820000000000001 0.00421376466986889 1.40505498798839e-05 0.840000000000001 0.00750330832879203 2.81735578752923e-05 0.860000000000001 0.0128049298163085 5.65827279578999e-05 0.880000000000001 0.0209676861634468 0.00011423910680109 0.900000000000001 0.032975692822047 0.000247772504898861 0.920000000000001 0.0479345676311343 0.0008632148683043 0.940000000000001 0.0629356697144988 0.00230548703473012 0.960000000000001 0.079997944183725 0.00437126190873359 0.980000000000001 0.100282026918642 0.00753624361537349 1 0.123793173377492 0.0127734116557801 1.02 0.150000038454237 0.0219868484469626 1.04 0.178545178827331 0.0390327730413022 0.3 7.05995034931814e-11 1.58522538264595e-11 0.32 1.41617797290214e-10 2.30393347446969e-11 0.34 2.85765030966214e-10 3.34102805899041e-11 0.36 5.78177373293955e-10 4.84397144545966e-11 0.38 1.1710061789415e-09 7.0341165068759e-11 0.4 2.3721233028166e-09 1.02490593071491e-10 0.42 4.80394916463746e-09 1.501394353414e-10 0.44 9.72355272671857e-09 2.21650840251971e-10 0.46 1.96667861449834e-08 3.30704202235503e-10 0.48 3.97420951293864e-08 5.00328128746551e-10 0.5 8.0223525952748e-08 7.70442461300501e-10 0.52 1.61733651372169e-07 1.21222036414643e-09 0.54 3.255705797303e-07 1.95583397027208e-09 0.56 6.54217133293891e-07 3.2446506422647e-09 0.58 1.31197389853993e-06 5.54197657116694e-09 0.6 2.62522054644511e-06 9.74258820900021e-09 0.62 5.24007096172697e-06 1.75938054640832e-08 0.64 1.04249110824384e-05 3.25365354229353e-08 0.66 2.06878401173785e-05 6.13876754770462e-08 0.68 4.09566787378649e-05 1.17714022276225e-07 0.7 8.09590634217402e-05 2.28601986781367e-07 0.72 0.000159855613350677 4.48256958703614e-07 0.74 0.000315002064180629 8.85338415815561e-07 0.76 0.000617661802344362 1.7579271243595e-06 0.78 0.00119859482021183 3.50408697854715e-06 0.800000000000001 0.00228291701131384 7.00428258886415e-06 0.820000000000001 0.00422467770284909 1.40288217128402e-05 0.840000000000001 0.00752749825704322 2.8137955077229e-05 0.860000000000001 0.0128588582222727 5.64927358580982e-05 0.880000000000001 0.0210945427650936 0.000113499732671709 0.900000000000001 0.0334079551743977 0.000228183768639819 0.920000000000001 0.0512785919332793 0.000464431559472631 0.940000000000001 0.0731465092007114 0.00151818172219321 0.960000000000001 0.0940832102151722 0.00422388043061445 0.980000000000001 0.118953997568148 0.00788595887638358 1 0.149233518800051 0.0136188850127587 1.02 0.185035399390691 0.0234476731738181 1.04 0.22547940670252 0.0412288112846098 0.3 7.21193710727254e-11 1.50093009738717e-11 0.32 1.43613498397693e-10 2.19003403438698e-11 0.34 2.88672250399783e-10 3.1721753736002e-11 0.36 5.82830977145036e-10 4.57329580344129e-11 0.38 1.17900619123276e-09 6.57512448443325e-11 0.4 2.38653648654387e-09 9.44245570021467e-11 0.42 4.83065366548022e-09 1.35669689130174e-10 0.44 9.7738139990915e-09 1.95408836282346e-10 0.46 1.97621876603242e-08 2.82868487819371e-10 0.48 3.99239646167032e-08 4.12976767090558e-10 0.5 8.05709225563273e-08 6.10963342309831e-10 0.52 1.62397599131334e-07 9.21454171045365e-10 0.54 3.26838994228871e-07 1.42683669968601e-09 0.56 6.56637457921042e-07 2.28483952167937e-09 0.58 1.31658392131363e-06 3.8059462517436e-09 0.6 2.63398108353487e-06 6.61342252732865e-09 0.62 5.25667131447462e-06 1.19748434957045e-08 0.64 1.04561470219051e-05 2.24941356853271e-08 0.66 2.07464253092711e-05 4.35108181022398e-08 0.68 4.10659373115574e-05 8.60152701527284e-08 0.7 8.11614397921453e-05 1.72572101113084e-07 0.72 0.00016022634207548 3.49498545454889e-07 0.74 0.000315666013437581 7.11934392133363e-07 0.76 0.000618795286984286 1.45555094958281e-06 0.78 0.00120034482709927 2.98336258976177e-06 0.800000000000001 0.00228507628863871 6.12609488121864e-06 0.820000000000001 0.00422592155809886 1.25932474588422e-05 0.840000000000001 0.00752429887705025 2.58838713517011e-05 0.860000000000001 0.0128448139809929 5.31076270571292e-05 0.880000000000001 0.0210619281538963 0.00010862800500264 0.900000000000001 0.0333625057085934 0.000221386672539382 0.920000000000001 0.0513693690850275 0.00044968890912715 0.940000000000001 0.0769824004270039 0.000926765039103062 0.960000000000001 0.103810153583738 0.00342278577720613 0.980000000000001 0.131437719467841 0.00781252980049144 1 0.165687581395577 0.0139658408495624 1.02 0.207533345837184 0.0242147893150115 1.04 0.256706826726677 0.0425390464653405 0.3 2.57651045078574e-09 1.51979682201935e-10 0.32 4.74896279465112e-09 2.19555049842851e-10 0.34 8.74974011894899e-09 3.21221266541335e-10 0.36 1.61125965163536e-08 4.77284762909583e-10 0.38 2.96525182043983e-08 7.22011084572034e-10 0.4 5.45300049100065e-08 1.11417432246636e-09 0.42 1.00192983741089e-07 1.75597788789822e-09 0.44 1.83915018278807e-07 2.82722724429989e-09 0.46 3.37236602666249e-07 4.64718213352221e-09 0.48 6.17666312009684e-07 7.78691803856383e-09 0.5 1.12984755544843e-06 1.32738564364317e-08 0.52 2.0637419231491e-06 2.29646947892228e-08 0.54 3.76338718362811e-06 4.02262389695039e-08 0.56 6.84631157910096e-06 7.11795190813231e-08 0.58 1.24351000408665e-05 1.26974817624032e-07 0.6 2.25465216588359e-05 2.27954045207018e-07 0.62 4.08235248574452e-05 4.11269187745564e-07 0.64 7.38348852197721e-05 7.44830539319282e-07 0.66 0.00013335709273041 1.35284942055313e-06 0.68 0.000240246476117057 2.46262097894496e-06 0.7 0.00043066356131042 4.49021982272194e-06 0.72 0.000765173303554462 8.19748987986286e-06 0.74 0.00134003723016046 1.49796623724119e-05 0.76 0.00229780410347191 2.73923276021097e-05 0.78 0.00383353079594564 5.01170154007308e-05 0.800000000000001 0.00619773491889864 9.1730671530093e-05 0.820000000000001 0.00970502088467624 0.000167949683717482 0.840000000000001 0.0147576996098309 0.000307590360839073 0.860000000000001 0.0218847444680708 0.000563712284005813 0.880000000000001 0.0317731441535643 0.00103883481254083 0.900000000000001 0.044904671888923 0.00203866001408961 0.920000000000001 0.0604573523385989 0.00431811671323685 0.940000000000001 0.0795796795996467 0.00818468169521659 0.960000000000001 0.103327182717938 0.0146206223774048 0.980000000000001 0.131550543414265 0.0256392151951131 1 0.163026052833167 0.0448570704953963 1.02 0.196421703851081 0.0789209317841829 1.04 0.231229844259608 0.140092160957657 0.3 2.58547054852653e-09 1.50596402874658e-10 0.32 4.76437616984892e-09 2.17621250507085e-10 0.34 8.77684334235395e-09 3.18401158517904e-10 0.36 1.61608700302305e-08 4.73043033182077e-10 0.38 2.97391116983803e-08 7.15498122759646e-10 0.4 5.46859061062917e-08 1.10404442945309e-09 0.42 1.00474101552592e-07 1.74012267292546e-09 0.44 1.84422048943727e-07 2.80234771136572e-09 0.46 3.38150575960133e-07 4.60814986893803e-09 0.48 6.19312018499794e-07 7.7258071685252e-09 0.5 1.13280612569024e-06 1.31784971965186e-08 0.52 2.06904959644514e-06 2.28165341627005e-08 0.54 3.77288474360157e-06 3.99972038203002e-08 0.56 6.86321247067807e-06 7.08276686640827e-08 0.58 1.24651123341651e-05 1.26437391493524e-07 0.6 2.25996320202025e-05 2.27138227843859e-07 0.62 4.09172334231484e-05 4.10038223312267e-07 0.64 7.39998049216866e-05 7.42984194483372e-07 0.66 0.000133646493609858 1.35009762710063e-06 0.68 0.000240752205096465 2.45855081417775e-06 0.7 0.000431542493604465 4.48425908341949e-06 0.72 0.000766693501338597 8.18887660810535e-06 0.74 0.00134266883983062 1.49674359360521e-05 0.76 0.00230241845779485 2.7375346072779e-05 0.78 0.00384182519367343 5.00939244048339e-05 0.800000000000001 0.00621302052452993 9.16994214921564e-05 0.820000000000001 0.00973350059583582 0.000167904365091765 0.840000000000001 0.0148105989175227 0.000307496950509899 0.860000000000001 0.0219834558271945 0.000563225211029055 0.880000000000001 0.0319794268093541 0.00103175667916983 0.900000000000001 0.0457763380337543 0.00189102475122344 0.920000000000001 0.0643467574490343 0.00355479580192301 0.940000000000001 0.0855494982157594 0.00758586323642106 0.960000000000001 0.111929763151422 0.0143855651347392 0.980000000000001 0.145425927731212 0.0257224870400354 1 0.186103694520332 0.0453878959816079 1.02 0.232495974286946 0.0800627548926417 1.04 0.282398066595445 0.14194107276443 0.3 2.60474479250726e-09 1.38303765016901e-10 0.32 4.79716858880871e-09 1.97187215929967e-10 0.34 8.83315349548879e-09 2.84265731513445e-10 0.36 1.62580924465012e-08 4.15894622404175e-10 0.38 2.99074978968586e-08 6.19776986753978e-10 0.4 5.49780471990253e-08 9.43812119288677e-10 0.42 1.00981371500354e-07 1.47224935976637e-09 0.44 1.85303086481972e-07 2.35530965621421e-09 0.46 3.39680591460926e-07 3.86365477181619e-09 0.48 6.21968022899076e-07 6.48875880366821e-09 0.5 1.13741367749844e-06 1.11281648981103e-08 0.52 2.07703450718474e-06 1.94275632212179e-08 0.54 3.78670355071275e-06 3.44123582103944e-08 0.56 6.88701742507704e-06 6.1659302568807e-08 0.58 1.25060730386756e-05 1.11431717190433e-07 0.6 2.26698908345851e-05 2.02659058325221e-07 0.62 4.10373017160511e-05 3.70222780991762e-07 0.64 7.42039105080257e-05 6.78402545754173e-07 0.66 0.000133990192989469 1.24566950167796e-06 0.68 0.000241320566831017 2.29043095794069e-06 0.7 0.000432450677414178 4.21546350716859e-06 0.72 0.000768056009743745 7.76378779083654e-06 0.74 0.00134448985317503 1.43062204839008e-05 0.76 0.00230435064175776 2.63705343805557e-05 0.78 0.00384281422307887 4.86116095359201e-05 0.800000000000001 0.00621097935090726 8.9585148482216e-05 0.820000000000001 0.00972516956622996 0.000164990201415602 0.840000000000001 0.0147916059851536 0.000303605471737536 0.860000000000001 0.0219486500936692 0.00055816817429192 0.880000000000001 0.0319246010652222 0.00102531431158816 0.900000000000001 0.045709808767651 0.00188213152790213 0.920000000000001 0.0646336057529116 0.00345380426799785 0.940000000000001 0.0895406011858991 0.00658207243890339 0.960000000000001 0.116659126897415 0.0138361450196284 0.980000000000001 0.152161602892709 0.025501168816462 1 0.19718014414853 0.0454175707249779 1.02 0.251485185730178 0.0804655823349082 1.04 0.312906640875321 0.142877908812433 0.3 4.39847426447232e-08 1.66061305823932e-09 0.32 7.52052908801676e-08 2.66722321095843e-09 0.34 1.28576219270154e-07 4.30332529312638e-09 0.36 2.19749811145024e-07 6.98768220249736e-09 0.38 3.75376278687266e-07 1.14265651191458e-08 0.4 6.40771070781361e-07 1.88141436304032e-08 0.42 1.09287218198059e-06 3.11735126322206e-08 0.44 1.86209712021256e-06 5.19373722660844e-08 0.46 3.16766865023211e-06 8.6937184943093e-08 0.48 5.3829651581512e-06 1.46088690299266e-07 0.5 9.13479772069193e-06 2.46264726075117e-07 0.52 1.54807404692602e-05 4.16192647290137e-07 0.54 2.62031671448548e-05 7.04804408932935e-07 0.56 4.43009214255102e-05 1.19547505989047e-06 0.58 7.47952100368744e-05 2.0303042637293e-06 0.6 0.000126015187995986 3.45152747156245e-06 0.62 0.0002115650382841 5.87214479362062e-06 0.64 0.00035313515185643 9.99638711561514e-06 0.66 0.000584092617054897 1.70251922766614e-05 0.68 0.000953296930278345 2.90066896814688e-05 0.7 0.00152809166935246 4.94340405003126e-05 0.72 0.00239574053374104 8.42652223454378e-05 0.74 0.00366428254005115 0.000143662585816016 0.76 0.00546558710708737 0.000244960259469401 0.78 0.00796310174730814 0.000417726253465907 0.800000000000001 0.0113648109402643 0.000712398897994307 0.820000000000001 0.0159407459494088 0.00121502890339678 0.840000000000001 0.02204461289517 0.00207252207073143 0.860000000000001 0.0301371065091441 0.00353703464122569 0.880000000000001 0.0407571941999391 0.00606600770204519 0.900000000000001 0.0540639472110145 0.0106485284468916 0.920000000000001 0.0706108812045892 0.0186053157130544 0.940000000000001 0.0918264492403001 0.0318388909222655 0.960000000000001 0.118659989237856 0.0539989142455562 0.980000000000001 0.151446744306912 0.0912869912252152 1 0.189303453173384 0.154200263405888 1.02 0.23032975816357 0.260617459277274 1.04 0.272929127536559 0.441096113331097 0.3 4.41178092189039e-08 1.64623317045135e-09 0.32 7.54283548420455e-08 2.64580435829167e-09 0.34 1.289506554376e-07 4.27139166228518e-09 0.36 2.20378764841379e-07 6.94008875563674e-09 0.38 3.7643291067528e-07 1.13557273108792e-08 0.4 6.42545673181099e-07 1.87089229102997e-08 0.42 1.09585054036172e-06 3.1017613767078e-08 0.44 1.86709044390218e-06 5.17070457519428e-08 0.46 3.17601146691071e-06 8.65980806227314e-08 0.48 5.3968917457519e-06 1.45590926239136e-07 0.5 9.15798813513429e-06 2.45536407628215e-07 0.52 1.55192546184429e-05 4.15130178786878e-07 0.54 2.62669523358349e-05 7.03258587670089e-07 0.56 4.44062237569936e-05 1.19323109422406e-06 0.58 7.49683110653611e-05 2.02705340095379e-06 0.6 0.000126297908193573 3.446827285124e-06 0.62 0.000212022265860869 5.86536439318135e-06 0.64 0.000353864214454172 9.98663249221564e-06 0.66 0.000585234293037663 1.70112045179502e-05 0.68 0.000955051065300387 2.89867008420249e-05 0.7 0.00153075143266076 4.94055500455687e-05 0.72 0.00239977786824839 8.4224611500806e-05 0.74 0.00367052864591628 0.000143604413516578 0.76 0.00547554280940681 0.000244875965156106 0.78 0.00797940408708001 0.000417601678213389 0.800000000000001 0.0113919138789454 0.000712208594234792 0.820000000000001 0.0159859809155002 0.00121471554100556 0.840000000000001 0.0221201981366907 0.00207185613617246 0.860000000000001 0.0302671043266992 0.00353394066708343 0.880000000000001 0.0410483323978229 0.00602809480418393 0.900000000000001 0.0552628142235635 0.0102893415831993 0.920000000000001 0.0732694434438699 0.0178572378157935 0.940000000000001 0.0950104386801419 0.0313472664719165 0.960000000000001 0.123334881279271 0.0536715587460807 0.980000000000001 0.159613165650566 0.0911092916114932 1 0.204736786349562 0.154289226171574 1.02 0.258176337916531 0.261162784105745 1.04 0.317510653744857 0.442260058201136 0.3 4.44083669693171e-08 1.46370704887897e-09 0.32 7.5897387233895e-08 2.3598271694489e-09 0.34 1.29708175730992e-07 3.82398486093876e-09 0.36 2.21602579915934e-07 6.24129262060035e-09 0.38 3.78410289394488e-07 1.02663030951857e-08 0.4 6.45740458839385e-07 1.70139295976965e-08 0.42 1.10101105536715e-06 2.83861979267499e-08 0.44 1.87542266491774e-06 4.76314826816315e-08 0.46 3.18943379667234e-06 8.03047029396878e-08 0.48 5.41850814715491e-06 1.35896794721295e-07 0.5 9.1927461366239e-06 2.30646420890676e-07 0.52 1.5575036944315e-05 3.92324641429755e-07 0.54 2.63562625590885e-05 6.68426574916735e-07 0.56 4.45487263845085e-05 1.14017791096932e-06 0.58 7.51944019310635e-05 1.94649423634689e-06 0.6 0.00012665303419516 3.32497277764389e-06 0.62 0.000212570298080655 5.68203286385878e-06 0.64 0.000354684844951432 9.71293932479494e-06 0.66 0.000586403656842031 1.66071439537992e-05 0.68 0.000956589567338853 2.8399337691028e-05 0.7 0.00153252821510026 4.85688260763544e-05 0.72 0.00240138720796098 8.30614333591311e-05 0.74 0.00367118357615469 0.000142030532481398 0.76 0.0054740245440363 0.000242804024585771 0.78 0.00797405984944612 0.000414943845414029 0.800000000000001 0.0113806636363581 0.000708877272997181 0.820000000000001 0.015966307377012 0.00121062259404446 0.840000000000001 0.022089146636116 0.0020669109140703 0.860000000000001 0.0302214530263639 0.00352804203722086 0.880000000000001 0.0409857841951869 0.00602099438207017 0.900000000000001 0.0552006432448286 0.0102741975900495 0.920000000000001 0.0739202779906867 0.0175366068427867 0.940000000000001 0.0971194346041152 0.0305258371442243 0.960000000000001 0.12530854578031 0.0532273032117909 0.980000000000001 0.162472054261999 0.0907992131805371 1 0.209991352334 0.154079801011086 1.02 0.268903168041673 0.261151105120157 1.04 0.338324953071619 0.442622191498746 tmp_ns50wwy/tests/hicum2/npn/reference/CBC_CCS_npn_internal_dc.standard0000644000175000017500000001542014163340332026253 0ustar carstencarstenV(coll) I(coll) I(base) 1 2.00000000011415e-12 -9.99999999993901e-13 0.95 1.90000000011427e-12 -9.49999999994269e-13 0.9 1.8000000001144e-12 -8.99999999994649e-13 0.85 1.70000000011454e-12 -8.49999999995038e-13 0.8 1.60000000011469e-12 -7.99999999995435e-13 0.75 1.50000000011484e-12 -7.49999999995838e-13 0.7 1.400000000115e-12 -6.99999999996244e-13 0.65 1.30000000011517e-12 -6.49999999996654e-13 0.6 1.20000000011533e-12 -5.99999999997065e-13 0.55 1.1000000001155e-12 -5.49999999997478e-13 0.5 1.00000000011566e-12 -4.99999999997892e-13 0.45 9.00000000115832e-13 -4.49999999998306e-13 0.4 8.00000000116e-13 -3.9999999999872e-13 0.35 7.00000000116168e-13 -3.49999999999133e-13 0.3 6.00000000116336e-13 -2.99999999999546e-13 0.25 5.00000000116503e-13 -2.49999999999958e-13 0.2 4.00000000116666e-13 -2.00000000000369e-13 0.15 3.00000000116786e-13 -1.50000000000778e-13 0.0999999999999997 2.00000000116342e-13 -1.00000000001167e-13 0.0499999999999997 1.00000000108388e-13 -5.00000000013875e-14 -3.19189119579733e-16 -5.43786880085363e-28 2.24591164906751e-28 -0.0500000000000003 -1.00000001454215e-13 5.00000000168056e-14 -0.1 -2.00000020966233e-13 1.00000000181506e-13 -0.15 -3.00000282997939e-13 1.50000001765013e-13 -0.2 -4.00003804286914e-13 2.00000016959663e-13 -0.25 -5.00051147973227e-13 2.5000016273128e-13 -0.3 -6.00687904188569e-13 3.00001561178405e-13 -0.35 -7.09254148568113e-13 3.50014977027808e-13 -0.4 -9.24514992664328e-13 4.0014368048109e-13 -0.45 -2.57555869366297e-12 4.51378382660282e-13 -0.5 -2.3549300498494e-11 5.13223359843731e-13 -0.55 -3.04579309408817e-10 6.76856822878198e-13 -0.6 -4.08569070898393e-09 1.81698673350532e-12 -0.65 -5.49745850699349e-08 1.23250260127089e-11 -0.7 -7.39885005814236e-07 1.12703053495311e-10 1 2.00013968069239e-12 -1.00004739060888e-12 0.95 1.9001396091475e-12 -9.500473455933e-13 0.9 1.80013954675112e-12 -9.00047309843996e-13 0.85 1.70013949179616e-12 -8.50047281673932e-13 0.8 1.6001394428098e-12 -8.00047259631298e-13 0.75 1.50013939855105e-12 -7.50047242496289e-13 0.7 1.40013935799539e-12 -7.00047229265197e-13 0.65 1.30013932030962e-12 -6.50047219124854e-13 0.6 1.20013928482182e-12 -6.00047211422453e-13 0.55 1.10013925099128e-12 -5.50047205635551e-13 0.5 1.00013921838155e-12 -5.0004720134554e-13 0.45 9.00139186637332e-13 -4.50047198216054e-13 0.4 8.00139155391257e-13 -4.00047195908199e-13 0.35 7.00139124169856e-13 -3.50047194042818e-13 0.3 6.00139091180773e-13 -3.00047191373982e-13 0.25 5.00139046931495e-13 -2.50047182074043e-13 0.2 4.00138935548975e-13 -2.00047135472663e-13 0.15 3.00138418793267e-13 -1.50046887328904e-13 0.0999999999999997 2.00135412866929e-13 -1.00045555871696e-13 0.0499999999999997 1.00116877358138e-13 -5.00384053491905e-14 -3.19189119579733e-16 4.13266369913508e-23 -4.13269574907455e-23 -0.0500000000000003 -1.00748245348126e-13 5.02062762166932e-14 -0.1 -2.05600380651734e-13 1.01314194390297e-13 -0.15 -3.37419087797813e-13 1.57264868539493e-13 -0.2 -6.48097096433907e-13 2.39226184777887e-13 -0.25 -2.15446818446787e-12 4.60891732353883e-13 -0.3 -1.17066561494131e-11 1.4329144676477e-12 -0.35 -7.56902646351702e-11 6.43513659845002e-12 -0.4 -5.09516266252624e-10 3.30837257673465e-11 -0.45 -3.46507606823148e-09 1.75995841563531e-10 -0.5 -2.3662693798029e-08 9.43364055062962e-10 -0.55 -1.62010334901156e-07 5.06470888764686e-09 -0.6 -1.1113698548399e-06 2.72003189058533e-08 -0.65 -7.6351001490334e-06 1.46088943824131e-07 -0.7 -5.25086575807215e-05 7.84574524093006e-07 1 2.00327644497403e-12 -1.00166258885413e-12 0.95 1.90327522634095e-12 -9.51661829987974e-13 0.9 1.80327416147861e-12 -9.01661227098885e-13 0.85 1.70327322157782e-12 -8.51660751720984e-13 0.8 1.60327238194739e-12 -8.01660379517416e-13 0.75 1.50327162185699e-12 -7.51660090113302e-13 0.7 1.40327092419329e-12 -7.01659866744074e-13 0.65 1.30327027499328e-12 -6.51659695784337e-13 0.6 1.20326966293331e-12 -6.01659566235941e-13 0.55 1.10326907883883e-12 -5.51659469241195e-13 0.5 1.00326851524881e-12 -5.01659397661738e-13 0.45 9.03267966007376e-13 -4.51659345737866e-13 0.4 8.03267419379584e-13 -4.01659302585323e-13 0.35 7.03266857052713e-13 -3.51659253458335e-13 0.3 6.03266184981954e-13 -3.01659124178876e-13 0.25 5.03264949829233e-13 -2.51658579326244e-13 0.2 4.03260854364127e-13 -2.0165602981993e-13 0.15 3.03242071499722e-13 -1.51643910316706e-13 0.0999999999999997 2.03146897570381e-13 -1.01586174583837e-13 0.0499999999999997 1.02649084646558e-13 -5.13110528359524e-14 -3.19189119579733e-16 5.74616526524624e-22 -5.74616865734813e-22 -0.0500000000000003 -1.14300906252299e-13 5.62476512798067e-14 -0.1 -2.92557394988997e-13 1.36020050114038e-13 -0.15 -8.26341358275864e-13 3.27896677149148e-13 -0.2 -3.35991801167142e-12 1.05399192541054e-12 -0.25 -1.72629192519084e-11 4.32583892189599e-12 -0.3 -9.64208469066562e-11 1.97291461288618e-11 -0.35 -5.53218955592075e-10 9.29434025782216e-11 -0.4 -3.2110091991266e-09 4.41648457884488e-10 -0.45 -1.87737196442633e-08 2.10316987394419e-09 -0.5 -1.10379007982035e-07 1.002074273325e-08 -0.55 -6.51910887252282e-07 4.77505153092966e-08 -0.6 -3.86443305873982e-06 2.27541422639762e-07 -0.65 -2.29741440985882e-05 1.08419002076489e-06 -0.7 -0.000136841343558619 5.16367754246438e-06 1 1.33241796420608e-10 -1.18997504338438e-10 0.95 1.33133017743777e-10 -1.18942341080528e-10 0.9 1.3302527912769e-10 -1.18888240549187e-10 0.85 1.32918385614859e-10 -1.18835010288094e-10 0.8 1.32812171910111e-10 -1.18782487528931e-10 0.75 1.32706499263572e-10 -1.18730536056082e-10 0.7 1.32601252019355e-10 -1.18679042759963e-10 0.65 1.32496334143154e-10 -1.18627914223323e-10 0.6 1.32391665854098e-10 -1.18577073586362e-10 0.55 1.32286942622334e-10 -1.18526220429061e-10 0.5 1.32182034246665e-10 -1.18475233268153e-10 0.45 1.32075929370453e-10 -1.1842312744995e-10 0.4 1.31965627787721e-10 -1.18367000034944e-10 0.35 1.31841273698829e-10 -1.18297370028869e-10 0.3 1.31670227394066e-10 -1.18183065192031e-10 0.25 1.31344060206389e-10 -1.17921427585057e-10 0.2 1.30501840916263e-10 -1.17174246165479e-10 0.15 1.27939733576446e-10 -1.14827166885262e-10 0.0999999999999997 1.19633583550831e-10 -1.07208484385074e-10 0.0499999999999997 9.20971184342487e-11 -8.22201730505392e-11 -3.19189119579733e-16 1.25417761016621e-18 -1.25417773295083e-18 -0.0500000000000003 -3.09539287058435e-10 2.70795591663697e-10 -0.1 -1.3541232431065e-09 1.16293537315251e-09 -0.15 -4.89383672056619e-09 4.10236445773503e-09 -0.2 -1.69431479887297e-08 1.37874716806327e-08 -0.25 -5.81663885283876e-08 4.56990294206311e-08 -0.3 -1.99985843069292e-07 1.50843846051261e-07 -0.35 -6.9085107654328e-07 4.972712946193e-07 -0.4 -2.40087550170652e-06 1.63853236125606e-06 -0.45 -8.39779981514007e-06 5.39679839313927e-06 -0.5 -2.95570480011192e-05 1.77571808786904e-05 -0.55 -0.000104463914776383 5.823865265585e-05 -0.6 -0.000368015514479477 0.000189050517538463 -0.65 -0.0012634861813931 0.000594824816067526 -0.7 -0.00400047261301389 0.00172438470733699 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subcoupl_dc.standard0000644000175000017500000000036314163340332027353 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08247184220922e-05 7.93428604924756e-08 0.8 0.000884237129494995 1.78992740713022e-06 0.9 0.0156836587472444 6.99992610461282e-05 1 0.0539501798852761 0.00171840828232429 1.1 0.0840305590780728 0.0105289100046221 tmp_ns50wwy/tests/hicum2/npn/reference/CBE_npn_full_sh_dc.standard0000644000175000017500000001544414163340332025413 0ustar carstencarstenV(base) I(coll) I(base) -1 9.9999997015207e-13 -5.79341347633249e-08 -0.95 9.49999978664819e-13 -4.14049255466978e-08 -0.9 8.99999984989273e-13 -2.91251454476301e-08 -0.85 8.4999998961824e-13 -2.01378136713765e-08 -0.8 7.99999992951784e-13 -1.36660497156147e-08 -0.75 7.49999995310497e-13 -9.08729458398197e-09 -0.7 6.99999996947687e-13 -5.90965169907254e-09 -0.65 6.49999998060431e-13 -3.75041880757126e-09 -0.6 5.99999998799482e-13 -2.3168484570208e-09 -0.55 5.4999999927803e-13 -1.38913882956351e-09 -0.5 4.99999999579328e-13 -8.05619851916244e-10 -0.45 4.49999999763229e-13 -4.50062779011216e-10 -0.4 3.99999999871684e-13 -2.41006262383479e-10 -0.35 3.49999999933267e-13 -1.22959773285947e-10 -0.3 2.99999999966828e-13 -5.93176993657236e-11 -0.25 2.4999999998436e-13 -2.67959410507229e-11 -0.2 1.99999999993175e-13 -1.11886569028306e-11 -0.15 1.49999999997527e-13 -4.23684253964114e-12 -0.0999999999999997 9.99999999997355e-14 -1.40306230802728e-12 -0.0499999999999997 5.00000000008506e-14 -3.57639800704443e-13 3.19189119579733e-16 -2.24597758598029e-28 1.11071615455118e-27 0.0500000000000003 -5.00000000164045e-14 1.00034434336811e-13 0.1 -1.00000000180705e-13 2.00168386731406e-13 0.15 -1.50000001763803e-13 3.0069212854088e-13 0.2 -2.00000016957996e-13 4.02750538790327e-13 0.25 -2.50000162728964e-13 5.10882824752989e-13 0.3 -3.00001561174843e-13 6.43179384985094e-13 0.35 -3.50014977021663e-13 8.72105835750341e-13 0.4 -4.0014368047636e-13 1.4894032121023e-12 0.45 -4.51378383027313e-13 3.67549234987265e-12 0.5 -5.13223380803581e-13 1.22313879887219e-11 0.55 -6.76857937575984e-13 4.6800215685024e-11 0.6 -1.81705065605584e-12 2.05208788215455e-10 0.65 -1.23289421879791e-11 9.90747303906032e-10 0.7 -1.12996696079871e-10 5.97588651479328e-09 -1 1.00004713212806e-12 -5.61643810093382e-08 -0.95 9.50047149574575e-13 -3.96720334194462e-08 -0.9 9.00047162397927e-13 -2.7550220734723e-08 -0.85 8.50047171673199e-13 -1.87826015064205e-08 -0.8 8.00047178266116e-13 -1.25507565112721e-08 -0.75 7.50047182864142e-13 -8.20478971866531e-09 -0.7 7.00047186004901e-13 -5.23645320384952e-09 -0.65 6.50047188101854e-13 -3.25488076812882e-09 -0.6 6.00047189467158e-13 -1.96497148416249e-09 -0.55 5.50047190331739e-13 -1.14841822669851e-09 -0.5 5.00047190862616e-13 -6.47328916512928e-10 -0.45 4.50047191177589e-13 -3.50341430471441e-10 -0.4 4.000471912893e-13 -1.81088882299381e-10 -0.35 3.50047191089861e-13 -8.88323679168347e-11 -0.3 3.00047189541522e-13 -4.104541367401e-11 -0.25 2.5004718097498e-13 -1.77102104009089e-11 -0.2 2.00047134838832e-13 -7.07181999891841e-12 -0.15 1.5004688698014e-13 -2.59384509602248e-12 -0.0999999999999997 1.00045555692315e-13 -8.67647784359964e-13 -0.0499999999999997 5.00384052720117e-14 -2.46120615844389e-13 3.19189119579733e-16 4.13269573212636e-23 -4.13260625527004e-23 0.0500000000000003 -5.02062761145329e-14 1.60031662079025e-13 0.1 -1.0131419408468e-13 4.28890747107815e-13 0.15 -1.57264867818105e-13 1.00652612714761e-12 0.2 -2.39226183332991e-13 2.46843966855197e-12 0.25 -4.60891730126788e-13 6.50051226635288e-12 0.3 -1.4329144690935e-12 1.81867360256245e-11 0.35 -6.43513668089688e-12 5.35880990342276e-11 0.4 -3.30837269315501e-11 1.6707490417506e-10 0.45 -1.75995843418763e-10 5.60188611427869e-10 0.5 -9.43363368757832e-10 2.1122065424613e-09 0.55 -5.06466963648339e-09 8.73470707776495e-09 0.6 -2.71986743939348e-08 3.98407514644345e-08 0.65 -1.46027863500081e-07 1.96001862768085e-07 0.7 -7.82463314103381e-07 1.01452864787301e-06 -1 1.00165917262577e-12 -5.55552264587846e-08 -0.95 9.51659191938014e-13 -3.90866824531864e-08 -0.9 9.01659206081387e-13 -2.70260964004749e-08 -0.85 8.51659216270628e-13 -1.83375518075542e-08 -0.8 8.01659223481238e-13 -1.21891502034958e-08 -0.75 7.51659228485456e-13 -7.92233344094503e-09 -0.7 7.01659231885099e-13 -5.02387787710995e-09 -0.65 6.51659234141164e-13 -3.10064994670273e-09 -0.6 6.01659235600142e-13 -1.85716530490979e-09 -0.55 5.51659236517056e-13 -1.0759435735884e-09 -0.5 5.01659237075288e-13 -6.00599387991606e-10 -0.45 4.5165923740333e-13 -3.21559859492307e-10 -0.4 4.01659231349398e-13 -1.64250943520177e-10 -0.35 3.51659207956548e-13 -7.95528839430209e-11 -0.3 3.01659096055077e-13 -3.62902338335926e-11 -0.25 2.5165856258165e-13 -1.54970428163576e-11 -0.2 2.0165602027038e-13 -6.18428833330062e-12 -0.15 1.51643905146023e-13 -2.33538160633361e-12 -0.0999999999999997 1.01586171988794e-13 -8.66384377973613e-13 -0.0499999999999997 5.13110517658733e-14 -3.08740217166105e-13 3.19189119579733e-16 5.74616864255699e-22 -5.74615169092221e-22 0.0500000000000003 -5.6247650120732e-14 3.95587765349087e-13 0.1 -1.36020047160779e-13 1.28235101739212e-12 0.15 -3.27896671325851e-13 3.50961535655099e-12 0.2 -1.05399191551782e-12 9.50662051465433e-12 0.25 -4.32583890387995e-12 2.66000235287292e-11 0.3 -1.97291460036267e-11 7.85284008612682e-11 0.35 -9.29433994145704e-11 2.49012373941188e-10 0.4 -4.41648364277424e-10 8.59772993498026e-10 0.45 -2.10316715602819e-09 3.26595096020147e-09 0.5 -1.0020665956095e-08 1.33593246851408e-08 0.55 -4.77484001495407e-08 5.80611406507811e-08 0.6 -2.27484438672063e-07 2.63112956742913e-07 0.65 -1.08269023355812e-06 1.22464418932153e-06 0.7 -5.12528803939129e-06 5.79266079457134e-06 -1 1.18975135152357e-10 -5.24880699391842e-08 -0.95 1.189251351773e-10 -3.62493285453486e-08 -0.9 1.18875135195239e-10 -2.45716344527744e-08 -0.85 1.18825135207906e-10 -1.63269278499491e-08 -0.8 1.18775135216674e-10 -1.06217914591039e-08 -0.75 1.18725135222614e-10 -6.75999509576158e-09 -0.7 1.18675135226552e-10 -4.2085439378859e-09 -0.65 1.18625135229116e-10 -2.5673443567891e-09 -0.6 1.18575135230799e-10 -1.54253058904944e-09 -0.55 1.18524897837337e-10 -9.2342097431264e-10 -0.5 1.18474353032543e-10 -5.62998194684534e-10 -0.45 1.18422557932515e-10 -3.61731801611264e-10 -0.4 1.18366643187059e-10 -2.54497449194966e-10 -0.35 1.18297154463758e-10 -2.00284275038608e-10 -0.3 1.18182940320882e-10 -1.74333050976209e-10 -0.25 1.17921358685164e-10 -1.62298886171316e-10 -0.2 1.17174210285878e-10 -1.55958381541255e-10 -0.15 1.14827149509893e-10 -1.49786489487052e-10 -0.0999999999999997 1.07208476768789e-10 -1.37104009945538e-10 -0.0499999999999997 8.22201701815567e-11 -1.02440330029083e-10 3.19189119579733e-16 1.25417769417674e-18 -1.25417751323098e-18 0.0500000000000003 -2.70795575537001e-10 3.14034385932236e-10 0.1 -1.16293516232925e-09 1.30036119774443e-09 0.15 -4.1023620476332e-09 4.45056238314179e-09 0.2 -1.37874450883423e-08 1.46271473089844e-08 0.25 -4.56987378354749e-08 4.77538395978037e-08 0.3 -1.5084064214968e-07 1.56136346704101e-07 0.35 -4.97235954543191e-07 5.11919483516112e-07 0.4 -1.63814115629387e-06 1.68227968708893e-06 0.45 -5.3924593734013e-06 5.53551042839562e-06 0.5 -1.77091663689186e-05 1.82045029908749e-05 0.55 -5.77142510721546e-05 5.95535595315204e-05 0.6 -0.000183580405647599 0.000191158066138396 0.65 -0.000545082700109929 0.000580761559436645 0.7 -0.00139309111136283 0.00156179007908435 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_internal_dc.standard0000644000175000017500000000035714163340332026314 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08295775100497e-05 2.4577428450156e-08 0.8 0.000903185640979051 8.70749740005386e-07 0.9 0.0237372517478673 4.02930107351914e-05 1 0.115791755387339 0.0066354828858404 1.1 0.299782443961744 0.0963795344345631 tmp_ns50wwy/tests/hicum2/npn/reference/vce_0_npn_1D_no_aval.standard0000644000175000017500000003033614163340332025654 0ustar carstencarstenV(base) I(coll) I(base) -1 1.000000000002e-12 -2.00000791474344e-12 -0.95 9.50000000002003e-13 -1.90000791474344e-12 -0.9 9.00000000002003e-13 -1.80000791474344e-12 -0.85 8.50000000002003e-13 -1.70000791474344e-12 -0.8 8.00000000002003e-13 -1.60000791474344e-12 -0.75 7.50000000002003e-13 -1.50000791474344e-12 -0.7 7.00000000002003e-13 -1.40000791474344e-12 -0.65 6.50000000002002e-13 -1.30000791474344e-12 -0.6 6.00000000002002e-13 -1.20000791474344e-12 -0.55 5.50000000002002e-13 -1.10000791474344e-12 -0.5 5.00000000002002e-13 -1.00000791472557e-12 -0.45 4.50000000002002e-13 -9.00007914677867e-13 -0.4 4.00000000002002e-13 -8.00007914502802e-13 -0.35 3.50000000002002e-13 -7.00007913860362e-13 -0.3 3.00000000002002e-13 -6.00007911502782e-13 -0.25 2.50000000002002e-13 -5.00007902851104e-13 -0.2 2.00000000002002e-13 -4.00007871101797e-13 -0.15 1.50000000002e-13 -3.00007754590465e-13 -0.0999999999999997 1.00000000001981e-13 -2.00007327025522e-13 -0.0499999999999997 5.00000000017936e-14 -1.0000575797825e-13 3.19189119579733e-16 -3.19189119601768e-28 6.38443850634424e-28 0.0500000000000003 -5.00000000172105e-14 1.00021130226252e-13 0.1 -1.00000000182315e-13 2.00098672517439e-13 0.15 -1.50000001766223e-13 3.00383232640681e-13 0.2 -2.00000016961274e-13 4.01427500439537e-13 0.25 -2.5000016273329e-13 5.05259770605876e-13 0.3 -3.00001561180812e-13 6.19324037996587e-13 0.35 -3.50014977030612e-13 7.70944534005022e-13 0.4 -4.00143680484298e-13 1.06045936685287e-12 0.45 -4.51378382663994e-13 1.85671697272989e-12 0.5 -5.13223359849033e-13 4.51945012808319e-12 0.55 -6.7685682289899e-13 1.40984637155048e-11 0.6 -1.81698673391557e-12 6.65185464373853e-11 0.65 -1.23250260385089e-11 4.02291702500205e-10 0.700000000000001 -1.12703055744962e-10 3.47593602243093e-09 0.750000000000001 -1.07523878099576e-09 3.70437283331312e-08 0.800000000000001 -1.03087878741443e-08 4.2078518234126e-07 0.850000000000001 -9.88893781007048e-08 5.19838085606027e-06 0.900000000000001 -9.48676927691166e-07 3.64426951851013e-05 0.950000000000001 -9.10101825505032e-06 0.00011233505028582 1 -8.73095920185772e-05 0.000408005693289852 -1 1.00000034937479e-12 -2.00170685364324e-12 -0.95 9.50000349374789e-13 -1.90170685364324e-12 -0.9 9.00000349374789e-13 -1.80170685364324e-12 -0.85 8.50000349374789e-13 -1.70170685364324e-12 -0.8 8.00000349374789e-13 -1.60170685364324e-12 -0.75 7.50000349374789e-13 -1.50170685364324e-12 -0.7 7.00000349374788e-13 -1.40170685364324e-12 -0.65 6.50000349374788e-13 -1.30170685192337e-12 -0.6 6.00000349374788e-13 -1.20170684866847e-12 -0.55 5.50000349374788e-13 -1.10170683925358e-12 -0.5 5.00000349374788e-13 -1.00170681202073e-12 -0.45 4.50000349374788e-13 -9.01706733248892e-13 -0.4 4.00000349374788e-13 -8.01706505398964e-13 -0.35 3.50000349373942e-13 -7.01705846335334e-13 -0.3 3.00000349369419e-13 -6.0170393997184e-13 -0.25 2.50000349340734e-13 -5.01698425742356e-13 -0.2 2.00000349158814e-13 -4.01682475568277e-13 -0.15 1.50000348005092e-13 -3.01636338580372e-13 -0.0999999999999997 1.0000034068825e-13 -2.01502881963841e-13 -0.0499999999999997 5.00002942852492e-14 -1.01116829370314e-13 3.19189119579733e-16 -3.19193325257538e-28 6.49922778288961e-28 0.0500000000000003 -5.00018663406597e-14 1.03231482032927e-13 0.1 -1.00013702569158e-13 2.12585113053995e-13 0.15 -1.5008876727096e-13 3.39681870231882e-13 0.2 -2.00564823428334e-13 5.18321118394844e-13 0.25 -2.53583945059861e-13 8.47446498126437e-13 0.3 -3.22731046267902e-13 1.62074624026145e-12 0.35 -4.94160895546795e-13 3.73538840520007e-12 0.4 -1.31426223546669e-12 1.00900194681637e-11 0.45 -6.24820203501574e-12 3.10042420928383e-11 0.5 -3.72718761856151e-11 1.08679862139507e-10 0.55 -2.33755192271144e-10 5.16681810882605e-10 0.6 -1.47957434063713e-09 2.70327986136166e-09 0.65 -9.38022288444418e-09 1.60992979224565e-08 0.700000000000001 -5.94854287492185e-08 1.03283346580654e-07 0.750000000000001 -3.77249586153611e-07 6.8770590306344e-07 0.800000000000001 -2.39249190437502e-06 4.78271225894699e-06 0.850000000000001 -1.51730461610765e-05 3.86808605065979e-05 0.900000000000001 -9.62266090537246e-05 0.000213338659928004 0.950000000000001 -0.000610263789591723 0.000988312614424231 1 -0.00387025895403701 0.00535161304814611 -1 1.00004719155537e-12 -2.01521474409749e-12 -0.95 9.50047191555375e-13 -1.91521474409749e-12 -0.9 9.00047191555375e-13 -1.81521474409749e-12 -0.85 8.50047191555375e-13 -1.71521474409749e-12 -0.8 8.00047191555375e-13 -1.61521474409749e-12 -0.75 7.50047191555375e-13 -1.51521474409749e-12 -0.7 7.00047191555375e-13 -1.41521472396299e-12 -0.65 6.50047191555375e-13 -1.31521469116474e-12 -0.6 6.00047191555375e-13 -1.21521460493953e-12 -0.55 5.50047191555375e-13 -1.11521437825708e-12 -0.5 5.00047191555375e-13 -1.01521378231845e-12 -0.45 4.50047191555375e-13 -9.15212215620887e-13 -0.4 4.00047191487236e-13 -8.15208096770835e-13 -0.35 3.50047191189397e-13 -7.15197268368522e-13 -0.3 3.00047189589692e-13 -6.15168800137352e-13 -0.25 2.50047180997613e-13 -5.15093953964172e-13 -0.2 2.00047134849201e-13 -4.14897162929152e-13 -0.15 1.50046886984178e-13 -3.14379680797577e-13 -0.0999999999999997 1.00045555690914e-13 -2.13018560792853e-13 -0.0499999999999997 5.00384052598932e-14 -1.09436572557375e-13 3.19189119579733e-16 -3.1970128928037e-28 7.32062920045099e-28 0.0500000000000003 -5.02062762347062e-14 1.24914117152833e-13 0.1 -1.01314194398061e-13 2.90980896462593e-13 0.15 -1.57264868543545e-13 5.67725307780609e-13 0.2 -2.39226184782369e-13 1.14882509259251e-12 0.25 -4.60891732373051e-13 2.60210366399079e-12 0.3 -1.43291446790143e-12 6.73610052945694e-12 0.35 -6.43513660427478e-12 2.00061162101608e-11 0.4 -3.30837259264049e-11 6.85489977675323e-11 0.45 -1.75995846090798e-10 2.70515774413019e-10 0.5 -9.43364185070698e-10 1.25630053792754e-09 0.55 -5.06471262763449e-09 6.17833007841586e-09 0.6 -2.72004265233513e-08 3.20317602806378e-08 0.65 -1.46092040173211e-07 1.71064295627732e-07 0.700000000000001 -7.84663581577346e-07 9.28415745768935e-07 0.750000000000001 -4.21445744634298e-06 5.09879601067368e-06 0.800000000000001 -2.26360215187804e-05 2.8700178680583e-05 0.850000000000001 -0.000121579001631256 0.000175699566718311 0.900000000000001 -0.000653005827965913 0.000908465051650113 0.950000000000001 -0.0035073212278215 0.00440328372428201 1 -0.0188379669510573 0.0227283557895423 -1 1.00165923778792e-12 -2.07571285067188e-12 -0.95 9.51659237787923e-13 -1.97571285067188e-12 -0.9 9.01659237787923e-13 -1.87571285067188e-12 -0.85 8.51659237787923e-13 -1.77571285067188e-12 -0.8 8.01659237787923e-13 -1.67571285067188e-12 -0.75 7.51659237787923e-13 -1.57571274573438e-12 -0.7 7.01659237787923e-13 -1.47571259313674e-12 -0.65 6.51659237787923e-13 -1.37571221863519e-12 -0.6 6.01659237787923e-13 -1.2757112995423e-12 -0.55 5.51659237787923e-13 -1.17570904392614e-12 -0.5 5.01659237787923e-13 -1.07570350824598e-12 -0.45 4.51659237787923e-13 -9.75689922709861e-13 -0.4 4.01659231548673e-13 -8.75656575163143e-13 -0.35 3.5165920805556e-13 -7.75574726207634e-13 -0.3 3.0165909610208e-13 -6.75373800063673e-13 -0.25 2.51658562601834e-13 -5.74880432728592e-13 -0.2 2.01656020273409e-13 -4.73668387065748e-13 -0.15 1.51643905126578e-13 -3.70687925072269e-13 -0.0999999999999997 1.01586171915831e-13 -2.63345274734409e-13 -0.0499999999999997 5.13110515504252e-14 -1.45191279392474e-13 3.19189119579733e-16 -3.35660315171541e-28 1.08231716196323e-27 0.0500000000000003 -5.62476515155077e-14 2.13950765006697e-13 0.1 -1.36020050203075e-13 6.08121966893862e-13 0.15 -3.27896677190247e-13 1.49931859548195e-12 0.2 -1.05399192556076e-12 3.87148002941055e-12 0.25 -4.32583892443622e-12 1.11248349498664e-11 0.3 -1.97291461828154e-11 3.63099469027321e-11 0.35 -9.29434037817878e-11 1.33935721730965e-10 0.4 -4.41648485056693e-10 5.45224221548509e-10 0.45 -2.10317048912057e-09 2.39981882609197e-09 0.5 -1.00207566689862e-08 1.09376345861643e-08 0.55 -4.77508310125507e-08 5.10864062177652e-08 0.6 -2.27548573707165e-07 2.41926186397681e-07 0.65 -1.08435194839998e-06 1.15470878303992e-06 0.700000000000001 -5.16734064081571e-06 5.53886593993017e-06 0.750000000000001 -2.46243103052517e-05 2.67001628198755e-05 0.800000000000001 -0.000117344055554714 0.000130215837064791 0.850000000000001 -0.000559188357169267 0.000665866085586443 0.900000000000001 -0.00266474188743109 0.00323615830897643 0.950000000000001 -0.0126984928103494 0.0148026242803206 1 -0.0605130727475002 0.0694620631135213 -1 1.8972057352866e-12 -4.12190327764117e-12 -0.95 1.8472057352866e-12 -4.02190327764117e-12 -0.9 1.7972057352866e-12 -3.92190225632505e-12 -0.85 1.7472057352866e-12 -3.82190105524851e-12 -0.8 1.6972057352866e-12 -3.7218984416956e-12 -0.75 1.6472057352866e-12 -3.62189275458196e-12 -0.7 1.5972057352866e-12 -3.52188037937372e-12 -0.65 1.5472057352866e-12 -3.421853450814e-12 -0.6 1.4972057352866e-12 -3.32179485403615e-12 -0.55 1.4472057352866e-12 -3.22166734694294e-12 -0.5 1.39720453154406e-12 -3.12138868666749e-12 -0.45 1.34720108189659e-12 -3.02078148588957e-12 -0.4 1.29718774635808e-12 -2.91945437813812e-12 -0.35 1.24713619425335e-12 -2.81654401844977e-12 -0.3 1.19693690575066e-12 -2.71012381305456e-12 -0.25 1.1461665025342e-12 -2.59581606397891e-12 -0.2 1.09318830204633e-12 -2.46337785907519e-12 -0.15 1.0316752684082e-12 -2.28774767856739e-12 -0.0999999999999997 9.37168545609638e-13 -2.00366729532698e-12 -0.0499999999999997 7.15115858496031e-13 -1.42765477842378e-12 3.19189119579733e-16 -8.02744857152902e-27 1.45402842050337e-26 0.0500000000000003 -2.62118393583019e-12 4.11796381232438e-12 0.1 -1.26107858073296e-11 1.73289046050678e-11 0.15 -5.10849856427318e-11 6.28591147727847e-11 0.2 -1.99674047073791e-10 2.2722125597265e-10 0.25 -7.73941672042818e-10 8.37924844738347e-10 0.3 -2.99378407983385e-09 3.14686776293095e-09 0.35 -1.15750376504356e-08 1.19668282984746e-08 0.4 -4.47480341213117e-08 4.58737379402934e-08 0.45 -1.72987015700747e-07 1.76651608133279e-07 0.5 -6.68729088106657e-07 6.82221512956974e-07 0.55 -2.58515303334841e-06 2.63958184694319e-06 0.6 -9.99360421369542e-06 1.02259253991901e-05 0.65 -3.86329612906105e-05 3.96560267477216e-05 0.700000000000001 -0.000149346085647431 0.00015392770339063 0.750000000000001 -0.000577337394380024 0.000598091405053974 0.800000000000001 -0.00223185271458484 0.00232799821195549 0.850000000000001 -0.00862782592505608 0.00913043853947601 0.900000000000001 -0.0333531777003911 0.0359868248907538 0.950000000000001 -0.12893566378958 0.139462022824438 1 -0.498435427837973 0.540783765228211 -1 1.189751352344e-10 -1.31097625923121e-10 -0.95 1.189251352344e-10 -1.30997614187866e-10 -0.9 1.188751352344e-10 -1.30897590893297e-10 -0.85 1.188251352344e-10 -1.30797544653401e-10 -0.8 1.187751352344e-10 -1.30697452866861e-10 -0.75 1.187251352344e-10 -1.30597270669889e-10 -0.7 1.186751352344e-10 -1.30496909007528e-10 -0.65 1.186251352344e-10 -1.30396191105021e-10 -0.6 1.185751352344e-10 -1.30294766063147e-10 -0.55 1.18524897839728e-10 -1.30191699949637e-10 -0.5 1.18474353033708e-10 -1.30085539518853e-10 -0.45 1.18422557931724e-10 -1.29972596872819e-10 -0.4 1.1836664318223e-10 -1.29844551130628e-10 -0.35 1.1829715445018e-10 -1.296811206805e-10 -0.3 1.18182940289071e-10 -1.29429638051731e-10 -0.25 1.17921358618367e-10 -1.28944661242225e-10 -0.2 1.17174210160694e-10 -1.27802689025274e-10 -0.15 1.14827149312192e-10 -1.24718744156493e-10 -0.0999999999999997 1.07208476551534e-10 -1.15677455868842e-10 -0.0499999999999997 8.22201701086366e-11 -8.78797373293218e-11 3.19189119579733e-16 -8.98266446444303e-25 9.49965234728868e-25 0.0500000000000003 -2.70795604604009e-10 2.82482766296905e-10 0.1 -1.16293554813797e-09 1.19968102222309e-09 0.15 -4.10236647924629e-09 4.19605719293831e-09 0.2 -1.37874939994979e-08 1.4021741036905e-08 0.25 -4.56992726157392e-08 4.63172577072979e-08 0.3 -1.50846485469855e-07 1.52625480136746e-07 0.35 -4.97299903421944e-07 5.02898018479888e-07 0.4 -1.638842272846e-06 1.65777987576151e-06 0.45 -5.40015333199822e-06 5.46745640950898e-06 0.5 -1.7793439436174e-05 1.80399316400873e-05 0.55 -5.86285469385747e-05 5.95468841350995e-05 0.6 -0.00019317768862541 0.000196631269605882 0.65 -0.000636508749731422 0.00064956221791614 0.700000000000001 -0.00209725704818039 0.00214673139842963 0.750000000000001 -0.00691033192322979 0.0070981937045267 0.800000000000001 -0.0227691145607407 0.0234850661691367 0.850000000000001 -0.075022817915502 0.0778328258163541 0.900000000000001 -0.247195523519854 0.258365553265715 0.950000000000001 -0.814493889989326 0.856020476606635 1 -2.68370675662406 2.83662793163795 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_vert_nqs_ac.standard0000644000175000017500000000612614163340332026336 0ustar carstencarstenFreq N(coll) 1000 6.67462092044459e-24 3162.27766017779 6.67462092044459e-24 10000.0000000595 6.67462092044459e-24 31622.7766019662 6.67462092044459e-24 100000.000001191 6.67462092044459e-24 316227.766021545 6.67462092044459e-24 1000000.00001786 6.67462092044459e-24 3162277.66023428 6.67462092044459e-24 10000000.0002382 6.67462092044459e-24 31622776.6025311 6.67462092044459e-24 100000000.002977 6.67462092044459e-24 316227766.027194 6.67462092044459e-24 1000000000.03572 6.67462092044459e-24 3162277660.29077 6.67462092044459e-24 10000000000.4168 6.67462092044459e-24 31622776603.096 6.67462092044459e-24 100000000000 6.67462092044459e-24 1000 2.89453031762958e-22 3162.27766017779 2.89453031762958e-22 10000.0000000595 2.89453031762958e-22 31622.7766019662 2.89453031762958e-22 100000.000001191 2.89453031762958e-22 316227.766021545 2.89453031762958e-22 1000000.00001786 2.89453031762958e-22 3162277.66023428 2.89453031762958e-22 10000000.0002382 2.89453031762958e-22 31622776.6025311 2.89453031762958e-22 100000000.002977 2.89453031762958e-22 316227766.027194 2.89453031762958e-22 1000000000.03572 2.89453031762958e-22 3162277660.29077 2.89453031762958e-22 10000000000.4168 2.89453031762958e-22 31622776603.096 2.89453031762958e-22 100000000000 2.89453031762958e-22 1000 7.63767618897356e-21 3162.27766017779 7.63767618897356e-21 10000.0000000595 7.63767618897356e-21 31622.7766019662 7.63767618897356e-21 100000.000001191 7.63767618897356e-21 316227.766021545 7.63767618897356e-21 1000000.00001786 7.63767618897356e-21 3162277.66023428 7.63767618897356e-21 10000000.0002382 7.63767618897356e-21 31622776.6025311 7.63767618897356e-21 100000000.002977 7.63767618897356e-21 316227766.027194 7.63767618897356e-21 1000000000.03572 7.63767618897356e-21 3162277660.29077 7.63767618897356e-21 10000000000.4168 7.63767618897356e-21 31622776603.096 7.63767618897356e-21 100000000000 7.63767618897356e-21 1000 3.85887047097965e-20 3162.27766017779 3.85887047097965e-20 10000.0000000595 3.85887047097965e-20 31622.7766019662 3.85887047097965e-20 100000.000001191 3.85887047097965e-20 316227.766021545 3.85887047097965e-20 1000000.00001786 3.85887047097965e-20 3162277.66023428 3.85887047097965e-20 10000000.0002382 3.85887047097965e-20 31622776.6025311 3.85887047097965e-20 100000000.002977 3.85887047097965e-20 316227766.027194 3.85887047097965e-20 1000000000.03572 3.85887047097965e-20 3162277660.29077 3.85887047097965e-20 10000000000.4168 3.85887047097965e-20 31622776603.096 3.85887047097965e-20 100000000000 3.85887047097965e-20 1000 1.00963577679414e-19 3162.27766017779 1.00963577679414e-19 10000.0000000595 1.00963577679414e-19 31622.7766019662 1.00963577679414e-19 100000.000001191 1.00963577679414e-19 316227.766021545 1.00963577679414e-19 1000000.00001786 1.00963577679414e-19 3162277.66023428 1.00963577679414e-19 10000000.0002382 1.00963577679414e-19 31622776.6025311 1.00963577679414e-19 100000000.002977 1.00963577679414e-19 316227766.027194 1.00963577679414e-19 1000000000.03572 1.00963577679414e-19 3162277660.29077 1.00963577679414e-19 10000000000.4168 1.00963577679414e-19 31622776603.096 1.00963577679414e-19 100000000000 1.00963577679414e-19 tmp_ns50wwy/tests/hicum2/npn/reference/fout_npn_1D_npn_lat_nqs.standard0000644000175000017500000012317214163340332026533 0ustar carstencarstenV(coll) I(coll) I(base) 0 -2.72003070507726e-08 3.20333790405368e-08 0.05 6.69866020721558e-07 9.16658817234611e-09 0.1 7.71908233498929e-07 4.10033085475503e-09 0.15 7.8706904045289e-07 2.91791299455269e-09 0.2 7.89507675162451e-07 2.63435734984334e-09 0.25 7.90072221029919e-07 2.56234927532594e-09 0.3 7.90354769933591e-07 2.54248729082111e-09 0.35 7.90590389951391e-07 2.53641935153231e-09 0.4 7.90814409622619e-07 2.53433820270684e-09 0.45 7.91032554134447e-07 2.53352042826515e-09 0.5 7.91246082392547e-07 2.53312560311512e-09 0.55 7.91455539584592e-07 2.53284750513499e-09 0.6 7.91661339952551e-07 2.53252798714936e-09 0.65 7.91863877648153e-07 2.53202711897027e-09 0.7 7.92063568381837e-07 2.53116513479253e-09 0.75 7.92260882743669e-07 2.52968525080376e-09 0.8 7.92456380504021e-07 2.52722012157224e-09 0.85 7.92650747231184e-07 2.52325516567591e-09 0.9 7.92844833427014e-07 2.51709343700241e-09 0.95 7.93039696620513e-07 2.50781705751967e-09 1 7.93236647709685e-07 2.49424354578493e-09 1.05 7.93437304236088e-07 2.47487514199909e-09 1.1 7.93643655166628e-07 2.44783666188768e-09 1.15 7.93858143915042e-07 2.41079514334884e-09 1.2 7.94083778181134e-07 2.36085265817052e-09 1.25 7.94324275639462e-07 2.29440313475309e-09 1.3 7.94584251997331e-07 2.20694645326738e-09 1.35 7.94869450813541e-07 2.09286010761504e-09 1.4 7.95187002074697e-07 1.94514107155082e-09 1.45 7.95545680874169e-07 1.75514620422341e-09 1.5 7.9595612459001e-07 1.51237266566379e-09 1.55 7.96430965607245e-07 1.20432148337474e-09 1.6 7.96984853787031e-07 8.16470620631416e-10 1.65 7.97634376315671e-07 3.32350730903829e-10 1.7 7.98397917793415e-07 -2.6631842007781e-10 1.75 7.99295520817251e-07 -9.99490528203492e-10 1.8 8.00348796421319e-07 -1.88870351519216e-09 1.85 8.01580902078486e-07 -2.95705642775583e-09 1.9 8.03016571967181e-07 -4.22923766749418e-09 1.95 8.04682166243121e-07 -5.73157182919298e-09 2 8.06605706787124e-07 -7.49205305140206e-09 2.05 8.08816879292481e-07 -9.54034500820778e-09 2.1 8.11346995990661e-07 -1.19077419509344e-08 2.15 8.14228923650978e-07 -1.46270954370652e-08 2.2 8.17496986221578e-07 -1.77327160575628e-08 2.25 8.21186851927317e-07 -2.12602599022378e-08 2.3 8.25335412854702e-07 -2.52466077197551e-08 2.35 8.29980662640619e-07 -2.97297423277771e-08 2.4 8.35161575720791e-07 -3.47486276825232e-08 2.45 8.40917990000229e-07 -4.03430914364926e-08 2.5 8.47290493780807e-07 -4.65537117963716e-08 2.55 8.543203171954e-07 -5.34217089151823e-08 2.6 8.62049228110477e-07 -6.09888407704109e-08 2.65 8.70519432350726e-07 -6.92973033752247e-08 2.7 8.79773478087139e-07 -7.8389635160074e-08 2.75 8.89854164261089e-07 -8.83086253945732e-08 2.8 9.00804452960801e-07 -9.90972265644474e-08 2.85 9.12667385707693e-07 -1.10798470659966e-07 2.9 9.25486003641361e-07 -1.23455389363971e-07 2.95 9.39303271611565e-07 -1.37110938147493e-07 3 9.541620061945e-07 -1.51807924289888e-07 3.05 9.70104807650105e-07 -1.67588938840133e-07 3.1 9.8717399582997e-07 -1.8449629252873e-07 3.15 1.00541155003329e-06 -2.02571955627501e-07 3.2 1.02485905279291e-06 -2.21857501739377e-07 3.25 1.04555763755696e-06 -2.42394055483558e-07 3.3 1.06754794021426e-06 -2.64222244024243e-07 3.35 1.09087005439516e-06 -2.8738215237454e-07 3.4 1.11556349046386e-06 -3.11913282391602e-07 3.45 1.14166713810433e-06 -3.3785451536513e-07 3.5 1.16921923238972e-06 -3.65244078089097e-07 3.54999999999999 1.19825732321494e-06 -3.94119512296376e-07 3.6 1.22881824796371e-06 -4.24517647327547e-07 3.65 1.26093810727471e-06 -4.5647457589862e-07 3.69999999999999 1.2946522437671e-06 -4.90025632827847e-07 3.75 1.32999522358233e-06 -5.25205376578517e-07 3.79999999999999 1.36700082059747e-06 -5.6204757347317e-07 3.84999999999999 1.40570200316537e-06 -6.00585184434277e-07 3.89999999999999 1.44613092323725e-06 -6.40850354107275e-07 3.94999999999999 1.48831890772573e-06 -6.82874402223702e-07 3.99999999999999 1.53229645196837e-06 -7.26687817064753e-07 4.04999999999999 1.57809321515557e-06 -7.72320250888952e-07 4.09999999999999 1.62573801759025e-06 -8.19800517191495e-07 4.14999999999999 1.67525883965128e-06 -8.69156589667111e-07 4.19999999999999 1.72668282233709e-06 -9.20415602753006e-07 4.24999999999999 1.78003626927089e-06 -9.73603853633245e-07 4.29999999999999 1.83534465005393e-06 -1.02874680559108e-06 4.34999999999999 1.89263260485843e-06 -1.0858690926008e-06 4.39999999999999 1.95192395015701e-06 -1.144994525056e-06 4.44999999999999 2.01324168549053e-06 -1.20614609653609e-06 4.49999999999999 2.07660800118154e-06 -1.26934599151845e-06 4.54999999999999 2.14204428690537e-06 -1.33461559394803e-06 4.59999999999999 2.20957114103624e-06 -1.40197549658191e-06 4.64999999999999 2.27920838068996e-06 -1.47144551103046e-06 4.69999999999999 2.35097505239005e-06 -1.54304467842175e-06 4.74999999999999 2.4248894432883e-06 -1.61679128062045e-06 4.79999999999999 2.50096909287519e-06 -1.69270285193648e-06 4.84999999999999 2.57923080511972e-06 -1.77079619126302e-06 4.89999999999999 2.65969066098234e-06 -1.85108737458766e-06 4.94999999999999 2.7423640312482e-06 -1.93359176782378e-06 4.99999999999999 2.82726558963189e-06 -2.01832403991336e-06 5.04999999999999 2.91440932610803e-06 -2.10529817615573e-06 5.09999999999999 3.00380856042547e-06 -2.19452749171982e-06 5.14999999999999 3.09547595576594e-06 -2.28602464530092e-06 5.19999999999999 3.18942353251099e-06 -2.3798016528856e-06 5.24999999999999 3.28566268208366e-06 -2.47586990159156e-06 5.29999999999999 3.38420418083422e-06 -2.57424016355132e-06 5.34999999999999 3.48505820394144e-06 -2.67492260981162e-06 5.39999999999999 3.5882343393036e-06 -2.77792682422246e-06 5.44999999999999 3.6937416013951e-06 -2.88326181729182e-06 5.49999999999999 3.8015884450673e-06 -2.99093603998456e-06 5.54999999999999 3.91178277927332e-06 -3.1009573974453e-06 5.59999999999999 4.02433198069889e-06 -3.21333326262744e-06 5.64999999999999 4.13924290728321e-06 -3.32807048981206e-06 5.69999999999999 4.25652191161439e-06 -3.4451754280016e-06 5.74999999999999 4.37617485418682e-06 -3.56465393417531e-06 5.79999999999999 4.49820711650816e-06 -3.68651138639447e-06 5.84999999999999 4.6226236140453e-06 -3.81075269674654e-06 5.89999999999999 4.74942880900015e-06 -3.93738232411917e-06 5.94999999999999 4.8786267229066e-06 -4.06640428679538e-06 6 5.01022094904146e-06 -4.19782217486285e-06 0 -1.46088643876293e-07 1.71071665617323e-07 0.05 4.33014065002654e-06 4.74600631508749e-08 0.1 4.98448829534694e-06 1.92193624352512e-08 0.15 5.08299294819592e-06 1.241636528549e-08 0.2 5.09854073949499e-06 1.0739823218091e-08 0.25 5.1021058225621e-06 1.03036788458807e-08 0.3 5.10386925380348e-06 1.01809668519974e-08 0.35 5.1053311972057e-06 1.01430264378784e-08 0.4 5.106717035795e-06 1.01300541263409e-08 0.45 5.10806361091981e-06 1.0125137227855e-08 0.5 5.10937927498919e-06 1.01230215027654e-08 0.55 5.11066771868115e-06 1.01218531436945e-08 0.6 5.11193166037922e-06 1.01207891626204e-08 0.65 5.11317353983672e-06 1.0119201052884e-08 0.7 5.11439576902116e-06 1.0116331693341e-08 0.75 5.11560092775873e-06 1.01110842274712e-08 0.8 5.11679196551542e-06 1.01018317345072e-08 0.85 5.11797241912833e-06 1.00862036260209e-08 0.9 5.11914664728584e-06 1.00608800099404e-08 0.95 5.1203200817786e-06 1.00213649857319e-08 1 5.12149949808262e-06 9.96173412304578e-09 1.05 5.12269331350447e-06 9.87435316543078e-09 1.1 5.12391193017171e-06 9.74955158755554e-09 1.15 5.12516815238617e-06 9.57522177008357e-09 1.2 5.12647772181924e-06 9.33630043802954e-09 1.25 5.12786002598104e-06 9.01407675924371e-09 1.3 5.1293390383567e-06 8.5852680563252e-09 1.35 5.1309445324121e-06 8.02081966259686e-09 1.4 5.13271356564836e-06 7.28443085822288e-09 1.45 5.1346921498177e-06 6.33088851689844e-09 1.5 5.13693692227011e-06 5.10439144379886e-09 1.55 5.13951654967188e-06 3.53713317754785e-09 1.6 5.14251258649956e-06 1.54842178482491e-09 1.65 5.14601962144302e-06 -9.55493269544041e-10 1.7 5.15014476075779e-06 -4.0809312597612e-09 1.75 5.15500672519836e-06 -7.94589871560005e-09 1.8 5.16073494963133e-06 -1.26792015888975e-08 1.85 5.16746900420502e-06 -1.84198687057286e-08 1.9 5.1753584515451e-06 -2.53170023461318e-08 1.95 5.18456304133903e-06 -3.352996034527e-08 2 5.19525302763876e-06 -4.32286584378159e-08 2.05 5.20760939891477e-06 -5.4593785633214e-08 2.1 5.22182389090441e-06 -6.78168043568692e-08 2.15 5.23809874550296e-06 -8.30996992953834e-08 2.2 5.25664624568235e-06 -1.0065450492117e-07 2.25 5.27768808696259e-06 -1.20702671841147e-07 2.3 5.30145464884064e-06 -1.4347433487266e-07 2.35 5.32818421804074e-06 -1.69207534231017e-07 2.4 5.35812219985817e-06 -1.9814742570576e-07 2.45 5.39152033991043e-06 -2.30545501842604e-07 2.5 5.42863596831641e-06 -2.66658835941078e-07 2.55 5.4697312716907e-06 -3.06749354111564e-07 2.6 5.51507259455775e-06 -3.51083136902295e-07 2.65 5.56492976993305e-06 -3.9992975018237e-07 2.7 5.6195754781189e-06 -4.53561604289779e-07 2.75 5.67928463268284e-06 -5.12253340388282e-07 2.8 5.74433379278733e-06 -5.76281243185936e-07 2.85 5.81500060132064e-06 -6.4592267945612e-07 2.9 5.89156324854398e-06 -7.21455562069366e-07 2.95 5.97429996116981e-06 -8.03157839447247e-07 3 6.06348851691293e-06 -8.91307010476875e-07 3.05 6.15940578461079e-06 -9.86179664980964e-07 3.1 6.26232729000705e-06 -1.08805104983571e-06 3.15 6.3725268072436e-06 -1.19719466078131e-06 3.2 6.49027597602787e-06 -1.31388185989091e-06 3.25 6.61584394434319e-06 -1.43838151856539e-06 3.3 6.74949703646089e-06 -1.57095968581273e-06 3.35 6.89149844590281e-06 -1.71187928146014e-06 3.4 7.04210795289448e-06 -1.86139981383957e-06 3.45 7.20158166574965e-06 -2.01977712138729e-06 3.5 7.3701717855364e-06 -2.18726313750812e-06 3.54999999999999 7.54812639329695e-06 -2.36410567797675e-06 3.6 7.73568925902711e-06 -2.55054825008246e-06 3.65 7.93309967156792e-06 -2.74682988267043e-06 3.69999999999999 8.14059228852069e-06 -2.95318497619113e-06 3.75 8.35839700526669e-06 -3.16984317184001e-06 3.79999999999999 8.58673884215398e-06 -3.39702923885009e-06 3.84999999999999 8.82583784890326e-06 -3.63496297899045e-06 3.89999999999999 9.07590902528468e-06 -3.88385914732275e-06 3.94999999999999 9.33716225712209e-06 -4.14392738827338e-06 3.99999999999999 9.60980226669581e-06 -4.41537218609237e-06 4.04999999999999 9.89402857663034e-06 -4.69839282878682e-06 4.09999999999999 1.01900354863783e-05 -4.99318338464018e-06 4.14999999999999 1.04980120604359e-05 -5.29993269045357e-06 4.19999999999999 1.08181421274543e-05 -5.61882435067424e-06 4.24999999999999 1.11506042894433e-05 -5.9500367466077e-06 4.29999999999999 1.14955719402935e-05 -6.29374305494112e-06 4.34999999999999 1.18532132928805e-05 -6.65011127484057e-06 4.39999999999999 1.22236914140432e-05 -7.01930426291704e-06 4.44999999999999 1.26071642667689e-05 -7.40147977539188e-06 4.49999999999999 1.30037847589463e-05 -7.79679051682526e-06 4.54999999999999 1.34137007980855e-05 -8.20538419480558e-06 4.59999999999999 1.38370553514341e-05 -8.62740358003118e-06 4.64999999999999 1.4273986510954e-05 -9.06298657124749e-06 4.69999999999999 1.47246275626524e-05 -9.51226626453494e-06 4.74999999999999 1.51891070597935e-05 -9.97537102647335e-06 4.79999999999999 1.56675488995442e-05 -1.04524245707381e-05 4.84999999999999 1.61600724026397e-05 -1.09435460377119e-05 4.89999999999999 1.66667923956768e-05 -1.1448850076723e-05 4.94999999999999 1.7187819295675e-05 -1.19684469305472e-05 4.99999999999999 1.77232591965635e-05 -1.25024425218357e-05 5.04999999999999 1.82732139572838e-05 -1.30509385411549e-05 5.09999999999999 1.88377812912121e-05 -1.36140325363454e-05 5.14999999999999 1.94170548566342e-05 -1.4191818002932e-05 5.19999999999999 2.00111243480213e-05 -1.47843844753332e-05 5.24999999999999 2.06200755878754e-05 -1.53918176186395e-05 5.29999999999999 2.1243990618934e-05 -1.601419932075e-05 5.34999999999999 2.18829477965348e-05 -1.66516077846687e-05 5.39999999999999 2.25370218809644e-05 -1.73041176207841e-05 5.44999999999999 2.32062841296242e-05 -1.79717999389659e-05 5.49999999999999 2.38908023888655e-05 -1.86547224403297e-05 5.54999999999999 2.45906411853542e-05 -1.93529495085331e-05 5.59999999999999 2.53058618168449e-05 -2.0066542300479e-05 5.64999999999999 2.60365224422472e-05 -2.07955588363131e-05 5.69999999999999 2.67826781708872e-05 -2.15400540886157e-05 5.74999999999999 2.754438115087e-05 -2.23000800706945e-05 5.79999999999999 2.83216806564617e-05 -2.30756859238992e-05 5.84999999999999 2.91146231744205e-05 -2.38669180038826e-05 5.89999999999999 2.99232524892087e-05 -2.46738199657463e-05 5.94999999999999 3.07476097670328e-05 -2.54964328480119e-05 6 3.15877336386587e-05 -2.63347951553708e-05 0 -7.84565512475984e-07 9.28370685184009e-07 0.05 2.74117702034475e-05 2.59913514319151e-07 0.1 3.15312375147393e-05 1.0222370041608e-07 0.15 3.21419260977736e-05 6.30259280150856e-08 0.2 3.2239860150947e-05 5.31192783705016e-08 0.25 3.22622980518614e-05 5.04854234282429e-08 0.3 3.22732768361671e-05 4.97309383789928e-08 0.35 3.22822577351204e-05 4.94945788583956e-08 0.4 3.2290683897603e-05 4.94132024573579e-08 0.45 3.22988062616558e-05 4.93824654577093e-08 0.5 3.23066909979725e-05 4.93696859226691e-08 0.55 3.23143709311369e-05 4.93635219438298e-08 0.6 3.2321869855171e-05 4.93592836992665e-08 0.65 3.23292075532362e-05 4.93540942001595e-08 0.7 3.23364017297553e-05 4.93448983636668e-08 0.75 3.23434694113905e-05 4.93273116989865e-08 0.8 3.23504282826331e-05 4.92945963988685e-08 0.85 3.23572980687146e-05 4.92364752860151e-08 0.9 3.23641019920803e-05 4.91379786294037e-08 0.95 3.23708683151095e-05 4.89781449107824e-08 1 3.23776319748468e-05 4.87285654274607e-08 1.05 3.23844363293263e-05 4.83517922234597e-08 1.1 3.23913350705206e-05 4.77995646476538e-08 1.15 3.23983944156073e-05 4.70107485696683e-08 1.2 3.24056957653498e-05 4.59088042985878e-08 1.25 3.24133391067017e-05 4.43985097687818e-08 1.3 3.24214475125015e-05 4.23615878310369e-08 1.35 3.24301731099802e-05 3.96508645942567e-08 1.4 3.2439704787167e-05 3.60826842112529e-08 1.45 3.24502776143138e-05 3.14275925456122e-08 1.5 3.2462183449273e-05 2.53998059348553e-08 1.55 3.24757815535109e-05 1.76466218609322e-08 1.6 3.24915075133724e-05 7.7394641432056e-09 1.65 3.2509878704185e-05 -4.83167705034064e-09 1.7 3.25314952366707e-05 -2.0659335938538e-08 1.75 3.25570366949767e-05 -4.0415472203427e-08 1.8 3.25872564203294e-05 -6.48458987516583e-08 1.85 3.2622975808982e-05 -9.47646722535494e-08 1.9 3.266508064862e-05 -1.31050454717419e-07 1.95 3.27145202210929e-05 -1.74645578602027e-07 2 3.27723085474404e-05 -2.26557211406901e-07 2.05 3.28395264148744e-05 -2.87859284687046e-07 2.1 3.29173228550215e-05 -3.59693878345053e-07 2.15 3.30069152501252e-05 -4.43271250211245e-07 2.2 3.31095878350455e-05 -5.39868283760385e-07 2.25 3.32266887860966e-05 -6.50825544174378e-07 2.3 3.33596262813561e-05 -7.77543323562318e-07 2.35 3.35098639351958e-05 -9.21477073481618e-07 2.4 3.36789159364628e-05 -1.08413255000043e-06 2.45 3.38683421207202e-05 -1.26706089843915e-06 2.5 3.40797431183351e-05 -1.47185381724676e-06 2.55 3.43147556548458e-05 -1.70013887588293e-06 2.6 3.45750480378884e-05 -1.95357502000533e-06 2.65 3.48623158409229e-05 -2.23384827359902e-06 2.7 3.51782777821482e-05 -2.54266763608612e-06 2.75 3.55246717925061e-05 -2.8817611681088e-06 2.8 3.59032512661154e-05 -3.25287225920295e-06 2.85 3.63157814876826e-05 -3.65775607183806e-06 2.9 3.67640362331682e-05 -4.09817615806118e-06 2.95 3.72497945416328e-05 -4.57590124662028e-06 3 3.77748376573853e-05 -5.09270219967425e-06 3.05 3.83409461423345e-05 -5.65034913895972e-06 3.1 3.8949897158731e-05 -6.25060874159947e-06 3.15 3.96034619224861e-05 -6.89524170569631e-06 3.2 4.03034033268616e-05 -7.58600038552213e-06 3.25 4.10514737358538e-05 -8.32462659560069e-06 3.3 4.18494129459167e-05 -9.11284958234106e-06 3.35 4.26989463140206e-05 -9.9523841611947e-06 3.4 4.36017830492619e-05 -1.0844929016593e-05 3.45 4.4559614664633e-05 -1.17921651612598e-05 3.5 4.55741135849229e-05 -1.27957545508696e-05 3.54999999999999 4.66469319060787e-05 -1.38573388494457e-05 3.6 4.77797003010182e-05 -1.49785383404474e-05 3.65 4.89740270663012e-05 -1.61609509780513e-05 3.69999999999999 5.02314973039989e-05 -1.74061515728859e-05 3.75 5.15536722325657e-05 -1.87156911061575e-05 3.79999999999999 5.29420886205982e-05 -2.0091096166013e-05 3.84999999999999 5.43982583371417e-05 -2.15338684998558e-05 3.89999999999999 5.59236680122981e-05 -2.30454846763415e-05 3.94999999999999 5.75197788016367e-05 -2.46273958507037e-05 3.99999999999999 5.91880262484089e-05 -2.62810276272893e-05 4.04999999999999 6.09298202372318e-05 -2.80077800131242e-05 4.09999999999999 6.27465450334716e-05 -2.9809027456645e-05 4.14999999999999 6.46395594022174e-05 -3.1686118965684e-05 4.19999999999999 6.66101968016121e-05 -3.36403782992899e-05 4.24999999999999 6.86597656448754e-05 -3.56731042278977e-05 4.29999999999999 7.07895496258041e-05 -3.77855708566668e-05 4.34999999999999 7.30008081032519e-05 -3.99790280073037e-05 4.39999999999999 7.5294776539208e-05 -4.22547016533463e-05 4.44999999999999 7.76726669866664e-05 -4.46137944048097e-05 4.49999999999999 8.01356686227646e-05 -4.70574860378522e-05 4.54999999999999 8.26849483232653e-05 -4.95869340655341e-05 4.59999999999999 8.53216512746483e-05 -5.22032743459581e-05 4.64999999999999 8.80469016205926e-05 -5.49076217244832e-05 4.69999999999999 9.08618031390809e-05 -5.77010707064714e-05 4.74999999999999 9.37674399476859e-05 -6.05846961579022e-05 4.79999999999999 9.67648772337049e-05 -6.35595540307417e-05 4.84999999999999 9.98551620072514e-05 -6.66266821109272e-05 4.89999999999999 0.000103039323873714 -6.97871007858143e-05 4.94999999999999 0.000106318375824973 -7.30418138299238e-05 4.99999999999999 0.000109693315045799 -7.63918092059641e-05 5.04999999999999 0.000113165123734863 -7.98380598801414e-05 5.09999999999999 0.000116734769937698 -8.33815246494152e-05 5.14999999999999 0.000120403208390809 -8.70231489796915e-05 5.19999999999999 0.000124171381375253 -9.07638658533799e-05 5.24999999999999 0.000128040219578384 -9.46045966250213e-05 5.29999999999999 0.000132010642963324 -9.85462518844095e-05 5.34999999999999 0.000136083561643985 -0.000102589732325334 5.39999999999999 0.000140259876766468 -0.000106735929620359 5.44999999999999 0.000144540481394177 -0.000110985727299481 5.49999999999999 0.000148926261398739 -0.00011534000163408 5.54999999999999 0.000153418096352936 -0.000119799622523186 5.59999999999999 0.000158016860428343 -0.000124365454384033 5.64999999999999 0.000162723423295358 -0.000129038357045033 5.69999999999999 0.000167538651026214 -0.000133819186641596 5.74999999999999 0.000172463407001789 -0.000138708796515424 5.79999999999999 0.000177498552819079 -0.000143708038114784 5.84999999999999 0.000182644949204599 -0.000148817761899945 5.89999999999999 0.000187903456927412 -0.000154038818248787 5.94999999999999 0.000193274937718501 -0.000159372058368003 6 0.000198760255191823 -0.000164818335206183 0 -4.21159682652475e-06 5.0957317560056e-06 0.05 0.000170590021952954 1.4782210738455e-06 0.1 0.000196217494985616 5.91046471762351e-07 0.15 0.000200053338308409 3.62124961854836e-07 0.2 0.000200688655115357 3.02547901542664e-07 0.25 0.000200844896501397 2.86322669694874e-07 0.3 0.000200923782388615 2.81584565060149e-07 0.35 0.000200986268760894 2.80079039998994e-07 0.4 0.000201042566962407 2.79555938910102e-07 0.45 0.000201094999836289 2.79357605298513e-07 0.5 0.000201144478410031 2.79275807044319e-07 0.55 0.000201191550531152 2.79238585307808e-07 0.6 0.000201236609047323 2.79217885055616e-07 0.65 0.00020127995529836 2.7919940162788e-07 0.7 0.00020132183037077 2.79170801171694e-07 0.75 0.000201362435675409 2.79115516492438e-07 0.8 0.000201401948800639 2.79007467315119e-07 0.85 0.000201440537105038 2.78804747248355e-07 0.9 0.000201478370026654 2.78443479218533e-07 0.95 0.00020151563091603 2.77830644650522e-07 1 0.000201552528762168 2.76835854454692e-07 1.05 0.000201589310019673 2.75282315645333e-07 1.1 0.000201626270800466 2.72936952069481e-07 1.15 0.000201663769875526 2.69499385029731e-07 1.2 0.000201702243264898 2.64589119302117e-07 1.25 0.000201742221667662 2.5772979326281e-07 1.3 0.000201784352535431 2.48328793014413e-07 1.35 0.000201829429069389 2.3565004570889e-07 1.4 0.000201878428537669 2.18777670642515e-07 1.45 0.000201932561653653 1.96568779214915e-07 1.5 0.000201993332892171 1.67595500875472e-07 1.55 0.000202062608376679 1.30079446375185e-07 1.6 0.000202142683868495 8.18258041568503e-08 1.65 0.000202236341987276 2.01675966927533e-08 1.7 0.000202346887419095 -5.80689597221694e-08 1.75 0.000202478153339362 -1.56571320831096e-07 1.8 0.000202634481016143 -2.79521464130757e-07 1.85 0.000202820683782907 -4.31561422034086e-07 1.9 0.000203042011141515 -6.17758675804184e-07 1.95 0.00020330412593332 -8.43583924173128e-07 2 0.000203613099255663 -1.11490580253803e-06 2.05 0.000203975419179947 -1.43799881417747e-06 2.1 0.000204398004629485 -1.81955618939196e-06 2.15 0.000204888215961194 -2.26669955192717e-06 2.2 0.000205453857028699 -2.78698037870068e-06 2.25 0.000206103167272366 -3.38837186478059e-06 2.3 0.000206844805079239 -4.07925240100125e-06 2.35 0.000207687824888819 -4.86838305576813e-06 2.4 0.000208641650634604 -5.76488155863597e-06 2.45 0.000209716047641934 -6.77819482788277e-06 2.5 0.00021092109446951 -7.91807147221437e-06 2.55 0.000212267155615045 -9.19453514951255e-06 2.6 0.000213764855586918 -1.0617859262038e-05 2.65 0.000215425054573274 -1.21985432072162e-05 2.7 0.000217258825784999 -1.39472902543208e-05 2.75 0.000219277434471996 -1.58749870437073e-05 2.8 0.00022149231858212 -1.79926846768497e-05 2.85 0.000223915071027345 -2.03115813612737e-05 2.9 0.000226557423528566 -2.28430065813349e-05 2.95 0.000229431232020651 -2.55984067760158e-05 3 0.000232548463609471 -2.85893325146523e-05 3.05 0.000235921185080144 -3.18274271690131e-05 3.1 0.000239561552960897 -3.53244170850702e-05 3.15 0.000243481805149493 -3.90921032602922e-05 3.2 0.000247694254109765 -4.31423545328504e-05 3.25 0.000252211281644988 -4.74871022883192e-05 3.3 0.00025704533525318 -5.21383366878036e-05 3.35 0.000262208926067576 -5.71081044194488e-05 3.4 0.000267714628383163 -6.2408507973228e-05 3.45 0.000273575080768945 -6.80517064372953e-05 3.5 0.00027980298876423 -7.40499178129978e-05 3.54999999999999 0.000286411129157001 -8.04154228452228e-05 3.6 0.000293412355843003 -8.71605703651527e-05 3.65 0.000300819607265608 -9.42977841437619e-05 3.69999999999999 0.000308645915438627 -0.000101839571256502 3.75 0.000316904416558547 -0.000109798531963037 3.79999999999999 0.000325608363215678 -0.000118187371109583 3.84999999999999 0.000334771138221141 -0.000127018911067141 3.89999999999999 0.000344406270071103 -0.00013630610622434 3.94999999999999 0.000354527450078916 -0.000146062059061279 3.99999999999999 0.000365148551213761 -0.000156300037838631 4.04999999999999 0.000376283648693941 -0.000167033495945337 4.09999999999999 0.000387947042395131 -0.000178276092959016 4.14999999999999 0.000400153281145099 -0.000190041717484248 4.19999999999999 0.000412917188989524 -0.000202344511846388 4.24999999999999 0.000426253893531666 -0.000215198898734047 4.29999999999999 0.000440178856460826 -0.000228619609896989 4.34999999999999 0.000454707906407307 -0.000242621717025394 4.39999999999999 0.000469857274279252 -0.000257220664954334 4.44999999999999 0.000485643631262529 -0.000272432307360093 4.49999999999999 0.000502084129686071 -0.000288272945136513 4.54999999999999 0.000519196446989082 -0.000304759367669041 4.59999999999999 0.000536998833054735 -0.000321908897251908 4.64999999999999 0.000555510161210432 -0.000339739436926979 4.69999999999999 0.000574749983240311 -0.000358269522063407 4.74999999999999 0.000594738588795105 -0.000377518376036155 4.79999999999999 0.000615497069641473 -0.000397505970412665 4.84999999999999 0.00063704738925063 -0.000418253090111119 4.89999999999999 0.000659412458294241 -0.000439781404056813 4.94999999999999 0.000682616216689934 -0.000462113541933069 4.99999999999999 0.000706683722938267 -0.000485273177712503 5.04999999999999 0.000731641251582772 -0.000509285120741381 5.09999999999999 0.000757516399754435 -0.000534175415267052 5.14999999999999 0.000784338203896757 -0.000559971449424359 5.19999999999999 0.00081213726793037 -0.000586702074847315 5.24999999999999 0.000840945904305541 -0.00061439773824749 5.29999999999999 0.000870798289611399 -0.000643090626504791 5.34999999999999 0.000901730636676379 -0.000672814827061067 5.39999999999999 0.000933781385400545 -0.000703606505690681 5.44999999999999 0.000966991414935478 -0.00073550410406731 5.49999999999999 0.00100140428025008 -0.000768548559939423 5.54999999999999 0.00103706647666749 -0.000802783553227916 5.59999999999999 0.00107402773657929 -0.000838255781934531 5.64999999999999 0.00111234136330256 -0.000875015272451189 5.69999999999999 0.00115206460798334 -0.00091311572972353 5.74999999999999 0.00119325909658246 -0.000952614933766758 5.79999999999999 0.00123599131536332 -0.000993575190307995 5.84999999999999 0.00128033316502077 -0.00103606384491367 5.89999999999999 0.00132636259573723 -0.00108015387193655 5.94999999999999 0.00137416433809245 -0.00112592455205163 6 0.00142383074813659 -0.0011734622552619 0 -2.25512853776994e-05 2.85911101567058e-05 0.05 0.00102785080005778 8.96075413299532e-06 0.1 0.00118731234073948 3.75178512149237e-06 0.15 0.00121315970074007 2.29065078528848e-06 0.2 0.00121845633897615 1.88499608761016e-06 0.25 0.00122028533059374 1.7688861214556e-06 0.3 0.00122134656165767 1.73368439036306e-06 0.35 0.00122213020260775 1.72219617436614e-06 0.4 0.00122275974514655 1.71813358709239e-06 0.45 0.00122328447353296 1.71657690714755e-06 0.5 0.00122373188162726 1.71593255254572e-06 0.55 0.00122411990339962 1.71564436627777e-06 0.6 0.0012244610970195 1.71550105982799e-06 0.65 0.00122476462357959 1.71540954363486e-06 0.7 0.00122503737048528 1.71531097793289e-06 0.75 0.00122528465268126 1.7151428919912e-06 0.8 0.00122551068122678 1.71481127801788e-06 0.85 0.00122571889908475 1.71415688773674e-06 0.9 0.00122591222677968 1.7129248050778e-06 0.95 0.00122609325599455 1.71072723403553e-06 1 0.00122626441094475 1.70699886602935e-06 1.05 0.00122642808806975 1.70094692754732e-06 1.1 0.00122658678170894 1.69149642294373e-06 1.15 0.0012267432017816 1.67723019746985e-06 1.2 0.00122690038943219 1.65632205051386e-06 1.25 0.00122706183805657 1.6264589342533e-06 1.3 0.00122723162985274 1.58474530227307e-06 1.35 0.00122741460150774 1.52757926812049e-06 1.4 0.00122761655571156 1.4504872818977e-06 1.45 0.00122784453586333 1.34790319588824e-06 1.5 0.00122810717670174 1.21288130118905e-06 1.55 0.00122841513060152 1.03674374903167e-06 1.6 0.00122878154669804 8.08681775826807e-07 1.65 0.00122922255143534 5.153542966977e-07 1.7 0.00122975765539661 1.4054757828119e-07 1.75 0.00123041000857797 -3.35037877973199e-07 1.8 0.00123120645727074 -9.33833175583442e-07 1.85 0.00123217741648175 -1.68129080335355e-06 1.9 0.00123335663609035 -2.60568392644141e-06 1.95 0.00123478097097989 -3.73790797308093e-06 2 0.00123649024605025 -5.11136115578735e-06 2.05 0.00123852724983054 -6.76193242477507e-06 2.1 0.00124093783061655 -8.72807495734618e-06 2.15 0.00124377103643398 -1.105091578237e-05 2.2 0.00124707924139941 -1.37743532028811e-05 2.25 0.00125091822349603 -1.69451125820619e-05 2.3 0.00125534718496301 -2.0612753091667e-05 2.35 0.00126042872526931 -2.48296337949193e-05 2.4 0.00126622878526468 -2.96508546496905e-05 2.45 0.00127281658197063 -3.513418870234e-05 2.5 0.00128026455031213 -4.13400190386987e-05 2.55 0.0012886483038159 -4.83312904255672e-05 2.6 0.00129804662251799 -5.61734823621995e-05 2.65 0.00130854147360916 -6.49346079497497e-05 2.7 0.00132021806871023 -7.46852415804463e-05 2.75 0.00133316496089429 -8.54985777618971e-05 2.8 0.00134747418441008 -9.74505232136961e-05 2.85 0.00136324144031131 -0.000110619824532385 2.9 0.00138056633172493 -0.000125088234101659 2.95 0.00139955265322426 -0.000140940717462168 3 0.00142030873968048 -0.000158265706021474 3.05 0.00144294788105165 -0.000177155399778634 3.1 0.00146758881085936 -0.000197706125677541 3.15 0.00149435627764705 -0.000220018758321536 3.2 0.00152338171057527 -0.000244199211125362 3.25 0.00155480399257191 -0.000270359007609617 3.3 0.00158877035722986 -0.000298615944535357 3.35 0.00162543742907036 -0.000329094861031794 3.4 0.00166497243104623 -0.000361928530916083 3.45 0.00170755458848827 -0.000397258699209501 3.5 0.00175337676540682 -0.000435237288638426 3.54999999999999 0.00180264737757069 -0.000476027807965734 3.6 0.00185559263766346 -0.000519807001724747 3.65 0.00191245920182089 -0.000566766790858593 3.69999999999999 0.00197351730505243 -0.000617116566644078 3.75 0.00203906449689927 -0.000671085917122474 3.79999999999999 0.00210943012026399 -0.000728927887514399 3.84999999999999 0.00218498071860583 -0.000790922905811371 3.89999999999999 0.00226612661390135 -0.000857383544874374 3.94999999999999 0.00235332997618874 -0.000928660347266949 3.99999999999999 0.0024471148144843 -0.00100514901516134 4.04999999999999 0.00254807947253804 -0.00108729937474969 4.09999999999999 0.00265691243324273 -0.00117562667777136 4.14999999999999 0.00277441255709597 -0.00127072602579724 4.19999999999999 0.0029015153589821 -0.00137329103419097 4.24999999999999 0.00303932765649938 -0.00148413835570022 4.29999999999999 0.00318917406075531 -0.00160424046668741 4.34999999999999 0.00335266060654743 -0.00173477037251358 4.39999999999999 0.00353176384496253 -0.00187716396031914 4.44999999999999 0.00372895892404198 -0.00203320927939061 4.49999999999999 0.00394740951891269 -0.00220517838487457 4.54999999999999 0.0041912600923702 -0.0023960293404702 4.59999999999999 0.00446610629717576 -0.00260972988474468 4.64999999999999 0.00477979563104806 -0.00285180573817769 4.69999999999999 0.00514389136812293 -0.00313033817557022 4.74999999999999 0.00557661741618467 -0.00345796024184657 4.79999999999999 0.00610963766137258 -0.00385642648745334 4.84999999999999 0.00680729132626892 -0.00436949953689262 4.89999999999999 0.00784718732123993 -0.0051165614823852 4.94999999999999 0.648640192891465 -0.392511430837579 4.99999999999999 0.678704403808491 -0.418140918239658 5.04999999999999 0.710473026821887 -0.445261134216592 5.09999999999999 0.744095201992336 -0.473991268454788 5.14999999999999 0.779741443411986 -0.504467751417105 5.19999999999999 0.817606313967316 -0.536846629600113 5.24999999999999 0.857910702237258 -0.571305741850335 5.29999999999999 0.900903225737003 -0.608046344330361 5.34999999999999 0.946860147950647 -0.647293712421758 5.39999999999999 0.996083141421409 -0.689296179109549 5.44999999999999 1.04889435399498 -0.734322126660502 5.49999999999999 1.10562863037031 -0.782654707941155 5.54999999999999 1.16662341217695 -0.834584556745968 5.59999999999999 1.23220762412674 -0.890401351209474 5.64999999999999 1.30269141372993 -0.950385578070882 5.69999999999999 1.3783586031849 -1.01480193723428 5.74999999999999 1.45946301880271 -1.08389540125507 5.79999999999999 1.54622876440156 -1.15789017008993 5.84999999999999 1.6388535007061 -1.23699099336189 5.89999999999999 1.73751328992671 -1.32138589124448 5.94999999999999 1.84236763117225 -1.41124927681245 6 1.95356375292235 -1.50674475291075 0 -0.000119062712503962 0.000171819321519612 0.05 0.00508555825240344 6.80109174963908e-05 0.1 0.00612293031335904 3.30973596947816e-05 0.15 0.00636493039437927 1.89438431093956e-05 0.2 0.00644428979084224 1.37141365336818e-05 0.25 0.00648156730914108 1.19129262569056e-05 0.3 0.0065038187099899 1.12975104582996e-05 0.35 0.00651891405653238 1.10805157798143e-05 0.4 0.00652986782126321 1.09998875836917e-05 0.45 0.0065381236397848 1.09680076922817e-05 0.5 0.00654448938589143 1.09545461957967e-05 0.55 0.00654946638435296 1.09484705288897e-05 0.6 0.00655338824487601 1.09455313153348e-05 0.65 0.00655648830497109 1.0943975558006e-05 0.7 0.00655893622806024 1.09429919457858e-05 0.75 0.00656085865483476 1.09421377321386e-05 0.8 0.00656235070073567 1.09410589234212e-05 0.85 0.00656348699437514 1.09391880270669e-05 0.9 0.00656432795912405 1.09356266600903e-05 0.95 0.00656492332637399 1.09289923852467e-05 1 0.00656531515030741 1.09172034132937e-05 1.05 0.00656554026061518 1.08972343279312e-05 1.1 0.00656563225682356 1.08648473792883e-05 1.15 0.00656562317751448 1.08142997234009e-05 1.2 0.00656554495120384 1.07380238308529e-05 1.25 0.00656543071914699 1.06262712542527e-05 1.3 0.00656531612054906 1.04666983515835e-05 1.35 0.00656524064519848 1.02438567226658e-05 1.4 0.00656524918199248 9.93853290703757e-06 1.45 0.00656539391406291 9.52686604979883e-06 1.5 0.00656573671509789 8.97916760200439e-06 1.55 0.00656635216266515 8.25838658718699e-06 1.6 0.0065673311774559 7.31822113109952e-06 1.65 0.00656878511194351 6.1009772741686e-06 1.7 0.00657084987752447 4.53540326186254e-06 1.75 0.00657368950488071 2.5348328200394e-06 1.8 0.00657749851181859 -4.01852718430435e-09 1.85 0.00658250271086243 -3.20140108472444e-06 1.9 0.0065889585932359 -7.19409429980819e-06 1.95 0.00659715196043572 -1.2134547939749e-05 2 0.00660739674508412 -1.81901092024099e-05 2.05 0.00662003481136368 -2.55427597426657e-05 2.1 0.00663543706304393 -3.43895335715237e-05 2.15 0.00665400570366518 -4.49435228406755e-05 2.2 0.0066761772338627 -5.74352367659244e-05 2.25 0.0067024257909852 -7.2114089197305e-05 2.3 0.00673326663267448 -8.92498958013067e-05 2.35 0.00676925979709384 -0.00010913438501839 2.4 0.0068110141480826 -0.000132082818863058 2.45 0.00685919211305251 -0.000158435868930009 2.5 0.00691451546697313 -0.000188561911410373 2.55 0.0069777725409334 -0.000222859910391154 2.6 0.00704982726813093 -0.000261763065961031 2.65 0.00713163053848358 -0.00030574342202734 2.7 0.00722423444010177 -0.000355317664530437 2.75 0.00732881011848637 -0.000411054398283878 2.8 0.00744667021610465 -0.000473583276579659 2.85 0.00757929718193001 -0.000543606481070115 2.9 0.00772837920902938 -0.000621913225405121 2.95 0.00789585623347981 -0.000709398208482424 3 0.00808397941557278 -0.000807085309993847 3.05 0.00829538899572142 -0.000916158363643408 3.1 0.00853321765656559 -0.00103800166320912 3.15 0.00880123001238254 -0.00117425412471266 3.2 0.0091040144342839 -0.00132688304274183 3.25 0.00944725264390101 -0.00149828667888066 3.3 0.00983810827949529 -0.00169144051626549 3.35 0.0102858037184424 -0.00191011189392435 3.4 0.0108025068663488 -0.00215918601922271 3.45 0.0114047531947947 -0.00244518215186574 3.5 0.0121158474404331 -0.00277711376996228 3.54999999999999 0.0129701942355664 -0.00316801764811804 3.6 0.0140218045311013 -0.00363791198754689 3.65 0.0153630876751778 -0.00422022489532327 3.69999999999999 0.0171742515300091 -0.00497839055152632 3.75 0.0198975750050596 -0.00606319567697425 3.79999999999999 0.0254927677478205 -0.00811454432180846 3.84999999999999 0.260857936596455 -0.0758871012600866 3.89999999999999 0.271730239031907 -0.083232598972284 3.94999999999999 0.282979220947245 -0.0910604873188399 3.99999999999999 0.294684861805189 -0.0994043171914877 4.04999999999999 0.306909431731485 -0.108295459553696 4.09999999999999 0.319706288392443 -0.117764777624571 4.14999999999999 0.333124415776139 -0.127843554654165 4.19999999999999 0.347211064432153 -0.138564113182741 4.24999999999999 0.3620134804981 -0.149960309929409 4.29999999999999 0.377580186169753 -0.162067996180616 4.34999999999999 0.393962051375357 -0.174925494938943 4.39999999999999 0.41121329407835 -0.188574129653224 4.44999999999999 0.429392496852842 -0.20305883252981 4.49999999999999 0.44856370206842 -0.218428858053872 4.54999999999999 0.468797634032597 -0.234738626696929 4.59999999999999 0.49017308691172 -0.252048723165304 4.64999999999999 0.512778507516006 -0.27042707126091 4.69999999999999 0.536713787560601 -0.289950301095646 4.74999999999999 0.562092256610719 -0.310705311442944 4.79999999999999 0.589042828502705 -0.33279100605209 4.84999999999999 0.617712195511172 -0.356320143686855 4.89999999999999 0.648266881854406 -0.381421183418161 4.94999999999999 0.680894863996144 -0.408239929220395 4.99999999999999 0.715806355337441 -0.43694068958528 5.04999999999999 0.753233274731635 -0.467706592447143 5.09999999999999 0.793426933934185 -0.500738676347033 5.14999999999999 0.83665365868111 -0.536253469039499 5.19999999999999 0.88318844572553 -0.574479007638442 5.24999999999999 0.933307296832738 -0.615649627735689 5.29999999999999 0.987279381355 -0.660000242828569 5.34999999999999 1.04536040170918 -0.707761067579866 5.39999999999999 1.10778828836197 -0.759153657104707 5.44999999999999 1.17478169587238 -0.814388745478966 5.49999999999999 1.24654099316942 -0.87366583881086 5.54999999999999 1.32325088622876 -0.937174092767605 5.59999999999999 1.40508365475397 -1.00509382867887 5.64999999999999 1.49220217053966 -1.07759810873376 5.69999999999999 1.58476221582874 -1.1548539953279 5.74999999999999 1.68291395479831 -1.23702333925785 5.79999999999999 1.78680264665048 -1.32426311092131 5.84999999999999 1.89656879822875 -1.41672537832325 5.89999999999999 2.01234798511039 -1.5145570726351 5.94999999999999 2.13427054233031 -1.61789967447329 6 2.26246127526046 -1.72688892618587 0 -0.000611029589133782 0.000853945713827867 0.05 0.0117979864552616 0.000412544146514267 0.1 0.0173051735085788 0.000348528678197471 0.15 0.0205056266895262 0.000315785428199541 0.2 0.0227068245232682 0.000269944669226122 0.25 0.0241527502630087 0.000211325216654427 0.3 0.0250434880204633 0.000156758424928521 0.35 0.0255904972786798 0.000118259077631373 0.4 0.0259307053443351 9.56574096089192e-05 0.45 0.026144539150888 8.3629950645935e-05 0.5 0.0262828515318504 7.74680325125709e-05 0.55 0.026376000378921 7.43090331772082e-05 0.6 0.0264413108974651 7.26497709439095e-05 0.65 0.0264888249444283 7.17396097520323e-05 0.7 0.0265250012734452 7.12004687524638e-05 0.75 0.0265538919632321 7.08593303206565e-05 0.8 0.026576234126312 7.06648573394899e-05 0.85 0.0265926674376134 7.05628559362947e-05 0.9 0.026604350866439 7.05063180391365e-05 0.95 0.0266122853246249 7.04670082446036e-05 1 0.0266172417237108 7.04271241504606e-05 1.05 0.0266198181198218 7.0372322457244e-05 1.1 0.026620494830869 7.02875160324583e-05 1.15 0.0266196749928013 7.01542206854036e-05 1.2 0.0266177139161578 6.9948624101475e-05 1.25 0.0266149411223046 6.96399406531324e-05 1.3 0.0266116778519317 6.91888068736693e-05 1.35 0.0266082520509773 6.85455327386953e-05 1.4 0.0266050124597011 6.76480106854041e-05 1.45 0.0266023433252575 6.6419034424658e-05 1.5 0.0266006812668505 6.47627261082179e-05 1.55 0.0266005357609189 6.2559755038991e-05 1.6 0.0266025143631999 5.96611079963337e-05 1.65 0.0266073529313512 5.58803951971294e-05 1.7 0.0266159496690094 5.09850679727292e-05 1.75 0.026629400011774 4.46874180339092e-05 1.8 0.0266490279190449 3.66366284826515e-05 1.85 0.0266764090714551 2.64131636710912e-05 1.9 0.0267133836156215 1.35261953514866e-05 1.95 0.0267620601838229 -2.58635826718994e-06 2 0.0268248172518884 -2.2556785058371e-05 2.05 0.0269043102005748 -4.70877372758058e-05 2.1 0.0270034915203216 -7.69555196193244e-05 2.15 0.0271256483580323 -0.000113017494475228 2.2 0.0272744583474295 -0.000156223642300942 2.25 0.027454063345424 -0.000207631885349945 2.3 0.0276691618275717 -0.000268427001464578 2.35 0.027925123608417 -0.000339943619347142 2.4 0.0282281343673616 -0.000423694630078539 2.45 0.0285853818255856 -0.000521407238040147 2.5 0.0290053007205224 -0.000635069855968368 2.55 0.0294979010212442 -0.000766994318642696 2.6 0.0300752148770232 -0.000919899765269633 2.65 0.0307519154036035 -0.00109702750414806 2.7 0.0315461893750201 -0.00130230101401239 2.75 0.0324809949038704 -0.00154055335780941 2.8 0.0335859209394617 -0.00181785834047783 2.85 0.0349000215091697 -0.00214202702156493 2.9 0.0364762956159131 -0.00252337882621369 2.95 0.0383890857446237 -0.00297599141850506 3 0.0407469702890676 -0.00351983589695247 3.05 0.0437167889889975 -0.00418467284123731 3.1 0.047572449862623 -0.00501779121609495 3.15 0.0528061798719523 -0.00610122782009578 3.2 0.0604265451586446 -0.00759669935354555 3.25 0.0729732697901922 -0.00989421562268311 3.3 0.0993042347785055 -0.0142915558300285 3.35 0.156304854194761 -0.023337072507352 3.4 0.185622657014766 -0.0295103387573311 3.45 0.196662542481091 -0.0336579386409304 3.5 0.205673457019779 -0.037846400365578 3.54999999999999 0.214235617033462 -0.0422858405044324 3.6 0.222785202825459 -0.047045150517092 3.65 0.231515437603218 -0.0521647507507654 3.69999999999999 0.240537699033933 -0.0576763277742427 3.75 0.249928882415079 -0.0636085750814862 3.79999999999999 0.259749543866724 -0.069989421526501 3.84999999999999 0.270052186636332 -0.0768471140567274 3.89999999999999 0.280885602988346 -0.0842108701718089 3.94999999999999 0.292297450985571 -0.0921113642709621 3.99999999999999 0.304335987966877 -0.100581162906236 4.04999999999999 0.317051396080562 -0.109655167880335 4.09999999999999 0.330496926222948 -0.119371103134252 4.14999999999999 0.344729988781997 -0.129770071316413 4.19999999999999 0.359813269218555 -0.140897200892983 4.24999999999999 0.375815916822352 -0.152802400996616 4.29999999999999 0.392814832528685 -0.165541236386882 4.34999999999999 0.410896058887242 -0.179175926825049 4.39999999999999 0.430156246589276 -0.193776461462757 4.44999999999999 0.450704133421001 -0.20942179712573 4.49999999999999 0.472661921294813 -0.226201077820341 4.54999999999999 0.496166377732154 -0.244214771692378 4.59999999999999 0.521369430331537 -0.263575575858292 4.64999999999999 0.548437988049835 -0.284408901217218 4.69999999999999 0.577552743855845 -0.30685273919027 4.74999999999999 0.608905823755283 -0.331056755901254 4.79999999999999 0.642697358664535 -0.357180572683472 4.84999999999999 0.679131336157555 -0.385391367044492 4.89999999999999 0.718411338416601 -0.415861111833167 4.94999999999999 0.760736874289768 -0.448763887660436 4.99999999999999 0.806300882886517 -0.48427368527969 5.04999999999999 0.855288660599778 -0.522562958822769 5.09999999999999 0.907878077587826 -0.56380196294576 5.14999999999999 0.964240665265854 -0.608158706870642 5.19999999999999 1.02454305658314 -0.655799252975136 5.24999999999999 1.08894833670814 -0.706888091769299 5.29999999999999 1.15761702484736 -0.76158839712811 5.34999999999999 1.2307075822477 -0.82006206213868 5.39999999999999 1.30837647104863 -0.882469497933352 5.44999999999999 1.39077786472453 -0.948969234034078 5.49999999999999 1.47806313853458 -1.0197173866437 5.54999999999999 1.5703802651686 -1.09486706871462 5.59999999999999 1.66787322349342 -1.17456781197695 5.64999999999999 1.77068150130642 -1.25896505825677 5.69999999999999 1.8789397473588 -1.34819976322851 5.74999999999999 1.9927776029907 -1.44240813997674 5.79999999999999 2.11231972229226 -1.54172155484716 5.84999999999999 2.23768597212645 -1.64626657475695 5.89999999999999 2.36899178979707 -1.75616515394913 5.94999999999999 2.50634866778831 -1.87153494043091 6 2.64986472881145 -1.99248967589175 tmp_ns50wwy/tests/hicum2/npn/reference/noise_npn_full_subcoupl_peri_con_dc.standard0000644000175000017500000000036314163340332031231 0ustar carstencarstenV(base) I(coll) I(base) 0.7 2.08247184220922e-05 7.93428604924756e-08 0.8 0.000884237129494995 1.78992740713022e-06 0.9 0.0156836587472444 6.99992610461282e-05 1 0.0539501798852761 0.00171840828232429 1.1 0.0840305590780728 0.0105289100046221 tmp_ns50wwy/tests/hicum2/npn/qaSpec0000644000175000017500000006005514163340332017442 0ustar carstencarsten// // Example test specification for HICUM Level 2 version 2.4.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 `endif `ifdef hspice nTypeSelectionArguments npn level=8 version=2.40 pTypeSelectionArguments pnp level=8 version=2.40 `endif `ifdef spectre nTypeSelectionArguments hic2_full type=1 pTypeSelectionArguments hic2_full type=-1 `endif `ifdef ads nTypeSelectionArguments hic2_full type=1 pTypeSelectionArguments hic2_full type=-1 `endif `ifdef eldo `endif `ifdef nexxim `endif `ifdef smartspice `endif `ifdef mica `endif `ifdef ngspice nTypeSelectionArguments npn level=8 version=2.40 pTypeSelectionArguments pnp level=8 version=2.40 `endif // // General test-independent information // keyLetter q pins coll base emit subs //verilogaFile vacode/hicumL2V2p4p0.va //float therm checkPolarity n test fgum_dc_npn_1D temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_1D test fgum_dc_npn_1D_no_aval temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test fgum_dc_npn_internal temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_internal test fgum_dc_npn_full_sh temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test fgum_dc_npn_full_subtran temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test fgum_dc_npn_full_subcoupl temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test fgum_dc_npn_vert_nqs temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.300000,1.040000,0.020000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test fgum_ac_npn_1D_breakdown_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test fgum_ac_npn_1D_breakdown_ac temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 freq dec 10 1e+010 2e+010 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_1D_breakdown test fgum_ac_npn_full_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full test fgum_ac_npn_full_ac temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 freq dec 10 1e+010 2e+010 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full test fgum_ac_npn_full_sh_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test fgum_ac_npn_full_sh_ac temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 freq dec 10 1e+010 2e+010 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_sh test fgum_ac_npn_full_subtran_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test fgum_ac_npn_full_subcoupl_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test fgum_ac_npn_full_subcoupl_peri_con_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_con test fgum_ac_npn_full_subcoupl_peri_con_ac temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 freq dec 10 1e+010 2e+010 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_subcoupl_peri_con test fgum_ac_npn_vert_nqs_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test fgum_ac_npn_vert_nqs_ac temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 freq dec 10 1e+010 2e+010 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_vert_nqs test fgum_ac_npn_lat_nqs_dc temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(base)=0.750000,1.050000,0.010000 biasList V(coll)=0.500000,1.000000,1.500000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs test fout_npn_1D_npn_1D_breakdown temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(coll)=0.000000,6.000000,0.050000 biasList V(base)=0.600000,0.650000,0.700000,0.750000,0.800000,0.850000,0.900000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test fout_npn_1D_npn_full temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(coll)=0.000000,6.000000,0.050000 biasList V(base)=0.600000,0.650000,0.700000,0.750000,0.800000,0.850000,0.900000 outputs I(coll) I(base) modelParameters parameters/npn_full test fout_npn_1D_npn_lat_nqs temperature 27 biases V(emit)=0 V(subs)=0 biasSweep V(coll)=0.000000,6.000000,0.050000 biasList V(base)=0.600000,0.650000,0.700000,0.750000,0.800000,0.850000,0.900000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs test CBE_npn_1D_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D test CBE_npn_1D_no_aval_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test CBE_npn_1D_breakdown_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test CBE_npn_internal_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_internal test CBE_npn_full_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full test CBE_npn_full_sh_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test CBE_npn_full_subtran_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test CBE_npn_full_subcoupl_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test CBE_npn_full_subcoupl_peri_con_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_con test CBE_npn_full_subcoupl_peri_bias_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_bias test CBE_npn_vert_nqs_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test CBE_npn_lat_nqs_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,0.700000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs test CBC_CCS_npn_1D_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D test CBC_CCS_npn_1D_no_aval_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test CBC_CCS_npn_1D_breakdown_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test CBC_CCS_npn_internal_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_internal test CBC_CCS_npn_full_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full test CBC_CCS_npn_full_sh_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test CBC_CCS_npn_full_subtran_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test CBC_CCS_npn_full_subcoupl_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test CBC_CCS_npn_full_subcoupl_peri_con_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_con test CBC_CCS_npn_full_subcoupl_peri_bias_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_bias test CBC_CCS_npn_vert_nqs_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test CBC_CCS_npn_lat_nqs_dc temperature -50 27 50 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=1.000000,-0.700000,-0.050000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs test vce_0_npn_1D temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D test vce_0_npn_1D_no_aval temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test vce_0_npn_1D_breakdown temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test vce_0_npn_internal temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_internal test vce_0_npn_full temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full test vce_0_npn_full_sh temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test vce_0_npn_full_subtran temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test vce_0_npn_full_subcoupl temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test vce_0_npn_full_subcoupl_peri_con temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_con test vce_0_npn_full_subcoupl_peri_bias temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_bias test vce_0_npn_vert_nqs temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test vce_0_npn_lat_nqs temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(coll)=0.000000 biasSweep V(base)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs test vbe_0_npn_1D temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D test vbe_0_npn_1D_no_aval temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test vbe_0_npn_1D_breakdown temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test vbe_0_npn_internal temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_internal test vbe_0_npn_full temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full test vbe_0_npn_full_sh temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test vbe_0_npn_full_subtran temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subtran test vbe_0_npn_full_subcoupl temperature -50 0 27 50 100 150 biases V(emit)=0 V(subs)=0 V(base)=0.000000 biasSweep V(coll)=-1.000000,1.000000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test ypara_npn_1D_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D test ypara_npn_1D_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_1D test ypara_npn_1D_no_aval_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_no_aval test ypara_npn_1D_breakdown_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test ypara_npn_internal_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_internal test ypara_npn_full_sh_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test ypara_npn_full_sh_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_sh test ypara_npn_full_subtran_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_subtran test ypara_npn_full_subcoupl_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test ypara_npn_full_subcoupl_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_subcoupl test ypara_npn_full_subcoupl_peri_con_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_full_subcoupl_peri_con test ypara_npn_full_subcoupl_peri_bias_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_bias test ypara_npn_vert_nqs_dc temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test ypara_npn_vert_nqs_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_vert_nqs test ypara_npn_lat_nqs_ac temperature 27 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.800000,0.950000,0.050000 freq dec 5 1e+008 1e+011 outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll) modelParameters parameters/npn_lat_nqs test noise_npn_1D_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_1D test noise_npn_1D_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_1D test noise_npn_1D_no_aval_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_1D_no_aval test noise_npn_1D_breakdown_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_1D_breakdown test noise_npn_internal_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_internal test noise_npn_internal_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_internal test noise_npn_full_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_full test noise_npn_full_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_full test noise_npn_full_sh_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_full_sh test noise_npn_full_sh_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_full_sh test noise_npn_full_subtran_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_full_subtran test noise_npn_full_subcoupl_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl test noise_npn_full_subcoupl_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_full_subcoupl test noise_npn_full_subcoupl_peri_con_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_con test noise_npn_full_subcoupl_peri_bias_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_full_subcoupl_peri_bias test noise_npn_full_subcoupl_peri_bias_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_full_subcoupl_peri_bias test noise_npn_vert_nqs_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_vert_nqs test noise_npn_vert_nqs_ac temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 freq dec 2 1000 1e+011 outputs N(coll) modelParameters parameters/npn_vert_nqs test noise_npn_lat_nqs_dc temperature 16.85 biases V(emit)=0 V(subs)=0 V(coll)=1.000000 biasSweep V(base)=0.700000,1.100000,0.100000 outputs I(coll) I(base) modelParameters parameters/npn_lat_nqs tmp_ns50wwy/tests/hicum2/npn/run0000755000175000017500000000023614163340332017030 0ustar carstencarsten#!/bin/sh simulator="$1" if [ -z "$1" ] ; then simulator="ngspice" fi ../../bin/run_cmc_check clean_${simulator} $simulator | tee cmcqa_${simulator}.log tmp_ns50wwy/tests/jfet/0000755000175000017500000000000014163340332015243 5ustar carstencarstentmp_ns50wwy/tests/jfet/Makefile.am0000644000175000017500000000040414163340332017275 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 tmp_ns50wwy/tests/jfet/jfet_vds-vgs.out0000644000175000017500000001272714163340332020406 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. tmp_ns50wwy/tests/jfet/jfet_vds-vgs.cir0000644000175000017500000000032114163340332020337 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 tmp_ns50wwy/compile_min.sh0000755000175000017500000000723614163340332016013 0ustar carstencarsten#!/bin/bash # ngspice build script for MINGW-w64, release or debug version, 64 bit # compile_min.sh #Procedure: # Install MSYS2, plus gcc 64 bit, libtool, autoconf, automake, bison, git, and make # See either https://github.com/orlp/dev-on-windows/wiki/Installing-GCC--&-MSYS2 # (allows to generate either 32 or 64 bit executables by setting flag -m32 or -m64) # start compiling with # './compile_min.sh' for release or './compile_min.sh d' for debug version. # 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 . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug" ]; then mkdir debug if [ $? -ne 0 ]; then echo "mkdir debug 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" = "d"; then cd debug if [ $? -ne 0 ]; then echo "cd debug failed"; exit 1 ; fi echo "configuring for 64 bit debug" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-wingui --enable-xspice --enable-cider --enable-openmp prefix="C:/Spice64d" CFLAGS="-g -m64 -O0 -Wall -Wno-unused-but-set-variable" LDFLAGS="-g -m64" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 64 bit release" 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" 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 the icon" # windres ../src/ngicon.rc -O coff -o ./src/ngicon.o # exitcode=${PIPESTATUS[0]} # if [ $exitcode -ne 0 ]; then echo "compiling the icon 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 # 64 bit debug: Install to C:\Spice64d # 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/configure.ac0000644000175000017500000015077114163340332015452 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 guidance in the # GNU Autoconf manual for version 2.59 # Initialization # --------------- # 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. AC_PREREQ([2.59]) m4_define([ngspice_major_version], [36]) m4_define([ngspice_minor_version], [0]) m4_define([ngspice_version], [ngspice_major_version]) # Initialization of configure AC_INIT([ngspice], [ngspice_version], [http://ngspice.sourceforge.net/bugrep.html]) # Revision stamp the generated ./configure script AC_REVISION([$Revision: ngspice_version$]) # Unique file in the source directory AC_CONFIG_SRCDIR([src/ngspice.c]) # Create a configuration header AC_CONFIG_HEADER([src/include/ngspice/config.h]) # Initialize 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 AC_PROG_CXX 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]) # Enable the automatically build of shared and static libraries LT_INIT([shared static]) # Setting the libtool versioning ################################################################################### # # # To set the version of the library, libtool provides the -version-info # # parameter, which accepts three numbers, separated by colons, that are called # # respectively, current, revision and age. Both their name and their behavior, # # nowadays, have to be considered fully arbitrary, as the explanation provided # # in the official documentation is confusing to say the least, and can be, in # # some cases, considered completely wrong. # # https://autotools.io/libtool/version.html # # # ################################################################################### # # How to work with the libtool versioning? # # Follow the following steps from top to bottom. This means always start at point 1 # if you plan to make a release and change the values. # Every new library starts with a version 'current' (short 'c') = 0 # 'revision' (short 'r') = 0 # 'age' (short 'a') = 0 # # Update the libtool versioning only after the release of a public release of ngspice. # Go through the following checklist from top to bottom and check your needs, following # the reminded changes if you can say "Yes" for specific check. # # 1. Only existing code has changed, no functional changes. # If the library source code has changed but *no* new symbols were added at all # since the last update, then increment the revision (c:r:a becomes c:r+1:a). # This is usually happen if the existing source of a function was changed for # bug fixing e.g. # # --> Increase the 'LT_NGSPICE_REVISION' value with *every* new software release # within one release cycle. # # 2. Interfaces were added, functions have changed or are removed. # If any interfaces [exported functions or data] have been added, got internal # changes that implies a different behavior or removed and by this the visible # symbols have changed since the last update, increment current, and set the # revision to 0 (c:r:a becomes c+1:r=0:a). # The new modified behavior of the library isn't backward compatible! # # --> Increase the 'LT_NGSPICE_CURRENT' value whenever as an interface has been added # or removed. This implies also a API change! You mostly have to change the # 'ngspice_major_version'! # --> Set 'LT_NGSPICE_REVISION' to 0. # # 3. Interfaces were added but none removed or changed. # If any interfaces have been added since the last public release and non of the # existing interfaces were removed and existing interfaces have not changed internal # functionality then the new library is backward compatible. Existing binaries can # use the new library the same way than as the existing old library without loosing # existing functionality or breakage. # Increase age by 1 (c:r:a becomes c:r:a+1). # # --> Increase the 'LT_NGSPICE_AGE' value only if the changes made to the ABI are # backward compatible. # # 4. Interfaces were removed or have functional changes. # If any interfaces within the library have been removed since the last public # release or got some internal changes that let the interface act different than # before, then set age to 0. The library isn't backwards compatible. # # --> Set 'LT_NGSPICE_AGE' to 0. LT_NGSPICE_CURRENT=0 LT_NGSPICE_REVISION=2 LT_NGSPICE_AGE=0 LIBNGSPICE_SO_VERSION=$LT_NGSPICE_CURRENT.$LT_NGSPICE_REVISION.$LT_NGSPICE_AGE # Announce the libtool version AC_SUBST(LT_NGSPICE_CURRENT) AC_SUBST(LT_NGSPICE_REVISION) AC_SUBST(LT_NGSPICE_AGE) AC_SUBST(LIBNGSPICE_SO_VERSION) # Defining the API Version LIBNGSPICE_API_VERSION=0 AC_SUBST(LIBNGSPICE_API_VERSION) # 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)])]) # --disable-utf8: don't use utf-8 and tchar for string representation, UNICODE support disabled AC_ARG_ENABLE([utf8], [AS_HELP_STRING([--disable-utf8], [Don't use utf-8 or tchar (default is UNICODE support with utf-8)])]) # 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-cmathtests: run the ancient tests in src/math/cmaths AC_ARG_ENABLE([cmathtests], [AS_HELP_STRING([--enable-cmathtests], [Enable ancient tests in src/math/cmaths])]) # --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 -O0" 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 #### ### check for operating system at compile time case $host_os in *mingw* | *msys* ) AC_DEFINE([OS_COMPILED], [1], [MINGW for MS Windows]) ;; *cygwin* ) AC_DEFINE([OS_COMPILED], [2], [Cygwin for MS Windows]) ;; *freebsd* ) AC_DEFINE([OS_COMPILED], [3], [FreeBSD]) ;; *openbsd* ) AC_DEFINE([OS_COMPILED], [4], [OpenBSD]) ;; *solaris* ) AC_DEFINE([OS_COMPILED], [5], [Solaris]) ;; *linux* ) AC_DEFINE([OS_COMPILED], [6], [Linux]) ;; *darwin* ) AC_DEFINE([OS_COMPILED], [7], [macOS]) ;; * ) AC_DEFINE([OS_COMPILED], [0], [Other Operating System]) ;; esac ########################################################################## # # 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]) if test "x$has_winconsole" = xyes; then AC_CHECK_PROGS([WINRES], [windres windres.exe], [no]) if test "x$WINRES" = xno; then AC_MSG_WARN([If you want adding the icon you should install windres]) fi fi if test "x$with_wingui" = xyes; then AC_CHECK_PROGS([WINRES], [windres windres.exe], [no]) if test "x$WINRES" = xno; then AC_MSG_WARN([If you want adding the icon you should install windres]) fi fi AM_CONDITIONAL([WINRESOURCE], [test "x$WINRES" = xwindres]) 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_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 hard-coding of the X11 runtime library path is desired]) AC_ARG_ENABLE([rpath], [AS_HELP_STRING([--enable-rpath], [Enable hard-coding 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) # XShmAttach is a struct in CYGWIN, not a function # Library order is # -lXaw -lXmu -lXt -lXext -lX11 (-lXft -lfontconfig -lXrender -lfreetype) # Xft is optional, allows text rotation in plots if test "x$no_x" != xyes ; then X_CFLAGS="$X_CFLAGS -I/usr/include/freetype2" 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" AC_CHECK_LIB([Xft], [main], [AC_DEFINE([HAVE_LIBXFT], [1], [Have xft routines in libxft])] X_LIBS="$X_LIBS -lXft -lfontconfig -lXrender -lfreetype" has_xft=yes, [has_xft=no], [$X_LIBS $X_EXTRA_LIBS]) if test "x$has_xft" = xyes ; then AC_CHECK_LIB([fontconfig], [main], [], [AC_MSG_ERROR([Couldn't find fontconfig library])], [$X_LIBS $X_EXTRA_LIBS]) # AC_CHECK_LIB([Xrender], [main], [], # [AC_MSG_ERROR([Couldn't find Xrender library])], [$X_LIBS $X_EXTRA_LIBS]) AC_CHECK_LIB([freetype], [main], [], [AC_MSG_ERROR([Couldn't find freetype library])], [$X_LIBS $X_EXTRA_LIBS]) fi 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]) # Additional libs of hicum group AC_CHECK_LIB(stdc++, main, XTRALIBS="$XTRALIBS -lstdc++",,) AC_SUBST(XTRALIBS, $XTRALIBS) LIBS="$LIBS $XTRALIBS" # 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_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 sensitivity 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 if test "x$enable_utf8" = xno; then AC_DEFINE([EXT_ASC], [], [Define if you want to disable UNICODE support]) AC_MSG_RESULT([WARNING: UNICOPDE support is disabled, extended ascii is enabled instead]) 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 AM_CONDITIONAL([CMATHTESTS], [test "x$enable_cmathtests" = xyes]) ################# 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/bsimbulk \ adms/bsimcmg \ adms/ekv \ adms/hicum0 \ adms/mextram \ adms/psp102 \ adms/psp103 \ adms/r2_cmc " # The makefiles for adms (to be added to AC_CONFIG_FILES by ./autogen.sh --adms) #VLAMKF src/spicelib/devices/adms/bsimbulk/Makefile #VLAMKF src/spicelib/devices/adms/bsimcmg/Makefile #VLAMKF src/spicelib/devices/adms/ekv/Makefile #VLAMKF src/spicelib/devices/adms/hicum0/Makefile #VLAMKF src/spicelib/devices/adms/mextram/Makefile #VLAMKF src/spicelib/devices/adms/psp102/Makefile #VLAMKF src/spicelib/devices/adms/psp103/Makefile #VLAMKF src/spicelib/devices/adms/r2_cmc/Makefile NOTVLADEVDIR="" VLADEV=" spicelib/devices/adms/bsimbulk/libbsimbulk.la \ spicelib/devices/adms/bsimcmg/libbsimcmg.la \ spicelib/devices/adms/ekv/libekv.la \ spicelib/devices/adms/hicum0/libhicum0.la \ spicelib/devices/adms/mextram/libbjt504t.la \ spicelib/devices/adms/psp102/libpsp102.la \ spicelib/devices/adms/psp103/libpsp103.la \ spicelib/devices/adms/r2_cmc/libr2_cmc.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" = x || test "x$with_readline" = xno ; then AC_MSG_RESULT([GNU readline disabled.]) else if test "x$with_readline" = xyes; then 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 else # Especially defined for macOS (Big Sur), with readline installed from Brew for dir in \ $with_readline do if test "x$with_tcl" = x || test "x$with_tcl" = xno ; then AC_MSG_RESULT([Checking for readline:]) AC_CHECK_HEADERS([$dir/include/readline/readline.h $dir/include/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 done 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]) AC_CHECK_HEADERS([sys/sysctl.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/hicum2/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/include/cppduals/duals/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 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/hicum2/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 # See https://github.com/kimwalisch/primesieve/issues/16 # Silence warning: ar: 'u' modifier ignored since 'D' is the default AC_SUBST(AR_FLAGS, [cr]) AC_OUTPUT tmp_ns50wwy/ANALYSES0000644000175000017500000001015514163340332014315 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. tmp_ns50wwy/compile_linux.sh0000644000175000017500000000663614163340332016367 0ustar carstencarsten#!/bin/bash # ngspice build script for Linux, release or debug version, 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 # xmu, xet, xt, libxft, libxrender, libfreetype, libfontconfig # for details please see the ngspice manual, chapt. 32.1. # Declare 'compile_linux.sh' executable and start compiling with # './compile_linux.sh' or './compile_linux.sh d' 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 . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug" ]; then mkdir debug if [ $? -ne 0 ]; then echo "mkdir debug 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" = "d"; then cd debug if [ $? -ne 0 ]; then echo "cd debug failed"; exit 1 ; fi echo "configuring for 64 bit debug" 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 CFLAGS="-g -m64 -O0 -Wall -Wno-unused-but-set-variable" LDFLAGS="-m64 -g" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 64 bit release" 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" 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 # Install to /usr/local 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/.gitattributes0000644000175000017500000000017014163340332016042 0ustar carstencarsten# # do not change crlf line endings of visual studio project files # *.vcproj -text *.sln -text *.vcxproj -text tmp_ns50wwy/DEVICES0000644000175000017500000005073514163340332014170 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 2.4 R, L, C behavioral (non-linear) devices 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 VBIC - Bipolar Junction Transistor 7.3 HICUM2 - Bipolar High Speed 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 102 13.3 PSP MOS model 103 13.4 HICUM0 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 2.4 R, L, and C behavioral (non-linear) devices Their values are determined by an expression (equation) which may contain a combination of voltage and current sources embedded in a mathematical function. 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: 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: The original spice device improved with the following features: - Source ramping - Check for non-monotonic series in PWL - Random values - White, 1/f, and random telegraph transient noise sources 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 - Self heating 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 dependency on rc,rb,re - Temperature difference from circuit temperature - Different area parameters for collector, base and emitter - Support lateral PNP 7.2 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. 7.3 HICUM 2 - Bipolar Junction Transistor for high frequency Ver: 2.4 Class: Q Level: 8 Dir: devices/hicum2 HICUM: HIgh CUrrent Model is a physics-based geometry-scalable compact model for homo- and heterojunction bipolar transistors, developed by the HICUM Group at CEDIC, University of Technology Dresden, Germany. Web Site: https://www.iee.et.tu-dresden.de/iee/eb/hic_new/hic_intro.html 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: o.k. This is a simplified Power MOS model, derived from MOS1 and diode, similar to LTSPICE and SuperSpice VDMOS Enhancements over the original model: - Self heating with temp nodes junction and case - Weak inversion - Quasi-saturation 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: https://bsim.berkeley.edu/models/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: https://www.epfl.ch/labs/iclab/ekv/model/ (but EPFL is not publishing any usefull code) 13.2 PSP MOS Model 102 Ver: 102.1 Level: 45 Dir: devices/adms/psp102 Status: TO BE TESTED Philips SimKit 2.5. 13.3 PSP MOS Model 103 Ver: 103.1 Level: 69 Dir: devices/adms/psp103 Status: TO BE TESTED Philips SimKit 2.5. 13.4 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.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 tmp_ns50wwy/README.utf80000644000175000017500000000247014163340332014721 0ustar carstencarstenuse utf-8 for encoding of strings, this enables UNICODE international characters sets (of nearly any language) in plot titles and labels, file and folder names. Windows uses utf-16 and conversion functions between utf-8 and utf-16, if access to Windows API functions is needed. A special fopen has been defined. In addition, plot labels on the y axis now are placed vertically, 90°, by using the Windows API or the Linux Xft library. Postscript plotting uses only a UNICODE subset, namely ISO-8859-1/ISO-8859-15, that allows extended ascii. Better looking fonts are now used for labeling the axes. Variables xbrushwidth and xgridwidth (to be set e.g. in .spiceinit or directly before a plot command) allow setting separately the linewidths of the graph (xbrushwidth) and the grid (xgridwidth). Slight modification of the Windows GUI string window to enhance readability. Windows GUI is now more responsive during lengthy op calculations. UNICODE in Gnuplot and (limited) in Postscript are supported. You will need to download and install gnuplot and a PS viewer (e.g. ghostscript, gv or others). Input files to ngspice now have to be utf-8 encoded. ANSI encoded files will fail (Notepad++ on Windows allows a simple conversion). For an ANSI version of ngspice you have to compile it with the configure flag --disable-utf8. tmp_ns50wwy/compile_linux_shared.sh0000644000175000017500000000733714163340332017714 0ustar carstencarsten#!/bin/bash # ngspice build script for Linux, release or debug version, 64 bit # compile_linux_shared.sh # Procedure: # Install gcc, bison, flex, libtool, autoconf, automake, # (not needed for shared library: libx11 and libx11-dev (headers), libXaw and libXaw-dev, libreadline and dev) # Declare 'compile_linux_shared.sh' as being executable and start compiling with # './compile_linux_shared.sh' or './compile_linux_shared.sh d' from the ngspice directory. # Options: # --adms and --enable-adms will install extra HICUM, EKV, PSP and MEXTRAM models via the # adms interface. You need to download and install the *.va files via ng-adms-va.tgz # and have adms installed. # 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. # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh especially if sources have been # cloned from a git repository. SECONDS=0 if test "$1" = "d"; then if [ ! -d "debugsh" ]; then mkdir debugsh if [ $? -ne 0 ]; then echo "mkdir debugsh failed"; exit 1 ; fi fi else if [ ! -d "releasesh" ]; then mkdir releasesh if [ $? -ne 0 ]; then echo "mkdir releasesh 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" = "d"; then cd debugsh if [ $? -ne 0 ]; then echo "cd debugsh failed"; exit 1 ; fi echo "configuring shared lib for 64 bit, debug enabled" echo # You may add --enable-adms to the following command for adding adms generated devices. # The --prefix (and perhaps --libdir) may be used to determine a different install location # (depending on the Linux distribution, and on the calling programs search path). ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --prefix=/usr CFLAGS="-g -m64 -O0 -Wall" LDFLAGS="-m64 -g" else cd releasesh if [ $? -ne 0 ]; then echo "cd releasesh failed"; exit 1 ; fi echo "configuring shared lib for 64 bit release" echo # You may add --enable-adms to the following command for adding adms generated devices. # The --prefix (and perhaps --libdir) may be used to determine a different install location # (depending on the Linux distribution, and on the calling programs search path). ../configure --with-ngshared --enable-xspice --enable-cider --enable-openmp --disable-debug --prefix=/usr CFLAGS="-m64 -O2" LDFLAGS="-m64 -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 # Install to /usr/local 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/README.optran0000644000175000017500000000503714163340332015340 0ustar carstencarstenAdding transient simulation top generate the operating point of a circuit The operating point of a circuit has to be established before a transient, ac, or noise simulation may be started. The procedure, as found in cktop.c is as follows: 1) Iterate the matrix with the starting values If this fails: 2) Start gmin stepping If this fails: 3) start source stepping If this again fails, bail out. Step 1 may be skipped by option noopiter Step 2 may be skipped by option gminsteps=0 Step 3 may be skipped by option srcsteps=0 Recently a fourth method has been added: 4) Start a transient simulation for a specific amount of time. Keep all data local. Keep the matrix values as an operating point for the simulation following. If this fails, finally stop. Operating point by transient is now standard. The fefault optran data are 1 1 1 100n 10u. That is: first iteration, gmin stepping and source stepping are set to ON. The optran step time is 100n, the total optran time is 10u, supply ramping (not yet established) is OFF. You may change its performance by the command 'optran' in spinit, .spiceinit or in a .control section. The first three entries will override noopiter, gminsteps, srcsteps. A typical command may be optran 0 0 0 50u 10m 0 (no initial iteration, no gmin stepping, no source stepping, stepsize for optran 50 us, optran run until 10 ms, no supply ramping The time for transient is determined a priori. If a transient simulation follows, choose 100 time the TSTEP value. If an ac or noise simulation follows, take the inverted starting frequency divided by 10 as the optran simulation time. A method to stop the op transient simulation, when all nodes have become stable, might be desirable, but has not yet been implemented. The transient op calculation uses the 'UIC' flag for its startup. Basically two applications come to mind: You may use this with constant voltage and current sources and simulate until the output is stable. A method to automatically stop the op transient simulation when all nodes have become stable, might be desirable, but has not yet been implemented. One also may use the optran for a first transient simulation, maybe with different step sizes, before the next (tran, ac, pz, noise) simulation is commencing. So you may reach a certain bias point quickly and with coarse time steps, and then continue with fine steps to see details. For example a power amp in electro-thermal simulation may run for some seconds (minutes?) until the final temperature is reached, and then the detailed transient or an ac simulation starts. tmp_ns50wwy/compile_min_shared.sh0000644000175000017500000000652214163340332017333 0ustar carstencarsten#!/bin/bash # ngspice build script for MINGW in MSYS2, release or debug version, 64 bit # compile_min_shared.sh #Procedure: # Install MSYS2, plus gcc 64 bit, bison, flex, autoconf, automake, libtool # See https://github.com/orlp/dev-on-windows/wiki/Installing-GCC--&-MSYS2 # start compiling with # './compile_min_shared.sh' for release or './compile_min_shared.sh d' # for debug version of shared ngspice # 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 a 32 bit executable, replace -m64 by -m32 ./configure lines. # Add (optionally) --enable-relpath to avoid absolute paths when searching for code models. # It might be necessary to uncomment and run ./autogen.sh . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug-sh" ]; then mkdir debug-sh if [ $? -ne 0 ]; then echo "mkdir debug-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" = "d"; then cd debug-sh if [ $? -ne 0 ]; then echo "cd debug-sh failed"; exit 1 ; fi echo "configuring for 64 bit debug" 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:/Spice64d" CFLAGS="-m64 -g -O0 -Wall" LDFLAGS="-m64" else cd release-sh if [ $? -ne 0 ]; then echo "cd release-sh failed"; exit 1 ; fi echo "configuring for 64 bit release" 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" 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/INSTALL0000644000175000017500000006574714163340332014225 0ustar carstencarstenNgspice installation instructions ================================= Important notice: since ngspice-35 there has been an update to the XSPICE code models (analog.cm etc.). Therefore it is not sufficient to only re-make the main executable, you will have to compile and install the code models as well, e.g. with --enable-xspice. Table of contents 1 Ngspice installation (LINUX) 1.1 Prerequisites 1.2 Install from tarball (e.g. ngspice-36.tar.gz) 1.3 Install from git repository 1.4 ngspice as a shared library 1.5 Advanced Install 1.5.1 Most useful options 1.5.2 Options Specific to Enable Ngspice as a shared library 1.5.3 Options Useful for Debugging Ngspice 1.6 Installation on Red Hat, Oracle or Centos Linux 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 2019 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 10.1 Use precompiled binary package 10.2 Compile NGSPICE manually from a tarball 10.3 Compile NGSPICE manually from git 10.4 About compilers 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. Ngspice may be compiled in three different variant, each with its own configure settings. Standard ngsoice executable, ngspice as a shared library and ngspice as a tcl/tk library. The following software must be installed in your system to compile ngspice as a standard executable (command-line input, file and graphics output): bison, flex, X11 headers and libs, Xaw, Xmu, Xext, Xft, FontConfig, Xrender, and freetype headers (e.g. libX11-devel) and libs (e.g. libX11-6), and readline. ngspice as a shared library (no graphics and no command-line interfaces) will need bison and flex only. If libfftw is detected on your system, it will be used instead of the internal fft algorithms. If you want to compile the source from the git repository you need additional software: autoconf, automake, libtool. 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. For compiling ngspice as a shared library, see section 1.4. 1.2 Install from tarball (e.g. ngspice-36.tar.gz) This covers installation from a release distribution (for example ngspice-36.tar.gz, the so called tar ball). After downloading the tar ball to a local directory unpack it using: $ tar -zxvf ngspice-36.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 customize 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 A bash script compile_linux.sh is available including all useful options, compiling and installation procedures. 1.4 ngspice as a shared library The relevant configure options for the ngspice shared library are: $ --with-ngshared --enable-xspice --disable-debug --enable-cider --enable-openmp Typically the two aliases libngspice.so, libngspice.so.0 and the compiled library libngspice.so.0.0.1 are made. The install locations depend on the Linux distribution and may be set by the --prefix configure flag. Again there is a bash script compile_linux_shared.sh with all useful options, compiling and installation procedures. libtool versioning is available and may be set in configure.ac, if relevant changes to the source code have been made. 1.5 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.5.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 optimization (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'. --with-editline=yes Enables the use of the BSD editline library (libedit) instead of readline. See http://www.thrysoee.dk/editline/ 1.5.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 interface 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.5.3 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?? If a problem is found with the build process, please submit a report to the ngspice development team using the ngspice discussion forum at https://sourceforge.net/p/ngspice/discussion/133842/. Please provide information about your system and any ./configure arguments you are using, together with any error messages. If you have fixed the problem yourself, then the development team will love to hear from you. 1.6 Installation on Red Hat, Oracle or Centos These OSs, widely distributed among commercial users, require some special considerations. There is an extra document, "NGSPICE on Red Hat Like Distributions.pdf", provided by Justin Fisher, available with the ngspice distribution. 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 On CentOS with older GCC it might be necessary to add -std=c99 to the CFLAGS in ./compile_linux.sh . 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 MSYS2 Creating ngspice with MINGW is a straight forward procedure, if you have MSYS2/MINGW installed properly. A modern environment is offered by MSYS2 (https://www.msys2.org/). An installation procedure for gcc in MSYS2 is decribed in https://github.com/orlp/dev-on-windows/wiki/Installing-GCC--&-MSYS2 You will need some enhancements to the standard install (git, autoconf, automake, libtool, FLEX and BISON, all available with pacman in MSYSS2). Some links are given below which describe the procedures. Installing from the tarball, e.g. ngspice-36.tar.gz, is simple: After expanding, you may just run ./compile_min.sh from the ngspice 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), if you don't want to use the script named above is as follows: $ cd ngspice $ 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 The install tree generated during 'make install' is: C:\Spice64\ bin\ ngspice.exe cmpp.exe lib\ spice\ analog.cm digital.cm spice2poly.cm extradev.cm extravt.cm share\ man\ man1\ cmpp.1 ngspice.1 ngspice\ scripts\ ciderinit devaxis devload setplot spectrum spinit The scripts in directory ngspice/scripts are somewhat outdated (except for spinit, the basic ngspice initialization script), but may give some hints how to use the ngspice control language. A bash script compile_min.sh is available including all useful options, compiling and installation procedures. The shared library libngspice-0.dll may be created by using the script compile_min_shared.sh. 9.2 make ngspice with MS Visual Studio 2019 ngspice may be compiled with MS Visual Studio 2019 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 2019. /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/. Install flex/bison from https://github.com/lexxmark/winflexbison/releases. When the ngspice sources are installed in D:\myspices\ngspice, then create a directory D:\myspices\flex-bison and expand the contents from https://github.com/lexxmark/winflexbison/releases/download/v2.5.24/win_flex_bison-2.5.24.zip into this directory. 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 'Build' , 'Configuration Manager', 'Debug' or 'ReleaseOmp'. 32 bit compilation (x86) is possible, but deprecated and will be removed in the near future. 64 bit (x64) is the preferred option. Start making ngspice (called vngspice.exe) by selecting 'Build' and 'Rebuild vngspice'. 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:/Spice64/bin" #define NGSPICEDATADIR "C:/Spice64/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). The ngspice.dll shared library may be made by selecting sharedspice.sln from ngspice/visualc. Code models are not made (see above how to generate them), and ngspice.dll is not installed to anywhere, but (for release) may be found in ngspice\visualc\sharedspice\ReleaseOMP.x64. 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=-m64 LDFLAGS=-m64 prefix=C:/Spice64 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. Packages are available from Homebrew or MacPorts Install the downloaded NGSPICE package It may happen though that a package has been compiled without graphics support 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 autoconf automake libtool bison flex ncurses readline fontconfig freetype libomp xorg-libXaw 4. Use one of the scripts provided: compile_macos.sh or build-for-mac-os.sh 5. Or run the commands manually: Configure NGSPICE invoking "./configure". A complete set of features is: ./configure --enable-cider --enable-xspice --enable-openmp --enable-pss --enable-debug=no 6. Compile NGSPICE invoking "make -j4" 7. 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 readline fontconfig freetype libomp SM ICE 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 --with-readline=yes --enable-debug=no or (if you want to enable ADMS) ./configure --enable-adms --enable-cider --enable-xspice --enable-openmp --enable-pss --with-readline=yes --enable-debug=no 6. Compile NGSPICE invoking "make -j4" 7. Install NGSPICE invoking "make install" or "sudo make install" Resulting dependencies of ngspice /usr/local/opt/ncurses/lib/libncursesw.6.dylib /usr/local/opt/gcc/lib/gcc/11/libstdc++.6.dylib /usr/local/opt/fftw/lib/fftw3.3.dylib /usr/local/opt/readline/lib/libreadline.8.dylib /opt/local/lib/libXaw.7.dylib /opt/local/lib/libXmu.6.dylib /opt/local/lib/libXt.6.dylib /opt/local/lib/libXext.6.dylib /opt/local/lib/libX11.6.dylib /opt/local/lib/libfontconfig.1.dylib /opt/local/lib/libXrender.1.dylib /opt/local/lib/libfreetype.6.dylib /opt/local/lib/libSM.6.dylib /opt/local/lib/libICE.6.dylib /usr/local/opt/gcc/lib/gcc/11/libgomp.1.dylib /usr/lib/libSystem.B.dylib /usr/local/lib/gcc/11/libgcc_s.1.dylib 10.5 About compilers A compile script compile_macos_clang.sh contains all necessary steps for compiling with the Xcode clang/llvm compiler. This compiler however does not support -fopenmp. Therefore you may download and install gcc, e.g. from Homebrew and run the new compile script compile_macos_gcc.sh. OpenMp enables parallel processing of BSIM3/4 model evaluation, thus speeding up simulation. tmp_ns50wwy/man/0000755000175000017500000000000014163340332013724 5ustar carstencarstentmp_ns50wwy/man/Makefile.am0000644000175000017500000000015614163340332015762 0ustar carstencarsten## Process this file with automake to produce Makefile.in SUBDIRS = man1 MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/man/man1/0000755000175000017500000000000014163340332014560 5ustar carstencarstentmp_ns50wwy/man/man1/Makefile.am0000644000175000017500000000060314163340332016613 0ustar carstencarsten## Process this file with automake to produce Makefile.in man_MANS = 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 ngmakeidx.1 ngproc2mod.1 MAINTAINERCLEANFILES = Makefile.in tmp_ns50wwy/man/man1/ngsconvert.10000644000175000017500000001046114163340332017034 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. tmp_ns50wwy/man/man1/ngspice.10000644000175000017500000001150014163340332016267 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) tmp_ns50wwy/man/man1/ngnutmeg.10000644000175000017500000000547714163340332016503 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) tmp_ns50wwy/man/man1/ngproc2mod.10000644000175000017500000000263514163340332016722 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). tmp_ns50wwy/man/man1/ngmakeidx.10000644000175000017500000000264414163340332016617 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). tmp_ns50wwy/man/man1/ngmultidec.10000644000175000017500000000635614163340332017007 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). tmp_ns50wwy/man/man1/cmpp.10000644000175000017500000000307714163340332015610 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). tmp_ns50wwy/BUGS0000644000175000017500000000317514163340332013642 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. tmp_ns50wwy/README.adms0000644000175000017500000000556714163340332014771 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. tmp_ns50wwy/AUTHORS0000644000175000017500000000315014163340332014220 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, Jim Monte, 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. tmp_ns50wwy/ngspice.pc.in0000644000175000017500000000033314163340332015531 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} tmp_ns50wwy/ChangeLog0000644000175000017500000247601314163340332014740 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. < tmp_ns50wwy/compile_macos_clang.sh0000644000175000017500000000724714163340332017475 0ustar carstencarsten#!/bin/bash # ngspice build script for macOS, release or debug version, 64 bit # compile_macos.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_macos.sh' or './compile_macos.sh d' 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 . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug" ]; then mkdir debug if [ $? -ne 0 ]; then echo "mkdir debug 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" = "d"; then cd debug if [ $? -ne 0 ]; then echo "cd debug failed"; exit 1 ; fi echo "configuring for 64 bit debug" echo # You may add --enable-adms to the following command for adding adms generated devices # Builtin readline is not compatible (Big Sur), readline via Homebrew required (in /usr/local/opt) # Standard clang does not support OpenMP ../configure --with-x --enable-xspice --enable-cider --with-readline=/usr/local/opt/readline CFLAGS="-m64 -O0 -g -Wall -I/opt/X11/include/freetype2 -I/usr/local/opt/readline/include" LDFLAGS="-m64 -g -L/usr/local/opt/readline/lib -L/opt/X11/lib" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 64 bit release" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-x --enable-xspice --enable-cider --with-readline=/usr/local/opt/readline --disable-debug CFLAGS="-m64 -O2 -I/opt/X11/include/freetype2 -I/usr/local/opt/readline/include -I/usr/local/opt/ncurses/include" LDFLAGS="-m64 -L/usr/local/opt/readline/lib -L/usr/local/opt/ncurses/lib -L/opt/X11/lib" 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 # Install to /usr/local 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/cross-compile.sh0000755000175000017500000000247614163340332016300 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:\\" tmp_ns50wwy/README.vdmos0000644000175000017500000000517614163340332015171 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" tmp_ns50wwy/COPYING0000644000175000017500000007035614163340332014217 0ustar carstencarstenNgspice Licensing Copyright (c) 2021 by ngspice team 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. tmp_ns50wwy/cross-compile-shared.sh0000755000175000017500000000310014163340332017525 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:\\" tmp_ns50wwy/README0000644000175000017500000000435614163340332014041 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 tmp_ns50wwy/examples/0000755000175000017500000000000014163340332014767 5ustar carstencarstentmp_ns50wwy/examples/cider/0000755000175000017500000000000014163340332016055 5ustar carstencarstentmp_ns50wwy/examples/cider/serial/0000755000175000017500000000000014163340332017334 5ustar carstencarstentmp_ns50wwy/examples/cider/serial/nmosinv.cir0000644000175000017500000000226014163340332021524 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 tmp_ns50wwy/examples/cider/serial/colposc.cir0000644000175000017500000000122214163340332021472 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 tmp_ns50wwy/examples/cider/serial/astable.cir0000644000175000017500000000132014163340332021442 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 tmp_ns50wwy/examples/cider/serial/recovery.cir0000644000175000017500000000157014163340332021674 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(VNN) .END tmp_ns50wwy/examples/cider/serial/rtlinv.cir0000644000175000017500000000112714163340332021352 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 tmp_ns50wwy/examples/cider/serial/charge.cir0000644000175000017500000000236614163340332021273 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 tmp_ns50wwy/examples/cider/serial/vco.cir0000644000175000017500000000151514163340332020624 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 tmp_ns50wwy/examples/cider/serial/invchain.cir0000644000175000017500000000141414163340332021632 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 tmp_ns50wwy/examples/cider/serial/pass.cir0000644000175000017500000000237514163340332021010 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 tmp_ns50wwy/examples/cider/serial/readme0000644000175000017500000000023614163340332020515 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. tmp_ns50wwy/examples/cider/serial/pullup.cir0000644000175000017500000000343314163340332021357 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 tmp_ns50wwy/examples/cider/serial/dbridge.cir0000644000175000017500000000143714163340332021440 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 TRAN I(VLINE) .END tmp_ns50wwy/examples/cider/serial/meclgate.cir0000644000175000017500000000254214163340332021617 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 tmp_ns50wwy/examples/cider/diode/0000755000175000017500000000000014163340332017141 5ustar carstencarstentmp_ns50wwy/examples/cider/diode/pindiode.cir0000644000175000017500000000164614163340332021442 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="Pre-Pin-Diode-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) .PLOT TRAN v(3) I(VIN) .END tmp_ns50wwy/examples/cider/diode/diotran.cir0000644000175000017500000000154014163340332021300 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 tran i(Vpp) .END tmp_ns50wwy/examples/cider/diode/diode.cir0000644000175000017500000000201014163340332020715 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 .print ac i(Vpp) .dc Vpp -3.0v 2.0001v 50mv .print dc i(Vpp) .END tmp_ns50wwy/examples/cider/diode/README0000644000175000017500000000113214163340332020016 0ustar carstencarsten Run: ngspice -b pd1.cir This will generate the operating point file 'Pre-Pin-Diode-OP.0.d1', which is read as the ic.file (initial condition file) for 'pindiode.cir'. Note that if there is no output line in the .model section of 'pd1.cir', the generated file will be named 'OP.0.d1'. In this case the ic.file value in 'pindiode.cir' would need to be changed to match it. Then: ngspice -b pindiode.cir can be run which will input 'Pre-Pin-Diode-OP.0.d1'. If you do not run 'pd1.cir' first, the 'pindiode.cir' simulation will run OK but tell you it cannot find the iinitial condition file. tmp_ns50wwy/examples/cider/diode/pd1.cir0000644000175000017500000000165514163340332020333 0ustar carstencarstenPRE-PIN-DIODE TWO-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 save 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 + output rootfile="Pre-Pin-Diode-" .OPTION ACCT BYPASS=1 * .TRAN 1NS 100NS * .PRINT TRAN v(3) I(VIN) .op .END tmp_ns50wwy/examples/cider/bjt/0000755000175000017500000000000014163340332016634 5ustar carstencarstentmp_ns50wwy/examples/cider/bjt/pebjt.lib0000644000175000017500000000512214163340332020430 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 tmp_ns50wwy/examples/cider/bjt/colposc.cir0000644000175000017500000000142614163340332021000 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 tmp_ns50wwy/examples/cider/bjt/astable.cir0000644000175000017500000000152414163340332020750 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 tmp_ns50wwy/examples/cider/bjt/pz1.cir0000644000175000017500000000035014163340332020043 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 pebjt1.lib .PZ 3 0 5 0 vol pz .PRINT PZ ALL .END .control OP .endc tmp_ns50wwy/examples/cider/bjt/rtlinv.cir0000644000175000017500000000133314163340332020651 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 tmp_ns50wwy/examples/cider/bjt/pz.cir0000644000175000017500000000032414163340332017763 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 .PRINT PZ ALL .END tmp_ns50wwy/examples/cider/bjt/vco.cir0000644000175000017500000000172114163340332020123 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 tmp_ns50wwy/examples/cider/bjt/invchain.cir0000644000175000017500000000162014163340332021131 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 tmp_ns50wwy/examples/cider/bjt/README0000644000175000017500000000057114163340332017517 0ustar carstencarsten Run: ngspice -b pz1.cir and the operating point file 'PEBJT1--OP.0.q1' is generated. The .model in the included library 'pebjt1.lib' has an output rootfile parameter which determines the PEBJT1-- prefix. The mixed case in the name of the generated OP file is retained. Without any rootfile or output statement in the .model, the file created will be named 'OP.0.q1'. tmp_ns50wwy/examples/cider/bjt/ecp.cir0000644000175000017500000000307714163340332020111 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 .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 .DC VBBP 2.75v 3.25001v 10mv .PRINT DC V(21) V(11) .END tmp_ns50wwy/examples/cider/bjt/pebjt1.lib0000644000175000017500000000520114163340332020507 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 + output rootfile="PEBJT1--" Psi N.CONC P.conc .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 tmp_ns50wwy/examples/cider/bjt/meclgate.cir0000644000175000017500000000274614163340332021125 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 tmp_ns50wwy/examples/cider/parallel/0000755000175000017500000000000014163340332017651 5ustar carstencarstentmp_ns50wwy/examples/cider/parallel/gmamp.cir0000644000175000017500000000106014163340332021446 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 tmp_ns50wwy/examples/cider/parallel/cmosamp.cir0000644000175000017500000000104114163340332022003 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 .print DC V(3) V(4) V(8) .END tmp_ns50wwy/examples/cider/parallel/clkfeed.cir0000644000175000017500000000120614163340332021744 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 .PRINT TRAN I(VB) .END tmp_ns50wwy/examples/cider/parallel/ringosc.1u.cir0000644000175000017500000000112514163340332022337 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 tmp_ns50wwy/examples/cider/parallel/ppef.2d.cir0000644000175000017500000000063614163340332021613 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 tmp_ns50wwy/examples/cider/parallel/latch.cir0000644000175000017500000000150514163340332021444 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 tmp_ns50wwy/examples/cider/parallel/bicmpd.cir0000644000175000017500000000054714163340332021614 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 tmp_ns50wwy/examples/cider/parallel/eclinv.cir0000644000175000017500000000062614163340332021634 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 tmp_ns50wwy/examples/cider/parallel/foobar0000644000175000017500000000043014163340332021041 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} tmp_ns50wwy/examples/cider/parallel/ringosc.2u.cir0000644000175000017500000000511514163340332022343 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 TRAN V(4) .OPTIONS ACCT BYPASS=1 METHOD=GEAR .END tmp_ns50wwy/examples/cider/parallel/ppef.1d.cir0000644000175000017500000000064214163340332021607 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 tmp_ns50wwy/examples/cider/parallel/readme0000644000175000017500000000025314163340332021031 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. tmp_ns50wwy/examples/cider/parallel/bicmpu.cir0000644000175000017500000000044614163340332021633 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 tmp_ns50wwy/examples/cider/parallel/ecpal.cir0000644000175000017500000000047314163340332021440 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 tmp_ns50wwy/examples/cider/parallel/BICMOS.LIB0000644000175000017500000007350414163340332021166 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 tmp_ns50wwy/examples/cider/mos/0000755000175000017500000000000014163340332016653 5ustar carstencarstentmp_ns50wwy/examples/cider/mos/bootinv.cir0000644000175000017500000000275114163340332021037 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 tran v(4) .options acct bypass=1 method=gear .end tmp_ns50wwy/examples/cider/mos/nmosinv.cir0000644000175000017500000000246414163340332021051 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 tmp_ns50wwy/examples/cider/mos/charge.cir0000644000175000017500000000257214163340332020611 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 tmp_ns50wwy/examples/cider/mos/ringosc.cir0000644000175000017500000000550514163340332021023 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 33 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 * pulse to start oscillation Vstart 33 3 dc 0 pulse(0 2.5 0.5n 1n 1n 1n 1) .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 16ns .print tran v(3) v(33) .plot tran v(3) v(33) .options acct bypass=1 method=gear nopage .end tmp_ns50wwy/examples/cider/mos/pass.cir0000644000175000017500000000260114163340332020317 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 tmp_ns50wwy/examples/cider/mos/cmosinv.cir0000644000175000017500000000526014163340332021033 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 dc v(4) .plot dc v(4) .options acct bypass=1 method=gear nopage .end tmp_ns50wwy/examples/cider/bicmos/0000755000175000017500000000000014163340332017331 5ustar carstencarstentmp_ns50wwy/examples/cider/bicmos/bicmpd.cir0000644000175000017500000000053514163340332021271 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 tmp_ns50wwy/examples/cider/bicmos/bicmos.lib0000644000175000017500000001044614163340332021302 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 tmp_ns50wwy/examples/cider/resistor/0000755000175000017500000000000014163340332017727 5ustar carstencarstentmp_ns50wwy/examples/cider/resistor/sires.cir0000644000175000017500000000105614163340332021555 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 DC I(VPP) .OPTION ACCT BYPASS=1 RELTOL=1e-12 .END tmp_ns50wwy/examples/cider/resistor/gaasres.cir0000644000175000017500000000142714163340332022057 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 TRAN I(VPP) .OPTION ACCT BYPASS=1 .END tmp_ns50wwy/examples/cider/cider-gnuplot/0000755000175000017500000000000014163340332020631 5ustar carstencarstentmp_ns50wwy/examples/cider/cider-gnuplot/TR.300.d1.ascii0000644000175000017500000026171614163340332023011 0ustar carstencarstenTitle: Device d1 external state Plotname: Device Operating Point Command: deftype v conductance S Flags: real No. Variables: 5 No. Points: 1 Variables: 0 time unknown 1 v12 voltage 2 i1 current 3 i2 current 4 g11 conductance Values: 0 6.607259e-08 -5.155836e+01 2.910707e-05 -2.910707e-05 3.413078e-03 Title: Device d1 (numd2) internal state Plotname: Device Cross Section Flags: real Command: deftype p xs cross Command: deftype v distance m Command: deftype v concentration cm^-3 Command: deftype v electric_field V/cm Command: deftype v current_density A/cm^2 Command: deftype v concentration/time cm^-3/s Command: deftype v mobility cm^2/Vs No. Variables: 14 No. Points: 442 Dimensions: 13,34 Variables: 0 y distance 1 x distance 2 psi voltage 3 dop concentration 4 n concentration 5 p concentration 6 ex electric_field 7 ey electric_field 8 jdx current_density 9 jdy current_density 10 jnx current_density 11 jny current_density 12 jpx current_density 13 jpy current_density Values: 0 0.000000e+00 0.000000e+00 -2.653663e-01 1.000000e+14 9.890996e+03 3.270262e+14 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1 5.000000e-07 0.000000e+00 -2.647536e-01 1.000000e+14 9.134072e+03 3.193697e+14 0.000000e+00 -2.679238e+01 0.000000e+00 -6.161353e-07 0.000000e+00 -1.089040e-10 0.000000e+00 1.054240e-06 2 1.000000e-06 0.000000e+00 -2.626871e-01 1.000000e+14 7.156915e+03 2.948454e+14 0.000000e+00 -8.462784e+01 0.000000e+00 -2.588775e-06 0.000000e+00 -2.914606e-10 0.000000e+00 5.864996e-06 3 1.500000e-06 0.000000e+00 -2.562908e-01 1.000000e+14 4.214251e+03 2.302453e+14 0.000000e+00 -4.447021e+02 0.000000e+00 3.638113e-06 0.000000e+00 -4.837410e-10 0.000000e+00 2.796474e-05 4 2.000000e-06 0.000000e+00 -2.182169e-01 1.000000e+14 2.338851e+03 5.282889e+13 0.000000e+00 -2.680864e+03 0.000000e+00 1.517415e-04 0.000000e+00 -7.767889e-10 0.000000e+00 6.563695e-05 5 2.500000e-06 0.000000e+00 1.179559e-02 1.000000e+14 1.118990e+06 7.263698e+09 0.000000e+00 -1.049021e+04 0.000000e+00 1.367806e-03 0.000000e+00 -1.967924e-09 0.000000e+00 -2.472709e-06 6 3.000000e-06 0.000000e+00 8.308043e-01 1.000000e+14 4.460690e+06 1.203922e+07 0.000000e+00 -2.715600e+04 0.000000e+00 4.928269e-03 0.000000e+00 -2.093503e-06 0.000000e+00 -8.271108e-06 7 3.500000e-06 0.000000e+00 2.727395e+00 1.000000e+14 7.456388e+06 2.359198e+07 0.000000e+00 -4.269197e+04 0.000000e+00 1.174441e-02 0.000000e+00 -9.516990e-06 0.000000e+00 -2.307091e-05 8 4.000000e-06 0.000000e+00 5.100001e+00 1.000000e+14 8.188746e+06 3.611265e+07 0.000000e+00 -4.868473e+04 0.000000e+00 1.392801e-02 0.000000e+00 -1.610993e-05 0.000000e+00 -3.775262e-05 9 4.400000e-06 0.000000e+00 7.086834e+00 1.000000e+14 8.309079e+06 4.097595e+07 0.000000e+00 -4.979783e+04 0.000000e+00 1.443255e-02 0.000000e+00 -1.772720e-05 0.000000e+00 -4.336954e-05 10 4.800000e-06 0.000000e+00 9.083828e+00 1.000000e+14 8.403708e+06 4.166617e+07 0.000000e+00 -4.975443e+04 0.000000e+00 1.456942e-02 0.000000e+00 -1.799147e-05 0.000000e+00 -4.415984e-05 11 5.200000e-06 0.000000e+00 1.106719e+01 1.000000e+14 8.620147e+06 4.080988e+07 0.000000e+00 -4.931782e+04 0.000000e+00 1.461093e-02 0.000000e+00 -1.819124e-05 0.000000e+00 -4.317366e-05 12 5.600000e-06 0.000000e+00 1.302925e+01 1.000000e+14 8.967765e+06 3.943432e+07 0.000000e+00 -4.875555e+04 0.000000e+00 1.462353e-02 0.000000e+00 -1.865131e-05 0.000000e+00 -4.159818e-05 13 6.000000e-06 0.000000e+00 1.496763e+01 1.000000e+14 9.422088e+06 3.789347e+07 0.000000e+00 -4.815420e+04 0.000000e+00 1.462737e-02 0.000000e+00 -1.939335e-05 0.000000e+00 -3.984208e-05 14 6.400000e-06 0.000000e+00 1.688159e+01 1.000000e+14 9.957083e+06 3.629707e+07 0.000000e+00 -4.754084e+04 0.000000e+00 1.462854e-02 0.000000e+00 -2.036452e-05 0.000000e+00 -3.803215e-05 15 6.800000e-06 0.000000e+00 1.877090e+01 1.000000e+14 1.055230e+07 3.467777e+07 0.000000e+00 -4.692379e+04 0.000000e+00 1.462889e-02 0.000000e+00 -2.150829e-05 0.000000e+00 -3.620633e-05 16 7.200000e-06 0.000000e+00 2.063549e+01 1.000000e+14 1.119296e+07 3.304496e+07 0.000000e+00 -4.630563e+04 0.000000e+00 1.462900e-02 0.000000e+00 -2.278018e-05 0.000000e+00 -3.437581e-05 17 7.600000e-06 0.000000e+00 2.247535e+01 1.000000e+14 1.186864e+07 3.140111e+07 0.000000e+00 -4.568712e+04 0.000000e+00 1.462903e-02 0.000000e+00 -2.414798e-05 0.000000e+00 -3.254387e-05 18 8.000000e-06 0.000000e+00 2.429046e+01 1.000000e+14 1.257194e+07 2.974667e+07 0.000000e+00 -4.506851e+04 0.000000e+00 1.462904e-02 0.000000e+00 -2.558888e-05 0.000000e+00 -3.071146e-05 19 8.400000e-06 0.000000e+00 2.608083e+01 1.000000e+14 1.329761e+07 2.808145e+07 0.000000e+00 -4.444987e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.708670e-05 0.000000e+00 -2.887887e-05 20 8.800000e-06 0.000000e+00 2.784645e+01 1.000000e+14 1.404180e+07 2.640508e+07 0.000000e+00 -4.383122e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.862980e-05 0.000000e+00 -2.704617e-05 21 9.200000e-06 0.000000e+00 2.958733e+01 1.000000e+14 1.480168e+07 2.471710e+07 0.000000e+00 -4.321257e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.020964e-05 0.000000e+00 -2.521340e-05 22 9.600000e-06 0.000000e+00 3.130346e+01 1.000000e+14 1.557511e+07 2.301703e+07 0.000000e+00 -4.259391e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.181987e-05 0.000000e+00 -2.338055e-05 23 1.000000e-05 0.000000e+00 3.299484e+01 1.000000e+14 1.696113e+07 2.130433e+07 0.000000e+00 -4.197526e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.345561e-05 0.000000e+00 -2.154763e-05 24 1.100000e-05 0.000000e+00 3.711503e+01 1.000000e+14 1.899445e+07 1.827516e+07 0.000000e+00 -4.042862e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.637845e-05 0.000000e+00 -1.833997e-05 25 1.200000e-05 0.000000e+00 4.108056e+01 1.000021e+14 2.107517e+07 1.387137e+07 0.000000e+00 -3.888196e+04 0.000000e+00 1.462905e-02 0.000000e+00 -4.064431e-05 0.000000e+00 -1.375742e-05 26 1.300000e-05 0.000000e+00 4.489143e+01 1.006775e+14 2.320079e+07 9.367604e+06 0.000000e+00 -3.733006e+04 0.000000e+00 1.462905e-02 0.000000e+00 -4.497871e-05 0.000000e+00 -9.174403e-06 27 1.400000e-05 0.000000e+00 4.854658e+01 1.995920e+14 2.555036e+07 4.751620e+06 0.000000e+00 -3.500802e+04 0.000000e+00 1.462905e-02 0.000000e+00 -4.936606e-05 0.000000e+00 -4.590863e-06 28 1.500000e-05 0.000000e+00 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 0.000000e+00 -1.722106e+04 0.000000e+00 1.462905e-02 0.000000e+00 -5.380293e-05 0.000000e+00 -2.662112e-11 29 1.600000e-05 0.000000e+00 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 0.000000e+00 -7.658844e+02 0.000000e+00 -4.977953e-05 0.000000e+00 1.458305e-02 0.000000e+00 -2.980154e-12 30 1.700000e-05 0.000000e+00 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 0.000000e+00 -4.137333e+02 0.000000e+00 -5.937127e-09 0.000000e+00 1.455352e-02 0.000000e+00 -1.455199e-12 31 1.800000e-05 0.000000e+00 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 0.000000e+00 -2.171189e+02 0.000000e+00 -2.259468e-10 0.000000e+00 1.455351e-02 0.000000e+00 -2.390471e-13 32 1.900000e-05 0.000000e+00 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 0.000000e+00 -1.072354e+02 0.000000e+00 -5.304913e-11 0.000000e+00 1.455354e-02 0.000000e+00 -6.937571e-15 33 2.000000e-05 0.000000e+00 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.201542e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 34 0.000000e+00 2.000000e-07 -2.786735e-01 9.999955e+13 5.947372e+03 5.470508e+14 1.672762e+03 0.000000e+00 4.782860e-07 0.000000e+00 2.066103e-11 0.000000e+00 -9.993985e-07 0.000000e+00 35 5.000000e-07 2.000000e-07 -2.778421e-01 9.999964e+13 5.518997e+03 5.297469e+14 1.635474e+03 -3.426336e+01 1.201498e-06 -1.351391e-06 6.943406e-12 -1.229128e-10 -2.421106e-06 3.554492e-06 36 1.000000e-06 2.000000e-07 -2.752471e-01 9.999981e+13 4.413492e+03 4.791756e+14 1.538225e+03 -8.801739e+01 3.735720e-06 -1.513861e-06 5.054721e-12 -2.359983e-10 -1.563694e-05 1.690376e-05 37 1.500000e-06 2.000000e-07 -2.690404e-01 9.999994e+13 2.612156e+03 3.769420e+14 1.473275e+03 -3.694776e+02 -6.741859e-06 4.288295e-05 1.209761e-11 -3.602342e-10 -7.574639e-05 5.721655e-05 38 2.000000e-06 2.000000e-07 -2.382994e-01 9.999999e+13 1.175719e+03 1.148383e+14 2.012966e+03 -2.306228e+03 -2.550882e-04 6.192727e-04 3.148282e-11 -6.346331e-10 -1.506239e-04 4.202262e-05 39 2.500000e-06 2.000000e-07 -3.841761e-02 1.000000e+14 2.750615e+05 5.056872e+10 4.985563e+03 -9.798038e+03 -1.414777e-03 2.909890e-03 2.813023e-08 -2.540519e-07 2.869292e-06 -6.360326e-06 40 3.000000e-06 2.000000e-07 7.415044e-01 1.000000e+14 1.272552e+06 1.542764e+07 9.278835e+03 -2.724639e+04 -2.852674e-03 8.391402e-03 1.009824e-06 -1.613432e-06 6.967473e-06 -1.805347e-05 41 3.500000e-06 2.000000e-07 2.686221e+00 1.000000e+14 3.100995e+06 2.615123e+07 4.037824e+03 -4.345542e+04 -8.252860e-04 1.308643e-02 1.198550e-06 -4.711503e-06 6.551137e-06 -3.252398e-05 42 4.000000e-06 2.000000e-07 5.087047e+00 1.000000e+14 4.681739e+06 3.744174e+07 1.217724e+03 -4.905489e+04 -2.040420e-04 1.428766e-02 2.061294e-07 -8.610926e-06 3.217033e-06 -4.190043e-05 43 4.400000e-06 2.000000e-07 7.082470e+00 1.000000e+14 5.717572e+06 4.152926e+07 4.012385e+02 -4.994240e+04 -6.167768e-05 1.452642e-02 -2.890151e-07 -1.125892e-05 1.207986e-06 -4.419427e-05 44 4.800000e-06 2.000000e-07 9.082439e+00 1.000000e+14 6.530793e+06 4.186020e+07 1.263061e+02 -4.980358e+04 -1.867652e-05 1.459794e-02 -4.269938e-07 -1.325909e-05 3.847416e-07 -4.381351e-05 45 5.200000e-06 2.000000e-07 1.106676e+01 1.000000e+14 7.250308e+06 4.087116e+07 3.901710e+01 -4.933352e+04 -5.673849e-06 1.461958e-02 -4.134740e-07 -1.491239e-05 1.160384e-07 -4.243179e-05 46 5.600000e-06 2.000000e-07 1.302912e+01 1.000000e+14 7.941180e+06 3.945294e+07 1.195999e+01 -4.876044e+04 -1.727036e-06 1.462617e-02 -3.591181e-07 -1.643042e-05 3.429952e-08 -4.073403e-05 47 6.000000e-06 2.000000e-07 1.496759e+01 1.000000e+14 8.631269e+06 3.789911e+07 3.654544e+00 -4.815570e+04 -5.261715e-07 1.462817e-02 -3.028433e-07 -1.791431e-05 1.004161e-08 -3.894135e-05 48 6.400000e-06 2.000000e-07 1.688158e+01 1.000000e+14 9.331415e+06 3.629885e+07 1.115247e+00 -4.754129e+04 -1.603760e-07 1.462878e-02 -2.548421e-07 -1.940604e-05 2.913317e-09 -3.712060e-05 49 6.800000e-06 2.000000e-07 1.877090e+01 1.000000e+14 1.004523e+07 3.467840e+07 3.401532e-01 -4.692393e+04 -4.888470e-08 1.462897e-02 -2.160452e-07 -2.092116e-05 8.300731e-10 -3.529157e-05 50 7.200000e-06 2.000000e-07 2.063549e+01 1.000000e+14 1.077334e+07 3.304523e+07 1.037228e-01 -4.630567e+04 -1.490183e-08 1.462902e-02 -1.850002e-07 -2.246410e-05 2.245780e-10 -3.346007e-05 51 7.600000e-06 2.000000e-07 2.247535e+01 1.000000e+14 1.151522e+07 3.140127e+07 3.162360e-02 -4.568714e+04 -4.542346e-09 1.462904e-02 -1.599952e-07 -2.403479e-05 5.033491e-11 -3.162781e-05 52 8.000000e-06 2.000000e-07 2.429046e+01 1.000000e+14 1.226991e+07 2.974679e+07 9.639670e-03 -4.506852e+04 -1.385159e-09 1.462905e-02 -1.395983e-07 -2.563142e-05 1.460770e-12 -2.979528e-05 53 8.400000e-06 2.000000e-07 2.608083e+01 1.000000e+14 1.303638e+07 2.808154e+07 2.936944e-03 -4.444987e+04 -4.147772e-10 1.462905e-02 -1.227208e-07 -2.725165e-05 -1.118264e-11 -2.796261e-05 54 8.800000e-06 2.000000e-07 2.784645e+01 1.000000e+14 1.381366e+07 2.640516e+07 8.934197e-04 -4.383122e+04 -1.264526e-10 1.462905e-02 -1.085588e-07 -2.889310e-05 -1.348422e-11 -2.612987e-05 55 9.200000e-06 2.000000e-07 2.958733e+01 1.000000e+14 1.460088e+07 2.471717e+07 2.702184e-04 -4.321257e+04 -4.087884e-11 1.462905e-02 -9.652250e-08 -3.055352e-05 -1.292696e-11 -2.429704e-05 56 9.600000e-06 2.000000e-07 3.130346e+01 1.000000e+14 1.539726e+07 2.301709e+07 7.929826e-05 -4.259391e+04 -1.561122e-11 1.462905e-02 -8.617664e-08 -3.223090e-05 -1.165516e-11 -2.246415e-05 57 1.000000e-05 2.000000e-07 3.299484e+01 1.000000e+14 1.681434e+07 2.130439e+07 1.771366e-05 -4.197526e+04 -1.844430e-11 1.462905e-02 -7.177893e-08 -3.392788e-05 -1.027275e-11 -2.063121e-05 58 1.100000e-05 2.000000e-07 3.711503e+01 1.000000e+14 1.888019e+07 1.827521e+07 1.036987e-07 -4.042862e+04 1.106165e-11 1.462905e-02 -5.630321e-08 -3.823171e-05 -8.171516e-12 -1.604873e-05 59 1.200000e-05 2.000000e-07 4.108056e+01 1.000021e+14 2.098547e+07 1.387140e+07 -1.100206e-06 -3.888196e+04 -9.067656e-12 1.462905e-02 -4.441904e-08 -4.259354e-05 -5.763788e-12 -1.146593e-05 60 1.300000e-05 2.000000e-07 4.489143e+01 1.006775e+14 2.312998e+07 9.367624e+06 -9.728862e-07 -3.733006e+04 7.850139e-14 1.462905e-02 -3.516133e-08 -4.700133e-05 -3.676558e-12 -6.882647e-06 61 1.400000e-05 2.000000e-07 4.854658e+01 1.995920e+14 2.549374e+07 4.751629e+06 -7.473561e-07 -3.500802e+04 6.136501e-12 1.462905e-02 -2.764647e-08 -5.144955e-05 -1.795966e-12 -2.295450e-06 62 1.500000e-05 2.000000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.049729e-07 -1.722106e+04 9.433978e-12 7.289635e-03 -8.349610e-08 7.264695e-03 -1.908230e-22 -1.480064e-11 63 1.600000e-05 2.000000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.078153e-09 -7.658844e+02 -4.738709e-12 -2.489273e-05 -1.759237e-08 1.456830e-02 -1.949028e-23 -2.217676e-12 64 1.700000e-05 2.000000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 5.997935e-12 -3.080415e-09 -1.416816e-11 1.455351e-02 2.987563e-26 -8.471232e-13 65 1.800000e-05 2.000000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 1.624550e-12 -1.397416e-10 7.403611e-11 1.455353e-02 -7.218088e-27 -1.229923e-13 66 1.900000e-05 2.000000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 1.624550e-12 -3.753227e-11 2.705812e-10 1.455353e-02 3.304068e-28 -3.501951e-15 67 2.000000e-05 2.000000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.201542e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 68 0.000000e+00 3.000000e-07 -3.004381e-01 9.746486e+13 2.594671e+03 1.269047e+15 3.238559e+03 0.000000e+00 5.671033e-07 0.000000e+00 2.719345e-11 0.000000e+00 -1.672206e-06 0.000000e+00 69 5.000000e-07 3.000000e-07 -2.991021e-01 9.795720e+13 2.436240e+03 1.205163e+15 3.138897e+03 -5.257611e+01 1.508281e-06 -9.255417e-07 8.831806e-12 -5.599647e-11 -3.365394e-06 4.589267e-06 70 1.000000e-06 3.000000e-07 -2.951805e-01 9.893121e+13 2.049613e+03 1.035618e+15 2.877319e+03 -1.114998e+02 5.572429e-06 -2.195732e-06 6.655620e-12 -1.090476e-10 -2.265352e-05 1.808702e-05 71 1.500000e-06 3.000000e-07 -2.879521e-01 9.963692e+13 1.272267e+03 7.831180e+14 2.608326e+03 -3.170727e+02 1.308167e-06 1.276107e-05 9.655708e-12 -1.619640e-10 -1.176519e-04 6.952210e-05 72 2.000000e-06 3.000000e-07 -2.634732e-01 9.991991e+13 4.767886e+02 3.039429e+14 3.106394e+03 -1.873044e+03 -2.460580e-04 4.431927e-04 1.958590e-11 -2.331673e-10 -3.159390e-04 5.481023e-05 73 2.500000e-06 3.000000e-07 -1.006478e-01 9.998853e+13 3.058123e+04 5.607046e+11 7.425710e+03 -8.881201e+03 -2.108556e-03 2.579789e-03 3.731773e-09 -2.769080e-08 3.151474e-06 -5.787205e-06 74 3.000000e-06 3.000000e-07 6.246469e-01 9.999893e+13 6.116411e+05 1.786356e+07 1.433510e+04 -2.736595e+04 -4.430302e-03 8.466061e-03 8.978952e-07 -6.825303e-07 1.062265e-05 -1.975209e-05 75 3.500000e-06 3.000000e-07 2.635947e+00 9.999994e+13 1.653884e+06 2.811619e+07 5.954251e+03 -4.447373e+04 -1.177687e-03 1.342117e-02 1.365269e-06 -2.443709e-06 9.640157e-06 -3.441734e-05 76 4.000000e-06 3.000000e-07 5.072020e+00 1.000000e+14 3.114429e+06 3.877213e+07 1.737466e+03 -4.950846e+04 -2.837127e-04 1.438031e-02 4.813985e-07 -5.337081e-06 4.633175e-06 -4.298390e-05 77 4.400000e-06 3.000000e-07 7.077543e+00 1.000000e+14 4.335088e+06 4.213839e+07 5.633088e+02 -5.011090e+04 -8.532475e-05 1.455482e-02 -1.361955e-07 -8.066336e-06 1.703373e-06 -4.467133e-05 78 4.800000e-06 3.000000e-07 9.080891e+00 1.000000e+14 5.387170e+06 4.207621e+07 1.759370e+02 -4.985921e+04 -2.582975e-05 1.460650e-02 -3.812327e-07 -1.052491e-05 5.366878e-07 -4.397705e-05 79 5.200000e-06 3.000000e-07 1.106628e+01 1.000000e+14 6.315635e+06 4.093910e+07 5.415794e+01 -4.935104e+04 -7.850373e-06 1.462217e-02 -4.273266e-07 -1.266359e-05 1.611316e-07 -4.248262e-05 80 5.600000e-06 3.000000e-07 1.302897e+01 1.000000e+14 7.172482e+06 3.947349e+07 1.657623e+01 -4.876584e+04 -2.390313e-06 1.462695e-02 -4.007300e-07 -1.458813e-05 4.754558e-08 -4.074935e-05 81 6.000000e-06 3.000000e-07 1.496755e+01 1.000000e+14 7.991578e+06 3.790532e+07 5.061922e+00 -4.815736e+04 -7.283797e-07 1.462841e-02 -3.554637e-07 -1.639185e-05 1.391144e-08 -3.894599e-05 82 6.400000e-06 3.000000e-07 1.688156e+01 1.000000e+14 8.792294e+06 3.630079e+07 1.544331e+00 -4.754180e+04 -2.220203e-07 1.462885e-02 -3.103035e-07 -1.813247e-05 4.036009e-09 -3.712208e-05 83 6.800000e-06 3.000000e-07 1.877089e+01 1.000000e+14 9.585420e+06 3.467907e+07 4.709741e-01 -4.692409e+04 -6.768015e-08 1.462899e-02 -2.704813e-07 -1.984257e-05 1.150571e-09 -3.529211e-05 84 7.200000e-06 3.000000e-07 2.063549e+01 1.000000e+14 1.037699e+07 3.304553e+07 1.436077e-01 -4.630572e+04 -2.063082e-08 1.462903e-02 -2.366466e-07 -2.154024e-05 3.118099e-10 -3.346033e-05 85 7.600000e-06 3.000000e-07 2.247535e+01 1.000000e+14 1.117041e+07 3.140144e+07 4.378318e-02 -4.568715e+04 -6.286352e-09 1.462904e-02 -2.081226e-07 -2.323554e-05 7.030048e-11 -3.162797e-05 86 8.000000e-06 3.000000e-07 2.429046e+01 1.000000e+14 1.196759e+07 2.974691e+07 1.334615e-02 -4.506852e+04 -1.919847e-09 1.462905e-02 -1.839941e-07 -2.493405e-05 2.451755e-12 -2.979540e-05 87 8.400000e-06 3.000000e-07 2.608083e+01 1.000000e+14 1.276958e+07 2.808165e+07 4.066222e-03 -4.444988e+04 -5.726057e-10 1.462905e-02 -1.634301e-07 -2.663877e-05 -1.518018e-11 -2.796271e-05 88 8.800000e-06 3.000000e-07 2.784645e+01 1.000000e+14 1.357693e+07 2.640525e+07 1.236963e-03 -4.383122e+04 -1.863937e-10 1.462905e-02 -1.457527e-07 -2.835123e-05 -1.845638e-11 -2.612995e-05 89 9.200000e-06 3.000000e-07 2.958733e+01 1.000000e+14 1.438988e+07 2.471725e+07 3.741377e-04 -4.321257e+04 -4.260104e-11 1.462905e-02 -1.304280e-07 -3.007207e-05 -1.774878e-11 -2.429712e-05 90 9.600000e-06 3.000000e-07 3.130346e+01 1.000000e+14 1.520852e+07 2.301716e+07 1.098040e-04 -4.259391e+04 -2.426764e-11 1.462905e-02 -1.170404e-07 -3.180140e-05 -1.603416e-11 -2.246421e-05 91 1.000000e-05 3.000000e-07 3.299484e+01 1.000000e+14 1.665680e+07 2.130445e+07 2.453455e-05 -4.197526e+04 -8.414485e-12 1.462905e-02 -9.805065e-08 -3.354177e-05 -1.415424e-11 -2.063126e-05 92 1.100000e-05 3.000000e-07 3.711503e+01 1.000000e+14 1.875640e+07 1.827526e+07 1.487851e-07 -4.042862e+04 1.200393e-11 1.462905e-02 -7.728957e-08 -3.793032e-05 -1.127556e-11 -1.604877e-05 93 1.200000e-05 3.000000e-07 4.108056e+01 1.000021e+14 2.088770e+07 1.387143e+07 -1.520490e-06 -3.888196e+04 7.464590e-13 1.462905e-02 -6.116658e-08 -4.235676e-05 -7.961125e-12 -1.146596e-05 94 1.300000e-05 3.000000e-07 4.489143e+01 1.006775e+14 2.305250e+07 9.367645e+06 -1.345241e-06 -3.733006e+04 -1.488852e-11 1.462905e-02 -4.851451e-08 -4.681456e-05 -5.081192e-12 -6.882663e-06 95 1.400000e-05 3.000000e-07 4.854658e+01 1.995920e+14 2.543164e+07 4.751640e+06 -1.033851e-06 -3.500802e+04 -5.647686e-13 1.462905e-02 -3.819343e-08 -5.130174e-05 -2.482906e-12 -2.295455e-06 96 1.500000e-05 3.000000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.455507e-07 -1.722106e+04 3.592048e-12 7.289635e-03 -1.157603e-07 7.264775e-03 -2.647828e-22 -1.480064e-11 97 1.600000e-05 3.000000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.764251e-09 -7.658844e+02 7.934495e-12 -2.489274e-05 -2.880683e-08 1.456831e-02 -2.773597e-23 -2.217676e-12 98 1.700000e-05 3.000000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -2.940418e-10 -4.137333e+02 3.280039e-12 -3.080218e-09 -2.337746e-08 1.455352e-02 -1.070334e-24 -8.471232e-13 99 1.800000e-05 3.000000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 1.218413e-12 -1.400087e-10 7.403611e-11 1.455353e-02 -1.065527e-26 -1.229923e-13 100 1.900000e-05 3.000000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 1.218413e-12 -3.765411e-11 2.705812e-10 1.455353e-02 -3.304068e-28 -3.501951e-15 101 2.000000e-05 3.000000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.225910e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 102 0.000000e+00 4.000000e-07 -3.434446e-01 -2.440333e+15 5.235581e+02 6.734828e+15 7.632970e+03 0.000000e+00 3.964661e-07 0.000000e+00 3.034120e-11 0.000000e+00 -4.077967e-06 0.000000e+00 103 5.000000e-07 4.000000e-07 -3.406201e-01 -1.946976e+15 5.012474e+02 6.033811e+15 7.322231e+03 -1.065112e+02 1.155503e-06 -3.503255e-07 9.445533e-12 -1.263434e-11 -3.935070e-06 1.400029e-05 104 1.000000e-06 4.000000e-07 -3.327935e-01 -9.709757e+14 4.881223e+02 4.450544e+15 6.459641e+03 -1.941317e+02 5.402531e-06 -1.553883e-06 7.976041e-12 -2.582287e-11 -2.764879e-05 3.006961e-05 105 1.500000e-06 4.000000e-07 -3.212069e-01 -2.638236e+14 3.606380e+02 2.837313e+15 5.333995e+03 -3.236627e+02 1.292339e-05 -7.443132e-06 7.373559e-12 -4.150819e-11 -1.585731e-04 9.518146e-05 106 2.000000e-06 4.000000e-07 -3.004273e-01 1.974970e+13 1.261090e+02 1.267342e+15 4.876168e+03 -1.342751e+03 -7.028246e-05 1.972999e-04 8.069778e-12 -5.087490e-11 -5.999578e-04 9.142163e-05 107 2.500000e-06 4.000000e-07 -1.869318e-01 8.850664e+13 1.231020e+03 1.575866e+13 9.765513e+03 -7.552297e+03 -2.738403e-03 2.073041e-03 8.441183e-11 -1.087208e-09 -3.036449e-05 1.177504e-05 108 3.000000e-06 4.000000e-07 4.548025e-01 9.893121e+13 4.204717e+05 1.993130e+07 2.000214e+04 -2.754068e+04 -6.230903e-03 8.577576e-03 6.548691e-07 -4.526276e-07 1.458673e-05 -2.123288e-05 109 3.500000e-06 4.000000e-07 2.567136e+00 9.993547e+13 1.148767e+06 3.016674e+07 7.704065e+03 -4.597495e+04 -1.435743e-03 1.391575e-02 1.292011e-06 -1.695040e-06 1.262709e-05 -3.673777e-05 110 4.000000e-06 4.000000e-07 5.052297e+00 9.999747e+13 2.229335e+06 4.059375e+07 2.135025e+03 -5.013070e+04 -3.346727e-04 1.450169e-02 6.354279e-07 -3.788236e-06 5.821370e-06 -4.446419e-05 111 4.400000e-06 4.000000e-07 7.071204e+00 9.999986e+13 3.337016e+06 4.295540e+07 6.762050e+02 -5.033278e+04 -1.002910e-04 1.459089e-02 3.585633e-08 -6.028208e-06 2.063810e-06 -4.530642e-05 112 4.800000e-06 4.000000e-07 9.078920e+00 9.999999e+13 4.425444e+06 4.235667e+07 2.089683e+02 -4.993087e+04 -3.038825e-05 1.461731e-02 -2.608932e-07 -8.403720e-06 6.393500e-07 -4.418862e-05 113 5.200000e-06 4.000000e-07 1.106567e+01 1.000000e+14 5.445619e+06 4.102591e+07 6.403646e+01 -4.937337e+04 -9.244435e-06 1.462544e-02 -3.596494e-07 -1.068159e-05 1.906869e-07 -4.254748e-05 114 5.600000e-06 4.000000e-07 1.302879e+01 1.000000e+14 6.403982e+06 3.949957e+07 1.956326e+01 -4.877271e+04 -2.816210e-06 1.462795e-02 -3.698071e-07 -1.281600e-05 5.612972e-08 -4.076879e-05 115 6.000000e-06 4.000000e-07 1.496749e+01 1.000000e+14 7.317650e+06 3.791316e+07 5.969506e+00 -4.815946e+04 -8.583579e-07 1.462871e-02 -3.474666e-07 -1.483261e-05 1.640975e-08 -3.895187e-05 116 6.400000e-06 4.000000e-07 1.688155e+01 1.000000e+14 8.201388e+06 3.630324e+07 1.820651e+00 -4.754244e+04 -2.616737e-07 1.462895e-02 -3.159992e-07 -1.676597e-05 4.760496e-09 -3.712394e-05 117 6.800000e-06 4.000000e-07 1.877089e+01 1.000000e+14 9.065850e+06 3.467992e+07 5.551715e-01 -4.692428e+04 -7.979631e-08 1.462902e-02 -2.840903e-07 -1.864354e-05 1.357887e-09 -3.529278e-05 118 7.200000e-06 4.000000e-07 2.063549e+01 1.000000e+14 9.918368e+06 3.304589e+07 1.692719e-01 -4.630578e+04 -2.432283e-08 1.462904e-02 -2.545859e-07 -2.048470e-05 3.686832e-10 -3.346064e-05 119 7.600000e-06 4.000000e-07 2.247535e+01 1.000000e+14 1.076393e+07 3.140166e+07 5.160662e-02 -4.568717e+04 -7.429203e-09 1.462905e-02 -2.281625e-07 -2.230263e-05 8.367806e-11 -3.162816e-05 120 8.000000e-06 4.000000e-07 2.429046e+01 1.000000e+14 1.160593e+07 2.974707e+07 1.573083e-02 -4.506853e+04 -2.268724e-09 1.462905e-02 -2.047439e-07 -2.410625e-05 3.469832e-12 -2.979555e-05 121 8.400000e-06 4.000000e-07 2.608083e+01 1.000000e+14 1.244668e+07 2.808178e+07 4.792789e-03 -4.444988e+04 -6.855534e-10 1.462905e-02 -1.840280e-07 -2.590156e-05 -1.748024e-11 -2.796284e-05 122 8.800000e-06 4.000000e-07 2.784645e+01 1.000000e+14 1.328777e+07 2.640536e+07 1.458012e-03 -4.383122e+04 -1.987789e-10 1.462905e-02 -1.656747e-07 -2.769258e-05 -2.146188e-11 -2.613006e-05 123 9.200000e-06 4.000000e-07 2.958733e+01 1.000000e+14 1.413028e+07 2.471735e+07 4.410152e-04 -4.321257e+04 -7.169553e-11 1.462905e-02 -1.493687e-07 -2.948198e-05 -2.071447e-11 -2.429721e-05 124 9.600000e-06 4.000000e-07 3.130346e+01 1.000000e+14 1.497497e+07 2.301725e+07 1.294456e-04 -4.259391e+04 -4.818396e-12 1.462905e-02 -1.348363e-07 -3.127153e-05 -1.875664e-11 -2.246430e-05 125 1.000000e-05 4.000000e-07 3.299484e+01 1.000000e+14 1.646057e+07 2.130452e+07 2.893175e-05 -4.197526e+04 -3.166319e-12 1.462905e-02 -1.137324e-07 -3.306318e-05 -1.658770e-11 -2.063134e-05 126 1.100000e-05 4.000000e-07 3.711503e+01 1.000000e+14 1.860133e+07 1.827532e+07 1.826979e-07 -4.042862e+04 -1.476083e-11 1.462905e-02 -9.017569e-08 -3.755397e-05 -1.323703e-11 -1.604882e-05 127 1.200000e-05 4.000000e-07 4.108056e+01 1.000021e+14 2.076478e+07 1.387147e+07 -1.788754e-06 -3.888196e+04 1.361154e-11 1.462905e-02 -7.163075e-08 -4.205969e-05 -9.357070e-12 -1.146600e-05 128 1.300000e-05 4.000000e-07 4.489143e+01 1.006775e+14 2.295487e+07 9.367673e+06 -1.584101e-06 -3.733006e+04 2.869962e-12 1.462905e-02 -5.694887e-08 -4.657953e-05 -5.976385e-12 -6.882683e-06 129 1.400000e-05 4.000000e-07 4.854658e+01 1.995920e+14 2.535329e+07 4.751653e+06 -1.218313e-06 -3.500802e+04 5.579296e-12 1.462905e-02 -4.490051e-08 -5.111537e-05 -2.921449e-12 -2.295461e-06 130 1.500000e-05 4.000000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.719164e-07 -1.722106e+04 -9.113407e-12 7.289635e-03 -1.367137e-07 7.264876e-03 -3.130516e-22 -1.480064e-11 131 1.600000e-05 4.000000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -2.352334e-09 -7.658844e+02 9.039029e-12 -2.489273e-05 -3.843421e-08 1.456833e-02 -3.331897e-23 -2.217676e-12 132 1.700000e-05 4.000000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -1.960278e-10 -4.137333e+02 2.842963e-12 -3.081087e-09 -1.553775e-08 1.455352e-02 -1.520827e-24 -8.471232e-13 133 1.800000e-05 4.000000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.399478e-10 1.974296e-10 1.455353e-02 -1.054070e-26 -1.229923e-13 134 1.900000e-05 4.000000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -0.000000e+00 -3.765411e-11 -7.215500e-10 1.455353e-02 -4.405424e-28 -3.501951e-15 135 2.000000e-05 4.000000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.225910e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 136 0.000000e+00 4.500000e-07 -3.899403e-01 -4.197278e+16 1.090507e+02 4.208242e+16 9.351085e+03 0.000000e+00 1.935481e-07 0.000000e+00 3.087148e-11 0.000000e+00 -1.106916e-05 0.000000e+00 137 5.000000e-07 4.500000e-07 -3.851573e-01 -3.380186e+16 9.798337e+01 3.470698e+16 9.265958e+03 -1.810271e+02 6.121039e-07 -1.186746e-07 9.388441e-12 -2.417361e-12 -4.246814e-06 6.685634e-05 138 1.000000e-06 4.500000e-07 -3.718376e-01 -1.763741e+16 1.147419e+02 2.046118e+16 8.906270e+03 -3.225914e+02 3.523205e-06 -8.317539e-07 8.334158e-12 -5.142895e-12 -2.903101e-05 9.097839e-05 139 1.500000e-06 4.500000e-07 -3.528982e-01 -5.925617e+15 1.113212e+02 9.743720e+15 7.820759e+03 -4.407757e+02 1.404593e-05 -8.068456e-06 7.214593e-12 -1.104936e-11 -1.751089e-04 1.739010e-04 140 2.000000e-06 4.500000e-07 -3.277600e-01 -1.229099e+15 4.804093e+01 3.665424e+15 6.472599e+03 -1.142960e+03 4.250479e-05 5.242362e-05 5.577308e-12 -1.530934e-11 -7.567328e-04 1.967891e-04 141 2.500000e-06 4.500000e-07 -2.386022e-01 -9.035210e+13 1.788851e+02 1.162353e+14 1.084077e+04 -6.750075e+03 -2.883291e-03 1.737681e-03 1.274415e-11 -1.561541e-10 -1.758878e-04 7.150709e-05 142 3.000000e-06 4.500000e-07 3.472475e-01 8.229881e+13 2.955799e+05 2.141016e+07 2.313628e+04 -2.765160e+04 -7.243909e-03 8.647397e-03 5.024066e-07 -3.181221e-07 1.674017e-05 -2.213409e-05 143 3.500000e-06 4.500000e-07 2.526558e+00 9.893121e+13 9.670495e+05 3.145987e+07 8.489134e+03 -4.693968e+04 -1.515248e-03 1.423432e-02 1.214950e-06 -1.365252e-06 1.408953e-05 -3.820327e-05 144 4.000000e-06 4.500000e-07 5.041215e+00 9.995810e+13 1.940931e+06 4.171839e+07 2.275609e+03 -5.049837e+04 -3.472465e-04 1.456917e-02 6.537443e-07 -3.267106e-06 6.305354e-06 -4.535863e-05 145 4.400000e-06 4.500000e-07 7.067717e+00 9.999770e+13 2.976362e+06 4.342725e+07 7.104659e+02 -5.045788e+04 -1.040212e-04 1.461040e-02 9.676401e-08 -5.325760e-06 2.182099e-06 -4.566979e-05 146 4.800000e-06 4.500000e-07 9.077845e+00 9.999990e+13 4.043589e+06 4.251248e+07 2.181897e+02 -4.997034e+04 -3.155304e-05 1.462314e-02 -1.986421e-07 -7.600077e-06 6.688952e-07 -4.430574e-05 147 5.200000e-06 4.500000e-07 1.106534e+01 1.000000e+14 5.075207e+06 4.107336e+07 6.669081e+01 -4.938554e+04 -9.605297e-06 1.462721e-02 -3.117937e-07 -9.867624e-06 1.987064e-07 -4.258288e-05 148 5.600000e-06 4.500000e-07 1.302869e+01 1.000000e+14 6.059407e+06 3.951373e+07 2.035298e+01 -4.877644e+04 -2.927080e-06 1.462848e-02 -3.370551e-07 -1.204271e-05 5.840661e-08 -4.077934e-05 149 6.000000e-06 4.500000e-07 1.496746e+01 1.000000e+14 7.003342e+06 3.791741e+07 6.207850e+00 -4.816060e+04 -8.922766e-07 1.462888e-02 -3.265271e-07 -1.412037e-05 1.706727e-08 -3.895504e-05 150 6.400000e-06 4.500000e-07 1.688154e+01 1.000000e+14 7.917237e+06 3.630456e+07 1.893016e+00 -4.754279e+04 -2.720316e-07 1.462900e-02 -3.034945e-07 -1.611941e-05 4.950972e-09 -3.712495e-05 151 6.800000e-06 4.500000e-07 1.877088e+01 1.000000e+14 8.809907e+06 3.468038e+07 5.771966e-01 -4.692439e+04 -8.293298e-08 1.462903e-02 -2.773963e-07 -1.806038e-05 1.412637e-09 -3.529315e-05 152 7.200000e-06 4.500000e-07 2.063549e+01 1.000000e+14 9.688080e+06 3.304609e+07 1.759823e-01 -4.630581e+04 -2.528219e-08 1.462904e-02 -2.518159e-07 -1.996002e-05 3.839269e-10 -3.346081e-05 153 7.600000e-06 4.500000e-07 2.247535e+01 1.000000e+14 1.055668e+07 3.140177e+07 5.365182e-02 -4.568718e+04 -7.712485e-09 1.462905e-02 -2.279936e-07 -2.183080e-05 8.744435e-11 -3.162827e-05 154 8.000000e-06 4.500000e-07 2.429046e+01 1.000000e+14 1.141927e+07 2.974715e+07 1.635420e-02 -4.506853e+04 -2.344566e-09 1.462905e-02 -2.062573e-07 -2.368176e-05 3.929720e-12 -2.979563e-05 155 8.400000e-06 4.500000e-07 2.608083e+01 1.000000e+14 1.227840e+07 2.808185e+07 4.982723e-03 -4.444988e+04 -7.297721e-10 1.462905e-02 -1.865884e-07 -2.551932e-05 -1.794238e-11 -2.796291e-05 156 8.800000e-06 4.500000e-07 2.784645e+01 1.000000e+14 1.313589e+07 2.640542e+07 1.515805e-03 -4.383122e+04 -2.131316e-10 1.462905e-02 -1.688453e-07 -2.734805e-05 -2.214817e-11 -2.613012e-05 157 9.200000e-06 4.500000e-07 2.958733e+01 1.000000e+14 1.399308e+07 2.471741e+07 4.585067e-04 -4.321257e+04 -8.462784e-11 1.462905e-02 -1.528517e-07 -2.917114e-05 -2.141936e-11 -2.429726e-05 158 9.600000e-06 4.500000e-07 3.130346e+01 1.000000e+14 1.485093e+07 2.301730e+07 1.345870e-04 -4.259391e+04 -8.869266e-12 1.462905e-02 -1.384307e-07 -3.099083e-05 -1.941932e-11 -2.246434e-05 159 1.000000e-05 4.500000e-07 3.299484e+01 1.000000e+14 1.635574e+07 2.130457e+07 3.008576e-05 -4.197526e+04 -1.069830e-11 1.462905e-02 -1.172025e-07 -3.280862e-05 -1.719079e-11 -2.063138e-05 160 1.100000e-05 4.500000e-07 3.711503e+01 1.000000e+14 1.851809e+07 1.827535e+07 1.940676e-07 -4.042862e+04 -8.580260e-13 1.462905e-02 -9.322564e-08 -3.735250e-05 -1.373130e-11 -1.604885e-05 161 1.200000e-05 4.500000e-07 4.108056e+01 1.000021e+14 2.069859e+07 1.387150e+07 -1.857756e-06 -3.888196e+04 7.555356e-12 1.462905e-02 -7.420503e-08 -4.190000e-05 -9.712745e-12 -1.146602e-05 162 1.300000e-05 4.500000e-07 4.489143e+01 1.006775e+14 2.290220e+07 9.367688e+06 -1.646046e-06 -3.733006e+04 1.494383e-11 1.462905e-02 -5.907227e-08 -4.645286e-05 -6.205964e-12 -6.882694e-06 163 1.400000e-05 4.500000e-07 4.854658e+01 1.995920e+14 2.531096e+07 4.751661e+06 -1.266144e-06 -3.500802e+04 1.652263e-11 1.462905e-02 -4.661292e-08 -5.101476e-05 -3.034307e-12 -2.295465e-06 164 1.500000e-05 4.500000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.776012e-07 -1.722106e+04 -1.188787e-12 7.289635e-03 -1.412425e-07 7.264930e-03 -3.230292e-22 -1.480064e-11 165 1.600000e-05 4.500000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.764251e-09 -7.658844e+02 3.499233e-12 -2.489273e-05 -2.877724e-08 1.456834e-02 -3.283176e-23 -2.217676e-12 166 1.700000e-05 4.500000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 4.873650e-12 -3.081209e-09 5.667263e-11 1.455352e-02 -1.031181e-24 -8.471232e-13 167 1.800000e-05 4.500000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.400696e-10 -1.480722e-10 1.455353e-02 -1.031155e-26 -1.229923e-13 168 1.900000e-05 4.500000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -0.000000e+00 -3.765411e-11 -5.411625e-10 1.455353e-02 6.608136e-28 -3.501951e-15 169 2.000000e-05 4.500000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.225910e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 170 0.000000e+00 5.000000e-07 -4.369555e-01 -4.523352e+17 6.980368e+01 4.484432e+17 7.905495e+03 0.000000e+00 4.015294e-08 0.000000e+00 3.100846e-11 0.000000e+00 -6.407591e-05 0.000000e+00 171 5.000000e-07 5.000000e-07 -4.332797e-01 -3.644681e+17 3.509342e+01 3.603297e+17 8.032053e+03 -1.509928e+02 1.468137e-07 -1.735979e-08 9.191640e-12 -8.566005e-13 -6.969773e-06 4.966867e-04 172 1.000000e-06 5.000000e-07 -4.218562e-01 -1.906416e+17 2.901411e+01 1.862215e+17 8.305660e+03 -3.386515e+02 1.186744e-06 -2.105005e-07 8.375700e-12 -8.123382e-13 -3.221149e-05 5.588333e-04 173 1.500000e-06 5.000000e-07 -3.994145e-01 -6.469727e+16 2.452854e+01 6.235448e+16 8.409220e+03 -5.670297e+02 8.051319e-06 -3.544974e-06 7.276668e-12 -1.888292e-12 -1.853576e-04 6.599366e-04 174 2.000000e-06 5.000000e-07 -3.651533e-01 -1.419264e+16 1.459497e+01 1.575850e+16 8.119655e+03 -1.040750e+03 7.615202e-05 -9.243378e-05 4.769002e-12 -3.129230e-12 -8.432064e-04 7.210983e-04 175 2.500000e-06 5.000000e-07 -2.953395e-01 -1.946976e+15 2.230717e+01 1.047771e+15 1.144875e+04 -5.885929e+03 -1.946297e-03 1.344400e-03 3.059446e-12 -1.904504e-11 -1.208438e-03 3.524544e-04 176 3.000000e-06 5.000000e-07 2.234397e-01 -9.035210e+13 2.064485e+05 2.506503e+07 2.646665e+04 -2.777584e+04 -8.357807e-03 8.714380e-03 3.269014e-07 -2.224859e-07 1.905668e-05 -2.304223e-05 177 3.500000e-06 5.000000e-07 2.482245e+00 8.850664e+13 8.420161e+05 3.291655e+07 9.185447e+03 -4.806102e+04 -1.549146e-03 1.460542e-02 1.127694e-06 -1.134803e-06 1.552400e-05 -3.989594e-05 178 4.000000e-06 5.000000e-07 5.029541e+00 9.954941e+13 1.724511e+06 4.303214e+07 2.368718e+03 -5.090039e+04 -3.502206e-04 1.463930e-02 6.481732e-07 -2.886989e-06 6.692773e-06 -4.637723e-05 179 4.400000e-06 5.000000e-07 7.064100e+00 9.997526e+13 2.691070e+06 4.393946e+07 7.279536e+02 -5.058996e+04 -1.050833e-04 1.463035e-02 1.385508e-07 -4.782806e-06 2.252093e-06 -4.606068e-05 180 4.800000e-06 5.000000e-07 9.076738e+00 9.999897e+13 3.724890e+06 4.267574e+07 2.220861e+02 -5.001134e+04 -3.192846e-05 1.462911e-02 -1.437638e-07 -6.946370e-06 6.823834e-07 -4.442806e-05 181 5.200000e-06 5.000000e-07 1.106501e+01 9.999997e+13 4.752030e+06 4.112242e+07 6.770201e+01 -4.939809e+04 -9.727578e-06 1.462902e-02 -2.629611e-07 -9.173110e-06 2.018530e-07 -4.261944e-05 182 5.600000e-06 5.000000e-07 1.302859e+01 1.000000e+14 5.748199e+06 3.952830e+07 2.063969e+01 -4.878027e+04 -2.965403e-06 1.462903e-02 -2.991501e-07 -1.135661e-05 5.924195e-08 -4.079019e-05 183 6.000000e-06 5.000000e-07 1.496743e+01 1.000000e+14 6.711773e+06 3.792177e+07 6.292596e+00 -4.816177e+04 -9.040987e-07 1.462904e-02 -2.988009e-07 -1.346878e-05 1.730267e-08 -3.895830e-05 184 6.400000e-06 5.000000e-07 1.688153e+01 1.000000e+14 7.648084e+06 3.630591e+07 1.918521e+00 -4.754315e+04 -2.756468e-07 1.462905e-02 -2.838475e-07 -1.551362e-05 5.018930e-09 -3.712598e-05 185 6.800000e-06 5.000000e-07 1.877088e+01 1.000000e+14 8.563457e+06 3.468084e+07 5.849313e-01 -4.692450e+04 -8.403102e-08 1.462905e-02 -2.637904e-07 -1.750367e-05 1.432439e-09 -3.529351e-05 186 7.200000e-06 5.000000e-07 2.063549e+01 1.000000e+14 9.463429e+06 3.304629e+07 1.783352e-01 -4.630585e+04 -2.562349e-08 1.462905e-02 -2.426066e-07 -1.945167e-05 3.896878e-10 -3.346098e-05 187 7.600000e-06 5.000000e-07 2.247535e+01 1.000000e+14 1.035241e+07 3.140189e+07 5.436854e-02 -4.568719e+04 -7.807813e-09 1.462905e-02 -2.219362e-07 -2.136826e-05 8.906483e-11 -3.162837e-05 188 8.000000e-06 5.000000e-07 2.429046e+01 1.000000e+14 1.123376e+07 2.974724e+07 1.657261e-02 -4.506853e+04 -2.380780e-09 1.462905e-02 -2.024345e-07 -2.326171e-05 4.307717e-12 -2.979571e-05 189 8.400000e-06 5.000000e-07 2.608083e+01 1.000000e+14 1.211005e+07 2.808192e+07 5.049279e-03 -4.444988e+04 -7.324423e-10 1.462905e-02 -1.843335e-07 -2.513826e-05 -1.794837e-11 -2.796297e-05 190 8.800000e-06 5.000000e-07 2.784645e+01 1.000000e+14 1.298316e+07 2.640548e+07 1.536066e-03 -4.383122e+04 -2.362530e-10 1.462905e-02 -1.676778e-07 -2.700253e-05 -2.227710e-11 -2.613018e-05 191 9.200000e-06 5.000000e-07 2.958733e+01 1.000000e+14 1.385454e+07 2.471746e+07 4.646457e-04 -4.321257e+04 -7.999120e-11 1.462905e-02 -1.524270e-07 -2.885792e-05 -2.158731e-11 -2.429732e-05 192 9.600000e-06 5.000000e-07 3.130346e+01 1.000000e+14 1.472524e+07 2.301734e+07 1.363960e-04 -4.259391e+04 -2.585991e-11 1.462905e-02 -1.385036e-07 -3.070692e-05 -1.959644e-11 -2.246439e-05 193 1.000000e-05 5.000000e-07 3.299484e+01 1.000000e+14 1.624913e+07 2.130461e+07 3.049566e-05 -4.197526e+04 -6.653051e-12 1.462905e-02 -1.177116e-07 -3.255045e-05 -1.736493e-11 -2.063142e-05 194 1.100000e-05 5.000000e-07 3.711503e+01 1.000000e+14 1.843315e+07 1.827538e+07 2.005365e-07 -4.042862e+04 1.796418e-11 1.462905e-02 -9.393600e-08 -3.714729e-05 -1.388369e-11 -1.604888e-05 195 1.200000e-05 5.000000e-07 4.108056e+01 1.000021e+14 2.063091e+07 1.387152e+07 -1.880691e-06 -3.888196e+04 -1.451316e-13 1.462905e-02 -7.492565e-08 -4.173690e-05 -9.826967e-12 -1.146603e-05 196 1.300000e-05 5.000000e-07 4.489143e+01 1.006775e+14 2.284826e+07 9.367703e+06 -1.666629e-06 -3.733006e+04 1.019656e-11 1.462905e-02 -5.972460e-08 -4.632326e-05 -6.281414e-12 -6.882705e-06 197 1.400000e-05 5.000000e-07 4.854658e+01 1.995920e+14 2.526758e+07 4.751668e+06 -1.282610e-06 -3.500802e+04 6.536440e-13 1.462905e-02 -4.716688e-08 -5.091171e-05 -3.071846e-12 -2.295468e-06 198 1.500000e-05 5.000000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.799536e-07 -1.722106e+04 -4.717646e-12 7.289635e-03 -1.431067e-07 7.264986e-03 -3.273283e-22 -1.480064e-11 199 1.600000e-05 5.000000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.764251e-09 -7.658844e+02 -3.811243e-12 -2.489273e-05 -2.877186e-08 1.456835e-02 -3.269197e-23 -2.217676e-12 200 1.700000e-05 5.000000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 2.436825e-12 -3.081262e-09 5.667263e-11 1.455352e-02 -9.245720e-25 -8.471232e-13 201 1.800000e-05 5.000000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.401915e-10 -1.480722e-10 1.455353e-02 -9.624117e-27 -1.229923e-13 202 1.900000e-05 5.000000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -4.873650e-12 -3.765411e-11 0.000000e+00 1.455353e-02 3.304068e-27 -3.501951e-15 203 2.000000e-05 5.000000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.225910e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 204 0.000000e+00 5.500000e-07 -4.689952e-01 -3.158947e+18 1.820081e+02 3.156993e+18 5.659315e+03 0.000000e+00 4.339163e-09 0.000000e+00 3.096235e-11 0.000000e+00 -3.047429e-04 0.000000e+00 205 5.000000e-07 5.500000e-07 -4.654778e-01 -2.545431e+18 5.772053e+01 2.543439e+18 5.676355e+03 -1.410106e+02 1.668402e-08 -4.015587e-09 8.712434e-12 -1.088887e-12 -2.346097e-05 2.076650e-03 206 1.000000e-06 5.500000e-07 -4.548942e-01 -1.331719e+18 4.067303e+01 1.329526e+18 5.767242e+03 -2.848747e+02 1.649561e-07 -4.130341e-08 8.157267e-12 -5.280846e-13 -6.348425e-05 2.503513e-03 207 1.500000e-06 5.500000e-07 -4.369904e-01 -4.523352e+17 2.104418e+01 4.490481e+17 6.254318e+03 -4.593762e+02 2.001300e-06 -5.719279e-07 7.185305e-12 -7.886565e-13 -2.134302e-04 3.051738e-03 208 2.000000e-06 5.500000e-07 -4.089566e-01 -9.969579e+16 6.727051e+00 9.555704e+16 7.188208e+03 -8.390076e+02 3.515364e-05 -1.430113e-04 4.555154e-12 -9.795836e-13 -8.170266e-04 3.078299e-03 209 2.500000e-06 5.500000e-07 -3.530896e-01 -1.419264e+16 3.593454e+00 9.884366e+15 1.026399e+04 -4.915375e+03 8.011440e-04 8.942854e-04 1.889659e-12 -2.906310e-12 -3.720214e-03 1.415870e-03 210 3.000000e-06 5.500000e-07 8.258097e-02 -1.229099e+15 1.136112e+05 4.971448e+08 2.961295e+04 -2.787793e+04 -9.603905e-03 8.687112e-03 1.322172e-07 -1.226041e-07 2.159241e-05 -2.397994e-05 211 3.500000e-06 5.500000e-07 2.434704e+00 1.974970e+13 7.420104e+05 3.468139e+07 9.746498e+03 -4.934947e+04 -1.526946e-03 1.503508e-02 1.035717e-06 -9.269868e-07 1.692427e-05 -4.192410e-05 212 4.000000e-06 5.500000e-07 5.017528e+00 9.685384e+13 1.557903e+06 4.458839e+07 2.407675e+03 -5.133218e+04 -3.432780e-04 1.470978e-02 6.235580e-07 -2.590767e-06 6.960589e-06 -4.754185e-05 213 4.400000e-06 5.500000e-07 7.060438e+00 9.982725e+13 2.466320e+06 4.448615e+07 7.276428e+02 -5.072621e+04 -1.034582e-04 1.465019e-02 1.631305e-07 -4.359300e-06 2.269236e-06 -4.647347e-05 214 4.800000e-06 5.500000e-07 9.075625e+00 9.999281e+13 3.463232e+06 4.284287e+07 2.204878e+02 -5.005287e+04 -3.150771e-05 1.463506e-02 -9.838750e-08 -6.419935e-06 6.791482e-07 -4.455284e-05 215 5.200000e-06 5.500000e-07 1.106467e+01 9.999977e+13 4.476127e+06 4.117190e+07 6.703621e+01 -4.941072e+04 -9.608621e-06 1.463083e-02 -2.166317e-07 -8.591470e-06 2.000129e-07 -4.265627e-05 216 5.600000e-06 5.500000e-07 1.302848e+01 9.999999e+13 5.473793e+06 3.954292e+07 2.041522e+01 -4.878411e+04 -2.930269e-06 1.462959e-02 -2.593879e-07 -1.076143e-05 5.861110e-08 -4.080106e-05 217 6.000000e-06 5.500000e-07 1.496740e+01 1.000000e+14 6.447955e+06 3.792614e+07 6.221514e+00 -4.816294e+04 -8.935272e-07 1.462921e-02 -2.669510e-07 -1.288698e-05 1.710960e-08 -3.896156e-05 218 6.400000e-06 5.500000e-07 1.688152e+01 1.000000e+14 7.399495e+06 3.630726e+07 1.896519e+00 -4.754350e+04 -2.724440e-07 1.462910e-02 -2.590774e-07 -1.496003e-05 4.962560e-09 -3.712700e-05 219 6.800000e-06 5.500000e-07 1.877088e+01 1.000000e+14 8.332088e+06 3.468131e+07 5.781818e-01 -4.692461e+04 -8.306594e-08 1.462906e-02 -2.447580e-07 -1.698544e-05 1.416738e-09 -3.529388e-05 220 7.200000e-06 5.500000e-07 2.063549e+01 1.000000e+14 9.249762e+06 3.304649e+07 1.762723e-01 -4.630588e+04 -2.533221e-08 1.462905e-02 -2.280327e-07 -1.897145e-05 3.857799e-10 -3.346115e-05 221 7.600000e-06 5.500000e-07 2.247535e+01 1.000000e+14 1.015609e+07 3.140200e+07 5.373900e-02 -4.568720e+04 -7.719517e-09 1.462905e-02 -2.107585e-07 -2.092614e-05 8.846829e-11 -3.162848e-05 222 8.000000e-06 5.500000e-07 2.429046e+01 1.000000e+14 1.105400e+07 2.974732e+07 1.638066e-02 -4.506854e+04 -2.362091e-09 1.462905e-02 -1.938196e-07 -2.285643e-05 4.572073e-12 -2.979579e-05 223 8.400000e-06 5.500000e-07 2.608083e+01 1.000000e+14 1.194583e+07 2.808199e+07 4.990805e-03 -4.444988e+04 -7.078249e-10 1.462905e-02 -1.776448e-07 -2.476783e-05 -1.751415e-11 -2.796304e-05 224 8.800000e-06 5.500000e-07 2.784645e+01 1.000000e+14 1.283339e+07 2.640555e+07 1.518290e-03 -4.383122e+04 -2.103453e-10 1.462905e-02 -1.624362e-07 -2.666464e-05 -2.185699e-11 -2.613024e-05 225 9.200000e-06 5.500000e-07 2.958733e+01 1.000000e+14 1.371810e+07 2.471751e+07 4.592794e-04 -4.321257e+04 -6.293042e-11 1.462905e-02 -1.482751e-07 -2.855017e-05 -2.122229e-11 -2.429737e-05 226 9.600000e-06 5.500000e-07 3.130346e+01 1.000000e+14 1.460106e+07 2.301739e+07 1.348281e-04 -4.259391e+04 -1.628737e-11 1.462905e-02 -1.351757e-07 -3.042690e-05 -1.928926e-11 -2.246443e-05 227 1.000000e-05 5.500000e-07 3.299484e+01 1.000000e+14 1.614339e+07 2.130465e+07 3.014987e-05 -4.197526e+04 -2.763806e-12 1.462905e-02 -1.153199e-07 -3.229512e-05 -1.710965e-11 -2.063146e-05 228 1.100000e-05 5.500000e-07 3.711503e+01 1.000000e+14 1.834863e+07 1.827542e+07 2.017126e-07 -4.042862e+04 -1.530422e-12 1.462905e-02 -9.232607e-08 -3.694346e-05 -1.369257e-11 -1.604891e-05 229 1.200000e-05 5.500000e-07 4.108056e+01 1.000021e+14 2.056343e+07 1.387154e+07 -1.856580e-06 -3.888196e+04 -6.032813e-12 1.462905e-02 -7.379344e-08 -4.157446e-05 -9.697975e-12 -1.146605e-05 230 1.300000e-05 5.500000e-07 4.489143e+01 1.006775e+14 2.279441e+07 9.367718e+06 -1.646046e-06 -3.733006e+04 1.714665e-11 1.462905e-02 -5.889914e-08 -4.619396e-05 -6.201378e-12 -6.882716e-06 231 1.400000e-05 5.500000e-07 4.854658e+01 1.995920e+14 2.522423e+07 4.751675e+06 -1.266732e-06 -3.500802e+04 -2.649307e-11 1.462905e-02 -4.655341e-08 -5.080878e-05 -3.033340e-12 -2.295472e-06 232 1.500000e-05 5.500000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.781893e-07 -1.722106e+04 2.196105e-11 7.289635e-03 -1.416936e-07 7.265042e-03 -3.243012e-22 -1.480064e-11 233 1.600000e-05 5.500000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -2.352334e-09 -7.658844e+02 5.029655e-12 -2.489273e-05 -3.842883e-08 1.456837e-02 -3.365990e-23 -2.217676e-12 234 1.700000e-05 5.500000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 2.074264e-11 -3.081018e-09 0.000000e+00 1.455352e-02 -7.868297e-25 -8.471232e-13 235 1.800000e-05 5.500000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.404352e-10 1.480722e-10 1.455353e-02 -1.168643e-26 -1.229923e-13 236 1.900000e-05 5.500000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -7.310476e-12 -3.765410e-11 5.411625e-10 1.455353e-02 1.321627e-27 -3.501951e-15 237 2.000000e-05 5.500000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.177171e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 238 0.000000e+00 6.000000e-07 -4.935487e-01 -1.432179e+19 3.813343e+02 1.432179e+19 4.206034e+03 -7.010881e+01 9.613420e-10 -3.116034e-10 1.901069e-11 -2.531969e-12 -3.067126e-04 6.432979e-03 239 5.000000e-07 6.000000e-07 -4.900432e-01 -1.154035e+19 1.054349e+02 1.153850e+19 4.207880e+03 -1.402001e+02 4.274503e-09 -1.298098e-09 7.559017e-12 -1.457805e-12 -4.844215e-05 6.542777e-03 240 1.000000e-06 6.000000e-07 -4.795286e-01 -6.037848e+18 7.962526e+01 6.035994e+18 4.217375e+03 -2.808552e+02 4.035127e-08 -1.203887e-08 7.504318e-12 -4.913021e-13 -1.307322e-04 7.039449e-03 241 1.500000e-06 6.000000e-07 -4.619577e-01 -2.051065e+18 4.356304e+01 2.049153e+18 4.261477e+03 -4.249331e+02 4.299642e-07 -4.610537e-08 6.852037e-12 -6.747714e-13 -3.246238e-04 8.291312e-03 242 2.000000e-06 6.000000e-07 -4.370353e-01 -4.523352e+17 1.215237e+01 4.498291e+17 4.660849e+03 -6.397829e+02 7.102117e-06 -1.251951e-05 4.382335e-12 -7.036239e-13 -7.558990e-04 8.981147e-03 243 2.500000e-06 6.000000e-07 -3.979794e-01 -6.469727e+16 2.021597e+00 5.898873e+16 7.056926e+03 -3.643455e+03 1.674046e-03 3.804937e-04 1.730731e-12 -1.178142e-12 -4.368796e-03 4.398768e-03 244 3.000000e-06 6.000000e-07 -7.268984e-02 -5.925617e+15 1.479399e+04 1.921774e+11 3.089522e+04 -2.782759e+04 -1.103405e-02 8.481571e-03 1.857001e-08 -1.596247e-08 2.357427e-05 -2.398121e-05 245 3.500000e-06 6.000000e-07 2.384780e+00 -2.638236e+14 6.616358e+05 3.744817e+07 1.004604e+04 -5.078154e+04 -1.435814e-03 1.553148e-02 9.443383e-07 -7.335046e-07 1.824770e-05 -4.468680e-05 246 4.000000e-06 6.000000e-07 5.005465e+00 8.573654e+13 1.427060e+06 4.646024e+07 2.383082e+03 -5.178607e+04 -3.265143e-04 1.477782e-02 5.848434e-07 -2.356299e-06 7.077215e-06 -4.888217e-05 247 4.400000e-06 6.000000e-07 7.056823e+00 9.921684e+13 2.289349e+06 4.505920e+07 7.087124e+02 -5.086336e+04 -9.921014e-05 1.466932e-02 1.735861e-07 -4.026211e-06 2.229480e-06 -4.690102e-05 248 4.800000e-06 6.000000e-07 9.074533e+00 9.996738e+13 3.251039e+06 4.300992e+07 2.133507e+02 -5.009392e+04 -3.030491e-05 1.464084e-02 -6.276170e-08 -5.998757e-06 6.588948e-07 -4.467709e-05 249 5.200000e-06 6.000000e-07 1.106434e+01 9.999897e+13 4.244881e+06 4.122059e+07 6.470081e+01 -4.942310e+04 -9.251837e-06 1.463259e-02 -1.747822e-07 -8.111677e-06 1.931936e-07 -4.269246e-05 250 5.600000e-06 6.000000e-07 1.302838e+01 9.999998e+13 5.236968e+06 3.955722e+07 1.968406e+01 -4.878787e+04 -2.822606e-06 1.463012e-02 -2.201462e-07 -1.025521e-05 5.652557e-08 -4.081170e-05 251 6.000000e-06 6.000000e-07 1.496737e+01 1.000000e+14 6.214658e+06 3.793040e+07 5.996233e+00 -4.816408e+04 -8.608325e-07 1.462938e-02 -2.331593e-07 -1.237879e-05 1.649232e-08 -3.896475e-05 252 6.400000e-06 6.000000e-07 1.688151e+01 1.000000e+14 7.175274e+06 3.630858e+07 1.827538e+00 -4.754385e+04 -2.624913e-07 1.462915e-02 -2.309897e-07 -1.446575e-05 4.783138e-09 -3.712800e-05 253 6.800000e-06 6.000000e-07 1.877087e+01 1.000000e+14 8.120047e+06 3.468176e+07 5.571133e-01 -4.692471e+04 -8.002664e-08 1.462908e-02 -2.217226e-07 -1.651440e-05 1.365865e-09 -3.529424e-05 254 7.200000e-06 6.000000e-07 2.063549e+01 1.000000e+14 9.051425e+06 3.304668e+07 1.698443e-01 -4.630591e+04 -2.440684e-08 1.462906e-02 -2.091883e-07 -1.852862e-05 3.722596e-10 -3.346131e-05 255 7.600000e-06 6.000000e-07 2.247535e+01 1.000000e+14 9.971984e+06 3.140211e+07 5.177874e-02 -4.568721e+04 -7.427855e-09 1.462905e-02 -1.952905e-07 -2.051373e-05 8.564033e-11 -3.162858e-05 256 8.000000e-06 6.000000e-07 2.429046e+01 1.000000e+14 1.088404e+07 2.974740e+07 1.578309e-02 -4.506854e+04 -2.268118e-09 1.462905e-02 -1.810374e-07 -2.247487e-05 4.694985e-12 -2.979586e-05 257 8.400000e-06 6.000000e-07 2.608083e+01 1.000000e+14 1.178955e+07 2.808206e+07 4.808747e-03 -4.444988e+04 -6.846280e-10 1.462905e-02 -1.669914e-07 -2.441650e-05 -1.666589e-11 -2.796311e-05 258 8.800000e-06 6.000000e-07 2.784645e+01 1.000000e+14 1.269012e+07 2.640561e+07 1.462917e-03 -4.383122e+04 -1.938079e-10 1.462905e-02 -1.534729e-07 -2.634228e-05 -2.090934e-11 -2.613029e-05 259 9.200000e-06 6.000000e-07 2.958733e+01 1.000000e+14 1.358704e+07 2.471757e+07 4.425389e-04 -4.321257e+04 -5.023521e-11 1.462905e-02 -1.406610e-07 -2.825517e-05 -2.034126e-11 -2.429742e-05 260 9.600000e-06 6.000000e-07 3.130346e+01 1.000000e+14 1.448138e+07 2.301744e+07 1.299211e-04 -4.259391e+04 -9.772932e-12 1.462905e-02 -1.286474e-07 -3.015749e-05 -1.851095e-11 -2.246448e-05 261 1.000000e-05 6.000000e-07 3.299484e+01 1.000000e+14 1.604109e+07 2.130469e+07 2.905714e-05 -4.197526e+04 -3.750411e-12 1.462905e-02 -1.101574e-07 -3.204881e-05 -1.643501e-11 -2.063149e-05 262 1.100000e-05 6.000000e-07 3.711503e+01 1.000000e+14 1.826659e+07 1.827545e+07 1.978449e-07 -4.042862e+04 -1.211116e-11 1.462905e-02 -8.847183e-08 -3.674599e-05 -1.316476e-11 -1.604894e-05 263 1.200000e-05 6.000000e-07 4.108056e+01 1.000021e+14 2.049779e+07 1.387157e+07 -1.786722e-06 -3.888196e+04 -8.166232e-12 1.462905e-02 -7.085477e-08 -4.141665e-05 -9.330017e-12 -1.146607e-05 264 1.300000e-05 6.000000e-07 4.489143e+01 1.006775e+14 2.274197e+07 9.367733e+06 -1.585258e-06 -3.733006e+04 1.021381e-11 1.462905e-02 -5.662560e-08 -4.606812e-05 -5.968344e-12 -6.882726e-06 265 1.400000e-05 6.000000e-07 4.854658e+01 1.995920e+14 2.518198e+07 4.751683e+06 -1.219504e-06 -3.500802e+04 -1.470996e-11 1.462905e-02 -4.479235e-08 -5.070850e-05 -2.919946e-12 -2.295475e-06 266 1.500000e-05 6.000000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.714603e-07 -1.722106e+04 3.151354e-11 7.289635e-03 -1.363397e-07 7.265096e-03 -3.120450e-22 -1.480064e-11 267 1.600000e-05 6.000000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -2.295788e-09 -7.658844e+02 -6.376132e-13 -2.489273e-05 -3.750772e-08 1.456838e-02 -3.284658e-23 -2.217676e-12 268 1.700000e-05 6.000000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 2.552940e-11 -3.081514e-09 -4.849869e-11 1.455353e-02 -6.676295e-25 -8.471232e-13 269 1.800000e-05 6.000000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.415941e-10 0.000000e+00 1.455353e-02 -1.492531e-26 -1.229923e-13 270 1.900000e-05 6.000000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -2.999169e-12 -3.765410e-11 6.660461e-10 1.455353e-02 -2.262016e-27 -3.501951e-15 271 2.000000e-05 6.000000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.152803e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 272 0.000000e+00 6.800000e-07 -5.181774e-01 -6.549301e+19 2.596592e+02 6.549301e+19 1.967576e+03 -6.995258e+01 -0.000000e+00 -6.642096e-11 4.301372e-26 -7.631321e-13 4.663934e-08 2.782845e-02 273 5.000000e-07 6.800000e-07 -5.146798e-01 -5.277364e+19 1.741130e+02 5.277183e+19 1.968153e+03 -1.399158e+02 1.021165e-09 -6.176788e-11 4.549778e-12 -5.626645e-13 -7.342078e-05 2.787504e-02 274 1.000000e-06 6.800000e-07 -5.041858e-01 -2.761106e+19 1.562086e+02 2.760924e+19 1.969656e+03 -2.799968e+02 1.023783e-08 1.587380e-09 5.293486e-12 -5.537513e-13 -2.253313e-04 2.812625e-02 275 1.500000e-06 6.800000e-07 -4.866801e-01 -9.379751e+18 1.078568e+02 9.377929e+18 1.974355e+03 -4.208647e+02 1.127610e-07 7.663627e-08 5.530308e-12 -9.411585e-13 -5.755386e-04 2.903601e-02 276 2.000000e-06 6.800000e-07 -4.620994e-01 -2.068858e+18 3.687195e+01 2.067004e+18 1.998129e+03 -5.683449e+02 9.772511e-07 1.533726e-06 3.785505e-12 -1.048603e-12 -8.013662e-04 3.023284e-02 277 2.500000e-06 6.800000e-07 -4.298456e-01 -2.962139e+17 4.882238e+00 2.935246e+17 2.447135e+03 -1.442823e+03 8.906499e-05 -6.007592e-04 1.553422e-12 -1.021366e-12 -1.072259e-03 2.051603e-02 278 3.000000e-06 6.800000e-07 -3.178171e-01 -2.745477e+16 3.196504e+00 2.554349e+15 1.925118e+04 -2.733473e+04 -4.736570e-03 8.360904e-03 2.327144e-12 -3.990807e-12 -6.320610e-03 5.129179e-03 279 3.500000e-06 6.800000e-07 2.303628e+00 -1.563743e+15 5.805192e+05 4.587281e+07 9.275283e+03 -5.304596e+04 -1.102361e-03 1.648787e-02 7.859451e-07 -6.299993e-07 1.985053e-05 -5.170055e-05 280 4.000000e-06 6.800000e-07 4.986779e+00 3.477410e+13 1.273135e+06 5.021103e+07 2.175071e+03 -5.252463e+04 -2.812284e-04 1.487441e-02 4.991833e-07 -2.093487e-06 6.838308e-06 -5.141809e-05 281 4.400000e-06 6.800000e-07 7.051335e+00 9.641865e+13 2.082289e+06 4.600058e+07 6.381171e+02 -5.107638e+04 -8.738336e-05 1.469734e-02 1.688031e-07 -3.635623e-06 2.039920e-06 -4.759268e-05 282 4.800000e-06 6.800000e-07 9.072890e+00 9.985084e+13 2.997643e+06 4.326772e+07 1.906903e+02 -5.015630e+04 -2.685286e-05 1.464943e-02 -2.340433e-08 -5.500445e-06 5.916050e-07 -4.486791e-05 283 5.200000e-06 6.800000e-07 1.106384e+01 9.999529e+13 3.959114e+06 4.129424e+07 5.763774e+01 -4.944176e+04 -8.213353e-06 1.463523e-02 -1.189145e-07 -7.528321e-06 1.723265e-07 -4.274712e-05 284 5.600000e-06 6.800000e-07 1.302823e+01 9.999989e+13 4.933977e+06 3.957871e+07 1.751059e+01 -4.879351e+04 -2.507417e-06 1.463093e-02 -1.622401e-07 -9.618459e-06 5.030386e-08 -4.082767e-05 285 6.000000e-06 6.800000e-07 1.496732e+01 1.000000e+14 5.906955e+06 3.793678e+07 5.331004e+00 -4.816580e+04 -7.648895e-07 1.462962e-02 -1.792893e-07 -1.171866e-05 1.466565e-08 -3.896951e-05 286 6.400000e-06 6.800000e-07 1.688149e+01 1.000000e+14 6.871961e+06 3.631055e+07 1.624392e+00 -4.754437e+04 -2.332571e-07 1.462922e-02 -1.830773e-07 -1.380563e-05 4.252807e-09 -3.712950e-05 287 6.800000e-06 6.800000e-07 1.877087e+01 1.000000e+14 7.827249e+06 3.468243e+07 4.951353e-01 -4.692487e+04 -7.112499e-08 1.462910e-02 -1.799014e-07 -1.587076e-05 1.214859e-09 -3.529477e-05 288 7.200000e-06 6.800000e-07 2.063548e+01 1.000000e+14 8.772983e+06 3.304696e+07 1.509431e-01 -4.630596e+04 -2.167845e-08 1.462906e-02 -1.729185e-07 -1.791222e-05 3.315246e-10 -3.346155e-05 289 7.600000e-06 6.800000e-07 2.247535e+01 1.000000e+14 9.710080e+06 3.140228e+07 4.601578e-02 -4.568723e+04 -6.611736e-09 1.462905e-02 -1.638438e-07 -1.993104e-05 7.661578e-11 -3.162873e-05 290 8.000000e-06 6.800000e-07 2.429046e+01 1.000000e+14 1.063969e+07 2.974753e+07 1.402637e-02 -4.506855e+04 -2.016303e-09 1.462905e-02 -1.536944e-07 -2.192930e-05 4.542325e-12 -2.979598e-05 291 8.400000e-06 6.800000e-07 2.608083e+01 1.000000e+14 1.156298e+07 2.808216e+07 4.273526e-03 -4.444988e+04 -6.102562e-10 1.462905e-02 -1.431131e-07 -2.390935e-05 -1.454262e-11 -2.796321e-05 292 8.800000e-06 6.800000e-07 2.784645e+01 1.000000e+14 1.248100e+07 2.640569e+07 1.300108e-03 -4.383122e+04 -1.865258e-10 1.462905e-02 -1.325183e-07 -2.587343e-05 -1.838887e-11 -2.613038e-05 293 9.200000e-06 6.800000e-07 2.958733e+01 1.000000e+14 1.339474e+07 2.471764e+07 3.933003e-04 -4.321257e+04 -6.427425e-11 1.462905e-02 -1.221822e-07 -2.782353e-05 -1.793957e-11 -2.429749e-05 294 9.600000e-06 6.800000e-07 3.130346e+01 1.000000e+14 1.430503e+07 2.301751e+07 1.154746e-04 -4.259391e+04 -2.324451e-11 1.462905e-02 -1.122773e-07 -2.976139e-05 -1.635427e-11 -2.246454e-05 295 1.000000e-05 6.800000e-07 3.299484e+01 1.000000e+14 1.588963e+07 2.130475e+07 2.583267e-05 -4.197526e+04 -6.671665e-12 1.462905e-02 -9.666518e-08 -3.168541e-05 -1.454046e-11 -2.063155e-05 296 1.100000e-05 6.800000e-07 3.711503e+01 1.000000e+14 1.814463e+07 1.827550e+07 1.804681e-07 -4.042862e+04 1.425513e-12 1.462905e-02 -7.799649e-08 -3.645306e-05 -1.166283e-11 -1.604898e-05 297 1.200000e-05 6.800000e-07 4.108056e+01 1.000021e+14 2.039995e+07 1.387160e+07 -1.585988e-06 -3.888196e+04 3.491590e-12 1.462905e-02 -6.264912e-08 -4.118174e-05 -8.273179e-12 -1.146610e-05 298 1.300000e-05 6.800000e-07 4.489143e+01 1.006775e+14 2.266366e+07 9.367755e+06 -1.407725e-06 -3.733006e+04 -8.808554e-12 1.462905e-02 -5.016113e-08 -4.588040e-05 -5.295216e-12 -6.882742e-06 299 1.400000e-05 6.800000e-07 4.854658e+01 1.995920e+14 2.511883e+07 4.751693e+06 -1.083911e-06 -3.500802e+04 1.557821e-11 1.462905e-02 -3.972537e-08 -5.055870e-05 -2.591395e-12 -2.295481e-06 300 1.500000e-05 6.800000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.529017e-07 -1.722106e+04 -1.788618e-11 7.289635e-03 -1.215680e-07 7.265177e-03 -2.785826e-22 -1.480064e-11 301 1.600000e-05 6.800000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.837761e-09 -7.658844e+02 -8.474090e-12 -2.489273e-05 -3.000991e-08 1.456839e-02 -2.889523e-23 -2.217676e-12 302 1.700000e-05 6.800000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 -3.046032e-12 -3.080180e-09 -3.542039e-11 1.455353e-02 -5.442474e-25 -8.471232e-13 303 1.800000e-05 6.800000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -1.523016e-12 -1.415941e-10 0.000000e+00 1.455353e-02 -1.331909e-26 -1.229923e-13 304 1.900000e-05 6.800000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -1.523016e-12 -3.765410e-11 -3.382266e-10 1.455353e-02 -1.652034e-27 -3.501951e-15 305 2.000000e-05 6.800000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.152803e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 306 0.000000e+00 7.600000e-07 -5.250299e-01 -9.999990e+19 2.333911e+02 9.999990e+19 4.282788e+02 -6.992404e+01 -0.000000e+00 1.516850e-11 1.241444e-25 -2.576249e-13 5.628421e-08 4.212958e-02 307 5.000000e-07 7.600000e-07 -5.215337e-01 -8.057897e+19 2.117861e+02 8.057826e+19 4.283819e+02 -1.398673e+02 4.202029e-10 3.399538e-10 1.926438e-12 -2.605502e-13 -7.284582e-05 4.207938e-02 308 1.000000e-06 7.600000e-07 -5.110431e-01 -4.215878e+19 2.125864e+02 4.215807e+19 4.286089e+02 -2.798629e+02 4.078975e-09 5.839502e-09 2.833035e-12 -5.157116e-13 -2.332166e-04 4.187397e-02 309 1.500000e-06 7.600000e-07 -4.935474e-01 -1.432179e+19 1.723459e+02 1.432108e+19 4.292833e+02 -4.203774e+02 4.228228e-08 1.086167e-07 3.691787e-12 -1.133708e-12 -6.147717e-04 4.125910e-02 310 2.000000e-06 7.600000e-07 -4.690054e-01 -3.158947e+18 6.938417e+01 3.158231e+18 4.319845e+02 -5.641382e+02 2.873185e-07 1.712848e-06 2.838908e-12 -1.441325e-12 -7.799190e-04 4.017522e-02 311 2.500000e-06 7.600000e-07 -4.371336e-01 -4.523352e+17 1.074184e+01 4.515397e+17 4.581408e+02 -8.829672e+02 -1.368447e-06 -3.775138e-04 1.230634e-12 -1.187647e-12 5.970070e-04 4.043285e-02 312 3.000000e-06 7.600000e-07 -3.807087e-01 -4.197278e+16 8.390300e-01 2.944979e+16 4.211081e+03 -2.673509e+04 3.470796e-03 8.290943e-03 4.219041e-13 -1.399318e-12 -1.251321e-02 2.062438e-02 313 3.500000e-06 7.600000e-07 2.236375e+00 -2.440333e+15 5.321015e+05 6.156846e+07 7.084396e+03 -5.351372e+04 -6.968935e-04 1.624433e-02 6.030651e-07 -5.777487e-07 2.007033e-05 -6.244780e-05 314 4.000000e-06 7.600000e-07 4.970664e+00 4.080051e+11 1.176747e+06 5.434524e+07 1.766958e+03 -5.313742e+04 -2.194781e-04 1.493768e-02 3.905637e-07 -1.931232e-06 5.977398e-06 -5.408455e-05 315 4.400000e-06 7.600000e-07 7.046613e+00 9.453171e+13 1.947123e+06 4.687670e+07 5.210421e+02 -5.126023e+04 -7.022400e-05 1.472020e-02 1.441011e-07 -3.385121e-06 1.696765e-06 -4.822702e-05 316 4.800000e-06 7.600000e-07 9.071482e+00 9.977226e+13 2.826585e+06 4.349457e+07 1.553341e+02 -5.021001e+04 -2.172515e-05 1.465668e-02 -1.839289e-09 -5.169063e-06 4.842743e-07 -4.503495e-05 317 5.200000e-06 7.600000e-07 1.106341e+01 9.999281e+13 3.759380e+06 4.135774e+07 4.685385e+01 -4.945774e+04 -6.657520e-06 1.463746e-02 -7.622450e-08 -7.127145e-06 1.402698e-07 -4.279416e-05 318 5.600000e-06 7.600000e-07 1.302810e+01 9.999983e+13 4.714890e+06 3.959710e+07 1.421912e+01 -4.879833e+04 -2.033685e-06 1.463161e-02 -1.121970e-07 -9.165504e-06 4.086398e-08 -4.084133e-05 319 6.000000e-06 7.600000e-07 1.496728e+01 1.000000e+14 5.677574e+06 3.794222e+07 4.326854e+00 -4.816726e+04 -6.205114e-07 1.462983e-02 -1.286059e-07 -1.123388e-05 1.190540e-08 -3.897358e-05 320 6.400000e-06 7.600000e-07 1.688148e+01 1.000000e+14 6.639901e+06 3.631222e+07 1.318151e+00 -4.754482e+04 -1.892460e-07 1.462929e-02 -1.347324e-07 -1.330711e-05 3.451944e-09 -3.713077e-05 321 6.800000e-06 7.600000e-07 1.877087e+01 1.000000e+14 7.598370e+06 3.468300e+07 4.017551e-01 -4.692501e+04 -5.770865e-08 1.462912e-02 -1.350579e-07 -1.537308e-05 9.863655e-10 -3.529522e-05 322 7.200000e-06 7.600000e-07 2.063548e+01 1.000000e+14 8.551488e+06 3.304720e+07 1.224716e-01 -4.630600e+04 -1.759103e-08 1.462907e-02 -1.318916e-07 -1.742624e-05 2.694516e-10 -3.346176e-05 323 7.600000e-06 7.600000e-07 2.247535e+01 1.000000e+14 9.498785e+06 3.140241e+07 3.733559e-02 -4.568724e+04 -5.367358e-09 1.462906e-02 -1.265654e-07 -1.946433e-05 6.250311e-11 -3.162886e-05 324 8.000000e-06 7.600000e-07 2.429046e+01 1.000000e+14 1.044032e+07 2.974763e+07 1.138045e-02 -4.506855e+04 -1.627538e-09 1.462905e-02 -1.199337e-07 -2.148675e-05 3.934590e-12 -2.979608e-05 325 8.400000e-06 7.600000e-07 2.608083e+01 1.000000e+14 1.137644e+07 2.808225e+07 3.467382e-03 -4.444988e+04 -4.943910e-10 1.462905e-02 -1.125811e-07 -2.349377e-05 -1.161788e-11 -2.796329e-05 326 8.800000e-06 7.600000e-07 2.784645e+01 1.000000e+14 1.230760e+07 2.640577e+07 1.054870e-03 -4.383122e+04 -1.517235e-10 1.462905e-02 -1.049172e-07 -2.548609e-05 -1.478895e-11 -2.613045e-05 327 9.200000e-06 7.600000e-07 2.958733e+01 1.000000e+14 1.323437e+07 2.471771e+07 3.191213e-04 -4.321257e+04 -4.772741e-11 1.462905e-02 -9.722761e-08 -2.746462e-05 -1.446186e-11 -2.429756e-05 328 9.600000e-06 7.600000e-07 3.130346e+01 1.000000e+14 1.415730e+07 2.301757e+07 9.370155e-05 -4.259391e+04 -1.239568e-11 1.462905e-02 -8.970720e-08 -2.943035e-05 -1.320357e-11 -2.246460e-05 329 1.000000e-05 7.600000e-07 3.299484e+01 1.000000e+14 1.576208e+07 2.130480e+07 2.096591e-05 -4.197526e+04 -1.081180e-11 1.462905e-02 -7.759271e-08 -3.138059e-05 -1.175300e-11 -2.063160e-05 330 1.100000e-05 7.600000e-07 3.711503e+01 1.000000e+14 1.804146e+07 1.827554e+07 1.495937e-07 -4.042862e+04 3.417528e-12 1.462905e-02 -6.285475e-08 -3.620590e-05 -9.437700e-12 -1.604901e-05 331 1.200000e-05 7.600000e-07 4.108056e+01 1.000021e+14 2.031696e+07 1.387163e+07 -1.284962e-06 -3.888196e+04 4.965855e-12 1.462905e-02 -5.061280e-08 -4.098281e-05 -6.699958e-12 -1.146612e-05 332 1.300000e-05 7.600000e-07 4.489143e+01 1.006775e+14 2.259713e+07 9.367774e+06 -1.141250e-06 -3.733006e+04 -1.119058e-11 1.462905e-02 -4.058802e-08 -4.572106e-05 -4.290284e-12 -6.882756e-06 333 1.400000e-05 7.600000e-07 4.854658e+01 1.995920e+14 2.506511e+07 4.751703e+06 -8.788173e-07 -3.500802e+04 -2.442498e-12 1.462905e-02 -3.217585e-08 -5.043136e-05 -2.100125e-12 -2.295485e-06 334 1.500000e-05 7.600000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -1.234975e-07 -1.722106e+04 1.640019e-11 7.289635e-03 -9.819161e-08 7.265247e-03 -2.248668e-22 -1.480064e-11 335 1.600000e-05 7.600000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.470209e-09 -7.658844e+02 1.429216e-11 -2.489273e-05 -2.401129e-08 1.456841e-02 -2.383826e-23 -2.217676e-12 336 1.700000e-05 7.600000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 -9.138095e-12 -3.080957e-09 0.000000e+00 1.455353e-02 -4.599274e-25 -8.471232e-13 337 1.800000e-05 7.600000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -1.523016e-12 -1.414723e-10 0.000000e+00 1.455353e-02 -1.160050e-26 -1.229923e-13 338 1.900000e-05 7.600000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -3.046032e-12 -3.753231e-11 -3.382266e-10 1.455353e-02 -8.260170e-28 -3.501951e-15 339 2.000000e-05 7.600000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.128431e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 340 0.000000e+00 8.400000e-07 -5.250299e-01 -9.999990e+19 2.333911e+02 9.999990e+19 -0.000000e+00 -6.991959e+01 -0.000000e+00 6.804404e-11 0.000000e+00 -9.748752e-14 0.000000e+00 4.207545e-02 341 5.000000e-07 8.400000e-07 -5.215339e-01 -8.057897e+19 2.332763e+02 8.057895e+19 1.389031e-02 -1.398630e+02 2.722731e-10 5.908680e-10 6.973526e-13 -1.393778e-13 -5.267737e-05 4.199977e-02 342 1.000000e-06 8.400000e-07 -5.110436e-01 -4.215878e+19 2.492374e+02 4.215876e+19 2.656139e-02 -2.798526e+02 2.565291e-09 8.285312e-09 1.313556e-12 -4.651639e-13 -1.691788e-04 4.167873e-02 343 1.500000e-06 8.400000e-07 -4.935486e-01 -1.432179e+19 2.221273e+02 1.432177e+19 7.829383e-02 -4.203246e+02 2.471826e-08 1.219546e-07 2.134675e-12 -1.286674e-12 -4.331535e-04 4.075786e-02 344 2.000000e-06 8.400000e-07 -4.690111e-01 -3.158947e+18 9.775389e+01 3.158928e+18 3.568072e-01 -5.637277e+02 1.233434e-07 1.308010e-06 1.834519e-12 -1.837102e-12 -5.376823e-04 3.919107e-02 345 2.500000e-06 8.400000e-07 -4.371759e-01 -4.523352e+17 1.618134e+01 4.522789e+17 2.662155e+00 -8.381672e+02 -4.243444e-06 -4.547770e-05 8.292760e-13 -1.592799e-12 3.073589e-04 3.955705e-02 346 3.000000e-06 8.400000e-07 -3.851944e-01 -4.197278e+16 1.280111e+00 3.502707e+16 3.012943e+02 -2.627453e+04 2.251743e-03 8.249620e-03 1.954719e-13 -2.043847e-12 -8.966413e-03 2.036104e-02 347 3.500000e-06 8.400000e-07 2.190277e+00 -2.440333e+15 5.112218e+05 8.649624e+07 4.560885e+03 -5.343702e+04 -4.103405e-04 1.589743e-02 4.067022e-07 -5.552936e-07 1.757568e-05 -7.777345e-05 348 4.000000e-06 8.400000e-07 4.958508e+00 4.080051e+11 1.125160e+06 5.818564e+07 1.230631e+03 -5.355775e+04 -1.494547e-04 1.497548e-02 2.670961e-07 -1.849329e-06 4.469431e-06 -5.647403e-05 349 4.400000e-06 8.400000e-07 7.042999e+00 9.453171e+13 1.865198e+06 4.758733e+07 3.675915e+02 -5.139871e+04 -4.903443e-05 1.473689e-02 1.044217e-07 -3.240729e-06 1.217899e-06 -4.873641e-05 350 4.800000e-06 8.400000e-07 9.070404e+00 9.977226e+13 2.718376e+06 4.367214e+07 1.096403e+02 -5.025113e+04 -1.526020e-05 1.466215e-02 6.269398e-09 -4.963326e-06 3.433438e-07 -4.516514e-05 351 5.200000e-06 8.400000e-07 1.106309e+01 9.999281e+13 3.629314e+06 4.140670e+07 3.303459e+01 -4.946998e+04 -4.683935e-06 1.463917e-02 -4.444904e-08 -6.869353e-06 9.901534e-08 -4.283036e-05 352 5.600000e-06 8.400000e-07 1.302800e+01 9.999983e+13 4.568389e+06 3.961118e+07 1.001792e+01 -4.880202e+04 -1.431525e-06 1.463214e-02 -6.986176e-08 -8.866401e-06 2.880000e-08 -4.085178e-05 353 6.000000e-06 8.400000e-07 1.496725e+01 1.000000e+14 5.520465e+06 3.794637e+07 3.047362e+00 -4.816838e+04 -4.368570e-07 1.462999e-02 -8.240066e-08 -1.090570e-05 8.386105e-09 -3.897668e-05 354 6.400000e-06 8.400000e-07 1.688147e+01 1.000000e+14 6.477627e+06 3.631350e+07 9.282188e-01 -4.754516e+04 -1.332401e-07 1.462934e-02 -8.803659e-08 -1.296206e-05 2.431272e-09 -3.713174e-05 355 6.800000e-06 8.400000e-07 1.877086e+01 1.000000e+14 7.435520e+06 3.468343e+07 2.828906e-01 -4.692511e+04 -4.063112e-08 1.462914e-02 -8.960387e-08 -1.502203e-05 6.948604e-10 -3.529557e-05 356 7.200000e-06 8.400000e-07 2.063548e+01 1.000000e+14 8.391639e+06 3.304739e+07 8.623448e-02 -4.630603e+04 -1.238905e-08 1.462908e-02 -8.857386e-08 -1.707803e-05 1.899661e-10 -3.346191e-05 357 7.600000e-06 8.400000e-07 2.247535e+01 1.000000e+14 9.344539e+06 3.140252e+07 2.628839e-02 -4.568725e+04 -3.773947e-09 1.462906e-02 -8.582857e-08 -1.912562e-05 4.418734e-11 -3.162895e-05 358 8.000000e-06 8.400000e-07 2.429046e+01 1.000000e+14 1.029344e+07 2.974770e+07 8.013075e-03 -4.506855e+04 -1.148516e-09 1.462905e-02 -8.196606e-08 -2.116224e-05 2.901611e-12 -2.979615e-05 359 8.400000e-06 8.400000e-07 2.608083e+01 1.000000e+14 1.123799e+07 2.808231e+07 2.441417e-03 -4.444988e+04 -3.505623e-10 1.462905e-02 -7.741867e-08 -2.318651e-05 -8.084357e-12 -2.796335e-05 360 8.800000e-06 8.400000e-07 2.784645e+01 1.000000e+14 1.217816e+07 2.640583e+07 7.427502e-04 -4.383122e+04 -1.095069e-10 1.462905e-02 -7.250389e-08 -2.519782e-05 -1.034358e-11 -2.613051e-05 361 9.200000e-06 8.400000e-07 2.958733e+01 1.000000e+14 1.311410e+07 2.471776e+07 2.247025e-04 -4.321257e+04 -2.582460e-11 1.462905e-02 -6.745234e-08 -2.719610e-05 -1.013302e-11 -2.429761e-05 362 9.600000e-06 8.400000e-07 3.130346e+01 1.000000e+14 1.404610e+07 2.301761e+07 6.598113e-05 -4.259391e+04 2.580379e-12 1.462905e-02 -6.242749e-08 -2.918164e-05 -9.261822e-12 -2.246464e-05 363 1.000000e-05 8.400000e-07 3.299484e+01 1.000000e+14 1.566566e+07 2.130484e+07 1.476567e-05 -4.197526e+04 7.236097e-12 1.462905e-02 -5.418883e-08 -3.115089e-05 -8.251647e-12 -2.063164e-05 364 1.100000e-05 8.400000e-07 3.711503e+01 1.000000e+14 1.796320e+07 1.827557e+07 1.069577e-07 -4.042862e+04 3.905042e-12 1.462905e-02 -4.402842e-08 -3.601877e-05 -6.631794e-12 -1.604904e-05 365 1.200000e-05 8.400000e-07 4.108056e+01 1.000021e+14 2.025386e+07 1.387165e+07 -9.034433e-07 -3.888196e+04 5.465090e-12 1.462905e-02 -3.552053e-08 -4.083174e-05 -4.710780e-12 -1.146614e-05 366 1.300000e-05 8.400000e-07 4.489143e+01 1.006775e+14 2.254646e+07 9.367788e+06 -8.031016e-07 -3.733006e+04 3.795819e-12 1.462905e-02 -2.851924e-08 -4.559983e-05 -3.017594e-12 -6.882766e-06 367 1.400000e-05 8.400000e-07 4.854658e+01 1.995920e+14 2.502417e+07 4.751710e+06 -6.182228e-07 -3.500802e+04 -9.978590e-12 1.462905e-02 -2.262550e-08 -5.033435e-05 -1.477415e-12 -2.295488e-06 368 1.500000e-05 8.400000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -8.710987e-08 -1.722106e+04 7.146080e-12 7.289635e-03 -6.925476e-08 7.265299e-03 -1.586734e-22 -1.480064e-11 369 1.600000e-05 8.400000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -1.102657e-09 -7.658844e+02 -5.623064e-12 -2.489274e-05 -1.800595e-08 1.456842e-02 -1.700790e-23 -2.217676e-12 370 1.700000e-05 8.400000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 -4.569047e-12 -3.081445e-09 6.050517e-26 1.455353e-02 -3.349215e-25 -8.471232e-13 371 1.800000e-05 8.400000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.411068e-10 -9.254514e-11 1.455353e-02 -9.881906e-27 -1.229923e-13 372 1.900000e-05 8.400000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -1.523016e-12 -3.753231e-11 0.000000e+00 1.455353e-02 4.130085e-28 -3.501951e-15 373 2.000000e-05 8.400000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.104064e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 374 0.000000e+00 9.200000e-07 -5.250299e-01 -9.999990e+19 2.333911e+02 9.999990e+19 -0.000000e+00 -6.991959e+01 -0.000000e+00 1.022959e-10 0.000000e+00 -4.132947e-14 0.000000e+00 4.206828e-02 375 5.000000e-07 9.200000e-07 -5.215339e-01 -8.057897e+19 2.408591e+02 8.057895e+19 4.343548e-07 -1.398630e+02 1.435220e-10 7.504005e-10 2.265326e-13 -8.546817e-14 -2.719202e-05 4.198456e-02 376 1.000000e-06 9.200000e-07 -5.110436e-01 -4.215878e+19 2.654178e+02 4.215876e+19 1.549141e-06 -2.798526e+02 1.339806e-09 9.750860e-09 5.157445e-13 -4.205339e-13 -8.703079e-05 4.163274e-02 377 1.500000e-06 9.200000e-07 -4.935486e-01 -1.432179e+19 2.486810e+02 1.432177e+19 1.361069e-05 -4.203246e+02 1.234958e-08 1.279412e-07 9.752497e-13 -1.357411e-12 -2.167430e-04 4.068742e-02 378 2.000000e-06 9.200000e-07 -4.690111e-01 -3.158947e+18 1.143355e+02 3.158928e+18 2.922743e-04 -5.637248e+02 4.918621e-08 1.029942e-06 8.987818e-13 -2.080079e-12 -2.626165e-04 3.918074e-02 379 2.500000e-06 9.200000e-07 -4.371762e-01 -4.523352e+17 1.947775e+01 4.522840e+17 1.857055e-02 -8.348172e+02 -2.303329e-06 -1.725474e-05 4.164215e-13 -1.878022e-12 5.580479e-05 3.868448e-02 380 3.000000e-06 9.200000e-07 -3.855294e-01 -4.197278e+16 1.551826e+00 3.548374e+16 2.304505e+01 -2.600577e+04 1.904394e-04 8.225967e-03 8.013409e-14 -2.466745e-12 -3.662959e-03 1.944525e-02 381 3.500000e-06 9.200000e-07 2.163401e+00 -2.440333e+15 4.970774e+05 1.196014e+08 2.231674e+03 -5.336503e+04 -1.986155e-04 1.586014e-02 2.047819e-07 -5.400594e-07 1.079010e-05 -9.688160e-05 382 4.000000e-06 9.200000e-07 4.950973e+00 4.080051e+11 1.097654e+06 6.107769e+07 6.302632e+02 -5.380284e+04 -7.558115e-05 1.499710e-02 1.351888e-07 -1.802771e-06 2.404719e-06 -5.822355e-05 383 4.400000e-06 9.200000e-07 7.040732e+00 9.453171e+13 1.821101e+06 4.806089e+07 1.899374e+02 -5.148443e+04 -2.517903e-05 1.474704e-02 5.457249e-08 -3.163305e-06 6.369625e-07 -4.907225e-05 384 4.800000e-06 9.200000e-07 9.069728e+00 9.977226e+13 2.658851e+06 4.378604e+07 5.669263e+01 -5.027692e+04 -7.867339e-06 1.466555e-02 5.349068e-09 -4.851206e-06 1.780998e-07 -4.524830e-05 385 5.200000e-06 9.200000e-07 1.106289e+01 9.999281e+13 3.556385e+06 4.143764e+07 1.707177e+01 -4.947766e+04 -2.417399e-06 1.464023e-02 -2.029192e-08 -6.726051e-06 5.121335e-08 -4.285320e-05 386 5.600000e-06 9.200000e-07 1.302794e+01 9.999983e+13 4.484749e+06 3.962003e+07 5.174878e+00 -4.880433e+04 -7.390606e-07 1.463246e-02 -3.337796e-08 -8.697075e-06 1.488062e-08 -4.085835e-05 387 6.000000e-06 9.200000e-07 1.496723e+01 1.000000e+14 5.429266e+06 3.794898e+07 1.573813e+00 -4.816908e+04 -2.255626e-07 1.463009e-02 -4.009710e-08 -1.071671e-05 4.331450e-09 -3.897862e-05 388 6.400000e-06 9.200000e-07 1.688147e+01 1.000000e+14 6.382053e+06 3.631430e+07 4.793338e-01 -4.754537e+04 -6.880044e-08 1.462937e-02 -4.337280e-08 -1.276028e-05 1.255666e-09 -3.713234e-05 389 6.800000e-06 9.200000e-07 1.877086e+01 1.000000e+14 7.338429e+06 3.468370e+07 1.460793e-01 -4.692518e+04 -2.097131e-08 1.462915e-02 -4.457008e-08 -1.481401e-05 3.589153e-10 -3.529578e-05 390 7.200000e-06 9.200000e-07 2.063548e+01 1.000000e+14 8.295377e+06 3.304750e+07 4.452911e-02 -4.630605e+04 -6.387956e-09 1.462908e-02 -4.439640e-08 -1.686939e-05 9.816947e-11 -3.346201e-05 391 7.600000e-06 9.200000e-07 2.247535e+01 1.000000e+14 9.250895e+06 3.140258e+07 1.357451e-02 -4.568725e+04 -1.942547e-09 1.462906e-02 -4.328502e-08 -1.892083e-05 2.287370e-11 -3.162901e-05 392 8.000000e-06 9.200000e-07 2.429046e+01 1.000000e+14 1.020368e+07 2.974775e+07 4.137696e-03 -4.506855e+04 -5.871233e-10 1.462905e-02 -4.153996e-08 -2.096460e-05 1.540186e-12 -2.979620e-05 393 8.400000e-06 9.200000e-07 2.608083e+01 1.000000e+14 1.115296e+07 2.808235e+07 1.260671e-03 -4.444988e+04 -1.886201e-10 1.462905e-02 -3.938847e-08 -2.299827e-05 -4.143826e-12 -2.796339e-05 394 8.800000e-06 9.200000e-07 2.784645e+01 1.000000e+14 1.209832e+07 2.640586e+07 3.835350e-04 -4.383122e+04 -5.127179e-11 1.462905e-02 -3.700215e-08 -2.502039e-05 -5.318834e-12 -2.613054e-05 395 9.200000e-06 9.200000e-07 2.958733e+01 1.000000e+14 1.303967e+07 2.471779e+07 1.160315e-04 -4.321257e+04 -1.793247e-11 1.462905e-02 -3.450851e-08 -2.703022e-05 -5.216414e-12 -2.429764e-05 396 9.600000e-06 9.200000e-07 3.130346e+01 1.000000e+14 1.397711e+07 2.301764e+07 3.407246e-05 -4.259391e+04 -7.894194e-12 1.462905e-02 -3.199978e-08 -2.902755e-05 -4.771288e-12 -2.246467e-05 397 1.000000e-05 9.200000e-07 3.299484e+01 1.000000e+14 1.560566e+07 2.130487e+07 7.625238e-06 -4.197526e+04 2.457271e-12 1.462905e-02 -2.783861e-08 -3.100827e-05 -4.253252e-12 -2.063166e-05 398 1.100000e-05 9.200000e-07 3.711503e+01 1.000000e+14 1.791438e+07 1.827559e+07 5.586793e-08 -4.042862e+04 1.864276e-12 1.462905e-02 -2.266153e-08 -3.590220e-05 -3.420142e-12 -1.604906e-05 399 1.200000e-05 9.200000e-07 4.108056e+01 1.000021e+14 2.021443e+07 1.387167e+07 -4.664237e-07 -3.888196e+04 1.200271e-12 1.462905e-02 -1.830421e-08 -4.073744e-05 -2.430333e-12 -1.146615e-05 400 1.300000e-05 9.200000e-07 4.489143e+01 1.006775e+14 2.251478e+07 9.367797e+06 -4.145989e-07 -3.733006e+04 7.359601e-12 1.462905e-02 -1.470738e-08 -4.552404e-05 -1.557148e-12 -6.882773e-06 401 1.400000e-05 9.200000e-07 4.854658e+01 1.995920e+14 2.499854e+07 4.751714e+06 -3.194029e-07 -3.500802e+04 7.731097e-12 1.462905e-02 -1.167348e-08 -5.027366e-05 -7.624712e-13 -2.295490e-06 402 1.500000e-05 9.200000e-07 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 -4.520892e-08 -1.722106e+04 -8.084078e-12 7.289635e-03 -3.593768e-08 7.265332e-03 -8.244433e-23 -1.480064e-11 403 1.600000e-05 9.200000e-07 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 -7.351044e-10 -7.658844e+02 0.000000e+00 -2.489273e-05 -1.201405e-08 1.456842e-02 -9.041717e-24 -2.217676e-12 404 1.700000e-05 9.200000e-07 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 -0.000000e+00 -4.137333e+02 1.523016e-12 -3.080508e-09 1.771020e-11 1.455353e-02 -1.721780e-25 -8.471232e-13 405 1.800000e-05 9.200000e-07 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 -0.000000e+00 -2.171189e+02 -0.000000e+00 -1.412287e-10 0.000000e+00 1.455353e-02 -4.726129e-27 -1.229923e-13 406 1.900000e-05 9.200000e-07 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 -0.000000e+00 -1.072354e+02 -0.000000e+00 -3.753231e-11 0.000000e+00 1.455353e-02 0.000000e+00 -3.501951e-15 407 2.000000e-05 9.200000e-07 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.104064e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 408 0.000000e+00 1.000000e-06 -5.250299e-01 -9.999990e+19 2.333911e+02 9.999990e+19 -0.000000e+00 -6.991959e+01 -0.000000e+00 1.139710e-10 0.000000e+00 -2.753929e-14 0.000000e+00 4.206582e-02 409 5.000000e-07 1.000000e-06 -5.215339e-01 -8.057897e+19 2.427212e+02 8.057895e+19 0.000000e+00 -1.398630e+02 0.000000e+00 8.052368e-10 0.000000e+00 -7.012454e-14 0.000000e+00 4.197940e-02 410 1.000000e-06 1.000000e-06 -5.110436e-01 -4.215878e+19 2.699822e+02 4.215876e+19 0.000000e+00 -2.798526e+02 0.000000e+00 1.023828e-08 0.000000e+00 -4.038166e-13 0.000000e+00 4.161738e-02 411 1.500000e-06 1.000000e-06 -4.935486e-01 -1.432179e+19 2.570061e+02 1.432177e+19 0.000000e+00 -4.203246e+02 0.000000e+00 1.296100e-07 0.000000e+00 -1.376212e-12 0.000000e+00 4.066418e-02 412 2.000000e-06 1.000000e-06 -4.690111e-01 -3.158947e+18 1.197858e+02 3.158928e+18 0.000000e+00 -5.637247e+02 0.000000e+00 9.375010e-07 0.000000e+00 -2.157475e-12 0.000000e+00 3.917317e-02 413 2.500000e-06 1.000000e-06 -4.371762e-01 -4.523352e+17 2.057903e+01 4.522841e+17 0.000000e+00 -8.344800e+02 0.000000e+00 -1.501526e-05 0.000000e+00 -1.973161e-12 0.000000e+00 3.836783e-02 414 3.000000e-06 1.000000e-06 -3.855631e-01 -4.197278e+16 1.635013e+00 3.553003e+16 0.000000e+00 -2.591747e+04 0.000000e+00 8.218210e-03 0.000000e+00 -2.600587e-12 0.000000e+00 1.911453e-02 415 3.500000e-06 1.000000e-06 2.154571e+00 -2.440333e+15 4.921786e+05 1.382106e+08 0.000000e+00 -5.333987e+04 0.000000e+00 1.585486e-02 0.000000e+00 -5.347781e-07 0.000000e+00 -1.073602e-04 416 4.000000e-06 1.000000e-06 4.948424e+00 4.080051e+11 1.088916e+06 6.223705e+07 0.000000e+00 -5.388336e+04 0.000000e+00 1.500418e-02 0.000000e+00 -1.787588e-06 0.000000e+00 -5.891041e-05 417 4.400000e-06 1.000000e-06 7.039960e+00 9.453171e+13 1.807157e+06 4.823276e+07 0.000000e+00 -5.151342e+04 0.000000e+00 1.475044e-02 0.000000e+00 -3.138780e-06 0.000000e+00 -4.919280e-05 418 4.800000e-06 1.000000e-06 9.069497e+00 9.977226e+13 2.639878e+06 4.382574e+07 0.000000e+00 -5.028571e+04 0.000000e+00 1.466670e-02 0.000000e+00 -4.815592e-06 0.000000e+00 -4.527715e-05 419 5.200000e-06 1.000000e-06 1.106282e+01 9.999281e+13 3.532929e+06 4.144826e+07 0.000000e+00 -4.948028e+04 0.000000e+00 1.464059e-02 0.000000e+00 -6.680148e-06 0.000000e+00 -4.286103e-05 420 5.600000e-06 1.000000e-06 1.302792e+01 9.999983e+13 4.457601e+06 3.962306e+07 0.000000e+00 -4.880512e+04 0.000000e+00 1.463257e-02 0.000000e+00 -8.642347e-06 0.000000e+00 -4.086059e-05 421 6.000000e-06 1.000000e-06 1.496723e+01 1.000000e+14 5.399412e+06 3.794987e+07 0.000000e+00 -4.816932e+04 0.000000e+00 1.463012e-02 0.000000e+00 -1.065509e-05 0.000000e+00 -3.897928e-05 422 6.400000e-06 1.000000e-06 1.688147e+01 1.000000e+14 6.350533e+06 3.631457e+07 0.000000e+00 -4.754544e+04 0.000000e+00 1.462938e-02 0.000000e+00 -1.269398e-05 0.000000e+00 -3.713255e-05 423 6.800000e-06 1.000000e-06 1.877086e+01 1.000000e+14 7.306206e+06 3.468379e+07 0.000000e+00 -4.692520e+04 0.000000e+00 1.462915e-02 0.000000e+00 -1.474519e-05 0.000000e+00 -3.529585e-05 424 7.200000e-06 1.000000e-06 2.063548e+01 1.000000e+14 8.263263e+06 3.304754e+07 0.000000e+00 -4.630606e+04 0.000000e+00 1.462908e-02 0.000000e+00 -1.679997e-05 0.000000e+00 -3.346204e-05 425 7.600000e-06 1.000000e-06 2.247535e+01 1.000000e+14 9.219522e+06 3.140261e+07 0.000000e+00 -4.568726e+04 0.000000e+00 1.462906e-02 0.000000e+00 -1.885237e-05 0.000000e+00 -3.162903e-05 426 8.000000e-06 1.000000e-06 2.429046e+01 1.000000e+14 1.017351e+07 2.974777e+07 0.000000e+00 -4.506855e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.089828e-05 0.000000e+00 -2.979621e-05 427 8.400000e-06 1.000000e-06 2.608083e+01 1.000000e+14 1.112429e+07 2.808236e+07 0.000000e+00 -4.444988e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.293491e-05 0.000000e+00 -2.796340e-05 428 8.800000e-06 1.000000e-06 2.784645e+01 1.000000e+14 1.207135e+07 2.640587e+07 0.000000e+00 -4.383122e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.496053e-05 0.000000e+00 -2.613055e-05 429 9.200000e-06 1.000000e-06 2.958733e+01 1.000000e+14 1.301449e+07 2.471780e+07 0.000000e+00 -4.321257e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.697414e-05 0.000000e+00 -2.429765e-05 430 9.600000e-06 1.000000e-06 3.130346e+01 1.000000e+14 1.395373e+07 2.301765e+07 0.000000e+00 -4.259391e+04 0.000000e+00 1.462905e-02 0.000000e+00 -2.897538e-05 0.000000e+00 -2.246468e-05 431 1.000000e-05 1.000000e-06 3.299484e+01 1.000000e+14 1.558531e+07 2.130488e+07 0.000000e+00 -4.197526e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.095993e-05 0.000000e+00 -2.063167e-05 432 1.100000e-05 1.000000e-06 3.711503e+01 1.000000e+14 1.789779e+07 1.827560e+07 0.000000e+00 -4.042862e+04 0.000000e+00 1.462905e-02 0.000000e+00 -3.586262e-05 0.000000e+00 -1.604906e-05 433 1.200000e-05 1.000000e-06 4.108056e+01 1.000021e+14 2.020102e+07 1.387167e+07 0.000000e+00 -3.888196e+04 0.000000e+00 1.462905e-02 0.000000e+00 -4.070538e-05 0.000000e+00 -1.146616e-05 434 1.300000e-05 1.000000e-06 4.489143e+01 1.006775e+14 2.250400e+07 9.367800e+06 0.000000e+00 -3.733006e+04 0.000000e+00 1.462905e-02 0.000000e+00 -4.549827e-05 0.000000e+00 -6.882775e-06 435 1.400000e-05 1.000000e-06 4.854658e+01 1.995920e+14 2.498982e+07 4.751716e+06 0.000000e+00 -3.500802e+04 0.000000e+00 1.462905e-02 0.000000e+00 -5.025301e-05 0.000000e+00 -2.295491e-06 436 1.500000e-05 1.000000e-06 5.189303e+01 6.893605e+15 4.793119e+15 2.840055e+01 0.000000e+00 -1.722106e+04 0.000000e+00 7.289635e-03 0.000000e+00 7.265343e-03 0.000000e+00 -1.480064e-11 437 1.600000e-05 1.000000e-06 5.199079e+01 2.151523e+17 2.151250e+17 4.238158e+01 0.000000e+00 -7.658844e+02 0.000000e+00 -2.489274e-05 0.000000e+00 1.456843e-02 0.000000e+00 -2.217676e-12 438 1.700000e-05 1.000000e-06 5.204621e+01 3.159147e+18 3.159129e+18 8.411968e+01 0.000000e+00 -4.137333e+02 0.000000e+00 -3.081445e-09 0.000000e+00 1.455353e-02 0.000000e+00 -8.471232e-13 439 1.800000e-05 1.000000e-06 5.207354e+01 2.153466e+19 2.153465e+19 1.063321e+02 0.000000e+00 -2.171189e+02 0.000000e+00 -1.412287e-10 0.000000e+00 1.455353e-02 0.000000e+00 -1.229923e-13 440 1.900000e-05 1.000000e-06 5.208963e+01 6.812157e+19 6.812156e+19 9.809552e+01 0.000000e+00 -1.072354e+02 0.000000e+00 -3.753231e-11 0.000000e+00 1.455353e-02 0.000000e+00 -3.501951e-15 441 2.000000e-05 1.000000e-06 5.209498e+01 1.000001e+20 1.000001e+20 9.521644e+01 -0.000000e+00 -5.351207e+01 -0.000000e+00 -2.104064e-11 0.000000e+00 1.455351e-02 0.000000e+00 -6.633103e-17 tmp_ns50wwy/examples/cider/cider-gnuplot/DC.12.qj1.ascii0000644000175000017500000056320414163340332023056 0ustar carstencarstenTitle: Device qj1 external state Plotname: Device Operating Point Command: deftype v conductance S Flags: real No. Variables: 10 No. Points: 1 Variables: 0 sweep unknown 1 v13 voltage 2 v23 voltage 3 i1 current 4 i2 current 5 i3 current 6 g22 conductance 7 g21 conductance 8 g12 conductance 9 g11 conductance Values: 0 -1.200000e+00 5.000000e-01 -1.200000e+00 9.820897e-08 -9.629301e-14 -9.820888e-08 -3.439942e-06 -8.515791e-07 1.719971e-06 4.257880e-07 Title: Device qj1 internal state Plotname: Device Cross Section Flags: real Command: deftype p xs cross Command: deftype v distance m Command: deftype v concentration cm^-3 Command: deftype v electric_field V/cm Command: deftype v current_density A/cm^2 Command: deftype v concentration/time cm^-3/s Command: deftype v mobility cm^2/Vs No. Variables: 18 No. Points: 720 Dimensions: 45,16 Variables: 0 y distance 1 x distance 2 psi voltage 3 equ.psi voltage 4 vac.psi voltage 5 phin voltage 6 phip voltage 7 dop concentration 8 n concentration 9 p concentration 10 ex electric_field 11 ey electric_field 12 jdx current_density 13 jdy current_density 14 jnx current_density 15 jny current_density 16 jpx current_density 17 jpy current_density Values: 0 0.000000e+00 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 1.019801e+05 -0.000000e+00 0.000000e+00 0.000000e+00 4.069339e-10 0.000000e+00 5.392944e-08 0.000000e+00 1 9.043580e-08 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 9.838393e+04 -0.000000e+00 0.000000e+00 0.000000e+00 4.380061e-10 0.000000e+00 5.363515e-08 0.000000e+00 2 1.425859e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 9.209571e+04 -0.000000e+00 0.000000e+00 0.000000e+00 4.958172e-10 0.000000e+00 5.307435e-08 0.000000e+00 3 1.726585e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 8.696810e+04 -0.000000e+00 0.000000e+00 0.000000e+00 5.405763e-10 0.000000e+00 5.256734e-08 0.000000e+00 4 1.899999e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 8.358962e+04 -0.000000e+00 0.000000e+00 0.000000e+00 5.724452e-10 0.000000e+00 5.220531e-08 0.000000e+00 5 2.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 8.152807e+04 -0.000000e+00 0.000000e+00 0.000000e+00 5.948285e-10 0.000000e+00 5.197232e-08 0.000000e+00 6 2.100000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 7.939709e+04 -0.000000e+00 0.000000e+00 0.000000e+00 6.218238e-10 0.000000e+00 5.172112e-08 0.000000e+00 7 2.354138e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 7.373369e+04 -0.000000e+00 0.000000e+00 0.000000e+00 7.143846e-10 0.000000e+00 5.099682e-08 0.000000e+00 8 3.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 5.884684e+04 -0.000000e+00 0.000000e+00 0.000000e+00 1.213182e-09 0.000000e+00 4.858383e-08 0.000000e+00 9 4.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 3.957350e+04 -0.000000e+00 0.000000e+00 0.000000e+00 4.056366e-07 0.000000e+00 4.360669e-08 0.000000e+00 10 5.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 2.580821e+04 -0.000000e+00 0.000000e+00 0.000000e+00 1.089452e-04 0.000000e+00 3.737261e-08 0.000000e+00 11 6.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 1.630411e+04 -0.000000e+00 0.000000e+00 0.000000e+00 7.279410e-03 0.000000e+00 3.016879e-08 0.000000e+00 12 7.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 9.938473e+03 -0.000000e+00 0.000000e+00 0.000000e+00 1.622113e-01 0.000000e+00 2.275017e-08 0.000000e+00 13 8.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 5.981610e+03 -0.000000e+00 0.000000e+00 0.000000e+00 1.369520e+00 0.000000e+00 1.652854e-08 0.000000e+00 14 9.000000e-07 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 3.905070e+03 -0.000000e+00 0.000000e+00 0.000000e+00 4.729497e+00 0.000000e+00 1.268361e-08 0.000000e+00 15 1.000000e-06 0.000000e+00 8.225952e-01 3.225952e-01 -3.790354e+00 5.000000e-01 5.000000e-01 3.000000e+15 3.000000e+15 4.400555e+04 3.274589e+03 -0.000000e+00 0.000000e+00 0.000000e+00 7.104556e+00 0.000000e+00 1.143985e-08 0.000000e+00 16 0.000000e+00 8.595725e-08 -5.399763e-02 5.728205e-02 -4.666947e+00 4.093237e-01 -3.693350e-01 3.000000e+15 1.907771e+02 5.826062e+04 1.072231e+05 0.000000e+00 0.000000e+00 0.000000e+00 3.180209e-10 0.000000e+00 6.555051e-08 0.000000e+00 17 9.043580e-08 8.595725e-08 -2.308602e-02 6.623508e-02 -4.636035e+00 4.367636e-01 -3.403614e-01 3.000000e+15 2.181829e+02 5.405482e+04 1.045658e+05 -7.823972e+03 0.000000e+00 0.000000e+00 3.431559e-10 -2.353538e-10 6.201258e-08 -2.061177e-08 18 1.425859e-07 8.595725e-08 3.096575e-02 8.396644e-02 -4.581983e+00 4.765528e-01 -2.887268e-01 3.000000e+15 3.787111e+02 4.923188e+04 9.857657e+04 -1.308671e+04 0.000000e+00 0.000000e+00 3.904628e-10 -3.610966e-10 5.770701e-08 -2.825777e-08 19 1.726585e-07 8.595725e-08 7.504128e-02 9.983210e-02 -4.537908e+00 4.933545e-01 -2.460447e-01 3.000000e+15 1.087107e+03 4.664976e+04 9.275109e+04 -1.598194e+04 0.000000e+00 0.000000e+00 4.288636e-10 -4.277072e-10 5.516038e-08 -3.064316e-08 20 1.899999e-07 8.595725e-08 1.040818e-01 1.107798e-01 -4.508867e+00 4.975114e-01 -2.177046e-01 3.000000e+15 2.845134e+03 4.540331e+04 8.864589e+04 -1.736407e+04 0.000000e+00 0.000000e+00 4.580181e-10 -4.642881e-10 5.379511e-08 -3.140482e-08 21 2.000000e-07 8.595725e-08 1.218023e-01 1.176076e-01 -4.491147e+00 4.986663e-01 -2.003428e-01 3.000000e+15 5.398349e+03 4.477801e+04 8.608813e+04 -1.801882e+04 0.000000e+00 0.000000e+00 4.803513e-10 -4.850612e-10 5.305155e-08 -3.166793e-08 22 2.100000e-07 8.595725e-08 1.401196e-01 1.247617e-01 -4.472830e+00 4.993044e-01 -1.823442e-01 3.000000e+15 1.069347e+04 4.422969e+04 8.342527e+04 -1.855396e+04 0.000000e+00 0.000000e+00 5.103441e-10 -5.061769e-10 5.234650e-08 -3.181884e-08 23 2.354138e-07 8.595725e-08 1.888006e-01 1.441513e-01 -4.424149e+00 4.998768e-01 -1.342885e-01 3.000000e+15 6.869524e+04 4.317321e+04 7.635581e+04 -1.934098e+04 0.000000e+00 0.000000e+00 6.052262e-10 -5.614126e-10 5.071793e-08 -3.180081e-08 24 3.000000e-07 8.595725e-08 3.167639e-01 1.963287e-01 -4.296185e+00 4.999985e-01 -7.263973e-03 3.000000e+15 9.628517e+06 4.163419e+04 5.914576e+04 -1.853903e+04 0.000000e+00 0.000000e+00 9.161510e-10 -5.623368e-10 4.697393e-08 -3.007549e-08 25 4.000000e-07 8.595725e-08 4.824322e-01 2.604045e-01 -4.130517e+00 4.999992e-01 1.576785e-01 3.000000e+15 5.825613e+09 4.048213e+04 3.953283e+04 -1.419955e+04 0.000000e+00 0.000000e+00 1.488103e-07 2.981197e-07 4.137492e-08 -2.515890e-08 26 5.000000e-07 8.595725e-08 6.007549e-01 2.973245e-01 -4.012194e+00 4.999976e-01 2.751112e-01 3.000000e+15 5.651524e+11 3.911284e+04 2.622778e+04 -1.000087e+04 0.000000e+00 0.000000e+00 4.093396e-05 7.971882e-05 3.495886e-08 -1.952627e-08 27 6.000000e-07 8.595725e-08 6.824496e-01 3.137977e-01 -3.930500e+00 4.999924e-01 3.555104e-01 3.000000e+15 1.330502e+13 3.720197e+04 1.712998e+04 -6.820595e+03 0.000000e+00 0.000000e+00 3.114813e-03 5.003804e-03 2.790767e-08 -1.406903e-08 28 7.000000e-07 8.595725e-08 7.371668e-01 3.197882e-01 -3.875782e+00 4.999757e-01 4.082204e-01 3.000000e+15 1.104261e+14 3.442410e+04 1.096936e+04 -4.436467e+03 0.000000e+00 0.000000e+00 9.156324e-02 9.203849e-02 2.083909e-08 -9.214326e-09 29 8.000000e-07 8.595725e-08 7.711789e-01 3.217332e-01 -3.841770e+00 4.999314e-01 4.399946e-01 3.000000e+15 4.120268e+14 3.157069e+04 7.007247e+03 -2.593074e+03 0.000000e+00 0.000000e+00 1.074640e+00 5.172821e-01 1.508214e-08 -5.308228e-09 30 9.000000e-07 8.595725e-08 7.890283e-01 3.223184e-01 -3.823921e+00 4.998578e-01 4.562939e-01 3.000000e+15 8.239033e+14 2.973422e+04 4.817354e+03 -1.163441e+03 0.000000e+00 0.000000e+00 4.750817e+00 8.355328e-01 1.160337e-08 -2.368785e-09 31 1.000000e-06 8.595725e-08 7.944477e-01 3.224452e-01 -3.818501e+00 4.998149e-01 4.611598e-01 3.000000e+15 1.017641e+15 2.910458e+04 4.126470e+03 0.000000e+00 0.000000e+00 0.000000e+00 7.801437e+00 0.000000e+00 1.048396e-08 0.000000e+00 32 0.000000e+00 1.352176e-07 -5.969828e-01 -1.175073e-01 -5.209932e+00 -1.219602e-01 -9.076225e-01 3.000000e+15 1.213518e+02 6.986444e+04 1.138611e+05 0.000000e+00 0.000000e+00 0.000000e+00 2.067499e-10 0.000000e+00 8.173611e-08 0.000000e+00 33 9.043580e-08 1.352176e-07 -5.556320e-01 -1.073903e-01 -5.168581e+00 -8.263764e-02 -8.696406e-01 3.000000e+15 1.312509e+02 6.133210e+04 1.131510e+05 -1.173172e+04 0.000000e+00 0.000000e+00 2.189587e-10 -1.897384e-10 7.300654e-08 -2.842912e-08 34 1.425859e-07 1.352176e-07 -4.729211e-01 -8.343345e-02 -5.085870e+00 -3.397266e-03 -7.911839e-01 3.000000e+15 1.500991e+02 5.202986e+04 1.088217e+05 -2.156451e+04 0.000000e+00 0.000000e+00 2.515015e-10 -2.798121e-10 6.310450e-08 -3.764175e-08 35 1.726585e-07 1.352176e-07 -3.981789e-01 -5.785052e-02 -5.011128e+00 6.873695e-02 -7.189489e-01 3.000000e+15 1.660231e+02 4.722320e+04 1.021291e+05 -2.785820e+04 0.000000e+00 0.000000e+00 2.876234e-10 -3.272485e-10 5.761647e-08 -3.976572e-08 36 1.899999e-07 1.352176e-07 -3.468646e-01 -3.859258e-02 -4.959814e+00 1.181494e-01 -6.688551e-01 3.000000e+15 1.786920e+02 4.504636e+04 9.652386e+04 -3.094155e+04 0.000000e+00 0.000000e+00 3.197383e-10 -3.566732e-10 5.488587e-08 -4.008828e-08 37 2.000000e-07 1.352176e-07 -3.151436e-01 -2.618826e-02 -4.928093e+00 1.484293e-01 -6.377272e-01 3.000000e+15 1.889304e+02 4.402535e+04 9.283807e+04 -3.232835e+04 0.000000e+00 0.000000e+00 3.470934e-10 -3.755833e-10 5.348808e-08 -4.004041e-08 38 2.100000e-07 1.352176e-07 -2.822075e-01 -1.299923e-02 -4.895157e+00 1.794468e-01 -6.052765e-01 3.000000e+15 2.034780e+02 4.320676e+04 8.894084e+04 -3.335517e+04 0.000000e+00 0.000000e+00 3.866357e-10 -3.971084e-10 5.224893e-08 -3.986351e-08 39 2.354138e-07 1.352176e-07 -1.947328e-01 2.312717e-02 -4.807682e+00 2.618297e-01 -5.186284e-01 3.000000e+15 2.477512e+02 4.184772e+04 7.874643e+04 -3.428865e+04 0.000000e+00 0.000000e+00 4.785007e-10 -4.536093e-10 4.967499e-08 -3.905220e-08 40 3.000000e-07 1.352176e-07 2.456618e-02 1.153953e-01 -4.588383e+00 4.650000e-01 -3.004597e-01 3.000000e+15 4.622092e+02 4.005830e+04 5.817613e+04 -3.096019e+04 0.000000e+00 0.000000e+00 6.830192e-10 -5.931512e-10 4.474122e-08 -3.587046e-08 41 4.000000e-07 1.352176e-07 2.878071e-01 2.197509e-01 -4.325142e+00 4.999929e-01 -3.823547e-02 3.000000e+15 3.143615e+06 3.851424e+04 3.866526e+04 -2.229027e+04 0.000000e+00 0.000000e+00 1.222256e-09 -1.149576e-10 3.860613e-08 -2.971252e-08 42 5.000000e-07 1.352176e-07 4.703715e-01 2.800158e-01 -4.142578e+00 4.999908e-01 1.429000e-01 3.000000e+15 3.655664e+09 3.644399e+04 2.620219e+04 -1.539641e+04 0.000000e+00 0.000000e+00 8.291169e-07 2.292206e-06 3.203557e-08 -2.310533e-08 43 6.000000e-07 1.352176e-07 5.957353e-01 3.077918e-01 -4.017214e+00 4.999718e-01 2.660200e-01 3.000000e+15 4.659211e+11 3.341579e+04 1.773909e+04 -1.049248e+04 0.000000e+00 0.000000e+00 3.795665e-04 7.122571e-04 2.509237e-08 -1.665358e-08 44 7.000000e-07 1.352176e-07 6.802211e-01 3.179377e-01 -3.932728e+00 4.999166e-01 3.473505e-01 3.000000e+15 1.224249e+13 2.957802e+04 1.193621e+04 -6.901517e+03 0.000000e+00 0.000000e+00 3.432888e-02 3.541778e-02 1.846903e-08 -1.095876e-08 45 8.000000e-07 1.352176e-07 7.337656e-01 3.211855e-01 -3.879184e+00 4.997878e-01 3.974270e-01 3.000000e+15 9.752492e+13 2.586645e+04 8.095089e+03 -4.125065e+03 0.000000e+00 0.000000e+00 7.661473e-01 3.526119e-01 1.328545e-08 -6.405101e-09 46 9.000000e-07 1.352176e-07 7.627224e-01 3.221478e-01 -3.850227e+00 4.995927e-01 4.238139e-01 3.000000e+15 3.010350e+14 2.341987e+04 5.876602e+03 -1.897506e+03 0.000000e+00 0.000000e+00 4.720181e+00 7.228043e-01 1.023392e-08 -2.917007e-09 47 1.000000e-06 1.352176e-07 7.717157e-01 3.223545e-01 -3.841233e+00 4.994830e-01 4.317831e-01 3.000000e+15 4.280235e+14 2.251067e+04 5.151423e+03 0.000000e+00 0.000000e+00 0.000000e+00 8.599715e+00 0.000000e+00 9.249650e-09 0.000000e+00 48 0.000000e+00 1.634476e-07 -9.242916e-01 -2.254584e-01 -5.537241e+00 -4.379048e-01 -1.193512e+00 3.000000e+15 7.820338e+01 3.465359e+05 1.180161e+05 0.000000e+00 0.000000e+00 0.000000e+00 1.262255e-10 0.000000e+00 9.299064e-08 0.000000e+00 49 9.043580e-08 1.634476e-07 -8.832159e-01 -2.172993e-01 -5.496165e+00 -3.978236e-01 -1.179632e+00 3.000000e+15 8.126899e+01 1.210861e+05 1.193091e+05 -1.291412e+04 0.000000e+00 0.000000e+00 1.291000e-10 -1.218128e-10 8.055464e-08 -3.094824e-08 50 1.425859e-07 1.634476e-07 -7.906914e-01 -1.948537e-01 -5.403641e+00 -3.090075e-01 -1.107380e+00 3.000000e+15 9.379807e+01 5.529539e+04 1.179045e+05 -2.639688e+04 0.000000e+00 0.000000e+00 1.540060e-10 -1.800474e-10 6.645029e-08 -4.136574e-08 51 1.726585e-07 1.634476e-07 -6.963004e-01 -1.652773e-01 -5.309250e+00 -2.188855e-01 -1.017003e+00 3.000000e+15 1.106308e+02 4.734647e+04 1.112239e+05 -3.667654e+04 0.000000e+00 0.000000e+00 1.992517e-10 -2.197178e-10 5.865926e-08 -4.363167e-08 52 1.899999e-07 1.634476e-07 -6.274093e-01 -1.396633e-01 -5.240358e+00 -1.534590e-01 -9.497419e-01 3.000000e+15 1.264887e+02 4.445447e+04 1.039192e+05 -4.211365e+04 0.000000e+00 0.000000e+00 2.433000e-10 -2.534589e-10 5.488646e-08 -4.378564e-08 53 2.000000e-07 1.634476e-07 -5.839185e-01 -1.222541e-01 -5.196868e+00 -1.126522e-01 -9.070064e-01 3.000000e+15 1.403201e+02 4.317509e+04 9.861827e+04 -4.446612e+04 0.000000e+00 0.000000e+00 2.811791e-10 -2.789292e-10 5.301367e-08 -4.357085e-08 54 2.100000e-07 1.634476e-07 -5.384766e-01 -1.033614e-01 -5.151426e+00 -7.067890e-02 -8.621317e-01 3.000000e+15 1.604583e+02 4.223867e+04 9.285159e+04 -4.594416e+04 0.000000e+00 0.000000e+00 3.270498e-10 -3.077537e-10 5.143508e-08 -4.319660e-08 55 2.354138e-07 1.634476e-07 -4.184710e-01 -5.147631e-02 -5.031420e+00 4.342447e-02 -7.429826e-01 3.000000e+15 2.015896e+02 4.086276e+04 7.872868e+04 -4.615695e+04 0.000000e+00 0.000000e+00 4.023196e-10 -3.699676e-10 4.837695e-08 -4.186578e-08 56 3.000000e-07 1.634476e-07 -1.378196e-01 6.905852e-02 -4.750769e+00 3.139755e-01 -4.634445e-01 3.000000e+15 2.978973e+02 3.914117e+04 5.617559e+04 -3.887439e+04 0.000000e+00 0.000000e+00 6.128412e-10 -5.078922e-10 4.311400e-08 -3.774264e-08 57 4.000000e-07 1.634476e-07 1.800206e-01 1.962959e-01 -4.432928e+00 4.997511e-01 -1.467972e-01 3.000000e+15 4.915980e+04 3.737693e+04 3.741035e+04 -2.673263e+04 0.000000e+00 0.000000e+00 9.562149e-10 -7.431310e-10 3.683698e-08 -3.092149e-08 58 5.000000e-07 1.634476e-07 3.968330e-01 2.695534e-01 -4.216116e+00 4.999807e-01 6.819863e-02 3.000000e+15 2.129738e+08 3.484187e+04 2.574190e+04 -1.827087e+04 0.000000e+00 0.000000e+00 9.718551e-08 2.996865e-07 3.021930e-08 -2.389850e-08 59 6.000000e-07 1.634476e-07 5.454380e-01 3.040665e-01 -4.067511e+00 4.999403e-01 2.139795e-01 3.000000e+15 6.672399e+10 3.123779e+04 1.779253e+04 -1.245419e+04 0.000000e+00 0.000000e+00 1.174448e-04 2.214468e-04 2.333169e-08 -1.710612e-08 60 7.000000e-07 1.634476e-07 6.459167e-01 3.167954e-01 -3.967032e+00 4.998298e-01 3.106179e-01 3.000000e+15 3.260700e+12 2.692748e+04 1.229368e+04 -8.233306e+03 0.000000e+00 0.000000e+00 1.944334e-02 1.917382e-02 1.699242e-08 -1.121131e-08 61 8.000000e-07 1.634476e-07 7.101041e-01 3.208525e-01 -3.902845e+00 4.995894e-01 3.706942e-01 3.000000e+15 3.936764e+13 2.297026e+04 8.618291e+03 -4.967408e+03 0.000000e+00 0.000000e+00 6.220367e-01 2.651951e-01 1.216836e-08 -6.572703e-09 62 9.000000e-07 1.634476e-07 7.452649e-01 3.220457e-01 -3.867684e+00 4.992446e-01 4.027249e-01 3.000000e+15 1.553554e+14 2.035198e+04 6.464567e+03 -2.310038e+03 0.000000e+00 0.000000e+00 4.659621e+00 6.200088e-01 9.362340e-09 -3.015768e-09 63 1.000000e-06 1.634476e-07 7.563049e-01 3.223007e-01 -3.856644e+00 4.990555e-01 4.124418e-01 3.000000e+15 2.398152e+14 1.933711e+04 5.749941e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.039351e+00 0.000000e+00 8.446457e-09 0.000000e+00 64 0.000000e+00 1.796257e-07 -1.117140e+00 -2.897454e-01 -5.730090e+00 -6.166752e-01 -1.199996e+00 3.000000e+15 4.537637e+01 4.667300e+08 1.203284e+05 0.000000e+00 0.000000e+00 0.000000e+00 6.922939e-11 0.000000e+00 9.952638e-08 0.000000e+00 65 9.043580e-08 1.796257e-07 -1.079265e+00 -2.836951e-01 -5.692214e+00 -5.789646e-01 -1.199983e+00 3.000000e+15 4.566623e+01 1.079670e+08 1.231030e+05 -1.282745e+04 0.000000e+00 0.000000e+00 6.807486e-11 -6.798737e-11 8.530379e-08 -3.128508e-08 66 1.425859e-07 1.796257e-07 -9.863891e-01 -2.652178e-01 -5.599338e+00 -4.914996e-01 -1.199527e+00 3.000000e+15 5.629297e+01 3.029999e+06 1.247020e+05 -2.864635e+04 0.000000e+00 0.000000e+00 9.192523e-11 -1.064437e-10 6.864950e-08 -4.277214e-08 67 1.726585e-07 1.796257e-07 -8.814493e-01 -2.359903e-01 -5.494398e+00 -3.953401e-01 -1.183127e+00 3.000000e+15 7.904716e+01 9.879701e+04 1.189900e+05 -4.264738e+04 0.000000e+00 0.000000e+00 1.527272e-10 -1.499835e-10 5.926902e-08 -4.544257e-08 68 1.899999e-07 1.796257e-07 -7.997408e-01 -2.061862e-01 -5.412690e+00 -3.201140e-01 -1.121080e+00 3.000000e+15 1.015628e+02 4.619472e+04 1.104460e+05 -5.092168e+04 0.000000e+00 0.000000e+00 2.120708e-10 -1.973040e-10 5.476042e-08 -4.564271e-08 69 2.000000e-07 1.796257e-07 -7.466249e-01 -1.843044e-01 -5.359574e+00 -2.714940e-01 -1.069925e+00 3.000000e+15 1.208447e+02 4.282255e+04 1.032895e+05 -5.456300e+04 0.000000e+00 0.000000e+00 2.615939e-10 -2.352307e-10 5.252298e-08 -4.538148e-08 70 2.100000e-07 1.796257e-07 -6.906142e-01 -1.599039e-01 -5.303563e+00 -2.197131e-01 -1.014679e+00 3.000000e+15 1.423148e+02 4.157486e+04 9.493958e+04 -5.633499e+04 0.000000e+00 0.000000e+00 2.982534e-10 -2.713062e-10 5.067023e-08 -4.488484e-08 71 2.354138e-07 1.796257e-07 -5.453505e-01 -9.449706e-02 -5.158300e+00 -7.957907e-02 -8.702567e-01 3.000000e+15 1.735342e+02 4.024420e+04 7.737521e+04 -5.491770e+04 0.000000e+00 0.000000e+00 3.532405e-10 -3.276968e-10 4.735699e-08 -4.317101e-08 72 3.000000e-07 1.796257e-07 -2.274523e-01 4.342960e-02 -4.840401e+00 2.265039e-01 -5.534312e-01 3.000000e+15 2.740188e+02 3.860910e+04 5.435836e+04 -4.354870e+04 0.000000e+00 0.000000e+00 5.750166e-10 -4.551492e-10 4.206955e-08 -3.844027e-08 73 4.000000e-07 1.796257e-07 1.202128e-01 1.831393e-01 -4.492736e+00 4.977213e-01 -2.070836e-01 3.000000e+15 5.265493e+03 3.669169e+04 3.643453e+04 -2.914626e+04 0.000000e+00 0.000000e+00 9.233576e-10 -7.310690e-10 3.576862e-08 -3.125358e-08 74 5.000000e-07 1.796257e-07 3.554730e-01 2.634970e-01 -4.257476e+00 4.999693e-01 2.610165e-02 3.000000e+15 4.305535e+07 3.386312e+04 2.534177e+04 -1.982314e+04 0.000000e+00 0.000000e+00 3.270050e-08 9.669101e-08 2.913575e-08 -2.402838e-08 75 6.000000e-07 1.796257e-07 5.166757e-01 3.018617e-01 -4.096273e+00 4.999062e-01 1.841412e-01 3.000000e+15 2.197338e+10 2.996486e+04 1.773339e+04 -1.352117e+04 0.000000e+00 0.000000e+00 6.323379e-05 1.144367e-04 2.231410e-08 -1.710344e-08 76 7.000000e-07 1.796257e-07 6.258963e-01 3.161175e-01 -3.987053e+00 4.997391e-01 2.891182e-01 3.000000e+15 1.508909e+12 2.543061e+04 1.243329e+04 -8.963314e+03 0.000000e+00 0.000000e+00 1.427559e-02 1.344011e-02 1.613895e-08 -1.116548e-08 77 8.000000e-07 1.796257e-07 6.959420e-01 3.206559e-01 -3.917007e+00 4.993904e-01 3.547053e-01 3.000000e+15 2.294455e+13 2.140382e+04 8.872018e+03 -5.432503e+03 0.000000e+00 0.000000e+00 5.534122e-01 2.235439e-01 1.152634e-08 -6.549082e-09 78 9.000000e-07 1.796257e-07 7.345464e-01 3.219859e-01 -3.878403e+00 4.989071e-01 3.898716e-01 3.000000e+15 1.039956e+14 1.873964e+04 6.773958e+03 -2.539543e+03 0.000000e+00 0.000000e+00 4.616045e+00 5.622685e-01 8.857147e-09 -3.013962e-09 79 1.000000e-06 1.796257e-07 7.467328e-01 3.222694e-01 -3.866216e+00 4.986465e-01 4.005564e-01 3.000000e+15 1.682742e+14 1.768258e+04 6.073776e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.274198e+00 0.000000e+00 7.976201e-09 0.000000e+00 80 0.000000e+00 1.888970e-07 -1.229298e+00 -3.274625e-01 -5.842247e+00 -7.120793e-01 -1.200000e+00 3.000000e+15 2.374184e+01 3.566735e+10 1.215834e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.691603e-11 0.000000e+00 1.031040e-07 0.000000e+00 81 9.043580e-08 1.888970e-07 -1.194418e+00 -3.228898e-01 -5.807367e+00 -6.760691e-01 -1.200000e+00 3.000000e+15 2.272655e+01 9.259639e+09 1.252955e+05 -1.240863e+04 0.000000e+00 0.000000e+00 3.733592e-11 -3.337747e-11 8.816893e-08 -3.094128e-08 82 1.425859e-07 1.888970e-07 -1.103990e+00 -3.079212e-01 -5.716939e+00 -5.957820e-01 -1.199995e+00 3.000000e+15 3.363729e+01 2.807117e+08 1.292208e+05 -2.950102e+04 0.000000e+00 0.000000e+00 5.518780e-11 -6.011083e-11 7.009032e-08 -4.323003e-08 83 1.726585e-07 1.888970e-07 -9.941838e-01 -2.807972e-01 -5.607133e+00 -5.026164e-01 -1.199697e+00 3.000000e+15 6.400834e+01 4.068846e+06 1.248140e+05 -4.625716e+04 0.000000e+00 0.000000e+00 1.315177e-10 -1.124036e-10 5.968568e-08 -4.630074e-08 84 1.899999e-07 1.888970e-07 -9.042238e-01 -2.489142e-01 -5.517173e+00 -4.224699e-01 -1.192193e+00 3.000000e+15 9.354441e+01 1.678509e+05 1.157977e+05 -5.727699e+04 0.000000e+00 0.000000e+00 2.044389e-10 -1.755326e-10 5.471400e-08 -4.662871e-08 85 2.000000e-07 1.888970e-07 -8.438315e-01 -2.233860e-01 -5.456781e+00 -3.680719e-01 -1.161066e+00 3.000000e+15 1.179423e+02 5.414109e+04 1.070671e+05 -6.255462e+04 0.000000e+00 0.000000e+00 2.635099e-10 -2.262473e-10 5.221312e-08 -4.641084e-08 86 2.100000e-07 1.888970e-07 -7.791140e-01 -1.937458e-01 -5.392063e+00 -3.063333e-01 -1.102880e+00 3.000000e+15 1.323401e+02 4.205704e+04 9.547614e+04 -6.450792e+04 0.000000e+00 0.000000e+00 2.769954e-10 -2.641155e-10 5.007839e-08 -4.584011e-08 87 2.354138e-07 1.888970e-07 -6.165287e-01 -1.185502e-01 -5.229478e+00 -1.479333e-01 -9.416734e-01 3.000000e+15 1.555849e+02 3.987484e+04 7.580801e+04 -6.074171e+04 0.000000e+00 0.000000e+00 3.210882e-10 -3.022585e-10 4.666903e-08 -4.380494e-08 88 3.000000e-07 1.888970e-07 -2.772941e-01 2.925345e-02 -4.890243e+00 1.777927e-01 -6.034842e-01 3.000000e+15 2.622981e+02 3.829523e+04 5.306608e+04 -4.619733e+04 0.000000e+00 0.000000e+00 5.549353e-10 -4.232493e-10 4.143571e-08 -3.871542e-08 89 4.000000e-07 1.888970e-07 8.671692e-02 1.757548e-01 -4.526232e+00 4.926343e-01 -2.408742e-01 3.000000e+15 1.755558e+03 3.627597e+04 3.579371e+04 -3.046954e+04 0.000000e+00 0.000000e+00 9.083916e-10 -7.173686e-10 3.513931e-08 -3.132978e-08 90 5.000000e-07 1.888970e-07 3.320967e-01 2.600300e-01 -4.280852e+00 4.999590e-01 2.268873e-03 3.000000e+15 1.744536e+07 3.327067e+04 2.507069e+04 -2.067708e+04 0.000000e+00 0.000000e+00 1.877728e-08 5.124949e-08 2.850364e-08 -2.400169e-08 91 6.000000e-07 1.888970e-07 5.002585e-01 3.005807e-01 -4.112691e+00 4.998772e-01 1.670699e-01 3.000000e+15 1.166049e+10 2.921660e+04 1.767189e+04 -1.411207e+04 0.000000e+00 0.000000e+00 4.533723e-05 7.889212e-05 2.173346e-08 -1.702292e-08 92 7.000000e-07 1.888970e-07 6.143381e-01 3.157223e-01 -3.998611e+00 4.996643e-01 2.766746e-01 3.000000e+15 9.679259e+11 2.457486e+04 1.249272e+04 -9.369759e+03 0.000000e+00 0.000000e+00 1.204780e-02 1.097512e-02 1.565246e-08 -1.108373e-08 93 8.000000e-07 1.888970e-07 6.876537e-01 3.205415e-01 -3.925295e+00 4.992306e-01 3.453393e-01 3.000000e+15 1.675685e+13 2.053031e+04 9.001635e+03 -5.692450e+03 0.000000e+00 0.000000e+00 5.184037e-01 2.025006e-01 1.116169e-08 -6.500858e-09 94 9.000000e-07 1.888970e-07 7.281871e-01 3.219512e-01 -3.884762e+00 4.986418e-01 3.822633e-01 3.000000e+15 8.216519e+13 1.785617e+04 6.939910e+03 -2.668224e+03 0.000000e+00 0.000000e+00 4.589221e+00 5.306992e-01 8.569211e-09 -2.995809e-09 95 1.000000e-06 1.888970e-07 7.410182e-01 3.222512e-01 -3.871931e+00 4.983279e-01 3.934882e-01 3.000000e+15 1.365876e+14 1.678100e+04 6.250154e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.402354e+00 0.000000e+00 7.706987e-09 0.000000e+00 96 0.000000e+00 1.942102e-07 -1.294084e+00 -3.495176e-01 -5.907033e+00 -7.728982e-01 -1.200000e+00 3.000000e+15 2.036612e+01 4.366224e+11 1.222693e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.471901e-11 0.000000e+00 1.050461e-07 0.000000e+00 97 9.043580e-08 1.942102e-07 -1.261323e+00 -3.458416e-01 -5.874272e+00 -7.312846e-01 -1.200000e+00 3.000000e+15 1.446308e+01 1.230287e+11 1.265380e+05 -1.202169e+04 0.000000e+00 0.000000e+00 2.937787e-11 -2.277523e-11 8.984983e-08 -3.049583e-08 98 1.425859e-07 1.942102e-07 -1.173371e+00 -3.332549e-01 -5.786320e+00 -6.531941e-01 -1.200000e+00 3.000000e+15 2.117589e+01 4.103802e+09 1.320208e+05 -2.976707e+04 0.000000e+00 0.000000e+00 3.583910e-11 -3.761528e-11 7.099830e-08 -4.330788e-08 99 1.726585e-07 1.942102e-07 -1.061480e+00 -3.082212e-01 -5.674429e+00 -5.672903e-01 -1.199977e+00 3.000000e+15 5.783652e+01 5.429479e+07 1.287376e+05 -4.827580e+04 0.000000e+00 0.000000e+00 1.227062e-10 -9.443020e-11 5.996091e-08 -4.666564e-08 100 1.899999e-07 1.942102e-07 -9.666942e-01 -2.756153e-01 -5.579643e+00 -4.846865e-01 -1.199202e+00 3.000000e+15 9.263134e+01 1.432826e+06 1.197668e+05 -6.140731e+04 0.000000e+00 0.000000e+00 2.054300e-10 -1.700235e-10 5.472553e-08 -4.710938e-08 101 2.000000e-07 1.942102e-07 -9.013945e-01 -2.475597e-01 -5.514344e+00 -4.261985e-01 -1.191744e+00 3.000000e+15 1.205410e+02 1.530916e+05 1.101224e+05 -6.842244e+04 0.000000e+00 0.000000e+00 2.709429e-10 -2.299681e-10 5.207871e-08 -4.700116e-08 102 2.100000e-07 1.942102e-07 -8.298486e-01 -2.133096e-01 -5.442798e+00 -3.553870e-01 -1.150320e+00 3.000000e+15 1.240123e+02 4.777093e+04 9.511007e+04 -7.060252e+04 0.000000e+00 0.000000e+00 2.580775e-10 -2.652898e-10 4.965097e-08 -4.641965e-08 103 2.354138e-07 1.942102e-07 -6.565134e-01 -1.319372e-01 -5.269462e+00 -1.861090e-01 -9.817956e-01 3.000000e+15 1.450747e+02 3.966320e+04 7.456250e+04 -6.430194e+04 0.000000e+00 0.000000e+00 3.013642e-10 -2.832547e-10 4.623993e-08 -4.411699e-08 104 3.000000e-07 1.942102e-07 -3.052781e-01 2.133732e-02 -4.918227e+00 1.503867e-01 -6.315939e-01 3.000000e+15 2.565014e+02 3.810961e+04 5.224092e+04 -4.768211e+04 0.000000e+00 0.000000e+00 5.442760e-10 -4.052459e-10 4.106148e-08 -3.882910e-08 105 4.000000e-07 1.942102e-07 6.780097e-02 1.715849e-01 -4.545148e+00 4.866129e-01 -2.599691e-01 3.000000e+15 1.066347e+03 3.602589e+04 3.540082e+04 -3.120489e+04 0.000000e+00 0.000000e+00 9.004930e-10 -7.099067e-10 3.477328e-08 -3.133436e-08 106 5.000000e-07 1.942102e-07 3.188197e-01 2.580487e-01 -4.294129e+00 4.999512e-01 -1.128479e-02 3.000000e+15 1.044412e+07 3.291673e+04 2.490232e+04 -2.115395e+04 0.000000e+00 0.000000e+00 1.403638e-08 3.575280e-08 2.813846e-08 -2.395236e-08 107 6.000000e-07 1.942102e-07 4.908799e-01 2.998421e-01 -4.122069e+00 4.998562e-01 1.573003e-01 3.000000e+15 8.120667e+09 2.877824e+04 1.762797e+04 -1.444364e+04 0.000000e+00 0.000000e+00 3.775922e-05 6.390952e-05 2.140179e-08 -1.695106e-08 108 7.000000e-07 1.942102e-07 6.076925e-01 3.154939e-01 -4.005257e+00 4.996110e-01 2.695067e-01 3.000000e+15 7.501521e+11 2.408350e+04 1.252023e+04 -9.598608e+03 0.000000e+00 0.000000e+00 1.096030e-02 9.778107e-03 1.537546e-08 -1.101947e-08 109 8.000000e-07 1.942102e-07 6.828521e-01 3.204754e-01 -3.930097e+00 4.991188e-01 3.399075e-01 3.000000e+15 1.397797e+13 2.003612e+04 9.070718e+03 -5.839132e+03 0.000000e+00 0.000000e+00 4.996691e-01 1.913260e-01 1.095444e-08 -6.462463e-09 110 9.000000e-07 1.942102e-07 7.244752e-01 3.219312e-01 -3.888474e+00 4.984589e-01 3.778249e-01 3.000000e+15 7.168558e+13 1.736164e+04 7.031003e+03 -2.740948e+03 0.000000e+00 0.000000e+00 4.573415e+00 5.132162e-01 8.405296e-09 -2.980104e-09 111 1.000000e-06 1.942102e-07 7.376711e-01 3.222408e-01 -3.875278e+00 4.981093e-01 3.893541e-01 3.000000e+15 1.210258e+14 1.627812e+04 6.347811e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.473625e+00 0.000000e+00 7.553413e-09 0.000000e+00 112 0.000000e+00 1.972551e-07 -1.331372e+00 -3.623945e-01 -5.944321e+00 -8.102556e-01 -1.200000e+00 3.000000e+15 2.042066e+01 1.845974e+12 1.226496e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.549806e-11 0.000000e+00 1.061133e-07 0.000000e+00 113 9.043580e-08 1.972551e-07 -1.299960e+00 -3.592347e-01 -5.912909e+00 -7.679173e-01 -1.200000e+00 3.000000e+15 1.338465e+01 5.479900e+11 1.272406e+05 -1.174668e+04 0.000000e+00 0.000000e+00 2.879151e-11 -2.154284e-11 9.082294e-08 -3.006514e-08 114 1.425859e-07 1.972551e-07 -1.213821e+00 -3.481042e-01 -5.826770e+00 -6.855379e-01 -1.200000e+00 3.000000e+15 1.547865e+01 1.960587e+10 1.336925e+05 -2.982719e+04 0.000000e+00 0.000000e+00 2.788741e-11 -2.922542e-11 7.154803e-08 -4.316633e-08 115 1.726585e-07 1.972551e-07 -1.101042e+00 -3.245927e-01 -5.713991e+00 -6.057436e-01 -1.199995e+00 3.000000e+15 5.541003e+01 2.504710e+08 1.312018e+05 -4.937566e+04 0.000000e+00 0.000000e+00 1.190849e-10 -8.674674e-11 6.013175e-08 -4.669657e-08 116 1.899999e-07 1.972551e-07 -1.003544e+00 -2.918470e-01 -5.616493e+00 -5.217623e-01 -1.199807e+00 3.000000e+15 9.344388e+01 5.818316e+06 1.224388e+05 -6.388699e+04 0.000000e+00 0.000000e+00 2.081504e-10 -1.696041e-10 5.475119e-08 -4.720835e-08 117 2.000000e-07 1.972551e-07 -9.352365e-01 -2.622637e-01 -5.548186e+00 -4.606392e-01 -1.197514e+00 3.000000e+15 1.233635e+02 4.532311e+05 1.124611e+05 -7.240041e+04 0.000000e+00 0.000000e+00 2.775176e-10 -2.349817e-10 5.207147e-08 -4.728229e-08 118 2.100000e-07 1.972551e-07 -8.587426e-01 -2.244207e-01 -5.471692e+00 -3.829069e-01 -1.172477e+00 3.000000e+15 1.175960e+02 6.198625e+04 9.446497e+04 -7.485467e+04 0.000000e+00 0.000000e+00 2.431249e-10 -2.669500e-10 4.935951e-08 -4.678802e-08 119 2.354138e-07 1.972551e-07 -6.790959e-01 -1.394338e-01 -5.292045e+00 -2.076326e-01 -1.004454e+00 3.000000e+15 1.392554e+02 3.954755e+04 7.371981e+04 -6.637927e+04 0.000000e+00 0.000000e+00 2.899494e-10 -2.698494e-10 4.598308e-08 -4.427330e-08 120 3.000000e-07 1.972551e-07 -3.211102e-01 1.687634e-02 -4.934059e+00 1.348603e-01 -6.475004e-01 3.000000e+15 2.534878e+02 3.800004e+04 5.174051e+04 -4.851681e+04 0.000000e+00 0.000000e+00 5.384939e-10 -3.954007e-10 4.084356e-08 -3.887836e-08 121 4.000000e-07 1.972551e-07 5.705691e-02 1.692174e-01 -4.555892e+00 4.817906e-01 -2.708201e-01 3.000000e+15 8.481327e+02 3.587714e+04 3.516753e+04 -3.161812e+04 0.000000e+00 0.000000e+00 8.961386e-10 -7.058946e-10 3.456181e-08 -3.132317e-08 122 5.000000e-07 1.972551e-07 3.112523e-01 2.569160e-01 -4.301697e+00 4.999459e-01 -1.901682e-02 3.000000e+15 7.796421e+06 3.270785e+04 2.480170e+04 -2.142298e+04 0.000000e+00 0.000000e+00 1.199370e-08 2.911204e-08 2.792837e-08 -2.391236e-08 123 6.000000e-07 1.972551e-07 4.855165e-01 2.994175e-01 -4.127433e+00 4.998423e-01 1.517065e-01 3.000000e+15 6.603377e+09 2.852294e+04 1.760003e+04 -1.463129e+04 0.000000e+00 0.000000e+00 3.409098e-05 5.669384e-05 2.121209e-08 -1.690128e-08 124 7.000000e-07 1.972551e-07 6.038781e-01 3.153624e-01 -4.009071e+00 4.995763e-01 2.653872e-01 3.000000e+15 6.481593e+11 2.380114e+04 1.253388e+04 -9.728389e+03 0.000000e+00 0.000000e+00 1.039117e-02 9.154223e-03 1.521750e-08 -1.097699e-08 125 8.000000e-07 1.972551e-07 6.800843e-01 3.204374e-01 -3.932865e+00 4.990469e-01 3.367738e-01 3.000000e+15 1.259438e+13 1.975466e+04 9.108607e+03 -5.922421e+03 0.000000e+00 0.000000e+00 4.893499e-01 1.852015e-01 1.083635e-08 -6.437011e-09 126 9.000000e-07 1.972551e-07 7.223265e-01 3.219197e-01 -3.890623e+00 4.983422e-01 3.752560e-01 3.000000e+15 6.626929e+13 1.708178e+04 7.081851e+03 -2.782275e+03 0.000000e+00 0.000000e+00 4.564244e+00 5.034092e-01 8.311823e-09 -2.969411e-09 127 1.000000e-06 1.972551e-07 7.357298e-01 3.222348e-01 -3.877219e+00 4.979704e-01 3.869577e-01 3.000000e+15 1.128794e+14 1.599415e+04 6.402592e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.513751e+00 0.000000e+00 7.465746e-09 0.000000e+00 128 0.000000e+00 1.990001e-07 -1.352793e+00 -3.698870e-01 -5.965742e+00 -8.319313e-01 -1.200000e+00 3.000000e+15 2.062311e+01 4.225776e+12 1.228629e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.602333e-11 0.000000e+00 1.067016e-07 0.000000e+00 129 9.043580e-08 1.990001e-07 -1.322198e+00 -3.670198e-01 -5.935147e+00 -7.897959e-01 -1.200000e+00 3.000000e+15 1.320000e+01 1.294722e+12 1.276392e+05 -1.157064e+04 0.000000e+00 0.000000e+00 2.884640e-11 -1.939895e-11 9.138072e-08 -2.931677e-08 130 1.425859e-07 1.990001e-07 -1.237234e+00 -3.567432e-01 -5.850184e+00 -7.051174e-01 -1.200000e+00 3.000000e+15 1.334609e+01 4.847643e+10 1.346717e+05 -2.982743e+04 0.000000e+00 0.000000e+00 2.531566e-11 -2.520306e-11 7.187426e-08 -4.254625e-08 131 1.726585e-07 1.990001e-07 -1.124063e+00 -3.342103e-01 -5.737013e+00 -6.282719e-01 -1.199998e+00 3.000000e+15 5.436366e+01 6.099164e+08 1.326880e+05 -4.997736e+04 0.000000e+00 0.000000e+00 1.174753e-10 -8.267995e-11 6.023626e-08 -4.625230e-08 132 1.899999e-07 1.990001e-07 -1.025051e+00 -3.015015e-01 -5.638000e+00 -5.435041e-01 -1.199916e+00 3.000000e+15 9.429684e+01 1.330717e+07 1.241182e+05 -6.531703e+04 0.000000e+00 0.000000e+00 2.104480e-10 -1.687816e-10 5.477182e-08 -4.682205e-08 133 2.000000e-07 1.990001e-07 -9.549923e-01 -2.710567e-01 -5.567941e+00 -4.808027e-01 -1.198823e+00 3.000000e+15 1.253240e+02 9.248496e+05 1.141072e+05 -7.493331e+04 0.000000e+00 0.000000e+00 2.820768e-10 -2.374749e-10 5.214696e-08 -4.720416e-08 134 2.100000e-07 1.990001e-07 -8.751835e-01 -2.307043e-01 -5.488133e+00 -3.983859e-01 -1.182032e+00 3.000000e+15 1.133029e+02 8.089385e+04 9.388072e+04 -7.763587e+04 0.000000e+00 0.000000e+00 2.328259e-10 -2.674169e-10 4.917404e-08 -4.697340e-08 135 2.354138e-07 1.990001e-07 -6.919151e-01 -1.436635e-01 -5.304864e+00 -2.198472e-01 -1.017313e+00 3.000000e+15 1.360376e+02 3.948618e+04 7.319283e+04 -6.756879e+04 0.000000e+00 0.000000e+00 2.834810e-10 -2.612521e-10 4.583253e-08 -4.435346e-08 136 3.000000e-07 1.990001e-07 -3.301132e-01 1.434600e-02 -4.943062e+00 1.260242e-01 -6.565472e-01 3.000000e+15 2.518572e+02 3.793567e+04 5.144484e+04 -4.898876e+04 0.000000e+00 0.000000e+00 5.352890e-10 -3.899777e-10 4.071758e-08 -3.890083e-08 137 4.000000e-07 1.990001e-07 5.093213e-02 1.678684e-01 -4.562017e+00 4.785551e-01 -2.770081e-01 3.000000e+15 7.584892e+02 3.578963e+04 3.503123e+04 -3.185214e+04 0.000000e+00 0.000000e+00 8.936924e-10 -7.036890e-10 3.444008e-08 -3.131189e-08 138 5.000000e-07 1.990001e-07 3.069296e-01 2.562678e-01 -4.306020e+00 4.999425e-01 -2.343620e-02 3.000000e+15 6.597337e+06 3.258580e+04 2.474271e+04 -2.157574e+04 0.000000e+00 0.000000e+00 1.099537e-08 2.588298e-08 2.780774e-08 -2.388539e-08 139 6.000000e-07 1.990001e-07 4.824468e-01 2.991738e-01 -4.130502e+00 4.998336e-01 1.485023e-01 3.000000e+15 5.866337e+09 2.837506e+04 1.758313e+04 -1.473804e+04 0.000000e+00 0.000000e+00 3.217971e-05 5.294810e-05 2.110351e-08 -1.686986e-08 140 7.000000e-07 1.990001e-07 6.016903e-01 3.152869e-01 -4.011259e+00 4.995549e-01 2.630226e-01 3.000000e+15 5.960813e+11 2.363897e+04 1.254102e+04 -9.802309e+03 0.000000e+00 0.000000e+00 1.008143e-02 8.815588e-03 1.512726e-08 -1.095079e-08 141 8.000000e-07 1.990001e-07 6.784930e-01 3.204156e-01 -3.934456e+00 4.990028e-01 3.349711e-01 3.000000e+15 1.186306e+13 1.959385e+04 9.129763e+03 -5.969896e+03 0.000000e+00 0.000000e+00 4.835695e-01 1.817811e-01 1.076893e-08 -6.421303e-09 142 9.000000e-07 1.990001e-07 7.210882e-01 3.219131e-01 -3.891861e+00 4.982710e-01 3.737754e-01 3.000000e+15 6.334535e+13 1.692250e+04 7.110539e+03 -2.805842e+03 0.000000e+00 0.000000e+00 4.558956e+00 4.978604e-01 8.258426e-09 -2.962735e-09 143 1.000000e-06 1.990001e-07 7.346099e-01 3.222313e-01 -3.878339e+00 4.978859e-01 3.855754e-01 3.000000e+15 1.084498e+14 1.583275e+04 6.433587e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.536511e+00 0.000000e+00 7.415639e-09 0.000000e+00 144 0.000000e+00 2.000000e-07 -1.365084e+00 -3.742275e-01 -5.978033e+00 -8.368087e-01 -1.200000e+00 -1.970000e+17 2.091881e+01 9.182900e+12 1.214371e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.624140e-11 0.000000e+00 1.070265e-07 0.000000e+00 145 9.043580e-08 2.000000e-07 -1.334972e+00 -3.715261e-01 -5.947921e+00 -7.950208e-01 -1.200000e+00 -1.970000e+17 1.331934e+01 2.866545e+12 1.263195e+05 -1.146353e+04 0.000000e+00 0.000000e+00 2.888046e-11 -1.470798e-11 9.170179e-08 -2.910738e-08 146 1.425859e-07 2.000000e-07 -1.250729e+00 -3.617425e-01 -5.863678e+00 -7.102109e-01 -1.200000e+00 -1.970000e+17 1.303062e+01 1.103581e+11 1.336930e+05 -2.981558e+04 0.000000e+00 0.000000e+00 2.338063e-11 -2.199896e-11 7.207435e-08 -4.294888e-08 147 1.726585e-07 2.000000e-07 -1.137375e+00 -3.398038e-01 -5.750324e+00 -6.339192e-01 -1.199999e+00 -1.970000e+17 5.461300e+01 1.378633e+09 1.320178e+05 -5.031074e+04 0.000000e+00 0.000000e+00 1.100719e-10 -7.968061e-11 6.031385e-08 -4.719784e-08 148 1.899999e-07 2.000000e-07 -1.037512e+00 -3.071594e-01 -5.650461e+00 -5.485427e-01 -1.199960e+00 -1.970000e+17 9.561977e+01 2.905783e+07 1.235848e+05 -6.613048e+04 0.000000e+00 0.000000e+00 2.049405e-10 -1.665584e-10 5.479810e-08 -4.803265e-08 149 2.000000e-07 2.000000e-07 -9.664534e-01 -2.762388e-01 -5.579403e+00 -4.848875e-01 -1.199412e+00 -1.970000e+17 1.273074e+02 1.902396e+06 1.136367e+05 -7.647966e+04 0.000000e+00 0.000000e+00 2.779952e-10 -2.376160e-10 5.219405e-08 -4.814867e-08 150 2.100000e-07 2.000000e-07 -8.845516e-01 -2.342643e-01 -5.497501e+00 -4.071516e-01 -1.186318e+00 3.000000e+15 1.106942e+02 9.845692e+04 9.345641e+04 -7.936729e+04 0.000000e+00 0.000000e+00 2.263282e-10 -2.671723e-10 4.904840e-08 -4.742860e-08 151 2.354138e-07 2.000000e-07 -6.992184e-01 -1.460639e-01 -5.312168e+00 -2.268064e-01 -1.024638e+00 3.000000e+15 1.342396e+02 3.945371e+04 7.287628e+04 -6.824662e+04 0.000000e+00 0.000000e+00 2.798209e-10 -2.561142e-10 4.574523e-08 -4.439569e-08 152 3.000000e-07 2.000000e-07 -3.352488e-01 1.290482e-02 -4.948198e+00 1.209815e-01 -6.617085e-01 3.000000e+15 2.509532e+02 3.789809e+04 5.127252e+04 -4.925691e+04 0.000000e+00 0.000000e+00 5.334876e-10 -3.869512e-10 4.064503e-08 -3.891165e-08 153 4.000000e-07 2.000000e-07 4.743313e-02 1.670979e-01 -4.565516e+00 4.765494e-01 -2.805440e-01 3.000000e+15 7.159375e+02 3.573861e+04 3.495228e+04 -3.198530e+04 0.000000e+00 0.000000e+00 8.923055e-10 -7.024560e-10 3.437015e-08 -3.130375e-08 154 5.000000e-07 2.000000e-07 3.044572e-01 2.558968e-01 -4.308492e+00 4.999404e-01 -2.596489e-02 3.000000e+15 5.996365e+06 3.251500e+04 2.470847e+04 -2.166280e+04 0.000000e+00 0.000000e+00 1.047244e-08 2.419758e-08 2.773854e-08 -2.386857e-08 155 6.000000e-07 2.000000e-07 4.806891e-01 2.990340e-01 -4.132260e+00 4.998284e-01 1.466667e-01 3.000000e+15 5.482007e+09 2.828976e+04 1.757315e+04 -1.479895e+04 0.000000e+00 0.000000e+00 3.114211e-05 5.091937e-05 2.104134e-08 -1.685089e-08 156 7.000000e-07 2.000000e-07 6.004361e-01 3.152435e-01 -4.012513e+00 4.995421e-01 2.616664e-01 3.000000e+15 5.681459e+11 2.354589e+04 1.254489e+04 -9.844519e+03 0.000000e+00 0.000000e+00 9.909088e-03 8.627475e-03 1.507566e-08 -1.093517e-08 157 8.000000e-07 2.000000e-07 6.775795e-01 3.204031e-01 -3.935370e+00 4.989766e-01 3.339359e-01 3.000000e+15 1.146299e+13 1.950185e+04 9.141704e+03 -5.997016e+03 0.000000e+00 0.000000e+00 4.803001e-01 1.798500e-01 1.073037e-08 -6.411935e-09 158 9.000000e-07 2.000000e-07 7.203764e-01 3.219093e-01 -3.892573e+00 4.982288e-01 3.729242e-01 3.000000e+15 6.172646e+13 1.683157e+04 7.126829e+03 -2.819308e+03 0.000000e+00 0.000000e+00 4.555917e+00 4.947043e-01 8.227886e-09 -2.958731e-09 159 1.000000e-06 2.000000e-07 7.339657e-01 3.222294e-01 -3.878983e+00 4.978357e-01 3.847804e-01 3.000000e+15 1.059872e+14 1.574068e+04 6.451216e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.549475e+00 0.000000e+00 7.386972e-09 0.000000e+00 160 0.000000e+00 2.010000e-07 -1.377079e+00 -3.783104e-01 -5.990028e+00 -8.490007e-01 -1.200000e+00 -1.970000e+17 2.107872e+01 1.460135e+13 1.184634e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.638584e-11 0.000000e+00 1.073410e-07 0.000000e+00 161 9.043580e-08 2.010000e-07 -1.347461e+00 -3.757717e-01 -5.960410e+00 -8.074898e-01 -1.200000e+00 -1.970000e+17 1.330924e+01 4.645787e+12 1.234520e+05 -1.135180e+04 0.000000e+00 0.000000e+00 2.890152e-11 -1.326753e-11 9.202481e-08 -2.853599e-08 162 1.425859e-07 2.010000e-07 -1.263972e+00 -3.664789e-01 -5.876921e+00 -7.210037e-01 -1.200000e+00 -1.970000e+17 1.185281e+01 1.841512e+11 1.311725e+05 -2.979467e+04 0.000000e+00 0.000000e+00 2.107119e-11 -1.956363e-11 7.228814e-08 -4.255598e-08 163 1.726585e-07 2.010000e-07 -1.150466e+00 -3.451537e-01 -5.763415e+00 -6.456120e-01 -1.199999e+00 -1.970000e+17 5.173820e+01 2.286993e+09 1.298192e+05 -5.063496e+04 0.000000e+00 0.000000e+00 9.635021e-11 -7.385108e-11 6.040986e-08 -4.702932e-08 164 1.899999e-07 2.010000e-07 -1.049767e+00 -3.126049e-01 -5.662716e+00 -5.603762e-01 -1.199975e+00 -1.970000e+17 9.407233e+01 4.664422e+07 1.215419e+05 -6.693461e+04 0.000000e+00 0.000000e+00 1.925542e-10 -1.606103e-10 5.483983e-08 -4.795660e-08 165 2.000000e-07 2.010000e-07 -9.777190e-01 -2.812280e-01 -5.590668e+00 -4.960134e-01 -1.199617e+00 -1.970000e+17 1.266219e+02 2.917586e+06 1.117219e+05 -7.794606e+04 0.000000e+00 0.000000e+00 2.671760e-10 -2.339412e-10 5.221585e-08 -4.809934e-08 166 2.100000e-07 2.010000e-07 -8.938743e-01 -2.377882e-01 -5.506823e+00 -4.158401e-01 -1.189769e+00 3.000000e+15 1.080136e+02 1.235519e+05 9.296383e+04 -8.098949e+04 0.000000e+00 0.000000e+00 2.195186e-10 -2.638810e-10 4.890942e-08 -4.741174e-08 167 2.354138e-07 2.010000e-07 -7.064900e-01 -1.484466e-01 -5.319439e+00 -2.337375e-01 -1.031929e+00 3.000000e+15 1.324842e+02 3.942422e+04 7.254914e+04 -6.891992e+04 0.000000e+00 0.000000e+00 2.762035e-10 -2.508849e-10 4.565723e-08 -4.443511e-08 168 3.000000e-07 2.010000e-07 -3.403674e-01 1.147009e-02 -4.953317e+00 1.159539e-01 -6.668531e-01 3.000000e+15 2.500720e+02 3.786001e+04 5.109810e+04 -4.952330e+04 0.000000e+00 0.000000e+00 5.317112e-10 -3.839966e-10 4.057223e-08 -3.892098e-08 169 4.000000e-07 2.010000e-07 4.394186e-02 1.663293e-01 -4.569007e+00 4.744368e-01 -2.840727e-01 3.000000e+15 6.787745e+02 3.568695e+04 3.487272e+04 -3.211777e+04 0.000000e+00 0.000000e+00 8.909289e-10 -7.012473e-10 3.430008e-08 -3.129437e-08 170 5.000000e-07 2.010000e-07 3.019880e-01 2.555260e-01 -4.310961e+00 4.999382e-01 -2.849090e-02 3.000000e+15 5.450855e+06 3.244357e+04 2.467392e+04 -2.174952e+04 0.000000e+00 0.000000e+00 9.982098e-09 2.262221e-08 2.766930e-08 -2.385075e-08 171 6.000000e-07 2.010000e-07 4.789323e-01 2.988941e-01 -4.134017e+00 4.998231e-01 1.448314e-01 3.000000e+15 5.123073e+09 2.820403e+04 1.756295e+04 -1.485967e+04 0.000000e+00 0.000000e+00 3.014414e-05 4.897193e-05 2.097920e-08 -1.683122e-08 172 7.000000e-07 2.010000e-07 5.991814e-01 3.152001e-01 -4.013768e+00 4.995289e-01 2.603091e-01 3.000000e+15 5.415189e+11 2.345271e+04 1.254860e+04 -9.886621e+03 0.000000e+00 0.000000e+00 9.740375e-03 8.443562e-03 1.502413e-08 -1.091910e-08 173 8.000000e-07 2.010000e-07 6.766647e-01 3.203905e-01 -3.936284e+00 4.989496e-01 3.328989e-01 3.000000e+15 1.107621e+13 1.940995e+04 9.153513e+03 -6.024075e+03 0.000000e+00 0.000000e+00 4.770617e-01 1.779396e-01 1.069188e-08 -6.402302e-09 174 9.000000e-07 2.010000e-07 7.196629e-01 3.219055e-01 -3.893286e+00 4.981854e-01 3.720710e-01 3.000000e+15 6.014768e+13 1.674089e+04 7.143012e+03 -2.832746e+03 0.000000e+00 0.000000e+00 4.552870e+00 4.915652e-01 8.197390e-09 -2.954598e-09 175 1.000000e-06 2.010000e-07 7.333197e-01 3.222274e-01 -3.879629e+00 4.977843e-01 3.839831e-01 3.000000e+15 1.035784e+14 1.564891e+04 6.468749e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.562385e+00 0.000000e+00 7.358340e-09 0.000000e+00 176 0.000000e+00 2.032344e-07 -1.402806e+00 -3.865297e-01 -6.015755e+00 -8.750420e-01 -1.200000e+00 -1.970000e+17 2.133642e+01 3.948053e+13 1.118151e+05 0.000000e+00 0.000000e+00 0.000000e+00 4.671335e-11 0.000000e+00 1.080253e-07 0.000000e+00 177 9.043580e-08 2.032344e-07 -1.374329e+00 -3.843417e-01 -5.987278e+00 -8.344010e-01 -1.200000e+00 -1.970000e+17 1.333150e+01 1.312835e+13 1.170400e+05 -1.108522e+04 0.000000e+00 0.000000e+00 2.905975e-11 -1.316451e-11 9.275140e-08 -2.856613e-08 178 1.425859e-07 2.032344e-07 -1.292653e+00 -3.761313e-01 -5.905602e+00 -7.447321e-01 -1.200000e+00 -1.970000e+17 9.787416e+00 5.581593e+11 1.255573e+05 -2.971403e+04 0.000000e+00 0.000000e+00 1.834943e-11 -1.719271e-11 7.278360e-08 -4.299643e-08 179 1.726585e-07 2.032344e-07 -1.178926e+00 -3.562387e-01 -5.791876e+00 -6.687829e-01 -1.200000e+00 -1.970000e+17 4.216940e+01 6.872941e+09 1.249725e+05 -5.132311e+04 0.000000e+00 0.000000e+00 6.866849e-11 -6.023458e-11 6.063094e-08 -4.766052e-08 180 1.899999e-07 2.032344e-07 -1.076419e+00 -3.240199e-01 -5.689368e+00 -5.848863e-01 -1.199991e+00 -1.970000e+17 8.659610e+01 1.306329e+08 1.171096e+05 -6.868274e+04 0.000000e+00 0.000000e+00 1.655308e-10 -1.439735e-10 5.492945e-08 -4.854964e-08 181 2.000000e-07 2.032344e-07 -1.002216e+00 -2.917154e-01 -5.615165e+00 -5.193476e-01 -1.199850e+00 -1.970000e+17 1.210555e+02 7.455052e+06 1.077400e+05 -8.095160e+04 0.000000e+00 0.000000e+00 2.437040e-10 -2.206118e-10 5.221809e-08 -4.844210e-08 182 2.100000e-07 2.032344e-07 -9.145151e-01 -2.455104e-01 -5.527464e+00 -4.349540e-01 -1.194909e+00 3.000000e+15 1.018215e+02 2.249650e+05 9.166032e+04 -8.425827e+04 0.000000e+00 0.000000e+00 2.039647e-10 -2.517718e-10 4.860261e-08 -4.753086e-08 183 2.354138e-07 2.032344e-07 -7.226173e-01 -1.537039e-01 -5.335566e+00 -2.491257e-01 -1.048087e+00 3.000000e+15 1.287517e+02 3.937665e+04 7.178062e+04 -7.040225e+04 0.000000e+00 0.000000e+00 2.683071e-10 -2.389834e-10 4.545826e-08 -4.451389e-08 184 3.000000e-07 2.032344e-07 -3.517410e-01 8.288306e-03 -4.964690e+00 1.047757e-01 -6.782858e-01 3.000000e+15 2.481908e+02 3.777351e+04 5.070098e+04 -5.011184e+04 0.000000e+00 0.000000e+00 5.278285e-10 -3.777069e-10 4.040868e-08 -3.893676e-08 185 4.000000e-07 2.032344e-07 3.616986e-02 1.646189e-01 -4.576779e+00 4.693519e-01 -2.919300e-01 3.000000e+15 6.117946e+02 3.556940e+04 3.469278e+04 -3.241123e+04 0.000000e+00 0.000000e+00 8.878879e-10 -6.986450e-10 3.414309e-08 -3.126914e-08 186 5.000000e-07 2.032344e-07 2.964836e-01 2.546986e-01 -4.316466e+00 4.999330e-01 -3.412463e-02 3.000000e+15 4.406820e+06 3.228182e+04 2.459562e+04 -2.194204e+04 0.000000e+00 0.000000e+00 8.992327e-09 1.946307e-08 2.751443e-08 -2.380744e-08 187 6.000000e-07 2.032344e-07 4.750106e-01 2.985813e-01 -4.137939e+00 4.998104e-01 1.407322e-01 3.000000e+15 4.404468e+09 2.801109e+04 1.753943e+04 -1.499465e+04 0.000000e+00 0.000000e+00 2.804863e-05 4.489796e-05 2.084051e-08 -1.678484e-08 188 7.000000e-07 2.032344e-07 5.963766e-01 3.151030e-01 -4.016572e+00 4.994979e-01 2.572734e-01 3.000000e+15 4.864502e+11 2.324423e+04 1.255630e+04 -9.980296e+03 0.000000e+00 0.000000e+00 9.376096e-03 8.047374e-03 1.490930e-08 -1.088166e-08 189 8.000000e-07 2.032344e-07 6.746166e-01 3.203625e-01 -3.938333e+00 4.988865e-01 3.305763e-01 3.000000e+15 1.025791e+13 1.920504e+04 9.179421e+03 -6.084310e+03 0.000000e+00 0.000000e+00 4.699364e-01 1.737453e-01 1.060612e-08 -6.379848e-09 190 9.000000e-07 2.032344e-07 7.180628e-01 3.218971e-01 -3.894886e+00 4.980844e-01 3.701574e-01 3.000000e+15 5.676078e+13 1.653921e+04 7.178773e+03 -2.862669e+03 0.000000e+00 0.000000e+00 4.546042e+00 4.846130e-01 8.129420e-09 -2.944908e-09 191 1.000000e-06 2.032344e-07 7.318699e-01 3.222230e-01 -3.881079e+00 4.976647e-01 3.821942e-01 3.000000e+15 9.838639e+13 1.544500e+04 6.507568e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.591025e+00 0.000000e+00 7.294505e-09 0.000000e+00 192 0.000000e+00 2.082269e-07 -1.454920e+00 -4.007474e-01 -6.067870e+00 -9.276790e-01 -1.200000e+00 -1.970000e+17 2.177214e+01 2.961084e+14 9.694746e+04 0.000000e+00 0.000000e+00 0.000000e+00 4.748276e-11 0.000000e+00 1.095146e-07 0.000000e+00 193 9.043580e-08 2.082269e-07 -1.429183e+00 -3.992586e-01 -6.042132e+00 -8.896357e-01 -1.200000e+00 -1.970000e+17 1.352907e+01 1.094675e+14 1.026884e+05 -1.040220e+04 0.000000e+00 0.000000e+00 2.961597e-11 -1.285645e-11 9.442519e-08 -2.874159e-08 194 1.425859e-07 2.082269e-07 -1.352212e+00 -3.933193e-01 -5.965161e+00 -7.988251e-01 -1.200000e+00 -1.970000e+17 7.922946e+00 5.582582e+12 1.130881e+05 -2.935120e+04 0.000000e+00 0.000000e+00 1.646060e-11 -1.515536e-11 7.396583e-08 -4.413061e-08 195 1.726585e-07 2.082269e-07 -1.238641e+00 -3.768361e-01 -5.851590e+00 -7.104426e-01 -1.200000e+00 -1.970000e+17 2.098106e+01 6.915657e+10 1.144735e+05 -5.264617e+04 0.000000e+00 0.000000e+00 3.246994e-11 -3.179665e-11 6.109215e-08 -4.907687e-08 196 1.899999e-07 2.082269e-07 -1.132465e+00 -3.459596e-01 -5.745414e+00 -6.337117e-01 -1.199999e+00 -1.970000e+17 6.550294e+01 1.140254e+09 1.078210e+05 -7.222904e+04 0.000000e+00 0.000000e+00 1.082183e-10 -1.006819e-10 5.500888e-08 -4.958819e-08 197 2.000000e-07 2.082269e-07 -1.053890e+00 -3.121937e-01 -5.666840e+00 -5.669293e-01 -1.199980e+00 -1.970000e+17 1.033386e+02 5.469669e+07 9.985226e+04 -8.649376e+04 0.000000e+00 0.000000e+00 1.935480e-10 -1.798030e-10 5.193962e-08 -4.892601e-08 198 2.100000e-07 2.082269e-07 -9.594764e-01 -2.618258e-01 -5.572425e+00 -4.761824e-01 -1.199037e+00 3.000000e+15 8.813696e+01 1.090847e+06 8.803884e+04 -9.013887e+04 0.000000e+00 0.000000e+00 1.701377e-10 -2.159480e-10 4.791773e-08 -4.767213e-08 199 2.354138e-07 2.082269e-07 -7.580109e-01 -1.650917e-01 -5.370960e+00 -2.829759e-01 -1.083410e+00 3.000000e+15 1.212935e+02 3.948398e+04 6.988542e+04 -7.355452e+04 0.000000e+00 0.000000e+00 2.517316e-10 -2.131006e-10 4.500365e-08 -4.464775e-08 200 3.000000e-07 2.082269e-07 -3.768291e-01 1.302372e-03 -4.989778e+00 8.008733e-02 -7.035107e-01 3.000000e+15 2.443837e+02 3.757429e+04 4.977772e+04 -5.139009e+04 0.000000e+00 0.000000e+00 5.195448e-10 -3.650962e-10 4.003888e-08 -3.894764e-08 201 4.000000e-07 2.082269e-07 1.895064e-02 1.608332e-01 -4.593999e+00 4.564404e-01 -3.093487e-01 3.000000e+15 5.179324e+02 3.529609e+04 3.428020e+04 -3.305387e+04 0.000000e+00 0.000000e+00 8.812478e-10 -6.932916e-10 3.379018e-08 -3.119154e-08 202 5.000000e-07 2.082269e-07 2.842483e-01 2.528555e-01 -4.328701e+00 4.999190e-01 -4.665981e-02 3.000000e+15 2.747340e+06 3.190969e+04 2.441522e+04 -2.236584e+04 0.000000e+00 0.000000e+00 7.216519e-09 1.389938e-08 2.716779e-08 -2.369338e-08 203 6.000000e-07 2.082269e-07 4.662675e-01 2.978812e-01 -4.146682e+00 4.997781e-01 1.315814e-01 3.000000e+15 3.145035e+09 2.757306e+04 1.748315e+04 -1.529278e+04 0.000000e+00 0.000000e+00 2.396171e-05 3.703095e-05 2.053139e-08 -1.666920e-08 204 7.000000e-07 2.082269e-07 5.901038e-01 3.148853e-01 -4.022845e+00 4.994203e-01 2.504755e-01 3.000000e+15 3.828355e+11 2.277711e+04 1.257062e+04 -1.018760e+04 0.000000e+00 0.000000e+00 8.621480e-03 7.231362e-03 1.465436e-08 -1.079049e-08 205 8.000000e-07 2.082269e-07 6.700194e-01 3.202996e-01 -3.942930e+00 4.987302e-01 3.253582e-01 3.000000e+15 8.639562e+12 1.874942e+04 9.234929e+03 -6.217760e+03 0.000000e+00 0.000000e+00 4.545551e-01 1.647350e-01 1.041578e-08 -6.325159e-09 206 9.000000e-07 2.082269e-07 7.144590e-01 3.218781e-01 -3.898490e+00 4.978362e-01 3.658467e-01 3.000000e+15 4.985428e+13 1.609327e+04 7.256684e+03 -2.929003e+03 0.000000e+00 0.000000e+00 4.530693e+00 4.693861e-01 7.978462e-09 -2.921046e-09 207 1.000000e-06 2.082269e-07 7.285995e-01 3.222131e-01 -3.884350e+00 4.973719e-01 3.781590e-01 3.000000e+15 8.768735e+13 1.499502e+04 6.592504e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.654002e+00 0.000000e+00 7.152637e-09 0.000000e+00 208 0.000000e+00 2.193821e-07 -1.544530e+00 -4.166949e-01 -6.157479e+00 -1.018434e+00 -1.200000e+00 -1.970000e+17 2.275783e+01 9.464953e+15 6.440697e+04 0.000000e+00 0.000000e+00 0.000000e+00 4.907740e-11 0.000000e+00 1.127099e-07 0.000000e+00 209 9.043580e-08 2.193821e-07 -1.525827e+00 -4.162101e-01 -6.138776e+00 -9.875204e-01 -1.200000e+00 -1.970000e+17 1.419386e+01 4.592706e+15 7.081981e+04 -8.410981e+03 0.000000e+00 0.000000e+00 3.101683e-11 -1.165435e-11 9.844989e-08 -2.960193e-08 210 1.425859e-07 2.193821e-07 -1.462889e+00 -4.139290e-01 -6.075838e+00 -9.076487e-01 -1.200000e+00 -1.970000e+17 7.374982e+00 4.029535e+14 8.555181e+04 -2.747682e+04 0.000000e+00 0.000000e+00 1.567085e-11 -1.414732e-11 7.693769e-08 -4.691324e-08 211 1.726585e-07 2.193821e-07 -1.353539e+00 -4.046965e-01 -5.966488e+00 -7.968388e-01 -1.200000e+00 -1.970000e+17 6.970188e+00 5.876574e+12 9.262649e+04 -5.421170e+04 0.000000e+00 0.000000e+00 1.437756e-11 -1.391471e-11 6.171946e-08 -5.160189e-08 212 1.899999e-07 2.193821e-07 -1.241679e+00 -3.794479e-01 -5.854628e+00 -7.150480e-01 -1.200000e+00 -1.970000e+17 2.229236e+01 7.777410e+10 8.947601e+04 -7.782194e+04 0.000000e+00 0.000000e+00 3.667675e-11 -3.305980e-11 5.438544e-08 -5.086917e-08 213 2.000000e-07 2.193821e-07 -1.156176e+00 -3.458388e-01 -5.769126e+00 -6.573310e-01 -1.200000e+00 -1.970000e+17 6.526925e+01 2.851954e+09 8.474994e+04 -9.451169e+04 0.000000e+00 0.000000e+00 1.013907e-10 -9.302633e-11 5.057628e-08 -4.946446e-08 214 2.100000e-07 2.193821e-07 -1.052654e+00 -2.924800e-01 -5.665604e+00 -5.602334e-01 -1.199974e+00 3.000000e+15 6.193015e+01 3.860378e+07 7.834709e+04 -9.864500e+04 0.000000e+00 0.000000e+00 1.053621e-10 -1.402902e-10 4.640900e-08 -4.791961e-08 215 2.354138e-07 2.193821e-07 -8.334579e-01 -1.884937e-01 -5.446407e+00 -3.554047e-01 -1.154496e+00 3.000000e+15 1.079343e+02 4.673682e+04 6.492209e+04 -7.948386e+04 0.000000e+00 0.000000e+00 2.199436e-10 -1.639295e-10 4.394111e-08 -4.484534e-08 216 3.000000e-07 2.193821e-07 -4.311762e-01 -1.365119e-02 -5.044125e+00 2.649420e-02 -7.581699e-01 3.000000e+15 2.373630e+02 3.712359e+04 4.755126e+04 -5.402761e+04 0.000000e+00 0.000000e+00 5.026379e-10 -3.423173e-10 3.919059e-08 -3.886987e-08 217 4.000000e-07 2.193821e-07 -1.876658e-02 1.525655e-01 -4.631716e+00 4.230285e-01 -3.475542e-01 3.000000e+15 4.385109e+02 3.463598e+04 3.330922e+04 -3.442091e+04 0.000000e+00 0.000000e+00 8.670268e-10 -6.831381e-10 3.299182e-08 -3.091662e-08 218 5.000000e-07 2.193821e-07 2.572420e-01 2.487708e-01 -4.355707e+00 4.998716e-01 -7.439248e-02 3.000000e+15 9.688056e+05 3.102601e+04 2.398634e+04 -2.328022e+04 0.000000e+00 0.000000e+00 4.699848e-09 6.464070e-09 2.639198e-08 -2.335514e-08 219 6.000000e-07 2.193821e-07 4.468379e-01 2.963120e-01 -4.166111e+00 4.996815e-01 1.111848e-01 3.000000e+15 1.489361e+09 2.656115e+04 1.733951e+04 -1.594118e+04 0.000000e+00 0.000000e+00 1.712906e-05 2.426170e-05 1.984588e-08 -1.635395e-08 220 7.000000e-07 2.193821e-07 5.760656e-01 3.143955e-01 -4.036884e+00 4.991956e-01 2.352193e-01 3.000000e+15 2.244224e+11 2.172932e+04 1.258861e+04 -1.064063e+04 0.000000e+00 0.000000e+00 7.191578e-03 5.709388e-03 1.409455e-08 -1.055190e-08 221 8.000000e-07 2.193821e-07 6.596505e-01 3.201581e-01 -3.953299e+00 4.982892e-01 3.135627e-01 3.000000e+15 5.885557e+12 1.774328e+04 9.347211e+03 -6.510152e+03 0.000000e+00 0.000000e+00 4.227317e-01 1.463020e-01 9.997659e-09 -6.181888e-09 222 9.000000e-07 2.193821e-07 7.062687e-01 3.218354e-01 -3.906680e+00 4.971500e-01 3.560434e-01 3.000000e+15 3.729902e+13 1.512033e+04 7.420697e+03 -3.074529e+03 0.000000e+00 0.000000e+00 4.496118e+00 4.368774e-01 7.646386e-09 -2.857392e-09 223 1.000000e-06 2.193821e-07 7.211411e-01 3.221909e-01 -3.891808e+00 4.965687e-01 3.689573e-01 3.000000e+15 6.779339e+13 1.401763e+04 6.773039e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.789673e+00 0.000000e+00 6.840203e-09 0.000000e+00 224 0.000000e+00 2.443073e-07 -1.616388e+00 -4.225606e-01 -6.229337e+00 -1.096756e+00 -1.200000e+00 -1.970000e+17 2.921966e+01 1.523017e+17 2.027835e+04 0.000000e+00 0.000000e+00 0.000000e+00 5.171722e-11 0.000000e+00 1.190308e-07 0.000000e+00 225 9.043580e-08 2.443073e-07 -1.614265e+00 -4.225175e-01 -6.227214e+00 -1.081505e+00 -1.200000e+00 -1.970000e+17 1.758874e+01 1.402989e+17 2.498802e+04 -1.816852e+03 0.000000e+00 0.000000e+00 3.334334e-11 -6.370886e-12 1.080630e-07 -2.899895e-08 226 1.425859e-07 2.443073e-07 -1.600032e+00 -4.221674e-01 -6.212981e+00 -1.045289e+00 -1.200000e+00 -1.970000e+17 7.518298e+00 8.092249e+16 3.921808e+04 -1.647614e+04 0.000000e+00 0.000000e+00 1.651780e-11 -1.054530e-11 8.738713e-08 -5.297887e-08 227 1.726585e-07 2.443073e-07 -1.526645e+00 -4.191355e-01 -6.139594e+00 -9.683949e-01 -1.200000e+00 -1.970000e+17 6.564880e+00 4.740235e+15 5.256983e+04 -4.874854e+04 0.000000e+00 0.000000e+00 1.454562e-11 -1.301268e-11 5.954256e-08 -5.817835e-08 228 1.899999e-07 2.443073e-07 -1.417763e+00 -4.053169e-01 -6.030712e+00 -8.611884e-01 -1.200000e+00 -1.970000e+17 7.004255e+00 7.039183e+13 5.659483e+04 -7.942122e+04 0.000000e+00 0.000000e+00 1.578074e-11 -1.440559e-11 4.956252e-08 -5.404094e-08 229 2.000000e-07 2.443073e-07 -1.328748e+00 -3.797417e-01 -5.941698e+00 -7.761896e-01 -1.200000e+00 -1.970000e+17 8.180660e+00 2.253474e+12 5.700697e+04 -9.934139e+04 0.000000e+00 0.000000e+00 1.806513e-11 -1.610579e-11 4.570791e-08 -5.145348e-08 230 2.100000e-07 2.443073e-07 -1.219079e+00 -3.321166e-01 -5.832028e+00 -6.967330e-01 -1.200000e+00 3.000000e+15 1.947245e+01 2.402583e+10 5.632310e+04 -1.052462e+05 0.000000e+00 0.000000e+00 3.700661e-11 -2.450932e-11 4.253232e-08 -4.937329e-08 231 2.354138e-07 2.443073e-07 -9.801758e-01 -2.290454e-01 -5.593125e+00 -4.964447e-01 -1.199573e+00 3.000000e+15 8.665992e+01 2.378684e+06 5.214490e+04 -8.656556e+04 0.000000e+00 0.000000e+00 1.698904e-10 -8.413605e-11 4.119618e-08 -4.549215e-08 232 3.000000e-07 2.443073e-07 -5.431960e-01 -4.344000e-02 -5.156145e+00 -8.420458e-02 -8.707342e-01 3.000000e+15 2.255436e+02 3.635031e+04 4.200143e+04 -5.853934e+04 0.000000e+00 0.000000e+00 4.705871e-10 -3.052914e-10 3.715108e-08 -3.845788e-08 233 4.000000e-07 2.443073e-07 -9.899470e-02 1.351567e-01 -4.711944e+00 3.447175e-01 -4.289932e-01 3.000000e+15 4.071824e+02 3.305185e+04 3.093994e+04 -3.709473e+04 0.000000e+00 0.000000e+00 8.374332e-10 -6.652111e-10 3.115807e-08 -2.992354e-08 234 5.000000e-07 2.443073e-07 1.986985e-01 2.398661e-01 -4.414251e+00 4.995519e-01 -1.347977e-01 3.000000e+15 1.019955e+05 2.887120e+04 2.291514e+04 -2.515237e+04 0.000000e+00 0.000000e+00 2.359897e-09 7.461538e-10 2.466657e-08 -2.225763e-08 235 6.000000e-07 2.443073e-07 4.040528e-01 2.927992e-01 -4.208896e+00 4.992517e-01 6.597661e-02 3.000000e+15 2.895987e+08 2.418584e+04 1.693682e+04 -1.729832e+04 0.000000e+00 0.000000e+00 8.634489e-06 9.834202e-06 1.835530e-08 -1.541715e-08 236 7.000000e-07 2.443073e-07 5.446649e-01 3.132882e-01 -4.068284e+00 4.982778e-01 2.008979e-01 3.000000e+15 6.905815e+10 1.940906e+04 1.256289e+04 -1.160047e+04 0.000000e+00 0.000000e+00 4.933254e-03 3.419192e-03 1.290830e-08 -9.879641e-09 237 8.000000e-07 2.443073e-07 6.360623e-01 3.198380e-01 -3.976887e+00 4.966104e-01 2.865992e-01 3.000000e+15 2.522892e+12 1.557256e+04 9.541342e+03 -7.133514e+03 0.000000e+00 0.000000e+00 3.627618e-01 1.124863e-01 9.106904e-09 -5.775630e-09 238 9.000000e-07 2.443073e-07 6.873352e-01 3.217391e-01 -3.925614e+00 4.946732e-01 3.333423e-01 3.000000e+15 1.974097e+13 1.307070e+04 7.736460e+03 -3.385608e+03 0.000000e+00 0.000000e+00 4.419122e+00 3.714198e-01 6.936744e-09 -2.672409e-09 239 1.000000e-06 2.443073e-07 7.037744e-01 3.221408e-01 -3.909175e+00 4.937313e-01 3.475246e-01 3.000000e+15 3.865636e+13 1.197845e+04 7.128579e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.006814e+01 0.000000e+00 6.171850e-09 0.000000e+00 240 0.000000e+00 3.000000e-07 -1.622916e+00 -4.230344e-01 -6.235865e+00 -1.142378e+00 -1.200000e+00 -1.970000e+17 1.324704e+02 1.960272e+17 7.573804e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.243635e-11 0.000000e+00 1.350382e-07 0.000000e+00 241 9.043580e-08 3.000000e-07 -1.622853e+00 -4.230314e-01 -6.235802e+00 -1.129688e+00 -1.200000e+00 -1.970000e+17 8.129912e+01 1.955552e+17 9.970333e+02 -1.321599e+02 0.000000e+00 0.000000e+00 3.872713e-11 -1.977803e-11 1.248637e-07 -2.413784e-08 242 1.425859e-07 3.000000e-07 -1.621787e+00 -4.229271e-01 -6.234737e+00 -1.105798e+00 -1.200000e+00 -1.970000e+17 3.363833e+01 1.876597e+17 2.543364e+03 -2.694945e+03 0.000000e+00 0.000000e+00 2.062734e-11 -2.449338e-11 1.117712e-07 -3.975546e-08 243 1.726585e-07 3.000000e-07 -1.609364e+00 -4.213842e-01 -6.222313e+00 -1.069916e+00 -1.200000e+00 -1.970000e+17 1.358106e+01 1.160823e+17 9.863381e+03 -2.025495e+04 0.000000e+00 0.000000e+00 1.501266e-11 -2.449861e-11 6.830645e-08 -5.248217e-08 244 1.899999e-07 3.000000e-07 -1.558115e+00 -4.129061e-01 -6.171064e+00 -1.013964e+00 -1.200000e+00 -1.970000e+17 1.132300e+01 1.600405e+16 1.753003e+04 -5.143658e+04 0.000000e+00 0.000000e+00 1.718383e-11 -2.373699e-11 3.831496e-08 -5.526693e-08 245 2.000000e-07 3.000000e-07 -1.494058e+00 -3.947181e-01 -6.107008e+00 -9.493526e-01 -1.200000e+00 -1.970000e+17 1.108282e+01 1.344716e+15 2.127236e+04 -7.767652e+04 0.000000e+00 0.000000e+00 2.091019e-11 -2.368623e-11 3.212396e-08 -5.342475e-08 246 2.100000e-07 3.000000e-07 -1.402762e+00 -3.565405e-01 -6.015711e+00 -8.688511e-01 -1.200000e+00 3.000000e+15 1.245197e+01 2.917124e+13 2.423686e+04 -8.949243e+04 0.000000e+00 0.000000e+00 3.098407e-11 -2.481196e-11 3.131526e-08 -5.105508e-08 247 2.354138e-07 3.000000e-07 -1.186981e+00 -2.713860e-01 -5.799930e+00 -6.939584e-01 -1.200000e+00 3.000000e+15 6.050598e+01 6.945664e+09 2.866077e+04 -8.045095e+04 0.000000e+00 0.000000e+00 1.026774e-10 -5.692081e-11 3.321063e-08 -4.604787e-08 248 3.000000e-07 3.000000e-07 -7.405158e-01 -9.074181e-02 -5.353465e+00 -2.793267e-01 -1.068495e+00 3.000000e+15 2.071707e+02 3.573591e+04 2.973335e+04 -6.102223e+04 0.000000e+00 0.000000e+00 4.132726e-10 -2.558913e-10 3.184368e-08 -3.710191e-08 249 4.000000e-07 3.000000e-07 -2.557823e-01 1.024369e-01 -4.868731e+00 1.890622e-01 -5.881989e-01 3.000000e+15 3.897424e+02 3.010183e+04 2.524651e+04 -4.093591e+04 0.000000e+00 0.000000e+00 7.778665e-10 -6.341620e-10 2.684692e-08 -2.741745e-08 250 5.000000e-07 3.000000e-07 7.820239e-02 2.216018e-01 -4.534747e+00 4.859346e-01 -2.592733e-01 3.000000e+15 1.636600e+03 2.475388e+04 2.015402e+04 -2.841770e+04 0.000000e+00 0.000000e+00 1.242493e-09 -8.802553e-10 2.090377e-08 -1.963799e-08 251 6.000000e-07 3.000000e-07 3.125718e-01 2.851089e-01 -4.300377e+00 4.946184e-01 -3.076903e-02 3.000000e+15 1.008104e+07 1.973153e+04 1.571856e+04 -1.984666e+04 0.000000e+00 0.000000e+00 2.224814e-06 1.675729e-06 1.527736e-08 -1.324893e-08 252 7.000000e-07 3.000000e-07 4.751356e-01 3.107953e-01 -4.137814e+00 4.903485e-01 1.250927e-01 3.000000e+15 6.380715e+09 1.522731e+04 1.222428e+04 -1.346926e+04 0.000000e+00 0.000000e+00 2.374648e-03 1.197976e-03 1.058581e-08 -8.314288e-09 253 8.000000e-07 3.000000e-07 5.819569e-01 3.191130e-01 -4.030992e+00 4.848746e-01 2.249710e-01 3.000000e+15 4.902933e+11 1.164234e+04 9.718208e+03 -8.368344e+03 0.000000e+00 0.000000e+00 2.698992e-01 6.346622e-02 7.354665e-09 -4.774467e-09 254 9.000000e-07 3.000000e-07 6.425024e-01 3.215214e-01 -3.970447e+00 4.799406e-01 2.800339e-01 3.000000e+15 6.165191e+12 9.418448e+03 8.198303e+03 -4.005621e+03 0.000000e+00 0.000000e+00 4.260723e+00 2.556898e-01 5.538825e-09 -2.194514e-09 255 1.000000e-06 3.000000e-07 6.620693e-01 3.220281e-01 -3.950880e+00 4.778689e-01 2.966257e-01 3.000000e+15 1.423269e+13 8.395083e+03 7.684618e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.057579e+01 0.000000e+00 4.861112e-09 0.000000e+00 256 0.000000e+00 4.000000e-07 -1.623042e+00 -4.230436e-01 -6.235992e+00 -1.174230e+00 -1.200000e+00 -1.970000e+17 4.516801e+02 1.969908e+17 6.402076e+00 0.000000e+00 0.000000e+00 0.000000e+00 1.322879e-10 0.000000e+00 1.899342e-07 0.000000e+00 257 9.043580e-08 4.000000e-07 -1.623036e+00 -4.230418e-01 -6.235985e+00 -1.160660e+00 -1.200000e+00 -1.970000e+17 2.673530e+02 1.969391e+17 9.298060e+00 -3.524486e+01 0.000000e+00 0.000000e+00 5.756202e-11 -6.042651e-11 1.391768e-07 -3.590684e-08 258 1.425859e-07 4.000000e-07 -1.622748e+00 -4.229607e-01 -6.235697e+00 -1.140864e+00 -1.200000e+00 -1.970000e+17 1.257492e+02 1.947618e+17 5.282167e+01 -9.351984e+02 0.000000e+00 0.000000e+00 2.723286e-11 -6.897855e-11 1.266959e-07 -3.857601e-08 259 1.726585e-07 4.000000e-07 -1.618410e+00 -4.217101e-01 -6.231359e+00 -1.114465e+00 -1.200000e+00 -1.970000e+17 5.359106e+01 1.646850e+17 5.237517e+02 -8.843247e+03 0.000000e+00 0.000000e+00 1.389812e-11 -7.062474e-11 1.009264e-07 -4.012025e-08 260 1.899999e-07 4.000000e-07 -1.595674e+00 -4.147039e-01 -6.208623e+00 -1.081521e+00 -1.200000e+00 -1.970000e+17 3.611445e+01 6.837317e+16 2.271573e+03 -3.010288e+04 0.000000e+00 0.000000e+00 1.363114e-11 -7.057730e-11 4.228420e-08 -4.246734e-08 261 2.000000e-07 4.000000e-07 -1.555772e+00 -3.992011e-01 -6.168721e+00 -1.039151e+00 -1.200000e+00 -1.970000e+17 3.282756e+01 1.461767e+16 3.905336e+03 -5.377906e+04 0.000000e+00 0.000000e+00 1.946404e-11 -7.012990e-11 1.891838e-08 -4.355420e-08 262 2.100000e-07 4.000000e-07 -1.488115e+00 -3.653819e-01 -6.101064e+00 -9.782118e-01 -1.200000e+00 3.000000e+15 3.150295e+01 7.909629e+14 5.595530e+03 -6.706931e+04 0.000000e+00 0.000000e+00 3.753982e-11 -6.952962e-11 1.437840e-08 -4.293342e-08 263 2.354138e-07 4.000000e-07 -1.321459e+00 -2.927213e-01 -5.934408e+00 -8.124221e-01 -1.200000e+00 3.000000e+15 3.257654e+01 1.258256e+12 9.293387e+03 -6.393153e+04 0.000000e+00 0.000000e+00 5.573250e-11 -6.935823e-11 1.858468e-08 -3.988606e-08 264 3.000000e-07 4.000000e-07 -9.355602e-01 -1.299589e-01 -5.548509e+00 -4.720702e-01 -1.198072e+00 3.000000e+15 1.895372e+02 4.491543e+05 1.465452e+04 -5.511864e+04 0.000000e+00 0.000000e+00 3.362089e-10 -2.036162e-10 2.155168e-08 -3.232513e-08 265 4.000000e-07 4.000000e-07 -4.560726e-01 6.519043e-02 -5.069022e+00 -1.007743e-02 -7.925055e-01 3.000000e+15 3.727829e+02 2.577225e+04 1.634175e+04 -4.194152e+04 0.000000e+00 0.000000e+00 6.811861e-10 -5.996535e-10 1.910695e-08 -2.302957e-08 266 5.000000e-07 4.000000e-07 -9.672971e-02 1.967423e-01 -4.709679e+00 3.385040e-01 -4.399449e-01 3.000000e+15 5.651391e+02 1.982756e+04 1.508698e+04 -3.120810e+04 0.000000e+00 0.000000e+00 9.996492e-10 -9.620950e-10 1.471175e-08 -1.592898e-08 267 6.000000e-07 4.000000e-07 1.680893e-01 2.731004e-01 -4.444860e+00 4.374572e-01 -1.824631e-01 3.000000e+15 3.445612e+05 1.493028e+04 1.300100e+04 -2.271471e+04 0.000000e+00 0.000000e+00 3.839616e-07 1.625759e-07 1.055749e-08 -1.045815e-08 268 7.000000e-07 4.000000e-07 3.575645e-01 3.066085e-01 -4.255385e+00 4.271248e-01 -9.744343e-04 3.000000e+15 7.803741e+08 1.096387e+04 1.096093e+04 -1.583138e+04 0.000000e+00 0.000000e+00 9.189390e-04 2.614114e-04 7.217477e-09 -6.389442e-09 269 8.000000e-07 4.000000e-07 4.847169e-01 3.178619e-01 -4.128232e+00 4.185665e-01 1.175680e-01 3.000000e+15 1.482753e+11 7.859422e+03 9.343218e+03 -1.001462e+04 0.000000e+00 0.000000e+00 1.848815e-01 2.446656e-02 4.868788e-09 -3.557485e-09 270 9.000000e-07 4.000000e-07 5.578568e-01 3.211422e-01 -4.055092e+00 4.128881e-01 1.836191e-01 3.000000e+15 3.122735e+12 5.975299e+03 8.317290e+03 -4.849178e+03 0.000000e+00 0.000000e+00 4.049830e+00 1.281531e-01 3.568900e-09 -1.600051e-09 271 1.000000e-06 4.000000e-07 5.817005e-01 3.218311e-01 -4.031249e+00 4.108247e-01 2.033463e-01 3.000000e+15 8.502550e+12 5.096115e+03 7.965905e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.117053e+01 0.000000e+00 3.043699e-09 0.000000e+00 272 0.000000e+00 5.000000e-07 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 6.036702e-02 -4.896889e-01 0.000000e+00 0.000000e+00 9.345389e-11 -1.789543e-10 1.137274e-07 -1.274669e-07 273 9.043580e-08 5.000000e-07 -1.623039e+00 -4.230420e-01 -6.235988e+00 -1.179568e+00 -1.200000e+00 -1.970000e+17 5.552876e+02 1.969663e+17 2.152543e-01 -2.394979e+01 0.000000e+00 0.000000e+00 4.312864e-11 -1.548710e-10 9.982283e-08 -8.973727e-08 274 1.425859e-07 5.000000e-07 -1.622844e+00 -4.229658e-01 -6.235793e+00 -1.159226e+00 -1.200000e+00 -1.970000e+17 2.548193e+02 1.954835e+17 6.412965e+00 -6.474358e+02 0.000000e+00 0.000000e+00 2.109751e-11 -1.355925e-10 9.729934e-08 -5.213197e-08 275 1.726585e-07 5.000000e-07 -1.619839e+00 -4.217892e-01 -6.232788e+00 -1.134876e+00 -1.200000e+00 -1.970000e+17 1.116399e+02 1.740428e+17 9.730914e+01 -6.324301e+03 0.000000e+00 0.000000e+00 1.070523e-11 -1.311412e-10 8.657467e-08 -3.646347e-08 276 1.899999e-07 5.000000e-07 -1.603547e+00 -4.151819e-01 -6.216496e+00 -1.106390e+00 -1.200000e+00 -1.970000e+17 6.967420e+01 9.270115e+16 5.437700e+02 -2.333980e+04 0.000000e+00 0.000000e+00 8.623378e-12 -1.297666e-10 4.551328e-08 -3.202835e-08 277 2.000000e-07 5.000000e-07 -1.572165e+00 -4.004578e-01 -6.185114e+00 -1.071663e+00 -1.200000e+00 -1.970000e+17 6.122052e+01 2.755165e+16 1.159772e+03 -4.443712e+04 0.000000e+00 0.000000e+00 1.209061e-11 -1.289761e-10 1.671181e-08 -3.140062e-08 278 2.100000e-07 5.000000e-07 -1.514672e+00 -3.679960e-01 -6.127621e+00 -1.020482e+00 -1.200000e+00 3.000000e+15 5.783524e+01 2.208434e+15 1.918838e+03 -5.701648e+04 0.000000e+00 0.000000e+00 2.629068e-11 -1.277150e-10 6.844961e-09 -3.097240e-08 279 2.354138e-07 5.000000e-07 -1.372849e+00 -2.997364e-01 -5.985798e+00 -8.769482e-01 -1.200000e+00 3.000000e+15 5.413454e+01 9.176575e+12 3.821617e+03 -5.487940e+04 0.000000e+00 0.000000e+00 4.562365e-11 -1.232850e-10 9.039942e-09 -2.969677e-08 280 3.000000e-07 5.000000e-07 -1.033606e+00 -1.465093e-01 -5.646555e+00 -5.719168e-01 -1.199964e+00 3.000000e+15 2.032012e+02 1.849037e+07 7.612234e+03 -4.961123e+04 0.000000e+00 0.000000e+00 2.623358e-10 -2.428519e-10 1.271414e-08 -2.507727e-08 281 4.000000e-07 5.000000e-07 -5.826173e-01 4.514440e-02 -5.195566e+00 -1.367954e-01 -9.250271e-01 3.000000e+15 3.752889e+02 2.045470e+04 1.037899e+04 -4.050345e+04 0.000000e+00 0.000000e+00 5.768396e-10 -6.163622e-10 1.231303e-08 -1.779360e-08 282 5.000000e-07 5.000000e-07 -2.235372e-01 1.810350e-01 -4.836486e+00 2.122963e-01 -5.737785e-01 3.000000e+15 5.521836e+02 1.511097e+04 1.085114e+04 -3.175845e+04 0.000000e+00 0.000000e+00 8.659804e-10 -9.639647e-10 9.584596e-09 -1.202505e-08 283 6.000000e-07 5.000000e-07 5.255167e-02 2.643887e-01 -4.560397e+00 3.456283e-01 -3.060633e-01 3.000000e+15 1.377726e+05 1.093169e+04 1.023755e+04 -2.397271e+04 0.000000e+00 0.000000e+00 1.890990e-07 2.954625e-08 6.855488e-09 -7.718673e-09 284 7.000000e-07 5.000000e-07 2.559169e-01 3.032848e-01 -4.357032e+00 3.404192e-01 -1.117146e-01 3.000000e+15 4.379330e+08 7.714135e+03 9.275233e+03 -1.712704e+04 0.000000e+00 0.000000e+00 5.805638e-04 7.734976e-05 4.657916e-09 -4.583949e-09 285 8.000000e-07 5.000000e-07 3.950925e-01 3.168241e-01 -4.217857e+00 3.356989e-01 1.733081e-02 3.000000e+15 1.141862e+11 5.214191e+03 8.376734e+03 -1.101199e+04 0.000000e+00 0.000000e+00 1.507942e-01 1.029784e-02 3.059094e-09 -2.454713e-09 286 9.000000e-07 5.000000e-07 4.761566e-01 3.208195e-01 -4.136792e+00 3.325858e-01 8.973622e-02 3.000000e+15 2.958436e+12 3.730746e+03 7.764215e+03 -5.382935e+03 0.000000e+00 0.000000e+00 3.925767e+00 6.476187e-02 2.165786e-09 -1.068175e-09 287 1.000000e-06 5.000000e-07 5.027512e-01 3.216611e-01 -4.110198e+00 3.314661e-01 1.111612e-01 3.000000e+15 8.638165e+12 3.054864e+03 7.548747e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.148751e+01 0.000000e+00 1.788177e-09 0.000000e+00 288 0.000000e+00 6.000000e-07 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -4.080011e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.607102e-10 0.000000e+00 -6.477506e-08 289 9.043580e-08 6.000000e-07 -1.623040e+00 -4.230420e-01 -6.235989e+00 -1.182561e+00 -1.200000e+00 -1.970000e+17 6.233819e+02 1.969719e+17 5.480142e-02 -2.004415e+01 0.000000e+00 0.000000e+00 1.044071e-11 -1.552320e-10 4.185419e-08 -5.125411e-08 290 1.425859e-07 6.000000e-07 -1.622876e+00 -4.229677e-01 -6.235826e+00 -1.163385e+00 -1.200000e+00 -1.970000e+17 2.988932e+02 1.957301e+17 2.436570e+00 -5.430900e+02 0.000000e+00 0.000000e+00 7.143705e-12 -1.501869e-10 5.223205e-08 -3.624780e-08 291 1.726585e-07 6.000000e-07 -1.620356e+00 -4.218199e-01 -6.233305e+00 -1.140295e+00 -1.200000e+00 -1.970000e+17 1.349380e+02 1.775551e+17 3.871017e+01 -5.356331e+03 0.000000e+00 0.000000e+00 4.348252e-12 -1.485304e-10 5.099286e-08 -2.610643e-08 292 1.899999e-07 6.000000e-07 -1.606549e+00 -4.153696e-01 -6.219498e+00 -1.113656e+00 -1.200000e+00 -1.970000e+17 8.215875e+01 1.041114e+17 2.261107e+02 -2.040569e+04 0.000000e+00 0.000000e+00 3.698238e-12 -1.479486e-10 3.104361e-08 -2.129215e-08 293 2.000000e-07 6.000000e-07 -1.578967e+00 -4.009574e-01 -6.191916e+00 -1.082315e+00 -1.200000e+00 -1.970000e+17 7.104629e+01 3.583942e+16 5.185372e+02 -4.002845e+04 0.000000e+00 0.000000e+00 5.634210e-12 -1.476010e-10 1.261415e-08 -2.059162e-08 294 2.100000e-07 6.000000e-07 -1.526492e+00 -3.690508e-01 -6.139441e+00 -1.036259e+00 -1.200000e+00 3.000000e+15 6.739776e+01 3.487814e+15 9.120037e+02 -5.194644e+04 0.000000e+00 0.000000e+00 1.377473e-11 -1.469653e-10 3.968873e-09 -2.056775e-08 295 2.354138e-07 6.000000e-07 -1.397891e+00 -3.026600e-01 -6.010840e+00 -9.065859e-01 -1.200000e+00 3.000000e+15 6.466086e+01 2.416409e+13 1.963340e+03 -4.987098e+04 0.000000e+00 0.000000e+00 2.882316e-11 -1.440841e-10 4.442687e-09 -1.992151e-08 296 3.000000e-07 6.000000e-07 -1.087805e+00 -1.541098e-01 -5.700754e+00 -6.278719e-01 -1.199997e+00 3.000000e+15 2.174809e+02 1.501274e+08 4.339803e+03 -4.581527e+04 0.000000e+00 0.000000e+00 1.838370e-10 -2.678072e-10 6.749572e-09 -1.741448e-08 297 4.000000e-07 6.000000e-07 -6.636523e-01 3.446330e-02 -5.276601e+00 -2.186392e-01 -1.014413e+00 3.000000e+15 3.872093e+02 1.481079e+04 6.710816e+03 -3.870261e+04 0.000000e+00 0.000000e+00 4.582427e-10 -6.426754e-10 7.182094e-09 -1.265718e-08 298 5.000000e-07 6.000000e-07 -3.137526e-01 1.716601e-01 -4.926702e+00 1.218093e-01 -6.725448e-01 3.000000e+15 5.580120e+02 1.085702e+04 7.701068e+03 -3.134954e+04 0.000000e+00 0.000000e+00 7.241517e-10 -9.827069e-10 5.775297e-09 -8.537426e-09 299 6.000000e-07 6.000000e-07 -3.666158e-02 2.586235e-01 -4.649611e+00 2.617055e-01 -4.042991e-01 3.000000e+15 1.122872e+05 7.712345e+03 7.822804e+03 -2.429062e+04 0.000000e+00 0.000000e+00 1.537228e-07 3.077091e-09 4.185567e-09 -5.416529e-09 300 7.000000e-07 6.000000e-07 1.720598e-01 3.009108e-01 -4.440889e+00 2.608656e-01 -2.053324e-01 3.000000e+15 3.708055e+08 5.289227e+03 7.525720e+03 -1.769219e+04 0.000000e+00 0.000000e+00 4.812963e-04 2.198477e-05 2.847234e-09 -3.126726e-09 301 8.000000e-07 6.000000e-07 3.171822e-01 3.160507e-01 -4.295767e+00 2.592057e-01 -7.191130e-02 3.000000e+15 1.080983e+11 3.364423e+03 7.124300e+03 -1.152564e+04 0.000000e+00 0.000000e+00 1.367956e-01 3.899417e-03 1.817712e-09 -1.595275e-09 302 9.000000e-07 6.000000e-07 4.025725e-01 3.205721e-01 -4.210377e+00 2.579443e-01 3.234331e-03 3.000000e+15 3.081887e+12 2.264064e+03 6.814121e+03 -5.677165e+03 0.000000e+00 0.000000e+00 3.861142e+00 2.805899e-02 1.237631e-09 -6.664412e-10 303 1.000000e-06 6.000000e-07 4.307255e-01 3.215285e-01 -4.182224e+00 2.574720e-01 2.533337e-02 3.000000e+15 9.321262e+12 1.791573e+03 6.700020e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.164495e+01 0.000000e+00 9.912407e-10 0.000000e+00 304 0.000000e+00 7.000000e-07 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.684948e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.558628e-10 0.000000e+00 -3.491346e-08 305 9.043580e-08 7.000000e-07 -1.623040e+00 -4.230420e-01 -6.235990e+00 -1.183301e+00 -1.200000e+00 -1.970000e+17 6.414684e+02 1.969746e+17 2.799159e-02 -1.811200e+01 0.000000e+00 0.000000e+00 2.874469e-12 -1.544984e-10 2.002292e-08 -2.995701e-08 306 1.425859e-07 7.000000e-07 -1.622893e+00 -4.229686e-01 -6.235842e+00 -1.164616e+00 -1.200000e+00 -1.970000e+17 3.132632e+02 1.958521e+17 1.264416e+00 -4.910869e+02 0.000000e+00 0.000000e+00 2.433678e-12 -1.531416e-10 2.747022e-08 -2.106386e-08 307 1.726585e-07 7.000000e-07 -1.620613e+00 -4.218340e-01 -6.233562e+00 -1.142179e+00 -1.200000e+00 -1.970000e+17 1.436916e+02 1.793313e+17 2.020431e+01 -4.865251e+03 0.000000e+00 0.000000e+00 1.788470e-12 -1.526120e-10 2.809801e-08 -1.583198e-08 308 1.899999e-07 7.000000e-07 -1.608069e+00 -4.154561e-01 -6.221018e+00 -1.116487e+00 -1.200000e+00 -1.970000e+17 8.643038e+01 1.104127e+17 1.196011e+02 -1.883990e+04 0.000000e+00 0.000000e+00 1.676635e-12 -1.523994e-10 1.838601e-08 -1.381337e-08 309 2.000000e-07 7.000000e-07 -1.582536e+00 -4.011884e-01 -6.195485e+00 -1.086920e+00 -1.200000e+00 -1.970000e+17 7.395087e+01 4.114208e+16 2.827986e+02 -3.757822e+04 0.000000e+00 0.000000e+00 2.777934e-12 -1.522593e-10 7.984418e-09 -1.321034e-08 310 2.100000e-07 7.000000e-07 -1.532912e+00 -3.695413e-01 -6.145861e+00 -1.043727e+00 -1.200000e+00 3.000000e+15 7.018317e+01 4.470538e+15 5.125420e+02 -4.903295e+04 0.000000e+00 0.000000e+00 7.378143e-12 -1.519700e-10 2.380912e-09 -1.309529e-08 311 2.354138e-07 7.000000e-07 -1.412116e+00 -3.040369e-01 -6.025065e+00 -9.223623e-01 -1.200000e+00 3.000000e+15 6.865858e+01 4.188158e+13 1.146685e+03 -4.686395e+04 0.000000e+00 0.000000e+00 1.747837e-11 -1.504031e-10 2.276827e-09 -1.267454e-08 312 3.000000e-07 7.000000e-07 -1.120402e+00 -1.578337e-01 -5.733351e+00 -6.613779e-01 -1.199999e+00 3.000000e+15 2.252562e+02 5.293859e+08 2.657431e+03 -4.327915e+04 0.000000e+00 0.000000e+00 1.213884e-10 -2.787321e-10 3.403369e-09 -1.132162e-08 313 4.000000e-07 7.000000e-07 -7.168336e-01 2.875994e-02 -5.329783e+00 -2.727048e-01 -1.077584e+00 3.000000e+15 4.006769e+02 1.006546e+04 4.423409e+03 -3.714219e+04 0.000000e+00 0.000000e+00 3.423525e-10 -6.633686e-10 3.864246e-09 -8.477021e-09 314 5.000000e-07 7.000000e-07 -3.775585e-01 1.662549e-01 -4.990508e+00 5.737440e-02 -7.461281e-01 3.000000e+15 5.717488e+02 7.439370e+03 5.419505e+03 -3.064646e+04 0.000000e+00 0.000000e+00 5.769669e-10 -1.008322e-09 3.246396e-09 -5.801967e-09 315 6.000000e-07 7.000000e-07 -1.039044e-01 2.550466e-01 -4.716854e+00 1.915963e-01 -4.813117e-01 3.000000e+15 1.254471e+05 5.286141e+03 5.826881e+03 -2.414805e+04 0.000000e+00 0.000000e+00 1.544873e-07 -6.633545e-09 2.414093e-09 -3.674431e-09 316 7.000000e-07 7.000000e-07 1.054025e-01 2.993482e-01 -4.507547e+00 1.928936e-01 -2.822908e-01 3.000000e+15 3.901416e+08 3.551581e+03 5.880544e+03 -1.782555e+04 0.000000e+00 0.000000e+00 4.600396e-04 -7.333405e-07 1.652859e-09 -2.054217e-09 317 8.000000e-07 7.000000e-07 2.526065e-01 3.155230e-01 -4.360343e+00 1.929473e-01 -1.487208e-01 3.000000e+15 1.153649e+11 2.096467e+03 5.780624e+03 -1.172359e+04 0.000000e+00 0.000000e+00 1.322730e-01 6.656989e-04 1.017101e-09 -9.823133e-10 318 9.000000e-07 7.000000e-07 3.398742e-01 3.203987e-01 -4.273075e+00 1.927421e-01 -7.341592e-02 3.000000e+15 3.395166e+12 1.320131e+03 5.667610e+03 -5.807214e+03 0.000000e+00 0.000000e+00 3.835652e+00 6.518161e-03 6.627964e-10 -3.908240e-10 319 1.000000e-06 7.000000e-07 3.687508e-01 3.214340e-01 -4.244198e+00 1.926386e-01 -5.127635e-02 3.000000e+15 1.041060e+13 1.017403e+03 5.621721e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.170502e+01 0.000000e+00 5.176620e-10 0.000000e+00 320 0.000000e+00 8.000000e-07 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.460973e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.543520e-10 0.000000e+00 -2.048946e-08 321 9.043580e-08 8.000000e-07 -1.623041e+00 -4.230420e-01 -6.235990e+00 -1.183527e+00 -1.200000e+00 -1.970000e+17 6.471019e+02 1.969762e+17 1.608901e-02 -1.701400e+01 0.000000e+00 0.000000e+00 9.415091e-13 -1.539683e-10 9.823609e-09 -1.662692e-08 322 1.425859e-07 8.000000e-07 -1.622902e+00 -4.229690e-01 -6.235851e+00 -1.165069e+00 -1.200000e+00 -1.970000e+17 3.186847e+02 1.959215e+17 7.280946e-01 -4.614641e+02 0.000000e+00 0.000000e+00 9.748980e-13 -1.535565e-10 1.448438e-08 -1.298320e-08 323 1.726585e-07 8.000000e-07 -1.620760e+00 -4.218408e-01 -6.233709e+00 -1.143000e+00 -1.200000e+00 -1.970000e+17 1.474927e+02 1.803509e+17 1.165628e+01 -4.583183e+03 0.000000e+00 0.000000e+00 8.527608e-13 -1.533661e-10 1.469119e-08 -1.049830e-08 324 1.899999e-07 8.000000e-07 -1.608941e+00 -4.154983e-01 -6.221890e+00 -1.117855e+00 -1.200000e+00 -1.970000e+17 8.810499e+01 1.141993e+17 6.943274e+01 -1.791627e+04 0.000000e+00 0.000000e+00 8.684528e-13 -1.532763e-10 1.007690e-08 -9.348376e-09 325 2.000000e-07 8.000000e-07 -1.584623e+00 -4.013013e-01 -6.197572e+00 -1.089317e+00 -1.200000e+00 -1.970000e+17 7.484188e+01 4.459974e+16 1.668533e+02 -3.609905e+04 0.000000e+00 0.000000e+00 1.519458e-12 -1.532099e-10 4.655461e-09 -8.792472e-09 326 2.100000e-07 8.000000e-07 -1.536743e+00 -3.697817e-01 -6.149692e+00 -1.047838e+00 -1.200000e+00 3.000000e+15 7.095018e+01 5.184164e+15 3.076312e+02 -4.723984e+04 0.000000e+00 0.000000e+00 4.229251e-12 -1.530587e-10 1.371352e-09 -8.289351e-09 327 2.354138e-07 8.000000e-07 -1.420825e+00 -3.047152e-01 -6.033774e+00 -9.316103e-01 -1.200000e+00 3.000000e+15 7.010451e+01 5.864866e+13 7.037021e+02 -4.496863e+04 0.000000e+00 0.000000e+00 1.069381e-11 -1.521393e-10 1.176118e-09 -8.051510e-09 328 3.000000e-07 8.000000e-07 -1.140953e+00 -1.597022e-01 -5.753903e+00 -6.820473e-01 -1.200000e+00 3.000000e+15 2.262878e+02 1.171783e+09 1.671518e+03 -4.158686e+04 0.000000e+00 0.000000e+00 7.665734e-11 -2.808025e-10 1.679728e-09 -7.290805e-09 329 4.000000e-07 8.000000e-07 -7.521205e-01 2.575655e-02 -5.365070e+00 -3.085851e-01 -1.122506e+00 3.000000e+15 4.099760e+02 6.935010e+03 2.905882e+03 -3.594054e+04 0.000000e+00 0.000000e+00 2.401819e-10 -6.725673e-10 1.967303e-09 -5.591511e-09 330 5.000000e-07 8.000000e-07 -4.221427e-01 1.632638e-01 -5.035092e+00 1.213800e-02 -8.008433e-01 3.000000e+15 5.863501e+02 5.028311e+03 3.726664e+03 -2.994606e+04 0.000000e+00 0.000000e+00 4.322429e-10 -1.028779e-09 1.726665e-09 -3.901832e-09 331 6.000000e-07 8.000000e-07 -1.531992e-01 2.529667e-01 -4.766148e+00 1.351938e-01 -5.405056e-01 3.000000e+15 1.651229e+05 3.605113e+03 4.184670e+03 -2.382958e+04 0.000000e+00 0.000000e+00 1.705163e-07 -1.223584e-08 1.325312e-09 -2.472797e-09 332 7.000000e-07 8.000000e-07 5.444894e-02 2.984004e-01 -4.558500e+00 1.371164e-01 -3.436701e-01 3.000000e+15 4.701279e+08 2.373343e+03 4.388951e+03 -1.773845e+04 0.000000e+00 0.000000e+00 4.734522e-04 -1.271504e-05 9.144525e-10 -1.322159e-09 333 8.000000e-07 8.000000e-07 2.015698e-01 3.151939e-01 -4.411379e+00 1.379063e-01 -2.130005e-01 3.000000e+15 1.346819e+11 1.256382e+03 4.450020e+03 -1.173857e+04 0.000000e+00 0.000000e+00 1.327181e-01 -1.137718e-03 5.329901e-10 -5.740855e-10 334 9.000000e-07 8.000000e-07 2.892203e-01 3.202882e-01 -4.323729e+00 1.382053e-01 -1.393735e-01 3.000000e+15 3.945117e+12 7.305457e+02 4.453309e+03 -5.836068e+03 0.000000e+00 0.000000e+00 3.834555e+00 -6.338149e-03 3.298515e-10 -2.147992e-10 335 1.000000e-06 8.000000e-07 3.182911e-01 3.213728e-01 -4.294658e+00 1.382847e-01 -1.175414e-01 3.000000e+15 1.210220e+13 5.522057e+02 4.449491e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.170630e+01 0.000000e+00 2.528168e-10 0.000000e+00 336 0.000000e+00 9.000000e-07 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.329138e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.537798e-10 0.000000e+00 -1.318328e-08 337 9.043580e-08 9.000000e-07 -1.623041e+00 -4.230420e-01 -6.235990e+00 -1.183612e+00 -1.200000e+00 -1.970000e+17 6.492342e+02 1.969771e+17 9.186801e-03 -1.636709e+01 0.000000e+00 0.000000e+00 3.627142e-13 -1.536401e-10 4.506037e-09 -1.051720e-08 338 1.425859e-07 9.000000e-07 -1.622907e+00 -4.229692e-01 -6.235856e+00 -1.165272e+00 -1.200000e+00 -1.970000e+17 3.211340e+02 1.959624e+17 4.160735e-01 -4.439913e+02 0.000000e+00 0.000000e+00 4.465385e-13 -1.534746e-10 6.146503e-09 -8.649973e-09 339 1.726585e-07 9.000000e-07 -1.620846e+00 -4.218440e-01 -6.233796e+00 -1.143421e+00 -1.200000e+00 -1.970000e+17 1.494107e+02 1.809550e+17 6.667347e+00 -4.416040e+03 0.000000e+00 0.000000e+00 4.411042e-13 -1.533825e-10 6.792856e-09 -6.942198e-09 340 1.899999e-07 9.000000e-07 -1.609458e+00 -4.155178e-01 -6.222407e+00 -1.118601e+00 -1.200000e+00 -1.970000e+17 8.889084e+01 1.165029e+17 3.985174e+01 -1.736042e+04 0.000000e+00 0.000000e+00 4.716352e-13 -1.533321e-10 4.879763e-09 -5.848450e-09 341 2.000000e-07 9.000000e-07 -1.585873e+00 -4.013538e-01 -6.198822e+00 -1.090676e+00 -1.200000e+00 -1.970000e+17 7.515585e+01 4.680800e+16 9.665922e+01 -3.519624e+04 0.000000e+00 0.000000e+00 8.470777e-13 -1.532917e-10 2.416176e-09 -5.701641e-09 342 2.100000e-07 9.000000e-07 -1.539065e+00 -3.698934e-01 -6.152014e+00 -1.050237e+00 -1.200000e+00 3.000000e+15 7.116131e+01 5.671144e+15 1.800465e+02 -4.613228e+04 0.000000e+00 0.000000e+00 2.412385e-12 -1.531942e-10 7.266577e-10 -5.619419e-09 343 2.354138e-07 9.000000e-07 -1.426190e+00 -3.050316e-01 -6.039139e+00 -9.371721e-01 -1.200000e+00 3.000000e+15 7.063986e+01 7.216808e+13 4.174712e+02 -4.378086e+04 0.000000e+00 0.000000e+00 6.289970e-12 -1.525616e-10 5.845492e-10 -5.409989e-09 344 3.000000e-07 9.000000e-07 -1.153833e+00 -1.605817e-01 -5.766782e+00 -6.946175e-01 -1.200000e+00 3.000000e+15 2.236009e+02 1.927990e+09 1.006563e+03 -4.048946e+04 0.000000e+00 0.000000e+00 4.485689e-11 -2.787577e-10 8.030162e-10 -4.945980e-09 345 4.000000e-07 9.000000e-07 -7.749513e-01 2.430592e-02 -5.387900e+00 -3.316783e-01 -1.151916e+00 3.000000e+15 4.141573e+02 5.377465e+03 1.801937e+03 -3.508704e+04 0.000000e+00 0.000000e+00 1.530084e-10 -6.727447e-10 9.536515e-10 -3.850183e-09 346 5.000000e-07 9.000000e-07 -4.520918e-01 1.617758e-01 -5.065041e+00 -1.834379e-02 -8.399719e-01 3.000000e+15 5.985514e+02 3.526036e+03 2.396599e+03 -2.936767e+04 0.000000e+00 0.000000e+00 2.944815e-10 -1.039658e-09 8.713136e-10 -2.722799e-09 347 6.000000e-07 9.000000e-07 -1.875978e-01 2.519000e-01 -4.800547e+00 9.112061e-02 -5.839240e-01 3.000000e+15 2.400254e+05 2.543696e+03 2.796184e+03 -2.348577e+04 0.000000e+00 0.000000e+00 1.966151e-07 -1.674169e-08 6.920600e-10 -1.715172e-09 348 7.000000e-07 9.000000e-07 1.762349e-02 2.979009e-01 -4.595326e+00 9.295587e-02 -3.902774e-01 3.000000e+15 6.242842e+08 1.625957e+03 3.040571e+03 -1.756020e+04 0.000000e+00 0.000000e+00 5.070987e-04 -2.098750e-05 4.813140e-10 -8.569381e-10 349 8.000000e-07 9.000000e-07 1.636061e-01 3.150171e-01 -4.449343e+00 9.394411e-02 -2.652091e-01 3.000000e+15 1.698374e+11 7.243178e+02 3.177154e+03 -1.165923e+04 0.000000e+00 0.000000e+00 1.361106e-01 -2.322157e-03 2.594023e-10 -3.190508e-10 350 9.000000e-07 9.000000e-07 2.508080e-01 3.202279e-01 -4.362141e+00 9.443205e-02 -1.947422e-01 3.000000e+15 4.853753e+12 3.792504e+02 3.244986e+03 -5.807743e+03 0.000000e+00 0.000000e+00 3.848877e+00 -1.483638e-02 1.506575e-10 -1.098223e-10 351 1.000000e-06 9.000000e-07 2.797610e-01 3.213391e-01 -4.333188e+00 9.458773e-02 -1.734128e-01 3.000000e+15 1.477823e+13 2.824336e+02 3.266249e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.167080e+01 0.000000e+00 1.139734e-10 0.000000e+00 352 0.000000e+00 1.000000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.257806e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.535494e-10 0.000000e+00 -1.053001e-08 353 9.043580e-08 1.000000e-06 -1.623041e+00 -4.230421e-01 -6.235990e+00 -1.183647e+00 -1.200000e+00 -1.970000e+17 6.500921e+02 1.969776e+17 4.250600e-03 -1.601685e+01 0.000000e+00 0.000000e+00 1.093722e-13 -1.534600e-10 1.177231e-09 -8.926255e-09 354 1.425859e-07 1.000000e-06 -1.622910e+00 -4.229693e-01 -6.235859e+00 -1.165366e+00 -1.200000e+00 -1.970000e+17 3.222685e+02 1.959846e+17 1.926611e-01 -4.345245e+02 0.000000e+00 0.000000e+00 1.672925e-13 -1.533479e-10 1.222297e-09 -5.902669e-09 355 1.726585e-07 1.000000e-06 -1.620893e+00 -4.218449e-01 -6.233842e+00 -1.143633e+00 -1.200000e+00 -1.970000e+17 1.503669e+02 1.812831e+17 3.089868e+00 -4.325237e+03 0.000000e+00 0.000000e+00 1.860581e-13 -1.532794e-10 1.377210e-09 -4.234257e-09 356 1.899999e-07 1.000000e-06 -1.609738e+00 -4.155236e-01 -6.222687e+00 -1.118991e+00 -1.200000e+00 -1.970000e+17 8.926569e+01 1.177733e+17 1.850749e+01 -1.705569e+04 0.000000e+00 0.000000e+00 2.080030e-13 -1.532399e-10 1.057694e-09 -4.076983e-09 357 2.000000e-07 1.000000e-06 -1.586556e+00 -4.013692e-01 -6.199505e+00 -1.091398e+00 -1.200000e+00 -1.970000e+17 7.526981e+01 4.806103e+16 4.512260e+01 -3.469711e+04 0.000000e+00 0.000000e+00 3.822777e-13 -1.532076e-10 6.339209e-10 -4.164931e-09 358 2.100000e-07 1.000000e-06 -1.540344e+00 -3.699262e-01 -6.153293e+00 -1.051533e+00 -1.200000e+00 3.000000e+15 7.120714e+01 5.958586e+15 8.454319e+01 -4.551542e+04 0.000000e+00 0.000000e+00 1.106122e-12 -1.531282e-10 2.584719e-10 -4.173980e-09 359 2.354138e-07 1.000000e-06 -1.429174e+00 -3.051244e-01 -6.042123e+00 -9.402183e-01 -1.200000e+00 3.000000e+15 7.080888e+01 8.099462e+13 1.977044e+02 -4.311266e+04 0.000000e+00 0.000000e+00 2.927465e-12 -1.525988e-10 2.406826e-10 -4.095722e-09 360 3.000000e-07 1.000000e-06 -1.161085e+00 -1.608405e-01 -5.774034e+00 -7.014769e-01 -1.200000e+00 3.000000e+15 2.202322e+02 2.551971e+09 4.834533e+02 -3.985427e+04 0.000000e+00 0.000000e+00 2.066853e-11 -2.758580e-10 3.268846e-10 -3.762412e-09 361 4.000000e-07 1.000000e-06 -7.881592e-01 2.387426e-02 -5.401108e+00 -3.449030e-01 -1.167664e+00 3.000000e+15 4.144250e+02 4.874292e+03 8.987056e+02 -3.455050e+04 0.000000e+00 0.000000e+00 7.612295e-11 -6.685194e-10 3.991339e-10 -2.939837e-09 362 5.000000e-07 1.000000e-06 -4.700747e-01 1.613269e-01 -5.083024e+00 -3.675513e-02 -8.647327e-01 3.000000e+15 6.085497e+02 2.713158e+03 1.261611e+03 -2.895182e+04 0.000000e+00 0.000000e+00 1.629157e-10 -1.041215e-09 3.859893e-10 -2.079319e-09 363 6.000000e-07 1.000000e-06 -2.091229e-01 2.515734e-01 -4.822072e+00 5.785675e-02 -6.123658e-01 3.000000e+15 3.778916e+05 1.946806e+03 1.562898e+03 -2.318561e+04 0.000000e+00 0.000000e+00 2.322958e-07 -2.183643e-08 3.237465e-10 -1.285250e-09 364 7.000000e-07 1.000000e-06 -6.362473e-03 2.977459e-01 -4.619312e+00 5.938527e-02 -4.223021e-01 3.000000e+15 9.043181e+08 1.191595e+03 1.799994e+03 -1.735748e+04 0.000000e+00 0.000000e+00 5.573977e-04 -2.938677e-05 2.312971e-10 -5.848464e-10 365 8.000000e-07 1.000000e-06 1.380267e-01 3.149618e-01 -4.474922e+00 6.034347e-02 -3.056207e-01 3.000000e+15 2.315901e+11 4.082053e+02 1.972964e+03 -1.153415e+04 0.000000e+00 0.000000e+00 1.417388e-01 -3.406662e-03 1.143136e-10 -1.716220e-10 366 9.000000e-07 1.000000e-06 2.243206e-01 3.202089e-01 -4.388629e+00 6.087169e-02 -2.396009e-01 3.000000e+15 6.380307e+12 1.864009e+02 2.081350e+03 -5.746973e+03 0.000000e+00 0.000000e+00 3.874664e+00 -2.230676e-02 6.129533e-11 -5.275574e-11 367 1.000000e-06 1.000000e-06 2.529661e-01 3.213284e-01 -4.359983e+00 6.105136e-02 -2.189278e-01 3.000000e+15 1.917881e+13 1.369559e+02 2.120061e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.160787e+01 0.000000e+00 4.597713e-11 0.000000e+00 368 0.000000e+00 1.100000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.235135e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.535377e-10 0.000000e+00 -1.057986e-08 369 9.043580e-08 1.100000e-06 -1.623041e+00 -4.230420e-01 -6.235990e+00 -1.183648e+00 -1.200000e+00 -1.970000e+17 6.501351e+02 1.969777e+17 -1.779236e-04 -1.590536e+01 0.000000e+00 0.000000e+00 -1.362379e-13 -1.534050e-10 -2.534804e-09 -9.449598e-09 370 1.425859e-07 1.100000e-06 -1.622911e+00 -4.229692e-01 -6.235860e+00 -1.165383e+00 -1.200000e+00 -1.970000e+17 3.224673e+02 1.959916e+17 -7.814214e-03 -4.315062e+02 0.000000e+00 0.000000e+00 -9.998879e-14 -1.532498e-10 -3.524160e-09 -7.544923e-09 371 1.726585e-07 1.100000e-06 -1.620908e+00 -4.218440e-01 -6.233857e+00 -1.143686e+00 -1.200000e+00 -1.970000e+17 1.505885e+02 1.813878e+17 -1.215764e-01 -4.296215e+03 0.000000e+00 0.000000e+00 -5.596427e-14 -1.531651e-10 -3.361089e-09 -5.198515e-09 372 1.899999e-07 1.100000e-06 -1.609828e+00 -4.155178e-01 -6.222777e+00 -1.119100e+00 -1.200000e+00 -1.970000e+17 8.933268e+01 1.181822e+17 -7.085213e-01 -1.695777e+04 0.000000e+00 0.000000e+00 -3.863582e-14 -1.531200e-10 -2.271922e-09 -3.611526e-09 373 2.000000e-07 1.100000e-06 -1.586775e+00 -4.013538e-01 -6.199725e+00 -1.091613e+00 -1.200000e+00 -1.970000e+17 7.525656e+01 4.847005e+16 -1.688545e+00 -3.453589e+04 0.000000e+00 0.000000e+00 -4.628876e-14 -1.530849e-10 -1.076457e-09 -3.560982e-09 374 2.100000e-07 1.100000e-06 -1.540756e+00 -3.698934e-01 -6.153705e+00 -1.051929e+00 -1.200000e+00 3.000000e+15 7.116392e+01 6.054280e+15 -3.082233e+00 -4.531503e+04 0.000000e+00 0.000000e+00 -1.003052e-13 -1.530010e-10 -1.543174e-10 -3.842932e-09 375 2.354138e-07 1.100000e-06 -1.430144e+00 -3.050316e-01 -6.043093e+00 -9.411626e-01 -1.200000e+00 3.000000e+15 7.073931e+01 8.408907e+13 -6.523935e+00 -4.289191e+04 0.000000e+00 0.000000e+00 -2.251582e-13 -1.524453e-10 -1.769515e-11 -3.703225e-09 376 3.000000e-07 1.100000e-06 -1.163502e+00 -1.605817e-01 -5.776451e+00 -7.036412e-01 -1.200000e+00 3.000000e+15 2.180908e+02 2.801952e+09 -6.630304e+00 -3.962593e+04 0.000000e+00 0.000000e+00 -9.690116e-13 -2.738625e-10 -9.417578e-12 -3.391594e-09 377 4.000000e-07 1.100000e-06 -7.929254e-01 2.430592e-02 -5.405875e+00 -3.495078e-01 -1.172807e+00 3.000000e+15 4.118481e+02 4.803778e+03 4.782033e+01 -3.430889e+04 0.000000e+00 0.000000e+00 2.076887e-12 -6.630868e-10 1.894332e-11 -2.620108e-09 378 5.000000e-07 1.100000e-06 -4.773240e-01 1.617758e-01 -5.090273e+00 -4.448141e-02 -8.750997e-01 3.000000e+15 6.198755e+02 2.405060e+03 1.882415e+02 -2.870348e+04 0.000000e+00 0.000000e+00 3.293501e-11 -1.034425e-09 5.629544e-11 -1.822681e-09 379 6.000000e-07 1.100000e-06 -2.188558e-01 2.519000e-01 -4.831805e+00 3.396023e-02 -6.257328e-01 3.000000e+15 6.534224e+05 1.691617e+03 3.938008e+02 -2.294738e+04 0.000000e+00 0.000000e+00 2.814223e-07 -3.018378e-08 7.756156e-11 -1.092816e-09 380 7.000000e-07 1.100000e-06 -1.837637e-02 2.979009e-01 -4.631326e+00 3.518785e-02 -4.392323e-01 3.000000e+15 1.448435e+09 9.853209e+02 6.235412e+02 -1.715013e+04 0.000000e+00 0.000000e+00 6.289116e-04 -4.222916e-05 7.306250e-11 -4.525598e-10 381 8.000000e-07 1.100000e-06 1.241469e-01 3.150171e-01 -4.488802e+00 3.604970e-02 -3.322445e-01 3.000000e+15 3.464051e+11 2.493961e+02 8.332216e+02 -1.137787e+04 0.000000e+00 0.000000e+00 1.498999e-01 -4.897546e-03 3.706052e-11 -1.010714e-10 382 9.000000e-07 1.100000e-06 2.091811e-01 3.202279e-01 -4.403768e+00 3.656083e-02 -2.699857e-01 3.000000e+15 9.095782e+12 1.033857e+02 9.841085e+02 -5.660646e+03 0.000000e+00 0.000000e+00 3.912425e+00 -3.192029e-02 1.709143e-11 -2.858414e-11 383 1.000000e-06 1.100000e-06 2.373598e-01 3.213391e-01 -4.375589e+00 3.674218e-02 -2.499273e-01 3.000000e+15 2.685059e+13 7.552814e+01 1.041959e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.151588e+01 0.000000e+00 1.269939e-11 0.000000e+00 384 0.000000e+00 1.200000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.261740e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.538506e-10 0.000000e+00 -1.613567e-08 385 9.043580e-08 1.200000e-06 -1.623041e+00 -4.230420e-01 -6.235990e+00 -1.183602e+00 -1.200000e+00 -1.970000e+17 6.489673e+02 1.969775e+17 -5.300876e-03 -1.603557e+01 0.000000e+00 0.000000e+00 -6.919175e-13 -1.534809e-10 -7.995150e-09 -1.341052e-08 386 1.425859e-07 1.200000e-06 -1.622910e+00 -4.229690e-01 -6.235859e+00 -1.165300e+00 -1.200000e+00 -1.970000e+17 3.214449e+02 1.959834e+17 -2.395320e-01 -4.350151e+02 0.000000e+00 0.000000e+00 -5.921699e-13 -1.530897e-10 -1.074521e-08 -7.756139e-09 387 1.726585e-07 1.200000e-06 -1.620891e+00 -4.218408e-01 -6.233840e+00 -1.143553e+00 -1.200000e+00 -1.970000e+17 1.499188e+02 1.812661e+17 -3.830571e+00 -4.329807e+03 0.000000e+00 0.000000e+00 -4.274364e-13 -1.529148e-10 -1.045986e-08 -5.077193e-09 388 1.899999e-07 1.200000e-06 -1.609724e+00 -4.154983e-01 -6.222673e+00 -1.118898e+00 -1.200000e+00 -1.970000e+17 8.899506e+01 1.177088e+17 -2.288109e+01 -1.707060e+04 0.000000e+00 0.000000e+00 -3.794828e-13 -1.528365e-10 -7.200948e-09 -5.435106e-09 389 2.000000e-07 1.200000e-06 -1.586522e+00 -4.013013e-01 -6.199472e+00 -1.091284e+00 -1.200000e+00 -1.970000e+17 7.503693e+01 4.799832e+16 -5.562928e+01 -3.472085e+04 0.000000e+00 0.000000e+00 -5.965647e-13 -1.527825e-10 -3.327475e-09 -5.028236e-09 390 2.100000e-07 1.200000e-06 -1.540282e+00 -3.697817e-01 -6.153231e+00 -1.051379e+00 -1.200000e+00 3.000000e+15 7.095225e+01 5.944401e+15 -1.039035e+02 -4.554307e+04 0.000000e+00 0.000000e+00 -1.583633e-12 -1.526633e-10 -6.947494e-10 -4.295172e-09 391 2.354138e-07 1.200000e-06 -1.429044e+00 -3.047152e-01 -6.041993e+00 -9.399072e-01 -1.200000e+00 3.000000e+15 7.031629e+01 8.058705e+13 -2.407962e+02 -4.313219e+04 0.000000e+00 0.000000e+00 -3.955125e-12 -1.519168e-10 -3.504894e-10 -4.212267e-09 392 3.000000e-07 1.200000e-06 -1.160952e+00 -1.597022e-01 -5.773901e+00 -7.010352e-01 -1.200000e+00 3.000000e+15 2.176159e+02 2.538921e+09 -5.630807e+02 -3.981173e+04 0.000000e+00 0.000000e+00 -2.555592e-11 -2.729943e-10 -4.282507e-10 -3.779200e-09 393 4.000000e-07 1.200000e-06 -7.891156e-01 2.575655e-02 -5.402065e+00 -3.453499e-01 -1.168684e+00 3.000000e+15 4.063417e+02 4.862373e+03 -8.890355e+02 -3.435563e+04 0.000000e+00 0.000000e+00 -7.799455e-11 -6.568295e-10 -4.185440e-10 -2.816648e-09 394 5.000000e-07 1.200000e-06 -4.738395e-01 1.632638e-01 -5.086789e+00 -4.200837e-02 -8.703542e-01 3.000000e+15 6.445974e+02 2.525222e+03 -9.502662e+02 -2.860584e+04 0.000000e+00 0.000000e+00 -1.014293e-10 -1.019116e-09 -2.863478e-10 -1.885884e-09 395 6.000000e-07 1.200000e-06 -2.169989e-01 2.529667e-01 -4.829948e+00 1.799787e-02 -6.235052e-01 3.000000e+15 1.301375e+06 1.716038e+03 -7.994772e+02 -2.275031e+04 0.000000e+00 0.000000e+00 3.567577e-07 -4.801879e-08 -1.549766e-10 -1.092517e-09 396 7.000000e-07 1.200000e-06 -1.883330e-02 2.984004e-01 -4.631782e+00 1.898403e-02 -4.401595e-01 3.000000e+15 2.662629e+09 9.675674e+02 -5.328527e+02 -1.691806e+04 0.000000e+00 0.000000e+00 7.384747e-04 -6.748844e-05 -6.203683e-11 -4.373060e-10 397 8.000000e-07 1.200000e-06 1.213623e-01 3.151939e-01 -4.491587e+00 1.973589e-02 -3.369611e-01 3.000000e+15 5.844639e+11 2.314458e+02 -2.480003e+02 -1.117359e+04 0.000000e+00 0.000000e+00 1.621080e-01 -7.529896e-03 -2.087287e-11 -9.691057e-11 398 9.000000e-07 1.200000e-06 2.046384e-01 3.202882e-01 -4.408311e+00 2.020588e-02 -2.719650e-01 3.000000e+15 1.436102e+13 1.141566e+02 -2.626803e+01 -5.538236e+03 0.000000e+00 0.000000e+00 3.967305e+00 -4.759515e-02 -1.564603e-11 -3.173775e-11 399 1.000000e-06 1.200000e-06 2.321270e-01 3.213728e-01 -4.380822e+00 2.037777e-02 -2.517230e-01 3.000000e+15 4.129223e+13 8.626253e+01 6.245529e+01 0.000000e+00 0.000000e+00 0.000000e+00 1.138149e+01 0.000000e+00 -1.226888e-11 0.000000e+00 400 0.000000e+00 1.300000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.352365e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.550681e-10 0.000000e+00 -2.826649e-08 401 9.043580e-08 1.300000e-06 -1.623041e+00 -4.230420e-01 -6.235990e+00 -1.183420e+00 -1.200000e+00 -1.970000e+17 6.444248e+02 1.969769e+17 -1.302974e-02 -1.647940e+01 0.000000e+00 0.000000e+00 -2.587884e-12 -1.537233e-10 -1.712995e-08 -2.270277e-08 402 1.425859e-07 1.300000e-06 -1.622906e+00 -4.229686e-01 -6.235855e+00 -1.164988e+00 -1.200000e+00 -1.970000e+17 3.176372e+02 1.959553e+17 -5.881860e-01 -4.469823e+02 0.000000e+00 0.000000e+00 -1.995562e-12 -1.523939e-10 -2.315563e-08 -1.372064e-08 403 1.726585e-07 1.300000e-06 -1.620832e+00 -4.218340e-01 -6.233781e+00 -1.143074e+00 -1.200000e+00 -1.970000e+17 1.475008e+02 1.808513e+17 -9.397668e+00 -4.444302e+03 0.000000e+00 0.000000e+00 -1.297859e-12 -1.518852e-10 -2.351228e-08 -9.480715e-09 404 1.899999e-07 1.300000e-06 -1.609370e+00 -4.154561e-01 -6.222319e+00 -1.118185e+00 -1.200000e+00 -1.970000e+17 8.776629e+01 1.161095e+17 -5.598163e+01 -1.745354e+04 0.000000e+00 0.000000e+00 -1.074900e-12 -1.516921e-10 -1.588477e-08 -7.913229e-09 405 2.000000e-07 1.300000e-06 -1.585663e+00 -4.011884e-01 -6.198612e+00 -1.090141e+00 -1.200000e+00 -1.970000e+17 7.421869e+01 4.642925e+16 -1.351361e+02 -3.534611e+04 0.000000e+00 0.000000e+00 -1.595944e-12 -1.515766e-10 -7.082794e-09 -6.938765e-09 406 2.100000e-07 1.300000e-06 -1.538678e+00 -3.695413e-01 -6.151627e+00 -1.049490e+00 -1.200000e+00 3.000000e+15 7.017614e+01 5.586875e+15 -2.504082e+02 -4.631209e+04 0.000000e+00 0.000000e+00 -4.041874e-12 -1.513503e-10 -1.613278e-09 -6.493293e-09 407 2.354138e-07 1.300000e-06 -1.425328e+00 -3.040369e-01 -6.038277e+00 -9.357034e-01 -1.200000e+00 3.000000e+15 6.900170e+01 6.980294e+13 -5.742400e+02 -4.394683e+04 0.000000e+00 0.000000e+00 -9.475680e-12 -1.500940e-10 -9.916771e-10 -6.199704e-09 408 3.000000e-07 1.300000e-06 -1.152240e+00 -1.578337e-01 -5.765189e+00 -6.922888e-01 -1.200000e+00 3.000000e+15 2.173261e+02 1.812858e+09 -1.329810e+03 -4.048812e+04 0.000000e+00 0.000000e+00 -6.020181e-11 -2.713348e-10 -1.270542e-09 -5.406670e-09 409 4.000000e-07 1.300000e-06 -7.751447e-01 2.875994e-02 -5.388094e+00 -3.307486e-01 -1.151196e+00 3.000000e+15 3.965584e+02 5.570676e+03 -2.090615e+03 -3.469607e+04 0.000000e+00 0.000000e+00 -1.734076e-10 -6.467261e-10 -1.241289e-09 -3.814900e-09 410 5.000000e-07 1.300000e-06 -4.583187e-01 1.662549e-01 -5.071268e+00 -2.987526e-02 -8.480517e-01 3.000000e+15 7.348056e+02 3.282264e+03 -2.300794e+03 -2.861392e+04 0.000000e+00 0.000000e+00 -2.438814e-10 -9.946348e-10 -8.574838e-10 -2.403723e-09 411 6.000000e-07 1.300000e-06 -2.028662e-01 2.550466e-01 -4.815815e+00 8.407811e-03 -6.039448e-01 3.000000e+15 3.256413e+06 2.116731e+03 -2.108591e+03 -2.252997e+04 0.000000e+00 0.000000e+00 4.954484e-07 -9.349122e-08 -4.968276e-10 -1.336066e-09 412 7.000000e-07 1.300000e-06 -7.719320e-03 2.993482e-01 -4.620668e+00 9.179371e-03 -4.239801e-01 3.000000e+15 5.978092e+09 1.176889e+03 -1.707478e+03 -1.659865e+04 0.000000e+00 0.000000e+00 9.304479e-04 -1.247659e-04 -2.417927e-10 -5.618932e-10 413 8.000000e-07 1.300000e-06 1.291069e-01 3.155230e-01 -4.483842e+00 9.802127e-03 -3.155748e-01 3.000000e+15 1.157714e+12 3.922025e+02 -1.266730e+03 -1.087129e+04 0.000000e+00 0.000000e+00 1.819698e-01 -1.271610e-02 -1.099671e-10 -1.733397e-10 414 9.000000e-07 1.300000e-06 2.097064e-01 3.203987e-01 -4.403243e+00 1.020842e-02 -2.474088e-01 3.000000e+15 2.571307e+13 2.425128e+02 -9.164860e+02 -5.350190e+03 0.000000e+00 0.000000e+00 4.050050e+00 -7.525702e-02 -7.006773e-11 -6.748884e-11 415 1.000000e-06 1.300000e-06 2.361107e-01 3.214340e-01 -4.376838e+00 1.036053e-02 -2.271315e-01 3.000000e+15 7.095173e+13 1.913619e+02 -7.737056e+02 0.000000e+00 0.000000e+00 0.000000e+00 1.117589e+01 0.000000e+00 -5.547790e-11 0.000000e+00 416 0.000000e+00 1.400000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -0.000000e+00 -3.549895e-01 0.000000e+00 0.000000e+00 0.000000e+00 -1.595742e-10 0.000000e+00 -5.401813e-08 417 9.043580e-08 1.400000e-06 -1.623040e+00 -4.230420e-01 -6.235990e+00 -1.182736e+00 -1.200000e+00 -1.970000e+17 6.276063e+02 1.969755e+17 -2.875038e-02 -1.744513e+01 0.000000e+00 0.000000e+00 -1.009902e-11 -1.541263e-10 -3.755111e-08 -4.216575e-08 418 1.425859e-07 1.400000e-06 -1.622898e+00 -4.229677e-01 -6.235847e+00 -1.163939e+00 -1.200000e+00 -1.970000e+17 3.051108e+02 1.958943e+17 -1.280839e+00 -4.729817e+02 0.000000e+00 0.000000e+00 -6.668193e-12 -1.491020e-10 -4.714852e-08 -2.551736e-08 419 1.726585e-07 1.400000e-06 -1.620703e+00 -4.218199e-01 -6.233652e+00 -1.141643e+00 -1.200000e+00 -1.970000e+17 1.402593e+02 1.799536e+17 -2.037696e+01 -4.691992e+03 0.000000e+00 0.000000e+00 -3.801612e-12 -1.474527e-10 -4.668868e-08 -1.641164e-08 420 1.899999e-07 1.400000e-06 -1.608604e+00 -4.153696e-01 -6.221553e+00 -1.116244e+00 -1.200000e+00 -1.970000e+17 8.387018e+01 1.127220e+17 -1.204388e+02 -1.827117e+04 0.000000e+00 0.000000e+00 -2.878926e-12 -1.468989e-10 -3.035537e-08 -1.360702e-08 421 2.000000e-07 1.400000e-06 -1.583820e+00 -4.009574e-01 -6.196769e+00 -1.087269e+00 -1.200000e+00 -1.970000e+17 7.132567e+01 4.323582e+16 -2.857625e+02 -3.666511e+04 0.000000e+00 0.000000e+00 -3.919322e-12 -1.466017e-10 -1.291508e-08 -1.230626e-08 422 2.100000e-07 1.400000e-06 -1.535274e+00 -3.690508e-01 -6.148223e+00 -1.045028e+00 -1.200000e+00 3.000000e+15 6.736456e+01 4.897950e+15 -5.198951e+02 -4.791713e+04 0.000000e+00 0.000000e+00 -9.114731e-12 -1.460886e-10 -3.100466e-09 -1.137306e-08 423 2.354138e-07 1.400000e-06 -1.417559e+00 -3.026600e-01 -6.030508e+00 -9.264337e-01 -1.200000e+00 3.000000e+15 6.511221e+01 5.169160e+13 -1.161968e+03 -4.562172e+04 0.000000e+00 0.000000e+00 -1.885644e-11 -1.437031e-10 -2.375256e-09 -1.086841e-08 424 3.000000e-07 1.400000e-06 -1.134356e+00 -1.541098e-01 -5.747305e+00 -6.739013e-01 -1.200000e+00 3.000000e+15 2.131386e+02 9.079612e+08 -2.593615e+03 -4.183042e+04 0.000000e+00 0.000000e+00 -1.137599e-10 -2.632869e-10 -3.218549e-09 -9.228720e-09 425 4.000000e-07 1.400000e-06 -7.473033e-01 3.446330e-02 -5.360252e+00 -3.018795e-01 -1.113829e+00 3.000000e+15 3.811093e+02 8.050984e+03 -3.842822e+03 -3.532662e+04 0.000000e+00 0.000000e+00 -2.906206e-10 -6.268443e-10 -3.031799e-09 -6.172252e-09 426 5.000000e-07 1.400000e-06 -4.278237e-01 1.716601e-01 -5.040773e+00 -1.238122e-02 -8.061443e-01 3.000000e+15 1.214723e+03 5.102728e+03 -4.053702e+03 -2.862381e+04 0.000000e+00 0.000000e+00 -3.879366e-10 -9.657276e-10 -2.024069e-09 -3.678274e-09 427 6.000000e-07 1.400000e-06 -1.748271e-01 2.586235e-01 -4.787776e+00 3.429909e-03 -5.656411e-01 3.000000e+15 1.167185e+07 3.147907e+03 -3.626614e+03 -2.215700e+04 0.000000e+00 0.000000e+00 8.230164e-07 -2.368411e-07 -1.153657e-09 -1.974533e-09 428 7.000000e-07 1.400000e-06 1.531626e-02 3.009108e-01 -4.597633e+00 3.978240e-03 -3.906335e-01 3.000000e+15 1.781127e+10 1.753366e+03 -2.921750e+03 -1.607620e+04 0.000000e+00 0.000000e+00 1.329981e-03 -2.754258e-04 -5.736718e-10 -9.054930e-10 429 8.000000e-07 1.400000e-06 1.466968e-01 3.160507e-01 -4.466252e+00 4.444956e-03 -2.779908e-01 3.000000e+15 2.811350e+12 8.496460e+02 -2.196676e+03 -1.038260e+04 0.000000e+00 0.000000e+00 2.176131e-01 -2.372698e-02 -3.008867e-10 -3.778351e-10 430 9.000000e-07 1.400000e-06 2.229682e-01 3.205721e-01 -4.389981e+00 4.764676e-03 -2.115955e-01 3.000000e+15 5.299616e+13 5.799697e+02 -1.629118e+03 -5.045212e+03 0.000000e+00 0.000000e+00 4.177921e+00 -1.247006e-01 -1.924547e-10 -1.568891e-10 431 1.000000e-06 1.400000e-06 2.476011e-01 3.215285e-01 -4.365348e+00 4.886856e-03 -1.920432e-01 3.000000e+15 1.367139e+14 4.765352e+02 -1.398097e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.084806e+01 0.000000e+00 -1.566076e-10 0.000000e+00 432 0.000000e+00 1.500000e-06 -1.623044e+00 -4.230437e-01 -6.235993e+00 -1.200000e+00 -1.200000e+00 -1.970000e+17 1.223266e+03 1.970000e+17 -3.024162e-02 -3.988183e-01 0.000000e+00 0.000000e+00 -9.250709e-11 -1.774026e-10 -1.020681e-07 -1.113208e-07 433 9.043580e-08 1.500000e-06 -1.623040e+00 -4.230420e-01 -6.235989e+00 -1.179836e+00 -1.200000e+00 -1.970000e+17 5.610532e+02 1.969725e+17 -1.078127e-01 -1.954826e+01 0.000000e+00 0.000000e+00 -4.257884e-11 -1.534772e-10 -9.104443e-08 -7.697833e-08 434 1.425859e-07 1.500000e-06 -1.622881e+00 -4.229658e-01 -6.235830e+00 -1.160068e+00 -1.200000e+00 -1.970000e+17 2.628694e+02 1.957613e+17 -3.366695e+00 -5.292892e+02 0.000000e+00 0.000000e+00 -2.071899e-11 -1.342359e-10 -8.988082e-08 -4.228077e-08 435 1.726585e-07 1.500000e-06 -1.620424e+00 -4.217892e-01 -6.233373e+00 -1.136943e+00 -1.200000e+00 -1.970000e+17 1.182213e+02 1.780240e+17 -5.171212e+01 -5.222695e+03 0.000000e+00 0.000000e+00 -1.024076e-11 -1.297234e-10 -8.300360e-08 -2.821183e-08 436 1.899999e-07 1.500000e-06 -1.606961e+00 -4.151819e-01 -6.219910e+00 -1.110465e+00 -1.200000e+00 -1.970000e+17 7.147466e+01 1.057843e+17 -2.972429e+02 -1.997274e+04 0.000000e+00 0.000000e+00 -7.288865e-12 -1.283959e-10 -4.913822e-08 -2.230762e-08 437 2.000000e-07 1.500000e-06 -1.579948e+00 -4.004578e-01 -6.192897e+00 -1.079527e+00 -1.200000e+00 -1.970000e+17 6.141347e+01 3.722416e+16 -6.738355e+02 -3.934066e+04 0.000000e+00 0.000000e+00 -9.215115e-12 -1.277227e-10 -1.927079e-08 -2.064861e-08 438 2.100000e-07 1.500000e-06 -1.528280e+00 -3.679960e-01 -6.141229e+00 -1.034068e+00 -1.200000e+00 3.000000e+15 5.778809e+01 3.737439e+15 -1.173972e+03 -5.109930e+04 0.000000e+00 0.000000e+00 -1.930459e-11 -1.266875e-10 -5.425149e-09 -2.042605e-08 439 2.354138e-07 1.500000e-06 -1.402089e+00 -2.997364e-01 -6.015038e+00 -9.063198e-01 -1.200000e+00 3.000000e+15 5.441126e+01 2.842193e+13 -2.470200e+03 -4.882480e+04 0.000000e+00 0.000000e+00 -3.351059e-11 -1.228099e-10 -5.556228e-09 -1.948835e-08 440 3.000000e-07 1.500000e-06 -1.100368e+00 -1.465093e-01 -5.713317e+00 -6.382620e-01 -1.199998e+00 3.000000e+15 1.999567e+02 2.439987e+08 -5.033023e+03 -4.416214e+04 0.000000e+00 0.000000e+00 -1.913601e-10 -2.389636e-10 -7.506757e-09 -1.600932e-08 441 4.000000e-07 1.500000e-06 -6.982882e-01 4.514441e-02 -5.311237e+00 -2.515785e-01 -1.052520e+00 3.000000e+15 3.626254e+02 1.295025e+04 -6.633357e+03 -3.615616e+04 0.000000e+00 0.000000e+00 -4.253804e-10 -5.941293e-10 -6.588746e-09 -1.028955e-08 442 5.000000e-07 1.500000e-06 -3.772447e-01 1.810350e-01 -4.990194e+00 -1.561675e-03 -7.427852e-01 3.000000e+15 5.650560e+03 8.363680e+03 -6.444577e+03 -2.839771e+04 0.000000e+00 0.000000e+00 -4.826414e-10 -9.738413e-10 -4.295567e-09 -6.007025e-09 443 6.000000e-07 1.500000e-06 -1.303339e-01 2.643887e-01 -4.743283e+00 1.262827e-03 -5.084474e-01 3.000000e+15 7.089702e+07 5.143763e+03 -5.422414e+03 -2.139802e+04 0.000000e+00 0.000000e+00 1.929036e-06 -8.719706e-07 -2.436029e-09 -3.209263e-09 444 7.000000e-07 1.500000e-06 5.071568e-02 3.032848e-01 -4.562233e+00 1.598352e-03 -3.417874e-01 3.000000e+15 7.674683e+10 2.948902e+03 -4.156287e+03 -1.516872e+04 0.000000e+00 0.000000e+00 2.368402e-03 -7.652108e-04 -1.246874e-09 -1.589534e-09 445 8.000000e-07 1.500000e-06 1.730404e-01 3.168241e-01 -4.439909e+00 1.906468e-03 -2.321049e-01 3.000000e+15 8.587824e+12 1.808755e+03 -2.974852e+03 -9.578655e+03 0.000000e+00 0.000000e+00 2.883492e-01 -4.908808e-02 -6.984537e-10 -7.817592e-10 446 9.000000e-07 1.500000e-06 2.422888e-01 3.208195e-01 -4.370660e+00 2.132449e-03 -1.709830e-01 3.000000e+15 1.238403e+14 1.321067e+03 -2.081097e+03 -4.551611e+03 0.000000e+00 0.000000e+00 4.370788e+00 -2.117176e-01 -4.568230e-10 -3.354031e-10 447 1.000000e-06 1.500000e-06 2.640726e-01 3.216611e-01 -4.348877e+00 2.220335e-03 -1.529956e-01 3.000000e+15 2.865276e+14 1.140716e+03 -1.727156e+03 0.000000e+00 0.000000e+00 0.000000e+00 1.031877e+01 0.000000e+00 -3.841208e-10 0.000000e+00 448 0.000000e+00 1.600000e-06 -1.623043e+00 -4.230436e-01 -6.235992e+00 -1.174673e+00 -1.200000e+00 -1.970000e+17 4.594781e+02 1.969954e+17 -3.040772e+00 0.000000e+00 0.000000e+00 0.000000e+00 -1.306776e-10 0.000000e+00 -1.717170e-07 0.000000e+00 449 9.043580e-08 1.600000e-06 -1.623038e+00 -4.230418e-01 -6.235987e+00 -1.161494e+00 -1.200000e+00 -1.970000e+17 2.760809e+02 1.969591e+17 -4.240451e+00 -2.543484e+01 0.000000e+00 0.000000e+00 -5.687784e-11 -6.013391e-11 -1.281916e-07 -3.189598e-08 450 1.425859e-07 1.600000e-06 -1.622831e+00 -4.229607e-01 -6.235780e+00 -1.142708e+00 -1.200000e+00 -1.970000e+17 1.346146e+02 1.953849e+17 -2.347856e+01 -6.814818e+02 0.000000e+00 0.000000e+00 -2.697328e-11 -6.865677e-11 -1.190337e-07 -3.275448e-08 451 1.726585e-07 1.600000e-06 -1.619669e+00 -4.217101e-01 -6.232618e+00 -1.118516e+00 -1.200000e+00 -1.970000e+17 5.969945e+01 1.728997e+17 -2.437587e+02 -6.605623e+03 0.000000e+00 0.000000e+00 -1.330068e-11 -7.036831e-11 -1.026679e-07 -3.114177e-08 452 1.899999e-07 1.600000e-06 -1.602659e+00 -4.147039e-01 -6.215609e+00 -1.089675e+00 -1.200000e+00 -1.970000e+17 3.778222e+01 8.957496e+16 -1.183988e+03 -2.408391e+04 0.000000e+00 0.000000e+00 -1.064950e-11 -7.058250e-11 -5.129547e-08 -3.270951e-08 453 2.000000e-07 1.600000e-06 -1.570343e+00 -3.992011e-01 -6.183292e+00 -1.054216e+00 -1.200000e+00 -1.970000e+17 3.345953e+01 2.567743e+16 -2.285442e+03 -4.543236e+04 0.000000e+00 0.000000e+00 -1.425020e-11 -7.041636e-11 -2.035272e-08 -3.408496e-08 454 2.100000e-07 1.600000e-06 -1.511794e+00 -3.653819e-01 -6.124744e+00 -1.002234e+00 -1.200000e+00 3.000000e+15 3.192359e+01 1.975891e+15 -3.527948e+03 -5.797584e+04 0.000000e+00 0.000000e+00 -2.859005e-11 -7.001992e-11 -1.053491e-08 -3.372495e-08 455 2.354138e-07 1.600000e-06 -1.368155e+00 -2.927213e-01 -5.981104e+00 -8.581864e-01 -1.200000e+00 3.000000e+15 3.142381e+01 7.653507e+12 -6.328972e+03 -5.518316e+04 0.000000e+00 0.000000e+00 -4.411973e-11 -6.899498e-11 -1.322638e-08 -3.138943e-08 456 3.000000e-07 1.600000e-06 -1.033695e+00 -1.299589e-01 -5.646645e+00 -5.690915e-01 -1.199964e+00 3.000000e+15 1.815470e+02 1.855446e+07 -1.034963e+04 -4.790828e+04 0.000000e+00 0.000000e+00 -2.779795e-10 -1.940063e-10 -1.534261e-08 -2.455021e-08 457 4.000000e-07 1.600000e-06 -6.146362e-01 6.519043e-02 -5.227585e+00 -1.672175e-01 -9.586314e-01 3.000000e+15 3.528203e+02 1.923852e+04 -1.121300e+04 -3.673817e+04 0.000000e+00 0.000000e+00 -5.581551e-10 -5.635042e-10 -1.241717e-08 -1.566166e-08 458 5.000000e-07 1.600000e-06 -2.989321e-01 1.967423e-01 -4.911881e+00 1.814414e-04 -6.530925e-01 3.000000e+15 1.090927e+05 1.298627e+04 -9.668837e+03 -2.741287e+04 0.000000e+00 0.000000e+00 3.545003e-11 -1.517168e-09 -8.097594e-09 -9.365679e-09 459 6.000000e-07 1.600000e-06 -6.637879e-02 2.731004e-01 -4.679328e+00 4.536905e-04 -4.318718e-01 3.000000e+15 8.671756e+08 8.379062e+03 -7.462180e+03 -1.986871e+04 0.000000e+00 0.000000e+00 8.376283e-06 -5.579229e-06 -4.660003e-09 -5.194135e-09 460 7.000000e-07 1.600000e-06 9.844201e-02 3.066085e-01 -4.514507e+00 6.332127e-04 -2.793832e-01 3.000000e+15 5.042612e+11 5.201402e+03 -5.306508e+03 -1.362863e+04 0.000000e+00 0.000000e+00 5.976560e-03 -2.855847e-03 -2.501372e-09 -2.757545e-09 461 8.000000e-07 1.600000e-06 2.061939e-01 3.178619e-01 -4.406755e+00 8.169674e-04 -1.810753e-01 3.000000e+15 3.227522e+13 3.610310e+03 -3.488134e+03 -8.307405e+03 0.000000e+00 0.000000e+00 4.416340e-01 -1.114259e-01 -1.440124e-09 -1.458983e-09 462 9.000000e-07 1.600000e-06 2.645901e-01 3.211422e-01 -4.348359e+00 9.640313e-04 -1.286094e-01 3.000000e+15 3.068675e+14 2.870555e+03 -2.189587e+03 -3.797515e+03 0.000000e+00 0.000000e+00 4.627159e+00 -3.584523e-01 -9.743556e-10 -6.444153e-10 463 1.000000e-06 1.600000e-06 2.821442e-01 3.218311e-01 -4.330805e+00 1.021847e-03 -1.132861e-01 3.000000e+15 6.035827e+14 2.633346e+03 -1.709369e+03 0.000000e+00 0.000000e+00 0.000000e+00 9.492234e+00 0.000000e+00 -8.462276e-10 0.000000e+00 464 0.000000e+00 1.700000e-06 -1.622983e+00 -4.230344e-01 -6.235932e+00 -1.144786e+00 -1.200000e+00 -1.970000e+17 1.450176e+02 1.965373e+17 -3.604377e+02 0.000000e+00 0.000000e+00 0.000000e+00 -6.061523e-11 0.000000e+00 -1.218500e-07 0.000000e+00 465 9.043580e-08 1.700000e-06 -1.622955e+00 -4.230314e-01 -6.235904e+00 -1.133001e+00 -1.200000e+00 -1.970000e+17 9.204663e+01 1.963277e+17 -4.571401e+02 -6.731378e+01 0.000000e+00 0.000000e+00 -3.792463e-11 -2.036831e-11 -1.155981e-07 -2.281724e-08 466 1.425859e-07 1.700000e-06 -1.622411e+00 -4.229271e-01 -6.235360e+00 -1.112148e+00 -1.200000e+00 -1.970000e+17 4.197522e+01 1.922393e+17 -1.075241e+03 -1.485452e+03 0.000000e+00 0.000000e+00 -1.992560e-11 -2.540513e-11 -1.111460e-07 -3.385122e-08 467 1.726585e-07 1.700000e-06 -1.615549e+00 -4.213842e-01 -6.228498e+00 -1.082227e+00 -1.200000e+00 -1.970000e+17 1.721067e+01 1.474409e+17 -4.305830e+03 -1.263620e+04 0.000000e+00 0.000000e+00 -1.213330e-11 -2.616420e-11 -7.844094e-08 -4.441598e-08 468 1.899999e-07 1.700000e-06 -1.583282e+00 -4.129061e-01 -6.196231e+00 -1.041864e+00 -1.200000e+00 -1.970000e+17 1.258531e+01 4.234539e+16 -1.022042e+04 -3.791065e+04 0.000000e+00 0.000000e+00 -1.363599e-11 -2.563471e-11 -3.967180e-08 -4.913849e-08 469 2.000000e-07 1.700000e-06 -1.534239e+00 -3.947181e-01 -6.147188e+00 -9.910660e-01 -1.200000e+00 -1.970000e+17 1.175959e+01 6.357874e+15 -1.366028e+04 -6.278015e+04 0.000000e+00 0.000000e+00 -1.706993e-11 -2.522067e-11 -2.804221e-08 -4.866568e-08 470 2.100000e-07 1.700000e-06 -1.457721e+00 -3.565405e-01 -6.070670e+00 -9.233996e-01 -1.200000e+00 3.000000e+15 1.225579e+01 2.442273e+14 -1.650903e+04 -7.515685e+04 0.000000e+00 0.000000e+00 -2.635084e-11 -2.556111e-11 -2.568798e-08 -4.656973e-08 471 2.354138e-07 1.700000e-06 -1.275509e+00 -2.713860e-01 -5.888458e+00 -7.540534e-01 -1.200000e+00 3.000000e+15 2.015445e+01 2.129191e+11 -2.086822e+04 -6.815934e+04 0.000000e+00 0.000000e+00 -4.299769e-11 -3.160789e-11 -2.778683e-08 -4.133393e-08 472 3.000000e-07 1.700000e-06 -8.933753e-01 -9.074180e-02 -5.506324e+00 -4.284001e-01 -1.191430e+00 3.000000e+15 1.789596e+02 1.136496e+05 -2.218183e+04 -5.240448e+04 0.000000e+00 0.000000e+00 -3.503445e-10 -1.771359e-10 -2.612991e-08 -3.148557e-08 473 4.000000e-07 1.700000e-06 -4.740281e-01 1.024369e-01 -5.086977e+00 -3.489401e-02 -8.110874e-01 3.000000e+15 4.860285e+02 2.515564e+04 -1.820019e+04 -3.547537e+04 0.000000e+00 0.000000e+00 -6.754476e-10 -5.657518e-10 -2.015284e-08 -2.090337e-08 474 5.000000e-07 1.700000e-06 -1.838679e-01 2.216018e-01 -4.796817e+00 9.814373e-05 -5.289178e-01 3.000000e+15 9.360011e+06 1.846985e+04 -1.355559e+04 -2.464689e+04 0.000000e+00 0.000000e+00 2.370161e-08 -2.410897e-08 -1.348551e-08 -1.312775e-08 475 6.000000e-07 1.700000e-06 1.890967e-02 2.851089e-01 -4.594039e+00 1.652239e-04 -3.354916e-01 3.000000e+15 2.371695e+10 1.286592e+04 -9.450977e+03 -1.703569e+04 0.000000e+00 0.000000e+00 8.595802e-05 -7.205266e-05 -8.012589e-09 -7.695840e-09 476 7.000000e-07 1.700000e-06 1.568458e-01 3.107953e-01 -4.456103e+00 2.547324e-04 -2.070189e-01 3.000000e+15 4.894290e+12 8.923514e+03 -6.123157e+03 -1.119467e+04 0.000000e+00 0.000000e+00 2.288896e-02 -1.421177e-02 -4.512872e-09 -4.357379e-09 477 8.000000e-07 1.700000e-06 2.428031e-01 3.191130e-01 -4.370146e+00 3.587192e-04 -1.279674e-01 3.000000e+15 1.352948e+14 6.832487e+03 -3.579574e+03 -6.461734e+03 0.000000e+00 0.000000e+00 7.779631e-01 -2.588832e-01 -2.665639e-09 -2.396508e-09 478 9.000000e-07 1.700000e-06 2.860805e-01 3.215214e-01 -4.326869e+00 4.502534e-04 -8.774732e-02 3.000000e+15 7.185065e+14 6.070747e+03 -1.939615e+03 -2.772847e+03 0.000000e+00 0.000000e+00 4.864216e+00 -5.852425e-01 -1.876770e-09 -1.082680e-09 479 1.000000e-06 1.700000e-06 2.982600e-01 3.220281e-01 -4.314689e+00 4.869486e-04 -7.620134e-02 3.000000e+15 1.149012e+15 5.923857e+03 -1.398124e+03 0.000000e+00 0.000000e+00 0.000000e+00 8.311482e+00 0.000000e+00 -1.670832e-09 0.000000e+00 480 0.000000e+00 1.755693e-06 -1.619876e+00 -4.225606e-01 -6.232825e+00 -1.106213e+00 -1.200000e+00 -1.970000e+17 3.680398e+01 1.742930e+17 -1.027882e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.931285e-11 0.000000e+00 -1.038577e-07 0.000000e+00 481 9.043580e-08 1.755693e-06 -1.619017e+00 -4.225175e-01 -6.231966e+00 -1.092468e+00 -1.200000e+00 -1.970000e+17 2.236228e+01 1.685994e+17 -1.254150e+04 -7.400656e+02 0.000000e+00 0.000000e+00 -3.270961e-11 -6.453611e-12 -1.021297e-07 -2.613410e-08 482 1.425859e-07 1.755693e-06 -1.613218e+00 -4.221674e-01 -6.226167e+00 -1.063570e+00 -1.200000e+00 -1.970000e+17 9.155351e+00 1.347339e+17 -2.162441e+04 -7.519982e+03 0.000000e+00 0.000000e+00 -1.685376e-11 -9.176767e-12 -9.086287e-08 -4.711711e-08 483 1.726585e-07 1.755693e-06 -1.579491e+00 -4.191355e-01 -6.192440e+00 -1.016704e+00 -1.200000e+00 -1.970000e+17 5.508621e+00 3.657286e+16 -3.535312e+04 -3.292986e+04 0.000000e+00 0.000000e+00 -1.136772e-11 -1.049007e-11 -6.401846e-08 -5.601765e-08 484 1.899999e-07 1.755693e-06 -1.500671e+00 -4.053169e-01 -6.113620e+00 -9.388946e-01 -1.200000e+00 -1.970000e+17 5.728075e+00 1.736472e+15 -4.142937e+04 -6.335608e+04 0.000000e+00 0.000000e+00 -1.268463e-11 -1.155632e-11 -4.694646e-08 -5.361218e-08 485 2.000000e-07 1.755693e-06 -1.426990e+00 -3.797417e-01 -6.039939e+00 -8.672585e-01 -1.200000e+00 -1.970000e+17 6.199472e+00 1.005669e+14 -4.289428e+04 -8.466335e+04 0.000000e+00 0.000000e+00 -1.432791e-11 -1.265439e-11 -4.198399e-08 -5.032568e-08 486 2.100000e-07 1.755693e-06 -1.331344e+00 -3.321166e-01 -5.944293e+00 -7.853895e-01 -1.200000e+00 3.000000e+15 7.816396e+00 1.843971e+12 -4.307348e+04 -9.175399e+04 0.000000e+00 0.000000e+00 -1.879253e-11 -1.437992e-11 -3.848476e-08 -4.762288e-08 487 2.354138e-07 1.755693e-06 -1.123298e+00 -2.290454e-01 -5.736247e+00 -6.295076e-01 -1.199998e+00 3.000000e+15 5.873759e+01 5.921149e+08 -4.040907e+04 -7.530587e+04 0.000000e+00 0.000000e+00 -9.989723e-11 -4.835390e-11 -3.709984e-08 -4.270360e-08 488 3.000000e-07 1.755693e-06 -7.445607e-01 -4.343999e-02 -5.357510e+00 -2.820676e-01 -1.073535e+00 3.000000e+15 1.969854e+02 3.438642e+04 -3.225281e+04 -5.072662e+04 0.000000e+00 0.000000e+00 -4.006260e-10 -2.423435e-10 -3.227948e-08 -3.415638e-08 489 4.000000e-07 1.755693e-06 -3.598273e-01 1.351567e-01 -4.972776e+00 -8.960747e-04 -6.929652e-01 3.000000e+15 1.079881e+04 2.927394e+04 -2.274784e+04 -3.212716e+04 0.000000e+00 0.000000e+00 -7.354643e-10 -6.037371e-10 -2.489158e-08 -2.423983e-08 490 5.000000e-07 1.755693e-06 -1.020174e-01 2.398661e-01 -4.714967e+00 4.411549e-05 -4.411248e-01 3.000000e+15 2.221083e+08 2.324048e+04 -1.567113e+04 -2.171161e+04 0.000000e+00 0.000000e+00 2.211579e-07 -3.324458e-07 -1.714631e-08 -1.598665e-08 491 6.000000e-07 1.755693e-06 7.440486e-02 2.927992e-01 -4.538544e+00 8.496511e-05 -2.725346e-01 3.000000e+15 2.033505e+11 1.716857e+04 -1.031559e+04 -1.469209e+04 0.000000e+00 0.000000e+00 3.530247e-04 -4.081955e-04 -1.050366e-08 -9.699594e-09 492 7.000000e-07 1.755693e-06 1.918244e-01 3.132882e-01 -4.421125e+00 1.477335e-04 -1.630735e-01 3.000000e+15 1.900307e+13 1.262119e+04 -6.298805e+03 -9.404076e+03 0.000000e+00 0.000000e+00 5.150353e-02 -3.812743e-02 -6.050563e-09 -5.601333e-09 493 8.000000e-07 1.755693e-06 2.624864e-01 3.198380e-01 -4.350463e+00 2.264145e-04 -9.807936e-02 3.000000e+15 2.910797e+14 1.013749e+04 -3.395539e+03 -5.220438e+03 0.000000e+00 0.000000e+00 1.086469e+00 -3.987783e-01 -3.626556e-09 -3.072891e-09 494 9.000000e-07 1.755693e-06 2.962332e-01 3.217391e-01 -4.316716e+00 2.965613e-04 -6.610254e-02 3.000000e+15 1.070257e+15 9.466952e+03 -1.676768e+03 -2.144904e+03 0.000000e+00 0.000000e+00 4.919443e+00 -7.255255e-01 -2.593324e-09 -1.374564e-09 495 1.000000e-06 1.755693e-06 3.053845e-01 3.221408e-01 -4.307565e+00 3.243250e-04 -5.704630e-02 3.000000e+15 1.522946e+15 9.432227e+03 -1.152763e+03 0.000000e+00 0.000000e+00 0.000000e+00 7.526253e+00 0.000000e+00 -2.322761e-09 0.000000e+00 496 0.000000e+00 1.780618e-06 -1.583412e+00 -4.166949e-01 -6.196361e+00 -1.057236e+00 -1.200000e+00 -1.970000e+17 2.268732e+01 4.255962e+16 -4.412814e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.710032e-11 0.000000e+00 -9.776739e-08 0.000000e+00 497 9.043580e-08 1.780618e-06 -1.574556e+00 -4.162101e-01 -6.187505e+00 -1.036956e+00 -1.200000e+00 -1.970000e+17 1.458733e+01 3.021953e+16 -4.889872e+04 -4.921184e+03 0.000000e+00 0.000000e+00 -3.085889e-11 -8.290245e-12 -9.464039e-08 -2.506714e-08 498 1.425859e-07 1.780618e-06 -1.537037e+00 -4.139290e-01 -6.149987e+00 -9.818189e-01 -1.200000e+00 -1.970000e+17 7.381218e+00 7.084434e+15 -6.150046e+04 -1.905673e+04 0.000000e+00 0.000000e+00 -1.577076e-11 -1.170710e-11 -7.963022e-08 -4.358354e-08 499 1.726585e-07 1.780618e-06 -1.459158e+00 -4.046965e-01 -6.072107e+00 -8.965164e-01 -1.200000e+00 -1.970000e+17 5.539712e+00 3.488205e+14 -7.208363e+04 -4.290776e+04 0.000000e+00 0.000000e+00 -1.150404e-11 -1.155381e-11 -6.236381e-08 -5.015785e-08 500 1.899999e-07 1.780618e-06 -1.367739e+00 -3.794478e-01 -5.980688e+00 -8.056262e-01 -1.200000e+00 -1.970000e+17 5.654098e+00 1.017556e+13 -7.187203e+04 -6.623549e+04 0.000000e+00 0.000000e+00 -1.166831e-11 -1.144316e-11 -5.296233e-08 -4.952682e-08 501 2.000000e-07 1.780618e-06 -1.293707e+00 -3.458388e-01 -5.906656e+00 -7.408535e-01 -1.200000e+00 -1.970000e+17 8.087910e+00 5.813845e+11 -6.847652e+04 -8.324612e+04 0.000000e+00 0.000000e+00 -1.462051e-11 -1.408567e-11 -4.833250e-08 -4.783803e-08 502 2.100000e-07 1.780618e-06 -1.201246e+00 -2.924800e-01 -5.814195e+00 -6.781704e-01 -1.200000e+00 3.000000e+15 1.893083e+01 1.205702e+10 -6.317136e+04 -8.782544e+04 0.000000e+00 0.000000e+00 -3.220714e-11 -2.357706e-11 -4.345966e-08 -4.598120e-08 503 2.354138e-07 1.780618e-06 -1.007988e+00 -1.884937e-01 -5.620937e+00 -5.208102e-01 -1.199859e+00 3.000000e+15 7.584818e+01 6.895184e+06 -5.173676e+04 -6.987323e+04 0.000000e+00 0.000000e+00 -1.510626e-10 -7.616072e-11 -4.048360e-08 -4.222556e-08 504 3.000000e-07 1.780618e-06 -6.579987e-01 -1.365117e-02 -5.270948e+00 -1.969775e-01 -9.862814e-01 3.000000e+15 2.085208e+02 3.531876e+04 -3.694490e+04 -4.694853e+04 0.000000e+00 0.000000e+00 -4.326079e-10 -2.732699e-10 -3.473490e-08 -3.503573e-08 505 4.000000e-07 1.780618e-06 -3.006265e-01 1.525655e-01 -4.913576e+00 -8.470148e-05 -6.319417e-01 3.000000e+15 1.032316e+05 3.141139e+04 -2.465138e+04 -2.980644e+04 0.000000e+00 0.000000e+00 -7.488359e-10 -6.779758e-10 -2.700973e-08 -2.565499e-08 506 5.000000e-07 1.780618e-06 -6.186993e-02 2.487708e-01 -4.674819e+00 2.899943e-05 -3.982876e-01 3.000000e+15 1.049417e+09 2.578753e+04 -1.648079e+04 -2.005674e+04 0.000000e+00 0.000000e+00 6.055698e-07 -1.211986e-06 -1.893516e-08 -1.729162e-08 507 6.000000e-07 1.780618e-06 1.005083e-01 2.963120e-01 -4.512441e+00 6.126571e-05 -2.430103e-01 3.000000e+15 5.584116e+11 1.959639e+04 -1.058425e+04 -1.347073e+04 0.000000e+00 0.000000e+00 6.812207e-04 -9.116157e-04 -1.181108e-08 -1.062713e-08 508 7.000000e-07 1.780618e-06 2.075446e-01 3.143955e-01 -4.405405e+00 1.142851e-04 -1.433868e-01 3.000000e+15 3.494202e+13 1.471313e+04 -6.281101e+03 -8.514341e+03 0.000000e+00 0.000000e+00 7.491265e-02 -5.842658e-02 -6.865432e-09 -6.148160e-09 509 8.000000e-07 1.780618e-06 2.707951e-01 3.201581e-01 -4.342154e+00 1.832868e-04 -8.524982e-02 3.000000e+15 4.020223e+14 1.207374e+04 -3.253872e+03 -4.635244e+03 0.000000e+00 0.000000e+00 1.255985e+00 -4.717914e-01 -4.139250e-09 -3.349472e-09 510 9.000000e-07 1.780618e-06 3.002495e-01 3.218354e-01 -4.312700e+00 2.448781e-04 -5.711242e-02 3.000000e+15 1.252549e+15 1.147434e+04 -1.543540e+03 -1.866079e+03 0.000000e+00 0.000000e+00 4.907783e+00 -7.783652e-01 -2.969127e-09 -1.483067e-09 511 1.000000e-06 1.780618e-06 3.081167e-01 3.221909e-01 -4.304832e+00 2.691144e-04 -4.919065e-02 3.000000e+15 1.696245e+15 1.149858e+04 -1.040947e+03 0.000000e+00 0.000000e+00 0.000000e+00 7.163065e+00 0.000000e+00 -2.659221e-09 0.000000e+00 512 0.000000e+00 1.791773e-06 -1.519459e+00 -4.007474e-01 -6.132408e+00 -9.918104e-01 -1.200000e+00 -1.970000e+17 2.143220e+01 3.590346e+15 -7.381085e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.602430e-11 0.000000e+00 -9.560324e-08 0.000000e+00 513 9.043580e-08 1.791773e-06 -1.504501e+00 -3.992585e-01 -6.117450e+00 -9.653316e-01 -1.200000e+00 -1.970000e+17 1.372829e+01 2.013599e+15 -7.897714e+04 -6.870114e+03 0.000000e+00 0.000000e+00 -2.971148e-11 -9.749800e-12 -9.102581e-08 -2.314722e-08 514 1.425859e-07 1.791773e-06 -1.452987e+00 -3.933193e-01 -6.065936e+00 -8.974086e-01 -1.200000e+00 -1.970000e+17 7.279251e+00 2.747794e+14 -8.977149e+04 -2.177736e+04 0.000000e+00 0.000000e+00 -1.560083e-11 -1.253530e-11 -7.570807e-08 -3.997334e-08 515 1.726585e-07 1.791773e-06 -1.366862e+00 -3.768361e-01 -5.979811e+00 -8.058515e-01 -1.200000e+00 -1.970000e+17 5.900347e+00 9.836163e+12 -9.445529e+04 -4.286265e+04 0.000000e+00 0.000000e+00 -1.219497e-11 -1.191795e-11 -6.127247e-08 -4.688391e-08 516 1.899999e-07 1.791773e-06 -1.278308e+00 -3.459595e-01 -5.891257e+00 -7.303881e-01 -1.200000e+00 -1.970000e+17 9.787667e+00 3.205482e+11 -9.005915e+04 -6.210912e+04 0.000000e+00 0.000000e+00 -1.567500e-11 -1.531878e-11 -5.380422e-08 -4.789262e-08 517 2.000000e-07 1.791773e-06 -1.209829e+00 -3.121936e-01 -5.822779e+00 -6.895659e-01 -1.200000e+00 -1.970000e+17 2.851466e+01 2.270096e+10 -8.323122e+04 -7.650520e+04 0.000000e+00 0.000000e+00 -4.148496e-11 -3.907338e-11 -5.010615e-08 -4.718262e-08 518 2.100000e-07 1.791773e-06 -1.125297e+00 -2.618258e-01 -5.738246e+00 -6.178888e-01 -1.199998e+00 3.000000e+15 3.469332e+01 6.397044e+08 -7.241998e+04 -8.041311e+04 0.000000e+00 0.000000e+00 -5.982820e-11 -6.491955e-11 -4.531847e-08 -4.569900e-08 519 2.354138e-07 1.791773e-06 -9.475412e-01 -1.650917e-01 -5.560490e+00 -4.635752e-01 -1.198558e+00 3.000000e+15 8.587641e+01 7.004882e+05 -5.622872e+04 -6.470322e+04 0.000000e+00 0.000000e+00 -1.750031e-10 -1.068349e-10 -4.176881e-08 -4.207998e-08 520 3.000000e-07 1.791773e-06 -6.156793e-01 1.302392e-03 -5.228628e+00 -1.555106e-01 -9.435286e-01 3.000000e+15 2.155074e+02 3.591564e+04 -3.883577e+04 -4.467929e+04 0.000000e+00 0.000000e+00 -4.485444e-10 -2.910874e-10 -3.575986e-08 -3.528227e-08 521 4.000000e-07 1.791773e-06 -2.726780e-01 1.608332e-01 -4.885627e+00 -2.370815e-05 -6.032702e-01 3.000000e+15 3.034463e+05 3.230176e+04 -2.542912e+04 -2.861903e+04 0.000000e+00 0.000000e+00 -7.381412e-10 -7.874488e-10 -2.794669e-08 -2.612756e-08 522 5.000000e-07 1.791773e-06 -4.329867e-02 2.528555e-01 -4.656248e+00 2.397826e-05 -3.786381e-01 3.000000e+15 2.152131e+09 2.688524e+04 -1.680034e+04 -1.925245e+04 0.000000e+00 0.000000e+00 9.844595e-07 -2.187025e-06 -1.975880e-08 -1.777609e-08 523 6.000000e-07 1.791773e-06 1.123709e-01 2.978812e-01 -4.500578e+00 5.272880e-05 -2.297121e-01 3.000000e+15 8.836661e+11 2.071478e+04 -1.067387e+04 -1.289185e+04 0.000000e+00 0.000000e+00 9.275121e-04 -1.303034e-03 -1.243295e-08 -1.099456e-08 524 7.000000e-07 1.791773e-06 2.145384e-01 3.148853e-01 -4.398411e+00 1.015825e-04 -1.346842e-01 3.000000e+15 4.581386e+13 1.571800e+04 -6.250743e+03 -8.100709e+03 0.000000e+00 0.000000e+00 8.876522e-02 -7.017587e-02 -7.256074e-09 -6.366688e-09 525 8.000000e-07 1.791773e-06 2.743851e-01 3.202996e-01 -4.338564e+00 1.663903e-04 -7.967900e-02 3.000000e+15 4.621847e+14 1.303472e+04 -3.179457e+03 -4.369954e+03 0.000000e+00 0.000000e+00 1.336798e+00 -5.054372e-01 -4.385402e-09 -3.456303e-09 526 9.000000e-07 1.791773e-06 3.019375e-01 3.218781e-01 -4.311012e+00 2.243117e-04 -5.325653e-02 3.000000e+15 1.338086e+15 1.247755e+04 -1.482723e+03 -1.743259e+03 0.000000e+00 0.000000e+00 4.893817e+00 -7.981129e-01 -3.146899e-09 -1.522427e-09 527 1.000000e-06 1.791773e-06 3.092503e-01 3.222131e-01 -4.303699e+00 2.470623e-04 -4.583593e-02 3.000000e+15 1.773758e+15 1.252965e+04 -9.920317e+02 0.000000e+00 0.000000e+00 0.000000e+00 7.001171e+00 0.000000e+00 -2.816716e-09 0.000000e+00 528 0.000000e+00 1.796766e-06 -1.478926e+00 -3.865297e-01 -6.091875e+00 -9.507209e-01 -1.200000e+00 -1.970000e+17 2.097569e+01 7.490999e+14 -8.865695e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.547216e-11 0.000000e+00 -9.458482e-08 0.000000e+00 529 9.043580e-08 1.796766e-06 -1.461457e+00 -3.843417e-01 -6.074406e+00 -9.216572e-01 -1.200000e+00 -1.970000e+17 1.339777e+01 3.812458e+14 -9.349653e+04 -7.579504e+03 0.000000e+00 0.000000e+00 -2.916754e-11 -1.018841e-11 -8.946960e-08 -2.310610e-08 530 1.425859e-07 1.796766e-06 -1.404945e+00 -3.761313e-01 -6.017894e+00 -8.495616e-01 -1.200000e+00 -1.970000e+17 7.334269e+00 4.288438e+13 -1.027157e+05 -2.249343e+04 0.000000e+00 0.000000e+00 -1.565720e-11 -1.280162e-11 -7.414699e-08 -3.882414e-08 531 1.726585e-07 1.796766e-06 -1.317087e+00 -3.562387e-01 -5.930036e+00 -7.594615e-01 -1.200000e+00 -1.970000e+17 6.725390e+00 1.435607e+12 -1.051625e+05 -4.212138e+04 0.000000e+00 0.000000e+00 -1.306968e-11 -1.258980e-11 -6.061476e-08 -4.526933e-08 532 1.899999e-07 1.796766e-06 -1.231136e+00 -3.240199e-01 -5.844085e+00 -6.995038e-01 -1.200000e+00 -1.970000e+17 1.837254e+01 5.173850e+10 -9.933527e+04 -5.913589e+04 0.000000e+00 0.000000e+00 -2.711784e-11 -2.565631e-11 -5.374242e-08 -4.670041e-08 533 2.000000e-07 1.796766e-06 -1.166480e+00 -2.917154e-01 -5.779429e+00 -6.580186e-01 -1.200000e+00 -1.970000e+17 4.500358e+01 4.247638e+09 -9.102754e+04 -7.148159e+04 0.000000e+00 0.000000e+00 -7.634357e-11 -6.488131e-11 -5.048224e-08 -4.662515e-08 534 2.100000e-07 1.796766e-06 -1.088172e+00 -2.455104e-01 -5.701122e+00 -5.870404e-01 -1.199993e+00 3.000000e+15 4.422144e+01 1.522972e+08 -7.590064e+04 -7.499072e+04 0.000000e+00 0.000000e+00 -8.080420e-11 -9.650757e-11 -4.614139e-08 -4.553783e-08 535 2.354138e-07 1.796766e-06 -9.190127e-01 -1.537038e-01 -5.531962e+00 -4.366513e-01 -1.195854e+00 3.000000e+15 9.137311e+01 2.580936e+05 -5.794555e+04 -6.188506e+04 0.000000e+00 0.000000e+00 -1.869418e-10 -1.249708e-10 -4.231286e-08 -4.196051e-08 536 3.000000e-07 1.796766e-06 -5.960896e-01 8.288327e-03 -5.209039e+00 -1.363999e-01 -9.237502e-01 3.000000e+15 2.195357e+02 3.617874e+04 -3.961916e+04 -4.357114e+04 0.000000e+00 0.000000e+00 -4.561106e-10 -3.006963e-10 -3.620559e-08 -3.534153e-08 537 4.000000e-07 1.796766e-06 -2.598987e-01 1.646189e-01 -4.872848e+00 -1.176682e-05 -5.901919e-01 3.000000e+15 4.971220e+05 3.267744e+04 -2.575861e+04 -2.806063e+04 0.000000e+00 0.000000e+00 -7.242651e-10 -8.787757e-10 -2.836221e-08 -2.629725e-08 538 5.000000e-07 1.796766e-06 -3.487705e-02 2.546986e-01 -4.647826e+00 2.202437e-05 -3.697620e-01 3.000000e+15 2.980657e+09 2.736185e+04 -1.693350e+04 -1.888037e+04 0.000000e+00 0.000000e+00 1.235933e-06 -2.852845e-06 -2.013005e-08 -1.796664e-08 539 6.000000e-07 1.796766e-06 1.177088e-01 2.985813e-01 -4.495240e+00 4.927042e-05 -2.237539e-01 3.000000e+15 1.086364e+12 2.121760e+04 -1.070726e+04 -1.262660e+04 0.000000e+00 0.000000e+00 1.068318e-03 -1.527378e-03 -1.271734e-08 -1.114549e-08 540 7.000000e-07 1.796766e-06 2.176549e-01 3.151030e-01 -4.395294e+00 9.629933e-05 -1.308176e-01 3.000000e+15 5.169109e+13 1.618050e+04 -6.232439e+03 -7.912752e+03 0.000000e+00 0.000000e+00 9.578225e-02 -7.602606e-02 -7.435715e-09 -6.457123e-09 541 8.000000e-07 1.796766e-06 2.759638e-01 3.203625e-01 -4.336985e+00 1.592521e-04 -7.722343e-02 3.000000e+15 4.914095e+14 1.348422e+04 -3.144126e+03 -4.250801e+03 0.000000e+00 0.000000e+00 1.373704e+00 -5.205394e-01 -4.498692e-09 -3.499629e-09 542 9.000000e-07 1.796766e-06 3.026709e-01 3.218971e-01 -4.310278e+00 2.155611e-04 -5.156543e-02 3.000000e+15 1.377040e+15 1.294821e+04 -1.455444e+03 -1.688818e+03 0.000000e+00 0.000000e+00 4.885774e+00 -8.059733e-01 -3.228101e-09 -1.537777e-09 543 1.000000e-06 1.796766e-06 3.097402e-01 3.222230e-01 -4.303209e+00 2.376647e-04 -4.436713e-02 3.000000e+15 1.808329e+15 1.301298e+04 -9.704834e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.929131e+00 0.000000e+00 -2.888294e-09 0.000000e+00 544 0.000000e+00 1.799000e-06 -1.458370e+00 -3.783104e-01 -6.071319e+00 -9.298677e-01 -1.200000e+00 -1.970000e+17 2.073646e+01 3.383521e+14 -9.534774e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.521381e-11 0.000000e+00 -9.412801e-08 0.000000e+00 545 9.043580e-08 1.799000e-06 -1.439838e+00 -3.757717e-01 -6.052787e+00 -8.997231e-01 -1.200000e+00 -1.970000e+17 1.323538e+01 1.652713e+14 -1.000118e+05 -7.863372e+03 0.000000e+00 0.000000e+00 -2.892479e-11 -1.032159e-11 -8.878368e-08 -2.316136e-08 546 1.425859e-07 1.799000e-06 -1.381346e+00 -3.664789e-01 -5.994295e+00 -8.263178e-01 -1.200000e+00 -1.970000e+17 7.435823e+00 1.721992e+13 -1.085300e+05 -2.272605e+04 0.000000e+00 0.000000e+00 -1.571458e-11 -1.294967e-11 -7.350072e-08 -3.840593e-08 547 1.726585e-07 1.799000e-06 -1.293043e+00 -3.451536e-01 -5.905992e+00 -7.383848e-01 -1.200000e+00 -1.970000e+17 7.542909e+00 5.666416e+11 -1.100966e+05 -4.167676e+04 0.000000e+00 0.000000e+00 -1.407081e-11 -1.340151e-11 -6.032342e-08 -4.456434e-08 548 1.899999e-07 1.799000e-06 -1.208456e+00 -3.126049e-01 -5.821405e+00 -6.833711e-01 -1.200000e+00 -1.970000e+17 2.366544e+01 2.152682e+10 -1.037692e+05 -5.762966e+04 0.000000e+00 0.000000e+00 -3.933001e-11 -3.261939e-11 -5.364372e-08 -4.602568e-08 549 2.000000e-07 1.799000e-06 -1.145721e+00 -2.812280e-01 -5.758670e+00 -6.404467e-01 -1.199999e+00 -1.970000e+17 5.090529e+01 1.903629e+09 -9.497786e+04 -6.869799e+04 0.000000e+00 0.000000e+00 -9.867888e-11 -7.630261e-11 -5.049750e-08 -4.623687e-08 550 2.100000e-07 1.799000e-06 -1.071059e+00 -2.377882e-01 -5.684008e+00 -5.724027e-01 -1.199987e+00 3.000000e+15 4.866311e+01 7.860408e+07 -7.715046e+04 -7.192049e+04 0.000000e+00 0.000000e+00 -9.152166e-11 -1.082277e-10 -4.650730e-08 -4.540679e-08 551 2.354138e-07 1.799000e-06 -9.059851e-01 -1.484466e-01 -5.518934e+00 -4.243804e-01 -1.193442e+00 3.000000e+15 9.408597e+01 1.712062e+05 -5.864029e+04 -6.055052e+04 0.000000e+00 0.000000e+00 -1.926047e-10 -1.334922e-10 -4.254979e-08 -4.188735e-08 552 3.000000e-07 1.799000e-06 -5.871990e-01 1.147011e-02 -5.200148e+00 -1.277578e-01 -9.147775e-01 3.000000e+15 2.216553e+02 3.629378e+04 -3.995576e+04 -4.305956e+04 0.000000e+00 0.000000e+00 -4.596042e-10 -3.054057e-10 -3.640240e-08 -3.535646e-08 553 4.000000e-07 1.799000e-06 -2.541271e-01 1.663293e-01 -4.867076e+00 -8.099852e-06 -5.842913e-01 3.000000e+15 6.213199e+05 3.284069e+04 -2.590206e+04 -2.780561e+04 0.000000e+00 0.000000e+00 -7.150013e-10 -9.336244e-10 -2.854723e-08 -2.636435e-08 554 5.000000e-07 1.799000e-06 -3.108694e-02 2.555260e-01 -4.644036e+00 2.120332e-05 -3.657741e-01 3.000000e+15 3.451174e+09 2.757193e+04 -1.699103e+04 -1.871149e+04 0.000000e+00 0.000000e+00 1.371420e-06 -3.214047e-06 -2.029654e-08 -1.804624e-08 555 6.000000e-07 1.799000e-06 1.201027e-01 2.988941e-01 -4.492846e+00 4.779048e-05 -2.210869e-01 3.000000e+15 1.191786e+12 2.144283e+04 -1.072080e+04 -1.250667e+04 0.000000e+00 0.000000e+00 1.138807e-03 -1.639509e-03 -1.284569e-08 -1.121000e-08 556 7.000000e-07 1.799000e-06 2.190465e-01 3.152001e-01 -4.393903e+00 9.401093e-05 -1.290933e-01 3.000000e+15 5.455326e+13 1.638998e+04 -6.223287e+03 -7.828089e+03 0.000000e+00 0.000000e+00 9.909969e-02 -7.876688e-02 -7.517026e-09 -6.495930e-09 557 8.000000e-07 1.799000e-06 2.766645e-01 3.203905e-01 -4.336285e+00 1.561377e-04 -7.613223e-02 3.000000e+15 5.049658e+14 1.368934e+04 -3.127928e+03 -4.197414e+03 0.000000e+00 0.000000e+00 1.390341e+00 -5.272913e-01 -4.549990e-09 -3.518023e-09 558 9.000000e-07 1.799000e-06 3.029948e-01 3.219055e-01 -4.309954e+00 2.117308e-04 -5.081556e-02 3.000000e+15 1.394596e+15 1.316326e+04 -1.443240e+03 -1.664571e+03 0.000000e+00 0.000000e+00 4.881815e+00 -8.092772e-01 -3.264740e-09 -1.544157e-09 559 1.000000e-06 1.799000e-06 3.099559e-01 3.222274e-01 -4.302993e+00 2.335485e-04 -4.371630e-02 3.000000e+15 1.823769e+15 1.323372e+04 -9.609179e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.896998e+00 0.000000e+00 -2.920517e-09 0.000000e+00 560 0.000000e+00 1.800000e-06 -1.448685e+00 -3.742276e-01 -6.061635e+00 -9.200218e-01 -1.200000e+00 -1.970000e+17 2.060727e+01 2.326790e+14 -9.834422e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.508740e-11 0.000000e+00 -9.391557e-08 0.000000e+00 561 9.043580e-08 1.800000e-06 -1.429691e+00 -3.715262e-01 -6.042641e+00 -8.894154e-01 -1.200000e+00 -1.970000e+17 1.315320e+01 1.116406e+14 -1.029271e+05 -7.983778e+03 0.000000e+00 0.000000e+00 -2.881259e-11 -1.165019e-11 -8.847988e-08 -2.371856e-08 562 1.425859e-07 1.800000e-06 -1.370363e+00 -3.617426e-01 -5.983312e+00 -8.156252e-01 -1.200000e+00 -1.970000e+17 7.519768e+00 1.126195e+13 -1.111365e+05 -2.281376e+04 0.000000e+00 0.000000e+00 -1.576287e-11 -1.399881e-11 -7.322284e-08 -3.883426e-08 563 1.726585e-07 1.800000e-06 -1.281922e+00 -3.398039e-01 -5.894871e+00 -7.288586e-01 -1.200000e+00 -1.970000e+17 8.022535e+00 3.686186e+11 -1.123333e+05 -4.145841e+04 0.000000e+00 0.000000e+00 -1.485648e-11 -1.437107e-11 -6.019936e-08 -4.473886e-08 564 1.899999e-07 1.800000e-06 -1.197978e+00 -3.071596e-01 -5.810927e+00 -6.748862e-01 -1.200000e+00 -1.970000e+17 2.556104e+01 1.435631e+10 -1.058140e+05 -5.693107e+04 0.000000e+00 0.000000e+00 -4.721110e-11 -3.583035e-11 -5.359466e-08 -4.608862e-08 565 2.000000e-07 1.800000e-06 -1.136131e+00 -2.762389e-01 -5.749080e+00 -6.314759e-01 -1.199999e+00 -1.970000e+17 5.213894e+01 1.313877e+09 -9.688011e+04 -6.732899e+04 0.000000e+00 0.000000e+00 -1.096757e-10 -8.000865e-11 -5.047893e-08 -4.627716e-08 566 2.100000e-07 1.800000e-06 -1.063319e+00 -2.342644e-01 -5.676269e+00 -5.656738e-01 -1.199982e+00 3.000000e+15 5.060290e+01 5.828532e+07 -7.762067e+04 -7.038589e+04 0.000000e+00 0.000000e+00 -9.638137e-11 -1.115521e-10 -4.667225e-08 -4.542140e-08 567 2.354138e-07 1.800000e-06 -9.001062e-01 -1.460639e-01 -5.513055e+00 -4.188475e-01 -1.191996e+00 3.000000e+15 9.535257e+01 1.442446e+05 -5.893556e+04 -5.994299e+04 0.000000e+00 0.000000e+00 -1.951987e-10 -1.372562e-10 -4.265438e-08 -4.185032e-08 568 3.000000e-07 1.800000e-06 -5.831962e-01 1.290479e-02 -5.196145e+00 -1.238753e-01 -9.107384e-01 3.000000e+15 2.226891e+02 3.634462e+04 -4.010350e+04 -4.282777e+04 0.000000e+00 0.000000e+00 -4.611914e-10 -3.075986e-10 -3.648992e-08 -3.536076e-08 569 4.000000e-07 1.800000e-06 -2.515338e-01 1.670979e-01 -4.864483e+00 -6.715867e-06 -5.816413e-01 3.000000e+15 6.868106e+05 3.291277e+04 -2.596543e+04 -2.769048e+04 0.000000e+00 0.000000e+00 -7.100714e-10 -9.617063e-10 -2.862982e-08 -2.639258e-08 570 5.000000e-07 1.800000e-06 -2.938662e-02 2.558968e-01 -4.642336e+00 2.084610e-05 -3.639863e-01 3.000000e+15 3.685729e+09 2.766529e+04 -1.701634e+04 -1.863544e+04 0.000000e+00 0.000000e+00 1.437429e-06 -3.390347e-06 -2.037111e-08 -1.808069e-08 571 6.000000e-07 1.800000e-06 1.211751e-01 2.990340e-01 -4.491774e+00 4.714133e-05 -2.198932e-01 3.000000e+15 1.242268e+12 2.154364e+04 -1.072658e+04 -1.245276e+04 0.000000e+00 0.000000e+00 1.171992e-03 -1.692230e-03 -1.290334e-08 -1.123823e-08 572 7.000000e-07 1.800000e-06 2.196686e-01 3.152435e-01 -4.393281e+00 9.300164e-05 -1.283229e-01 3.000000e+15 5.588349e+13 1.648423e+04 -6.218997e+03 -7.790093e+03 0.000000e+00 0.000000e+00 1.006210e-01 -8.001834e-02 -7.553593e-09 -6.512947e-09 573 8.000000e-07 1.800000e-06 2.769769e-01 3.204031e-01 -4.335972e+00 1.547595e-04 -7.564546e-02 3.000000e+15 5.111295e+14 1.378193e+04 -3.120604e+03 -4.173511e+03 0.000000e+00 0.000000e+00 1.397807e+00 -5.303099e-01 -4.573065e-09 -3.526045e-09 574 9.000000e-07 1.800000e-06 3.031388e-01 3.219093e-01 -4.309810e+00 2.100335e-04 -5.048137e-02 3.000000e+15 1.402477e+15 1.326038e+04 -1.437780e+03 -1.653744e+03 0.000000e+00 0.000000e+00 4.879972e+00 -8.107113e-01 -3.281194e-09 -1.546910e-09 575 1.000000e-06 1.800000e-06 3.100518e-01 3.222294e-01 -4.302897e+00 2.317239e-04 -4.342634e-02 3.000000e+15 1.830671e+15 1.333340e+04 -9.566536e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.882641e+00 0.000000e+00 -2.934972e-09 0.000000e+00 576 0.000000e+00 1.801000e-06 -1.438701e+00 -3.698869e-01 -6.051650e+00 -9.171816e-01 -1.200000e+00 3.000000e+15 2.010474e+01 1.170654e+14 -9.979475e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.490993e-11 0.000000e+00 -9.368937e-08 0.000000e+00 577 9.043580e-08 1.801000e-06 -1.419253e+00 -3.670197e-01 -6.032202e+00 -8.862136e-01 -1.200000e+00 3.000000e+15 1.287854e+01 5.519083e+13 -1.042952e+05 -8.100124e+03 0.000000e+00 0.000000e+00 -2.868600e-11 -1.616891e-11 -8.817994e-08 -2.385813e-08 578 1.425859e-07 1.801000e-06 -1.359119e+00 -3.567431e-01 -5.972068e+00 -8.119033e-01 -1.200000e+00 3.000000e+15 7.444424e+00 5.396742e+12 -1.121995e+05 -2.289168e+04 0.000000e+00 0.000000e+00 -1.586079e-11 -1.669182e-11 -7.295932e-08 -3.836577e-08 579 1.726585e-07 1.801000e-06 -1.270577e+00 -3.342101e-01 -5.883526e+00 -7.254191e-01 -1.200000e+00 3.000000e+15 8.060957e+00 1.759503e+11 -1.130409e+05 -4.122900e+04 0.000000e+00 0.000000e+00 -1.550514e-11 -1.535954e-11 -6.009047e-08 -4.364591e-08 580 1.899999e-07 1.801000e-06 -1.187293e+00 -3.015013e-01 -5.800243e+00 -6.717603e-01 -1.200000e+00 3.000000e+15 2.534079e+01 7.030014e+09 -1.063501e+05 -5.622143e+04 0.000000e+00 0.000000e+00 -5.197081e-11 -3.671913e-11 -5.355846e-08 -4.467568e-08 581 2.000000e-07 1.801000e-06 -1.126345e+00 -2.710566e-01 -5.739294e+00 -6.288636e-01 -1.199998e+00 3.000000e+15 5.092494e+01 6.661556e+08 -9.733903e+04 -6.587870e+04 0.000000e+00 0.000000e+00 -1.145064e-10 -7.980025e-11 -5.042857e-08 -4.516952e-08 582 2.100000e-07 1.801000e-06 -1.055535e+00 -2.307042e-01 -5.668485e+00 -5.588412e-01 -1.199976e+00 3.000000e+15 5.249892e+01 4.314793e+07 -7.802366e+04 -6.874111e+04 0.000000e+00 0.000000e+00 -1.010584e-10 -1.117203e-10 -4.682068e-08 -4.488595e-08 583 2.354138e-07 1.801000e-06 -8.941981e-01 -1.436634e-01 -5.507147e+00 -4.132881e-01 -1.190276e+00 3.000000e+15 9.664691e+01 1.226797e+05 -5.922098e+04 -5.933062e+04 0.000000e+00 0.000000e+00 -1.978245e-10 -1.409642e-10 -4.275802e-08 -4.181045e-08 584 3.000000e-07 1.801000e-06 -5.791785e-01 1.434605e-02 -5.192128e+00 -1.199845e-01 -9.066849e-01 3.000000e+15 2.237842e+02 3.639497e+04 -4.024941e+04 -4.259429e+04 0.000000e+00 0.000000e+00 -4.627940e-10 -3.098372e-10 -3.657710e-08 -3.536348e-08 585 4.000000e-07 1.801000e-06 -2.489341e-01 1.678684e-01 -4.861883e+00 -5.470505e-06 -5.789856e-01 3.000000e+15 7.593964e+05 3.298418e+04 -2.602829e+04 -2.757474e+04 0.000000e+00 0.000000e+00 -7.045840e-10 -9.922599e-10 -2.871228e-08 -2.641966e-08 586 5.000000e-07 1.801000e-06 -2.768373e-02 2.562679e-01 -4.640633e+00 2.049510e-05 -3.621967e-01 3.000000e+15 3.936618e+09 2.775821e+04 -1.704140e+04 -1.855910e+04 0.000000e+00 0.000000e+00 1.507063e-06 -3.576425e-06 -2.044570e-08 -1.811440e-08 587 6.000000e-07 1.801000e-06 1.222480e-01 2.991738e-01 -4.490701e+00 4.650019e-05 -2.186995e-01 3.000000e+15 1.294918e+12 2.164445e+04 -1.073218e+04 -1.239870e+04 0.000000e+00 0.000000e+00 1.206240e-03 -1.746586e-03 -1.296111e-08 -1.126606e-08 588 7.000000e-07 1.801000e-06 2.202903e-01 3.152869e-01 -4.392659e+00 9.200139e-05 -1.275533e-01 3.000000e+15 5.724521e+13 1.657878e+04 -6.214588e+03 -7.752030e+03 0.000000e+00 0.000000e+00 1.021654e-01 -8.128526e-02 -7.590271e-09 -6.529739e-09 589 8.000000e-07 1.801000e-06 2.772886e-01 3.204156e-01 -4.335661e+00 1.533909e-04 -7.515966e-02 3.000000e+15 5.173539e+14 1.387502e+04 -3.113234e+03 -4.149602e+03 0.000000e+00 0.000000e+00 1.405286e+00 -5.333264e-01 -4.596210e-09 -3.533936e-09 590 9.000000e-07 1.801000e-06 3.032823e-01 3.219131e-01 -4.309667e+00 2.083464e-04 -5.014805e-02 3.000000e+15 1.410372e+15 1.335806e+04 -1.432322e+03 -1.642932e+03 0.000000e+00 0.000000e+00 4.878085e+00 -8.121175e-01 -3.297683e-09 -1.549599e-09 591 1.000000e-06 1.801000e-06 3.101473e-01 3.222313e-01 -4.302802e+00 2.299099e-04 -4.313718e-02 3.000000e+15 1.837568e+15 1.343363e+04 -9.523996e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.868300e+00 0.000000e+00 -2.949449e-09 0.000000e+00 592 0.000000e+00 1.802745e-06 -1.421302e+00 -3.623944e-01 -6.034251e+00 -8.994896e-01 -1.200000e+00 3.000000e+15 1.987842e+01 5.974103e+13 -9.962676e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.449328e-11 0.000000e+00 -9.328576e-08 0.000000e+00 593 9.043580e-08 1.802745e-06 -1.401081e+00 -3.592346e-01 -6.014030e+00 -8.678176e-01 -1.200000e+00 3.000000e+15 1.276740e+01 2.733612e+13 -1.039815e+05 -8.293503e+03 0.000000e+00 0.000000e+00 -2.844606e-11 -1.812278e-11 -8.764736e-08 -2.462091e-08 594 1.425859e-07 1.802745e-06 -1.339614e+00 -3.481041e-01 -5.952563e+00 -7.931170e-01 -1.200000e+00 3.000000e+15 7.654170e+00 2.538735e+12 -1.113629e+05 -2.300496e+04 0.000000e+00 0.000000e+00 -1.612716e-11 -1.800485e-11 -7.252370e-08 -3.903265e-08 595 1.726585e-07 1.802745e-06 -1.250978e+00 -3.245926e-01 -5.863927e+00 -7.088311e-01 -1.200000e+00 3.000000e+15 9.056115e+00 8.247081e+10 -1.116186e+05 -4.080441e+04 0.000000e+00 0.000000e+00 -1.638335e-11 -1.711581e-11 -5.992556e-08 -4.408517e-08 596 1.899999e-07 1.802745e-06 -1.168887e+00 -2.918469e-01 -5.781836e+00 -6.547875e-01 -1.200000e+00 3.000000e+15 2.678538e+01 3.450531e+09 -1.046766e+05 -5.496877e+04 0.000000e+00 0.000000e+00 -5.384548e-11 -3.984865e-11 -5.351721e-08 -4.503287e-08 597 2.000000e-07 1.802745e-06 -1.109517e+00 -2.622636e-01 -5.722466e+00 -6.117883e-01 -1.199997e+00 3.000000e+15 5.044063e+01 3.475640e+08 -9.567493e+04 -6.351073e+04 0.000000e+00 0.000000e+00 -1.121699e-10 -8.089523e-11 -5.033779e-08 -4.521424e-08 598 2.100000e-07 1.802745e-06 -1.041865e+00 -2.244206e-01 -5.654814e+00 -5.466927e-01 -1.199959e+00 3.000000e+15 5.568144e+01 2.545016e+07 -7.857291e+04 -6.610931e+04 0.000000e+00 0.000000e+00 -1.085504e-10 -1.126161e-10 -4.703878e-08 -4.467497e-08 599 2.354138e-07 1.802745e-06 -8.838216e-01 -1.394337e-01 -5.496771e+00 -4.035240e-01 -1.186531e+00 3.000000e+15 9.896247e+01 9.493136e+04 -5.969525e+04 -5.825478e+04 0.000000e+00 0.000000e+00 -2.024704e-10 -1.472615e-10 -4.293647e-08 -4.173432e-08 600 3.000000e-07 1.802745e-06 -5.721330e-01 1.687639e-02 -5.185082e+00 -1.131785e-01 -8.995779e-01 3.000000e+15 2.258657e+02 3.648162e+04 -4.049960e+04 -4.218305e+04 0.000000e+00 0.000000e+00 -4.656283e-10 -3.138395e-10 -3.672838e-08 -3.536449e-08 601 4.000000e-07 1.802745e-06 -2.443827e-01 1.692175e-01 -4.857332e+00 -3.592148e-06 -5.743379e-01 3.000000e+15 9.054416e+05 3.310724e+04 -2.613671e+04 -2.737134e+04 0.000000e+00 0.000000e+00 -6.935010e-10 -1.052184e-09 -2.885583e-08 -2.646413e-08 602 5.000000e-07 1.802745e-06 -2.470628e-02 2.569160e-01 -4.637655e+00 1.989721e-05 -3.590696e-01 3.000000e+15 4.417013e+09 2.791928e+04 -1.708447e+04 -1.842521e+04 0.000000e+00 0.000000e+00 1.637917e-06 -3.926168e-06 -2.057592e-08 -1.817139e-08 603 6.000000e-07 1.802745e-06 1.241216e-01 2.994175e-01 -4.488828e+00 4.540043e-05 -2.166167e-01 3.000000e+15 1.392260e+12 2.182031e+04 -1.074152e+04 -1.230401e+04 0.000000e+00 0.000000e+00 1.268659e-03 -1.845488e-03 -1.306220e-08 -1.131363e-08 604 7.000000e-07 1.802745e-06 2.213740e-01 3.153624e-01 -4.391575e+00 9.027747e-05 -1.262124e-01 3.000000e+15 5.969879e+13 1.674448e+04 -6.206604e+03 -7.685458e+03 0.000000e+00 0.000000e+00 1.049163e-01 -8.353310e-02 -7.654526e-09 -6.558492e-09 605 8.000000e-07 1.802745e-06 2.778307e-01 3.204374e-01 -4.335118e+00 1.510253e-04 -7.431434e-02 3.000000e+15 5.283605e+14 1.403863e+04 -3.100266e+03 -4.107871e+03 0.000000e+00 0.000000e+00 1.418364e+00 -5.385833e-01 -4.636766e-09 -3.547382e-09 606 9.000000e-07 1.802745e-06 3.035314e-01 3.219197e-01 -4.309418e+00 2.054269e-04 -4.956849e-02 3.000000e+15 1.424182e+15 1.352983e+04 -1.422803e+03 -1.624103e+03 0.000000e+00 0.000000e+00 4.874688e+00 -8.145032e-01 -3.326533e-09 -1.554137e-09 607 1.000000e-06 1.802745e-06 3.103128e-01 3.222348e-01 -4.302636e+00 2.267700e-04 -4.263453e-02 3.000000e+15 1.849592e+15 1.360986e+04 -9.450022e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.843314e+00 0.000000e+00 -2.974757e-09 0.000000e+00 608 0.000000e+00 1.805790e-06 -1.391012e+00 -3.495175e-01 -6.003961e+00 -8.686698e-01 -1.200000e+00 3.000000e+15 1.947562e+01 1.852070e+13 -9.932829e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.370375e-11 0.000000e+00 -9.254344e-08 0.000000e+00 609 9.043580e-08 1.805790e-06 -1.369504e+00 -3.458415e-01 -5.982453e+00 -8.358983e-01 -1.200000e+00 3.000000e+15 1.259969e+01 8.063266e+12 -1.034258e+05 -8.602221e+03 0.000000e+00 0.000000e+00 -2.804148e-11 -1.810194e-11 -8.671186e-08 -2.520437e-08 610 1.425859e-07 1.805790e-06 -1.305926e+00 -3.332547e-01 -5.918875e+00 -7.612307e-01 -1.200000e+00 3.000000e+15 8.206290e+00 6.901684e+11 -1.099274e+05 -2.313779e+04 0.000000e+00 0.000000e+00 -1.672912e-11 -1.856838e-11 -7.179443e-08 -3.930380e-08 611 1.726585e-07 1.805790e-06 -1.217362e+00 -3.082211e-01 -5.830311e+00 -6.828069e-01 -1.200000e+00 3.000000e+15 1.214550e+01 2.248264e+10 -1.092618e+05 -4.000110e+04 0.000000e+00 0.000000e+00 -1.982308e-11 -2.156693e-11 -5.965565e-08 -4.407722e-08 612 1.899999e-07 1.805790e-06 -1.137443e+00 -2.756152e-01 -5.750393e+00 -6.263267e-01 -1.199999e+00 3.000000e+15 3.005927e+01 1.023112e+09 -1.020187e+05 -5.278739e+04 0.000000e+00 0.000000e+00 -5.870334e-11 -4.674785e-11 -5.345605e-08 -4.491977e-08 613 2.000000e-07 1.805790e-06 -1.080791e+00 -2.475596e-01 -5.693740e+00 -5.831720e-01 -1.199991e+00 3.000000e+15 5.065577e+01 1.144947e+08 -9.331042e+04 -5.981212e+04 0.000000e+00 0.000000e+00 -1.103477e-10 -8.399611e-11 -5.032486e-08 -4.489344e-08 614 2.100000e-07 1.805790e-06 -1.017819e+00 -2.133095e-01 -5.630768e+00 -5.249093e-01 -1.199897e+00 3.000000e+15 6.077207e+01 1.006875e+07 -7.916334e+04 -6.211197e+04 0.000000e+00 0.000000e+00 -1.199070e-10 -1.150121e-10 -4.737939e-08 -4.426251e-08 615 2.354138e-07 1.805790e-06 -8.655231e-01 -1.319372e-01 -5.478472e+00 -3.863009e-01 -1.177445e+00 3.000000e+15 1.031642e+02 6.648652e+04 -6.045083e+04 -5.637379e+04 0.000000e+00 0.000000e+00 -2.107121e-10 -1.575896e-10 -4.324023e-08 -4.158431e-08 616 3.000000e-07 1.805790e-06 -5.597357e-01 2.133737e-02 -5.172685e+00 -1.012703e-01 -8.870757e-01 3.000000e+15 2.301781e+02 3.662979e+04 -4.092251e+04 -4.145484e+04 0.000000e+00 0.000000e+00 -4.706918e-10 -3.211017e-10 -3.698972e-08 -3.535543e-08 617 4.000000e-07 1.805790e-06 -2.363958e-01 1.715849e-01 -4.849345e+00 -1.061796e-06 -5.661871e-01 3.000000e+15 1.232903e+06 3.331766e+04 -2.632201e+04 -2.701214e+04 0.000000e+00 0.000000e+00 -6.686490e-10 -1.180698e-09 -2.910524e-08 -2.653355e-08 618 5.000000e-07 1.805790e-06 -1.949292e-02 2.580487e-01 -4.632442e+00 1.889647e-05 -3.535999e-01 3.000000e+15 5.403619e+09 2.819737e+04 -1.715765e+04 -1.818952e+04 0.000000e+00 0.000000e+00 1.898055e-06 -4.621214e-06 -2.080329e-08 -1.826537e-08 619 6.000000e-07 1.805790e-06 1.273947e-01 2.998421e-01 -4.485554e+00 4.353765e-05 -2.129824e-01 3.000000e+15 1.580196e+12 2.212714e+04 -1.075651e+04 -1.213773e+04 0.000000e+00 0.000000e+00 1.386176e-03 -2.031102e-03 -1.323940e-08 -1.139355e-08 620 7.000000e-07 1.805790e-06 2.232617e-01 3.154939e-01 -4.389687e+00 8.733347e-05 -1.238786e-01 3.000000e+15 6.422609e+13 1.703583e+04 -6.191793e+03 -7.568831e+03 0.000000e+00 0.000000e+00 1.098906e-01 -8.756921e-02 -7.767410e-09 -6.606954e-09 621 8.000000e-07 1.805790e-06 2.787713e-01 3.204754e-01 -4.334178e+00 1.469651e-04 -7.284656e-02 3.000000e+15 5.480136e+14 1.432775e+04 -3.077313e+03 -4.035022e+03 0.000000e+00 0.000000e+00 1.441256e+00 -5.477303e-01 -4.708031e-09 -3.569836e-09 622 9.000000e-07 1.805790e-06 3.039621e-01 3.219312e-01 -4.308987e+00 2.004053e-04 -4.856352e-02 3.000000e+15 1.448378e+15 1.383359e+04 -1.406213e+03 -1.591365e+03 0.000000e+00 0.000000e+00 4.868439e+00 -8.184530e-01 -3.377107e-09 -1.561572e-09 623 1.000000e-06 1.805790e-06 3.105986e-01 3.222408e-01 -4.302351e+00 2.213671e-04 -4.176332e-02 3.000000e+15 1.870533e+15 1.392143e+04 -9.321745e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.799841e+00 0.000000e+00 -3.019052e-09 0.000000e+00 624 0.000000e+00 1.811103e-06 -1.338377e+00 -3.274624e-01 -5.951326e+00 -8.152223e-01 -1.200000e+00 3.000000e+15 1.887331e+01 2.420170e+12 -9.878808e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.238031e-11 0.000000e+00 -9.116677e-08 0.000000e+00 625 9.043580e-08 1.811103e-06 -1.314812e+00 -3.228897e-01 -5.927761e+00 -7.812551e-01 -1.200000e+00 3.000000e+15 1.262362e+01 9.730940e+11 -1.024343e+05 -9.057133e+03 0.000000e+00 0.000000e+00 -2.754254e-11 -1.817089e-11 -8.508513e-08 -2.591455e-08 626 1.425859e-07 1.811103e-06 -1.248178e+00 -3.079211e-01 -5.861127e+00 -7.110765e-01 -1.200000e+00 3.000000e+15 1.100695e+01 7.400820e+10 -1.075044e+05 -2.319363e+04 0.000000e+00 0.000000e+00 -1.944996e-11 -2.192837e-11 -7.060510e-08 -3.942863e-08 627 1.726585e-07 1.811103e-06 -1.160365e+00 -2.807970e-01 -5.773314e+00 -6.409596e-01 -1.199999e+00 3.000000e+15 2.181718e+01 2.481979e+09 -1.055142e+05 -3.846538e+04 0.000000e+00 0.000000e+00 -3.235411e-11 -3.660076e-11 -5.922044e-08 -4.374609e-08 628 1.899999e-07 1.811103e-06 -1.084395e+00 -2.489141e-01 -5.697344e+00 -5.790724e-01 -1.199991e+00 3.000000e+15 3.760639e+01 1.316136e+08 -9.808329e+04 -4.914612e+04 0.000000e+00 0.000000e+00 -7.008749e-11 -6.467313e-11 -5.338897e-08 -4.441164e-08 629 2.000000e-07 1.811103e-06 -1.032170e+00 -2.233858e-01 -5.645120e+00 -5.362046e-01 -1.199938e+00 3.000000e+15 5.399835e+01 1.750925e+07 -9.022512e+04 -5.440728e+04 0.000000e+00 0.000000e+00 -1.126110e-10 -9.465715e-11 -5.044505e-08 -4.424511e-08 630 2.100000e-07 1.811103e-06 -9.755802e-01 -1.937457e-01 -5.588529e+00 -4.858619e-01 -1.199471e+00 3.000000e+15 6.875180e+01 1.999313e+06 -7.945126e+04 -5.644442e+04 0.000000e+00 0.000000e+00 -1.361699e-10 -1.233575e-10 -4.787356e-08 -4.362516e-08 631 2.354138e-07 1.811103e-06 -8.330753e-01 -1.185501e-01 -5.446024e+00 -3.557280e-01 -1.154031e+00 3.000000e+15 1.109201e+02 4.688607e+04 -6.155837e+04 -5.314956e+04 0.000000e+00 0.000000e+00 -2.252501e-10 -1.743453e-10 -4.374580e-08 -4.128054e-08 632 3.000000e-07 1.811103e-06 -5.378008e-01 2.925350e-02 -5.150750e+00 -8.054037e-02 -8.649637e-01 3.000000e+15 2.411557e+02 3.688148e+04 -4.161804e+04 -4.015723e+04 0.000000e+00 0.000000e+00 -4.798959e-10 -3.345442e-10 -3.743745e-08 -3.530900e-08 633 4.000000e-07 1.811103e-06 -2.223256e-01 1.757549e-01 -4.835275e+00 1.700515e-06 -5.518420e-01 3.000000e+15 2.123925e+06 3.367373e+04 -2.663318e+04 -2.637287e+04 0.000000e+00 0.000000e+00 -6.019962e-10 -1.504235e-09 -2.953696e-08 -2.663076e-08 634 5.000000e-07 1.811103e-06 -1.034339e-02 2.600300e-01 -4.623293e+00 1.727064e-05 -3.440163e-01 3.000000e+15 7.697415e+09 2.867458e+04 -1.727916e+04 -1.777210e+04 0.000000e+00 0.000000e+00 2.469814e-06 -6.144727e-06 -2.120027e-08 -1.841290e-08 635 6.000000e-07 1.811103e-06 1.331164e-01 3.005807e-01 -4.479833e+00 4.045073e-05 -2.066421e-01 3.000000e+15 1.971686e+12 2.266277e+04 -1.077858e+04 -1.184439e+04 0.000000e+00 0.000000e+00 1.620393e-03 -2.398644e-03 -1.355088e-08 -1.152351e-08 636 7.000000e-07 1.811103e-06 2.265444e-01 3.157223e-01 -4.386405e+00 8.238546e-05 -1.198250e-01 3.000000e+15 7.293155e+13 1.755118e+04 -6.163253e+03 -7.363961e+03 0.000000e+00 0.000000e+00 1.191192e-01 -9.496125e-02 -7.966612e-09 -6.686096e-09 637 8.000000e-07 1.811103e-06 2.803956e-01 3.205415e-01 -4.332554e+00 1.400808e-04 -7.030761e-02 3.000000e+15 5.836885e+14 1.484349e+04 -3.036319e+03 -3.907861e+03 0.000000e+00 0.000000e+00 1.481376e+00 -5.635816e-01 -4.833841e-09 -3.605811e-09 638 9.000000e-07 1.811103e-06 3.047016e-01 3.219512e-01 -4.308248e+00 1.918589e-04 -4.682917e-02 3.000000e+15 1.490878e+15 1.437608e+04 -1.377350e+03 -1.534618e+03 0.000000e+00 0.000000e+00 4.856576e+00 -8.246634e-01 -3.466005e-09 -1.573021e-09 639 1.000000e-06 1.811103e-06 3.110879e-01 3.222512e-01 -4.301861e+00 2.121643e-04 -4.026091e-02 3.000000e+15 1.906939e+15 1.447753e+04 -9.100483e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.724402e+00 0.000000e+00 -3.096700e-09 0.000000e+00 640 0.000000e+00 1.820374e-06 -1.247234e+00 -2.897452e-01 -5.860184e+00 -7.280693e-01 -1.200000e+00 3.000000e+15 2.202084e+01 7.135836e+10 -9.778927e+04 0.000000e+00 0.000000e+00 0.000000e+00 -4.379837e-11 0.000000e+00 -8.856457e-08 0.000000e+00 641 9.043580e-08 1.820374e-06 -1.220654e+00 -2.836950e-01 -5.833603e+00 -7.002550e-01 -1.200000e+00 3.000000e+15 2.099475e+01 2.553452e+10 -1.006581e+05 -9.616542e+03 0.000000e+00 0.000000e+00 -3.408164e-11 -2.714394e-11 -8.228802e-08 -2.662961e-08 642 1.425859e-07 1.820374e-06 -1.150423e+00 -2.652177e-01 -5.763372e+00 -6.403387e-01 -1.199999e+00 3.000000e+15 3.128309e+01 1.689923e+09 -1.035524e+05 -2.286031e+04 0.000000e+00 0.000000e+00 -3.972829e-11 -5.332849e-11 -6.873250e-08 -3.920136e-08 643 1.726585e-07 1.820374e-06 -1.065387e+00 -2.359901e-01 -5.678336e+00 -5.632718e-01 -1.199980e+00 3.000000e+15 4.257180e+01 6.314146e+07 -9.996719e+04 -3.560880e+04 0.000000e+00 0.000000e+00 -6.374794e-11 -7.979354e-11 -5.856229e-08 -4.288393e-08 644 1.899999e-07 1.820374e-06 -9.963046e-01 -2.061861e-01 -5.609254e+00 -5.006695e-01 -1.199741e+00 3.000000e+15 5.469348e+01 4.409100e+06 -9.280827e+04 -4.356079e+04 0.000000e+00 0.000000e+00 -9.534453e-11 -1.039052e-10 -5.335737e-08 -4.335037e-08 645 2.000000e-07 1.820374e-06 -9.505958e-01 -1.843043e-01 -5.563545e+00 -4.600481e-01 -1.198574e+00 3.000000e+15 6.658240e+01 7.878039e+05 -8.642907e+04 -4.715576e+04 0.000000e+00 0.000000e+00 -1.276319e-10 -1.250472e-10 -5.075118e-08 -4.312624e-08 646 2.100000e-07 1.820374e-06 -9.019926e-01 -1.599038e-01 -5.514942e+00 -4.169940e-01 -1.192041e+00 3.000000e+15 8.251556e+01 1.548848e+05 -7.882042e+04 -4.896547e+04 0.000000e+00 0.000000e+00 -1.602679e-10 -1.489279e-10 -4.854471e-08 -4.259733e-08 647 2.354138e-07 1.820374e-06 -7.752130e-01 -9.449698e-02 -5.388162e+00 -3.010474e-01 -1.100105e+00 3.000000e+15 1.254401e+02 4.026630e+04 -6.292322e+04 -4.788994e+04 0.000000e+00 0.000000e+00 -2.505239e-10 -2.035353e-10 -4.455135e-08 -4.065321e-08 648 3.000000e-07 1.820374e-06 -4.986747e-01 4.342966e-02 -5.111624e+00 -4.607490e-02 -8.255416e-01 3.000000e+15 2.887717e+02 3.730604e+04 -4.270083e+04 -3.783787e+04 0.000000e+00 0.000000e+00 -4.970682e-10 -3.599608e-10 -3.819238e-08 -3.514174e-08 649 4.000000e-07 1.820374e-06 -1.973878e-01 1.831393e-01 -4.810337e+00 3.640490e-06 -5.264515e-01 3.000000e+15 5.569888e+06 3.426824e+04 -2.713764e+04 -2.522232e+04 0.000000e+00 0.000000e+00 -3.570799e-10 -2.594726e-09 -3.027853e-08 -2.673075e-08 650 5.000000e-07 1.820374e-06 5.771743e-03 2.634970e-01 -4.607177e+00 1.475855e-05 -3.271783e-01 3.000000e+15 1.435429e+10 2.948728e+04 -1.747168e+04 -1.702565e+04 0.000000e+00 0.000000e+00 3.976577e-06 -1.011476e-05 -2.189303e-08 -1.862040e-08 651 6.000000e-07 1.820374e-06 1.431253e-01 3.018617e-01 -4.469824e+00 3.552456e-05 -1.955855e-01 3.000000e+15 2.903912e+12 2.359961e+04 -1.080432e+04 -1.132311e+04 0.000000e+00 0.000000e+00 2.136122e-03 -3.196491e-03 -1.410021e-08 -1.172007e-08 652 7.000000e-07 1.820374e-06 2.322340e-01 3.161175e-01 -4.380715e+00 7.429605e-05 -1.128117e-01 3.000000e+15 9.090516e+13 1.847278e+04 -6.105206e+03 -7.002588e+03 0.000000e+00 0.000000e+00 1.369881e-01 -1.089290e-01 -8.320466e-09 -6.806486e-09 653 8.000000e-07 1.820374e-06 2.831770e-01 3.206559e-01 -4.329772e+00 1.286485e-04 -6.594583e-02 3.000000e+15 6.502451e+14 1.577874e+04 -2.962131e+03 -3.686061e+03 0.000000e+00 0.000000e+00 1.551623e+00 -5.907275e-01 -5.057440e-09 -3.658083e-09 654 9.000000e-07 1.820374e-06 3.059553e-01 3.219859e-01 -4.306994e+00 1.775720e-04 -4.386128e-02 3.000000e+15 1.565788e+15 1.536117e+04 -1.327361e+03 -1.436845e+03 0.000000e+00 0.000000e+00 4.833019e+00 -8.332499e-01 -3.622785e-09 -1.588065e-09 655 1.000000e-06 1.820374e-06 3.119139e-01 3.222694e-01 -4.301035e+00 1.967585e-04 -3.769309e-02 3.000000e+15 1.969993e+15 1.548612e+04 -8.722856e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.594249e+00 0.000000e+00 -3.232992e-09 0.000000e+00 656 0.000000e+00 1.836552e-06 -1.090488e+00 -2.254583e-01 -5.703437e+00 -5.974116e-01 -1.199989e+00 3.000000e+15 6.038043e+01 1.665897e+08 -9.591665e+04 0.000000e+00 0.000000e+00 0.000000e+00 -7.896626e-11 0.000000e+00 -8.361863e-08 0.000000e+00 657 9.043580e-08 1.836552e-06 -1.060349e+00 -2.172992e-01 -5.673298e+00 -5.669758e-01 -1.199967e+00 3.000000e+15 5.969256e+01 5.199098e+07 -9.752166e+04 -9.991660e+03 0.000000e+00 0.000000e+00 -7.700863e-11 -8.022732e-11 -7.758673e-08 -2.675477e-08 658 1.425859e-07 1.836552e-06 -9.882168e-01 -1.948536e-01 -5.601166e+00 -4.988819e-01 -1.199558e+00 3.000000e+15 6.977868e+01 3.247914e+06 -9.753408e+04 -2.141875e+04 0.000000e+00 0.000000e+00 -9.945814e-11 -1.275640e-10 -6.592174e-08 -3.799372e-08 659 1.726585e-07 1.836552e-06 -9.106480e-01 -1.652772e-01 -5.523597e+00 -4.248336e-01 -1.193202e+00 3.000000e+15 7.995360e+01 2.069456e+05 -9.260988e+04 -3.074284e+04 0.000000e+00 0.000000e+00 -1.232599e-10 -1.571627e-10 -5.762589e-08 -4.099883e-08 660 1.899999e-07 1.836552e-06 -8.523865e-01 -1.396632e-01 -5.465336e+00 -3.694300e-01 -1.166440e+00 3.000000e+15 8.929444e+01 6.122695e+04 -8.643931e+04 -3.589492e+04 0.000000e+00 0.000000e+00 -1.474623e-10 -1.776199e-10 -5.337120e-08 -4.135707e-08 661 2.000000e-07 1.836552e-06 -8.151659e-01 -1.222540e-01 -5.428115e+00 -3.345532e-01 -1.136077e+00 3.000000e+15 9.776452e+01 4.696580e+04 -8.178853e+04 -3.817722e+04 0.000000e+00 0.000000e+00 -1.706242e-10 -1.924866e-10 -5.122790e-08 -4.118318e-08 662 2.100000e-07 1.836552e-06 -7.760317e-01 -1.033613e-01 -5.388981e+00 -2.986359e-01 -1.099376e+00 3.000000e+15 1.107124e+02 4.274858e+04 -7.665503e+04 -3.964641e+04 0.000000e+00 0.000000e+00 -2.028700e-10 -2.105028e-10 -4.938196e-08 -4.080508e-08 663 2.354138e-07 1.836552e-06 -6.719668e-01 -5.147622e-02 -5.284916e+00 -2.029218e-01 -9.968985e-01 3.000000e+15 1.529038e+02 4.020444e+04 -6.401899e+04 -4.004384e+04 0.000000e+00 0.000000e+00 -2.946108e-10 -2.606546e-10 -4.573154e-08 -3.933911e-08 664 3.000000e-07 1.836552e-06 -4.281825e-01 6.905858e-02 -5.041132e+00 -7.786193e-03 -7.545615e-01 3.000000e+15 1.002986e+03 3.801647e+04 -4.420079e+04 -3.373977e+04 0.000000e+00 0.000000e+00 -5.301030e-10 -4.086579e-10 -3.942536e-08 -3.460436e-08 665 4.000000e-07 1.836552e-06 -1.528074e-01 1.962960e-01 -4.765757e+00 3.745255e-06 -4.811438e-01 3.000000e+15 3.121831e+07 3.524559e+04 -2.789482e+04 -2.312370e+04 0.000000e+00 0.000000e+00 1.258620e-09 -8.904544e-09 -3.153204e-08 -2.669793e-08 666 5.000000e-07 1.836552e-06 3.429151e-02 2.695534e-01 -4.578658e+00 1.118876e-05 -2.974812e-01 3.000000e+15 4.324412e+10 3.086061e+04 -1.774484e+04 -1.567184e+04 0.000000e+00 0.000000e+00 9.517752e-06 -2.415867e-05 -2.309946e-08 -1.882634e-08 667 6.000000e-07 1.836552e-06 1.606293e-01 3.040665e-01 -4.452320e+00 2.815775e-05 -1.763368e-01 3.000000e+15 5.715098e+12 2.524644e+04 -1.080857e+04 -1.038651e+04 0.000000e+00 0.000000e+00 3.485971e-03 -5.215737e-03 -1.507070e-08 -1.196238e-08 668 7.000000e-07 1.836552e-06 2.420217e-01 3.167954e-01 -4.370927e+00 6.168750e-05 -1.007706e-01 3.000000e+15 1.327849e+14 2.015444e+04 -5.978848e+03 -6.361642e+03 0.000000e+00 0.000000e+00 1.739789e-01 -1.364751e-01 -8.953979e-09 -6.955509e-09 669 8.000000e-07 1.836552e-06 2.878622e-01 3.208525e-01 -4.325087e+00 1.103223e-04 -5.854801e-02 3.000000e+15 7.799282e+14 1.752354e+04 -2.825880e+03 -3.300538e+03 0.000000e+00 0.000000e+00 1.673300e+00 -6.354349e-01 -5.457777e-09 -3.713245e-09 670 9.000000e-07 1.836552e-06 3.080325e-01 3.220457e-01 -4.304917e+00 1.543954e-04 -3.885931e-02 3.000000e+15 1.698250e+15 1.720024e+04 -1.241895e+03 -1.270522e+03 0.000000e+00 0.000000e+00 4.783745e+00 -8.404503e-01 -3.899574e-09 -1.597766e-09 671 1.000000e-06 1.836552e-06 3.132726e-01 3.223007e-01 -4.299677e+00 1.717011e-04 -3.337375e-02 3.000000e+15 2.078258e+15 1.736425e+04 -8.092801e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.372750e+00 0.000000e+00 -3.471606e-09 0.000000e+00 672 0.000000e+00 1.864782e-06 -8.245005e-01 -1.175072e-01 -5.437450e+00 -3.477649e-01 -1.134704e+00 3.000000e+15 1.135750e+02 7.105324e+04 -9.247094e+04 0.000000e+00 0.000000e+00 0.000000e+00 -1.751669e-10 0.000000e+00 -7.473997e-08 0.000000e+00 673 9.043580e-08 1.864782e-06 -7.927613e-01 -1.073902e-01 -5.405710e+00 -3.163430e-01 -1.106321e+00 3.000000e+15 1.149771e+02 6.240581e+04 -9.230563e+04 -9.364174e+03 0.000000e+00 0.000000e+00 -1.753124e-10 -1.510259e-10 -7.010765e-08 -2.479334e-08 674 1.425859e-07 1.864782e-06 -7.263208e-01 -8.343333e-02 -5.339270e+00 -2.528417e-01 -1.044166e+00 3.000000e+15 1.288143e+02 5.287596e+04 -8.939597e+04 -1.776708e+04 0.000000e+00 0.000000e+00 -2.003502e-10 -2.296793e-10 -6.185478e-08 -3.438971e-08 675 1.726585e-07 1.864782e-06 -6.641734e-01 -5.785041e-02 -5.277123e+00 -1.929899e-01 -9.847319e-01 3.000000e+15 1.407699e+02 4.761080e+04 -8.405961e+04 -2.342988e+04 0.000000e+00 0.000000e+00 -2.238340e-10 -2.705549e-10 -5.617442e-08 -3.697812e-08 676 1.899999e-07 1.864782e-06 -6.207785e-01 -3.859247e-02 -5.233728e+00 -1.512756e-01 -9.427098e-01 3.000000e+15 1.502205e+02 4.514966e+04 -7.932014e+04 -2.629411e+04 0.000000e+00 0.000000e+00 -2.438884e-10 -2.934888e-10 -5.318464e-08 -3.746170e-08 677 2.000000e-07 1.864782e-06 -5.937516e-01 -2.618815e-02 -5.206701e+00 -1.255785e-01 -9.163611e-01 3.000000e+15 1.581464e+02 4.398115e+04 -7.614003e+04 -2.760659e+04 0.000000e+00 0.000000e+00 -2.611805e-10 -3.071929e-10 -5.162272e-08 -3.746701e-08 678 2.100000e-07 1.864782e-06 -5.655651e-01 -1.299913e-02 -5.178514e+00 -9.932076e-02 -8.887428e-01 3.000000e+15 1.703906e+02 4.302538e+04 -7.274529e+04 -2.859526e+04 0.000000e+00 0.000000e+00 -2.867705e-10 -3.221843e-10 -5.021017e-08 -3.731706e-08 679 2.354138e-07 1.864782e-06 -4.902537e-01 2.312726e-02 -5.103203e+00 -3.609309e-02 -8.144314e-01 3.000000e+15 2.718606e+02 4.139379e+04 -6.378414e+04 -2.957060e+04 0.000000e+00 0.000000e+00 -3.742908e-10 -3.657085e-10 -4.719467e-08 -3.647934e-08 680 3.000000e-07 1.864782e-06 -3.003095e-01 1.153954e-01 -4.913259e+00 -7.460522e-05 -6.258945e-01 3.000000e+15 1.044642e+05 3.920159e+04 -4.577690e+04 -2.681257e+04 0.000000e+00 0.000000e+00 -5.936587e-10 -5.023173e-10 -4.131105e-08 -3.294021e-08 681 4.000000e-07 1.864782e-06 -7.239150e-02 2.197510e-01 -4.685341e+00 2.387029e-06 -3.995893e-01 3.000000e+15 6.993967e+08 3.683180e+04 -2.882707e+04 -1.926335e+04 0.000000e+00 0.000000e+00 3.413141e-08 -1.091717e-07 -3.357590e-08 -2.598261e-08 682 5.000000e-07 1.864782e-06 8.495763e-02 2.800158e-01 -4.527992e+00 6.775422e-06 -2.449436e-01 3.000000e+15 3.067280e+11 3.317632e+04 -1.801567e+04 -1.317395e+04 0.000000e+00 0.000000e+00 4.694162e-05 -1.086439e-04 -2.516936e-08 -1.865862e-08 683 6.000000e-07 1.864782e-06 1.910876e-01 3.077918e-01 -4.421862e+00 1.831576e-05 -1.430409e-01 3.000000e+15 1.856197e+13 2.817396e+04 -1.068422e+04 -8.679602e+03 0.000000e+00 0.000000e+00 8.181027e-03 -1.168103e-02 -1.676918e-08 -1.201828e-08 684 7.000000e-07 1.864782e-06 2.585497e-01 3.179377e-01 -4.354399e+00 4.358874e-05 -8.044803e-02 3.000000e+15 2.517555e+14 2.333926e+04 -5.685517e+03 -5.220337e+03 0.000000e+00 0.000000e+00 2.573487e-01 -1.923757e-01 -1.008883e-08 -6.985971e-09 685 8.000000e-07 1.864782e-06 2.954943e-01 3.211855e-01 -4.317455e+00 8.261765e-05 -4.631169e-02 3.000000e+15 1.048755e+15 2.093784e+04 -2.575518e+03 -2.639069e+03 0.000000e+00 0.000000e+00 1.873516e+00 -6.979680e-01 -6.172242e-09 -3.677219e-09 686 9.000000e-07 1.864782e-06 3.113310e-01 3.221478e-01 -4.301618e+00 1.185802e-04 -3.066171e-02 3.000000e+15 1.931925e+15 2.078720e+04 -1.101290e+03 -9.956218e+02 0.000000e+00 0.000000e+00 4.677112e+00 -8.244533e-01 -4.380991e-09 -1.556468e-09 687 1.000000e-06 1.864782e-06 3.154067e-01 3.223545e-01 -4.297542e+00 1.327796e-04 -2.631421e-02 3.000000e+15 2.260415e+15 2.100681e+04 -7.095831e+02 0.000000e+00 0.000000e+00 0.000000e+00 6.009380e+00 0.000000e+00 -3.880627e-09 0.000000e+00 688 0.000000e+00 1.914043e-06 -3.840323e-01 5.728218e-02 -4.996981e+00 -1.172688e-03 -7.004402e-01 3.000000e+15 4.281411e+03 5.589854e+04 -8.678998e+04 0.000000e+00 0.000000e+00 0.000000e+00 -3.101129e-10 0.000000e+00 -6.161054e-08 0.000000e+00 689 9.043580e-08 1.914043e-06 -3.593994e-01 6.623521e-02 -4.972349e+00 -4.665510e-04 -6.769476e-01 3.000000e+15 1.079814e+04 5.348756e+04 -8.482892e+04 -6.399379e+03 0.000000e+00 0.000000e+00 -3.145351e-10 -2.030171e-10 -5.953686e-08 -1.785992e-08 690 1.425859e-07 1.914043e-06 -3.149732e-01 8.396656e-02 -4.927922e+00 -9.258844e-05 -6.345554e-01 3.000000e+15 5.929880e+04 4.944229e+04 -8.010514e+04 -1.090822e+04 0.000000e+00 0.000000e+00 -3.485329e-10 -3.145107e-10 -5.588006e-08 -2.528526e-08 691 1.726585e-07 1.914043e-06 -2.780260e-01 9.983221e-02 -4.890975e+00 -2.390282e-05 -5.990118e-01 3.000000e+15 2.467660e+05 4.683083e+04 -7.528720e+04 -1.348202e+04 0.000000e+00 0.000000e+00 -3.774513e-10 -3.744961e-10 -5.328588e-08 -2.782260e-08 692 1.899999e-07 1.914043e-06 -2.534502e-01 1.107799e-01 -4.866399e+00 -9.666994e-06 -5.751837e-01 3.000000e+15 6.378321e+05 4.549639e+04 -7.181706e+04 -1.473810e+04 0.000000e+00 0.000000e+00 -3.980210e-10 -4.076291e-10 -5.181036e-08 -2.867529e-08 693 2.000000e-07 1.914043e-06 -2.383853e-01 1.176077e-01 -4.851334e+00 -5.530157e-06 -5.605109e-01 3.000000e+15 1.141817e+06 4.481181e+04 -6.963489e+04 -1.534137e+04 0.000000e+00 0.000000e+00 -4.122409e-10 -4.267750e-10 -5.098659e-08 -2.898329e-08 694 2.100000e-07 1.914043e-06 -2.227673e-01 1.247618e-01 -4.835716e+00 -3.076239e-06 -5.452480e-01 3.000000e+15 2.088348e+06 4.420081e+04 -6.735103e+04 -1.584034e+04 0.000000e+00 0.000000e+00 -4.289376e-10 -4.470616e-10 -5.019112e-08 -2.917144e-08 695 2.354138e-07 1.914043e-06 -1.810751e-01 1.441514e-01 -4.794024e+00 -5.416853e-07 -5.042758e-01 3.000000e+15 1.046716e+07 4.298719e+04 -6.124554e+04 -1.659926e+04 0.000000e+00 0.000000e+00 -4.571270e-10 -5.283776e-10 -4.829920e-08 -2.920823e-08 696 3.000000e-07 1.914043e-06 -7.068383e-02 1.963287e-01 -4.683633e+00 3.239199e-07 -3.950094e-01 3.000000e+15 7.471923e+08 4.115771e+04 -4.630076e+04 -1.600537e+04 0.000000e+00 0.000000e+00 6.926963e-09 -1.075343e-08 -4.379936e-08 -2.742689e-08 697 4.000000e-07 1.914043e-06 7.254402e-02 2.604045e-01 -4.540405e+00 8.364939e-07 -2.528910e-01 3.000000e+15 1.898506e+11 3.942970e+04 -2.930136e+04 -1.224863e+04 0.000000e+00 0.000000e+00 4.699966e-06 -9.389892e-06 -3.670109e-08 -2.223902e-08 698 5.000000e-07 1.914043e-06 1.742888e-01 2.973245e-01 -4.438660e+00 2.477088e-06 -1.527063e-01 3.000000e+15 9.700989e+12 3.712161e+04 -1.781356e+04 -8.513558e+03 0.000000e+00 0.000000e+00 7.026050e-04 -1.241345e-03 -2.844607e-08 -1.625530e-08 699 6.000000e-07 1.914043e-06 2.428152e-01 3.137977e-01 -4.370134e+00 7.582444e-06 -8.681817e-02 3.000000e+15 1.372084e+14 3.352177e+04 -1.005660e+04 -5.540671e+03 0.000000e+00 0.000000e+00 3.109388e-02 -3.751378e-02 -1.954986e-08 -1.056629e-08 700 7.000000e-07 1.914043e-06 2.851022e-01 3.197882e-01 -4.327847e+00 2.108863e-05 -4.758283e-02 3.000000e+15 7.034120e+14 2.979100e+04 -5.015589e+03 -3.213282e+03 0.000000e+00 0.000000e+00 4.453401e-01 -2.849613e-01 -1.200303e-08 -6.067108e-09 701 8.000000e-07 1.914043e-06 3.070808e-01 3.217332e-01 -4.305868e+00 4.454086e-05 -2.709592e-02 3.000000e+15 1.643867e+15 2.812142e+04 -2.152751e+03 -1.553826e+03 0.000000e+00 0.000000e+00 2.141176e+00 -7.043556e-01 -7.353242e-09 -3.092430e-09 702 9.000000e-07 1.914043e-06 3.161787e-01 3.223184e-01 -4.296770e+00 6.715901e-05 -1.791618e-02 3.000000e+15 2.334816e+15 2.821055e+04 -8.975272e+02 -5.711243e+02 0.000000e+00 0.000000e+00 4.462678e+00 -6.859195e-01 -5.142178e-09 -1.270462e-09 703 1.000000e-06 1.914043e-06 3.185033e-01 3.224452e-01 -4.294446e+00 7.625376e-05 -1.536905e-02 3.000000e+15 2.553483e+15 2.845433e+04 -5.730297e+02 0.000000e+00 0.000000e+00 0.000000e+00 5.479800e+00 0.000000e+00 -4.511989e-09 0.000000e+00 704 0.000000e+00 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -8.220690e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -4.161378e-10 0.000000e+00 -5.205010e-08 0.000000e+00 705 9.043580e-08 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -7.934118e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -4.230087e-10 0.000000e+00 -5.171439e-08 0.000000e+00 706 1.425859e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -7.417277e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -4.637499e-10 0.000000e+00 -5.105615e-08 0.000000e+00 707 1.726585e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -6.987445e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -4.982367e-10 0.000000e+00 -5.044977e-08 0.000000e+00 708 1.899999e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -6.701538e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -5.204620e-10 0.000000e+00 -5.001247e-08 0.000000e+00 709 2.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -6.526277e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -5.326828e-10 0.000000e+00 -4.972956e-08 0.000000e+00 710 2.100000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -6.344582e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -5.415652e-10 0.000000e+00 -4.942342e-08 0.000000e+00 711 2.354138e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -5.859547e+04 -0.000000e+00 0.000000e+00 0.000000e+00 -4.768705e-10 0.000000e+00 -4.853504e-08 0.000000e+00 712 3.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -4.575289e+04 -0.000000e+00 0.000000e+00 0.000000e+00 2.015098e-08 0.000000e+00 -4.553013e-08 0.000000e+00 713 4.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -2.909019e+04 -0.000000e+00 0.000000e+00 0.000000e+00 1.274855e-05 0.000000e+00 -3.918948e-08 0.000000e+00 714 5.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -1.725352e+04 -0.000000e+00 0.000000e+00 0.000000e+00 1.753510e-03 0.000000e+00 -3.106045e-08 0.000000e+00 715 6.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -9.281363e+03 -0.000000e+00 0.000000e+00 0.000000e+00 6.122175e-02 0.000000e+00 -2.182457e-08 0.000000e+00 716 7.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -4.361818e+03 -0.000000e+00 0.000000e+00 0.000000e+00 6.279112e-01 0.000000e+00 -1.359562e-08 0.000000e+00 717 8.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -1.804892e+03 -0.000000e+00 0.000000e+00 0.000000e+00 2.319104e+00 0.000000e+00 -8.317595e-09 0.000000e+00 718 9.000000e-07 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -7.464706e+02 -0.000000e+00 0.000000e+00 0.000000e+00 4.268902e+00 0.000000e+00 -5.743931e-09 0.000000e+00 719 1.000000e-06 2.000000e-06 3.225952e-01 3.225952e-01 -4.290354e+00 0.000000e+00 0.000000e+00 3.000000e+15 3.000000e+15 4.400555e+04 -4.760346e+02 -0.000000e+00 0.000000e+00 0.000000e+00 5.083978e+00 0.000000e+00 -5.002285e-09 0.000000e+00 tmp_ns50wwy/examples/cider/cider-gnuplot/clean.sh0000644000175000017500000000015414163340332022247 0ustar carstencarsten#!/bin/sh set -v rm -f new*.plt new*.data new*.eps new*.png rm -f tnew*.plt tnew*.data tnew*.eps tnew*.png tmp_ns50wwy/examples/cider/cider-gnuplot/TR.200.q2.ascii0000644000175000017500000004312114163340332023012 0ustar carstencarstenTitle: Device q2 external state Plotname: Device Operating Point Command: deftype v conductance S Flags: real No. Variables: 10 No. Points: 1 Variables: 0 time unknown 1 v13 voltage 2 v23 voltage 3 i1 current 4 i2 current 5 i3 current 6 g22 conductance 7 g21 conductance 8 g12 conductance 9 g11 conductance Values: 0 9.547361e-07 6.661113e-01 8.689735e-01 4.614139e-03 1.362001e-03 -5.976140e-03 2.998281e-02 -4.523570e-04 2.519767e-02 1.634822e-03 Title: Device q2 (nbjt) internal state Plotname: Device Cross Section Flags: real Command: deftype p xs cross Command: deftype v distance m Command: deftype v concentration cm^-3 Command: deftype v electric_field V/cm Command: deftype v current_density A/cm^2 Command: deftype v concentration/time cm^-3/s Command: deftype v mobility cm^2/Vs No. Variables: 19 No. Points: 61 Variables: 0 x distance 1 psi voltage 2 equ.psi voltage 3 vac.psi voltage 4 phin voltage 5 phip voltage 6 phiv voltage 7 dop concentration 8 n concentration 9 p concentration 10 e electric_field 11 jc current_density 12 jd current_density 13 jn current_density 14 jp current_density 15 jt current_density 16 unet concentration/time 17 mun mobility 18 mup mobility Values: 0 0.000000e+00 4.073931e-01 4.073931e-01 -4.205556e+00 0.000000e+00 0.000000e+00 9.652296e-01 9.100000e+16 9.100000e+16 1.895333e+03 0.000000e+00 -5.976142e+03 1.463282e-03 -4.606430e+03 -1.369711e+03 -5.976140e+03 0.000000e+00 7.814529e+02 4.294101e+02 1 5.000000e-08 4.103808e-01 4.073931e-01 -4.202568e+00 1.985482e-03 7.345519e-01 9.682173e-01 9.100000e+16 9.459543e+16 3.644455e+15 -5.785859e+02 -5.976142e+03 1.328119e-03 -4.606438e+03 -1.369704e+03 -5.976140e+03 6.952835e+20 7.814529e+02 4.294101e+02 2 1.000000e-07 4.131790e-01 4.073931e-01 -4.199770e+00 3.899521e-03 7.539610e-01 9.710155e-01 9.100000e+16 9.788486e+16 6.927122e+15 -5.432899e+02 -5.976141e+03 1.086392e-03 -4.606461e+03 -1.369681e+03 -5.976140e+03 1.217993e+21 7.814529e+02 4.294101e+02 3 1.500000e-07 4.158137e-01 4.073931e-01 -4.197135e+00 5.752644e-03 7.658914e-01 9.736502e-01 9.100000e+16 1.008881e+17 9.922914e+15 -5.135057e+02 -5.976141e+03 8.992583e-04 -4.606496e+03 -1.369645e+03 -5.976140e+03 1.635704e+21 7.814529e+02 4.294101e+02 4 2.000000e-07 4.183140e-01 4.073931e-01 -4.194635e+00 7.553262e-03 7.747408e-01 9.761505e-01 9.100000e+16 1.036547e+17 1.268379e+16 -4.887989e+02 -5.976141e+03 7.560448e-04 -4.606543e+03 -1.369598e+03 -5.976140e+03 1.983549e+21 7.814529e+02 4.294101e+02 5 2.500000e-07 4.207017e-01 4.073931e-01 -4.192247e+00 9.307944e-03 7.818901e-01 9.785382e-01 9.100000e+16 1.062228e+17 1.524765e+16 -4.679290e+02 -5.976141e+03 6.433253e-04 -4.606600e+03 -1.369541e+03 -5.976140e+03 2.281851e+21 7.814529e+02 4.294101e+02 6 3.000000e-07 4.229933e-01 4.073931e-01 -4.189956e+00 1.102193e-02 7.879560e-01 9.808298e-01 9.100000e+16 1.086217e+17 1.764325e+16 -4.500022e+02 -5.976141e+03 5.522879e-04 -4.606668e+03 -1.369473e+03 -5.976140e+03 2.543310e+21 7.814529e+02 4.294101e+02 7 3.500000e-07 4.252017e-01 4.073931e-01 -4.187747e+00 1.269951e-02 7.932685e-01 9.830382e-01 9.100000e+16 1.108741e+17 1.989299e+16 -4.343902e+02 -5.976141e+03 4.771705e-04 -4.606745e+03 -1.369396e+03 -5.976140e+03 2.776342e+21 7.814529e+02 4.294101e+02 8 4.000000e-07 4.273372e-01 4.073931e-01 -4.185612e+00 1.434423e-02 7.980252e-01 9.851737e-01 9.100000e+16 1.129980e+17 2.201475e+16 -4.206379e+02 -5.976141e+03 4.140668e-04 -4.606830e+03 -1.369311e+03 -5.976140e+03 2.986788e+21 7.814529e+02 4.294101e+02 9 4.500000e-07 4.294081e-01 4.073931e-01 -4.183541e+00 1.595907e-02 8.023541e-01 9.872446e-01 9.100000e+16 1.150081e+17 2.402306e+16 -4.084070e+02 -5.976141e+03 3.602378e-04 -4.606924e+03 -1.369217e+03 -5.976140e+03 3.178852e+21 7.814529e+02 4.294101e+02 10 5.000000e-07 4.314213e-01 4.073931e-01 -4.181528e+00 1.754660e-02 8.063429e-01 9.892578e-01 9.100000e+16 1.169165e+17 2.592994e+16 -3.974395e+02 -5.976141e+03 3.137083e-04 -4.607025e+03 -1.369115e+03 -5.976140e+03 3.355660e+21 7.814529e+02 4.294101e+02 11 5.500000e-07 4.333825e-01 4.073931e-01 -4.179567e+00 1.910901e-02 8.100544e-01 9.912190e-01 9.100000e+16 1.187332e+17 2.774541e+16 -3.875349e+02 -5.976141e+03 2.730186e-04 -4.607134e+03 -1.369006e+03 -5.976140e+03 3.519590e+21 7.814529e+02 4.294101e+02 12 6.000000e-07 4.352966e-01 4.073931e-01 -4.177653e+00 2.064822e-02 8.135352e-01 9.931331e-01 9.100000e+16 1.204669e+17 2.947801e+16 -3.785345e+02 -5.976141e+03 2.370664e-04 -4.607251e+03 -1.368890e+03 -5.976140e+03 3.672497e+21 7.814529e+02 4.294101e+02 13 6.500000e-07 4.371678e-01 4.073931e-01 -4.175781e+00 2.216590e-02 8.168209e-01 9.950043e-01 9.100000e+16 1.221248e+17 3.113501e+16 -3.703112e+02 -5.976140e+03 2.050014e-04 -4.607374e+03 -1.368767e+03 -5.976140e+03 3.815853e+21 7.814529e+02 4.294101e+02 14 7.000000e-07 4.389997e-01 4.073931e-01 -4.173949e+00 2.366355e-02 8.199392e-01 9.968362e-01 9.100000e+16 1.237134e+17 3.272271e+16 -3.627613e+02 -5.976140e+03 1.761564e-04 -4.607504e+03 -1.368636e+03 -5.976140e+03 3.950845e+21 7.814529e+02 4.294101e+02 15 7.500000e-07 4.407954e-01 4.073927e-01 -4.172154e+00 2.514247e-02 8.229122e-01 9.986320e-01 9.100000e+16 1.252379e+17 3.424658e+16 -3.557969e+02 -5.976140e+03 1.500371e-04 -4.607641e+03 -1.368500e+03 -5.976140e+03 4.078444e+21 7.814529e+02 4.294101e+02 16 8.000000e-07 4.425577e-01 4.073877e-01 -4.170391e+00 2.660386e-02 8.257578e-01 1.000394e+00 9.100000e+16 1.267033e+17 3.571147e+16 -3.492759e+02 -5.976140e+03 1.269291e-04 -4.607784e+03 -1.368357e+03 -5.976140e+03 4.199455e+21 7.814529e+02 4.294101e+02 17 8.500000e-07 4.442882e-01 4.073100e-01 -4.168661e+00 2.804880e-02 8.284906e-01 1.002125e+00 9.100000e+16 1.281099e+17 3.712258e+16 -3.412161e+02 -5.976140e+03 1.209083e-04 -4.607933e+03 -1.368208e+03 -5.976140e+03 4.314555e+21 7.814529e+02 4.294101e+02 18 9.000000e-07 4.459699e-01 4.061040e-01 -4.166979e+00 2.947882e-02 8.311219e-01 1.003806e+00 9.100000e+16 1.293624e+17 3.851088e+16 -2.789376e+02 -5.976141e+03 4.061329e-04 -4.608088e+03 -1.368052e+03 -5.976140e+03 4.424266e+21 7.814529e+02 4.294101e+02 19 9.500000e-07 4.470776e-01 3.877904e-01 -4.165872e+00 3.091046e-02 8.336344e-01 1.004914e+00 9.100000e+16 1.277524e+17 4.066043e+16 1.289530e+03 -5.976145e+03 5.061408e-03 -4.608254e+03 -1.367891e+03 -5.976140e+03 4.525784e+21 8.671467e+02 4.435317e+02 20 1.000000e-06 4.330746e-01 1.825143e-01 -4.179875e+00 3.273747e-02 8.355060e-01 9.941323e-01 -9.000000e+15 6.116079e+16 6.631924e+16 1.315232e+03 -5.976145e+03 5.110151e-03 -4.608428e+03 -1.367718e+03 -5.976140e+03 1.797850e+21 1.099026e+03 4.746246e+02 21 1.050000e-06 4.339253e-01 1.208957e-02 -4.179024e+00 3.466572e-02 8.368041e-01 9.949830e-01 -9.000000e+15 5.866508e+16 6.747650e+16 -2.430563e+02 -5.976141e+03 3.020086e-04 -4.608606e+03 -1.367534e+03 -5.976140e+03 1.746866e+21 1.245212e+03 4.915960e+02 22 1.100000e-06 4.355051e-01 -1.235357e-01 -4.177444e+00 3.665141e-02 8.380991e-01 9.965629e-01 -9.000000e+15 5.775174e+16 6.673727e+16 -3.215667e+02 -5.976140e+03 -2.452852e-04 -4.608792e+03 -1.367348e+03 -5.976140e+03 1.719848e+21 1.245212e+03 4.915960e+02 23 1.150000e-06 4.371409e-01 -2.243669e-01 -4.175808e+00 3.866773e-02 8.394093e-01 9.981987e-01 -9.000000e+15 5.690834e+16 6.590249e+16 -3.294248e+02 -5.976140e+03 -3.383207e-04 -4.608983e+03 -1.367157e+03 -5.976140e+03 1.693922e+21 1.245212e+03 4.915960e+02 24 1.200000e-06 4.387994e-01 -2.906612e-01 -4.174150e+00 4.071435e-02 8.407361e-01 9.998571e-01 -9.000000e+15 5.606060e+16 6.506298e+16 -3.307697e+02 -5.976140e+03 -3.823755e-04 -4.609179e+03 -1.366961e+03 -5.976140e+03 1.667926e+21 1.245212e+03 4.915960e+02 25 1.250000e-06 4.404486e-01 -3.255617e-01 -4.172501e+00 4.279366e-02 8.420792e-01 1.001999e+00 -9.000000e+15 5.513618e+16 6.429734e+16 -2.675386e+02 -5.295141e+03 -1.021545e-03 -4.609381e+03 -6.857596e+02 -5.295142e+03 1.640644e+21 1.245212e+03 4.915960e+02 26 1.300000e-06 4.414748e-01 -3.387915e-01 -4.171474e+00 4.493475e-02 8.420839e-01 1.002532e+00 -9.000000e+15 5.280986e+16 6.180757e+16 -2.061112e+02 -4.614142e+03 -1.667479e-03 -4.609585e+03 -4.556695e+00 -4.614144e+03 1.568594e+21 1.245212e+03 4.915960e+02 27 1.350000e-06 4.425097e-01 -3.391181e-01 -4.170439e+00 4.717407e-02 8.420886e-01 1.003567e+00 -9.000000e+15 5.040720e+16 5.939383e+16 -2.121638e+02 -4.614142e+03 -1.743398e-03 -4.609786e+03 -4.355538e+00 -4.614144e+03 1.495714e+21 1.245212e+03 4.915960e+02 28 1.400000e-06 4.435964e-01 -3.268197e-01 -4.169353e+00 4.952287e-02 8.420932e-01 1.004654e+00 -9.000000e+15 4.800642e+16 5.696039e+16 -2.351282e+02 -4.614142e+03 -1.969675e-03 -4.609985e+03 -4.156436e+00 -4.614144e+03 1.423230e+21 1.245212e+03 4.915960e+02 29 1.450000e-06 4.448610e-01 -2.935050e-01 -4.168088e+00 5.198654e-02 8.420979e-01 1.005919e+00 -9.000000e+15 4.583169e+16 5.425204e+16 -4.770531e+02 -4.614140e+03 -3.196524e-03 -4.610182e+03 -3.958743e+00 -4.614144e+03 1.354880e+21 1.265790e+03 4.934827e+02 30 1.500000e-06 4.483669e-01 -2.291924e-01 -4.164582e+00 5.439292e-02 8.421027e-01 1.009594e+00 1.000000e+15 4.751005e+16 4.707449e+16 -4.829365e+02 -4.614140e+03 -3.295373e-03 -4.610376e+03 -3.763883e+00 -4.614144e+03 1.224725e+21 1.308541e+03 4.972949e+02 31 1.550000e-06 4.496904e-01 -1.690606e-01 -4.163259e+00 5.671392e-02 8.421077e-01 1.010917e+00 1.000000e+15 4.571255e+16 4.473494e+16 -2.560350e+02 -4.614141e+03 -2.270996e-03 -4.610569e+03 -3.572199e+00 -4.614144e+03 1.172389e+21 1.330714e+03 4.992203e+02 32 1.600000e-06 4.509273e-01 -1.128261e-01 -4.162022e+00 5.913470e-02 8.421127e-01 1.012154e+00 1.000000e+15 4.366730e+16 4.265417e+16 -2.524573e+02 -4.614141e+03 -2.263523e-03 -4.610759e+03 -3.382496e+00 -4.614144e+03 1.117325e+21 1.330714e+03 4.992203e+02 33 1.650000e-06 4.522150e-01 -6.046175e-02 -4.160734e+00 6.167224e-02 8.421177e-01 1.013442e+00 1.000000e+15 4.160730e+16 4.059033e+16 -2.641018e+02 -4.614141e+03 -2.411906e-03 -4.610946e+03 -3.195183e+00 -4.614144e+03 1.062383e+21 1.330714e+03 4.992203e+02 34 1.700000e-06 4.535683e-01 -1.196441e-02 -4.159381e+00 6.433887e-02 8.421226e-01 1.014795e+00 1.000000e+15 3.954736e+16 3.852837e+16 -2.780099e+02 -4.614141e+03 -2.598787e-03 -4.611131e+03 -3.010321e+00 -4.614144e+03 1.007730e+21 1.330714e+03 4.992203e+02 35 1.750000e-06 4.549951e-01 3.266628e-02 -4.157954e+00 6.714838e-02 8.421274e-01 1.016222e+00 1.000000e+15 3.748861e+16 3.646743e+16 -2.935426e+02 -4.614141e+03 -2.816064e-03 -4.611313e+03 -2.827925e+00 -4.614144e+03 9.533696e+20 1.330714e+03 4.992203e+02 36 1.800000e-06 4.565037e-01 7.343052e-02 -4.156445e+00 7.011685e-02 8.421323e-01 1.017731e+00 1.000000e+15 3.543132e+16 3.440756e+16 -3.109174e+02 -4.614141e+03 -3.068635e-03 -4.611493e+03 -2.648005e+00 -4.614144e+03 8.992914e+20 1.330714e+03 4.992203e+02 37 1.850000e-06 4.581042e-01 1.103289e-01 -4.154845e+00 7.326318e-02 8.421371e-01 1.019331e+00 1.000000e+15 3.337574e+16 3.234892e+16 -3.304762e+02 -4.614140e+03 -3.364524e-03 -4.611670e+03 -2.470573e+00 -4.614144e+03 8.454874e+20 1.330714e+03 4.992203e+02 38 1.900000e-06 4.598085e-01 1.433639e-01 -4.153141e+00 7.660986e-02 8.421418e-01 1.021036e+00 1.000000e+15 3.132220e+16 3.029166e+16 -3.526574e+02 -4.614140e+03 -3.714590e-03 -4.611844e+03 -2.295641e+00 -4.614144e+03 7.919502e+20 1.330714e+03 4.992203e+02 39 1.950000e-06 4.616308e-01 1.725436e-01 -4.151318e+00 8.018390e-02 8.421466e-01 1.022858e+00 1.000000e+15 2.927108e+16 2.823600e+16 -3.780265e+02 -4.614140e+03 -4.133574e-03 -4.612016e+03 -2.123223e+00 -4.614144e+03 7.386741e+20 1.330714e+03 4.992203e+02 40 2.000000e-06 4.635887e-01 1.978920e-01 -4.149360e+00 8.401809e-02 8.421513e-01 1.024816e+00 1.000000e+15 2.722287e+16 2.618217e+16 -4.073245e+02 -4.614139e+03 -4.641872e-03 -4.612186e+03 -1.953335e+00 -4.614144e+03 6.856552e+20 1.330714e+03 4.992203e+02 41 2.050000e-06 4.657041e-01 2.194673e-01 -4.147245e+00 8.815282e-02 8.421559e-01 1.026931e+00 1.000000e+15 2.517822e+16 2.413043e+16 -4.415426e+02 -4.614139e+03 -5.268394e-03 -4.612353e+03 -1.785999e+00 -4.614144e+03 6.328929e+20 1.330714e+03 4.992203e+02 42 2.100000e-06 4.680042e-01 2.373919e-01 -4.144945e+00 9.263851e-02 8.421605e-01 1.029231e+00 1.000000e+15 2.313803e+16 2.208109e+16 -4.820395e+02 -4.614138e+03 -6.055378e-03 -4.612517e+03 -1.621235e+00 -4.614144e+03 5.803905e+20 1.330714e+03 4.992203e+02 43 2.150000e-06 4.705244e-01 2.518812e-01 -4.142425e+00 9.753928e-02 8.421651e-01 1.031751e+00 1.000000e+15 2.110351e+16 2.003451e+16 -5.307324e+02 -4.614137e+03 -7.067023e-03 -4.612678e+03 -1.459068e+00 -4.614144e+03 5.281578e+20 1.330714e+03 4.992203e+02 44 2.200000e-06 4.733115e-01 2.632593e-01 -4.139638e+00 1.029382e-01 8.421697e-01 1.034539e+00 1.000000e+15 1.907646e+16 1.799107e+16 -5.904258e+02 -4.614136e+03 -8.406166e-03 -4.612836e+03 -1.299524e+00 -4.614144e+03 4.762143e+20 1.330714e+03 4.992203e+02 45 2.250000e-06 4.764287e-01 2.719437e-01 -4.136520e+00 1.089454e-01 8.421742e-01 1.037656e+00 1.000000e+15 1.705967e+16 1.595110e+16 -6.654209e+02 -4.614134e+03 -1.024905e-02 -4.612991e+03 -1.142617e+00 -4.614144e+03 4.245960e+20 1.330714e+03 4.992203e+02 46 2.300000e-06 4.799657e-01 2.784023e-01 -4.132983e+00 1.157107e-01 8.421787e-01 1.041193e+00 1.000000e+15 1.505785e+16 1.391474e+16 -7.627317e+02 -4.614131e+03 -1.292287e-02 -4.613143e+03 -9.883481e-01 -4.614144e+03 3.733687e+20 1.330714e+03 4.992203e+02 47 2.350000e-06 4.840560e-01 2.831006e-01 -4.128893e+00 1.234439e-01 8.421832e-01 1.045283e+00 1.000000e+15 1.307961e+16 1.188142e+16 -8.946966e+02 -4.614127e+03 -1.708106e-02 -4.613291e+03 -8.366726e-01 -4.614144e+03 3.226574e+20 1.330714e+03 4.992203e+02 48 2.400000e-06 4.889127e-01 2.864581e-01 -4.124036e+00 1.324471e-01 8.421876e-01 1.050140e+00 1.000000e+15 1.114214e+16 9.849027e+15 -1.084664e+03 -4.614120e+03 -2.406361e-02 -4.613433e+03 -6.874750e-01 -4.614144e+03 2.727075e+20 1.330714e+03 4.992203e+02 49 2.450000e-06 4.949027e-01 2.888249e-01 -4.118046e+00 1.431660e-01 8.421921e-01 1.056130e+00 1.000000e+15 9.280320e+15 7.814259e+15 -1.378206e+03 -4.614108e+03 -3.641802e-02 -4.613568e+03 -5.406526e-01 -4.614145e+03 2.239976e+20 1.330714e+03 4.992203e+02 50 2.500000e-06 5.026947e-01 2.904766e-01 -4.110254e+00 1.562616e-01 8.421965e-01 1.063922e+00 1.000000e+15 7.559799e+15 5.782606e+15 -1.858922e+03 -4.614087e+03 -5.784952e-02 -4.613690e+03 -3.968926e-01 -4.614145e+03 1.773452e+20 1.330714e+03 4.992203e+02 51 2.550000e-06 5.134919e-01 2.916210e-01 -4.099457e+00 1.726890e-01 8.422011e-01 1.074719e+00 1.000000e+15 6.080935e+15 3.809792e+15 -2.650931e+03 -4.614055e+03 -9.041195e-02 -4.613794e+03 -2.603745e-01 -4.614145e+03 1.336608e+20 1.330714e+03 4.992203e+02 52 2.600000e-06 5.292040e-01 2.924102e-01 -4.083745e+00 1.937501e-01 8.422058e-01 1.090431e+00 1.000000e+15 4.944875e+15 2.075643e+15 -3.865189e+03 -4.614017e+03 -1.280169e-01 -4.613874e+03 -1.427050e-01 -4.614145e+03 9.280156e+19 1.330714e+03 4.992203e+02 53 2.650000e-06 5.521438e-01 2.929529e-01 -4.060805e+00 2.210393e-01 8.422109e-01 1.113371e+00 1.000000e+15 4.179466e+15 8.551623e+14 -5.486661e+03 -4.613989e+03 -1.550175e-01 -4.613929e+03 -5.993413e-02 -4.614144e+03 5.352204e+19 1.330714e+03 4.992203e+02 54 2.700000e-06 5.840707e-01 2.933258e-01 -4.028878e+00 2.560557e-01 8.422161e-01 1.145298e+00 1.000000e+15 3.708894e+15 2.489098e+14 -7.336553e+03 -4.613982e+03 -1.598860e-01 -4.613964e+03 -1.795873e-02 -4.614142e+03 2.092705e+19 1.330714e+03 4.992203e+02 55 2.750000e-06 6.255093e-01 2.935827e-01 -3.987440e+00 2.995796e-01 8.422218e-01 1.186736e+00 1.000000e+15 3.421605e+15 5.015639e+13 -9.204674e+03 -4.613991e+03 -1.484678e-01 -4.613986e+03 -4.438214e-03 -4.614139e+03 4.852452e+18 1.330714e+03 4.992203e+02 56 2.800000e-06 6.761174e-01 2.937611e-01 -3.936832e+00 3.516285e-01 8.422345e-01 1.237344e+00 1.000000e+15 3.236206e+15 7.091884e+12 -1.098353e+04 -4.614002e+03 -1.347991e-01 -4.614001e+03 -1.049552e-03 -4.614137e+03 7.116062e+17 1.330714e+03 4.992203e+02 57 2.850000e-06 7.353446e-01 2.938870e-01 -3.877605e+00 4.119035e-01 8.422284e-01 1.296572e+00 1.000000e+15 3.107722e+15 7.180505e+11 -1.266013e+04 -4.614014e+03 -1.224181e-01 -4.614014e+03 3.218255e-04 -4.614136e+03 7.247320e+16 1.330714e+03 4.992203e+02 58 2.900000e-06 8.027187e-01 2.939791e-01 -3.810230e+00 4.801047e-01 8.418451e-01 1.363946e+00 1.000000e+15 3.009918e+15 5.228971e+10 -1.425196e+04 -4.614025e+03 -1.114047e-01 -4.614025e+03 2.076804e-04 -4.614136e+03 5.281006e+15 1.330714e+03 4.992203e+02 59 2.950000e-06 8.778642e-01 2.940512e-01 -3.735085e+00 5.565162e-01 8.433068e-01 1.439091e+00 1.000000e+15 2.866129e+15 3.028077e+09 -1.575065e+04 -4.614031e+03 -1.071114e-01 -4.614031e+03 -1.327320e-05 -4.614138e+03 3.058314e+14 1.330714e+03 4.992203e+02 60 3.000000e-06 9.602252e-01 2.941139e-01 -3.652724e+00 6.661113e-01 6.661113e-01 1.521452e+00 1.000000e+15 1.000000e+15 1.326979e+05 0.000000e+00 -4.614032e+03 -1.072907e-01 -4.614032e+03 9.042417e-05 -4.614139e+03 0.000000e+00 1.330714e+03 4.992203e+02 tmp_ns50wwy/examples/cider/cider-gnuplot/passq1.cir0000644000175000017500000000471414163340332022546 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 .option 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 .control tran 0.05ns 0.2ns 0.0ns 0.05ns shell 'rm -f tnew*.plt tnew*.data tnew*,png tnew*.eps' shell 'ls' shell 'sleep 1' gnuplot tnewp0 v(1) i(Vdrn) shell 'sleep 1' set gnuplot_terminal=png gnuplot tnewp1 vb#branch shell 'sleep 1' set gnuplot_terminal=eps gnuplot tnewp2 vg#branch shell 'sleep 1' set gnuplot_terminal=png/quit gnuplot tnewp3 i(vb) i(vg) shell 'sleep 1' set gnuplot_terminal=eps/quit gnuplot tnewp4 i(vin) shell 'sleep 1' set gnuplot_terminal=xterm gnuplot tnewp5 i(vb) i(vg) shell 'sleep 1' set gnuplot_terminal=xterm gnuplot tnewp6 i(vin) shell 'sleep 1' unset gnuplot_terminal load $inputdir/TR.200.q2.ascii gnuplot newa0 xycontour n p shell 'sleep 1' set gnuplot_terminal=png gnuplot newa1 xycontour phiv phip phin shell 'sleep 1' set gnuplot_terminal=eps gnuplot newa2 xycontour dop shell 'sleep 1' set gnuplot_terminal=png/quit gnuplot newa3 xycontour n shell 'sleep 1' set gnuplot_terminal=eps/quit gnuplot newa4 xycontour p shell 'sleep 1' set gnuplot_terminal=xterm gnuplot newa5 xycontour mun mup shell 'sleep 1' unset gnuplot_terminal quit .endc tmp_ns50wwy/examples/cider/cider-gnuplot/README0000644000175000017500000000112714163340332021512 0ustar carstencarsten To run gnuplot xycontour tests. ------------------------------- The gnuplot command in ngspice is: gnuplot xycontour xycontour is a new flag. Only a single is allowed to be plotted in a contour diagram. With vs only is plotted. ngspice passq.cir This plots xy contour diagrams for 2d Cider save file data. On visualc Windows in a cmd shell, run 'winq.cir'. ngspice passq1.cir This checks that gnuplot xycontour works with 1d data. The xycontour flag is just ignored. On visualc Windows in a cmd shell, run 'winq1.cir'. tmp_ns50wwy/examples/cider/cider-gnuplot/winq.cir0000644000175000017500000000513614163340332022313 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 .option 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 .control tran 0.05ns 0.2ns 0.0ns 0.05ns print v(1) i(Vdrn) plot v(1) i(Vdrn) gnuplot tmp v(1) i(Vdrn) shell 'rm -f new*.plt new*.data new*,png new*.eps' shell 'ls' shell 'timeout /t 1' load $inputdir/DC.12.qj1.ascii gnuplot new0 xycontour phip shell 'timeout /t 1' set gnuplot_terminal=png gnuplot new1 xycontour psi shell 'timeout /t 1' set gnuplot_terminal=eps gnuplot new2 xycontour ex shell 'timeout /t 1' set gnuplot_terminal=png/quit gnuplot new3 xycontour ey shell 'timeout /t 1' set gnuplot_terminal=eps/quit gnuplot new4 xycontour phin shell 'timeout /t 1' set gnuplot_terminal=xterm gnuplot new5 xycontour vac.psi shell 'timeout /t 1' unset gnuplot_terminal gnuplot new6 xycontour sqrt((ex * ex) + (ey * ey)) shell 'timeout /t 1' gnuplot new7 xycontour sqrt(jpx * jpx + jpy * jpy) shell 'timeout /t 1' gnuplot new8 xycontour ex ey shell 'timeout /t 1' gnuplot new9 xycontour x shell 'timeout /t 1' gnuplot new10 xycontour abs(y + x + n + p) shell 'timeout /t 1' gnuplot new11 xycontour Y shell 'timeout /t 1' load $inputdir/TR.300.d1.ascii gnuplot newb0 xycontour dop shell 'timeout /t 1' gnuplot newb1 xycontour p vs n shell 'timeout /t 1' gnuplot tmp xycontour abs((3.0,4.0)) shell 'timeout /t 1' quit .endc tmp_ns50wwy/examples/cider/cider-gnuplot/winq1.cir0000644000175000017500000000502214163340332022366 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 .option 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 .control tran 0.05ns 0.2ns 0.0ns 0.05ns shell 'rm -f tnew*.plt tnew*.data tnew*,png tnew*.eps' shell 'ls' shell 'timeout /t 1' gnuplot tnewp0 v(1) i(Vdrn) shell 'timeout /t 1' set gnuplot_terminal=png gnuplot tnewp1 vb#branch shell 'timeout /t 1' set gnuplot_terminal=eps gnuplot tnewp2 vg#branch shell 'timeout /t 1' set gnuplot_terminal=png/quit gnuplot tnewp3 i(vb) i(vg) shell 'timeout /t 1' set gnuplot_terminal=eps/quit gnuplot tnewp4 i(vin) shell 'timeout /t 1' set gnuplot_terminal=xterm gnuplot tnewp5 i(vb) i(vg) shell 'timeout /t 1' set gnuplot_terminal=xterm gnuplot tnewp6 i(vin) shell 'timeout /t 1' unset gnuplot_terminal load $inputdir/TR.200.q2.ascii gnuplot newa0 xycontour n p shell 'timeout /t 1' set gnuplot_terminal=png gnuplot newa1 xycontour phiv phip phin shell 'timeout /t 1' set gnuplot_terminal=eps gnuplot newa2 xycontour dop shell 'timeout /t 1' set gnuplot_terminal=png/quit gnuplot newa3 xycontour n shell 'timeout /t 1' set gnuplot_terminal=eps/quit gnuplot newa4 xycontour p shell 'timeout /t 1' set gnuplot_terminal=xterm gnuplot newa5 xycontour mun mup shell 'timeout /t 1' unset gnuplot_terminal quit .endc tmp_ns50wwy/examples/cider/cider-gnuplot/passq.cir0000644000175000017500000000501614163340332022461 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 .option 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 .control tran 0.05ns 0.2ns 0.0ns 0.05ns print v(1) i(Vdrn) plot v(1) i(Vdrn) gnuplot tmp v(1) i(Vdrn) shell 'rm -f new*.plt new*.data new*,png new*.eps' shell 'ls' shell 'sleep 1' load $inputdir/DC.12.qj1.ascii gnuplot new0 xycontour phip shell 'sleep 1' set gnuplot_terminal=png gnuplot new1 xycontour psi shell 'sleep 1' set gnuplot_terminal=eps gnuplot new2 xycontour ex shell 'sleep 1' set gnuplot_terminal=png/quit gnuplot new3 xycontour ey shell 'sleep 1' set gnuplot_terminal=eps/quit gnuplot new4 xycontour phin shell 'sleep 1' set gnuplot_terminal=xterm gnuplot new5 xycontour vac.psi shell 'sleep 1' unset gnuplot_terminal gnuplot new6 xycontour sqrt((ex * ex) + (ey * ey)) shell 'sleep 1' gnuplot new7 xycontour sqrt(jpx * jpx + jpy * jpy) shell 'sleep 1' gnuplot new8 xycontour ex ey shell 'sleep 1' gnuplot new9 xycontour x shell 'sleep 1' gnuplot new10 xycontour abs(y + x + n + p) shell 'sleep 1' gnuplot new11 xycontour Y shell 'sleep 1' load $inputdir/TR.300.d1.ascii gnuplot newb0 xycontour dop shell 'sleep 1' gnuplot newb1 xycontour p vs n shell 'sleep 1' gnuplot tmp xycontour abs((3.0,4.0)) shell 'sleep 1' quit .endc tmp_ns50wwy/examples/cider/jfet/0000755000175000017500000000000014163340332017005 5ustar carstencarstentmp_ns50wwy/examples/cider/jfet/jfet.cir0000644000175000017500000000155414163340332020441 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 dc i(vss) .end tmp_ns50wwy/examples/measure/0000755000175000017500000000000014163340332016430 5ustar carstencarstentmp_ns50wwy/examples/measure/rc-meas-ac.sp0000644000175000017500000000243414163340332020707 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 tmp_ns50wwy/examples/measure/simple-meas-tran.sp0000644000175000017500000000434414163340332022157 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 tmp_ns50wwy/examples/measure/inv-meas-tran-auto.sp0000644000175000017500000000601514163340332022425 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 tmp_ns50wwy/examples/measure/inv-meas-tran-control.sp0000644000175000017500000000624414163340332023141 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 tmp_ns50wwy/examples/measure/buggy-meas-tran.sp0000644000175000017500000000711714163340332022004 0ustar carstencarstenFile: buggy-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 tra tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 .measure tran tdiff RIG 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 FALL=3 TARG v(2) VAL=0 FALL=3 .measure tran tdiff TRIG v(1) VAL=-0.6 CROS=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 WHE 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=2 m .measure tran ymax MAX v(2) fro m=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() from=2m to=3.5m .measure tran yavg AVG v(1) from 2m to=4m .measure tran yint INTER 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 echo echo **** buggy .measure lines run *plot v(1) v(2) *plot i(vac1) echo echo **** good meas lines 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 echo echo **** out of intervall examples meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=25 meas tran tdiff TRIG v(1) VAL=0.5 RISE=3 TARG v(1) VAL=0.5 RISE=2 meas tran teval WHEN v(2)=70 CROSS=LAST meas tran yeval FIND v(2) AT=2 echo echo **** buggy input lines 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 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 meas tran tdiff TRIG v(1) VAL=0.5 meas tran tdiff TRIG v(1) meas tran tdiff TRIG meas tran tdiff meas tran meas echo echo **** more buggy lines meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran TRIG v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff v(1) VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG VAL=0.5 RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 RISE=1 TARG v(1) RISE=2 meas tran tdiff TRIG v(1) VAL= RISE=1 TARG v(1) VAL=0.5 RISE=2 meas tran tdiff TRIG v(1) VAL=0.5 RISE= TARG v(1) VAL=0.5 RISE=2 .endc .end tmp_ns50wwy/examples/measure/inv-meas-tran.sp0000644000175000017500000000607714163340332021467 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 tmp_ns50wwy/examples/measure/mos-meas-dc.sp0000644000175000017500000000152014163340332021077 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 tmp_ns50wwy/examples/measure/rc-meas-ac-control.sp0000644000175000017500000000271114163340332022363 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 tmp_ns50wwy/examples/measure/mos-meas-dc-control.sp0000644000175000017500000000314414163340332022561 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 tmp_ns50wwy/examples/measure/func_cap.sp0000644000175000017500000000037414163340332020556 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 tmp_ns50wwy/examples/TransImpedanceAmp/0000755000175000017500000000000014163340332020322 5ustar carstencarstentmp_ns50wwy/examples/TransImpedanceAmp/output.net0000644000175000017500000002317614163340332022403 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 tmp_ns50wwy/examples/TransImpedanceAmp/README0000644000175000017500000000274714163340332021214 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. tmp_ns50wwy/examples/control_structs/0000755000175000017500000000000014163340332020236 5ustar carstencarstentmp_ns50wwy/examples/control_structs/if-test-1.cir0000644000175000017500000000243214163340332022447 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 tmp_ns50wwy/examples/control_structs/foreach_bjt_ft.sp0000644000175000017500000000251614163340332023545 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 tmp_ns50wwy/examples/control_structs/if-batchmode.cir0000644000175000017500000000072014163340332023256 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 tmp_ns50wwy/examples/control_structs/s-param.cir0000644000175000017500000000620314163340332022276 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 tmp_ns50wwy/examples/control_structs/new-check-4.sp0000644000175000017500000000351314163340332022611 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 tmp_ns50wwy/examples/control_structs/repeat3.sp0000644000175000017500000000564314163340332022155 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 tmp_ns50wwy/examples/control_structs/new-check-3.sp0000644000175000017500000000277414163340332022620 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 tmp_ns50wwy/examples/xspice/0000755000175000017500000000000014163340332016262 5ustar carstencarstentmp_ns50wwy/examples/xspice/xspice_c3.cir0000644000175000017500000000433014163340332020641 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 tmp_ns50wwy/examples/xspice/state/0000755000175000017500000000000014163340332017402 5ustar carstencarstentmp_ns50wwy/examples/xspice/state/nggtk.tcl0000644000175000017500000000046114163340332021221 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 tmp_ns50wwy/examples/xspice/state/state-machine.cir0000644000175000017500000000243414163340332022626 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 tmp_ns50wwy/examples/xspice/state/state.in0000644000175000017500000000055114163340332021053 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 tmp_ns50wwy/examples/xspice/xspice_c2.cir0000644000175000017500000000042214163340332020636 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 tmp_ns50wwy/examples/xspice/filesource/0000755000175000017500000000000014163340332020422 5ustar carstencarstentmp_ns50wwy/examples/xspice/filesource/my-source.txt0000644000175000017500000000023514163340332023106 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 tmp_ns50wwy/examples/xspice/filesource/simple-filesource.cir0000644000175000017500000000107614163340332024554 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 .endtmp_ns50wwy/examples/xspice/d_lut/0000755000175000017500000000000014163340332017371 5ustar carstencarstentmp_ns50wwy/examples/xspice/d_lut/mult4bit.spi0000644000175000017500000001015314163340332021652 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 tmp_ns50wwy/examples/xspice/fstest.sp0000644000175000017500000000107714163340332020143 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 tmp_ns50wwy/examples/xspice/sine.m0000644000175000017500000003332214163340332017401 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 tmp_ns50wwy/examples/xspice/delay/0000755000175000017500000000000014163340332017360 5ustar carstencarstentmp_ns50wwy/examples/xspice/delay/analog-delay1.cir0000644000175000017500000000301314163340332022472 0ustar carstencarstenExamples of XSPICE analog delay .param freq=1k ** constant delay a1 in1 out1 cntrl1 newdelay .model newdelay delay(delay=400u) V1 in1 0 dc 0 sin(0 1 'freq') Vc1 cntrl1 0 0 ** delay of one sin period distributed between 2 and 8 ms a2 in2 out2 cntrl2 newdelay2 .model newdelay2 delay(has_delay_cnt=TRUE) V2 in2 0 dc 0 sin(0 1 1k) Vc2 cntrl2 0 dc 0.01 Pulse (0.00 0.1 2m 6m 2m 1 1) ** delay controlled between delmin and delmax a3 in3 out3 cntrl3 newdelay3 .model newdelay3 delay(delmin=0.05m delmax=0.2m has_delay_cnt=TRUE) V3 in3 0 dc 0.05 pulse(0 0.95 0.1m 10u 10u 0.3m 0.6m) Vc3 cntrl3 0 dc 0.01 Pulse (0 1 3m 4m 2m 1 1) ** delay of one period a4 in4 out4 cntrl4 newdelay4 .model newdelay4 delay(delay=0.6m) V4 in4 0 dc 0.05 pulse(0 0.95 0.1m 10u 10u 0.3m 0.6m) Vc4 cntrl4 0 dc 0.01 Pulse (0.01 0.02 4m 2m 2m 1 1) ** sin distortion estimate: a5 in5 out5 cntrl5 newdelay5 * delay of a half cycle .model newdelay5 delay(delay='1/freq/2') V5 in5 0 dc 0 sin(0 1 'freq') Vc5 cntrl5 0 0 *results * < 0.05% for 10000 steps per sin cycle * < 0.3% for 1000 steps per sin cycle * < 5% for 100 steps per sin cycle .control tran 1u 10m set xbrushwidth=2 plot v(in1) V(out1) title 'Const delay' plot v(in2) V(out2) title 'Variable delay' plot v(in3) V(out3) title 'Variable delay' plot v(in3)*V(out3) title 'Variable delay, pulse overlap' plot v(in4) V(out4) xlimit 3m 7m title 'One period delay' plot v(in5)+V(out5) ylimit -0.01 0.01 xlimit 3m 7m title 'Half period delay plus Input' .endc .end tmp_ns50wwy/examples/xspice/d_source/0000755000175000017500000000000014163340332020065 5ustar carstencarstentmp_ns50wwy/examples/xspice/d_source/d_source-stimulus.txt0000644000175000017500000000105714163340332024317 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 tmp_ns50wwy/examples/xspice/d_source/PWMexample.net0000644000175000017500000000102714163340332022614 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 tmp_ns50wwy/examples/xspice/d_source/d_source-stimulus2.txt0000644000175000017500000000105714163340332024401 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 1utmp_ns50wwy/examples/xspice/d_source/d_source-stimulus3.txt0000644000175000017500000000014214163340332024374 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 tmp_ns50wwy/examples/xspice/d_source/pwmexample_data.text0000644000175000017500001664003214163340332024157 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 tmp_ns50wwy/examples/xspice/d_source/d_source.cir0000644000175000017500000000111114163340332022361 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 tmp_ns50wwy/examples/xspice/d_source/test/0000755000175000017500000000000014163340332021044 5ustar carstencarstentmp_ns50wwy/examples/xspice/d_source/test/d_source-stimulus3.txt0000644000175000017500000000014214163340332025353 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 tmp_ns50wwy/examples/xspice/analog_models1_transient.sp0000644000175000017500000000230114163340332023576 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 tmp_ns50wwy/examples/xspice/pll/0000755000175000017500000000000014163340332017051 5ustar carstencarstentmp_ns50wwy/examples/xspice/pll/pll-xspice-fstep.cir0000644000175000017500000001101614163340332022746 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 2n 2n '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 let isbmode = $?batchmode if isbmode = 0 iplot cont endif * 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 10n $&simtime 0 1n 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 if isbmode = 0 plot cont s1 s2+1.2 u1+2.4 d1+3.6 xlimit 15u 16u else write pll.raw all endif .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 tmp_ns50wwy/examples/xspice/pll/test_vco.cir0000644000175000017500000001023414163340332021376 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 tmp_ns50wwy/examples/xspice/pll/vco_sub.cir0000644000175000017500000000454514163340332021220 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 ****************************************************************** tmp_ns50wwy/examples/xspice/pll/loop-filter.cir0000644000175000017500000000123514163340332022005 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 tmp_ns50wwy/examples/xspice/pll/README0000644000175000017500000000211214163340332017725 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 tmp_ns50wwy/examples/xspice/pll/f-p-det-d-sub.cir0000644000175000017500000000073414163340332022020 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 tmp_ns50wwy/examples/xspice/pll/loop-filter-2.cir0000644000175000017500000000243314163340332022145 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 tmp_ns50wwy/examples/xspice/pll/test-f-p-det.cir0000644000175000017500000000615114163340332021764 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 tmp_ns50wwy/examples/xspice/pll/pll-xspice.cir0000644000175000017500000000773014163340332021637 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 tmp_ns50wwy/examples/xspice/pll/vco_sub_new.cir0000644000175000017500000000173214163340332022064 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 tmp_ns50wwy/examples/xspice/table/0000755000175000017500000000000014163340332017351 5ustar carstencarstentmp_ns50wwy/examples/xspice/table/bsim4n-2d-1.table0000644000175000017500000146436314163340332022240 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 tmp_ns50wwy/examples/xspice/table/clc409.sub0000644000175000017500000001104314163340332021061 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-3d-2.sp0000644000175000017500000000127714163340332023350 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 tmp_ns50wwy/examples/xspice/table/table-model-bip-2d-1-oc.sp0000644000175000017500000000273414163340332023720 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-2d-2.sp0000644000175000017500000000131514163340332023340 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 tmp_ns50wwy/examples/xspice/table/table-generator-b4-2d.sp0000644000175000017500000000476214163340332023607 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 tmp_ns50wwy/examples/xspice/table/modelcards/0000755000175000017500000000000014163340332021466 5ustar carstencarstentmp_ns50wwy/examples/xspice/table/modelcards/modelcard.pmos0000644000175000017500000001446614163340332024333 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 tmp_ns50wwy/examples/xspice/table/modelcards/modelcard.nmos0000644000175000017500000001446514163340332024330 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 tmp_ns50wwy/examples/xspice/table/bsim4n-3d-1.table0000644000175000017500000057551214163340332022237 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 tmp_ns50wwy/examples/xspice/table/bsim4n-2d-2.table0000644000175000017500000032030314163340332022221 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 tmp_ns50wwy/examples/xspice/table/test-3d-1.table0000644000175000017500000000027214163340332022004 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-3d-4.sp0000644000175000017500000000260314163340332023344 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 tmp_ns50wwy/examples/xspice/table/combi_script.cir0000644000175000017500000000205014163340332022522 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 tmp_ns50wwy/examples/xspice/table/table-generator-b4-3d.sp0000644000175000017500000000563114163340332023604 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 tmp_ns50wwy/examples/xspice/table/bsim4p-2d-3.table0000644000175000017500000004611014163340332022225 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-2d-4.sp0000644000175000017500000000275714163340332023355 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 tmp_ns50wwy/examples/xspice/table/table-model-man-3d-1.sp0000644000175000017500000000070114163340332023313 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 tmp_ns50wwy/examples/xspice/table/test-2d-1.table0000644000175000017500000000074114163340332022004 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 tmp_ns50wwy/examples/xspice/table/bsim4p-3d-1.table0000644000175000017500000070007214163340332022230 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 tmp_ns50wwy/examples/xspice/table/table-model-bip-2d-2.sp0000644000175000017500000000105714163340332023317 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-2d-3.sp0000644000175000017500000000304714163340332023345 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 tmp_ns50wwy/examples/xspice/table/table-model-man-2d-1.sp0000644000175000017500000000066514163340332023323 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-3d-5.sp0000644000175000017500000000305114163340332023343 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 tmp_ns50wwy/examples/xspice/table/test-2d-3.table0000644000175000017500000000027014163340332022003 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-3d-3.sp0000644000175000017500000000277514163340332023355 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 tmp_ns50wwy/examples/xspice/table/table-model-bip-2d-1.sp0000644000175000017500000000353414163340332023320 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 tmp_ns50wwy/examples/xspice/table/clc409mod.sub0000644000175000017500000001237514163340332021572 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 tmp_ns50wwy/examples/xspice/table/table-generator-q-2d.sp0000644000175000017500000000516014163340332023533 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 tmp_ns50wwy/examples/xspice/table/bsim4n-2d-3.table0000644000175000017500000004266314163340332022234 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 tmp_ns50wwy/examples/xspice/table/README.table0000644000175000017500000000623014163340332021320 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. tmp_ns50wwy/examples/xspice/table/test-2d-2.table0000644000175000017500000000030014163340332021774 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 tmp_ns50wwy/examples/xspice/table/bsim4p-2d-2.table0000644000175000017500000034337714163340332022243 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 tmp_ns50wwy/examples/xspice/table/table-model-mos-2d-2-oc.sp0000644000175000017500000000101714163340332023736 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 tmp_ns50wwy/examples/xspice/xspice_c1.cir0000644000175000017500000000072514163340332020643 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 tmp_ns50wwy/examples/xspice/original-examples/0000755000175000017500000000000014163340332021702 5ustar carstencarstentmp_ns50wwy/examples/xspice/original-examples/xspice.deck0000644000175000017500000000057314163340332024032 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 tmp_ns50wwy/examples/xspice/original-examples/hybrid_models1_transient.deck0000644000175000017500000000165414163340332027534 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 tmp_ns50wwy/examples/xspice/original-examples/digital_models.deck0000644000175000017500000000067014163340332025515 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models4_transient.deck0000644000175000017500000000357414163340332027522 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models3_swept_dc.deck0000644000175000017500000000265314163340332027317 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 tmp_ns50wwy/examples/xspice/original-examples/digital_invert.deck0000644000175000017500000000050314163340332025534 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 tmp_ns50wwy/examples/xspice/original-examples/bad_param_type.deck0000644000175000017500000000043514163340332025503 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 tmp_ns50wwy/examples/xspice/original-examples/suffixes.deck0000644000175000017500000000101114163340332024357 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 tmp_ns50wwy/examples/xspice/original-examples/user_defined_nodes.deck0000644000175000017500000000120114163340332026350 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models3_ac.deck0000644000175000017500000000267114163340332026072 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 tmp_ns50wwy/examples/xspice/original-examples/rtlinv.in0000644000175000017500000000064214163340332023552 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models2_swept_dc.deck0000644000175000017500000000251614163340332027314 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models4_swept_dc.deck0000644000175000017500000000276214163340332027321 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 tmp_ns50wwy/examples/xspice/original-examples/dot_model_ref.deck0000644000175000017500000000041614163340332025335 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 tmp_ns50wwy/examples/xspice/original-examples/mixed_ref.deck0000644000175000017500000000122114163340332024470 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models4_ac.deck0000644000175000017500000000300214163340332026060 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models3_transient.deck0000644000175000017500000000267514163340332027522 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 tmp_ns50wwy/examples/xspice/original-examples/digital_models4.deck0000644000175000017500000000467614163340332025613 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 tmp_ns50wwy/examples/xspice/original-examples/param_defaults.deck0000644000175000017500000000036214163340332025522 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 tmp_ns50wwy/examples/xspice/original-examples/digital_models3.deck0000644000175000017500000000520114163340332025573 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models3_dc.deck0000644000175000017500000000263614163340332026076 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models1_dc.deck0000644000175000017500000000215714163340332026072 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 tmp_ns50wwy/examples/xspice/original-examples/digital_models2.deck0000644000175000017500000000473614163340332025606 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models1_transient.deck0000644000175000017500000000221314163340332027504 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models1_swept_dc.deck0000644000175000017500000000220214163340332027303 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 tmp_ns50wwy/examples/xspice/original-examples/bad_name.deck0000644000175000017500000000046014163340332024260 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 tmp_ns50wwy/examples/xspice/original-examples/rca3040.in0000644000175000017500000000177714163340332023322 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 tmp_ns50wwy/examples/xspice/original-examples/arbitrary_phase.deck0000644000175000017500000000054614163340332025716 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 tmp_ns50wwy/examples/xspice/original-examples/mixed_io_size.deck0000644000175000017500000000112514163340332025360 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 tmp_ns50wwy/examples/xspice/original-examples/supply_ramping.deck0000644000175000017500000000076214163340332025610 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 capacitoric (c=1000uf ic=1) r1 1 0 1k * a2 2 0 ind .model ind inductoric (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 tmp_ns50wwy/examples/xspice/original-examples/initial_conditions.deck0000644000175000017500000000065614163340332026423 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 tmp_ns50wwy/examples/xspice/original-examples/param_types.deck0000644000175000017500000000062314163340332025057 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models2_dc.deck0000644000175000017500000000240014163340332026062 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 tmp_ns50wwy/examples/xspice/original-examples/mosamp2.in0000644000175000017500000000253314163340332023613 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models4_dc.deck0000644000175000017500000000273714163340332026101 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 tmp_ns50wwy/examples/xspice/original-examples/bad_io.deck0000644000175000017500000000052014163340332023744 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 tmp_ns50wwy/examples/xspice/original-examples/hybrid_models1_dc.deck0000644000175000017500000000155514163340332026113 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models1_ac.deck0000644000175000017500000000230514163340332026062 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 tmp_ns50wwy/examples/xspice/original-examples/polarity.deck0000644000175000017500000000060014163340332024371 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 tmp_ns50wwy/examples/xspice/original-examples/diffpair.in0000644000175000017500000000101114163340332024007 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 tmp_ns50wwy/examples/xspice/original-examples/mosmem.in0000644000175000017500000000135614163340332023534 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 tmp_ns50wwy/examples/xspice/original-examples/schmitt.in0000644000175000017500000000104014163340332023700 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 tmp_ns50wwy/examples/xspice/original-examples/bad_io_type.deck0000644000175000017500000000101614163340332025006 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 tmp_ns50wwy/examples/xspice/original-examples/spice3.deck0000644000175000017500000000075314163340332023725 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models2_transient.deck0000644000175000017500000000257714163340332027522 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 tmp_ns50wwy/examples/xspice/original-examples/bad_param.deck0000644000175000017500000000053014163340332024436 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 tmp_ns50wwy/examples/xspice/original-examples/parsing.deck0000644000175000017500000000041014163340332024170 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 tmp_ns50wwy/examples/xspice/original-examples/long_names.deck0000644000175000017500000000100014163340332024643 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 tmp_ns50wwy/examples/xspice/original-examples/mixed_mode.deck0000644000175000017500000000421414163340332024645 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 tmp_ns50wwy/examples/xspice/original-examples/io_types.deck0000644000175000017500000000132714163340332024370 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 tmp_ns50wwy/examples/xspice/original-examples/analog_models2_ac.deck0000644000175000017500000000254014163340332026064 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 tmp_ns50wwy/examples/xspice/original-examples/io_ordering.deck0000644000175000017500000000056414163340332025037 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 tmp_ns50wwy/examples/xspice/original-examples/digital_models1.deck0000644000175000017500000000332414163340332025575 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 tmp_ns50wwy/examples/xspice/original-examples/mixed_case.deck0000644000175000017500000000037714163340332024642 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 tmp_ns50wwy/examples/xspice/delta-sigma/0000755000175000017500000000000014163340332020451 5ustar carstencarstentmp_ns50wwy/examples/xspice/delta-sigma/count-latch-dac.cir0000644000175000017500000000560114163340332024120 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 tmp_ns50wwy/examples/xspice/delta-sigma/mod1-ct.cir0000644000175000017500000000242414163340332022416 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 tmp_ns50wwy/examples/xspice/delta-sigma/counter-test.cir0000644000175000017500000000241414163340332023605 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 tmp_ns50wwy/examples/xspice/delta-sigma/README0000644000175000017500000000114314163340332021330 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 tmp_ns50wwy/examples/xspice/delta-sigma/delta-sigma-1.cir0000644000175000017500000000721514163340332023502 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 tmp_ns50wwy/examples/xspice/delta-sigma/mod1-ct-test.cir0000644000175000017500000000235514163340332023376 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 tmp_ns50wwy/examples/utf-8/0000755000175000017500000000000014163340332015732 5ustar carstencarstentmp_ns50wwy/examples/utf-8/Ñтекло/0000755000175000017500000000000014163340332022326 5ustar carstencarstentmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-c.cir0000644000175000017500000000441614163340332024736 0ustar carstencarstentitré 'test of various color inputs for background, text/grid and graphs 1' .control set hcopydevtype = postscript set hcopypscolor=25 set hcopypstxcolor=21 set hcopyscale=1 *set color2=rgb:F/0/0 setcs hcopyfont=Arial set hcopyfontsize=18 let x = vector(5) let y = exp(x) setcs wfont=Arial set wfont_size=18 setcs xfont='Noto Sans' *set xfont_size=18 set xgridwidth=4 set xbrushwidth=1 set color0=white set color2=brown plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' set color0=black plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" *gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' set color0=Blue set color1=Yellow set color2=Lime set xgridwidth=1 set xbrushwidth=4 plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog unset color1 set color0=MediumBlue set color2=Magenta plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog set color0=GreenYellow set color2=Magenta plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog set color0=black set color2=pink plot y vs x xlabel 'ëž˜ë„ ì•„í”„ì§€ 않아요' ylabel 'ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" *gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' *shell Start /B plot_5.ps *shell gv plot_5.ps & echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-c2.cir0000644000175000017500000000447114163340332025021 0ustar carstencarsten* titré 'test of various color inputs for background, text/grid and graphs 2' .control set hcopydevtype = postscript set hcopypscolor=25 set hcopypstxcolor=21 set hcopyscale=1 *set color2=rgb:F/0/0 setcs hcopyfont=Arial set hcopyfontsize=18 let x = vector(5) let y = exp(x) setcs wfont=Arial set wfont_size=18 setcs xfont='Noto Sans' *set xfont_size=18 set xgridwidth=4 set xbrushwidth=1 set color0=white *set color2=brown set color2=rgbd:255/0/0 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' set color0=black plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" *gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' set color0=Blue set color1=Yellow set color2=rgb:00/FF/00 set xgridwidth=1 set xbrushwidth=4 plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog unset color1 set color0=MediumBlue set color2=Magenta plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog set color0=GreenYellow set color2=rgbd:128/128/75 plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog set color0=black set color2=pink plot y vs x xlabel 'ëž˜ë„ ì•„í”„ì§€ 않아요' ylabel 'ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" *gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' *shell Start /B plot_5.ps *shell gv plot_5.ps & echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-ascii-2.cir0000644000175000017500000000151714163340332025056 0ustar carstencarsten* test de titré * file is encoded as ASCII ! * will lead to error in the ngspice UNICODE utf8 version * is o.k. only if ngspice is compiled with --disable-utf8 flag .control set encoding=extended_ascii set hcopydevtype = postscript set hcopypscolor=1 set hcopyscale=0.5 set color2=rgb:F/0/0 setcs hcopyfont="Garamond" set hcopyfontsize=14 let x = vector(5) let y = exp(x) setcs wfont="Garamond Fett" set wfont_size=16 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré' plot y vs x xlabel 'Labellisé X' title 'Titré' plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré' loglog plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré' shell Start /B plot_5.ps write D:\Spice_general\tests\ext_unic_test.raw y x *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-c4.cir0000644000175000017500000000225614163340332025022 0ustar carstencarsten* titré 'test of various color inputs for background, text/grid and graphs 4' * to figure out the available font names, run the command * 'fc-list | cut -f2 -d: | sort -u | less -r > fonts-avail.txt' .control let x = vector(5) let y = exp(x) *setcs xfont='Baekmuk Dotum' setcs xfont='Noto Sans CJK JP' *setcs xfont='ë§‘ì€ ê³ ë”•' set xfont_size=20 set xgridwidth=1 set xbrushwidth=8 set color2=rgbd:0/126/0 set color0=blue unset nolegend * color1 (text/grid) selected automatically plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' set color2=rgbd:0/0/255 set color1=rgb:0/0/0 set color0=white set xbrushwidth=4 set xgridwidth=2 set nolegend plot y vs x xlabel '나는 유리를 ë¨¹ì„ ìˆ˜ 있어요' ylabel 'ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/0000755000175000017500000000000014163340332025547 5ustar carstencarstentmp_ns50wwy/examples/utf-8/Ñтекло/있어요/utf-8-inv.cir0000644000175000017500000000245114163340332030005 0ustar carstencarsten 4 BIT ALL-NAND-GATE BINARY ADDER with node names 能 and ã›ã‚“ not yet supported! .param Wå’¦ = 3u *** SUBCIRCUIT DEFINITIONS .SUBCKT NAдND 能 ã›ã‚“ out VDD * NODES: INPUT(2), OUTPUT, VCC M1 out ã›ã‚“ Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M2 net.1 ã›ã‚“ 0 0 n1 W='Wå’¦' L=0.35u pd=9u ad=9p ps=9u as=9p M3 out 能 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M4 out 能 net.1 0 n1 W='Wå’¦' L=0.35u pd=9u ad=9p ps=9u as=9p .ENDS NAдND X않1 1 ã¯2 7 99 NAдND *** POWER Vì„ì„ 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) .option noinit acct .TRAN 500p 6400NS * save inputs .save V(1) V(ã¯2) V(7) * 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 * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=16 if $?batchmode else pre_set strict_errorhandling unset ngdebug *save outputs and specials run display * plot the inputs and outputs, use offset to plot on top of each other let れ1 = 4 let れ2 = 8 plot v(1) v(ã¯2)+れ1 v(7)+れ2 endif .endc .END tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/ext-utf8-4.cir0000644000175000017500000000447214163340332030102 0ustar carstencarsten* test de titré ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ .control set hcopydevtype = svg set hcopypscolor=1 *set hcopyscale=0.5 set color2=rgb:FF/0/0 *setcs hcopyfont=Arial * for CYGWIN if $oscompiled = 2 setcs hcopyfont='NimbusMono-Regular' end set hcopyfontsize=18 * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=16 let x = vector(5) let y = exp(x) setcs wfont='Arial' set wfont_size=18 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré 21' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'Titré 22 أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré 23 ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog plot y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel 'Titré 24 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog set xbrushwidth=6 set xgridwidth=2 set color2=yellow setcs hcopyfont=Arial setcs hcopyfontfamily=Arial hardcopy plot_4.svg y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel 'Titré 24 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog * for CYGWIN if $oscompiled = 2 setcs xfont='Times New Roman' end plot y vs x+0.001 xlabel 'Labellisé X' ylabel ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' title 'Titré 25' loglog hardcopy plot_5.svg y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_4.svg shell Start /B plot_5.svg * for CYGWIN else shell xterm -e gs plot_5.ps & end echo 3 ' 些 𣎠世 å’¹ æ°´ æ™¶ 𦓡 空 𣎠害 å’¦ ' echo 4 ×× ×™ יכול ל×כול זכוכית וזה ×œ× ×ž×–×™×§ לי. *gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/ext-utf8-1.cir0000644000175000017500000000327114163340332030073 0ustar carstencarsten* test de titré .control * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=16 * for LINUX *setcs xfont='Noto Sans Korean' let x = vector(5) let y = exp(x) setcs wfont='Arial' set wfont_size=18 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré 11' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'Titré 12 أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré 13 ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog plot y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel '나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 14 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog * for CYGWIN *setcs xfont='Adobe Times' * for LINUX setcs xfont='Efont Biwidth' plot y vs x+0.001 xlabel 'Labellisé X' ylabel ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' title 'Titré 15' loglog write D:/Spice_general/tests/utf-8/'Ñтекло'/'있어요'/ext-utf8-1.out x y *setcs sourcepath = ( './utf-8/Ñтекло/있어요' ) source $inputdir/ext-utf8-2.cir echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/ext-utf8-2-있어요.cir0000644000175000017500000000365014163340332033314 0ustar carstencarsten* test de titré .control set hcopydevtype = postscript set hcopypscolor=1 set hcopyscale=1 set color2=rgb:FF/0/0 *setcs hcopyfont=Arial * *setcs hcopyfont='Nimbus Mono-Regular' * for CYGWIN setcs hcopyfont='NimbusMonL-Bold' *setcs hcopyfont='URWGothicL-Book' set hcopyfontsize=14 * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=18 *setcs xfont='Noto Sans Japanese' let x = vector(5) let y = exp(x) setcs wfont='Arial' set wfont_size=18 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré 21' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'Titré 22 أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré 23 ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog *LINUX *setcs xfont='Noto Sans Korean' plot y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel '나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 24 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog * for CYGWIN setcs xfont='Times New Roman' plot y vs x+0.001 xlabel 'Labellisé X' ylabel ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' title 'Titré 25' loglog hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' * for MS Windows only shell Start /B plot_5.ps * for CYGWIN *shell xterm -e gs plot_5.ps & echo 些 𣎠世 å’¹ æ°´ æ™¶ 𦓡 空 𣎠害 å’¦ echo ×× ×™ יכול ל×כול זכוכית וזה ×œ× ×ž×–×™×§ לי. *gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/ext-utf8-3.cir0000644000175000017500000000450114163340332030072 0ustar carstencarsten* test de titré .control set hcopydevtype = postscript set hcopypscolor=1 set hcopypstxcolor=21 set hcopyscale=1 if ($oscompiled = 1) or ($oscompiled = 8) set color2=rgb:FF/0/0 else set color2=rgb:F/0/0 end setcs hcopyfont=Arial set hcopyfontsize=18 let x = vector(5) let y = exp(x) setcs wfont=Arial set wfont_size=18 setcs xfont='Noto Sans CJK JP Medium' *set xfont_size=16 set xgridwidth=4 set xbrushwidth=1 set nolegend *hardcopy **plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" **gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' set xgridwidth=1 set xbrushwidth=4 **plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog *plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog plot y vs x xlabel 'ëž˜ë„ ì•„í”„ì§€ 않아요' ylabel 'ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" **gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' if ($oscompiled = 1) or ($oscompiled = 8) shell Start /B plot_5.ps end if ($oscompiled = 2) shell xterm -e gs plot_5.ps & end if ($oscompiled = 6) shell gv plot_5.ps & end if ($oscompiled = 7) shell open -a Preview plot_5.ps & end wrdata test.out y vs x echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/ext-utf8-2.cir0000644000175000017500000000612614163340332030076 0ustar carstencarsten* test de titré * utf-8 UNICODE tests * text snippets are from http://kermitproject.org/utf8.html * English translation: I can eat glass and it doesn't hurt me. .control set hcopydevtype = postscript set hcopypscolor=0 set hcopypstxcolor=1 set hcopyscale=1 * 16 bit color for Linux set color2=rgb:F/0/0 * 256 bit color for Windows or Linux set color2=rgb:FF/0/0 *setcs hcopyfont=Arial * *setcs hcopyfont='Nimbus Mono-Regular' * for CYGWIN setcs hcopyfont='NimbusMonL-Bold' set hcopyfontsize=14 * the data to be plotted let x = vector(5) let y = exp(x) * MS Windows setcs wfont='Arial' set wfont_size=18 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré 21' * Linux, CYGWIN * Use font (*.ttc) from Cygwin distribution setcs xfont='Noto Sans CJK JP Light' set xfont_size=16 set color2=rgb:0/FF/0 set xbrushwidth=2 plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'Titré 22 أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' set color2=rgb:0/FF/FF set xbrushwidth=4 plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré 23 ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog set color2=rgbd:255/0/255 set xbrushwidth=8 plot y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel '나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 24 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog unset color2 set color0=white * https://www.fontsc.com/font/tag/arabic setcs xfont='Lateef' set xfont_size=22 plot y vs x+0.001 xlabel 'Labellisé X' ylabel ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني ' title 'Titré French Arabic 25' loglog plot y vs x+0.001 xlabel ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني ' ylabel 'Jeg kan spise glas, det gør ikke ondt pÃ¥ mig. 26 ' title 'Titré Arabic 26' loglog * https://www.fontsc.com/font/tag/hebrew setcs xfont='Alef' set xfont_size=18 plot y vs x+0.001 xlabel 'Labellisé X' ylabel ' ×× ×™ יכול ל×כול זכוכית וזה ×œ× ×ž×–×™×§ לי. ' title 'Titré French Arabic 27' loglog plot y vs x+0.001 xlabel ' ×× ×™ יכול ל×כול זכוכית וזה ×œ× ×ž×–×™×§ לי. ' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré Arabic 28' loglog hardcopy plot_6.ps y vs x xlabel 'Labellisé X' ylabel 'Jeg kan spise glas, det gør ikke ondt pÃ¥ mig.' title 'Titré Äü @µ€~' * for MS Windows only *shell Start /B plot_5.ps * for CYGWIN *shell xterm -e gs plot_5.ps & shell gv plot_6.ps & echo 些 𣎠世 å’¹ æ°´ æ™¶ 𦓡 空 𣎠害 å’¦ echo ×× ×™ יכול ל×כול זכוכית וזה ×œ× ×ž×–×™×§ לי. echo ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني ' gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/utf-8-inv_w.cir0000644000175000017500000000245114163340332030333 0ustar carstencarsten 4 BIT ALL-NAND-GATE BINARY ADDER with node names 能 and ã›ã‚“ not yet supported! .param Wå’¦ = 3u *** SUBCIRCUIT DEFINITIONS .SUBCKT NAдND 能 ã›ã‚“ out VDD * NODES: INPUT(2), OUTPUT, VCC M1 out ã›ã‚“ Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M2 net.1 ã›ã‚“ 0 0 n1 W='Wå’¦' L=0.35u pd=9u ad=9p ps=9u as=9p M3 out 能 Vdd Vdd p1 W=7.5u L=0.35u pd=13.5u ad=22.5p ps=13.5u as=22.5p M4 out 能 net.1 0 n1 W='Wå’¦' L=0.35u pd=9u ad=9p ps=9u as=9p .ENDS NAдND X않1 1 ã¯2 7 99 NAдND *** POWER Vì„ì„ 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) .option noinit acct .TRAN 500p 500NS * save inputs .save V(1) V(ã¯2) V(7) * 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 * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=16 if $?batchmode else pre_set strict_errorhandling unset ngdebug *save outputs and specials run display * plot the inputs and outputs, use offset to plot on top of each other let れ1 = 4 let れ2 = 8 plot v(1) v(ã¯2)+れ1 v(7)+れ2 endif .endc .END tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/adder_mos.cir0000644000175000017500000000467614163340332030220 0ustar carstencarsten 유리를 - 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 640NS * 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 if $?batchmode else 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 endif .endc .END tmp_ns50wwy/examples/utf-8/Ñтекло/있어요/adder_mos3.cir0000644000175000017500000000513614163340332030273 0ustar carstencarsten 4 BIT ALL-NAND-GATE BINARY ADDER with node names 能 and ã›ã‚“, not yet supported *** 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 ONEдBIT 能 2 ã›ã‚“ 4 5 6 * NODES: INPUT(2), CARRY-IN, OUTPUT, CARRY-OUT, VCC X1 能 2 7 6 NAND X2 能 7 8 6 NAND X나는 2 7 9 6 NAND X4 8 9 10 6 NAND X5 ã›ã‚“ 10 11 6 NAND X6 ã›ã‚“ 11 12 6 NAND X7 10 11 13 6 NAND XЯ8 12 13 4 6 NAND XЯ9 11 7 5 6 NAND .ENDS ONEдBIT .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 ONEдBIT X2 3 4 10 6 8 9 ONEдBIT .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 Vì„ì„ 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 * for CYGWIN setcs xfont='Noto Sans CJK JP Medium' set xfont_size=16 if $?batchmode else 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 endif .endc .END tmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-3.cir0000644000175000017500000000451514163340332024656 0ustar carstencarsten* test de titré * set oscompiled nn [0..8] * nn: Other MINGW Cygwin FreeBSD OpenBSD Solaris Linux macOS Visual_Studio * all text snippets (nonsense text) from http://kermitproject.org/utf8.html .control set hcopydevtype = postscript set hcopypscolor=25 set hcopypstxcolor=21 set hcopyscale=1 if $oscompiled = 8 set color2=rgb:FF/0/0 else set color2=rgb:F/0/0 endif setcs hcopyfont=Arial set hcopyfontsize=18 let x = vector(5) let y = exp(x) setcs wfont=Arial set wfont_size=18 setcs xfont='Noto Sans' *set xfont_size=18 set xgridwidth=4 set xbrushwidth=1 *hardcopy plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" if $oscompiled = 6 shell export LC_CTYPE ="de_DE.UTF-8" endif gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' set xgridwidth=1 set xbrushwidth=4 plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog plot y vs x xlabel 'ëž˜ë„ ì•„í”„ì§€ 않아요' ylabel 'ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" if $oscompiled = 6 shell export LC_CTYPE ="de_DE.UTF-8" endif gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' if $oscompiled = 8 or $oscompiled = 1 shell Start /B plot_5.ps else shell gv plot_5.ps & endif *wrdata test.out y vs x *asciiplot atest.out y vs x echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-cyg2.cir0000644000175000017500000000332114163340332025352 0ustar carstencarsten* test de titré .control set hcopydevtype = postscript set hcopypscolor=1 set hcopyscale=0.5 set color2=rgb:F/0/0 setcs hcopyfont=Arial set hcopyfontsize=14 set color0="black" set color1="white" let x = vector(5) let y = exp(x) setcs xfont="Times New Roman" set xfont_size=18 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' set color0="white" set color1="black" set xfont_size=16 setcs xfont="Arial" plot y vs x xlabel 'Я могу еÑть Ñтекло, оно мне не вредит' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title 'Я могу еÑть Ñтекло, оно мне не вредит' set color0="yellow" set color1="red" set xfont_size=18 setcs xfont="Noto Sans CJK JP Medium" plot y vs x+0.001 xlabel 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' ylabel 'Titré 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요' title 'Titré 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。' loglog *plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog *hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' *shell Start /B plot_5.ps echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“。 setcs sourcepath = ( "D:/Spice_general/tests/utf-8/Ñтекло/있어요" ) source ext-utf8-2.cir gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-utf8-2.cir0000644000175000017500000000447514163340332024662 0ustar carstencarsten* test de titré .control set hcopydevtype = postscript set hcopypscolor=18 set hcopypstxcolor=21 set hcopyscale=1 set color2=rgb:FF/0/0 setcs hcopyfont=Arial set hcopyfontsize=18 let x = vector(5) let y = exp(x) setcs wfont=Arial set wfont_size=18 setcs xfont='Noto Sans Chinese' *set xfont_size=18 set xgridwidth=4 set xbrushwidth=1 plot y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y: ÜüÖöÄäÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ' title 'Titré' plot y vs x xlabel '我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“' ylabel 'Я могу еÑть Ñтекло, оно мне не вредит' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" gnuplot test.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' set xgridwidth=1 set xbrushwidth=4 plot y vs x+0.001 xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“' loglog *plot y vs x+0.001 xlabel 'Labellisé X' title 'Titré' loglog plot y vs x xlabel 'ëž˜ë„ ì•„í”„ì§€ 않아요' ylabel 'ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™' title ' أنا قادر على أكل الزجاج Ùˆ هذا لا يؤلمني.' * With Linux the next one requires: export LC_CTYPE ="de_DE.UTF-8" gnuplot test2.gn y vs x xlabel 'Labellisé X' ylabel 'tüTÄtö Äü @µ€~' title 'ฉันà¸à¸´à¸™à¸à¸£à¸°à¸ˆà¸à¹„ด้ à¹à¸•่มันไม่ทำให้ฉันเจ็บ ' echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré Äü @µ€~' if ($oscompiled = 1) or ($oscompiled = 8) shell Start /B plot_5.ps endif if ($oscompiled = 2) shell xterm -e gs plot_5.ps & endif if ($oscompiled = 6) shell gv plot_5.ps & endif if ($oscompiled = 7) shell open -a Preview plot_5.ps & endif echo 나는 유리를 ë¨¹ì„ ìˆ˜ 있어요. ê·¸ëž˜ë„ ì•„í”„ì§€ 않아요 echo ç§ã¯ã‚¬ãƒ©ã‚¹ã‚’食ã¹ã‚‰ã‚Œã¾ã™ã€‚ãれã¯ç§ã‚’å‚·ã¤ã‘ã¾ã›ã‚“ echo 我能åžä¸‹çŽ»ç’ƒè€Œä¸ä¼¤èº«ä½“ *quit .endc tmp_ns50wwy/examples/utf-8/Ñтекло/ext-ascii-1.cir0000644000175000017500000000135114163340332025051 0ustar carstencarsten* test de titre * file is encoded as ASCII ! * will lead to error in the ngspice UNICODE utf8 version * is o.k. only if ngspice is compiled with --disable-utf8 flag .control set hcopydevtype = postscript set hcopypscolor=1 set color2=rgb:F/0/0 let x = vector(5) let y = exp(x) plot y vs x xlabel 'Mon x' ylabel 'Mon y' hardcopy plot_1.ps y vs x xlabel 'Mon X' ylabel 'Mon Y' plot y vs x xlabel 'Mon x' title 'Mon titre' hardcopy plot_2.ps y vs x xlabel 'Mon x' title 'Mon titre' plot y vs x xlabel test hardcopy plot_3.ps y vs x xlabel test plot y vs x hardcopy plot_4.ps y vs x plot y vs x xlabel 'Labellisé X' ylabel 'Labellisée Y' title 'Titré' hardcopy plot_5.ps y vs x xlabel 'Labellisé X' ylabel 'Labellisé Y' title 'Titré' .endc tmp_ns50wwy/examples/utf-8/Ñтекло/os_compiled.sp0000644000175000017500000000103014163340332025161 0ustar carstencarsten*ng_script test for oscompiled .control if $oscompiled = 0 echo [0], Other endif if $oscompiled = 1 echo [1], MINGW for MS Windows endif if $oscompiled = 2 echo [2], Cygwin for MS Windows endif if $oscompiled = 3 echo [3], FreeBSD endif if $oscompiled = 4 echo [4], OpenBSD endif if $oscompiled = 5 echo [5], Solaris endif if $oscompiled = 6 echo [6], Linux endif if $oscompiled = 7 echo [7], macOS endif if $oscompiled = 8 echo [8], Visual Studio for MS Windows endif .endc .end tmp_ns50wwy/examples/TransmissionLines/0000755000175000017500000000000014163340332020453 5ustar carstencarstentmp_ns50wwy/examples/TransmissionLines/cpl_ibm3.sp0000644000175000017500000000243714163340332022515 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 tmp_ns50wwy/examples/TransmissionLines/ltra4_1_line.sp0000644000175000017500000001013314163340332023272 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 tmp_ns50wwy/examples/TransmissionLines/ltra6_2_line.sp0000644000175000017500000002023514163340332023301 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 tmp_ns50wwy/examples/TransmissionLines/cpl_ibm2.sp0000644000175000017500000000062414163340332022510 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 tmp_ns50wwy/examples/TransmissionLines/txl1_1_line.sp0000644000175000017500000000121314163340332023133 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 tmp_ns50wwy/examples/TransmissionLines/cpl2_2_line.sp0000644000175000017500000000254414163340332023114 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 tmp_ns50wwy/examples/TransmissionLines/cpl4_txl_2_line.sp0000644000175000017500000001706314163340332024007 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 tmp_ns50wwy/examples/TransmissionLines/ltra1_1_line.sp0000644000175000017500000000130314163340332023266 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 tmp_ns50wwy/examples/TransmissionLines/txl3_1_line.sp0000644000175000017500000001004114163340332023134 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 tmp_ns50wwy/examples/TransmissionLines/ltra1_4_line.sp0000644000175000017500000001135614163340332023302 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 tmp_ns50wwy/examples/TransmissionLines/ltra3_2_line.sp0000644000175000017500000000642614163340332023304 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 tmp_ns50wwy/examples/TransmissionLines/cpl_ibm1.sp0000644000175000017500000000454214163340332022512 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 tmp_ns50wwy/examples/TransmissionLines/cpl1_4_line.sp0000644000175000017500000000362714163340332023120 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 tmp_ns50wwy/examples/TransmissionLines/ltra7_4_line.sp0000644000175000017500000000711314163340332023304 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 tmp_ns50wwy/examples/TransmissionLines/txl2_3_line.sp0000644000175000017500000000160214163340332023140 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 tmp_ns50wwy/examples/TransmissionLines/cpl_ibm1a.sp0000644000175000017500000000472314163340332022654 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 .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 .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 repeat 10 TRAN 0.1N 20N plot V(3) V(5) V(8) V(11) V(12) TRAN 0.1N 20N plot V(3) V(5) V(8) V(11) V(12) TRAN 0.1N 20N plot V(3) V(5) V(8) V(11) V(12) end quit .endc .END tmp_ns50wwy/examples/TransmissionLines/ltra2_2_line.sp0000644000175000017500000000155614163340332023302 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 tmp_ns50wwy/examples/TransmissionLines/ltra5_1_line.sp0000644000175000017500000002070714163340332023303 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 tmp_ns50wwy/examples/TransmissionLines/txl4_1_line.sp0000644000175000017500000002040614163340332023143 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 tmp_ns50wwy/examples/TransmissionLines/cpl3_4_line.sp0000644000175000017500000000177314163340332023122 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 tmp_ns50wwy/examples/probe/0000755000175000017500000000000014163340332016076 5ustar carstencarstentmp_ns50wwy/examples/probe/ac-test.cir0000644000175000017500000000032114163340332020131 0ustar carstencarsten.probe test with ac V1 1 0 dc 0 ac 1 R1 1 2 1k R2 2 3 1k R3 3 0 1k C2 2 3 1u C3 3 0 1u .ac dec 5 10 10000 .probe i(R2) vd(R2) vd(R3) v(2) .control run display print vd_r2/i(r2) plot mag(vd_r3) .endc .end tmp_ns50wwy/examples/probe/Dual-NMOS-amp.cir0000644000175000017500000000317114163340332021011 0ustar carstencarsten.title KiCad schematic .include "TL072-dual.lib" .include "VDMOS_models.lib" R15 out GND 1k C5 out Net-_C4-Pad1_ 1u XU1 Net-_R16-Pad2_ Net-_R4-Pad1_ Net-_C2-Pad1_ GND Net-_C3-Pad1_ Net-_R3-Pad2_ Net-_R17-Pad2_ VCC TL072c R6 Net-_M2-Pad3_ Net-_R3-Pad2_ 100k R17 Net-_M2-Pad2_ Net-_R17-Pad2_ 100 M2 Net-_C4-Pad1_ Net-_M2-Pad2_ Net-_M2-Pad3_ Tj2 Tcase2 IRFP240 thermal R8 Net-_M2-Pad3_ GND 0.8 V1 VCC GND 36 R7 Net-_M1-Pad3_ Net-_C4-Pad1_ 0.1 C4 Net-_C4-Pad1_ out 10m M1 VCC Net-_M1-Pad2_ Net-_M1-Pad3_ Tj1 Tcase1 IRFP240 thermal R16 Net-_M1-Pad2_ Net-_R16-Pad2_ 100 C1 VCC GND 1u C2 Net-_C2-Pad1_ in 0.33u Vin1 in GND dc 0 ac 1 sin(0 0.5 100 20m) Vamb1 Net-_R11-Pad1_ GND {envtemp} Rl1 out GND 8 R13 Net-_C7-Pad1_ Tcase2 0.2 R14 Net-_R11-Pad1_ Net-_C7-Pad1_ 3 C7 Net-_C7-Pad1_ GND 300m C6 Net-_C6-Pad1_ GND 300m R10 Net-_C6-Pad1_ Tcase1 0.2 R11 Net-_R11-Pad1_ Net-_C6-Pad1_ 3 R9 GND Tj1 1G R12 GND Tj2 1G R2 Net-_C3-Pad1_ GND 10k C3 Net-_C3-Pad1_ GND 1u R4 Net-_R4-Pad1_ GND 1k R3 Net-_C2-Pad1_ Net-_R3-Pad2_ 100k R1 VCC Net-_C3-Pad1_ 390k R5 Net-_C4-Pad1_ Net-_R4-Pad1_ 19.5k .ic v(Tj1)={envtemp} v(Tj2)={envtemp} .temp {envtemp} .param envtemp=25 .tran 200u 10 .option RELTOL=.01 ABSTOL=1N VNTOL=10u .probe v(tj1) v(tj2) v(tcase1) v(tcase2) v(in) v(out) (all) .probe i(m1:s) vd(m2:s, m1:s) vd(M2:1:3) .save @m1[id] @m2[id] ; in out .control set controlswait if $?sharedmode rusage else run display rusage settype temperature tj1 tj2 tcase1 tcase2 plot tj1 tj2 tcase1 tcase2 plot in out xlimit 6 6.04 plot i(u1:vcc-) i(u1:vcc+)*(-1) xlimit 6 6.04 plot @m1[id] + i(m1:d) xlimit 9 9.04 end .endc .end tmp_ns50wwy/examples/probe/TL072.3010000644000175000017500000000220014163340332017065 0ustar carstencarsten* TL072 OPERATIONAL AMPLIFIER "MACROMODEL" SUBCIRCUIT * CREATED USING PARTS RELEASE 4.01 ON 06/16/89 AT 13:08 * (REV N/A) SUPPLY VOLTAGE: +/-15V * CONNECTIONS: NON-INVERTING INPUT * | INVERTING INPUT * | | POSITIVE POWER SUPPLY * | | | NEGATIVE POWER SUPPLY * | | | | OUTPUT * | | | | | .SUBCKT TL072 1 2 3 4 5 * C1 11 12 3.498E-12 C2 6 7 15.00E-12 DC 5 53 DX DE 54 5 DX DLP 90 91 DX DLN 92 90 DX DP 4 3 DX EGND 99 0 POLY(2) (3,0) (4,0) 0 .5 .5 FB 7 99 POLY(5) VB VC VE VLP VLN 0 4.715E6 -5E6 5E6 5E6 -5E6 GA 6 0 11 12 282.8E-6 GCM 0 6 10 99 8.942E-9 ISS 3 10 DC 195.0E-6 HLIM 90 0 VLIM 1K J1 11 2 10 JX J2 12 1 10 JX R2 6 9 100.0E3 RD1 4 11 3.536E3 RD2 4 12 3.536E3 RO1 8 5 150 RO2 7 99 150 RP 3 4 2.143E3 RSS 10 99 1.026E6 VB 9 0 DC 0 VC 3 53 DC 2.200 VE 54 4 DC 2.200 VLIM 7 8 DC 0 VLP 91 0 DC 25 VLN 0 92 DC 25 .MODEL DX D(IS=800.0E-18) .MODEL JX PJF(IS=15.00E-12 BETA=270.1E-6 VTO=-1) .ENDS tmp_ns50wwy/examples/probe/TL072-dual.lib0000644000175000017500000000027314163340332020263 0ustar carstencarsten* A dual opamp ngspice model .subckt TL072c 1out 1in- 1in+ vcc- 2in+ 2in- 2out vcc+ .include TL072.301 XU1A 1in+ 1in- vcc+ vcc- 1out TL072 XU1B 2in+ 2in- vcc+ vcc- 2out TL072 .ends tmp_ns50wwy/examples/probe/F5TurboV2-Probe.cir0000644000175000017500000000453314163340332021345 0ustar carstencarsten.title Pass Labs F5Turbo V2, schematic and netlist by KiCad .include "F5models.lib" .probe I(R19) vd(R10) v(in) v(out) vd(Net-_P3-Pad1_, 0) ; <------------------------------------------ *.probe (all) ; <------------------------------------------ JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SJ74 R4 0 Net-_P3-Pad1_ 10 R6 Net-_P2-Pad1_ -32 1k MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ IRFP240 R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5 R12 Net-_R12-Pad1_ Net-_P2-Pad1_ 2.2k RTH2 Net-_D1a1-Pad2_ Net-_R12-Pad1_ 4.7k XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio=0.15 R21 Net-_D1a1-Pad2_ -32 1 R10 out Net-_P3-Pad1_ 220 R9 out Net-_P3-Pad1_ 220 JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170 R1 Net-_Q1-Pad2_ in 1k XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad1_ RPOT value=200 ratio=0.85 R5 +32 Net-_P1-Pad1_ 1k R3 Net-_P3-Pad1_ 0 10 R2 in 0 47.5k .probe i(R2) ; <------------------------------------------ R19 +32 Net-_D4a1-Pad1_ 1 R14 Net-_Q4-Pad2_ Net-_P1-Pad1_ 47.5 D3a1 +32 Net-_D3a1-Pad1_ DMOD D3b1 +32 Net-_D3a1-Pad1_ DMOD R20 +32 Net-_D4a1-Pad1_ 1 D4a1 +32 Net-_D4a1-Pad1_ DMOD D4b1 +32 Net-_D4a1-Pad1_ DMOD MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ IRFP9240 .probe V(MQ4:3) ; <------------------------------------------ R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k RTH1 Net-_D3a1-Pad1_ Net-_R11-Pad1_ 4.7k XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio=0.15 R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5 MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ IRFP9240 .probe i(MQ3, 3) i(MQ5, s) ; <------------------------------------------ R18 +32 Net-_D3a1-Pad1_ 1 R17 +32 Net-_D3a1-Pad1_ 1 R7 out Net-_P3-Pad1_ 220 R8 out Net-_P3-Pad1_ 220 D1b1 Net-_D1a1-Pad2_ -32 DMOD R22 Net-_D1a1-Pad2_ -32 1 R23 Net-_D2a1-Pad2_ -32 1 R24 Net-_D2a1-Pad2_ -32 1 D1a1 Net-_D1a1-Pad2_ -32 DMOD R16 Net-_Q6-Pad2_ Net-_P2-Pad1_ 47.5 MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ IRFP240 .probe vd(MQ6: 2:1) ; <------------------------------------------ D2a1 Net-_D2a1-Pad2_ -32 DMOD D2b1 Net-_D2a1-Pad2_ -32 DMOD Rl1 out 0 4 V1 +32 0 32 V2 -32 0 -32 V3 in 0 sin(0 2 1k) .probe I(XP2,1) ; <------------------------------------------ * erroneous .probe parameters .probe (xyz) ; <------------------------------------------ .probe Vd(MQ3: 7 : 0) ; <------------------------------------------ .probe i(MQ8, s) ; <------------------------------------------ .tran 10u 10m .control run display rusage plot out in plot i(mq3:s) i(mq5:s) .endc .end tmp_ns50wwy/examples/probe/mos-test.cir0000644000175000017500000000116414163340332020352 0ustar carstencarsten.probe test with simple CMOS inverter Vd dd 0 dc 5 Vin in 0 dc 0 PULSE (0 5 0 10n 10n 100n 200n) Vs ss 0 dc 0 mn1 out in ss ss nm mp1 out in dd dd pm .model nm nmos .model pm pmos *.dc vin 0 5 0.1 .tran 5n 500n * inputs o.k. .probe i(mp1:s) i(mn1:s) v(in) v(out) vd(mn1:d:s) vd(mp1:1, mn1:1) vd(mn1:1:0) * buggy inputs (to check the error messages) .probe i(mn1:z) vd(mp1:0:0) vd(mp1:1:1) hhhh) i(:u) VD(z) i(()) vd(:0:0) i(:z) .save @mn1[id] .control run display set xbrushwidth=2 *plot commands o.k. plot i(mn1:s) i(mp1:s) *buggy plot command plot i(mp1:8) * plot o.k. plot in out plot @mn1[id] - i(mn1:s) .endc .end tmp_ns50wwy/examples/probe/VDMOS_models.lib0000644000175000017500000000110114163340332021012 0ustar carstencarsten.model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=0.1 + mtriode=0.8 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m XTI=2 + Cjo=1.3n Vj=0.8 m=0.5 + tcvth=0.004 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=0.1 + mtriode=0.6 + tnom=29 tmp_ns50wwy/examples/soi/0000755000175000017500000000000014163340332015561 5ustar carstencarstentmp_ns50wwy/examples/soi/bsim4soi/0000755000175000017500000000000014163340332017312 5ustar carstencarstentmp_ns50wwy/examples/soi/bsim4soi/pmos4p0.mod0000644000175000017500000001063714163340332021324 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 tmp_ns50wwy/examples/soi/bsim4soi/nmos4p0.mod0000644000175000017500000001055614163340332021322 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 tmp_ns50wwy/examples/soi/inv_tr.sp0000644000175000017500000000115114163340332017424 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 tmp_ns50wwy/examples/soi/Inv_chain.sp0000644000175000017500000000153514163340332020027 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 tmp_ns50wwy/examples/soi/inv_dc.sp0000644000175000017500000000064714163340332017376 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 tmp_ns50wwy/examples/soi/ring51_40.sp0000644000175000017500000000234214163340332017536 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 tmp_ns50wwy/examples/proc2mod/0000755000175000017500000000000014163340332016514 5ustar carstencarstentmp_ns50wwy/examples/proc2mod/process.pro0000644000175000017500000001303014163340332020711 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 tmp_ns50wwy/examples/various/0000755000175000017500000000000014163340332016457 5ustar carstencarstentmp_ns50wwy/examples/various/nmos_out_BSIM330_svg.sp0000644000175000017500000000366114163340332022613 0ustar carstencarsten***** NMOS Transistor BSIM3 (Id-Vds) with Rd *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 * plot set xgridwidth=2 set xbrushwidth=3 set nolegend plot vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' unset nolegend set color0=white plot vss2#branch vs v(22) title 'Series resistor: Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' *** postscript *** set hcopydevtype = postscript set hcopypscolor=0 ; background black hardcopy plot_4.ps vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' set hcopypscolor=1 ; background white hardcopy plot_5.ps vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_4.ps shell Start /B plot_5.ps * for CYGWIN else shell xterm -e gs plot_5.ps & end *** svg *** set hcopydevtype = svg *set color0=white set color1=blue hardcopy plot_4.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' *set color0=black set color1=orange hardcopy plot_5.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_4.svg shell Start /B plot_5.svg * shell Start /B plot_6.svg * for CYGWIN else shell xterm -e gs plot_5.svg & end .endc .end tmp_ns50wwy/examples/various/agauss_test.cir0000644000175000017500000000246214163340332021504 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 tmp_ns50wwy/examples/various/cutout1.cir0000644000175000017500000000041514163340332020562 0ustar carstencarstentest for cutout v1 1 0 dc 0 sin (0 1 1k) R1 1 2 1 R2 2 0 1 .control tran 10u 10m plot v(1) let cut-tstart = 2m let cut-tstop = 4m cutout plot v(1) v(2) setplot tran1 let cut-tstart = 6m let cut-tstop = 12m cutout plot v(2) tran1.v(1) .endc .end tmp_ns50wwy/examples/various/integrate1.cir0000644000175000017500000000141714163340332021224 0ustar carstencarstenDemonstrate the ngspice integration methods * function interg * meas ... ... INTEG * code model INTEG i1 0 1 1 R1 1 2 1 C1 2 3 1 Vm1 3 0 0 .ic v(2) = 0 v2 11 0 dc 0 sin (0 1 2) v3 31 0 dc 0 pulse (0 1 0.1 0.1 0.1 0.1 0.6) * integrate during transient simulation V4 in 0 dc 0 pwl (0 0 1 1) aint in out int_in .model int_in int(in_offset=0.0 gain=1.0 + out_lower_limit=-1e12 out_upper_limit=1e12 + limit_range=1e-9 out_ic=0.0) .tran 0.01 1 .control run display * integrate after the simulation let int1 = integ(Vm1#branch) plot int1 v(2) let int2 = integ(v(11)) plot v(11) int2 let int3 = integ(v(31)) plot v(31) int3 plot in out * get the integral value of a vector section meas tran yint INTEG v(out) from=0.4 to=0.6 .endc .end tmp_ns50wwy/examples/various/tmp-noise-2.cir0000644000175000017500000000045014163340332021227 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 tmp_ns50wwy/examples/various/nmos_out_BSIM330_plainwrite.sp0000644000175000017500000000211214163340332024160 0ustar carstencarsten***** NMOS Transistor BSIM3 (Id-Vds) with Rd *** ** Node name with offensive character '+' 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 * drain series resistor R2 2 22 1k M2 22 1 +32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 +32 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 .control set xgridwidth=2 set xbrushwidth=3 dc vds 0 2 0.05 vgs 0 2 0.4 let v(/22) = V(22) ; only availavle in plot dc1 dc vds 0 2 0.05 vgs 0 2 0.5 let v(+22) = V(22) ; only availavle in plot dc2 set nolegend *set plainplot plot v(+22) plainplot set plainwrite write test.out v(+22) vss#branch dc1.v(/22) dc1.vss#branch unset nolegend set color0=white *unset plainplot ; required if 'set plainplot' plot vss2#branch vs v(22) title 'Series resistor: Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' .endc .end tmp_ns50wwy/examples/various/3d_loop.sp0000644000175000017500000001115514163340332020365 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 tmp_ns50wwy/examples/various/ro_17_4.cir0000644000175000017500000002654714163340332020346 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=8 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 tmp_ns50wwy/examples/various/i(xxx)_tests.cir0000644000175000017500000000272714163340332021531 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 tmp_ns50wwy/examples/various/nmos_out_BSIM330.sp0000644000175000017500000000155414163340332021733 0ustar carstencarsten***** NMOS Transistor BSIM3 (Id-Vds) with Rd *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control set xgridwidth=2 set xbrushwidth=3 dc vds 0 2 0.05 vgs 0 2 0.4 set nolegend plot vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' unset nolegend set color0=white plot vss2#branch vs v(22) title 'Series resistor: Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' .endc .end tmp_ns50wwy/examples/various/gain_stage.cir0000644000175000017500000000224214163340332021257 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 tmp_ns50wwy/examples/various/res-value-options.cir0000644000175000017500000000050114163340332022546 0ustar carstencarstenngspice resistor/capacitor value check * set ngbehavior=lt required in spice.rc R1 1 0 2m5 R2 1 0 2meg5 R3 1 0 2M5 R4 1 0 2R5 R5 1 0 27R56 R6 1 0 1e5 R7 1 0 56Ohms R8 1 0 1.7Meg R9 1 0 1e-3wwww R10 1 0 -1.7 V1 1 0 1 C1 1 0 1u2 C2 1 0 3m3 C3 1 0 4f7 C5 1 0 15p C6 1 0 2200u C7 1 0 2200u2nnn .control show r c .endc .end tmp_ns50wwy/examples/various/bjt_ac_par.sp0000644000175000017500000000127214163340332021111 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 tmp_ns50wwy/examples/various/modelcard.pmos0000644000175000017500000000157114163340332021315 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 tmp_ns50wwy/examples/various/FFT_Leakage.cir0000644000175000017500000000404714163340332021213 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 tmp_ns50wwy/examples/various/RKM-C-1.cir0000644000175000017500000000065514163340332020133 0ustar carstencarstenRKM Capacitors V1 2 0 1 R1 2 1 4K7 C1 1 0 4p7 ; 4.7p C2 1 0 4n7 ; 4.7n C3 1 0 4u7 ; 4.7u C4 1 0 4m7 ; 4.7m C5 1 0 4F7 ; 4.7f <-- This deviates from the RKM notation C6 1 0 47p3 ; 47.3p C7 1 0 470p ; 470p C8 1 0 4u76 tc1=1e-6 tc2=1e-9 dtemp=6 * ; 4.76u C9 1 0 4m7 ; 4.7m C10 1 0 470nF ; 470n C11 1 0 47fF ; 47f <-- This deviates from the RKM notation .control show c .endc .end tmp_ns50wwy/examples/various/modelcard.nmos0000644000175000017500000000211014163340332021301 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 tmp_ns50wwy/examples/various/ro-meas.cir0000644000175000017500000000363314163340332020526 0ustar carstencarstenRing Oscillator with various current and voltage measurements * outside and inside of subcircuits * inverter w/o current measurement .subckt inv in out vdd vss mn1 out in vss vss mynmos W=1u L=0.25u mp1 out in vdd vdd mypmos W=2u L=0.25u .ends * inverter with current measurement .subckt invmeas in out vdd vss mn1 out in mea mea mynmos W=1u L=0.25u mp1 out in vdd vdd mypmos W=2u L=0.25u vmeas mea vss 0 .ends * inverter with power output .subckt invp in out vdd vss mn1 out in mea mea mynmos W=3u L=0.25u mp1 out in vdd vdd mypmos W=6u L=0.25u vmeas mea vss 0 .ends .subckt ro dd ss ssb out * ring oscillator Xinv1 n1 n2 dd ss inv Xinv2 n2 n3 dd ss inv Xinv3 n3 n4 dd ss inv Xinv4 n4 n5 dd ss inv Xinv5 n5 n1 dd ss invmeas * output buffer Xinv6 n5 outi dd ssb inv Xinv7 outi out dd ssb invp .ends Xro dd ss ssb out ro Vdd dd 0 1.5 Vss ss 0 0 Vssb ssb 0 0 * use internally predefined model parameters .model mynmos nmos level=14 version=4.5.0 .model mypmos pmos level=14 version=4.5.0 .option savecurrents .control *use save ... if option savecurrents is not given *save all @m.xro.xinv2.mn1[id] @m.xro.xinv3.mn1[id] tran 2p 3n *use remzerovec if option savecurrents is given remzerovec set xbrushwidth=2 set color0=white *output voltage after output buffer plot v(out) * measure currents * v.xro.xinv5.vmeas#branch current through inverter 5 * vss#branch total ro current * @m.xro.xinv2.mn1[id] drain current of transistor m1 in inverter 2 plot v.xro.xinv5.vmeas#branch vss#branch @m.xro.xinv2.mn1[id] * vssb#branch current through output buffer plot vssb#branch * plot voltages at nodes internal to subcircuit instance xro plot xro.n1 xro.n2 xro.n3 xro.n4 xro.n5 xro.outi * Write the drain current of transistor m1 in inverter 3 into * a raw file write id.raw @m.xro.xinv3.mn1[id] * and into a table wrdata id.out @m.xro.xinv3.mn1[id] .endc .end tmp_ns50wwy/examples/various/model-name-check.cir0000644000175000017500000000161014163340332022245 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 tmp_ns50wwy/examples/various/RKM-R-1.cir0000644000175000017500000000063414163340332020147 0ustar carstencarstenRKM Resistors V1 1 0 1 R1 1 0 4K7 ; 4.7k R2 1 0 4R7 ; 4.7 R3 1 0 R47 ; 0.47 R4 1 0 470R ; 470 R5 1 0 47K ; 47k R6 1 0 47K3 ; 47.3k R7 1 0 470K ; 470k R8 1 0 4Meg7 tc1=1e-6 tc2=1e-9 dtemp=6 * ; 4.7Meg <-- Not defined in the RKM notation R9 1 0 4L7 ; 4.7m R10 1 0 470L ; 470m R11 1 0 4M7 ; 4.7m <-- This deviates from the RKM notation .control show r .endc .end tmp_ns50wwy/examples/various/nmos_pmos_BSIM330.sp0000644000175000017500000000217114163340332022076 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 set xgridwidth=2 set xbrushwidth=3 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 tmp_ns50wwy/examples/various/tmp-noise.cir0000644000175000017500000000074614163340332021100 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 tmp_ns50wwy/examples/various/compose-examples.cir0000644000175000017500000000102314163340332022433 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 tmp_ns50wwy/examples/various/nmos_pmos_plotting.sp0000644000175000017500000000242614163340332022761 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 tmp_ns50wwy/examples/various/bjtnoise.cir0000644000175000017500000000053614163340332020777 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 tmp_ns50wwy/examples/various/todo-temper-3.cir0000644000175000017500000000056214163340332021560 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 tmp_ns50wwy/examples/various/FFT_tests.cir0000644000175000017500000000572414163340332021027 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 tmp_ns50wwy/examples/various/dc_loop.sp0000644000175000017500000000170114163340332020441 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 tmp_ns50wwy/examples/various/adder_mos.cir0000644000175000017500000000464214163340332021121 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 tmp_ns50wwy/examples/various/diode_ac_par.sp0000644000175000017500000000051614163340332021416 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 tmp_ns50wwy/examples/various/alterparam.sp0000644000175000017500000000102314163340332021147 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 tmp_ns50wwy/examples/various/param_sweep.cir0000644000175000017500000000075414163340332021467 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 tmp_ns50wwy/examples/numparam/0000755000175000017500000000000014163340332016607 5ustar carstencarstentmp_ns50wwy/examples/numparam/pintest.cir0000644000175000017500000000075314163340332021001 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 tmp_ns50wwy/examples/numparam/example.cir0000644000175000017500000000043714163340332020745 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 tmp_ns50wwy/examples/numparam/pin.mod0000644000175000017500000000161014163340332020074 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 tmp_ns50wwy/examples/optran/0000755000175000017500000000000014163340332016272 5ustar carstencarstentmp_ns50wwy/examples/optran/F5TurboV2thermal-optran.cir0000644000175000017500000000447714163340332023361 0ustar carstencarsten.title KiCad schematic .include "F5models.lib" .include "script-optran.txt" R2 in 0 47.5k R1 Net-_Q1-Pad2_ in 1k R5 +32 Net-_P1-Pad1_ 1k R3 Net-_P3-Pad1_ 0 10 R4 0 Net-_P3-Pad3_ 10 R6 Net-_P2-Pad1_ -32 1k R7 out Net-_P3-Pad1_ 220 R8 out Net-_P3-Pad1_ 220 R9 out Net-_P3-Pad3_ 220 R10 out Net-_P3-Pad3_ 220 R11 Net-_R11-Pad1_ Net-_P1-Pad1_ 2.2k R13 Net-_Q3-Pad2_ Net-_P1-Pad1_ 47.5 R15 Net-_Q5-Pad2_ Net-_P2-Pad1_ 47.5 R12 Net-_R12-Pad1_ Net-_P2-Pad1_ 2.2k R17 +32 Net-_D3a1-Pad1_ 1 R21 Net-_D1a1-Pad2_ -32 1 R18 +32 Net-_D3a1-Pad1_ 1 R22 Net-_D1a1-Pad2_ -32 1 R16 Net-_Q6-Pad2_ Net-_P2-Pad1_ 47.5 R14 Net-_Q4-Pad2_ Net-_P1-Pad1_ 47.5 R19 +32 Net-_D4a1-Pad1_ 1 R23 Net-_D2a1-Pad2_ -32 1 R20 +32 Net-_D4a1-Pad1_ 1 R24 Net-_D2a1-Pad2_ -32 1 Ra2 Net-_Ra1-Pad2_ 0 4 D3a1 +32 Net-_D3a1-Pad1_ DMOD D1a1 Net-_D1a1-Pad2_ -32 DMOD D3b1 +32 Net-_D3a1-Pad1_ DMOD D1b1 Net-_D1a1-Pad2_ -32 DMOD D4a1 +32 Net-_D4a1-Pad1_ DMOD D2a1 Net-_D2a1-Pad2_ -32 DMOD D4b1 +32 Net-_D4a1-Pad1_ DMOD D2b1 Net-_D2a1-Pad2_ -32 DMOD XP3 Net-_P3-Pad1_ 0 Net-_P3-Pad3_ RPOT value=200 ratio={rp3} XP1 Net-_P1-Pad1_ +32 +32 RPOT value=5k ratio={rp1} XP2 Net-_P2-Pad1_ -32 -32 RPOT value=5k ratio={rp2} V3 in 0 dc 0 ac 1 sin(0 2 1k 5m) JQ1 Net-_P1-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad1_ 2SK170 JQ2 Net-_P2-Pad1_ Net-_Q1-Pad2_ Net-_P3-Pad3_ 2SJ74 MQ5 out Net-_Q5-Pad2_ Net-_D1a1-Pad2_ Q5tj Q5tc IRFP240 thermal MQ4 out Net-_Q4-Pad2_ Net-_D4a1-Pad1_ Q4tj Q4tc IRFP9240 thermal MQ6 out Net-_Q6-Pad2_ Net-_D2a1-Pad2_ Q6tj Q6tc IRFP240 thermal Rj1 Q3tj 0 1G Rj2 Q4tj 0 1G Rj3 Q5tj 0 1G Rj4 Q6tj 0 1G Rc2 Q3hs Net-_Rc2-Pad2_ {hs} Rc4 Q4hs Net-_Rc2-Pad2_ {hs} Rc6 Q5hs Net-_Rc2-Pad2_ {hs} Rc8 Q6hs Net-_Rc2-Pad2_ {hs} Rc1 Q3tc Q3hs {chs} Rc3 Q4tc Q4hs {chs} Rc5 Q5tc Q5hs {chs} Rc7 Q6tc Q6hs {chs} Vt1 Net-_Rc2-Pad2_ 0 {envtemp} Cc1 Q3hs 0 {hscc} Cc3 Q5hs 0 {hscc} Cc4 Q6hs 0 {hscc} V1 +32 0 dc 32 ; pulse(0 32 0.4m 2m 2m 100 200) V2 -32 0 dc -32 ; pulse(0 -32 0.4m 2m 2m 100 200) XTH2 Net-_D1a1-Pad2_ Q5hs Net-_R12-Pad1_ th R25=4.7k XTH1 Net-_D3a1-Pad1_ Q3hs Net-_R11-Pad1_ th R25=4.7k MQ3 out Net-_Q3-Pad2_ Net-_D3a1-Pad1_ Q3tj Q3tc IRFP9240 thermal Vs1 Net-_S1-Pad3_ 0 dc 0 pulse(0 5 6 1m 1m 20 20) XS1 Net-_Ra1-Pad2_ 0 Net-_S1-Pad3_ 0 genrelay Cc2 Q4hs 0 {hscc} Ra1 out Net-_Ra1-Pad2_ 4 .tran 20u 5 .param envtemp=40 .param chs=1 .param hs=1.2 .param hscc=1 .param rp2=0.21 .param rp1=0.36 .param rp3=0.505 .end tmp_ns50wwy/examples/optran/models/0000755000175000017500000000000014163340332017555 5ustar carstencarstentmp_ns50wwy/examples/optran/models/opa1612c-dual.lib0000644000175000017500000000033714163340332022427 0ustar carstencarsten* A dual opamp ngspice model * file name: OPA1612c-dual.lib .subckt OPA1612c 1OUT 1IN- 1IN+ VEE 2IN+ 2IN- 2OUT VCC .include opa1611.lib XU1A 1IN+ 1IN- VCC VEE 1OUT opa1611 XU1B 2IN+ 2IN- VCC VEE 2OUT opa1611 .ends tmp_ns50wwy/examples/optran/models/TL072.3010000644000175000017500000000217714163340332020561 0ustar carstencarsten* TL072 OPERATIONAL AMPLIFIER "MACROMODEL" SUBCIRCUIT * CREATED USING PARTS RELEASE 4.01 ON 06/16/89 AT 13:08 * (REV N/A) SUPPLY VOLTAGE: +/-15V * CONNECTIONS: NON-INVERTING INPUT * | INVERTING INPUT * | | POSITIVE POWER SUPPLY * | | | NEGATIVE POWER SUPPLY * | | | | OUTPUT * | | | | | .SUBCKT TL072 1 2 3 4 5 * C1 11 12 3.498E-12 C2 6 7 15.00E-12 DC 5 53 DX DE 54 5 DX DLP 90 91 DX DLN 92 90 DX DP 4 3 DX EGND 99 0 POLY(2) (3,0) (4,0) 0 .5 .5 FB 7 99 POLY(5) VB VC VE VLP VLN 0 4.715E6 -5E6 5E6 5E6 -5E6 GA 6 0 11 12 282.8E-6 GCM 0 6 10 99 8.942E-9 ISS 3 10 DC 195.0E-6 HLIM 90 0 VLIM 1K J1 11 2 10 JX J2 12 1 10 JX R2 6 9 100.0E3 RD1 4 11 3.536E3 RD2 4 12 3.536E3 RO1 8 5 150 RO2 7 99 150 RP 3 4 2.143E3 RSS 10 99 1.026E6 VB 9 0 DC 0 VC 3 53 DC 2.200 VE 54 4 DC 2.200 VLIM 7 8 DC 0 VLP 91 0 DC 25 VLN 0 92 DC 25 .MODEL DX D(IS=800.0E-18) .MODEL JX PJF(IS=15.00E-12 BETA=270.1E-6 VTO=-1) .ENDS tmp_ns50wwy/examples/optran/models/TL072-dual.lib0000644000175000017500000000033014163340332021734 0ustar carstencarsten* A dual opamp ngspice model * file name: TL072-dual.lib .subckt TL072c 1out 1in- 1in+ vcc- 2in+ 2in- 2out vcc+ .include TL072.301 XU1A 1in+ 1in- vcc+ vcc- 1out TL072 XU1B 2in+ 2in- vcc+ vcc- 2out TL072 .ends tmp_ns50wwy/examples/optran/models/opa1656c-dual.lib0000644000175000017500000000033714163340332022437 0ustar carstencarsten* A dual opamp ngspice model * file name: OPA1656c-dual.lib .subckt OPA1656c 1OUT 1IN- 1IN+ VEE 2IN+ 2IN- 2OUT VCC .include opa1656.lib XU1A 1IN+ 1IN- VCC VEE 1OUT opa1656 XU1B 2IN+ 2IN- VCC VEE 2OUT opa1656 .ends tmp_ns50wwy/examples/optran/script-optran.txt0000644000175000017500000000245114163340332021642 0ustar carstencarsten.temp {envtemp} .param envtemp=40 .option savecurrents .control set controlswait if $?sharedmode * script for shared ngspice version rusage else *** script for standard ngspice * Start optran without first iteration, * without gmin stepping and without src stepping * optran step size 10 ms, duration 40s, optran 1 0 0 10m 40 0 * check the first 10 ms, input is switched on after 5 ms tran 1u 10m echo * output power let po = @ra1[i] * v(out) meas tran power_rms rms po from=5m to=10m echo rusage * temperature transistor Q6 set xbrushwidth=4 settype temperature q6tj q6tc q6hs plot q6tj q6tc q6hs q3tj q3tc q3hs ylimit 40 140 set xbrushwidth=2 * input and output voltages plot in out * power supply currents *plot V1#branch V2#branch ylimit -50 50 plot V1#branch V2#branch ylimit -10 10 * output current plot @ra1[i] *plot @ra1[i] xlimit 0 5m ylimit -0.3 0.3 * resistance of thermistor2 TH1, TH2 let rth1 = (v("net-_d3a1-pad1_") - v("net-_r11-pad1_")) / (@b.xth1.brtherm[i] + 1n) let rth2 = (v("net-_d1a1-pad2_") - v("net-_r12-pad1_")) / (@b.xth2.brtherm[i] + 1n) settype impedance rth1 rth2 plot rth1 rth2 ylimit 0 5k ac dec 10 1 1Meg plot db(out) plot cph(out) tran 1u 100m fft out set xbrushwidth=4 set color0=white plot mag(out) xlimit 0 10k * to see the harmonics plot mag(out) xlimit 0 10k ylimit 0 30m end .endctmp_ns50wwy/examples/optran/HiPass3opamps_optran.cir0000644000175000017500000000437014163340332023052 0ustar carstencarsten.title KiCad schematic .include "models/TL072-dual.lib" .include "models/opa1612c-dual.lib" .include "models/opa1656c-dual.lib" V1 Net-_C1-Pad2_ GND dc 0 ac 1 V2 15+ GND dc 15 V3 GND 15- dc 15 C2 Net-_C2-Pad1_ Net-_C1-Pad1_ 330n C1 Net-_C1-Pad1_ Net-_C1-Pad2_ 330n C3 Net-_C3-Pad1_ Net-_C3-Pad2_ 330n C4 Net-_C4-Pad1_ Net-_C3-Pad2_ 330n R8 Net-_C4-Pad1_ Net-_R7-Pad1_ 2780 R3 Net-_C2-Pad1_ Net-_R2-Pad1_ 2780 R2 Net-_R2-Pad1_ GND 2780 R1 Net-_R1-Pad1_ Net-_C1-Pad1_ 2780 R6 Net-_R10-Pad1_ Net-_C3-Pad2_ 2780 R7 Net-_R7-Pad1_ GND 2780 R10 Net-_R10-Pad1_ TL072_OUT 10k R4 GND Net-_R1-Pad1_ 2780 R9 GND Net-_R10-Pad1_ 2780 R11 TL072_OUT GND 100k XU1 Net-_C3-Pad1_ Net-_R1-Pad1_ Net-_C2-Pad1_ 15- Net-_C4-Pad1_ Net-_R10-Pad1_ TL072_OUT 15+ TL072c R5 Net-_R1-Pad1_ Net-_C3-Pad1_ 10k C6 Net-_C6-Pad1_ Net-_C5-Pad1_ 330n C5 Net-_C5-Pad1_ Net-_C1-Pad2_ 330n C7 Net-_C7-Pad1_ Net-_C7-Pad2_ 330n C8 Net-_C8-Pad1_ Net-_C7-Pad2_ 330n R19 Net-_C8-Pad1_ Net-_R18-Pad1_ 2780 R14 Net-_C6-Pad1_ Net-_R13-Pad1_ 2780 R13 Net-_R13-Pad1_ GND 2780 R12 Net-_R12-Pad1_ Net-_C5-Pad1_ 2780 R17 Net-_R17-Pad1_ Net-_C7-Pad2_ 2780 R18 Net-_R18-Pad1_ GND 2780 R21 Net-_R17-Pad1_ OPA1656_OUT 10k R15 GND Net-_R12-Pad1_ 2780 R20 GND Net-_R17-Pad1_ 2780 R22 OPA1656_OUT GND 100k XU2 Net-_C7-Pad1_ Net-_R12-Pad1_ Net-_C6-Pad1_ 15- Net-_C8-Pad1_ Net-_R17-Pad1_ OPA1656_OUT 15+ OPA1656c R16 Net-_R12-Pad1_ Net-_C7-Pad1_ 10k C10 Net-_C10-Pad1_ Net-_C10-Pad2_ 330n C9 Net-_C10-Pad2_ Net-_C1-Pad2_ 330n C11 Net-_C11-Pad1_ Net-_C11-Pad2_ 330n C12 Net-_C12-Pad1_ Net-_C11-Pad2_ 330n R30 Net-_C12-Pad1_ Net-_R29-Pad1_ 2780 R25 Net-_C10-Pad1_ Net-_R24-Pad1_ 2780 R24 Net-_R24-Pad1_ GND 2780 R23 Net-_R23-Pad1_ Net-_C10-Pad2_ 2780 R28 Net-_R28-Pad1_ Net-_C11-Pad2_ 2780 R29 Net-_R29-Pad1_ GND 2780 R32 Net-_R28-Pad1_ OPA1612_OUT 10k R26 GND Net-_R23-Pad1_ 2780 R31 GND Net-_R28-Pad1_ 2780 R33 OPA1612_OUT GND 100k XU3 Net-_C11-Pad1_ Net-_R23-Pad1_ Net-_C10-Pad1_ 15- Net-_C12-Pad1_ Net-_R28-Pad1_ OPA1612_OUT 15+ OPA1612c R27 Net-_R23-Pad1_ Net-_C11-Pad1_ 10k *.ac dec 1k 1 10k *.options reltol=0.01 rshunt=1e12 .control *op optran 0 0 0 100n 10u 0 *op *print all ac dec 10 100 10Meg set color0=white set xbrushwidth=2 plot db(OPA1612_OUT) db(OPA1656_OUT) db(TL072_OUT) plot cph(OPA1612_OUT) cph(OPA1656_OUT) cph(TL072_OUT) .endc .end tmp_ns50wwy/examples/optran/TLV9002-test.cir0000644000175000017500000000104514163340332020726 0ustar carstencarsten.title KiCad schematic .include "./models/TLV9002.LIB" Vsignal1 Vin GND dc 2.5 ac 1 Vcc1 Vcc GND 5 R1 Vin Net-_R1-Pad2_ 1000 R2 Vout Net-_R1-Pad2_ 1meg R3 Vcc Net-_R3-Pad2_ 10k R4 Net-_R3-Pad2_ GND 10k XU1 Net-_R3-Pad2_ Net-_R1-Pad2_ Vcc GND Vout TLV9002 .save @vsignal1[i] .save @vcc1[i] .save @r1[i] .save @r2[i] .save @r3[i] .save @r4[i] .save V(Net-_R1-Pad2_) .save V(Net-_R3-Pad2_) .save V(Vcc) .save V(Vin) .save V(Vout) .ac dec 10 100m 20k .control run plot db(Vout) set units=degrees plot ph(Vout) .endc .end tmp_ns50wwy/examples/optran/F5models.lib0000644000175000017500000000365314163340332020447 0ustar carstencarsten* from https://www.diyaudio.com/forums/solid-state/252973-2sk170-2sj74-spice-model-pass-0-4ma.html *2SJ74 *Toshiba Dep-Mode 20mA 400mW LowNoise pkg:TO-92B 2,1,3 .MODEL 2SJ74 PJF(Beta=92.12m Rs=7.748 Rd=7.748 Lambda=4.464m +Vto=-.5428 Cgd=85.67p Pb=.3905 Fc=.5 +Cgs=78.27p Is=12.98p +Kf=26.64E-18 Af=1) *2SK170 * 20mA 400mW LowNoise Dep-Mode pkg:TO-92B 3,1,2 .MODEL 2SK170 NJF(Beta=59.86m Rs=4.151 Rd=4.151 Lambda=1.923m +Vto=-.5024 Cgd=20p Pb=.4746 Fc=.5 +Cgs=25.48p Is=8.477p +Kf=111.3E-18 Af=1) .subckt RPOT 1 2 3 R1 1 2 {value*ratio + 1m} R2 2 3 {value*(1-ratio)+ 1m} * below are default parameters, which are required by some simulators .param value=1k .param ratio=1 .ends .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=0.1 + mtriode=0.8 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m XTI=2 + Cjo=1.3n Vj=0.8 m=0.5 + tcvth=0.004 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=0.1 + mtriode=0.6 .model DMOD D * Thermistor model .subckt th n1 nt n2 .param B=3977 .param R25=4700 *control node Ctherm1 n1 0 100p Ctherm2 n2 0 100p Rtherm n1 n2 R = {R25*exp(B*(1/(v(nt)+273.15)-1/(25+273.15)))} .ends * generic relay model .subckt genrelay out1 out2 in1 in2 .param ron = 10m S1 out1 out2 in1 in2 SW .MODEL SW VSWITCH(VON=4V VOFF=1V RON={ron} ROFF=100K) .ends .MODEL IXTH16N10 VDMOS Nchan Vds=100 + VTO=-3.2 KP=9 + Lambda=2m + Mtriode=1.8 + Ksubthres=120m + subshift=160m + Rs=4m Rd=5m 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.1 + Rthjc=0.2 Cthj=0.1 tmp_ns50wwy/examples/optran/TLV6001-test.cir0000644000175000017500000000113414163340332020721 0ustar carstencarsten.title KiCad schematic .include "./models/TLV6001.LIB" Vsignal1 Vin GND dc 2.5 ac 1 Vcc1 Vcc GND 5 R1 Vin Net-_R1-Pad2_ 1000 R2 Vout Net-_R1-Pad2_ 1meg R3 Vcc Net-_R3-Pad2_ 10k R4 Net-_R3-Pad2_ GND 10k XU1 Net-_R3-Pad2_ Net-_R1-Pad2_ Vcc GND Vout TLV6001 .save @vsignal1[i] .save @vcc1[i] .save @r1[i] .save @r2[i] .save @r3[i] .save @r4[i] .save V(Net-_R1-Pad2_) .save V(Net-_R3-Pad2_) .save V(Vcc) .save V(Vin) .save V(Vout) .ac dec 10 100m 20k .control optran 0 0 0 100n 10u 0 ; override optran from spinit run plot db(Vout) set units=degrees plot ph(Vout) .endc .end tmp_ns50wwy/examples/optran/contents.txt0000644000175000017500000000053014163340332020666 0ustar carstencarstenngspice input files using optran Pass Labs F5 turbo thermal simulation use optran for 4s and coarse steps to obtain stable temperature then simulate transient with high resolution HiPass3opamps_optran.cir Just a check with three different OpAmps TLV6001-test.cir, TLV9002-test.cir These OpAmp currently allow op calculation only with optran tmp_ns50wwy/examples/adms/0000755000175000017500000000000014163340332015713 5ustar carstencarstentmp_ns50wwy/examples/adms/mextram/0000755000175000017500000000000014163340332017370 5ustar carstencarstentmp_ns50wwy/examples/adms/mextram/mex_out.sp0000644000175000017500000000261014163340332021413 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 tmp_ns50wwy/examples/adms/mextram/mex_gum.sp0000644000175000017500000000266114163340332021402 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 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 tmp_ns50wwy/examples/adms/hicum0/0000755000175000017500000000000014163340332017100 5ustar carstencarstentmp_ns50wwy/examples/adms/hicum0/model-card-hicumL0V1p11.lib0000644000175000017500000003660514163340332023641 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 ******************************************************************************** tmp_ns50wwy/examples/adms/hicum0/hic0_gum.sp0000644000175000017500000000050514163340332021137 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 plot abs(i(vc)) abs(i(vb)) abs(i(vs)) ylimit 0.1p 100m ylog plot abs(i(vc))/abs(i(vb)) vs abs(i(vc)) xlog xlimit 100p 100m ylimit 0 200 retraceplot .endc .include model-card-hicumL0V1p11.lib .end tmp_ns50wwy/examples/adms/hicum0/hic0_out.sp0000644000175000017500000000034114163340332021154 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 tmp_ns50wwy/examples/adms/r2_cmc/0000755000175000017500000000000014163340332017060 5ustar carstencarstentmp_ns50wwy/examples/adms/r2_cmc/res_r2_cmc.cir0000644000175000017500000000041514163340332021575 0ustar carstencarstenr2_cmc v1 1 0 10 Rr2_cmc 1 0 rmodel w=1u l=20u isnoisy=1 * Poly resistor, r2_cmc model .model rmodel r(level=2 rsh=200 xl=0.2u xw=-0.05u p3=0.12 q3=1.6 p2=0.015 q2=3.8 tc1=1.5e-4 tc2=7e-7) .control op let res = v(1) / -v1#branch print res .endc .end tmp_ns50wwy/examples/adms/psp/0000755000175000017500000000000014163340332016515 5ustar carstencarstentmp_ns50wwy/examples/adms/psp/psp103_nmos.mod0000644000175000017500000000701714163340332021305 0ustar carstencarsten* PSP 103.3 * https://www.cea.fr/cea-tech/leti/pspsupport/Documents/Level%20103.3.3/psp_VA_and_CMC_ref_data.tar.gz .model nch nmos level=69 +TR=27.0 +DTA=0 +SWGEO=1 +QMC=1.0 +LVARO=-10.0E-9 +LVARL=0 +LVARW=0 +LAP=10.0E-9 +WVARO=10.0E-9 +WVARL=0 +WVARW=0 +WOT=0 +DLQ=0 +DWQ=0 +VFBO=-1.1 +VFBL=0 +VFBW=0 +VFBLW=0 +STVFBO=5.0E-4 +STVFBL=0 +STVFBW=0 +STVFBLW=0 +TOXO=1.5E-9 +EPSROXO=3.9 +NSUBO=3.0E+23 +NSUBW=0 +WSEG=1.5E-10 +NPCK=1.0E+24 +NPCKW=0 +WSEGP=0.9E-8 +LPCK=5.5E-8 +LPCKW=0 +FOL1=2.0E-2 +FOL2=5.0E-6 +FACNEFFACO=0.8 +FACNEFFACL=0 +FACNEFFACW=0 +FACNEFFACLW=0 +GFACNUDO=0.1 +GFACNUDL=0 +GFACNUDLEXP=1 +GFACNUDW=0 +GFACNUDLW=0 +VSBNUDO=0 +DVSBNUDO=1 +VNSUBO=0 +NSLPO=0.05 +DNSUBO=0 +DPHIBO=0 +DPHIBL=0 +DPHIBLEXP=1.0 +DPHIBW=0 +DPHIBLW=0 +DELVTACO=0 +DELVTACL=0 +DELVTACLEXP=1 +DELVTACW=0 +DELVTACLW=0 +NPO=1.5E+26 +NPL=10.0E-18 +CTO=5.0E-15 +CTL=4.0E-2 +CTLEXP=0.6 +CTW=0 +CTLW=0 +TOXOVO=1.5E-9 +TOXOVDO=2.0E-9 +LOV=10.0E-9 +LOVD=0 +NOVO=7.5E+25 +NOVDO=5.0e+25 +CFL=3.0E-4 +CFLEXP=2.0 +CFW=5.0E-3 +CFBO=0.3 +UO=3.5E-2 +FBET1=-0.3 +FBET1W=0.15 +LP1=1.5E-7 +LP1W=-2.5E-2 +FBET2=50.0 +LP2=8.5E-10 +BETW1=5.0E-2 +BETW2=-2.0E-2 +WBET=5.0E-10 +STBETO=1.75 +STBETL=-2.0E-2 +STBETW=-2.0E-3 +STBETLW=-3.0E-3 +MUEO=0.6 +MUEW=-1.2E-2 +STMUEO=0.5 +THEMUO=2.75 +STTHEMUO=-0.1 +CSO=1.0E-2 +CSL=0 +CSLEXP=1 +CSW=0 +CSLW=0 +STCSO=-5.0 +XCORO=0.15 +XCORL=2.0E-3 +XCORW=-3.0E-2 +XCORLW=-3.5E-3 +STXCORO=1.25 +FETAO=1 +RSW1=50 +RSW2=5.0E-2 +STRSO=-2.0 +RSBO=0 +RSGO=0 +THESATO=1.0E-6 +THESATL=0.6 +THESATLEXP=0.75 +THESATW=-1.0E-2 +THESATLW=0 +STTHESATO=1.5 +STTHESATL=-2.5E-2 +STTHESATW=-2.0E-2 +STTHESATLW=-5.0E-3 +THESATBO=0.15 +THESATGO=0.75 +AXO=20 +AXL=0.2 +ALPL=7.0E-3 +ALPLEXP=0.6 +ALPW=5.0E-2 +ALP1L1=2.5E-2 +ALP1LEXP=0.4 +ALP1L2=0.1 +ALP1W=8.5E-3 +ALP2L1=0.5 +ALP2LEXP=0 +ALP2L2=0.5 +ALP2W=-0.2 +VPO=0.25 +A1O=1.0 +A1L=0 +A1W=0 +A2O=10.0 +STA2O=-0.5 +A3O=1.0 +A3L=0 +A3W=0 +A4O=0 +A4L=0 +A4W=0 +GCOO=5.0 +IGINVLW=50.0 +IGOVW=10.0 +IGOVDW=0 +STIGO=1.5 +GC2O=1.0 +GC3O=-1.0 +CHIBO=3.1 +AGIDLW=50.0 +AGIDLDW=0 +BGIDLO=35.0 +BGIDLDO=41 +STBGIDLO=-5.0E-4 +STBGIDLDO=0 +CGIDLO=0.15 +CGIDLDO=0 +CGBOVL=0 +CFRW=5.0E-17 +CFRDW=0 +FNTO=1 +NFALW=8.0E+22 +NFBLW=3.0E7 +NFCLW=0 +RGO=0 +RINT=0 +RVPOLY=0 +RSHG=0 +DLSIL=0 +RBULKO=0 +RWELLO=0 +RJUNDO=0 +RJUNSO=0 +SWJUNEXP=0 +TRJ=27.0 +IMAX=1.0E3 +VJUNREF=2.5 +FJUNQ=0.03 +CJORBOT=1.0E-3 +CJORSTI=1.0E-9 +CJORGAT=0.5E-9 +VBIRBOT=0.75 +VBIRSTI=1.0 +VBIRGAT=0.75 +PBOT=0.35 +PSTI=0.35 +PGAT=0.6 +PHIGBOT=1.16 +PHIGSTI=1.16 +PHIGGAT=1.16 +IDSATRBOT=5.0E-9 +IDSATRSTI=1.0E-18 +IDSATRGAT=1.0E-18 +CSRHBOT=5.0E2 +CSRHSTI=0 +CSRHGAT=1.0E3 +XJUNSTI=1.0E-8 +XJUNGAT=1.0E-9 +CTATBOT=5.0E2 +CTATSTI=0 +CTATGAT=1.0E3 +MEFFTATBOT=0.25 +MEFFTATSTI=0.25 +MEFFTATGAT=0.25 +CBBTBOT=1.0E-12 +CBBTSTI=1.0E-18 +CBBTGAT=1.0E-18 +FBBTRBOT=1.0E9 +FBBTRSTI=1.0E9 +FBBTRGAT=1.0E9 +STFBBTBOT=-1.0E-3 +STFBBTSTI=-1.0E-3 +STFBBTGAT=-1.0E-2 +VBRBOT=10.0 +VBRSTI=10.0 +VBRGAT=10.0 +PBRBOT=3 +PBRSTI=4 +PBRGAT=3 +VJUNREFD=2.5 +FJUNQD=0.03 +CJORBOTD=1.0E-3 +CJORSTID=1.0E-9 +CJORGATD=1.0E-9 +VBIRBOTD=1.0 +VBIRSTID=1.0 +VBIRGATD=1.0 +PBOTD=0.5 +PSTID=0.5 +PGATD=0.5 +PHIGBOTD=1.16 +PHIGSTID=1.16 +PHIGGATD=1.16 +IDSATRBOTD=1.0E-12 +IDSATRSTID=1.0E-18 +IDSATRGATD=1.0E-18 +CSRHBOTD=1.0E+2 +CSRHSTID=1.0E-4 +CSRHGATD=1.0E-4 +XJUNSTID=1.0E-7 +XJUNGATD=1.0E-7 +CTATBOTD=1.0E+2 +CTATSTID=1.0E-4 +CTATGATD=1.0E-4 +MEFFTATBOTD=0.25 +MEFFTATSTID=0.25 +MEFFTATGATD=0.25 +CBBTBOTD=1.0E-12 +CBBTSTID=1.0E-18 +CBBTGATD=1.0E-18 +FBBTRBOTD=1.0E9 +FBBTRSTID=1.0E9 +FBBTRGATD=1.0E9 +STFBBTBOTD=-1.0E-3 +STFBBTSTID=-1.0E-3 +STFBBTGATD=-1.0E-3 +VBRBOTD=10.0 +VBRSTID=10.0 +VBRGATD=10.0 +PBRBOTD=4 +PBRSTID=4 +PBRGATD=4 tmp_ns50wwy/examples/adms/psp/psp_out_pmos_nm.sp0000644000175000017500000000067514163340332022312 0ustar carstencarstenpsp102 pch 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 pch +l=0.1u +w=1u +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.0 -0.05 vg 0 -1 -0.25 ; saturation plot i(vs) dc vg 0 -1.5 -0.05 vb 0 3.0 1 plot i(vs) .endc * .include psp102_pmos.mod *.include psp103_pmos.mod .end tmp_ns50wwy/examples/adms/psp/psp102_pmos.mod0000644000175000017500000000644614163340332021313 0ustar carstencarsten* PSP 102.5 * https://www.cea.fr/cea-tech/leti/pspsupport/Documents/Level%20102.5.0/psp_VA_and_CMC_ref_data.tar.gz .model pch pmos level=45 +TR=27.0 +DTA=0 +QMC=1.0 +LVARO=-10.0E-9 +LVARL=0 +LVARW=0 +LAP=10.0E-9 +WVARO=10.0E-9 +WVARL=0 +WVARW=0 +WOT=0 +DLQ=0 +DWQ=0 +VFBO=-1.1 +VFBL=0 +VFBW=0 +VFBLW=0 +STVFBO=5.0E-4 +STVFBL=0 +STVFBW=0 +STVFBLW=0 +TOXO=1.5E-9 +EPSROXO=3.9 +NSUBO=3.0E+23 +NSUBW=0 +WSEG=1.5E-10 +NPCK=1.0E+24 +NPCKW=0 +WSEGP=0.9E-8 +LPCK=5.5E-8 +LPCKW=0 +FOL1=2.0E-2 +FOL2=5.0E-6 +VNSUBO=0 +NSLPO=0.05 +DNSUBO=0 +DPHIBO=0 +DPHIBL=0 +DPHIBLEXP=1.0 +DPHIBW=0 +DPHIBLW=0 +NPO=1.5E+26 +NPL=10.0E-18 +CTO=5.0E-15 +CTL=4.0E-2 +CTLEXP=0.6 +CTW=0 +CTLW=0 +TOXOVO=1.5E-9 +TOXOVDO=2.0E-9 +LOV=10.0E-9 +LOVD=0 +NOVO=7.5E+25 +NOVDO=5.0e+25 +CFL=3.0E-4 +CFLEXP=2.0 +CFW=5.0E-3 +CFBO=0.3 +UO=3.5E-2 +FBET1=-0.3 +FBET1W=0.15 +LP1=1.5E-7 +LP1W=-2.5E-2 +FBET2=50.0 +LP2=8.5E-10 +BETW1=5.0E-2 +BETW2=-2.0E-2 +WBET=5.0E-10 +STBETO=1.75 +STBETL=-2.0E-2 +STBETW=-2.0E-3 +STBETLW=-3.0E-3 +MUEO=0.6 +MUEW=-1.2E-2 +STMUEO=0.5 +THEMUO=2.75 +STTHEMUO=-0.1 +CSO=1.0E-2 +CSL=0 +CSLEXP=1 +CSW=0 +CSLW=0 +STCSO=-5.0 +XCORO=0.15 +XCORL=2.0E-3 +XCORW=-3.0E-2 +XCORLW=-3.5E-3 +STXCORO=1.25 +FETAO=1 +RSW1=50 +RSW2=5.0E-2 +STRSO=-2.0 +RSBO=0 +RSGO=0 +THESATO=1.0E-6 +THESATL=0.6 +THESATLEXP=0.75 +THESATW=-1.0E-2 +THESATLW=0 +STTHESATO=1.5 +STTHESATL=-2.5E-2 +STTHESATW=-2.0E-2 +STTHESATLW=-5.0E-3 +THESATBO=0.15 +THESATGO=0.75 +AXO=20 +AXL=0.2 +ALPL=7.0E-3 +ALPLEXP=0.6 +ALPW=5.0E-2 +ALP1L1=2.5E-2 +ALP1LEXP=0.4 +ALP1L2=0.1 +ALP1W=8.5E-3 +ALP2L1=0.5 +ALP2LEXP=0 +ALP2L2=0.5 +ALP2W=-0.2 +VPO=0.25 +A1O=1.0 +A1L=0 +A1W=0 +A2O=10.0 +STA2O=-0.5 +A3O=1.0 +A3L=0 +A3W=0 +A4O=0 +A4L=0 +A4W=0 +GCOO=5.0 +IGINVLW=50.0 +IGOVW=10.0 +IGOVDW=0 +STIGO=1.5 +GC2O=1.0 +GC3O=-1.0 +CHIBO=3.1 +AGIDLW=50.0 +AGIDLDW=0 +BGIDLO=35.0 +BGIDLDO=41 +STBGIDLO=-5.0E-4 +STBGIDLDO=0 +CGIDLO=0.15 +CGIDLDO=0 +CGBOVL=0 +CFRW=5.0E-17 +CFRDW=0 +FNTO=1 +NFALW=8.0E+22 +NFBLW=3.0E7 +NFCLW=0 +RGO=0 +RINT=0 +RVPOLY=0 +RSHG=0 +DLSIL=0 +RBULKO=0 +RWELLO=0 +RJUNDO=0 +RJUNSO=0 +TRJ=27.0 +IMAX=1.0E3 +VJUNREF=2.5 +FJUNQ=0.03 +CJORBOT=1.0E-3 +CJORSTI=1.0E-9 +CJORGAT=0.5E-9 +VBIRBOT=0.75 +VBIRSTI=1.0 +VBIRGAT=0.75 +PBOT=0.35 +PSTI=0.35 +PGAT=0.6 +PHIGBOT=1.16 +PHIGSTI=1.16 +PHIGGAT=1.16 +IDSATRBOT=5.0E-9 +IDSATRSTI=1.0E-18 +IDSATRGAT=1.0E-18 +CSRHBOT=5.0E2 +CSRHSTI=0 +CSRHGAT=1.0E3 +XJUNSTI=1.0E-8 +XJUNGAT=1.0E-9 +CTATBOT=5.0E2 +CTATSTI=0 +CTATGAT=1.0E3 +MEFFTATBOT=0.25 +MEFFTATSTI=0.25 +MEFFTATGAT=0.25 +CBBTBOT=1.0E-12 +CBBTSTI=1.0E-18 +CBBTGAT=1.0E-18 +FBBTRBOT=1.0E9 +FBBTRSTI=1.0E9 +FBBTRGAT=1.0E9 +STFBBTBOT=-1.0E-3 +STFBBTSTI=-1.0E-3 +STFBBTGAT=-1.0E-2 +VBRBOT=10.0 +VBRSTI=10.0 +VBRGAT=10.0 +PBRBOT=3 +PBRSTI=4 +PBRGAT=3 +VJUNREFD=2.5 +FJUNQD=0.03 +CJORBOTD=1.0E-3 +CJORSTID=1.0E-9 +CJORGATD=1.0E-9 +VBIRBOTD=1.0 +VBIRSTID=1.0 +VBIRGATD=1.0 +PBOTD=0.5 +PSTID=0.5 +PGATD=0.5 +PHIGBOTD=1.16 +PHIGSTID=1.16 +PHIGGATD=1.16 +IDSATRBOTD=1.0E-12 +IDSATRSTID=1.0E-18 +IDSATRGATD=1.0E-18 +CSRHBOTD=1.0E+2 +CSRHSTID=1.0E-4 +CSRHGATD=1.0E-4 +XJUNSTID=1.0E-7 +XJUNGATD=1.0E-7 +CTATBOTD=1.0E+2 +CTATSTID=1.0E-4 +CTATGATD=1.0E-4 +MEFFTATBOTD=0.25 +MEFFTATSTID=0.25 +MEFFTATGATD=0.25 +CBBTBOTD=1.0E-12 +CBBTSTID=1.0E-18 +CBBTGATD=1.0E-18 +FBBTRBOTD=1.0E9 +FBBTRSTID=1.0E9 +FBBTRGATD=1.0E9 +STFBBTBOTD=-1.0E-3 +STFBBTSTID=-1.0E-3 +STFBBTGATD=-1.0E-3 +VBRBOTD=10.0 +VBRSTID=10.0 +VBRGATD=10.0 +PBRBOTD=4 +PBRSTID=4 +PBRGATD=4 tmp_ns50wwy/examples/adms/psp/psp_ro.sp0000644000175000017500000000137414163340332020370 0ustar carstencarsten* PSP models * simple 5-stage ring oscillator .param Vcc = 1.2 .csparam vcc='Vcc' * Path to the models .include psp102_nmos.mod .include psp102_pmos.mod * the voltage sources: Vdd vdd gnd DC 'Vcc' V1 in gnd pulse(0 'Vcc' 0p 200p 100p 1n 2n) Vmeas vss 0 0 Xnot1 in vdd vss in2 not1 Xnot2 in2 vdd vss in3 not1 Xnot3 in3 vdd vss in4 not1 Xnot4 in4 vdd vss in5 not1 Xnot5 in5 vdd vss in not1 *Rout out 0 1k .subckt not1 a vdd vss z m01 z a vdd vdd pch l=0.1u w=1u as=0.26235 ad=0.26235 ps=2.51 pd=2.51 m02 z a vss vss nch l=0.1u w=0.5u as=0.131175 ad=0.131175 ps=1.52 pd=1.52 c3 a vss 0.384f c2 z vss 0.576f .ends * simulation command: .tran 10p 10n uic .control run set xbrushwidth=3 plot in rusage .endc .end tmp_ns50wwy/examples/adms/psp/psp_transfer.sp0000644000175000017500000000067414163340332021576 0ustar carstencarstenpsp102 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 1.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 * .include psp102_nmos.mod .end tmp_ns50wwy/examples/adms/psp/psp_out_nmos_nm.sp0000644000175000017500000000065614163340332022307 0ustar carstencarstenpsp102 nch output * vd d 0 dc 0.05 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=0.1u +w=1u +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.0 0.05 vg 0 1.5 0.25 plot i(vs) dc vg 0 1.5 0.05 vb 0 -3.0 -1 plot i(vs) .endc * .include psp102_nmos.mod *.include psp103_nmos.mod .end tmp_ns50wwy/examples/adms/psp/psp_inverter.sp0000644000175000017500000000126614163340332021606 0ustar carstencarsten* PSP models * simple inverter .param Vcc = 1.2 .csparam vcc='Vcc' * Path to the models .include psp102_nmos.mod .include psp102_pmos.mod * the voltage sources: Vdd vdd gnd DC 'Vcc' V1 in gnd pulse(0 'Vcc' 0p 200p 100p 1n 2n) Vmeas vss 0 0 Xnot1 in vdd vss out not1 *Rout out 0 1k .subckt not1 a vdd vss z m01 z a vdd vdd pch l=0.1u w=1u as=0.26235 ad=0.26235 ps=2.51 pd=2.51 m02 z a vss vss nch l=0.1u w=0.5u as=0.131175 ad=0.131175 ps=1.52 pd=1.52 c3 a vss 0.384f c2 z vss 0.576f .ends * simulation command: .tran 10ps 10ns .dc V1 0 'vcc' 'vcc/100' .control run *set nolegend plot in out plot dc1.out plot dc1.i(Vmeas) rusage .endc .end tmp_ns50wwy/examples/adms/psp/psp102_nmos.mod0000644000175000017500000000644614163340332021311 0ustar carstencarsten* PSP 102.5 * https://www.cea.fr/cea-tech/leti/pspsupport/Documents/Level%20102.5.0/psp_VA_and_CMC_ref_data.tar.gz .model nch nmos level=45 +TR=27.0 +DTA=0 +QMC=1.0 +LVARO=-10.0E-9 +LVARL=0 +LVARW=0 +LAP=10.0E-9 +WVARO=10.0E-9 +WVARL=0 +WVARW=0 +WOT=0 +DLQ=0 +DWQ=0 +VFBO=-1.1 +VFBL=0 +VFBW=0 +VFBLW=0 +STVFBO=5.0E-4 +STVFBL=0 +STVFBW=0 +STVFBLW=0 +TOXO=1.5E-9 +EPSROXO=3.9 +NSUBO=3.0E+23 +NSUBW=0 +WSEG=1.5E-10 +NPCK=1.0E+24 +NPCKW=0 +WSEGP=0.9E-8 +LPCK=5.5E-8 +LPCKW=0 +FOL1=2.0E-2 +FOL2=5.0E-6 +VNSUBO=0 +NSLPO=0.05 +DNSUBO=0 +DPHIBO=0 +DPHIBL=0 +DPHIBLEXP=1.0 +DPHIBW=0 +DPHIBLW=0 +NPO=1.5E+26 +NPL=10.0E-18 +CTO=5.0E-15 +CTL=4.0E-2 +CTLEXP=0.6 +CTW=0 +CTLW=0 +TOXOVO=1.5E-9 +TOXOVDO=2.0E-9 +LOV=10.0E-9 +LOVD=0 +NOVO=7.5E+25 +NOVDO=5.0e+25 +CFL=3.0E-4 +CFLEXP=2.0 +CFW=5.0E-3 +CFBO=0.3 +UO=3.5E-2 +FBET1=-0.3 +FBET1W=0.15 +LP1=1.5E-7 +LP1W=-2.5E-2 +FBET2=50.0 +LP2=8.5E-10 +BETW1=5.0E-2 +BETW2=-2.0E-2 +WBET=5.0E-10 +STBETO=1.75 +STBETL=-2.0E-2 +STBETW=-2.0E-3 +STBETLW=-3.0E-3 +MUEO=0.6 +MUEW=-1.2E-2 +STMUEO=0.5 +THEMUO=2.75 +STTHEMUO=-0.1 +CSO=1.0E-2 +CSL=0 +CSLEXP=1 +CSW=0 +CSLW=0 +STCSO=-5.0 +XCORO=0.15 +XCORL=2.0E-3 +XCORW=-3.0E-2 +XCORLW=-3.5E-3 +STXCORO=1.25 +FETAO=1 +RSW1=50 +RSW2=5.0E-2 +STRSO=-2.0 +RSBO=0 +RSGO=0 +THESATO=1.0E-6 +THESATL=0.6 +THESATLEXP=0.75 +THESATW=-1.0E-2 +THESATLW=0 +STTHESATO=1.5 +STTHESATL=-2.5E-2 +STTHESATW=-2.0E-2 +STTHESATLW=-5.0E-3 +THESATBO=0.15 +THESATGO=0.75 +AXO=20 +AXL=0.2 +ALPL=7.0E-3 +ALPLEXP=0.6 +ALPW=5.0E-2 +ALP1L1=2.5E-2 +ALP1LEXP=0.4 +ALP1L2=0.1 +ALP1W=8.5E-3 +ALP2L1=0.5 +ALP2LEXP=0 +ALP2L2=0.5 +ALP2W=-0.2 +VPO=0.25 +A1O=1.0 +A1L=0 +A1W=0 +A2O=10.0 +STA2O=-0.5 +A3O=1.0 +A3L=0 +A3W=0 +A4O=0 +A4L=0 +A4W=0 +GCOO=5.0 +IGINVLW=50.0 +IGOVW=10.0 +IGOVDW=0 +STIGO=1.5 +GC2O=1.0 +GC3O=-1.0 +CHIBO=3.1 +AGIDLW=50.0 +AGIDLDW=0 +BGIDLO=35.0 +BGIDLDO=41 +STBGIDLO=-5.0E-4 +STBGIDLDO=0 +CGIDLO=0.15 +CGIDLDO=0 +CGBOVL=0 +CFRW=5.0E-17 +CFRDW=0 +FNTO=1 +NFALW=8.0E+22 +NFBLW=3.0E7 +NFCLW=0 +RGO=0 +RINT=0 +RVPOLY=0 +RSHG=0 +DLSIL=0 +RBULKO=0 +RWELLO=0 +RJUNDO=0 +RJUNSO=0 +TRJ=27.0 +IMAX=1.0E3 +VJUNREF=2.5 +FJUNQ=0.03 +CJORBOT=1.0E-3 +CJORSTI=1.0E-9 +CJORGAT=0.5E-9 +VBIRBOT=0.75 +VBIRSTI=1.0 +VBIRGAT=0.75 +PBOT=0.35 +PSTI=0.35 +PGAT=0.6 +PHIGBOT=1.16 +PHIGSTI=1.16 +PHIGGAT=1.16 +IDSATRBOT=5.0E-9 +IDSATRSTI=1.0E-18 +IDSATRGAT=1.0E-18 +CSRHBOT=5.0E2 +CSRHSTI=0 +CSRHGAT=1.0E3 +XJUNSTI=1.0E-8 +XJUNGAT=1.0E-9 +CTATBOT=5.0E2 +CTATSTI=0 +CTATGAT=1.0E3 +MEFFTATBOT=0.25 +MEFFTATSTI=0.25 +MEFFTATGAT=0.25 +CBBTBOT=1.0E-12 +CBBTSTI=1.0E-18 +CBBTGAT=1.0E-18 +FBBTRBOT=1.0E9 +FBBTRSTI=1.0E9 +FBBTRGAT=1.0E9 +STFBBTBOT=-1.0E-3 +STFBBTSTI=-1.0E-3 +STFBBTGAT=-1.0E-2 +VBRBOT=10.0 +VBRSTI=10.0 +VBRGAT=10.0 +PBRBOT=3 +PBRSTI=4 +PBRGAT=3 +VJUNREFD=2.5 +FJUNQD=0.03 +CJORBOTD=1.0E-3 +CJORSTID=1.0E-9 +CJORGATD=1.0E-9 +VBIRBOTD=1.0 +VBIRSTID=1.0 +VBIRGATD=1.0 +PBOTD=0.5 +PSTID=0.5 +PGATD=0.5 +PHIGBOTD=1.16 +PHIGSTID=1.16 +PHIGGATD=1.16 +IDSATRBOTD=1.0E-12 +IDSATRSTID=1.0E-18 +IDSATRGATD=1.0E-18 +CSRHBOTD=1.0E+2 +CSRHSTID=1.0E-4 +CSRHGATD=1.0E-4 +XJUNSTID=1.0E-7 +XJUNGATD=1.0E-7 +CTATBOTD=1.0E+2 +CTATSTID=1.0E-4 +CTATGATD=1.0E-4 +MEFFTATBOTD=0.25 +MEFFTATSTID=0.25 +MEFFTATGATD=0.25 +CBBTBOTD=1.0E-12 +CBBTSTID=1.0E-18 +CBBTGATD=1.0E-18 +FBBTRBOTD=1.0E9 +FBBTRSTID=1.0E9 +FBBTRGATD=1.0E9 +STFBBTBOTD=-1.0E-3 +STFBBTSTID=-1.0E-3 +STFBBTGATD=-1.0E-3 +VBRBOTD=10.0 +VBRSTID=10.0 +VBRGATD=10.0 +PBRBOTD=4 +PBRSTID=4 +PBRGATD=4 tmp_ns50wwy/examples/adms/bsimbulk/0000755000175000017500000000000014163340332017523 5ustar carstencarstentmp_ns50wwy/examples/adms/bsimbulk/Readme0000644000175000017500000000041014163340332020636 0ustar carstencarstenUnder Linux environment, enter 'csh run' to run all benchmark tests in a single run (only compile VA once). After simulation, enter 'csh clean' to remove unwanted files (only .lis left). To run single netlist, enter 'hspice -hdlpath ../code -i xxx.sp -o xxx.lis' tmp_ns50wwy/examples/adms/bsimbulk/model.l0000644000175000017500000002103614163340332021002 0ustar carstencarsten.model nch NMOS +level=77 +TYPE = 1 +GEOMOD = 0 +RGEOMOD = 0 +COVMOD = 1 +RDSMOD = 0 +GIDLMOD = 1 +IGCMOD = 0 +IGBMOD = 0 +LLONG = 2e-6 +WWIDE = 1e-5 +XL = -1.7e-8 +XW = 1.1e-8 +LINT = 0 +WINT = 0 +DLC = 0 +DWC = 0 +TOXE = 1.74e-9 +TOXP = 1.7e-9 +NDEP = 4.6e23 +NSD = 1e26 +NGATE = 8.5e25 +VFB = -1.02 +EPSROX = 3.9 +EPSRSUB = 11.9 +NI0SUB = 1.1e16 +XJ = 1.5e-7 +DMCG = 0 +DMDG = 0 +DMCGT = 0 +CIT = 1e-8 +CDSCD = 0.001 +CDSCB = 0 +CDSCBL = 0.007 +CDSCBLEXP = 1 +NFACTOR = 0.002 +NFACTORL = 2.1e-8 +NFACTORLEXP = 6.264 +NDEPL1 = 0.096 +NDEPLEXP1 = 1 +NDEPL2 = -0.0032 +NDEPLEXP2 = 2.05 +DVTP0 = 7.5e-7 +DVTP1 = -4.4e-7 +NDEPW = -0.1548 +NDEPWEXP = 0.7441 +NDEPWL = 0 +NDEPWLEXP = 0.2 +K2W = 0 +AGIDL = 3.728e-8 +AGIDLL = -0.04815 +AGIDLW = -0.0341 +BGIDL = 8.123e9 +CGIDL = 1.21e-6 +EGIDL = -2.952 +PHIN = 0.05 +K2L = 0.001636 +K2 = -0.014 +ETA0 = 8.416e-6 +ETAB = -5.561e-5 +ETABEXP = 2.155 +DSUB = 3 +VSAT = 6.4e4 +VSATW = 0.05 +VSATWEXP = 1 +DELTA = 0.15 +DELTAL = 0.1 +DELTALEXP = 1e-5 +U0 = 0.04546 +ETAMOB = 1.5 +U0L = 0.025 +U0LEXP = 0.95 +UA = 0.4007 +UAW = 0.05 +UAWEXP = 1 +UAL = 0.00475 +UALEXP = 1.118 +EUW = -0.02 +EUWEXP = 1 +EUL = 0.001 +EULEXP = 1 +EU = 1.9 +UDL = 1e-15 +UDLEXP = 1 +UD = 1.042e-5 +UCS = 2 +UCW = 0 +UCWEXP = 1 +UC = 1e-07 +UCL = 2.5e4 +UCLEXP = 1 +PCLM = 0.15 +PCLML = 0.01 +PCLMLEXP = 0.4 +PCLMG = 0 +PSCBE1 = 5 +PSCBE2 = 1.29e-12 +PDITS = 0 +PDITSL = 0 +PDITSD = 0 +RSWMIN = 0 +RSW = 100 +RDWMIN = 0 +RDW = 100 +RDSW = 20 +RDSWMIN = 0 +PRWG = 1 +PRWB = 0 +WR = 1 +RSH = 0 +PDIBLCB = 0 +PDIBLC = 0.01 +PDIBLCL = 1e-5 +PDIBLCLEXP = 1e-6 +PVAG = 0 +PTWG = 0.2 +PTWGL = 3e4 +PTWGLEXP = 5e-6 +FPROUT = 0 +CF = 0 +CFRCOEFF = 1 +CGSO = 2.5e-10 +CGDO = 2.5e-10 +CGSL = 1.2e-10 +CGDL = 1.2e-10 +CKAPPAS = 1.25 +CKAPPAD = 1.25 +CGBO = 0 +ADOS = 0 +BDOS = 1 +QM0 = 0.001 +ETAQM = 0.54 +NDEPCV = 8e23 +VFBCV = -0.95 +VSATCV = 1e5 +PCLMCV = 0 +PSAT = 0.46 +PSATL = 6 +PSATLEXP = 0.06 +TNFACTOR = 0 +TETA0 = 0 +UTE = -1.4 +UTEL = -0.001 +UA1 = -0.0011 +UA1L = 0 +UC1 = 0 +UD1 = 0 +UD1L = 0 +UCSTE = -0.005 +PRT = 0 +AT = -0.05 +ATL = -0.1 +TDELTA = -0.0048 +PTWGT = -0.002 +PTWGTL = 0.01 +KT1 = -0.115 +KT1EXP = 1 +KT1L = 1.286e-9 +KT2 = -0.003157 +K2LEXP = 1.698 +K2WEXP = 0.005 +TBGASUB = 0 +AIGS = 0.0136 +BIGS = 0.00171 +CIGS = 0.075 +AIGSL = 0 +AIGD = 0.0136 +BIGD = 0.00171 +CIGD = 0.075 +AIGDL = 0 +AIGC = 0.01285 +LAIGC = 2.132e-6 +BIGC = 0.0013 +CIGC = 0.013 +AIGCL = -0.01227 +PIGCD = 1 +PIGCDL = 6.196 +AIGBINV = 0.015 +BIGBINV = 0.000949 +CIGBINV = 0.006 +EIGBINV = 1.1 +NIGBINV = 3 +AIGBACC = 0.01751 +BIGBACC = 8.307 +CIGBACC = -898.7 +NIGBACC = 1 +LPSAT = 0 +WPSAT = 0 +PPSAT = 0 +PSATB = 0 +PSATX = 3 +WVSAT = 0 +PVSAT = 0 +WPTWG = 0 +PPTWG = 0 +TNOM = 25 +WDVTP0 = 0 +WDVTP1 = 0 +LUTE = 0.04574 +LUA1 = 8.365e-5 +LAT = 0 +DVTP2 = 0 +DVTP3 = 0 +DVTP4 = 0 +DVTP5 = 0 +VSATL = 1350 +VSATLEXP = 0.00033 +SCA = 0 +SCB = 0 +SCC = 0 +SC = 0 .model pch PMOS +level=77 +TYPE = -1 +GEOMOD = 0 +RGEOMOD = 0 +RGATEMOD = 0 +RBODYMOD = 0 +IGCMOD = 0 +IGBMOD = 0 +COVMOD = 1 +RDSMOD = 2 +GIDLMOD = 0 +TNOIMOD = 0 +SHMOD = 0 +TOXE = 2.34e-9 +TOXP = 1.925e-9 +DTOX = 0 +EPSROX = 3.9 +TNOM = 25 +XL = 0 +XW = 0 +LINT = 0 +LLONG = 1000000 +LL = 0 +LW = 0 +LWL = 0 +LLN = 1 +LWN = 1 +WINT = -9.0134104e-9 +WL = 0 +WW = 0 +WWL = 0 +WLN = 1 +WWN = 1 +WWIDE = 1000000 +DLC = 0 +LLC = 0 +LWC = 0 +LWLC = 0 +DWC = 0 +WLC = 0 +WWC = 0 +WWLC = 0 +JSS = 0.0001 +JSD = 0.0001 +JSWS = 0 +JSWD = 0 +JSWGS = 0 +JSWGD = 0 +NJS = 1 +NJD = 1 +IJTHSFWD = 0.1 +IJTHDFWD = 0.1 +IJTHSREV = 0.1 +IJTHDREV = 0.1 +BVS = 10 +BVD = 10 +XJBVS = 1 +XJBVD = 1 +JTSS = 0 +JTSD = 0 +JTSSWS = 0 +JTSSWD = 0 +JTSSWGS = 0 +JTSSWGD = 0 +JTWEFF = 0 +NJTS = 20 +NJTSD = 20 +NJTSSW = 20 +NJTSSWD = 20 +NJTSSWG = 20 +NJTSSWGD = 20 +VTSS = 10 +VTSD = 10 +VTSSWS = 10 +VTSSWD = 10 +VTSSWGS = 10 +VTSSWGD = 10 +CJS = 0.0005 +CJD = 0.0005 +CJSWS = 5e-10 +CJSWD = 5e-10 +CJSWGS = 0 +CJSWGD = 0 +PBS = 1 +PBD = 1 +PBSWS = 1 +PBSWD = 1 +PBSWGS = 1 +PBSWGD = 1 +MJS = 0.5 +MJD = 0.5 +MJSWS = 0.33 +MJSWD = 0.33 +MJSWGS = 0.33 +MJSWGD = 0.33 +TPB = 0 +TCJ = 0 +TPBSW = 0 +TCJSW = 0 +TPBSWG = 0 +TCJSWG = 0 +XTIS = 3 +XTID = 3 +XTSS = 0.02 +XTSD = 0.02 +XTSSWS = 0.02 +XTSSWD = 0.02 +XTSSWGS = 0.02 +XTSSWGD = 0.02 +TNJTS = 0 +TNJTSD = 0 +TNJTSSW = 0 +TNJTSSWD = 0 +TNJTSSWG = 0 +TNJTSSWGD = 0 +NOIA = 6.25e40 +NOIB = 3.125e25 +NOIC = 8.75e8 +EM = 41000000 +EF = 1 +LINTNOI = 0 +NTNOI = 1 +TNOIA = 0 +TNOIB = 0 +TNOIC = 0 +RNOIA = 0.577 +RNOIB = 0.5164 +RNOIC = 0.395 +DWJ = 0 +DMCG = 0 +DMCI = 0 +DMDG = 0 +DMCGT = 0 +XGW = 0 +XGL = 0 +GBMIN = 1e-12 +RSHG = 0.1 +RBPB = 50 +RBPD = 50 +RBPS = 50 +RBDB = 50 +RBSB = 50 +RBPS0 = 50 +RBPSL = 0 +RBPSW = 0 +RBPSNF = 0 +RBPD0 = 50 +RBPDL = 0 +RBPDW = 0 +RBPDNF = 0 +RBPBX0 = 100 +RBPBXL = 0 +RBPBXW = 0 +RBPBXNF = 0 +RBPBY0 = 100 +RBPBYL = 0 +RBPBYW = 0 +RBPBYNF = 0 +RBSBX0 = 100 +RBSBY0 = 100 +RBDBX0 = 100 +RBDBY0 = 100 +RBSDBXL = 0 +RBSDBXW = 0 +RBSDBXNF = 0 +RBSDBYL = 0 +RBSDBYW = 0 +RBSDBYNF = 0 +XRCRG1 = 12 +XRCRG2 = 1 +NGCON = 1 +NDEP = 8.062e23 +NDEPL1 = 1.2139 +NDEPLEXP1 = 1.9088 +NDEPL2 = -1.1825 +NDEPLEXP2 = 1.9173 +NDEPW = 0.065035 +NDEPWEXP = 0.48882 +NDEPWL = 0.00040893 +NDEPWLEXP = 1.3273 +EASUB = 4.05 +NI0SUB = 1.1e16 +BG0SUB = 1.17 +EPSRSUB = 11.9 +XJ = 1.5e-7 +VFB = -1.2108 +VFBSDOFF = 0 +NSD = 1e26 +DVTP0 = 1.8335e-7 +DVTP1 = 220.59 +DVTP2 = 9.6351e-10 +DVTP3 = 0.89017 +DVTP4 = 98.728 +DVTP5 = 5.1435e-17 +PHIN = 0.045 +ETA0 = 0.0051075 +ETAB = -0.010908157 +ETABEXP = 0.09999 +DSUB = 1.0667 +K2 = -0.093146 +K2L = 0.065574 +K2LEXP = 0.79778 +K2W = 0.030809 +K2WEXP = 0.87253 +CIT = 1.0136148e-5 +CDSCD = 0.0011509049 +CDSCDL = -0.00048388809 +CDSCDLEXP = 0.13963388 +CDSCB = 9.9995516e-6 +CDSCBL = 1.4756534e-9 +CDSCBLEXP = 1 +NFACTOR = 0.0017201 +NFACTORL = 1.7832e-6 +NFACTORLEXP = 0.99988 +NFACTORW = 0.11149 +NFACTORWEXP = 0.8993 +NFACTORWL = -0.01386 +U0 = 0.04004 +U0L = 0.58676 +U0LEXP = 0.11151 +ETAMOB = 4.0947 +UA = 0.4298 +UAL = -0.0087246 +UALEXP = 1.3647 +UAW = 0.11575 +UAWEXP = 0.4385 +UAWL = -7.027e-5 +EU = 1.3371 +EUL = 0.0021948 +EULEXP = 1.4769 +EUW = -0.0031666 +EUWEXP = 1.9366 +EUWL = -0.00013929 +UD = 0.0093995 +UDL = 0.067484 +UDLEXP = 0.099452 +UCS = 0.9999 +UC = 4.91e-6 +UCL = 0.001096 +UCLEXP = 0.0015937 +VSAT = 9609100 +VSATL = 6.8282 +VSATLEXP = 0.086396 +VSATW = 0.016834 +VSATWEXP = 3.0172 +VSATCVL = 0 +VSATCVLEXP = 1 +VSATCVW = 0 +VSATCVWEXP = 1 +DELTA = 0.1779 +DELTAL = 0.1269 +DELTALEXP = 0.18156 +PCLM = 0 +PCLML = 0 +PCLMLEXP = 1e-13 +PCLMG = 0 +PCLMCVL = 0 +PCLMCVLEXP = 1 +PSCBE1 = 4.24e8 +PSCBE2 = 1e-8 +PDITS = 0.85536 +PDITSL = 8473.9 +PDITSD = 0 +PDIBLC = 0.005 +PDIBLCL = 0 +PDIBLCLEXP = 1 +PDIBLCB = -0.49995 +PVAG = 1 +FPROUT = 0 +FPROUTL = 0 +FPROUTLEXP = 1 +PTWG = 0.09999 +PTWGL = 0.069993 +PTWGLEXP = 0.0009999 +PSAT = 1e-13 +PSATL = 0 +PSATLEXP = 1 +PSATB = 0.9999 +PSATX = 1e-13 +RSH = 0 +PRWG = 1 +PRWB = 0.010098993 +PRWBL = 0.00070000265 +PRWBLEXP = 1 +WR = 1 +RSWMIN = 0 +RSW = 10 +RSWL = 0 +RSWLEXP = 1 +RDWMIN = 0 +RDW = 10 +RDWL = 0 +RDWLEXP = 1 +RDSWMIN = 0 +RDSW = 0 +RDSWL = 0.0007 +RDSWLEXP = 1e-7 +ALPHA0 = 0 +ALPHA0L = 0 +ALPHA0LEXP = 1 +BETA0 = 0 +AGIDL = 0 +AGIDLL = 0 +AGIDLW = 0 +BGIDL = 2.3e9 +CGIDL = 0.5 +EGIDL = 0.8 +AGISL = 0 +AGISLL = 0 +AGISLW = 0 +BGISL = 2.3e9 +CGISL = 0.5 +EGISL = 0.00171 +AIGBACC = 0.00171 +BIGBACC = 0.00171 +CIGBACC = 0.075 +NIGBACC = 1 +AIGBINV = 0.0111 +BIGBINV = 0.000949 +CIGBINV = 0.006 +EIGBINV = 1.1 +NIGBINV = 3 +AIGC = 0.0136 +AIGCL = 3 +AIGCW = 0.0136 +BIGC = 0.00171 +CIGC = 0.075 +AIGS = 0.0136 +AIGSL = 0.075 +AIGSW = 0.0136 +AIGD = 0.0136 +AIGDL = 0 +AIGDW = 0.0136 +BIGS = 0.00171 +BIGD = 0.00171 +CIGS = 0.075 +CIGD = 0.075 +TOXREF = 0.075 +NTOX = 1 +POXEDGE = 1 +PIGCD = 1 +PIGCDL = 1 +NDEPCV = 4.598e23 +NDEPCVL1 = 0 +NDEPCVLEXP1 = 1 +NDEPCVL2 = 0 +NDEPCVLEXP2 = 2 +NDEPCVW = 0 +NDEPCVWEXP = 1 +NDEPCVWL = 0 +NDEPCVWLEXP = 1 +NGATE = 7.764e25 +CF = 0 +CFRCOEFF = 1 +CGSO = 187.0e-12 +CGDO = 187.0e-12 +CGBO = 0 +CGSL = 130.0e-12 +CGDL = 130.0e-12 +CKAPPAS = 1.6 +CKAPPAD = 1.6 +ADOS = 221.4 +BDOS = 1.350 +QM0 = 405.7e-6 +ETAQM = 848.5e-3 +VFBCV = -996.0e-3 +VFBCVL = 0 +VFBCVLEXP = 1 +VFBCVW = 0 +VFBCVWEXP = 1 +VFBCVWL = 0 +VFBCVWLEXP = 1 +TBGASUB = 0.000473 +TBGBSUB = 636 +TDELTA = 0 +PTWGT = 0 +IIT = 0 +TGIDL = 0 +IGT = 0 +KT1 = -0.11 +KT1L = 0 +KT2 = 0.022 +KT1EXP = 1 +UTE = -1.5 +UA1 = 0.001 +UD1 = 0 +UC1 = -5.6e-11 +UCSTE = -0.004775 +PRT = 0 +AT = -0.00156 +SCA = 0 +SCB = 0 +SCC = 0 +SC = 0 +KU0WE = 0 +KVTH0WE = 0 +K2WE = 0 +WEB = 0 +WEC = 0 +SCREF = 1e-6 +SA = 0 +SB = 0 +SD = 0 +SAREF = 1e-6 +SBREF = 1e-6 +WLOD = 0 +KVSAT = 0 +KU0 = 0 +TKU0 = 0 +LKU0 = 0 +WKU0 = 0 +PKU0 = 0 +LLODKU0 = 0 +WLODKU0 = 0 +KVTH0 = 0 +LKVTH0 = 0 +WKVTH0 = 0 +PKVTH0 = 0 +LLODVTH = 0 +WLODVTH = 0 +STK2 = 0 +LODK2 = 1 +STETA0 = 0 +LODETA0 = 1 +RTH0 = 1e7 +MOBSCALE = 1 tmp_ns50wwy/examples/adms/bsimbulk/idvg_pmos.sp0000644000175000017500000000060214163340332022054 0ustar carstencarsten* Sample netlist: Id-Vg plot * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=-0.05 vg g 0 dc=0 vs s 0 dc=0 vb b 0 dc=0 m1 d g s b pch W=10e-6 L=10e-6 .dc vg -1.3.0 1.3 0.01 vb 0 -0.3 -0.1 *.probe dc ids=par'i(vd)' *.probe dc gm=deriv(ids) *.probe dc gm2=deriv(gm) *.print dc par'ids' par'gm' par'gm2' .control run plot i(vs) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/gummel_nmos.sp0000644000175000017500000000055214163340332022413 0ustar carstencarsten* Sample netlist: Gummel symmetry test * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=0 vg g 0 dc=1.0 es s 0 d 0 -1 vb b 0 dc=0 m1 d g s b nch W=10u L=10u .dc vd -0.1 0.1 0.001 vg 0.0 1.0 0.2 .control run plot -i(vd) let gx=deriv(-i(vd)) let gx2=deriv(gx) let gx3=deriv(gx2) plot gx plot gx2 plot gx3 .endc .end tmp_ns50wwy/examples/adms/bsimbulk/ring_osc.sp0000644000175000017500000000146014163340332021673 0ustar carstencarsten* Sample netlist: 17-stage ring oscillator * .options abstol=1e-6 reltol=1e-6 *.hdl "bsimbulk.va" .include "model.l" v1 vdd 0 dc=1.0 .subckt inv vin vout vdd vss mn vout vin vss vss nch W=10e-6 L=10e-6 mp vout vin vdd vdd pch W=10e-6 L=10e-6 .ends x1 1 2 vdd 0 inv x2 2 3 vdd 0 inv x3 3 4 vdd 0 inv x4 4 5 vdd 0 inv x5 5 6 vdd 0 inv x6 6 7 vdd 0 inv x7 7 8 vdd 0 inv x8 8 9 vdd 0 inv x9 9 10 vdd 0 inv x10 10 11 vdd 0 inv x11 11 12 vdd 0 inv x12 12 13 vdd 0 inv x13 13 14 vdd 0 inv x14 14 15 vdd 0 inv x15 15 16 vdd 0 inv x16 16 17 vdd 0 inv x17 17 1 vdd 0 inv *.ic 1=1 .tran 1n 10u .print tran v(1) .measure tran t1 when v(1)=0.5 cross=1 .measure tran t2 when v(1)=0.5 cross=7 *.measure tran period param'(t2-t1)/3' *.measure tran delay_per_stage param'period/34' .control run plot v(1) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/inv_tran.sp0000644000175000017500000000066014163340332021711 0ustar carstencarsten* Sample netlist: Inverter transient * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" v1 vdd 0 dc=1.0 v2 in 0 dc=0.5 sin(0.5 0.5 1meg) .subckt inv vin vout vdd vss mn vout vin vss vss nch W=10u L=10u mp vout vin vdd vdd pch W=10u L=10u .ends x1 in 1 vdd 0 inv x2 1 2 vdd 0 inv x3 2 3 vdd 0 inv x4 3 4 vdd 0 inv x5 4 out vdd 0 inv .tran 10n 5u .control run plot v(in) v(out) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/inv_dc.sp0000644000175000017500000000052614163340332021334 0ustar carstencarsten* Sample netlist: Inverter DC * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" v1 vdd 0 dc=1.0 v2 in 0 dc=0.5 .subckt inv vin vout vdd vss mn vout vin vss vss nch W=10u L=10u mp vout vin vdd vdd pch W=10u L=10u .ends x1 in out vdd 0 inv .dc v2 0 1 0.01 .control run plot v(in) v(out) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/idvd_pmos.sp0000644000175000017500000000041314163340332022051 0ustar carstencarsten* Sample netlist: Id-Vd plot * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=-1 vg g 0 dc=0 vs s 0 dc=0 vb b 0 dc=0 m1 d g s b pch W=10e-6 L=10e-6 .dc vd -1.3 0.0 0.01 vg -1 -0.4 0.3 .control run plot i(vs) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/gummel_pmos.sp0000644000175000017500000000055714163340332022422 0ustar carstencarsten* Sample netlist: Gummel symmetry test * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=0 vg g 0 dc=-0.5 es s 0 d 0 -1 vb b 0 dc=0 m1 d g s b pch W=10e-6 L=10e-6 .dc vd -0.1 0.1 0.001 vg -1 -0.4 0.3 .control run plot -i(vd) let gx=deriv(-i(vd)) let gx2=deriv(gx) let gx3=deriv(gx2) plot gx plot gx2 plot gx3 .endc .end tmp_ns50wwy/examples/adms/bsimbulk/idvg_nmos.sp0000644000175000017500000000057714163340332022065 0ustar carstencarsten* Sample netlist: Id-Vg plot * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=0.05 vg g 0 dc=0 vs s 0 dc=0 vb b 0 dc=0 m1 d g s b nch W=10e-6 L=10e-6 .dc vg -1.3 1.3 0.01 vb -0.3 0 0.1 *.probe dc ids=par'-i(vd)' *.probe dc gm=deriv(ids) *.probe dc gm2=deriv(gm) *.print dc par'ids' par'gm' par'gm2' .control run plot i(vs) .endc .end tmp_ns50wwy/examples/adms/bsimbulk/idvd_nmos.sp0000644000175000017500000000041114163340332022045 0ustar carstencarsten* Sample netlist: Id-Vd plot * .option post ingold numdgt=10 .temp 27 *.hdl "bsimbulk.va" .include "model.l" vd d 0 dc=1.3 vg g 0 dc=0 vs s 0 dc=0 vb b 0 dc=0 m1 d g s b nch W=10e-6 L=10e-6 .dc vd 0.0 1.3 0.01 vg 0.4 1 0.3 .control run plot i(vs) .endc .end tmp_ns50wwy/examples/adms/ekv/0000755000175000017500000000000014163340332016500 5ustar carstencarstentmp_ns50wwy/examples/adms/ekv/ekv26_0u5.par0000644000175000017500000000720214163340332020633 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 tmp_ns50wwy/examples/adms/ekv/ekv_tran.sp0000644000175000017500000000031314163340332020652 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 tmp_ns50wwy/examples/adms/ekv/ekv_out.sp0000644000175000017500000000031114163340332020513 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 tmp_ns50wwy/examples/adms/bsimcmg/0000755000175000017500000000000014163340332017334 5ustar carstencarstentmp_ns50wwy/examples/adms/bsimcmg/noise.sp0000644000175000017500000000136714163340332021024 0ustar carstencarsten*Samle netlist for BSIM-MG * (exec-spice "ngspice %s" t) * Drain Noise Simulation .option abstol=1e-6 reltol=1e-6 post ingold .temp 27 *.hdl "bsimcmg.va" .include "modelcard.nmos" * --- Voltage Sources --- vds 1 0 dc=1v vgs gate 0 dc=0.5v ac=1 vbs bulk 0 dc=0v * --- Circuit --- lbias 1 drain 1m cload drain 2 1m rload 2 0 R=1 noise=0 M1 drain gate 0 bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 * --- Analysis --- *.op **.dc vgs -0.5 1.5 0.01 **.print dc i(lbias) *.ac dec 11 1k 100g *.noise v(drain) vgs 1 **.print ac i(cload) *.print ac v(drain) *.print noise inoise onoise .control op ac dec 11 1k 100g plot vdb(drain) noise v(drain) vgs dec 11 1k 100g print all echo "silence in the studio, no noise today" .endc .end tmp_ns50wwy/examples/adms/bsimcmg/idvgpmos.sp0000644000175000017500000000146314163340332021534 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Id-Vg Characteristics for PMOS (T = 27 C) .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.pmos.1" * --- Voltage Sources --- vds supply 0 dc=-1 vgs gate 0 dc=-1 vbs bulk 0 dc=0 * --- Transistor --- m1 supply gate 0 bulk 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + D = 40n * --- DC Analysis --- .dc vgs 0.5 -1.0 -0.01 *.probe dc ids=par`i(vds)` *.probe dc gds=deriv(ids) *.print dc par'ids' par'-gds' .control save @m1[gm] i(vds) set temp = 27 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gm] set temp = -55 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gm] set temp = 100 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gm] .endc .end tmp_ns50wwy/examples/adms/bsimcmg/idvdnmos.sp0000644000175000017500000000152314163340332021524 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Id-Vd Characteristics for NMOS (T = 27 C) .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.nmos.1" * --- Voltage Sources --- vds drain 0 dc=0 vgs gate 0 dc=1.0 vbs bulk 0 dc=0.2 * --- Transistor --- m1 drain gate 0 bulk 0 nmos1 TFIN=15n L=40n NFIN=10 NRS=1 NRD=1 D=40n * --- DC Analysis --- .dc vds -0.1 1 0.01 vgs 0 1.0 0.1 *.probe dc ids=par`-i(vds)` *.probe dc gds=deriv(ids) *.print dc par'ids' par'gds' .control save @m1[gds] save vds#branch set temp = -55 run let ids = -i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] set temp = 27 run let ids = -i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] set temp = 100 run let ids = -i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] *show all .endc .end tmp_ns50wwy/examples/adms/bsimcmg/ringosc_17stg.sp0000644000175000017500000000257414163340332022401 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *17-stage ring oscillator *.options abstol=1e-6 reltol=1e-6 post ingold .options abstol=1e-6 reltol=1e-6 post ingold dcon=1 *.hdl "bsimcmg.va" .include "modelcard.nmos" .include "modelcard.pmos" * --- Voltage Sources --- vdd supply 0 dc=1.0 * --- Inverter Subcircuit --- .subckt mg_inv vin vout vdd gnd mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 + FPITCH = 4.00E-08 mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 + FPITCH = 4.00E-08 .ends * --- 17 Stage Ring oscillator --- Xinv1 1 2 supply 0 mg_inv Xinv2 2 3 supply 0 mg_inv Xinv3 3 4 supply 0 mg_inv Xinv4 4 5 supply 0 mg_inv Xinv5 5 6 supply 0 mg_inv Xinv6 6 7 supply 0 mg_inv Xinv7 7 8 supply 0 mg_inv Xinv8 8 9 supply 0 mg_inv Xinv9 9 10 supply 0 mg_inv Xinv10 10 11 supply 0 mg_inv Xinv11 11 12 supply 0 mg_inv Xinv12 12 13 supply 0 mg_inv Xinv13 13 14 supply 0 mg_inv Xinv14 14 15 supply 0 mg_inv Xinv15 15 16 supply 0 mg_inv Xinv16 16 17 supply 0 mg_inv Xinv17 17 1 supply 0 mg_inv * --- Initial Condition --- .ic v(1)=1 .tran 1p 1n .print tran v(1) .measure tran t1 when v(1)=0.5 cross=1 .measure tran t2 when v(1)=0.5 cross=7 .measure tran period param'(t2-t1)/3' .measure tran delay_per_stage param'period/34' .control run plot v(1) .endc .end tmp_ns50wwy/examples/adms/bsimcmg/gummel_n.sp0000644000175000017500000000162014163340332021502 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Drain current symmetry for nmos .option abstol=1e-6 reltol=1e-6 post ingold .include "modelcard.nmos" * --- Voltage Sources --- vdrain drain 0 dc=0 esource source 0 drain 0 -1 vgate gate 0 dc=1.0 vbulk bulk 0 dc=0.0 * --- Transistor --- m1 drain gate source bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 * --- DC Analysis --- .dc vdrain -0.1 0.1 0.001 vgate 0.0 1.0 0.2 *.probe dc ids=par'-i(vdrain)' *.probe dc gx=deriv(ids) *.probe dc gx2=deriv(gx) *.probe dc gx3=deriv(gx2) *.probe dc gx4=deriv(gx3) *.print dc par'ids' par'gx' par'gx2' par'gx3' par 'gx4' .control save @m1[VDSSAT] save @m1[GDS] save vdrain#branch run show all let ids = -i(vdrain) let gx = deriv(ids) let gx2 = deriv(gx) let gx3 = deriv(gx2) let gx4 = deriv(gx3) plot ids plot @m1[VDSSAT] plot @m1[GDS] plot gx plot gx2 plot gx3 plot gx4 .endc .end tmp_ns50wwy/examples/adms/bsimcmg/modelcard.pmos.10000644000175000017500000000355014163340332022330 0ustar carstencarsten******** BSIM-MG 105 Sample Modelcard for PMOS ******** ** The BSIM-MG sample modelcard 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 BSIM-MG ** against BSIM Team's standard results .model pmos1 PMOS level=17 + AGIDL =3.000p + AGISL =3.000p + AIGBINV =11.10m + AIGC =13.60m + AT = 0.007 + BG0SUB =1.120 + BGIDL =350.0E6 + BGISL =350.0E6 + BIGBINV =-1.000m + BIGC =1.710m + BULKMOD = 1 + CDSC =13.00m + CDSCD =10.00m + CFS = 1.0e-10 + CFD = 1.0e-10 + CGEOMOD = 0 + CGSL = 1.0e-10 + CGDL = 1.0e-10 + CIGBINV =6.000m + CIGC =75.00m + CIT =0.000 + CTH0 = 2.0e-5 + DELTAW =0.000 + DELTAWCV =0.000 + TYPE = 0.000 + DLC =0.000 + DROUT =0.530 + DSUB =0.530 + DVT0 =0.000 + DVT1 =600.0m + EASUB =4.050 + EGIDL =0.000 + EGISL =0.000 + EIGBINV =1.100 + EOT = 1.0n + EPSROX =3.900 + EPSRSUB =11.90 + ETA0 =50.0m + ETAMOB =2.000 + EU = 0.5 + FECH =0.500 + FECHCV =1.000 + GEOMOD =1.000 + GIDLMOD =1.000 + HFIN = 30n + IGBMOD =1.000 + IGCMOD =1.000 + K1RSCE =0.000 + KSATIV =1.000 + KT1 = 0.0 + LINT =0.000 + LL =0.000 + LLC =0.000 + LLN =1.000 + LPA =0.000 + LPE0 =5.000n + MEXP = 3 + NBODY = 1E+24 + NC0SUB =2.86000E+25 + NGATE = 0.0 + NI0SUB =1.10000E+16 + NIGBINV =3.000 + NSD =2.00000E+26 + PCLM =5.000m + PDIBL1 = 0.300 + PDIBL2 = 0.000 + PHIN =50.00m + PHIG = 4.610 + PRWGS = 0.000 + PVAG = 0.000 + QMFACTOR = 0.000 + RDSW = 100.0 + RDSWMIN = 0.0 + RSHS = 2.0 + RTH0 = 0.05 + U0 =20.00m + UA = 1.000 + UA1 = 1.032m + UCS = 1.0 + UD = 1.0 + UP =0.000 + UTE = 0.000 + UTL =-1.497m + VSAT =150.0K + WR =1.000 + XL =-5n + IIMOD =0.0 + BETAII0 = 0 + BETAII1 = .028 + BETAII2 = .067 + TII = -0.7 + SII0 = 3.4 + SII1 = .8 + SII2 = .08 + SIID = 0.08 + ESATII = 1.7e6 + LII = 3e-9 + RGATEMOD = 0 + RGFIN = 100 + NQSMOD = 0 + RDSMOD = 0 + SHMOD = 0 tmp_ns50wwy/examples/adms/bsimcmg/modelcard.pmos0000644000175000017500000000435614163340332022176 0ustar carstencarsten******** BSIM-MG 105 Sample Modelcard for PMOS ******** ** The BSIM-MG sample modelcard 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 BSIM-MG ** against BSIM Team's standard results .model pmos1 PMOS level=17 + BULKMOD = 1 + CGEOMOD = 0 + TYPE = 0 + GEOMOD = 0 + GIDLMOD = 1 + IGBMOD = 0 + IGCMOD = 1 + IIMOD = 0 + NGATE = 0 + NQSMOD = 0 + RDSMOD = 0 + RGATEMOD = 0 + RGEOMOD = 0 + NSEG = 5 + SDTERM = 0 + SHMOD = 0 + AGIDL = 2E-12 + AGISL = 2E-12 + AIGC = 0.007 + AIGD = 0.006 + AIGS = 0.006 + AT = 0.0008234 + BG0SUB = 1.17 + BGIDL = 1.50E+08 + BGISL = 1.50E+08 + BIGC = 0.0015 + BIGD = 0.001944 + BIGS = 0.001944 + CDSC = 0.003469 + CDSCD = 0.001486 + CFD = 0.2e-10 + CFS = 0.2e-10 + CGBL = 0 + CGBO = 0 + CGDL = 0 + CGDO = 1E-10 + CGSL = 0 + CGSO = 1E-10 + CIGC = 1 + CIGD = 1 + CIGS = 1 + CIT = 0 + CKAPPAD = 0.6 + CKAPPAS = 0.6 + CTH0 = 1.243E-06 + DELTAVSAT = 11.56 + DELTAW = 0 + DELTAWCV = -1.00E-08 + DLBIN = 0 + DLC = -9.2E-09 + DLCIGD = 5.00E-09 + DLCIGS = 5.00E-09 + DROUT = 4.97 + DSUB = 0.5 + DVT0 = 0.05006 + DVT1 = 0.4 + DVTSHIFT = 0 + EASUB = 4.05 + EGIDL = 1.142 + EGISL = 1.142 + EOT = 2.10E-09 + EOTACC = 3.00E-10 + EOTBOX = 1.40E-07 + EPSROX = 3.9 + EPSRSP = 3.9 + EPSRSUB = 11.9 + ETA0 = 0.03952 + ETAMOB = 4 + ETAQM = 0.54 + EU = 0.05 + HFIN = 3.00E-08 + IGT = 3.5 + K1RSCE = 0 + KSATIV = 1.592 + KT1 = 0.08387 + KT1L = 0 + LINT = -2.5E-09 + LPE0 = 0 + LCDSCD = 0 + LCDSCDR = 0 + LRDSW = 1.3 + LVSAT = 1441 + MEXP = 2.491 + NBODY = 1E+22 + NC0SUB = 2.86E+25 + NI0SUB = 1.1E+16 + NSD = 2E+26 + PCLM = 0.01 + PCLMCV = 0.013 + PCLMG = 1 + PDIBL1 = 800 + PDIBL2 = 0.005704 + PHIG = 4.678 + PHIN = 0.05 + POXEDGE = 1.152 + PQM = 0.66 + PRT = 0.002477 + PTWG = 6.322 + PTWGT = 0.0015 + PVAG = 200 + QM0 = 2.183E-12 + QMFACTOR = 0 + RDSW = 190.6 + RDSWMIN = 0 + RDWMIN = 0 + RSHD = 0 + RSHS = 0 + RSWMIN = 0 + RTH0 = 0.15 + TBGASUB = 0.000473 + TBGBSUB = 636 + TGIDL = -0.01 + TMEXP = 0 + TNOM = 25 + TOXP = 2.1E-09 + U0 = 0.02935 + UA = 1.133 + UA1 = 0.00134 + UCS = 0.2672 + UCSTE = 0 + UD = 0.0105 + UD1 = 0 + UP = 0 + UTE = 0 + UTL = 0.001 + VSAT = 48390 + WR = 1 + WTH0 = 2.60E-07 + XL = 0 tmp_ns50wwy/examples/adms/bsimcmg/rdsgeo.sp0000644000175000017500000000350314163340332021164 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) * Geometry-dependent Rds .option abstol=1e-6 reltol=1e-6 post ingold .temp 27 *.hdl "bsimcmg.va" .model nmos2 NMOS level=17 + DEVTYPE=1 + RGEOMOD=1 + HEPI=15n + CRATIO=0.5 + DELTAPRSD=12.42n + RHOC=1.0p + LSP=15n + HFIN=30n + NSD=2.0e+26 + LINT = 0 .model pmos2 PMOS level=17 + DEVTYPE=0 + RGEOMOD=1 + HEPI=15n + CRATIO=0.5 + DELTAPRSD=12.42n + RHOC=1.0p + LSP=15n + HFIN=30n + NSD=2.0e+26 + LINT = 0 .param fp = 45n * --- Voltage Sources --- vds supply 0 dc=0 vgs gate 0 dc=0 vbs bulk 0 dc=0 * --- Transistor --- Mn1 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=20n Mn2 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=40n Mn3 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=60n Mn4 supply gate 0 bulk 0 nmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=80n Mp1 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=20n Mp2 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=40n Mp3 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=60n Mp4 supply gate 0 bulk 0 pmos2 TFIN=15n L=30n NFIN=10 FPITCH=fp LRSD=80n * --- DC Analysis --- .dc vgs 0.0 1.0 0.1 .print dc Xn1:RSGEO Xn2:RSGEO Xn3:RSGEO Xn4:RSGEO .print dc Xp1:RSGEO Xp2:RSGEO Xp3:RSGEO Xp4:RSGEO .control save @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] save @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] run plot @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] plot @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] alter @mn1[FPITCH] = 90n alter @mn2[FPITCH] = 90n alter @mn3[FPITCH] = 90n alter @mn4[FPITCH] = 90n alter @mp1[FPITCH] = 90n alter @mp2[FPITCH] = 90n alter @mp3[FPITCH] = 90n alter @mp4[FPITCH] = 90n run plot @Mn1[RSGEO] @Mn2[RSGEO] @Mn3[RSGEO] @Mn4[RSGEO] plot @Mp1[RSGEO] @Mp2[RSGEO] @Mp3[RSGEO] @Mp4[RSGEO] .endc .end tmp_ns50wwy/examples/adms/bsimcmg/idvdpmos.sp0000644000175000017500000000151314163340332021525 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Id-Vd Characteristics for PMOS (T = 27 C) .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.pmos.1" * --- Voltage Sources --- vds drain 0 dc=0 vgs gate 0 dc=-1 vbs bulk 0 dc=0 * --- Transistor --- m1 drain gate 0 bulk 0 pmos1 TFIN=15n L=40n NFIN=10 NRS=1 NRD=1 + D = 40n * --- DC Analysis --- .dc vds 0.1 -1 -0.01 vgs 0 -1.0 -0.1 *.probe dc ids=par`i(vds)` *.probe dc gds=deriv(ids) *.print dc par'ids' par'-gds' .control save @m1[gds] save vds#branch set temp = 27 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] set temp = -55 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] set temp = 100 run let ids = i(vds) let xgds = deriv(ids) plot ids plot xgds plot @m1[gds] .endc .end tmp_ns50wwy/examples/adms/bsimcmg/modelcard.nmos0000644000175000017500000000430014163340332022161 0ustar carstencarsten******** BSIM-MG 105 Sample Modelcard for NMOS ******** ** The BSIM-MG sample modelcard 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 BSIM-MG ** against BSIM Team's standard results .model nmos1 NMOS level=17 + BULKMOD = 1 + CGEOMOD = 0 + TYPE = 1 + GEOMOD = 0 + GIDLMOD = 1 + IGBMOD = 0 + IGCMOD = 1 + IIMOD = 0 + NGATE = 0 + NQSMOD = 0 + RDSMOD = 0 + RGATEMOD = 0 + RGEOMOD = 0 + NSEG = 5 + SDTERM = 0 + SHMOD = 0 + AGIDL = 1.00E-12 + AGISL = 1.00E-12 + AIGC = 0.014 + AIGD = 0.0115 + AIGS = 0.0115 + AT = 0.001 + BG0SUB = 1.17 + BGIDL = 1.00E+07 + BGISL = 1.00E+07 + BIGC = 0.005 + BIGD = 0.00332 + BIGS = 0.00332 + CDSC = 0.01 + CDSCD = 0.01 + CFD = 0.20E-10 + CFS = 0.20E-10 + CGBL = 0 + CGBO = 0 + CGDL = 0 + CGDO = 1e-10 + CGSL = 0 + CGSO = 1e-10 + CIGC = 0.25 + CIGD = 0.35 + CIGS = 0.35 + CIT = 0 + CKAPPAD = 0.6 + CKAPPAS = 0.6 + CTH0 = 0.000001243 + DELTAVSAT = 0.5 + DELTAW = 0 + DELTAWCV = 0 + DLBIN = 0 + DLC = 0 + DLCIGD = 1.00E-09 + DLCIGS = 1.00E-09 + DROUT = 1 + DSUB = 0.5 + DVT0 = 0.05 + DVT1 = 0.5 + DVTSHIFT = 0 + EASUB = 4.05 + EGIDL = 0.35 + EGISL = 0.35 + EOT = 1.50E-09 + EOTACC = 1.00E-10 + EOTBOX = 1.40E-07 + EPSROX = 3.9 + EPSRSP = 3.9 + EPSRSUB = 11.9 + ETA0 = 0.05 + ETAMOB = 2 + ETAQM = 0.54 + EU = 1.2 + HFIN = 3.00E-08 + IGT = 2.5 + K1RSCE = 0 + KSATIV = 2 + KT1 = 0 + KT1L = 0 + LINT = -2.00E-09 + LPE0 = 0 + LCDSCD = 5.00E-05 + LCDSCDR = 5.00E-05 + LRDSW = 0.2 + LVSAT = 0 + MEXP = 4 + NBODY = 1.00E+22 + NC0SUB = 2.86E+25 + NI0SUB = 1.10E+16 + NSD = 2.00E+26 + PCLM = 0.05 + PCLMCV = 0.013 + PCLMG = 0 + PDIBL1 = 0 + PDIBL2 = 0.002 + PHIG = 4.39 + PHIN = 0.05 + POXEDGE = 1.1 + PQM = 0.66 + PRT = 0 + PTWG = 0 + PTWGT = 0.004 + PVAG = 0 + QM0 = 0.001 + QMFACTOR = 2.5 + RDSW = 200 + RDSWMIN = 0 + RDWMIN = 0 + RSHD = 0 + RSHS = 0 + RSWMIN = 0 + RTH0 = 0.225 + TBGASUB = 0.000473 + TBGBSUB = 636 + TGIDL = -0.007 + TMEXP = 0 + TNOM = 25 + TOXP = 2.10E-09 + U0 = 0.025 + UA = 0.55 + UA1 = 0.001032 + UCS = 1 + UCSTE = -0.004775 + UD = 0 + UD1 = 0 + UP = 0 + UTE = -0.7 + UTL = 0 + VSAT = 80000 + WR = 1 + WTH0 = 2.60E-07 + XL = 0 tmp_ns50wwy/examples/adms/bsimcmg/gummel_p.sp0000644000175000017500000000150114163340332021502 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Drain current symmetry .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.pmos" * --- Voltage Sources --- vdrain drain 0 dc=0 esource source 0 drain 0 -1 vgate gate 0 dc=-1.0 vbulk bulk 0 dc=0 * --- Transistor --- m1 drain gate source bulk 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 * --- DC Analysis --- .dc vdrain -0.1 0.1 0.001 vgate 0.0 -1.0 -0.2 *.probe dc ids=par'-i(vdrain)' *.probe dc gx=deriv(ids) *.probe dc gx2=deriv(gx) *.probe dc gx3=deriv(gx2) *.probe dc gx4=deriv(gx3) *.print dc par'ids' par'gx' par'gx2' par'gx3' par 'gx4' .control run let ids = -i(vdrain) let gx = deriv(ids) let gx2 = deriv(gx) let gx3 = deriv(gx2) let gx4 = deriv(gx3) plot ids plot gx plot gx2 plot gx3 plot gx4 .endc .end tmp_ns50wwy/examples/adms/bsimcmg/inverter_transient.sp0000644000175000017500000000152414163340332023627 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Inverter Transient .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.nmos" .include "modelcard.pmos" * --- Voltage Sources --- vdd supply 0 dc=1.0 vsig vi 0 dc=0.5 sin (0.5 0.5 1MEG) * --- Inverter Subcircuit --- .subckt mg_inv vin vout vdd gnd mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 + FPITCH = 4.00E-08 mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 ASEO=1.5e-14 ADEO=1.5e-14 NRS=1 NRD=1 + FPITCH = 4.00E-08 .ends * --- Inverter --- Xinv1 vi 1 supply 0 mg_inv Xinv2 1 2 supply 0 mg_inv Xinv3 2 3 supply 0 mg_inv Xinv4 3 4 supply 0 mg_inv Xinv5 4 vo supply 0 mg_inv * --- Transient Analysis --- .tran 20n 5u .print tran v(vi) v(vo) .control run plot v(vi) v(vo) .endc .end tmp_ns50wwy/examples/adms/bsimcmg/invdc.sp0000644000175000017500000000124114163340332021001 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Inverter Transient .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.nmos" .include "modelcard.pmos" * --- Voltage Sources --- vdd supply 0 dc=1.0 vin vi 0 dc=0.5 * --- Inverter Subcircuit --- .subckt mg_inv vin vout vdd gnd mp1 vout vin vdd gnd 0 pmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 mn1 vout vin gnd gnd 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 .ends * --- Inverter --- Xinv1 vi vo supply 0 mg_inv * --- Transient Analysis --- .dc vin 0 1 0.01 .print dc v(vi) v(vo) .control run plot v(vi) v(vo) .endc .end tmp_ns50wwy/examples/adms/bsimcmg/idvgnmos.sp0000644000175000017500000000127114163340332021527 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *Id-Vg Characteristics for NMOS (T = 27 C) .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.nmos.1" * --- Voltage Sources --- vds supply 0 dc=0.05 vgs gate 0 dc=1 vbs bulk 0 dc=0 vt t 0 dc= 0 * --- Transistor --- m1 supply gate 0 bulk t nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 D=40n * --- DC Analysis --- .dc vgs -0.5 1.0 0.01 vds 0.05 1 0.95 *.probe dc par'-i(vds)' *.probe dc par'-i(vbs)' *.print dc i(X1.d) .save i(vds) i(vbs) .control set temp = 27 run plot -i(vds) plot -i(vbs) set temp = -55 run plot -i(vds) plot -i(vbs) set temp = 100 run plot -i(vds) plot -i(vbs) .endc .end tmp_ns50wwy/examples/adms/bsimcmg/modelcard.nmos.10000644000175000017500000000371414163340332022330 0ustar carstencarsten******** BSIM-MG 105 Sample Modelcard for NMOS ******** ** The BSIM-MG sample modelcard 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 BSIM-MG ** against BSIM Team's standard results .model nmos1 NMOS level=17 + AGIDL = 50.00f + AGISL = 50.00f + AIGBINV = 11.10m + AIGC = 13.60m + AT = 0.007 + BG0SUB = 1.120 + BGIDL = 400.0E6 + BGISL = 400.0E6 + BIGBINV =-1.000m + BIGC = 1.710m + BULKMOD = 1 + CDSC = 5.000m + CDSCD = 5.000m + CFS = 1.0e-10 + CFD = 1.0e-10 + CGEOMOD = 0 + CGSL = 1.0e-10 + CGDL = 1.0e-10 + CIGBINV = 6.000m + CIGC = 75.00m + CIT = 0.000 + CTH0 = 2.0e-5 + DELTAW = 0.000 + DELTAWCV = 0.000 + TYPE = 1.000 + DLC = 0.000 + DROUT = 0.530 + DSUB = 0.530 + DVT0 = 0.000 + DVT1 = 300.0m + EASUB = 4.050 + EGIDL = 0.000 + EGISL = 0.000 + EIGBINV = 1.100 + EOT = 1.0n + EPSROX = 3.900 + EPSRSUB = 11.90 + ETA0 = 70.0m + ETAMOB = 2.500 + EU = 0.9 + FECH = 2.000 + FECHCV = 1.000 + GEOMOD = 1.000 + GIDLMOD = 1.000 + HFIN = 30n + IGCMOD = 1.000 + IGBMOD = 1.000 + K1RSCE = 0.000 + KSATIV = 1.000 + KT1 = 0.0 + LINT = 0.000 + LL = 0.000 + LLC = 0.000 + LLN = 1.000 + LPA = 0.000 + LPE0 = 5.000n + MEXP = 3 + NBODY = 1E+24 + NC0SUB = 2.86000E+25 + NGATE = 0.0 + NI0SUB = 1.10000E+16 + NIGBINV = 3.000 + NSD = 2.00000E+26 + PCLM = 0.000 + PDIBL1 = 0.300 + PDIBL2 = 0.000 + PHIG = 4.610 + PHIN = 50.00m + PRWGS = 0.000 + PVAG = 0.000 + QMFACTOR = 0.000 + RDSW = 100.0 + RDSWMIN = 0.000 + RSHS = 2.0 + RTH0 = 0.05 + U0 = 40m + UA = 0.100 + UA1 = 1.032m + UCS = 1.0 + UD = 1.0 + UP = 0.000 + UTE = 0.000 + UTL =-1.497m + VSAT = 150K + WR = 1.000 + XL = -5.00n + IIMOD =0.0 + BETAII0 = 0 + BETAII1 = .028 + BETAII2 = .067 + TII = -0.7 + SII0 = 3.4 + SII1 = .8 + SII2 = .08 + SIID = 0.08 + ESATII = 1.7e6 + LII = 3e-9 + RGATEMOD = 0 + RGFIN = 100 + NQSMOD = 0 + RDSMOD = 0 + SHMOD = 0 tmp_ns50wwy/examples/adms/bsimcmg/ac.sp0000644000175000017500000000120014163340332020254 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) *AC Response .option abstol=1e-6 reltol=1e-6 post ingold *.hdl "bsimcmg.va" .include "modelcard.nmos" .param myvdd=1.0 * --- Voltage Sources --- vdd supply 0 dc=myvdd vsig gate 0 dc=0.5 ac=1 vbs bulk 0 dc=0 * --- Transistor --- m1 vout gate 0 bulk 0 nmos1 TFIN=15n L=30n NFIN=10 NRS=1 NRD=1 + FPITCH = 4.00E-08 * --- Load --- rl supply vout r=2k cl supply vout c=10f * --- AC Analysis --- .ac dec 10 1k 1T * For Bias Point Testing * .dc vsig -1 1.5 0.01 .print ac vm(vout) vp(vout) *.alter *.param myvdd=2.0 .control run plot vdb(vout) plot cph(vout) .endc .end tmp_ns50wwy/examples/adms/bsimcmg/cfrgeo.sp0000644000175000017500000000241614163340332021150 0ustar carstencarsten*Sample netlist for BSIM-MG * (exec-spice "ngspice %s" t) * Geometry-dependent Cfr * .option abstol=1e-6 reltol=1e-6 post ingold .temp 27 *.hdl "bsimcmg.va" .param hfin=30n .model nmos2 NMOS level=17 + DEVTYPE=1 + CGEOMOD=2 + HEPI=10n + LSP=5n + EPSRSP=7.5 + TGATE=40n + TMASK=10n + TSILI=0n + CRATIO=1.0 + EOT=1.0n + TOXP=1.2n + HFIN=hfin * --- Voltage Sources --- vds supply 0 dc=0 vgs gate 0 dc=0 vbs bulk 0 dc=0 * --- Transistor --- M1 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=20n LRSD=40n M2 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=40n LRSD=40n M3 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=60n LRSD=40n M4 supply gate 0 bulk 0 nmos2 TFIN=10n L=30n NFIN=1 FPITCH=80n LRSD=40n * --- DC Analysis --- .dc vgs 0.0 1.0 0.1 *.print dc par'hfin' M1:CFGEO M2:CFGEO M3:CFGEO M4:CFGEO .control save @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] showmod #nmos2 : HFIN run plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] altermod nmos2 hfin = 40n showmod #nmos2 : HFIN run plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] altermod nmos2 hfin = 50n showmod #nmos2 : HFIN run plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] altermod nmos2 hfin = 60n showmod #nmos2 : HFIN run plot @m1[CFGEO] @m2[CFGEO] @m3[CFGEO] @m4[CFGEO] .endc .end tmp_ns50wwy/examples/pss/0000755000175000017500000000000014163340332015574 5ustar carstencarstentmp_ns50wwy/examples/pss/hartley_osc_pss.cir0000644000175000017500000000075514163340332021503 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 tmp_ns50wwy/examples/pss/ring_osc_pss.cir0000644000175000017500000000151214163340332020762 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 tmp_ns50wwy/examples/pss/colpitt_osc_pss.cir0000644000175000017500000000076114163340332021506 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 tmp_ns50wwy/examples/pss/vdp_osc_pss.cir0000644000175000017500000000060214163340332020613 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 tmp_ns50wwy/examples/pss/vackar_osc_pss.cir0000644000175000017500000000071714163340332021300 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 tmp_ns50wwy/examples/pss/compl_cross_quad_osc_pss.cir0000644000175000017500000000165314163340332023366 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 tmp_ns50wwy/examples/memristor/0000755000175000017500000000000014163340332017010 5ustar carstencarstentmp_ns50wwy/examples/memristor/memristor_x.sp0000644000175000017500000000567614163340332021742 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) retrace *** 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) retraceplot 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) retraceplot title 'Memristor with threshold: external current loops' .endc .end tmp_ns50wwy/examples/memristor/memristor.sp0000644000175000017500000000475014163340332021403 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) retraceplot 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) retraceplot title 'Memristor with threshold: external current loops' .endc .end tmp_ns50wwy/examples/snapshot/0000755000175000017500000000000014163340332016626 5ustar carstencarstentmp_ns50wwy/examples/snapshot/adder_mos_circ.cir0000644000175000017500000000336114163340332022265 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 tmp_ns50wwy/examples/snapshot/adder_snload.script0000644000175000017500000000065214163340332022476 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 tmp_ns50wwy/examples/snapshot/adder_mos.cir0000644000175000017500000000107114163340332021261 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 tmp_ns50wwy/examples/digital/0000755000175000017500000000000014163340332016404 5ustar carstencarstentmp_ns50wwy/examples/digital/adder_Xspice.cir0000644000175000017500000000445214163340332021502 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) .control 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 with GTKWave if $oscompiled = 1 | $oscompiled = 8 ; MS Windows shell start gtkwave adder_x.vcd --script nggtk.tcl else if $oscompiled = 7 ; macOS, manual tweaking required (mark, insert, Zoom Fit) shell open -a gtkwave adder_x.vcd else ; Linux and others shell gtkwave adder_x.vcd --script nggtk.tcl & end end .endc .END tmp_ns50wwy/examples/digital/adder-comparison.txt0000644000175000017500000000104614163340332022375 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 tmp_ns50wwy/examples/digital/nggtk.tcl0000644000175000017500000000046114163340332020223 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 tmp_ns50wwy/examples/digital/adder_behav.cir0000644000175000017500000000374214163340332021335 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 tmp_ns50wwy/examples/digital/adder_bip.cir0000644000175000017500000000455014163340332021020 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 tmp_ns50wwy/examples/digital/74HCng_short_2.lib0000644000175000017500000001533714163340332021537 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 ) tmp_ns50wwy/examples/digital/adder_mos.cir0000644000175000017500000000464114163340332021045 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 tmp_ns50wwy/examples/Monte_Carlo/0000755000175000017500000000000014163340332017171 5ustar carstencarstentmp_ns50wwy/examples/Monte_Carlo/mc_ring_circ.net0000644000175000017500000000431014163340332022315 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 tmp_ns50wwy/examples/Monte_Carlo/MonteCarlo.sp0000644000175000017500000000435714163340332021611 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 tmp_ns50wwy/examples/Monte_Carlo/MC_ring.sp0000644000175000017500000002421614163340332021060 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 tmp_ns50wwy/examples/Monte_Carlo/MC_2_control.sp0000644000175000017500000000344414163340332022022 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 tmp_ns50wwy/examples/Monte_Carlo/MC_2_circ.sp0000644000175000017500000000642114163340332021260 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 tmp_ns50wwy/examples/Monte_Carlo/rand_numb_test.cir0000644000175000017500000000210314163340332022670 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 tmp_ns50wwy/examples/Monte_Carlo/MC_ring_ts.sp0000644000175000017500000001542314163340332021566 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 set nolegend if $?sharedmode or $?win_console gnuplot xnp_pl1 {$plot_out}.vout0 ylabel vout0 $ just plot the tran output with nominal parameters else plot {$plot_out}.vout0 ylabel vout0 $ just plot the tran output with nominal parameters end setplot $plot_fft if $?sharedmode or $?win_console gnuplot xnp_pl2 db(mag(ally)) ylabel 'output voltage versus frequency' xlimit 0 1G ylimit -80 10 else plot db(mag(ally)) xlimit 0 1G ylimit -80 10 ylabel 'output voltage versus frequency' 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 ylabel 'counts per bin' else set xbrushwidth=5 plot count vs osc_frequ combplot ylabel 'counts per bin' end * calculate jitter let diff40 = (vecmax(halfffts) - vecmin(halfffts))*1e-6 echo echo Max. jitter is "$&diff40" MHz end rusage * quit end tmp_ns50wwy/examples/Monte_Carlo/mc_ring_lib_complete_actual.cir0000644000175000017500000001764214163340332025367 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 tmp_ns50wwy/examples/Monte_Carlo/OpWien.sp0000644000175000017500000000374714163340332020751 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 tmp_ns50wwy/examples/inductive-systems/0000755000175000017500000000000014163340332020466 5ustar carstencarstentmp_ns50wwy/examples/inductive-systems/positive-definite-4.cir0000644000175000017500000000234414163340332024760 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 tmp_ns50wwy/examples/inductive-systems/positive-definite-1.cir0000644000175000017500000000133614163340332024755 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 tmp_ns50wwy/examples/inductive-systems/positive-definite-3.cir0000644000175000017500000000147514163340332024763 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 tmp_ns50wwy/examples/inductive-systems/positive-definite-2.cir0000644000175000017500000000134014163340332024751 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 tmp_ns50wwy/examples/vdmos/0000755000175000017500000000000014163340332016117 5ustar carstencarstentmp_ns50wwy/examples/vdmos/IXTH80N20L-IXTH48P20P-quasisat.sp0000644000175000017500000000303414163340332023163 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 + Ksubthres=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 .endtmp_ns50wwy/examples/vdmos/inv_vdmos.sp0000644000175000017500000000110414163340332020463 0ustar carstencarsten*****************==== Inverter ====******************* *********** VDMOS **************************** 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 DC 0 Pulse (0 5 10n 10n 10n 140n 300n) .control dc Vin 0 5 0.05 * current and output in a single plot plot v(2) v(3) vss#branch tran 1n 1u * 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 tmp_ns50wwy/examples/vdmos/100W_wingspread.sp0000644000175000017500000000473514163340332021346 0ustar carstencarstenVDMOS wingspread plot example M1 +V N004 N005 IRFP240 M2 -V N009 N007 IRFP9240 R1 OUT N007 .33 R2 N005 OUT .33 R4 N004 N003 470 R5 N009 N008 470 V1 +V 0 50 V2 0 -V 50 Q3 -V N011 N008 0 MJE350 R7 N003 N008 870 Q5 +V N002 N003 0 MJE340 Vin N006 0 0 RLoad OUT 0 r = 8 V3 N001 N006 4.8 V4 N006 N010 4.8 I1 +V N001 12m I2 N010 -V 12m R3 N002 N001 10 R8 N011 N010 10 * .save all @r1[i] @r2[i] v(out) @rload[i] .control let gain=vector(2005) reshape gain [5][401] let irload=vector(2005) reshape irload [5][401] let offset = 0.05 foreach Rl 4 6 8 setplot new set curplottitle = "wingspread $Rl Ohm" set plotname=$curplot alter Rload r = $Rl let index = 0 foreach vbias 4.7 4.8 4.9 5.0 5.1 alter v3 dc = $vbias + offset alter v4 dc = $vbias - offset op print v(out) @r1[i] @r2[i] dc vin -20 20 0.1 set dcplotname = $curplot setplot $plotname let gain[index] = deriv({$dcplotname}.out) let irload[index] = {$dcplotname}.@rload[i] let index = index + 1 destroy $dcplotname end settype current irload plot gain[0] gain[1] gain[2] gain[3] gain[4] vs irload[2] end .endc * .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 *+ Rthjc=0.4 Cthj=5e-3 + mtriode=0.8 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m XTI=2 + Cjo=1.3n Vj=0.8 m=0.5 + tcvth=0.004 MU=-1.27 texp0=1.5 *+ Rthjc=0.4 Cthj=5e-3 + mtriode=0.6 * .model MJE340 NPN(Is=1.03431e-13 BF=172.974 NF=.939811 VAF=27.3487 IKF=0.0260146 ISE=4.48447e-11 Ne=1.61605 Br=16.6725 + Nr=0.796984 VAR=6.11596 IKR=0.10004 Isc=9.99914e-14 Nc=1.99995 RB=1.47761 IRB=0.2 RBM=1.47761 Re=0.0001 RC=1.42228 + XTB=2.70726 XTI=1 Eg=1.206 CJE=1e-11 VJE=0.75 Mje=.33 TF=1e-09 XTF=1 VTF=10 ITF=0.01 CJC=1e-11 VJC=.75 MJC=0.33 XCJC=.9 + Fc=0.5 CJS=0 VJS=0.75 MJS=0.5 TR=1e-07 PTF=0 KF=0 AF=1) .model MJE350 PNP(Is=6.01619e-15 BF=157.387 NF=.910131 VAF=23.273 IKF=0.0564808 Ise=4.48479e-12 Ne=1.58557 BR=0.1 + NR=1.03823 VAR=4.14543 IKR=.0999978 ISC=1.00199e-13 Nc=1.98851 RB=.1 IRB=0.202965 RBM=0.1 Re=.0710678 Rc=.355339 + XTB=1.03638 XTI=3.8424 Eg=1.206 Cje=1e-11 Vje=0.75 Mje=0.33 TF=1e-09 XTF=1 VTF=10 ITF=0.01 Cjc=1e-11 Vjc=0.75 + Mjc=0.33 XCJC=0.9 Fc=0.5 Cjs=0 Vjs=0.75 Mjs=0.5 TR=1e-07 PTF=0 KF=0 AF=1) * .end tmp_ns50wwy/examples/vdmos/dcdc.sp0000644000175000017500000000204514163340332017361 0ustar carstencarstenSimple regulated DCDC step-up converter V1 clock 0 PULSE(0 6 0 19u 1u 10n 20.01u) V2 ref 0 2.5 R1 OUT outdiv 100K R2 0 outdiv 27k R3 outdiv x 10k C2 err x 50n B1 err 0 V = max(0,min(5,V(ref,x)*10k)) B2 gate 0 V = max(0,min(5,V(err,clock)*1k)) V3 +V 0 5.0 L1 +V lx 220u RL lx out1 125m M1 out1 gate 0 IRF510 D1 out1 OUT MBRS340 C1 OUT cx 33u RC cx 0 50m R4 out2 OUT R = (time<12ms ? {Rload} : time<20ms ? {Rload/2} : {2*Rload}) V4 out2 0 0.0 .param Rload=100 .model IRF510 VDMOS nchan + Vto=3.6 Kp=1.3 Lambda=.001 Theta=0.07 ksubthres=.1 + Rg=3 Rd=200m Rs=54m Rds=1e7 + Cgdmax=.2n Cgdmin=.05n a=0.3 Cgs=.12n + Is=17p N=1.1 Rb=80m XTI=3 + Cjo=.25n Vj=0.8 m=0.5 + tcvth=0.007 MU=-1.27 texp0=1.5 .model MBRS340 D(Is=22.6u Rs=.042 N=1.094 Cjo=480p M=.61 Eg=.69 Xti=2) .control listing e option method=gear tran 10n 30m 0 5n * write dcdc.raw plot v(err) v(clock) v(gate) v(out) plot -i(V3) i(V4) ylimit 0 1 rusage all .endc .end tmp_ns50wwy/examples/vdmos/crss_coss_ciss.sp0000644000175000017500000000254214163340332021510 0ustar carstencarstencrss coss ciss * VP1 P1 0 PULSE(0 1.15m 100n 10n 10n 1 2) VP2 P4 0 PULSE(0 2.8m 100n 10n 10n 1 2) * M1 d1 g1 0 IRFP240 V1 g1 0 0.0 V2 1 d1 0.0 G1 0 1 P1 0 1.04 * M2 d2 0 d2 IRFP240 V3 2 d2 0.0 G2 0 2 P4 0 1.1 * M3 d3 g3 0 IRFP9240 V4 g3 0 0.0 V5 3 d3 0.0 G3 3 0 P1 0 0.85 e1 d1p 0 d3 0 -1 * M4 d4 0 d4 IRFP9240 V6 4 d4 0.0 G4 4 0 P4 0 1.0 e2 d2p 0 d4 0 -1 * .control tran 1n 25u *plot v(d1) v(d2) v(d3) v(d4) plot 'i(v1)/deriv(v(d1))' 'i(v2)/deriv(v(d1))' vs v(d1) xlog xlimit 1 100 ylimit 0 3n title "IRFP240 crss & coss" plot 'i(v3)/deriv(v(d2))' vs v(d2) xlog xlimit 1 100 ylimit 0 3n title "IRFP240 ciss" plot 'i(v4)/deriv(v(d3))' 'i(v5)/deriv(v(d3))' vs v(d1p) xlog xlimit 1 100 ylimit 0 3n title "IRFP9240 crss & coss" plot 'i(v6)/deriv(v(d4))' vs v(d2p) xlog xlimit 1 100 ylimit 0 3n title "IRFP9240 ciss" .endc .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 *+ Rthjc=0.4 Cthj=5e-3 + mtriode=0.8 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m XTI=2 + Cjo=1.3n Vj=0.8 m=0.5 + tcvth=0.004 MU=-1.27 texp0=1.5 *+ Rthjc=0.4 Cthj=5e-3 + mtriode=0.6 .end tmp_ns50wwy/examples/vdmos/IXTP6N100D2-cap.sp0000644000175000017500000000062614163340332020627 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 .endtmp_ns50wwy/examples/vdmos/soa_chk.sp0000644000175000017500000000151014163340332020067 0ustar carstencarstenVDMOS SOA check .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m Cjo=1.5n XTI=3 + tcvth=0.0065 MU=-1.27 texp0=1.5 + mtriode=0.8 + Vgs_max=20 Vgd_max=20 Vds_max=200 vd1 d1 0 dc 0.1 vg1 g1 0 dc 0.0 vs1 s1 0 dc 0.0 m1 d1 g1 s1 IRFP240 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m Cjo=1.3n XTI=2 + tcvth=0.004 MU=-1.27 texp0=1.5 + mtriode=0.6 + Vgs_max=20 Vgd_max=20 Vds_max=200 vd2 0 d2 dc 0.1 vg2 0 g2 dc 0.0 vs2 0 s2 dc 0.0 m2 d2 g2 s2 IRFP9240 .options warn=1 maxwarns=6 .control dc vd1 -1 210 1 vg1 5 25 5 plot -i(vd1) dc vd2 -1 210 1 vg2 5 25 5 plot i(vd2) .endc .end tmp_ns50wwy/examples/vdmos/VDMOS-DIO.sp0000644000175000017500000000140014163340332017757 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 ac 1 dc 0.5 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 ac 1 dc -0.5 pwl(0 2 2.5 -0.5) Vg g 0 -5 $ transistor is off Vs s 0 0 .control save all @d1[id] @m1[id] @d1[cd] @m1[cds] all tran 10m 2.5 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] ac dec 10 1 100K plot mag(i(Vs)) mag (i(Vk)) plot ph(i(Vs)) ph(i(Vk)) .endc .end tmp_ns50wwy/examples/vdmos/vdmos-out_ir_mtr.sp0000644000175000017500000000144714163340332022002 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 tmp_ns50wwy/examples/vdmos/mtriode_nch.sp0000644000175000017500000000062014163340332020754 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 tmp_ns50wwy/examples/vdmos/self-heating.sp0000644000175000017500000000104714163340332021033 0ustar carstencarstenVDMOS self heating test M1 D G 0 tj tc IRFP240 thermal rthk tc 0 0.05 VG G 0 5V Pulse 0 10 0 1m 1m 100m 200m *RD D D1 4 VD D 0 2V .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 + Rthjc=0.02 Cthj=1e-3 Rthca=1000 + mtriode=0.8 .control dc vd 0.1 50 .1 vg 5 13 2 plot -i(vd) settype temperature v(tj) v(tc) plot v(tj) v(tc) *tran 1m 0.01 *plot v(d) v(g) .endc .end tmp_ns50wwy/examples/vdmos/100W.sp0000644000175000017500000000613414163340332017116 0ustar carstencarsten100W VDMOS power amplifier *100W into 8Ω at less than .1% THD *72° phase margin @ 950kHz *Adjust R7 for 15mA quiescent current through Q1/Q2 *R24 & R25 are optional output offset trimming * VTamb tamb 0 25 MQ1 +V N010 N012 tn tcn IRFP240 thermal X1 tcn tamb case-ambient MQ2 -V N020 N017 tp tcp IRFP9240 thermal X2 tcp tamb case-ambient R1 OUT N017 .33 R2 N012 OUT .33 C1 OUT N016 100n R3 N016 0 10 R4 N010 N009 470 R5 N020 N019 470 V1 +V 0 50 V2 0 -V 50 Q3 N009 N006 N005 0 MJE350 Q4 N006 N006 N004 0 MJE350 R6 +V N005 100 R7 N009 N019 820 Q5 N019 N023 N024 0 MJE340 R8 +V N004 100 R9 N024 -V 100 Q6 N022 N021 N024 0 MJE340 C2 N023 N019 18p C3 N022 N021 18p R10 N006 N022 10K Q7 N023 N015 N008 0 MJE350 Q8 N021 N011 N008 0 MJE350 R13 N023 -V 3.9K R14 N021 -V 3.9K Q9 N008 N003 N001 0 MJE350 R15 +V N001 470 R16 N002 N001 1K Q10 N003 N002 +V 0 MJE350 R17 N003 N007 10K R18 N007 0 10K C4 +V N007 47u R19 OUT1 N011 27K R20 N011 N018 1K C5 N018 0 100u C6 N015 0 330p R21 N015 N014 2.2K R22 N014 0 47K C7 N014 N013 2.2u Vin N013 0 ac 0 dc 0 SINE(0 {V} 1K) RLOAD OUT 0 8 R24 +V N011 3.7Meg R25 N011 -V 6.1Meg V3 OUT OUT1 dc 0 ac 1 C8 OUT1 N011 3p * .param V=1.44 ; 100W RMS .save @r1[i] @r2[i] v(out1) v(out) @rload[i] v(tn) v(tp) v(tcn) v(tcp) inoise_spectrum .control op print v(out) @r1[i] @r2[i] ac dec 100 1 10Meg plot db(V(out)/V(out1)) set units=degrees plot unwrap(ph(V(out)/V(out1))) tran 1u 1000m fourier 1K V(out) plot v(out)*@rload[i] settype temperature v(tn) v(tp) v(tcn) v(tcp) plot v(tn) v(tp) v(tcn) v(tcp) linearize v(out) fft v(out) plot db(v(out)) xlimit 0 20k alter v3 ac = 0 alter vin ac = 1 noise V(out) Vin dec 10 10 100K setplot noise2 plot inoise_spectrum .endc * .model IRFP240 VDMOS nchan + Vto=4 Kp=5.9 Lambda=.001 Theta=0.015 ksubthres=.27 + Rd=61m Rs=18m Rg=3 Rds=1e7 + Cgdmax=2.45n Cgdmin=10p a=0.3 Cgs=1.2n + Is=60p N=1.1 Rb=14m XTI=3 + Cjo=1.5n Vj=0.8 m=0.5 + tcvth=0.0065 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=5e-3 + mtriode=0.8 .model IRFP9240 VDMOS pchan + Vto=-4 Kp=8.8 Lambda=.003 Theta=0.08 ksubthres=.35 + Rd=180m Rs=50m Rg=3 Rds=1e7 + Cgdmax=1.25n Cgdmin=50p a=0.23 Cgs=1.15n + Is=150p N=1.3 Rb=16m XTI=2 + Cjo=1.3n Vj=0.8 m=0.5 + tcvth=0.004 MU=-1.27 texp0=1.5 + Rthjc=0.4 Cthj=5e-3 + mtriode=0.6 * .model MJE340 NPN(Is=1.03431e-13 BF=172.974 NF=.939811 VAF=27.3487 IKF=0.0260146 ISE=4.48447e-11 Ne=1.61605 Br=16.6725 + Nr=0.796984 VAR=6.11596 IKR=0.10004 Isc=9.99914e-14 Nc=1.99995 RB=1.47761 IRB=0.2 RBM=1.47761 Re=0.0001 RC=1.42228 + XTB=2.70726 XTI=1 Eg=1.206 CJE=1e-11 VJE=0.75 Mje=.33 TF=1e-09 XTF=1 VTF=10 ITF=0.01 CJC=1e-11 VJC=.75 MJC=0.33 XCJC=.9 + Fc=0.5 CJS=0 VJS=0.75 MJS=0.5 TR=1e-07 PTF=0 KF=1e-15 AF=1) .model MJE350 PNP(Is=6.01619e-15 BF=157.387 NF=.910131 VAF=23.273 IKF=0.0564808 Ise=4.48479e-12 Ne=1.58557 BR=0.1 + NR=1.03823 VAR=4.14543 IKR=.0999978 ISC=1.00199e-13 Nc=1.98851 RB=.1 IRB=0.202965 RBM=0.1 Re=.0710678 Rc=.355339 + XTB=1.03638 XTI=3.8424 Eg=1.206 Cje=1e-11 Vje=0.75 Mje=0.33 TF=1e-09 XTF=1 VTF=10 ITF=0.01 Cjc=1e-11 Vjc=0.75 + Mjc=0.33 XCJC=0.9 Fc=0.5 Cjs=0 Vjs=0.75 Mjs=0.5 TR=1e-07 PTF=0 KF=1e-15 AF=1) * .subckt case-ambient case amb rcs case 1 0.1 csa 1 0 30m rsa 1 amb 1.3 .ends .end tmp_ns50wwy/examples/vdmos/vdmosp-out.sp0000644000175000017500000000030014163340332020571 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 tmp_ns50wwy/examples/vdmos/ro_11_vdmos.sp0000644000175000017500000000132614163340332020616 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 m=2 mn1 out in vss n1 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=1e-5 rb=1e7 cjo=1n ksubthres=0.2 .model P1 vdmos cgdmin=0.05p cgdmax=0.2p a=1.2 cgs=0.15p rg=10 kp=1e-5 rb=1e7 cjo=1n pchan ksubthres=0.2 .tran 0.1n 5u .control run rusage * current and output in a single plot plot v(6) 1000*(-I(vdd)) ylimit -1 6 .endc .end tmp_ns50wwy/examples/vdmos/theta_nch.sp0000644000175000017500000000066014163340332020422 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 tmp_ns50wwy/examples/vdmos/IXTP6N100D2-n-weak-inv.sp0000644000175000017500000000200014163340332022024 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 tmp_ns50wwy/examples/vdmos/vdmos-out.sp0000644000175000017500000000056014163340332020421 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 ksubthres=0.1 mfg=International_Rectifier Vds=55 Ron=8.6m Qg=43n) vd d 0 1 vg g 0 1 vs s 0 0 .control dc vd -1 15 0.05 vg 3 7 1 plot vs#branch dc vg 2 7 0.05 vd 0.5 2.5 0.5 plot vs#branch ylog .endc .end tmp_ns50wwy/examples/vdmos/vdmosp-out-mtr.sp0000644000175000017500000000154714163340332021407 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 tmp_ns50wwy/examples/plot/0000755000175000017500000000000014163340332015745 5ustar carstencarstentmp_ns50wwy/examples/plot/test-small-plot.cir0000644000175000017500000000502514163340332021507 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 tmp_ns50wwy/examples/transient-noise/0000755000175000017500000000000014163340332020111 5ustar carstencarstentmp_ns50wwy/examples/transient-noise/rts-1.cir0000644000175000017500000000105414163340332021556 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 tmp_ns50wwy/examples/transient-noise/noi-ring51-demo.cir0000644000175000017500000000346414163340332023431 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 tmp_ns50wwy/examples/transient-noise/noi-sc-tr.cir0000644000175000017500000000166214163340332022430 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 tmp_ns50wwy/examples/transient-noise/modelcard.pmos0000644000175000017500000000156314163340332022750 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 tmp_ns50wwy/examples/transient-noise/noilib-demo.h0000644000175000017500000000401014163340332022453 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 tmp_ns50wwy/examples/transient-noise/modelcard.nmos0000644000175000017500000000224514163340332022744 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 tmp_ns50wwy/examples/transient-noise/shot_ng.cir0000644000175000017500000000132314163340332022250 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 tmp_ns50wwy/examples/transient-noise/simple-noise.cir0000644000175000017500000000123114163340332023211 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 tmp_ns50wwy/examples/transient-noise/README0000644000175000017500000000041014163340332020764 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 tmp_ns50wwy/examples/transient-noise/noise_vnoi.cir0000644000175000017500000000134214163340332022760 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 tmp_ns50wwy/examples/svg/0000755000175000017500000000000014163340332015566 5ustar carstencarstentmp_ns50wwy/examples/svg/nmos_out_BSIM330_ps.sp0000644000175000017500000000242314163340332021540 0ustar carstencarsten***** NMOS (Id-Vds) PostScript plot file *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 set nolegend set nounits set hcopydevtype=postscript * allow color and set background color if set to value >= 0 set hcopypscolor=1 set hcopypstxcolor=7 set xgridwidth=2 set xbrushwidth=3 set hcopyfontsize=16 run * Do not use line continuation (+ next line), because * it will ower case all text after the + * Use UTF-8 encoding (e.g. to get the µ) hardcopy plot_1.ps vss#branch 100u + vss#branch title 'Drain Current' ylabel 'Drain Current / µA' xlabel 'Drain Voltage / V' plot vss#branch 100u + vss#branch title 'Drain current' ylabel 'Drain current / µA' xlabel 'Drain voltage / V' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_1.ps else * for CYGWIN, Linux shell gv plot_1.ps & end .endc .end tmp_ns50wwy/examples/svg/nmos_out_BSIM330_svg.sp0000644000175000017500000000576614163340332021732 0ustar carstencarsten***** NMOS (Id-Vds) SVG plot file *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 * plot set xgridwidth=2 set xbrushwidth=3 set nolegend * the default settings * "svgwidth", "svgheight", "svgfont-size", "svgfont-width", "svguse-color", "svgstroke-width", "svggrid-width", set svg_intopts = ( 512 384 16 0 1 2 0 ) * "svgbackground", "svgfont-family", "svgfont" setcs svg_stropts = ( blue Arial Arial ) *** svg *** set hcopydevtype = svg hardcopy plot_0.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' set color0=white set color1=blue set color2=green hardcopy plot_1.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' set svg_intopts = ( 512, 384, 14, 0, 1, 2, 0 ) set color0=blue set color1=white set color2=red hardcopy plot_2.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' set svg_intopts = ( 512, 384, 12, 0, 0, 2, 2 ) set color0=black set color1=yellow set color2=white hardcopy plot_3.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * reset the colors set svg_intopts = ( 512, 384, 12, 0, 1, 2, 2 ) unset color0 unset color1 unset color2 hardcopy plot_4.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * choose backgroundfrom color list set color0="#F0E68C" set color1="#DDA0DD" set color2"#EE82EE" * set width and hight set hcopywidth=1024 set hcopyheight=768 hardcopy plot_5.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start plot_0.svg shell Start plot_1.svg shell Start plot_2.svg shell Start plot_3.svg shell Start plot_4.svg shell Start plot_5.svg else if $oscompiled = 7 * macOS (using feh and ImageMagick from homebrew) shell feh --conversion-timeout 1 plot_0.svg & shell feh --conversion-timeout 1 plot_1.svg & shell feh --conversion-timeout 1 plot_2.svg & shell feh --conversion-timeout 1 plot_3.svg & shell feh --conversion-timeout 1 plot_4.svg & shell feh --conversion-timeout 1 plot_5.svg & else * for CYGWIN, Linux shell feh --magick-timeout 1 plot_0.svg & shell feh --magick-timeout 1 plot_1.svg & shell feh --magick-timeout 1 plot_2.svg & shell feh --magick-timeout 1 plot_3.svg & shell feh --magick-timeout 1 plot_4.svg & shell feh --magick-timeout 1 plot_5.svg & end end .endc .end tmp_ns50wwy/examples/svg/nmos_out_BSIM330_various.sp0000644000175000017500000000441314163340332022607 0ustar carstencarsten***** NMOS (Id-Vds) SVG plot file 2 *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 * plot set xgridwidth=2 set xbrushwidth=3 set nolegend plot vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' unset nolegend set color0=white plot vss2#branch vs v(22) title 'Series resistor: Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' *** postscript *** set hcopydevtype = postscript setcs hcopyfont=Helvetica set hcopyfontsize=14 set hcopypscolor=0 ; background black hardcopy plot_4.ps vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' set hcopypscolor=1 ; background white hardcopy plot_5.ps vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_4.ps shell Start /B plot_5.ps * for CYGWIN else shell gv plot_5.ps & shell gv plot_4.ps & end *** svg *** set svg_intopts = ( 512 384 20 0 1 2 0 ) setcs svg_stropts = ( white Arial Arial ) set hcopydevtype = svg *set color0=white set color1=blue hardcopy plot_4.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' *set color0=black set color1=orange hardcopy plot_5.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage' ylabel 'Drain current' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start /B plot_4.svg shell Start /B plot_5.svg else if $oscompiled = 7 * macOS (using feh from homebrew) shell feh --conversion-timeout 1 plot_4.svg & shell feh --conversion-timeout 1 plot_5.svg & * for CYGWIN, Linux else shell feh --magick-timeout 1 plot_4.svg & shell feh --magick-timeout 1 plot_5.svg & end end .endc .end tmp_ns50wwy/examples/svg/nmos_out_BSIM330_svg-2.sp0000644000175000017500000000321014163340332022047 0ustar carstencarsten***** NMOS (Id-Vds) SVG plot file 2 *** 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 * drain series resistor R2 2 22 1k M2 22 1 32 4 n1 W=1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 set nolegend * the default settings * "svgwidth", "svgheight", "svgfont-size", "svgfont-width", "svguse-color", "svgstroke-width", "svggrid-width", set svg_intopts = ( 512 384 16 8 1 5 2 ) * "svgbackground", "svgfont-family", "svgfont" setcs svg_stropts = ( yellow Arial Arial ) *** svg *** set hcopydevtype = svg *set color0=white set color1=blue set color2=green set nounits hardcopy plot_10.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage / V' ylabel 'Drain current / µA' unset svg_intopts set svg_intopts = ( 512 384 6 0 1 5 2 ) hardcopy plot_11.svg vss#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage / V' ylabel 'Drain current / µA' * for MS Windows only if $oscompiled = 1 | $oscompiled = 8 shell Start plot_10.svg shell Start plot_11.svg else if $oscompiled = 7 * macOS (using feh from homebrew) shell feh --conversion-timeout 1 plot_10.svg & shell feh --conversion-timeout 1 plot_11.svg & else * for CYGWIN, Linux shell feh --magick-timeout 1 plot_10.svg & shell feh --magick-timeout 1 plot_11.svg & end end .endc .end tmp_ns50wwy/examples/svg/nmos_out_BSIM330_png.sp0000644000175000017500000000266514163340332021712 0ustar carstencarsten***** NMOS (Id-Vds) png and gnuplot file *** 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 * drain series resistor R2 2 22 0.1 M2 22 1 32 4 n1 W=1.1u L=0.35u Pd=1.5u Ps=1.5u ad=1.5p as=1.5p vss2 32 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 .control * sim dc vds 0 2 0.05 vgs 0 2 0.4 set xbrushwidth=3 set xgridwidth=2 * no gnuplot window, only png file set gnuplot_terminal=png/quit gnuplot plot_1 vss#branch vss2#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage / V' ylabel 'Drain current / µA' * plot vss#branch vss2#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage / V' ylabel 'Drain current / µA' unset gnuplot_terminal set nolegend * only the gnuplot window, no gnuplot files gnuplot temp vss#branch vss2#branch title 'Drain current versus drain voltage' xlabel 'Drain voltage / V' ylabel 'Drain current / µA' * MS Windows if $oscompiled = 1 | $oscompiled = 8 shell Start c:\"program files"\irfanview\i_view64.exe plot_1.png else if $oscompiled = 7 * macOS (using feh from homebrew) shell feh --conversion-timeout 1 plot_1.png & else * for CYGWIN, Linux shell feh --magick-timeout 1 plot_1.png & end end .endc .end tmp_ns50wwy/examples/p-to-n-examples/0000755000175000017500000000000014163340332017715 5ustar carstencarstentmp_ns50wwy/examples/p-to-n-examples/.spiceinit0000644000175000017500000000002314163340332021700 0ustar carstencarstenset ngbehavior=psa tmp_ns50wwy/examples/p-to-n-examples/rtest.lib0000644000175000017500000000006214163340332021544 0ustar carstencarstenR1 1 0 res R2 2 0 res R3 3 0 res .model res r r=1 tmp_ns50wwy/examples/p-to-n-examples/MCP6041.txt0000644000175000017500000001334714163340332021420 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 tmp_ns50wwy/examples/p-to-n-examples/logic.cir0000644000175000017500000000031314163340332021506 0ustar carstencarstenlogic test, PSPICE * requires 'set ngbehavior=psa' v8 8 0 1 Pulse (0 1 0.45 1m 1m 5 10) v9 9 0 0 B1 1 0 V=~(~v(9)&v(8)) + 0.5 .control tran 1m 1 plot v(1) v(8) v(9) listing .endc .end tmp_ns50wwy/examples/p-to-n-examples/op-test.cir0000644000175000017500000001156014163340332022012 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 7uS 14uS) .tran 100n 16u .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 tmp_ns50wwy/examples/p-to-n-examples/TLC555.LIB0000644000175000017500000003413414163340332021133 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}tmp_ns50wwy/examples/p-to-n-examples/switch-oscillators_inc.cir0000644000175000017500000000146014163340332025103 0ustar carstencarsten* sw ring-oscillators .control destroy all run plot I(vmeasure) ylimit 0 5m plot V(Osc_out) rusage .endc .ic v(N017)=0.25 .tran 50p 40n 50p 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 tmp_ns50wwy/examples/p-to-n-examples/switch-invs.lib0000644000175000017500000000326414163340332022670 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 tmp_ns50wwy/examples/p-to-n-examples/OPA171.txt0000644000175000017500000002434014163340332021331 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) pdmax let soa[i] = soa[i] * pdmax / pp end * voltage limit if v(1)[i] > vmax let soa[i] = 1p end * temperature limit let tcur = pp * @Rtj[r] + v(tamb) if tcur[i] > tmax let soa[i] = 1p end let i = i + 1 end settype current iid soa plot iid soa loglog ylimit 10m 10 xlimit 0.1 1 title 'Diode SOA (safe operating area, no self-heating)' ylabel 'Diode current' xlabel 'Diode forward voltage' unlet pdmax let pdmax = @dmod[pd_max] - (v(tj) - tnom) / @Rtj[r] let tdio = v(tj) echo *echo pdmax $&pdmax *echo temp $&tdio *echo tnom $&tnom echo let plen = length(pdmax) let i = 0 while i < plen if pdmax[i] < 0 let pdmax[i] = 1p end let i = i + 1 end * plot the static SOA diagram * now with self heating let i = 0 while i < ilen * power limit let pp = soa[i] * v(1)[i] if pp > pdmax[i] let soa[i] = soa[i] * pdmax[i] / pp end * voltage limit if v(1)[i] > vmax let soa[i] = 1p end * temperature limit let tcur = pp * @Rtj[r] + v(tamb) if tcur[i] > tmax let soa[i] = 1p end let i = i + 1 end settype current iid soa plot iid soa loglog ylimit 10m 10 xlimit 0.1 1 title 'Diode SOA (safe operating area, including self-heating)' ylabel 'Diode current' xlabel 'Diode forward voltage' *settype power pd pdmax *plot pd pdmax loglog ylimit 1m 10 xlimit 0.1 1 *settype temperature tj *plot tj *plot pd vs tj pdmax vs tj .endc .end tmp_ns50wwy/examples/soa/diode-soa-simple.cir0000644000175000017500000000155214163340332021406 0ustar carstencarstenSOA test for generic diode, including self-heating * forward direction * ngspice-35 .temp 100 vtamb tamb 0 27 v1 1 0 0.7 R1 1 0 100 ; just a parallel resistor Dth1 1 0 tj dmod1 thermal Rtj tj tamb 100 ; the thermal resistance junction to ambient * diode model parameters include all SOA parameters .model dmod1 d (rs=200m bv=21 rth0=1e6 tnom=25 fv_max=1.5 bv_max=20 id_max=1.5 pd_max=1 te_max=175) D2 1 0 dmod2 temp=125 * diode model parameters include all SOA parameters .model dmod2 d (rs=200m bv=21 rth0=100 tnom=25 fv_max=1.5 bv_max=20 id_max=1.5 pd_max=1 te_max=175) .option warn=1 maxwarns=2 .control save @dth1[id] @d2[id] all *dc v1 3 -22.5 -0.5 dc v1 0.02 2 0.02 *display set xbrushwidth=3 plot @dth1[id] @d2[id] loglog ylimit 10m 10 xlimit 0.1 1 settype temperature tj plot tj xlimit 0.5 1 ylimit 0 300 .endc .end tmp_ns50wwy/examples/soa/nic_soa.cir0000644000175000017500000000136114163340332017664 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 tmp_ns50wwy/examples/soa/bjt-soa.cir0000644000175000017500000000116614163340332017613 0ustar carstencarstenSOA check for bipolar Vce c 0 -1 Ib b 0 -1u Ve e 0 0 Q1 c b e MPSA92 .MODEL MPSA92 PNP(IS=9.53E-14 ISE=8.37E-13 ISC=9.99E-11 XTI=3.00 BF=9.80E1 BR=4.78 IKF=3.49E-2 IKR=1.00 XTB=1.5 VAF=2.60E2 VAR=1.40E2 VJE=3.00E-1 VJC=3.00E-1 RE=1.00E-2 RC=1.00E-2 RB=2.76E1 RBM=6.66E-2 IRB=7.02E-4 CJE=9.54E-11 CJC=4.66E-11 .00 FC=5.00E-1 NF=1.00 NR=1.55 NE=1.49 NC=1.50 MJE=4.26E-1 MJC=7.00E-1 TF=9.52E-10 TR=516.9p ITF=4.12E-1 VTF=9.99E5 XTF=1.03 EG=1.11 VCEO=300 ICRATING=500m MFG=SIEMENS pd_max=0.625 rth0=200 tnom=25) .option warn=1 maxwarns=2 .temp 50 .control dc Vce 0 -200 -0.1 Ib 0 80u 8u plot i(Ve) .endc .end tmp_ns50wwy/examples/soa/modelcard.pmos0000644000175000017500000000157114163340332020407 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 tmp_ns50wwy/examples/soa/modelcard.nmos0000644000175000017500000000211014163340332020373 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 tmp_ns50wwy/examples/vbic/0000755000175000017500000000000014163340332015712 5ustar carstencarstentmp_ns50wwy/examples/vbic/vbic_ac_par.sp0000644000175000017500000000047714163340332020516 0ustar carstencarstenAsk for small signal values of vbic model .include Infineon_VBIC.lib v1 1 0 dc 5.0 *rc 1 c 2k vb b 0 dc 0.6 q1 1 b 0 M_BFP780 .control save @q1[gm] @q1[go] @q1[gpi] save @q1[cbe] @q1[cbc] save @q1[qbe] @q1[qbc] dc v1 0.0 5 0.01 plot @q1[gm] @q1[go] @q1[gpi] plot @q1[cbe] @q1[cbc] plot @q1[qbe] @q1[qbc] .endc .end tmp_ns50wwy/examples/vbic/npn_out_qs.sp0000644000175000017500000000031014163340332020435 0ustar carstencarstenBJT Quasi-Saturation Output Test Ic=f(Vc,Ib) .include Infineon_VBIC.lib IB 0 B 100u VC C 0 0.0 VS S 0 0.0 Q1 C B 0 S M_BFP780 .control dc vc 0.0 2.0 0.01 ib 100u 1000u 100u plot -i(vc) .endc .end tmp_ns50wwy/examples/vbic/npn_out.sp0000644000175000017500000000025614163340332017743 0ustar carstencarstenVBIC Output Test Ic=f(Vc,Ib) .include qnva.mod IB 0 B 200n VC C 0 2.0 VS S 0 0.0 XQ1 C B 0 S qnva .control dc vc 0.0 5.0 0.05 ib 1u 10u 1u run plot abs(i(vc)) .endc .end tmp_ns50wwy/examples/vbic/vbic99_tran.sp0000644000175000017500000000261414163340332020412 0ustar carstencarsten***** VBIC99 level 9 Transient test ***** * q1 c b 0 0 t vbic99 vcc vp 0 dc 5.0 vin in 0 dc 2.5 pulse (0 5 0 1n 1n 10n 25n) r1 in b 100 r2 c vp 1k * .control op tran 50p 100n plot v(in) v(b) v(c) v(vp) settype temperature v(t) plot v(t) .endc * .model vbic99 npn + LEVEL = 9 TREF = 27.0 RCX = 10.26 + RCI = 0.001 VO = 0 GAMM = 0 + HRCF = 0 RBX = 122.23 RBI = 0.001 + RE = 17.61 RS = 1 RBP = 1 + IS = 4.70047e-25 NF = 1.09575 NR = 1.02 + FC = 0.9 CBEO = 0 CJE = 7e-15 + PE = 0.75 ME = 0.33 AJE = -0.5 + CBCO = 0 CJC = 1.1e-14 QCO = 0 + CJEP = 0 PC = 0.75 MC = 0.33 + AJC = -0.5 CJCP = 3e-15 PS = 0.75 + MS = 0.33 AJS = -0.5 IBEI = 1.484e-23 + WBE = 1 NEI = 1.302 IBEN = 6.096e-18 + NEN = 2.081 IBCI = 5.618e-24 NCI = 1.11 + IBCN = 3.297e-14 NCN = 2 AVC1 = 0 + AVC2 = 0 ISP = 0 WSP = 1 + NFP = 1 IBEIP = 0 IBENP = 0 + IBCIP = 0 NCIP = 1 IBCNP = 0 + NCNP = 2 VEF = 800 VER = 700 + IKF = 0 IKR = 0 IKP = 0 + TF = 2.3e-12 QTF = 0 XTF = 0 + VTF = 0 ITF = 0 TR = 0 + TD = 1e-15 KFN = 0 AFN = 1 + BFN = 1 XRE = 2 XRBI = 2 + XRCI = 2 XRS = 2 XVO = 0 + EA = 1.1095 EAIE = 1.489271 EAIC = 1.489271 + EAIS = 1.12 EANE = 1.489271 EANC = 1.489271 + EANS = 1.12 XIS = 3 XII = 3 + XIN = 3 TNF = 0 TAVC = 0 + RTH = 159.177 CTH = 100p VRT = 0 + ART = 0.1 CCSO = 0 QBM = 0 + NKF = 0.5 XIKF = 0 XRCX = 2 + XRBX = 2 XRBP = 0 ISRR = 1 + XISR = 0 DEAR = 0 EAP = 1.12 + VBBE = 0 NBBE = 1 IBBE = 1e-06 + TVBBE1 = 0 TVBBE2 = 0 TNBBE = 0 * .end tmp_ns50wwy/examples/vbic/self-heat.sp0000644000175000017500000000252014163340332020125 0ustar carstencarstenVBIC Output Test Ic=f(Vc,Ib) vs self heating .option absmos=1e-12 relmos=1e-6 relv=1e-6 absv=1e-9 post vc c 0 0 vb b 0 1 ve e 0 0 vs s 0 0 vc1 c c1 0 vb1 b b1 0 ve1 e e1 0 vs1 s s1 0 .temp 27 Q1 c1 b1 e1 s1 t mod1 area=1 .model mod1 npn Level=4 + Tnom=27 RCX=10 RCI=60 VO=2 GAMM=2.e-11 + HRCF=2 RBX=10 RBI=40 RE=2 + RS=20 RBP=40 IS=1e-16 NF=1.00000e+00 + NR=1.00000e+00 FC=9.00000e-01 CBEO=0 + CJE=1.e-13 PE=0.75 ME=0.33 + AJE=-5.00000e-01 CBCO=0 CJC=2e-14 + QCO=1e-12 CJEP=1e-13 PC=7.50000e-01 + MC=3.30000e-01 AJC=-5.00000e-01 CJCP=4e-13 + PS=7.50000e-01 MS=3.30000e-01 AJS=-5.00000e-01 + IBEI=1e-18 WBE=1.0000 NEI=1.00000e+00 + IBEN=5e-15 NEN=2.00000e+00 IBCI=2e-17 + NCI=1.00000e+00 IBCN=5e-15 NCN=2.00000e+00 + AVC1=2 AVC2=15 ISP=1e-15 + WSP=1.000e+00 NFP=1.00000e+00 IBEIP=0 + IBENP=0 IBCIP=0 NCIP=1.00000e+00 + IBCNP=0 NCNP=2.00000e+00 VEF=10 + VER=4 IKF=0.002 IKR=0.0002 IKP=0.0002 + TF=1.e-11 QTF=0 XTF=20 + VTF=0 ITF=0.08 TR=1e-10 + KFN=0 AFN=1.0e+00 + BFN=1.0000e+00 XRE=0 XRB=0 + XRC=0 XRS=0 XVO=0 + EA=1.12000e+00 EAIE=1.12000e+00 + EANE=1.12000e+00 EANC=1.12000e+00 + EANS=1.12000e+00 XIS=3.00000e+00 + XII=3.00000e+00 XIN=3.00000e+00 + TNF=0 TAVC=0 + RTH=300 CTH=0 + TD=0 *+ TD=2.e-11 .control dc vc 0.0 5.0001 0.05 vb 0.7 1.0001 0.05 altermod @mod1[RTH]=0 dc vc 0.0 5.0001 0.05 vb 0.7 1.0001 0.05 plot dc1.vc1#branch dc2.vc1#branch .endc .end tmp_ns50wwy/examples/vbic/Infineon_VBIC.lib0000644000175000017500000001157014163340332020756 0ustar carstencarsten*************************************************************** * 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=80K/W + Rth_PCB (customer) * Note: Rth = 80 K/W includes only the thermal resistance of die and package and * the thermal resistance of the customer PCB must be added (Rth=80K/W + Rth_PCB) * Infineon Technologies AG * VBIC MODEL IN SPICE 2G6 SYNTAX * VALID UP TO 10 GHZ * >>> 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 tmp_ns50wwy/examples/vbic/DFF_Y_ECL.sp0000644000175000017500000000474114163340332017636 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 tmp_ns50wwy/examples/vbic/gp-vbic-scripts/0000755000175000017500000000000014163340332020726 5ustar carstencarstentmp_ns50wwy/examples/vbic/gp-vbic-scripts/sgp2vbic0000644000175000017500000001750514163340332022400 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"}; tmp_ns50wwy/examples/vbic/gp-vbic-scripts/README0000644000175000017500000000030314163340332021602 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. tmp_ns50wwy/examples/vbic/gp-vbic-scripts/vbic2sgp0000644000175000017500000001705514163340332022400 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"}; tmp_ns50wwy/examples/vbic/vbic99_dc.sp0000644000175000017500000000270114163340332020031 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 tmp_ns50wwy/examples/vbic/npn_ft.sp0000644000175000017500000000230314163340332017540 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 tmp_ns50wwy/examples/vbic/qnva.mod0000644000175000017500000000651714163340332017371 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 tmp_ns50wwy/examples/vbic/npn_gum.sp0000644000175000017500000000045714163340332017727 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 tmp_ns50wwy/examples/tclspice/0000755000175000017500000000000014163340332016575 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl-testbench3/0000755000175000017500000000000014163340332021417 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl-testbench3/differentiate.tcl0000644000175000017500000001253514163340332024742 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 } tmp_ns50wwy/examples/tclspice/tcl-testbench3/FB14.cir0000644000175000017500000002664514163340332022567 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 tmp_ns50wwy/examples/tclspice/tcl-testbench3/tcl-testbench3.sh0000755000175000017500000000646414163340332024612 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 tmp_ns50wwy/examples/tclspice/tcl/0000755000175000017500000000000014163340332017357 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl/test_vectoblt.sh0000755000175000017500000001070714163340332022604 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"} tmp_ns50wwy/examples/tclspice/tcl/diffpair.cir0000644000175000017500000000101014163340332021632 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 tmp_ns50wwy/examples/tclspice/tcl-testbench4/0000755000175000017500000000000014163340332021420 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl-testbench4/bltGraph.tcl0000644000175000017500000003345314163340332023677 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 } } tmp_ns50wwy/examples/tclspice/tcl-testbench4/tcl-testbench4.sh0000755000175000017500000000006114163340332024577 0ustar carstencarsten#!/bin/sh exec wish vspicechart.tcl example.cir tmp_ns50wwy/examples/tclspice/tcl-testbench4/selectfromlist.tcl0000644000175000017500000000306714163340332025171 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}] tmp_ns50wwy/examples/tclspice/tcl-testbench4/vspicechart.tcl0000644000175000017500000001414014163340332024437 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; } tmp_ns50wwy/examples/tclspice/tcl-testbench4/example.cir0000644000175000017500000007132114163340332023556 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 tmp_ns50wwy/examples/tclspice/tcl-testbench2/0000755000175000017500000000000014163340332021416 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl-testbench2/example.cir0000644000175000017500000007145514163340332023564 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 tmp_ns50wwy/examples/tclspice/tcl-testbench2/tcl-testbench2.sh0000755000175000017500000000202014163340332024570 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 tmp_ns50wwy/examples/tclspice/tcl-testbench1/0000755000175000017500000000000014163340332021415 5ustar carstencarstentmp_ns50wwy/examples/tclspice/tcl-testbench1/tcl-testbench1.sh0000755000175000017500000000263614163340332024603 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 tmp_ns50wwy/examples/tclspice/tcl-testbench1/PN2222.mod0000644000175000017500000000054114163340332022743 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 tmp_ns50wwy/examples/tclspice/tcl-testbench1/capa.cir0000644000175000017500000000072614163340332023025 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 tmp_ns50wwy/examples/tclspice/tcl-testbench1/testCapa.cir0000644000175000017500000000026114163340332023657 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 tmp_ns50wwy/examples/hicum2/0000755000175000017500000000000014163340332016156 5ustar carstencarstentmp_ns50wwy/examples/hicum2/hic2_gum_inv.sp0000644000175000017500000000052514163340332021075 0ustar carstencarstenHICUM2v2.40 Gummel Test invers Ie,b,s=f(Ve,Ib) Vec=1V VB B 0 1.2 VE E 0 1.0 VS S 0 0.0 Q1 0 B E S hicumL2V2p40 .control dc vb 0.4 1.2 0.01 plot abs(i(ve)) abs(i(vb)) abs(i(vs)) xlimit 0.4 1.2 ylog ylimit 1e-12 0.1 plot abs(i(ve))/abs(i(vb)) vs abs(i(ve)) xlog xlimit 1e-06 100e-3 ylimit 0 40 .endc .include model-card-examples.lib .end tmp_ns50wwy/examples/hicum2/hic2_gum.sp0000644000175000017500000000067714163340332020231 0ustar carstencarstenHICUM2v2.40 Gummel Test Ic,b,s=f(Vc,Ib) Vce=1V VB B 0 1.2 VC C 0 1.0 VS S 0 0.0 Q1 C B 0 S hicumL2V2p40 .control option gmin=1e-14 dc vb 0.2 1.2 0.01 *plot i(vc) i(vb) i(vs) *gnuplot fgum i(vc) i(vb) i(vs) xlimit 0.2 1.2 ylog ylimit 1e-12 0.1 plot abs(i(vc)) abs(i(vb)) abs(i(vs)) xlimit 0.2 1.2 ylog ylimit 1e-14 0.1 plot abs(i(vc))/abs(i(vb)) vs abs(i(vc)) xlog xlimit 1e-09 100e-3; ylimit 0 500 .endc .include model-card-examples.lib .end tmp_ns50wwy/examples/hicum2/hic2_noise.sp0000644000175000017500000000056314163340332020550 0ustar carstencarstenHICUM2v2.40 Noise Test vcc 4 0 26 vin 1 0 ac 1 ccouple 1 b 1 ibias 0 b 100uA rload 4 c 1k noisy=0 q1 c b 0 0 hicumL2V2p40 .include model-card-examples.lib .control op print all echo noise v(c) vin dec 10 10 10G 1 setplot setplot noise1 plot ally plot inoise_spectrum onoise_spectrum loglog setplot noise2 print all echo print inoise_total onoise_total .endc .end tmp_ns50wwy/examples/hicum2/hic2_noise_V.sp0000644000175000017500000000261614163340332021036 0ustar carstencarstenHICUM2v2.40 Noise Voltage Test * _______ * _|_ _|_ * /// / _ \ * \/ \/ I1 * /\_/\ * \___/ * _______| * | _| * |____|' * B |`-> * _|_ E * /VIN\ * \___/ * _|_ * /// * * vin E 0 DC 0.0 ac 1.0u I1 0 B 1uA q1 B B E hicumL2V2p40 .include model-card-examples.lib .control setplot new let V1u = 0*vector(81) let V10u = 0*vector(81) let V100u = 0*vector(81) let V1000u = 0*vector(81) op noise v(B) vin dec 10 1 100Meg 1 destroy let unknown1.V1u = sqrt(v(onoise_spectrum)) alter I1 dc = 10u op noise v(B) vin dec 10 1 100Meg 1 destroy let unknown1.V10u = sqrt(v(onoise_spectrum)) alter I1 dc = 100u op noise v(B) vin dec 10 1 100Meg 1 destroy let unknown1.V100u = sqrt(v(onoise_spectrum)) alter I1 dc = 1000u op noise v(B) vin dec 10 1 100Meg 1 destroy let unknown1.V1000u = sqrt(v(onoise_spectrum)) set pensize = 2 plot unknown1.V1u unknown1.V10u unknown1.V100u unknown1.V1000u vs frequency loglog title HICUM_NoiseVoltage echo " ... done." .endcontrol .end tmp_ns50wwy/examples/hicum2/hic2_noise_I.sp0000644000175000017500000000267714163340332021030 0ustar carstencarstenHICUM2v2.40 Noise Current Test * _______ * _|_ _|_ * /// / _ \ * \/ \/ I1 * /\_/\ * R1 \___/ * _/\ __| * | \/ _| * |____|' * B |`-> * _|_ E * /VIN\ * \___/ * _|_ * /// * * vin E 0 DC 0.0 ac 1.0u I1 0 C 1uA R1 C B 1000k noisy=0 q1 C B E hicumL2V2p40 .include model-card-examples.lib .control setplot new let V1u = 0*vector(81) let V10u = 0*vector(81) let V100u = 0*vector(81) let V1000u = 0*vector(81) op noise v(C) vin dec 10 1 100Meg 1 destroy let unknown1.V1u = sqrt(v(onoise_spectrum))*1u alter I1 dc = 10u op noise v(C) vin dec 10 1 100Meg 1 destroy let unknown1.V10u = sqrt(v(onoise_spectrum))*1u alter I1 dc = 100u op noise v(C) vin dec 10 1 100Meg 1 destroy let unknown1.V100u = sqrt(v(onoise_spectrum))*1u alter I1 dc = 1000u op noise v(C) vin dec 10 1 100Meg 1 destroy let unknown1.V1000u = sqrt(v(onoise_spectrum))*1u set pensize = 2 plot unknown1.V1u unknown1.V10u unknown1.V100u unknown1.V1000u vs frequency loglog title LM394NoiseCurrent echo " ... done." .endcontrol .end tmp_ns50wwy/examples/hicum2/model-card-examples.lib0000644000175000017500000000547414163340332022503 0ustar carstencarsten* Example parameter test set .model hicumL2V2p40 npn level=8 * *Transfer current + c10 = 9.074e-030 + qp0 = 1.008e-013 + ich = 0 + hf0 = 40 + hfe = 10.01 + hfc = 20.04 + hjei = 3.382 + ahjei = 3 + rhjei = 2 + hjci = 0.2 * *Base-Emitter diode currents + ibeis = 1.328e-019 + mbei = 1.027 + ireis = 1.5e-015 + mrei = 2 + ibeps = 1.26e-019 + mbep = 1.042 + ireps = 1.8e-015 + mrep = 1.8 + mcf = 1 * *Transit time for excess recombination current at b-c barrier + tbhrec = 1e-010 * *Base-Collector diode currents + ibcis = 4.603e-017 + mbci = 1.15 + ibcxs = 0 + mbcx = 1 * *Base-Emitter tunneling current + ibets = 0.02035 + abet = 24 + tunode = 1 * *Base-Collector avalanche current + favl = 18.96 + qavl = 5.092e-014 + alfav = -0.0024 + alqav = -0.0006284 + kavl = 0.0 + alkav = 0.0 * *Series resistances + rbi0 = 4.444 + rbx = 2.568 + fgeo = 0.7409 + fdqr0 = 0 + fcrbi = 0 + fqi = 1 + re = 1.511 + rcx = 2.483 * *Substrate transistor + itss = 1.143e-017 + msf = 1.056 + iscs = 4.60106e-015 + msc = 1.018 + tsf = 0 * *Intra-device substrate coupling + rsu = 500 + csu = 6.4e-014 * *Depletion Capacitances + cjei0 = 8.869e-015 + vdei = 0.714 + zei = 0.2489 + ajei = 1.65 + cjep0 = 2.178e-015 + vdep = 0.8501 + zep = 0.2632 + ajep = 1.6 + cjci0 = 3.58e-015 + vdci = 0.8201 + zci = 0.2857 + vptci = 1.79 + cjcx0 = 6.299e-015 + vdcx = 0.8201 + zcx = 0.2863 + vptcx = 1.977 + fbcpar = 0.3 + fbepar = 1 + cjs0 = 2.6e-014 + vds = 0.9997 + zs = 0.4295 + vpts = 100 + cscp0 = 1.4e-014 + vdsp = 0 + zsp = 0.35 + vptsp = 4 * *Diffusion Capacitances + t0 = 2.089e-013 + dt0h = 8e-014 + tbvl = 8.25e-014 + tef0 = 3.271e-013 + gtfe = 3.548 + thcs = 5.001e-012 + ahc = 0.05 + fthc = 0.7 + rci0 = 9.523 + vlim = 0.6999 + vces = 0.01 + vpt = 2 + aick = 1e-3 + delck = 2 + tr = 0 + vcbar = 0.04 + icbar = 0.01 + acbar = 1.5 * *Isolation Capacitances + cbepar = 2.609e-014 + cbcpar = 1.64512e-014 * *Non-quasi-static Effect + flnqs = 0 + alqf = 0.166667 + alit = 0.333333 * *Noise + kf = .3e-16 + af = .75 + cfbe = -1 + flcono = 0 + kfre = 0.0 + afre = 2.0 * *Lateral Geometry Scaling (at high current densities) + latb = 0.0 + latl = 0.0 * *Temperature dependence + vgb = 0.91 + alt0 = 0.004 + kt0 = 6.588e-005 + zetaci = 0.58 + alvs = 0.001 + alces = -0.2286 + zetarbi = 0.3002 + zetarbx = 0.06011 + zetarcx = -0.02768 + zetare = -0.9605 + zetacx = 0 + vge = 1.17 + vgc = 1.17 + vgs = 1.049 + f1vg = -0.000102377 + f2vg = 0.00043215 + zetact = 5 + zetabet = 4.892 + alb = 0 + dvgbe = 0 + zetahjei = -0.5 + zetavgbe = 0.7 * *Self-Heating + flsh = 0 + rth = 1113.4 + cth = 6.841e-012 + zetarth = 0 + alrth = 0.002 * *Compatibility with V2.1 + flcomp = 2.3 * *Circuit simulator specific parameters + tnom = 26.85 *+ dt = 0 tmp_ns50wwy/examples/hicum2/hic2_gain.sp0000644000175000017500000000075114163340332020350 0ustar carstencarstenHICUM2v2.40 AC gain Test h21 = f(Ic) Vce=1V vce 1 0 dc 1.0 vgain 1 c dc 0.0 f 0 2 vgain -2 l 2 b 1g c 2 0 1g ib 0 b dc 0.0 ac 1.0 ic 0 c 0.001 Q1 C B 0 hicumL2V2p40 .control foreach myic 2e-03 4e-03 7e-03 9e-03 18e-03 33e-3 alter ic = $myic op print all ac dec 10 1Meg 800g 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 300 loglog .endc .include model-card-examples.lib .end tmp_ns50wwy/examples/hicum2/hic2_out.sp0000644000175000017500000000044414163340332020240 0ustar carstencarstenHICUM2v2.40 Output Test Ic=f(Vc,Ib) IB 0 B 1u VC C 0 1.8 VS S 0 0.0 Q1 C B 0 S tj hicumL2V2p40 .control dc vc 0.0 1.8 0.01 ib 10u 100u 10u plot -i(vc) reset altermod @hicumL2V2p40[flsh]=1 dc vc 0.0 1.8 0.01 ib 1u 10u 1u plot -i(vc) plot v(tj) .endc .include model-card-examples.lib .end tmp_ns50wwy/examples/hicum2/hic2_tran.sp0000644000175000017500000000060114163340332020370 0ustar carstencarstenHICUM2v2.40 Amplifier in Time Domain vcc 2 0 2.5 *vin 1 0 ac 1 dc 0 sin 0 25m 1G vin 1 0 ac 1 dc 0 pulse 0 50m 0 5p 5p 4n 8n rs 1 in 50 c1 in b 1n r1 2 c 180 r2 c b 5k q1 c b 0 0 hicuml2v2p40 c2 c out 100p r3 out 0 1k .ic v(c)=0.9 .control option method=gear op print all ac dec 10 1Meg 9.9g plot vdb(out) tran 2p 200n plot v(in) v(out) .endc .include model-card-examples.lib .end tmp_ns50wwy/examples/hicum2/hic2_ft.sp0000644000175000017500000000232614163340332020043 0ustar carstencarstenHICUM2v2.40 Test ft=f(Ic) Vce=1V vce 1 0 dc 1.0 vgain 1 c dc 0.0 f 0 2 vgain -2 l 2 b 1g c 2 0 1g ib 0 b dc 0.0 ac 1.0 ic 0 c 0.001 Q1 C B 0 hicumL2V2p40 .control let run = 0 let ft_runs = 9 set curplot=new $ create a new plot set curplotname=ft_plot set curplottitle="HICUM2v2.40 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 1e-03 3e-03 6e-03 9e-03 14e-03 21e-03 27e-03 33e-3 40e-03 alter ic = $myic op print all ac dec 100 1Meg 800g 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 .include model-card-examples.lib .end tmp_ns50wwy/m4/0000755000175000017500000000000014163340332013471 5ustar carstencarstentmp_ns50wwy/m4/ax_prog_cc_for_build.m40000644000175000017500000000770214163340332020072 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 ]) tmp_ns50wwy/m4/ax_compare_version.m40000644000175000017500000001465314163340332017627 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 tmp_ns50wwy/m4/ax_prog_bison_version.m40000644000175000017500000000403314163340332020331 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 ]) ]) tmp_ns50wwy/build-for-mac-os.sh0000755000175000017500000000225314163340332016552 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 \ --with-x \ --enable-xspice \ --enable-cider \ --enable-pss \ --with-readline=yes \ --enable-openmp \ --disable-debug \ --prefix=/Applications/ngspice \ CFLAGS="-O2 -I/opt/X11/include/freetype2" \ LDFLAGS="-lomp" # The last two lines may depend on the lib installations # please check if there are any problems make clean make -j4 make DESTDIR="$(pwd)/root-tree" install # Package pkgbuild \ --root "$(pwd)/root-tree" \ --identifier ngspice.pkg \ --install-location / \ ngspice.pkg tmp_ns50wwy/compile_macos_gcc.sh0000644000175000017500000000742214163340332017140 0ustar carstencarsten#!/bin/bash # ngspice build script for macOS, release or debug version, 64 bit # compile_macos.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_macos.sh' or './compile_macos.sh d' 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 . SECONDS=0 if test "$1" = "d"; then if [ ! -d "debug" ]; then mkdir debug if [ $? -ne 0 ]; then echo "mkdir debug 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" = "d"; then cd debug if [ $? -ne 0 ]; then echo "cd debug failed"; exit 1 ; fi echo "configuring for 64 bit debug" echo # You may add --enable-adms to the following command for adding adms generated devices # Builtin readline is not compatible (Big Sur), readline via Homebrew required (in /usr/local/opt) # Use gcc-11 from Homebrew to support OpenMP ../configure --with-x --enable-xspice --enable-cider --with-readline=/usr/local/opt/readline CC="gcc-11" CXX="g++-11" CFLAGS="-m64 -O0 -g -Wall -I/opt/X11/include/freetype2 -I/usr/local/opt/readline/include" LDFLAGS="-m64 -g -L/usr/local/opt/readline/lib -L/opt/X11/lib" else cd release if [ $? -ne 0 ]; then echo "cd release failed"; exit 1 ; fi echo "configuring for 64 bit release" echo # You may add --enable-adms to the following command for adding adms generated devices ../configure --with-x --enable-xspice --enable-cider --with-readline=/usr/local/opt/readline --disable-debug --enable-openmp CC="gcc-11" CXX="g++-11" CFLAGS="-m64 -O2 -I/opt/X11/include/freetype2 -I/usr/local/opt/readline/include -I/usr/local/opt/ncurses/include -I/usr/local/include" LDFLAGS="-m64 -L/usr/local/opt/readline/lib -L/usr/local/opt/ncurses/lib -L/opt/X11/lib -L/usr/local/lib" 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 # Install to /usr/local 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 ELAPSED="Elapsed compile time: $(($SECONDS / 3600))hrs $((($SECONDS / 60) % 60))min $(($SECONDS % 60))sec" echo echo $ELAPSED echo "success" exit 0 tmp_ns50wwy/README-old.adms0000644000175000017500000005144214163340332015536 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. tmp_ns50wwy/README.cpl-gc0000644000175000017500000000076514163340332015205 0ustar carstencarstenCopyright 2021 Holger Vogt New BSD license. A local garbage collector, especially cpl transmission line All memory allocation and deallocation are accompanied by functions from cplhash.c. Each time any memory is allocated, an entry is made into a hash table, storing the address. Each time memory is freed, this entry is removed again. Reallocation uses both procedures. Function mem_init() initializes the setup. Function mem_delete() frees all memory with addresses still found in the hash table. tmp_ns50wwy/README.shared-xspice0000644000175000017500000000271414163340332016573 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. tmp_ns50wwy/.gitignore0000644000175000017500000000256714163340332015153 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 /ngspice.pc /src/frontend/parse-bison.* /src/spicelib/parser/inpptree-parser.* /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/spicelib/devices/adms/*/*.* !/src/spicelib/devices/adms/admst/*.* !/src/spicelib/devices/adms/*/admsva/*.* /src/ngmakeidx /src/ngmultidec /src/ngnutmeg /src/ngproc2mod /src/ngsconvert /src/ngspice /src/ngspice.idx /src/spinit /release* /debug* /visualc-tcl* # Swap files for Vim **/*.swp **/*.swo # Patches **/*.patch # Visual Studio user options files **/*.vcxproj.user .vscode/ src/frontend/parse-bison.c src/frontend/parse-bison.h src/spicelib/parser/inpptree-parser.c src/spicelib/parser/inpptree-parser.h # Visual Studio Code user options files .vscode/