v0.14.0 |
Loose implementation of some useful functions. More...
#include <definitions.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <complex.h>
#include <assert.h>
#include <string.h>
#include <fem_tools.h>
#include <gm_rule.h>
#include <h1_hdiv_hcurl_l2.h>
Go to the source code of this file.
Macros | |
#define | N_MBTETQ0(x, y, z) ((2. * (1. - x - y - z) - 1.) * (1. - x - y - z)) |
#define | N_MBTETQ1(x, y, z) ((2. * x - 1.) * x) |
#define | N_MBTETQ2(x, y, z) ((2. * y - 1.) * y) |
#define | N_MBTETQ3(x, y, z) ((2. * z - 1.) * z) |
#define | N_MBTETQ4(x, y, z) (4. * (1. - x - y - z) * x) |
#define | N_MBTETQ5(x, y, z) (4. * x * y) |
#define | N_MBTETQ6(x, y, z) (4. * (1. - x - y - z) * y) |
#define | N_MBTETQ7(x, y, z) (4. * (1. - x - y - z) * z) |
#define | N_MBTETQ8(x, y, z) (4. * x * z) |
#define | N_MBTETQ9(x, y, z) (4. * y * z) |
#define | diffN_MBTETQ0x(x, y, z) (-3. + 4. * x + 4. * y + 4. * z) |
#define | diffN_MBTETQ0y(x, y, z) (-3. + 4. * x + 4. * y + 4. * z) |
#define | diffN_MBTETQ0z(x, y, z) (-3. + 4. * x + 4. * y + 4. * z) |
#define | diffN_MBTETQ1x(x, y, z) (4. * x - 1.) |
#define | diffN_MBTETQ1y(x, y, z) (0.) |
#define | diffN_MBTETQ1z(x, y, z) (0.) |
#define | diffN_MBTETQ2x(x, y, z) (0.) |
#define | diffN_MBTETQ2y(x, y, z) (4. * y - 1.) |
#define | diffN_MBTETQ2z(x, y, z) (0.) |
#define | diffN_MBTETQ3x(x, y, z) (0.) |
#define | diffN_MBTETQ3y(x, y, z) (0.) |
#define | diffN_MBTETQ3z(x, y, z) (4. * z - 1.) |
#define | diffN_MBTETQ4x(x, y, z) (-8. * x + 4. - 4. * y - 4. * z) |
#define | diffN_MBTETQ4y(x, y, z) (-4. * x) |
#define | diffN_MBTETQ4z(x, y, z) (-4. * x) |
#define | diffN_MBTETQ5x(x, y, z) (4. * y) |
#define | diffN_MBTETQ5y(x, y, z) (4. * x) |
#define | diffN_MBTETQ5z(x, y, z) (0.) |
#define | diffN_MBTETQ6x(x, y, z) (-4. * y) |
#define | diffN_MBTETQ6y(x, y, z) (-8. * y + 4. - 4. * x - 4. * z) |
#define | diffN_MBTETQ6z(x, y, z) (-4. * y) |
#define | diffN_MBTETQ7x(x, y, z) (-4. * z) |
#define | diffN_MBTETQ7y(x, y, z) (-4. * z) |
#define | diffN_MBTETQ7z(x, y, z) (-8. * z + 4. - 4. * x - 4. * y) |
#define | diffN_MBTETQ8x(x, y, z) (4. * z) |
#define | diffN_MBTETQ8y(x, y, z) (0.) |
#define | diffN_MBTETQ8z(x, y, z) (4. * x) |
#define | diffN_MBTETQ9x(x, y, z) (0.) |
#define | diffN_MBTETQ9y(x, y, z) (4. * z) |
#define | diffN_MBTETQ9z(x, y, z) (4. * y) |
Functions | |
double | ShapeDetJacVolume (double *jac) |
determined of jacobian More... | |
PetscErrorCode | ShapeInvJacVolume (double *jac) |
PetscErrorCode | Grundmann_Moeller_integration_points_1D_EDGE (int rule, double *G_TRI_X, double *G_TRI_W) |
Compute weights and integration points for edge using Grundmann_Moeller rule. More... | |
PetscErrorCode | Grundmann_Moeller_integration_points_2D_TRI (int rule, double *G_TRI_X, double *G_TRI_Y, double *G_TRI_W) |
PetscErrorCode | Grundmann_Moeller_integration_points_3D_TET (int rule, double *G_TET_X, double *G_TET_Y, double *G_TET_Z, double *G_TET_W) |
PetscErrorCode | ShapeMBTRI (double *N, const double *X, const double *Y, const int G_DIM) |
calculate shape functions on triangle More... | |
PetscErrorCode | ShapeDiffMBTRI (double *diffN) |
calculate derivatives of shape functions More... | |
PetscErrorCode | ShapeFaceBaseMBTRI (double *diffN, const double *coords, double *normal, double *s1, double *s2) |
PetscErrorCode | ShapeFaceNormalMBTRI (double *diffN, const double *coords, double *normal) |
PetscErrorCode | ShapeFaceDiffNormalMBTRI (double *diffN, const double *coords, double *diff_normal) |
calculate derivative of normal in respect to nodal positions More... | |
PetscErrorCode | ShapeJacMBTET (double *diffN, const double *coords, double *jac) |
calculate jacobian More... | |
double | ShapeVolumeMBTET (double *diffN, const double *coords) |
calculate TET volume More... | |
PetscErrorCode | ShapeMBTET (double *N, const double *G_X, const double *G_Y, const double *G_Z, int DIM) |
calculate shape functions More... | |
PetscErrorCode | ShapeDiffMBTET (double *diffN) |
calculate derivatives of shape functions More... | |
PetscErrorCode | ShapeMBTET_inverse (double *N, double *diffN, const double *elem_coords, const double *glob_coords, double *loc_coords) |
calculate local coordinates for given global coordinates More... | |
PetscErrorCode | ShapeMBTRI_inverse (double *N, double *diffN, const double *elem_coords, const double *glob_coords, double *loc_coords) |
calculate local coordinates of triangle element for given global coordinates in 2D (Assume e.g. z=0) More... | |
PetscErrorCode | ShapeDiffMBTETinvJ (double *diffN, double *invJac, double *diffNinvJac) |
calculate shape functions derivatives in space More... | |
PetscErrorCode | GradientOfDeformation (double *diffN, double *dofs, double *F) |
calculate gradient of deformation More... | |
void | ShapeDiffMBTETinvJ_complex (double *diffN, __CLPK_doublecomplex *invJac, __CLPK_doublecomplex *diffNinvJac, enum CBLAS_TRANSPOSE Trans) |
PetscErrorCode | ShapeFaceNormalMBTRI_complex (double *diffN, __CLPK_doublecomplex *xcoords, __CLPK_doublecomplex *xnormal) |
PetscErrorCode | MakeComplexTensor (double *reA, double *imA, __CLPK_doublecomplex *xA) |
PetscErrorCode | InvertComplexGradient (__CLPK_doublecomplex *xF) |
PetscErrorCode | InvertComplexSymmMatrix3by3 (__CLPK_doublecomplex *xC) |
PetscErrorCode | DeterminantComplexGradient (__CLPK_doublecomplex *xF, __CLPK_doublecomplex *det_xF) |
PetscErrorCode | Spin (double *spinOmega, double *vecOmega) |
calculate spin matrix from vector More... | |
PetscErrorCode | make_complex_matrix (double *reA, double *imA, __CLPK_doublecomplex *xA) |
Compose complex matrix (3x3) from two real matrices. More... | |
PetscErrorCode | Normal_hierarchical (int order_approx, int *order_edge_approx, int order, int *order_edge, double *diffN, double *diffN_face, double *diffN_edge[], double *dofs, double *dofs_edge[], double *dofs_face, double *idofs, double *idofs_edge[], double *idofs_face, __CLPK_doublecomplex *xnormal, __CLPK_doublecomplex *xs1, __CLPK_doublecomplex *xs2, int gg) |
Complex normal. More... | |
PetscErrorCode | Base_scale (__CLPK_doublecomplex *xnormal, __CLPK_doublecomplex *xs1, __CLPK_doublecomplex *xs2) |
PetscErrorCode | ShapeMBEDGE (double *N, const double *G_X, int DIM) |
PetscErrorCode | ShapeDiffMBEDGE (double *diffN) |
PetscErrorCode | ShapeMBTRIQ (double *N, const double *X, const double *Y, const int G_DIM) |
PetscErrorCode | ShapeDiffMBTRIQ (double *diffN, const double *X, const double *Y, const int G_DIM) |
PetscErrorCode | ShapeMBTETQ (double *N, const double x, const double y, const double z) |
PetscErrorCode | ShapeDiffMBTETQ (double *diffN, const double x, const double y, const double z) |
PetscErrorCode | ShapeMBTETQ_GAUSS (double *N, const double *X, const double *Y, const double *Z, const int G_DIM) |
PetscErrorCode | ShapeDiffMBTETQ_GAUSS (double *diffN, const double *X, const double *Y, const double *Z, const int G_DIM) |
PetscErrorCode | ShapeJacMBTETQ (const double *diffN, const double *coords, double *Jac) |
PetscErrorCode | ShapeMBTETQ_detJac_at_Gauss_Points (double *detJac_at_Gauss_Points, const double *diffN, const double *coords, int G_DIM) |
double | ShapeVolumeMBTETQ (const double *diffN, const double *coords, int G_DIM, double *G_TET_W) |
PetscErrorCode | ShapeMBTETQ_inverse (double *N, double *diffN, const double *elem_coords, const double *glob_coords, double *loc_coords, const double eps) |
Variables | |
static PetscErrorCode | ierr |
Loose implementation of some useful functions.
Definition in file fem_tools.c.
#define diffN_MBTETQ0x | ( | x, | |
y, | |||
z | |||
) | (-3. + 4. * x + 4. * y + 4. * z) |
Definition at line 828 of file fem_tools.c.
#define diffN_MBTETQ0y | ( | x, | |
y, | |||
z | |||
) | (-3. + 4. * x + 4. * y + 4. * z) |
Definition at line 829 of file fem_tools.c.
#define diffN_MBTETQ0z | ( | x, | |
y, | |||
z | |||
) | (-3. + 4. * x + 4. * y + 4. * z) |
Definition at line 830 of file fem_tools.c.
#define diffN_MBTETQ1x | ( | x, | |
y, | |||
z | |||
) | (4. * x - 1.) |
Definition at line 831 of file fem_tools.c.
#define diffN_MBTETQ1y | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 832 of file fem_tools.c.
#define diffN_MBTETQ1z | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 833 of file fem_tools.c.
#define diffN_MBTETQ2x | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 834 of file fem_tools.c.
#define diffN_MBTETQ2y | ( | x, | |
y, | |||
z | |||
) | (4. * y - 1.) |
Definition at line 835 of file fem_tools.c.
#define diffN_MBTETQ2z | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 836 of file fem_tools.c.
#define diffN_MBTETQ3x | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 837 of file fem_tools.c.
#define diffN_MBTETQ3y | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 838 of file fem_tools.c.
#define diffN_MBTETQ3z | ( | x, | |
y, | |||
z | |||
) | (4. * z - 1.) |
Definition at line 839 of file fem_tools.c.
#define diffN_MBTETQ4x | ( | x, | |
y, | |||
z | |||
) | (-8. * x + 4. - 4. * y - 4. * z) |
Definition at line 840 of file fem_tools.c.
#define diffN_MBTETQ4y | ( | x, | |
y, | |||
z | |||
) | (-4. * x) |
Definition at line 841 of file fem_tools.c.
#define diffN_MBTETQ4z | ( | x, | |
y, | |||
z | |||
) | (-4. * x) |
Definition at line 842 of file fem_tools.c.
#define diffN_MBTETQ5x | ( | x, | |
y, | |||
z | |||
) | (4. * y) |
Definition at line 843 of file fem_tools.c.
#define diffN_MBTETQ5y | ( | x, | |
y, | |||
z | |||
) | (4. * x) |
Definition at line 844 of file fem_tools.c.
#define diffN_MBTETQ5z | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 845 of file fem_tools.c.
#define diffN_MBTETQ6x | ( | x, | |
y, | |||
z | |||
) | (-4. * y) |
Definition at line 846 of file fem_tools.c.
#define diffN_MBTETQ6y | ( | x, | |
y, | |||
z | |||
) | (-8. * y + 4. - 4. * x - 4. * z) |
Definition at line 847 of file fem_tools.c.
#define diffN_MBTETQ6z | ( | x, | |
y, | |||
z | |||
) | (-4. * y) |
Definition at line 848 of file fem_tools.c.
#define diffN_MBTETQ7x | ( | x, | |
y, | |||
z | |||
) | (-4. * z) |
Definition at line 849 of file fem_tools.c.
#define diffN_MBTETQ7y | ( | x, | |
y, | |||
z | |||
) | (-4. * z) |
Definition at line 850 of file fem_tools.c.
#define diffN_MBTETQ7z | ( | x, | |
y, | |||
z | |||
) | (-8. * z + 4. - 4. * x - 4. * y) |
Definition at line 851 of file fem_tools.c.
#define diffN_MBTETQ8x | ( | x, | |
y, | |||
z | |||
) | (4. * z) |
Definition at line 852 of file fem_tools.c.
#define diffN_MBTETQ8y | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 853 of file fem_tools.c.
#define diffN_MBTETQ8z | ( | x, | |
y, | |||
z | |||
) | (4. * x) |
Definition at line 854 of file fem_tools.c.
#define diffN_MBTETQ9x | ( | x, | |
y, | |||
z | |||
) | (0.) |
Definition at line 855 of file fem_tools.c.
#define diffN_MBTETQ9y | ( | x, | |
y, | |||
z | |||
) | (4. * z) |
Definition at line 856 of file fem_tools.c.
#define diffN_MBTETQ9z | ( | x, | |
y, | |||
z | |||
) | (4. * y) |
Definition at line 857 of file fem_tools.c.
#define N_MBTETQ0 | ( | x, | |
y, | |||
z | |||
) | ((2. * (1. - x - y - z) - 1.) * (1. - x - y - z)) |
Definition at line 818 of file fem_tools.c.
#define N_MBTETQ1 | ( | x, | |
y, | |||
z | |||
) | ((2. * x - 1.) * x) |
Definition at line 819 of file fem_tools.c.
#define N_MBTETQ2 | ( | x, | |
y, | |||
z | |||
) | ((2. * y - 1.) * y) |
Definition at line 820 of file fem_tools.c.
#define N_MBTETQ3 | ( | x, | |
y, | |||
z | |||
) | ((2. * z - 1.) * z) |
Definition at line 821 of file fem_tools.c.
#define N_MBTETQ4 | ( | x, | |
y, | |||
z | |||
) | (4. * (1. - x - y - z) * x) |
Definition at line 822 of file fem_tools.c.
#define N_MBTETQ5 | ( | x, | |
y, | |||
z | |||
) | (4. * x * y) |
Definition at line 823 of file fem_tools.c.
#define N_MBTETQ6 | ( | x, | |
y, | |||
z | |||
) | (4. * (1. - x - y - z) * y) |
Definition at line 824 of file fem_tools.c.
#define N_MBTETQ7 | ( | x, | |
y, | |||
z | |||
) | (4. * (1. - x - y - z) * z) |
Definition at line 825 of file fem_tools.c.
#define N_MBTETQ8 | ( | x, | |
y, | |||
z | |||
) | (4. * x * z) |
Definition at line 826 of file fem_tools.c.
#define N_MBTETQ9 | ( | x, | |
y, | |||
z | |||
) | (4. * y * z) |
Definition at line 827 of file fem_tools.c.
PetscErrorCode Base_scale | ( | __CLPK_doublecomplex * | xnormal, |
__CLPK_doublecomplex * | xs1, | ||
__CLPK_doublecomplex * | xs2 | ||
) |
Definition at line 741 of file fem_tools.c.
PetscErrorCode DeterminantComplexGradient | ( | __CLPK_doublecomplex * | xF, |
__CLPK_doublecomplex * | det_xF | ||
) |
Definition at line 526 of file fem_tools.c.
PetscErrorCode Grundmann_Moeller_integration_points_1D_EDGE | ( | int | rule, |
double * | G_TRI_X, | ||
double * | G_TRI_W | ||
) |
Compute weights and integration points for edge using Grundmann_Moeller rule.
Definition at line 55 of file fem_tools.c.
PetscErrorCode Grundmann_Moeller_integration_points_2D_TRI | ( | int | rule, |
double * | G_TRI_X, | ||
double * | G_TRI_Y, | ||
double * | G_TRI_W | ||
) |
Compute weights and integration points for 2D Triangle using Grundmann_Moeller rule
Definition at line 98 of file fem_tools.c.
PetscErrorCode Grundmann_Moeller_integration_points_3D_TET | ( | int | rule, |
double * | G_TET_X, | ||
double * | G_TET_Y, | ||
double * | G_TET_Z, | ||
double * | G_TET_W | ||
) |
Compute weights and integration points for 3D Tet using Grundmann_Moeller rule
Definition at line 143 of file fem_tools.c.
PetscErrorCode InvertComplexGradient | ( | __CLPK_doublecomplex * | xF | ) |
Definition at line 499 of file fem_tools.c.
PetscErrorCode InvertComplexSymmMatrix3by3 | ( | __CLPK_doublecomplex * | xC | ) |
Definition at line 513 of file fem_tools.c.
PetscErrorCode make_complex_matrix | ( | double * | reA, |
double * | imA, | ||
__CLPK_doublecomplex * | xA | ||
) |
PetscErrorCode MakeComplexTensor | ( | double * | reA, |
double * | imA, | ||
__CLPK_doublecomplex * | xA | ||
) |
Definition at line 487 of file fem_tools.c.
PetscErrorCode Normal_hierarchical | ( | int | order_approx, |
int * | order_edge_approx, | ||
int | order, | ||
int * | order_edge, | ||
double * | diffN, | ||
double * | diffN_face, | ||
double * | diffN_edge[], | ||
double * | dofs, | ||
double * | dofs_edge[], | ||
double * | dofs_face, | ||
double * | idofs, | ||
double * | idofs_edge[], | ||
double * | idofs_face, | ||
__CLPK_doublecomplex * | xnormal, | ||
__CLPK_doublecomplex * | xs1, | ||
__CLPK_doublecomplex * | xs2, | ||
int | gg | ||
) |
PetscErrorCode ShapeDiffMBEDGE | ( | double * | diffN | ) |
Definition at line 771 of file fem_tools.c.
PetscErrorCode ShapeDiffMBTET | ( | double * | diffN | ) |
void ShapeDiffMBTETinvJ_complex | ( | double * | diffN, |
__CLPK_doublecomplex * | invJac, | ||
__CLPK_doublecomplex * | diffNinvJac, | ||
enum CBLAS_TRANSPOSE | Trans | ||
) |
Definition at line 437 of file fem_tools.c.
Definition at line 873 of file fem_tools.c.
PetscErrorCode ShapeDiffMBTETQ_GAUSS | ( | double * | diffN, |
const double * | X, | ||
const double * | Y, | ||
const double * | Z, | ||
const int | G_DIM | ||
) |
Definition at line 927 of file fem_tools.c.
PetscErrorCode ShapeDiffMBTRI | ( | double * | diffN | ) |
PetscErrorCode ShapeDiffMBTRIQ | ( | double * | diffN, |
const double * | X, | ||
const double * | Y, | ||
const int | G_DIM | ||
) |
Definition at line 795 of file fem_tools.c.
PetscErrorCode ShapeFaceBaseMBTRI | ( | double * | diffN, |
const double * | coords, | ||
double * | normal, | ||
double * | s1, | ||
double * | s2 | ||
) |
Definition at line 204 of file fem_tools.c.
PetscErrorCode ShapeFaceDiffNormalMBTRI | ( | double * | diffN, |
const double * | coords, | ||
double * | diff_normal | ||
) |
calculate derivative of normal in respect to nodal positions
Definition at line 237 of file fem_tools.c.
calculate face normal
diffN | derivatives of shape functions |
coords | is position of the nodes |
normal | vector |
Definition at line 229 of file fem_tools.c.
PetscErrorCode ShapeFaceNormalMBTRI_complex | ( | double * | diffN, |
__CLPK_doublecomplex * | xcoords, | ||
__CLPK_doublecomplex * | xnormal | ||
) |
Definition at line 452 of file fem_tools.c.
PetscErrorCode ShapeInvJacVolume | ( | double * | jac | ) |
Definition at line 39 of file fem_tools.c.
Definition at line 967 of file fem_tools.c.
Definition at line 761 of file fem_tools.c.
PetscErrorCode ShapeMBTET | ( | double * | N, |
const double * | G_X, | ||
const double * | G_Y, | ||
const double * | G_Z, | ||
int | DIM | ||
) |
PetscErrorCode ShapeMBTET_inverse | ( | double * | N, |
double * | diffN, | ||
const double * | elem_coords, | ||
const double * | glob_coords, | ||
double * | loc_coords | ||
) |
calculate local coordinates for given global coordinates
new version for multiple points need to be implemented
Definition at line 335 of file fem_tools.c.
Definition at line 858 of file fem_tools.c.
PetscErrorCode ShapeMBTETQ_detJac_at_Gauss_Points | ( | double * | detJac_at_Gauss_Points, |
const double * | diffN, | ||
const double * | coords, | ||
int | G_DIM | ||
) |
Definition at line 979 of file fem_tools.c.
PetscErrorCode ShapeMBTETQ_GAUSS | ( | double * | N, |
const double * | X, | ||
const double * | Y, | ||
const double * | Z, | ||
const int | G_DIM | ||
) |
Definition at line 908 of file fem_tools.c.
PetscErrorCode ShapeMBTETQ_inverse | ( | double * | N, |
double * | diffN, | ||
const double * | elem_coords, | ||
const double * | glob_coords, | ||
double * | loc_coords, | ||
const double | eps | ||
) |
Definition at line 1007 of file fem_tools.c.
calculate shape functions on triangle
N | shape function array |
X | array of Gauss X coordinates |
Y | array of Gauss Y coordinates |
G_DIM | number of Gauss points |
Definition at line 182 of file fem_tools.c.
PetscErrorCode ShapeMBTRI_inverse | ( | double * | N, |
double * | diffN, | ||
const double * | elem_coords, | ||
const double * | glob_coords, | ||
double * | loc_coords | ||
) |
calculate local coordinates of triangle element for given global coordinates in 2D (Assume e.g. z=0)
\[ \left[\begin{array}{cc} \frac{\partial N_{1}}{\partial\xi}x_{N_{1}}+\frac{\partial N_{2}}{\partial\xi}x_{N_{2}}+\frac{\partial N_{3}}{\partial\xi}x_{N_{3}} & \frac{\partial N_{1}}{\partial\eta}x_{N_{1}}+\frac{\partial N_{2}}{\partial\eta}x_{N_{2}}+\frac{\partial N_{3}}{\partial\eta}x_{N_{3}}\\ \frac{\partial N_{1}}{\partial\xi}y_{N_{1}}+\frac{\partial N_{2}}{\partial\xi}y_{N_{2}}+\frac{\partial N_{3}}{\partial\xi}y_{N_{3}} & \frac{\partial N_{1}}{\partial\eta}y_{N_{1}}+\frac{\partial N_{2}}{\partial\eta}y_{N_{2}}+\frac{\partial N_{3}}{\partial\eta}y_{N_{3}} \end{array}\right]\left\{ \begin{array}{c} \xi\\ \eta \end{array}\right\} =\left\{ \begin{array}{c} x_{gp}-\left(N_{1}x_{N_{1}}+N_{2}x_{N_{2}}+N_{3}x_{N_{3}}\right)\\ y_{gp}-\left(N_{1}y_{N_{1}}+N_{2}y_{N_{2}}+N_{3}y_{N_{3}}\right) \end{array}\right\} \]
/
N | shape function array / |
diffN | array of shape function derivative w.r.t to local coordinates / |
elem_coords | global coordinates of element / |
glob_coords | global coordinates of required point / |
loc_coords | local coordinates of required point |
Definition at line 380 of file fem_tools.c.
Definition at line 780 of file fem_tools.c.
double ShapeVolumeMBTETQ | ( | const double * | diffN, |
const double * | coords, | ||
int | G_DIM, | ||
double * | G_TET_W | ||
) |
Definition at line 993 of file fem_tools.c.
|
static |
Definition at line 20 of file fem_tools.c.