ngsolve 6.2.2506.post75.dev0__cp314-cp314-manylinux_2_28_x86_64.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.
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvcc +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvlink +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngscxx +15 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsld +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basematrix.hpp +957 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basevector.hpp +1268 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbequations.hpp +2805 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bessel.hpp +1064 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bilinearform.hpp +963 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bla.hpp +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bspline.hpp +116 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cg.hpp +368 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cholesky.hpp +720 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/clapack.h +7254 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/code_generation.hpp +296 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/comp.hpp +79 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compatibility.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/complex_wrapper.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/contact.hpp +235 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_linalg.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngbla.hpp +226 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngstd.hpp +527 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diagonalmatrix.hpp +154 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop.hpp +1286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/dump.hpp +949 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ectypes.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigen.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementbyelement.hpp +195 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/expr.hpp +1686 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facethofe.hpp +111 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fem.hpp +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fespace.hpp +1449 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalspace.hpp +115 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1amg.hpp +124 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hidden.hpp +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/householder.hpp +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integrator.hpp +2012 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/interpolate.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrule.hpp +2542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/irspace.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/jacobi.hpp +153 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/kernels.hpp +762 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/la.hpp +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linalg_kernels.hpp +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linearform.hpp +266 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/matrix.hpp +2140 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/memusage.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mgpre.hpp +204 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mptools.hpp +2281 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multigrid.hpp +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multivector.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngstd.hpp +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/order.hpp +251 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/periodic.hpp +129 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pml.hpp +275 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/postproc.hpp +142 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/precomp.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/prolongation.hpp +377 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_comp.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_fem.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/smoother.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/solve.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsecholesky.hpp +313 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix.hpp +1038 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/specialelement.hpp +125 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/statushandler.hpp +33 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/stringops.hpp +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensor.hpp +522 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpfes.hpp +133 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/triangular.hpp +465 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vector.hpp +1273 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vvector.hpp +208 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/webgui.hpp +92 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +173 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers.py +7 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/METADATA +14 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/RECORD +303 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1449 @@
|
|
|
1
|
+
#ifndef FILE_FESPACE
|
|
2
|
+
#define FILE_FESPACE
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: fespace.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 25. Mar. 2000 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include <core/register_archive.hpp>
|
|
11
|
+
|
|
12
|
+
#include <finiteelement.hpp>
|
|
13
|
+
#include <diffop.hpp>
|
|
14
|
+
#include <symbolicintegrator.hpp> // for ProxyFunction
|
|
15
|
+
|
|
16
|
+
#include <basevector.hpp>
|
|
17
|
+
#include <basematrix.hpp>
|
|
18
|
+
|
|
19
|
+
// #include <paralleldofs.hpp>
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#include "ngsobject.hpp"
|
|
23
|
+
|
|
24
|
+
namespace ngmg
|
|
25
|
+
{
|
|
26
|
+
class Prolongation;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
namespace ngcomp
|
|
31
|
+
{
|
|
32
|
+
using namespace ngla;
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
Finite Element Space
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
transformation from local to global orientation
|
|
41
|
+
used for low order Nedelec elements
|
|
42
|
+
*/
|
|
43
|
+
enum TRANSFORM_TYPE { TRANSFORM_MAT_LEFT = 1,
|
|
44
|
+
TRANSFORM_MAT_RIGHT = 2,
|
|
45
|
+
TRANSFORM_MAT_LEFT_RIGHT = 3,
|
|
46
|
+
TRANSFORM_RHS = 4,
|
|
47
|
+
TRANSFORM_SOL = 8,
|
|
48
|
+
TRANSFORM_SOL_INVERSE = 16};
|
|
49
|
+
/**
|
|
50
|
+
coupling types: Each degree of freedom is either
|
|
51
|
+
- an unused or hidden dof (invisible)
|
|
52
|
+
- a local degree of freedom
|
|
53
|
+
- an interface degree of freedom
|
|
54
|
+
or
|
|
55
|
+
- a wirebasket degree of freedom
|
|
56
|
+
*/
|
|
57
|
+
enum COUPLING_TYPE : uint8_t { UNUSED_DOF = 0,
|
|
58
|
+
HIDDEN_DOF = 1,
|
|
59
|
+
LOCAL_DOF = 2,
|
|
60
|
+
CONDENSABLE_DOF = 3,
|
|
61
|
+
INTERFACE_DOF = 4,
|
|
62
|
+
NONWIREBASKET_DOF = 6,
|
|
63
|
+
WIREBASKET_DOF = 8,
|
|
64
|
+
EXTERNAL_DOF = 12,
|
|
65
|
+
VISIBLE_DOF = 14,
|
|
66
|
+
ANY_DOF = 15
|
|
67
|
+
};
|
|
68
|
+
/*
|
|
69
|
+
Bit encoding:
|
|
70
|
+
UNUSED 0 | 0
|
|
71
|
+
HIDDEN 1 | 1
|
|
72
|
+
LOCAL 1 0 | 2
|
|
73
|
+
CONDENSABLE 1 1 | 3
|
|
74
|
+
INTERFACE 1 0 0 | 4
|
|
75
|
+
NONWIREBASKET 1 1 0 | 6
|
|
76
|
+
WIREBASKET 1 0 0 0 | 8
|
|
77
|
+
EXTERNAL 1 1 0 0 | 12
|
|
78
|
+
VISIBLE 1 1 1 0 | 14
|
|
79
|
+
ANY 1 1 1 1 | 15
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
constant_order .... one order for everything
|
|
84
|
+
node_type_order ... order for edges, or faces, gradients or curls, but all over the mesh
|
|
85
|
+
variable_order .... a different, anisotropic order for every mesh node
|
|
86
|
+
*/
|
|
87
|
+
enum ORDER_POLICY { CONSTANT_ORDER = 0, NODE_TYPE_ORDER = 1, VARIABLE_ORDER = 2, OLDSTYLE_ORDER = 3 };
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
NGS_DLL_HEADER ostream & operator<< (ostream & ost, COUPLING_TYPE ct);
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class FESpace;
|
|
95
|
+
class BilinearForm;
|
|
96
|
+
|
|
97
|
+
// will be size_t some day
|
|
98
|
+
typedef int DofId;
|
|
99
|
+
enum IRREGULAR_DOF_NR
|
|
100
|
+
{
|
|
101
|
+
NO_DOF_NR = -1, // don't assemble this dof (it has no regular number)
|
|
102
|
+
NO_DOF_NR_CONDENSE = -2 // condense out this dof, don't assemble to global system
|
|
103
|
+
};
|
|
104
|
+
INLINE bool IsRegularDof (DofId dof) { return dof >= 0; } // ATTENTION for size_t
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
using ngmg::Prolongation;
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
struct ProxyNode : public shared_ptr<ProxyFunction>
|
|
111
|
+
{
|
|
112
|
+
// shared_ptr<ProxyFunction> proxy;
|
|
113
|
+
std::vector<ProxyNode> list;
|
|
114
|
+
|
|
115
|
+
ProxyNode (shared_ptr<ProxyFunction> _proxy) : shared_ptr<ProxyFunction>(_proxy) { }
|
|
116
|
+
ProxyNode (std::vector<ProxyNode> _list) : list(_list) { }
|
|
117
|
+
auto operator* () const { return shared_ptr<ProxyFunction> (*this); }
|
|
118
|
+
auto operator[] (int i) const { return list[i]; }
|
|
119
|
+
|
|
120
|
+
void SetFESpace (shared_ptr<FESpace> fespace)
|
|
121
|
+
{
|
|
122
|
+
if (*this)
|
|
123
|
+
shared_ptr<ProxyFunction> (*this) -> SetFESpace(fespace);
|
|
124
|
+
else
|
|
125
|
+
for (auto node : list)
|
|
126
|
+
node.SetFESpace(fespace);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
Base class for finite element space.
|
|
135
|
+
Provides finite elements, global degrees of freedom,
|
|
136
|
+
and transformations of element-matrices and element-vectors
|
|
137
|
+
*/
|
|
138
|
+
class NGS_DLL_HEADER FESpace : public NGS_Object
|
|
139
|
+
{
|
|
140
|
+
protected:
|
|
141
|
+
/// global order of finite elements
|
|
142
|
+
int order;
|
|
143
|
+
/// how many components
|
|
144
|
+
int dimension;
|
|
145
|
+
/// complex space
|
|
146
|
+
bool iscomplex;
|
|
147
|
+
|
|
148
|
+
/// couple (all) neighbouring degrees of freedom (like for jump terms of dg-methods)?
|
|
149
|
+
bool dgjumps;
|
|
150
|
+
|
|
151
|
+
/// whether the space should update itself on changes to the mesh
|
|
152
|
+
bool autoupdate;
|
|
153
|
+
|
|
154
|
+
/// debug output to testout
|
|
155
|
+
bool print;
|
|
156
|
+
|
|
157
|
+
/// prolongation operators between multigrid levels
|
|
158
|
+
shared_ptr<Prolongation> prol;// = NULL;
|
|
159
|
+
/// highest multigrid-level for which Update was called (memory allocation)
|
|
160
|
+
int level_updated;
|
|
161
|
+
|
|
162
|
+
/// on which subdomains is the space defined ?
|
|
163
|
+
Array<bool> definedon[4];
|
|
164
|
+
|
|
165
|
+
/// prototype: what are the Dirichlet boundaries ?
|
|
166
|
+
BitArray dirichlet_constraints[4];
|
|
167
|
+
BitArray & dirichlet_boundaries = dirichlet_constraints[1];
|
|
168
|
+
|
|
169
|
+
/// dofs on Dirichlet boundary
|
|
170
|
+
BitArray dirichlet_dofs;
|
|
171
|
+
shared_ptr<BitArray> free_dofs;
|
|
172
|
+
shared_ptr<BitArray> external_free_dofs;
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
Array<bool> dirichlet_vertex;
|
|
176
|
+
Array<bool> dirichlet_edge;
|
|
177
|
+
Array<bool> dirichlet_face;
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
/// Evaluator for visualization (new style)
|
|
181
|
+
shared_ptr<DifferentialOperator> evaluator[4];
|
|
182
|
+
/// Evaluator for flux
|
|
183
|
+
shared_ptr<DifferentialOperator> flux_evaluator[4];
|
|
184
|
+
|
|
185
|
+
SymbolTable<shared_ptr<DifferentialOperator>> additional_evaluators;
|
|
186
|
+
|
|
187
|
+
/// Evaluator for visualization (old style)
|
|
188
|
+
shared_ptr<BilinearFormIntegrator> integrator[4];
|
|
189
|
+
|
|
190
|
+
/// if non-zero, pointer to low order space
|
|
191
|
+
shared_ptr<FESpace> low_order_space;
|
|
192
|
+
shared_ptr<BaseMatrix> low_order_embedding;
|
|
193
|
+
|
|
194
|
+
/// if directsolverclustered[i] is true, then the unknowns of domain i are clustered
|
|
195
|
+
Array<bool> directsolverclustered;
|
|
196
|
+
|
|
197
|
+
Array<string> directsolvermaterials;
|
|
198
|
+
|
|
199
|
+
mutable Array<int> adddirectsolverdofs;
|
|
200
|
+
|
|
201
|
+
Array<int> directvertexclusters;
|
|
202
|
+
Array<int> directedgeclusters;
|
|
203
|
+
Array<int> directfaceclusters;
|
|
204
|
+
Array<int> directelementclusters;
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
Table<int> element_coloring[4];
|
|
208
|
+
Table<int> facet_coloring; // elements on facet in own colors (DG)
|
|
209
|
+
Array<COUPLING_TYPE> ctofdof;
|
|
210
|
+
|
|
211
|
+
shared_ptr<ParallelDofs> paralleldofs;
|
|
212
|
+
|
|
213
|
+
bool no_low_order_space;
|
|
214
|
+
|
|
215
|
+
int et_bonus_order[30]; // order increase for element-type
|
|
216
|
+
|
|
217
|
+
typedef int8_t TORDER;
|
|
218
|
+
|
|
219
|
+
ORDER_POLICY order_policy = OLDSTYLE_ORDER;
|
|
220
|
+
|
|
221
|
+
// size_t order_timestamp = 0;
|
|
222
|
+
BitArray is_atomic_dof;
|
|
223
|
+
|
|
224
|
+
// only a few spaces (lowest order Nedelec) need the transformation
|
|
225
|
+
// of element vectors
|
|
226
|
+
bool needs_transform_vec = true;
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
// move ndof and ndof_level to FESpace base class
|
|
230
|
+
size_t ndof;
|
|
231
|
+
Array<size_t> ndof_level;
|
|
232
|
+
protected:
|
|
233
|
+
void SetNDof (size_t _ndof);
|
|
234
|
+
|
|
235
|
+
public:
|
|
236
|
+
string type;
|
|
237
|
+
SimpleSignal updateSignal;
|
|
238
|
+
/**
|
|
239
|
+
Constructor.
|
|
240
|
+
Used flags are: \\
|
|
241
|
+
-order=<int>: finite element order \\
|
|
242
|
+
-dim=<int>: number of components \\
|
|
243
|
+
-complex: complex space \\
|
|
244
|
+
-dirichlet=<int-list>: dirichlet boundaries, 1-based \\
|
|
245
|
+
*/
|
|
246
|
+
FESpace (shared_ptr<MeshAccess> ama, const Flags & flags,
|
|
247
|
+
bool checkflags = false);
|
|
248
|
+
FESpace (const FESpace &) = delete;
|
|
249
|
+
/// cleanup
|
|
250
|
+
virtual ~FESpace ();
|
|
251
|
+
|
|
252
|
+
static DocInfo GetDocu ();
|
|
253
|
+
|
|
254
|
+
/// update dof-table
|
|
255
|
+
virtual void Update();
|
|
256
|
+
|
|
257
|
+
virtual void UpdateDofTables() { ; }
|
|
258
|
+
virtual void UpdateCouplingDofArray() { ; }
|
|
259
|
+
virtual void UpdateFreeDofs();
|
|
260
|
+
/// update element coloring
|
|
261
|
+
virtual void FinalizeUpdate();
|
|
262
|
+
|
|
263
|
+
/// highest level where update/finalize was called
|
|
264
|
+
int GetLevelUpdated() const { return level_updated; }
|
|
265
|
+
|
|
266
|
+
const Table<int> & ElementColoring(VorB vb = VOL) const
|
|
267
|
+
{ return element_coloring[vb]; }
|
|
268
|
+
|
|
269
|
+
const Table<int> & FacetColoring() const;
|
|
270
|
+
|
|
271
|
+
/// print report to stream
|
|
272
|
+
virtual void PrintReport (ostream & ost) const override;
|
|
273
|
+
|
|
274
|
+
/// Dump/restore fespace
|
|
275
|
+
virtual void DoArchive (Archive & archive);
|
|
276
|
+
std::tuple<Shallow<shared_ptr<MeshAccess>>, Flags> GetCArgs();
|
|
277
|
+
|
|
278
|
+
Array<MemoryUsage> GetMemoryUsage () const override;
|
|
279
|
+
|
|
280
|
+
/// order of finite elements
|
|
281
|
+
int GetOrder () const { return order; }
|
|
282
|
+
|
|
283
|
+
/*
|
|
284
|
+
void SetBonusOrder (ELEMENT_TYPE et, int bonus)
|
|
285
|
+
{ et_bonus_order[et] = bonus; }
|
|
286
|
+
*/
|
|
287
|
+
void SetOrderPolicy (ORDER_POLICY op)
|
|
288
|
+
{
|
|
289
|
+
order_policy = op;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
virtual void SetOrder (ELEMENT_TYPE et, TORDER order);
|
|
293
|
+
|
|
294
|
+
virtual void SetOrder (NodeId ni, int order);
|
|
295
|
+
virtual int GetOrder (NodeId ni) const;
|
|
296
|
+
|
|
297
|
+
/// how many components
|
|
298
|
+
int GetDimension () const { return dimension; }
|
|
299
|
+
|
|
300
|
+
/// complex space ?
|
|
301
|
+
bool IsComplex () const { return iscomplex; }
|
|
302
|
+
|
|
303
|
+
virtual int GetSpatialDimension() const { return ma->GetDimension();}
|
|
304
|
+
|
|
305
|
+
/// number of (process-local) dofs
|
|
306
|
+
virtual size_t GetNDof () const { return ndof; }
|
|
307
|
+
/// number of dofs on the level
|
|
308
|
+
virtual size_t GetNDofLevel (int level) const
|
|
309
|
+
{ return (level < ndof_level.Size()) ? ndof_level[level] : GetNDof(); }
|
|
310
|
+
|
|
311
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const;
|
|
312
|
+
|
|
313
|
+
class Element : public Ngs_Element
|
|
314
|
+
{
|
|
315
|
+
const FESpace & fes;
|
|
316
|
+
Array<DofId> & temp_dnums;
|
|
317
|
+
LocalHeap & lh;
|
|
318
|
+
mutable bool dofs_set = false;
|
|
319
|
+
public:
|
|
320
|
+
INLINE Element (const FESpace & afes, ElementId id, Array<DofId> & atemp_dnums,
|
|
321
|
+
LocalHeap & alh)
|
|
322
|
+
: Ngs_Element ((*afes.GetMeshAccess())[id] ), fes(afes),
|
|
323
|
+
temp_dnums(atemp_dnums), lh(alh)
|
|
324
|
+
{ ; }
|
|
325
|
+
|
|
326
|
+
INLINE Element (const Element & el) = default;
|
|
327
|
+
INLINE Element (Element && el) = default;
|
|
328
|
+
auto & GetFESpace() const { return fes; }
|
|
329
|
+
INLINE FlatArray<DofId> GetDofs() const
|
|
330
|
+
{
|
|
331
|
+
if (!dofs_set)
|
|
332
|
+
fes.GetDofNrs (*this, temp_dnums);
|
|
333
|
+
dofs_set = true;
|
|
334
|
+
return temp_dnums;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
INLINE const ElementTransformation & GetTrafo() const
|
|
338
|
+
{
|
|
339
|
+
return fes.GetMeshAccess()->GetTrafo (ElementId(*this), lh);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
INLINE const FiniteElement & GetFE() const
|
|
343
|
+
{
|
|
344
|
+
return fes.GetFE (ElementId(*this), lh);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
INLINE LocalHeap & GetLH() const
|
|
348
|
+
{
|
|
349
|
+
return lh;
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
class ElementIterator
|
|
354
|
+
{
|
|
355
|
+
const FESpace & fes;
|
|
356
|
+
ElementId ei;
|
|
357
|
+
const FlatArray<bool> defined_on;
|
|
358
|
+
Array<DofId> & temp_dnums;
|
|
359
|
+
LocalHeap & lh;
|
|
360
|
+
void * heappointer;
|
|
361
|
+
public:
|
|
362
|
+
INLINE ElementIterator (const FESpace & afes, ElementId aei,
|
|
363
|
+
const FlatArray<bool> adefined_on,
|
|
364
|
+
Array<DofId> & atemp_dnums, LocalHeap & alh)
|
|
365
|
+
: fes(afes), ei(aei), defined_on(adefined_on),
|
|
366
|
+
temp_dnums(atemp_dnums), lh(alh), heappointer(lh.GetPointer()) { ; }
|
|
367
|
+
INLINE ElementIterator & operator++ ()
|
|
368
|
+
{
|
|
369
|
+
lh.CleanUp(heappointer);
|
|
370
|
+
++ei;
|
|
371
|
+
while (ei.Nr() < fes.GetMeshAccess()->GetNE(VorB(ei)) &&
|
|
372
|
+
(defined_on.Size() &&
|
|
373
|
+
!defined_on[fes.GetMeshAccess()->GetElIndex(ei)])
|
|
374
|
+
) ++ei;
|
|
375
|
+
return *this;
|
|
376
|
+
}
|
|
377
|
+
INLINE Element operator*() const { return Element (fes, ei, temp_dnums, lh); }
|
|
378
|
+
INLINE bool operator!=(const ElementIterator & id2) const { return ei != id2.ei; }
|
|
379
|
+
INLINE bool operator==(const ElementIterator & id2) const { return ei == id2.ei; }
|
|
380
|
+
};
|
|
381
|
+
|
|
382
|
+
class ElementRange : public IntRange
|
|
383
|
+
{
|
|
384
|
+
const FESpace & fes;
|
|
385
|
+
Array<bool> definedon;
|
|
386
|
+
const VorB vb;
|
|
387
|
+
mutable Array<DofId> temp_dnums;
|
|
388
|
+
mutable LocalHeap mylh;
|
|
389
|
+
LocalHeap & lh;
|
|
390
|
+
public:
|
|
391
|
+
INLINE ElementRange (const FESpace & afes, VorB avb, IntRange ar, LocalHeap && lh2)
|
|
392
|
+
: IntRange(ar), fes(afes),
|
|
393
|
+
definedon(fes.definedon[avb].Size(),fes.definedon[avb].Addr(0)),
|
|
394
|
+
vb(avb), mylh(std::move(lh2)), lh(mylh)
|
|
395
|
+
{ ; }
|
|
396
|
+
|
|
397
|
+
INLINE ElementRange (const FESpace & afes, VorB avb, IntRange ar, LocalHeap & lh2)
|
|
398
|
+
: IntRange(ar), fes(afes),
|
|
399
|
+
definedon(fes.definedon[avb].Size(),fes.definedon[avb].Addr(0)),
|
|
400
|
+
vb(avb), mylh(), lh(lh2)
|
|
401
|
+
{ ; }
|
|
402
|
+
|
|
403
|
+
ElementRange (const ElementRange & r2) = delete;
|
|
404
|
+
|
|
405
|
+
INLINE ElementRange (ElementRange && r2)
|
|
406
|
+
: IntRange(r2), fes(r2.fes), definedon(std::move(r2.definedon)), vb(r2.vb),
|
|
407
|
+
temp_dnums(std::move(r2.temp_dnums)), mylh(std::move(r2.mylh)),
|
|
408
|
+
lh( (&r2.mylh == &r2.lh) ? mylh : r2.lh)
|
|
409
|
+
{ ; }
|
|
410
|
+
|
|
411
|
+
INLINE ~ElementRange () { ; }
|
|
412
|
+
|
|
413
|
+
ElementRange & operator= (const ElementRange & r2) = delete;
|
|
414
|
+
|
|
415
|
+
INLINE ElementIterator begin () const
|
|
416
|
+
{
|
|
417
|
+
ElementId ei = ElementId(vb,First());
|
|
418
|
+
while ((ei.Nr() < IntRange::end()) &&
|
|
419
|
+
(definedon.Size() && !definedon[fes.GetMeshAccess()->GetElIndex(ei)]))
|
|
420
|
+
++ei;
|
|
421
|
+
return ElementIterator(fes, ei, definedon, temp_dnums, lh);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
INLINE ElementIterator end () const
|
|
425
|
+
{
|
|
426
|
+
return ElementIterator(fes, ElementId(vb,Next()), definedon, temp_dnums, lh);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
ElementRange Elements (VorB vb = VOL, LocalHeap && lh = 10000) const
|
|
431
|
+
{
|
|
432
|
+
// cout << "C++ FESpace::Elements with lh rvalue, name = " << lh.name << endl;
|
|
433
|
+
return ElementRange (*this, vb, IntRange (0, ma->GetNE(vb)), std::move(lh));
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
ElementRange Elements (VorB vb, LocalHeap & lh) const
|
|
437
|
+
{
|
|
438
|
+
return ElementRange (*this, vb, IntRange (0, ma->GetNE(vb)), lh);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/// returns finite element.
|
|
442
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const = 0;
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
/// get dof-nrs of domain or boundary element elnr
|
|
446
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const = 0;
|
|
447
|
+
|
|
448
|
+
virtual void GetDofNrs (NodeId ni, Array<DofId> & dnums) const;
|
|
449
|
+
BitArray GetDofs (const Region & reg) const;
|
|
450
|
+
Table<int> CreateDofTable (VorB vorb) const;
|
|
451
|
+
virtual void SelectDofs (const string & name, BitArray & dofs) const;
|
|
452
|
+
|
|
453
|
+
/// get coupling types of dofs
|
|
454
|
+
virtual void GetDofCouplingTypes (int elnr, Array<COUPLING_TYPE> & dnums) const;
|
|
455
|
+
|
|
456
|
+
/// get coupling types of dof
|
|
457
|
+
// virtual COUPLING_TYPE GetDofCouplingType (DofId dof) const;
|
|
458
|
+
// make sure we have it, otherwise throw exception
|
|
459
|
+
bool CouplingTypeArrayAvailable() const { return ctofdof.Size() == GetNDof(); }
|
|
460
|
+
COUPLING_TYPE GetDofCouplingType (DofId dof) const
|
|
461
|
+
{ return IsRegularDof(dof)
|
|
462
|
+
? ( (ctofdof.Size()==0) ? WIREBASKET_DOF : ctofdof[dof]) // would like to rely on the ctarray
|
|
463
|
+
: ( (dof == NO_DOF_NR) ? UNUSED_DOF : HIDDEN_DOF ); }
|
|
464
|
+
|
|
465
|
+
virtual void SetDofCouplingType (DofId dof, COUPLING_TYPE ct) const;
|
|
466
|
+
auto & CouplingTypes() { return ctofdof; }
|
|
467
|
+
void CheckCouplingTypes() const;
|
|
468
|
+
|
|
469
|
+
/// get dof-nrs of the element of certain coupling type
|
|
470
|
+
void GetDofNrs (ElementId ei, Array<DofId> & dnums, COUPLING_TYPE ctype) const;
|
|
471
|
+
|
|
472
|
+
/// get dofs (local numbering) of a certain type
|
|
473
|
+
virtual void GetElementDofsOfType (ElementId ei, Array<DofId> & dnums, COUPLING_TYPE ctype) const;
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
/// get dofs on vertex vnr
|
|
478
|
+
// [[deprecated("Use GetDofNrs(NODE_TYPE(NT_VERTEX,nr) instead")]]
|
|
479
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const;
|
|
480
|
+
/// get dofs on edge enr
|
|
481
|
+
// [[deprecated("Use GetDofNrs(NODE_TYPE(NT_EDGE,nr) instead")]]
|
|
482
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const;
|
|
483
|
+
/// get dofs on face fnr
|
|
484
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const;
|
|
485
|
+
/// get dofs on element (=cell) elnr
|
|
486
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const;
|
|
487
|
+
/// get dofs that are globally defined
|
|
488
|
+
virtual void GetGlobalDofNrs (int gnr, Array<DofId> & dnums) const;
|
|
489
|
+
|
|
490
|
+
virtual bool UsesDGCoupling () const throw() { return dgjumps; };
|
|
491
|
+
|
|
492
|
+
bool DoesAutoUpdate () const { return autoupdate; };
|
|
493
|
+
void ConnectAutoUpdate();
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
auto & DefinedOn(VorB vb) const { return definedon[vb]; }
|
|
497
|
+
|
|
498
|
+
bool DefinedOn(VorB vb, int domnr) const
|
|
499
|
+
{ return !definedon[vb].Size() || definedon[vb][domnr]; }
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
bool DefinedOn (ElementId id) const
|
|
503
|
+
{
|
|
504
|
+
if(!definedon[id.VB()].Size()) return true;
|
|
505
|
+
return definedon[id.VB()][ma->GetElement(id).GetIndex()];
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
bool DefinedOn (Ngs_Element el) const
|
|
509
|
+
{
|
|
510
|
+
if(!definedon[el.VB()].Size()) return true;
|
|
511
|
+
return definedon[el.VB()][el.GetIndex()];
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
xbool DefinedOnX (Ngs_Element el) const
|
|
515
|
+
{
|
|
516
|
+
// a temporary workaround,
|
|
517
|
+
// clean solution will be to set definedon[BND] correctly
|
|
518
|
+
if (el.VB() <= BND) return DefinedOn(el);
|
|
519
|
+
|
|
520
|
+
if (!definedon[el.VB()].Size()) return maybe;
|
|
521
|
+
return definedon[el.VB()][el.GetIndex()];
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
virtual void SetDefinedOn (VorB vb, const BitArray& defon);
|
|
526
|
+
///
|
|
527
|
+
//[[deprecated("Use SetDefinedOn(VorB, const Bitarray&)")]]
|
|
528
|
+
void SetDefinedOn (const BitArray & defon)
|
|
529
|
+
{ SetDefinedOn(VOL,defon); }
|
|
530
|
+
///
|
|
531
|
+
//[[deprecated("Use SetDefinedOn(VorB, const Bitarray&)")]]
|
|
532
|
+
void SetDefinedOnBoundary (const BitArray & defon)
|
|
533
|
+
{ SetDefinedOn(BND,defon); }
|
|
534
|
+
|
|
535
|
+
///
|
|
536
|
+
void SetDirichletBoundaries (const BitArray & dirbnds);
|
|
537
|
+
/// Get reference element for tet, prism, trig, etc ..
|
|
538
|
+
// const FiniteElement & GetFE (ELEMENT_TYPE type) const;
|
|
539
|
+
|
|
540
|
+
/// according low-order FESpace (if available)
|
|
541
|
+
[[deprecated("Use LowOrderFESpacePtr instead!")]]
|
|
542
|
+
FESpace & LowOrderFESpace () { return *low_order_space; }
|
|
543
|
+
/// according low-order FESpace (if available)
|
|
544
|
+
[[deprecated("Use LowOrderFESpacePtr instead!")]]
|
|
545
|
+
const FESpace & LowOrderFESpace () const { return *low_order_space; }
|
|
546
|
+
shared_ptr<FESpace> LowOrderFESpacePtr () const { return low_order_space; }
|
|
547
|
+
shared_ptr<BaseMatrix> LowOrderEmbedding () const { return low_order_embedding; }
|
|
548
|
+
|
|
549
|
+
/// non Dirichlet dofs
|
|
550
|
+
virtual shared_ptr<BitArray> GetFreeDofs (bool external = false) const;
|
|
551
|
+
bool IsFreeDof (DofId dof, bool external = false) const
|
|
552
|
+
{
|
|
553
|
+
if (external)
|
|
554
|
+
return external_free_dofs->Test(dof);
|
|
555
|
+
else
|
|
556
|
+
return free_dofs->Test(dof);
|
|
557
|
+
}
|
|
558
|
+
///
|
|
559
|
+
bool IsDirichletDof (int i) const
|
|
560
|
+
{ return dirichlet_dofs.Size() && dirichlet_dofs[i]; }
|
|
561
|
+
|
|
562
|
+
bool IsDirichletBoundary (int i) const
|
|
563
|
+
{ return dirichlet_boundaries.Size() && dirichlet_boundaries[i]; }
|
|
564
|
+
|
|
565
|
+
/// is vertex on Dirichlet boundary ?
|
|
566
|
+
bool IsDirichletVertex (size_t i) const { return dirichlet_vertex.Size() && dirichlet_vertex[i]; }
|
|
567
|
+
/// is edge on Dirichlet boundary ?
|
|
568
|
+
bool IsDirichletEdge (size_t i) const { return dirichlet_edge.Size() && dirichlet_edge[i]; }
|
|
569
|
+
/// is face on Dirichlet boundary ?
|
|
570
|
+
bool IsDirichletFace (size_t i) const { return dirichlet_face.Size() && dirichlet_face[i]; }
|
|
571
|
+
|
|
572
|
+
void GetFilteredDofs(COUPLING_TYPE doffilter, BitArray & output, bool freedofsonly=true) const;
|
|
573
|
+
///
|
|
574
|
+
virtual shared_ptr<Table<int>> CreateSmoothingBlocks (const Flags & flags) const;
|
|
575
|
+
/// for anisotropic plane smoothing:
|
|
576
|
+
virtual shared_ptr<Array<int>> CreateDirectSolverClusters (const Flags & flags) const
|
|
577
|
+
{ return nullptr; }
|
|
578
|
+
|
|
579
|
+
virtual void AddDirectSolverClusterDof(int dn) const
|
|
580
|
+
{ adddirectsolverdofs.Append(dn); }
|
|
581
|
+
|
|
582
|
+
virtual Array<int> & DirectVertexClusters(void)
|
|
583
|
+
{ return directvertexclusters; }
|
|
584
|
+
virtual Array<int> & DirectEdgeClusters(void)
|
|
585
|
+
{ return directedgeclusters; }
|
|
586
|
+
virtual Array<int> & DirectFaceClusters(void)
|
|
587
|
+
{ return directfaceclusters; }
|
|
588
|
+
virtual Array<int> & DirectElementClusters(void)
|
|
589
|
+
{ return directelementclusters; }
|
|
590
|
+
|
|
591
|
+
bool IsAtomicDof (size_t nr) const { return (is_atomic_dof.Size() != 0) && is_atomic_dof[nr]; }
|
|
592
|
+
bool HasAtomicDofs () const { return is_atomic_dof.Size() != 0; }
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
bool NeedsTransformVec() const { return needs_transform_vec; }
|
|
596
|
+
|
|
597
|
+
void TransformMat (ElementId ei,
|
|
598
|
+
SliceMatrix<double> mat, TRANSFORM_TYPE type) const
|
|
599
|
+
{
|
|
600
|
+
if (needs_transform_vec)
|
|
601
|
+
VTransformMR (ei, mat, type);
|
|
602
|
+
}
|
|
603
|
+
void TransformMat (ElementId ei,
|
|
604
|
+
SliceMatrix<Complex> mat, TRANSFORM_TYPE type) const
|
|
605
|
+
{
|
|
606
|
+
if (needs_transform_vec)
|
|
607
|
+
VTransformMC (ei, mat, type);
|
|
608
|
+
}
|
|
609
|
+
void TransformVec (ElementId ei,
|
|
610
|
+
SliceVector<double> vec, TRANSFORM_TYPE type) const
|
|
611
|
+
{
|
|
612
|
+
if (needs_transform_vec)
|
|
613
|
+
VTransformVR (ei, vec, type);
|
|
614
|
+
}
|
|
615
|
+
void TransformVec (ElementId ei,
|
|
616
|
+
SliceVector<Complex> vec, TRANSFORM_TYPE type) const
|
|
617
|
+
{
|
|
618
|
+
if (needs_transform_vec)
|
|
619
|
+
VTransformVC (ei, vec, type);
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
virtual void VTransformMR (ElementId ei,
|
|
623
|
+
const SliceMatrix<double> mat, TRANSFORM_TYPE type) const
|
|
624
|
+
{ ; }
|
|
625
|
+
virtual void VTransformMC (ElementId ei,
|
|
626
|
+
const SliceMatrix<Complex> mat, TRANSFORM_TYPE type) const
|
|
627
|
+
{ ; }
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
virtual void VTransformVR (ElementId ei,
|
|
631
|
+
const SliceVector<double> vec, TRANSFORM_TYPE type) const
|
|
632
|
+
{ ; }
|
|
633
|
+
virtual void VTransformVC (ElementId ei,
|
|
634
|
+
const SliceVector<Complex> vec, TRANSFORM_TYPE type) const
|
|
635
|
+
{ ; }
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
/// Returns multigrid-prolongation
|
|
639
|
+
virtual shared_ptr<Prolongation> GetProlongation () const;
|
|
640
|
+
// { return prol; }
|
|
641
|
+
/// Set multigrid prolongation
|
|
642
|
+
// void SetProlongation (ngmg::Prolongation * aprol)
|
|
643
|
+
// { prol = aprol; }
|
|
644
|
+
virtual void SetHarmonicProlongation (shared_ptr<BilinearForm> bfa, string inverse);
|
|
645
|
+
|
|
646
|
+
/// returns function-evaluator
|
|
647
|
+
shared_ptr<DifferentialOperator> GetEvaluator (VorB vb = VOL) const
|
|
648
|
+
{
|
|
649
|
+
return evaluator[vb];
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
shared_ptr<DifferentialOperator> GetFluxEvaluator (VorB vb = VOL) const
|
|
654
|
+
{
|
|
655
|
+
return flux_evaluator[vb];
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
virtual SymbolTable<shared_ptr<DifferentialOperator>> GetAdditionalEvaluators () const;
|
|
660
|
+
// { return additional_evaluators; }
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
shared_ptr<BilinearFormIntegrator> GetIntegrator (VorB vb = VOL) const;
|
|
664
|
+
/*
|
|
665
|
+
{
|
|
666
|
+
return integrator[vb];
|
|
667
|
+
}
|
|
668
|
+
*/
|
|
669
|
+
|
|
670
|
+
ProxyNode GetProxyFunction(bool testfunction) const;
|
|
671
|
+
virtual ProxyNode MakeProxyFunction (bool testfunction,
|
|
672
|
+
const function<shared_ptr<ProxyFunction>(shared_ptr<ProxyFunction>)> & addblock) const;
|
|
673
|
+
|
|
674
|
+
auto GetTrialFunction() const { return GetProxyFunction(false); }
|
|
675
|
+
auto GetTestFunction() const { return GetProxyFunction(true); }
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
virtual shared_ptr<BaseMatrix> GetMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
679
|
+
shared_ptr<Region> defon,
|
|
680
|
+
LocalHeap & lh) const;
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
virtual shared_ptr<BaseMatrix> CreateMassOperator (shared_ptr<CoefficientFunction> rho,
|
|
684
|
+
shared_ptr<Region> defon,
|
|
685
|
+
bool inverse,
|
|
686
|
+
LocalHeap & lh) const;
|
|
687
|
+
|
|
688
|
+
virtual void SolveM(CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
689
|
+
LocalHeap & lh) const;
|
|
690
|
+
virtual void ApplyM(CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
691
|
+
LocalHeap & lh) const;
|
|
692
|
+
|
|
693
|
+
virtual shared_ptr<BaseMatrix> GetTraceOperator (shared_ptr<FESpace> tracespace, bool avg) const;
|
|
694
|
+
|
|
695
|
+
virtual shared_ptr<BaseMatrix> ConvertL2Operator (shared_ptr<FESpace> l2space) const;
|
|
696
|
+
|
|
697
|
+
virtual void GetTrace (const FESpace & tracespace, const BaseVector & in, BaseVector & out, bool avg,
|
|
698
|
+
LocalHeap & lh) const;
|
|
699
|
+
|
|
700
|
+
virtual void GetTraceTrans (const FESpace & tracespace, const BaseVector & in, BaseVector & out, bool avg,
|
|
701
|
+
LocalHeap & lh) const;
|
|
702
|
+
|
|
703
|
+
shared_ptr<ParallelDofs> GetParallelDofs () const { return paralleldofs; }
|
|
704
|
+
virtual void UpdateParallelDofs ();
|
|
705
|
+
|
|
706
|
+
//// is FESpace mpi-distributed ?
|
|
707
|
+
bool IsParallel() const;
|
|
708
|
+
|
|
709
|
+
/// ndof over all mpi-partitions
|
|
710
|
+
size_t GetNDofGlobal() const;
|
|
711
|
+
|
|
712
|
+
virtual int GetRelOrder() const
|
|
713
|
+
{
|
|
714
|
+
return 0;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
virtual bool VarOrder() const { return 0; }
|
|
718
|
+
|
|
719
|
+
bool timing;
|
|
720
|
+
std::list<std::tuple<std::string,double>> Timing () const;
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
/*
|
|
726
|
+
[[deprecated("Use GetFE with element-id instead of elnr!")]]
|
|
727
|
+
virtual const FiniteElement & GetFE (int elnr, LocalHeap & lh) const final;
|
|
728
|
+
[[deprecated("Use GetFE(ElementId(BND,elnr)) instead!")]]
|
|
729
|
+
virtual const FiniteElement & GetSFE (int elnr, LocalHeap & lh) const final;
|
|
730
|
+
[[deprecated("Use GetFE(ElementId(BBND,elnr)) instead!")]]
|
|
731
|
+
virtual const FiniteElement & GetCD2FE (int cd2elnr, LocalHeap & lh) const final;
|
|
732
|
+
*/
|
|
733
|
+
/// get dof-nrs of the element
|
|
734
|
+
[[deprecated("Use GetDofNrs with element-id instead of elnr!")]]
|
|
735
|
+
void GetDofNrs (int elnr, Array<DofId> & dnums) const
|
|
736
|
+
{ GetDofNrs(ElementId(VOL,elnr),dnums); }
|
|
737
|
+
|
|
738
|
+
[[deprecated("Use GetDofNrs with element-id instead of elnr!")]]
|
|
739
|
+
void GetDofNrs (int elnr, Array<DofId> & dnums, COUPLING_TYPE ctype) const;
|
|
740
|
+
|
|
741
|
+
/// get dofs on nr'th node of type nt.
|
|
742
|
+
[[deprecated("Use GetDofNrs with NodeId instead of nt/nr")]]
|
|
743
|
+
virtual void GetNodeDofNrs (NODE_TYPE nt, int nr, Array<int> & dnums) const final;
|
|
744
|
+
/// get number of low-order dofs for node of type nt
|
|
745
|
+
// virtual int GetNLowOrderNodeDofs ( NODE_TYPE nt ) const;
|
|
746
|
+
// { return lodofs_per_node[nt]; }
|
|
747
|
+
|
|
748
|
+
/// returns dofs of sourface element
|
|
749
|
+
[[deprecated("Use GetDofNrs(ElementId(BND,elnr)) instead!")]]
|
|
750
|
+
void GetSDofNrs (int selnr, Array<DofId> & dnums) const
|
|
751
|
+
{ GetDofNrs(ElementId(BND,selnr),dnums); }
|
|
752
|
+
|
|
753
|
+
/// is the FESpace defined for this sub-domain nr ?
|
|
754
|
+
[[deprecated("Use Definedon(VorB,int) instead")]]
|
|
755
|
+
bool DefinedOn (int domnr) const
|
|
756
|
+
{ return !definedon[VOL].Size() || definedon[VOL][domnr]; }
|
|
757
|
+
/// is the FESpace defined for this boundary nr ?
|
|
758
|
+
[[deprecated("Use Definedon(VorB,int) instead")]]
|
|
759
|
+
bool DefinedOnBoundary (int bnr) const
|
|
760
|
+
{return !definedon[BND].Size() || definedon[BND][bnr]; }
|
|
761
|
+
|
|
762
|
+
/// is the FESpace defined for this sub-domain / boundary nr ?
|
|
763
|
+
[[deprecated("Use DefinedOn(VorB, int) instead")]]
|
|
764
|
+
bool DefinedOn (int index, bool bound) const
|
|
765
|
+
{
|
|
766
|
+
if (bound)
|
|
767
|
+
return !definedon[BND].Size() || definedon[BND][index];
|
|
768
|
+
else
|
|
769
|
+
return !definedon[VOL].Size() || definedon[VOL][index];
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
[[deprecated("Use TransformMat with VorB instead of bool")]]
|
|
773
|
+
void TransformMat (int elnr, bool boundary,
|
|
774
|
+
const SliceMatrix<double> & mat, TRANSFORM_TYPE type) const
|
|
775
|
+
{
|
|
776
|
+
TransformMat(ElementId(boundary ? BND : VOL, elnr), mat, type);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
[[deprecated("Use TransformMat with VorB instead of bool")]]
|
|
780
|
+
void TransformMat (int elnr, bool boundary,
|
|
781
|
+
const SliceMatrix<Complex> & mat, TRANSFORM_TYPE type) const
|
|
782
|
+
{
|
|
783
|
+
TransformMat(ElementId(boundary ? BND : VOL, elnr), mat, type);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
[[deprecated("Use TransformVec with VorB instead of bool")]]
|
|
787
|
+
void TransformVec (int elnr, bool boundary,
|
|
788
|
+
const FlatVector<double> & vec, TRANSFORM_TYPE type) const
|
|
789
|
+
{
|
|
790
|
+
// VTransformVR (elnr, boundary ? BND : VOL, vec, type);
|
|
791
|
+
VTransformVR (ElementId(boundary ? BND : VOL, elnr), vec, type);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
[[deprecated("Use TransformVec with VorB instead of bool")]]
|
|
795
|
+
void TransformVec (int elnr, bool boundary,
|
|
796
|
+
const FlatVector<Complex> & vec, TRANSFORM_TYPE type) const
|
|
797
|
+
{
|
|
798
|
+
// VTransformVC (elnr, boundary ? BND : VOL, vec, type);
|
|
799
|
+
VTransformVC (ElementId(boundary ? BND : VOL, elnr), vec, type);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
[[deprecated("Use TransformMat with VorB instead of bool")]]
|
|
803
|
+
void TransformMat (int elnr, VorB vb,
|
|
804
|
+
const SliceMatrix<double> & mat, TRANSFORM_TYPE type) const
|
|
805
|
+
{
|
|
806
|
+
// VTransformMR (elnr, vb, mat, type);
|
|
807
|
+
VTransformMR (ElementId(vb, elnr), mat, type);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
[[deprecated("Use TransformMat with VorB instead of bool")]]
|
|
811
|
+
void TransformMat (int elnr, VorB vb,
|
|
812
|
+
const SliceMatrix<Complex> & mat, TRANSFORM_TYPE type) const
|
|
813
|
+
{
|
|
814
|
+
// VTransformMC (elnr, vb, mat, type);
|
|
815
|
+
VTransformMC (ElementId(vb, elnr), mat, type);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
[[deprecated("Use TransformVec with VorB instead of bool")]]
|
|
819
|
+
void TransformVec (int elnr, VorB vb,
|
|
820
|
+
const FlatVector<double> & vec, TRANSFORM_TYPE type) const
|
|
821
|
+
{
|
|
822
|
+
// VTransformVR (elnr, vb, vec, type);
|
|
823
|
+
VTransformVR (ElementId(vb, elnr), vec, type);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
[[deprecated("Use TransformVec with VorB instead of bool")]]
|
|
827
|
+
void TransformVec (int elnr, VorB vb,
|
|
828
|
+
const FlatVector<Complex> & vec, TRANSFORM_TYPE type) const
|
|
829
|
+
{
|
|
830
|
+
// VTransformVC (elnr, vb, vec, type);
|
|
831
|
+
VTransformVC (ElementId(vb, elnr), vec, type);
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
[[deprecated("Use GetEvaluator(VorB) instead of GetEvaluator(bool)!")]]
|
|
835
|
+
shared_ptr<DifferentialOperator> GetEvaluator (bool boundary) const
|
|
836
|
+
{
|
|
837
|
+
if(boundary)
|
|
838
|
+
return evaluator[BND];
|
|
839
|
+
else
|
|
840
|
+
return evaluator[VOL];
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
[[deprecated("Use GetFluxEvaluator(VorB) instead of GetFluxEvaluator(bool)!")]]
|
|
844
|
+
shared_ptr<DifferentialOperator> GetFluxEvaluator (bool boundary) const
|
|
845
|
+
{
|
|
846
|
+
if(boundary)
|
|
847
|
+
return flux_evaluator[BND];
|
|
848
|
+
else
|
|
849
|
+
return flux_evaluator[VOL];
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/// returns function-evaluator
|
|
853
|
+
[[deprecated("Use GetIntegrator(VorB) instead of GetIntegrator(bool)!")]]
|
|
854
|
+
shared_ptr<BilinearFormIntegrator> GetIntegrator (bool vb = VOL) const
|
|
855
|
+
{
|
|
856
|
+
return integrator[vb];
|
|
857
|
+
}
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
|
|
862
|
+
extern NGS_DLL_HEADER void IterateElements (const FESpace & fes,
|
|
863
|
+
VorB vb,
|
|
864
|
+
LocalHeap & clh,
|
|
865
|
+
const function<void(FESpace::Element,LocalHeap&)> & func);
|
|
866
|
+
|
|
867
|
+
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
A space of continuous finite elements.
|
|
871
|
+
Supports first and second order finite elements.
|
|
872
|
+
*/
|
|
873
|
+
class NGS_DLL_HEADER NodalFESpace : public FESpace
|
|
874
|
+
{
|
|
875
|
+
///
|
|
876
|
+
// Array<int> ndlevel;
|
|
877
|
+
bool hb_defined;
|
|
878
|
+
Array<bool> used_vertex;
|
|
879
|
+
Array<bool> used_edge;
|
|
880
|
+
|
|
881
|
+
public:
|
|
882
|
+
|
|
883
|
+
///
|
|
884
|
+
NodalFESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool parseflags=false);
|
|
885
|
+
///
|
|
886
|
+
virtual ~NodalFESpace ();
|
|
887
|
+
|
|
888
|
+
///
|
|
889
|
+
virtual string GetClassName () const override
|
|
890
|
+
{
|
|
891
|
+
return "NodalFESpace";
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
///
|
|
895
|
+
void Update () override;
|
|
896
|
+
void UpdateCouplingDofArray() override;
|
|
897
|
+
|
|
898
|
+
virtual void DoArchive (Archive & archive) override;
|
|
899
|
+
|
|
900
|
+
virtual FiniteElement & GetFE(ElementId ei, Allocator & lh) const override;
|
|
901
|
+
///
|
|
902
|
+
// virtual size_t GetNDof () const throw() override;
|
|
903
|
+
///
|
|
904
|
+
// virtual size_t GetNDofLevel (int level) const override;
|
|
905
|
+
///
|
|
906
|
+
// using FESpace::GetDofNrs;
|
|
907
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
908
|
+
///
|
|
909
|
+
|
|
910
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
|
|
911
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
|
|
912
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
|
|
913
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override;
|
|
914
|
+
|
|
915
|
+
virtual shared_ptr<Array<int>> CreateDirectSolverClusters (const Flags & flags) const override;
|
|
916
|
+
};
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
///
|
|
924
|
+
class NGS_DLL_HEADER NonconformingFESpace : public FESpace
|
|
925
|
+
{
|
|
926
|
+
///
|
|
927
|
+
// Array<int> ndlevel;
|
|
928
|
+
|
|
929
|
+
public:
|
|
930
|
+
NonconformingFESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool parseflags=false);
|
|
931
|
+
virtual ~NonconformingFESpace ();
|
|
932
|
+
|
|
933
|
+
virtual string GetClassName () const override
|
|
934
|
+
{ return "Nonconforming FESpace"; }
|
|
935
|
+
|
|
936
|
+
///
|
|
937
|
+
void Update() override;
|
|
938
|
+
|
|
939
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
940
|
+
///
|
|
941
|
+
// virtual size_t GetNDof () const throw() override;
|
|
942
|
+
///
|
|
943
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
944
|
+
};
|
|
945
|
+
|
|
946
|
+
|
|
947
|
+
|
|
948
|
+
///
|
|
949
|
+
class NGS_DLL_HEADER NonconformingSurfaceFESpace : public FESpace
|
|
950
|
+
{
|
|
951
|
+
///
|
|
952
|
+
// Array<int> ndlevel;
|
|
953
|
+
|
|
954
|
+
public:
|
|
955
|
+
NonconformingSurfaceFESpace (shared_ptr<MeshAccess> ama, const Flags & flags, bool parseflags=false);
|
|
956
|
+
virtual ~NonconformingSurfaceFESpace ();
|
|
957
|
+
|
|
958
|
+
virtual string GetClassName () const override
|
|
959
|
+
{ return "Nonconforming surface FESpace"; }
|
|
960
|
+
|
|
961
|
+
///
|
|
962
|
+
void Update() override;
|
|
963
|
+
|
|
964
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
965
|
+
///
|
|
966
|
+
// virtual size_t GetNDof () const throw() override;
|
|
967
|
+
///
|
|
968
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
969
|
+
};
|
|
970
|
+
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
///
|
|
978
|
+
class NGS_DLL_HEADER ElementFESpace : public FESpace
|
|
979
|
+
{
|
|
980
|
+
/// Array<int> startelement;
|
|
981
|
+
// Array<int> ndlevel;
|
|
982
|
+
int n_el_dofs;
|
|
983
|
+
public:
|
|
984
|
+
///
|
|
985
|
+
ElementFESpace (shared_ptr<MeshAccess> ama, const Flags& flags, bool parseflags=false);
|
|
986
|
+
|
|
987
|
+
///
|
|
988
|
+
~ElementFESpace ();
|
|
989
|
+
|
|
990
|
+
virtual string GetClassName () const override
|
|
991
|
+
{
|
|
992
|
+
return "ElementFESpace";
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
///
|
|
996
|
+
void Update() override;
|
|
997
|
+
///
|
|
998
|
+
virtual void DoArchive (Archive & archive) override;
|
|
999
|
+
|
|
1000
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
1001
|
+
///
|
|
1002
|
+
// virtual size_t GetNDof () const throw() override { return ndlevel.Last(); }
|
|
1003
|
+
|
|
1004
|
+
///
|
|
1005
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
1006
|
+
|
|
1007
|
+
///
|
|
1008
|
+
// virtual size_t GetNDofLevel (int level) const override;
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override
|
|
1012
|
+
{ dnums.SetSize (0); }
|
|
1013
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override
|
|
1014
|
+
{ dnums.SetSize (0); }
|
|
1015
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override
|
|
1016
|
+
{ dnums.SetSize (0); }
|
|
1017
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override
|
|
1018
|
+
{ GetDofNrs (elnr, dnums); }
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
|
|
1025
|
+
/// Non-continous fe space on boundary
|
|
1026
|
+
class NGS_DLL_HEADER SurfaceElementFESpace : public FESpace
|
|
1027
|
+
{
|
|
1028
|
+
///
|
|
1029
|
+
// Array<int> ndlevel;
|
|
1030
|
+
int n_el_dofs;
|
|
1031
|
+
public:
|
|
1032
|
+
///
|
|
1033
|
+
SurfaceElementFESpace (shared_ptr<MeshAccess> ama, const Flags& flags,
|
|
1034
|
+
bool checkflags = false);
|
|
1035
|
+
|
|
1036
|
+
///
|
|
1037
|
+
~SurfaceElementFESpace ();
|
|
1038
|
+
|
|
1039
|
+
///
|
|
1040
|
+
virtual string GetClassName() const override
|
|
1041
|
+
{ return "SurfaceElement"; }
|
|
1042
|
+
|
|
1043
|
+
///
|
|
1044
|
+
void Update() override;
|
|
1045
|
+
|
|
1046
|
+
///
|
|
1047
|
+
// virtual size_t GetNDof () const throw() { return ndlevel.Last(); }
|
|
1048
|
+
|
|
1049
|
+
///
|
|
1050
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
1051
|
+
|
|
1052
|
+
///
|
|
1053
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
1054
|
+
|
|
1055
|
+
///
|
|
1056
|
+
// virtual size_t GetNDofLevel (int level) const;
|
|
1057
|
+
|
|
1058
|
+
};
|
|
1059
|
+
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
|
|
1065
|
+
|
|
1066
|
+
/// A combination of fe-spaces
|
|
1067
|
+
class NGS_DLL_HEADER CompoundFESpace : public FESpace
|
|
1068
|
+
{
|
|
1069
|
+
protected:
|
|
1070
|
+
/// pointers to components
|
|
1071
|
+
Array<shared_ptr<FESpace>> spaces;
|
|
1072
|
+
/// cummlated number of dofs of components
|
|
1073
|
+
Array<int> cummulative_nd;
|
|
1074
|
+
/// dofs on each multigrid level
|
|
1075
|
+
/// Array<int> ndlevel;
|
|
1076
|
+
bool all_the_same;
|
|
1077
|
+
bool do_subspace_update = true;
|
|
1078
|
+
public:
|
|
1079
|
+
/// generates a compound space.
|
|
1080
|
+
/// components will be added later
|
|
1081
|
+
CompoundFESpace (shared_ptr<MeshAccess> ama,
|
|
1082
|
+
const Flags & flags, bool parseflags = false);
|
|
1083
|
+
/// generates a compound space
|
|
1084
|
+
/// components are provided in aspaces
|
|
1085
|
+
CompoundFESpace (shared_ptr<MeshAccess> ama,
|
|
1086
|
+
const Array<shared_ptr<FESpace>> & aspaces,
|
|
1087
|
+
const Flags & flags, bool parseflags = false);
|
|
1088
|
+
|
|
1089
|
+
/// not much to do.
|
|
1090
|
+
/// components will not be deleted
|
|
1091
|
+
virtual ~CompoundFESpace ();
|
|
1092
|
+
|
|
1093
|
+
/// add an additional component space
|
|
1094
|
+
void AddSpace (shared_ptr<FESpace> fes);
|
|
1095
|
+
auto & Spaces() const { return spaces; }
|
|
1096
|
+
|
|
1097
|
+
///
|
|
1098
|
+
string GetClassName () const override
|
|
1099
|
+
{
|
|
1100
|
+
return "CompoundFESpace";
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
/// updates also components
|
|
1104
|
+
void Update() override;
|
|
1105
|
+
/// updates also components
|
|
1106
|
+
void FinalizeUpdate() override;
|
|
1107
|
+
|
|
1108
|
+
ProxyNode MakeProxyFunction (bool testfunction,
|
|
1109
|
+
const function<shared_ptr<ProxyFunction>(shared_ptr<ProxyFunction>)> & addblock) const override;
|
|
1110
|
+
|
|
1111
|
+
/// copies dofcoupling from components
|
|
1112
|
+
void UpdateCouplingDofArray() override;
|
|
1113
|
+
virtual void UpdateFreeDofs() override;
|
|
1114
|
+
|
|
1115
|
+
void SetDefinedOn (VorB vb, const BitArray& defon) override;
|
|
1116
|
+
|
|
1117
|
+
DofRange GetRange (int spacenr) const
|
|
1118
|
+
{
|
|
1119
|
+
if (spacenr+1 >= cummulative_nd.Size())
|
|
1120
|
+
throw Exception("spacenr >= cummulative_nd.Size() in CompoundFESpace!");
|
|
1121
|
+
|
|
1122
|
+
return DofRange(IntRange(cummulative_nd[spacenr], cummulative_nd[spacenr+1]),
|
|
1123
|
+
spaces[spacenr]->GetParallelDofs());
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
shared_ptr<BaseMatrix> EmbeddingOperator (int spacenr) const;
|
|
1127
|
+
shared_ptr<BaseMatrix> RestrictionOperator (int spacenr) const;
|
|
1128
|
+
|
|
1129
|
+
/// get component space
|
|
1130
|
+
shared_ptr<FESpace> operator[] (int i) const { return spaces[i]; }
|
|
1131
|
+
|
|
1132
|
+
/// returns a compound finite element
|
|
1133
|
+
FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
1134
|
+
///
|
|
1135
|
+
void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
1136
|
+
void GetDofNrs (NodeId ni, Array<DofId> & dnums) const override;
|
|
1137
|
+
void GetElementDofsOfType (ElementId ei, Array<DofId> & dnums, COUPLING_TYPE ctype) const override;
|
|
1138
|
+
///
|
|
1139
|
+
[[deprecated("Use GetDofNrs(NODE_TYPE(NT_VERTEX,nr) instead")]]
|
|
1140
|
+
void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
|
|
1141
|
+
[[deprecated("Use GetDofNrs(NODE_TYPE(NT_EDGE,nr) instead")]]
|
|
1142
|
+
void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
|
|
1143
|
+
void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
|
|
1144
|
+
void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override;
|
|
1145
|
+
void SelectDofs (const string & name, BitArray & dofs) const override;
|
|
1146
|
+
|
|
1147
|
+
void SolveM(CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
1148
|
+
LocalHeap & lh) const override;
|
|
1149
|
+
void ApplyM(CoefficientFunction * rho, BaseVector & vec, Region * definedon,
|
|
1150
|
+
LocalHeap & lh) const override;
|
|
1151
|
+
|
|
1152
|
+
template <class T> NGS_DLL_HEADER
|
|
1153
|
+
void T_TransformMat (ElementId ei,
|
|
1154
|
+
SliceMatrix<T> mat, TRANSFORM_TYPE tt) const;
|
|
1155
|
+
|
|
1156
|
+
template <class T> NGS_DLL_HEADER
|
|
1157
|
+
void T_TransformVec (ElementId ei,
|
|
1158
|
+
SliceVector<T> vec, TRANSFORM_TYPE tt) const;
|
|
1159
|
+
|
|
1160
|
+
void VTransformMR (ElementId ei,
|
|
1161
|
+
SliceMatrix<double> mat, TRANSFORM_TYPE tt) const override;
|
|
1162
|
+
void VTransformMC (ElementId ei,
|
|
1163
|
+
SliceMatrix<Complex> mat, TRANSFORM_TYPE tt) const override;
|
|
1164
|
+
void VTransformVR (ElementId ei,
|
|
1165
|
+
SliceVector<double> vec, TRANSFORM_TYPE tt) const override;
|
|
1166
|
+
void VTransformVC (ElementId ei,
|
|
1167
|
+
SliceVector<Complex> vec, TRANSFORM_TYPE tt) const override;
|
|
1168
|
+
|
|
1169
|
+
/// number of component spaces
|
|
1170
|
+
inline int GetNSpaces () const { return spaces.Size(); }
|
|
1171
|
+
|
|
1172
|
+
void SetDoSubspaceUpdate(bool _do_subspace_update)
|
|
1173
|
+
{ do_subspace_update = _do_subspace_update; }
|
|
1174
|
+
};
|
|
1175
|
+
|
|
1176
|
+
|
|
1177
|
+
|
|
1178
|
+
class NGS_DLL_HEADER CompoundFESpaceAllSame : public CompoundFESpace
|
|
1179
|
+
{
|
|
1180
|
+
bool interleaved;
|
|
1181
|
+
public:
|
|
1182
|
+
CompoundFESpaceAllSame (shared_ptr<FESpace> space, int dim, const Flags & flags,
|
|
1183
|
+
bool checkflags = false);
|
|
1184
|
+
virtual string GetClassName () const override;
|
|
1185
|
+
|
|
1186
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override {
|
|
1187
|
+
return *new (alloc) VectorFiniteElement (spaces[0]->GetFE(ei, alloc), spaces.Size());
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override
|
|
1191
|
+
{
|
|
1192
|
+
return spaces[0]->GetDualShapeNodes(vb);
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
virtual shared_ptr<BaseMatrix> GetTraceOperator (shared_ptr<FESpace> tracespace, bool avg) const override;
|
|
1196
|
+
};
|
|
1197
|
+
|
|
1198
|
+
class NGS_DLL_HEADER MatrixFESpace : public CompoundFESpace
|
|
1199
|
+
{
|
|
1200
|
+
bool symmetric;
|
|
1201
|
+
bool deviatoric;
|
|
1202
|
+
bool skewsymmetric;
|
|
1203
|
+
int vdim;
|
|
1204
|
+
public:
|
|
1205
|
+
MatrixFESpace (shared_ptr<FESpace> space, int avdim, const Flags & flags,
|
|
1206
|
+
bool checkflags = false);
|
|
1207
|
+
virtual string GetClassName () const override;
|
|
1208
|
+
FiniteElement & GetFE (ElementId ei, Allocator & lh) const override;
|
|
1209
|
+
};
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
|
|
1213
|
+
template <typename BASESPACE>
|
|
1214
|
+
class VectorFESpace : public CompoundFESpace
|
|
1215
|
+
{
|
|
1216
|
+
public:
|
|
1217
|
+
VectorFESpace (shared_ptr<MeshAccess> ama, const Flags & flags,
|
|
1218
|
+
bool checkflags = false)
|
|
1219
|
+
: CompoundFESpace (ama, flags)
|
|
1220
|
+
{
|
|
1221
|
+
Array<string> dirichlet_comp;
|
|
1222
|
+
string dirnames[] = { "dirichletx", "dirichlety", "dirichletz" };
|
|
1223
|
+
for (int i = 0; i < ma->GetDimension(); i++)
|
|
1224
|
+
{
|
|
1225
|
+
Flags tmpflags = flags;
|
|
1226
|
+
if (flags.StringFlagDefined(dirnames[i]))
|
|
1227
|
+
tmpflags.SetFlag ("dirichlet", flags.GetStringFlag(dirnames[i]));
|
|
1228
|
+
if (flags.StringFlagDefined(dirnames[i]+"_bbnd"))
|
|
1229
|
+
tmpflags.SetFlag ("dirichlet_bbnd", flags.GetStringFlag(dirnames[i]+"_bbnd"));
|
|
1230
|
+
AddSpace (make_shared<BASESPACE> (ama, tmpflags));
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
for (auto vb : { VOL, BND, BBND, BBBND })
|
|
1234
|
+
{
|
|
1235
|
+
if (auto eval = spaces[0] -> GetEvaluator(vb))
|
|
1236
|
+
evaluator[vb] = make_shared<VectorDifferentialOperator> (eval, ma->GetDimension());
|
|
1237
|
+
if (auto fluxeval = spaces[0] -> GetFluxEvaluator(vb))
|
|
1238
|
+
flux_evaluator[vb] = make_shared<VectorDifferentialOperator> (fluxeval, ma->GetDimension());
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
auto additional = spaces[0]->GetAdditionalEvaluators();
|
|
1242
|
+
for (int i = 0; i < additional.Size(); i++)
|
|
1243
|
+
additional_evaluators.Set (additional.GetName(i),
|
|
1244
|
+
make_shared<VectorDifferentialOperator>(additional[i], ma->GetDimension()));
|
|
1245
|
+
|
|
1246
|
+
type = "Vector"+(*this)[0]->type;
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
virtual string GetClassName () const override
|
|
1250
|
+
{
|
|
1251
|
+
return "Vector"+ (*this)[0]->GetClassName();
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override {
|
|
1255
|
+
return *new (alloc) VectorFiniteElement (spaces[0]->GetFE(ei, alloc), spaces.Size());
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override
|
|
1259
|
+
{
|
|
1260
|
+
return spaces[0]->GetDualShapeNodes(vb);
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
};
|
|
1264
|
+
|
|
1265
|
+
|
|
1266
|
+
|
|
1267
|
+
class NGS_DLL_HEADER ApplyMass : public BaseMatrix
|
|
1268
|
+
{
|
|
1269
|
+
protected:
|
|
1270
|
+
shared_ptr<FESpace> fes;
|
|
1271
|
+
shared_ptr<CoefficientFunction> rho;
|
|
1272
|
+
bool inverse;
|
|
1273
|
+
shared_ptr<Region> definedon;
|
|
1274
|
+
LocalHeap & lh;
|
|
1275
|
+
public:
|
|
1276
|
+
///
|
|
1277
|
+
ApplyMass (shared_ptr<FESpace> afes,
|
|
1278
|
+
shared_ptr<CoefficientFunction> arho,
|
|
1279
|
+
bool ainverse,
|
|
1280
|
+
shared_ptr<Region> adefinedon,
|
|
1281
|
+
LocalHeap & alh);
|
|
1282
|
+
virtual ~ApplyMass();
|
|
1283
|
+
virtual shared_ptr<BaseMatrix> InverseMatrix (shared_ptr<BitArray> subset = nullptr) const override;
|
|
1284
|
+
|
|
1285
|
+
virtual bool IsComplex() const override
|
|
1286
|
+
{
|
|
1287
|
+
return fes->IsComplex();
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
shared_ptr<BaseMatrix> CreateDeviceMatrix() const override
|
|
1291
|
+
{
|
|
1292
|
+
return fes->CreateMassOperator(rho, definedon, inverse, lh)->CreateDeviceMatrix();
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
virtual void Mult (const BaseVector & v, BaseVector & prod) const override;
|
|
1297
|
+
virtual void MultAdd (double val, const BaseVector & v, BaseVector & prod) const override;
|
|
1298
|
+
virtual void MultAdd (Complex val, const BaseVector & v, BaseVector & prod) const override;
|
|
1299
|
+
virtual void MultTransAdd (double val, const BaseVector & v, BaseVector & prod) const override;
|
|
1300
|
+
|
|
1301
|
+
virtual AutoVector CreateVector () const override;
|
|
1302
|
+
virtual AutoVector CreateRowVector () const override;
|
|
1303
|
+
virtual AutoVector CreateColVector () const override;
|
|
1304
|
+
|
|
1305
|
+
virtual int VHeight() const override
|
|
1306
|
+
{
|
|
1307
|
+
return fes->GetNDof();
|
|
1308
|
+
}
|
|
1309
|
+
///
|
|
1310
|
+
virtual int VWidth() const override
|
|
1311
|
+
{
|
|
1312
|
+
return fes->GetNDof();
|
|
1313
|
+
}
|
|
1314
|
+
};
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
|
|
1318
|
+
class NGS_DLL_HEADER ApplyTrace : public BaseMatrix
|
|
1319
|
+
{
|
|
1320
|
+
protected:
|
|
1321
|
+
shared_ptr<FESpace> fes;
|
|
1322
|
+
shared_ptr<FESpace> festrace;
|
|
1323
|
+
bool average;
|
|
1324
|
+
LocalHeap & lh;
|
|
1325
|
+
public:
|
|
1326
|
+
ApplyTrace (shared_ptr<FESpace> afes,
|
|
1327
|
+
shared_ptr<FESpace> afestrace,
|
|
1328
|
+
bool aaverage,
|
|
1329
|
+
LocalHeap & alh);
|
|
1330
|
+
virtual ~ApplyTrace();
|
|
1331
|
+
|
|
1332
|
+
virtual int VHeight() const override { return festrace->GetNDof(); }
|
|
1333
|
+
virtual int VWidth() const override { return fes->GetNDof(); }
|
|
1334
|
+
virtual bool IsComplex() const override { return fes->IsComplex(); }
|
|
1335
|
+
|
|
1336
|
+
virtual void Mult (const BaseVector & v, BaseVector & prod) const override;
|
|
1337
|
+
virtual void MultAdd (double val, const BaseVector & v, BaseVector & prod) const override;
|
|
1338
|
+
virtual void MultAdd (Complex val, const BaseVector & v, BaseVector & prod) const override;
|
|
1339
|
+
virtual void MultTransAdd (double val, const BaseVector & v, BaseVector & prod) const override;
|
|
1340
|
+
|
|
1341
|
+
virtual AutoVector CreateVector () const override;
|
|
1342
|
+
virtual AutoVector CreateRowVector () const override;
|
|
1343
|
+
virtual AutoVector CreateColVector () const override;
|
|
1344
|
+
};
|
|
1345
|
+
|
|
1346
|
+
|
|
1347
|
+
|
|
1348
|
+
/// Registered FESpace classes
|
|
1349
|
+
class NGS_DLL_HEADER FESpaceClasses
|
|
1350
|
+
{
|
|
1351
|
+
public:
|
|
1352
|
+
/// descriptor for register fespaces.
|
|
1353
|
+
/// function pointer to create function.
|
|
1354
|
+
struct FESpaceInfo
|
|
1355
|
+
{
|
|
1356
|
+
/// the name
|
|
1357
|
+
string name;
|
|
1358
|
+
/// function pointer to creator function
|
|
1359
|
+
shared_ptr<FESpace> (*creator)(shared_ptr<MeshAccess> ma, const Flags & flags);
|
|
1360
|
+
/// function pointer to docu function
|
|
1361
|
+
DocInfo (*getdocu)();
|
|
1362
|
+
/// creates a descriptor
|
|
1363
|
+
FESpaceInfo (const string & aname,
|
|
1364
|
+
shared_ptr<FESpace> (*acreator)(shared_ptr<MeshAccess> ma, const Flags & flags),
|
|
1365
|
+
DocInfo (*agetdocu)())
|
|
1366
|
+
: name(aname), creator(acreator), getdocu(agetdocu) {;}
|
|
1367
|
+
};
|
|
1368
|
+
private:
|
|
1369
|
+
Array<shared_ptr<FESpaceInfo>> fesa;
|
|
1370
|
+
|
|
1371
|
+
public:
|
|
1372
|
+
/// initialize
|
|
1373
|
+
FESpaceClasses() { ; }
|
|
1374
|
+
/// cleans up
|
|
1375
|
+
~FESpaceClasses();
|
|
1376
|
+
|
|
1377
|
+
/// add a descriptor
|
|
1378
|
+
void AddFESpace (const string & aname,
|
|
1379
|
+
shared_ptr<FESpace> (*acreator)(shared_ptr<MeshAccess> ma, const Flags & flags),
|
|
1380
|
+
DocInfo (*getdocu)() = FESpace::GetDocu);
|
|
1381
|
+
|
|
1382
|
+
/// returns all creators
|
|
1383
|
+
const Array<shared_ptr<FESpaceInfo>> & GetFESpaces() { return fesa; }
|
|
1384
|
+
|
|
1385
|
+
/// returns a creator structure
|
|
1386
|
+
const shared_ptr<FESpaceInfo> GetFESpace(const string & name);
|
|
1387
|
+
|
|
1388
|
+
/// print available fespaces to stream
|
|
1389
|
+
void Print (ostream & ost) const;
|
|
1390
|
+
};
|
|
1391
|
+
|
|
1392
|
+
/// returns createion object
|
|
1393
|
+
extern NGS_DLL_HEADER FESpaceClasses & GetFESpaceClasses ();
|
|
1394
|
+
|
|
1395
|
+
/// creates a fespace of that type
|
|
1396
|
+
extern NGS_DLL_HEADER shared_ptr<FESpace> CreateFESpace (const string & type,
|
|
1397
|
+
shared_ptr<MeshAccess> ma,
|
|
1398
|
+
const Flags & flags);
|
|
1399
|
+
|
|
1400
|
+
|
|
1401
|
+
/**
|
|
1402
|
+
template for registration of finite element spaces.
|
|
1403
|
+
provides static Create - function
|
|
1404
|
+
*/
|
|
1405
|
+
template <typename FES>
|
|
1406
|
+
class RegisterFESpace
|
|
1407
|
+
{
|
|
1408
|
+
public:
|
|
1409
|
+
RegisterClassForArchive<FES, FESpace> regclass;
|
|
1410
|
+
/// constructor registers fespace
|
|
1411
|
+
RegisterFESpace (string label)
|
|
1412
|
+
{
|
|
1413
|
+
GetFESpaceClasses().AddFESpace (label, Create, FES::GetDocu);
|
|
1414
|
+
// cout << "register fespace '" << label << "'" << endl;
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
/// creates an fespace of type FES
|
|
1418
|
+
static shared_ptr<FESpace> Create (shared_ptr<MeshAccess> ma, const Flags & flags)
|
|
1419
|
+
{
|
|
1420
|
+
return make_shared<FES> (ma, flags);
|
|
1421
|
+
}
|
|
1422
|
+
};
|
|
1423
|
+
|
|
1424
|
+
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
|
|
1428
|
+
|
|
1429
|
+
|
|
1430
|
+
|
|
1431
|
+
namespace ngcore
|
|
1432
|
+
{
|
|
1433
|
+
template<typename T> struct MPI_typetrait;
|
|
1434
|
+
|
|
1435
|
+
template<>
|
|
1436
|
+
struct MPI_typetrait<ngcomp::COUPLING_TYPE>
|
|
1437
|
+
{
|
|
1438
|
+
static auto MPIType ()
|
|
1439
|
+
{
|
|
1440
|
+
static_assert ( (sizeof(ngcomp::COUPLING_TYPE) == sizeof(char)) ||
|
|
1441
|
+
(sizeof(ngcomp::COUPLING_TYPE) == sizeof(int)) );
|
|
1442
|
+
if constexpr (sizeof(ngcomp::COUPLING_TYPE) == sizeof(char)) return MPI_typetrait<char>::MPIType();
|
|
1443
|
+
if constexpr (sizeof(ngcomp::COUPLING_TYPE) == sizeof(int)) return MPI_typetrait<int>::MPIType();
|
|
1444
|
+
}
|
|
1445
|
+
};
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
|
|
1449
|
+
#endif
|