NanoFinfet_update_Feb29: nanofinfetwr

File nanofinfetwr, 246.0 KB (added by kim568, 6 years ago)

wrapper script

Line 
1#!/bin/sh
2# ----------------------------------------------------------------------
3#  This wrapper allows PROPHET or PADRE can run for Nanoscale FinFET structure.
4# ======================================================================
5#  AUTHOR:  Sung Geun Kim, Purdue University
6#  Copyright (c) 2007  Purdue Research Foundation, West Lafayette, IN
7# ======================================================================
8#\
9exec tclsh "$0" "$*"
10# ----------------------------------------------------------------------
11# tclsh executes everything from here on...
12
13package require Rappture
14
15# get directory context
16set dir [file dirname [info script]]
17
18# open the XML file containing the run parameters
19set opt [Rappture::library [lindex $argv 0]]
20
21
22
23# ----------------------------------------------------------------------
24# USAGE: nextline <varName>
25#
26# Pulls the next line from the contents of <varName> and returns
27# it as the result of this function.  Updates the contents of
28# <varName> so that it doesn't contain the line.
29# ----------------------------------------------------------------------
30proc nextline {varName} {
31    upvar $varName body
32    if {[regexp -indices {.*?(\n|$)} $body match]} {
33        foreach {i0 i1} $match break
34        if {[string index $body $i1] == "\n"} {
35            set line [string range $body 0 [expr {$i1-1}]]
36            set body [string range $body [expr {$i1+1}] end]
37        } else {
38            set line [string range $body 0 $i1]
39            set body [string range $body [expr {$i1+1}] end]
40        }
41        return $line
42    }
43    return ""
44}
45
46#extract parameters from rappture input part
47
48#Phase one - Device Type
49set device_type [$opt get input.(one).(devicetype).(examples).current]
50
51
52if {$device_type=="Dp1"} {
53            set status 0
54            set N 0
55            set dimension 2
56            set choice "prophet"
57            set Nxy 0
58            set Nxychr 0
59            set Nxypot 0
60            set vpotcounter 0
61            set vchrcounter 0
62            set which_current "j_drain"
63            set inner_loop_voltage "V_gate"
64            if {$inner_loop_voltage=="V_drain"} {
65                set outer_loop_voltage "V_gate"
66            } else {
67                set outer_loop_voltage "V_drain"
68            }                     
69            set equil 0
70            set vd -0.05
71            set vg 0.5
72            set vdstep -0.25
73            set ndstep 4
74            set vgstep -0.1
75            set ngstep 20
76            set vstep_nm $ngstep
77            set vstep_sz $vgstep
78            set vstart $vg
79            set other_vstep_nm $ndstep
80            set other_vstep_sz $vdstep
81            set other_vstart $vd
82            set vhigh [expr {$vg+$vgstep*$ngstep}]
83            set ic 0
84            set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]
85            set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
86            set which_curr "I[string index $which_current 2]"
87
88            set I_threshold 5.0e-8
89
90            set aI_threshold [expr {abs($I_threshold)}]
91
92            set plot_d "y"
93            set plot_psi "y"
94
95
96        catch {open $dir/../examples/Dp45x30PRO/datafiles_prophet r} fid
97        set datafiles [read $fid]
98        close $fid
99       
100      set fid [open "debug_bug" w]
101      puts $fid $datafiles
102      close $fid
103
104} elseif {$device_type=="Dp2"} {
105            set status 0
106            set N 0
107            set dimension 2
108            set choice "padre"
109            set Nxy 0
110            set Nxychr 0
111            set Nxypot 0
112            set vpotcounter 0
113            set vchrcounter 0
114            set which_current "j_drain"
115            set inner_loop_voltage "V_gate"
116            if {$inner_loop_voltage=="V_drain"} {
117                set outer_loop_voltage "V_gate"
118            } else {
119                set outer_loop_voltage "V_drain"
120            }                     
121            set equil 0
122            set vd -0.05
123            set vg 0.5
124            set vdstep -0.25
125            set ndstep 4
126            set vgstep -0.1
127            set ngstep 20
128            set vstep_nm $ngstep
129            set vstep_sz $vgstep
130            set vstart $vg
131            set other_vstep_nm $ndstep
132            set other_vstep_sz $vdstep
133            set other_vstart $vd
134            set vhigh [expr {$vg+$vgstep*$ngstep}]
135            set ic 0
136            set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]
137            set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
138            set which_curr "I[string index $which_current 2]"
139
140            set I_threshold 5.0e-8
141
142            set aI_threshold [expr {abs($I_threshold)}]
143
144            set plot_d "y"
145            set plot_psi "y"
146            set band "y"
147            set e_field "y"
148            set net_charge "y"
149
150        set grid 0
151        set equil_padre 0
152        set datafiles_3D ""
153       
154        set datafiles_1D ""
155
156        catch {open $dir/../examples/Dp45x30PAD/datafiles_2D_padre r} fid
157        set datafiles_2D [read $fid]
158        close $fid
159
160        catch {open $dir/../examples/Dp45x30PAD/datafiles_IV_padre r} fid
161        set datafiles_IV [read $fid]
162        close $fid
163
164        set which_curr "I[string index $which_current 2]"
165        set deckfile "pdr32297"
166} else {
167
168if {$device_type=="user_finfet"} {     
169        set dimension [$opt get input.(one).(devicetype).(dt).(dimension).current]
170        set gate_type [$opt get input.(one).(devicetype).(dt).(gate_type).current]
171
172}
173
174
175if {$device_type=="user_nanowire"} {
176        set dimension 2
177        set gate_type [$opt get input.(one).(devicetype).(dt_nw).(gate_type_nw).current]
178}
179
180#Phase two - Device Structure
181
182
183#Geometry - X
184       
185        set pw [expr {[$opt get input.(two).(Geometry-x).(pw).current]*0.001}]
186        if {$gate_type=="metal"} {
187                set pw 0.0
188        }
189       
190if {$device_type=="user_finfet"} {
191        set chw [expr {[$opt get input.(two).(Geometry-x).(chw).current]*0.001}]
192        set tox1 [expr {[$opt get input.(two).(Geometry-x).(tox1).current]*0.001}]
193        set tox2 [expr {[$opt get input.(two).(Geometry-x).(tox2).current]*0.001}]
194
195        set total_width [expr ($pw + $tox1 + $chw + $tox2 + $pw)]
196        set ox_grid1 [expr {$tox1/2}]
197        set ox_grid2 [expr {$tox2/2}]
198        set half_chw [expr {$chw/2.0}]
199}
200
201
202if {$device_type=="user_nanowire"} {
203        set Dch  [expr {[$opt get input.(two).(Geometry-x).(Dch).current]*0.001}]
204        set tox  [expr {[$opt get input.(two).(Geometry-x).(tox).current]*0.001}]
205        set total_width [expr ($Dch/2.0+$tox)]
206}
207
208
209
210#Geometry - Y
211set ls [expr {[$opt get input.(two).(Geometry-y).(ls).current]*0.001}]
212set ld [expr {[$opt get input.(two).(Geometry-y).(ld).current]*0.001}]
213set lg [expr {[$opt get input.(two).(Geometry-y).(lg).current]*0.001}]
214         
215set overlap_s [expr {[$opt get input.(two).(Geometry-y).(overlap_s).current]*0.001}]
216set overlap_d [expr {[$opt get input.(two).(Geometry-y).(overlap_d).current]*0.001}]
217
218
219set t_length [expr {$ls+$ld+$lg-$overlap_s-$overlap_d}]
220set source_pos [expr {$lg/2.0-$overlap_s+$ls}]
221set drain_pos [expr {$lg/2.0-$overlap_d+$ld}]
222set s_b [expr {$ls}]
223set d_b [expr {$ls-$overlap_s+$lg-$overlap_d}]
224set center [expr {$ls+$lg/2.0-$overlap_s}]
225
226#Geometry - Z
227if {$dimension == 3} {
228          set fin_height [expr {[$opt get input.(two).(Geometry-z).(fin_height).current]*0.001}]
229          set top_ox [expr {[$opt get input.(two).(Geometry-z).(top_ox).current]*0.001}]
230          set top_ox_grid [expr {$top_ox/2}]
231          set sub_ox [expr {[$opt get input.(two).(Geometry-z).(sub_ox).current]*0.001}]
232}
233
234#Material Parameters
235
236set EG [$opt get input.(two).(Material).(bandstructure).(bg_sil).current]
237set affinity [$opt get input.(two).(Material).(bandstructure).(affinity_sil).current]
238set ep_sil [$opt get input.(two).(Material).(general).(ep_sil).current]
239set ep_ox [$opt get input.(two).(Material).(general).(ep_ox).current]
240
241set mn [$opt get input.(two).(Material).(electrons).(mn_ele).current]
242set mn_dos [$opt get input.(two).(Material).(electrons).(mn_dos).current]
243set mo_el [$opt get input.(two).(Material).(electrons).(mo_el).current]
244set vsatn [$opt get input.(two).(Material).(electrons).(vsatn).current]
245set tau0n [expr {[$opt get input.(two).(Material).(electrons).(tau0_el).current]*1e-09}]
246
247set mlh [$opt get input.(two).(Material).(holes).(ml_hole).current]
248set mhh [$opt get input.(two).(Material).(holes).(mh_hole).current]
249set mp_dos [$opt get input.(two).(Material).(holes).(mp_dos).current]
250set vsatp [$opt get input.(two).(Material).(holes).(vsatp).current]
251set mo_hole [$opt get input.(two).(Material).(holes).(mo_hole).current]
252set tau0p [expr {[$opt get input.(two).(Material).(holes).(tau0_hole).current]*1e-09}]
253
254set workfunc [expr {[$opt get input.(two).(Material).(bandstructure).(workfunc).current]*1.0}]
255
256#Doping Parameters
257
258set nch [$opt get input.(two).(Doping).(nch).current]
259set ns [$opt get input.(two).(Doping).(ns).current]
260set nd [$opt get input.(two).(Doping).(nd).current]
261set n_poly [$opt get input.(two).(Doping).(n_poly).current]
262
263set source_dop_type [$opt get input.(two).(Doping).(source_dop_type).current]
264set drain_dop_type [$opt get input.(two).(Doping).(drain_dop_type).current]
265set ch_dop_type [$opt get input.(two).(Doping).(ch_dop_type).current]
266set poly_dop_type [$opt get input.(two).(Doping).(poly_dop_type).current]
267
268if {$source_dop_type=="p"} {
269 set s_dop_flag "-"
270} else {
271 set s_dop_flag ""
272}
273if {$drain_dop_type=="p"} {
274 set d_dop_flag "-"
275} else {
276 set d_dop_flag ""
277}
278if {$ch_dop_type=="p"} {
279 set ch_dop_flag "-"
280} else {
281 set ch_dop_flag ""
282}
283if {$poly_dop_type=="p"} {
284 set poly_dop_flag "-"
285} else {
286 set poly_dop_flag ""
287}
288
289#Gaussian Doping
290
291set gaussian_dop [$opt get input.(two).(Gaussian_Doping).(gaussian_dop).current]
292
293if {$gaussian_dop} {
294        set char_len_source [expr {[$opt get input.(two).(Gaussian_Doping).(char_len_source).current]*0.001}]                                                                       
295        set char_len_drain [expr {[$opt get input.(two).(Gaussian_Doping).(char_len_drain).current]*0.001}]
296        set pene_ox [expr {[$opt get input.(two).(Gaussian_Doping).(pene_ox).current]*0.001}]
297}
298
299#Bias and Temperature
300
301#Temperature
302set tl [$opt get input.(three).(temperature).(temperature).current]
303
304#Unit Change
305set tl [Rappture::Units::convert $tl -to K -units off]
306
307set vs [$opt get input.(three).(initial).(vs).current]
308set vd [$opt get input.(three).(initial).(vd).current]
309set vg [$opt get input.(three).(initial).(vg).current]
310set vgstep [$opt get input.(three).(Bias).(vgstep).current]
311set ngstep [$opt get input.(three).(Bias).(ngstep).current]
312set vdstep [$opt get input.(three).(Bias).(vdstep).current]
313set ndstep [$opt get input.(three).(Bias).(ndstep).current]
314set inner_loop_voltage [$opt get input.(three).(Bias).(inner_loop_voltage).current]
315
316set which_current [$opt get input.(three).(Bias).(which_current).current]
317
318#Opions
319set choice [$opt get input.(four).(simulator).current]
320
321if {$choice=="prophet"} {
322        set grid [$opt get input.(four).(prophet_option).(grid).current]
323        set equil [$opt get input.(four).(prophet_option).(equil).current]
324        set plot_d [$opt get input.(four).(prophet_option).(plot_d).current]
325        set plot_psi [$opt get input.(four).(prophet_option).(plot_psi).current]
326        set plot_iv [$opt get input.(four).(prophet_option).(plot_iv).current]
327        set I_threshold [expr {[$opt get input.(four).(prophet_option).(threshold_prophet).current]*1e-9}]
328        set aI_threshold [expr {abs($I_threshold)}]
329}
330if {$choice=="padre"} {
331        set equil_padre [$opt get input.(four).(padre_option).(equil).current]
332        set grid [$opt get input.(four).(padre_option).(grid).current]
333        set plot_d [$opt get input.(four).(padre_option).(plot_d).current]
334        set plot_psi [$opt get input.(four).(padre_option).(plot_psi).current]
335        set plot_iv [$opt get input.(four).(padre_option).(plot_iv).current]
336        set band [$opt get input.(four).(padre_option).(band).current]
337        set net_charge [$opt get input.(four).(padre_option).(net_charge).current]
338        set e_field [$opt get input.(four).(padre_option).(e_field).current]
339        set I_threshold [expr [$opt get input.(four).(padre_option).(threshold_padre).current]*1e-9]
340        set aI_threshold [expr {abs($I_threshold)}]
341        set stat [$opt get input.(four).(padre_option).(model).(stat).current]
342        set CONMOB_flag [$opt get input.(four).(padre_option).(model).(CONMOB).current]
343        set FLDMOB_flag [$opt get input.(four).(padre_option).(model).(FLDMOB).current]
344        set GATMOB_flag [$opt get input.(four).(padre_option).(model).(GATMOB).current]
345        set CCMOB_flag [$opt get input.(four).(padre_option).(model).(CCMOB).current]
346        set IMPACT_flag [$opt get input.(four).(padre_option).(model).(IMPACT).current]
347        set BGN_flag [$opt get input.(four).(padre_option).(model).(BGN).current]
348        if {$CONMOB_flag} {set CONMOB "CONMOB"} else {set CONMOB ""}
349        if {$FLDMOB_flag} {set FLDMOB "FLDMOB"} else {set FLDMOB ""}
350        if {$GATMOB_flag} {set GATMOB "GATMOB"} else {set GATMOB ""}
351        if {$CCMOB_flag} {set CCMOB "CCMOB"} else {set CCMOB ""}
352        if {$IMPACT_flag} {set IMPACT "IMPACT"} else {set IMPACT ""}
353        if {$BGN_flag} {set BGN "BGN"} else {set IMPACT ""}
354}
355
356}
357switch -- $choice {
358        "prophet" {
359        if {$device_type=="user_finfet" || $device_type=="user_nanowire"} {
360
361############Building up the inputdeck for PROPHET###############
362
363
364
365        set indeck ""
366          append indeck "#PROPHET script for rectangular semiconductor Si FINFET simulations#\n"
367          if {$device_type=="user_nanowire"} {
368                append indeck {dbase create name=options/cylindrical sval="Y"}
369          }
370          append indeck "\ndbase create name=options/ignoreFPE ival=1\n"
371          append indeck "dbase create name=library/physics/ambient/epsilon rval=1.0\n"
372          append indeck "dbase modify name=library/math/systems/default_numerical_parameters/maxNewton ival=200\n"
373          append indeck "dbase modify name=library/math/systems/default_numerical_parameters/NewtonUpd rval=1e-04\n"
374#       append indeck "dbase create name=\"/options/modulate_qf_with_bias\" sval=poly\n"
375          append indeck "dbase modify name=library/physics/silicon/eg.0 rval=$EG\n"
376          append indeck "dbase modify name=library/physics/silicon/affinity rval=$affinity\n"
377          append indeck "dbase modify name=library/physics/silicon/epsilon rval=$ep_sil\n"
378          append indeck "dbase modify name=library/physics/oxide/epsilon rval=$ep_ox\n"
379          append indeck "dbase modify name=library/physics/silicon/electrons/mobility sval=$mo_el*1.0e8\n"
380          append indeck "dbase modify name=library/physics/silicon/holes/mobility sval=$mo_hole*1.0e8\n"         
381          append indeck "dbase modify name=library/physics/silicon/electrons/tau0 rval=$tau0n\n"
382          append indeck "dbase modify name=library/physics/silicon/holes/tau0 rval=$tau0p\n"
383          append indeck "dbase modify name=library/physics/silicon/electrons/mn rval=$mn\n"
384          append indeck "dbase modify name=library/physics/silicon/electrons/mn_dos rval=$mn_dos\n"       
385          append indeck "dbase modify name=library/physics/silicon/electrons/vsat rval=$vsatn\n"         
386          append indeck "dbase modify name=library/physics/silicon/electrons/vsat.c0 rval=$vsatn\n"
387          append indeck "dbase modify name=library/physics/silicon/holes/mlh rval=$mlh\n"
388          append indeck "dbase modify name=library/physics/silicon/holes/mhh rval=$mhh\n"
389          append indeck "dbase modify name=library/physics/silicon/holes/mp_dos rval=$mp_dos\n"
390          append indeck "dbase modify name=library/physics/silicon/holes/vsat rval=$vsatp\n"
391          append indeck "dbase modify name=library/physics/silicon/holes/vsat.c0 rval=$vsatp\n"
392          append indeck "include(silicon_poisson)\n"
393          append indeck "include(silicon_dd)\n"
394
395
396if {$device_type=="user_finfet"} {
397         if {$dimension==3} {
398          append indeck "grid dim=$dimension mat=oxide\n"
399          append indeck "+yloc=0.0,$s_b,$center,$d_b,$t_length\n"
400          append indeck "+ydel=[expr {$ls*0.3}],[expr {$lg*0.018}],[expr {$lg*0.18}],[expr {$lg*0.018}],[expr {$ld*0.3}]\n"     
401
402          if {$gate_type=="poly"} {
403            append indeck "+zloc=0.0,[expr $pw],[expr $pw+$tox1],[expr $pw+$tox1+$half_chw],[expr $pw+$tox1+$chw],[expr $pw+$tox1+$chw+$tox2],$total_width\n"
404            append indeck "+zdel=[expr {$pw*0.25}],$ox_grid1,$ox_grid1,[expr {$chw*0.25}],$ox_grid2,$ox_grid2,[expr {$pw*0.25}]\n"
405            append indeck "+xloc=[expr {$fin_height +$top_ox+$pw}],[expr {$sub_ox + $fin_height +$top_ox+$pw}]\n"
406            append indeck "+xdel=[expr {$fin_height*0.3}],[expr {$sub_ox*0.2}]\n\n"
407          } else {
408            append indeck "+zloc=0.0,$tox1,[expr $tox1+$half_chw],[expr $tox1+$chw],$total_width\n"
409            append indeck "+zdel=$ox_grid1,$ox_grid1,[expr {$chw/12}],$ox_grid2,$ox_grid2\n"
410            append indeck "+xloc=[expr {$fin_height +$top_ox+$pw}],[expr {$sub_ox + $fin_height +$top_ox+$pw}]\n"
411            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$sub_ox*0.4}]\n\n"
412          }
413            append indeck "\ndeposit mat=oxide start=0.0,[expr $pw] end=[expr {$source_pos+$drain_pos}],[expr $pw+$tox1] thick=0,[expr {$fin_height*0.5}],$fin_height\n"
414            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$fin_height*0.1}],$top_ox_grid\n\n"
415            append indeck "\ndeposit mat=silicon start=0.0,[expr $pw+$tox1] end=[expr {$source_pos+$drain_pos}],[expr $pw+$tox1+$chw] thick=0,[expr {$fin_height*0.5}],$fin_height\n"
416            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$fin_height*0.1}],$top_ox_grid\n\n"
417            append indeck "\ndeposit mat=oxide start=0.0,[expr $pw+$tox1+$chw] end=[expr {$source_pos+$drain_pos}],[expr $pw+$tox1+$chw+$tox2] thick=0,[expr {$fin_height*0.5}],$fin_height\n"
418            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$fin_height*0.1}],$top_ox_grid\n\n"
419            append indeck "\ndeposit mat=oxide start=0.0,[expr $pw] end=[expr {$source_pos+$drain_pos}],[expr $pw+$tox1+$chw+$tox2] thick=0,$top_ox\n"
420            append indeck "+xdel=$top_ox_grid,$top_ox_grid\n"
421
422          if {$gate_type=="poly"} {
423            append indeck "\n"
424            append indeck "\ndeposit mat=poly start=$s_b,0.0 end=$d_b,$pw thick=0,[expr {$fin_height*0.5}],$fin_height,[expr {$fin_height+$top_ox}]\n"
425            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$fin_height*0.1}],$top_ox_grid,$top_ox_grid\n\n"
426            append indeck "\ndeposit mat=poly start=$s_b,[expr {$pw+$tox1+$chw+$tox2}] end=$d_b,[expr {$pw+$tox1+$chw+$tox2+$pw}] thick=0,[expr {$fin_height*0.5}],$fin_height,[expr {$fin_height+$top_ox}]\n"
427            append indeck "+xdel=[expr {$fin_height*0.2}],[expr {$fin_height*0.1}],$top_ox_grid,$top_ox_grid\n\n"
428            append indeck "\ndeposit mat=poly start=$s_b,0.0 end=$d_b,$total_width thick=0,$pw\n"
429            append indeck "+xdel=$top_ox_grid,[expr {$pw*0.3}]"
430          }
431          if {$gaussian_dop} {
432            append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[[expr {$pw+$top_ox}]:[expr {$fin_height+$pw+$top_ox}]\] yrange=\[$s_b:$d_b\]\n"
433            append indeck "+ zrange=\[$tox1:[expr $tox1+$chw]\] mat=silicon\n"
434            append indeck "field set=ns val=$s_dop_flag$ns*gbox\(X,[expr {$pw+$top_ox}],[expr {$pw+$top_ox+$fin_height}],$pene_ox\)*gbox\(Y,0.0,$s_b,$char_len_source\)*gbox\(Z,$tox1,[expr {$tox1+$half_chw}],$pene_ox\)\n"
435            append indeck "+ mat=silicon\n"
436            append indeck "field set=nd val=$d_dop_flag$nd*gbox\(X,[expr {$pw+$top_ox}],[expr {$pw+$top_ox+$fin_height}],$pene_ox\)*gbox\(Y,$d_b,[expr {$source_pos+$drain_pos}],$char_len_source\)*gbox\(Z,$tox1,[expr {$tox1+$half_chw}],$pene_ox\)\n"
437            append indeck "+ mat=silicon\n"
438          } else {
439            append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[[expr {$pw+$top_ox}]:[expr {$fin_height+$pw+$top_ox}]\] yrange=\[$s_b:$d_b\]\n"
440            append indeck "+ zrange=\[[expr $pw+$tox1]:[expr {$pw+$tox1+$chw}]\] mat=silicon\n"
441            append indeck "field set=ns val=$s_dop_flag$ns xrange=\[[expr {$pw+$top_ox}]:[expr {$fin_height+$pw+$top_ox}]\] yrange=\[0.0:$s_b\] zrange=\[[expr $pw+$tox1]:[expr {$pw+$tox1+$chw}]\]\n"
442            append indeck "+ mat=silicon\n"
443            append indeck "field set=nd val=$d_dop_flag$nd xrange=\[[expr {$pw+$top_ox}]:[expr {$fin_height+$pw+$top_ox}]\] yrange=\[$d_b:[expr {$source_pos+$drain_pos}]\] zrange=\[[expr $pw+$tox1]:[expr {$pw+$tox1+$chw}]\]\n"
444            append indeck "+ mat=silicon\n"
445          }
446          if {$gate_type=="poly"} {
447           append indeck "field set=ppoly val=$poly_dop_flag$n_poly mat=poly\n"
448           }
449           append indeck "field set=netdope val=ns+nd+nch"
450          if {$gate_type=="poly"} { append indeck "+ppoly"}
451           append indeck "\n"
452
453          #define electrodes#
454           append indeck "boundary ymin=0.0 ymax=0.0 xmin=[expr {$pw+$top_ox}] xmax=[expr {$pw+$top_ox+$fin_height}] zmin=[expr {$pw+$tox1}] zmax=[expr {$pw+$tox1+$chw}] name=source\n"
455           append indeck "+ contact\n"
456           if {$gate_type=="metal"} {
457           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$top_ox}] xmax=[expr {$top_ox+$fin_height}] zmin=$total_width zmax=$total_width name=gate\n"
458           append indeck "+ contact workfunc=[expr $workfunc]\n"
459           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$top_ox}] xmax=[expr {$top_ox+$fin_height}] zmin=0.0 zmax=0.0 name=gate\n"
460           append indeck "+ contact workfunc=[expr $workfunc]\n"
461           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=0.0 xmax=0.0 zmin=$tox1 zmax=[expr {$tox1+$chw}] name=gate\n"
462           append indeck "+ contact workfunc=[expr $workfunc]\n"
463           }
464           if {$gate_type=="poly"} {
465           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$top_ox}] xmax=[expr {$top_ox+$fin_height}] zmin=$total_width zmax=$total_width name=gate\n"
466           append indeck "+ contact workfunc=[expr $workfunc]\n"
467           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$top_ox}] xmax=[expr {$top_ox+$fin_height}] zmin=0.0 zmax=0.0 name=gate\n"
468           append indeck "+ contact workfunc=[expr $workfunc]\n"
469           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=0.0 xmax=0.0 zmin=[expr $tox1+$pw] zmax=[expr {$pw+$tox1+$chw}] name=gate\n"
470           append indeck "+ contact workfunc=[expr $workfunc]\n"
471           }
472           append indeck "boundary ymin=[expr {$source_pos+$drain_pos}] ymax=[expr {$source_pos+$drain_pos}] xmin=[expr {$pw+$top_ox}] xmax=[expr {$pw+$top_ox+$fin_height}] zmin=[expr {$pw+$tox1}] zmax=[expr {$pw+$tox1+$chw}] name=drain\n"
473           append indeck "+ contact\n"
474          } elseif {$dimension==2} {
475            if {$gate_type=="poly"} {
476            set amb_leng 0.001
477            set amb_leng_top 0.00
478            append indeck "grid dim=$dimension mat=oxide\n"
479            append indeck "+yloc=0.0,[expr $center-$lg/2.0],$center,[expr $center+$lg/2.0],[expr {$source_pos+$drain_pos}]\n"
480            append indeck "+ydel=[expr {$ls*0.15}],[expr {$lg*0.05}],[expr {$lg*0.15}],[expr {($lg*0.05)}],[expr {$ld*0.15}]\n"
481            append indeck "+xloc=[expr $amb_leng_top+$total_width],[expr $amb_leng_top+$total_width+$amb_leng]\n"
482            append indeck "+xdel=[expr {$pw*0.1}],[expr {$pw*0.1+$amb_leng*0.1}]\n"
483           
484            append indeck "\ndeposit mat=poly start=[expr $center-$lg/2.0]  end=[expr $center+$lg/2.0] thick=0,[expr {$pw}]\n"
485            append indeck "+xdel=[expr {$pw*0.1}],$ox_grid2\n"
486
487            append indeck "\ndeposit mat=oxide start=0.0 end=[expr $center-$lg/2.0] thick=0,$pw\n"
488            append indeck "+xdel=[expr {$pw*0.1}],$ox_grid2\n"
489            append indeck "\ndeposit mat=oxide start=[expr $center+$lg/2.0] end=[expr {$source_pos+$drain_pos}] thick=0,$pw\n"
490            append indeck "+xdel=[expr {$pw*0.1}],$ox_grid2\n"
491
492            append indeck "\ndeposit mat=oxide start=0.0 end=[expr $source_pos+$drain_pos] thick=0,$tox2\n"
493            append indeck "+xdel=$ox_grid2,$ox_grid2\n"
494            append indeck "\ndeposit mat=silicon start=0.0 end=[expr {$source_pos+$drain_pos}] thick=0,$half_chw,$chw\n"
495            append indeck "+xdel=$ox_grid2,[expr {$chw*0.1}],$ox_grid1\n"
496            append indeck "\ndeposit mat=oxide start=0.0 end=[expr {$source_pos+$drain_pos}] thick=0,$tox1\n"
497            append indeck "+xdel=$ox_grid1,$ox_grid1\n"
498
499            append indeck "\ndeposit mat=poly start=[expr $center-$lg/2.0] end=[expr $center+$lg/2.0] thick=0,[expr {$pw}]\n"
500            append indeck "+xdel=$ox_grid1,[expr {$pw*0.1}]\n"
501
502            append indeck "\ndeposit mat=oxide start=0.0 end=[expr $center-$lg/2.0] thick=0,$pw\n"
503            append indeck "+xdel=[expr {$pw*0.1}],$ox_grid1 zipper\n"       
504            append indeck "\ndeposit mat=oxide start=[expr $center+$lg/2.0] end=[expr {$source_pos+$drain_pos}] thick=0,$pw\n"
505            append indeck "+xdel=[expr {$pw*0.1}],$ox_grid1 zipper\n"
506           
507            } elseif {$gate_type=="metal"} {
508            set amb_leng 0.00
509            set amb_leng_top 0.00
510            append indeck "grid dim=$dimension mat=oxide\n"
511            append indeck "+yloc=0.0,$s_b,$center,$d_b,[expr {$source_pos+$drain_pos}]\n"
512            append indeck "+ydel=[expr {$ls*0.15}],[expr {$lg*0.02}],[expr {$lg*0.15}],[expr {($lg*0.02)}],[expr {$ld*0.15}]\n"
513            append indeck "+xloc=[expr {$total_width - $tox2}],$total_width\n"
514            append indeck "+xdel=$ox_grid2,$ox_grid2\n"
515
516            append indeck "\ndeposit mat=silicon start=0.0 end=[expr {$source_pos+$drain_pos}] thick=0,$half_chw,$chw\n"
517            append indeck "+xdel=$ox_grid2,[expr {$chw*0.1}],$ox_grid1\n"
518
519            append indeck "\ndeposit mat=oxide start=0.0 end=[expr {$source_pos+$drain_pos}] thick=0,$tox1\n"
520            append indeck "+xdel=$ox_grid1,$ox_grid1 zipper\n"
521            }
522
523          if {$gaussian_dop} {
524           append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[[expr {$amb_leng_top+$pw+$tox2}]:[expr {$amb_leng_top+$pw+$tox1+$chw}]\] yrange=\[[expr $center-$lg/2.0]:[expr $center+$lg/2.0]\]\n"
525           append indeck "+ mat=silicon\n"
526           append indeck "field set=ns val=$s_dop_flag$ns*gbox\(X,[expr {$amb_leng_top+$pw+$tox1}],[expr {$amb_leng_top+$pw+$tox1+$chw}],$pene_ox\)*gbox\(Y,0.0,[expr $center-$lg/2.0],$char_len_source\)\n"
527           append indeck "+ mat=silicon\n"
528           append indeck "field set=nd val=$d_dop_flag$nd*gbox\(X,[expr {$amb_leng_top+$pw+$tox1}],[expr {$amb_leng_top+$pw+$tox1+$chw}],$pene_ox\)*gbox\(Y,$d_b,[expr {$source_pos+$drain_pos}],$char_len_drain\)\n"
529           append indeck "+ mat=silicon\n\n"
530          } else {
531           append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[[expr {$amb_leng_top+$pw+$tox1}]:[expr {$amb_leng_top+$pw+$tox1+$chw}]\] yrange=\[[expr $center-$lg/2.0]:[expr $center+$lg/2.0]\]\n"
532           append indeck "+ mat=silicon\n"
533           append indeck "field set=ns val=$s_dop_flag$ns xrange=\[[expr {$amb_leng_top+$pw+$tox1}]:[expr {$amb_leng_top+$pw+$tox1+$chw}]\] yrange=\[0.0:[expr $center-$lg/2.0]\]\n"
534           append indeck "+ mat=silicon\n"
535           append indeck "field set=nd val=$d_dop_flag$nd xrange=\[[expr {$amb_leng_top+$pw+$tox1}]:[expr {$amb_leng_top+$pw+$tox1+$chw}]\] yrange=\[[expr $center+$lg/2.0]:[expr {$source_pos+$drain_pos}]\]\n"
536           append indeck "+ mat=silicon\n\n"
537          }
538           if {$gate_type=="poly"} {
539           append indeck "field set=ppoly val=$poly_dop_flag$n_poly mat=poly\n"
540           }
541
542           append indeck "field set=netdope val=ns+nd+nch"
543           if {$gate_type=="poly"} { append indeck "+ppoly"}
544           append indeck "\n"
545
546          #define electrodes#
547           append indeck "\nboundary ymin=0.0 ymax=0.0 xmin=[expr {$amb_leng_top+$pw+$tox1}] xmax=[expr {$amb_leng_top+$pw+$tox1+$chw}] name=source\n"
548           append indeck "+ contact\n"
549           
550           append indeck "boundary ymin=[expr {$source_pos+$drain_pos}] ymax=[expr {$source_pos+$drain_pos}] xmin=[expr {$amb_leng_top+$pw+$tox1}] xmax=[expr {$amb_leng_top+$pw+$tox1+$chw}] name=drain\n"
551           append indeck "+ contact\n"
552
553           if {$gate_type=="poly"} {
554           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=$amb_leng_top xmax=[expr $amb_leng_top+$pw] name=gate\n"
555           append indeck "+ contact workfunc=[expr $workfunc]\n"
556           
557#          append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$amb_leng_top+$total_width-$pw}] xmax=[expr $amb_leng_top+$total_width] name=gate\n"
558#          append indeck "+ contact workfunc=[expr $workfunc]\n"
559           } else {
560           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$total_width-$pw*0.25}] xmax=$total_width name=gate\n"
561           append indeck "+ contact workfunc=[expr $workfunc]\n"
562           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=0.0 xmax=[expr {$pw*0.25}] name=gate\n"
563           append indeck "+ contact workfunc=[expr $workfunc]\n"
564           }
565          }
566}
567
568if {$device_type=="user_nanowire"} {
569        set amb_leng 0.04
570        append indeck "\ngrid dim=2 mat=oxide\n"
571        append indeck "+yloc=0.0,[expr {$center-$lg/2.0}],$center,[expr {$center+$lg/2.0}],$t_length\n"
572        append indeck "+ydel=[expr {$ls*0.3}],[expr {$lg*0.018}],[expr {$lg*0.18}],[expr {$lg*0.018}],[expr {$ld*0.3}]\n" 
573
574
575        if {$gate_type=="poly"} {
576                append indeck "\n+xloc=[expr {$Dch/2.0+$tox+$pw}],[expr {$Dch/2.0+$tox+$pw+$amb_leng}]\n"
577                append indeck "\n+xdel=[expr {$pw/10}],[expr {$amb_leng/5.0}]\n"
578                append indeck "\ndeposit mat=poly start=[expr {$center-$lg/2.0}] end=[expr {$center+$lg/2.0}] thick=0.0,$pw\n"
579                append indeck "\n+xdel=[expr {$pw/10}]\n"
580                append indeck "\ndeposit mat=oxide start=[expr {$center-$lg/2.0}] end=[expr {$center+$lg/2.0}] thick=0,[expr {$tox}]\n"
581                append indeck "\n+xdel=[expr {$tox/4}]\n"
582                append indeck "\ndeposit mat=oxide start=0.0 end=[expr {$center-$lg/2.0}]  thick=0.0,$pw,[expr {$pw+$tox}]\n"
583                append indeck "\n+xdel=[expr {$pw/10}],[expr {$tox/4}],[expr {$tox/4}] zipper\n"
584                append indeck "\ndeposit mat=oxide start=[expr {$center+$lg/2.0}]  end=$t_length thick=0,$pw,[expr {$pw+$tox}]\n"
585                append indeck "\n+xdel=[expr {$pw/10}],[expr {$tox/4}],[expr {$tox/4}] zipper\n"
586
587                append indeck "\ndeposit mat=silicon start=0.0 end=$t_length thick=0,[expr {$Dch/2.0}]\n"
588                append indeck "\n+xdel=[expr {$tox/4}],[expr {$Dch/20.0}]\n"
589        } else {
590#               append indeck "\n+xloc=[expr {$Dch/2.0+$tox+$tox*3}],[expr {$Dch/2.0+$tox+$tox*3+$amb_leng}]\n"
591#               append indeck "\n+xdel=[expr {$tox*4/10}],[expr {$amb_leng/5.0}]\n"
592#               append indeck "\ndeposit mat=oxide start=[expr {$s_b}] end=[expr {$d_b}] thick=0.0,[expr {$tox*3}]\n"
593#               append indeck "\n+xdel=[expr {$tox*3/10}]\n"
594#               append indeck "\ndeposit mat=oxide start=[expr {$s_b}] end=[expr {$d_b}] thick=0,[expr {$tox}]\n"
595#               append indeck "\n+xdel=[expr {$tox/4}]\n"
596#               append indeck "\ndeposit mat=oxide start=0.0 end=[expr {$s_b}] thick=0.0,[expr {$tox*3}],[expr {$tox*3+$tox}]\n"
597#               append indeck "\n+xdel=[expr {$tox*3/10}],[expr {$tox/4}],[expr {$tox/4}] zipper\n"
598#               append indeck "\ndeposit mat=oxide start=[expr {$d_b}] end=$t_length thick=0,[expr {$tox*3}],[expr {$tox*3+$tox}]\n"
599#               append indeck "\n+xdel=[expr {$tox*3/10}],[expr {$tox/4}],[expr {$tox/4}] zipper\n"
600               
601                append indeck "\n+xloc=[expr {$Dch/2.0}],[expr {$Dch/2.0+$tox}]"
602                append indeck "\n+xdel=[expr {$tox/4}],[expr {$tox/4}]"
603                append indeck "\ndeposit mat=silicon start=0.0 end=$t_length thick=0,[expr {$Dch/2.0}]\n"
604                append indeck "\n+xdel=[expr {$tox/4}],[expr {$Dch/20.0}] zipper\n"
605        }
606        if {$gate_type=="poly"} {
607           append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[0.0:[expr {$Dch/2.0}]\] yrange=\[$s_b:$d_b\]\n"
608           append indeck "+ mat=silicon\n"
609        } elseif {$gate_type=="metal"} {
610           append indeck "\nfield set=nch val=$ch_dop_flag$nch xrange=\[0.0:[expr {$Dch/2.0}]\] yrange=\[$s_b:$d_b\]\n"
611           append indeck "+ mat=silicon\n"
612        }
613
614          if {$gaussian_dop} {
615
616           append indeck "field set=ns val=$s_dop_flag$ns*gbox\(X,0.0,[expr {$Dch/2.0}],$pene_ox\)*gbox\(Y,0.0,$s_b,$char_len_source\)\n"
617           append indeck "+ mat=silicon\n"
618           append indeck "field set=nd val=$d_dop_flag$nd*gbox\(X,0.0,[expr {$Dch/2.0}],$pene_ox\)*gbox\(Y,$d_b,[expr {$source_pos+$drain_pos}],$char_len_drain\)\n"
619           append indeck "+ mat=silicon\n\n"
620          } else {
621           append indeck "field set=ns val=$s_dop_flag$ns xrange=\[0.0:[expr {$Dch/2.0}]\] yrange=\[0.0:$s_b\]\n"
622           append indeck "+ mat=silicon\n"
623           append indeck "field set=nd val=$d_dop_flag$nd xrange=\[0.0:[expr {$Dch/2.0}]\] yrange=\[$d_b:[expr {$source_pos+$drain_pos}]\]\n"
624           append indeck "+ mat=silicon\n\n"
625          }
626          if {$gate_type=="poly"} {
627            append indeck "field set=ppoly val=$ch_dop_flag$n_poly mat=poly\n"
628          }
629          if {$gate_type=="poly"} {append indeck "field set=netdope val=nch+ns+nd+ppoly"}
630         
631          if {$gate_type=="metal"} {append indeck "field set=netdope val=ns+nd+nch"}
632
633          append indeck "\n"
634               
635           append indeck "\nboundary ymin=0.0 ymax=0.0 xmin=0.0 xmax=[expr {$Dch/2.0}] name=source\n"
636           append indeck "+ contact\n"
637        if {$gate_type=="poly"} {
638           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$Dch/2.0+$tox}] xmax=[expr {$Dch/2.0+$tox+$pw}] name=gate\n"
639           append indeck "+ contact workfunc=[expr $workfunc]\n"
640        } elseif {$gate_type=="metal"} {
641           append indeck "boundary ymin=[expr {$center-$lg/2.0}] ymax=[expr {$center+$lg/2.0}] xmin=[expr {$Dch/2.0+$tox}] xmax=[expr {$Dch/2.0+$tox}] name=gate\n"
642           append indeck "+ contact workfunc=[expr $workfunc]\n"
643        }
644           append indeck "boundary ymin=[expr {$source_pos+$drain_pos}] ymax=[expr {$source_pos+$drain_pos}] xmin=0.0 xmax=[expr {$Dch/2.0}] name=drain\n"
645           append indeck "+ contact\n"
646}
647
648        if {$device_type=="user_finfet"} {
649                set xposition [expr {$pw+$tox1+$chw/2.0}]
650                if {$gate_type=="poly"} {
651                        set xposition [expr $xposition+$amb_leng_top]
652                }
653        } elseif {$device_type=="user_nanowire"} {
654                set dimension 2
655                set xposition 0.001
656        }
657
658
659          if {$grid} {
660                append indeck "graph gridline\n"
661          } elseif {!$grid} {
662          append indeck "bias initial system=silicon_poisson TKELVIN=$tl\n"
663        if {$plot_d=="x"} {
664          if {$dimension==2} {
665                append indeck "graph quantity=electrons ypos=$center\n"
666                append indeck "graph quantity=holes ypos=$center\n"
667                append indeck "graph quantity=netdope ypos=$center\n"
668          } else {
669                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
670                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
671                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
672          }
673        } elseif {$plot_d=="y"} {
674          if {$dimension==2} {
675                append indeck "graph quantity=electrons xpos=$xposition\n"
676                append indeck "graph quantity=holes xpos=$xposition\n"
677                append indeck "graph quantity=netdope xpos=$xposition\n"
678          } else {
679                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
680                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
681                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
682          }
683        } elseif {$plot_d=="z"} {
684          if {$dimension==2} {
685                append indeck "graph quantity=electrons xpos=$xposition\n"
686                append indeck "graph quantity=holes xpos=$xposition\n"
687                append indeck "graph quantity=netdope xpos=$xposition\n"
688          } else {
689                append indeck "graph quantity=electrons zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
690                append indeck "graph quantity=holes zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
691                append indeck "graph quantity=netdope zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
692          }
693        }
694        if {$plot_psi=="x"} {
695          if {$dimension==2} {
696                append indeck "graph quantity=psi ypos=$center\n"
697                } else {
698                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
699          }
700        } elseif {$plot_psi=="y"} {
701          if {$dimension==2} {
702                append indeck "graph quantity=psi xpos=$xposition\n"
703          } else {
704                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
705          }
706        } elseif {$plot_psi=="z"} {
707          if {$dimension==2} {
708                append indeck "graph quantity=psi xpos=$xposition\n"
709          } else {
710                append indeck "graph quantity=psi zpos=[expr $tox1+$half_chw] ypos=$center\n"
711          }
712        }
713
714        if {!$equil} {
715          if {$vs!=0} {
716          append indeck "bias system=silicon_dd elec=source voltage=$vs TKELVIN=$tl\n"
717          }
718          if {$vd!=0} {
719          append indeck "bias system=silicon_dd elec=drain voltage=$vd TKELVIN=$tl\n"
720          }
721          if {$vg!=0} {
722          append indeck "bias system=silicon_dd elec=gate voltage=$vg TKELVIN=$tl\n"
723          }
724          set vstart $vg
725          set vstep_sz 0
726          set vstep_nm 0
727          set vhigh 0
728          set other_vstart $vd
729          set other_vstep_sz 0
730          set other_vstep_nm 0
731          set outer_voltage $vd
732          set inner_voltage $vg
733          set vgfinal [expr {$vg+$ngstep*$vgstep}]
734          set vdfinal [expr {$vd+$ndstep*$vdstep}]
735        if {$ngstep!=0 || $vgstep!=0} {
736         if {$ndstep!=0 || $vdstep!=0} {
737                if {$plot_iv} {
738                        append indeck "graph iv outfile=graph[pid].iv\n"
739                }
740         }
741        }
742
743          if {$ngstep!=0 && $vgstep!=0} {
744              if {$ndstep!=0 && $vdstep!=0} {
745          if {$inner_loop_voltage=="V_drain"} {
746        for {set ii 0} {$ii <= $ngstep} {incr ii} {
747          append indeck "bias system=silicon_dd elec=gate,drain voltage=[expr {$vg+$vgstep*$ii}],$vd TKELVIN=$tl\n"
748          set vstart $vd
749          set vstep_sz $vdstep
750          set vstep_nm $ndstep
751          set vhigh [expr {$vd+$vdstep*$ndstep}]
752          set other_vstart $vg
753          set other_vstep_sz $vgstep
754          set other_vstep_nm $ngstep
755          set bias_counter 0
756          while { $bias_counter <= $ndstep } {
757                append indeck "bias system=silicon_dd elec=drain voltage=[expr {$vd+$vdstep*$bias_counter}] TKELVIN=$tl\n"
758                if {$ii==0 || $ii == $ngstep } {
759                        if {$plot_d=="x"} {
760                                if {$dimension==2} {
761                                append indeck "graph quantity=electrons ypos=$center\n"
762                                append indeck "graph quantity=holes ypos=$center\n"
763                                append indeck "graph quantity=netdope ypos=$center\n"
764                                        } else {
765                                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
766                                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
767                                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
768                                }
769                        } elseif {$plot_d=="y"} {
770                                if {$dimension==2} {
771                                        append indeck "graph quantity=electrons xpos=$xposition\n"
772                                        append indeck "graph quantity=holes xpos=$xposition\n"
773                                        append indeck "graph quantity=netdope xpos=$xposition\n"
774                                } else {
775                                        append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
776                                        append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
777                                        append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
778                                }
779                        } elseif {$plot_d=="z"} {
780                                if {$dimension==2} {
781                                        append indeck "graph quantity=electrons xpos=$xposition\n"
782                                        append indeck "graph quantity=holes xpos=$xposition\n"
783                                        append indeck "graph quantity=netdope xpos=$xposition\n"
784                                } else {
785                                        append indeck "graph quantity=electrons zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
786                                        append indeck "graph quantity=holes zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
787                                        append indeck "graph quantity=netdope zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
788                                }
789                        }
790                        if {$plot_psi=="x"} {
791                                if {$dimension==2} {
792                                        append indeck "graph quantity=psi ypos=$center\n"
793                                        } else {
794                                        append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
795                                }
796                        } elseif {$plot_psi=="y"} {
797                                if {$dimension==2} {
798                                        append indeck "graph quantity=psi xpos=$xposition\n"
799                                } else {
800                                        append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
801                                }
802                        } elseif {$plot_psi=="z"} {
803                                if {$dimension==2} {
804                                        append indeck "graph quantity=psi xpos=$xposition\n"
805                                } else {
806                                        append indeck "graph quantity=psi zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
807                                }
808                        }                                                                       
809                        }
810                incr bias_counter
811          }
812          if {$plot_iv} {
813                append indeck "graph iv outfile=graph[pid]-[expr {$ii+1}].iv\n"
814          }
815        }
816          } elseif {$inner_loop_voltage=="V_gate"} {
817        for {set ii 0} {$ii <= $ndstep} {incr ii} {
818          append indeck "bias system=silicon_dd elec=drain,gate voltage=[expr {$vd+$vdstep*$ii}],$vg TKELVIN=$tl\n"
819          set bias_counter 0                                                           
820          set vstart $vg
821          set vstep_sz $vgstep
822          set vstep_nm $ngstep
823          set other_vstart $vd
824          set other_vstep_sz $vdstep
825          set other_vstep_nm $ndstep
826          set vhigh [expr {$vg+$vgstep*$ngstep}]
827          while { $bias_counter <= $ngstep } {                                                                 
828                append indeck "bias system=silicon_dd elec=gate voltage=[expr {$vg+$vgstep*$bias_counter}] TKELVIN=$tl\n"
829                if {$ii == $ndstep || $ii == 0} {
830                        if {$plot_d=="x"} {
831                                if {$dimension==2} {
832                                append indeck "graph quantity=electrons ypos=$center\n"
833                                append indeck "graph quantity=holes ypos=$center\n"
834                                append indeck "graph quantity=netdope ypos=$center\n"
835                                        } else {
836                                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
837                                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
838                                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
839                                }
840                        } elseif {$plot_d=="y"} {
841                                if {$dimension==2} {
842                                        append indeck "graph quantity=electrons xpos=$xposition\n"
843                                        append indeck "graph quantity=holes xpos=$xposition\n"
844                                        append indeck "graph quantity=netdope xpos=$xposition\n"
845                                } else {
846                                        append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
847                                        append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
848                                        append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
849                                }
850                        } elseif {$plot_d=="z"} {
851                                if {$dimension==2} {
852                                        append indeck "graph quantity=electrons xpos=$xposition\n"
853                                        append indeck "graph quantity=holes xpos=$xposition\n"
854                                        append indeck "graph quantity=netdope xpos=$xposition\n"
855                                } else {
856                                        append indeck "graph quantity=electrons zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
857                                        append indeck "graph quantity=holes zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
858                                        append indeck "graph quantity=netdope zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
859                                }
860                        }
861                        if {$plot_psi=="x"} {
862                                if {$dimension==2} {
863                                        append indeck "graph quantity=psi ypos=$center\n"
864                                        } else {
865                                        append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
866                                }
867                        } elseif {$plot_psi=="y"} {
868                                if {$dimension==2} {
869                                        append indeck "graph quantity=psi xpos=$xposition\n"
870                                } else {
871                                        append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
872                                }
873                        } elseif {$plot_psi=="z"} {
874                                if {$dimension==2} {
875                                        append indeck "graph quantity=psi xpos=$xposition\n"
876                                } else {
877                                        append indeck "graph quantity=psi zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
878                                }
879                        }
880                }
881                incr bias_counter
882          }
883          if {$plot_iv} {
884                append indeck "graph iv outfile=graph[pid]-[expr {$ii+1}].iv\n"
885          }
886               }
887              }
888           } else {
889          set bias_counter 0
890          set bias ""
891          set vstart $vg
892          set vstep_sz $vgstep
893          set vstep_nm $ngstep
894          set other_vstart $vd
895          set other_vstep_sz 0
896          set other_vstep_nm 0
897          set vhigh [expr {$vg+$vgstep*$ngstep}]
898
899        while { $bias_counter <= $ngstep } {
900
901          append indeck "bias system=silicon_dd elec=gate voltage=[expr {$vg+$vgstep*$bias_counter}] TKELVIN=$tl\n"
902        if {$plot_d=="x"} {
903          if {$dimension==2} {
904          append indeck "graph quantity=electrons ypos=$center\n"
905          append indeck "graph quantity=holes ypos=$center\n"
906          append indeck "graph quantity=netdope ypos=$center\n"
907                } else {
908          append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
909          append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
910          append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
911          }
912        } elseif {$plot_d=="y"} {
913          if {$dimension==2} {
914                append indeck "graph quantity=electrons xpos=$xposition\n"
915                append indeck "graph quantity=holes xpos=$xposition\n"
916                append indeck "graph quantity=netdope xpos=$xposition\n"
917          } else {
918                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
919                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
920                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
921          }
922        } elseif {$plot_d=="z"} {
923          if {$dimension==2} {
924                append indeck "graph quantity=electrons xpos=$xposition\n"
925                append indeck "graph quantity=holes xpos=$xposition\n"
926                append indeck "graph quantity=netdope xpos=$xposition\n"
927          } else {
928                append indeck "graph quantity=electrons zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
929                append indeck "graph quantity=holes zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
930                append indeck "graph quantity=netdope zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
931          }
932        }
933        if {$plot_psi=="x"} {
934          if {$dimension==2} {
935                append indeck "graph quantity=psi ypos=$center\n"
936                } else {
937                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
938          }
939        } elseif {$plot_psi=="y"} {
940          if {$dimension==2} {
941                append indeck "graph quantity=psi xpos=$xposition\n"
942          } else {
943                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
944          }
945        } elseif {$plot_psi=="z"} {
946          if {$dimension==2} {
947                append indeck "graph quantity=psi xpos=$xposition\n"
948          } else {
949                append indeck "graph quantity=psi zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
950          }
951        }
952        incr bias_counter
953          }
954          set inner_loop_voltage "V_gate"
955          set outer_loop_voltage "V_drain"
956          if {$plot_iv} {
957                append indeck "graph iv outfile=graph[pid]-1.iv\n"
958          }
959        }
960        } elseif {$ndstep!=0 && $vdstep!=0} {
961          set bias_counter 0
962          set bias ""
963          while { $bias_counter <= $ndstep } {
964          set vstart $vd
965          set vstep_sz $vdstep
966          set vstep_nm $ndstep
967          set other_vstart $vg
968          set other_vstep_sz 0
969          set other_vstep_nm 0
970          set vhigh [expr {$vd+$vdstep*$ndstep}]
971          append indeck "bias system=silicon_dd elec=drain voltage=[expr {$vd+$vdstep*$bias_counter}] TKELVIN=$tl\n"
972        if {$plot_d=="x"} {
973          if {$dimension==2} {
974          append indeck "graph quantity=electrons ypos=$center\n"
975          append indeck "graph quantity=holes ypos=$center\n"
976          append indeck "graph quantity=netdope ypos=$center\n"
977                } else {
978          append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
979          append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
980          append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
981          }
982        } elseif {$plot_d=="y"} {
983          if {$dimension==2} {
984                append indeck "graph quantity=electrons xpos=$xposition\n"
985                append indeck "graph quantity=holes xpos=$xposition\n"
986                append indeck "graph quantity=netdope xpos=$xposition\n"
987          } else {
988                append indeck "graph quantity=electrons xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
989                append indeck "graph quantity=holes xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
990                append indeck "graph quantity=netdope xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
991          }
992        } elseif {$plot_d=="z"} {
993          if {$dimension==2} {
994                append indeck "graph quantity=electrons xpos=$xposition\n"
995                append indeck "graph quantity=holes xpos=$xposition\n"
996                append indeck "graph quantity=netdope xpos=$xposition\n"
997          } else {
998                append indeck "graph quantity=electrons zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
999                append indeck "graph quantity=holes zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
1000                append indeck "graph quantity=netdope zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
1001          }
1002        }
1003        if {$plot_psi=="x"} {
1004          if {$dimension==2} {
1005                append indeck "graph quantity=psi ypos=$center\n"
1006                } else {
1007                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] ypos=$center\n"
1008          }
1009        } elseif {$plot_psi=="y"} {
1010          if {$dimension==2} {
1011                append indeck "graph quantity=psi xpos=$xposition\n"
1012          } else {
1013                append indeck "graph quantity=psi xpos=[expr {$pw+$top_ox+$fin_height/2.0}] zpos=[expr $pw+$tox1+$half_chw]\n"
1014          }
1015        } elseif {$plot_psi=="z"} {
1016          if {$dimension==2} {
1017                append indeck "graph quantity=psi xpos=$xposition\n"
1018          } else {
1019                append indeck "graph quantity=psi zpos=[expr $pw+$tox1+$half_chw] ypos=$center\n"
1020          }
1021        }
1022        incr bias_counter
1023          }
1024          set inner_loop_voltage "V_drain"
1025          set outer_loop_voltage "V_gate"
1026          if {$plot_iv} {
1027                append indeck "graph iv outfile=graph[pid]-1.iv\n"
1028          }
1029          }
1030        } #equil
1031        if {$plot_d=="2D" || $plot_d=="3D"} {
1032          set plot_dimen $plot_d
1033          append indeck "graph quantity=holes color contour\n"
1034          append indeck "graph quantity=electrons color contour\n"
1035          append indeck "graph quantity=psi color contour\n"
1036          append indeck "graph quantity=netdope color contour\n"
1037        }
1038        if {$plot_psi=="2D" || $plot_psi=="3D"} {
1039          set plot_dimen $plot_psi
1040          append indeck "graph quantity=psi color contour\n"
1041        }
1042        } #grid
1043
1044        if {$inner_loop_voltage=="V_drain"} {
1045          set outer_loop_voltage "V_gate"
1046        } else {
1047          set outer_loop_voltage "V_drain"
1048        }
1049        set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
1050        set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]
1051        set which_curr "I[string index $outer_loop_voltage 2]"
1052
1053
1054        # make sure we can execute programs relative to this dir
1055        set env(PATH) "[file dirname [info script]]:$env(PATH)"
1056
1057        set datafiles ""
1058        set counter 0
1059
1060        #
1061        # Scan through the entire input deck and look for "graph" and "dump"
1062        # commands.  Foreach each graph/dump step, create the output files
1063        # that Rappture will use below to extract output for plotting.  Use
1064        # clues from the bias/solve commands leading to each graph/dump to
1065        # annotate the solution results.
1066        #
1067        set gdline {(^|\n)[ \t]*(graph|dump)[^\n]+(\n|$)}
1068        set anline {(^|\n)[ \t]*(bias|solve)[^\n]+(\n|$)}
1069        set label "initial condition"
1070        set lastdump ""
1071        set newdeck ""
1072        while {[regexp -indices -nocase $gdline $indeck match]} {
1073            foreach {i0 i1} $match break
1074            if {[string index $indeck $i0] == "\n"} { incr i0 }
1075            if {[string index $indeck $i1] == "\n"} { incr i1 -1 }
1076
1077            set analysis [string range $indeck 0 [expr {$i0-1}]]
1078            set cmd [string range $indeck $i0 $i1]
1079            set indeck [string range $indeck [expr {$i1+2}] end]
1080
1081            #
1082            # If we're actually doing some analysis here (something
1083            # besides graphing/dumping and not a comment) then set the
1084            # lastdump back to "".  We should generate a dump file the
1085            # next time we encounter a graph/dump command.
1086            #
1087            if {[regexp {(^|\n)[ \t]*[^#]} $analysis]} {
1088        set lastdump ""
1089            }
1090
1091            #
1092            # Look for a "solve" or "bias" command in the analysis
1093            # section above the graph/dump command.  If there isn't
1094            # one, then we may be handling the second graph/dump command
1095            # in a row; in that case, default to the previous label.
1096            #
1097            if {[string length [string trim $analysis]] == 0} {
1098        # use the previous label
1099            } elseif {[regexp -indices -nocase $anline $analysis match]} {
1100        foreach {a0 a1} $match break
1101        if {[string index $indeck $a0] == "\n"} { incr a0 }
1102        if {[string index $indeck $a1] == "\n"} { incr a1 -1 }
1103        set label [string trim [string range $analysis $a0 $a1]]
1104
1105        #
1106        # BE CAREFUL:
1107        # Make sure we get the *last* solve/bias command in
1108        # the analysis section, since that's the one we'll
1109        # actually be plotting.
1110        #
1111        set rest [string range $analysis [expr {$a1+1}] end]
1112        while {[regexp -indices -nocase $anline $rest match]} {
1113            foreach {a0 a1} $match break
1114            if {[string index $indeck $a0] == "\n"} { incr a0 }
1115            if {[string index $indeck $a1] == "\n"} { incr a1 -1 }
1116            set label [string trim [string range $rest $a0 $a1]]
1117            set rest [string range $rest [expr {$a1+1}] end]
1118        }
1119            } else {
1120        set label "initial condition"
1121            }
1122
1123            if {[regexp -nocase {^[ \t]*graph[ \t]+iv} $cmd]} {
1124        #
1125        # Handle "graph iv" commands
1126        #
1127          append newdeck $analysis
1128          append newdeck "# modified automatically for nanoHUB:\n"
1129          append newdeck "# $cmd\n"
1130
1131        if {[regexp -indices -nocase {outfile=([^ \t\n]+)} $cmd match arg]} {
1132            foreach {a0 a1} $arg break
1133            set file "graph[pid]-[incr counter].iv"
1134            lappend datafiles $file $label
1135            set cmd [string replace $cmd $a0 $a1 $file]
1136        } else {
1137            set file "graph[pid]-[incr counter].iv"
1138            lappend datafiles $file $label
1139            append cmd " outfile=$file"
1140        }
1141          append newdeck $cmd "\n"
1142            } elseif {[regexp -nocase {^[ \t]*graph[ \t]+grid} $cmd]} {
1143          append newdeck $analysis
1144          append newdeck "# modified automatically for nanoHUB:\n"
1145          append newdeck "# $cmd\n"
1146
1147        set file "grid[pid]-[incr counter].gr"
1148        lappend datafiles $file $label
1149          append newdeck "dump grid outfile=$file\n"
1150            } elseif {[regexp -nocase {^[ \t]*graph} $cmd]} {
1151          append newdeck $analysis
1152          append newdeck "# modified automatically for nanoHUB:\n"
1153          append newdeck "# $cmd\n"
1154
1155        set field ""
1156        if {[regexp -indices -nocase {ele(m(e(nt?)?)?)?=|qu(a(n(t(i(ty?)?)?)?)?)?=} $cmd match]} {
1157            foreach {a0 a1} $match break
1158            set rest [string range $cmd [expr {$a1+1}] end]
1159            regexp {[^ \t]+} $rest field
1160        }
1161
1162        if {[regexp -indices -nocase {xp(o(s(i(t(i(on?)?)?)?)?)?)?=[^ \t]+|yp(o(s(i(t(i(on?)?)?)?)?)?)?=[^ \t]+|xmin?=[^ \t]+|xmax?=[^ \t]+|ymin?=[^ \t]+|ymax?=[^ \t]+} $cmd match]} {
1163
1164            foreach {a0 a1} $match break
1165            set cut [string range $cmd $a0 $a1]
1166
1167            # look for any more position parameters
1168            set rest [string range $cmd [expr {$a1+1}] end]
1169            while {[regexp -indices -nocase {xp(o(s(i(t(i(on?)?)?)?)?)?)?=[^ \t]+|yp(o(s(i(t(i(on?)?)?)?)?)?)?=[^ \t]+|xmin?=[^ \t]+|xmax?=[^ \t]+} $rest match]} {
1170          foreach {a0 a1} $match break
1171          append cut " " [string range $rest $a0 $a1]
1172          set rest [string range $rest [expr {$a1+1}] end]
1173            }
1174
1175            #
1176            # 1D slice of a 2D plot.  Use the "print outfile=xxx"
1177            # feature to capture the data.
1178            #
1179            if {[regexp -indices -nocase {outfile=([^ \t\n]+)} $cmd match arg]} {
1180          foreach {a0 a1} $arg break
1181          set file "graph[pid]-$field-[incr counter].xy"
1182          lappend datafiles $file "$label (at $cut)"
1183          set cmd [string replace $cmd $a0 $a1 $file]
1184            } else {
1185          set file "graph[pid]-$field-[incr counter].xy"
1186          lappend datafiles $file "$label (at $cut)"
1187          append cmd " outfile=$file"
1188            }
1189            if {![regexp -nocase {[ \t]print} $cmd]} {
1190          regsub -nocase {outfile=} $cmd {print \0} cmd
1191            }
1192            append newdeck $cmd "\n"
1193        } else {
1194            #
1195            # Misc graph command.  Do a dump and plot those quantities.
1196            #
1197            if {"" == $lastdump} {
1198          set file "dump[pid]-[incr counter].dmp"
1199          lappend datafiles $file $label
1200
1201          append newdeck "dump solution outfile=$file\n"
1202          set lastdump $file
1203            }
1204            if {"" != $field} {
1205          lappend quantities($lastdump) $field
1206            }
1207        }
1208            } elseif {[regexp -nocase {^[ \t]*dump.+solution} $cmd]} {
1209          append newdeck $analysis
1210          append newdeck "# modified automatically for nanoHUB:\n"
1211          append newdeck "# $cmd\n"
1212
1213        if {[regexp -indices -nocase {outfile=([^ \t\n]+)} $cmd match arg]} {
1214            foreach {a0 a1} $arg break
1215            set file "dump[pid]-[incr counter].dmp"
1216            lappend datafiles $file $label
1217            set cmd [string replace $cmd $a0 $a1 $file]
1218        } else {
1219            set file "dump[pid]-[incr counter].dmp"
1220            lappend datafiles $file $label
1221            append cmd " outfile=$file"
1222        }
1223          append newdeck $cmd "\n"
1224            } elseif {[regexp -nocase {^[ \t]*dump.+(dx|ucd)} $cmd]} {
1225        #
1226        # HANDLE DX OUTPUTS
1227        #
1228          append newdeck $analysis
1229          append newdeck "# modified automatically for nanoHUB:\n"
1230          append newdeck "# $cmd\n"
1231
1232        set field ""
1233        if {[regexp -indices -nocase {field=([^ \t\n]+)} $cmd match arg]} {
1234            foreach {a0 a1} $arg break
1235            set field [string range $cmd $a0 $a1]
1236        }
1237
1238        set file "dx[pid]-$field-[incr counter].dx"
1239        lappend datafiles $file $label
1240        if {"" != $field} {
1241            set cmd "dump field=$field dx outfile=$file"
1242        } else {
1243            set cmd "dump solution dx outfile=$file"
1244        }
1245          append newdeck $cmd "\n"
1246            } else {
1247          append newdeck $analysis $cmd "\n"
1248            }
1249        }
1250
1251        #
1252        # If the last little bit has a bias/solve command, then add
1253        # one last dump command.
1254        #
1255        if {[regexp -indices -nocase $anline $indeck match]} {
1256            foreach {a0 a1} $match break
1257            if {[string index $indeck $a0] == "\n"} { incr a0 }
1258            if {[string index $indeck $a1] == "\n"} { incr a1 -1 }
1259            set label [string range $indeck $a0 $a1]
1260
1261            set file "dump[pid]-[incr counter].dmp"
1262            lappend datafiles $file $label
1263
1264            append newdeck $indeck "\n"
1265            append newdeck "# added automatically for nanoHUB:\n"
1266            append newdeck "dump solution outfile=$file"
1267        } else {
1268            append newdeck $indeck
1269        }
1270
1271        set deckfile "batch[pid].in"
1272        set fid [open $deckfile w]
1273        puts $fid $newdeck
1274        close $fid
1275
1276        #
1277        # Execute batch tool with the input deck we just built...
1278        #
1279        set status [catch {Rappture::exec prophet $deckfile} out]
1280
1281##################Output part for PROPHET#######################
1282
1283        $opt put output.time [clock format [clock seconds]]
1284        $opt put output.log $out
1285}
1286        if {$status != 0} {
1287            puts stderr $out
1288            $opt put output.status "failed"
1289        } else {
1290            $opt put output.status "ok"
1291
1292            #
1293            # Add spreadsheet files to datafile list
1294            #
1295            foreach ssfile [glob -nocomplain *.ss] {
1296        lappend datafiles $ssfile [file rootname $ssfile]
1297            }
1298
1299
1300            #
1301            # Pick apart the output in the various data files.
1302            #
1303            set N 0
1304            set Nxy 0
1305            set Nxychr 0
1306            set Nxypot 0
1307            set vpotcounter 0
1308            set vchrcounter 0
1309            foreach {file label} $datafiles {
1310        if {$device_type=="user_finfet" || $device_type=="user_nanowire"} {
1311                if {[catch {open $file r} fid]} {
1312                    # skip any file we can't open -- prophet may have exited early
1313                    continue
1314                }
1315        } elseif {$device_type=="Dp1"} {
1316                if {[catch {open $dir/../examples/Dp45x30PRO/$file r} fid]} {
1317                    # skip any file we can't open -- prophet may have exited early
1318                    continue
1319                }
1320        }
1321        set info [read $fid]
1322        close $fid
1323
1324        if {[string match *.dmp $file]} {
1325            #
1326            # Extract cloud/fields from DUMP files.
1327            #
1328            # find the "field" lines...
1329            set fields ""
1330            while {[string length $info] > 0} {
1331          set line [nextline info]
1332          if {[regexp {^region} $line]} {
1333              continue
1334          }
1335          if {[regexp {^field} $line]} {
1336              set f [lindex $line 5]
1337              lappend fields $f
1338              set fvalues($f) ""
1339          } elseif {[regexp {^=+Nodes} $line]} {
1340              break
1341          }
1342            }
1343
1344            # extract node/field information
1345            set xyz ""
1346            while {[string length $info] > 0} {
1347          set line [nextline info]
1348          if {![regexp {^Node} $line]} {
1349              continue
1350          }
1351          set x [lindex $line 6]
1352          set y [lindex $line 7]
1353          set z [lindex $line 8]
1354          append xyz "${x}um ${y}um ${z}um\n"
1355
1356          set col 9
1357          foreach f $fields {
1358              set v [lindex $line [incr col]]
1359              if {"" != $v} {
1360          append fvalues($f) $v "\n"
1361              }
1362          }
1363            }
1364
1365            $opt put output.cloud(m$N).units "um"
1366            $opt put output.cloud(m$N).points [string trim $xyz]
1367
1368            foreach f $fields {
1369          #
1370          # Have a specific list of quantity=XXX choices
1371          # for this file?  Then skip anything that wasn't
1372          # specifically requested.
1373          #
1374          if {[info exists quantities($file)]
1375                && [lsearch $quantities($file) $f] < 0} {
1376              continue
1377          }
1378
1379          #
1380          # There should only be one "dump" per run.
1381          # If there's more than one, then put all quantities
1382          # into the same <group> so that Rappture will put
1383          # them all on the same plot.  Label each quantity
1384          # according to the solution conditions.
1385          #
1386          if {[string length $fvalues($f)] > 0} {
1387          if {$f=="psi"} {
1388                set mf "$plot_dimen Electrostatic Potential"
1389          }
1390          if {$f=="netdope"} {
1391                set mf "$plot_dimen Doping Density"
1392          }
1393          if {$f=="electrons"} {
1394                set mf "$plot_dimen Electron Density"
1395          }
1396          if {$f=="holes"} {
1397                set mf "$plot_dimen Hole Density"
1398          }
1399          if {$equil} {
1400                        append mf " at equilibrium in PROPHET"
1401          } else {
1402                        append mf " at applied bias Vd=$vdfinal Vg=$vgfinal in PROPHET"
1403          }
1404            $opt put output.field($f-$N).about.group $mf
1405            $opt put output.field($f-$N).about.label $label
1406            $opt put output.field($f-$N).component.mesh \
1407          output.cloud(m$N)
1408            $opt put output.field($f-$N).component.values \
1409          $fvalues($f)
1410          }
1411            }
1412        } elseif {[string match *.iv $file]} {
1413            #
1414            # Extract columns from the GRAPH IV files.
1415            #
1416            # first line determines the field labels...
1417            set line [string trim [nextline info]]
1418            while {"" == $line && [string length $info] > 0} {
1419          set line [string trim [nextline info]]
1420            }
1421
1422            set fields ""
1423            foreach field $line {
1424          # trim off (#) part of field names like V_cathode(2)
1425          if {[regexp {(.+)\([0-9]+\)} $field match name]} {
1426              set field $name
1427          }
1428          lappend fields $field
1429          set fvalues($field) ""
1430            }
1431
1432            # extract values for all field columns
1433            while {[string length $info] > 0} {
1434          set line [string trim [nextline info]]
1435          if {"" == $line} {
1436              continue
1437          }
1438
1439          set col -1
1440          foreach f $fields {
1441              set v [lindex $line [incr col]]
1442              if {"" != $v} {
1443              lappend fvalues($f) $v
1444              }
1445          }
1446            }
1447
1448            #
1449            # Look for duplicate values at the start of Col#0 list.
1450            # If found, then eliminate the unnecessary data.  There
1451            # are two cases where this happens:
1452            #   1) There only two time points (0 0) and Prophet is
1453            #      doing an "initial solution".  In that case,
1454            #      eliminate the first row from all columns.
1455            #   2) There are more than two time points, but they're
1456            #      all zero.  In that case, time is irrelevant.
1457            #      The next non-zero column to the right of time
1458            #      should be treated as "column #0" (e.g., IV plot)
1459            #
1460            while {[llength $fields] > 0} {
1461          set col0 [lindex $fields 0]
1462          set keep 0
1463          if {[info exists fvalues($col0)]} {
1464              foreach v $fvalues($col0) {
1465                if {$v != 0} {
1466                    set keep 1
1467                    break
1468                }
1469              }
1470              if {!$keep && [llength $fvalues($col0)] == 2} {
1471                # time {0 0} and initial solution...
1472                foreach f $fields {
1473                    # strip first row of 0's out
1474                    if {[info exists fvalues($f)]} {
1475                        set fvalues($f) [lrange $fvalues($f) 1 end]
1476                    }
1477                }
1478                break
1479              }
1480          }
1481          if {$keep} {
1482              break
1483          }
1484          catch {unset fvalues($col0)}
1485          set fields [lrange $fields 1 end]
1486          set firsttime 0
1487            }
1488            set keep 0
1489            foreach f $fields {
1490
1491                if {[lindex $fvalues($f) 0]!=0.0} {
1492                        set keep 1
1493                }
1494             }
1495             foreach f $fields {
1496                    if {$keep==0} {
1497                        set fvalues($f) [lrange $fvalues($f) 1 end]
1498                    }
1499             }
1500            #
1501            # Now, save all results to XML as curves...
1502            #
1503            #[lindex $fields 2]
1504            if {[string equal -nocase $col0 time]} {
1505          set xunits "s"
1506            } else {
1507          set xunits ""
1508            }
1509          set f $which_current
1510          #
1511          # There should only be one "graph iv" per run.
1512          # If there's more than one, then put all quantities
1513          # into the same <group> so that Rappture will put
1514          # them all on the same plot.  Label each quantity
1515          # according to the solution conditions.
1516          set xlabel $inner_loop_voltage
1517            if {[string equal -nocase $col0 time]} {
1518          set xunits "s"
1519            } else {
1520          set xunits ""
1521            }
1522
1523          $opt put output.curve($f-$N).about.group "IV Characteristics ($which_curr-$inner_volt)"               
1524                                       
1525            foreach x $fvalues($outer_loop_voltage) {
1526          set counter 0
1527          while {$counter <= $other_vstep_nm} {
1528                set vdx_s [expr {$other_vstart+$counter*$other_vstep_sz}]
1529                if {[expr {abs($x - $vdx_s)}]<1e-15} {
1530                        set outer_voltage [expr double($x)]
1531                }
1532                incr counter
1533          }
1534            }
1535
1536          $opt put output.curve($f-$N).about.label "IV for $outer_volt=$outer_voltage in PROPHET"
1537          $opt put output.curve($f-$N).xaxis.label $inner_volt
1538
1539          if {"" != $xunits} {
1540              $opt put output.curve($f-$N).xaxis.units $xunits
1541          }
1542
1543          if {[regexp {[Vv]} [string index $xlabel 0]]} {
1544              $opt put output.curve($f-$N).xaxis.units "V"
1545          }
1546
1547          $opt put output.curve($f-$N).yaxis.label $which_curr
1548
1549       
1550          if {[regexp {[Vv]} [string index $f 0]]} {
1551              $opt put output.curve($f-$N).yaxis.units "V"
1552          } elseif {[regexp {[Jj]} [string index $f 0]]} {
1553                if {$dimension==2} {
1554                        $opt put output.curve($f-$N).yaxis.units "A/um"
1555                } elseif {$dimension==3} {
1556                        $opt put output.curve($f-$N).yaxis.units "A"
1557                }
1558          }
1559
1560          set i_counter 0
1561          set iv ""
1562          set o_counter 0
1563          set counter 0
1564              foreach x $fvalues($xlabel) y $fvalues($f) {
1565          set ay [expr {abs($y)}]
1566                set vdx_s [expr {$vstart+$counter*$vstep_sz}]
1567          if {[expr {abs($x-double($vdx_s))}]<1e-10 \
1568                && [expr {abs($outer_voltage-double([lindex $fvalues($outer_loop_voltage) $o_counter]))}]<1e-10} {
1569                  if {$i_counter == 0} {
1570                        set x_prev $x
1571                        $opt put -append yes \
1572                                output.curve($f-$N).component.xy "$x $y\n"
1573                        append iv "$x $y\n"
1574                        incr i_counter
1575                        incr counter
1576                  } elseif {$x != $x_prev} {
1577                    $opt put -append yes \
1578                        output.curve($f-$N).component.xy "$x $y\n"
1579                        append iv "$x $y\n"
1580                        set x_prev $x
1581                        incr i_counter
1582                        incr counter
1583                  }
1584            }
1585          incr o_counter
1586               }
1587        #foreach
1588
1589         
1590        if {$inner_loop_voltage == "V_gate"} {
1591           set itc 0
1592          foreach {x y} $iv {
1593            set ay [expr {abs($y)}]
1594            set itc_prev 0
1595            set counter 1
1596            if {$ay < $aI_threshold } {
1597          if { [expr $counter-$itc_prev]==1 } {
1598            set Vgt($itc) $x
1599            set Idr($itc) $y
1600            incr itc
1601            set itc_prev $itc
1602          } else {
1603            set itc 0
1604            set itc_prev 0
1605            set counter 1
1606          }
1607            }
1608                incr counter
1609          }
1610          if {$itc > 2} {
1611            set SS_count 0
1612            set Idr0 [expr {log10(abs($Idr(0)))}]
1613            set Idr1 [expr {log10(abs($Idr(1)))}]
1614            if {[expr {$Idr1-$Idr0}] != 0 } {
1615                set SS(0) [expr {1000*($Vgt(1)-$Vgt(0))/($Idr1-$Idr0)}]
1616            } else {
1617                set SS(0) 0.0
1618            }
1619            set SS_prev $SS(0)
1620            set counter 1
1621            while {$counter < $itc} {
1622          set Idr0 [expr {log10(abs($Idr([expr $counter-1])))}]
1623          set Idr1 [expr {log10(abs($Idr($counter)))}]
1624          if {[expr {$Idr1-$Idr0}]!=0} {
1625                set SS($counter) [expr {1000*($Vgt($counter)-$Vgt([expr $counter-1]))/($Idr1-$Idr0)}]
1626          } else {
1627                set SS($counter) 0
1628          }
1629          if {[expr {abs($SS_prev-$SS($counter))}]<10} {
1630                set SS_count [expr $SS_count+$SS($counter)]
1631          }
1632                set SS_prev $SS($counter)
1633                set counter_prev $counter
1634          incr counter
1635            }
1636            set SS_final [expr {$SS_count/($counter-1)}]
1637            $opt put output.curve(ss).about.group "Subthreshold Swing"
1638            $opt put output.curve(ss).about.label "Subthreshold Swing"     
1639            $opt put output.curve(ss).xaxis.label $outer_volt               
1640            $opt put output.curve(ss).xaxis.units "V"
1641            $opt put output.curve(ss).yaxis.label "Subthreshold Swing"             
1642            $opt put output.curve(ss).yaxis.units "mV/dec"
1643            $opt put -append yes output.curve(ss).component.xy "$outer_voltage $SS_final\n"
1644           }
1645        }
1646       
1647
1648
1649        } elseif {[string match *.xy $file]} {
1650            set field "?"
1651            regexp {^graph[0-9]+-(.*)-[0-9]+.xy$} $file match field
1652            set j 0
1653            set newinfo ""
1654
1655        while {[string length $info]>0} {
1656        foreach {xi yi} [nextline info] {
1657          set xx($j) $xi
1658          set yy($j) $yi
1659        }
1660        incr j
1661        }
1662          set n 0
1663          set i 0
1664          while {$i<$j} {
1665            set k 0
1666            set info_flag 1                                             
1667            while {$k<$i} {
1668                if {$xx($k)==$xx($i) && $yy($k)==$yy($i)} {
1669                        set info_flag 0
1670                }
1671                  incr k
1672            }
1673                if {$info_flag==1} {
1674                        set xxx($n) $xx($i)
1675                        set yyy($n) $yy($i)
1676                        incr n
1677                }
1678             incr i
1679          }
1680
1681          set m 0
1682          while {$m<[expr $n-1]} {
1683            set k 0
1684               if {$m > 1} {
1685                if {$xxx([expr $m-1])==$xxx($m)} {
1686                  if {$yyy([expr $m-1]) == 0 && $yyy($m) != 0} {
1687                    if {$yyy([expr $m-2]) != 0} {
1688                        set yy_temp $yyy([expr $m-1])
1689                        set yyy([expr $m-1]) $yyy($m)
1690                        set yyy($m) $yy_temp
1691                    }
1692                  }
1693                  if {$yyy([expr $m-1]) != 0 && $yyy($m) == 0} {
1694                    if {$yyy([expr $m+1]) != 0} {
1695                        set yy_temp $yyy([expr $m-1])
1696                        set yyy([expr $m-1]) $yyy($m)
1697                        set yyy($m) $yy_temp
1698                    }
1699                  }
1700                }
1701              }
1702            incr m
1703          }
1704          incr m
1705          set m 0
1706          while {$m<[expr $n-1]} {
1707            set k 0
1708               if {$m > 1} {
1709                if {$xxx([expr $m-1])==$xxx($m)} {
1710                  set a [expr [expr {abs($yyy([expr $m-1])-$yyy([expr $m-2]))}]+[expr {abs($yyy([expr $m+1])-$yyy($m))}]]
1711                  set b [expr [expr {abs($yyy([expr $m-1])-$yyy([expr $m+1]))}]+[expr {abs($yyy([expr $m-2])-$yyy($m))}]]
1712                  if {$a>$b} {             
1713                        set yy_temp $yyy([expr $m-1])
1714                        set yyy([expr $m-1]) $yyy($m)
1715                        set yyy($m) $yy_temp
1716                  }
1717                }
1718              }
1719            incr m
1720          }
1721          incr m
1722         
1723        set n 0
1724        while {$n < $m} {
1725          append newinfo "$xxx($n) $yyy($n)\n"
1726          incr n
1727        }
1728        if {$N == 1} {
1729                        set fid [open "xyxy" a+]
1730                        puts $fid "$field\n"
1731                        close $fid
1732                  }
1733            if {$field=="electrons"} { 
1734                  set which_field $field
1735                  set label "n - Electron Density in PROPHET"
1736                  set field "Doping, electron density, hole density"
1737                  set ya "Charge Density"
1738                  set plot_axis $plot_d
1739                  if {$Nxychr!=0} {
1740                        append field " at applied bias"
1741                  } else {
1742                        append field " at equilibrium"
1743                  }
1744            }
1745            if {$field=="holes"} {
1746                  set which_field $field
1747                  set label "p - Hole Density in PROPHET"
1748                  set field "Doping, electron density, hole density"
1749                  set ya "Charge Density"
1750                  set plot_axis $plot_d
1751                  if {$Nxychr!=0} {
1752                        append field " at applied bias"
1753                  } else {
1754                        append field " at equilibrium"
1755                  }
1756            }
1757            if {$field=="netdope"} {
1758                  set which_field $field
1759                  set label "Doping Density in PROPHET"
1760                  set field "Doping, electron density, hole density"
1761                  set ya "Charge Density"
1762                  set plot_axis $plot_d
1763                  if {$Nxychr!=0} {
1764                        append field " at applied bias"
1765                  } else {
1766                        append field " at equilibrium"
1767                  }
1768            }
1769               
1770            if {$field=="psi"} {
1771                  set which_field $field
1772                  set label "Electrostatic Potential in PROPHET"
1773                  set field "Electrostatic Potential"
1774                  set ya "Potential"
1775                  set plot_axis $plot_psi
1776                  if {$Nxypot!=0} {
1777                        append field " at applied bias"
1778                  } else {
1779                        append field " at equilibrium"
1780                  }
1781            }
1782
1783
1784        if {$field=="Electrostatic Potential at equilibrium" || $field=="Doping, electron density, hole density at equilibrium"} {
1785            $opt put output.curve($field-$N).about.group $field
1786            $opt put output.curve($field-$N).about.label $label
1787            if {$which_field=="electrons"} {
1788              $opt put output.curve($field-$N).about.style {-color purple}
1789            }
1790            if {$which_field=="holes"} {
1791              $opt put output.curve($field-$N).about.style {-color red}
1792            }
1793            if {$which_field=="netdope"} {
1794              $opt put output.curve($field-$N).about.style {-color green}
1795            }
1796            $opt put output.curve($field-$N).xaxis.label "along - $plot_axis"
1797            $opt put output.curve($field-$N).xaxis.units "um"
1798            $opt put output.curve($field-$N).yaxis.label $ya
1799            if {$ya == "Charge Density"} {
1800                $opt put output.curve($field-$N).yaxis.units "/cm3"
1801                $opt put output.curve($field-$N).yaxis.scale "log"
1802                incr Nxy
1803                if {[expr {fmod($Nxy,3)}]==0} {
1804                        incr Nxychr
1805                }
1806            }
1807            if {$which_field=="psi"} {
1808                $opt put output.curve($field-$N).yaxis.units "V"
1809                incr Nxypot
1810            }
1811            $opt put output.curve($field-$N).component.xy $newinfo
1812                }
1813       if {$field=="Electrostatic Potential at applied bias"} {
1814       
1815        if {!$equil} {
1816          set midvolt [expr {[expr {($Nxypot-1)*$vstep_sz}] + $vstart}]
1817        }
1818        set outerv [expr {$other_vstart+$vpotcounter*$other_vstep_sz}]
1819        if {$Nxypot == 1} {
1820                $opt put output.sequence(s$vpotcounter).about.label "Electrostatic Potential at applied bias $outer_volt=$outerv"
1821          $opt put output.sequence(s$vpotcounter).about.description ""
1822          $opt put output.sequence(s$vpotcounter).index.label "Electrostatic Potential"
1823          set seq output.sequence(s$vpotcounter).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
1824          $opt put $seq.index 0-Initial_Bias_$inner_volt=[set vstart]V
1825          $opt put $seq.curve(pot).about.label $label
1826          $opt put $seq.curve(pot).about.group "$field $outerv"
1827          $opt put $seq.curve(pot).about.style {-color blue}
1828          $opt put $seq.curve(pot).xaxis.label "along - $plot_axis"
1829          $opt put $seq.curve(pot).xaxis.units "um "
1830          $opt put $seq.curve(pot).yaxis.label $ya
1831          $opt put $seq.curve(pot).yaxis.units "V"
1832          $opt put $seq.curve(pot).component.xy $newinfo
1833        }
1834        if {$Nxypot == [expr {$vstep_nm+1}]} {
1835          set seq output.sequence(s$vpotcounter).element([expr $Nxypot-1]-Final_Bias_$inner_volt=[set vhigh]V)
1836          $opt put $seq.index [expr $Nxypot-1]-Final_Bias_$inner_volt=[set vhigh]V
1837          $opt put $seq.curve(pot).about.label $label
1838          $opt put $seq.curve(pot).about.group "$field $outerv"
1839          $opt put $seq.curve(pot).about.style {-color blue}
1840          $opt put $seq.curve(pot).xaxis.label "along - $plot_axis"
1841          $opt put $seq.curve(pot).xaxis.units "um "
1842          $opt put $seq.curve(pot).yaxis.label $ya
1843          $opt put $seq.curve(pot).yaxis.units "V"
1844          $opt put $seq.curve(pot).component.xy $newinfo       
1845          set vpotcounter [expr $vpotcounter+$other_vstep_nm]
1846          set Nxypot 0
1847        }
1848        if {$Nxypot < [expr {$vstep_nm+1}] && $Nxypot > 1} {
1849          set seq output.sequence(s$vpotcounter).element([expr $Nxypot]-Sample_Bias_$inner_volt=[set midvolt]V)
1850          $opt put $seq.index [expr $Nxypot-1]-Sample_Bias_$inner_volt=[set midvolt]V
1851          $opt put $seq.curve(pot).about.label $label
1852          $opt put $seq.curve(pot).about.group "$field $outerv"
1853          $opt put $seq.curve(pot).about.style {-color blue}
1854          $opt put $seq.curve(pot).xaxis.label "along - $plot_axis"
1855          $opt put $seq.curve(pot).xaxis.units "um "
1856          $opt put $seq.curve(pot).yaxis.label $ya
1857          $opt put $seq.curve(pot).yaxis.units "V"
1858          $opt put $seq.curve(pot).component.xy $newinfo
1859        }
1860          incr Nxypot
1861          }
1862
1863            if {$field=="Doping, electron density, hole density at applied bias"} {
1864           
1865              if {!$equil} {
1866                 set midvolt [expr {[expr {($Nxychr-1)*$vstep_sz}] + $vstart}]
1867              }
1868              set outerv [expr {$other_vstart+$vchrcounter*$other_vstep_sz}]
1869              if { $Nxychr == 1 } {
1870                $opt put output.sequence(d$vchrcounter).about.label "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1871                $opt put output.sequence(d$vchrcounter).about.description ""
1872                $opt put output.sequence(d$vchrcounter).index.label "Doping, electron/hole density"
1873              }
1874
1875          ################# ndata ##################
1876          if {$which_field=="electrons"} {
1877                incr Nxy
1878              if { $Nxychr == 1 } {
1879                set seq output.sequence(d$vchrcounter).element(0-Initial_Bias_$inner_volt=[set vstart]V)
1880                $opt put $seq.index 0-Initial_Bias_$inner_volt=[set vstart]V
1881                $opt put $seq.curve(ndata).about.label "n - Electron Density in PROPHET"
1882                $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1883                $opt put $seq.curve(ndata).about.style {-color purple}
1884                $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
1885                $opt put $seq.curve(ndata).xaxis.units "um "
1886                $opt put $seq.curve(ndata).yaxis.label "Charge Density"
1887                $opt put $seq.curve(ndata).yaxis.units "/cm3"
1888                $opt put $seq.curve(ndata).yaxis.scale "log"
1889                $opt put $seq.curve(ndata).yaxis.min "1"
1890                $opt put $seq.curve(ndata).component.xy $newinfo
1891              }
1892              if { $Nxychr == [expr $vstep_nm+1] } {
1893                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V)
1894                $opt put $seq.index [expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V
1895                $opt put $seq.curve(ndata).about.label "n - Electron Density in PROPHET"
1896                $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1897                $opt put $seq.curve(ndata).about.style {-color purple}
1898                $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
1899                $opt put $seq.curve(ndata).xaxis.units "um "
1900                $opt put $seq.curve(ndata).yaxis.label "Charge Density"
1901                $opt put $seq.curve(ndata).yaxis.units "/cm3"
1902                $opt put $seq.curve(ndata).yaxis.scale "log"
1903                $opt put $seq.curve(ndata).yaxis.min "1"
1904                $opt put $seq.curve(ndata).component.xy $newinfo                                             
1905              }
1906              if { $Nxychr < [expr $vstep_nm+1] && $Nxychr > 1} {
1907                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V)
1908                $opt put $seq.index [expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V
1909                $opt put $seq.curve(ndata).about.label "n - Electron Density in PROPHET"
1910                $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1911                $opt put $seq.curve(ndata).about.style {-color purple}
1912                $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
1913                $opt put $seq.curve(ndata).xaxis.units "um "
1914                $opt put $seq.curve(ndata).yaxis.label "Charge Density"
1915                $opt put $seq.curve(ndata).yaxis.units "/cm3"
1916                $opt put $seq.curve(ndata).yaxis.scale "log"
1917                $opt put $seq.curve(ndata).yaxis.min "1"
1918                $opt put $seq.curve(ndata).component.xy $newinfo
1919              }
1920          }
1921             
1922          ################# pdata #############################
1923           
1924          if {$which_field=="holes"} {
1925                incr Nxy
1926              if { $Nxychr == 1 } {
1927                set seq output.sequence(d$vchrcounter).element(0-Initial_Bias_$inner_volt=[set vstart]V)
1928                $opt put $seq.index 0-Initial_Bias_$inner_volt=[set vstart]V
1929                $opt put $seq.curve(pdata).about.label "p - Hole Density in PROPHET"
1930                $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1931                $opt put $seq.curve(pdata).about.style {-color red}
1932                $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
1933                $opt put $seq.curve(pdata).xaxis.units "um"
1934                $opt put $seq.curve(pdata).yaxis.label "Charge Density"
1935                $opt put $seq.curve(pdata).yaxis.units "/cm3"
1936                $opt put $seq.curve(pdata).yaxis.scale "log"
1937                $opt put $seq.curve(pdata).yaxis.min "1"
1938                $opt put $seq.curve(pdata).component.xy $newinfo
1939              }
1940              if { $Nxychr == [expr $vstep_nm+1] } {
1941                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V)
1942                $opt put $seq.index [expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V
1943                $opt put $seq.curve(pdata).about.label "p - Hole Density in PROPHET"
1944                $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1945                $opt put $seq.curve(pdata).about.style {-color red}
1946                $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
1947                $opt put $seq.curve(pdata).xaxis.units "um"
1948                $opt put $seq.curve(pdata).yaxis.label "Charge Density"
1949                $opt put $seq.curve(pdata).yaxis.units "/cm3"
1950                $opt put $seq.curve(pdata).yaxis.scale "log"
1951                $opt put $seq.curve(pdata).yaxis.min "1"
1952                $opt put $seq.curve(pdata).component.xy $newinfo
1953              }
1954              if { $Nxychr < [expr $vstep_nm+1]  && $Nxychr> 1} {
1955                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V)
1956                $opt put $seq.index [expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V
1957                $opt put $seq.curve(pdata).about.label "p - Hole Density in PROPHET"
1958                $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1959                $opt put $seq.curve(pdata).about.style {-color red}
1960                $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
1961                $opt put $seq.curve(pdata).xaxis.units "um"
1962                $opt put $seq.curve(pdata).yaxis.label "Charge Density"
1963                $opt put $seq.curve(pdata).yaxis.units "/cm3"
1964                $opt put $seq.curve(pdata).yaxis.scale "log"
1965                $opt put $seq.curve(pdata).yaxis.min "1"
1966                $opt put $seq.curve(pdata).component.xy $newinfo
1967              }
1968          }
1969              ################# Doping data (constant) ##############
1970             
1971          if {$which_field=="netdope"} {
1972                incr Nxy
1973              if { $Nxychr == 1 } {
1974                set seq output.sequence(d$vchrcounter).element(0-Initial_Bias_$inner_volt=[set vstart]V)
1975                $opt put $seq.index 0-Initial_Bias_$inner_volt=[set vstart]V
1976                $opt put $seq.curve(Ndv).about.label "Doping Density in PROPHET"
1977                $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1978                $opt put $seq.curve(Ndv).about.style {-color green}
1979                $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
1980                $opt put $seq.curve(Ndv).xaxis.units "um"
1981                $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
1982                $opt put $seq.curve(Ndv).yaxis.units "/cm3"
1983                $opt put $seq.curve(Ndv).yaxis.scale "log"
1984                $opt put $seq.curve(Ndv).yaxis.min "1"
1985                $opt put $seq.curve(Ndv).component.xy $newinfo
1986              }
1987              if { $Nxychr == [expr $vstep_nm+1] } {
1988                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V)
1989                $opt put $seq.index [expr $Nxychr-1]-Final_Bias_$inner_volt=[set vhigh]V
1990                $opt put $seq.curve(Ndv).about.label "Doping Density in PROPHET"
1991                $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
1992                $opt put $seq.curve(Ndv).about.style {-color green}
1993                $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
1994                $opt put $seq.curve(Ndv).xaxis.units "um"
1995                $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
1996                $opt put $seq.curve(Ndv).yaxis.units "/cm3"
1997                $opt put $seq.curve(Ndv).yaxis.scale "log"
1998                $opt put $seq.curve(Ndv).yaxis.min "1"
1999                $opt put $seq.curve(Ndv).component.xy $newinfo
2000              }
2001
2002              if { $Nxychr < [expr $vstep_nm+1]  && $Nxychr> 1} {
2003                set seq output.sequence(d$vchrcounter).element([expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V)
2004                $opt put $seq.index [expr $Nxychr-1]-Sample_Bias_$inner_volt=[set midvolt]V
2005                $opt put $seq.curve(Ndv).about.label "Doping Density in PROPHET"
2006                $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outerv"
2007                $opt put $seq.curve(Ndv).about.style {-color green}
2008                $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
2009                $opt put $seq.curve(Ndv).xaxis.units "um"
2010                $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
2011                $opt put $seq.curve(Ndv).yaxis.units "/cm3"
2012                $opt put $seq.curve(Ndv).yaxis.scale "log"
2013                $opt put $seq.curve(Ndv).yaxis.min "1"
2014                $opt put $seq.curve(Ndv).component.xy $newinfo
2015              }
2016          }
2017          if {[expr {fmod($Nxy,3)}]==0} {
2018                incr Nxychr
2019          }
2020         
2021          if {$Nxychr==[expr $vstep_nm+2]} {
2022                set vchrcounter [expr $vchrcounter+$other_vstep_nm]
2023                set Nxychr 1
2024          }
2025             }
2026        } elseif {[string match *.ss $file]} {
2027            #
2028            # Extract columns from SpreadSheet files
2029            # first column is X remaining columns are Y
2030            #
2031            # first line determines the field labels...
2032            set line [string trim [nextline info]]
2033            while {"" == $line && [string length $info] > 0} {
2034          set line [string trim [nextline info]]
2035            }
2036
2037            set fields ""
2038            foreach field $line {
2039          lappend fields $field
2040          set fvalues($field) ""
2041            }
2042
2043            set line [string trim [nextline info]]
2044            set fieldUnits ""
2045            foreach field $line {
2046          lappend fieldUnits $field
2047            }
2048
2049            # extract values for all field columns
2050            while {[string length $info] > 0} {
2051          set line [string trim [nextline info]]
2052          if {"" == $line} {
2053              continue
2054          }
2055
2056          set col -1
2057          foreach f $fields {
2058              set v [lindex $line [incr col]]
2059              if {"" != $v} {
2060        lappend fvalues($f) $v
2061              }
2062          }
2063            }
2064
2065            #
2066            # Now, save all results to XML as curves...
2067            #
2068            set xlabel [lindex $fields 0]
2069            set xunits [lindex $fieldUnits 0]
2070
2071            #
2072            # Put all quantities
2073            # into the same <group> so that Rappture will put
2074            # them all on the same plot.  Label each quantity
2075            # according to the solution conditions.
2076            #
2077            set NSS 1
2078            foreach f [lrange $fields 1 end] {
2079          $opt put output.curve($f-$NSS).about.group $label
2080          $opt put output.curve($f-$NSS).about.label $f
2081          $opt put output.curve($f-$NSS).xaxis.label $xlabel
2082          if {"" != $xunits} {
2083              $opt put output.curve($f-$NSS).xaxis.units $xunits
2084          }
2085
2086          $opt put output.curve($f-$NSS).yaxis.label $label
2087          set yunits [lindex $fieldUnits $NSS]
2088          if {"" != $yunits} {
2089              $opt put output.curve($f-$NSS).yaxis.units $yunits
2090          }
2091
2092          foreach x $fvalues($xlabel) y $fvalues($f) {
2093              $opt put -append yes \
2094        output.curve($f-$NSS).component.xy "$x $y\n"
2095          }
2096          incr NSS
2097            }
2098        } elseif {[string match *.gr $file]} {
2099            catch {unset regions}
2100            catch {unset points}
2101            catch {unset nodes}
2102            catch {unset elements}
2103
2104            #
2105            # HANDLE GRID FILES
2106            #
2107            # skip down to Regions: definition
2108            set line ""
2109            while {[string length $info] > 0} {
2110          set line [string trim [nextline info]]
2111          if {[regexp {^Regions:|^pt} $line]} {
2112              break
2113          }
2114            }
2115
2116            # load in Regions: lines
2117            if {[regexp {^Regions:} $line]} {
2118          while {[string length $info] > 0} {
2119              set line [string trim [nextline info]]
2120              if {[regexp {^Surfaces:|^pt} $line]} {
2121        break
2122              } elseif {[llength $line] == 2} {
2123        set i [lindex $line 0]
2124        set regions($i) [lindex $line 1]
2125              }
2126          }
2127            }
2128
2129            # load in Regions: lines
2130            if {[regexp {^Surfaces:} $line]} {
2131          while {[string length $info] > 0} {
2132              set line [string trim [nextline info]]
2133              if {[regexp {^pt} $line]} {
2134        break
2135              }
2136          }
2137            }
2138
2139            # load in pt lines
2140            while {[string length $info] > 0} {
2141          if {[string length $line] == 0} {
2142              continue
2143          }
2144          switch -regexp -- $line {
2145              ^pti - ^edge - ^nbs - ^nj {
2146        # ignore these
2147              }
2148              ^pt {
2149        set i [lindex $line 1]
2150        set x [lindex $line 6]
2151        set y [lindex $line 7]
2152        set points($i) [list $x $y]
2153              }
2154              ^nd {
2155        set i [lindex $line 1]
2156        set p [lindex $line 3]
2157        set nodes($i) $p
2158              }
2159              ^elem {
2160        set i [lindex $line 1]
2161        set r [lindex $line 5]
2162        set line [string trim [nextline info]]
2163        if {[regexp {^nodes} $line]} {
2164            set nlist [lrange $line 1 end]
2165            set elements($i) [list $nlist $r]
2166        }
2167              }
2168          }
2169          set line [string trim [nextline info]]
2170            }
2171
2172            #
2173            # Now, save the grid structure
2174            #
2175            $opt put output.mesh(m$N).about.label $label
2176
2177            foreach i [lsort -integer [array names regions]] {
2178          $opt put output.mesh(m$N).region($i) $regions($i)
2179            }
2180
2181            foreach i [lsort -integer [array names nodes]] {
2182          set pid $nodes($i)
2183          $opt put output.mesh(m$N).node($i) $points($pid)
2184            }
2185
2186            foreach i [lsort -integer [array names elements]] {
2187          foreach {nlist r} $elements($i) break
2188          $opt put output.mesh(m$N).element($i).nodes $nlist
2189          $opt put output.mesh(m$N).element($i).region $r
2190            }
2191
2192        } elseif {[string match *.dx $file]} {
2193            catch {unset objects}
2194            catch {unset attributes}
2195            catch {unset attr2value}
2196            regexp {^dx[0-9]+-(.*)-[0-9]+.dx$} $file match field
2197
2198            #
2199            # HANDLE OPENDX FILES
2200            #
2201            set lastobj 0
2202            while {[string length $info] > 0} {
2203          set line [string trim [nextline info]]
2204          if {[string length $line] == 0} {
2205              continue
2206          }
2207          if {[regexp -nocase {^object} $line]} {
2208              catch {unset attrs}
2209              array set attrs $line
2210
2211              set data ""
2212              if {$attrs(class) == "array"} {
2213        for {set i 0} {$i < $attrs(items)} {incr i} {
2214            lappend data [string trim [nextline info]]
2215        }
2216              }
2217              set objects($attrs(object)) $data
2218              set lastobj $attrs(object)
2219          } elseif {[regexp -nocase {^attribute} $line]} {
2220              set key [lindex $line 1]
2221              set val [lindex $line 3]
2222              lappend attributes($lastobj) $key
2223              lappend attr2value($lastobj-$key) $val
2224          } elseif {[regexp -nocase {^component} $line]} {
2225              lappend objects($lastobj) $line
2226          } elseif {[regexp -nocase {^end$} $line]} {
2227              break
2228          } else {
2229              error "unrecognized keyword at \"$line\" in DX format file"
2230          }
2231            }
2232
2233            #
2234            # Look for the "irregular positions irregular connections"
2235            # object at the end.  This gives meaning to the various objects.
2236            #
2237            set index "irregular positions irregular connections"
2238            if {![info exists objects($index)]} {
2239          error "can't find table of contents \"$index\" in DX data file"
2240            }
2241            foreach elem $objects($index) {
2242          set entity [lindex $elem 1]
2243          set toc($entity) [lindex $elem 3]
2244            }
2245            foreach elem {data connections positions} {
2246          if {![info exists toc($elem)]} {
2247              error "can't find $elem in DX data file"
2248          }
2249            }
2250            set data $objects($toc(positions))
2251            append data / $objects($toc(connections))
2252
2253            #
2254            # See if we already have a mesh with the same points
2255            # and elements.  If so, then using the existing mesh.
2256            # This saves both memory and time in loading the data.
2257            #
2258            if {[info exists data2mesh($data)]} {
2259          set mesh $data2mesh($data)
2260            } else {
2261          # write the mesh data to the XML
2262          $opt put output.mesh(m$N).about.label $label
2263          $opt put output.mesh(m$N).units "um"
2264          $opt put output.mesh(m$N).hide "yes"
2265
2266          set i $toc(positions)
2267          set n 0
2268          foreach xyz $objects($i) {
2269              while {[llength $xyz] < 3} {
2270        lappend xyz 0
2271              }
2272              $opt put output.mesh(m$N).node($n) $xyz
2273              incr n
2274          }
2275
2276          set i $toc(connections)
2277          set n 0
2278          foreach nlist $objects($i) {
2279              $opt put output.mesh(m$N).element($n).nodes $nlist
2280              incr n
2281          }
2282          set mesh "m$N"
2283          set data2mesh($data) $mesh
2284            }
2285
2286            # write out the field data
2287            set i $toc(data)
2288            $opt put output.field($field-$N).about.label $field
2289            $opt put output.field($field-$N).component.mesh output.mesh($mesh)
2290            $opt put output.field($field-$N).component.values $objects($i)
2291
2292        } else {
2293            puts "WARNING: don't know how to handle file $file"
2294        }
2295        incr N
2296            }
2297        }
2298                 
2299
2300        #
2301        # Clean up all files...
2302        #
2303
2304        set fid [open "debug" w]
2305        puts $fid $datafiles
2306        close $fid
2307
2308        #
2309        # Save the updated XML describing the run...
2310        # Be sure to do this back in the original directory
2311        #
2312        set oname "run[clock seconds].xml"
2313        set fid [open $oname w]
2314        puts $fid "<?xml version=\"1.0\"?>"
2315        puts $fid [$opt xml]
2316        close $fid
2317
2318        if {$status == 0} {
2319            puts "=RAPPTURE-RUN=>$oname"
2320        }
2321       
2322                        file delete -force $deckfile
2323                        foreach {file label} $datafiles {
2324                                file delete -force $file
2325                        }
2326  }
2327
2328
2329"padre" {
2330
2331        if {$device_type=="user_finfet" || $device_type=="user_nanowire"} {
2332
2333        package require Img
2334        wm withdraw .  ;# hide main window
2335
2336        set flavors {padre}
2337        set program ""
2338        foreach name $flavors {
2339            if {[auto_execok $name] != ""} {
2340          set program $name
2341          break
2342            }
2343        }
2344        if {$program == ""} {
2345            puts stderr "Can't find any of the following programs:"
2346            foreach name $flavors {
2347          puts stderr " >> $name"
2348            }
2349            puts stderr "\nPATH = $env(PATH)"
2350            exit 1
2351        }
2352
2353        set datafiles_1D ""
2354        set datafiles_2D ""
2355        set datafiles_3D ""
2356        set datafiles_IV ""
2357
2358        # ----------------------------------------------------------------------
2359        # USAGE: nextline <varName>
2360        #
2361        # Pulls the next line from the contents of <varName> and returns
2362        # it as the result of this function.  Updates the contents of
2363        # <varName> so that it doesn't contain the line.
2364        # ----------------------------------------------------------------------
2365        #
2366        # load plot results
2367        #
2368        proc normal_y {info start finish extra} {
2369           global abs_data
2370           set data ""
2371           set xyvalue ""
2372           # skip over first six lines with headings
2373           foreach line [lrange [split $info \n] $start $finish] {
2374              if {[scan $line {%g %g %g %g} a fx x y] == 4} {
2375           lappend xyvalue $a $fx
2376           # check the maximum digits for y axis
2377           set tmp $fx
2378           if {$tmp < 0} {
2379              set tmp -$tmp
2380           }
2381              }
2382           }
2383
2384           # create data for plot
2385           foreach {xvalue yvalue} $xyvalue {
2386              set yvalue [expr double($yvalue)]
2387              append data "$xvalue [expr $yvalue*$extra]\n"
2388              set abs_y [expr $yvalue*$extra]
2389              if {$yvalue < 0} {
2390           set abs_y [expr 0 - $abs_y]
2391              }
2392              append abs_data "$xvalue $abs_y\n"
2393           }
2394           return $data
2395        }
2396
2397
2398#       set sigex [$opt get input.(two).(Material).(sigex).current]
2399        set e0 8.854E-14
2400        set indeck ""
2401
2402        if {$device_type=="user_nanowire"} {
2403          append indeck "#PADRE script for cylindrical semiconductor Nanowire simulations\n"
2404          append indeck "OPTION SIZE.BUF=200000000\n"
2405          append indeck "title Nanowire\n\n"
2406
2407        #append indeck "ALLOY NAME=sige X1ALLOY=0 M1ALLOY=silicon\n"
2408        #append indeck "+               X2ALLOY=1 M2ALLOY=germanium\n\n"
2409
2410        #append indeck "MATERIAL  NAME=polysige DEF=sige EG300=[expr {1.12-0.41*$sigex+0.008*$sigex*$sigex}]\n"
2411        #append indeck "+NC300=2.8E+19 NV300=1.8E+19 COMP=$sigex PE=[expr {(16*$sigex+11.9*(1-$sigex))*$e0}]\n"
2412        #append indeck "+AF=[expr {4.0*$sigex+4.05*(1-$sigex)}] En.Model=cauchy\n"
2413        #append indeck "+Ep.Model=cauchy MUN0=242 MUP0=186 TAUN0=50e-6 TAUP0=50e-6 P.TYPE\n"
2414
2415          append indeck "MATERIAL NAME=sio2 PE=$ep_ox\n"
2416          append indeck "MATERIAL NAME=silicon PE=$ep_sil AF=$affinity\n"
2417          append indeck "+ MUn=$mo_el MUp=$mo_hole EG300=$EG TAUn0=$tau0n TAUp0=$tau0p EGA=0.000473 EGB=636\n\n"
2418          append indeck "+ TAUWn=2e-13 TAUWp=2e-13 VSATn=$vsatn VSATp=$vsatp\n\n"
2419        #append indeck "+E.MODEL=FLDMOB\n\n"
2420
2421        set x_c 20
2422        set x_t 25
2423        set y_gl1 25
2424        set y_gl2 30
2425        set y_gl3 25
2426        set y_gl4 25
2427        set y_gl5 30
2428        set y_cc 40
2429        set y_gh1 50
2430        set y_gh2 55
2431        set y_gh3 55
2432        set y_gh4 50
2433        set y_gh5 55
2434        set y_t 80
2435
2436        append indeck "MESH CY NX=$x_t NY=$y_t\n"
2437
2438          append indeck "X.M N=1 LOC=0.0\n"
2439          append indeck "X.M N=$x_c LOC=[expr {$Dch/2.0}] RATIO=[expr {1/1.2}]\n"
2440          append indeck "X.M N=$x_t LOC=[expr {$tox+$Dch/2.0}] RATIO=1.2\n\n"
2441
2442          append indeck "Y.M N=1 LOC=0.0\n"
2443        if {$overlap_s > 0} {
2444          append indeck "Y.M N=$y_gl1 LOC=[expr {$ls-$overlap_s}] RATIO=[expr {1/1.0}]\n"
2445          append indeck "Y.M N=$y_gl2 LOC=$ls RATIO=[expr {1/1.0}]\n"
2446        } elseif {$overlap_s==0} {
2447          append indeck "Y.M N=$y_gl3 LOC=$ls RATIO=[expr {1/1.0}]\n"
2448        } else {
2449          append indeck "Y.M N=$y_gl4 LOC=$ls RATIO=[expr {1/1.0}]\n"
2450          append indeck "Y.M N=$y_gl5 LOC=[expr {$ls-$overlap_s}] RATIO=[expr {1/1.0}]\n"
2451        }
2452          append indeck "Y.M N=$y_cc LOC=[expr {$source_pos}] RATIO=1.2\n"
2453
2454        if {$overlap_d > 0} {
2455          append indeck "Y.M N=$y_gh1 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.0}]\n"
2456          append indeck "Y.M N=$y_gh2 LOC=[expr {$t_length-($ld-$overlap_d)}] RATIO=[expr {1/1.0}]\n"
2457        } elseif {$overlap_d==0} {
2458          append indeck "Y.M N=$y_gh3 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.0}]\n"
2459        } else {
2460          append indeck "Y.M N=$y_gh4 LOC=[expr {$t_length-($ld-$overlap_d)}] RATIO=[expr {1/1.0}]\n"
2461          append indeck "Y.M N=$y_gh5 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.0}]\n"
2462        }
2463          append indeck "Y.M N=$y_t LOC=[expr {$source_pos+$drain_pos}] RATIO=1.0\n\n"
2464
2465        if {$overlap_d > 0} {
2466        set y_cl $y_gl2
2467        set y_gl $y_gl1
2468        } elseif {$overlap_d==0} {
2469        set y_cl $y_gl3
2470        set y_gl $y_gl3
2471        } else {
2472        set y_cl $y_gl4
2473        set y_gl $y_gl5
2474        }
2475        if {$overlap_s > 0} {
2476        set y_ch $y_gh1
2477        set y_gh $y_gh2
2478        } elseif {$overlap_s==0} {
2479        set y_ch $y_gh3
2480        set y_gh $y_gh3
2481        } else {
2482        set y_ch $y_gh5
2483        set y_gh $y_gh4
2484        }
2485       
2486          append indeck "REGION NUM=1 ix.l=1 ix.h=$x_c iy.l=1 iy.h=$y_cl silicon SEMI\n"
2487          append indeck "REGION NUM=2 ix.l=1 ix.h=$x_c iy.l=$y_cl iy.h=$y_cc silicon SEMI\n"
2488          append indeck "REGION NUM=3 ix.l=1 ix.h=$x_c iy.l=$y_cc iy.h=$y_ch silicon SEMI\n"
2489          append indeck "REGION NUM=4 ix.l=1 ix.h=$x_c iy.l=$y_ch iy.h=$y_t silicon SEMI\n"
2490          append indeck "REGION NUM=5 ix.l=$x_c ix.h=$x_t iy.l=1 iy.h=$y_t oxide INS\n\n"
2491
2492          append indeck "ELECT NUM=1 ix.l=1 ix.h=$x_c iy.l=1 iy.h=1\n"
2493          append indeck "ELECT NUM=2 ix.l=1 ix.h=$x_c iy.l=$y_t iy.h=$y_t\n"
2494          append indeck "ELECT NUM=3 ix.l=$x_t ix.h=$x_t iy.l=$y_gl iy.h=$y_gh\n"
2495
2496        if {$gaussian_dop} {
2497        #append indeck "dop unif region=3 conc=$nch $ch_dop_type.type\n"
2498          append indeck "dop unif region=1 conc=$ns $source_dop_type.type\n"
2499          append indeck "dop unif region=4 conc=$nd $drain_dop_type.type\n\n"
2500          append indeck "dop gauss region=2 conc=$ns direction=y ch=$char_len_source Lat.char=$pene_ox $source_dop_type.type\n"
2501          append indeck "+ Y.BOTTOM=$s_b\n"
2502          append indeck "dop gauss region=3 conc=$nd direction=y ch=$char_len_drain Lat.char=$pene_ox $drain_dop_type.type\n"
2503          append indeck "+ Y.BOTTOM=$d_b\n\n"
2504        } else {
2505          append indeck "dop unif region=2 conc=$nch $ch_dop_type.type\n"
2506          append indeck "dop unif region=3 conc=$nch $ch_dop_type.type\n"
2507          append indeck "dop unif region=1 conc=$ns $source_dop_type.type\n"
2508          append indeck "dop unif region=4 conc=$nd $drain_dop_type.type\n\n"
2509        }
2510        append indeck "contact all neutral\n"
2511        if {$gate_type=="poly"} {
2512          append indeck "contact num=1 $poly_dop_type.polysilicon\n"
2513          append indeck "contact num=2 $poly_dop_type.polysilicon\n"
2514
2515          append indeck "contact num=3 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2516        } elseif {$gate_type=="metal"} {
2517          append indeck "contact num=1\n"
2518          append indeck "contact num=2\n"
2519
2520          append indeck "contact num=3 workfunction=$workfunc\n"
2521        }
2522        } elseif {$device_type=="user_finfet" || $device_type=="user_nanowire"} {
2523
2524
2525
2526          append indeck "#PADRE script for rectangular semiconductor Si FINFET simulations\n"
2527          append indeck "OPTION SIZE.BUF=200000000\n"
2528          append indeck "title FinFET\n\n"
2529
2530        #append indeck "ALLOY NAME=sige X1ALLOY=0 M1ALLOY=silicon\n"
2531        #append indeck "+               X2ALLOY=1 M2ALLOY=germanium\n\n"
2532
2533        #append indeck "MATERIAL  NAME=polysige DEF=sige EG300=[expr {1.02-0.41*$sigex+0.008*$sigex*$sigex}]\n"
2534        #append indeck "+NC300=2.8E+19 NV300=1.8E+19 COMP=$sigex PE=[expr {(16*$sigex+11.9*(1-$sigex))*$e0}]\n"
2535        #append indeck "+AF=[expr {4.0*$sigex+4.05*(1-$sigex)}] En.Model=cauchy\n"
2536        #append indeck "+Ep.Model=cauchy MUN0=242 MUP0=186 TAUN0=50e-6 TAUP0=50e-6 P.TYPE\n"
2537
2538          append indeck "MATERIAL NAME=sio2 PE=$ep_ox qf=0\n"
2539          append indeck "MATERIAL NAME=silicon PE=$ep_sil AF=$affinity\n"
2540          append indeck "+ MUn=$mo_el MUp=$mo_hole EG300=$EG TAUn0=$tau0n TAUp0=$tau0p EGA=0.000473 EGB=636\n\n"
2541          append indeck "+ TAUWn=2e-13 TAUWp=2e-13 VSATn=$vsatn VSATp=$vsatp\n\n"
2542        #append indeck "+E.MODEL=FLDMOB\n\n"
2543        if {$dimension==2} {
2544        set x_cl 5
2545        set x_cc 15
2546        set x_ch 25
2547        set x_t 30
2548        set y_gl1 15
2549        set y_gl2 20
2550        set y_gl3 15
2551        set y_gl4 15
2552        set y_gl5 20
2553        set y_cc 30
2554        set y_gh1 35
2555        set y_gh2 40
2556        set y_gh3 40
2557        set y_gh4 35
2558        set y_gh5 40
2559        set y_t 60
2560        } elseif {$dimension==3} {
2561        set x_cl 4
2562        set x_cc 10
2563        set x_ch 16
2564        set x_t 20
2565        set y_gl1 9
2566        set y_gl2 11
2567        set y_gl3 9
2568        set y_gl4 9
2569        set y_gl5 11
2570        set y_cc 15
2571        set y_gh1 21
2572        set y_gh2 23
2573        set y_gh3 21
2574        set y_gh4 23
2575        set y_gh5 23
2576        set y_t 31
2577        }
2578        if {$dimension==3} {
2579          append indeck "MESH RECT NX=$x_t NY=$y_t NZ=13\n"
2580        } else {
2581          append indeck "MESH RECT NX=$x_t NY=$y_t\n"
2582        }
2583       
2584
2585          append indeck "X.M N=1 LOC=0.0\n"
2586          append indeck "X.M N=$x_cl LOC=[expr {$tox1}] RATIO=[expr {1/1.4}]\n"
2587          append indeck "X.M N=$x_cc LOC=[expr {$tox1+$chw*0.5}] RATIO=1.4\n"
2588          append indeck "X.M N=$x_ch LOC=[expr {$tox1+$chw}] RATIO=[expr {1/1.4}]\n"
2589          append indeck "X.M N=$x_t LOC=[expr {$tox1+$chw+$tox2}] RATIO=1.4\n\n"
2590
2591          append indeck "Y.M N=1 LOC=0.0\n"
2592        if {$overlap_s > 0} {
2593          append indeck "Y.M N=$y_gl1 LOC=[expr {$ls-$overlap_s}] RATIO=[expr {1/1.4}]\n"
2594          append indeck "Y.M N=$y_gl2 LOC=$ls RATIO=[expr {1/1.4}]\n"
2595        } elseif {$overlap_s==0} {
2596          append indeck "Y.M N=$y_gl3 LOC=$ls RATIO=[expr {1/1.4}]\n"
2597        } else {
2598          append indeck "Y.M N=$y_gl4 LOC=$ls RATIO=[expr {1/1.4}]\n"
2599          append indeck "Y.M N=$y_gl5 LOC=[expr {$ls-$overlap_s}] RATIO=[expr {1/1.4}]\n"
2600        }
2601          append indeck "Y.M N=$y_cc LOC=[expr {$source_pos}] RATIO=1.4\n"
2602
2603        if {$overlap_d > 0} {
2604          append indeck "Y.M N=$y_gh1 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.4}]\n"
2605          append indeck "Y.M N=$y_gh2 LOC=[expr {$t_length-($ld-$overlap_d)}] RATIO=[expr {1/1.4}]\n"
2606        } elseif {$overlap_d==0} {
2607          append indeck "Y.M N=$y_gh3 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.4}]\n"
2608        } else {
2609          append indeck "Y.M N=$y_gh4 LOC=[expr {$t_length-($ld-$overlap_d)}] RATIO=[expr {1/1.4}]\n"
2610          append indeck "Y.M N=$y_gh5 LOC=[expr {$t_length-$ld}] RATIO=[expr {1/1.4}]\n"
2611        }
2612          append indeck "Y.M N=$y_t LOC=[expr {$source_pos+$drain_pos}] RATIO=1.4\n\n"
2613
2614        if {$dimension==3} {
2615          append indeck "Z.M N=1 LOC=0.0\n"
2616          append indeck "Z.M N=4 LOC=$sub_ox RATIO=1.4\n"
2617          append indeck "Z.M N=10 LOC=[expr {$sub_ox+$fin_height}] RATIO=0.6\n"
2618          append indeck "Z.M N=13 LOC=[expr {$sub_ox+$fin_height+$top_ox}] RATIO=1.0\n\n"
2619        }
2620        if {$overlap_d > 0} {
2621        set y_cl $y_gl2
2622        set y_gl $y_gl1
2623        } elseif {$overlap_d==0} {
2624        set y_cl $y_gl3
2625        set y_gl $y_gl3
2626        } else {
2627        set y_cl $y_gl4
2628        set y_gl $y_gl5
2629        }
2630        if {$overlap_s > 0} {
2631        set y_ch $y_gh1
2632        set y_gh $y_gh2
2633        } elseif {$overlap_s==0} {
2634        set y_ch $y_gh3
2635        set y_gh $y_gh3
2636        } else {
2637        set y_ch $y_gh5
2638        set y_gh $y_gh4
2639        }
2640        if {$dimension==3} {
2641          append indeck "REGION NUM=1 ix.l=1 ix.h=$x_t iy.l=1 iy.h=$y_t Z.MIN=0.0 Z.MAX=$sub_ox\n"
2642          append indeck "+oxide\n"
2643          append indeck "REGION NUM=2 ix.l=1 ix.h=$x_cl iy.l=1 iy.h=$y_t Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2644          append indeck "+oxide\n"
2645          append indeck "REGION NUM=3 ix.l=$x_cl ix.h=$x_ch iy.l=1 iy.h=$y_cl Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2646          append indeck "+silicon\n"
2647          append indeck "REGION NUM=4 ix.l=$x_cl ix.h=$x_ch iy.l=$y_cl iy.h=$y_ch Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2648          append indeck "+silicon\n"
2649          append indeck "REGION NUM=5 ix.l=$x_cl ix.h=$x_ch iy.l=$y_ch iy.h=$y_ch Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2650          append indeck "+silicon\n"
2651          append indeck "REGION NUM=6 ix.l=$x_cl ix.h=$x_ch iy.l=$y_ch iy.h=$y_t Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2652          append indeck "+silicon\n"
2653          append indeck "REGION NUM=7 ix.l=$x_ch ix.h=$x_t iy.l=1 iy.h=$y_t Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2654          append indeck "+oxide\n"
2655          append indeck "REGION NUM=8 ix.l=1 ix.h=$x_t iy.l=1 iy.h=$y_t Z.MIN=[expr {$sub_ox+$fin_height}] Z.MAX=[expr {$sub_ox+$fin_height+$top_ox}]\n"
2656          append indeck "+oxide\n\n"
2657        } else {
2658          append indeck "REGION NUM=1 ix.l=1 ix.h=$x_cl iy.l=1 iy.h=$y_t oxide\n"
2659          append indeck "REGION NUM=2 ix.l=$x_cl ix.h=$x_ch iy.l=1 iy.h=$y_cl silicon\n"
2660          append indeck "REGION NUM=3 ix.l=$x_cl ix.h=$x_ch iy.l=$y_cl iy.h=$y_cc silicon\n"
2661          append indeck "REGION NUM=4 ix.l=$x_cl ix.h=$x_ch iy.l=$y_cc iy.h=$y_ch silicon\n"
2662          append indeck "REGION NUM=5 ix.l=$x_cl ix.h=$x_ch iy.l=$y_ch iy.h=$y_t silicon\n"
2663          append indeck "REGION NUM=6 ix.l=$x_ch ix.h=$x_t iy.l=1 iy.h=$y_t oxide\n\n"
2664        }
2665
2666        if {$dimension==3} {
2667          append indeck "ELECT NUM=1 ix.l=$x_cl ix.h=$x_ch iy.l=1 iy.h=1 Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2668          append indeck "ELECT NUM=2 ix.l=$x_cl ix.h=$x_ch iy.l=$y_t iy.h=$y_t Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height}]\n"
2669          append indeck "ELECT NUM=3 ix.l=1 ix.h=1 iy.l=$y_gl iy.h=$y_gh Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height+$top_ox}]\n"
2670          append indeck "ELECT NUM=4 ix.l=$x_t ix.h=$x_t iy.l=$y_gl iy.h=$y_gh Z.MIN=$sub_ox Z.MAX=[expr {$sub_ox+$fin_height+$top_ox}]\n"
2671          append indeck "ELECT NUM=5 ix.l=$x_cl ix.h=$x_ch iy.l=$y_gl iy.h=$y_gh Z.MIN=[expr {$sub_ox+$fin_height+$top_ox}] Z.MAX=[expr {$sub_ox+$fin_height+$top_ox}]\n\n"
2672        } else {
2673          append indeck "ELECT NUM=1 ix.l=$x_cl ix.h=$x_ch iy.l=1 iy.h=1\n"
2674          append indeck "ELECT NUM=2 ix.l=$x_cl ix.h=$x_ch iy.l=$y_t iy.h=$y_t\n"
2675          append indeck "ELECT NUM=3 ix.l=1 ix.h=1 iy.l=$y_gl iy.h=$y_gh\n"
2676          append indeck "ELECT NUM=4 ix.l=$x_t ix.h=$x_t iy.l=$y_gl iy.h=$y_gh\n\n"
2677        }
2678        if {$dimension==3} {
2679          if {$gaussian_dop} {
2680          append indeck "dop gauss region=4 conc=$ns direction=y ch=$char_len_source Lat.char=$pene_ox $source_dop_type.type\n"
2681          append indeck "+ Y.BOTTOM=$ls\n"
2682          append indeck "dop gauss region=5 conc=$nd direction=y ch=$char_len_drain Lat.char=$pene_ox $drain_dop_type.type\n"
2683          append indeck "+ Y.BOTTOM=$d_b\n\n"
2684        } else {
2685          append indeck "dop unif region=4 conc=$nch $ch_dop_type.type\n"
2686          append indeck "dop unif region=5 conc=$nch $ch_dop_type.type\n"
2687          append indeck "dop unif region=3 conc=$ns $source_dop_type.type\n"
2688          append indeck "dop unif region=6 conc=$nd $drain_dop_type.type\n\n"
2689        }
2690          } else {
2691        if {$gaussian_dop} {
2692        #append indeck "dop unif region=3 conc=$nch $ch_dop_type.type\n"
2693          append indeck "dop unif region=2 conc=$ns $source_dop_type.type\n"
2694          append indeck "dop unif region=5 conc=$nd $drain_dop_type.type\n\n"
2695          append indeck "dop gauss region=3 conc=$ns direction=y ch=$char_len_source Lat.char=$pene_ox $source_dop_type.type\n"
2696          append indeck "+ Y.BOTTOM=$s_b\n"
2697          append indeck "dop gauss region=4 conc=$nd direction=y ch=$char_len_drain Lat.char=$pene_ox $drain_dop_type.type\n"
2698          append indeck "+ Y.BOTTOM=$d_b\n\n"
2699        } else {
2700          append indeck "dop unif region=3 conc=$nch $ch_dop_type.type\n"
2701          append indeck "dop unif region=4 conc=$nch $ch_dop_type.type\n"
2702          append indeck "dop unif region=2 conc=$ns $source_dop_type.type\n"
2703          append indeck "dop unif region=5 conc=$nd $drain_dop_type.type\n\n"
2704        }
2705          }
2706          append indeck "contact all neutral\n"
2707        if {$gate_type=="poly"} {
2708          append indeck "contact num=1 $poly_dop_type.polysilicon\n"
2709          append indeck "contact num=2 $poly_dop_type.polysilicon\n"
2710        if {$dimension==3} {
2711          append indeck "contact num=3 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2712          append indeck "contact num=4 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2713          append indeck "contact num=5 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2714        } else {
2715          append indeck "contact num=3 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2716          append indeck "contact num=4 $poly_dop_type.polysilicon workfunction=$workfunc\n"
2717        }
2718          } else {
2719          append indeck "contact num=1\n"
2720          append indeck "contact num=2\n"
2721        if {$dimension==3} {
2722          append indeck "contact num=3 workfunction=$workfunc\n"
2723          append indeck "contact num=4 workfunction=$workfunc\n"
2724          append indeck "contact num=5 workfunction=$workfunc\n"
2725        } else {
2726          append indeck "contact num=3 workfunction=$workfunc\n"
2727          append indeck "contact num=4 workfunction=$workfunc\n"
2728        }
2729          }
2730        }
2731          if {$grid} {
2732                  set file "pdr[pid].2d"
2733          append indeck "options POSTscript\n"
2734          append indeck "PLOT.2D GRID NO.FILL INTERFACE=2 outfile=$file\n"
2735          append indeck "options Splot\n"
2736          append datafiles_2D $file " Grid"
2737        set vstep_nm 0
2738        set vstep_sz 0
2739        set vstart 0
2740          } else {
2741        set vstep_nm 0
2742        set vstep_sz 0
2743        set vstart 0
2744          append indeck "MODELS srh $BGN $CONMOB $FLDMOB $CCMOB $GATMOB $IMPACT st=$stat TEMP=$tl\n"
2745          append indeck "SYSTEM NEWTON ELECTRONS HOLES\n"
2746          append indeck "solve init outfile=initsol\n"
2747        if {$plot_d=="2D" || $plot_d=="3D"} {                                   
2748        set plot_dimension $plot_d
2749        set file "pdr[pid]_dop.3d"
2750          append indeck "plot.3d dop outf=$file\n"
2751          append datafiles_3D "$file {Doping density} $plot_dimension"
2752        }
2753        if {$device_type=="user_nanowire"} {
2754                set xposition 0.0
2755        } elseif {$device_type=="user_finfet"} {
2756                set xposition [expr {$tox1+$chw/2.0}]
2757        }
2758        if {$plot_d=="x"} {
2759          append indeck "plot.1d dop a.x=[expr {0.0}] b.x=[expr {$total_width}] a.y=$source_pos b.y =$source_pos"
2760        if {$dimension==3} {
2761          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2762        }
2763          append indeck "\n+ ascii outf=pdr[pid].dop\n"
2764        }
2765        if {$plot_d=="y"} {
2766          append indeck "plot.1d dop a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2767        if {$dimension==3} {
2768          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2769        }
2770          append indeck "\n+ ascii outf=pdr[pid].dop\n"
2771        }
2772        if {$plot_d=="2D" || $plot_d=="3D"} {
2773        set plot_dimension $plot_d
2774        set file "pdr[pid]_elect.3d"
2775          append indeck "plot.3d elect outf=$file\n"
2776          append datafiles_3D " $file {Electron density} $plot_dimension"
2777        }
2778        if {$plot_d=="x"} {
2779          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2780        if {$dimension==3} {
2781          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2782        }
2783          append indeck "\n+ ascii outf=pdr[pid].ele\n"
2784        }
2785        if {$plot_d=="y"} {
2786          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2787        if {$dimension==3} {
2788          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2789        }
2790          append indeck "\n+ ascii outf=pdr[pid].ele\n"
2791        }
2792        if {$plot_d=="2D" || $plot_d=="3D"} {                                   
2793        set plot_dimension $plot_d
2794        set file "pdr[pid]_hole.3d"
2795          append indeck "plot.3d hole outf=$file\n"
2796          append datafiles_3D " $file {Hole density} $plot_dimension"
2797        }
2798        if {$plot_d=="x"} {
2799          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2800        if {$dimension==3} {
2801          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2802        }
2803          append indeck "\n+ ascii outf=pdr[pid].hole\n"
2804        }
2805        if {$plot_d=="y"} {
2806          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2807        if {$dimension==3} {
2808          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2809        }
2810          append indeck "\n+ ascii outf=pdr[pid].hole\n"
2811        }
2812        if {$plot_psi=="2D" || $plot_psi=="3D"} {
2813          set plot_dimension $plot_psi
2814          set file "pdr[pid]_pot.3d"
2815          append indeck "plot.3d pot outf=$file\n"
2816          append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
2817        }
2818        if {$plot_psi=="x"} {
2819          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2820        if {$dimension==3} {
2821          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2822        }
2823          append indeck "\n+ ascii outf=pdr[pid].pot\n"                         
2824        }
2825        if {$plot_psi=="y"} {
2826          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2827        if {$dimension==3} {
2828          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2829        }
2830          append indeck "\n+ ascii outf=pdr[pid].pot\n"
2831        }
2832        if {$band=="x"} {
2833          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2834        if {$dimension==3} {
2835          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2836        }
2837          append indeck "\n+ ascii outf=pdr[pid].vband\n"
2838        }
2839        if {$band=="y"} {
2840          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2841        if {$dimension==3} {
2842          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2843        }
2844          append indeck "\n+ ascii outf=pdr[pid].vband\n"
2845        }
2846        if {$band=="x"} {
2847          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2848        if {$dimension==3} {
2849          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2850        }
2851          append indeck "\n+ ascii outf=pdr[pid].cband\n"
2852        }
2853        if {$band=="y"} {
2854          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2855        if {$dimension==3} {
2856          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2857        }
2858          append indeck "\n+ ascii outf=pdr[pid].cband\n"
2859        }
2860        if {$band=="x"} {
2861          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2862        if {$dimension==3} {
2863          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2864        }
2865          append indeck "\n+ ascii outf=pdr[pid].qfn\n"
2866        }
2867        if {$band=="y"} {
2868          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2869        if {$dimension==3} {
2870          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2871        }
2872          append indeck "\n+ ascii outf=pdr[pid].qfn\n"
2873        }
2874        if {$band=="x"} {
2875          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2876        if {$dimension==3} {
2877          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2878        }
2879          append indeck "\n+ ascii outf=pdr[pid].qfp\n"
2880        }
2881        if {$band=="y"} {
2882          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2883        if {$dimension==3} {
2884          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2885        }
2886          append indeck "\n+ ascii outf=pdr[pid].qfp\n"
2887        }
2888
2889        if {$e_field=="2D" || $e_field=="3D"} {
2890        set plot_dimension $e_field
2891        set file "pdr[pid]_ef.3d"
2892          append indeck "plot.3d e.field outf=$file\n"
2893          append datafiles_3D " $file {Electric field} $plot_dimension"
2894        }
2895        if {$e_field=="x"} {
2896          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2897        if {$dimension==3} {
2898          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2899        }
2900          append indeck "\n+ ascii outf=pdr[pid].efield\n"
2901        }
2902        if {$e_field=="y"} {
2903          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2904        if {$dimension==3} {
2905          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2906        }
2907          append indeck "\n+ ascii outf=pdr[pid].efield\n"
2908        }
2909
2910        if {$net_charge=="2D" || $net_charge=="3D"} {
2911          set plot_dimension $net_charge
2912          set file "pdr[pid]_nc.3d"
2913          append indeck "plot.3d net.charge outf=$file\n"
2914          append datafiles_3D " $file {Net charge} $plot_dimension"
2915        }
2916        if {$net_charge=="x"} {
2917          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2918        if {$dimension==3} {
2919          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2920        }
2921          append indeck "\n+ ascii outf=pdr[pid].ro\n"
2922        }
2923        if {$net_charge=="y"} {
2924          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
2925        if {$dimension==3} {
2926          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2927        }
2928          append indeck "\n+ ascii outf=pdr[pid].ro\n"
2929        }
2930
2931        if {!$equil_padre} {
2932          append indeck "load infile=initsol\n"
2933        if {$plot_iv} {
2934          append indeck "log outf=pdr[pid].iv\n"
2935        }
2936       
2937        if {$device_type=="user_nanowire"} {
2938                append indeck "solve v1=$vs v2=$vd v3=$vg"
2939        } elseif {$device_type=="user_finfet"} {
2940                  append indeck "solve v1=$vs v2=$vd v3=$vg v4=$vg"
2941                if {$dimension==3} {
2942                  append indeck " v5=$vg"
2943                }
2944        }
2945          append indeck "\n"
2946        set vgfinal [expr {$vg+$ngstep*$vgstep}]
2947        set vdfinal [expr {$vd+$ndstep*$vdstep}]
2948        if {($ndstep == 0 || $vdstep ==0)&&($ngstep==0||$vgstep ==0)} {
2949        set vstep_nm 0
2950        set vstep_sz 0
2951        set other_vstep_nm 0
2952        set other_vstep_sz 0
2953        set other_vstart $vd   
2954        set vhigh $vg
2955        set counter 0
2956        set inner_loop_voltage "V_gate"
2957        set outer_loop_voltage "V_drain"
2958        set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]               
2959       set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
2960
2961
2962        if {$plot_d=="2D" || $plot_d=="3D"} {
2963          set plot_dimension $plot_d
2964          set file "pdr[pid]_dop.3div"
2965          append indeck "plot.3d dop outf=$file\n"
2966          append datafiles_3D " $file {Doping density} $plot_dimension"
2967          set file "pdr[pid]_ele.3div"
2968          append indeck "plot.3d elect outf=$file\n"
2969          append datafiles_3D " $file {Electron density} $plot_dimension"
2970          set file "pdr[pid]_hole.3div"
2971          append indeck "plot.3d hole outf=$file\n"
2972          append datafiles_3D " $file {Hole density} $plot_dimension"
2973        }
2974        if {$plot_psi=="2D" || $plot_psi=="3D"} {
2975          set plot_dimension $plot_psi
2976          set file "pdr[pid]_psi.3div"
2977          append indeck "plot.3d pot outf=$file\n"
2978          append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
2979        }
2980        if {$e_field=="2D" || $e_field=="3D"} {
2981          set plot_dimension $e_field
2982          set file "pdr[pid]_efield.3div"
2983          append indeck "plot.3d e.field outf=$file\n"
2984          append datafiles_3D " $file {Electric field} $plot_dimension"
2985        }
2986        if {$net_charge=="2D" || $net_charge=="3D"} {
2987          set plot_dimension $net_charge
2988          set file "pdr[pid]_nc.3div"
2989          append indeck "plot.3d net.charge outf=$file\n"
2990          append datafiles_3D " $file {Net charge} $plot_dimension"
2991        }
2992
2993        if {$plot_d=="x"} {
2994          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
2995        if {$dimension==3} {
2996          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
2997        }
2998          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].eleiv\n"
2999        }
3000        if {$plot_d=="y"} {
3001          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3002        if {$dimension==3} {
3003          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3004        }
3005          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].eleiv\n"
3006        }
3007
3008        if {$plot_d=="x"} {
3009          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3010        if {$dimension==3} {
3011          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3012        }
3013          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].holeiv\n"
3014        }
3015        if {$plot_d=="y"} {
3016          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3017        if {$dimension==3} {
3018          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3019        }
3020          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].holeiv\n"
3021        }
3022
3023        if {$plot_psi=="x"} {
3024          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3025        if {$dimension==3} {
3026          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3027        }
3028          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].potiv\n"
3029        }
3030        if {$plot_psi=="y"} {
3031          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3032        if {$dimension==3} {
3033          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3034        }
3035          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].potiv\n"
3036        }
3037
3038        if {$band=="x"} {
3039          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3040        if {$dimension==3} {
3041          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3042        }
3043          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].vbiv\n"
3044        }
3045        if {$band=="y"} {
3046          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3047        if {$dimension==3} {
3048          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3049        }
3050          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].vbiv\n"
3051        }
3052
3053        if {$band=="x"} {
3054          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3055        if {$dimension==3} {
3056          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3057        }
3058          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].cbiv\n"
3059        }
3060        if {$band=="y"} {
3061          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3062        if {$dimension==3} {
3063          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3064        }
3065          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].cbiv\n"
3066        }
3067
3068        if {$band=="x"} {
3069          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3070        if {$dimension==3} {
3071          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3072        }
3073          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].qfniv\n"
3074        }
3075        if {$band=="y"} {
3076          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3077        if {$dimension==3} {
3078          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3079        }
3080          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].qfniv\n"
3081        }
3082
3083        if {$band=="x"} {
3084          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3085        if {$dimension==3} {
3086          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3087        }
3088          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].qfpiv\n"
3089        }
3090        if {$band=="y"} {
3091          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3092        if {$dimension==3} {
3093          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3094        }
3095          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].qfpiv\n"
3096        }
3097
3098        if {$e_field=="x"} {
3099          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3100        if {$dimension==3} {
3101          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3102        }
3103          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].efieldiv\n"
3104        }
3105        if {$e_field=="y"} {
3106          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3107        if {$dimension==3} {
3108          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3109        }
3110          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].efieldiv\n"
3111        }
3112
3113        if {$net_charge=="x"} {
3114          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3115        if {$dimension==3} {
3116          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3117        }
3118          append indeck "\n+ ascii outf=pdr[pid]_bias_0_[expr $counter].roiv\n"
3119        }
3120        if {$net_charge=="y"} {
3121          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3122        if {$dimension==3} {
3123          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3124        }
3125          append indeck "\n+ ascii outf=pdr[pid]_bias_0]_[expr $counter].roiv\n"
3126        }
3127        }
3128
3129if {$ngstep!=0 && $vgstep!=0} {
3130   if {$ndstep!=0 && $vdstep!=0} {
3131     if {$inner_loop_voltage=="V_drain"} {     
3132       set outer_loop_voltage "V_gate"
3133       set vstart $vd
3134       set vstep_nm $ndstep
3135       set vstep_sz $vdstep
3136       set vhigh [expr {$vstart+$vstep_sz*$vstep_nm}]
3137       set other_vstart $vg
3138       set other_vstep_nm $ngstep
3139       set other_vstep_sz $vgstep
3140       set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]                 
3141       set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
3142       for {set outcounter 0} {$outcounter <= $ngstep} {incr outcounter} {
3143         if {$device_type=="user_nanowire"} {
3144                append indeck "solve v1=$vs v2=$vd v3=[expr {$vg+$vgstep*$outcounter}]"
3145         } elseif {$device_type=="user_finfet"} {
3146                append indeck "solve v1=$vs v2=$vd v3=[expr {$vg+$vgstep*$outcounter}] v4=[expr {$vg+$vgstep*$outcounter}]"
3147                if {$dimension==3} {
3148                        append indeck " v5=[expr {$vg+$vgstep*$outcounter}]"
3149                }
3150         }
3151          append indeck "\n"
3152        set counter 0
3153        if {$device_type=="user_nanowire"} {
3154                append indeck "+ elect=3"
3155         } elseif {$device_type=="user_finfet"} {
3156                if {$dimension==3} {
3157                  append indeck "+ elect=345\n"
3158                } else {
3159                  append indeck "+ elect=34\n"
3160                }
3161        }
3162        if {$plot_d=="x"} {
3163          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3164          if {$dimension==3} {
3165          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3166          }
3167          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3168        }
3169        if {$plot_d=="y"} {
3170          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3171          if {$dimension==3} {
3172          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3173          }
3174          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3175        }
3176
3177        if {$plot_d=="x"} {
3178          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3179          if {$dimension==3} {
3180          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3181          }
3182          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3183        }
3184        if {$plot_d=="y"} {
3185          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3186          if {$dimension==3} {
3187          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3188          }
3189          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3190        }
3191
3192        if {$plot_psi=="x"} {
3193          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3194          if {$dimension==3} {
3195          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3196          }
3197          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3198        }
3199        if {$plot_psi=="y"} {
3200          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3201          if {$dimension==3} {
3202          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3203          }
3204          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3205        }               
3206
3207        if {$band=="x"} {
3208          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3209          if {$dimension==3} {
3210          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3211          }
3212          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3213        }
3214        if {$band=="y"} {
3215          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3216          if {$dimension==3} {
3217          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3218          }
3219          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3220        }
3221
3222        if {$band=="x"} {
3223          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3224          if {$dimension==3} {
3225          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3226          }
3227          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3228        }
3229        if {$band=="y"} {
3230          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3231          if {$dimension==3} {
3232          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3233          }
3234          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3235        }
3236
3237        if {$band=="x"} {
3238          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3239          if {$dimension==3} {
3240          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3241          }
3242          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3243        }
3244        if {$band=="y"} {
3245          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3246          if {$dimension==3} {
3247          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3248          }
3249          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3250        }
3251
3252
3253        if {$band=="x"} {
3254          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3255          if {$dimension==3} {
3256          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3257          }
3258          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3259        }
3260        if {$band=="y"} {
3261          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3262          if {$dimension==3} {
3263          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3264          }
3265          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3266        }
3267
3268        if {$e_field=="x"} {
3269          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3270          if {$dimension==3} {
3271          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3272          }
3273          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3274        }
3275        if {$e_field=="y"} {
3276          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3277          if {$dimension==3} {
3278          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3279          }
3280          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3281        }
3282
3283        if {$net_charge=="x"} {
3284          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3285          if {$dimension==3} {
3286          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3287          }
3288          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3289        }
3290        if {$net_charge=="y"} {
3291          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3292          if {$dimension==3} {
3293          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3294          }
3295          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3296        }
3297        set counter 1
3298        while { $counter <= $ndstep } {
3299          append indeck "solve PROJ vstep=$vdstep nsteps=1\n"
3300          append indeck "+ elect=2\n"
3301          incr counter
3302        }
3303          if {$plot_d=="x"} {
3304          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3305          if {$dimension==3} {
3306          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3307          }
3308          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3309        }
3310        if {$plot_d=="y"} {
3311          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3312          if {$dimension==3} {
3313          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3314          }
3315          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3316        }
3317
3318        if {$plot_d=="x"} {
3319          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3320          if {$dimension==3} {
3321          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3322          }
3323          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3324        }
3325        if {$plot_d=="y"} {
3326          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3327          if {$dimension==3} {
3328          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3329          }
3330          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3331        }
3332
3333        if {$plot_psi=="x"} {
3334          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3335          if {$dimension==3} {
3336          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3337          }
3338          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3339        }
3340        if {$plot_psi=="y"} {
3341          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3342          if {$dimension==3} {
3343          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3344          }
3345          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3346        }               
3347
3348        if {$band=="x"} {
3349          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3350          if {$dimension==3} {
3351          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3352          }
3353          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3354        }
3355        if {$band=="y"} {
3356          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3357          if {$dimension==3} {
3358          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3359          }
3360          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3361        }
3362
3363        if {$band=="x"} {
3364          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3365          if {$dimension==3} {
3366          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3367          }
3368          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3369        }
3370        if {$band=="y"} {
3371          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3372          if {$dimension==3} {
3373          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3374          }
3375          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3376        }
3377
3378        if {$band=="x"} {
3379          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3380          if {$dimension==3} {
3381          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3382          }
3383          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3384        }
3385        if {$band=="y"} {
3386          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3387          if {$dimension==3} {
3388          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3389          }
3390          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3391        }
3392
3393
3394        if {$band=="x"} {
3395          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3396          if {$dimension==3} {
3397          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3398          }
3399          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3400        }
3401        if {$band=="y"} {
3402          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3403          if {$dimension==3} {
3404          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3405          }
3406          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3407        }
3408
3409
3410        if {$e_field=="x"} {
3411          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3412          if {$dimension==3} {
3413          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3414          }
3415          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3416        }
3417        if {$e_field=="y"} {
3418          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3419          if {$dimension==3} {
3420          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3421          }
3422          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3423        }
3424
3425        if {$net_charge=="x"} {
3426          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3427          if {$dimension==3} {
3428          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3429          }
3430          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3431        }
3432        if {$net_charge=="y"} {
3433          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3434          if {$dimension==3} {
3435          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3436          }
3437          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3438        }
3439
3440        }
3441        if {$plot_d=="2D" || $plot_d=="3D"} {
3442          set plot_dimension $plot_d
3443          set file "pdr[pid]_dop.3div"
3444          append indeck "plot.3d dop outf=$file\n"
3445          append datafiles_3D " $file {Doping density} $plot_dimension"
3446          set file "pdr[pid]_ele.3div"
3447          append indeck "plot.3d elect outf=$file\n"
3448          append datafiles_3D " $file {Electron density} $plot_dimension"
3449          set file "pdr[pid]_hole.3div"
3450          append indeck "plot.3d hole outf=$file\n"
3451          append datafiles_3D " $file {Hole density} $plot_dimension"
3452        }
3453        if {$plot_psi=="2D" || $plot_psi=="3D"} {
3454          set plot_dimension $plot_psi
3455          set file "pdr[pid]_psi.3div"
3456          append indeck "plot.3d pot outf=$file\n"
3457          append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
3458        }
3459        if {$e_field=="2D" || $e_field=="3D"} {
3460          set plot_dimension $e_field
3461          set file "pdr[pid]_efield.3div"
3462          append indeck "plot.3d e.field outf=$file\n"
3463          append datafiles_3D " $file {Electric field} $plot_dimension"
3464        }
3465        if {$net_charge=="2D" || $net_charge=="3D"} {
3466          set plot_dimension $net_charge
3467          set file "pdr[pid]_nc.3div"
3468          append indeck "plot.3d net.charge outf=$file\n"
3469          append datafiles_3D " $file {Net charge} $plot_dimension"
3470        }
3471    } elseif {$inner_loop_voltage=="V_gate"} {
3472       set outer_loop_voltage "V_drain"
3473       set vstart $vg
3474       set vstep_nm $ngstep
3475       set vstep_sz $vgstep
3476       set other_vstart $vd
3477       set other_vstep_nm $ndstep
3478       set other_vstep_sz $vdstep
3479       set vhigh [expr {$vstart+$vstep_sz*$vstep_nm}]
3480       set outer_volt [string index $outer_loop_voltage 0][string index $outer_loop_voltage 2]                 
3481       set inner_volt [string index $inner_loop_voltage 0][string index $inner_loop_voltage 2]
3482       for {set outcounter 0} {$outcounter <= $ndstep} {incr outcounter} {
3483        if {$device_type=="user_nanowire"} {
3484                append indeck "solve v1=$vs v2=[expr {$vd+$vdstep*($outcounter)}] v3=$vg"
3485         } elseif {$device_type=="user_finfet"} {
3486         append indeck "solve v1=$vs v2=[expr {$vd+$vdstep*($outcounter)}] v3=$vg v4=$vg"
3487          if {$dimension==3} {
3488                append indeck " v5=$vg"
3489          }
3490         }
3491          append indeck "\n"
3492        set counter 0
3493        if {$device_type=="user_nanowire"} {
3494                append indeck"+ elect=3\n"
3495         } elseif {$device_type=="user_finfet"} {
3496        if {$dimension==3} {
3497          append indeck "+ elect=345\n"
3498        } else {
3499          append indeck "+ elect=34\n"
3500        }
3501        }
3502
3503        if {$plot_d=="x"} {
3504          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3505          if {$dimension==3} {
3506          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3507          }
3508          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3509        }
3510        if {$plot_d=="y"} {
3511          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3512          if {$dimension==3} {
3513          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3514          }
3515          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3516        }
3517
3518        if {$plot_d=="x"} {
3519          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3520          if {$dimension==3} {
3521          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3522          }
3523          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3524        }
3525        if {$plot_d=="y"} {
3526          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3527          if {$dimension==3} {
3528          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3529          }
3530          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3531        }
3532
3533        if {$plot_psi=="x"} {
3534          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3535          if {$dimension==3} {
3536          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3537          }
3538          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3539        }
3540        if {$plot_psi=="y"} {
3541          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3542          if {$dimension==3} {
3543          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3544          }
3545          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3546        }               
3547
3548        if {$band=="x"} {
3549          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3550          if {$dimension==3} {
3551          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3552          }
3553          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3554        }
3555        if {$band=="y"} {
3556          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3557          if {$dimension==3} {
3558          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3559          }
3560          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3561        }
3562
3563        if {$band=="x"} {
3564          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3565          if {$dimension==3} {
3566          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3567          }
3568          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3569        }
3570        if {$band=="y"} {
3571          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3572          if {$dimension==3} {
3573          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3574          }
3575          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3576        }
3577
3578        if {$band=="x"} {
3579          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3580          if {$dimension==3} {
3581          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3582          }
3583          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3584        }
3585        if {$band=="y"} {
3586          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3587          if {$dimension==3} {
3588          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3589          }
3590          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3591        }
3592
3593
3594        if {$band=="x"} {
3595          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3596          if {$dimension==3} {
3597          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3598          }
3599          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3600        }
3601        if {$band=="y"} {
3602          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3603          if {$dimension==3} {
3604          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3605          }
3606          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3607        }
3608
3609        if {$e_field=="x"} {
3610          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3611          if {$dimension==3} {
3612          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3613          }
3614          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3615        }
3616        if {$e_field=="y"} {
3617          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3618          if {$dimension==3} {
3619          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3620          }
3621          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3622        }
3623
3624        if {$net_charge=="x"} {
3625          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3626          if {$dimension==3} {
3627          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3628          }
3629          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3630        }
3631        if {$net_charge=="y"} {
3632          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3633          if {$dimension==3} {
3634          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3635          }
3636          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3637        }
3638        set counter 1
3639        while { $counter <= $vstep_nm } {
3640          append indeck "solve PROJ vstep=$vstep_sz nsteps=1\n"
3641
3642        if {$device_type=="user_nanowire"} {
3643                append indeck "+ elect=3\n"
3644         } elseif {$device_type=="user_finfet"} {
3645                if {$dimension==3} {
3646                  append indeck "+ elect=345\n"
3647                } else {
3648                  append indeck "+ elect=34\n"
3649                }
3650        }
3651
3652        if {$plot_d=="x"} {
3653          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3654          if {$dimension==3} {
3655          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3656          }
3657          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3658        }
3659        if {$plot_d=="y"} {
3660          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3661          if {$dimension==3} {
3662          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3663          }
3664          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3665        }
3666
3667        if {$plot_d=="x"} {
3668          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3669          if {$dimension==3} {
3670          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3671          }
3672          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3673        }
3674        if {$plot_d=="y"} {
3675          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3676          if {$dimension==3} {
3677                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3678          }
3679          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3680        }
3681
3682        if {$plot_psi=="x"} {
3683          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3684          if {$dimension==3} {
3685                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3686          }
3687          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3688        }
3689        if {$plot_psi=="y"} {
3690          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3691          if {$dimension==3} {
3692                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3693          }
3694          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3695        }               
3696
3697        if {$band=="x"} {
3698          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3699          if {$dimension==3} {
3700                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3701          }
3702          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3703        }
3704        if {$band=="y"} {
3705          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3706          if {$dimension==3} {
3707                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3708          }
3709          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3710        }
3711
3712        if {$band=="x"} {
3713          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3714          if {$dimension==3} {
3715                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3716          }
3717          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3718        }
3719        if {$band=="y"} {
3720          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3721          if {$dimension==3} {
3722                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3723          }
3724          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3725        }
3726
3727        if {$band=="x"} {
3728          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3729          if {$dimension==3} {
3730                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3731          }
3732          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3733        }
3734        if {$band=="y"} {
3735          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3736          if {$dimension==3} {
3737                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3738          }
3739          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3740        }
3741
3742
3743        if {$band=="x"} {
3744          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3745          if {$dimension==3} {
3746                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3747          }
3748          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3749        }
3750        if {$band=="y"} {
3751          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3752          if {$dimension==3} {
3753                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3754          }
3755          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3756        }
3757
3758        if {$e_field=="x"} {
3759          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3760          if {$dimension==3} {
3761                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3762          }
3763          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3764        }
3765        if {$e_field=="y"} {
3766          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3767          if {$dimension==3} {
3768                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3769          }
3770          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3771        }
3772
3773        if {$net_charge=="x"} {
3774          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3775          if {$dimension==3} {
3776                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3777          }
3778          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3779        }
3780        if {$net_charge=="y"} {
3781          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3782          if {$dimension==3} {
3783                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3784          }
3785          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3786        }
3787
3788        incr counter
3789         }
3790        }
3791        if {$plot_d=="2D" || $plot_d=="3D"} {
3792        set plot_dimension $plot_d
3793          set file "pdr[pid]_dop.3div"
3794          append indeck "plot.3d dop outf=$file\n"
3795          append datafiles_3D " $file {Doping density} $plot_dimension"
3796          set file "pdr[pid]_ele.3div"
3797          append indeck "plot.3d elect outf=$file\n"
3798          append datafiles_3D " $file {Electron density} $plot_dimension"
3799          set file "pdr[pid]_hole.3div"
3800          append indeck "plot.3d hole outf=$file\n"
3801          append datafiles_3D " $file {Hole density} $plot_dimension"
3802        }
3803        if {$plot_psi=="2D" || $plot_psi=="3D"} {
3804          set plot_dimension $plot_psi
3805          set file "pdr[pid]_psi.3div"
3806          append indeck "plot.3d pot outf=$file\n"
3807          append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
3808        }
3809        if {$e_field=="2D" || $e_field=="3D"} {
3810          set plot_dimension $e_field
3811          set file "pdr[pid]_efield.3div"
3812          append indeck "plot.3d e.field outf=$file\n"
3813          append datafiles_3D " $file {Electric field} $plot_dimension"
3814        }
3815        if {$net_charge=="2D" || $net_charge=="3D"} {
3816          set plot_dimension $net_charge
3817          set file "pdr[pid]_nc.3div"
3818          append indeck "plot.3d net.charge outf=$file\n"
3819          append datafiles_3D " $file {Net charge} $plot_dimension"
3820        }
3821        }
3822        } else {
3823          set counter 0
3824          set outcounter 0
3825          set vstep_nm $ngstep
3826          set vstep_sz $vgstep
3827          set vstart $vg
3828          set vhigh [expr {$vstart+$vstep_sz*$vstep_nm}]
3829          set other_vstart $vd
3830          set other_vstep_nm 0
3831          set other_vstep_sz 0
3832          set inner_loop_voltage "V_gate"
3833          set outer_loop_voltage "V_drain"
3834          set outer_volt "Vd"
3835          set inner_volt "Vg"
3836          if {$plot_d=="x"} {
3837          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3838        if {$dimension==3} {
3839          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3840        }
3841          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3842          }
3843          if {$plot_d=="y"} {
3844          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3845          if {$dimension==3} {
3846          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3847          }
3848          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3849          }
3850
3851          if {$plot_d=="x"} {
3852          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3853        if {$dimension==3} {
3854          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3855        }
3856          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3857          }
3858          if {$plot_d=="y"} {
3859          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3860        if {$dimension==3} {
3861          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3862        }
3863          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
3864          }
3865
3866          if {$plot_psi=="x"} {
3867          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3868        if {$dimension==3} {
3869          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3870        }
3871          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3872          }
3873          if {$plot_psi=="y"} {
3874          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3875        if {$dimension==3} {
3876          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3877        }
3878          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
3879          }
3880
3881          if {$band=="x"} {
3882          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3883        if {$dimension==3} {
3884          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3885        }
3886          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3887          }
3888          if {$band=="y"} {
3889          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3890        if {$dimension==3} {
3891          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3892        }
3893          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
3894          }
3895
3896          if {$band=="x"} {
3897          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3898        if {$dimension==3} {
3899          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3900        }
3901          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3902          }
3903          if {$band=="y"} {
3904          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3905        if {$dimension==3} {
3906          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3907        }
3908          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
3909          }
3910
3911          if {$band=="x"} {
3912          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3913        if {$dimension==3} {
3914          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3915        }
3916          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3917          }
3918          if {$band=="y"} {
3919          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3920        if {$dimension==3} {
3921          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3922        }
3923          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
3924          }
3925
3926          if {$band=="x"} {
3927          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3928        if {$dimension==3} {
3929          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3930        }
3931          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3932          }
3933          if {$band=="y"} {
3934          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3935        if {$dimension==3} {
3936          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3937        }
3938          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
3939          }
3940
3941          if {$e_field=="x"} {
3942          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3943        if {$dimension==3} {
3944          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3945        }
3946          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3947          }
3948          if {$e_field=="y"} {
3949          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3950        if {$dimension==3} {
3951          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3952        }
3953          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
3954          }
3955
3956          if {$net_charge=="x"} {
3957          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3958        if {$dimension==3} {
3959          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3960        }
3961          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3962          }
3963          if {$net_charge=="y"} {
3964          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3965        if {$dimension==3} {
3966          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3967        }
3968          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
3969        }
3970        set counter 1
3971             while { $counter <= $vstep_nm } {
3972          append indeck "solve PROJ vstep=$vstep_sz nsteps=1\n"
3973        if {$device_type=="user_nanowire"} {
3974                append indeck "+ elect=3\n"
3975         } elseif {$device_type=="user_finfet"} {
3976                if {$dimension==3} {
3977                  append indeck "+ elect=345\n"
3978                } else {
3979                  append indeck "+ elect=34\n"
3980                }
3981        }
3982
3983        if {$plot_d=="x"} {
3984          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
3985        if {$dimension==3} {
3986          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3987        }
3988          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3989                                }
3990        if {$plot_d=="y"} {
3991          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
3992        if {$dimension==3} {
3993          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
3994        }
3995          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
3996                                }
3997
3998        if {$plot_d=="x"} {
3999          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4000        if {$dimension==3} {
4001          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4002        }
4003          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4004                                }
4005        if {$plot_d=="y"} {
4006          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4007        if {$dimension==3} {
4008          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4009        }
4010          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4011                                }
4012
4013        if {$plot_psi=="x"} {
4014          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4015        if {$dimension==3} {
4016          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4017        }
4018          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4019                                }
4020        if {$plot_psi=="y"} {
4021          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4022        if {$dimension==3} {
4023          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4024        }
4025          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4026                                }
4027
4028        if {$band=="x"} {
4029          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4030        if {$dimension==3} {
4031          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4032        }
4033          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4034                                }
4035        if {$band=="y"} {
4036          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4037        if {$dimension==3} {
4038          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4039        }
4040          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4041                                }
4042
4043        if {$band=="x"} {
4044          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4045        if {$dimension==3} {
4046          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4047        }
4048          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4049                                }
4050        if {$band=="y"} {
4051          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4052        if {$dimension==3} {
4053          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4054        }
4055          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4056                                }
4057
4058        if {$band=="x"} {
4059          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4060        if {$dimension==3} {
4061          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4062        }
4063          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4064                                }
4065        if {$band=="y"} {
4066          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4067        if {$dimension==3} {
4068          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4069        }
4070          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4071                                }
4072
4073
4074        if {$band=="x"} {
4075          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4076        if {$dimension==3} {
4077          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4078        }
4079          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4080                                }
4081        if {$band=="y"} {
4082          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4083        if {$dimension==3} {
4084          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4085        }
4086          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4087                                }
4088
4089        if {$e_field=="x"} {
4090          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4091        if {$dimension==3} {
4092          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4093        }
4094          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4095                                }
4096        if {$e_field=="y"} {
4097          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4098        if {$dimension==3} {
4099          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4100        }
4101          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4102                                }
4103
4104        if {$net_charge=="x"} {
4105          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4106        if {$dimension==3} {
4107          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4108        }
4109          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4110                                }
4111        if {$net_charge=="y"} {
4112          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4113        if {$dimension==3} {
4114          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4115        }
4116          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4117                                }
4118
4119        incr counter
4120             }
4121
4122        }
4123        if {$plot_d=="2D" || $plot_d=="3D"} {
4124        set plot_dimension $plot_d
4125        set file "pdr[pid]_dop.3div"
4126          append indeck "plot.3d dop outf=$file\n"
4127          append datafiles_3D " $file {Doping density} $plot_dimension"
4128        set file "pdr[pid]_ele.3div"
4129          append indeck "plot.3d elect outf=$file\n"
4130          append datafiles_3D " $file {Electron density} $plot_dimension"
4131        set file "pdr[pid]_hole.3div"
4132          append indeck "plot.3d hole outf=$file\n"
4133          append datafiles_3D " $file {Hole density} $plot_dimension"
4134        }
4135        if {$plot_psi=="2D" || $plot_psi=="3D"} {
4136        set plot_dimension $plot_psi
4137        set file "pdr[pid]_psi.3div"
4138          append indeck "plot.3d pot outf=$file\n"
4139          append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
4140        }
4141        if {$e_field=="2D" || $e_field=="3D"} {
4142        set plot_dimension $e_field
4143        set file "pdr[pid]_efield.3div"
4144          append indeck "plot.3d e.field outf=$file\n"
4145          append datafiles_3D " $file {Electric field} $plot_dimension"
4146        }
4147        if {$net_charge=="2D" || $net_charge=="3D"} {
4148        set plot_dimension $net_charge
4149        set file "pdr[pid]_nc.3div"
4150          append indeck "plot.3d net.charge outf=$file\n"
4151          append datafiles_3D " $file {Net charge} $plot_dimension"
4152        }
4153      } elseif {$ndstep!=0 && $vdstep!=0} {
4154        set counter 0
4155        set vstep_nm $ndstep
4156        set vstep_sz $vdstep
4157        set vstart $vd
4158        set vhigh [expr {$vstart+$vstep_sz*$vstep_nm}]
4159        set outcounter 0
4160        set other_vstart $vg
4161        set other_vstep_nm 0
4162        set other_vstep_sz 0
4163        set inner_loop_voltage "V_drain"
4164        set outer_loop_voltage "V_gate"
4165        set outer_volt "Vd"
4166        set inner_volt "Vg"
4167        if {$plot_d=="x"} {
4168          append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4169        if {$dimension==3} {
4170          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4171        }
4172          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
4173        }
4174        if {$plot_d=="y"} {
4175          append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4176        if {$dimension==3} {
4177          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4178        }
4179          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
4180        }
4181
4182        if {$plot_d=="x"} {
4183          append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4184        if {$dimension==3} {
4185          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4186        }
4187          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4188        }
4189        if {$plot_d=="y"} {
4190          append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4191        if {$dimension==3} {
4192          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4193        }
4194          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4195        }
4196
4197        if {$plot_psi=="x"} {
4198          append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4199        if {$dimension==3} {
4200          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4201        }
4202          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4203        }
4204        if {$plot_psi=="y"} {
4205          append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4206        if {$dimension==3} {
4207          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4208        }
4209          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4210        }
4211
4212        if {$band=="x"} {
4213          append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4214        if {$dimension==3} {
4215          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4216        }
4217          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4218        }
4219        if {$band=="y"} {
4220          append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4221        if {$dimension==3} {
4222          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4223        }
4224          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4225        }
4226
4227        if {$band=="x"} {
4228          append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4229        if {$dimension==3} {
4230          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4231        }
4232          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4233        }
4234        if {$band=="y"} {
4235          append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4236        if {$dimension==3} {
4237          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4238        }
4239          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4240        }
4241
4242        if {$band=="x"} {
4243          append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4244        if {$dimension==3} {
4245          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4246        }
4247          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4248        }
4249        if {$band=="y"} {
4250          append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4251        if {$dimension==3} {
4252          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4253        }
4254          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4255        }
4256
4257        if {$band=="x"} {
4258          append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4259        if {$dimension==3} {
4260          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4261        }
4262          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4263        }
4264        if {$band=="y"} {
4265          append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4266        if {$dimension==3} {
4267          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4268        }
4269          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4270        }
4271
4272        if {$e_field=="x"} {
4273          append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4274        if {$dimension==3} {
4275          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4276        }
4277          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4278        }
4279        if {$e_field=="y"} {
4280          append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4281        if {$dimension==3} {
4282          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4283        }
4284          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4285        }
4286
4287        if {$net_charge=="x"} {
4288          append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4289        if {$dimension==3} {
4290          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4291        }
4292          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4293        }
4294        if {$net_charge=="y"} {
4295          append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4296        if {$dimension==3} {
4297          append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4298        }
4299          append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4300        }
4301        set counter 1
4302          while { $counter <= $vstep_nm } {
4303                append indeck "solve PROJ vstep=$vstep_sz nsteps=1\n"
4304                append indeck "+ elect=2\n"
4305
4306                if {$plot_d=="x"} {
4307                        append indeck "plot.1d elect a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4308                        if {$dimension==3} {
4309                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4310                        }
4311                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
4312                }
4313                if {$plot_d=="y"} {
4314                        append indeck "plot.1d elect a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4315                        if {$dimension==3} {
4316                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4317                        }
4318                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].eleiv\n"
4319                }
4320
4321                if {$plot_d=="x"} {
4322                        append indeck "plot.1d hole a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4323                        if {$dimension==3} {
4324                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4325                        }
4326                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4327                }
4328                if {$plot_d=="y"} {
4329                        append indeck "plot.1d hole a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4330                        if {$dimension==3} {
4331                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4332                        }
4333                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].holeiv\n"
4334                }
4335
4336                if {$plot_psi=="x"} {
4337                        append indeck "plot.1d pot a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4338                        if {$dimension==3} {
4339                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4340                        }
4341                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4342                }
4343                if {$plot_psi=="y"} {
4344                        append indeck "plot.1d pot a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4345                        if {$dimension==3} {
4346                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4347                        }
4348                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].potiv\n"
4349                }
4350
4351                if {$band=="x"} {
4352                        append indeck "plot.1d band.val a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4353                        if {$dimension==3} {
4354                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4355                        }
4356                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4357                }
4358                if {$band=="y"} {
4359                        append indeck "plot.1d band.val a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4360                        if {$dimension==3} {
4361                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4362                        }
4363                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].vbiv\n"
4364                }
4365
4366                if {$band=="x"} {
4367                        append indeck "plot.1d band.con a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4368                        if {$dimension==3} {
4369                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4370                        }
4371                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4372                }
4373                if {$band=="y"} {
4374                        append indeck "plot.1d band.con a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4375                        if {$dimension==3} {
4376                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4377                        }
4378                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].cbiv\n"
4379                }
4380
4381                if {$band=="x"} {
4382                        append indeck "plot.1d qfn a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4383                        if {$dimension==3} {
4384                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4385                        }
4386                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4387                }
4388                if {$band=="y"} {
4389                        append indeck "plot.1d qfn a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4390                        if {$dimension==3} {
4391                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4392                        }
4393                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfniv\n"
4394                }
4395
4396                if {$band=="x"} {
4397                        append indeck "plot.1d qfp a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4398                        if {$dimension==3} {
4399                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4400                        }
4401                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4402                }
4403                if {$band=="y"} {
4404                        append indeck "plot.1d qfp a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4405                        if {$dimension==3} {
4406                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4407                        }
4408                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].qfpiv\n"
4409                }
4410
4411                if {$e_field=="x"} {
4412                        append indeck "plot.1d e.field a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4413                        if {$dimension==3} {
4414                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4415                        }
4416                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4417                }
4418                if {$e_field=="y"} {
4419                        append indeck "plot.1d e.field a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4420                        if {$dimension==3} {
4421                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4422                        }
4423                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].efieldiv\n"
4424                }
4425
4426                if {$net_charge=="x"} {
4427                        append indeck "plot.1d net.charge a.x=[expr {0.0}] b.x=$total_width a.y=$source_pos b.y =$source_pos"
4428                        if {$dimension==3} {
4429                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4430                        }
4431                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4432                }
4433                if {$net_charge=="y"} {
4434                        append indeck "plot.1d net.charge a.x=$xposition b.x=$xposition a.y=0.0 b.y =[expr {$source_pos+$drain_pos}]"
4435                        if {$dimension==3} {
4436                                append indeck " z.pos=[expr {$sub_ox+$fin_height/2.0}]"
4437                        }
4438                        append indeck "\n+ ascii outf=pdr[pid]_bias_[expr $counter]_[expr $outcounter].roiv\n"
4439                }
4440                incr counter
4441          }
4442          if {$plot_d=="2D" || $plot_d=="3D"} {
4443                        set plot_dimension $plot_d
4444                        set file "pdr[pid]_dop.3div"
4445                        append indeck "plot.3d dop outf=$file\n"
4446                        append datafiles_3D " $file {Doping density} $plot_dimension"
4447                        set file "pdr[pid]_ele.3div"
4448                        append indeck "plot.3d elect outf=$file\n"
4449                        append datafiles_3D " $file {Electron density} $plot_dimension"
4450                        set file "pdr[pid]_hole.3div"
4451                        append indeck "plot.3d hole outf=$file\n"
4452                        append datafiles_3D " $file {Hole density} $plot_dimension"
4453                }
4454                if {$plot_psi=="2D" || $plot_psi=="3D"} {
4455                        set plot_dimension $plot_psi
4456                        set file "pdr[pid]_psi.3div"
4457                        append indeck "plot.3d pot outf=$file\n"
4458                        append datafiles_3D " $file {Electrostatic Potential} $plot_dimension"
4459                }
4460                if {$e_field=="2D" || $e_field=="3D"} {
4461                        set plot_dimension $e_field
4462                        set file "pdr[pid]_efield.3div"
4463                        append indeck "plot.3d e.field outf=$file\n"
4464                        append datafiles_3D " $file {Electric field} $plot_dimension"
4465                }
4466                if {$net_charge=="2D" || $net_charge=="3D"} {
4467                        set plot_dimension $net_charge
4468                        set file "pdr[pid]_nc.3div"
4469                        append indeck "plot.3d net.charge outf=$file\n"
4470                        append datafiles_3D " $file {Net charge} $plot_dimension"
4471                }
4472         }
4473         append indeck "log off\n\n"
4474         }
4475        }
4476          append indeck "END"
4477        set which_curr "I[string index $which_current 2]"
4478        set deckfile "pdr[pid]"
4479        set fid [open $deckfile w]
4480        puts $fid $indeck
4481        close $fid
4482
4483        #
4484        # Execute PADRE with the input deck we just built...
4485        #
4486        set status [catch {Rappture::exec $program $deckfile} out]
4487
4488        if {[regexp {PADRE Aborted} $out]} {
4489            # look for "abort" message in output
4490            set status 1
4491        }
4492
4493        set fid [open $deckfile.sum w]
4494
4495
4496        $opt put output.time [clock format [clock seconds]]
4497        $opt put output.log $out
4498        puts $fid $out
4499        close $fid
4500        }
4501
4502        $opt put output.status [expr {($status == 0) ? "ok" : "failed"}]
4503
4504       
4505        set N 0
4506        foreach {file label} $datafiles_2D {
4507        if {$device_type=="Dp2"} {
4508                set file "$dir/../examples/Dp45x30PAD/$file"
4509        }
4510        if {[catch {open $file r} fid] == 0} {
4511                set info [read $fid]
4512                close $fid
4513          set gsstatus [catch {Rappture::exec gs -dBATCH -dQUIET -dNOPAUSE -sOutputFile=plot[pid].tiff -sDEVICE=tiffg4 $file} gsout]
4514          if {$gsstatus == 0} {
4515              set data_tiff [image create photo -file plot[pid].tiff]
4516              set data_jpeg [$data_tiff data -format jpeg]
4517
4518              $opt put output.image(plot2d-$N).about.label $label
4519              $opt put output.image(plot2d-$N).current $data_jpeg
4520          } else {
4521              $opt put -append yes output.log $gsout
4522          }
4523        }
4524           incr N
4525        }
4526        foreach {file label dimen} $datafiles_3D {
4527        if {$device_type=="Dp2"} {
4528                set file "$dir/../examples/Dp45x30PAD/$file"
4529        }
4530        if {[catch {open $file r} fid]} {
4531            # skip any file we can't open -- padre may have exited early
4532            continue
4533        }
4534        set info [read $fid]
4535        close $fid
4536
4537        # Padre leaves out the "E" part for really large exponents -- put it back
4538        regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4539        if {[string match *.3d $file]} {
4540            if [string equal $dimen "3D"] {
4541               while {[string length $info] > 0} {
4542             set line [nextline info]
4543             if {[regexp {^topology point} $line]} {
4544                 break
4545             }
4546               }
4547               set line [nextline info]
4548               set nColumns [lindex $line 1]
4549               set line [nextline info]
4550               set nRows [lindex $line 1]
4551               set line [nextline info]
4552               set fields ""
4553               for {set col 4} {$col <= $nColumns} {incr col} {
4554             set f [lindex $line $col]
4555             if {"" != $f} {
4556                 lappend fields $f
4557                 set fvalues($f) ""
4558             }
4559               }
4560               set line [nextline info]
4561
4562               $opt put output.mesh(m-$N).node(0) "0 0 0"
4563               for {set row 1} {$row <= $nRows} {incr row} {
4564             set line [nextline info]
4565             # convert from cm to um
4566             set x [expr {[lindex $line 0]*10000.}]
4567             set y [expr {[lindex $line 1]*10000.}]
4568             set z [expr {[lindex $line 2]*10000.}]
4569             $opt put output.mesh(m-$N).node($row) "$x $y $z"
4570
4571             set col 2
4572             foreach f $fields {
4573                 set v [lindex $line [incr col]]
4574                 if {"" != $v} {
4575                   append fvalues($f) $v "\n"
4576                 }
4577             }
4578               }
4579
4580               while {[string length $info] > 0} {
4581             set line [nextline info]
4582             if {[regexp {^total} $line]} {
4583                 break
4584             }
4585               }
4586               set nPieces [lindex $line 1]
4587               set line [nextline info]
4588
4589               for {set piece 0} {$piece < $nPieces} {incr piece} {
4590             set line [nextline info]
4591             $opt put output.mesh(m-$N).element($piece).nodes [string trim $line]
4592               }
4593
4594               foreach f $fields {
4595             if {[string length $fvalues($f)] > 0} {
4596               set group "$dimen $label at equilibrium in PADRE"       
4597                 $opt put output.field($f-$N).about.group $group
4598                 $opt put output.field($f-$N).about.label $label
4599                 $opt put output.field($f-$N).component.mesh output.mesh(m-$N)
4600                 $opt put output.field($f-$N).component.values $fvalues($f)
4601             }
4602               }
4603            } elseif [string equal $dimen "2D"] {
4604               while {[string length $info] > 0} {
4605            set line [nextline info]
4606            if {[regexp {^topology point} $line]} {
4607               break
4608            }
4609               }
4610               set line [nextline info]
4611               set nColumns [lindex $line 1]
4612               set line [nextline info]
4613               set nRows [lindex $line 1]
4614               set nRows [expr {$nRows/2}]
4615               set line [nextline info]
4616               set fields ""
4617               for {set col 4} {$col <= $nColumns} {incr col} {
4618            set f [lindex $line $col]
4619            if {"" != $f} {
4620               lappend fields $f
4621               set fvalues($f) ""
4622            }
4623               }
4624               set line [nextline info]
4625
4626               set xy ""
4627               for {set row 0} {$row < $nRows} {incr row} {
4628            set line [nextline info]
4629
4630            set x [expr {[lindex $line 0]*10000.}]
4631            set y [expr {[lindex $line 1]*10000.}]
4632            append xy "${x} ${y}\n"
4633
4634            set col 2
4635            foreach f $fields {
4636               set v [lindex $line [incr col]]
4637               if {"" != $v} {
4638                append fvalues($f) $v "\n"
4639               }
4640            }
4641               }
4642               $opt put output.cloud(m-$N).points [string trim $xy]
4643               foreach f $fields {
4644            if {[string length $fvalues($f)] > 0} {
4645               set group "$dimen $label at equilibrium in PADRE"           
4646               $opt put output.field($f-$N).about.group $group
4647               $opt put output.field($f-$N).about.label $label
4648               $opt put output.field($f-$N).component.mesh output.cloud(m-$N)
4649               $opt put output.field($f-$N).component.values $fvalues($f)
4650            }
4651               }
4652            }
4653        } elseif {[string match *.3div $file]} {
4654            if [string equal $dimen "3D"] {
4655               while {[string length $info] > 0} {
4656             set line [nextline info]
4657             if {[regexp {^topology point} $line]} {
4658                 break
4659             }
4660               }
4661               set line [nextline info]
4662               set nColumns [lindex $line 1]
4663               set line [nextline info]
4664               set nRows [lindex $line 1]
4665               set line [nextline info]
4666               set fields ""
4667               for {set col 4} {$col <= $nColumns} {incr col} {
4668             set f [lindex $line $col]
4669             if {"" != $f} {
4670                 lappend fields $f
4671                 set fvalues($f) ""
4672             }
4673               }
4674               set line [nextline info]
4675
4676               $opt put output.mesh(m-$N).node(0) "0 0 0"
4677               for {set row 1} {$row <= $nRows} {incr row} {
4678             set line [nextline info]
4679             # convert from cm to um
4680             set x [expr {[lindex $line 0]*10000.}]
4681             set y [expr {[lindex $line 1]*10000.}]
4682             set z [expr {[lindex $line 2]*10000.}]
4683             $opt put output.mesh(m-$N).node($row) "$x $y $z"
4684
4685             set col 2
4686             foreach f $fields {
4687                 set v [lindex $line [incr col]]
4688                 if {"" != $v} {
4689                   append fvalues($f) $v "\n"
4690                 }
4691             }
4692               }
4693
4694               while {[string length $info] > 0} {
4695             set line [nextline info]
4696             if {[regexp {^total} $line]} {
4697                 break
4698             }
4699               }
4700               set nPieces [lindex $line 1]
4701               set line [nextline info]
4702
4703               for {set piece 0} {$piece < $nPieces} {incr piece} {
4704             set line [nextline info]
4705             $opt put output.mesh(m-$N).element($piece).nodes [string trim $line]
4706               }
4707
4708               foreach f $fields {
4709             if {[string length $fvalues($f)] > 0} {
4710               set group "$dimen $label at applied bias Vd=$vdfinal, Vg=$vgfinal in PADRE"
4711                 $opt put output.field($f-$N).about.group $group
4712                 $opt put output.field($f-$N).about.label $label
4713                 $opt put output.field($f-$N).component.mesh output.mesh(m-$N)
4714                 $opt put output.field($f-$N).component.values $fvalues($f)
4715             }
4716               }
4717            } elseif [string equal $dimen "2D"] {
4718               while {[string length $info] > 0} {
4719            set line [nextline info]
4720            if {[regexp {^topology point} $line]} {
4721               break
4722            }
4723               }
4724               set line [nextline info]
4725               set nColumns [lindex $line 1]
4726               set line [nextline info]
4727               set nRows [lindex $line 1]
4728               set nRows [expr {$nRows/2}]
4729               set line [nextline info]
4730               set fields ""
4731               for {set col 4} {$col <= $nColumns} {incr col} {
4732            set f [lindex $line $col]
4733            if {"" != $f} {
4734               lappend fields $f
4735               set fvalues($f) ""
4736            }
4737               }
4738               set line [nextline info]
4739
4740               set xy ""
4741               for {set row 0} {$row < $nRows} {incr row} {
4742            set line [nextline info]
4743
4744            set x [expr {[lindex $line 0]*10000.}]
4745            set y [expr {[lindex $line 1]*10000.}]
4746            append xy "${x} ${y}\n"
4747
4748            set col 2
4749            foreach f $fields {
4750               set v [lindex $line [incr col]]
4751               if {"" != $v} {
4752                append fvalues($f) $v "\n"
4753               }
4754            }
4755               }
4756               $opt put output.cloud(m-$N).points [string trim $xy]
4757               foreach f $fields {
4758            if {[string length $fvalues($f)] > 0} {
4759               set group "$dimen $label at applied bias Vd=$vdfinal Vg=$vgfinal in PADRE"         
4760               $opt put output.field($f-$N).about.group $group
4761               $opt put output.field($f-$N).about.label $label
4762               $opt put output.field($f-$N).component.mesh output.cloud(m-$N)
4763               $opt put output.field($f-$N).component.values $fvalues($f)
4764            }
4765               }
4766            }
4767        } else {
4768            puts "WARNING: don't know how to handle file $file"                         
4769        }
4770        incr N
4771        }
4772       
4773        set file "$deckfile.qfn"
4774        if {$device_type=="Dp2"} {
4775                set file "$dir/../examples/Dp45x30PAD/$file"
4776        }
4777        if {[catch {open $file r} fid] == 0} {
4778            append datafiles_1D "$deckfile.qfn "
4779            set info [read $fid]
4780            close $fid
4781
4782            # Padre leaves out the "E" part for really large exponents -- put it back
4783            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4784
4785            set qfndata ""
4786            set plot_axis $band
4787
4788            # skip over first six lines with headings
4789            foreach line [lrange [split $info \n] 6 end] {
4790        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4791            append qfndata "$a $fx\n"
4792        }
4793            }
4794
4795            if {[string length $qfndata] > 0} {
4796        $opt put output.curve(qfn).about.label "Efn - quasi Fermi level for electrons in PADRE"
4797        $opt put output.curve(qfn).about.group "Energy Band Diagram at equilibrium"
4798        $opt put output.curve(qfn).about.style "-color red -linestyle dashed"
4799        $opt put output.curve(qfn).xaxis.label "along - $plot_axis"
4800        $opt put output.curve(qfn).xaxis.units "um"
4801        $opt put output.curve(qfn).yaxis.label "Energy"
4802        $opt put output.curve(qfn).yaxis.units "eV"
4803        $opt put output.curve(qfn).component.xy $qfndata
4804            }
4805
4806        }
4807        set file "$deckfile.qfp"
4808        if {$device_type=="Dp2"} {
4809                set file "$dir/../examples/Dp45x30PAD/$file"
4810        }
4811        if {[catch {open $file r} fid] == 0} {
4812            append datafiles_1D "$deckfile.qfp "
4813            set info [read $fid]
4814            close $fid
4815
4816            # Padre leaves out the "E" part for really large exponents -- put it back
4817            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4818
4819            set qfpdata ""
4820            set plot_axis $band
4821
4822            # skip over first six lines with headings
4823            foreach line [lrange [split $info \n] 6 end] {
4824        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4825            append qfpdata "$a $fx\n"
4826        }
4827            }
4828
4829            if {[string length $qfpdata] > 0} {
4830        $opt put output.curve(qfp).about.label "Efp - quasi Fermi level for holes in PADRE"
4831        $opt put output.curve(qfp).about.group "Energy Band Diagram at equilibrium"
4832        $opt put output.curve(qfp).about.style "-color red -linestyle dashed"
4833        $opt put output.curve(qfp).xaxis.label "along - $plot_axis"
4834        $opt put output.curve(qfp).xaxis.units "um"
4835        $opt put output.curve(qfp).yaxis.label "Energy"
4836        $opt put output.curve(qfp).yaxis.units "eV"
4837        $opt put output.curve(qfp).component.xy $qfpdata
4838            }
4839
4840        }
4841        set file "$deckfile.hole"
4842        if {$device_type=="Dp2"} {
4843                set file "$dir/../examples/Dp45x30PAD/$file"
4844        }
4845        if {[catch {open $file r} fid] == 0} {
4846            append datafiles_1D "$deckfile.hole "
4847            set info [read $fid]
4848            close $fid
4849
4850            # Padre leaves out the "E" part for really large exponents -- put it back
4851            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4852
4853            set p0data ""
4854            set plot_axis $plot_d
4855
4856            # skip over first six lines with headings
4857            foreach line [lrange [split $info \n] 6 end] {
4858        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4859            append p0data "$a $fx\n"
4860        }
4861            }
4862
4863
4864            if {[string length $p0data] > 0} {
4865        $opt put output.curve(p).about.label "p - Hole Density in PADRE"
4866        $opt put output.curve(p).about.group "Doping, electron density, hole density at equilibrium"
4867        $opt put output.curve(p).xaxis.label "along - $plot_axis"
4868        $opt put output.curve(p).about.style "-color red"
4869        $opt put output.curve(p).xaxis.units "um"
4870        $opt put output.curve(p).yaxis.label "Charge Density"
4871        $opt put output.curve(p).yaxis.units "/cm3"
4872        $opt put output.curve(p).yaxis.scale "log"
4873        $opt put output.curve(p).yaxis.min "1"
4874        $opt put output.curve(p).component.xy $p0data
4875            }
4876        } else { set p0data ""}
4877        set file "$deckfile.ele"
4878        if {$device_type=="Dp2"} {
4879                set file "$dir/../examples/Dp45x30PAD/$file"
4880        }
4881        if {[catch {open $file r} fid] == 0} {
4882            append datafiles_1D "$deckfile.ele "
4883            set info [read $fid]
4884            close $fid
4885
4886            # Padre leaves out the "E" part for really large exponents -- put it back
4887            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4888
4889            set n0data ""
4890            set plot_axis $plot_d
4891
4892            # skip over first six lines with headings
4893            foreach line [lrange [split $info \n] 6 end] {
4894        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4895            append n0data "$a $fx\n"
4896        }
4897            }
4898
4899            if {[string length $n0data] > 0} {
4900        $opt put output.curve(n).about.label "n - Electron Density in PADRE"
4901        $opt put output.curve(n).about.group "Doping, electron density, hole density at equilibrium"
4902        $opt put output.curve(n).about.style "-color purple"
4903        $opt put output.curve(n).xaxis.label "along - $plot_axis"
4904        $opt put output.curve(n).xaxis.units "um"
4905        $opt put output.curve(n).yaxis.label "Charge Density"
4906        $opt put output.curve(n).yaxis.units "/cm3"
4907        $opt put output.curve(n).yaxis.scale "log"
4908        $opt put output.curve(n).yaxis.min "1"
4909        $opt put output.curve(n).component.xy $n0data
4910            }
4911
4912        } else { set n0data ""}
4913
4914        set dopdata ""
4915        set file "$deckfile.dop"
4916        if {$device_type=="Dp2"} {
4917                set file "$dir/../examples/Dp45x30PAD/$file"
4918        }
4919        if {[catch {open $file r} fid] == 0} {
4920            append datafiles_1D "$deckfile.dop "
4921            set info [read $fid]
4922            close $fid
4923
4924            set plot_axis $plot_d
4925
4926            # Padre leaves out the "E" part for really large exponents -- put it back
4927            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4928
4929            # skip over first six lines with headings
4930            foreach line [lrange [split $info \n] 6 end] {
4931        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4932            append dopdata "$a $fx\n"
4933        }
4934            }
4935
4936            if {[string length $dopdata] > 0} {
4937        $opt put output.curve(Nd).about.label "Doping Density in PADRE"
4938        $opt put output.curve(Nd).about.group "Doping, electron density, hole density at equilibrium"
4939        $opt put output.curve(Nd).about.style "-color green"
4940        $opt put output.curve(Nd).xaxis.label "along - $plot_axis"
4941        $opt put output.curve(Nd).xaxis.units "um"
4942        $opt put output.curve(Nd).yaxis.label "Charge Density"
4943        $opt put output.curve(Nd).yaxis.units "/cm3"
4944        $opt put output.curve(Nd).yaxis.scale "log"
4945        $opt put output.curve(Nd).yaxis.min "1"
4946        $opt put output.curve(Nd).component.xy $dopdata
4947            }
4948
4949        }
4950        set file "$deckfile.ro"
4951        if {$device_type=="Dp2"} {
4952                set file "$dir/../examples/Dp45x30PAD/$file"
4953        }
4954        if {[catch {open $file r} fid] == 0} {
4955            append datafiles_1D "$deckfile.ro "
4956            set info [read $fid]
4957            close $fid
4958            set plot_axis $plot_d
4959
4960            # Padre leaves out the "E" part for really large exponents -- put it back
4961            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4962
4963            set rodata ""
4964
4965            # skip over first six lines with headings
4966            foreach line [lrange [split $info \n] 6 end] {
4967        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
4968            append rodata "$a $fx\n"
4969        }
4970            }
4971
4972            if {[string length $rodata] > 0} {
4973        $opt put output.curve(ro).about.label "Net Charge Density in PADRE"
4974        $opt put output.curve(ro).about.group "Net Charge Density at equilibrium"
4975        $opt put output.curve(ro).xaxis.label "along - $plot_axis"
4976        $opt put output.curve(ro).xaxis.units "um"
4977        $opt put output.curve(ro).yaxis.label "Charge Density"
4978        $opt put output.curve(ro).yaxis.units "C/cm3"
4979        $opt put output.curve(ro).component.xy $rodata
4980            }
4981
4982        }
4983        set file "$deckfile.pot"
4984        if {$device_type=="Dp2"} {
4985                set file "$dir/../examples/Dp45x30PAD/$file"
4986        }
4987        if {[catch {open $file r} fid] == 0} {
4988            append datafiles_1D "$deckfile.pot "
4989            set info [read $fid]
4990            close $fid
4991            set plot_axis $plot_psi
4992
4993            # Padre leaves out the "E" part for really large exponents -- put it back
4994            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
4995
4996            set potdata ""
4997            set eidata ""
4998
4999            # skip over first six lines with headings
5000            foreach line [lrange [split $info \n] 6 end] {
5001        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5002            append potdata "$a $fx\n"
5003            append eidata "$a [expr -1*$fx]\n"
5004        }
5005            }
5006
5007            if {[string length $potdata] > 0} {
5008        $opt put output.curve(potx).about.label "Electrostatic Potential in PADRE"
5009        $opt put output.curve(potx).about.group "Electrostatic Potential at equilibrium"
5010        $opt put output.curve(potx).xaxis.label "along - $plot_axis"
5011        $opt put output.curve(potx).xaxis.units "um"
5012        $opt put output.curve(potx).yaxis.label "Potential"
5013        $opt put output.curve(potx).yaxis.units "V"
5014        $opt put output.curve(potx).component.xy $potdata
5015            }
5016            if {$band=="x" || $band=="y"} {
5017            if {[string length $eidata] > 0} {
5018          $opt put output.curve(eix).about.label "Ei in PADRE"
5019          $opt put output.curve(eix).about.group "Energy Band Diagram at equilibrium"
5020          $opt put output.curve(eix).about.style "-color black -linestyle dotted"
5021          $opt put output.curve(eix).xaxis.label "along - $plot_axis"
5022          $opt put output.curve(eix).xaxis.units "um"
5023          $opt put output.curve(eix).yaxis.label "Energy"
5024          $opt put output.curve(eix).yaxis.units "eV"
5025          $opt put output.curve(eix).component.xy $eidata
5026            }
5027            }
5028        }
5029
5030        set file "$deckfile.cband"
5031        if {$device_type=="Dp2"} {
5032                set file "$dir/../examples/Dp45x30PAD/$file"
5033        }
5034        if {[catch {open $file r} fid] == 0} {
5035            append datafiles_1D "$deckfile.cband "
5036            set info [read $fid]
5037            close $fid
5038            set plot_axis $band
5039
5040            # Padre leaves out the "E" part for really large exponents -- put it back
5041            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5042
5043            set ecdata ""
5044
5045            # skip over first six lines with headings
5046            foreach line [lrange [split $info \n] 6 end] {
5047        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5048            append ecdata "$a [expr -1*$fx]\n"
5049        }
5050            }
5051
5052            if {[string length $ecdata] > 0} {
5053        $opt put output.curve(ecx).about.label "Ec in PADRE"
5054        $opt put output.curve(ecx).about.group "Energy Band Diagram at equilibrium"
5055        $opt put output.curve(ecx).about.style "-color blue"
5056        $opt put output.curve(ecx).xaxis.label "along - $plot_axis"
5057        $opt put output.curve(ecx).xaxis.units "um"
5058        $opt put output.curve(ecx).yaxis.label "Energy"
5059        $opt put output.curve(ecx).yaxis.units "eV"
5060        $opt put output.curve(ecx).component.xy $ecdata
5061            }
5062        }
5063
5064        set file "$deckfile.vband"
5065        if {$device_type=="Dp2"} {
5066                set file "$dir/../examples/Dp45x30PAD/$file"
5067        }
5068        if {[catch {open $file r} fid] == 0} {
5069            append datafiles_1D "$deckfile.vband "
5070            set info [read $fid]
5071            close $fid
5072
5073            set plot_axis $band
5074
5075            # Padre leaves out the "E" part for really large exponents -- put it back
5076            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5077
5078            set evdata ""
5079
5080            # skip over first six lines with headings
5081            foreach line [lrange [split $info \n] 6 end] {
5082        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5083            append evdata "$a [expr -1*$fx]\n"
5084        }
5085            }
5086            if {[string length $evdata] > 0} {
5087        $opt put output.curve(evx).about.label "Ev in PADRE"
5088        $opt put output.curve(evx).about.group "Energy Band Diagram at equilibrium"
5089        $opt put output.curve(evx).about.style "-color blue"
5090        $opt put output.curve(evx).xaxis.label "along - $plot_axis"
5091        $opt put output.curve(evx).xaxis.units "um"
5092        $opt put output.curve(evx).yaxis.label "Energy"
5093        $opt put output.curve(evx).yaxis.units "eV"
5094        $opt put output.curve(evx).component.xy $evdata
5095            }
5096        }
5097
5098        set file "$deckfile.efield"
5099        if {$device_type=="Dp2"} {
5100                set file "$dir/../examples/Dp45x30PAD/$file"
5101        }
5102        if {[catch {open $file r} fid] == 0} {
5103            append datafiles_1D "$deckfile.efield "
5104            set info [read $fid]
5105            close $fid
5106
5107            set plot_axis $e_field
5108
5109            # Padre leaves out the "E" part for really large exponents -- put it back
5110            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5111                                                             
5112            set efdata ""
5113                                                             
5114            # skip over first six lines with headings
5115            foreach line [lrange [split $info \n] 6 end] {
5116        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5117            # Padre reports electric field with the wrong sign -- go figure
5118            set fx [expr {-$fx}]
5119            append efdata "$a $fx\n"
5120        }
5121            }
5122                                                             
5123            if {[string length $efdata] > 0} {
5124        $opt put output.curve(ef).about.label "E - Electric Field in PADRE"
5125        $opt put output.curve(ef).about.group "Electric Field at equilibrium"
5126        $opt put output.curve(ef).xaxis.label "along - $plot_axis"
5127        $opt put output.curve(ef).xaxis.units "um"
5128        $opt put output.curve(ef).yaxis.label "Electric Field"
5129        $opt put output.curve(ef).yaxis.units "V/cm"
5130        $opt put output.curve(ef).component.xy $efdata
5131            }
5132        }
5133
5134        set file "$deckfile.recomb"
5135        if {$device_type=="Dp2"} {
5136                set file "$dir/../examples/Dp45x30PAD/$file"
5137        }
5138        if {[catch {open $file r} fid] == 0} {
5139            append datafiles_1D "$deckfile.recomb "
5140            set info [read $fid]
5141            close $fid
5142
5143            # Padre leaves out the "E" part for really large exponents -- put it back
5144            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5145
5146            set rcdata ""
5147            set plot_axis $plot_d
5148           
5149
5150            # skip over first six lines with headings
5151            foreach line [lrange [split $info \n] 6 end] {
5152        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5153            append rcdata "$a $fx\n"
5154        }
5155            }
5156
5157            if {[string length $rcdata] > 0} {
5158        $opt put output.curve(rex).about.label "Recombination Rate at equilibrium in PADRE"
5159        $opt put output.curve(rex).xaxis.label "along - $plot_axis"
5160        $opt put output.curve(rex).xaxis.units "um"
5161        $opt put output.curve(rex).yaxis.label "Recombination Rate"
5162        $opt put output.curve(rex).yaxis.units "/cm3s"
5163        $opt put output.curve(rex).component.xy $rcdata
5164            }
5165        }
5166
5167        set file "$deckfile.iv"
5168        if {$device_type=="Dp2"} {
5169                set file "$dir/../examples/Dp45x30PAD/$file"
5170        }
5171        if {[catch {open $file r} fid] == 0} {
5172            append datafiles_IV "$deckfile.iv "
5173            set info [read $fid]
5174            close $fid
5175
5176            # Padre leaves out the "E" part for really large exponents -- put it back
5177            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5178                                             
5179       
5180              set k 0
5181              while {$k <= [expr {$vstep_nm*$other_vstep_nm+1}]} {
5182              set ivdata($k) ""
5183              set k [expr {$k+1}]
5184              }
5185              set i 0
5186              set j 0
5187              set k 0
5188              set outerv_set ""
5189
5190              # skip over first 3 lines with headings
5191             
5192                 foreach line [lrange [split $info \n] 3 end] {
5193                 if {$device_type=="user_finfet"} {
5194                  if {$dimension == 2} {
5195                      if {[scan $line {%g %g %g %g %g} vdd vgg vgg1 isource idrain] == 5} {
5196                            if { $i%4 == 1 } {
5197                                if {$inner_loop_voltage == "V_gate"} {
5198                                                set innerv $vgg
5199                                                set outerv $vdd
5200                                } elseif {$inner_loop_voltage == "V_drain"} {
5201                                                set innerv $vdd
5202                                                set outerv $vgg
5203                                }
5204                                if {$k == 0} {
5205                                                set vprev $outerv
5206                                                append outerv_set "$outerv"
5207                                }
5208                                set outercounter 0
5209                                while {$outercounter <= $other_vstep_nm} {
5210                                        set vx [expr {$other_vstart+$outercounter*$other_vstep_sz}]
5211                                        if {[expr {abs($outerv - $vx)}]<1e-6} {
5212                                                if {[expr {abs($outerv - $vprev)}]>1e-6 } {
5213                                                        append outerv_set " $outerv"
5214                                                        set j [expr $j+1]
5215                                                }
5216                                                set counter 0
5217                                                while {$counter <= $vstep_nm} {
5218                                                        set vxx [expr {$vstart+$counter*$vstep_sz}]
5219                                                        if {[expr {abs($innerv - $vxx)}]<1e-6} {
5220                                                                if {$which_current == "j_drain"} {
5221                                                                        append ivdata($j) "$innerv $idrain\n"   
5222                                                                } elseif {$which_current == "j_source"} {
5223                                                                        append ivdata($j) "$innerv $isource\n"
5224                                                                } else {
5225                                                                        append ivdata($j) "$innerv 0\n"
5226                                                                }
5227                                                        }
5228                                                        incr counter
5229                                                }
5230                                        }
5231                                        incr outercounter
5232                                }
5233                                set vprev $outerv
5234                                set k [expr {$k+1}]
5235                            }
5236                            set i [expr $i+1]
5237                       }       
5238                    } elseif {$dimension==3} {
5239                       if {[scan $line {%g %g %g %g %g} aa bb cc dd ee] == 5} {
5240                            if { $i%5 == 1 } {
5241                                if {$inner_loop_voltage == "V_gate"} {
5242                                                set innerv $cc
5243                                                set outerv $bb
5244                                } elseif {$inner_loop_voltage == "V_drain"} {
5245                                                set innerv $bb
5246                                                set outerv $cc
5247                                }
5248                                if {$k == 0} {
5249                                        set vprev $outerv
5250                                        append outerv_set "$outerv"
5251                                }
5252                                set outercounter 0
5253                                while {$outercounter <= $other_vstep_nm} {
5254                                        set vx [expr {$other_vstart+$outercounter*$other_vstep_sz}]                                                     
5255                                        if {[expr {abs($outerv - $vx)}]<1e-6} {
5256                                                if {[expr {abs($outerv - $vprev)}]>1e-6 } {
5257                                                        append outerv_set " $outerv"
5258                                                        set j [expr $j+1]
5259                                                }                                                               
5260                                        set vprev $outerv                                                       
5261                                        set k [expr {$k+1}]
5262                                        }
5263                                        incr outercounter
5264                                }
5265                                set counter 0
5266                                while {$counter <= $vstep_nm} {
5267                                        set vxx [expr {$vg+$counter*$vgstep}]
5268                                        if {[expr {abs($innerv - $vxx)}]<1e-6} {                                                               
5269                                                append ivdata($j) "$cc "
5270                                                set innerv $cc
5271                                        }
5272                                        incr counter
5273                                }
5274                            }
5275                            if { $i%5 == 2  } {
5276                                                set counter 0
5277                                                while {$counter <= $vstep_nm} {
5278                                                        set vx [expr {$vstart+$counter*$vstep_sz}]
5279                                                        if {$innerv == $vx} {
5280                                                                if {$which_current == "j_drain"} {
5281                                                                        append ivdata($j) " $aa\n"     
5282                                                                } elseif {$which_current == "j_source"} {
5283                                                                        append ivdata($j) " $bb\n"
5284                                                                } else {
5285                                                                        append ivdata($j) " 0\n"
5286                                                                }
5287                                                        }
5288                                                        incr counter
5289                                                }                                               
5290                            }
5291                            set i [expr $i+1]
5292                     }
5293                   }
5294                } elseif {$device_type=="user_nanowire"} {
5295                       if {[scan $line {%g %g %g %g %g} aa bb cc dd ee] == 5} {
5296                            if { $i%3 == 0 } {
5297                                if {$inner_loop_voltage == "V_gate"} {
5298                                                set innerv $cc
5299                                                set outerv $bb
5300                                } elseif {$inner_loop_voltage == "V_drain"} {
5301                                                set innerv $bb
5302                                                set outerv $cc
5303                                }
5304                                if {$k == 0} {
5305                                        set vprev $outerv
5306                                        append outerv_set "$outerv"
5307                                }
5308                                set outercounter 0
5309                                while {$outercounter <= $other_vstep_nm} {
5310                                        set vx [expr {$other_vstart+$outercounter*$other_vstep_sz}]
5311                                        if {[expr {abs($outerv - $vx)}]<1e-6} {
5312                                                if {[expr {abs($outerv - $vprev)}]>1e-6 } {
5313                                                        append outerv_set " $outerv"
5314                                                        set j [expr $j+1]
5315                                                }                                                               
5316                                        set vprev $outerv                                                       
5317                                        set k [expr {$k+1}]
5318                                        }
5319                                        incr outercounter
5320                                }
5321                                set counter 0
5322                                while {$counter <= $vstep_nm} {
5323                                        set vxx [expr {$vg+$counter*$vgstep}]
5324                                        if {[expr {abs($innerv - $vxx)}]<1e-6} {
5325                                                append ivdata($j) "$cc "
5326                                                set innerv $cc
5327                                        }
5328                                        incr counter
5329                                }
5330                            }
5331                            if { $i%3 == 1  } {
5332                                                set counter 0
5333                                                while {$counter <= $vstep_nm} {
5334                                                        set vx [expr {$vstart+$counter*$vstep_sz}]
5335                                                        if {[expr {abs($innerv - $vx)}]<1e-6} {
5336                                                                if {$which_current == "j_drain"} {
5337                                                                        append ivdata($j) " $cc\n"     
5338                                                                } elseif {$which_current == "j_source"} {
5339                                                                        append ivdata($j) " $bb\n"
5340                                                                } else {
5341                                                                        append ivdata($j) " 0\n"
5342                                                                }
5343                                                        }
5344                                                        incr counter
5345                                                }                                               
5346                            }
5347                            set i [expr $i+1]
5348                     }
5349                }
5350            }
5351            set j 0     
5352            foreach outerv $outerv_set {
5353                                        $opt put output.curve($outer_volt=$outerv).about.label "IV for $outer_volt=$outerv in PADRE"                           
5354                                        $opt put output.curve($outer_volt=$outerv).about.group "IV Characteristics ($which_curr-$inner_volt)"
5355                                        $opt put output.curve($outer_volt=$outerv).xaxis.label "$inner_volt"
5356                                        $opt put output.curve($outer_volt=$outerv).xaxis.units "V"
5357                                        $opt put output.curve($outer_volt=$outerv).yaxis.label $which_curr
5358                                        if {$dimension==2} {
5359                                                $opt put output.curve($outer_volt=$outerv).yaxis.units "A/um"
5360                                        } elseif {$dimension==3} {
5361                                                $opt put output.curve($outer_volt=$outerv).yaxis.units "A"
5362                                        }
5363                                        $opt put output.curve($outer_volt=$outerv).component.xy $ivdata($j)
5364                                        incr j
5365            }
5366
5367
5368        }
5369        set file "$deckfile.jhole"
5370        if {$device_type=="Dp2"} {
5371                set file "$dir/../examples/Dp45x30PAD/$file"
5372        }
5373        if {[catch {open $file r} fid] == 0} {
5374            append datafiles_1D "$deckfile.jhole "
5375            set info [read $fid]
5376            close $fid
5377
5378            # Padre leaves out the "E" part for really large exponents -- put it back
5379            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5380                                                             
5381            set holedata ""
5382                                                             
5383            # skip over first six lines with headings
5384            foreach line [lrange [split $info \n] 6 end] {
5385        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5386            append holedata "$a $fx\n"
5387        }
5388            }
5389                                                             
5390            if {[string length $holedata] > 0} {
5391        $opt put output.curve(hcurr).about.label "Jp - Hole current density in PADRE"
5392        $opt put output.curve(hcurr).about.group "Current Density vs. Position"
5393        $opt put output.curve(hcurr).about.style "-color red"
5394        $opt put output.curve(hcurr).xaxis.label "along - $plot_axis"
5395        $opt put output.curve(hcurr).xaxis.units "um"
5396        $opt put output.curve(hcurr).yaxis.label "Current Density"
5397        $opt put output.curve(hcurr).yaxis.units "A/um"
5398        $opt put output.curve(hcurr).component.xy $holedata
5399            }
5400        }
5401        set file "$deckfile.jelectr"
5402        if {$device_type=="Dp2"} {
5403                set file "$dir/../examples/Dp45x30PAD/$file"
5404        }
5405        if {[catch {open $file r} fid] == 0} {
5406            append datafiles_1D "$deckfile.jelectr "
5407            set info [read $fid]
5408            close $fid
5409
5410            # Padre leaves out the "E" part for really large exponents -- put it back
5411            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5412                                                             
5413            set elecdata ""
5414                                                             
5415            # skip over first six lines with headings
5416            foreach line [lrange [split $info \n] 6 end] {
5417        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5418            append elecdata "$a $fx\n"
5419        }
5420            }
5421                                                             
5422            if {[string length $elecdata] > 0} {
5423        $opt put output.curve(ecurr).about.label "Jn - Electron current density in PADRE"
5424        $opt put output.curve(ecurr).about.group "Current Density vs. Position"
5425        $opt put output.curve(ecurr).about.style "-color purple"
5426        $opt put output.curve(ecurr).xaxis.label "along - $plot_axis"
5427        $opt put output.curve(ecurr).xaxis.units "um"
5428        $opt put output.curve(ecurr).yaxis.label "Current Density"
5429        $opt put output.curve(ecurr).yaxis.units "A"
5430        $opt put output.curve(ecurr).component.xy $elecdata
5431            }
5432        }
5433        set file "$deckfile.jtot"
5434        if {$device_type=="Dp2"} {
5435                set file "$dir/../examples/Dp45x30PAD/$file"
5436        }
5437        if {[catch {open $file r} fid] == 0} {
5438            append datafiles_1D "$deckfile.jtot "
5439            set info [read $fid]
5440            close $fid
5441
5442            # Padre leaves out the "E" part for really large exponents -- put it back
5443            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5444                                                             
5445            set totcurrdata ""
5446                                                             
5447            # skip over first six lines with headings
5448            foreach line [lrange [split $info \n] 6 end] {
5449        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5450            append totcurrdata "$a $fx\n"
5451        }
5452            }
5453                                                             
5454            if {[string length $totcurrdata] > 0} {
5455        $opt put output.curve(totcurr).about.label "J - Total current density in PADRE"
5456        $opt put output.curve(totcurr).about.group "Current Density vs. Position"
5457        $opt put output.curve(totcurr).about.style "-color blue"
5458        $opt put output.curve(totcurr).xaxis.label "along - $plot_axis"
5459        $opt put output.curve(totcurr).xaxis.units "um"
5460        $opt put output.curve(totcurr).yaxis.label "Current Density"
5461        $opt put output.curve(totcurr).yaxis.units "A"
5462        $opt put output.curve(totcurr).component.xy $totcurrdata
5463            }
5464        }
5465
5466
5467        ###################################################
5468        #                Sequence Output
5469        ###################################################
5470       
5471        if {!$equil_padre} {
5472
5473        set outer_counter 0
5474       
5475        while {$outer_counter <= $other_vstep_nm} {
5476
5477        set outer_voltage [expr {$other_vstart+$outer_counter*$other_vstep_sz}]
5478         
5479        set counter 0
5480
5481        while { $counter <= $vstep_nm} {
5482
5483        ################ display purpose ###########
5484        set midvolt [expr {$counter*$vstep_sz+$vstart}]
5485
5486        set file_x [open "counter" a+]
5487        puts $file_x "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].qfniv"
5488        close $file_x
5489
5490        ################ qfndata ###################
5491           
5492        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].qfniv"
5493        if {$device_type=="Dp2"} {
5494                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].qfniv"
5495                set file "$dir/../examples/Dp45x30PAD/$file"
5496        }
5497        if {[catch {open $file r} fid] == 0} {
5498              append datafiles_1D "$file "
5499              set info [read $fid]
5500              close $fid
5501         
5502              # Padre leaves out the "E" part for really large exponents -- put it back
5503              regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5504         
5505              set qfndata ""
5506              set plot_axis $band
5507         
5508              # skip over first six lines with headings
5509              foreach line [lrange [split $info \n] 6 end] {
5510          if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5511              append qfndata "$a [expr -1*$fx]\n"
5512          }
5513              }
5514
5515              $opt put output.sequence(s{$outer_counter}1).about.label "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5516              $opt put output.sequence(s{$outer_counter}1).about.description ""
5517              $opt put output.sequence(s{$outer_counter}1).index.label "Energy Band Diagram"
5518           
5519            if { $counter == 0 } {
5520              set seq output.sequence(s{$outer_counter}1).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5521              $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5522              $opt put $seq.curve(qfn).about.label "Efn - quasi Fermi level for electrons in PADRE"
5523              $opt put $seq.curve(qfn).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5524              $opt put $seq.curve(qfn).about.style {-color red}
5525              $opt put $seq.curve(qfn).xaxis.label "along - $plot_axis"
5526              $opt put $seq.curve(qfn).xaxis.units "um "
5527              $opt put $seq.curve(qfn).yaxis.label "Energy"
5528              $opt put $seq.curve(qfn).yaxis.units "eV"
5529              $opt put $seq.curve(qfn).component.xy $qfndata
5530            }
5531            if { $counter == $vstep_nm } {
5532              set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5533              $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5534              $opt put $seq.curve(qfn).about.label "Efn - quasi Fermi level for electrons in PADRE"
5535              $opt put $seq.curve(qfn).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5536              $opt put $seq.curve(qfn).about.style {-color red}
5537              $opt put $seq.curve(qfn).xaxis.label "along - $plot_axis"
5538              $opt put $seq.curve(qfn).xaxis.units "um "
5539              $opt put $seq.curve(qfn).yaxis.label "Energy"
5540              $opt put $seq.curve(qfn).yaxis.units "eV"
5541              $opt put $seq.curve(qfn).component.xy $qfndata
5542            }
5543            if { $counter < $vstep_nm && $counter != 0 } {
5544              set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5545              $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5546              $opt put $seq.curve(qfn).about.label "Efn - quasi Fermi level for electrons in PADRE"
5547              $opt put $seq.curve(qfn).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5548              $opt put $seq.curve(qfn).about.style {-color red}
5549              $opt put $seq.curve(qfn).xaxis.label "along - $plot_axis"
5550              $opt put $seq.curve(qfn).xaxis.units "um "
5551              $opt put $seq.curve(qfn).yaxis.label "Energy"
5552              $opt put $seq.curve(qfn).yaxis.units "eV"
5553              $opt put $seq.curve(qfn).component.xy $qfndata
5554            }
5555        }
5556
5557        ################### qfpdata ###################
5558
5559        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].qfpiv"
5560        if {$device_type=="Dp2"} {
5561                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].qfpiv"
5562                set file "$dir/../examples/Dp45x30PAD/$file"
5563        }
5564        if {[catch {open $file r} fid] == 0} {
5565              append datafiles_1D "$file "
5566              set info [read $fid]
5567              close $fid
5568         
5569              # Padre leaves out the "E" part for really large exponents -- put it back
5570              regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5571         
5572              set qfpdata ""
5573              set plot_axis $band
5574         
5575              # skip over first six lines with headings
5576              foreach line [lrange [split $info \n] 6 end] {
5577          if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5578              append qfpdata "$a [expr -1*$fx]\n"
5579          }
5580             }
5581
5582            if { $counter == 0 } {
5583              set seq output.sequence(s{$outer_counter}1).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5584              $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5585              $opt put $seq.curve(qfp).about.label "Efp - quasi Fermi level for holes in PADRE"
5586              $opt put $seq.curve(qfp).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5587              $opt put $seq.curve(qfp).about.style {-color red}
5588              $opt put $seq.curve(qfp).xaxis.label "along - $plot_axis"
5589              $opt put $seq.curve(qfp).xaxis.units "um "
5590              $opt put $seq.curve(qfp).yaxis.label "Energy"
5591              $opt put $seq.curve(qfp).yaxis.units "eV"
5592              $opt put $seq.curve(qfp).component.xy $qfpdata
5593            }
5594            if { $counter == $vstep_nm } {
5595              set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5596              $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5597              $opt put $seq.curve(qfp).about.label "Efp - quasi Fermi level for holes in PADRE"
5598              $opt put $seq.curve(qfp).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5599              $opt put $seq.curve(qfp).about.style {-color red}
5600              $opt put $seq.curve(qfp).xaxis.label "along - $plot_axis"
5601              $opt put $seq.curve(qfp).xaxis.units "um "
5602              $opt put $seq.curve(qfp).yaxis.label "Energy"
5603              $opt put $seq.curve(qfp).yaxis.units "eV"
5604              $opt put $seq.curve(qfp).component.xy $qfpdata
5605            }
5606            if { $counter < $vstep_nm && $counter != 0 } {
5607              set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5608              $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5609              $opt put $seq.curve(qfp).about.label "Efp - quasi Fermi level for holes in PADRE"
5610              $opt put $seq.curve(qfp).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
5611              $opt put $seq.curve(qfp).about.style {-color red}
5612              $opt put $seq.curve(qfp).xaxis.label "along - $plot_axis"
5613              $opt put $seq.curve(qfp).xaxis.units "um "
5614              $opt put $seq.curve(qfp).yaxis.label "Energy"
5615              $opt put $seq.curve(qfp).yaxis.units "eV"
5616              $opt put $seq.curve(qfp).component.xy $qfpdata
5617            }
5618        }
5619           
5620        ################# ndata ##################
5621        if {$plot_d=="x" || $plot_d=="y"} {
5622        if {!$grid} {
5623        $opt put output.sequence(s{$outer_counter}2).about.label "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5624        $opt put output.sequence(s{$outer_counter}2).about.description ""
5625        $opt put output.sequence(s{$outer_counter}2).index.label "Doping, electron/hole density"
5626
5627        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].eleiv"
5628        if {$device_type=="Dp2"} {
5629                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].eleiv"
5630                set file "$dir/../examples/Dp45x30PAD/$file"
5631        }
5632        if {[catch {open $file r} fid] == 0} {
5633              append datafiles_1D "$file "
5634              set info [read $fid]
5635              close $fid
5636         
5637              # Padre leaves out the "E" part for really large exponents -- put it back
5638              regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5639         
5640              set ndata ""
5641              set plot_axis $plot_d
5642         
5643              # skip over first six lines with headings
5644              foreach line [lrange [split $info \n] 6 end] {
5645         if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5646             append ndata "$a $fx\n"
5647         }
5648              }
5649
5650            if { $counter == 0 } {
5651              set seq output.sequence(s{$outer_counter}2).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5652              $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5653              $opt put $seq.curve(ndata).about.label "n - Electron Density in PADRE"
5654              $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5655              $opt put $seq.curve(ndata).about.style {-color purple}
5656              $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
5657              $opt put $seq.curve(ndata).xaxis.units "um "
5658              $opt put $seq.curve(ndata).yaxis.label "Charge Density"
5659              $opt put $seq.curve(ndata).yaxis.units "/cm3"
5660              $opt put $seq.curve(ndata).yaxis.scale "log"
5661              $opt put $seq.curve(ndata).yaxis.min "1"
5662              $opt put $seq.curve(ndata).component.xy $ndata
5663            }
5664            if { $counter == $vstep_nm } {
5665              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5666              $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5667              $opt put $seq.curve(ndata).about.label "n - Electron Density in PADRE"
5668              $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5669              $opt put $seq.curve(ndata).about.style {-color purple}
5670              $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
5671              $opt put $seq.curve(ndata).xaxis.units "um "
5672              $opt put $seq.curve(ndata).yaxis.label "Charge Density"
5673              $opt put $seq.curve(ndata).yaxis.units "/cm3"
5674              $opt put $seq.curve(ndata).yaxis.scale "log"
5675              $opt put $seq.curve(ndata).yaxis.min "1"
5676              $opt put $seq.curve(ndata).component.xy $ndata
5677            }
5678            if { $counter < $vstep_nm && $counter != 0 } {
5679              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5680              $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5681              $opt put $seq.curve(ndata).about.label "n - Electron Density in PADRE"
5682              $opt put $seq.curve(ndata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5683              $opt put $seq.curve(ndata).about.style {-color purple}
5684              $opt put $seq.curve(ndata).xaxis.label "along - $plot_axis"
5685              $opt put $seq.curve(ndata).xaxis.units "um "
5686              $opt put $seq.curve(ndata).yaxis.label "Charge Density"
5687              $opt put $seq.curve(ndata).yaxis.units "/cm3"
5688              $opt put $seq.curve(ndata).yaxis.scale "log"
5689              $opt put $seq.curve(ndata).yaxis.min "1"
5690              $opt put $seq.curve(ndata).component.xy $ndata
5691            }
5692        } else {set ndata ""}
5693           
5694        ################# pdata #############################
5695
5696        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].holeiv"
5697        if {$device_type=="Dp2"} {
5698                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].holeiv"
5699                set file "$dir/../examples/Dp45x30PAD/$file"
5700        }
5701        if {[catch {open $file r} fid] == 0} {
5702              append datafiles_1D "$file "
5703              set info [read $fid]
5704              close $fid
5705         
5706              # Padre leaves out the "E" part for really large exponents -- put it back
5707              regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5708         
5709              set pdata ""
5710              set plot_axis $plot_d
5711         
5712              # skip over first six lines with headings
5713              foreach line [lrange [split $info \n] 6 end] {
5714          if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5715              append pdata "$a $fx\n"
5716          }
5717              }
5718         
5719         
5720            if { $counter == 0 } {
5721              set seq output.sequence(s{$outer_counter}2).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5722              $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5723              $opt put $seq.curve(pdata).about.label "p - Hole Density in PADRE"
5724              $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5725              $opt put $seq.curve(pdata).about.style {-color red}
5726              $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
5727              $opt put $seq.curve(pdata).xaxis.units "um"
5728              $opt put $seq.curve(pdata).yaxis.label "Charge Density"
5729              $opt put $seq.curve(pdata).yaxis.units "/cm3"
5730              $opt put $seq.curve(pdata).yaxis.scale "log"
5731              $opt put $seq.curve(pdata).yaxis.min "1"
5732              $opt put $seq.curve(pdata).component.xy $pdata
5733            }
5734            if { $counter == $vstep_nm } {
5735              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5736              $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5737              $opt put $seq.curve(pdata).about.label "p - Hole Density in PADRE"
5738              $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5739              $opt put $seq.curve(pdata).about.style {-color red}
5740              $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
5741              $opt put $seq.curve(pdata).xaxis.units "um"
5742              $opt put $seq.curve(pdata).yaxis.label "Charge Density"
5743              $opt put $seq.curve(pdata).yaxis.units "/cm3"
5744              $opt put $seq.curve(pdata).yaxis.scale "log"
5745              $opt put $seq.curve(pdata).yaxis.min "1"
5746              $opt put $seq.curve(pdata).component.xy $pdata
5747            }
5748            if { $counter < $vstep_nm && $counter != 0 } {
5749              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5750              $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5751              $opt put $seq.curve(pdata).about.label "p - Hole Density in PADRE"
5752              $opt put $seq.curve(pdata).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5753              $opt put $seq.curve(pdata).about.style {-color red}
5754              $opt put $seq.curve(pdata).xaxis.label "along - $plot_axis"
5755              $opt put $seq.curve(pdata).xaxis.units "um"
5756              $opt put $seq.curve(pdata).yaxis.label "Charge Density"
5757              $opt put $seq.curve(pdata).yaxis.units "/cm3"
5758              $opt put $seq.curve(pdata).yaxis.scale "log"
5759              $opt put $seq.curve(pdata).yaxis.min "1"
5760              $opt put $seq.curve(pdata).component.xy $pdata
5761            }
5762
5763            ################# Doping data (constant) ##############
5764            if { $counter == 0 } {
5765              set seq output.sequence(s{$outer_counter}2).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5766              $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5767              $opt put $seq.curve(Ndv).about.label "Doping Density in PADRE"
5768              $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5769              $opt put $seq.curve(Ndv).about.style {-color green}
5770              $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
5771              $opt put $seq.curve(Ndv).xaxis.units "um"
5772              $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
5773              $opt put $seq.curve(Ndv).yaxis.units "/cm3"
5774              $opt put $seq.curve(Ndv).yaxis.scale "log"
5775              $opt put $seq.curve(Ndv).yaxis.min "1"
5776              $opt put $seq.curve(Ndv).component.xy $dopdata
5777            }
5778
5779            if { $counter == $vstep_nm } {
5780              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5781              $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5782              $opt put $seq.curve(Ndv).about.label "Doping Density in PADRE"
5783              $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5784              $opt put $seq.curve(Ndv).about.style {-color green}
5785              $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
5786              $opt put $seq.curve(Ndv).xaxis.units "um"
5787              $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
5788              $opt put $seq.curve(Ndv).yaxis.units "/cm3"
5789              $opt put $seq.curve(Ndv).yaxis.scale "log"
5790              $opt put $seq.curve(Ndv).yaxis.min "1"
5791              $opt put $seq.curve(Ndv).component.xy $dopdata
5792            }
5793
5794            if { $counter < $vstep_nm && $counter != 0 } {
5795              set seq output.sequence(s{$outer_counter}2).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5796              $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5797              $opt put $seq.curve(Ndv).about.label "Doping Density in PADRE"
5798              $opt put $seq.curve(Ndv).about.group "Doping, electron density, hole density at applied bias $outer_volt=$outer_voltage"
5799              $opt put $seq.curve(Ndv).about.style {-color green}
5800              $opt put $seq.curve(Ndv).xaxis.label "along - $plot_axis"
5801              $opt put $seq.curve(Ndv).xaxis.units "um"
5802              $opt put $seq.curve(Ndv).yaxis.label "Charge Density"
5803              $opt put $seq.curve(Ndv).yaxis.units "/cm3"
5804              $opt put $seq.curve(Ndv).yaxis.scale "log"
5805              $opt put $seq.curve(Ndv).yaxis.min "1"
5806              $opt put $seq.curve(Ndv).component.xy $dopdata
5807            }
5808        } else {set pdata ""}
5809
5810        ################## exndata ##################
5811        set file "$deckfile.ele"
5812        if {$device_type=="Dp2"} {
5813                set file "$dir/../examples/Dp45x30PAD/$file"
5814        }
5815        if {[catch {open $file r} fid] == 0} {
5816              append datafiles_1D "$file "
5817            set info [read $fid]
5818            close $fid
5819
5820            # Padre leaves out the "E" part for really large exponents -- put it back
5821            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5822
5823            set n0data ""
5824            set plot_axis $plot_d
5825
5826            # skip over first six lines with headings
5827            foreach line [lrange [split $info \n] 6 end] {
5828        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5829            append n0data "$a $fx\n"
5830        }
5831            }
5832        }
5833
5834        if {[string length $n0data] > 0 && [string length $ndata] > 0} {
5835            set exndata ""
5836            set a0last 0
5837            set n0last 0
5838            set a0 [lindex $n0data 0]
5839            set n0 [lindex $n0data 1]
5840            set n0data [lrange $n0data 2 end]
5841            foreach {a n} $ndata {
5842        while {$a0 < $a} {
5843            set a0last $a0
5844            set n0last $n0
5845            set a0 [lindex $n0data 0]
5846            set n0 [lindex $n0data 1]
5847            set n0data [lrange $n0data 2 end]
5848        }
5849        if {$a0 == $a} {
5850            append exndata "$a [expr {$n-$n0}]\n"
5851        } else {
5852            set slope [expr {double($n0-$n0last)/($a0-$a0last)}]
5853            set n0interp [expr {$slope*($a-$a0last) + $n0last}]
5854            append exndata "$a [expr {$n-$n0interp}]\n"
5855        }
5856            }
5857
5858            $opt put output.sequence(s{$outer_counter}3).about.label "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5859            $opt put output.sequence(s{$outer_counter}3).about.description ""
5860            $opt put output.sequence(s{$outer_counter}3).index.label "Excess Carrier Density"
5861         
5862            if { $counter == 0} {
5863        set seq output.sequence(s{$outer_counter}3).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5864        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5865        $opt put $seq.curve(exn).about.label "n - Electron Density in PADRE"
5866        $opt put $seq.curve(exn).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5867        $opt put $seq.curve(exn).about.style {-color purple}
5868        $opt put $seq.curve(exn).xaxis.label "along - $plot_axis"
5869        $opt put $seq.curve(exn).xaxis.units "um"
5870        $opt put $seq.curve(exn).yaxis.label "Carrier Density"
5871        $opt put $seq.curve(exn).yaxis.units "/cm3"
5872        $opt put $seq.curve(exn).yaxis.scale "log"
5873        $opt put $seq.curve(exn).yaxis.min "1"
5874        $opt put $seq.curve(exn).component.xy $exndata
5875            }
5876            if { $counter == $vstep_nm} {
5877        set seq output.sequence(s{$outer_counter}3).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5878        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5879        $opt put $seq.curve(exn).about.label "n - Electron Density in PADRE"
5880        $opt put $seq.curve(exn).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5881        $opt put $seq.curve(exn).about.style {-color purple}
5882        $opt put $seq.curve(exn).xaxis.label "along - $plot_axis"
5883        $opt put $seq.curve(exn).xaxis.units "um"
5884        $opt put $seq.curve(exn).yaxis.label "Carrier Density"
5885        $opt put $seq.curve(exn).yaxis.units "/cm3"
5886        $opt put $seq.curve(exn).yaxis.scale "log"
5887        $opt put $seq.curve(exn).yaxis.min "1"
5888        $opt put $seq.curve(exn).component.xy $exndata
5889            }
5890            if { $counter < $vstep_nm && $counter != 0} {
5891        set seq output.sequence(s{$outer_counter}3).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5892        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5893        $opt put $seq.curve(exn).about.label "n - Electron Density in PADRE"
5894        $opt put $seq.curve(exn).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5895        $opt put $seq.curve(exn).about.style {-color purple}
5896        $opt put $seq.curve(exn).xaxis.label "along - $plot_axis"
5897        $opt put $seq.curve(exn).xaxis.units "um"
5898        $opt put $seq.curve(exn).yaxis.label "Carrier Density"
5899        $opt put $seq.curve(exn).yaxis.units "/cm3"
5900        $opt put $seq.curve(exn).yaxis.scale "log"
5901        $opt put $seq.curve(exn).yaxis.min "1"
5902        $opt put $seq.curve(exn).component.xy $exndata
5903            }
5904        }
5905
5906        ################## expdata ##################
5907        set file "$deckfile.hole"
5908        if {$device_type=="Dp2"} {
5909                set file "$dir/../examples/Dp45x30PAD/$file"
5910        }
5911        if {[catch {open $file r} fid] == 0} {
5912              append datafiles_1D "$deckfile.hole "
5913            set info [read $fid]
5914            close $fid
5915
5916            # Padre leaves out the "E" part for really large exponents -- put it back
5917            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
5918
5919            set p0data ""
5920            set plot_axis $plot_d
5921
5922            # skip over first six lines with headings
5923            foreach line [lrange [split $info \n] 6 end] {
5924        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
5925            append p0data "$a $fx\n"
5926        }
5927            }
5928        }
5929
5930        if {[string length $p0data] > 0 && [string length $pdata] > 0} {
5931            set expdata ""
5932            set a0last 0
5933            set p0last 0
5934            set a0 [lindex $p0data 0]
5935            set p0 [lindex $p0data 1]
5936            set p0data [lrange $p0data 2 end]
5937            foreach {a p} $pdata {
5938        while {$a0 < $a} {
5939            set a0last $a0
5940            set p0last $p0
5941            set a0 [lindex $p0data 0]
5942            set p0 [lindex $p0data 1]
5943            set p0data [lrange $p0data 2 end]
5944        }
5945        if {$a0 == $a} {
5946            append expdata "$a [expr {$p-$p0}]\n"
5947        } else {
5948            set slope [expr {double($p0-$p0last)/($a0-$a0last)}]
5949            set p0interp [expr {$slope*($a-$a0last) + $p0last}]
5950            append expdata "$a [expr {$p-$p0interp}]\n"
5951        }
5952            }
5953
5954            $opt put output.sequence(s{$outer_counter}3).about.label "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5955            $opt put output.sequence(s{$outer_counter}3).about.description ""
5956            $opt put output.sequence(s{$outer_counter}3).index.label "Excess Carrier Density"
5957
5958            if { $counter == 0} {
5959        set seq output.sequence(s{$outer_counter}3).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
5960        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
5961        $opt put $seq.curve(exp).about.label "p - Hole Density in PADRE"
5962        $opt put $seq.curve(exp).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5963        $opt put $seq.curve(exp).about.style {-color red}
5964        $opt put $seq.curve(exp).xaxis.label "along - $plot_axis"
5965        $opt put $seq.curve(exp).xaxis.units "um"
5966        $opt put $seq.curve(exp).yaxis.label "Carrier Density"
5967        $opt put $seq.curve(exp).yaxis.units "/cm3"
5968        $opt put $seq.curve(exp).yaxis.scale "log"
5969        $opt put $seq.curve(exp).yaxis.min "1"
5970        $opt put $seq.curve(exp).component.xy $expdata
5971            }
5972            if { $counter == $vstep_nm} {
5973        set seq output.sequence(s{$outer_counter}3).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
5974        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
5975        $opt put $seq.curve(exp).about.label "p - Hole Density in PADRE"
5976        $opt put $seq.curve(exp).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5977        $opt put $seq.curve(exp).about.style {-color red}
5978        $opt put $seq.curve(exp).xaxis.label "along - $plot_axis"
5979        $opt put $seq.curve(exp).xaxis.units "um"
5980        $opt put $seq.curve(exp).yaxis.label "Carrier Density"
5981        $opt put $seq.curve(exp).yaxis.units "/cm3"
5982        $opt put $seq.curve(exp).yaxis.scale "log"
5983        $opt put $seq.curve(exp).yaxis.min "1"
5984        $opt put $seq.curve(exp).component.xy $expdata
5985            }
5986            if { $counter < $vstep_nm && $counter != 0} {
5987        set seq output.sequence(s{$outer_counter}3).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
5988        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
5989        $opt put $seq.curve(exp).about.label "p - Hole Density in PADRE"
5990        $opt put $seq.curve(exp).about.group "Excess Carrier Density at applied bias $outer_volt=$outer_voltage"
5991        $opt put $seq.curve(exp).about.style {-color red}
5992        $opt put $seq.curve(exp).xaxis.label "along - $plot_axis"
5993        $opt put $seq.curve(exp).xaxis.units "um"
5994        $opt put $seq.curve(exp).yaxis.label "Carrier Density"
5995        $opt put $seq.curve(exp).yaxis.units "/cm3"
5996        $opt put $seq.curve(exp).yaxis.scale "log"
5997        $opt put $seq.curve(exp).yaxis.min "1"
5998        $opt put $seq.curve(exp).component.xy $expdata
5999            }
6000        }
6001
6002        ##################### rodata ###################
6003
6004        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].roiv"
6005        if {$device_type=="Dp2"} {
6006                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].roiv"
6007                set file "$dir/../examples/Dp45x30PAD/$file"
6008        }
6009        if {[catch {open $file r} fid] == 0} {
6010              append datafiles_1D "$file "
6011            set info [read $fid]
6012            close $fid
6013
6014            # Padre leaves out the "E" part for really large exponents -- put it back
6015            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6016
6017            set rodata ""
6018            set plot_axis $plot_d
6019
6020            # skip over first six lines with headings
6021            foreach line [lrange [split $info \n] 6 end] {
6022        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6023            append rodata "$a $fx\n"
6024        }
6025            }
6026
6027              $opt put output.sequence(s{$outer_counter}4).about.label "Net Charge Density at applied bias $outer_volt=$outer_voltage"
6028              $opt put output.sequence(s{$outer_counter}4).about.description ""
6029              $opt put output.sequence(s{$outer_counter}4).index.label "Net Charge Density"
6030
6031            if { $counter == 0 } {
6032        set seq output.sequence(s{$outer_counter}4).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6033        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6034        $opt put $seq.curve(rov).about.label "Net Charge Density in PADRE"
6035        $opt put $seq.curve(rov).about.group "Net Charge Density at applied bias $outer_volt=$outer_voltage"
6036        $opt put $seq.curve(rov).xaxis.label "along - $plot_axis"
6037        $opt put $seq.curve(rov).xaxis.units "um"
6038        $opt put $seq.curve(rov).yaxis.label "Charge Density"
6039        $opt put $seq.curve(rov).yaxis.units "C/cm3"
6040        $opt put $seq.curve(rov).component.xy $rodata
6041            }
6042            if { $counter == $vstep_nm } {
6043        set seq output.sequence(s{$outer_counter}4).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6044        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6045        $opt put $seq.curve(rov).about.label "Net Charge Density in PADRE"
6046        $opt put $seq.curve(rov).about.group "Net Charge Density at applied bias $outer_volt=$outer_voltage"
6047        $opt put $seq.curve(rov).xaxis.label "along - $plot_axis"
6048        $opt put $seq.curve(rov).xaxis.units "um"
6049        $opt put $seq.curve(rov).yaxis.label "Charge Density"
6050        $opt put $seq.curve(rov).yaxis.units "C/cm3"
6051        $opt put $seq.curve(rov).component.xy $rodata
6052            }
6053            if { $counter < $vstep_nm && $counter != 0 } {
6054        set seq output.sequence(s{$outer_counter}4).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6055        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6056        $opt put $seq.curve(rov).about.label "Net Charge Density in PADRE"
6057        $opt put $seq.curve(rov).about.group "Net Charge Density at applied bias $outer_volt=$outer_voltage"
6058        $opt put $seq.curve(rov).xaxis.label "along - $plot_axis"
6059        $opt put $seq.curve(rov).xaxis.units "um"
6060        $opt put $seq.curve(rov).yaxis.label "Charge Density"
6061        $opt put $seq.curve(rov).yaxis.units "C/cm3"
6062        $opt put $seq.curve(rov).component.xy $rodata
6063            }
6064        }
6065        }
6066        }
6067        ######################## $potdata ####################
6068
6069        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].potiv"
6070        if {$device_type=="Dp2"} {
6071                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].potiv"
6072                set file "$dir/../examples/Dp45x30PAD/$file"
6073        }
6074        if {[catch {open $file r} fid] == 0} {
6075              append datafiles_1D "$file "
6076            set info [read $fid]
6077            close $fid
6078
6079            # Padre leaves out the "E" part for really large exponents -- put it back
6080            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6081
6082            set potdata ""
6083            set eidata ""
6084            set plot_axis $plot_psi
6085
6086            # skip over first six lines with headings
6087            foreach line [lrange [split $info \n] 6 end] {
6088        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6089            append potdata "$a $fx\n"
6090            append eidata "$a [expr -1*$fx]\n"
6091        }
6092            }
6093
6094              $opt put output.sequence(s{$outer_counter}5).about.label "Electrostatic Potential at applied bias $outer_volt=$outer_voltage"
6095              $opt put output.sequence(s{$outer_counter}5).about.description ""
6096              $opt put output.sequence(s{$outer_counter}5).index.label "Electrostatic Potential"
6097
6098            if { $counter == 0 } {
6099        set seq output.sequence(s{$outer_counter}5).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6100        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6101        $opt put $seq.curve(potiv).about.label "Electrostatic Potential in PADRE"
6102        $opt put $seq.curve(potiv).about.group "Electrostatic Potential at applied bias $outer_volt=$outer_voltage"
6103        $opt put $seq.curve(potiv).xaxis.label "along - $plot_axis"
6104        $opt put $seq.curve(potiv).xaxis.units "um"
6105        $opt put $seq.curve(potiv).yaxis.label "Potential"
6106        $opt put $seq.curve(potiv).yaxis.units "V"
6107        $opt put $seq.curve(potiv).component.xy $potdata
6108            }                     
6109            if {$band=="x" || $band=="y"} {
6110            if { $counter == 0 } {
6111          set seq output.sequence(s{$outer_counter}1).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6112          $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6113          $opt put $seq.curve(eiiv).about.label "Ei in PADRE"
6114          $opt put $seq.curve(eiiv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6115          $opt put $seq.curve(eiiv).about.style {-color black -linestyle dotted}
6116          $opt put $seq.curve(eiiv).xaxis.label "along - $plot_axis"
6117          $opt put $seq.curve(eiiv).xaxis.units "um"
6118          $opt put $seq.curve(eiiv).yaxis.label "Energy"
6119          $opt put $seq.curve(eiiv).yaxis.units "eV"
6120          $opt put $seq.curve(eiiv).component.xy $eidata
6121            }
6122            }
6123            if { $counter == $vstep_nm } {
6124        set seq output.sequence(s{$outer_counter}5).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6125        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6126        $opt put $seq.curve(potiv).about.label "Electrostatic Potential in PADRE"
6127        $opt put $seq.curve(potiv).about.group "Electrostatic Potential at applied bias $outer_volt=$outer_voltage"
6128        $opt put $seq.curve(potiv).xaxis.label "along - $plot_axis"
6129        $opt put $seq.curve(potiv).xaxis.units "um"
6130        $opt put $seq.curve(potiv).yaxis.label "Potential"
6131        $opt put $seq.curve(potiv).yaxis.units "V"
6132        $opt put $seq.curve(potiv).component.xy $potdata
6133            }
6134            if {$band=="x" || $band=="y"} {
6135            if { $counter == $vstep_nm } {
6136          set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6137          $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6138          $opt put $seq.curve(eiiv).about.label "Ei in PADRE"
6139          $opt put $seq.curve(eiiv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6140          $opt put $seq.curve(eiiv).about.style {-color black -linestyle dotted}
6141          $opt put $seq.curve(eiiv).xaxis.label "along - $plot_axis"
6142          $opt put $seq.curve(eiiv).xaxis.units "um"
6143          $opt put $seq.curve(eiiv).yaxis.label "Energy"
6144          $opt put $seq.curve(eiiv).yaxis.units "eV"
6145          $opt put $seq.curve(eiiv).component.xy $eidata
6146            }
6147             }
6148            if { $counter < $vstep_nm && $counter != 0 } {
6149        set seq output.sequence(s{$outer_counter}5).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6150        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6151        $opt put $seq.curve(potiv).about.label "Electrostatic Potential in PADRE"
6152        $opt put $seq.curve(potiv).about.group "Electrostatic Potential at applied bias $outer_volt=$outer_voltage"
6153        $opt put $seq.curve(potiv).xaxis.label "along - $plot_axis"
6154        $opt put $seq.curve(potiv).xaxis.units "um"
6155        $opt put $seq.curve(potiv).yaxis.label "Potential"
6156        $opt put $seq.curve(potiv).yaxis.units "V"
6157        $opt put $seq.curve(potiv).component.xy $potdata
6158            }
6159            if {$band=="x" || $band=="y"} {
6160            if { $counter < $vstep_nm && $counter != 0 } {
6161          set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6162          $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6163          $opt put $seq.curve(eiiv).about.label "Ei in PADRE"
6164          $opt put $seq.curve(eiiv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6165          $opt put $seq.curve(eiiv).about.style {-color black -linestyle dotted}
6166          $opt put $seq.curve(eiiv).xaxis.label "along - $plot_axis"
6167          $opt put $seq.curve(eiiv).xaxis.units "um"
6168          $opt put $seq.curve(eiiv).yaxis.label "Energy"
6169          $opt put $seq.curve(eiiv).yaxis.units "eV"
6170          $opt put $seq.curve(eiiv).component.xy $eidata
6171            }
6172            }   
6173        }
6174
6175        ####################### ecdata #####################
6176
6177        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].cbiv"
6178        if {$device_type=="Dp2"} {
6179                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].cbiv"
6180                set file "$dir/../examples/Dp45x30PAD/$file"
6181        }
6182        if {[catch {open $file r} fid] == 0} {
6183              append datafiles_1D "$file "
6184            set info [read $fid]
6185            close $fid
6186
6187            # Padre leaves out the "E" part for really large exponents -- put it back
6188            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6189
6190            set ecdata ""
6191            set plot_axis $band
6192
6193            # skip over first six lines with headings
6194            foreach line [lrange [split $info \n] 6 end] {
6195        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6196            append ecdata "$a [expr -1*$fx]\n"
6197        }
6198            }
6199
6200            $opt put output.sequence(s{$outer_counter}1).about.label "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6201            $opt put output.sequence(s{$outer_counter}1).about.description ""
6202            $opt put output.sequence(s{$outer_counter}1).index.label "Energy Band Diagram"
6203
6204            if { $counter == 0 } {
6205        set seq output.sequence(s{$outer_counter}1).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6206        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6207        $opt put $seq.curve(eciv).about.label "Ec in PADRE"
6208        $opt put $seq.curve(eciv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6209        $opt put $seq.curve(eciv).about.style {-color blue}
6210        $opt put $seq.curve(eciv).xaxis.label "along - $plot_axis"
6211        $opt put $seq.curve(eciv).xaxis.units "um"
6212        $opt put $seq.curve(eciv).yaxis.label "Energy"
6213        $opt put $seq.curve(eciv).yaxis.units "eV"
6214        $opt put $seq.curve(eciv).component.xy $ecdata
6215            }
6216            if { $counter == $vstep_nm } {
6217        set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6218        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6219        $opt put $seq.curve(eciv).about.label "Ec in PADRE"
6220        $opt put $seq.curve(eciv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6221        $opt put $seq.curve(eciv).about.style {-color blue}
6222        $opt put $seq.curve(eciv).xaxis.label "along - $plot_axis"
6223        $opt put $seq.curve(eciv).xaxis.units "um"
6224        $opt put $seq.curve(eciv).yaxis.label "Energy"
6225        $opt put $seq.curve(eciv).yaxis.units "eV"
6226        $opt put $seq.curve(eciv).component.xy $ecdata
6227            }
6228            if { $counter < $vstep_nm && $counter != 0 } {
6229        set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6230        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6231        $opt put $seq.curve(eciv).about.label "Ec in PADRE"
6232        $opt put $seq.curve(eciv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6233        $opt put $seq.curve(eciv).about.style {-color blue}
6234        $opt put $seq.curve(eciv).xaxis.label "along - $plot_axis"
6235        $opt put $seq.curve(eciv).xaxis.units "um"
6236        $opt put $seq.curve(eciv).yaxis.label "Energy"
6237        $opt put $seq.curve(eciv).yaxis.units "eV"
6238        $opt put $seq.curve(eciv).component.xy $ecdata
6239            }
6240        }
6241
6242        ####################### evdata #####################
6243
6244        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].vbiv"
6245        if {$device_type=="Dp2"} {
6246                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].vbiv"
6247                set file "$dir/../examples/Dp45x30PAD/$file"
6248        }
6249        if {[catch {open $file r} fid] == 0} {
6250              append datafiles_1D "$file "
6251            set info [read $fid]
6252            close $fid
6253
6254            # Padre leaves out the "E" part for really large exponents -- put it back
6255            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6256
6257            set evdata ""
6258            set plot_axis $band
6259
6260            # skip over first six lines with headings
6261            foreach line [lrange [split $info \n] 6 end] {
6262        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6263            append evdata "$a [expr -1*$fx]\n"
6264        }
6265            }
6266
6267            $opt put output.sequence(s{$outer_counter}1).about.label "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6268            $opt put output.sequence(s{$outer_counter}1).about.description ""
6269            $opt put output.sequence(s{$outer_counter}1).index.label "Energy Band Diagram"
6270
6271            if { $counter == 0 } {
6272        set seq output.sequence(s{$outer_counter}1).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6273        $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6274        $opt put $seq.curve(eviv).about.label "Ev in PADRE"
6275        $opt put $seq.curve(eviv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6276        $opt put $seq.curve(eviv).about.color {-color blue}
6277        $opt put $seq.curve(eviv).xaxis.label "along - $plot_axis"
6278        $opt put $seq.curve(eviv).xaxis.units "um"
6279        $opt put $seq.curve(eviv).yaxis.label "Energy"
6280        $opt put $seq.curve(eviv).yaxis.units "eV"
6281        $opt put $seq.curve(eviv).component.xy $evdata
6282            }
6283            if { $counter == $vstep_nm } {
6284        set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6285        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6286        $opt put $seq.curve(eviv).about.label "Ev in PADRE"
6287        $opt put $seq.curve(eviv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6288        $opt put $seq.curve(eviv).about.color {-color blue}
6289        $opt put $seq.curve(eviv).xaxis.label "along - $plot_axis"
6290        $opt put $seq.curve(eviv).xaxis.units "um"
6291        $opt put $seq.curve(eviv).yaxis.label "Energy"
6292        $opt put $seq.curve(eviv).yaxis.units "eV"
6293        $opt put $seq.curve(eviv).component.xy $evdata
6294            }
6295            if { $counter < $vstep_nm && $counter != 0 } {
6296        set seq output.sequence(s{$outer_counter}1).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6297        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6298        $opt put $seq.curve(eviv).about.label "Ev in PADRE"
6299        $opt put $seq.curve(eviv).about.group "Energy Band Diagram at applied bias $outer_volt=$outer_voltage"
6300        $opt put $seq.curve(eviv).about.color {-color blue}
6301        $opt put $seq.curve(eviv).xaxis.label "along - $plot_axis"
6302        $opt put $seq.curve(eviv).xaxis.units "um"
6303        $opt put $seq.curve(eviv).yaxis.label "Energy"
6304        $opt put $seq.curve(eviv).yaxis.units "eV"
6305        $opt put $seq.curve(eviv).component.xy $evdata
6306            }
6307        }
6308
6309        ########################## efdata #################
6310
6311        set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].efieldiv"
6312        if {$device_type=="Dp2"} {
6313                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].efieldiv"
6314                set file "$dir/../examples/Dp45x30PAD/$file"
6315        }
6316        if {[catch {open $file r} fid] == 0} {
6317              append datafiles_1D "$file "
6318            set info [read $fid]
6319            close $fid
6320
6321            # Padre leaves out the "E" part for really large exponents -- put it back
6322            regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6323
6324            set efdata ""
6325            set plot_axis $band
6326
6327            # skip over first six lines with headings
6328            foreach line [lrange [split $info \n] 6 end] {
6329        if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6330            # Padre reports electric field with the wrong sign -- go figure
6331            set fx [expr {-$fx}]
6332            append efdata "$a $fx\n"
6333         }
6334             }
6335         
6336             $opt put output.sequence(s{$outer_counter}6).about.label "Electric Field at applied bias $outer_volt=$outer_voltage"
6337             $opt put output.sequence(s{$outer_counter}6).about.description ""
6338             $opt put output.sequence(s{$outer_counter}6).index.label "Electric Field"
6339         
6340             if { $counter == 0 } {
6341         set seq output.sequence(s{$outer_counter}6).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6342         $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6343         $opt put $seq.curve(efv).about.label "E - Electric Field in PADRE"
6344         $opt put $seq.curve(efv).about.group "Electric Field at applied bias $outer_volt=$outer_voltage"
6345         $opt put $seq.curve(efv).xaxis.label "along - $plot_axis"
6346         $opt put $seq.curve(efv).xaxis.units "um"
6347         $opt put $seq.curve(efv).yaxis.label "Electric Field"
6348         $opt put $seq.curve(efv).yaxis.units "V/cm"
6349         $opt put $seq.curve(efv).component.xy $efdata
6350             }
6351             if { $counter == $vstep_nm } {
6352         set seq output.sequence(s{$outer_counter}6).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6353         $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6354         $opt put $seq.curve(efv).about.label "E - Electric Field in PADRE"
6355         $opt put $seq.curve(efv).about.group "Electric Field at applied bias $outer_volt=$outer_voltage"
6356         $opt put $seq.curve(efv).xaxis.label "along - $plot_axis"
6357         $opt put $seq.curve(efv).xaxis.units "um"
6358         $opt put $seq.curve(efv).yaxis.label "Electric Field"
6359         $opt put $seq.curve(efv).yaxis.units "V/cm"
6360         $opt put $seq.curve(efv).component.xy $efdata
6361             }
6362             if { $counter < $vstep_nm && $counter != 0 } {
6363         set seq output.sequence(s{$outer_counter}6).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6364         $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6365         $opt put $seq.curve(efv).about.label "E - Electric Field in PADRE"
6366         $opt put $seq.curve(efv).about.group "Electric Field at applied bias $outer_volt=$outer_voltage"
6367         $opt put $seq.curve(efv).xaxis.label "along - $plot_axis"
6368         $opt put $seq.curve(efv).xaxis.units "um"
6369         $opt put $seq.curve(efv).yaxis.label "Electric Field"
6370         $opt put $seq.curve(efv).yaxis.units "V/cm"
6371         $opt put $seq.curve(efv).component.xy $efdata
6372             }
6373         }
6374         
6375         ########################## rcdata ###############
6376         
6377         set file "pdr[pid]_bias_[expr $counter]_[expr {$outer_counter}].reiv"
6378        if {$device_type=="Dp2"} {
6379                set file "pdr32297_bias_[expr $counter]_[expr {$outer_counter}].reiv"
6380                set file "$dir/../examples/Dp45x30PAD/$file"
6381        }
6382        if {[catch {open $file r} fid] == 0} {
6383              append datafiles_1D "$file "
6384             set info [read $fid]
6385             close $fid
6386         
6387             # Padre leaves out the "E" part for really large exponents -- put it back
6388             regsub -all {([0-9])([-+][0-9])} $info {\1E\2} info
6389         
6390             set rcdata ""
6391             set plot_axis $band
6392         
6393             # skip over first six lines with headings
6394             foreach line [lrange [split $info \n] 6 end] {
6395         if {[scan $line {%g %g %g %g} a fx x y] == 4} {
6396             append rcdata "$a $fx\n"
6397         }
6398             }
6399         
6400             $opt put output.sequence(s{$outer_counter}7).about.label "Recombination Rate at applied bias $outer_volt=$outer_voltage"
6401             $opt put output.sequence(s{$outer_counter}7).about.description ""
6402             $opt put output.sequence(s{$outer_counter}7).index.label "Recombination Rate"
6403
6404             if { $counter == 0 } {
6405         set seq output.sequence(s{$outer_counter}7).element(0-Initial_Bias_$inner_volt=[set midvolt]V)
6406         $opt put $seq.index 0-Initial_Bias_$inner_volt=[set midvolt]V
6407        $opt put $seq.curve(reiv).about.label "Recombination Rate at applied bias $outer_volt=$outer_voltage in PADRE"
6408        $opt put $seq.curve(reiv).about.group "Recombination Rate at applied bias $outer_volt=$outer_voltage"
6409        $opt put $seq.curve(reiv).xaxis.label "along - $plot_axis"
6410        $opt put $seq.curve(reiv).xaxis.units "um"
6411        $opt put $seq.curve(reiv).yaxis.label "Recombination Rate"
6412        $opt put $seq.curve(reiv).yaxis.units "/cm3s"
6413        $opt put $seq.curve(reiv).component.xy $rcdata
6414            }
6415            if { $counter == $vstep_nm } {
6416        set seq output.sequence(s{$outer_counter}7).element([expr $counter]-Final_Bias_$inner_volt=[set vhigh]V)
6417        $opt put $seq.index [expr $counter]-Final_Bias_$inner_volt=[set vhigh]V
6418        $opt put $seq.curve(reiv).about.label "Recombination Rate at applied bias $outer_volt=$outer_voltage in PADRE"
6419        $opt put $seq.curve(reiv).about.group "Recombination Rate at applied bias $outer_volt=$outer_voltage"
6420        $opt put $seq.curve(reiv).xaxis.label "along - $plot_axis"
6421        $opt put $seq.curve(reiv).xaxis.units "um"
6422        $opt put $seq.curve(reiv).yaxis.label "Recombination Rate"
6423        $opt put $seq.curve(reiv).yaxis.units "/cm3s"
6424        $opt put $seq.curve(reiv).component.xy $rcdata
6425            }
6426            if { $counter < $vstep_nm && $counter != 0 } {
6427        set seq output.sequence(s{$outer_counter}7).element([expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V)
6428        $opt put $seq.index [expr $counter]-Sample_Bias_$inner_volt=[set midvolt]V
6429        $opt put $seq.curve(reiv).about.label "Recombination Rate at applied bias $outer_volt=$outer_voltage in PADRE"
6430        $opt put $seq.curve(reiv).about.group "Recombination Rate at applied bias $outer_volt=$outer_voltage"
6431        $opt put $seq.curve(reiv).xaxis.label "along - $plot_axis"
6432        $opt put $seq.curve(reiv).xaxis.units "um"
6433        $opt put $seq.curve(reiv).yaxis.label "Recombination Rate"
6434        $opt put $seq.curve(reiv).yaxis.units "/cm3s"
6435        $opt put $seq.curve(reiv).component.xy $rcdata
6436            }
6437        }
6438
6439        #############################
6440        ##          End of Sequence
6441        ############################
6442          incr counter
6443        }
6444          set outer_counter [expr {$outer_counter+$other_vstep_nm}]
6445          if {$vdstep==0 || $ndstep==0 || $vgstep==0 ||$ngstep==0} {
6446          set outer_counter 1
6447          }
6448          }
6449        }
6450
6451        #
6452        # Save the updated XML describing the run...
6453        #
6454        set oname "run[clock seconds].xml"
6455        set fid [open $oname w]
6456        puts $fid "<?xml version=\"1.0\"?>"
6457        puts $fid [$opt xml]
6458        close $fid
6459
6460        #
6461        # Tell the caller where to find results
6462        #
6463        if {$status == 0} {
6464            puts "=RAPPTURE-RUN=>$oname"
6465        }
6466
6467        set fid [open "datafiles_1D_padre" w]
6468        puts $fid $datafiles_1D
6469        close $fid
6470
6471        set fid [open "datafiles_2D_padre" w]
6472        puts $fid $datafiles_2D
6473        close $fid
6474
6475        set fid [open "datafiles_IV_padre" w]
6476        puts $fid $datafiles_IV
6477        close $fid
6478                        file delete -force $deckfile
6479                        foreach file $datafiles_1D {
6480                            file delete -force $file
6481                        }
6482                        foreach file $datafiles_IV {
6483                            file delete -force $file
6484                        }
6485                        foreach {file label} $datafiles_2D {
6486                            file delete -force $file
6487                        }
6488                        foreach {file label dimen} $datafiles_3D {
6489                            file delete -force $file
6490                        }
6491                        file delete -force "initsol"
6492                        file delete -force plot[pid].tiff       
6493          }
6494}
6495exit $status
6496}