PROPHET Execution Path (Device Modeling)
The following describes the major elements in PROPHET execution for
electronic device simulation. All file paths are specified relative to
the main PROPHET directory. Functions referred to below can be found by
searching the TAGS file in the PROPHET root directory.
Main/main.c : main():
-
parse command line
-
set up the run environment
-
read database file: global_dbinit() -> gdbinit() -$gt; do_ndbparse() -$gt; ndbparse()
-
Read source file: for example, do_batch() -$gt; do_source() -$gt; process()
Main/do_source.c : process():
-
global_prepass1(): add user input to database
-
pcd_input_fd: read PROPHET defaults from database?
-
PASS 1: Verification - check user input for validity
-
PASS 2: Execution - [For each "card" of user input (system, grid, bias,
...), run the associated module's function]
-
remove user input from internal database
Mod/Bias/biascmd.c : biascmd():
-
initial simulation:
-
make_diff_list(): Used for diffusion simulations
-
init_bias_table(): Make list of electrical contacts to device
-
install_zero_bias(): Set all applied biases to zero
-
initial_psi(): Initialize potential field (psi) to charge neutral value
-
later simulations:
-
bias_list(): Determine bias to be applied, bias increment, and number of
bias steps
-
install_bias(): Apply biases to electrode(s)
-
Solve system for either:
-
Steady-state: steady_solve()
-
Transient: steptime()
PDE/Casmbly/steps.c : steady_solve():
-
solcontrol(): Set up globalsolstruc (description of system)
-
diff_setup(): set up extra stuff?
-
outerGS(): set up and do matrix computation to solve PDE system
PDE/Casmbly/loops.c : outerGS():
-
innerNewton(): Iterative solution of non-linear system
PDE/Casmbly/loops.c : innerNewton(): Most of the matrix work done
here
-
assemble():
-
accumulate_bc():
-
clear_dbc()
-
c2bls(): Matrix solve routine
-
update_vars():
PDE/Casmbly/c2bls.F (or petsc2.F or petsc2.c):
-
Here PROPHET calls PETSc 1.2 (or PETSc 2.0) to do the actual
matrix computations. PETSc can be compiled for parallel (MPI) computation