FacePatchClass Module

Stores the data needed to specify a surface through a 2D interpolant. The surface is a function of (u,v) in [-1,1]x[-1,1].

The constructor for a 2D interpolant takes an array of points and
an array of knots to define a sursurface.


Deletes allocated memory


 ComputeFacePoint: Compute the nodes on a surface
 by interpolating
 u       = computational space variable (u, Zeta)
 p        = resultant physical space variable (x, y, z)
 self     = Interpolation data that defines a surface

<

 ComputePoly2D: Compute the lagrange interpolant through the points 
 p(i, j) at the location (x, y)
 u   = computational space variable (u, Zeta)
 p    = resultant physical space variable (x, y, z)
 self = Interpolation data that defines a surface

<

 ProjectFaceToNewPoints



 ComputeSurfaceDerivative: Compute the derivative in the two local  
 coordinate directions on a subdomain surface by interpolating
 the surface data



 Compute2DPolyDeriv: Compute the gradient of the 
                     lagrange interpolant through the points 
                     p(i, j) at the location (u, v). The result, grad,
                     is (dX/du,dX/dv) where X = (x,y,z)



For debugging purposes, print the information in the surface
interpolant.


Compute the newton divided difference table.
The node values are destroyed while creating the table.



Compute the newton form interpolant at the point x



Compute the derivative of the newton form interpolant at 
the point x



Compute at x the lagrange polynomial L_k of degree n-1    
whose zeros are given by the z(i)


Compute at x the derivative of the lagrange polynomial L_k of
degree n-1 whose zeros are given by the z(i)

Uses


Derived Types

type, public ::  FacePatch

Components

Type Visibility Attributes Name Initial
real(kind=RP), public, DIMENSION(:,:,:), ALLOCATABLE :: points
real(kind=RP), public, DIMENSION(:), ALLOCATABLE :: uKnots
real(kind=RP), public, DIMENSION(:), ALLOCATABLE :: vKnots
real(kind=RP), public, dimension(:), allocatable :: wbu
real(kind=RP), public, dimension(:), allocatable :: wbv
real(kind=RP), public, dimension(:,:), allocatable :: Du
real(kind=RP), public, dimension(:,:), allocatable :: Dv
integer, public, DIMENSION(2) :: noOfKnots

Type-Bound Procedures

procedure, public :: construct => ConstructFacePatch
procedure, public :: destruct => DestructFacePatch
procedure, public :: setFacePoints

Functions

public function FaceIs4CorneredQuad(self)

Arguments

Type IntentOptional Attributes Name
type(FacePatch) :: self

Return Value logical


Subroutines

public subroutine ConstructFacePatch(self, uKnots, vKnots, points)

Arguments

Type IntentOptional Attributes Name
class(FacePatch) :: self
real(kind=RP), DIMENSION(:) :: uKnots
real(kind=RP), DIMENSION(:) :: vKnots
real(kind=RP), optional, DIMENSION(:,:,:) :: points

public elemental subroutine DestructFacePatch(self)

Arguments

Type IntentOptional Attributes Name
class(FacePatch), intent(inout) :: self

public subroutine ComputeFacePoint(self, u, p)

Arguments

Type IntentOptional Attributes Name
type(FacePatch), intent(in) :: self
real(kind=RP), intent(in), DIMENSION(2) :: u
real(kind=RP), intent(out), DIMENSION(3) :: p

public subroutine ProjectFaceToNewPoints(patch, Nx, xi, Ny, eta, faceCoords)

Arguments

Type IntentOptional Attributes Name
type(FacePatch), intent(in) :: patch
integer, intent(in) :: Nx
real(kind=RP), intent(in) :: xi(Nx+1)
integer, intent(in) :: Ny
real(kind=RP), intent(in) :: eta(Ny+1)
real(kind=RP), intent(out) :: faceCoords(1:3,Nx+1,Ny+1)

public subroutine ComputeFaceDerivative(self, u, grad)

Arguments

Type IntentOptional Attributes Name
type(FacePatch) :: self
real(kind=RP), DIMENSION(2) :: u
real(kind=RP), DIMENSION(3,2) :: grad

public subroutine PrintFacePatch(self)

Arguments

Type IntentOptional Attributes Name
type(FacePatch) :: self