A.3 Updating Data of a Wafer

After a simulation is finished the Wafer object must be updated with the results prior to dumping it to a file. Depending on the process-step at hand there are different approaches to achieve this update:

  1. Topography and topology did not change. This is the simplest possible case. It is used for diffusion and device simulations without grid refinement or grid relaxation. Only the values of the attributes were changed during the simulation. Each existing attribute is updated point-wise. A callback object must be provided by the simulator. This object returns the attribute value for each given point. The WAFER-STATE-SERVER uses this callback object to retrieve the attribute value for all points of the attribute to update. The callback object must be derived from the interface AttributeUpdater (defined in attr.hh) and implement the method
    AttributeUpdater::getVal. Fig. A.5 and Fig. A.6 depict the declarations and instantiation of the necessary classes, objects, and methods and a code snippet to illustrate this case. After all attributes were updated properly, the WAFER-STATE-SERVER removes attributes that were invalidated during the simulation. (c. f. Section 3.1).

  2. Surface of Wafer was not changed. Points were inserted along edges. This is the case for diffusion simulations with adaptive grid refinement turned on during the simulation. In this case a new locater (grid) must be instantiated for each segment that was treated by the simulator. The simulator must loop over all attributes of the segment and instantiate a new quantity that holds the new values. The old locater and quantity of the Wafer must than be replaced by the new ones. Fig. A.7 depicts that case.

  3. Topology was changed. Surface of Wafer was not changed. This is the case for diffusion simulations with the grid relaxation mechanism turned on. Grid relaxation tries to move the points to increase the mesh quality. No extra points are inserted during the simulation. As with (2) for each segment and attribute that was queried by the simulator a new locater and quantity must be instantiated respectively. Additionally, values from attributes that were not queried by the simulator must be interpolated from the old grid to the new (relaxed) one. The method Quantity::replaceLocater takes care of interpolating the values of a quantity (c. f. Fig. A.8).

  4. Topography was changed. This is by far the most demanding update operation. It occurs in all kind of etching, deposition or oxidation simulations. The existing segments of the Wafer must be merged with the surface generated by the simulator. An operation that merges the surface of the input Wafer with the surface that results from the simulation is necessary (c. f.  Section 2.2.2). The WAFER-STATE-SERVER uses the GNU TRIANGULATED SURFACES library (GTS) [113] to perform the geometrical operations. Both, the existing and the new surface are copied into the GTS data-structures. The desired boolean operation is performed and the result is copied back to the Wafer.

Figure A.5: Updating points of a Wafer attribute. The class Grid3DAttributeUpdater is used in the FEDOS simulator to update attributes from diffusion simulations with grid refinement turned off. The class holds some FEDOS internal information (wpt2pt3d, segInd, offset) to find the attribute's value at any given point.
\begin{figure}\hrulefill
{\footnotesize\begin{verbatim}class Grid3DAttributeU...
... Point_h&) const;
};\end{verbatim}}
\vspace*{-0.3cm}\hrulefill
\par\end{figure}

Figure A.6: An object of type Grid3DAttributeUpdater is instantiated and passed to the update method of the attribute class. The WAFER-STATE-SERVER calls the method getVal of this object to retrieve all attribute values.
\begin{figure}\hrulefill
{\footnotesize\begin{verbatim}void Quantity::update(...
...tr->update(grup);\end{verbatim}}
\vspace*{-0.3cm}\hrulefill
\par\par\end{figure}

Figure A.7: Updating a refined Wafer. The above code sequence must be applied for each segment and attribute retrieved from the Wafer. The function castToQuantity is used to cast the abstract class Attr to the concrete class Quantity. The functions fillWafPoints and buildLocater are examples from the FEDOS simulator (c. .f. Section 4.2). locaters, a map to translate FEDOS points into Wafer Points and an attribute index. These data are are then used in the method Segment::replaceQuantity to create a new quantity on the given locater. The index wafAttInd is used internally to uniquely identify a quantity.
\begin{figure}\hrulefill
{\footnotesize\begin{verbatim}Segment_h Wafer::getSe...
...wp, wafAttInd);
}
}\end{verbatim}}
\vspace*{-0.3cm}\hrulefill
\par\end{figure}

Figure A.8: Updating a deformed Wafer. As with refined mesh update, this code sequence must be applied for each segment and attribute queried by the simulator. The only difference to the refined mesh update is the invocation of Quantity::replaceLocater instead of Segment::replaceQuantity.
\begin{figure}\hrulefill
{\footnotesize\begin{verbatim}Segment_h seg;for (...
...p2wp, loc);
}
}\end{verbatim}}
\vspace*{-0.3cm}\hrulefill
\par\par\end{figure}

2003-03-27