ngsolve 6.2.2501.post47.dev1__cp312-cp312-macosx_10_15_universal2.whl → 6.2.2501.post55.dev1__cp312-cp312-macosx_10_15_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ngsolve might be problematic. Click here for more details.
- netgen/include/arnoldi.hpp +55 -0
- netgen/include/bandmatrix.hpp +334 -0
- netgen/include/basematrix.hpp +957 -0
- netgen/include/basevector.hpp +1268 -0
- netgen/include/bdbequations.hpp +2752 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bessel.hpp +1064 -0
- netgen/include/bilinearform.hpp +963 -0
- netgen/include/bla.hpp +29 -0
- netgen/include/blockalloc.hpp +95 -0
- netgen/include/blockjacobi.hpp +316 -0
- netgen/include/bspline.hpp +114 -0
- netgen/include/calcinverse.hpp +141 -0
- netgen/include/cg.hpp +368 -0
- netgen/include/chebyshev.hpp +44 -0
- netgen/include/cholesky.hpp +720 -0
- netgen/include/clapack.h +7254 -0
- netgen/include/code_generation.hpp +296 -0
- netgen/include/coefficient.hpp +2033 -0
- netgen/include/coefficient_impl.hpp +19 -0
- netgen/include/coefficient_stdmath.hpp +167 -0
- netgen/include/commutingAMG.hpp +106 -0
- netgen/include/comp.hpp +79 -0
- netgen/include/compatibility.hpp +41 -0
- netgen/include/complex_wrapper.hpp +73 -0
- netgen/include/compressedfespace.hpp +110 -0
- netgen/include/contact.hpp +231 -0
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/differentialoperator.hpp +276 -0
- netgen/include/diffop.hpp +1286 -0
- netgen/include/diffop_impl.hpp +326 -0
- netgen/include/discontinuous.hpp +84 -0
- netgen/include/dump.hpp +949 -0
- netgen/include/eigen.hpp +60 -0
- netgen/include/eigensystem.hpp +18 -0
- netgen/include/elasticity_equations.hpp +595 -0
- netgen/include/elementbyelement.hpp +195 -0
- netgen/include/elementtopology.hpp +1760 -0
- netgen/include/elementtransformation.hpp +339 -0
- netgen/include/evalfunc.hpp +405 -0
- netgen/include/expr.hpp +1655 -0
- netgen/include/facetfe.hpp +175 -0
- netgen/include/facetfespace.hpp +178 -0
- netgen/include/facethofe.hpp +111 -0
- netgen/include/facetsurffespace.hpp +112 -0
- netgen/include/fe_interfaces.hpp +32 -0
- netgen/include/fem.hpp +87 -0
- netgen/include/fesconvert.hpp +14 -0
- netgen/include/fespace.hpp +1445 -0
- netgen/include/finiteelement.hpp +286 -0
- netgen/include/globalinterfacespace.hpp +77 -0
- netgen/include/globalspace.hpp +115 -0
- netgen/include/gridfunction.hpp +525 -0
- netgen/include/h1amg.hpp +41 -0
- netgen/include/h1hofe.hpp +188 -0
- netgen/include/h1hofe_impl.hpp +1262 -0
- netgen/include/h1hofefo.hpp +148 -0
- netgen/include/h1hofefo_impl.hpp +185 -0
- netgen/include/h1hofespace.hpp +167 -0
- netgen/include/h1lofe.hpp +1237 -0
- netgen/include/h1lumping.hpp +35 -0
- netgen/include/hcurl_equations.hpp +1352 -0
- netgen/include/hcurlcurlfe.hpp +2221 -0
- netgen/include/hcurlcurlfespace.hpp +78 -0
- netgen/include/hcurlfe.hpp +259 -0
- netgen/include/hcurlfe_utils.hpp +107 -0
- netgen/include/hcurlhdiv_dshape.hpp +857 -0
- netgen/include/hcurlhdivfes.hpp +308 -0
- netgen/include/hcurlhofe.hpp +175 -0
- netgen/include/hcurlhofe_impl.hpp +1871 -0
- netgen/include/hcurlhofespace.hpp +193 -0
- netgen/include/hcurllofe.hpp +1146 -0
- netgen/include/hdiv_equations.hpp +865 -0
- netgen/include/hdivdivfe.hpp +2923 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +206 -0
- netgen/include/hdivfe_utils.hpp +716 -0
- netgen/include/hdivfes.hpp +75 -0
- netgen/include/hdivhofe.hpp +447 -0
- netgen/include/hdivhofe_impl.hpp +1107 -0
- netgen/include/hdivhofefo.hpp +229 -0
- netgen/include/hdivhofespace.hpp +175 -0
- netgen/include/hdivhosurfacefespace.hpp +106 -0
- netgen/include/hdivlofe.hpp +773 -0
- netgen/include/hidden.hpp +74 -0
- netgen/include/householder.hpp +181 -0
- netgen/include/hypre_ams_precond.hpp +123 -0
- netgen/include/hypre_precond.hpp +73 -0
- netgen/include/integrator.hpp +2024 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2541 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +136 -0
- netgen/include/l2hofe.hpp +193 -0
- netgen/include/l2hofe_impl.hpp +564 -0
- netgen/include/l2hofefo.hpp +542 -0
- netgen/include/l2hofespace.hpp +344 -0
- netgen/include/la.hpp +38 -0
- netgen/include/linearform.hpp +266 -0
- netgen/include/matrix.hpp +2140 -0
- netgen/include/memusage.hpp +41 -0
- netgen/include/meshaccess.hpp +1358 -0
- netgen/include/mgpre.hpp +204 -0
- netgen/include/mptools.hpp +2187 -0
- netgen/include/multigrid.hpp +42 -0
- netgen/include/multivector.hpp +447 -0
- netgen/include/mumpsinverse.hpp +187 -0
- netgen/include/mycomplex.hpp +361 -0
- netgen/include/ng_lapack.hpp +1661 -0
- netgen/include/ngblas.hpp +1109 -0
- netgen/include/ngs_defines.hpp +30 -0
- netgen/include/ngs_stdcpp_include.hpp +106 -0
- netgen/include/ngs_utils.hpp +121 -0
- netgen/include/ngsobject.hpp +1019 -0
- netgen/include/ngsstream.hpp +113 -0
- netgen/include/ngstd.hpp +72 -0
- netgen/include/nodalhofe.hpp +96 -0
- netgen/include/nodalhofe_impl.hpp +141 -0
- netgen/include/normalfacetfe.hpp +223 -0
- netgen/include/normalfacetfespace.hpp +98 -0
- netgen/include/normalfacetsurfacefespace.hpp +84 -0
- netgen/include/order.hpp +251 -0
- netgen/include/parallel_matrices.hpp +222 -0
- netgen/include/paralleldofs.hpp +340 -0
- netgen/include/parallelngs.hpp +23 -0
- netgen/include/parallelvector.hpp +269 -0
- netgen/include/pardisoinverse.hpp +200 -0
- netgen/include/periodic.hpp +125 -0
- netgen/include/plateaufespace.hpp +25 -0
- netgen/include/pml.hpp +275 -0
- netgen/include/pmltrafo.hpp +631 -0
- netgen/include/postproc.hpp +142 -0
- netgen/include/precomp.hpp +60 -0
- netgen/include/preconditioner.hpp +602 -0
- netgen/include/prolongation.hpp +235 -0
- netgen/include/python_comp.hpp +107 -0
- netgen/include/python_fem.hpp +89 -0
- netgen/include/python_linalg.hpp +58 -0
- netgen/include/python_ngstd.hpp +385 -0
- netgen/include/recursive_pol.hpp +4844 -0
- netgen/include/recursive_pol_tet.hpp +395 -0
- netgen/include/recursive_pol_trig.hpp +492 -0
- netgen/include/reorderedfespace.hpp +81 -0
- netgen/include/sample_sort.hpp +105 -0
- netgen/include/scalarfe.hpp +335 -0
- netgen/include/shapefunction_utils.hpp +113 -0
- netgen/include/simd_complex.hpp +284 -0
- netgen/include/smoother.hpp +253 -0
- netgen/include/solve.hpp +89 -0
- netgen/include/sparsecholesky.hpp +313 -0
- netgen/include/sparsematrix.hpp +1038 -0
- netgen/include/sparsematrix_dyn.hpp +91 -0
- netgen/include/sparsematrix_impl.hpp +920 -0
- netgen/include/special_matrix.hpp +461 -0
- netgen/include/specialelement.hpp +125 -0
- netgen/include/statushandler.hpp +33 -0
- netgen/include/stringops.hpp +12 -0
- netgen/include/superluinverse.hpp +136 -0
- netgen/include/symbolicintegrator.hpp +849 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +224 -0
- netgen/include/tangentialfacetfespace.hpp +106 -0
- netgen/include/tensor.hpp +522 -0
- netgen/include/tensorcoefficient.hpp +446 -0
- netgen/include/tensorproductintegrator.hpp +113 -0
- netgen/include/thcurlfe.hpp +128 -0
- netgen/include/thcurlfe_impl.hpp +380 -0
- netgen/include/thdivfe.hpp +80 -0
- netgen/include/thdivfe_impl.hpp +426 -0
- netgen/include/tpdiffop.hpp +461 -0
- netgen/include/tpfes.hpp +133 -0
- netgen/include/tpintrule.hpp +224 -0
- netgen/include/triangular.hpp +465 -0
- netgen/include/tscalarfe.hpp +245 -0
- netgen/include/tscalarfe_impl.hpp +1029 -0
- netgen/include/umfpackinverse.hpp +148 -0
- netgen/include/vector.hpp +1219 -0
- netgen/include/voxelcoefficientfunction.hpp +41 -0
- netgen/include/vtkoutput.hpp +198 -0
- netgen/include/vvector.hpp +208 -0
- netgen/include/webgui.hpp +92 -0
- netgen/libngbla.dylib +0 -0
- netgen/libngcomp.dylib +0 -0
- netgen/libngfem.dylib +0 -0
- netgen/libngla.dylib +0 -0
- netgen/libngsolve.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/__init__.pyi +231 -0
- ngsolve/bla.pyi +1139 -0
- ngsolve/bvp.pyi +32 -0
- ngsolve/cmake/NGSolveConfig.cmake +102 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +69 -0
- ngsolve/cmake/ngsolve-targets.cmake +163 -0
- ngsolve/comp/__init__.pyi +5382 -0
- ngsolve/comp/pml.pyi +89 -0
- ngsolve/config/__init__.py +1 -0
- ngsolve/config/__init__.pyi +43 -0
- ngsolve/config/__main__.py +4 -0
- ngsolve/config/config.py +60 -0
- ngsolve/config/config.pyi +45 -0
- ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve/demos/__init__.py +0 -0
- ngsolve/demos/howto/__init__.py +0 -0
- ngsolve/demos/howto/hhj.py +44 -0
- ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve/demos/howto/mixed.py +30 -0
- ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve/demos/howto/pickling.py +26 -0
- ngsolve/demos/howto/pml.py +31 -0
- ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve/demos/intro/__init__.py +0 -0
- ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve/demos/intro/cmagnet.py +62 -0
- ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve/demos/intro/poisson.py +41 -0
- ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve/directsolvers.pyi +15 -0
- ngsolve/eigenvalues.pyi +30 -0
- ngsolve/fem.pyi +1707 -0
- ngsolve/krylovspace.pyi +301 -0
- ngsolve/la.pyi +1218 -0
- ngsolve/ngslib.so +0 -0
- ngsolve/ngstd.pyi +58 -0
- ngsolve/nonlinearsolvers.pyi +97 -0
- ngsolve/preconditioners.pyi +6 -0
- ngsolve/solve.pyi +108 -0
- ngsolve/solvers.pyi +14 -0
- ngsolve/timestepping.pyi +27 -0
- ngsolve/timing.pyi +54 -0
- ngsolve/utils.pyi +279 -0
- ngsolve-6.2.2501.post55.dev1.data/data/Netgen.icns +0 -0
- ngsolve-6.2.2501.post55.dev1.data/data/bin/ngscxx +17 -0
- ngsolve-6.2.2501.post55.dev1.data/data/bin/ngsld +13 -0
- ngsolve-6.2.2501.post55.dev1.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2501.post55.dev1.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2501.post55.dev1.data/data/share/ngsolve/square.vol +149 -0
- {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/METADATA +2 -2
- ngsolve-6.2.2501.post55.dev1.dist-info/RECORD +304 -0
- ngsolve-6.2.2501.post47.dev1.dist-info/RECORD +0 -25
- {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/LICENSE +0 -0
- {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/WHEEL +0 -0
- {ngsolve-6.2.2501.post47.dev1.dist-info → ngsolve-6.2.2501.post55.dev1.dist-info}/top_level.txt +0 -0
netgen/include/eigen.hpp
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#ifndef FILE_EIGEN
|
|
2
|
+
#define FILE_EIGEN
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: eigen.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 5. Jul. 96 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#include "basematrix.hpp"
|
|
12
|
+
|
|
13
|
+
namespace ngla
|
|
14
|
+
{
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
Lanczos Eigen system calculation
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
class NGS_DLL_HEADER EigenSystem
|
|
21
|
+
{
|
|
22
|
+
///
|
|
23
|
+
const BaseMatrix *a, *c;
|
|
24
|
+
///
|
|
25
|
+
Array<double> ai, bi;
|
|
26
|
+
///
|
|
27
|
+
double prec;
|
|
28
|
+
///
|
|
29
|
+
int maxsteps;
|
|
30
|
+
|
|
31
|
+
public:
|
|
32
|
+
///
|
|
33
|
+
EigenSystem (const BaseMatrix & aa);
|
|
34
|
+
///
|
|
35
|
+
EigenSystem (const BaseMatrix & aa, const BaseMatrix & ac);
|
|
36
|
+
///
|
|
37
|
+
void SetMatrix (const BaseMatrix & aa);
|
|
38
|
+
///
|
|
39
|
+
void SetPrecond (const BaseMatrix & ac);
|
|
40
|
+
///
|
|
41
|
+
void SetMaxSteps (int amaxsteps);
|
|
42
|
+
///
|
|
43
|
+
void SetPrecision (double aprec);
|
|
44
|
+
|
|
45
|
+
///
|
|
46
|
+
int Calc();
|
|
47
|
+
|
|
48
|
+
///
|
|
49
|
+
double EigenValue (int nr) const;
|
|
50
|
+
///
|
|
51
|
+
double MaxEigenValue () const;
|
|
52
|
+
///
|
|
53
|
+
int NumEigenValues () const;
|
|
54
|
+
///
|
|
55
|
+
void PrintEigenValues (ostream & ost) const;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#endif
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#ifndef EIGENSYSTEM_HPP
|
|
2
|
+
#define EIGENSYSTEM_HPP
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
namespace ngbla
|
|
6
|
+
{
|
|
7
|
+
|
|
8
|
+
/// Computes eigenvalues and vectors of the symmetric matrix mat.
|
|
9
|
+
extern NGS_DLL_HEADER void
|
|
10
|
+
CalcEigenSystem (const FlatMatrix<double> mat,
|
|
11
|
+
FlatVector<double> lami,
|
|
12
|
+
FlatMatrix<double> eigenvecs);
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#endif
|
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
#ifndef FILE_ELASTICITY_EQUATIONS
|
|
2
|
+
#define FILE_ELASTICITY_EQUATIONS
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: elasticity_equations.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 10. Feb. 2002 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
namespace ngfem
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
|
|
16
|
+
Elasticity integrators:
|
|
17
|
+
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
/* ******************** Elasticity ************************** */
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
/// Elasticity operator $(e_{11},e_{22},2 e_{12})$
|
|
29
|
+
template <int D, typename FEL = ScalarFiniteElement<D> >
|
|
30
|
+
class DiffOpStrain : public DiffOp<DiffOpStrain<D, FEL> >
|
|
31
|
+
{
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
template <typename FEL>
|
|
35
|
+
class DiffOpStrain<2, FEL> : public DiffOp<DiffOpStrain<2, FEL> >
|
|
36
|
+
{
|
|
37
|
+
public:
|
|
38
|
+
enum { DIM = 2 };
|
|
39
|
+
enum { DIM_SPACE = 2 };
|
|
40
|
+
enum { DIM_ELEMENT = 2 };
|
|
41
|
+
enum { DIM_DMAT = 3 };
|
|
42
|
+
enum { DIFFORDER = 1 };
|
|
43
|
+
|
|
44
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
45
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
46
|
+
MAT && mat, LocalHeap & lh)
|
|
47
|
+
{
|
|
48
|
+
HeapReset hr(lh);
|
|
49
|
+
typedef typename remove_reference_t<MAT>::TSCAL TSCAL;
|
|
50
|
+
int nd = fel.GetNDof();
|
|
51
|
+
|
|
52
|
+
FlatMatrixFixHeight<2, TSCAL> grad (nd, lh);
|
|
53
|
+
FlatMatrixFixWidth<2> dshape(nd, lh);
|
|
54
|
+
static_cast<const FEL&>(fel).CalcDShape(mip.IP(), dshape);
|
|
55
|
+
grad = Trans (mip.GetJacobianInverse ()) * Trans (dshape);
|
|
56
|
+
/*
|
|
57
|
+
grad = Trans (mip.GetJacobianInverse ()) *
|
|
58
|
+
Trans (static_cast<const FEL&>(fel).GetDShape(mip.IP(), lh));
|
|
59
|
+
*/
|
|
60
|
+
mat.AddSize(3, fel.GetNDof()) = TSCAL (0);
|
|
61
|
+
for (int i = 0; i < nd; i++)
|
|
62
|
+
{
|
|
63
|
+
mat(0, DIM*i ) = grad(0, i);
|
|
64
|
+
mat(1, DIM*i+1) = grad(1, i);
|
|
65
|
+
mat(2, DIM*i ) = grad(1, i);
|
|
66
|
+
mat(2, DIM*i+1) = grad(0, i);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
template <typename FEL>
|
|
75
|
+
class DiffOpStrain<3, FEL> : public DiffOp<DiffOpStrain<3, FEL> >
|
|
76
|
+
{
|
|
77
|
+
public:
|
|
78
|
+
enum { DIM = 3 };
|
|
79
|
+
enum { DIM_SPACE = 3 };
|
|
80
|
+
enum { DIM_ELEMENT = 3 };
|
|
81
|
+
enum { DIM_DMAT = 6 };
|
|
82
|
+
enum { DIFFORDER = 1 };
|
|
83
|
+
|
|
84
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
85
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
86
|
+
MAT && mat, LocalHeap & lh)
|
|
87
|
+
{
|
|
88
|
+
typedef typename remove_reference_t<MAT>::TSCAL TSCAL;
|
|
89
|
+
|
|
90
|
+
HeapReset hr(lh);
|
|
91
|
+
/*
|
|
92
|
+
mat = TSCAL(0);
|
|
93
|
+
static_cast<const FEL &>(fel).
|
|
94
|
+
CalcDShape (mip.IP(),
|
|
95
|
+
[&](int i, Vec<3> gradref)
|
|
96
|
+
{
|
|
97
|
+
Vec<3,TSCAL> grad =
|
|
98
|
+
Trans (mip.GetJacobianInverse ()) * gradref;
|
|
99
|
+
|
|
100
|
+
mat(0, 3*i ) = grad(0);
|
|
101
|
+
mat(1, 3*i+1) = grad(1);
|
|
102
|
+
mat(2, 3*i+2) = grad(2);
|
|
103
|
+
|
|
104
|
+
mat(3, 3*i ) = grad(1);
|
|
105
|
+
mat(3, 3*i+1) = grad(0);
|
|
106
|
+
|
|
107
|
+
mat(4, 3*i ) = grad(2);
|
|
108
|
+
mat(4, 3*i+2) = grad(0);
|
|
109
|
+
|
|
110
|
+
mat(5, 3*i+1) = grad(2);
|
|
111
|
+
mat(5, 3*i+2) = grad(1);
|
|
112
|
+
});
|
|
113
|
+
*/
|
|
114
|
+
int nd = fel.GetNDof();
|
|
115
|
+
FlatMatrixFixHeight<3,TSCAL> grad (nd, lh);
|
|
116
|
+
FlatMatrixFixWidth<3> dshape(nd, lh);
|
|
117
|
+
static_cast<const FEL&>(fel).CalcDShape(mip.IP(), dshape);
|
|
118
|
+
grad = Trans (mip.GetJacobianInverse ()) * Trans (dshape);
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
grad = Trans (mip.GetJacobianInverse ()) *
|
|
122
|
+
Trans (static_cast<const FEL &>(fel).GetDShape(mip.IP(),lh));
|
|
123
|
+
*/
|
|
124
|
+
mat.AddSize(6, nd) = TSCAL (0);
|
|
125
|
+
for (int i = 0; i < nd; i++)
|
|
126
|
+
{
|
|
127
|
+
mat(0, DIM*i ) = grad(0, i);
|
|
128
|
+
mat(1, DIM*i+1) = grad(1, i);
|
|
129
|
+
mat(2, DIM*i+2) = grad(2, i);
|
|
130
|
+
|
|
131
|
+
mat(3, DIM*i ) = grad(1, i);
|
|
132
|
+
mat(3, DIM*i+1) = grad(0, i);
|
|
133
|
+
|
|
134
|
+
mat(4, DIM*i ) = grad(2, i);
|
|
135
|
+
mat(4, DIM*i+2) = grad(0, i);
|
|
136
|
+
|
|
137
|
+
mat(5, DIM*i+1) = grad(2, i);
|
|
138
|
+
mat(5, DIM*i+2) = grad(1, i);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
#ifdef SERVICE
|
|
145
|
+
template <typename AFEL, typename MAT>
|
|
146
|
+
static void GenerateMatrix (const AFEL & fel,
|
|
147
|
+
const MappedIntegrationPoint<3,3> & mip,
|
|
148
|
+
MAT & mat, LocalHeap & lh)
|
|
149
|
+
{
|
|
150
|
+
typedef typename MAT::TSCAL TSCAL;
|
|
151
|
+
|
|
152
|
+
int nd = fel.GetNDof();
|
|
153
|
+
HeapReset hr(lh);
|
|
154
|
+
|
|
155
|
+
mat = TSCAL(0);
|
|
156
|
+
static_cast<const FEL &>(fel).
|
|
157
|
+
CalcMappedDShape (mip,
|
|
158
|
+
[&](int i, Vec<3> grad)
|
|
159
|
+
{
|
|
160
|
+
mat(0, 3*i ) = grad(0);
|
|
161
|
+
mat(1, 3*i+1) = grad(1);
|
|
162
|
+
mat(2, 3*i+2) = grad(2);
|
|
163
|
+
|
|
164
|
+
mat(3, 3*i ) = grad(1);
|
|
165
|
+
mat(3, 3*i+1) = grad(0);
|
|
166
|
+
|
|
167
|
+
mat(4, 3*i ) = grad(2);
|
|
168
|
+
mat(4, 3*i+2) = grad(0);
|
|
169
|
+
|
|
170
|
+
mat(5, 3*i+1) = grad(2);
|
|
171
|
+
mat(5, 3*i+2) = grad(1);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
/*
|
|
175
|
+
FlatMatrixFixWidth<3> grad (nd, lh);
|
|
176
|
+
static_cast<const FEL &>(fel).CalcMappedDShape (mip, grad);
|
|
177
|
+
|
|
178
|
+
mat = TSCAL (0);
|
|
179
|
+
for (int i = 0; i < nd; i++)
|
|
180
|
+
{
|
|
181
|
+
mat(0, DIM*i ) = grad(i, 0);
|
|
182
|
+
mat(1, DIM*i+1) = grad(i, 1);
|
|
183
|
+
mat(2, DIM*i+2) = grad(i, 2);
|
|
184
|
+
|
|
185
|
+
mat(3, DIM*i ) = grad(i, 1);
|
|
186
|
+
mat(3, DIM*i+1) = grad(i, 0);
|
|
187
|
+
|
|
188
|
+
mat(4, DIM*i ) = grad(i, 2);
|
|
189
|
+
mat(4, DIM*i+2) = grad(i, 0);
|
|
190
|
+
|
|
191
|
+
mat(5, DIM*i+1) = grad(i, 2);
|
|
192
|
+
mat(5, DIM*i+2) = grad(i, 1);
|
|
193
|
+
}
|
|
194
|
+
*/
|
|
195
|
+
}
|
|
196
|
+
#endif
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
/// 2D plane strain, and 3D
|
|
202
|
+
template <int DIM>
|
|
203
|
+
class ElasticityDMat : public DMatOp<ElasticityDMat<DIM>,DIM*(DIM+1)/2>
|
|
204
|
+
{
|
|
205
|
+
public:
|
|
206
|
+
shared_ptr<CoefficientFunction> coefe;
|
|
207
|
+
shared_ptr<CoefficientFunction> coefnu;
|
|
208
|
+
public:
|
|
209
|
+
enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
|
|
210
|
+
|
|
211
|
+
ElasticityDMat (shared_ptr<CoefficientFunction> acoefe,
|
|
212
|
+
shared_ptr<CoefficientFunction> acoefnu)
|
|
213
|
+
: coefe(acoefe), coefnu(acoefnu) { ; }
|
|
214
|
+
|
|
215
|
+
template <typename SCAL>
|
|
216
|
+
static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
template <typename FEL, typename MIP, typename MAT>
|
|
220
|
+
void GenerateMatrix (const FEL & fel, const MIP & mip,
|
|
221
|
+
MAT & mat, LocalHeap & lh) const
|
|
222
|
+
{
|
|
223
|
+
mat = 0;
|
|
224
|
+
double nu = Evaluate (*coefnu, mip);
|
|
225
|
+
double e = Evaluate (*coefe, mip);
|
|
226
|
+
int i;
|
|
227
|
+
for (i = 0; i < DIM; i++)
|
|
228
|
+
{
|
|
229
|
+
mat(i,i) = 1-nu;
|
|
230
|
+
for (int j = 0; j < i; j++)
|
|
231
|
+
mat(i,j) = mat(j,i) = nu;
|
|
232
|
+
}
|
|
233
|
+
for (i = DIM; i < (DIM*(DIM+1)/2); i++)
|
|
234
|
+
mat(i,i) = 0.5 * (1-2*nu);
|
|
235
|
+
|
|
236
|
+
mat *= (e / ((1 + nu) * (1 - 2 * nu)));
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
///
|
|
242
|
+
template <int DIM>
|
|
243
|
+
class OrthotropicElasticityDMat : public DMatOp<OrthotropicElasticityDMat<DIM>,
|
|
244
|
+
DIM*(DIM+1)/2>
|
|
245
|
+
{
|
|
246
|
+
public:
|
|
247
|
+
CoefficientFunction * coefE1; // Young's moduli
|
|
248
|
+
CoefficientFunction * coefE2;
|
|
249
|
+
CoefficientFunction * coefE3;
|
|
250
|
+
CoefficientFunction * coefnu12; // Poisson's ratios (nu21/E2 = nu12/E1, nu31/E3 = nu13/E1, nu32/E3 = nu23/E2)
|
|
251
|
+
CoefficientFunction * coefnu13;
|
|
252
|
+
CoefficientFunction * coefnu23;
|
|
253
|
+
CoefficientFunction * coefG12; // shear moduil
|
|
254
|
+
CoefficientFunction * coefG13;
|
|
255
|
+
CoefficientFunction * coefG23;
|
|
256
|
+
public:
|
|
257
|
+
enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
|
|
258
|
+
|
|
259
|
+
OrthotropicElasticityDMat (const Array<shared_ptr<CoefficientFunction>> & coefs)
|
|
260
|
+
{
|
|
261
|
+
cerr << "OrthotropicElasticityDMat currently not available" << endl;
|
|
262
|
+
}
|
|
263
|
+
/*
|
|
264
|
+
OrthotropicElasticityDMat (CoefficientFunction * acoefE1,
|
|
265
|
+
CoefficientFunction * acoefE2,
|
|
266
|
+
CoefficientFunction * acoefE3,
|
|
267
|
+
CoefficientFunction * acoefnu12,
|
|
268
|
+
CoefficientFunction * acoefnu13,
|
|
269
|
+
CoefficientFunction * acoefnu23,
|
|
270
|
+
CoefficientFunction * acoefG12,
|
|
271
|
+
CoefficientFunction * acoefG13,
|
|
272
|
+
CoefficientFunction * acoefG23)
|
|
273
|
+
: coefE1(acoefE1), coefE2(acoefE2), coefE3(acoefE3),
|
|
274
|
+
coefnu12(acoefnu12), coefnu13(acoefnu13), coefnu23(acoefnu23),
|
|
275
|
+
coefG12(acoefG12), coefG13(acoefG13), coefG23(acoefG23) { ; }
|
|
276
|
+
*/
|
|
277
|
+
|
|
278
|
+
template <typename SCAL>
|
|
279
|
+
static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
|
|
280
|
+
|
|
281
|
+
template <typename FEL, typename MIP, typename MAT>
|
|
282
|
+
void GenerateMatrix (const FEL & fel, const MIP & mip,
|
|
283
|
+
MAT & mat, LocalHeap & lh) const
|
|
284
|
+
{
|
|
285
|
+
mat = 0;
|
|
286
|
+
const double E1 = Evaluate (*coefE1, mip);
|
|
287
|
+
const double E2 = Evaluate (*coefE2, mip);
|
|
288
|
+
const double E3 = Evaluate (*coefE3, mip);
|
|
289
|
+
|
|
290
|
+
if(E1 < 1.e-5 || E2 < 1.e-5 || E3 < 1.e-5) return;
|
|
291
|
+
|
|
292
|
+
const double nu12 = Evaluate (*coefnu12, mip);
|
|
293
|
+
const double nu21 = nu12*(E2/E1);
|
|
294
|
+
const double nu13 = Evaluate (*coefnu13, mip);
|
|
295
|
+
const double nu31 = nu13*(E3/E1);
|
|
296
|
+
const double nu23 = Evaluate (*coefnu23, mip);
|
|
297
|
+
const double nu32 = nu23*(E3/E2);
|
|
298
|
+
|
|
299
|
+
if(nu12 < 0 || nu12 > 0.5 || nu21 < 0 || nu21 > 0.5 || nu13 < 0 || nu13 > 0.5 || nu31 < 0 || nu31 > 0.5 || nu23 < 0 || nu23 > 0.5 || nu32 < 0 || nu32 > 0.5)
|
|
300
|
+
{
|
|
301
|
+
cerr << "WARNING: Bad choice for elasticity constants: " << endl
|
|
302
|
+
<< "E1 " << E1 << " E2 " << E2 << " E3 " << E3 << endl
|
|
303
|
+
<< "nu12 " << nu12 << " nu21 " << nu21 << " nu13 " << nu13 << " nu31 " << nu31 << " nu23 " << nu23 << " nu32 " << nu32 <<endl;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const double denom = 1. - nu13*nu32*nu21 - nu12*nu23*nu31 - nu12*nu21 - nu13*nu31 - nu23*nu32;
|
|
307
|
+
|
|
308
|
+
mat(0,0) = E1*(1.-nu23*nu32)/denom;
|
|
309
|
+
mat(1,0) = mat(0,1) = E2*(nu12+nu13*nu32)/denom; mat(1,1) = E2*(1.-nu13*nu31)/denom;
|
|
310
|
+
mat(2,0) = mat(0,2) = E3*(nu13+nu12*nu23)/denom; mat(2,1) = mat(1,2) = E3*(nu23+nu13*nu21)/denom; mat(2,2) = E3*(1.-nu12*nu21)/denom;
|
|
311
|
+
|
|
312
|
+
mat(3,3) = Evaluate (*coefG12, mip);
|
|
313
|
+
mat(4,4) = Evaluate (*coefG13, mip);
|
|
314
|
+
mat(5,5) = Evaluate (*coefG23, mip);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
/// Orthotropic Elasticity DMat with Cylindrical Coordinates
|
|
319
|
+
template <int DIM>
|
|
320
|
+
class OrthotropicCylElasticityDMat : public DMatOp<OrthotropicElasticityDMat<DIM>,
|
|
321
|
+
DIM*(DIM+1)/2>
|
|
322
|
+
{
|
|
323
|
+
public:
|
|
324
|
+
CoefficientFunction * coefE1; // Young's moduli
|
|
325
|
+
CoefficientFunction * coefE2;
|
|
326
|
+
CoefficientFunction * coefE3;
|
|
327
|
+
CoefficientFunction * coefnu12; // Poisson's ratios (nu21/E2 = nu12/E1, nu31/E3 = nu13/E1, nu32/E3 = nu23/E2)
|
|
328
|
+
CoefficientFunction * coefnu13;
|
|
329
|
+
CoefficientFunction * coefnu23;
|
|
330
|
+
CoefficientFunction * coefG12; // shear moduil
|
|
331
|
+
CoefficientFunction * coefG13;
|
|
332
|
+
CoefficientFunction * coefG23;
|
|
333
|
+
CoefficientFunction * coefUseCyl; // if 1 ... use cylindrical coordinates, if 0 ... standard ortot.
|
|
334
|
+
public:
|
|
335
|
+
enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
|
|
336
|
+
|
|
337
|
+
OrthotropicCylElasticityDMat (const Array<shared_ptr<CoefficientFunction>> & coefs)
|
|
338
|
+
{
|
|
339
|
+
cerr << "OrthotropicCylElasticityDMat currently not available" << endl;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
OrthotropicCylElasticityDMat (CoefficientFunction * acoefE1,
|
|
344
|
+
CoefficientFunction * acoefE2,
|
|
345
|
+
CoefficientFunction * acoefE3,
|
|
346
|
+
CoefficientFunction * acoefnu12,
|
|
347
|
+
CoefficientFunction * acoefnu13,
|
|
348
|
+
CoefficientFunction * acoefnu23,
|
|
349
|
+
CoefficientFunction * acoefG12,
|
|
350
|
+
CoefficientFunction * acoefG13,
|
|
351
|
+
CoefficientFunction * acoefG23,
|
|
352
|
+
CoefficientFunction * acoefUseCyl)
|
|
353
|
+
: coefE1(acoefE1), coefE2(acoefE2), coefE3(acoefE3),
|
|
354
|
+
coefnu12(acoefnu12), coefnu13(acoefnu13), coefnu23(acoefnu23),
|
|
355
|
+
coefG12(acoefG12), coefG13(acoefG13), coefG23(acoefG23), coefUseCyl(acoefUseCyl) { ; }
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
// template <typename SCAL>
|
|
359
|
+
// static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
template <typename FEL, typename MIP, typename MAT>
|
|
363
|
+
void GenerateMatrix (const FEL & fel, const MIP & mip,
|
|
364
|
+
MAT & mat, LocalHeap & lh) const
|
|
365
|
+
{
|
|
366
|
+
|
|
367
|
+
double E1 = Evaluate (*coefE1, mip);
|
|
368
|
+
double E2 = Evaluate (*coefE2, mip);
|
|
369
|
+
double E3 = Evaluate (*coefE3, mip);
|
|
370
|
+
|
|
371
|
+
if(E1 < 1.e-5 || E2 < 1.e-5 || E3 < 1.e-5) return;
|
|
372
|
+
|
|
373
|
+
double nu12 = Evaluate (*coefnu12, mip);
|
|
374
|
+
double nu21 = nu12*(E2/E1);
|
|
375
|
+
double nu13 = Evaluate (*coefnu13, mip);
|
|
376
|
+
double nu31 = nu13*(E3/E1);
|
|
377
|
+
double nu23 = Evaluate (*coefnu23, mip);
|
|
378
|
+
double nu32 = nu23*(E3/E2);
|
|
379
|
+
|
|
380
|
+
const double useCyl = Evaluate (*coefUseCyl, mip);
|
|
381
|
+
|
|
382
|
+
double G12 = Evaluate (*coefG12, mip);
|
|
383
|
+
double G13 = Evaluate (*coefG13, mip);
|
|
384
|
+
double G23 = Evaluate (*coefG23, mip);
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
double n1 = mip.GetPoint()(0);
|
|
389
|
+
double n2 = mip.GetPoint()(1);
|
|
390
|
+
const double l = sqrt(n1*n1+n2*n2);
|
|
391
|
+
|
|
392
|
+
n1 /= l; n2 /= l;
|
|
393
|
+
|
|
394
|
+
if(nu12 < 0 || nu12 > 0.5 || nu21 < 0 || nu21 > 0.5 || nu13 < 0 || nu13 > 0.5 || nu31 < 0 || nu31 > 0.5 || nu23 < 0 || nu23 > 0.5 || nu32 < 0 || nu32 > 0.5)
|
|
395
|
+
{
|
|
396
|
+
cerr << "WARNING: Bad choice for elasticity constants: " << endl
|
|
397
|
+
<< "E1 " << E1 << " E2 " << E2 << " E3 " << E3 << endl
|
|
398
|
+
<< "nu12 " << nu12 << " nu21 " << nu21 << " nu13 " << nu13 << " nu31 " << nu31 << " nu23 " << nu23 << " nu32 " << nu32 <<endl;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
const double denom = 1. - nu13*nu32*nu21 - nu12*nu23*nu31 - nu12*nu21 - nu13*nu31 - nu23*nu32;
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
MAT aux(mat),transf(mat);
|
|
407
|
+
|
|
408
|
+
aux = 0;
|
|
409
|
+
|
|
410
|
+
aux(0,0) = E1*(1.-nu23*nu32)/denom;
|
|
411
|
+
aux(1,0) = aux(0,1) = E2*(nu12+nu13*nu32)/denom; aux(1,1) = E2*(1.-nu13*nu31)/denom;
|
|
412
|
+
aux(2,0) = aux(0,2) = E3*(nu13+nu12*nu23)/denom; aux(2,1) = aux(1,2) = E3*(nu23+nu13*nu21)/denom; aux(2,2) = E3*(1.-nu12*nu21)/denom;
|
|
413
|
+
|
|
414
|
+
aux(3,3) = G12;
|
|
415
|
+
aux(4,4) = G13;
|
|
416
|
+
aux(5,5) = G23;
|
|
417
|
+
|
|
418
|
+
if(fabs(useCyl) > 0.5)
|
|
419
|
+
{
|
|
420
|
+
transf = 0;
|
|
421
|
+
|
|
422
|
+
transf(0,0) = transf(1,1) = n1*n1; transf(0,1) = transf(1,0) = n2*n2; transf(2,2) = 1.;
|
|
423
|
+
transf(0,3) = 2.*n1*n2; transf(1,3) = -2.*n1*n2;
|
|
424
|
+
transf(3,0) = -n1*n2; transf(3,1) = n1*n2;
|
|
425
|
+
transf(3,3) = n1*n1-n2*n2; transf(4,4) = transf(5,5) = n1; transf(4,5) = n2; transf(5,4) = -n2;
|
|
426
|
+
|
|
427
|
+
mat = Trans(transf)*aux*transf;
|
|
428
|
+
}
|
|
429
|
+
else
|
|
430
|
+
{
|
|
431
|
+
mat = aux;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
///
|
|
439
|
+
class PlaneStressDMat : public DMatOp<PlaneStressDMat,3>
|
|
440
|
+
{
|
|
441
|
+
CoefficientFunction * coefe;
|
|
442
|
+
CoefficientFunction * coefnu;
|
|
443
|
+
public:
|
|
444
|
+
enum { DIM_DMAT = 3 };
|
|
445
|
+
|
|
446
|
+
PlaneStressDMat (CoefficientFunction * acoefe,
|
|
447
|
+
CoefficientFunction * acoefnu)
|
|
448
|
+
: coefe(acoefe), coefnu(acoefnu) { ; }
|
|
449
|
+
|
|
450
|
+
template <typename FEL, typename MIP, typename MAT>
|
|
451
|
+
void GenerateMatrix (const FEL & fel, const MIP & mip,
|
|
452
|
+
MAT & mat, LocalHeap & lh) const
|
|
453
|
+
{
|
|
454
|
+
mat = 0;
|
|
455
|
+
double nu = Evaluate (*coefnu, mip);
|
|
456
|
+
double e = Evaluate (*coefe, mip);
|
|
457
|
+
|
|
458
|
+
mat(0,0) = mat(1,1) = 1;
|
|
459
|
+
mat(0,1) = mat(1,0) = nu;
|
|
460
|
+
mat(2,2) = (1-nu) / 2;
|
|
461
|
+
|
|
462
|
+
mat *= (e / (1 - nu * nu));
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
///
|
|
467
|
+
template <int D>
|
|
468
|
+
class ElasticityIntegrator
|
|
469
|
+
: public T_BDBIntegrator<DiffOpStrain<D>, ElasticityDMat<D>, ScalarFiniteElement<D> >
|
|
470
|
+
{
|
|
471
|
+
typedef T_BDBIntegrator<DiffOpStrain<D>, ElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
|
|
472
|
+
public:
|
|
473
|
+
ElasticityIntegrator (shared_ptr<CoefficientFunction> coefe,
|
|
474
|
+
shared_ptr<CoefficientFunction> coefnu)
|
|
475
|
+
: BASE(ElasticityDMat<D> (coefe, coefnu))
|
|
476
|
+
{ ; }
|
|
477
|
+
|
|
478
|
+
ElasticityIntegrator (const Array<shared_ptr<CoefficientFunction>> & coeffs)
|
|
479
|
+
: BASE(ElasticityDMat<D> (coeffs[0], coeffs[1]))
|
|
480
|
+
{ ; }
|
|
481
|
+
|
|
482
|
+
/*
|
|
483
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
484
|
+
{
|
|
485
|
+
return new ElasticityIntegrator (coeffs[0], coeffs[1]);
|
|
486
|
+
}
|
|
487
|
+
*/
|
|
488
|
+
|
|
489
|
+
///
|
|
490
|
+
virtual string Name () const { return "Elasticity"; }
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
/*
|
|
495
|
+
// for plane stress
|
|
496
|
+
///
|
|
497
|
+
template <>
|
|
498
|
+
class ElasticityIntegrator <2>
|
|
499
|
+
: public T_BDBIntegrator<DiffOpStrain<2>, PlaneStressDMat, ScalarFiniteElement<D> >
|
|
500
|
+
{
|
|
501
|
+
public:
|
|
502
|
+
///
|
|
503
|
+
ElasticityIntegrator (CoefficientFunction * coefe,
|
|
504
|
+
CoefficientFunction * coefnu)
|
|
505
|
+
: T_BDBIntegrator<DiffOpStrain<2>, PlaneStressDMat, ScalarFiniteElement<D> >
|
|
506
|
+
(PlaneStressDMat (coefe, coefnu))
|
|
507
|
+
{ ; }
|
|
508
|
+
|
|
509
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
510
|
+
{
|
|
511
|
+
return new ElasticityIntegrator (coeffs[0], coeffs[1]);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
///
|
|
515
|
+
virtual string Name () const { return "Elasticity"; }
|
|
516
|
+
};
|
|
517
|
+
*/
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
///
|
|
521
|
+
template <int D>
|
|
522
|
+
class OrthotropicElasticityIntegrator
|
|
523
|
+
: public T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >
|
|
524
|
+
{
|
|
525
|
+
typedef T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
|
|
526
|
+
public:
|
|
527
|
+
using T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >::T_BDBIntegrator;
|
|
528
|
+
///
|
|
529
|
+
/*
|
|
530
|
+
OrthotropicElasticityIntegrator (CoefficientFunction * coefE1,
|
|
531
|
+
CoefficientFunction * coefE2,
|
|
532
|
+
CoefficientFunction * coefE3,
|
|
533
|
+
CoefficientFunction * coefnu12,
|
|
534
|
+
CoefficientFunction * coefnu13,
|
|
535
|
+
CoefficientFunction * coefnu23,
|
|
536
|
+
CoefficientFunction * coefG12,
|
|
537
|
+
CoefficientFunction * coefG13,
|
|
538
|
+
CoefficientFunction * coefG23)
|
|
539
|
+
: T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >
|
|
540
|
+
(OrthotropicElasticityDMat<D> (coefE1, coefE2, coefE3, coefnu12, coefnu13, coefnu23, coefG12, coefG13, coefG23))
|
|
541
|
+
{ ; }
|
|
542
|
+
|
|
543
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
544
|
+
{
|
|
545
|
+
return new OrthotropicElasticityIntegrator (coeffs[0], coeffs[1], coeffs[2], coeffs[3], coeffs[4], coeffs[5], coeffs[6], coeffs[7], coeffs[8]);
|
|
546
|
+
}
|
|
547
|
+
*/
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
///
|
|
551
|
+
virtual string Name () const { return "OrthotropicElasticity"; }
|
|
552
|
+
};
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
///
|
|
556
|
+
template <int D>
|
|
557
|
+
class OrthotropicCylElasticityIntegrator
|
|
558
|
+
: public T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >
|
|
559
|
+
{
|
|
560
|
+
typedef T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
|
|
561
|
+
public:
|
|
562
|
+
using T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >::T_BDBIntegrator;
|
|
563
|
+
///
|
|
564
|
+
/*
|
|
565
|
+
OrthotropicCylElasticityIntegrator (CoefficientFunction * coefE1,
|
|
566
|
+
CoefficientFunction * coefE2,
|
|
567
|
+
CoefficientFunction * coefE3,
|
|
568
|
+
CoefficientFunction * coefnu12,
|
|
569
|
+
CoefficientFunction * coefnu13,
|
|
570
|
+
CoefficientFunction * coefnu23,
|
|
571
|
+
CoefficientFunction * coefG12,
|
|
572
|
+
CoefficientFunction * coefG13,
|
|
573
|
+
CoefficientFunction * coefG23,
|
|
574
|
+
CoefficientFunction * coefUseCyl)
|
|
575
|
+
: T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >
|
|
576
|
+
(OrthotropicCylElasticityDMat<D> (coefE1, coefE2, coefE3, coefnu12, coefnu13, coefnu23, coefG12, coefG13, coefG23, coefUseCyl))
|
|
577
|
+
{ ; }
|
|
578
|
+
|
|
579
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
580
|
+
{
|
|
581
|
+
return new OrthotropicCylElasticityIntegrator (coeffs[0], coeffs[1], coeffs[2], coeffs[3], coeffs[4], coeffs[5], coeffs[6], coeffs[7], coeffs[8], coeffs[9]);
|
|
582
|
+
}
|
|
583
|
+
*/
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
///
|
|
587
|
+
virtual string Name () const { return "OrthotropicCylElasticity"; }
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
#endif
|