next up previous contents index
Next: Continuation and the Parameter Up: Equation Solution Previous: Overview.

Discretization, Numerical Quadrature, and Sparse Matrix Storage.

Let tex2html_wrap_inline3828 denote a triangulation of tex2html_wrap_inline3668 and let tex2html_wrap_inline6966 be the space of tex2html_wrap_inline3732 piecewise linear polynomials associated with tex2html_wrap_inline3828 . PLTMG usually represents such a piecewise polynomial using the standard nodal basis; a function can then be specified by giving its values at the vertices. Let tex2html_wrap_inline6974 be the subspace of tex2html_wrap_inline6966 whose elements are zero at the knots of tex2html_wrap_inline3828 lying on tex2html_wrap_inline6980 (the portion of the boundary with Dirichlet boundary conditions), and which satisfy the continuity condtions on tex2html_wrap_inline6982 . Similarly, let tex2html_wrap_inline6984 be the affine space of tex2html_wrap_inline6966 whose elements satisfy the Dirichlet boundary conditions at knots of tex2html_wrap_inline3828 lying on tex2html_wrap_inline6980 and the continuity conditions on tex2html_wrap_inline6982 . The discrete equations solved by PLTMG  are: find tex2html_wrap_inline6998 , and tex2html_wrap_inline4952 such that

  equation1766

where

  eqnarray1773

If the Jacobian is not self-adjoint, some upwinding terms based on the Scharfetter-Gummel discretization scheme [7] are added.

When the continuation process is used, we use a normalization    equation of the form:

  equation1795

The scalar tex2html_wrap_inline5194 is the steplength.  PLTMG uses two different normalization equations [10, 29]. Most frequently, we use:

  equation1805

Here tex2html_wrap_inline5190 is a parameter selected by PLTMG; by choosing tex2html_wrap_inline5190 and tex2html_wrap_inline5194 properly, it is possible to achieve target values in either tex2html_wrap_inline3726 or tex2html_wrap_inline3688 .  The vector tex2html_wrap_inline7028 is the current solution point and tex2html_wrap_inline7030 the current unit tangent vector. The scalar tex2html_wrap_inline7032 is defined formally using the chain rule for differentiation: 

displaymath6960

The other normalization used in PLTMG is based on the pseudo-arclength method, characterized by:

  equation1845

The normalization (gif) is used when (gif) is not well defined (e.g., if tex2html_wrap_inline7038 ). For reasonable choices of tex2html_wrap_inline3726 , these will be isolated points on the solution manifold, such as symmetry breaking bifurcation points. In such instances, (gif) is used on a temporary basis until (gif) is defined again.

There are only seven relatively short subroutines     (ELEASM, ELENBC, ELEDBC, ELEUN, ELEUNP, ELEMTX, and ELEBDI) that have knowledge of the discretization procedure and the form of the differential equation (gif)-(gif) and the functional tex2html_wrap_inline3726 in (gif). ELEASM is used for assembling stiffness matrices, right hand sides, and the contribution to tex2html_wrap_inline3726 from P1XY for a single element. ELEMTX assembles inexpensive element stiffness matrices used in computing the ordering of the vertices for the hierarchical basis iteration. ELENBC computes contributions to the natural boundary conditions from a single element edge. ELEDBC evaluates Dirichlet boundary conditions and initial guesses along a single element edge. ELEUN computes an integral on a single interior element edge that is required for the a posteriori error estimates. ELEUNP does a similar calculation for linked edges. ELEBDI computes the contribution to tex2html_wrap_inline3726 from P2XY for a single edge.

These routines are written to accept general quadrature rules. The details of the rule (weights and abscissas) are read from tables (that are initialized in DATA statements) making it easy to change the formulas. Currently ELEASM uses a 3-point rule and ELEMTX a 1-point rule. ELENBC, ELEUN, ELEUNP and ELEBDI use 2-point-Gauss rules. The organization within these routines favors clarity at the expense of efficiency, making it reasonably simple to change some aspects of the problem class and discretization.

Global stiffness matrices  are stored in the sparse matrix format described in [18]. All nonzeros are stored in a linear array; first the diagonal entries are stored, followed by the upper triangular entries, stored column by column. If the matrix is nonsymmetric, this is followed by the lower triangular entries, stored row by row. Symmetric and nonsymmetric storage is governed by the parameter ISPD; ISPD=1 designates the symmetric storage option, while ISPD=0 indicates nonsymmetric storage.


next up previous contents index
Next: Continuation and the Parameter Up: Equation Solution Previous: Overview.

Randolph E. Bank
Fri Apr 4 12:02:05 PST 1997