ICFERST
22-06
Reservoir simulator based on DCVFEM, Dynamic Mesh optimisation and Surface-based modelling
|
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... | |
This module contains subroutines to generate the shape functions for multi dimensions.
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 | ||
) |
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 | ||
) |
real function shape_functions_ndim::area_quad_map | ( | integer | cv_iloc, |
real | xgi, | ||
real | ygi, | ||
real, dimension( : ) | lx, | ||
real, dimension( : ) | ly | ||
) |
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...
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...
real function shape_functions_ndim::binomial_coefficient | ( | integer | K, |
integer | L | ||
) |
Calculate binomial coefficients.
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.
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.
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.
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.
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.
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.
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 | ||
) |
subroutine shape_functions_ndim::crossproduct | ( | integer, intent(in) | n, |
real, dimension( : ), intent(inout) | cp, | ||
real, dimension( : ), intent(in) | a, | ||
real, dimension( : ), intent(in) | b | ||
) |
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
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 | ||
) |
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 | ||
) |
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.
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 | ||
) |
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 | ||
) |
recursive integer function shape_functions_ndim::factorial | ( | integer, intent(in) | n | ) |
Calculate n!
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
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
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 | ||
) |
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.
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.
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)
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
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.
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.
subroutine shape_functions_ndim::lroots | ( | real, dimension(:), intent(inout) | QUAPOS, |
integer | NDGI | ||
) |
This sub works out the Gauss-Lobatto-Legendre roots.
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 | ||
) |
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 | ||
) |
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.
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 | ||
) |
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.
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.
real function shape_functions_ndim::plegen | ( | real, intent(in) | LX, |
integer, intent(in) | K | ||
) |
subroutine shape_functions_ndim::printoutfunmat | ( | integer, intent(in) | n, |
integer, intent(in) | m, | ||
real, dimension( :,: ), intent(in) | a | ||
) |
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)
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.
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)
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 | ||
) |
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 | ||
) |
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.
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)
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.
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.
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
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.
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...
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...
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.
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.
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
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
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
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 | ||
) |
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.
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.
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 | ||
) |
real function shape_functions_ndim::triareaf_sign | ( | real | x1, |
real | y1, | ||
real | x2, | ||
real | y2, | ||
real | x3, | ||
real | y3 | ||
) |
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.
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.
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)
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 | ||
) |
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.
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.