ngsolve 6.2.2506.post74.dev0__cp314-cp314-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/analytic_integrals.hpp +10 -0
- 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 +2805 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bem_diffops.hpp +475 -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 +328 -0
- netgen/include/bspline.hpp +116 -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 +235 -0
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/differentialoperator.hpp +276 -0
- netgen/include/diffop.hpp +1286 -0
- netgen/include/diffop_impl.hpp +328 -0
- netgen/include/diffopwithfactor.hpp +123 -0
- netgen/include/discontinuous.hpp +84 -0
- netgen/include/dump.hpp +949 -0
- netgen/include/ectypes.hpp +121 -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 +1686 -0
- netgen/include/facetfe.hpp +175 -0
- netgen/include/facetfespace.hpp +180 -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 +1449 -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 +124 -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 +1240 -0
- netgen/include/h1lumping.hpp +41 -0
- netgen/include/hcurl_equations.hpp +1381 -0
- netgen/include/hcurlcurlfe.hpp +2241 -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 +880 -0
- netgen/include/hdivdivfe.hpp +2923 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +206 -0
- netgen/include/hdivfe_utils.hpp +717 -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 +177 -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 +2012 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2542 -0
- netgen/include/intrules_SauterSchwab.hpp +25 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +153 -0
- netgen/include/kernels.hpp +762 -0
- netgen/include/l2hofe.hpp +194 -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 +1359 -0
- netgen/include/mgpre.hpp +204 -0
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +2281 -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 +1232 -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 +129 -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/potentialtools.hpp +22 -0
- netgen/include/precomp.hpp +60 -0
- netgen/include/preconditioner.hpp +602 -0
- netgen/include/prolongation.hpp +377 -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 +386 -0
- netgen/include/recursive_pol.hpp +4896 -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 +329 -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 +90 -0
- netgen/include/sparsematrix_impl.hpp +1013 -0
- netgen/include/special_matrix.hpp +463 -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 +850 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +224 -0
- netgen/include/tangentialfacetfespace.hpp +91 -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 +492 -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 +1273 -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/libngsbem.dylib +0 -0
- netgen/libngsolve.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/TensorProductTools.py +210 -0
- ngsolve/__console.py +94 -0
- ngsolve/__expr.py +181 -0
- ngsolve/__init__.py +148 -0
- ngsolve/__init__.pyi +233 -0
- ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve/bla.pyi +1153 -0
- ngsolve/bvp.py +78 -0
- ngsolve/bvp.pyi +32 -0
- ngsolve/cmake/NGSolveConfig.cmake +102 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
- ngsolve/cmake/ngsolve-targets.cmake +163 -0
- ngsolve/comp/__init__.pyi +5449 -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 +59 -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.py +26 -0
- ngsolve/directsolvers.pyi +15 -0
- ngsolve/eigenvalues.py +364 -0
- ngsolve/eigenvalues.pyi +30 -0
- ngsolve/fem.pyi +1647 -0
- ngsolve/internal.py +89 -0
- ngsolve/krylovspace.py +1013 -0
- ngsolve/krylovspace.pyi +298 -0
- ngsolve/la.pyi +1230 -0
- ngsolve/meshes.py +748 -0
- ngsolve/ngs2petsc.py +310 -0
- ngsolve/ngscxx.py +42 -0
- ngsolve/ngslib.so +0 -0
- ngsolve/ngstd.pyi +59 -0
- ngsolve/nonlinearsolvers.py +203 -0
- ngsolve/nonlinearsolvers.pyi +95 -0
- ngsolve/preconditioners.py +11 -0
- ngsolve/preconditioners.pyi +7 -0
- ngsolve/solve.pyi +109 -0
- ngsolve/solve_implementation.py +168 -0
- ngsolve/solve_implementation.pyi +42 -0
- ngsolve/solvers.py +7 -0
- ngsolve/solvers.pyi +14 -0
- ngsolve/timestepping.py +185 -0
- ngsolve/timestepping.pyi +28 -0
- ngsolve/timing.py +108 -0
- ngsolve/timing.pyi +54 -0
- ngsolve/utils.py +167 -0
- ngsolve/utils.pyi +273 -0
- ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
#ifndef FILE_L2HOFESPACE
|
|
2
|
+
#define FILE_L2HOFESPACE
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: l2hofespace.hpp */
|
|
6
|
+
/* Author: Start */
|
|
7
|
+
/* Date: 23.Feb. 2003 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include "fespace.hpp"
|
|
11
|
+
|
|
12
|
+
namespace ngcomp
|
|
13
|
+
{
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
High Order Finite Element Space for L2 (element by element)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
class NGS_DLL_HEADER L2HighOrderFESpace : public FESpace
|
|
20
|
+
{
|
|
21
|
+
protected:
|
|
22
|
+
|
|
23
|
+
// if order is relative to mesh order
|
|
24
|
+
bool var_order;
|
|
25
|
+
// variable order is set to mesh_order + rel_order
|
|
26
|
+
int rel_order;
|
|
27
|
+
// order of elements
|
|
28
|
+
Array<IVec<3> > order_inner;
|
|
29
|
+
// table of first element dofnumber
|
|
30
|
+
Array<DofId> first_element_dof;
|
|
31
|
+
bool all_dofs_together;
|
|
32
|
+
// set all used dofs to hidden_dofs
|
|
33
|
+
bool hide_all_dofs;
|
|
34
|
+
COUPLING_TYPE lowest_order_ct;
|
|
35
|
+
bool tensorproduct;
|
|
36
|
+
public:
|
|
37
|
+
|
|
38
|
+
L2HighOrderFESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool parseflags=false);
|
|
39
|
+
///
|
|
40
|
+
virtual ~L2HighOrderFESpace ();
|
|
41
|
+
|
|
42
|
+
static DocInfo GetDocu ();
|
|
43
|
+
|
|
44
|
+
// Create if order=0 ElementFESpace Constructor, else L2HOFE
|
|
45
|
+
static shared_ptr<FESpace> Create (shared_ptr<MeshAccess> ma, const Flags & flags);
|
|
46
|
+
// Creates also for order=0 a L2HighOrderFESpace
|
|
47
|
+
static shared_ptr<FESpace> CreateHO (shared_ptr<MeshAccess> ma, const Flags & flags)
|
|
48
|
+
{
|
|
49
|
+
return make_shared<L2HighOrderFESpace> (ma, flags);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
virtual string GetClassName () const override
|
|
53
|
+
{
|
|
54
|
+
return "L2HighOrderFESpace";
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
bool AllDofsTogether(){return all_dofs_together;};
|
|
58
|
+
///
|
|
59
|
+
void Update() override;
|
|
60
|
+
///
|
|
61
|
+
virtual void UpdateDofTables() override;
|
|
62
|
+
///
|
|
63
|
+
virtual void UpdateCouplingDofArray() override;
|
|
64
|
+
///
|
|
65
|
+
// virtual size_t GetNDof () const throw() override;
|
|
66
|
+
///
|
|
67
|
+
// virtual size_t GetNDofLevel (int level) const override;
|
|
68
|
+
///
|
|
69
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override;
|
|
70
|
+
|
|
71
|
+
using FESpace::GetFE;
|
|
72
|
+
// virtual const FiniteElement & GetFE (int elnr, LocalHeap & lh) const override;
|
|
73
|
+
// ///
|
|
74
|
+
// virtual const FiniteElement & GetSFE (int elnr, LocalHeap & lh) const override;
|
|
75
|
+
///
|
|
76
|
+
virtual const FiniteElement & GetFacetFE (int fnr, LocalHeap & lh) const;
|
|
77
|
+
|
|
78
|
+
virtual void GetDofRanges (ElementId ei, Array<IntRange> & dranges) const;
|
|
79
|
+
|
|
80
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
81
|
+
|
|
82
|
+
virtual void SetOrder (NodeId ni, int order) override;
|
|
83
|
+
virtual int GetOrder (NodeId ni) const override;
|
|
84
|
+
using FESpace::GetOrder;
|
|
85
|
+
|
|
86
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
|
|
87
|
+
|
|
88
|
+
///
|
|
89
|
+
virtual shared_ptr<Table<int>> CreateSmoothingBlocks (const Flags & precflags) const override;
|
|
90
|
+
///
|
|
91
|
+
|
|
92
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
|
|
93
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
|
|
94
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
|
|
95
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override;
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
auto GetElementDofs (size_t nr) const
|
|
99
|
+
{
|
|
100
|
+
return Range (first_element_dof[nr], first_element_dof[nr+1]);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
virtual shared_ptr<BaseMatrix> GetMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
104
|
+
shared_ptr<Region> defon,
|
|
105
|
+
LocalHeap & lh) const override;
|
|
106
|
+
|
|
107
|
+
virtual shared_ptr<BaseMatrix> CreateMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
108
|
+
shared_ptr<Region> defon,
|
|
109
|
+
bool inverse,
|
|
110
|
+
LocalHeap & lh) const override;
|
|
111
|
+
|
|
112
|
+
virtual void SolveM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
113
|
+
LocalHeap & lh) const override;
|
|
114
|
+
virtual void ApplyM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
115
|
+
LocalHeap & lh) const override;
|
|
116
|
+
|
|
117
|
+
virtual shared_ptr<BaseMatrix> GetTraceOperator (shared_ptr<FESpace> tracespace, bool avg) const override;
|
|
118
|
+
virtual void GetTrace (const FESpace & tracespace, const BaseVector & in, BaseVector & out, bool avg,
|
|
119
|
+
LocalHeap & lh) const override;
|
|
120
|
+
virtual void GetTraceTrans (const FESpace & tracespace, const BaseVector & in, BaseVector & out, bool avg,
|
|
121
|
+
LocalHeap & lh) const override;
|
|
122
|
+
|
|
123
|
+
protected:
|
|
124
|
+
|
|
125
|
+
template <ELEMENT_TYPE ET>
|
|
126
|
+
FiniteElement & T_GetFE (int elnr, Allocator & alloc) const;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class NGS_DLL_HEADER L2SurfaceHighOrderFESpace : public FESpace
|
|
141
|
+
{
|
|
142
|
+
protected:
|
|
143
|
+
// Level
|
|
144
|
+
// int level;
|
|
145
|
+
|
|
146
|
+
// Number of Elements
|
|
147
|
+
// int nel;
|
|
148
|
+
|
|
149
|
+
Array<int> first_element_dof;
|
|
150
|
+
// int ndof;
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
// if order is relative to mesh order
|
|
154
|
+
bool var_order;
|
|
155
|
+
// variable order is set to mesh_order + rel_order
|
|
156
|
+
int rel_order;
|
|
157
|
+
// order of elements
|
|
158
|
+
Array<IVec<3> > order_inner;
|
|
159
|
+
|
|
160
|
+
bool lowest_order_wb;
|
|
161
|
+
bool discontinuous;
|
|
162
|
+
bool dual_mapping; // u(x) = 1/measure * u(hatx)
|
|
163
|
+
public:
|
|
164
|
+
|
|
165
|
+
L2SurfaceHighOrderFESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool parseflags=false);
|
|
166
|
+
///
|
|
167
|
+
virtual ~L2SurfaceHighOrderFESpace ();
|
|
168
|
+
|
|
169
|
+
static DocInfo GetDocu ();
|
|
170
|
+
|
|
171
|
+
// static shared_ptr<FESpace> Create (shared_ptr<MeshAccess> ma, const Flags & flags);
|
|
172
|
+
|
|
173
|
+
virtual string GetClassName () const override
|
|
174
|
+
{
|
|
175
|
+
return "L2SurfaceHighOrderFESpace";
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
///
|
|
179
|
+
void Update() override;
|
|
180
|
+
///
|
|
181
|
+
virtual void UpdateCouplingDofArray() override;
|
|
182
|
+
//virtual void UpdateDofTables() override;
|
|
183
|
+
///
|
|
184
|
+
// virtual size_t GetNDof () const throw() override;
|
|
185
|
+
|
|
186
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
187
|
+
///
|
|
188
|
+
// virtual const FiniteElement & GetFE (int elnr, LocalHeap & lh) const override;
|
|
189
|
+
// ///
|
|
190
|
+
// virtual const FiniteElement & GetSFE (int elnr, LocalHeap & lh) const override;
|
|
191
|
+
///
|
|
192
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
193
|
+
|
|
194
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
|
|
195
|
+
|
|
196
|
+
virtual shared_ptr<BaseMatrix> GetMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
197
|
+
shared_ptr<Region> defon,
|
|
198
|
+
LocalHeap & lh) const override;
|
|
199
|
+
|
|
200
|
+
virtual void SolveM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
201
|
+
LocalHeap & lh) const override;
|
|
202
|
+
virtual void ApplyM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
203
|
+
LocalHeap & lh) const override;
|
|
204
|
+
virtual shared_ptr<Table<int>> CreateSmoothingBlocks (const Flags & precflags) const override;
|
|
205
|
+
///
|
|
206
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override;
|
|
207
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
|
|
208
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
|
|
209
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
|
|
210
|
+
|
|
211
|
+
virtual bool VarOrder() const override { return var_order; }
|
|
212
|
+
virtual int GetRelOrder() const override { return rel_order; }
|
|
213
|
+
|
|
214
|
+
virtual void SetOrder (NodeId ni, int order) override;
|
|
215
|
+
virtual int GetOrder (NodeId ni) const override;
|
|
216
|
+
using FESpace::GetOrder;
|
|
217
|
+
|
|
218
|
+
auto GetElementDofs (size_t nr) const
|
|
219
|
+
{
|
|
220
|
+
return Range (first_element_dof[nr], first_element_dof[nr+1]);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
class NGS_DLL_HEADER VectorL2FESpace : public CompoundFESpace
|
|
227
|
+
{
|
|
228
|
+
bool piola = false;
|
|
229
|
+
bool piola2 = false; // piola mapping with vertex oriended coordinates (new for prolongation)
|
|
230
|
+
bool covariant = false;
|
|
231
|
+
public:
|
|
232
|
+
VectorL2FESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool checkflags = false);
|
|
233
|
+
|
|
234
|
+
FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override;
|
|
235
|
+
|
|
236
|
+
static DocInfo GetDocu ();
|
|
237
|
+
|
|
238
|
+
void GetDofNrs (ElementId ei, Array<int> & dnums) const override;
|
|
239
|
+
|
|
240
|
+
virtual shared_ptr<BaseMatrix> GetMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
241
|
+
shared_ptr<Region> defon,
|
|
242
|
+
LocalHeap & lh) const override;
|
|
243
|
+
|
|
244
|
+
virtual shared_ptr<BaseMatrix> CreateMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
245
|
+
shared_ptr<Region> defon,
|
|
246
|
+
bool inverse,
|
|
247
|
+
LocalHeap & lh) const override;
|
|
248
|
+
|
|
249
|
+
template <int DIM>
|
|
250
|
+
shared_ptr<BaseMatrix> CreateMassOperator_Dim (shared_ptr<CoefficientFunction> rho,
|
|
251
|
+
shared_ptr<Region> defon,
|
|
252
|
+
bool inverse,
|
|
253
|
+
LocalHeap & lh) const;
|
|
254
|
+
|
|
255
|
+
virtual void SolveM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
256
|
+
LocalHeap & lh) const override;
|
|
257
|
+
virtual void ApplyM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
258
|
+
LocalHeap & lh) const override;
|
|
259
|
+
|
|
260
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
|
|
261
|
+
|
|
262
|
+
template <int DIM>
|
|
263
|
+
void SolveM_Dim (CoefficientFunction * rho, BaseVector & vec, Region * region,
|
|
264
|
+
LocalHeap & lh) const;
|
|
265
|
+
|
|
266
|
+
/*
|
|
267
|
+
template <int DIM>
|
|
268
|
+
void SolveMPiola (CoefficientFunction * rho, BaseVector & vec,
|
|
269
|
+
LocalHeap & lh) const;
|
|
270
|
+
template <int DIM>
|
|
271
|
+
void SolveMCovariant (CoefficientFunction * rho, BaseVector & vec,
|
|
272
|
+
LocalHeap & lh) const;
|
|
273
|
+
*/
|
|
274
|
+
|
|
275
|
+
template <int DIM>
|
|
276
|
+
void ApplyM_Dim (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
277
|
+
LocalHeap & lh) const;
|
|
278
|
+
|
|
279
|
+
template <int DIM>
|
|
280
|
+
void ApplyMPiola (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
281
|
+
LocalHeap & lh) const;
|
|
282
|
+
template <int DIM>
|
|
283
|
+
void ApplyMCovariant (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
284
|
+
LocalHeap & lh) const;
|
|
285
|
+
|
|
286
|
+
virtual string GetClassName () const override
|
|
287
|
+
{
|
|
288
|
+
return "VectorL2FESpace";
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class TangentialSurfaceL2FESpace : public CompoundFESpace
|
|
300
|
+
{
|
|
301
|
+
bool piola;
|
|
302
|
+
public:
|
|
303
|
+
TangentialSurfaceL2FESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool checkflags = false);
|
|
304
|
+
|
|
305
|
+
FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override;
|
|
306
|
+
|
|
307
|
+
static DocInfo GetDocu ();
|
|
308
|
+
|
|
309
|
+
void GetDofNrs (ElementId ei, Array<int> & dnums) const override;
|
|
310
|
+
|
|
311
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override;
|
|
312
|
+
|
|
313
|
+
virtual shared_ptr<BaseMatrix> GetMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
314
|
+
shared_ptr<Region> defon,
|
|
315
|
+
LocalHeap & lh) const override;
|
|
316
|
+
|
|
317
|
+
virtual void SolveM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
318
|
+
LocalHeap & lh) const override;
|
|
319
|
+
virtual void ApplyM (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
320
|
+
LocalHeap & lh) const override;
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
template <int DIM>
|
|
324
|
+
void SolveM_Dim (CoefficientFunction * rho, BaseVector & vec, Region * region,
|
|
325
|
+
LocalHeap & lh) const;
|
|
326
|
+
|
|
327
|
+
template <int DIM>
|
|
328
|
+
void ApplyM_Dim (CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
329
|
+
LocalHeap & lh) const;
|
|
330
|
+
|
|
331
|
+
virtual string GetClassName () const override
|
|
332
|
+
{
|
|
333
|
+
return "TangentialSurfaceL2FESpace";
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
#endif
|
|
344
|
+
|
netgen/include/la.hpp
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#ifndef FILE_NGLA
|
|
2
|
+
#define FILE_NGLA
|
|
3
|
+
|
|
4
|
+
#include <bla.hpp>
|
|
5
|
+
|
|
6
|
+
/** namespace for linear algebra.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
namespace ngla
|
|
10
|
+
{
|
|
11
|
+
using namespace std;
|
|
12
|
+
using namespace ngstd;
|
|
13
|
+
using namespace ngbla;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#include "paralleldofs.hpp"
|
|
18
|
+
#include "basevector.hpp"
|
|
19
|
+
#include "vvector.hpp"
|
|
20
|
+
#include "multivector.hpp"
|
|
21
|
+
#include "basematrix.hpp"
|
|
22
|
+
#include "sparsematrix.hpp"
|
|
23
|
+
#include "sparsematrix_dyn.hpp"
|
|
24
|
+
#include "order.hpp"
|
|
25
|
+
#include "sparsecholesky.hpp"
|
|
26
|
+
#include "pardisoinverse.hpp"
|
|
27
|
+
#include "jacobi.hpp"
|
|
28
|
+
#include "blockjacobi.hpp"
|
|
29
|
+
#include "commutingAMG.hpp"
|
|
30
|
+
#include "diagonalmatrix.hpp"
|
|
31
|
+
#include "special_matrix.hpp"
|
|
32
|
+
#include "elementbyelement.hpp"
|
|
33
|
+
#include "cg.hpp"
|
|
34
|
+
#include "chebyshev.hpp"
|
|
35
|
+
#include "eigen.hpp"
|
|
36
|
+
#include "arnoldi.hpp"
|
|
37
|
+
|
|
38
|
+
#endif
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
#ifndef FILE_LINEARFORM
|
|
2
|
+
#define FILE_LINEARFORM
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: linearform.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 25. Mar. 2000 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#include "fespace.hpp"
|
|
12
|
+
|
|
13
|
+
namespace ngcomp
|
|
14
|
+
{
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
Linearform
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class NGS_DLL_HEADER LinearForm : public NGS_Object
|
|
22
|
+
{
|
|
23
|
+
protected:
|
|
24
|
+
///
|
|
25
|
+
shared_ptr<FESpace> fespace;
|
|
26
|
+
///
|
|
27
|
+
Array<shared_ptr<LinearFormIntegrator>> parts;
|
|
28
|
+
Array<shared_ptr<LinearFormIntegrator>> VB_parts[4];
|
|
29
|
+
Array<shared_ptr<class PointEvaluationFunctional>> pnteval;
|
|
30
|
+
/// do the integration on independent meshes
|
|
31
|
+
bool independent;
|
|
32
|
+
/// print the assembled vector to testout
|
|
33
|
+
bool print;
|
|
34
|
+
/// print element vectos to testout
|
|
35
|
+
bool printelvec;
|
|
36
|
+
|
|
37
|
+
bool allocated;
|
|
38
|
+
bool assembled;
|
|
39
|
+
bool initialassembling;
|
|
40
|
+
|
|
41
|
+
int cacheblocksize;
|
|
42
|
+
/// output of norm of matrix entries
|
|
43
|
+
bool checksum;
|
|
44
|
+
|
|
45
|
+
public:
|
|
46
|
+
///
|
|
47
|
+
LinearForm (shared_ptr<FESpace> afespace,
|
|
48
|
+
const string & aname, const Flags & flags);
|
|
49
|
+
|
|
50
|
+
///
|
|
51
|
+
virtual ~LinearForm () { ; }
|
|
52
|
+
|
|
53
|
+
///
|
|
54
|
+
shared_ptr<FESpace> GetFESpace() const { return fespace; }
|
|
55
|
+
|
|
56
|
+
///
|
|
57
|
+
virtual LinearForm & AddIntegrator (shared_ptr<LinearFormIntegrator> lfi);
|
|
58
|
+
|
|
59
|
+
LinearForm & operator+= (shared_ptr<LinearFormIntegrator> lfi)
|
|
60
|
+
{
|
|
61
|
+
return AddIntegrator(lfi);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
///
|
|
65
|
+
shared_ptr<LinearFormIntegrator> GetIntegrator (int i) const
|
|
66
|
+
{
|
|
67
|
+
return parts[i];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const Array<shared_ptr<LinearFormIntegrator>> & Integrators() const
|
|
71
|
+
{
|
|
72
|
+
return parts;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
///
|
|
76
|
+
int NumIntegrators () const
|
|
77
|
+
{
|
|
78
|
+
return parts.Size();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
LinearForm & operator+= (shared_ptr<PointEvaluationFunctional> _pnteval)
|
|
82
|
+
{
|
|
83
|
+
pnteval += _pnteval;
|
|
84
|
+
return *this;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
void SetIndependent (bool aindependent = true)
|
|
88
|
+
{
|
|
89
|
+
independent = aindependent;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
///
|
|
93
|
+
virtual void Assemble (LocalHeap & lh) = 0;
|
|
94
|
+
///
|
|
95
|
+
virtual void AllocateVector () = 0;
|
|
96
|
+
|
|
97
|
+
virtual void CleanUpLevel() { ; }
|
|
98
|
+
|
|
99
|
+
virtual bool IsAssembled () { return assembled; }
|
|
100
|
+
bool InitialAssembling () { return initialassembling; }
|
|
101
|
+
void SetNoInitialAssembling () { initialassembling = false; }
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
///
|
|
105
|
+
virtual shared_ptr<BaseVector> GetVectorPtr() const = 0;
|
|
106
|
+
virtual BaseVector & GetVector () const = 0;
|
|
107
|
+
|
|
108
|
+
///
|
|
109
|
+
virtual string GetClassName () const
|
|
110
|
+
{
|
|
111
|
+
return "LinearForm";
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
void SetPrint (bool ap);
|
|
115
|
+
void SetPrintElmat (bool ap);
|
|
116
|
+
|
|
117
|
+
///
|
|
118
|
+
virtual void PrintReport (ostream & ost) const;
|
|
119
|
+
///
|
|
120
|
+
virtual Array<MemoryUsage> GetMemoryUsage () const;
|
|
121
|
+
|
|
122
|
+
virtual void AddElementVector (FlatArray<int> dnums,
|
|
123
|
+
FlatVector<double> elvec,
|
|
124
|
+
int cachecomp = -1);
|
|
125
|
+
virtual void SetElementVector (FlatArray<int> dnums,
|
|
126
|
+
FlatVector<double> elvec);
|
|
127
|
+
virtual void GetElementVector (FlatArray<int> dnums,
|
|
128
|
+
FlatVector<double> elvec) const;
|
|
129
|
+
|
|
130
|
+
virtual void AddElementVector (FlatArray<int> dnums,
|
|
131
|
+
FlatVector<Complex> elvec,
|
|
132
|
+
int cachecomp = -1);
|
|
133
|
+
virtual void SetElementVector (FlatArray<int> dnums,
|
|
134
|
+
FlatVector<Complex> elvec);
|
|
135
|
+
virtual void GetElementVector (FlatArray<int> dnums,
|
|
136
|
+
FlatVector<Complex> elvec) const;
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
virtual void SetCacheBlockSize (const int size)
|
|
141
|
+
{
|
|
142
|
+
cacheblocksize = size;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
template <class SCAL>
|
|
148
|
+
class NGS_DLL_HEADER S_LinearForm : public LinearForm
|
|
149
|
+
{
|
|
150
|
+
protected:
|
|
151
|
+
shared_ptr<BaseVector> vec;
|
|
152
|
+
|
|
153
|
+
public:
|
|
154
|
+
typedef SCAL TSCAL;
|
|
155
|
+
using LinearForm::LinearForm;
|
|
156
|
+
|
|
157
|
+
virtual BaseVector & GetVector () const override { return *vec; }
|
|
158
|
+
virtual shared_ptr<BaseVector> GetVectorPtr () const override { return vec; }
|
|
159
|
+
|
|
160
|
+
virtual void AllocateVector () override;
|
|
161
|
+
virtual void CleanUpLevel() override;
|
|
162
|
+
///
|
|
163
|
+
virtual void AddElementVector (FlatArray<int> dnums,
|
|
164
|
+
FlatVector<SCAL> elvec,
|
|
165
|
+
int cachecomp = -1) override = 0;
|
|
166
|
+
virtual void SetElementVector (FlatArray<int> dnums,
|
|
167
|
+
FlatVector<SCAL> elvec) override;
|
|
168
|
+
virtual void GetElementVector (FlatArray<int> dnums,
|
|
169
|
+
FlatVector<SCAL> elvec) const override;
|
|
170
|
+
|
|
171
|
+
///
|
|
172
|
+
virtual void Assemble (LocalHeap & lh) override;
|
|
173
|
+
void AssembleIndependent (LocalHeap & lh);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/// Template argument specifies vector type
|
|
182
|
+
template <class TV>
|
|
183
|
+
class NGS_DLL_HEADER T_LinearForm : public S_LinearForm<typename mat_traits<TV>::TSCAL>
|
|
184
|
+
{
|
|
185
|
+
///
|
|
186
|
+
// shared_ptr<VVector<TV>> vec;
|
|
187
|
+
typedef S_LinearForm<typename mat_traits<TV>::TSCAL> BASE;
|
|
188
|
+
using BASE::vec;
|
|
189
|
+
public:
|
|
190
|
+
|
|
191
|
+
typedef typename mat_traits<TV>::TSCAL TSCAL;
|
|
192
|
+
// enum { HEIGHT = mat_traits<TV>::HEIGHT };
|
|
193
|
+
|
|
194
|
+
///
|
|
195
|
+
using S_LinearForm<TSCAL>::S_LinearForm;
|
|
196
|
+
|
|
197
|
+
///
|
|
198
|
+
virtual ~T_LinearForm () { };
|
|
199
|
+
|
|
200
|
+
///
|
|
201
|
+
// virtual void AllocateVector () override;
|
|
202
|
+
///
|
|
203
|
+
// virtual void CleanUpLevel() override;
|
|
204
|
+
|
|
205
|
+
///
|
|
206
|
+
virtual void AddElementVector (FlatArray<int> dnums,
|
|
207
|
+
FlatVector<TSCAL> elvec,
|
|
208
|
+
int cachecomp = -1) override;
|
|
209
|
+
/*
|
|
210
|
+
virtual void SetElementVector (FlatArray<int> dnums,
|
|
211
|
+
FlatVector<TSCAL> elvec) override;
|
|
212
|
+
virtual void GetElementVector (FlatArray<int> dnums,
|
|
213
|
+
FlatVector<TSCAL> elvec) const override;
|
|
214
|
+
*/
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class ComponentLinearForm : public LinearForm
|
|
222
|
+
{
|
|
223
|
+
shared_ptr<LinearForm> base_lf;
|
|
224
|
+
int comp;
|
|
225
|
+
public:
|
|
226
|
+
ComponentLinearForm (shared_ptr<LinearForm> abase_lf, int acomp, int ancomp);
|
|
227
|
+
virtual LinearForm & AddIntegrator (shared_ptr<LinearFormIntegrator> lfi);
|
|
228
|
+
|
|
229
|
+
virtual void AllocateVector () { cerr << "comp - allocate is illegal" << endl; }
|
|
230
|
+
virtual void Assemble (LocalHeap & lh) { cerr << "comp - assemble is illegal" << endl; }
|
|
231
|
+
virtual shared_ptr<BaseVector> GetVectorPtr() const
|
|
232
|
+
{
|
|
233
|
+
auto fes = dynamic_pointer_cast<CompoundFESpace> (base_lf->GetFESpace());
|
|
234
|
+
return base_lf->GetVectorPtr()->Range(fes->GetRange(comp));
|
|
235
|
+
// throw Exception ("comp - GetVectorPtr is illegal");
|
|
236
|
+
}
|
|
237
|
+
virtual BaseVector & GetVector () const
|
|
238
|
+
{ throw Exception ("comp - GetVector is illegal"); }
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
extern NGS_DLL_HEADER shared_ptr<LinearForm> CreateLinearForm (shared_ptr<FESpace> space,
|
|
244
|
+
const string & name,
|
|
245
|
+
const Flags & flags);
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
class PointEvaluationFunctional
|
|
249
|
+
{
|
|
250
|
+
public:
|
|
251
|
+
shared_ptr<CoefficientFunction> cf;
|
|
252
|
+
Vector<> point;
|
|
253
|
+
public:
|
|
254
|
+
PointEvaluationFunctional (shared_ptr<CoefficientFunction> acf,
|
|
255
|
+
Vector<> apoint)
|
|
256
|
+
: cf(acf), point(apoint) { }
|
|
257
|
+
|
|
258
|
+
SparseVector<double> Assemble() const;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
#endif
|
|
265
|
+
|
|
266
|
+
|