Numerical Differentiation

PIC

Numerical Differentiation

Department of Aeronautics, Imperial College London, UKScientific Computing and Imaging Institute, University of Utah, USA August 23, 2021

Nektar++ Tutorial

1 Introduction xGoals 2 Differentiation x2.1 Legendre Formulae 3 Computational Exercises x3.1 One dimensional differentiation in a standard segment x3.2 Two-dimensional differentiation in a standard and local region 4 Summary

1 Introduction

[next] [prev] [prev-tail] [tail] [up] Chapterx1Introduction Welcome to the tutorial on the fundamentals of the Nektar++ framework where we will look at how to perform Differentiation using the Nektar++ LibUtilities library. If you have not already downloaded and installed Nektar++, please do so by visiting http://www.nektar.info, where you can also find the User-Guide with the instructions on how to install the library. This tutorial requires:

Nektar++ compiled libraries and include files compiled from source so additional code can be compiled with the framework libraries

Goals After completing this tutorial, you should be familiar with:

The concept of differentiation using classical Gauss and Gauss-Lobatto rules in a standard interval ξ ∈ [−1, 1]; Using the Nektar++ programming concepts of a NekMatrix, an Array, a PointsKey and the PointsManager to generate Gaussian quadrature zeros and differentiation matrices;

Differentiating in the standard segment (ξ ∈ [−1, 1]) and quadrilateral region (ξ ∈ [−1, 1] × [−1, 1]);

The mathematical concept of mapping a general quadrilateral region to the standard region, evaluating the jacobian of this mapping and using this to evaluate a derivative in a general straight sided quadrilateral region.

Task: 1.1 Prepare for the tutorial. Make sure that you have:

Installed and tested Nektar++ v5.0.3 compiled from source. We will refer to the directory where you installed Nektar++ as $NEKDIST for the remainder of the tutorial.

The tutorial folder also contains:

CMakeList.txt

LocDifferentiation2D.cpp

StdDifferentiation1D.cpp

StdDifferentiation2D.cpp

Make a directory of your chosing, for example tutorial, and download the tutorial files from fundamentals-differentiation.tar.gz into this directory.

Unpack the tutorial files by using

 tar -xzvf fundamentals-differentiation.tar.gz

to produce a directory fundamentals-differentiation with subdirectories called

tutorial and complete.

Change to the

fundamentals-differentiation/tutorial

directory and configure the tutorial examples for compilation by typing the command

 cmake -DCMAKE_PREFIX_PATH=$NEKDIST/build .

You should now see a file called Makefile in this directory.

Change to the

$NEKDIST/tutorial/fundamentals-differentiation/complete

directory and configure the completed version of the tutorial examples for compilation by again typing the command

 cmake -DCMAKE_PREFIX_PATH=$NEKDIST/build

You should now see a file called Makefile in this directory.

[next] [prev] [prev-tail] [front] [up] 2 Differentiation

[next] [prev] [prev-tail] [tail] [up] Chapterx2Differentiation Assuming a polynomial approximation of the form:

. u^{δ}(x) = ∑_{p=0}^{P} û_{p}ϕ_{p}(χ^{−1} ) = ∑_{p=0}^{P} û_{p}ϕ_{p}(ξ),

where χ(ξ) is the mapping from the standard region ξ ∈ Ω^{s} to the region containing x in the interval [a, b], we can differentiate u(x) using the chain rule to obtain

. \frac{du^{δ}(ξ)}{dx} = \frac{du^{δ}(ξ)}{dξ} \frac{dξ}{dx} = ∑_{p=0}^{P} û_{p} \frac{dϕ_{p}(ξ)}{dξ} \frac{dξ}{dx}.

The differentiation of u^{δ}(x) is therefore dependent on evaluating dϕ_{p}(ξ)/dξ and \frac{dξ}{dx}. In this section we shall consider the case where ϕ_{p}(ξ) is the Lagrange polynomial h_{p}(ξ) and discuss how to evaluate dϕ_{p}(ξ)/dξ. If χ(ξ) is an isoparametric mapping this technique can also be used to evaluate \frac{dχ}{dξ} = [ \frac{dξ}{dx}] ^{−1} . Differentiation of this form is often referred to as differentiation in physical space or collocation differentiation. If we assume that u^{δ}(ξ) is a polynomial of order equal to or less than P [that is, u^{δ}(ξ) ∈ P_{P}([−1, 1])], then it can be exactly expressed in terms of Lagrange polynomials h_{i}(ξ) through a set of q nodal points ξ_{i} (0 ≤ i ≤ q − 1) as

. u(ξ) = ∑_{i=0}^{q−1} u(ξ_{i})h_{i}(ξ), h_{i}(ξ) = \frac{Π_{j=0,j≠i}^{q−1} (ξ − ξ_{j})}{Π_{j=0,j≠i}^{q−1} (ξ_{i} − ξ_{j})}

where q ≥ P + 1. Therefore the derivative of u(ξ) can be represented as

. \frac{du(ξ)}{dξ} = ∑_{i=0}^{q−1} u(ξ_{i})\frac{d}{dξ}h_{i}(ξ).

Typically, we only require the derivative at the nodal points ξ_{i} which is given by

. \frac{du(ξ)}{dξ}|_{ξ=ξ_{i}} = ∑_{j=0}^{q−1} d_{ij} u(ξ_{j}),

where

. d_{ij} = \frac{dh_{j}(ξ)}{dξ}|_{ξ=ξ_{i}} .

An alternative representation of the Lagrange polynomial is

.  h_{i}(ξ) = \frac{g_{q}(ξ)}{g′_{q}(ξ_{i})(ξ − ξ_{i})},  g_{q}(ξ) = ∏_{j=0}^{q−1} (ξ − ξ_{j}).

Taking the derivative of h_{i}(ξ) we obtain

. \frac{dh_{i}(ξ)}{dξ} = \frac{g′_{q}(ξ)(ξ − ξ_{i}) − g_{q}(ξ)}{g′_{q}(ξ_{i})(ξ − ξ_{i})^{2}} .

Finally, noting that because numerator and denominator of this expression are zero as ξ → ξ_{i}, and because P_{q}(ξ_{i}) = 0 by definition,

.  lim_{ξ→ξ_{i}} \frac{dh_{i}(ξ)}{dξ} = lim_{ξ→ξ_{i}} \frac{g′′_{q}(ξ)}{2g′_{q}(ξ)} = \frac{g′′_{q}(ξ_{i})}{2g′_{q}(ξ_{i})}

so we can write d_{ij} as

. d_{ij} = \{ \begin{matrix}\frac{g′_{q}(ξ_{i})}{g′_{q}(ξ_{j})} \frac{1}{(ξ_{i} − ξ_{j})} & i ≠ j, \\ \frac{g′′_{q}(ξ_{i})}{2g′_{q}(ξ_{i})} & i = j. \end{matrix}

(2.1)

Equation (2.1) is the general representation of the derivative of the Lagrange polynomials evaluated at the nodal points ξ_{i} (0 ≤ i ≤ q − 1). To proceed further we need to know specific information about the nodal points ξ_{i} which will allow us to deduce alternative forms of g′_{q}(ξ_{i}) and g′′_{q}(ξ_{i}).

2.1 Legendre Formulae

The most common differentiation matrices d_{ij} are those corresponding to the Gauss-Legendre quadrature points. In this section we illustrate the final form of the differential matrices that correspond to the use of Gauss-Legendre, Gauss-Radau-Legendre, and Gauss-Lobatto-Legendre quadrature points. Denoting by ξ_{i,P} ^{α,β} the P zeros of the Jacobi polynomial P_{P}^{α,β} (ξ) such that . P_{P}^{α,β} (ξ_{i,P}^{α,β} ) = 0 i = 0, 1, …, P −1, the derivative matrix d_{ij} used to evaluate \frac{du(ξ)}{dξ} at ξ_{i}, that is,

. \frac{du(ξ)}{dξ}|_{ξ=ξ_{i}} = ∑_{j=0}^{q−1} d_{ij} u(ξ_{j}),

is defined as:

(1) Gauss-Legendre . ξ_{i} = ξ_{i,q}^{0,0}

. d_{ij} = \{ \begin{matrix}\frac{L′_{q}(ξ_{i})}{L′_{q}(ξ_{j})(ξ_{i} − ξ_{j})} & i ≠ j, 0 ≤ i, j ≤ q − 1 \\ \frac{ξ_{i}}{(1 − ξ_{i}^{2})} & i = j \end{matrix}

(2) Gauss-Radau-Legendre

. ξ_{i} = \{ \begin{matrix}−1 & i = 0 \\ ξ_{i−1,q−1}^{0,1} & i = 1, …, q − 1 \end{matrix}

. d_{ij} = \{ \begin{matrix}\frac{−(q − 1)(q + 1)}{4} & i = j = 0 \\ \frac{L_{q−1} (ξ_{i})}{L_{q−1} (ξ_{j})} \frac{(1 − ξ_{j})}{(1 − ξ_{i})} \frac{1}{(ξ_{i} − ξ_{j})} & i ≠ j, 0 ≤ i, j ≤ q − 1 \\ \frac{1}{2(1 − ξ_{i})} & 1 ≤ i = j ≤ q − 1 \end{matrix}

(3) Gauss-Lobatto-Legendre

. ξ_{i} = \{ \begin{matrix}−1 & i = 0 \\ ξ_{i−1,q−2}^{1,1} & i = 1, …, q − 2 \\ 1 & i = q − 1 \end{matrix}

. d_{ij} = \{ \begin{matrix}\frac{−q(q − 1)}{4} & i = j = 0 \\ \frac{L_{q−1} (ξ_{i})}{L_{q−1} (ξ_{j})} \frac{1}{(ξ_{i} − ξ_{j})} & i ≠ j, 0 ≤ i, j ≤ q − 1 \\ 0 & 1 ≤ i = j ≤ q − 2 \\ \frac{q(q − 1)}{4} & i = j = q − 1 \end{matrix}

In a similar way to the quadrature formulae the construction of the differentiation matrices require the quadrature zeros to be determined numerically. Having determined the zeros, the components of the differentiation matrix can be evaluated directly from the above formulae by generating the Legendre polynomial from the recursion relationship.

[next] [prev] [prev-tail] [front] [up] 3 Computational Exercises

[prev] [prev-tail] [tail] [up]

Chapterx3Computational Exercises

3.1 One dimensional differentiation in a standard segment

In this first exercise we will demonstrate how to differentiate the function f(ξ) = ξ^{7} in the standard segment ξ ∈ [−1, 1] using Gaussian quadrature. The Gaussian quadrature zeros and the differentiation matrix are coded in the LIbUtilities library and for future reference this

can be found under the directory $NEKDIST/library/LibUtilities/Foundations/. For

the following exercises we will access the zeros and differentiation matrix from the PointsManager. The PointsManager is a type of map (or manager) which requires a key defining known Gaussian quadrature types called PointsKey.

In the $NEKDIST/tutorial/fundamentals-differentiation/tutorial directory open the

file named StdDifferentiation1D.cpp. Look over the comments supplied in the file which outline how to define the number of quadrature points to apply, the type of Gaussian quadrature, a differentiation matrix and some arrays to hold the zeros and solution. Finally a PointsKey is defined which is then used to obtain the zeros in an array called quadZeros and the differentiation matrix in a pointer to a matrix called

derivMatrix.

Task: 3.1

Implement a short block of code where you see the comments “Write your code here” which evaluates the loop

. \frac{du(ξ)}{dξ}|_{ξ=ξ_{i}} = ∑_{j=0}^{q−1} d_{ij} u(ξ_{j}),

Tip: To access individual elements in MatrixSharedPtrType, the pointer must first be dereferenced then accessed using the parantheses operator. This should look like

(*derivMatrix)(i, j). On the other hand, to access elements in Array<OneD, NekDouble>,

the bracket operator can be directly used such as quadZerosDir1[i]. If the array is two-dimensional (Array<TwoD, NekDouble>), elements would be accessed through

quadDerivsDir1[i][j].

To compile your code type

 make StdDifferentiation1D

in the tutorial directory. When your code compiles

successfully1 1If you are unable to get your code to compile you can see a completed exercise in the $NEKDIST/tutorial/fundamentals-differentiation/completed directory. The tutorial code is contained within a #if WITHSOLUTION block then type

 ./StdDifferentiation1D

You should now get some output similar to

    ======================================================x|xxxxxxDIFFERENTIATIONxINxAx1DxSTANDARDxREGIONxxxxxxx|x======================================================xDifferentiatexthexfunctionxf(xi)x=xxi^7xinxthexstandardxsegmentxxi=[-1,1]xusingxquadraturexpointsxxxxxxxxxxQx=x7:xErrorx=x1.49647

Task: 3.2 Evaluate the previous derivatives for a quadrature order of Q = Q_{max} where Q_{max} = 8 is the number of quadrature points required for an exact evaluation of the derivatives (calculate this value analytically). Verify that the error is zero (up to numerical precision).

We can also use Gauss-Lobatto-Legendre type differentiation rather than Gauss-Legendre type in the previous exercises. To do this we replace

LibUtilities::PointsTypexquadPointsTypex=xxxxxxxxxxxxxxxxxxxxxxxxxLibUtilities::eGaussGaussLegendre;

with

LibUtilities::PointsTypexquadPointsTypex=xxxxxxxxxxxxxxxxxxxxxxxxxLibUtilities::eGaussLobattoLegendre;

3.2 Two-dimensional differentiation in a standard and local region

3.2.1 Quadrilateral element in a standard region

A straightforward extension of the one-dimensional Gaussian rule is to the two-dimensional standard quadrilateral region and similarly to the three-dimensional hexahedral region. Differentiation in Q^{2} = {−1 ≤ ξ_{1}, ξ_{2} ≤ 1} in the ξ_{1} direction is defined as

. \frac{du(ξ_{1}, ξ_{2})}{dξ_{1}} = ∑_{i=0}^{q_{1}−1} ∑_{j=0}^{q_{2}−1} u(ξ_{1}_{i}, ξ_{2}_{j})\frac{d}{dξ_{1}}(h_{1}_{i}(ξ_{1})h_{2}_{j}(ξ_{2}))

where h_{1} and h_{2} are the polynomials associated respectively with coordinates ξ_{1} and ξ_{2}.

Because h_{2} is not a function of ξ_{1}, we can rewrite the formula as

. \frac{du(ξ_{1}, ξ_{2})}{dξ_{1}} = ∑_{i=0}^{q_{1}−1} ∑_{j=0}^{q_{2}−1} u(ξ_{1}_{i}, ξ_{2}_{j})h_{2}_{j}(ξ_{2})\frac{d}{dξ_{1}}h_{1}_{i}(ξ_{1}).

(3.1)

Typically, we only require the derivative at the nodal points (ξ_{1}_{i}, ξ_{2}_{j}). At these points, h_{2} has trivial values, i.e. unit value at ξ_{2}_{j} and null value at all other points. The summation over j therefore drops and we are left with the same formula as in our one-dimensional problem

. \frac{du(ξ_{1}, ξ_{2})}{dξ_{1}}|_{ξ=(ξ_{1}_{i},ξ_{2}_{j} )} = ∑_{k=0}^{q_{1}−1} d_{1}_{ik} u(ξ_{1}_{k}, ξ_{2}_{j})

(3.2)

where d_{1}_{i}k is the differentiation matrix in the ξ_{1} direction such that

. d_{1}_{ik} = \frac{dh_{1}_{k}(ξ_{1})}{dξ_{1}}|_{ξ_{1}=ξ_{1}_{i}} .

Likewise, the derivative with respect to ξ_{2} can be expressed by

. \frac{du(ξ_{1}, ξ_{2})}{dξ_{2}}|_{ξ=(ξ_{1}_{i},ξ_{2}_{j} )} = ∑_{k=0}^{q_{2}−1} d_{2}_{jk} u(ξ_{1}_{i}, ξ_{2}_{k}).

Task: 3.3 Differentiate the function f(ξ_{1}, ξ_{2}) = ξ_{1}^{7} ξ_{2}^{9} in the standard quadrilateral element Q ∈ [−1, 1] × [−1, 1] using Gaussian quadrature points.

Using a series of one-dimensional Gaussian quadrature rules as outlined above evaluate the derivative in each direction and for each quadrature point by completing the first part of the code in the file StdDifferentiation2D.cpp in the directory

$NekDist/tutorial/fundamentals-differentiation/tutorial.

The quadrature zeros and differentiation matrices in each of the coordinate directions have already been setup and are initially set to q_{1} = 7, q_{2} = 9 using a Gauss-Lobatto-Legendre quadrature rule. Complete the code by writing a structure of loops which implement the two-dimensional Gaussian quadrature

rule2 ^{2If you need help there is a completed version in the completed directory} . The expected output is given below). Also verify that the error is zero when q_{1} = 8, q_{2} = 10.

Recall that to compile the file you type

 make StdDifferentiation2D

When executing the tutorial with the quadrature order q_{1} = 7, q_{2} = 9 you should get an output of the form:

===========================================================x|xxxxDIFFERENTIATIONxINx2DxELEMENTxinxStandardxRegionxxxxx|x===========================================================xxDifferentiatexthexfunctionxf(x1,x2)x=x(x1)^7*(x2)^9xonxthexstandardxquadrilateralxelement:xxxxxxxxxxq1x=x7,xq2x=x9:xErrorx=x7.19196

3.2.2 General straight-sided quadrilateral element PIC Figurex3.1: To construct a C^{0} expansion from multiple elements of specified shapes (for example, triangles or rectangles), each elemental region Ω^{e} is mapped to a standard region Ω_{st} in which all local operations are evaluated.

For elemental shapes with straight sides a simple mapping may be constructed using a linear mapping similar to the vertex modes of a hierarchical/modal expansion. For the straight-sided quadrilateral with vertices labeled as shown in figure 3.1(b) the mapping can be defined as:

. \begin{aligned}x_{i} & = & χ_{i}(ξ_{1}, ξ_{2}) = x_{i}^{A} \frac{(1 − ξ_{1})}{2} \frac{(1 − ξ_{2})}{2} + x_{i}^{B} \frac{(1 + ξ_{1})}{2} \frac{(1 − ξ_{2})}{2} \\ & & +x_{i}^{D} \frac{(1 − ξ_{1})}{2} \frac{(1 + ξ_{2})}{2} + x_{i}^{C} \frac{(1 + ξ_{1})}{2} \frac{(1 + ξ_{2})}{2} . i = 1, 2 & (3.3) \end{aligned}

We denote an arbitrary quadrilateral region by Ω^{e} which is a function of the global Cartesian coordinate system (x_{1}, x_{2}) in two-dimensions. To differentiate in Ω^{e} we transform this region into the standard region Ω_{st} defined in terms of (ξ_{1}, ξ_{2}). We begin with the basic definition of differentiation:

. \frac{du(x_{1}, x_{2})}{dx_{1}} = ∑_{i=0}^{q_{1}−1} ∑_{j=0}^{q_{2}−1} u(x_{1}_{i}, x_{2}_{j})\frac{d}{dx_{1}}(h_{1}_{i}(x_{1}, x_{2})h_{2}_{j}(x_{1}, x_{2}))

Unlike differentiation in the standard region, both h_{1} and h_{2} are functions of both local coordinates. The chain rule can be applied to obtain a system similar to the previous exercise:

. \frac{du(x_{1}, x_{2})}{dx_{1}} = ∑_{i=0}^{q_{1}−1} ∑_{j=0}^{q_{2}−1} u(x_{1}_{i}, x_{2}_{j})[h_{2}_{j}(ξ_{2})\frac{dξ_{1}}{dx_{1}} \frac{d}{dξ_{1}}h_{1}_{i}(ξ_{1})) + h_{1}_{i}(ξ_{1})\frac{dξ_{2}}{dx_{1}} \frac{d}{dξ_{2}}h_{2}_{j}(ξ_{2}))]

(3.4)

where h_{1} and h_{2} are functions of ξ_{1} and ξ_{2} respectively only and where \frac{dξ_{2}}{x_{1}} and \frac{dξ_{1}}{x_{1}} come from the inverse two-dimensional Jacobian matrix due to the transformation, defined as:

. J_{2D}^{−1} = [ \begin{matrix}\frac{∂x_{1}}{∂ξ_{1}} & \frac{∂x_{1}}{∂ξ_{2}} \\ \frac{∂x_{2}}{∂ξ_{1}} & \frac{∂x_{2}}{∂ξ_{2}} \end{matrix} ]^{−1} = [ \begin{matrix}\frac{∂ξ_{1}}{∂x_{1}} & \frac{∂ξ_{1}}{∂x_{2}} \\ \frac{∂ξ_{2}}{∂x_{1}} & \frac{∂ξ_{2}}{∂x_{2}} \end{matrix} ]

As we have assumed that we know the form of the mapping [i.e., x_{1} = χ_{1}(ξ_{1}, ξ_{2}), x_{2} = χ_{2}(ξ_{1}, ξ_{2})] we can evaluate all the partial derivatives required to determine the Jacobian matrix. If the elemental region is straight-sided then we have seen that a mapping from (x_{1}, x_{2}) → (ξ_{1}, ξ_{2}) is given by equations (3.3).

Equation (3.4) turns out to be similar to equation (3.1) in the standard region and can be also rewritten in the style of equation (3.2):

. \begin{matrix}\frac{du(x_{1}, x_{2})}{dx_{1}} |_{x=(x_{1} _{i},x_{2} _{j} )} = \frac{dξ_{1}}{dx_{1}} |_{x=(x_{1} _{i},x_{2} _{j} )} ∑_{k=0}^{q_{1}−1} d_{1}_{ik} u(x_{1}_{k}, x_{2}_{j}) \\ + \frac{dξ_{2}}{dx_{1}} |_{x=(x_{1} _{i},x_{2} _{j} )} ∑_{k=0}^{q_{2}−1} d_{2}_{jk} u(x_{1}_{i}, x_{2}_{k}) & (3.5) \end{matrix}

Similarly to the differentiation in the standard region, derivatives with respect to the other local coordinate can also be found by substituting dx_{2} for dx_{1}. We can also note that equation (3.2) is a particular case of equation (3.5) where \frac{dξ_{1}}{dx_{1}} = 1 and \frac{dξ_{2}}{dx_{1}} = 0. This effectively corresponds to the situation where the local region has the same shape and dimensions as the standard region (with the admission of a translation in the plane).

Task: 3.4 We now consider how to differentiate the function f(x_{1}, x_{2}) = x_{1}^{7} x_{2}^{9} in a local rectangular quadrilateral element. Consider the local quadrilateral element with vertices

. \begin{matrix}(x_{1}^{A}, x_{2}^{A}) = (0, −1), & (x_{1}^{B}, x_{2}^{B}) = (1, −1), \\ (x_{1}^{C}, x_{2}^{C}) = (1, 1), & (x_{1}^{D}, x_{2}^{D}) = (0, 0). \end{matrix}

This is clearly similar to the previous exercise. However, as we are calculating the derivatives of a function defined in a local element rather than in a reference element, we have to take into account the geometry of the element. Therefore, the implementation is altered in two ways:

The quadrature zeros should be transformed to local coordinates to evaluate the function f(x_{1}, x_{2}) at the quadrature points.

Elements of the inverse Jacobian matrix of the transformation between local and reference coordinates should be taken into account when evaluating the derivatives.

In the file LocDifferentiation2D.cpp you are provided with the same set up as the previous task but now with a definition of the coordinate mapping included. Evaluate the expression for the Jacobian matrix analytically and find its inverse. Then write a line of code in the loop for the Jacobian as indicated by the comments “Write your code here”. When you have written your expression you can compile the code with the command

 make LocDifferentiation2D

Using the quadrature order specified in the file your output should look like:

    =========================================================x|xxxxxDIFFERENTIATIONxINx2DxELEMENTxinxLocalxRegionxxxxx|x=========================================================xxDifferentiatexthexfunctionxf(x1,x2)x=xx1^7x*xx2^9xinxaxlocalxquadrilateralxelement:xxxxxxxxxxq1x=x8,xq2x=x10:xAveragexErrorx=x0.0346594

Advanced Task: 3.5

As it turns out in the previous task, the average error is not equal to zero. Why is that?

Try different values of q_{1} and q_{2} and plot the average error with respect to these two parameters, either one by one or simultaneously. Why are the values of q_{1}_{max} and q_{2}_{max} (at which the average error reaches computer precision) different from those expected in the standard

region?3 ^{3Hint: How can this be explained by the geometry of the local element?} [prev] [prev-tail] [front] [up] 4 Summary

[prev] [prev-tail] [tail] [up] Chapterx4Summary You should be now familiar with the following topics:

Define an Array, a NekMatrix and a PointsKey in Nektar++. Use the PointsManager with a PointsKey to get hold of quadrature zeros and differentiation matrices. Differentiate a polynomial function in the standard region ξ ∈ [−1, 1] using Gauss-Gauss-Legendre and Gauss-Lobatto-Legendre quadrature. Extend the standard region to a standard quadrilateral region. Introduce a linear mapping from a general quadrilateral region to the standard quadrilateral region. Evaluate the Jacobian of this mapping and evaluate derivatives in a general straight sided quadrilateral region.

[prev] [prev-tail] [front] [up] [next]