ICFERST  22-06
Reservoir simulator based on DCVFEM, Dynamic Mesh optimisation and Surface-based modelling
shape_functions_ndim Module Reference

This module contains subroutines to generate the shape functions for multi dimensions. More...

Data Types

interface  xprod
 Performs the cross product of two vectors. More...
 

Functions/Subroutines

subroutine quad_1d_shape (cv_ngi, cv_nloc, u_nloc, cvn, cvweigh, n, nlx, un, unlx)
 : For quadratic elements. Shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ) More...
 
subroutine quad_nd_shape (ndim, cv_ele_type, cv_ngi, cv_nloc, u_nloc, cvn, cvweigh, n, nlx, nly, nlz, un, unlx, unly, unlz)
 : For quadratic elements: Shape functions associated with volume integration using both CV (CVN) and FEM (N and its derivatives NLX/Y/Z) basis functions. More...
 
subroutine quad_nd_shape_n (cv_ele_type, ndim, cv_ngi, cv_nloc, cvn, cvweigh, n, nlx, nly, nlz, cv_ngi_1d, cv_nloc_1d, cvn_1d, cvweigh_1d, n_1d, nlx_1d)
 : For quadatic elements – shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ) More...
 
subroutine vol_cv_tri_tet_shape (cv_ele_type, ndim, cv_ngi, cv_nloc, u_nloc, cvn, cvweigh, n, nlx, nly, nlz, un, unlx, unly, unlz)
 : Compute shape functions N, UN etc for linear trianles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ). Also for velocity basis functions UN, UNLX, UNLY, UNLZ. More...
 
subroutine new_pt_qua_vol_cv_tri_tet_shape (cv_ele_type, ndim, cv_ngi, cv_nloc, u_nloc, cvn, cvweigh, n, nlx, nly, nlz, un, unlx, unly, unlz)
 : new 1 or 4 pt quadrature set on each CV of a quadratic tetrahedra ..... Compute shape functions N, UN etc for linear trianles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ). Also for velocity basis functions UN, UNLX, UNLY, UNLZ. More...
 
subroutine test_quad_tet (cv_nloc, cv_ngi, cvn, n, nlx, nly, nlz, cvweight, x, y, z, x_nonods, x_ndgln2, totele)
 test the volumes of idealised triangle More...
 
subroutine compute_xndgln_tritetquadhex (cv_ele_type, max_totele, max_x_nonods, quad_cv_nloc, totele, x_nonods, x_ndgln, lx, ly, lz, x, y, z, fem_nod, x_ideal, y_ideal, z_ideal, x_ndgln_ideal)
 Get the x_ndgln for the nodes of triangles or tetrahedra. More...
 
subroutine suf_cv_tri_tet_shape (cv_ele_type, ndim, scvngi, cv_nloc, u_nloc, scvfeweigh, scvfen, scvfenlx, scvfenly, scvfenlz, scvfenslx, scvfensly, sufen, sufenlx, sufenly, sufenlz, sufenslx, sufensly, cv_neiloc, cvfem_neiloc, ufem_neiloc)
 : Compute shape functions N, UN etc for linear triangles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions SN (and its derivatives SNLX, SNLY, SNLZ). Also for velocity basis functions SUN, SUNLX, SUNLY, SUNLZ. Also the derivatives along the CV faces: sufnlx, sufnly, sufunlx, sufunly More...
 
subroutine james_quadrature_quad_tet (l1, l2, l3, l4, normx, normy, normz, sarea, X_LOC, Y_LOC, Z_LOC, CV_NEILOC, cv_nloc, scvngi)
 : the surface quadrature pts in local coord are l1, l2, l3, l4, and the associated normals normx, normy, normz and the surface area is sarea The position of the nodes of the tet are: (X_LOC, Y_LOC, Z_LOC) Calculate cv_neiloc: To get the neighbouring node for node ILOC and surface quadrature point SGI CV_JLOC = CV_NEILOC( CV_ILOC, SGI ) The number of quadrature points is 24 = 4 x 6 exterior faces (and quadrature points) and 36 = 4x6 + 6x4/2 = 60 pts. @WARNING: Disabled because it introduces errors More...
 
subroutine get_tang_binorm (NX, NY, NZ, T1X, T1Y, T1Z, T2X, T2Y, T2Z, NNODRO)
 
subroutine compute_surfaceshapefunctions_triangle_tetrahedron (cv_nloc_cells, cv_ele_type_cells, cv_ele_type, ndim, totele, cv_nloc, scvngi, x_nonods, quad_cv_nloc, x_ndgln, x, y, z, lx, ly, lz, fem_nod, sn, snlx, snly, snlz, sufnlx, sufnly, scvweigh, cv_neiloc_cells, cvfem_neiloc)
 : this subroutine calculates shape functions sn, snlx, snly, snlz, sufnlx, sufnly, their weights scvweigh and local connectivity cv_neiloc_cells, cvfem_neiloc on the boundaries of the cv_nloc_cells control volumes. The control volume types are defines using cv_ele_type_cells. cv_neiloc_cells is associated with the CV cells cvfem_neiloc is associated with the FEM basis SN etc. More...
 
subroutine dummy_tri_tet (d1, d3, quad_cv_ngi, quad_cv_nloc, dummy_sngi, dummy_snloc, nwicel, cv_nloc, cv_sngi, totele, quad_u_loc_dummy, mloc, dummy_smloc, lowqua, npoly, npoly_ngi)
 Compute some local variables for suf_shape_tri_tet. More...
 
subroutine shape_tri_tet (cv_ele_type_cells, cv_nloc_cells, cv_ele_type, ndim, totele, cv_nloc, cv_ngi, x_nonods, quad_cv_nloc, x_ndgln, x, y, z, lx, ly, lz, n, nlx, nly, nlz, cvweigh)
 : Determine the volume shape functions n, nlx, nly, nlz and weights cvweigh for the cv_nloc_cells CV cells. More...
 
subroutine shatri_hex (l1, l2, l3, l4, weight, d3, nloc, ngi, n, nlx, nly, nlz, tri_tet)
 Get the shape functions on lines (in 2D) and quadrilateral surfaces in 3D. More...
 
subroutine shatri (l1, l2, l3, l4, weight, d3, nloc, ngi, n, nlx, nly, nlz)
 get the shape functions for a triangle/tetrahedron More...
 
subroutine shape_triangle_cubic (l1, l2, l3, l4, weight, d3, nloc, ngi, n, nlx, nly, nlz)
 Generates the shape functions of a cubic triangle. More...
 
subroutine base_order_tri (n, nloc, ngi)
 order so that the 1st nodes are on the base for a quadratic triangle... More...
 
subroutine base_order_tet (n, nloc, ngi)
 order so that the 1st nodes are on the base of tet for a quadratic tet... More...
 
subroutine calc_cvn_tritetquadhex (cv_ele_type, totele, cv_nloc, cv_ngi, x_nonods, quad_cv_nloc, x_ndgln, fem_nod, cvn)
 Compute CVN (CV basis function) for triangles, tetrahedra, quadrilaterals and hexahedra. More...
 
subroutine shape_l_q_quad (lowqua, ngi, nloc, mloc, sngi, snloc, smloc, m, mlx, mly, mlz, weight, n, nlx, nly, nlz, sweigh, sn, snlx, snly, sm, smlx, smly, nwicel, d3)
 This subrt computes shape functions. For now, let's just define for one element type. NB: N may overwrite M if we are not solving for pressure. More...
 
real function volume_quad_map (cv_iloc, xgi, ygi, zgi, lx, ly, lz)
 Compute the cv_iloc^{th} shape function value at point (xgi, ygi, zgi) More...
 
real function area_quad_map (cv_iloc, xgi, ygi, lx, ly)
 
real function tet_vol (a, b, c, d)
 
real function triareaf (x1, y1, x2, y2, x3, y3)
 
real function triareaf_sign (x1, y1, x2, y2, x3, y3)
 
subroutine crossproduct (n, cp, a, b)
 
subroutine printoutfunmat (n, m, a)
 
subroutine dgsdetnxloc2 (SNLOC, SNGI, XSL, YSL, ZSL, SN, SNLX, SNLY, SWEIGH, SDETWE, SAREA, D1, D3, DCYL, NORMXN, NORMYN, NORMZN, NORMX, NORMY, NORMZ)
 
subroutine dgsdetnxloc2_all (SNLOC, SNGI, NDIM, XSL_ALL, SN, SNLX, SNLY, SWEIGH, SDETWE, SAREA, NORMXN_ALL, NORMX_ALL)
 
subroutine normgi (NORMXN, NORMYN, NORMZN, DXDLX, DYDLX, DZDLX, DXDLY, DYDLY, DZDLY, NORMX, NORMY, NORMZ)
 Calculate the normal at the Gauss pts Perform x-product. N=T1 x T2. More...
 
subroutine xprod1 (AX, AY, AZ, BX, BY, BZ, CX, CY, CZ)
 Perform the cross product of two vectors. More...
 
subroutine xprod2 (A, B, C)
 Perform the cross product of two vectors. More...
 
subroutine make_qtri (totele, x_nloc, max_x_nonods, x_nonods, x_ndgln, lx, ly, x, y, fem_nod)
 
subroutine computing_small_qtriangles (ele_big, x_nloc_big, totele_big, x_nonods_big, increment_ele_big, x_ndgln_big, x_big, y_big)
 
subroutine remaping_fields_qtriangles (ele_big, x_nloc_big, totele_big, x_nonods_big, x_ndgln_big, x_big, y_big, x_nonods, x_nloc, totele, x_ndgln, ele_ref, x, y)
 
subroutine eliminating_repetitive_nodes (totele, x_nloc, x_nonods, over_all, x_ndgln, x, y)
 
subroutine eliminating_repetitive_nodes_all (totele, x_nloc, x_nonods, mx_x_nonods, x_ndgln, x, y, z)
 
subroutine adding_extra_parametric_nodes (totele, x_nloc, mx_x_nonods, x_ndgln, x, y)
 
subroutine make_qtets (totele, quad_cv_nloc, x_nloc, max_x_nonods, x_nonods, x_ndgln_real, lx, ly, lz, x, y, z, fem_nod, xp2, yp2, zp2, x_ndgln_p2)
 This subrt creates the local coordinates and node points for: (a) quadratic tetrahedra of unit volume and (b) 27 points of the 8 hexahedra within the 8 linear tetrahedra. FEM_NOD is the local numbering of the FEM representation of the unit volume quadratic tetrahedron. More...
 
subroutine make_linear_tetrahedron (ele, quad_cv_nloc, x_nloc, x_nonods, number_of_hexs, xp2, yp2, zp2, x, y, z, x_ndgln_p2, x_ndgln)
 
subroutine make_bilinear_hexahedra (totele, number_of_hexs, quad_cv_nloc, x_nonods, x, y, z, x_ndgln)
 
subroutine adding_parametric_nodes_hex (ele, ele_hex, totele, number_of_hexs, quad_cv_nloc, x_nonods, x, y, z, x_ndgln)
 
subroutine shape_one_ele2 (ndim, cv_ele_type, cv_ngi, cv_nloc, u_nloc, cvweight, cvfen, cvfenlx, cvfenly, cvfenlz, ufen, ufenlx, ufenly, ufenlz, sbcvngi, sbcvfen, sbcvfenslx, sbcvfensly, sbcvfeweigh, sbufen, sbufenslx, sbufensly, nface, cv_sloclist, u_sloclist, cv_snloc, u_snloc)
 : This subrt defines the sub-control volume and FEM shape functions. Shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions CVFEN (and its derivatives CVFENLX, CVFENLY, CVFENLZ) More...
 
subroutine shape (LOWQUA, NGI, NLOC, MLOC, SNGI, SNLOC, SMLOC, M, MLX, MLY, MLZ, WEIGHT, N, NLX, NLY, NLZ, SWEIGH, SN, SNLX, SNLY, SM, SMLX, SMLY, NWICEL, D3)
 
subroutine tr2or3dqu (NGI, NLOC, MLOC, M, MLX, MLY, MLZ, WEIGHT, N, NLX, NLY, NLZ, SNGI, SNLOC, SWEIGH, SN, SNLX, SNLY, SMLOC, SM, SMLX, SMLY, D3)
 :This subroutine defines the shape functions M and N and their derivatives at the Gauss points for quadratic elements. For 3-D FLOW. More...
 
subroutine tr2d (LOWQUA, NGI, NLOC, MLOC, M, WEIGHT, N, NLX, NLY, SNGI, SNLOC, SWEIGH, SN, SNLX)
 This subroutine defines the shape functions M and N and their derivatives at the Gauss points For 3-D FLOW. More...
 
subroutine shatrinew (L1, L2, L3, L4, WEIGHT, NLOC, NGI, N, NLX_ALL)
 : Work out the shape functions and their derivatives... More...
 
subroutine shatriold (L1, L2, L3, L4, WEIGHT, D3, NLOC, NGI, N, NLX, NLY, NLZ)
 : Work out the shape functions and their derivatives... More...
 
subroutine triquaold (L1, L2, L3, L4, WEIGHT, D3, NGI)
 : This sub calculates the local corrds L1, L2, L3, L4 and weights at the quadrature points. If D3 it does this for 3Dtetrahedra elements else triangular elements. More...
 
subroutine spectr (NGI, NLOC, MLOC, M, WEIGHT, N, NLX, NLY, NLZ, D3, D2, IPOLY, IQADRA)
 This subroutine defines a spectal element. IPOLY defines the element type and IQADRA the quadrature. In 2-D the spectral local node numbering is as.. 7 8 9 4 5 6 1 2 3 For 3-D... lz=-1 3 4 1 2 and for lz=1 7 8 5 6. More...
 
subroutine gtroot (IPOLY, IQADRA, WEIT, NODPOS, QUAPOS, NDGI, NDNOD)
 This sub returns the weights WEIT the quadrature points QUAPOS and the node points NODPOS. NODAL POISTIONS ****** NB if GETNDP then find the nodal positions. More...
 
real function specfu (DIFF, LXGP, INOD, NDNOD, IPOLY, NODPOS)
 INOD contains the node at which the polynomial is associated with LXGP is the position at which the polynomial is to be avaluated.\ If(DIFF) then find the D poly/DX. More...
 
subroutine cherot (WEIT, QUAPOS, NDGI, GETNDP)
 This computes the weight and points for Chebyshev-Gauss-Lobatto quadrature. See page 67 of:Spectral Methods in Fluid Dynamics, C.Canuto IF(GETNDP) then get the POSITION OF THE NODES AND DONT BOTHER WITH THE WEITS. More...
 
subroutine legrot (WEIT, QUAPOS, NDGI, GETNDP)
 This computes the weight and points for Chebyshev-Gauss-Lobatto quadrature. See page 69 of:Spectral Methods in Fluid Dynamics, C.Canuto IF(GETNDP) then get the POSITION OF THE NODES AND DONT BOTHER WITH THE WEITS. More...
 
real function plegen (LX, K)
 
real function binomial_coefficient (K, L)
 Calculate binomial coefficients. More...
 
subroutine lroots (QUAPOS, NDGI)
 This sub works out the Gauss-Lobatto-Legendre roots. More...
 
real function cheby1 (DIFF, LX, INOD, NDNOD, NODPOS)
 If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1. More...
 
real function cheby2 (DIFF, LX, INOD, NDNOD, NODPOS)
 If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1. More...
 
real function tcheb (N, XPT, DIFF, DIFF2)
 If DIFF then return the n'th Chebyshef polynomial differentiated w.r.t x. If DIFF2 then form the 2'nd derivative. This sub returns the value of the K'th Chebyshef polynomial at a point XPT. More...
 
recursive integer function factorial (n)
 Calculate n! More...
 
real function legend (DIFF, LX, INOD, NDNOD, NODPOS)
 If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1. More...
 
subroutine determin_sloclist (CV_SLOCLIST, CV_NLOC, CV_SNLOC, NFACE, ndim, cv_ele_type)
 determine CV_SLOCLIST More...
 
subroutine jacobl (N, ALPHA, BETA, XJAC)
 COMPUTES THE GAUSS-LOBATTO COLLOCATION POINTS FOR JACOBI POLYNOMIALS. More...
 
subroutine jacobf (N, POLY, PDER, POLYM1, PDERM1, POLYM2, PDERM2, X)
 COMPUTES THE JACOBI POLYNOMIAL (POLY) AND ITS DERIVATIVE (PDER) OF DEGREE N AT X. More...
 
real function volume_tethex (hexs, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4)
 
subroutine get_cvn_compact_overlapping (cv_ele_type, ndim, cv_ngi, cv_nloc, cvn, cvweigh)
 : Calculates the CVN and CVWEIGH shape functions This subroutine is specially created to be used with compact_overlapping More...
 
integer function get_nwicel (d3, nloc)
 : Provides a number defining the type of element we are dealing with 4,5 Linear tetrahedra, 10 quadratic tetrahedra; 3,4 Linear triangle, 5 quadratic triangle More...
 

Detailed Description

This module contains subroutines to generate the shape functions for multi dimensions.

Function/Subroutine Documentation

◆ adding_extra_parametric_nodes()

subroutine shape_functions_ndim::adding_extra_parametric_nodes ( integer, intent(in)  totele,
integer, intent(in)  x_nloc,
integer, intent(in)  mx_x_nonods,
integer, dimension( : ), intent(inout)  x_ndgln,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y 
)
Here is the caller graph for this function:

◆ adding_parametric_nodes_hex()

subroutine shape_functions_ndim::adding_parametric_nodes_hex ( integer, intent(in)  ele,
integer, intent(in)  ele_hex,
integer, intent(in)  totele,
integer, intent(in)  number_of_hexs,
integer, intent(in)  quad_cv_nloc,
integer, intent(in)  x_nonods,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout)  z,
integer, dimension( : ), intent(inout)  x_ndgln 
)
Here is the caller graph for this function:

◆ area_quad_map()

real function shape_functions_ndim::area_quad_map ( integer  cv_iloc,
real  xgi,
real  ygi,
real, dimension( : )  lx,
real, dimension( : )  ly 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ base_order_tet()

subroutine shape_functions_ndim::base_order_tet ( real, dimension( nloc, ngi ), intent(inout)  n,
integer, intent(in)  nloc,
integer, intent(in)  ngi 
)

order so that the 1st nodes are on the base of tet for a quadratic tet...

Here is the caller graph for this function:

◆ base_order_tri()

subroutine shape_functions_ndim::base_order_tri ( real, dimension( nloc, ngi ), intent(inout)  n,
integer, intent(in)  nloc,
integer, intent(in)  ngi 
)

order so that the 1st nodes are on the base for a quadratic triangle...

Here is the caller graph for this function:

◆ binomial_coefficient()

real function shape_functions_ndim::binomial_coefficient ( integer  K,
integer  L 
)

Calculate binomial coefficients.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calc_cvn_tritetquadhex()

subroutine shape_functions_ndim::calc_cvn_tritetquadhex ( integer, intent(in)  cv_ele_type,
integer, intent(in)  totele,
integer, intent(in)  cv_nloc,
integer, intent(in)  cv_ngi,
integer, intent(in)  x_nonods,
integer, intent(in)  quad_cv_nloc,
integer, dimension( : ), intent(in)  x_ndgln,
integer, dimension( : ), intent(in)  fem_nod,
real, dimension( :, : ), intent(inout)  cvn 
)

Compute CVN (CV basis function) for triangles, tetrahedra, quadrilaterals and hexahedra.

Here is the caller graph for this function:

◆ cheby1()

real function shape_functions_ndim::cheby1 ( logical, intent(inout)  DIFF,
real, intent(inout)  LX,
integer, intent(inout)  INOD,
integer, intent(inout)  NDNOD,
real, dimension(:), intent(inout)  NODPOS 
)

If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cheby2()

real function shape_functions_ndim::cheby2 ( logical, intent(inout)  DIFF,
real, intent(inout)  LX,
integer, intent(inout)  INOD,
integer, intent(inout)  NDNOD,
real, dimension(:), intent(inout)  NODPOS 
)

If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cherot()

subroutine shape_functions_ndim::cherot ( real, dimension(:), intent(inout)  WEIT,
real, dimension(:), intent(inout)  QUAPOS,
integer, intent(inout)  NDGI,
logical, intent(inout)  GETNDP 
)

This computes the weight and points for Chebyshev-Gauss-Lobatto quadrature. See page 67 of:Spectral Methods in Fluid Dynamics, C.Canuto IF(GETNDP) then get the POSITION OF THE NODES AND DONT BOTHER WITH THE WEITS.

Here is the caller graph for this function:

◆ compute_surfaceshapefunctions_triangle_tetrahedron()

subroutine shape_functions_ndim::compute_surfaceshapefunctions_triangle_tetrahedron ( integer, intent(in)  cv_nloc_cells,
integer, intent(in)  cv_ele_type_cells,
integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  totele,
integer, intent(in)  cv_nloc,
integer, intent(in)  scvngi,
integer, intent(in)  x_nonods,
integer, intent(in)  quad_cv_nloc,
integer, dimension( : ), intent(in)  x_ndgln,
real, dimension( : ), intent(in)  x,
real, dimension( : ), intent(in)  y,
real, dimension( : ), intent(in)  z,
real, dimension( : ), intent(in)  lx,
real, dimension( : ), intent(in)  ly,
real, dimension( : ), intent(in)  lz,
integer, dimension( : ), intent(in)  fem_nod,
real, dimension( :, : ), intent(inout)  sn,
real, dimension( :, : ), intent(inout)  snlx,
real, dimension( :, : ), intent(inout)  snly,
real, dimension( :, : ), intent(inout)  snlz,
real, dimension( :, : ), intent(inout)  sufnlx,
real, dimension( :, : ), intent(inout)  sufnly,
real, dimension( : ), intent(inout)  scvweigh,
integer, dimension( :, : ), intent(inout)  cv_neiloc_cells,
integer, dimension( :, : ), intent(inout)  cvfem_neiloc 
)

: this subroutine calculates shape functions sn, snlx, snly, snlz, sufnlx, sufnly, their weights scvweigh and local connectivity cv_neiloc_cells, cvfem_neiloc on the boundaries of the cv_nloc_cells control volumes. The control volume types are defines using cv_ele_type_cells. cv_neiloc_cells is associated with the CV cells cvfem_neiloc is associated with the FEM basis SN etc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compute_xndgln_tritetquadhex()

subroutine shape_functions_ndim::compute_xndgln_tritetquadhex ( integer, intent(in)  cv_ele_type,
integer, intent(in)  max_totele,
integer, intent(in)  max_x_nonods,
integer, intent(in)  quad_cv_nloc,
integer, intent(inout)  totele,
integer, intent(inout)  x_nonods,
integer, dimension( : ), intent(inout)  x_ndgln,
real, dimension( : ), intent(inout)  lx,
real, dimension( : ), intent(inout)  ly,
real, dimension( : ), intent(inout)  lz,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout)  z,
integer, dimension( : ), intent(inout)  fem_nod,
real, dimension( : ), intent(inout)  x_ideal,
real, dimension( : ), intent(inout)  y_ideal,
real, dimension( : ), intent(inout)  z_ideal,
integer, dimension( : ), intent(inout)  x_ndgln_ideal 
)

Get the x_ndgln for the nodes of triangles or tetrahedra.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computing_small_qtriangles()

subroutine shape_functions_ndim::computing_small_qtriangles ( integer, intent(in)  ele_big,
integer, intent(in)  x_nloc_big,
integer, intent(in)  totele_big,
integer, intent(in)  x_nonods_big,
integer, intent(inout)  increment_ele_big,
integer, dimension( : ), intent(inout)  x_ndgln_big,
real, dimension( : ), intent(inout)  x_big,
real, dimension( : ), intent(inout)  y_big 
)
Here is the caller graph for this function:

◆ crossproduct()

subroutine shape_functions_ndim::crossproduct ( integer, intent(in)  n,
real, dimension( : ), intent(inout)  cp,
real, dimension( : ), intent(in)  a,
real, dimension( : ), intent(in)  b 
)
Here is the caller graph for this function:

◆ determin_sloclist()

subroutine shape_functions_ndim::determin_sloclist ( integer, dimension( :, : ), intent(inout)  CV_SLOCLIST,
integer, intent(in)  CV_NLOC,
integer, intent(in)  CV_SNLOC,
integer, intent(in)  NFACE,
integer, intent(in)  ndim,
integer, intent(in)  cv_ele_type 
)

determine CV_SLOCLIST

Here is the caller graph for this function:

◆ dgsdetnxloc2()

subroutine shape_functions_ndim::dgsdetnxloc2 ( integer, intent(in)  SNLOC,
integer, intent(in)  SNGI,
real, dimension( : ), intent(in)  XSL,
real, dimension( : ), intent(in)  YSL,
real, dimension( : ), intent(in)  ZSL,
real, dimension( :, : ), intent(in)  SN,
real, dimension( :, : ), intent(in)  SNLX,
real, dimension( :, : ), intent(in)  SNLY,
real, dimension( : ), intent(in)  SWEIGH,
real, dimension( : ), intent(inout)  SDETWE,
real, intent(inout)  SAREA,
logical, intent(in)  D1,
logical, intent(in)  D3,
logical, intent(in)  DCYL,
real, dimension( : ), intent(inout)  NORMXN,
real, dimension( : ), intent(inout)  NORMYN,
real, dimension( : ), intent(inout)  NORMZN,
real, intent(in)  NORMX,
real, intent(in)  NORMY,
real, intent(in)  NORMZ 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dgsdetnxloc2_all()

subroutine shape_functions_ndim::dgsdetnxloc2_all ( integer, intent(in)  SNLOC,
integer, intent(in)  SNGI,
integer, intent(in)  NDIM,
real, dimension( ndim, snloc ), intent(in)  XSL_ALL,
real, dimension( snloc, sngi ), intent(in)  SN,
real, dimension( snloc, sngi ), intent(in)  SNLX,
real, dimension( snloc, sngi ), intent(in)  SNLY,
real, dimension( sngi ), intent(in)  SWEIGH,
real, dimension( sngi ), intent(inout)  SDETWE,
real, intent(inout)  SAREA,
real, dimension( ndim, sngi ), intent(inout)  NORMXN_ALL,
real, dimension( ndim ), intent(in)  NORMX_ALL 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dummy_tri_tet()

subroutine shape_functions_ndim::dummy_tri_tet ( logical, intent(in)  d1,
logical, intent(in)  d3,
integer, intent(inout)  quad_cv_ngi,
integer, intent(in)  quad_cv_nloc,
integer, intent(inout)  dummy_sngi,
integer, intent(inout)  dummy_snloc,
integer, intent(inout)  nwicel,
integer, intent(in)  cv_nloc,
integer, intent(in)  cv_sngi,
integer, intent(in)  totele,
integer, intent(inout)  quad_u_loc_dummy,
integer, intent(inout)  mloc,
integer, intent(inout)  dummy_smloc,
logical, intent(inout)  lowqua,
integer, intent(inout)  npoly,
integer, intent(inout)  npoly_ngi 
)

Compute some local variables for suf_shape_tri_tet.

Here is the caller graph for this function:

◆ eliminating_repetitive_nodes()

subroutine shape_functions_ndim::eliminating_repetitive_nodes ( integer, intent(in)  totele,
integer, intent(in)  x_nloc,
integer, intent(in)  x_nonods,
logical, intent(in)  over_all,
integer, dimension( : ), intent(inout)  x_ndgln,
real, dimension( : ), intent(in)  x,
real, dimension( : ), intent(in)  y 
)
Here is the caller graph for this function:

◆ eliminating_repetitive_nodes_all()

subroutine shape_functions_ndim::eliminating_repetitive_nodes_all ( integer, intent(in)  totele,
integer, intent(in)  x_nloc,
integer, intent(inout)  x_nonods,
integer, intent(in)  mx_x_nonods,
integer, dimension( : ), intent(inout)  x_ndgln,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout), optional  z 
)
Here is the caller graph for this function:

◆ factorial()

recursive integer function shape_functions_ndim::factorial ( integer, intent(in)  n)

Calculate n!

Here is the caller graph for this function:

◆ get_cvn_compact_overlapping()

subroutine shape_functions_ndim::get_cvn_compact_overlapping ( integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh 
)

: Calculates the CVN and CVWEIGH shape functions This subroutine is specially created to be used with compact_overlapping

Here is the call graph for this function:

◆ get_nwicel()

integer function shape_functions_ndim::get_nwicel ( logical  d3,
integer  nloc 
)

: Provides a number defining the type of element we are dealing with 4,5 Linear tetrahedra, 10 quadratic tetrahedra; 3,4 Linear triangle, 5 quadratic triangle

Here is the caller graph for this function:

◆ get_tang_binorm()

subroutine shape_functions_ndim::get_tang_binorm ( real, dimension( nnodro ), intent(in)  NX,
real, dimension( nnodro ), intent(in)  NY,
real, dimension( nnodro ), intent(in)  NZ,
real, dimension( nnodro ), intent(inout)  T1X,
real, dimension( nnodro ), intent(inout)  T1Y,
real, dimension( nnodro ), intent(inout)  T1Z,
real, dimension( nnodro ), intent(inout)  T2X,
real, dimension( nnodro ), intent(inout)  T2Y,
real, dimension( nnodro ), intent(inout)  T2Z,
integer, intent(in)  NNODRO 
)
Here is the caller graph for this function:

◆ gtroot()

subroutine shape_functions_ndim::gtroot ( integer, intent(inout)  IPOLY,
integer, intent(inout)  IQADRA,
real, dimension(:), intent(inout)  WEIT,
real, dimension(:), intent(inout)  NODPOS,
real, dimension(:), intent(inout)  QUAPOS,
integer, intent(inout)  NDGI,
integer, intent(inout)  NDNOD 
)

This sub returns the weights WEIT the quadrature points QUAPOS and the node points NODPOS. NODAL POISTIONS ****** NB if GETNDP then find the nodal positions.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ jacobf()

subroutine shape_functions_ndim::jacobf ( integer, intent(in)  N,
real, intent(inout)  POLY,
real, intent(inout)  PDER,
real, intent(inout)  POLYM1,
real, intent(inout)  PDERM1,
real, intent(inout)  POLYM2,
real, intent(inout)  PDERM2,
real, intent(in)  X 
)

COMPUTES THE JACOBI POLYNOMIAL (POLY) AND ITS DERIVATIVE (PDER) OF DEGREE N AT X.

Here is the caller graph for this function:

◆ jacobl()

subroutine shape_functions_ndim::jacobl ( integer, intent(in)  N,
real, intent(inout)  ALPHA,
real, intent(inout)  BETA,
real, dimension(: )  XJAC 
)

COMPUTES THE GAUSS-LOBATTO COLLOCATION POINTS FOR JACOBI POLYNOMIALS.

N: DEGREE OF APPROXIMATION ALPHA: PARAMETER IN JACOBI WEIGHT BETA: PARAMETER IN JACOBI WEIGHT

XJAC: OUTPUT ARRAY WITH THE GAUSS-LOBATTO ROOTS THEY ARE ORDERED FROM LARGEST (+1.0) TO SMALLEST (-1.0)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ james_quadrature_quad_tet()

subroutine shape_functions_ndim::james_quadrature_quad_tet ( real, dimension( scvngi ), intent(inout)  l1,
real, dimension( scvngi ), intent(inout)  l2,
real, dimension( scvngi ), intent(inout)  l3,
real, dimension( scvngi ), intent(inout)  l4,
real, dimension( scvngi ), intent(inout)  normx,
real, dimension( scvngi ), intent(inout)  normy,
real, dimension( scvngi ), intent(inout)  normz,
real, dimension( scvngi ), intent(inout)  sarea,
real, dimension( cv_nloc ), intent(inout)  X_LOC,
real, dimension( cv_nloc ), intent(inout)  Y_LOC,
real, dimension( cv_nloc ), intent(inout)  Z_LOC,
integer, dimension( cv_nloc, scvngi ), intent(inout)  CV_NEILOC,
integer, intent(in)  cv_nloc,
integer, intent(in)  scvngi 
)

: the surface quadrature pts in local coord are l1, l2, l3, l4, and the associated normals normx, normy, normz and the surface area is sarea The position of the nodes of the tet are: (X_LOC, Y_LOC, Z_LOC) Calculate cv_neiloc: To get the neighbouring node for node ILOC and surface quadrature point SGI CV_JLOC = CV_NEILOC( CV_ILOC, SGI ) The number of quadrature points is 24 = 4 x 6 exterior faces (and quadrature points) and 36 = 4x6 + 6x4/2 = 60 pts. @WARNING: Disabled because it introduces errors

Here is the call graph for this function:
Here is the caller graph for this function:

◆ legend()

real function shape_functions_ndim::legend ( logical, intent(inout)  DIFF,
real, intent(inout)  LX,
integer, intent(inout)  INOD,
integer, intent(inout)  NDNOD,
real, dimension(:), intent(inout)  NODPOS 
)

If DIFF then returns the spectral function DIFFERENTIATED W.R.T X associated. This function returns the spectral function associated with node INOD at POINT LX NDNOD=no of nodes in 1-D. NDGI=no of Gauss pts in 1-D. NB The nodes are at the points COS(pie*J/2.) j=0,..,ndgi-1.

Here is the caller graph for this function:

◆ legrot()

subroutine shape_functions_ndim::legrot ( real, dimension(:), intent(inout)  WEIT,
real, dimension(:), intent(inout)  QUAPOS,
integer, intent(inout)  NDGI,
logical, intent(inout)  GETNDP 
)

This computes the weight and points for Chebyshev-Gauss-Lobatto quadrature. See page 69 of:Spectral Methods in Fluid Dynamics, C.Canuto IF(GETNDP) then get the POSITION OF THE NODES AND DONT BOTHER WITH THE WEITS.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ lroots()

subroutine shape_functions_ndim::lroots ( real, dimension(:), intent(inout)  QUAPOS,
integer  NDGI 
)

This sub works out the Gauss-Lobatto-Legendre roots.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_bilinear_hexahedra()

subroutine shape_functions_ndim::make_bilinear_hexahedra ( integer, intent(in)  totele,
integer, intent(in)  number_of_hexs,
integer, intent(in)  quad_cv_nloc,
integer, intent(inout)  x_nonods,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout)  z,
integer, dimension( : ), intent(inout)  x_ndgln 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_linear_tetrahedron()

subroutine shape_functions_ndim::make_linear_tetrahedron ( integer, intent(in)  ele,
integer, intent(in)  quad_cv_nloc,
integer, intent(in)  x_nloc,
integer, intent(in)  x_nonods,
integer, intent(in)  number_of_hexs,
real, dimension( 10 ), intent(in)  xp2,
real, dimension( 10 ), intent(in)  yp2,
real, dimension( 10 ), intent(in)  zp2,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout)  z,
integer, dimension( : ), intent(in)  x_ndgln_p2,
integer, dimension( : ), intent(inout)  x_ndgln 
)
Here is the caller graph for this function:

◆ make_qtets()

subroutine shape_functions_ndim::make_qtets ( integer, intent(inout)  totele,
integer, intent(in)  quad_cv_nloc,
integer, intent(in)  x_nloc,
integer, intent(in)  max_x_nonods,
integer, intent(inout)  x_nonods,
integer, dimension( : ), intent(inout)  x_ndgln_real,
real, dimension( : ), intent(inout)  lx,
real, dimension( : ), intent(inout)  ly,
real, dimension( : ), intent(inout)  lz,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
real, dimension( : ), intent(inout)  z,
integer, dimension( : ), intent(inout)  fem_nod,
real, dimension( : ), intent(inout)  xp2,
real, dimension( : ), intent(inout)  yp2,
real, dimension( : ), intent(inout)  zp2,
integer, dimension( : ), intent(inout)  x_ndgln_p2 
)

This subrt creates the local coordinates and node points for: (a) quadratic tetrahedra of unit volume and (b) 27 points of the 8 hexahedra within the 8 linear tetrahedra. FEM_NOD is the local numbering of the FEM representation of the unit volume quadratic tetrahedron.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ make_qtri()

subroutine shape_functions_ndim::make_qtri ( integer, intent(in)  totele,
integer, intent(in)  x_nloc,
integer, intent(in)  max_x_nonods,
integer, intent(inout)  x_nonods,
integer, dimension( : ), intent(inout)  x_ndgln,
real, dimension( : ), intent(inout)  lx,
real, dimension( : ), intent(inout)  ly,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y,
integer, dimension( : ), intent(inout)  fem_nod 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ new_pt_qua_vol_cv_tri_tet_shape()

subroutine shape_functions_ndim::new_pt_qua_vol_cv_tri_tet_shape ( integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
real, dimension( :, : ), intent(inout)  un,
real, dimension( :, : ), intent(inout)  unlx,
real, dimension( :, : ), intent(inout)  unly,
real, dimension( :, : ), intent(inout)  unlz 
)

: new 1 or 4 pt quadrature set on each CV of a quadratic tetrahedra ..... Compute shape functions N, UN etc for linear trianles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ). Also for velocity basis functions UN, UNLX, UNLY, UNLZ.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ normgi()

subroutine shape_functions_ndim::normgi ( real, intent(inout)  NORMXN,
real, intent(inout)  NORMYN,
real, intent(inout)  NORMZN,
real, intent(in)  DXDLX,
real, intent(in)  DYDLX,
real, intent(in)  DZDLX,
real, intent(in)  DXDLY,
real, intent(in)  DYDLY,
real, intent(in)  DZDLY,
real, intent(in)  NORMX,
real, intent(in)  NORMY,
real, intent(in)  NORMZ 
)

Calculate the normal at the Gauss pts Perform x-product. N=T1 x T2.

Here is the caller graph for this function:

◆ plegen()

real function shape_functions_ndim::plegen ( real, intent(in)  LX,
integer, intent(in)  K 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ printoutfunmat()

subroutine shape_functions_ndim::printoutfunmat ( integer, intent(in)  n,
integer, intent(in)  m,
real, dimension( :,: ), intent(in)  a 
)

◆ quad_1d_shape()

subroutine shape_functions_ndim::quad_1d_shape ( integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  un,
real, dimension( :, : ), intent(inout)  unlx 
)

: For quadratic elements. Shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ quad_nd_shape()

subroutine shape_functions_ndim::quad_nd_shape ( integer, intent(in)  ndim,
integer, intent(in)  cv_ele_type,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
real, dimension( :, : ), intent(inout)  un,
real, dimension( :, : ), intent(inout)  unlx,
real, dimension( :, : ), intent(inout)  unly,
real, dimension( :, : ), intent(inout)  unlz 
)

: For quadratic elements: Shape functions associated with volume integration using both CV (CVN) and FEM (N and its derivatives NLX/Y/Z) basis functions.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ quad_nd_shape_n()

subroutine shape_functions_ndim::quad_nd_shape_n ( integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
integer, intent(in)  cv_ngi_1d,
integer, intent(in)  cv_nloc_1d,
real, dimension( :, : ), intent(in)  cvn_1d,
real, dimension( : ), intent(in)  cvweigh_1d,
real, dimension( :, : ), intent(in)  n_1d,
real, dimension( :, : ), intent(in)  nlx_1d 
)

: For quadatic elements – shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ)

Here is the caller graph for this function:

◆ remaping_fields_qtriangles()

subroutine shape_functions_ndim::remaping_fields_qtriangles ( integer, intent(in)  ele_big,
integer, intent(in)  x_nloc_big,
integer, intent(in)  totele_big,
integer, intent(in)  x_nonods_big,
integer, dimension(: ), intent(in)  x_ndgln_big,
real, dimension( : ), intent(in)  x_big,
real, dimension( : ), intent(in)  y_big,
integer, intent(in)  x_nonods,
integer, intent(in)  x_nloc,
integer, intent(in)  totele,
integer, dimension( : ), intent(inout)  x_ndgln,
integer, intent(inout)  ele_ref,
real, dimension( : ), intent(inout)  x,
real, dimension( : ), intent(inout)  y 
)
Here is the caller graph for this function:

◆ shape()

subroutine shape_functions_ndim::shape ( logical, intent(in)  LOWQUA,
integer, intent(in)  NGI,
integer, intent(in)  NLOC,
integer, intent(in)  MLOC,
integer, intent(in)  SNGI,
integer, intent(in)  SNLOC,
integer, intent(in)  SMLOC,
real, dimension(:,:), intent(out)  M,
real, dimension(:,:), intent(out)  MLX,
real, dimension(:,:), intent(out)  MLY,
real, dimension(:,:), intent(out)  MLZ,
real, dimension(:), intent(out)  WEIGHT,
real, dimension(:,:), intent(out)  N,
real, dimension(:,:), intent(out)  NLX,
real, dimension(:,:), intent(out)  NLY,
real, dimension(:,:), intent(out)  NLZ,
real, dimension(:), intent(out)  SWEIGH,
real, dimension(:,:), intent(out)  SN,
real, dimension(:,:), intent(out)  SNLX,
real, dimension(:,:), intent(out)  SNLY,
real, dimension(:,:), intent(out)  SM,
real, dimension(:,:), intent(out)  SMLX,
real, dimension(:,:), intent(out)  SMLY,
integer, intent(in)  NWICEL,
logical, intent(in)  D3 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ shape_l_q_quad()

subroutine shape_functions_ndim::shape_l_q_quad ( logical, intent(in)  lowqua,
integer, intent(in)  ngi,
integer, intent(in)  nloc,
integer, intent(in)  mloc,
integer, intent(in)  sngi,
integer, intent(in)  snloc,
integer, intent(in)  smloc,
real, dimension( :, : ), intent(inout)  m,
real, dimension( :, : ), intent(inout)  mlx,
real, dimension( :, : ), intent(inout)  mly,
real, dimension( :, : ), intent(inout)  mlz,
real, dimension( : ), intent(inout)  weight,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
real, dimension( : ), intent(inout)  sweigh,
real, dimension( :, : ), intent(inout)  sn,
real, dimension( :, : ), intent(inout)  snlx,
real, dimension( :, : ), intent(inout)  snly,
real, dimension( :, : ), intent(inout)  sm,
real, dimension( :, : ), intent(inout)  smlx,
real, dimension( :, : ), intent(inout)  smly,
integer, intent(in)  nwicel,
logical, intent(in)  d3 
)

This subrt computes shape functions. For now, let's just define for one element type. NB: N may overwrite M if we are not solving for pressure.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shape_one_ele2()

subroutine shape_functions_ndim::shape_one_ele2 ( integer, intent(in)  ndim,
integer, intent(in)  cv_ele_type,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( : ), intent(inout)  cvweight,
real, dimension( :, : ), intent(inout)  cvfen,
real, dimension( :, : ), intent(inout)  cvfenlx,
real, dimension( :, : ), intent(inout)  cvfenly,
real, dimension( :, : ), intent(inout)  cvfenlz,
real, dimension( :, : ), intent(inout)  ufen,
real, dimension( :, : ), intent(inout)  ufenlx,
real, dimension( :, : ), intent(inout)  ufenly,
real, dimension( :, : ), intent(inout)  ufenlz,
integer, intent(in)  sbcvngi,
real, dimension( :, : ), intent(inout)  sbcvfen,
real, dimension( :, : ), intent(inout)  sbcvfenslx,
real, dimension( :, : ), intent(inout)  sbcvfensly,
real, dimension( : ), intent(inout)  sbcvfeweigh,
real, dimension( :, : ), intent(inout)  sbufen,
real, dimension( :, : ), intent(inout)  sbufenslx,
real, dimension( :, : ), intent(inout)  sbufensly,
integer, intent(in)  nface,
integer, dimension( :, : ), intent(inout)  cv_sloclist,
integer, dimension( :, : ), intent(inout)  u_sloclist,
integer, intent(in)  cv_snloc,
integer, intent(in)  u_snloc 
)

: This subrt defines the sub-control volume and FEM shape functions. Shape functions associated with volume integration using both CV basis functions CVN as well as FEM basis functions CVFEN (and its derivatives CVFENLX, CVFENLY, CVFENLZ)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shape_tri_tet()

subroutine shape_functions_ndim::shape_tri_tet ( integer, intent(in)  cv_ele_type_cells,
integer, intent(in)  cv_nloc_cells,
integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  totele,
integer, intent(in)  cv_nloc,
integer, intent(in)  cv_ngi,
integer, intent(in)  x_nonods,
integer, intent(in)  quad_cv_nloc,
integer, dimension( : ), intent(in)  x_ndgln,
real, dimension( : ), intent(in)  x,
real, dimension( : ), intent(in)  y,
real, dimension( : ), intent(in)  z,
real, dimension( : ), intent(in)  lx,
real, dimension( : ), intent(in)  ly,
real, dimension( : ), intent(in)  lz,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
real, dimension( : ), intent(inout)  cvweigh 
)

: Determine the volume shape functions n, nlx, nly, nlz and weights cvweigh for the cv_nloc_cells CV cells.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shape_triangle_cubic()

subroutine shape_functions_ndim::shape_triangle_cubic ( real, dimension( : ), intent(in)  l1,
real, dimension( : ), intent(in)  l2,
real, dimension( : ), intent(in)  l3,
real, dimension( : ), intent(in)  l4,
real, dimension( : ), intent(in)  weight,
logical, intent(in)  d3,
integer, intent(in)  nloc,
integer, intent(in)  ngi,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz 
)

Generates the shape functions of a cubic triangle.

Here is the caller graph for this function:

◆ shatri()

subroutine shape_functions_ndim::shatri ( real, dimension( : ), intent(in)  l1,
real, dimension( : ), intent(in)  l2,
real, dimension( : ), intent(in)  l3,
real, dimension( : ), intent(in)  l4,
real, dimension( : ), intent(in)  weight,
logical, intent(in)  d3,
integer, intent(in)  nloc,
integer, intent(in)  ngi,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz 
)

get the shape functions for a triangle/tetrahedron

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shatri_hex()

subroutine shape_functions_ndim::shatri_hex ( real, dimension( : ), intent(in)  l1,
real, dimension( : ), intent(in)  l2,
real, dimension( : ), intent(in)  l3,
real, dimension( : ), intent(in)  l4,
real, dimension( : ), intent(inout)  weight,
logical, intent(in)  d3,
integer, intent(in)  nloc,
integer, intent(in)  ngi,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
logical, intent(in)  tri_tet 
)

Get the shape functions on lines (in 2D) and quadrilateral surfaces in 3D.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shatrinew()

subroutine shape_functions_ndim::shatrinew ( real, dimension(:), intent(in)  L1,
real, dimension(:), intent(in)  L2,
real, dimension(:), intent(in)  L3,
real, dimension(:), intent(in)  L4,
real, dimension(:), intent(inout)  WEIGHT,
integer, intent(in)  NLOC,
integer, intent(in)  NGI,
real, dimension(:, : ), intent(inout)  N,
real, dimension (:,:,:), intent(inout)  NLX_ALL 
)

: Work out the shape functions and their derivatives...

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shatriold()

subroutine shape_functions_ndim::shatriold ( real, dimension(:), intent(in)  L1,
real, dimension(:), intent(in)  L2,
real, dimension(:), intent(in)  L3,
real, dimension(:), intent(in)  L4,
real, dimension(:), intent(inout)  WEIGHT,
logical, intent(in)  D3,
integer, intent(in)  NLOC,
integer, intent(in)  NGI,
real, dimension(:, : ), intent(inout)  N,
real, dimension(:, : ), intent(inout)  NLX,
real, dimension(:, : ), intent(inout)  NLY,
real, dimension(:, : ), intent(inout)  NLZ 
)

: Work out the shape functions and their derivatives...

Here is the call graph for this function:
Here is the caller graph for this function:

◆ specfu()

real function shape_functions_ndim::specfu ( logical  DIFF,
real  LXGP,
integer  INOD,
integer  NDNOD,
integer  IPOLY,
real, dimension(:)  NODPOS 
)

INOD contains the node at which the polynomial is associated with LXGP is the position at which the polynomial is to be avaluated.\ If(DIFF) then find the D poly/DX.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spectr()

subroutine shape_functions_ndim::spectr ( integer, intent(in)  NGI,
integer, intent(in)  NLOC,
integer, intent(in)  MLOC,
real, dimension(:,:), intent(inout)  M,
real, dimension(:), intent(inout)  WEIGHT,
real, dimension(:,:), intent(inout)  N,
real, dimension(:,:), intent(inout)  NLX,
real, dimension(:,:), intent(inout)  NLY,
real, dimension(:,:), intent(inout)  NLZ,
logical  D3,
logical  D2,
integer, intent(inout)  IPOLY,
integer, intent(inout)  IQADRA 
)

This subroutine defines a spectal element. IPOLY defines the element type and IQADRA the quadrature. In 2-D the spectral local node numbering is as.. 7 8 9 4 5 6 1 2 3 For 3-D... lz=-1 3 4 1 2 and for lz=1 7 8 5 6.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ suf_cv_tri_tet_shape()

subroutine shape_functions_ndim::suf_cv_tri_tet_shape ( integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  scvngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( : ), intent(inout)  scvfeweigh,
real, dimension( :, : ), intent(inout)  scvfen,
real, dimension( :, : ), intent(inout)  scvfenlx,
real, dimension( :, : ), intent(inout)  scvfenly,
real, dimension( :, : ), intent(inout)  scvfenlz,
real, dimension( :, : ), intent(inout)  scvfenslx,
real, dimension( :, : ), intent(inout)  scvfensly,
real, dimension( :, : ), intent(inout)  sufen,
real, dimension( :, : ), intent(inout)  sufenlx,
real, dimension( :, : ), intent(inout)  sufenly,
real, dimension( :, : ), intent(inout)  sufenlz,
real, dimension( :, : ), intent(inout)  sufenslx,
real, dimension( :, : ), intent(inout)  sufensly,
integer, dimension( :, : ), intent(inout)  cv_neiloc,
integer, dimension( :, : ), intent(inout)  cvfem_neiloc,
integer, dimension( :, : ), intent(inout)  ufem_neiloc 
)

: Compute shape functions N, UN etc for linear triangles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions SN (and its derivatives SNLX, SNLY, SNLZ). Also for velocity basis functions SUN, SUNLX, SUNLY, SUNLZ. Also the derivatives along the CV faces: sufnlx, sufnly, sufunlx, sufunly

Here is the call graph for this function:
Here is the caller graph for this function:

◆ tcheb()

real function shape_functions_ndim::tcheb ( integer, intent(in)  N,
real, intent(in)  XPT,
logical, intent(in)  DIFF,
logical, intent(in)  DIFF2 
)

If DIFF then return the n'th Chebyshef polynomial differentiated w.r.t x. If DIFF2 then form the 2'nd derivative. This sub returns the value of the K'th Chebyshef polynomial at a point XPT.

This formula can be found in:Spectral Methods for Fluid Dynamics, page 66

Here is the call graph for this function:
Here is the caller graph for this function:

◆ test_quad_tet()

subroutine shape_functions_ndim::test_quad_tet ( integer, intent(in)  cv_nloc,
integer, intent(in)  cv_ngi,
real, dimension( :,: ), intent(in)  cvn,
real, dimension( :, : ), intent(in)  n,
real, dimension( :, : ), intent(in)  nlx,
real, dimension( :, : ), intent(in)  nly,
real, dimension( :, : ), intent(in)  nlz,
real, dimension( : ), intent(in)  cvweight,
real, dimension( : ), intent(in)  x,
real, dimension( : ), intent(in)  y,
real, dimension( : ), intent(in)  z,
integer, intent(in)  x_nonods,
integer, dimension( : ), intent(in)  x_ndgln2,
integer, intent(in)  totele 
)

test the volumes of idealised triangle

◆ tet_vol()

real function shape_functions_ndim::tet_vol ( real, dimension( : ), intent(in)  a,
real, dimension( : ), intent(in)  b,
real, dimension( : ), intent(in)  c,
real, dimension( : ), intent(in)  d 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ tr2d()

subroutine shape_functions_ndim::tr2d ( logical  LOWQUA,
integer, intent(in)  NGI,
integer, intent(in)  NLOC,
integer, intent(in)  MLOC,
real, dimension(:,:), intent(inout)  M,
real, dimension(:), intent(inout)  WEIGHT,
real, dimension(:,:), intent(inout)  N,
real, dimension(:,:), intent(inout)  NLX,
real, dimension(:,:), intent(inout)  NLY,
integer, intent(in)  SNGI,
integer, intent(in)  SNLOC,
real, dimension(:), intent(inout)  SWEIGH,
real, dimension(:,:), intent(inout)  SN,
real, dimension(:,:), intent(inout)  SNLX 
)

This subroutine defines the shape functions M and N and their derivatives at the Gauss points For 3-D FLOW.

◆ tr2or3dqu()

subroutine shape_functions_ndim::tr2or3dqu ( integer, intent(in)  NGI,
integer, intent(in)  NLOC,
integer, intent(in)  MLOC,
real, dimension(:,:), intent(inout)  M,
real, dimension(:,:), intent(inout)  MLX,
real, dimension(:,:), intent(inout)  MLY,
real, dimension(:,:), intent(inout)  MLZ,
real, dimension(:), intent(inout)  WEIGHT,
real, dimension(:,:), intent(inout)  N,
real, dimension(:,:), intent(inout)  NLX,
real, dimension(:,:), intent(inout)  NLY,
real, dimension(:,:), intent(inout)  NLZ,
integer, intent(in)  SNGI,
integer, intent(in)  SNLOC,
real, dimension(:), intent(inout)  SWEIGH,
real, dimension(:,:), intent(inout)  SN,
real, dimension(:,:), intent(inout)  SNLX,
real, dimension(:,:), intent(inout)  SNLY,
integer, intent(in)  SMLOC,
real, dimension(:,:), intent(inout)  SM,
real, dimension(:,:), intent(inout)  SMLX,
real, dimension(:,:), intent(inout)  SMLY,
logical, intent(in)  D3 
)

:This subroutine defines the shape functions M and N and their derivatives at the Gauss points for quadratic elements. For 3-D FLOW.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ triareaf()

real function shape_functions_ndim::triareaf ( real, intent(in)  x1,
real, intent(in)  y1,
real, intent(in)  x2,
real, intent(in)  y2,
real, intent(in)  x3,
real, intent(in)  y3 
)
Here is the caller graph for this function:

◆ triareaf_sign()

real function shape_functions_ndim::triareaf_sign ( real  x1,
real  y1,
real  x2,
real  y2,
real  x3,
real  y3 
)
Here is the caller graph for this function:

◆ triquaold()

subroutine shape_functions_ndim::triquaold ( real, dimension(:), intent(inout)  L1,
real, dimension(:), intent(inout)  L2,
real, dimension(:), intent(inout)  L3,
real, dimension(:), intent(inout)  L4,
real, dimension(:), intent(inout)  WEIGHT,
logical, intent(in)  D3,
integer, intent(in)  NGI 
)

: This sub calculates the local corrds L1, L2, L3, L4 and weights at the quadrature points. If D3 it does this for 3Dtetrahedra elements else triangular elements.

Here is the caller graph for this function:

◆ vol_cv_tri_tet_shape()

subroutine shape_functions_ndim::vol_cv_tri_tet_shape ( integer, intent(in)  cv_ele_type,
integer, intent(in)  ndim,
integer, intent(in)  cv_ngi,
integer, intent(in)  cv_nloc,
integer, intent(in)  u_nloc,
real, dimension( :, : ), intent(inout)  cvn,
real, dimension( : ), intent(inout)  cvweigh,
real, dimension( :, : ), intent(inout)  n,
real, dimension( :, : ), intent(inout)  nlx,
real, dimension( :, : ), intent(inout)  nly,
real, dimension( :, : ), intent(inout)  nlz,
real, dimension( :, : ), intent(inout)  un,
real, dimension( :, : ), intent(inout)  unlx,
real, dimension( :, : ), intent(inout)  unly,
real, dimension( :, : ), intent(inout)  unlz 
)

: Compute shape functions N, UN etc for linear trianles. Shape functions associated with volume integration using both CV basis functions CVN, as well as FEM basis functions N (and its derivatives NLX, NLY, NLZ). Also for velocity basis functions UN, UNLX, UNLY, UNLZ.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ volume_quad_map()

real function shape_functions_ndim::volume_quad_map ( integer, intent(in)  cv_iloc,
real, intent(in)  xgi,
real, intent(in)  ygi,
real, intent(in)  zgi,
real, dimension( : ), intent(in)  lx,
real, dimension( : ), intent(in)  ly,
real, dimension( : ), intent(in)  lz 
)

Compute the cv_iloc^{th} shape function value at point (xgi, ygi, zgi)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ volume_tethex()

real function shape_functions_ndim::volume_tethex ( logical, intent(in)  hexs,
real, intent(in)  x1,
real, intent(in)  x2,
real, intent(in)  x3,
real, intent(in)  x4,
real, intent(in)  y1,
real, intent(in)  y2,
real, intent(in)  y3,
real, intent(in)  y4,
real, intent(in)  z1,
real, intent(in)  z2,
real, intent(in)  z3,
real, intent(in)  z4 
)
Here is the caller graph for this function:

◆ xprod1()

subroutine shape_functions_ndim::xprod1 ( real, intent(inout)  AX,
real, intent(inout)  AY,
real, intent(inout)  AZ,
real, intent(in)  BX,
real, intent(in)  BY,
real, intent(in)  BZ,
real, intent(in)  CX,
real, intent(in)  CY,
real, intent(in)  CZ 
)

Perform the cross product of two vectors.

◆ xprod2()

subroutine shape_functions_ndim::xprod2 ( real, dimension(:), intent(inout)  A,
real, dimension(:), intent(in)  B,
real, dimension(:), intent(in)  C 
)

Perform the cross product of two vectors.