Block { while = updateNorm > finalNorm && rhsNorm > rhsFinalNorm; }Another possibility is to terminate a block when a maximum block iteration counter is exceeded as is the case, e.g., for the Gummel scheme [27] where each iteration block is solved only once.
Block { while = iterationCount < 1; }
The keywords updateNorm and rhsNorm are inherited from the Extern section, while finalNorm and rhsFinalNorm stem from IterateConfig. As updateNorm and rhsNorm contain all quantities of the solution vector their use might be problematic. Although the quantities are scaled to be approximately of the same order the range of possible values is still different. It might therefore be useful for special applications to refine the termination criterion by using only parts of the solution vector. These parts can be accessed through one of the following functions:
DD_Gummel { Ele : ~Iterate.Blocks.DDBlock { ignoreQuantities = "Potential,*Hole*"; while = iterationCount < 1; } Hol : Ele { ignoreQuantities = "Potential,*Electron*"; } Pot : Ele { ignoreQuantities = "*Electron*,*Hole*"; } while = updateNorm2("*", block = "Ele") + updateNorm2("*", block = "Hol") + updateNorm2("*", block = "Pot") > finalNorm; }In the first block (Ele) only the electron continuity equation is solved. This is done by using all models of the DDBlock (keyword models not locally overwritten) but ignoring the potential and all quantity classes matching *Hole* which is true for HoleConcentration and BoundaryHoleCurrent. The latter must be ignored in order to get proper current components as the currents are zero when not solving the continuity equations.
The other blocks solve the hole continuity equation and Poissons equation and for the termination criterion a simple algebraic sum of the block-norms is used.