initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / doc / gss_cards.tex
blob5436e3c596a59f24675875a952a894407093188a
1 % This is the manual for the GSS 0.46.
3 % Copyright (C) 2005, 2006 Gong Ding.
4 % Email : gdiso@ustc.edu
5 % Permission is granted to copy, distribute and/or modify this document
6 % under the terms of the GNU Free Documentation License, Version 1.1 or
7 % any later version published by the Free Software Foundation; with no
8 % Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
9 % Texts.
11 \RequirePackage{ifpdf}
12 \ifpdf % We are running pdfTeX in pdf mode
13 \documentclass[11pt,pdftex]{article}
14 \else
15 \documentclass{article}
16 \fi
18 % Page layout.
19 \advance\textwidth by 1.1in
20 \advance\oddsidemargin by -.55in
21 \advance\evensidemargin by -.55in
23 \advance\textheight by 1in
24 \advance\topmargin by -.2in
25 \advance\footskip by -.2in
27 \pagestyle{headings}
29 % Avoid some overfull boxes.
30 \emergencystretch=.1\hsize \hbadness = 3000
32 % these are from lshort.sty, but lshort.sty pulls in so many other
33 % packages it seems cleaner to just include them here.
35 \newcommand{\bs}{\symbol{'134}}%Print backslash
36 \newcommand{\ci}[1]{\texttt{\bs#1}}
38 \makeatletter
39 \@ifpackageloaded{tex4ht}{%
40 % separate definition for HTML case to avoid
41 % nasty borders with double horizontal lines with
42 % large gaps.
43 \newsavebox{\cmdsyntaxbox}%
44 \newenvironment{cmdsyntax}{%
45 \par
46 % \small
47 \addvspace{3.2ex plus 0.8ex minus 0.2ex}%
48 \vskip -\parskip
49 \noindent
50 \begin{lrbox}{\cmdsyntaxbox}%
51 \begin{tabular}{l}%
52 \rule{0pt}{1em}%
53 \ignorespaces
54 }{%
55 \end{tabular}%
56 \end{lrbox}%
57 \fbox{\usebox{\cmdsyntaxbox}}%
58 \par
59 \nopagebreak
60 \addvspace{3.2ex plus 0.8ex minus 0.2ex}%
61 \vskip -\parskip
63 }{%
64 \newenvironment{cmdsyntax}{%
65 \par
66 \small
67 \addvspace{3.2ex plus 0.8ex minus 0.2ex}%
68 \vskip -\parskip
69 \noindent
70 \begin{tabular}{|l|}%
71 \hline
72 \rule{0pt}{1em}%
73 \ignorespaces
74 }{%
75 \\%
76 \hline
77 \end{tabular}%
78 \par
79 \nopagebreak
80 \addvspace{3.2ex plus 0.8ex minus 0.2ex}%
81 \vskip -\parskip
83 } \makeatother
85 \usepackage[pdftex]{graphicx}
86 \usepackage{flafter}
87 \usepackage{array,indentfirst,longtable,amsmath}
88 \usepackage[T1]{fontenc}
91 \def\Hanh{H\`an Th\^e\llap{\raise 0.5ex\hbox{\'{}}} Th\`anh}
93 \ifpdf
94 \usepackage[%
95 pdftex,%
96 colorlinks,%
97 hyperindex,%
98 plainpages=false,%
99 bookmarks=true,%
100 bookmarksnumbered=true%
101 ]{hyperref}
102 %%?? \def\pdfBorderAttrs{/Border [0 0 0] } % No border arround Links
103 \usepackage{thumbpdf}
104 \else
105 \usepackage{hyperref}
108 \pdfinfo{
109 /Title (GSS User's Guide)
110 /Subject(User's Guide of GSS-0.46)
111 /Author (Gong Ding, gdiso@ustc.edu)
112 /Keywords (GSS, TCAD, Semiconductor Simulation, DDM, HDM)
113 /CreationDate (D:20061116120000)
114 /ModDate (D:20070219120000)
117 \title{GSS User's Guide Ver 0.46.01}
118 \author{Gong Ding
119 \\University of Science and Technology of China
120 \\\centerline{\includegraphics[scale=0.3]{USTCLogo.png}}
121 \\Email: gdiso@ustc.edu
125 \begin{document}
127 % comes out too close to the toc, and we know it's page one anyway.
128 \thispagestyle{empty}
129 \maketitle
130 \tableofcontents
131 \setcounter{tocdepth}{2}% for bookmark levels
133 \section{Introduction}
134 \subsection{The format of input card}
135 Like PISCES and MEDICI, GSS takes its command cards from a user
136 specified disk file. The input is read by GSS's build-in command
137 parser. Each line is recognized as a particular statement,
138 identified by the first word (named as keyword) on the card. The
139 remaining parts of the line are the parameters of that keyword. The
140 statement has the format as follow:
141 \begin{verbatim}
142 KEYWORD [parameters]
143 \end{verbatim}
144 The words on a line are separated by blanks or tabs. If more than
145 one line of input is necessary for a particular statement, it may be
146 continued on subsequent lines by placing a backslash sign
147 '\textbackslash' as the last non-blank character on the current
148 line. Parameters may be one of four types: float, integer, bool or
149 string. The float point number supports C style double precision
150 real number. The bool value can be True, On, False and Off. String
151 value is made up of lower line, dot, blank, number and alpha
152 characters. The string should not begin with number and quotation
153 marks are only needed if it contains blank. At last, the length of
154 string is limited to 31 characters. All the parameter specification
155 has the same format as
156 \begin{verbatim}
157 parameter_name = [number|integer|bool|string]
158 \end{verbatim}
161 In the card descriptions, keywords and parameters are not case
162 sensitive. But user input strings do, because file name may be
163 specified by the string. Comments must begin with '\#' and can be
164 either an separated line or locate at the end of current statement.
166 \subsection{The sequence of input deck}
167 Most of the cards GSS used are sequence insensitive. The order of
168 occurrence of cards is significant in only two cases. The mesh
169 generation cards must have the right order, or it can't work
170 properly. GSS will execute the 'driven' cards sequently. So the
171 placement order of 'driven' cards will affect simulation result.
173 \subsection{Statement Description Format}
174 \subsubsection*{Syntax of Parameter Lists}
175 The following special characters are used in the formatted parameter
176 list:
177 \begin{verbatim}
178 Angle brackets < > - parameter type
179 Square brackets [ ] - optional group
180 Vertical bar | - alternate choice
181 Parentheses ( ) - group hierarchy
182 Braces { } - group hierarchy with high level
183 \end{verbatim}
185 \subsubsection*{Value Types}
186 Besides some string parameters which have fixed values, most of the
187 parameters need a user defined value. A lower case letter in angle
188 brackets represents a value of a given type. The following types of
189 values are represented:
190 \begin{verbatim}
191 <n> - double precision numerical value
192 <i> - integer value
193 <b> - bool value
194 <s> - string value
195 \end{verbatim}
199 \newpage
200 \section{Global Specification}
201 \subsection{SET}
202 \subsubsection*{Description} Some global definitions such as the unit scale
203 and environment temperature must be set before the initiation of
204 GSS's build-in data. The \textsf{SET} command will do the
205 definition.
207 \subsubsection*{Syntax}
209 \begin{verbatim}
210 set Carrier=(p|n|pn)
211 set Z.Width=<n>
212 set LatticeTemp=<n>
213 set DopingScale=<n>
214 \end{verbatim}
216 \small
217 \noindent\begin{longtable}{ccccp{7cm}}
218 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
219 Carrier & string & pn & - & The \textbf{Carrier} parameter specifies whether single or dual
220 carriers will be modeled during the simulation. But at present,
221 GSS only supports dual carriers, so the parameter value must always be "pn" \\
222 Z.Width & number & 1 & $\mathrm{\mu m}$ & \textbf{Z.Width} is needed by current calculation. Because GSS
223 is a two-dimensional simulator, the length in Z direction must be
224 given if GSS simulates transistor with external circuit. \\
225 LatticeTemp & number & 300 & $\mathrm{K}$ & \textbf{LatticeTemp} defines external temperature. \\
226 DopingScale & number & 1e18 & $\mathrm{cm^{-3}}$ & \textbf{DopingScale} will effect GSS's inner unit scale procedure
227 which shows great influence to the convergence of nonlinear solver.
228 In most case, set this value to max(Nd,Na) is a good choice. But
229 sometimes, a smaller value may be better.\\
230 \end{longtable}
231 \normalsize
233 \subsubsection*{Example}
234 \begin{verbatim}
235 set Carrier = pn # specify carrier type.
236 set Z.Width = 2 # device width in Z dimension. Unit:um
237 set LatticeTemp = 3e2 # specify initial temperature of device. Unit:K
238 set DopingScale = 1e16 # set carrier scale reference value
239 \end{verbatim}
242 \newpage
243 \section{Mesh Generation}
244 \subsection{Introduction}
245 The early version of GSS was designed as a pure solver. It uses
246 CGNS(CFD General Notation System) as semiconductor device model
247 file. This file format provides the ability to store grid, solution
248 data, material information, boundary condition and connectivity in a
249 single, well-defined and easy-to-use form. More important, CGNS has
250 been accepted and supported by most of the commercial CFD
251 corporations. So users have various ways to create their models. For
252 example, models can be created by SGFramework, converted from MEDICI
253 TIF file by TIFTOOL (shipped with GSS) or generated by ICEMCFD,
254 which is a commercial CFD pre-processor.
256 Until very recently, the PISCES like model description language had
257 been introduced to GSS. The mesh generation arithmetic works as
258 follows. First, GSS builds the rectangle skeleton mesh by the model
259 description statements; Then, GSS employs Triangle (developed by
260 Jonathan Richard Shewchuk) to form the triangulate mesh and output
261 the mesh to an initial CGNS file. At last, GSS reads the CGNS file
262 again, computes the doping profile and finishes the remaining
263 calculations.
265 Triangle uses delaunay arithmetic, which forms a high quality
266 isotropic mesh. At the same time, MEDICI uses quadtree arithmetic to
267 generate its mesh, which often gives a regular mesh but the mesh
268 quality may be poor near the irregular boundary.
270 \subsection{Coordinate System}
271 The mesh generator uses a Cartesian coordinate system, in which the
272 top horizontal line has the maximal y coordinate and left vertical
273 line has the minimal x coordinate.
275 Note: This setting is different from PISCES and its commercial
276 versions like MEDICI and ATLAS.
278 \newpage
279 \subsection{MESH}
280 This statement indicates the beginning of the mesh generator.
281 \subsubsection*{Syntax}
282 \begin{verbatim}
283 MESH [ Type=<s> ] ModelFile=<s> [ Triangle=<s> ]
284 \end{verbatim}
286 \small
287 \noindent\begin{longtable}{ccccp{7cm}}
288 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
289 Type & string & - & - & \textbf{Type} indicates which mesh generator is to be used.
290 But at present it is useless since GSS only has one mesh generator. \\
291 ModelFile & string & - & - & \textbf{ModelFile} gives the name of temporary CGNS file. \\
292 Triangle & string & pzq30AD & - & \textbf{Triangle} passes parameters to Triangle code.
293 The detailed description of this string can be found at Triangle's home page
294 http://www.cs.cmu.edu/~quake/triangle.html.\\
295 \end{longtable}
296 \normalsize
298 \subsubsection*{Example}
299 \begin{verbatim}
300 MESH Type=GSS ModelFile=pn.cgns Triangle="pzA"
301 \end{verbatim}
304 \newpage
305 \subsection{XMESH and YMESH}
306 The \textbf{XMESH} and \textbf{YMESH} cards specify the location of
307 lines of nodes in a rectangular mesh. The original mesh can be
308 modified by following mesh cards like \textbf{ELIMINATE} and
309 \textbf{SPREAD}.
311 \subsubsection*{Syntax}
312 \begin{verbatim}
313 XMESH { WIDTH=<n> | ( X.MIN=<n> X.MAX=<n> ) }
314 { N.SPACES=<i> [RATIO=<n>] | H1=<n> [H2=<n>] }
315 YMESH { DEPTH=<n> | ( Y.MAX=<n> Y.MIN=<n> ) }
316 { N.SPACES=<i> [RATIO=<n>] | H1=<n> [H2=<n>] }
317 \end{verbatim}
319 \small
320 \noindent\begin{longtable}{ccccp{7cm}}
321 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
322 WIDTH & number & - & $\mathrm{\mu m}$ & The distance of the grid section in x direction. \\
323 DEPTH & number & - & $\mathrm{\mu m}$ & The distance of the grid section in y direction. \\
324 X.MIN & number & - & $\mathrm{\mu m}$ & The x location of the left edge of the grid section.
325 synonym: \textbf{X.LEFT}. The value of \textbf{X.MIN} will be set to right
326 edge of the previous grid section automatically.\\
327 X.MAX & number & - & $\mathrm{\mu m}$ & The x location of the right edge of the grid section.
328 synonym: \textbf{X.RIGHT}. \\
329 Y.MIN & number & - & $\mathrm{\mu m}$ & The y location of the bottom edge of the grid section.
330 synonym: \textbf{Y.BOTTOM}. \\
331 Y.MAX & number & - & $\mathrm{\mu m}$ & The y location of the top edge of the grid section.
332 synonym: \textbf{Y.TOP}. The value of \textbf{Y.MAX} will be set to bottom
333 edge of the previous grid section automatically.\\
334 N.SPACES & integer & 1 & - & The number of grid spaces in the grid section.\\
335 RATIO & number & 1.0 & - & The ratio between the sizes of adjacent grid spaces in the grid
336 section. \textbf{RATIO} should usually lie between 0.667 and 1.5. \\
337 H1 & number & - & $\mathrm{\mu m}$ & The size of the grid space at the begin edge of the grid section.\\
338 H2 & number & - & $\mathrm{\mu m}$ & The size of the grid space at the end edge of the grid section.\\
339 \end{longtable}
340 \normalsize
342 \subsubsection*{Example}
343 \begin{verbatim}
344 XMESH X.MIN=0.0 X.MAX=0.50 N.SPACES=8
345 YMESH DEPTH=0.1 N.SPACES=8 RATIO=0.8
346 YMESH DEPTH=0.1 N.SPACES=20
347 YMESH DEPTH=0.6 H1=0.005 H2=0.050
348 \end{verbatim}
351 \newpage
352 \subsection{ELIMINATE}
353 The \textbf{ELIMINATE} statement eliminates mesh points along planes
354 in a rectangular grid over a specified volume. This statement is
355 useful for eliminating nodes in regions of the device structure
356 where the grid is more dense than necessary. Points along every
357 second line in the chosen direction within the chosen range are
358 removed, except the first and last line. Successive eliminations of
359 the same range remove points along every fourth line, eighth line,
360 and so on.
362 \subsubsection*{Syntax}
363 \begin{verbatim}
364 ELIMINATE { DIRECTION = (ROWS | COLUMNS) }
365 [ {X.MIN=<n> | IX.MIN=<i>} ] [ {X.MAX=<n> | IX.MAX=<i>} ]
366 [ {Y.MIN=<n> | IY.MAX=<i>} ] [ {Y.MAX=<n> | IY.MIN=<i>} ]
367 \end{verbatim}
369 \small
370 \noindent\begin{longtable}{ccccp{7cm}}
371 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
372 DIRECTION & string & - & - & Specifies that horizontal or vertical lines of nodes are eliminated. \\
373 X.MIN & number & XMIN & $\mathrm{\mu m}$ & The minimum x location of the rectangular volume in which nodes are eliminated.
374 synonym: \textbf{X.LEFT}. \\
375 X.MAX & number & XMAX & $\mathrm{\mu m}$ & The maximum x location of the rectangular volume in which nodes are eliminated.
376 synonym: \textbf{X.RIGHT}. \\
377 IX.MIN & integer & 0 & - & The minimum x node index of the rectangular volume in which nodes are eliminated.
378 synonym: \textbf{IX.LEFT}.\\
379 IX.MAX & integer & IXMAX-1 &- & The maximum x node index of the rectangular volume in which nodes are eliminated.
380 synonym: \textbf{IX.RIGHT}. \\
381 Y.MIN & number & YMIN & $\mathrm{\mu m}$ & The minimum y location of the rectangular volume in which nodes are eliminated.
382 synonym: \textbf{Y.BOTTOM}. \\
383 Y.MAX & number & YMAX & $\mathrm{\mu m}$ & The maximum y location of the rectangular volume in which nodes are eliminated.
384 synonym: \textbf{Y.TOP}. \\
385 IY.MIN & integer & 0 & - & The minimum y node index of the rectangular volume in which nodes are eliminated.
386 synonym: \textbf{IY.TOP}. \\
387 IY.MAX & integer & IYMAX-1 & - & The maximum y node index of the rectangular volume in which nodes are eliminated.
388 synonym: \textbf{IY.BOTTOM}.
389 \end{longtable}
390 \normalsize
392 \subsubsection*{Example}
393 \begin{verbatim}
394 ELIMINATE Direction=COLUMNS Y.TOP=-1.0
395 ELIMINATE Direction=ROWS IX.MAX=8
396 \end{verbatim}
399 \newpage
400 \subsection{SPREAD}
401 The \textbf{SPREAD} statement provides a way to adjust the y
402 position of nodes along grid lines parallel to the x-axis in a
403 rectangular mesh to follow surface and junction contours.
405 \subsubsection*{Syntax}
406 \begin{verbatim}
407 SPREAD LOCATION=(LEFT|RIGHT) WIDTH=<n> UPPER=<i> LOWER=<i> [ENCROACH=<n>]
408 { Y.LOWER=<n> | (THICKNES=<n> [VOL.RAT=<n>]) }
409 [GRADING=<n>]
410 \end{verbatim}
412 \small
413 \noindent\begin{longtable}{ccccp{7cm}}
414 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
415 LOCATION & string & - & - & Specifies which side of the grid is distorted. \\
416 WIDTH & number & 0.0 & $\mathrm{\mu m}$ & The width of the distorted region measured from the left or
417 right edge of the structure. \\
418 UPPER & integer & 0 & - & The index of the upper y-grid line of the distorted region. \\
419 LOWER & integer & 0 & - & The index of the lower y-grid line of the distorted region. \\
420 ENCROACH & number & 1.0 & - & The factor which defines the abruptness of the transition
421 between distorted and undistorted grid. The transition region
422 becomes more abrupt with smaller \textbf{ENCROACH} factors. The minimum
423 allowed value is 0.1. \\
424 Y.LOWER & number & - & $\mathrm{\mu m}$ & The vertical location in the distorted region where the line
425 specified by \textbf{LOWER} is moved. The grid line specified by
426 \textbf{UPPER} does not move if this parameter is specified. \\
427 THICKNESS & number & - & $\mathrm{\mu m}$ & The thickness of the distorted region. Specifying \textbf{THICKNESS}
428 usually causes the positions of both the \textbf{UPPER} and \textbf{LOWER}
429 grid lines to move. \\
430 VOL.RAT & number & 0.44 & - & The ratio of the displacement of the lower grid line to the net
431 change in thickness. If \textbf{VOL.RAT} is 0, the location of the
432 lower grid line does not move. If \textbf{VOL.RAT} is 1, the upper
433 grid line does not move. \\
434 GRADING & number & 1.0 & - & The vertical grid spacing ratio in the distorted region between
435 the y-grid lines specified with \textbf{UPPER} and \textbf{LOWER}
436 The spacing grows or shrinks by
437 GRADING in each interval between lines. \textbf{GRADING} should
438 usually lie between 0.667 and 1.5.
439 \end{longtable}
440 \normalsize
442 \subsubsection*{Example}
443 \begin{verbatim}
444 SPREAD Location=Left Width=0.625 Upper=0 Lower=2 Thickness=0.1
445 SPREAD Location=Right Width=0.625 Upper=0 Lower=2 Thickness=0.1
446 \end{verbatim}
449 \newpage
450 \subsection{REGION}
451 The \textbf{REGION} statement defines the location of materials in
452 the mesh. Currently, GSS supports following materials: null space
453 including Vacuum and Air; semiconductor material including Si, Ge,
454 GaAs, $\mathrm{Si}_{1-x}\mathrm{Ge}_x$,
455 $\mathrm{Al}_x\mathrm{Ga}_{1-x}\mathrm{As}$ and
456 $\mathrm{In}_x\mathrm{Ga}_{1-x}\mathrm{As}$; insulator material
457 including $\mathrm{SiO}_2$ and electrode region including Elec, Al
458 and PolySi.
460 \subsubsection*{Syntax}
461 \begin{verbatim}
462 REGION Shape=Rectangle Label=<s> Material=<s>
463 [ X.MOLE=<n> [ MOLE.SLOPE=<n> | MOLE.END=<n> ] MOLE.GRAD=(X.Linear|Y.Linear) ]
464 [ {X.MIN=<n> | IX.MIN=<n>} ] [ {X.MAX=<n> | IX.MAX=<n>} ]
465 [ {Y.MIN=<n> | IY.MIN=<n>} ] [ {Y.MAX=<n> | IY.MAX=<n>} ]
466 REGION Shape=Ellipse Label=<s> Material=<s>
467 {CentreX=<n> CentreY=<n> MajorRadii=<n> MinorRadii=<n> Theta=<n> Division=<i>}
468 \end{verbatim}
470 \small
471 \noindent\begin{longtable}{ccccp{8.5cm}}
472 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
473 Shape & string & - & - & Specifies the shape of the region. Can be Rectangle or Ellipse.\\
474 Label & string & - & - & Specifies the identifier of this region, limited to 12 chars. \\
475 Material & string & - & - & Specifies the material of the region. Material strings can be
476 Vacuum, Air, Si, Ge, GaAs, SiGe, AlGaAs, InGaAs, SiO2, Elec, Al and PolySi.\\
477 X.MOLE & number & 0.0 & - & The mole fraction to use in the region for compound materials.
478 For graded compounds, \textbf{X.MOLE} represents the initial
479 mole fraction at the left, top, or front edge of the region
480 depending on whether X.Linear, or Y.Linear, respectively,
481 is specified. \\
482 MOLE.SLOPE & number & 0.0 & $\mathrm{\mu m}^{-1}$ & The slope of the mole fraction for graded compounds. If this
483 parameter is used, the mole fraction has a value of \textbf{X.MOLE}
484 at the left, top or front edge of the region and a value of
485 \textbf{X.MOLE} + width * \textbf{X.SLOPE} at the right, bottom or back
486 edge of the region, where width is the width or depth of the
487 region. \\
488 MOLE.END & number & 0.0 & - & The mole fraction for graded compounds at the right, bottom,
489 or backedge of the region depending on whether X.Linear,
490 or Y.Linear, respectively, is specified. \\
491 MOLE.GRAD & string & Y.Linear & - & Specifies that the mole fraction grading is in the x or y direction. \\
492 X.MIN & number & XMIN & $\mathrm{\mu m}$ & The minimum x location of the region.
493 synonym: \textbf{X.LEFT}. \\
494 X.MAX & number & XMAX & $\mathrm{\mu m}$ & The maximum x location of the region.
495 synonym: \textbf{X.RIGHT}. \\
496 IX.MIN & integer & 0 & - & The minimum x node index of the region.
497 synonym: \textbf{IX.LEFT}.\\
498 IX.MAX & integer & IXMAX-1 &- & The maximum x node index of the region.
499 synonym: \textbf{IX.RIGHT}. \\
500 Y.MIN & number & YMIN & $\mathrm{\mu m}$ & The minimum y location of the region.
501 synonym: \textbf{Y.BOTTOM}. \\
502 Y.MAX & number & YMAX & $\mathrm{\mu m}$ & The maximum y location of the region.
503 synonym: \textbf{Y.TOP}. \\
504 IY.MIN & integer & 0 & - & The minimum y node index of the region.
505 synonym: \textbf{IY.TOP}. \\
506 IY.MAX & integer & IYMAX-1 & - & The maximum y node index of the region.
507 synonym: \textbf{IY.BOTTOM}.\\
508 CentreX & number & 0.0 & $\mathrm{\mu m}$ & The x location of the center of ellipse. \\
509 CentreY & number & 0.0 & $\mathrm{\mu m}$ & The y location of the center of ellipse.\\
510 MajorRadii & number & 1.0 & $\mathrm{\mu m}$ & The length of the major radii of ellipse.\\
511 MinorRadii & number & MajorRadii & $\mathrm{\mu m}$ & The length of the minor radii of ellipse.\\
512 Theta & number & 0.0 & degree & The angle of the first division point located on the boundary of ellipse region.\\
513 Division & integer & 12 & - & The number of points which divide the boundary of ellipse into small segments.
514 \end{longtable}
515 \normalsize
517 \subsubsection*{Example}
518 \begin{verbatim}
519 REGION Label=Si1 Material=Si Y.TOP= 0.000 Y.BOTTOM=-0.100
520 REGION Label=SiGe1 Material=SiGe Y.TOP=-0.100 Y.BOTTOM=-0.125 \
521 X.MOLE=0.0 Mole.End=0.2
522 REGION Label=Hole Material=SiO2 Shape=Ellipse CentreX=2.0 CentreY=-0.5 \
523 Division=24 MajorRadii=0.3 MinorRadii=0.3
524 \end{verbatim}
526 \subsubsection*{Hint}
527 Several regions can be defined one by one. But users should be
528 careful that regions can't get cross each other. The situations
529 showed by Fig\ref{Region1} (A) and (B) are allowed, but (C) will
530 break the mesh generator of GSS. The ellipse region is used for
531 photon crystal simulation. By choosing different division number,
532 GSS can build triangle, rectangle, hexagon as well as ellipse
533 (circle). Fig\ref{Region2} shows different shapes of polygons build
534 by ellipse.
535 \begin{figure}[ht]
536 \hfill
537 \begin{minipage}[t]{.5\textwidth}
538 \begin{center}
539 \includegraphics[scale=0.6]{r1.png}
540 \caption{Multi-Region definition.}\label{Region1}
541 \end{center}
542 \end{minipage}
543 \hfill
544 \begin{minipage}[t]{.45\textwidth}
545 \begin{center}
546 \includegraphics[scale=0.3]{region.png}
547 \caption{Define shapes of ellipse region}\label{Region2}
548 \end{center}
549 \end{minipage}
550 \hfill
551 \end{figure}
553 \newpage
554 \subsection{SEGMENT}
555 Segment is a group of boundary edges which have the same attribute.
556 This statement specifies the label of a special segment. User can
557 assign the segment with a special boundary type by \textbf{BOUNDARY}
558 statement.
560 \subsubsection*{Syntax}
561 \begin{verbatim}
562 SEGMENT Label=<s> { Location=<s> | ( Direction=<s> X=<n> | Y=<n> ) }
563 [ {X.MIN=<n> | IX.MIN=<n>} ] [ {X.MAX=<n> | IX.MAX=<n>} ]
564 [ {Y.MIN=<n> | IY.MIN=<n>} ] [ {Y.MAX=<n> | IY.MAX=<n>} ]
565 \end{verbatim}
567 \small
568 \noindent\begin{longtable}{ccccp{7cm}}
569 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
570 Label & string & - & - & Specifies the identifier of this segment, limited to 31 chars. \\
571 Location & string & - & - & Specifies which side the segment lies along. Allowed: TOP, BOTTOM, LEFT or RIGHT.\\
572 Direction & string & - & - & Specifies the dimensional orientation of the segment. Allowed: Horizontal or Vertical. \\
573 X & number & 0.0 & $\mathrm{\mu m}$ & Specifies the X coordinate of the vertical segment. \\
574 Y & number & 0.0 & $\mathrm{\mu m}$ & Specifies the Y coordinate of the horizontal segment. \\
575 X.MIN & number & XMIN & $\mathrm{\mu m}$ & The minimum x location of the segment.
576 synonym: \textbf{X.LEFT}. \\
577 X.MAX & number & XMAX & $\mathrm{\mu m}$ & The maximum x location of the segment.
578 synonym: \textbf{X.RIGHT}. \\
579 IX.MIN & integer & 0 & - & The minimum x node index of the segment.
580 synonym: \textbf{IX.LEFT}.\\
581 IX.MAX & integer & IXMAX-1 &- & The maximum x node index of the segment.
582 synonym: \textbf{IX.RIGHT}. \\
583 Y.MIN & number & YMIN & $\mathrm{\mu m}$ & The minimum y location of the segment.
584 synonym: \textbf{Y.BOTTOM}. \\
585 Y.MAX & number & YMAX & $\mathrm{\mu m}$ & The maximum y location of the segment.
586 synonym: \textbf{Y.TOP}. \\
587 IY.MIN & integer & 0 & - & The minimum y node index of the segment.
588 synonym: \textbf{IY.TOP}. \\
589 IY.MAX & integer & IYMAX-1 & - & The maximum y node index of the segment.
590 synonym: \textbf{IY.BOTTOM}.
591 \end{longtable}
592 \normalsize
594 \subsubsection*{Example}
595 \begin{verbatim}
596 SEGMENT Label=Anode Direction=Horizontal X.MIN=0.0 X.MAX=1.0 Y=0.0
597 SEGMENT Label=Cathode Direction=Horizontal X.MIN=0.0 X.MAX=3.0 Y=-3.0
598 SEGMENT Label=Anode Location=TOP X.MIN=0.0 X.MAX=1.0
599 SEGMENT Label=Cathode Location=BOTTOM
600 \end{verbatim}
602 \subsubsection*{Hint}
603 Here, I have to mention the naming principle of segments. Beside
604 labeled segments, the interface edges between two regions will be
605 assigned by IF\_\textit{name1}\_to\_\textit{name2} in which the
606 \textit{name1} and \textit{name2} is the labels of the two regions
607 by alpha order. The remain edges of a region will be assigned by
608 \textit{name}\_Neumann and the \textit{name} is the label of the
609 region.
611 One can define a segment for probing data. Please refer to \textbf{PROBE} statement.
612 This kind of segment should be placed inside a region. Equally, NO intersection to any other segment.
614 \newpage
615 \subsection{REFINE}
616 The \textbf{REFINE} statement allows refinement of a coarse mesh.
618 \subsubsection*{Syntax}
619 \begin{verbatim}
620 REFINE Variable=(Doping|Potential) Dispersion=<n> DivisionRatio=<n>
621 [ Measure=(Linear|SignedLog) ] [ Triangle=<s> ]
622 \end{verbatim}
624 \small \noindent\begin{longtable}{ccccp{7cm}}
625 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
626 Variable & string & - & - & Specifies that the grid refinement is based on the potential or doping quantity. \\
627 Measure & string & Linear & - & Specifies that refinement is based on the original value or logarithm of the
628 specified quantity.\\
629 Dispersion & number & 3.0 & - & The numerical criterion for refining a triangle. If the specified
630 quantity differs by more than this parameter at the nodes of a triangle,
631 the triangle is divided.\\
632 DivisionRatio & number & 0.25 & - & The area of divided triangle over area of original triangle.
633 The default value suggests Triangle code divide one triangle into 4 small triangles.
634 It is a suggestion value, Triangle code will adjust it for mesh quality reason.\\
635 Triangle & string &praq30Dz & - & Passes parameters to Triangle code.\\
636 \end{longtable}
637 \normalsize
639 \subsubsection*{Example}
640 \begin{verbatim}
641 REFINE Variable=Doping Measure=SignedLog Dispersion=1
642 REFINE Variable=Potential Measure=Linear Dispersion=0.1
643 \end{verbatim}
645 \begin{figure}[ht]
646 \centering
647 \includegraphics[scale=0.3]{refine.png}
648 \caption{Mesh refinement for a PN diode.}
649 \end{figure}
651 \newpage
652 \section{Doping Profile}
653 The \textbf{PROFILE} statement defines profiles for impurities to be
654 used in the device structure. At present, GSS supports analytic
655 profiles such as uniform, gauss distribution in both x-y directions
656 and error function distribution in x direction while gauss
657 distribution in y direction.
659 \subsubsection*{Syntax}
660 \begin{verbatim}
661 PROFILE { Type=Uniform |
662 Type=Gauss [YCHAR=<n> | Y.Junction=<n>] [XCHAR=<n>] |
663 Type=ErrorFunc [YCHAR=<n>] [XCHAR=<n>] }
664 Ion=(Donor|Acceptor) { N.Peak=<n> | Dose=<n> }
665 [ X.MIN=<n> ] [ X.MAX=<n> ] [ Y.MIN=<n> ] [ Y.MAX=<n> ]
666 \end{verbatim}
668 \small
669 \noindent\begin{longtable}{ccccp{7cm}}
670 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
671 Type & string & - & - & Specifies that the profile has a uniform, gauss or error function distribution.\\
672 Ion & string & - & - & Specifies the impurity ionization. \\
673 N.Peak & number & 0.0 & $cm^{-3}$ & The peak impurity concentration for an impurity profile.\\
674 Dose & number & 0.0 & $cm^{-2}$ & The dose of the impurity profile assuming a full Gaussian distribution.\\
675 X.MIN & number & 0.0 & $\mathrm{\mu m}$ & The minimum x location of the doping profile.
676 synonym: \textbf{X.LEFT}. \\
677 X.MAX & number & XMIN & $\mathrm{\mu m}$ & The maximum x location of the doping profile.
678 synonym: \textbf{X.RIGHT}. \\
679 Y.MIN & number & YMAX & $\mathrm{\mu m}$ & The minimum y location of the doping profile.
680 synonym: \textbf{Y.BOTTOM}. \\
681 Y.MAX & number & 0.0 & $\mathrm{\mu m}$ & The maximum y location of the doping profile.
682 synonym: \textbf{Y.TOP}. \\
683 YCHAR & number & 0.25 & $\mathrm{\mu m}$ & The y characteristic length of the profile outside the range of
684 \textbf{Y.MIN} < y < \textbf{Y.MAX}. \\
685 XCHAR & number & 0.25 & $\mathrm{\mu m}$ & The x characteristic length of the profile outside the range of
686 \textbf{X.MIN} < x < \textbf{X.MAX}. \\
687 Y.Junction & number & 0.0 & $\mathrm{\mu m}$ & The y location under the center of the profile where the magnitude
688 of the profile being added equals the magnitude of the
689 background profile. \\
690 \end{longtable}
691 \normalsize
693 \subsubsection*{Example}
694 \begin{verbatim}
695 PROFILE Type=Uniform Ion=Donor N.PEAK=1E15 \
696 X.MIN=0.0 X.MAX=3.0 Y.TOP=0.0 Y.BOTTOM=-3.0
697 PROFILE Type=Gauss Ion=Acceptor N.PEAK=1E18 X.CHAR=0.2 Y.JUNCTION=-0.5 \
698 X.MIN=0.0 X.MAX=0.7 Y.TOP=0.0 Y.BOTTOM=0.0
699 PROFILE Type=ErrorFunc Ion=Acceptor N.PEAK=2E17 X.CHAR=0.25 Y.CHAR=0.25 \
700 X.MIN=0.5 X.MAX=1.0 Y.TOP=0.0 Y.BOTTOM=0.0
701 \end{verbatim}
704 \newpage
705 \section{Voltage and Current Source}
706 \subsection{Introduction}
707 For simulation the transient response of device, GSS supports
708 several types of voltage and current source. The original models of
709 these sources come from SPICE, a famous circuit simulation program.
710 Several sources may be defined in one disk file. And the placement
711 of these definitions are not critical. The sources can be assigned
712 to electrode by \textbf{ATTACH} statement when needed.
714 \subsection{ISOURCE}
716 \subsubsection*{Syntax}
717 \begin{verbatim}
718 isource Type=IDC ID=<s> Tdelay=<n> Iconst=<n>
719 isource Type=ISIN ID=<s> Tdelay=<n> Iamp=<n> Freq=<n>
720 isource Type=IEXP ID=<s> Tdelay=<n> TRC=<n> TFD=<n>
721 TFC=<n> Ilo=<n> Ihi=<n>
722 isource Type=IPULSE ID=<s> Tdelay=<n> Tr=<n> Tf=<n>
723 Pw=<n> Pr=<n> Ilo=<n> Ihi=<n>
724 isource Type=ISHELL ID=<s> DLL=<s> Func=<s>
725 \end{verbatim}
727 \small
728 \noindent\begin{longtable}{ccccp{7cm}}
729 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
730 Type & string & - & - & This parameter declares which type of current source is defined here.
731 Only four types of current source listed as previous are supported at present. \\
732 ID & string & - & - & A unique string which identifies the current source.\\
733 Tdelay & number & 0 & $\mathrm{s}$ & A proper delay time before the activation of this current source. \\
734 Iconst & number & 0 & $\mathrm{mA}$ & The current of the IDC. \\
735 Iamp & number & 0 & $\mathrm{mA}$ & The amplitude current of the ISIN. \\
736 Freq & number & 0 & $\mathrm{Hz}$ & The frequency of the ISIN. \\
737 TRC & number & 0 & $\mathrm{s}$ & The rise time constant of the IEXP. \\
738 TFD & number & 0 & $\mathrm{s}$ & The fall delay time of the IEXP. \\
739 TFC & number & 0 & $\mathrm{s}$ & The fall time constant of the IEXP. \\
740 Tr & number & 0 & $\mathrm{s}$ & The raise edge of the IPULSE. \\
741 Tf & number & 0 & $\mathrm{s}$ & The fall edge of the IPULSE. \\
742 Pw & number & 0 & $\mathrm{s}$ & The pulse with of the IPULSE. \\
743 Pr & number & 0 & $\mathrm{s}$ & The period of the IPULSE. \\
744 Ilo & number & 0 & $\mathrm{mA}$ & The low current for both IEXP and IPULSE. \\
745 Ihi & number & 0 & $\mathrm{mA}$ & The high current for both IEXP and IPULSE. \\
746 DLL & string & - & - & The name of dynamic library file.\\
747 Func & string & - & - & The name of the function loaded from dynamic library file.
748 \end{longtable}
749 \normalsize
751 \subsubsection*{Example}
752 \begin{verbatim}
753 isource Type=IDC ID=I1 Tdelay=0 Iconst=5
754 isource Type=ISIN ID=I2 Tdelay=0 Iamp=0.1 Freq=1e6
755 isource Type=IEXP ID=I3 Tdelay=0 TRC=1E-6 TFD=3E-6 TFC=1E-6 Ilo=0 Ihi=1
756 isource Type=IPULSE ID=I4 Tdelay=0 Tr=1E-9 Tf=1E-9 Pw=5E-6 Pr=1E-5 Ilo=0 Ihi=1
757 \end{verbatim}
759 \newpage
760 \subsection{VSOURCE}
761 \subsubsection*{Syntax}
763 \begin{verbatim}
764 vsource Type=VDC ID=<s> Tdelay=<n> Vconst=<n>
765 vsource Type=VSIN ID=<s> Tdelay=<n> Vconst=<n> Vamp=<n> Freq=<n> Alpha=<n>
766 vsource Type=VEXP ID=<s> Tdelay=<n> TRC=<n> TFD=<n>
767 TFC=<n> Vlo=<n> Vhi=<n>
768 vsource Type=VPULSE ID=<s> Tdelay=<n> Tr=<n> Tf=<n>
769 Pw=<n> Pr=<n> Vlo=<n> Vhi=<n>
770 vsource Type=VSHELL ID=<s> DLL=<s> Func=<s>
771 \end{verbatim}
773 \small
774 \noindent\begin{longtable}{ccccp{7cm}}
775 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
776 Type & string & - & - & This parameter declares which type of
777 voltage source is defined here.
778 Only four types of voltage source listed as previous are supported at present. \\
779 ID & string & - & - & A unique string which identifies the voltage source.\\
780 Tdelay & number & 0 & $\mathrm{s}$ & A proper delay time before the activation of this voltage source. \\
781 Vconst & number & 0 & $\mathrm{V}$ & The voltage of the VDC. \\
782 Vamp & number & 0 & $\mathrm{V}$ & The amplitude voltage of the VSIN. \\
783 Freq & number & 0 & $\mathrm{Hz}$ & The frequency of the VSIN. \\
784 Alpha & number & 0 & - & The exponential attenuation parameter of the VSIN. \\
785 TRC & number & 0 & $\mathrm{s}$ & The rise time constant of the VEXP. \\
786 TFD & number & 0 & $\mathrm{s}$ & The fall delay time of the VEXP. \\
787 TFC & number & 0 & $\mathrm{s}$ & The fall time constant of the VEXP. \\
788 Tr & number & 0 & $\mathrm{s}$ & The raise edge of the VPULSE. \\
789 Tf & number & 0 & $\mathrm{s}$ & The fall edge of the VPULSE. \\
790 Pw & number & 0 & $\mathrm{s}$ & The pulse with of the VPULSE. \\
791 Pr & number & 0 & $\mathrm{s}$ & The period of the VPULSE. \\
792 Vlo & number & 0 & $\mathrm{V}$ & The low voltage for both VEXP and VPULSE. \\
793 Vhi & number & 0 & $\mathrm{V}$ & The high voltage for both VEXP and VPULSE. \\
794 DLL & string & - & - & The name of dynamic library file.\\
795 Func & string & - & - & The name of the function loaded from dynamic library file.
796 \end{longtable}
797 \normalsize
799 \subsubsection*{Example}
800 \begin{verbatim}
801 vsource Type=VDC ID=GND Tdelay=0 Vconst=0
802 vsource Type=VDC ID=VCC Tdelay=0 Vconst=5
803 vsource Type=VSIN ID=Vs Tdelay=1e-6 Vamp=0.1 Freq=1e6
804 vsource Type=VEXP ID=V1 Tdelay=0 TRC=1e-6 TFD=1e-6 TFC=1e-6 Vlo=0 Vhi=1
805 vsource Type=VPULSE ID=V2 Tdelay=0 Tr=1e-9 Tf=1e-9 Pw=5e-6 Pr=1e-5 Vlo=0 Vhi=1
806 vsource Type=VSHELL ID=VGauss DLL=foo.so Func=vsrc_gauss
807 \end{verbatim}
809 \newpage
810 \subsubsection*{Hint}
811 GSS supports user defined voltage and current source by loading
812 shared object (.so) file. The file which contains a user defined
813 voltage source should have the function as follow. GSS will pass the
814 argument time in the unit of second to the function
815 \textit{vsrc\_name} and get voltage value in the unit of volt. The
816 current source function is almost the same except the unit of
817 current is $\mathrm{mA}$.
819 \begin{verbatim}
820 double vsrc_name(double time)
822 /* calculate the voltage amplitude */
823 return vsrc_amplitude;
825 double isrc_name(double time)
827 /* calculate the current amplitude */
828 return isrc_amplitude;
830 \end{verbatim}
832 The c code should be linked with -shared and -fPIC option as:
833 \begin{verbatim}
834 gcc -shared -fPIC -o foo.so foo.c -lm
835 \end{verbatim}
837 The \textit{foo.so} file should be put in the same directory as
838 input file.
840 \newpage
841 \section{Boundary Condition}
843 \subsection{BOUNDARY and CONTACT}
844 The \textbf{BOUNDARY} statement sets boundary information to
845 representing segments which defined by mesh generator or read from
846 CGNS file.
848 GSS now fully support electrode region (the material of this region
849 may be metal or poly-Si). One should use \textbf{CONTACT} statement
850 to specify the electrode type of this region(s).
852 \subsubsection*{Syntax}
853 \begin{verbatim}
854 BOUNDARY Type=OhmicContact ID=<s> [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
855 [ Heat.Transfer=<n> ] [EXT.Temp=<n> ] [ConnectTo=<s>]
856 BOUNDARY Type=SchottkyContact ID=<s> [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
857 WorkFunction=<n> [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
858 BOUNDARY Type=GateContact ID=<s> WorkFunction=<n>
859 [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
860 [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
861 BOUNDARY Type=InsulatorContact ID=<s> WorkFunction=<n> [ QF=<n> ]
862 [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
863 Thickness=<n> Eps=<n> [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
864 BOUNDARY Type=InsulatorInterface ID=<s> [ QF=<n> ]
865 BOUNDARY Type=Heterojunction ID=<s> [ QF=<n> ]
866 BOUNDARY Type=NeumannBoundary ID=<s> [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
868 CONTACT Type=OhmicContact ID=<s>
869 [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ] [ConnectTo=<s>]
870 [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
871 CONTACT Type=SchottkyContact ID=<s>
872 [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
873 WorkFunction=<n> [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
874 CONTACT Type=GateContact ID=<s> WorkFunction=<n>
875 [ Res=<n> ] [ Cap=<n> ] [ Ind=<n> ]
876 [ Heat.Transfer=<n> ] [EXT.Temp=<n> ]
877 CONTACT Type=FloatMetal ID=<s> [ QF=<n> ]
878 \end{verbatim}
880 \small
881 \noindent\begin{longtable}{ccccp{7cm}}
882 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
883 Type & string & - & - & This parameter declares which type of boundary condition is defined here.\\
884 ID & string & - & - & A unique string which identifies the corresponding segment.\\
885 Res & number & 0 & $\Omega$ & The lumped resistance for the electrode. \\
886 Cap & number & 0 & $\mathrm{F}$ & The lumped capacitance for the electrode. \\
887 Ind & number & 0 & $\mathrm{H}$ & The lumped inductance for the electrode. \\
888 ConnectTo & string & - & - & Specifies the ID of an ohmic electrode which connect to this ohmic electrode. Useful for CMOS structure.\\
889 WorkFunction & number &4.7 & $\mathrm{V}$ & The workfunction of the Schottky contact or gate material. \\
890 QF & number & 0 & $\mathrm{C}\cdot \mathrm{cm}^{-2}$ & For InsulatorContact and InsulatorInterface bc: The surface charge density of semiconductor-insulator interface. \\
891 QF & number & 0 & $\mathrm{C}\cdot \mathrm{cm}^{-2}$ & For Heterojunction bc: The surface charge density of heterojunction. \\
892 QF & number & 0 & $\mathrm{C}\cdot \mathrm{\mu m}^{-1}$ & For FloatMetal bc: The free charge per micron in Z dimension. \\
893 Thickness & number &2e-7 & $\mathrm{cm}$ & The thickness of $\mathrm{SiO}_2$ layer. \\
894 Eps & number &3.9 & - & The relative permittivity of $\mathrm{SiO}_2$ layer.\\
895 Heat.Transfer & number &1e3 &$\mathrm{W}/(\mathrm{cm}\cdot \mathrm{K})$ & The heat transfer rate of boundary. \\
896 EXT.Temp & number & LatticeTemp & $\mathrm{K}$ & The external temperature. \\
897 \end{longtable}
898 \normalsize
900 \subsubsection*{Example}
901 \begin{verbatim}
902 BOUNDARY Type=InsulatorContract ID=SiSiO2 Res=0 Cap=0 Ind=0 \
903 Thickness=1e-6 Eps=3.9 WorkFunction=4.7 QF=0
904 BOUNDARY Type=InsulatorInterface ID=IFACE QF=0
905 BOUNDARY Type=GateContract ID=GATE Res=0 Cap=0 Ind=0 WorkFunction=4.7
906 BOUNDARY Type=NeumannBoundary ID=WALL Heat.Transfer=0 EXT.Temp=300
907 BOUNDARY Type=SchottkyContract ID=sgate Res=0 Cap=0 Ind=0 VBarrier=0.8
908 BOUNDARY Type=OhmicContract ID=OMANODE Res=0 Cap=0 Ind=0
909 BOUNDARY Type=OhmicContract ID=OMCATHODE Res=0 Cap=0 Ind=0
910 \end{verbatim}
912 \subsubsection*{Hint}
913 Four "electrode" boundary conditions are supported by GSS. The names
914 are ended with "Contact". The OhmicContact and SchottkyContact
915 electrodes have current flow in both steady state and transient
916 situations. While GateContact and InsulatorContact(a simplified
917 MOSFET Gate boundary condition) only have displacement current in
918 transient situation.
920 GSS supports five interfaces which can be set automatically:
921 semiconductor-insulator interface(InsulatorInterface),
922 semiconductor-electrode interface(set to OhmicContract as default),
923 interface between different semiconductor material(Heterojunction)
924 and interface between same semiconductor material(Homojunction).
925 These boundaries can be set automatically by GSS if user didn't set
926 them explicitly. However, the electrode-insulator interface, may
927 have several situations: Gate to Oxide interface, FloatMetal to
928 Oxide interface or Source/Drain electrode to Oxide interface. As a
929 result, this interface can only be set correctly when electrode type
930 is known. Please refer to the following \textbf{CONTACT} statement.
932 GSS can build region with metal or poly-Si material to form an
933 electrode. Which means, i.e. for OhmicContact bc, one can simply
934 specify a segment as Ohmic bc or build an electrode region as Ohmic
935 electrode. Since Version 0.45.03, GSS considers electrode region,
936 semiconductor region and insulator region during calculation. As a
937 result, GSS added \textbf{CONTACT} statement for fast boundaries
938 specification of electrode region. At present, GSS support electrode
939 with the type of Ohmic, Schottky, Gate and FloatMetal. All the
940 electrode should be specified explicitly and GSS will set
941 corresponding boundaries automatically.
943 The "ID" parameter of \textbf{BOUNDARY} statement is limited to
944 segment label. And The "ID" parameter of \textbf{CONTACT} statement
945 is limited to region name.
947 The NeumannBoundary, which is the default boundary type for all the
948 non-interface segments, can also be set automatically.
950 \newpage
951 \subsection{ATTACH}
952 This statement is used to add voltage or current sources to the
953 electrode boundary. The statement first clears all the sources
954 connected to the specified electrode and then adds source(s) defined
955 by VApp or IApp parameter. If two or more sources are attached to
956 the same electrode, the total effect is the summation of all
957 sources. However, the sources attached to one electrode must have
958 the same type.
960 \subsubsection*{Syntax}
961 \begin{verbatim}
962 ATTACH Electrode=<s> Type=Voltage VApp=<s> [VApp=<s> ...]
963 ATTACH Electrode=<s> Type=Current IApp=<s> [IApp=<s> ...]
964 \end{verbatim}
966 \small \noindent\begin{longtable}{ccccp{7cm}}
967 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
968 Electrode & string & - & - & Specifies which electrode boundary is to be attached with one or more sources.\\
969 Type & string & Voltage & - & The sources are voltage or current type.\\
970 VApp & string & - & - & Specifies the ID of voltage source which is to be attached to this electrode.\\
971 IApp & string & - & - & Specifies the ID of current source which is to be attached to this electrode.\\
972 \end{longtable}
973 \normalsize
975 \subsubsection*{Example}
976 \begin{verbatim}
977 ATTACH Electrode=Collector VApp=VCC
978 ATTACH Electrode=Emitter VApp=GND
979 ATTACH Electrode=Base VApp=Vb VApp=Vs
980 ATTACH Electrode=Base Type=Current IApp=Ib IApp=Is
981 \end{verbatim}
983 \subsubsection*{Hint}
984 If electrode is attached with voltage source(s), the R, C and L
985 defined by \textbf{BOUNDARY} statement will affect later simulation.
986 But solver will ignore those lumped elements with the electrode
987 which stimulated by current source(s). Please refer to Fig
988 \ref{Electrode}.
990 The positive direction of current is flow into the electrode.
992 Only Ohmic and Schottky electrodes can be attached by current
993 source(s).
995 If no source attached explicitly, the electrode is set to be
996 attached to ground.
998 \begin{figure}[ht]
999 \centering
1000 \includegraphics[scale=0.4]{electrode.png}
1001 \caption{Voltage and current boundary.} \label{Electrode}
1002 \end{figure}
1005 \newpage
1006 \section{Physical Model Interface}
1007 GSS use a dynamic mechanician to support various materials and
1008 physical models. Each material has a dynamic load library (.so)
1009 which contains its physical parameters. User can modify the
1010 parameters which can be found at \$(GSS\_DIR)/src/material and
1011 recompile it. Experts can even offer their own physical model files.
1013 At present, GSS has a \textbf{PMIS} statement for choosing different
1014 mobility models and impact ionization models.
1016 \subsubsection*{Syntax}
1017 \begin{verbatim}
1018 PMIS Region=<s> Mobility=<s> II.Model=<s>
1019 \end{verbatim}
1021 \small \noindent\begin{longtable}{ccccp{7cm}}
1022 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1023 Region & string & - & - & Specifies the semiconductor region which use the following physical model.\\
1024 Mobility & string & Analytic & - & The mobility model name.\\
1025 II.Model & string & Default & - & The impact ionization model name.\\
1026 \end{longtable}
1027 \normalsize
1029 \subsubsection*{Example}
1030 \begin{verbatim}
1031 PMIS Region=Si Mobility=Philips
1032 PMIS Region=Si Mobility=Lucent II.Model=Valdinoci
1033 \end{verbatim}
1035 \subsubsection*{Hint}
1036 One can set different physical models to individual region.
1038 GSS has implemented Analytic, Philips and Lucent mobility model for
1039 all the supported material. The Analytic and Philips mobility model
1040 only takes parallel field effect and they can be used within all the
1041 four solvers. The author suggest to use these models for bipolar
1042 device simulations. The Lucent mobility model, which considers
1043 parallel and transverse electrical field, is an accurate model for
1044 MOS structure. But it should work with DDML1E/DDML2E solvers in
1045 which transverse electrical field is calculated. The Lombardi and HP
1046 (Hewlett-Packard) mobility model only validate for Silicon. These
1047 two mobility models include parallel and transverse electrical field
1048 corrections and can be used for MOSFET simulation. The Hypertang
1049 mobility model only validate for GaAs. It is reported that this
1050 model can avoid unrealistic drain current oscillation when applied
1051 to the simulation of GaAs MESFET.
1053 The impact ionization model is still very limited in GSS. Only
1054 Valdinoci model for silicon is valid at present.
1056 \newpage
1057 \section{Solve Specification}
1058 \subsection{Introduction}
1059 These statements instruct GSS core to perform user specified solution(s).
1062 \subsection{METHOD}
1063 The \textbf{METHOD} statement sets the solver and the parameters of
1064 the solver. At present, GSS 0.4x has basic DDM solver(DDML1E),
1065 lattice temperature corrected DDM solver(DDML2E) and EBML3E solver which base on
1066 energy balance model.
1068 \subsubsection*{Syntax}
1069 \begin{verbatim}
1070 METHOD Type=(DDML1E|DDMLE2|EBML3E|QDDML1E) Scheme=Newton
1071 HighFieldMobility=(On|Off) EJModel=(On|Off)
1072 ImpactIonization=(On|Off) II.Type=(EdotJ|EVector|ESide|GradQf)
1073 BandBandTunneling=(On|Off)
1074 Fermi=(On|Off)
1075 NS=(Basic|LineSearch|TrustRegion)
1076 LS=(SuperLU|LU|CGS|BICG|BCGS|GMRES|TFQMR)
1077 Damping=(BankRose|Potential|No)
1078 MaxIteration=<i> relative.tol=<n>
1079 possion.tol=<n> elec.continuty.tol=<n> hole.continuty.tol=<n>
1080 elec.energy.tol=<n> hole.energy.tol=<n> latt.temp.tol=<n>
1081 electrode.tol=<n> toler.relax=<n>
1082 QNFactor=<n> QPFactor=<n>
1083 \end{verbatim}
1085 \small \noindent\begin{longtable}{ccccp{7cm}}
1086 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1087 Type & string & DDML1 & - & Specifies the solver.\\
1088 Scheme & string & Newton & - & At present, GSS only supports Newton's full iterative scheme.\\
1089 HighFieldMobility & bool & On & - & Specifies if high field mobility should be used. GSS set this flag to OFF for equilibrium state.\\
1090 EJModel & bool & Off & - & Specifies if EdotJ and EcrossJ should be use to calculate high field mobility.
1091 GSS will use a simpler model when this flag is set to OFF.\\
1092 ImpactIonization & bool & Off & - & Specifies if impact ionization should be considered.\\
1093 II.Type & string & GradQf & - & Specifies the implement model of impact ionization. \\
1094 BandBandTunneling & string & Off & - & Specifies if band to band tunneling should be considered.\\
1095 Fermi & bool & Off & - & Specifies if Fermi-Dirac statistics should be considered.\\
1096 NS & string &LineSearch & - & Specifies the nonlinear solver. \\
1097 LS & string &GMRES & - & Specifies the linear solver. \\
1098 Damping & string & No & - & Load a Newton damping method for LineSearch or Basic Newton nonlinear solver.\\
1099 MaxIteration & integer & 30 & - & The max number of iteration nonlinear solver will try. But for equilibrium state calculation, the max
1100 allowed iteration number is 10 times more than this value.\\
1101 relative.tol & number & 1e-5 & - & When relative error of solution variable less than this value, solution is considered converged.\\
1102 possion.tol & number & 1e-26 &$\rm{C\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the Poisson equation.\\
1103 elec.continuty.tol& number & 5e-18 &$\rm{A\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the electron continuity equation.\\
1104 hole.continuty.tol& number & 5e-18 &$\rm{A\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the hole continuity equation.\\
1105 elec.energy.tol & number & 1e-18 &$\rm{W\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the electron energy balance equation.\\
1106 hole.energy.tol & number & 1e-18 &$\rm{W\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the hole energy balance equation.\\
1107 latt.temp.tol & number & 1e-11 &$\rm{W\cdot {\mu m}^{-1}} $ & The absolute converged criteria for the lattice heat equation equation.\\
1108 electrode.tol & number & 1e-9 &$\rm{V}$ & The absolute converged criteria for the electrode bias equation.\\
1109 toler.relax & number & 1e4 & - & When relative error is used as converged criteria, the equation norm should
1110 satisfy the absolute converged criteria with a relaxation of this value.\\
1111 QNFactor & number & 1.0 & - & The damping quantity of electron quantum potential.\\
1112 QPFactor & number & 1.0 & - & The damping quantity of hole quantum potential.\\
1113 \end{longtable}
1114 \normalsize
1116 \subsubsection*{Example}
1117 \begin{verbatim}
1118 METHOD Type=DDML1E Scheme=Newton NS=LineSearch LS=GMRES
1119 METHOD Type=DDML1E Scheme=Newton NS=TrustRegion LS=LU
1120 METHOD Type=DDML2E Scheme=Newton NS=Basic LS=TFGMR Damping=Potential
1121 \end{verbatim}
1123 \subsubsection*{Hint}
1124 All the DDML1E/DDML2E/EBML3E/QDDML1E solvers support parallel and
1125 transverse electrical field dependent mobility.
1127 Lattice temperature equation is considered by DDML2E solver. The
1128 EBML3E solver is based on advanced energy balance method. The
1129 QDDML1E is a density-gradient solver which consists of quantum
1130 correction to classical model.
1132 The carrier generation by impact ionization and band band tunneling
1133 is really difficult for calculation. However, DDML1E/DDML2E solvers
1134 are carefully designed for impact ionization and band band tunneling
1135 calculation, i.e. diode reverse breakdown simulation. Usually, the
1136 temperature can't keep unchanged if carrier generation takes place.
1137 As a result, DDML2E solver is highly recommend for these types of
1138 situations. At present, EBML3E and QDDML1E solver don't support
1139 impact ionization.
1141 Fermi statistics is only supported by DDML1E and DDML2E solvers.
1143 LineSearch and TrustRegion accelerating methods work well when
1144 initial value a bit far from real solution, e.g. first time
1145 computing. Basic Newton method should only be used when initial
1146 value is near the true solution, e.g. dc sweep and transient
1147 calculation.
1149 Each nonlinear solver should have a inner linear solver. To choose a
1150 suitable linear solver may help the convergence. The performance of
1151 LineSearch and Basic Newton methods is good when Krylov subspace
1152 linear solvers(CGS, BICG, BCGS, GMRES and TFQMR) are employed.
1153 However, the TrustRegion method prefers LU factorization linear
1154 solver to Krylov subspace linear solvers.
1156 Newton Damping is a useful tool for helping convergence,
1157 especially for the Basic Newton method.
1159 QNFactor and QPFactor is used to enforce the convergence property of QDDML1E solver.
1160 Since quantum solution differs much from classical solution near Si/SiO2 interface, setting
1161 these two factors with small value i.e. 1e-4 and varying it gradually to 1.0, with each
1162 step the solution can get convergence. At last, the value of QXFactor of 1.0
1163 means that the quantum model is fully turned on and applied.
1165 The parameters of \textbf{METHOD} statement will not be affected by previous \textbf{METHOD} statement.
1167 The convergence is considered to be achieved when either the X norm
1168 or the function residual norm falls below certain tolerance. When
1169 every function's residual norm falls small than certain tolerance,
1170 the absolute convergence is achieved. For X norm criteria, it should
1171 fall below \textbf{relative.tol} and every function residual norm
1172 should fit the relaxed (with the relaxation value of
1173 \textbf{toler.relax)} absolute converged criteria.
1175 \newpage
1176 \subsection{SOLVE}
1177 The \textbf{SOLVE} statement instructs GSS to perform a solution for one or more
1178 specified bias points.
1180 \subsubsection*{Syntax}
1181 \begin{verbatim}
1182 SOLVE Type=EQUILIBRIUM
1183 SOLVE Type=STEADYSTATE
1184 SOLVE Type=DCSWEEP VScan=<s> [VScan=<s> ...] [IVRecord=<s> ...]
1185 [IVFile=<s>] VStart=<s> VStep=<s> VStop=<n>
1186 SOLVE Type=DCSWEEP IScan=<s> [IVRecord=<s> ...]
1187 [IVFile=<s>] IStart=<s> IStep=<s> IStop=<n>
1188 SOLVE Type=TRANSIENT ODE.Formula=(BDF1|BDF2) [IVRecord=<s> ...]
1189 [IVFile=<s>] TStart=<n> TStep=<n> TStop=<n>
1190 AutoStep=<b> Predict=<b>
1191 \end{verbatim}
1193 \small \noindent\begin{longtable}{ccccp{7cm}}
1194 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1195 Type & string & - & - & Specifies the Solve condition.\\
1196 VScan & string & - & - & Specifies the voltage variational electrode boundary for DCSWEEP.\\
1197 VStart & number & - & $\mathrm{V}$ & The initial voltage for DC sweep.\\
1198 VStep & number & - & $\mathrm{V}$ & The voltage step size of DC sweep.\\
1199 VStop & number & - & $\mathrm{V}$ & The finish voltage for DC sweep.\\
1200 IScan & string & - & - & Specifies the current variational electrode boundary for DCSWEEP.\\
1201 IStart & number & - & $\mathrm{mA}$ & The initial current for DC sweep.\\
1202 IStep & number & - & $\mathrm{mA}$ & The current step size of DC sweep.\\
1203 IStop & number & - & $\mathrm{mA}$ & The finish current for DC sweep.\\
1204 IV.Record & string & - & - & Specifies which electrode's IV data should be recorded.
1205 User can define serval electrodes here. \\
1206 IV.File & string & - & - & Specifies the file which contains the IV data.\\
1207 ODE.Formula & string & BDF2 & - & Specifies the time march scheme for solving the time-domain ordinary differential equation.\\
1208 TStart & number & - & $\mathrm{s}$ & The initial time for transient calculation.\\
1209 TStep & number & - & $\mathrm{s}$ & The time step size of transient calculation.\\
1210 TStop & number & - & $\mathrm{s}$ & The finish time for transient calculation.\\
1211 AutoStep & bool & - & True & Use automatically time step control based on LTE.\\
1212 Predict & bool & - & True & Predict initial value for next time step.\\
1213 \end{longtable}
1214 \normalsize
1216 \subsubsection*{Example}
1217 \begin{verbatim}
1218 SOLVE Type=EQUILIBRIUM
1219 SOLVE Type=DCSWEEP VScan=Anode IVRecord=Anode IVRecord=Cathode \
1220 IVFile=ivfp.txt VStart=0 VStep=1e-2 VStop=0.6
1221 SOLVE Type=DCSWEEP IScan=Anode IVRecord=Anode IVRecord=Cathode \
1222 IVFile=ivfp2.txt IStart=0.02 IStep=1e-2 IStop=1
1223 SOLVE Type=TRANSIENT IVRecord=Anode IVFile=iv.txt \
1224 TStart=0 TStep=1e-10 TStop=3e-8
1225 \end{verbatim}
1227 \subsubsection*{Hint}
1229 For equilibrium state calculation, all the electrodes are set to
1230 ground.
1232 You can't do a DC sweep with current scan to GateContact and
1233 InsulatorContact.
1235 When STEADYSTATE or DCSWEEP solve is performed, transient 0 value of
1236 the voltage(current) source will be used as the bias of each
1237 electrode.
1239 One can do voltage DCSWEEP with multi-electrode by specifying two or more VScan parameter.
1240 The voltage will be assigned to each electrode during the simulation. This function is useful
1241 for Double Gate MOS simulation.
1243 The step size for DCSWEEP calculation will
1244 automatically reduce to half size if last step diverged. Then it
1245 will be multiplied by 1.1 on each step until it reaches original
1246 step size.
1248 TRANSIENT simulation now use automatically time step control based on LTE (local truncation error).
1250 \newpage
1251 \subsection{AC Sweep Solver}
1252 In addition to DC steady state and transient analysis, GSS now
1253 allows AC small-signal analysis as a post-processing step after a DC
1254 solution.
1256 \subsubsection*{Syntax}
1257 \begin{verbatim}
1258 METHOD Type=DDML1AC LS=(LU|CGS|BICG|BCGS|GMRES|TFQMR)
1259 HighFieldMobility=(On|Off) EJModel=(On|Off)
1260 ImpactIonization=(On|Off) II.Type=(EdotJ|EVector|ESide|GradQf)
1261 BandBandTunneling=(On|Off)
1262 Fermi=(On|Off)
1263 SOLVE Type=ACSWEEP ACScan=<s> [IVRecord=<s> ...]
1264 [IVFile=<s>] FStart=<s> FMultiple=<s> FStop=<n> VAC=<n>
1265 \end{verbatim}
1267 \small \noindent\begin{longtable}{ccccp{7cm}}
1268 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1269 ACScan & string & - & - & Specifies the electrode for ACSWEEP.\\
1270 FStart & number & 1e6 & $\mathrm{Hz}$ & The initial frequency for AC sweep.\\
1271 FMultiple & number & 1.1 & - & The multiplicative factor for incrementing frequency.\\
1272 FStop & number & 1e9 & $\mathrm{Hz}$ & The finish frequency for AC sweep.\\
1273 VAC & number & 0.0026 & $\mathrm{V}$ & The magnitude of the applied small-signal bias.\\
1274 \end{longtable}
1275 \normalsize
1277 \subsubsection*{Hint}
1278 This solver shared Jacobian Matrix with DDML1E solver. Which means
1279 one should call it directly after DDML1E, keeping all the parameters
1280 unchanged for \textbf{METHOD} statement. If a previous computed
1281 result is imported, call DDML1E to do a steady-state calculation
1282 again and run DDML1AC later.
1284 The convergence may be difficult if frequency is very high, i.e.
1285 nearly cut off frequency, because of the poor condition number of
1286 Jacobian matrix.
1288 \newpage
1289 \subsection{EM FEM Solver}
1290 GSS has a electromagnetic solver based on finite element method.
1291 This solver calculates the distribution of electromagnetic field
1292 radiated by monochrome (light) wave. The photon generated carrier
1293 density in semiconductor region can be got at the same time.
1295 \subsubsection*{Syntax}
1296 \begin{verbatim}
1297 PHOTOGEN WAVELEN=<n> INTENSITY=<n> [ANGLE=<n>] WTM=<n> WTE=<n>
1298 [phase.diff=<n>] [quan.eff=<n>]
1299 METHOD Type=EMFEM [LS=LU]
1300 SOLVE
1301 LSOURCE Type=UNIFORM Tdelay=<n> Power=<n>
1302 LSOURCE Type=PULSE Tdelay=<n> Tr=<n> Tf=<n> Pw=<n> Pr=<n>
1303 Powerhi=<n> Powerlo=<n>
1304 LSOURCE Type=LSHELL DLL=<s> Func=<s>
1305 \end{verbatim}
1307 \textbf{Syntax for PHOTOGEN}
1308 \small \noindent\begin{longtable}{ccccp{8cm}}
1309 \textbf{ parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1310 WAVELEN & number & 0.532 & $\mathrm{\mu m}$ & The wavelength of incident monochrome wave.\\
1311 INTENSITY & number & 1.0 & $\mathrm{W \cdot cm^{-2}}$ & The power density of incident wave.\\
1312 ANGLE & number & 90 & degree & The clockwise angle of the ray direction relative to the horizontal axis.\\
1313 WTM & number & 1.0 & - & The percentage of intensity of TM model.\\
1314 WTE & number & 0.0 & - & The percentage of intensity of TE model.\\
1315 phase.diff & number & 0.0 & degree & The differentiation of phase angle between TE model and TM model.
1316 $\Delta \Phi=\Phi_{TM}-\Phi_{TE}$\\
1317 quan.eff & number & 1.0 & - & The quantum efficiency (which means electron-hole pares generated by one photon)
1318 of photon generation.\\
1319 \end{longtable}
1320 \normalsize
1322 \textbf{Syntax for LSOURCE}
1323 \small \noindent\begin{longtable}{ccccp{8cm}}
1324 \textbf{ parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1325 Type & string & - & - & The type of light source.\\
1326 Tdelay & number & 0.0 & $\mathrm{s}$ & The delay time before the activation of the light source. \\
1327 Tr & number & 1e-15 & $\mathrm{s}$ & The rise time of the intensity of the pulse-type light source. \\
1328 Tf & number & 1e-15 & $\mathrm{s}$ & The fall time of the intensity of the pulse type light source. \\
1329 Pw & number & 0 & $\mathrm{s}$ & The pulse width of the intensity of the pulse type light source. \\
1330 Pr & number & 0 & $\mathrm{s}$ & The repetition period of the intensity of the pulse type light source. \\
1331 Power & number & 1.0 & - & The multiply factor to photon generated carrier density.\\
1332 Powerhi& number & 1.0 & - & The higher multiply factor to photon generated carrier density. \\
1333 Powerlo& number & 0 & - & The lower multiply factor to photon generated carrier density. \\
1334 DLL & string & - & - & The name of dynamic library file.\\
1335 Func & string & - & - & The name of the function loaded from dynamic library file which calculates power coefficient.\\
1336 \end{longtable}
1337 \normalsize
1339 \subsubsection*{Hint}
1340 User need to build a vacuum region surrounding device and a PML
1341 region surrounding vacuum region. These two region should have a
1342 thickness of no less than one wave length.
1344 The work flow of EMFEM solver shows as follows. GSS set its internal
1345 solver to EMFEM when meets \textbf{METHOD} command with
1346 \textbf{EMFEM} type. The actual solving action takes place when
1347 meets the next \textbf{SOLVE} command. GSS will search the first
1348 \textbf{PHOTOGEN} command in the input list, using the parameters in
1349 this command during the solve procedure. This \textbf{PHOTOGEN}
1350 command will be removed from input list after solving action. As a
1351 result, user can set multi \textbf{PHOTOGEN} statements and repeat
1352 \textbf{SOLVE} command for corresponding times to calculate several
1353 beams of monochrome wave, during which the photon generated carrier
1354 density will be added to previous result.
1356 The iterative method such as GMRES usually leads to divergence when
1357 solving FEM problem. LU factorization is highly recommend.
1359 EMFEM only gets the photon generated carrier density. User should
1360 set \textbf{one LSOURCE} to describe the time evolution of the light
1361 source. The actual photon generated carrier density used in
1362 semiconductor simulation is the original value multiplied with
1363 \textbf{power} coefficient specified within \textbf{LSOURCE}.
1365 When DDML1E or DDML2E solver is loaded for further simulation, the
1366 photon generated carrier will be considered.
1368 User can define their own light source by dynamic loaded library as
1369 voltage or current source. Here is a template.
1370 \begin{verbatim}
1371 foo.c:
1372 double lsrc_power(double time) /* in the unit of s */
1374 double power;
1375 /* calculate the power of light source */
1376 return power;
1378 \end{verbatim}
1381 \newpage
1382 \subsection{IV File Format}
1383 GSS can generate IV record file for DC sweep, transient and AC sweep
1384 calculations. Here is the file format for the three situations.
1386 The file for DC sweep: The first line is begin with '\#', followed
1387 by the name of each electrode. The remain part is the potential and
1388 current for each electrode, each takes one column. The unit of
1389 potential is volt and the unit of current is mA.
1391 The file for transient calculation is nearly the same as the file
1392 for DC sweep, besides that the first column is the time with the
1393 unit of ps.
1395 The file for AC sweep has the same head as above. The remaining part
1396 is organized as follows: The first column is the frequency with the
1397 unit of MHz. Then the IV properties of each electrode. Each
1398 electrode takes six columns, the real, image and amplitude of
1399 potential, followed by three columns for current.
1401 Note: the electrode potential may not equal to the application
1402 voltage if lumped elements take place.
1404 \newpage
1405 \section{File I/O}
1406 \subsection{Introduction}
1407 The \textbf{IMPORT} and \textbf{EXPORT} statements are used to read
1408 and write solutions from a CGNS or TIF file. A model CGNS file only
1409 contains semiconductor device structure while a core CGNS file has
1410 previous solution data besides device structure. The TIF(Technology
1411 Interchange Format) file is an ASCII file used by Synopsys Medici
1412 software which equivalence to core CGNS file. We offer a small code
1413 TIFTool which can open TIF file, view the mesh and solution data and
1414 convert it to CGNS file.
1416 \subsection{IMPORT and EXPORT}
1417 \subsubsection*{Syntax}
1418 \begin{verbatim}
1419 IMPORT CoreFile=<s> | ModelFile=<s>
1420 EXPORT CoreFile=<s> [ AscFile=<s> ] [ VTKFile=<s> ]
1421 \end{verbatim}
1423 \small \noindent\begin{longtable}{ccccp{7cm}}
1424 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1425 CoreFile & string & - & - & Write/read device structure and solution data to a CGNS file.\\
1426 ModelFile & string & - & - & Read device structure from a CGNS file which probably crated by SGframework
1427 or converted from Medici TIF file by TIFTool.\\
1428 AscFile & string & - & - & Write device structure and solution data to a TIF file.
1429 At present, we can't make our TIF file be accepted by Medici.\\
1430 VTKFile & string & - & - & Write mesh and solution data to VTK file.\\
1431 \end{longtable}
1432 \normalsize
1434 \subsubsection*{Example}
1435 \begin{verbatim}
1436 EXPORT CoreFile=init.cgns AscFile=init.tif
1437 IMPORT ModelFile=pn.cgns
1438 IMPORT CoreFile=pn.cgns
1439 \end{verbatim}
1441 \subsubsection*{Hint}
1442 VTK file is intended to be used for post process. User can use
1443 Paraview\footnote{\href{http://www.paraview.org}{http://www.paraview.org}},
1444 MayaVi or
1445 VisIt\footnote{\href{http://www.llnl.gov/visit}{http://www.llnl.gov/visit}}
1446 to open and view VTK file. Further more, CGNS file is also supported
1447 by VisIt.
1450 \newpage
1451 \section{Post Process}
1452 \subsection{Plot}
1453 The \textbf{PLOT} statement initializes the graphical display device for two and three dimensional
1454 plots of device characteristics(3D) and device meshes(2D).
1456 \subsubsection*{Syntax}
1457 \begin{verbatim}
1458 PlotMesh [TIFF.Out=<s>]
1459 Plot Variable=Mesh [PS.Out=<s>] [TIFF.Out=<s>]
1460 [Resolution=(RES.Low|RES.Middle|RES.High)]
1461 Plot Variable=(Na|Nd|ElecDensity|HoleDensity|Potential|EFieldX|EFieldy|Temperature)
1462 [ Measure=(Linear|SignedLog) ]
1463 [ PS.Out=<s> ] [ TIFF.Out=<s> ] [ Resolution=(RES.Low|RES.Middle|RES.High) ]
1464 [ AzAngle=<n> ] [ ElAngle=<n> ] [ Style=(Scale|Color|GrayLevel) ]
1465 \end{verbatim}
1467 \small
1468 \noindent\begin{longtable}{ccccp{7cm}}
1469 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1470 Variable & string & - & - & This parameter specifies plot context.\\
1471 PS.OUT & string & - & - & Specifies the postscript file name. The plot window will be saved to it.\\
1472 TIFF.OUT & string & - & - & Specifies the TIFF file name. The plot window will be saved to it.
1473 Only available for X11 system. \\
1474 Resolution & string & RES.Middle & - & The resolution of plot window.\\
1475 Measure & string & Linear & & Specifies the data axis to be linear or logarithmic. \\
1476 AzAngle & number & 240 & $\mathrm{degree}$ & The initial azimuthal rotation angle, 0$\leq$\textbf{AzAngle}<360. \\
1477 ElAngle & number & 60 & $\mathrm{degree}$ & The initial elevation rotation angle. 0$\leq$\textbf{ElAngle}<70.\\
1478 Style & string & Color & - & The plot style. \\
1479 \end{longtable}
1480 \normalsize
1482 \subsubsection*{Example}
1483 \begin{verbatim}
1484 PLOT Variable=Mesh PS.OUT=mesh.ps
1485 PLOT Variable=Nd Resolution=RES.High AzAngle=240 ElAngle=40 Style=Scale
1486 PLOT Variable=Potential Resolution=RES.Middle TIFF.out=potential.tiff\
1487 AzAngle=240 ElAngle=40 Style=Color
1488 \end{verbatim}
1490 \subsubsection*{Hint}
1491 \textbf{PlotMesh} is an interactive GUI for mesh display only exist for X11 system.
1493 The \textbf{PLOT} command can be used on both X11 and Win32 systems.
1494 The 3D plot can be rotated by mouse and terminated by ESC key press.
1495 If PS.OUT or TIFF.OUT argument is specified, the latest window image will be saved.
1498 \newpage
1499 \subsection{Probe}
1500 The \textbf{PROBE} statement is used to extract field data along a
1501 user defined segment. The segment can be a boundary or a segment
1502 pre-defined in the region. For the in-region segment, GSS will set
1503 it as Neumann boundary with no heat flux which takes not effect to
1504 simulation result.
1506 \subsubsection*{Syntax}
1507 \begin{verbatim}
1508 Probe Variable=(Na|Nd|ElecDensity|HoleDensity|Potential|EFieldX|EFieldy|Temperature)
1509 Region=<s> Segment=<s> ProbeFile=<s> Append=<b>
1510 \end{verbatim}
1512 \small \noindent\begin{longtable}{ccccp{9cm}}
1513 \textbf{parameter} & \textbf{type} & \textbf{default} & \textbf{unit} & \textbf{description} \\
1514 Variable & string & - & - & This parameter specifies probe context.\\
1515 Region & string & - & - & Specifies the region name which the segment belongs to.\\
1516 Segment & string & - & - & Specifies the segment name for probing the data.\\
1517 ProbeFile & string & - & - & The file name for recording the data.\\
1518 Append & bool &OFF & - & Specifies the data should be appended to the file. \\
1519 \end{longtable}
1520 \normalsize
1522 \subsubsection*{Example}
1523 \begin{verbatim}
1524 PROBE Variable=Nd Region=Si Segment=PB1 ProbeFile=Nd.txt Append=Off
1525 PROBE Variable=Potential Region=Si Segment=PB2 ProbeFile=P.txt Append=On
1526 \end{verbatim}
1528 \subsubsection*{Hint}
1529 Each \textbf{PROBE} statement records one variable for the whole segment to a user-specified file.
1530 GSS pushes \textbf{PROBE} statement as the sequence of input text into a stack until a
1531 \textbf{SOLVE} statement is met. These \textbf{PROBE} statements record the data during solve process.
1532 After that, GSS will clear the stack. In short, \textbf{PROBE} only operates for next \textbf{SOLVE} process.
1534 The file format for probe is show as follows:
1535 \begin{verbatim}
1536 #region_name segment_name
1537 #node_num X Y
1538 # 0 x0 y0
1539 # 1 x1 y1
1540 # ..............
1541 #SOLVE_TYPE variable_name
1542 [V/I/Time] v0 v1 v2 ...
1543 .....................................
1544 \end{verbatim}
1545 The head of file is the segment information, including region name,
1546 segment name, total node number and the location of each node. The
1547 last line of head shows the solve type and variable name. The solve
1548 type can be "EQUILIBRIUM", "STEADYSTATE", "DCSWEEP\_VSCAN",
1549 "DCSWEEP\_ISCAN" and "TRANSIENT". For the last three types, GSS will
1550 record V/I/Time in the first column, respectively. The variable
1551 value for all the nodes are listed in the same line.
1553 %\begin{figure}[ht]
1554 %\centering
1555 %\includegraphics[scale=0.2]{plot1.png}
1556 %\caption{2D and 3D plot.}
1557 %\end{figure}
1560 \newpage
1561 \section{Convergence Problem}
1562 The core arithmetic of GSS is solving the large scale nonlinear
1563 equations arisen from semiconductor drift-diffusion model by
1564 Newton's Iterative method. There are three factors which affect the
1565 convergence of nonlinear solvers: the initial value, the Jacobian
1566 Matrix and the inner linear solver. One must ensure that the initial
1567 value is sufficiently near the real solution, the Jacobian Matrix is
1568 exact or at least nearly exact and the inner linear solver can give
1569 a suitable solution. When one of the three demands is not satisfied,
1570 the convergence problem may raise. However, several skills can help
1571 convergence.
1573 If the first time running failed due to bad initial value, one can
1574 employ a transient solver to do a time evolved solution. Set time
1575 step to a few ps, and the solution on every step may get
1576 convergence. After some certain steps, the initial shock is damped
1577 and physical variables are forced to get close to real quantities.
1578 Then the steady-state solver may work and you can get the
1579 equilibrium solution.
1581 Since version 0.46, GSS use automatically differentiation to
1582 calculate Jacobian matrix. In most situations, author can guarantee
1583 that Jacobian matrix is exact, except some rigorous situations when
1584 round-off error is un-neglectable. However, GSS offers alternative
1585 choice, the Matrix-Free method to set Jacobian Matrix by finite
1586 difference approximation. This choice can be invoked with the
1587 command line option \textit{-snes\_mf\_operator}. The Matrix-Free
1588 method works well when impact ionization takes place, but it runs
1589 much slower than original method.
1591 Sometimes the LineSearch method may failed due to bad search
1592 direction. If one get divergence message during DC sweep and
1593 transient simulation when using LineSearch method, one can try
1594 TrustRegion or basic Newton method.
1596 Newton damping is a powerful tool to help convergence. It can work
1597 with LineSearch and Basic Newton solvers. GSS has two damping
1598 method, BankRose and Potential. Usually, damping Potential is better
1599 than BankRose.
1601 The most difficult problem is the failure of inner linear solver.
1602 When the Jacobian Matrix is singular, problems may happen.
1603 Especially one sets electrodes with lumped resistor or current
1604 sources. If one get a convergence failed message for these
1605 situations, please check the problem by adding command line option
1606 \textit{-ksp\_monitor} to exam the convergence history. For more
1607 information, one can use \textit{-ksp\_singmonitor} to get the
1608 condition number of matrix (this works only with GMRES method).
1610 The author suggests some method to overcome the problem. First, one
1611 may improve the condition number by enlarging the DopingScale, but
1612 this will increase numerical error. Second, one should carefully
1613 choose the linear solver.
1615 Here is the introduction of the main linear solvers GSS can use.
1616 GMRES is a robust method for non-symmetric matrices. It must retain
1617 all the previous vectors during iterative. The implemented code
1618 often uses a "restart" method to avoid large memory requirement.
1619 Sometimes the solution breaks when restart too often. One can
1620 increase this restart steps by \textit{-ksp\_gmres\_restart <n>} (n
1621 is the restart steps, default 150) BiCG and CGS often have irregular
1622 convergence behavior. The irregular result may get things worse.
1623 Bi-CGSTAB is the improved method to BiCG and CGS, which avoids the
1624 irregular convergence patterns of BiCG/CGS while maintaining about
1625 the same speed of convergence. TFQMR avoids the irregular
1626 convergence behavior of BiCG. Also it avoids some breakdown
1627 situations of BiCG. When BiCG temporarily stagnates or diverges,
1628 TFQMR may still works. At last, LU factorization is the basic method
1629 for solving linear systems. Besides build-in LU solver, PETSC can be
1630 compiled with external LU factorization package such as SuperLU and
1631 UMFPACK. This method works slow but usually more stable than
1632 iteration solver.
1634 In conclusion, LU factorization is recommend for conquering the
1635 singular problem. But user can try GMRES with large restart steps,
1636 Bi-CGSTAB and TFQMR methods for better efficiency.
1639 \section{Memory and CPU requirement}
1640 Thanks to C++'s dynamic memory manege system, GSS can solve problems
1641 with any scale (at least, theoretically). The memory requirement is
1642 not a serious bottleneck. A very large problem which contains 100K
1643 nodes only requires about 300MB memory. This requirement is easy to
1644 be satisfied with modern computers.
1646 Because the core arithmetic of GSS is solving nonlinear equations,
1647 which involves lots of solutions of linear system, the CPU time is
1648 related with linear solvers, which is $O(n^3)$ with LU solver and
1649 $O(n^2)$ with krylov iterative solver, in which $n$ is the problem
1650 scale.
1652 Fig\ref{CPUTime1} shows the CPU time vs node number with a PN diode
1653 simulation by BCGS method on a Xeon 3.6GHz workstation. The time is
1654 approximate the square of problem scale. It only requires serial
1655 seconds when total node number less than 5000. But CPU time raises
1656 to some minutes when node's number reach to 100K.
1658 \begin{figure}[tbh]
1659 \centering
1660 \includegraphics[scale=0.2]{CPU.png}
1661 \caption{CPU time vs problem scale} \label{CPUTime1}
1662 \end{figure}
1664 \appendix
1665 \begingroup
1666 \makeatletter
1667 \let\chapter=\section
1668 % subsections goes into bookmarks but not toc
1669 \hypersetup{bookmarksopenlevel=1}
1670 \addtocontents{toc}{\protect\setcounter{tocdepth}{1}}
1671 % The \section command acts as \subsection.
1672 % Additionally the title is converted to lowercase except
1673 % for the first letter.
1674 \def\section{%
1675 \let\section\lc@subsection
1676 \lc@subsection
1678 \def\lc@subsection{%
1679 \@ifstar{\def\mystar{*}\lc@sec}%
1680 {\let\mystar\@empty\lc@sec}%
1682 \def\lc@sec#1{%
1683 \lc@@sec#1\@nil
1685 \def\lc@@sec#1#2\@nil{%
1686 \begingroup
1687 \def\a{#1}%
1688 \lowercase{%
1689 \edef\x{\endgroup
1690 \noexpand\subsection\mystar{\a#2}%
1695 \include{fdl}
1696 \endgroup
1698 \end{document}