6.2

The *Algorithm Library* is used to equip the *Levenberg-Marquardt* Optimizer *mlmmin*
[39] with an interface to the *MDL* language to define
analytical functions whose parameters will be fitted to match experimental
data sets contained in results from *TCAD* simulations.
For that purpose a *TCAD* engineer has to provide an *IPL* input deck which
defines optimization parameter names, their starting values, and optionally
their allowed numerical ranges. Furthermore the names of variables which
are associated with complying data columns and the file names of an *MDL*
file and the data set have to be defined. The therein provided parameters
are forwarded to the ` Interface` of

Example 6.3 and 6.4
demonstrate the application of this tool for automatically extracting the
parameters
(`Is`) and
(`Gmin`) of the
discrete large signal model of a diode (6.1)
from a parameter set `diode.dat` containing pairs of
(`Id`) and
(`Vd`) values obtained by device
simulations with *MINIMOS-NT*. The `parameters` section of the *IPL*
input deck (Example 6.3) introduces the desired
parameters and provides their start values for the fitting process. The
data structure of the `diode.ipd` file is described in the
`dataset` section to contain a column for
values and a second
one for the results of the function to be fitted to these data values.

The fit function (6.1) defined within
`diode.mdl` (Example 6.4) uses local
` Parameters` (

parameters { // define optimization parameters

Is { nom=1e-14.;}

Gmin { nom=1e20; }

}

dataset { // values conatained in the data set

filename="diode.dat";

variables { Vd {}; } // {} defaults to "result"

}

model {

file="diode.mdl";

}

Example 6.3:IPLfile for theLevenberg-Marquardtoptimizer

fit_function = DiodeFitModel;InstanceDiodeFitModel : FunctionModel {NewModel

{Local

// assume T=300 [K]

<double> qdkT = 1.60218e-19 / 1.38066e-23 / 300.0;Parameter

<double> Is;Parameter

<double> Gmin;Parameter

<double> Vd;Parameter

}

{evaluate

Is = :Ue["Is"];

Vd = :ue["Vd"];

Gmin = :ue["Gmin"];

(Vd >= (-5*qdkT)) {if

:result = Is * exp ( Vd*qdkt ) + Vd*Gmin;

} else {

:result = -Is + Vd*Gmin;

}

}

}

Example 6.4:MDLfile for theLevenberg-Marquardtoptimizer

It should also be mentioned that the implementation of the *mlmmin* optimizer
serves as an example for the usage of the multi language binding mechanisms
of the *Algorithm Library* in conjunction with the *VMAKE* **T**ool
**A**bstraction **C**oncept (*TAC*).
*mlmmin* consists of a kernel written in *C*, optimization algorithms
contained in a *FORTRAN* library, an user interface implemented by
utilizing the ``Vienna *LISP*'' interpreter and the *Algorithm Library* extension
implemented in *C++* which exchange data via automatically generated
*TAC* language bindings.

1999-11-14