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,1359 @@
|
|
|
1
|
+
#ifndef FILE_MESHACCESS
|
|
2
|
+
#define FILE_MESHACCESS
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: meshaccess.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 25. Mar. 2000 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#include <nginterface_v2.hpp>
|
|
12
|
+
#include <elementtopology.hpp>
|
|
13
|
+
|
|
14
|
+
namespace ngfem
|
|
15
|
+
{
|
|
16
|
+
class IntegrationPoint;
|
|
17
|
+
class CoefficientFunction;
|
|
18
|
+
class ElementTransformation;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
namespace ngcomp
|
|
24
|
+
{
|
|
25
|
+
class PML_Transformation;
|
|
26
|
+
|
|
27
|
+
using netgen::Ng_Node;
|
|
28
|
+
using ngfem::ELEMENT_TYPE;
|
|
29
|
+
|
|
30
|
+
using namespace ngfem;
|
|
31
|
+
|
|
32
|
+
class MeshAccess;
|
|
33
|
+
class Ngs_Element;
|
|
34
|
+
class Region;
|
|
35
|
+
|
|
36
|
+
class Ngs_Element : public netgen::Ng_Element
|
|
37
|
+
{
|
|
38
|
+
ElementId ei;
|
|
39
|
+
public:
|
|
40
|
+
// static string defaultstring;
|
|
41
|
+
Ngs_Element (const netgen::Ng_Element & el, ElementId id)
|
|
42
|
+
: netgen::Ng_Element(el), ei(id) { ; }
|
|
43
|
+
AOWrapper<decltype(vertices)> Vertices() const { return vertices; }
|
|
44
|
+
AOWrapper<decltype(points)> Points() const { return points; }
|
|
45
|
+
AOWrapper<decltype(edges)> Edges() const { return edges; }
|
|
46
|
+
AOWrapper<decltype(faces)> Faces() const { return faces; }
|
|
47
|
+
AOWrapper<decltype(facets)> Facets() const { return facets; }
|
|
48
|
+
// string_view GetMaterial() const { return mat ? *mat : defaultstring; }
|
|
49
|
+
string_view GetMaterial() const { return mat; }
|
|
50
|
+
operator ElementId() const { return ei; }
|
|
51
|
+
auto VB() const { return ei.VB(); }
|
|
52
|
+
auto Nr() const { return ei.Nr(); }
|
|
53
|
+
/*
|
|
54
|
+
Converts element-type from Netgen to element-types of NGSolve.
|
|
55
|
+
E.g. the Netgen-types NG_TRIG and NG_TRIG6 are merged to NGSolve type ET_TRIG.
|
|
56
|
+
*/
|
|
57
|
+
static INLINE ELEMENT_TYPE ConvertElementType (NG_ELEMENT_TYPE type)
|
|
58
|
+
{
|
|
59
|
+
switch (type)
|
|
60
|
+
{
|
|
61
|
+
case NG_PNT: return ET_POINT;
|
|
62
|
+
case NG_SEGM: case NG_SEGM3: return ET_SEGM;
|
|
63
|
+
case NG_TRIG: case NG_TRIG6: return ET_TRIG;
|
|
64
|
+
case NG_QUAD: case NG_QUAD6: case NG_QUAD8: return ET_QUAD;
|
|
65
|
+
case NG_TET: case NG_TET10: return ET_TET;
|
|
66
|
+
case NG_PRISM: case NG_PRISM12: case NG_PRISM15: return ET_PRISM;
|
|
67
|
+
case NG_PYRAMID: case NG_PYRAMID13: return ET_PYRAMID;
|
|
68
|
+
case NG_HEX7: return ET_HEXAMID;
|
|
69
|
+
case NG_HEX: case NG_HEX20: return ET_HEX;
|
|
70
|
+
// default:
|
|
71
|
+
}
|
|
72
|
+
__assume (false);
|
|
73
|
+
return ET_POINT; // for some compiler
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
ELEMENT_TYPE GetType () const
|
|
77
|
+
{ return ConvertElementType (Ng_Element::GetType()); }
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
inline ostream & operator<< (ostream & ost, Ngs_Element & el)
|
|
81
|
+
{
|
|
82
|
+
ost << ElementId(el);
|
|
83
|
+
return ost;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
class ElementIterator
|
|
87
|
+
{
|
|
88
|
+
const MeshAccess & ma;
|
|
89
|
+
ElementId ei;
|
|
90
|
+
public:
|
|
91
|
+
ElementIterator (const MeshAccess & ama, ElementId aei) : ma(ama), ei(aei) { ; }
|
|
92
|
+
ElementIterator operator++ () { return ElementIterator(ma, ++ei); }
|
|
93
|
+
INLINE Ngs_Element operator*() const;
|
|
94
|
+
bool operator!=(ElementIterator id2) const { return ei != id2.ei; }
|
|
95
|
+
bool operator==(ElementIterator id2) const { return ei == id2.ei; }
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
class ElementRange : public IntRange
|
|
99
|
+
{
|
|
100
|
+
const MeshAccess & ma;
|
|
101
|
+
VorB vb;
|
|
102
|
+
public:
|
|
103
|
+
ElementRange (const MeshAccess & ama, VorB avb, IntRange ar)
|
|
104
|
+
: IntRange(ar), ma(ama), vb(avb) { ; }
|
|
105
|
+
ElementId First() const { return ElementId(vb, IntRange::First()); }
|
|
106
|
+
ElementIterator begin () const { return ElementIterator(ma, ElementId(vb,IntRange::First())); }
|
|
107
|
+
ElementIterator end () const { return ElementIterator(ma, ElementId(vb,IntRange::Next())); }
|
|
108
|
+
ElementId operator[] (size_t nr) { return ElementId(vb, IntRange::First()+nr); }
|
|
109
|
+
ElementRange Split(size_t nr, size_t tot) { return ElementRange(ma, vb, IntRange::Split(nr,tot)); }
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
template <VorB VB>
|
|
113
|
+
class TElementIterator
|
|
114
|
+
{
|
|
115
|
+
const MeshAccess & ma;
|
|
116
|
+
size_t nr;
|
|
117
|
+
public:
|
|
118
|
+
INLINE TElementIterator (const MeshAccess & ama, size_t anr) : ma(ama), nr(anr) { ; }
|
|
119
|
+
INLINE TElementIterator operator++ () { return TElementIterator(ma, ++nr); }
|
|
120
|
+
INLINE Ngs_Element operator*() const; // implemented below, after MeshAccess
|
|
121
|
+
INLINE bool operator!=(TElementIterator id2) const { return nr != id2.nr; }
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
template <VorB VB>
|
|
125
|
+
class TElementRange
|
|
126
|
+
{
|
|
127
|
+
const MeshAccess & ma;
|
|
128
|
+
IntRange r;
|
|
129
|
+
public:
|
|
130
|
+
INLINE TElementRange (const MeshAccess & ama, IntRange ar) : ma(ama), r(ar) { ; }
|
|
131
|
+
INLINE TElementIterator<VB> begin () const { return TElementIterator<VB>(ma, r.First()); }
|
|
132
|
+
INLINE TElementIterator<VB> end () const { return TElementIterator<VB>(ma, r.Next()); }
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
template <VorB VB, int DIM>
|
|
136
|
+
class DimElementIterator
|
|
137
|
+
{
|
|
138
|
+
const MeshAccess & ma;
|
|
139
|
+
size_t nr;
|
|
140
|
+
public:
|
|
141
|
+
INLINE DimElementIterator (const MeshAccess & ama, size_t anr) : ma(ama), nr(anr) { ; }
|
|
142
|
+
INLINE DimElementIterator operator++ () { return DimElementIterator(ma, ++nr); }
|
|
143
|
+
INLINE Ngs_Element operator*() const; // implemented below, after MeshAccess
|
|
144
|
+
INLINE bool operator!=(DimElementIterator id2) const { return nr != id2.nr; }
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
template <VorB VB, int DIM>
|
|
148
|
+
class DimElementRange
|
|
149
|
+
{
|
|
150
|
+
const MeshAccess & ma;
|
|
151
|
+
IntRange r;
|
|
152
|
+
public:
|
|
153
|
+
INLINE DimElementRange (const MeshAccess & ama, IntRange ar) : ma(ama), r(ar) { ; }
|
|
154
|
+
INLINE auto begin () const { return DimElementIterator<VB,DIM>(ma, r.First()); }
|
|
155
|
+
INLINE auto end () const { return DimElementIterator<VB,DIM>(ma, r.Next()); }
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
Access to mesh topology and geometry.
|
|
160
|
+
|
|
161
|
+
MeshAccess provides information such as element-to-vertex table,
|
|
162
|
+
elemenet-to-edge table etc.
|
|
163
|
+
|
|
164
|
+
It provides also element-geometry (straight or curved elements)
|
|
165
|
+
via GetTrafo.
|
|
166
|
+
|
|
167
|
+
Internally, MeshAccess calls functions from Netgen.
|
|
168
|
+
*/
|
|
169
|
+
|
|
170
|
+
class GridFunction;
|
|
171
|
+
|
|
172
|
+
class NGS_DLL_HEADER MeshAccess : public enable_shared_from_this<MeshAccess>
|
|
173
|
+
{
|
|
174
|
+
netgen::Ngx_Mesh mesh;
|
|
175
|
+
|
|
176
|
+
/// buffered global quantities:
|
|
177
|
+
/// dimension of the domain. Set to -1 if no mesh is present
|
|
178
|
+
int dim;
|
|
179
|
+
|
|
180
|
+
/// number of vertex, edge, face, cell, element, facet, and global nodes
|
|
181
|
+
size_t nnodes[7];
|
|
182
|
+
|
|
183
|
+
// number of nodes of co-dimension i
|
|
184
|
+
// these are NC, NF, NE, NV in 3D,
|
|
185
|
+
// and NF, NE, NV, undef, in 2D
|
|
186
|
+
size_t nnodes_cd[4];
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
/// number of elements of dimension i
|
|
190
|
+
size_t nelements[4];
|
|
191
|
+
/// number of elements of co-dimension i
|
|
192
|
+
size_t nelements_cd[4];
|
|
193
|
+
/// number of multigrid levels
|
|
194
|
+
int nlevels;
|
|
195
|
+
|
|
196
|
+
/// number of regions of co-dimension i
|
|
197
|
+
int nregions[4];
|
|
198
|
+
|
|
199
|
+
//ngfem::ElementTransformation & GetTrafoDim (size_t elnr, Allocator & lh) const;
|
|
200
|
+
typedef ngfem::ElementTransformation & (MeshAccess::*pfunc) (size_t elnr, Allocator & lh) const;
|
|
201
|
+
pfunc trafo_jumptable[4];
|
|
202
|
+
|
|
203
|
+
int mesh_timestamp = -1; // timestamp of Netgen-mesh
|
|
204
|
+
size_t timestamp = 0;
|
|
205
|
+
|
|
206
|
+
/// for ALE
|
|
207
|
+
shared_ptr<GridFunction> deformation;
|
|
208
|
+
|
|
209
|
+
/// pml trafos per sub-domain
|
|
210
|
+
Array<shared_ptr <PML_Transformation>> pml_trafos;
|
|
211
|
+
|
|
212
|
+
Array<std::tuple<int,int>> identified_facets;
|
|
213
|
+
|
|
214
|
+
/// store periodic vertex mapping for each identification number
|
|
215
|
+
// shared ptr because Meshaccess is copy constructible
|
|
216
|
+
/*
|
|
217
|
+
shared_ptr<Array<Array<IVec<2>>>> periodic_node_pairs[3] = {make_shared<Array<Array<IVec<2>>>>(),
|
|
218
|
+
make_shared<Array<Array<IVec<2>>>>(),
|
|
219
|
+
make_shared<Array<Array<IVec<2>>>>()};
|
|
220
|
+
*/
|
|
221
|
+
Array<Array<IVec<2>>> periodic_node_pairs[3];
|
|
222
|
+
|
|
223
|
+
DynamicTable<size_t> neighbours[4][4];
|
|
224
|
+
friend class Region;
|
|
225
|
+
public:
|
|
226
|
+
SimpleSignal updateSignal;
|
|
227
|
+
static std::true_type shallow_archive;
|
|
228
|
+
|
|
229
|
+
/// for achiving ...
|
|
230
|
+
MeshAccess ();
|
|
231
|
+
/// connects to Netgen - mesh
|
|
232
|
+
MeshAccess (shared_ptr<netgen::Mesh> amesh);
|
|
233
|
+
/// loads new mesh from file
|
|
234
|
+
MeshAccess (string filename, NgMPI_Comm amesh_comm = NgMPI_Comm{});
|
|
235
|
+
/// select this mesh in netgen visuaization
|
|
236
|
+
void SelectMesh() const;
|
|
237
|
+
/// not much to do
|
|
238
|
+
virtual ~MeshAccess ();
|
|
239
|
+
|
|
240
|
+
/// the spatial dimension of the mesh
|
|
241
|
+
int GetDimension() const { return dim; }
|
|
242
|
+
|
|
243
|
+
/// number of points. needed for isoparametric nodal elements
|
|
244
|
+
size_t GetNP() const { return mesh.GetNP(); }
|
|
245
|
+
|
|
246
|
+
/// number of vertices
|
|
247
|
+
size_t GetNV() const { return nnodes[0]; }
|
|
248
|
+
|
|
249
|
+
/// number of elements in the domain
|
|
250
|
+
size_t GetNE() const { return nelements_cd[0]; }
|
|
251
|
+
|
|
252
|
+
/// number of boundary elements
|
|
253
|
+
size_t GetNSE() const { return nelements_cd[1]; }
|
|
254
|
+
|
|
255
|
+
/// number of elements of co dimension 2
|
|
256
|
+
size_t GetNCD2E() const { return nelements_cd[2]; }
|
|
257
|
+
|
|
258
|
+
/// number of volume or boundary elements
|
|
259
|
+
size_t GetNE(VorB vb) const { return nelements_cd[vb]; }
|
|
260
|
+
|
|
261
|
+
/// number of edges in the whole mesh
|
|
262
|
+
size_t GetNEdges() const { return nnodes[1]; }
|
|
263
|
+
|
|
264
|
+
/// number of faces in the whole mesh
|
|
265
|
+
size_t GetNFaces() const { return nnodes[2]; }
|
|
266
|
+
|
|
267
|
+
/// maximal sub-domain (material) index. range is [0, ndomains)
|
|
268
|
+
int GetNDomains () const { return nregions[VOL]; }
|
|
269
|
+
|
|
270
|
+
/// maximal boundary condition index. range is [0, nboundaries)
|
|
271
|
+
int GetNBoundaries () const { return nregions[BND]; }
|
|
272
|
+
|
|
273
|
+
[[deprecated("Use GetNRegions (BBND) instead!")]]
|
|
274
|
+
int GetNBBoundaries() const { return nregions[BBND]; }
|
|
275
|
+
|
|
276
|
+
int GetNRegions (VorB vb) const { return nregions[vb]; }
|
|
277
|
+
|
|
278
|
+
/// returns point coordinate
|
|
279
|
+
template <int D>
|
|
280
|
+
void GetPoint (size_t pi, Vec<D> & p) const
|
|
281
|
+
{
|
|
282
|
+
auto pt = mesh.GetPoint (pi);
|
|
283
|
+
for (int j = 0; j < D; j++) p(j) = pt[j];
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/// returns point coordinate
|
|
287
|
+
template <int D>
|
|
288
|
+
Vec<D> GetPoint (size_t pi) const
|
|
289
|
+
{
|
|
290
|
+
Vec<D> p;
|
|
291
|
+
auto pt = mesh.GetPoint (pi);
|
|
292
|
+
for (int j = 0; j < D; j++) p(j) = pt[j];
|
|
293
|
+
return p;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
ElementRange Elements (VorB vb = VOL) const
|
|
297
|
+
{
|
|
298
|
+
return ElementRange (*this, vb, IntRange (0, GetNE(vb)));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
template <VorB VB>
|
|
302
|
+
TElementRange<VB> Elements () const
|
|
303
|
+
{
|
|
304
|
+
return TElementRange<VB> (*this, IntRange (0, GetNE(VB)));
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
template <VorB VB, int DIM>
|
|
308
|
+
auto Elements () const
|
|
309
|
+
{
|
|
310
|
+
return DimElementRange<VB,DIM> (*this, IntRange (0, GetNE(VB)));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
auto Nodes (NODE_TYPE nt) const
|
|
314
|
+
{
|
|
315
|
+
return T_Range<NodeId> (NodeId(nt, 0), NodeId(nt, GetNNodes(nt)));
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
template <NODE_TYPE nt>
|
|
319
|
+
auto Nodes () const
|
|
320
|
+
{
|
|
321
|
+
return T_Range<T_NodeId<nt>> (0, GetNNodes(nt));
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
auto Vertices() const { return Nodes<NT_VERTEX>(); }
|
|
325
|
+
auto Edges() const { return Nodes<NT_EDGE>(); }
|
|
326
|
+
auto Faces() const { return Nodes<NT_FACE>(); }
|
|
327
|
+
auto Cells() const { return Nodes<NT_CELL>(); }
|
|
328
|
+
|
|
329
|
+
template <typename TFUNC>
|
|
330
|
+
void IterateElements (VorB vb,
|
|
331
|
+
LocalHeap & clh,
|
|
332
|
+
const TFUNC & func) const
|
|
333
|
+
{
|
|
334
|
+
if (task_manager)
|
|
335
|
+
{
|
|
336
|
+
SharedLoop sl(GetNE(vb));
|
|
337
|
+
|
|
338
|
+
task_manager -> CreateJob
|
|
339
|
+
( [&] (const TaskInfo & ti)
|
|
340
|
+
{
|
|
341
|
+
LocalHeap lh = clh.Split(ti.thread_nr, ti.nthreads);
|
|
342
|
+
|
|
343
|
+
for (size_t mynr : sl)
|
|
344
|
+
{
|
|
345
|
+
HeapReset hr(lh);
|
|
346
|
+
ElementId ei(vb, mynr);
|
|
347
|
+
func (GetElement(ei), lh);
|
|
348
|
+
}
|
|
349
|
+
} );
|
|
350
|
+
}
|
|
351
|
+
else
|
|
352
|
+
{
|
|
353
|
+
for (auto i : Range(GetNE(vb)))
|
|
354
|
+
{
|
|
355
|
+
HeapReset hr(clh);
|
|
356
|
+
ElementId ei(vb, i);
|
|
357
|
+
func (GetElement(ei), clh);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
template <typename TFUNC>
|
|
363
|
+
void IterateElements (VorB vb,const TFUNC & func) const
|
|
364
|
+
{
|
|
365
|
+
if (task_manager)
|
|
366
|
+
{
|
|
367
|
+
SharedLoop sl(GetNE(vb));
|
|
368
|
+
|
|
369
|
+
task_manager -> CreateJob
|
|
370
|
+
( [&] (const TaskInfo & ti)
|
|
371
|
+
{
|
|
372
|
+
for (size_t mynr : sl)
|
|
373
|
+
{
|
|
374
|
+
ElementId ei(vb, mynr);
|
|
375
|
+
func (GetElement(ei));
|
|
376
|
+
}
|
|
377
|
+
} );
|
|
378
|
+
}
|
|
379
|
+
else
|
|
380
|
+
{
|
|
381
|
+
for (auto ei : Elements(vb))
|
|
382
|
+
func (GetElement(ei));
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
/// the geometry type of the element
|
|
387
|
+
[[deprecated("Use GetElType with ElementId(VOL, elnr) instead!")]]
|
|
388
|
+
ELEMENT_TYPE GetElType (int elnr) const
|
|
389
|
+
{ return GetElement(ElementId(VOL,elnr)).GetType(); }
|
|
390
|
+
|
|
391
|
+
/// the geometry type of the boundary element
|
|
392
|
+
[[deprecated("Use GetElType with ElementId(BND, elnr) instead!")]]
|
|
393
|
+
ELEMENT_TYPE GetSElType (int elnr) const
|
|
394
|
+
{ return GetElement(ElementId(BND,elnr)).GetType(); }
|
|
395
|
+
|
|
396
|
+
/// the geometry type of the element
|
|
397
|
+
ELEMENT_TYPE GetElType (ElementId ei) const
|
|
398
|
+
{ return GetElement(ei).GetType(); }
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
/// the sub-domain index of the element
|
|
402
|
+
[[deprecated("Use GetElIndex with ElementId(VOL, elnr) instead!")]]
|
|
403
|
+
int GetElIndex (int elnr) const
|
|
404
|
+
{
|
|
405
|
+
return GetElement(ElementId(VOL,elnr)).GetIndex();
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/// the boundary-condition index of the boundary element
|
|
409
|
+
[[deprecated("Use GetElIndex with ElementId(BND, elnr) instead!")]]
|
|
410
|
+
int GetSElIndex (int elnr) const
|
|
411
|
+
{
|
|
412
|
+
return GetElement(ElementId(BND,elnr)).GetIndex();
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
[[deprecated("Use GetElIndex with ElementId(BBND, elnr) instead!")]]
|
|
416
|
+
int GetCD2ElIndex(int elnr) const
|
|
417
|
+
{
|
|
418
|
+
return GetElement(ElementId(BBND,elnr)).GetIndex();
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
int GetElIndex (ElementId ei) const
|
|
422
|
+
{
|
|
423
|
+
return GetElement(ei).GetIndex();
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
string_view GetMaterial(ElementId ei) const
|
|
427
|
+
{ return GetElement(ei).GetMaterial(); }
|
|
428
|
+
|
|
429
|
+
// const string & GetMaterial(VorB vb, int region_nr) const
|
|
430
|
+
string_view GetMaterial(VorB vb, int region_nr) const
|
|
431
|
+
{
|
|
432
|
+
switch (vb)
|
|
433
|
+
{
|
|
434
|
+
case VOL: return mesh.GetMaterialCD<0> (region_nr);
|
|
435
|
+
case BND: return mesh.GetMaterialCD<1> (region_nr);
|
|
436
|
+
case BBND: return mesh.GetMaterialCD<2> (region_nr);
|
|
437
|
+
case BBBND: return mesh.GetMaterialCD<3> (region_nr);
|
|
438
|
+
default: throw Exception("GetMaterial not implemented for " + ToString(vb));
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
auto GetMaterials (VorB vb) const
|
|
443
|
+
{
|
|
444
|
+
return ArrayObject (GetNRegions(vb),
|
|
445
|
+
[this,vb] (size_t i) { return this->GetMaterial(vb, i); });
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
/// the material of the element
|
|
450
|
+
[[deprecated("Use GetMaterial with ElementId(VOL, elnr) instead!")]]
|
|
451
|
+
string_view GetElMaterial (int elnr) const
|
|
452
|
+
{ return GetMaterial(ElementId(VOL, elnr)); }
|
|
453
|
+
// { return Ng_GetElementMaterial (elnr+1); }
|
|
454
|
+
|
|
455
|
+
/// the material of the sub-domain
|
|
456
|
+
[[deprecated("Use GetMaterial(VOL, region_nr) instead!")]]
|
|
457
|
+
string_view GetDomainMaterial (int domnr) const
|
|
458
|
+
{ return GetMaterial(VOL, domnr); }
|
|
459
|
+
// { return Ng_GetDomainMaterial (domnr+1); }
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
/// the boundary condition name of surface element
|
|
463
|
+
[[deprecated("Use GetMaterial with ElementId(BND, elnr) instead!")]]
|
|
464
|
+
string_view GetSElBCName (int selnr) const
|
|
465
|
+
{ return GetMaterial(ElementId(BND, selnr)); }
|
|
466
|
+
// { return Ng_GetSurfaceElementBCName (selnr+1); }
|
|
467
|
+
|
|
468
|
+
/// the boundary condition name of boundary condition number
|
|
469
|
+
[[deprecated("Use GetMaterial(BND, region_nr) instead!")]]
|
|
470
|
+
string_view GetBCNumBCName (int bcnr) const
|
|
471
|
+
{ return GetMaterial(BND, bcnr); }
|
|
472
|
+
// { return Ng_GetBCNumBCName (bcnr); }
|
|
473
|
+
|
|
474
|
+
[[deprecated("Use GetMaterial(BBND, region_nr) instead!")]]
|
|
475
|
+
string_view GetCD2NumCD2Name (int cd2nr) const
|
|
476
|
+
{ return GetMaterial(BBND, cd2nr); }
|
|
477
|
+
// { return Ng_GetCD2NumCD2Name (cd2nr); }
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
/// not sure who needs that
|
|
481
|
+
int GetSElSurfaceNumber (const int elnr) const
|
|
482
|
+
{ return mesh.GetSurfaceElementSurfaceNumber (elnr+1)-1; }
|
|
483
|
+
|
|
484
|
+
/// not sure who needs that
|
|
485
|
+
int GetSElFDNumber (const int elnr) const
|
|
486
|
+
{ return mesh.GetSurfaceElementFDNumber (elnr+1)-1; }
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
/// the sub-domain indices next to boundary element.
|
|
491
|
+
/// returns -1 for void
|
|
492
|
+
void GetSElNeighbouringDomains(const int elnr, int & in, int & out) const;
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
/// update buffered global quantities.
|
|
496
|
+
/// Must be called after every change of the mesh topology
|
|
497
|
+
void UpdateBuffers();
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
/*
|
|
502
|
+
Nodes are an abstraction for vertices, edges, faces, and cells
|
|
503
|
+
*/
|
|
504
|
+
|
|
505
|
+
/// number of elements of dimension dim
|
|
506
|
+
size_t GetNElements (int dim) const { return nelements[dim]; }
|
|
507
|
+
|
|
508
|
+
/// number of nodes of type nt
|
|
509
|
+
size_t GetNNodes (NODE_TYPE nt) const { return nnodes[nt]; }
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
/// the topology of a domain - element
|
|
513
|
+
/// experimental, not recommended for use yet
|
|
514
|
+
// void GetTopologicElement (int elnr, TopologicElement & topel) const;
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
returns topology of a Netgen - element. This is the new
|
|
519
|
+
(2008), unified concept. The function returns a direct access
|
|
520
|
+
to the Netgen mesh structure instead of copying point numbers
|
|
521
|
+
etc. The nasty 1-0 conversion is done on the fly.
|
|
522
|
+
*/
|
|
523
|
+
[[deprecated("Use GetElement (ElementId ei) instead!")]]
|
|
524
|
+
INLINE Ngs_Element GetElement (int elnr, bool boundary = 0) const
|
|
525
|
+
{
|
|
526
|
+
switch (dim-boundary)
|
|
527
|
+
{
|
|
528
|
+
case 0: return Ngs_Element (mesh.GetElement<0> (elnr),
|
|
529
|
+
ElementId(boundary ? BND : VOL, elnr));
|
|
530
|
+
case 1: return Ngs_Element (mesh.GetElement<1> (elnr),
|
|
531
|
+
ElementId(boundary ? BND : VOL, elnr));
|
|
532
|
+
case 2: return Ngs_Element (mesh.GetElement<2> (elnr),
|
|
533
|
+
ElementId(boundary ? BND : VOL, elnr));
|
|
534
|
+
case 3:
|
|
535
|
+
default: return Ngs_Element (mesh.GetElement<3> (elnr),
|
|
536
|
+
ElementId(boundary ? BND : VOL, elnr));
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
INLINE Ngs_Element GetElement (ElementId ei) const
|
|
541
|
+
{
|
|
542
|
+
int hdim = dim - int(ei.VB());
|
|
543
|
+
switch (hdim)
|
|
544
|
+
{
|
|
545
|
+
case 0: return Ngs_Element (mesh.GetElement<0> (ei.Nr()), ei);
|
|
546
|
+
case 1: return Ngs_Element (mesh.GetElement<1> (ei.Nr()), ei);
|
|
547
|
+
case 2: return Ngs_Element (mesh.GetElement<2> (ei.Nr()), ei);
|
|
548
|
+
case 3:
|
|
549
|
+
default: return Ngs_Element (mesh.GetElement<3> (ei.Nr()), ei);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
template <VorB VB, int DIM>
|
|
554
|
+
INLINE Ngs_Element GetElement (T_ElementId<VB,DIM> ei) const
|
|
555
|
+
{
|
|
556
|
+
constexpr int HDIM = DIM - int(VB);
|
|
557
|
+
return Ngs_Element (mesh.GetElement<HDIM> (ei.Nr()), ei);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
INLINE Ngs_Element operator[] (ElementId ei) const
|
|
562
|
+
{
|
|
563
|
+
return GetElement (ei);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
returns topology of a Netgen - element. This is the new
|
|
569
|
+
(2008), unified concept. The function returns a direct access
|
|
570
|
+
to the Netgen mesh structure instead of copying point numbers
|
|
571
|
+
etc. The nasty 1-0 conversion is done on the fly.
|
|
572
|
+
*/
|
|
573
|
+
[[deprecated("Use GetElement (ElementId (BND,nr)) instead!")]]
|
|
574
|
+
Ngs_Element GetSElement (int elnr) const
|
|
575
|
+
{
|
|
576
|
+
switch (dim)
|
|
577
|
+
{
|
|
578
|
+
case 1: return Ngs_Element (mesh.GetElement<0> (elnr), ElementId(BND,elnr));
|
|
579
|
+
case 2: return Ngs_Element (mesh.GetElement<1> (elnr), ElementId(BND,elnr));
|
|
580
|
+
case 3:
|
|
581
|
+
default: return Ngs_Element (mesh.GetElement<2> (elnr), ElementId(BND,elnr));
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
[[deprecated("Use GetElement (ElementId (BBND,nr)) instead!")]]
|
|
586
|
+
Ngs_Element GetCD2Element(int elnr) const
|
|
587
|
+
{
|
|
588
|
+
switch(dim)
|
|
589
|
+
{
|
|
590
|
+
case 1: throw Exception("No CoDim 2 Element for dimension 1");
|
|
591
|
+
case 2: return Ngs_Element(mesh.GetElement<0>(elnr),ElementId(BBND,elnr));
|
|
592
|
+
case 3:
|
|
593
|
+
default: return Ngs_Element(mesh.GetElement<1>(elnr),ElementId(BBND,elnr));
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/**
|
|
598
|
+
returns element of compile-time fixed dimension
|
|
599
|
+
*/
|
|
600
|
+
template <int DIM, VorB vb>
|
|
601
|
+
inline Ngs_Element GetElement (size_t elnr) const
|
|
602
|
+
{
|
|
603
|
+
return Ngs_Element (mesh.GetElement<DIM> (elnr), ElementId(vb, elnr));
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
auto GetTimeStamp() const { return timestamp; }
|
|
607
|
+
|
|
608
|
+
void SetRefinementFlag (ElementId ei, bool ref)
|
|
609
|
+
{
|
|
610
|
+
switch (dim-int(ei.VB()))
|
|
611
|
+
{
|
|
612
|
+
case 2: mesh.SetRefinementFlag<2>(ei.Nr(), ref); break;
|
|
613
|
+
case 3: mesh.SetRefinementFlag<3>(ei.Nr(), ref); break;
|
|
614
|
+
default: ;
|
|
615
|
+
}
|
|
616
|
+
/*
|
|
617
|
+
if (id.IsVolume())
|
|
618
|
+
Ng_SetRefinementFlag (id.Nr()+1, ref);
|
|
619
|
+
else
|
|
620
|
+
Ng_SetSurfaceRefinementFlag (id.Nr()+1, ref);
|
|
621
|
+
*/
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
void Refine (bool onlyonce);
|
|
625
|
+
void Curve (int order);
|
|
626
|
+
int GetCurveOrder ();
|
|
627
|
+
|
|
628
|
+
void EnableTable (string name, bool set = true)
|
|
629
|
+
{
|
|
630
|
+
mesh.EnableTable(name, set);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
void HPRefinement (int levels, double factor = 0.125)
|
|
634
|
+
{
|
|
635
|
+
mesh.HPRefinement(levels, factor);
|
|
636
|
+
UpdateBuffers();
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
void SetDeformation (shared_ptr<GridFunction> def = nullptr);
|
|
640
|
+
|
|
641
|
+
shared_ptr<GridFunction> GetDeformation () const
|
|
642
|
+
{
|
|
643
|
+
return deformation;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
void SetPML (const shared_ptr<PML_Transformation> & pml_trafo, int _domnr);
|
|
647
|
+
void UnSetPML (int _domnr);
|
|
648
|
+
|
|
649
|
+
Array<shared_ptr<PML_Transformation>> & GetPMLTrafos();
|
|
650
|
+
shared_ptr<PML_Transformation> GetPML(int _domnr);
|
|
651
|
+
|
|
652
|
+
shared_ptr<netgen::Mesh> GetNetgenMesh () const
|
|
653
|
+
{ return mesh.GetMesh(); }
|
|
654
|
+
|
|
655
|
+
netgen::Ngx_Mesh & GetNetgenMeshX () { return mesh; }
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
/**
|
|
659
|
+
returns node topology.
|
|
660
|
+
A facet or edge-node knows its vertices etc.
|
|
661
|
+
The method is not yet fully functional.
|
|
662
|
+
*/
|
|
663
|
+
template <int DIM>
|
|
664
|
+
netgen::Ng_Node<DIM> GetNode (size_t nr) const
|
|
665
|
+
{
|
|
666
|
+
return mesh.GetNode<DIM> (nr);
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/// returns the points of an element.
|
|
670
|
+
/// vertices and possibly edge-midpoints
|
|
671
|
+
[[deprecated("Use GetElPNums(ElementId) instead!")]]
|
|
672
|
+
void GetElPNums (int elnr, Array<int> & pnums) const
|
|
673
|
+
{ pnums = ArrayObject (GetElement(ElementId(VOL,elnr)).points); }
|
|
674
|
+
|
|
675
|
+
/// returns the points of a boundary element.
|
|
676
|
+
/// vertex and possibly edge-midpoints
|
|
677
|
+
[[deprecated("Use GetElPNums(ElementId) instead!")]]
|
|
678
|
+
void GetSElPNums (int selnr, Array<int> & pnums) const
|
|
679
|
+
{ pnums = ArrayObject (GetElement(ElementId(BND,selnr)).points); }
|
|
680
|
+
|
|
681
|
+
[[deprecated("Use GetElPNums(ElementId) instead!")]]
|
|
682
|
+
void GetElPNums (ElementId ei, Array<int> & pnums) const
|
|
683
|
+
{ pnums = ArrayObject (GetElement(ei).points); }
|
|
684
|
+
|
|
685
|
+
auto GetElPNums (ElementId ei) const
|
|
686
|
+
{ return ArrayObject(GetElement(ei).points); }
|
|
687
|
+
|
|
688
|
+
/// returns the vertices of an element
|
|
689
|
+
[[deprecated("Use GetElVertices(ElementId) instead!")]]
|
|
690
|
+
void GetElVertices (int elnr, Array<int> & vnums) const
|
|
691
|
+
{ vnums = GetElement(ElementId(VOL,elnr)).Vertices(); }
|
|
692
|
+
///
|
|
693
|
+
[[deprecated("Use GetElVertices(ElementId) -> vnums instead!")]]
|
|
694
|
+
void GetElVertices (ElementId ei, Array<int> & vnums) const
|
|
695
|
+
{ vnums = GetElement(ei).Vertices(); }
|
|
696
|
+
|
|
697
|
+
auto GetElVertices (ElementId ei) const
|
|
698
|
+
{ return GetElement(ei).Vertices(); }
|
|
699
|
+
|
|
700
|
+
/// returns the vertices of a boundary element
|
|
701
|
+
[[deprecated("Use vnums = GetElVertices(ElementId) instead!")]]
|
|
702
|
+
void GetSElVertices (int selnr, Array<int> & vnums) const
|
|
703
|
+
{ vnums = GetElement(ElementId(BND,selnr)).Vertices(); }
|
|
704
|
+
|
|
705
|
+
[[deprecated("Use enums = GetElEdges(ElementId) instead! ")]]
|
|
706
|
+
void GetElEdges (ElementId ei, Array<int> & ednums) const
|
|
707
|
+
{ ednums = GetElement(ei).Edges(); }
|
|
708
|
+
|
|
709
|
+
auto GetElEdges (ElementId ei) const { return GetElement(ei).Edges(); }
|
|
710
|
+
|
|
711
|
+
/// returns the edges of an element
|
|
712
|
+
[[deprecated("Use GetElEdges(ElementId) instead!")]]
|
|
713
|
+
void GetElEdges (int elnr, Array<int> & ednums) const
|
|
714
|
+
{ ednums = GetElement(ElementId(VOL,elnr)).Edges(); }
|
|
715
|
+
|
|
716
|
+
// returns edge numbers and edge orientation of an element. (old style function)
|
|
717
|
+
// [[deprecated("Use GetElEdges(ElementId) instead!")]]
|
|
718
|
+
void GetElEdges (int elnr, Array<int> & ednums, Array<int> & orient) const;
|
|
719
|
+
|
|
720
|
+
/// returns the edges of a boundary element
|
|
721
|
+
[[deprecated("Use GetElEdges(ElementId) instead!")]]
|
|
722
|
+
void GetSElEdges (int selnr, Array<int> & ednums) const
|
|
723
|
+
{ ednums = ArrayObject (GetElement(ElementId(BND,selnr)).edges); }
|
|
724
|
+
|
|
725
|
+
// returns edge numbers and edge orientation of an element. (old style function)
|
|
726
|
+
// [[deprecated("Use GetElEdges(ElementId) instead, orient is deprecated!")]]
|
|
727
|
+
void GetSElEdges (int selnr, Array<int> & ednums, Array<int> & orient) const;
|
|
728
|
+
|
|
729
|
+
/// returns the faces of an element
|
|
730
|
+
// [[deprecated("Use fanums = GetElFaces(ElementId) instead!")]]
|
|
731
|
+
void GetElFaces (ElementId ei, Array<int> & fnums) const
|
|
732
|
+
{ fnums = GetElement(ei).Faces(); }
|
|
733
|
+
|
|
734
|
+
auto GetElFaces (ElementId ei) const
|
|
735
|
+
{ return GetElement(ei).Faces(); }
|
|
736
|
+
|
|
737
|
+
/// returns the faces of an element
|
|
738
|
+
[[deprecated("Use GetElFaces(ElementId) instead!")]]
|
|
739
|
+
void GetElFaces (int elnr, Array<int> & fnums) const
|
|
740
|
+
{ fnums = GetElement(ElementId(VOL,elnr)).Faces(); }
|
|
741
|
+
|
|
742
|
+
// returns face numbers and face orientation of an element. (old style function)
|
|
743
|
+
// [[deprecated("Use GetElFaces(ElementId) instead!")]]
|
|
744
|
+
void GetElFaces (int elnr, Array<int> & fnums, Array<int> & orient) const;
|
|
745
|
+
|
|
746
|
+
/// returns face number of surface element
|
|
747
|
+
int GetSElFace (int selnr) const;
|
|
748
|
+
|
|
749
|
+
// returns face number and orientation of surface element
|
|
750
|
+
// [[deprecated("orientation is deprecated! use GetSElFace(nr) instead")]]
|
|
751
|
+
void GetSElFace (int selnr, int & fnum, int & orient) const;
|
|
752
|
+
|
|
753
|
+
/// returns vertex numbers of face
|
|
754
|
+
[[deprecated("Use GetFacePNums(fnr) instead!")]]
|
|
755
|
+
void GetFacePNums (int fnr, Array<int> & pnums) const;
|
|
756
|
+
|
|
757
|
+
/// returns vertex numbers of face
|
|
758
|
+
auto GetFacePNums (size_t fnr) const
|
|
759
|
+
{
|
|
760
|
+
return ArrayObject (mesh.GetNode<2> (fnr).vertices);
|
|
761
|
+
}
|
|
762
|
+
/// returns vertex numbers of edge
|
|
763
|
+
[[deprecated("Use GetEdgePNums(enr) instead!")]]
|
|
764
|
+
void GetEdgePNums (int enr, int & pn1, int & pn2) const
|
|
765
|
+
{
|
|
766
|
+
auto edge = mesh.GetNode<1>(enr);
|
|
767
|
+
pn1 = edge.vertices[0];
|
|
768
|
+
pn2 = edge.vertices[1];
|
|
769
|
+
}
|
|
770
|
+
/// returns vertex numbers of edge
|
|
771
|
+
[[deprecated("Use GetEdgePNums(enr) instead!")]]
|
|
772
|
+
void GetEdgePNums (int enr, Array<int> & pnums) const;
|
|
773
|
+
/// returns vertex numbers of edge
|
|
774
|
+
/*
|
|
775
|
+
auto GetEdgePNums (size_t enr) const -> decltype(ArrayObject(IVec<2>()))
|
|
776
|
+
{
|
|
777
|
+
int v2[2];
|
|
778
|
+
Ng_GetEdge_Vertices (enr+1, v2);
|
|
779
|
+
return ArrayObject (IVec<2> (v2[0]-1, v2[1]-1));
|
|
780
|
+
}
|
|
781
|
+
*/
|
|
782
|
+
auto GetEdgePNums (size_t enr) const
|
|
783
|
+
{
|
|
784
|
+
auto vts = mesh.GetNode<1>(enr).vertices;
|
|
785
|
+
return IVec<2>(vts[0],vts[1]);
|
|
786
|
+
}
|
|
787
|
+
/// returns all elements connected to an edge
|
|
788
|
+
void GetEdgeElements (int enr, Array<int> & elnums) const;
|
|
789
|
+
/// returns all elements connected to an edge
|
|
790
|
+
void GetEdgeSurfaceElements (int enr, Array<int> & elnums) const;
|
|
791
|
+
/// returns all edges of a face
|
|
792
|
+
[[deprecated("Use GetFaceEdges(fnr) -> edges instead!")]]
|
|
793
|
+
void GetFaceEdges (int fnr, Array<int> & edges) const;
|
|
794
|
+
INLINE auto GetFaceEdges (size_t fnr) const
|
|
795
|
+
{ return ArrayObject(mesh.GetFaceEdges(fnr)); }
|
|
796
|
+
void GetEdgeFaces (int enr, Array<int> & faces) const;
|
|
797
|
+
/// returns elements connected to a face
|
|
798
|
+
void GetFaceElements (int fnr, Array<int> & elnums) const;
|
|
799
|
+
/// returns surface elements connected to a face
|
|
800
|
+
void GetFaceSurfaceElements (int fnr, Array<int> & elnums) const;
|
|
801
|
+
/// point numbers of a 1D element
|
|
802
|
+
// void GetSegmentPNums (int snr, Array<int> & pnums) const;
|
|
803
|
+
/// index of 1D element
|
|
804
|
+
// int GetSegmentIndex (int snr) const;
|
|
805
|
+
|
|
806
|
+
[[deprecated("Use sels = GetVertexElements(vnr) instead!")]]
|
|
807
|
+
void GetVertexElements (size_t vnr, Array<int> & elems) const;
|
|
808
|
+
auto GetVertexElements (size_t vnr) const
|
|
809
|
+
{ return ArrayObject(mesh.GetNode<0> (vnr).elements); }
|
|
810
|
+
|
|
811
|
+
[[deprecated("Use sels = GetVertexSurfaceElements(vnr) instead!")]]
|
|
812
|
+
void GetVertexSurfaceElements (size_t vnr, Array<int> & elems) const;
|
|
813
|
+
auto GetVertexSurfaceElements (size_t vnr) const
|
|
814
|
+
{ return ArrayObject(mesh.GetNode<0> (vnr).bnd_elements); }
|
|
815
|
+
|
|
816
|
+
auto GetVertexElements (size_t vnr, VorB vb) const
|
|
817
|
+
{
|
|
818
|
+
switch (vb)
|
|
819
|
+
{
|
|
820
|
+
case VOL: return ArrayObject(mesh.GetNode<0> (vnr).elements);
|
|
821
|
+
case BND: return ArrayObject(mesh.GetNode<0> (vnr).bnd_elements);
|
|
822
|
+
default: throw Exception ("GetVertexElements, unhandled vb");
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
|
|
827
|
+
/// number of facets of an element.
|
|
828
|
+
/// facets are edges (2D) or faces (3D)
|
|
829
|
+
size_t GetNFacets() const { return nnodes_cd[1]; }
|
|
830
|
+
|
|
831
|
+
/// facets of an element
|
|
832
|
+
auto GetElFacets (ElementId ei) const { return GetElement(ei).Facets(); }
|
|
833
|
+
|
|
834
|
+
[[deprecated("Use fanums = GetElFacets(ElementId) instead!")]]
|
|
835
|
+
void GetElFacets (ElementId ei, Array<int> & fnums) const
|
|
836
|
+
{ fnums = GetElFacets(ei); }
|
|
837
|
+
[[deprecated("Use GetElFacets(ElementId) instead!")]]
|
|
838
|
+
void GetElFacets (int elnr, Array<int> & fnums) const
|
|
839
|
+
{ fnums = GetElFacets(ElementId(VOL, elnr)); }
|
|
840
|
+
/// facet of a surface element
|
|
841
|
+
[[deprecated("Use GetElFacets(ElementId) instead!")]]
|
|
842
|
+
void GetSElFacets (int selnr, Array<int> & fnums) const
|
|
843
|
+
{ fnums = GetElFacets(ElementId(BND, selnr)); }
|
|
844
|
+
|
|
845
|
+
/// vertices of a facet
|
|
846
|
+
void GetFacetPNums (int fnr, Array<int> & pnums) const;
|
|
847
|
+
/// geometry type of facet
|
|
848
|
+
ELEMENT_TYPE GetFaceType (int fnr) const
|
|
849
|
+
{ return (mesh.GetNode<2>(fnr).vertices.Size() == 3) ? ET_TRIG : ET_QUAD; }
|
|
850
|
+
ELEMENT_TYPE GetFacetType (int fnr) const;
|
|
851
|
+
/// elements connected to facet
|
|
852
|
+
void GetFacetElements (int fnr, Array<int> & elnums) const
|
|
853
|
+
{
|
|
854
|
+
switch (dim)
|
|
855
|
+
{
|
|
856
|
+
case 1: elnums = GetVertexElements (fnr); break;
|
|
857
|
+
case 2: GetEdgeElements (fnr, elnums); break;
|
|
858
|
+
case 3: GetFaceElements (fnr, elnums); break;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
void GetFacetSurfaceElements (int fnr, Array<int> & elnums) const
|
|
862
|
+
{
|
|
863
|
+
switch (dim)
|
|
864
|
+
{
|
|
865
|
+
case 1: elnums = GetVertexSurfaceElements (fnr); break;
|
|
866
|
+
case 2: GetEdgeSurfaceElements (fnr, elnums); break;
|
|
867
|
+
case 3: GetFaceSurfaceElements (fnr, elnums); break;
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
void CalcIdentifiedFacets();
|
|
872
|
+
int GetPeriodicFacet(int fnr) const
|
|
873
|
+
{
|
|
874
|
+
if(get<1>(identified_facets[fnr]) == 2) // check if identification type is periodic
|
|
875
|
+
return get<0>(identified_facets[fnr]);
|
|
876
|
+
else
|
|
877
|
+
return fnr;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
/// element order stored in Netgen
|
|
882
|
+
int GetElOrder (int enr) const
|
|
883
|
+
{ return mesh.GetElementOrder (enr+1); }
|
|
884
|
+
/// anisotropic order stored in Netgen
|
|
885
|
+
IVec<3> GetElOrders (int enr) const
|
|
886
|
+
{
|
|
887
|
+
IVec<3> eo;
|
|
888
|
+
mesh.GetElementOrders(enr+1,&eo[0],&eo[1],&eo[2]);
|
|
889
|
+
return eo;
|
|
890
|
+
}
|
|
891
|
+
/// set element order in Netgen
|
|
892
|
+
void SetElOrder (int enr, int order)
|
|
893
|
+
{ mesh.SetElementOrder (enr+1,order); }
|
|
894
|
+
/// set anisotropic element order in Netgen
|
|
895
|
+
void SetElOrders (int enr, int ox, int oy, int oz)
|
|
896
|
+
{ mesh.SetElementOrders (enr+1, ox,oy,oz); }
|
|
897
|
+
/// order of suface element
|
|
898
|
+
int GetSElOrder (int enr) const
|
|
899
|
+
{ return mesh.GetSurfaceElementOrder (enr+1); }
|
|
900
|
+
/// anisotropic order of suface element
|
|
901
|
+
IVec<2> GetSElOrders (int enr) const
|
|
902
|
+
{
|
|
903
|
+
IVec<2> eo;
|
|
904
|
+
mesh.GetSurfaceElementOrders(enr+1,&eo[0],&eo[1]);
|
|
905
|
+
return eo;
|
|
906
|
+
}
|
|
907
|
+
/// set surface element order
|
|
908
|
+
void SetSElOrder (int enr, int order)
|
|
909
|
+
{ mesh.SetSurfaceElementOrder (enr+1,order); }
|
|
910
|
+
/// set anisotropic surface element order
|
|
911
|
+
void SetSElOrders (int enr, int ox, int oy)
|
|
912
|
+
{ mesh.SetSurfaceElementOrders (enr+1, ox,oy); }
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
/// the volume of an element (mid-point rule)
|
|
916
|
+
double ElementVolume (int elnr) const;
|
|
917
|
+
/// the area of a boundary element (mid-point rule)
|
|
918
|
+
double SurfaceElementVolume (int selnr) const;
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
/// number of multigrid levels
|
|
922
|
+
int GetNLevels() const { return nlevels; }
|
|
923
|
+
auto GetNVLevel(int level) const { return mesh.GetNVLevel(level); }
|
|
924
|
+
int GetHPElementLevel(ElementId ei) const { return mesh.GetHPElementLevel(ei.Nr(),1); }
|
|
925
|
+
|
|
926
|
+
/// the two parent vertices of a vertex. -1 for coarse-grid vertices
|
|
927
|
+
void GetParentNodes (int pi, int * parents) const
|
|
928
|
+
{
|
|
929
|
+
mesh.GetParentNodes (pi, parents);
|
|
930
|
+
}
|
|
931
|
+
IVec<2> GetParentNodes (int pi) const
|
|
932
|
+
{
|
|
933
|
+
IVec<2,int> parents;
|
|
934
|
+
mesh.GetParentNodes (pi, &parents[0]);
|
|
935
|
+
return parents;
|
|
936
|
+
}
|
|
937
|
+
/// number of parent element on next coarser mesh
|
|
938
|
+
[[deprecated("Use GetParentElement(ElementId) instead!")]]
|
|
939
|
+
int GetParentElement (int ei) const
|
|
940
|
+
{ return mesh.GetParentElement (ei); }
|
|
941
|
+
/// number of parent boundary element on next coarser mesh
|
|
942
|
+
[[deprecated("Use GetParentElement(ElementId) instead!")]]
|
|
943
|
+
int GetParentSElement (int ei) const
|
|
944
|
+
{ return mesh.GetParentSElement (ei); }
|
|
945
|
+
|
|
946
|
+
ElementId GetParentElement (ElementId ei) const
|
|
947
|
+
{
|
|
948
|
+
if (ei.VB() == VOL)
|
|
949
|
+
return ElementId(VOL, mesh.GetParentElement(ei.Nr()));
|
|
950
|
+
else if (ei.VB() == BND)
|
|
951
|
+
return ElementId(BND, mesh.GetParentSElement(ei.Nr()));
|
|
952
|
+
else
|
|
953
|
+
throw Exception ("GetParentElement only supported for VOL and BND");
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
bool HasParentEdges () const { return mesh.HasParentEdges(); }
|
|
957
|
+
auto GetParentEdges (int enr) const { return mesh.GetParentEdges(enr); }
|
|
958
|
+
auto GetParentFaces (int fnr) const { return mesh.GetParentFaces(fnr); }
|
|
959
|
+
|
|
960
|
+
Array<uint64_t> BuildRefinementTree() const;
|
|
961
|
+
void RefineFromTree(const Array<uint64_t> & tree);
|
|
962
|
+
|
|
963
|
+
/// representant of vertex for anisotropic meshes
|
|
964
|
+
int GetClusterRepVertex (int pi) const
|
|
965
|
+
{ return mesh.GetClusterRepVertex (pi+1)-1; }
|
|
966
|
+
/// representant of edge for anisotropic meshes
|
|
967
|
+
int GetClusterRepEdge (int pi) const
|
|
968
|
+
{ return mesh.GetClusterRepEdge (pi+1)-1; }
|
|
969
|
+
/// representant of face for anisotropic meshes
|
|
970
|
+
int GetClusterRepFace (int pi) const
|
|
971
|
+
{ return mesh.GetClusterRepFace (pi+1)-1; }
|
|
972
|
+
/// representant of element for anisotropic meshes
|
|
973
|
+
int GetClusterRepElement (int pi) const
|
|
974
|
+
{ return mesh.GetClusterRepElement (pi+1)-1; }
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
/// returns the transformation from the reference element to physical element.
|
|
978
|
+
/// Given a point in the reference element, the ElementTransformation can
|
|
979
|
+
/// compute the mapped point as well as the Jacobian
|
|
980
|
+
[[deprecated("Use GetTrafo with ElementId(vb, elnr) instead!")]]
|
|
981
|
+
ngfem::ElementTransformation & GetTrafo (int elnr, VorB vb, Allocator & lh) const
|
|
982
|
+
{
|
|
983
|
+
return GetTrafo(ElementId(vb, elnr),lh);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
ngfem::ElementTransformation & GetTrafo (ElementId ei, Allocator & lh) const
|
|
987
|
+
{
|
|
988
|
+
auto ptr = trafo_jumptable[ei.VB()];
|
|
989
|
+
if (ptr)
|
|
990
|
+
return (this->*ptr)(ei.Nr(),lh);
|
|
991
|
+
else
|
|
992
|
+
return GetTrafoOld(ei, lh);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
ngfem::ElementTransformation & GetTrafoOld (ElementId ei, Allocator & lh) const;
|
|
996
|
+
|
|
997
|
+
template <int DIM>
|
|
998
|
+
ngfem::ElementTransformation & GetTrafoDim (size_t elnr, Allocator & lh) const;
|
|
999
|
+
template <int DIM>
|
|
1000
|
+
ngfem::ElementTransformation & GetSTrafoDim (size_t elnr, Allocator & lh) const;
|
|
1001
|
+
template <int DIM>
|
|
1002
|
+
ngfem::ElementTransformation & GetCD2TrafoDim (size_t elnr, Allocator & lh) const;
|
|
1003
|
+
template <int DIM>
|
|
1004
|
+
ngfem::ElementTransformation & GetCD3TrafoDim (size_t elnr, Allocator & lh) const;
|
|
1005
|
+
|
|
1006
|
+
template <VorB VB,int DIM>
|
|
1007
|
+
ngfem::ElementTransformation & GetTrafo (T_ElementId<VB,DIM> ei, Allocator & lh) const
|
|
1008
|
+
{
|
|
1009
|
+
switch(VB)
|
|
1010
|
+
{
|
|
1011
|
+
case VOL:
|
|
1012
|
+
return GetTrafoDim<DIM> (ei.Nr(), lh);
|
|
1013
|
+
case BND:
|
|
1014
|
+
return GetSTrafoDim<DIM> (ei.Nr(), lh);
|
|
1015
|
+
case BBND:
|
|
1016
|
+
return GetCD2TrafoDim<DIM> (ei.Nr(),lh);
|
|
1017
|
+
default:
|
|
1018
|
+
__assume(false);
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
/*
|
|
1023
|
+
// (old style optimization)
|
|
1024
|
+
[[deprecated("functionality not useful anymore, just remove function call!")]]
|
|
1025
|
+
void SetPointSearchStartElement(const int el) const;
|
|
1026
|
+
*/
|
|
1027
|
+
|
|
1028
|
+
|
|
1029
|
+
ElementId FindElementOfPoint (FlatVector<double> point,
|
|
1030
|
+
IntegrationPoint & ip,
|
|
1031
|
+
bool build_searchtree,
|
|
1032
|
+
const Array<int> * const indices = NULL,
|
|
1033
|
+
double tol = 1e-4) const;
|
|
1034
|
+
ElementId FindElementOfPoint (FlatVector<double> point,
|
|
1035
|
+
IntegrationPoint & ip,
|
|
1036
|
+
bool build_searchtree,
|
|
1037
|
+
int index, double tol = 1e-4) const;
|
|
1038
|
+
int FindSurfaceElementOfPoint (FlatVector<double> point,
|
|
1039
|
+
IntegrationPoint & ip,
|
|
1040
|
+
bool build_searchtree,
|
|
1041
|
+
const Array<int> * const indices = NULL) const;
|
|
1042
|
+
int FindSurfaceElementOfPoint (FlatVector<double> point,
|
|
1043
|
+
IntegrationPoint & ip,
|
|
1044
|
+
bool build_searchtree,
|
|
1045
|
+
int index) const;
|
|
1046
|
+
|
|
1047
|
+
/// is element straight or curved ?
|
|
1048
|
+
[[deprecated("Use GetElement(id).is_curved instead!")]]
|
|
1049
|
+
bool IsElementCurved (int elnr) const
|
|
1050
|
+
{ return GetElement(ElementId(VOL,elnr)).is_curved; }
|
|
1051
|
+
// { return bool (Ng_IsElementCurved (elnr+1)); }
|
|
1052
|
+
|
|
1053
|
+
/*
|
|
1054
|
+
[[deprecated("Use GetPeriodicNodes(NT_VERTEX, pairs) instead!")]]
|
|
1055
|
+
void GetPeriodicVertices ( Array<IVec<2> > & pairs) const;
|
|
1056
|
+
[[deprecated("Use GetNPeriodicNodes(NT_VERTEX) instead!")]]
|
|
1057
|
+
int GetNPairsPeriodicVertices () const;
|
|
1058
|
+
[[deprecated("Use GetPeriodicNodes(NT_VERTEX, idnr) instead")]]
|
|
1059
|
+
void GetPeriodicVertices (int idnr, Array<IVec<2> > & pairs) const;
|
|
1060
|
+
[[deprecated("Use GetPeriodicNodes(NT_VERTEX, idnr).Size() instead")]]
|
|
1061
|
+
int GetNPairsPeriodicVertices (int idnr) const;
|
|
1062
|
+
|
|
1063
|
+
[[deprecated("Use GetPeriodicNodes(NT_EDGE, pairs) instead!")]]
|
|
1064
|
+
void GetPeriodicEdges ( Array<IVec<2> > & pairs) const;
|
|
1065
|
+
[[deprecated("Use GetNPeriodicNodes(NT_EDGE) instead!")]]
|
|
1066
|
+
int GetNPairsPeriodicEdges () const;
|
|
1067
|
+
[[deprecated("Use GetPeriodicNodes(NT_EDGE, idnr) instead")]]
|
|
1068
|
+
void GetPeriodicEdges (int idnr, Array<IVec<2> > & pairs) const;
|
|
1069
|
+
[[deprecated("Use GetPeriodicNodes(NT_EDGE, idnr).Size() instead")]]
|
|
1070
|
+
int GetNPairsPeriodicEdges (int idnr) const;
|
|
1071
|
+
*/
|
|
1072
|
+
|
|
1073
|
+
int GetNPeriodicIdentifications() const
|
|
1074
|
+
{
|
|
1075
|
+
return periodic_node_pairs[NT_VERTEX].Size();
|
|
1076
|
+
}
|
|
1077
|
+
// get number of all periodic nodes of nodetype nt
|
|
1078
|
+
size_t GetNPeriodicNodes(NODE_TYPE nt) const;
|
|
1079
|
+
// write all the node pairs of type nt into array pairs
|
|
1080
|
+
void GetPeriodicNodes(NODE_TYPE nt, Array<IVec<2>>& pairs) const;
|
|
1081
|
+
// Uses 0 based identification numbers! Returns periodic node pairs of given identifcation number
|
|
1082
|
+
const Array<IVec<2>>& GetPeriodicNodes(NODE_TYPE nt, int idnr) const;
|
|
1083
|
+
|
|
1084
|
+
shared_ptr<CoefficientFunction> RegionCF(VorB vb, shared_ptr<CoefficientFunction> default_value,
|
|
1085
|
+
const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values);
|
|
1086
|
+
|
|
1087
|
+
shared_ptr<CoefficientFunction> MaterialCF(shared_ptr<CoefficientFunction> default_value,
|
|
1088
|
+
const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values)
|
|
1089
|
+
{
|
|
1090
|
+
return RegionCF(VOL, default_value, region_values);
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
shared_ptr<CoefficientFunction> BoundaryCF(shared_ptr<CoefficientFunction> default_value,
|
|
1094
|
+
const Array<pair<variant<string, Region>, shared_ptr<CoefficientFunction>>>& region_values)
|
|
1095
|
+
{
|
|
1096
|
+
return RegionCF(BND, default_value, region_values);
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
private:
|
|
1100
|
+
mutable Table<size_t> elements_of_class[4];
|
|
1101
|
+
mutable size_t elements_of_class_timestamp[4] = { 0, 0, 0, 0 };
|
|
1102
|
+
public:
|
|
1103
|
+
const Table<size_t> & GetElementsOfClass(VorB vb = VOL) const; // classification by vertex numbers
|
|
1104
|
+
|
|
1105
|
+
private:
|
|
1106
|
+
Array<bool> higher_integration_order;
|
|
1107
|
+
public:
|
|
1108
|
+
void SetHigherIntegrationOrder(int elnr);
|
|
1109
|
+
void UnSetHigherIntegrationOrder(int elnr);
|
|
1110
|
+
|
|
1111
|
+
// void LoadMesh (const string & filename);
|
|
1112
|
+
// void LoadMesh (istream & str);
|
|
1113
|
+
void SaveMesh (ostream & str) const;
|
|
1114
|
+
void DoArchive(Archive& ar);
|
|
1115
|
+
// void LoadMeshFromString(const string & str);
|
|
1116
|
+
|
|
1117
|
+
// void PrecomputeGeometryData(int intorder);
|
|
1118
|
+
|
|
1119
|
+
/*
|
|
1120
|
+
void InitPointCurve(double red = 1, double green = 0, double blue = 0) const;
|
|
1121
|
+
void AddPointCurvePoint(const Vec<3> & point) const;
|
|
1122
|
+
*/
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
template <int DIMS, int DIMR> friend class Ng_ElementTransformation;
|
|
1126
|
+
template <int DIMS, int DIMR> friend class Ng_ConstElementTransformation;
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
NgMPI_Comm GetCommunicator () const { return mesh.GetCommunicator(); }
|
|
1130
|
+
|
|
1131
|
+
/**
|
|
1132
|
+
Returns the list of other MPI - processes where node is present.
|
|
1133
|
+
The ordering coincides for all processes.
|
|
1134
|
+
*/
|
|
1135
|
+
[[deprecated("Use GetDistantProcs (NodeId) instead!")]]
|
|
1136
|
+
void GetDistantProcs (NodeId node, Array<int> & procs) const;
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
Returns the global number of the node.
|
|
1140
|
+
Currently, this function works only for vertex-nodes.
|
|
1141
|
+
*/
|
|
1142
|
+
/*
|
|
1143
|
+
[[deprecated("should not need global numbers")]]
|
|
1144
|
+
size_t GetGlobalNodeNum (NodeId node) const;
|
|
1145
|
+
*/
|
|
1146
|
+
|
|
1147
|
+
size_t GetGlobalVertexNum (int locnum) const;
|
|
1148
|
+
|
|
1149
|
+
FlatArray<int> GetDistantProcs (NodeId node) const
|
|
1150
|
+
{
|
|
1151
|
+
return mesh.GetDistantProcs(StdNodeType(node.GetType(), GetDimension()), node.GetNr());
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
/// Reduces MPI - distributed data associated with mesh-nodes
|
|
1155
|
+
template <typename T>
|
|
1156
|
+
void AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const;
|
|
1157
|
+
|
|
1158
|
+
private:
|
|
1159
|
+
void BuildNeighbours();
|
|
1160
|
+
};
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
INLINE Ngs_Element ElementIterator :: operator*() const { return ma[ei]; }
|
|
1167
|
+
|
|
1168
|
+
template <VorB VB>
|
|
1169
|
+
INLINE Ngs_Element TElementIterator<VB>::operator*() const
|
|
1170
|
+
{
|
|
1171
|
+
return ma[ElementId(VB,nr)];
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
template <VorB VB, int DIM>
|
|
1175
|
+
INLINE Ngs_Element DimElementIterator<VB,DIM>::operator*() const
|
|
1176
|
+
{
|
|
1177
|
+
return ma.GetElement(T_ElementId<VB,DIM>(nr));
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
|
|
1181
|
+
class Region
|
|
1182
|
+
{
|
|
1183
|
+
shared_ptr<MeshAccess> mesh;
|
|
1184
|
+
VorB vb;
|
|
1185
|
+
shared_ptr<BitArray> mask;
|
|
1186
|
+
public:
|
|
1187
|
+
Region() {}
|
|
1188
|
+
NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, string pattern);
|
|
1189
|
+
NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, const char* pattern) : Region(amesh, avb, string(pattern)) {}
|
|
1190
|
+
NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, const BitArray & amask);
|
|
1191
|
+
NGS_DLL_HEADER Region (const shared_ptr<MeshAccess> & amesh, VorB avb, bool all = false);
|
|
1192
|
+
Region (const Region &) = default;
|
|
1193
|
+
explicit operator VorB () const { return vb; }
|
|
1194
|
+
VorB VB() const { return vb; }
|
|
1195
|
+
bool IsVolume () const { return vb == VOL; }
|
|
1196
|
+
bool IsBoundary () const { return vb == BND; }
|
|
1197
|
+
bool IsCoDim2() const { return vb == BBND; }
|
|
1198
|
+
const BitArray & Mask() const { return *mask; }
|
|
1199
|
+
BitArray& Mask() { return *mask; }
|
|
1200
|
+
operator const BitArray & () const { return *mask; }
|
|
1201
|
+
shared_ptr<BitArray> MaskPtr() { return mask; }
|
|
1202
|
+
const shared_ptr<MeshAccess> & Mesh() const { return mesh; }
|
|
1203
|
+
void DoArchive(Archive& ar)
|
|
1204
|
+
{ ar & mesh & vb & mask; }
|
|
1205
|
+
Region operator+ (const Region & r2) const
|
|
1206
|
+
{
|
|
1207
|
+
return Region (mesh, vb, BitArray(*mask).Or(r2.Mask()));
|
|
1208
|
+
}
|
|
1209
|
+
Region operator- (const Region & r2) const
|
|
1210
|
+
{
|
|
1211
|
+
return Region (mesh, vb, BitArray(*mask).And(BitArray(r2.Mask()).Invert()));
|
|
1212
|
+
}
|
|
1213
|
+
Region operator~ () const
|
|
1214
|
+
{
|
|
1215
|
+
return Region (mesh, vb, BitArray(*mask).Invert());
|
|
1216
|
+
}
|
|
1217
|
+
Region operator+ (const string & pattern2) const
|
|
1218
|
+
{
|
|
1219
|
+
return *this + Region(mesh, vb, pattern2);
|
|
1220
|
+
}
|
|
1221
|
+
Region operator- (const string & pattern2) const
|
|
1222
|
+
{
|
|
1223
|
+
return *this - Region(mesh, vb, pattern2);
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
Region operator* (const Region& r2) const
|
|
1227
|
+
{
|
|
1228
|
+
return Region(mesh, vb, BitArray(*mask).And(r2.Mask()));
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
Region operator* (const string& pattern) const
|
|
1232
|
+
{
|
|
1233
|
+
return *this * Region(mesh, vb, pattern);
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
bool operator==(const Region& other) const;
|
|
1237
|
+
size_t Hash() const;
|
|
1238
|
+
|
|
1239
|
+
// Get adjacent regions of codim other_vb
|
|
1240
|
+
Region GetNeighbours(VorB other_vb);
|
|
1241
|
+
Region GetBoundaries() { return GetNeighbours(VorB(int(vb)+1)); }
|
|
1242
|
+
|
|
1243
|
+
auto GetElements() const
|
|
1244
|
+
{
|
|
1245
|
+
return mesh->Elements(vb)
|
|
1246
|
+
| filter([&](auto ei) { return mask->Test(mesh->GetElIndex(ei)); });
|
|
1247
|
+
}
|
|
1248
|
+
};
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
shared_ptr<CoefficientFunction>
|
|
1252
|
+
MakeBoundaryFromVolumeCoefficientFunction (shared_ptr<CoefficientFunction> avol_cf);
|
|
1253
|
+
|
|
1254
|
+
shared_ptr<CoefficientFunction>
|
|
1255
|
+
MakeTrafoCF(shared_ptr<CoefficientFunction> func,
|
|
1256
|
+
shared_ptr<CoefficientFunction> trafo,
|
|
1257
|
+
Region region);
|
|
1258
|
+
|
|
1259
|
+
|
|
1260
|
+
NGS_DLL_HEADER
|
|
1261
|
+
shared_ptr<CoefficientFunction> NumElsOnFacetCF ();
|
|
1262
|
+
|
|
1263
|
+
|
|
1264
|
+
|
|
1265
|
+
/**
|
|
1266
|
+
Controls the progress - output.
|
|
1267
|
+
It controls the Netgen - progressbar as well as console progress update.
|
|
1268
|
+
In parallel, all processes must enter and call the Done method.
|
|
1269
|
+
*/
|
|
1270
|
+
class ProgressOutput
|
|
1271
|
+
{
|
|
1272
|
+
shared_ptr<MeshAccess> ma;
|
|
1273
|
+
NgMPI_Comm comm;
|
|
1274
|
+
string task;
|
|
1275
|
+
size_t total;
|
|
1276
|
+
double prevtime;
|
|
1277
|
+
bool is_root;
|
|
1278
|
+
bool use_mpi = true;
|
|
1279
|
+
bool done_called;
|
|
1280
|
+
|
|
1281
|
+
static atomic<size_t> cnt;
|
|
1282
|
+
static thread_local size_t thd_cnt;
|
|
1283
|
+
// static thread_local double thd_prev_time;
|
|
1284
|
+
static thread_local size_t thd_prev_time;
|
|
1285
|
+
public:
|
|
1286
|
+
NGS_DLL_HEADER ProgressOutput (shared_ptr<MeshAccess> ama,
|
|
1287
|
+
string atask, size_t atotal);
|
|
1288
|
+
NGS_DLL_HEADER ~ProgressOutput();
|
|
1289
|
+
|
|
1290
|
+
// update thd-local counter, and after some time also atomic node-local cnt
|
|
1291
|
+
NGS_DLL_HEADER void Update();
|
|
1292
|
+
// transfer thd-local counter to atomic node-local cnt
|
|
1293
|
+
NGS_DLL_HEADER static void SumUpLocal();
|
|
1294
|
+
NGS_DLL_HEADER void Update(size_t nr);
|
|
1295
|
+
NGS_DLL_HEADER void Done();
|
|
1296
|
+
// NGS_DLL_HEADER void DoneThread();
|
|
1297
|
+
};
|
|
1298
|
+
|
|
1299
|
+
|
|
1300
|
+
|
|
1301
|
+
/// old style, compatibility for a while
|
|
1302
|
+
template <typename T> [[deprecated("use ma.AllReduceNodalData instead")]]
|
|
1303
|
+
void AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op, const MeshAccess & ma)
|
|
1304
|
+
{
|
|
1305
|
+
ma.AllReduceNodalData (nt, data, op);
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
|
|
1309
|
+
#ifdef PARALLEL
|
|
1310
|
+
|
|
1311
|
+
template <typename T>
|
|
1312
|
+
void MeshAccess::
|
|
1313
|
+
AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const
|
|
1314
|
+
{
|
|
1315
|
+
NgMPI_Comm comm = GetCommunicator();
|
|
1316
|
+
if (comm.Size() <= 1) return;
|
|
1317
|
+
|
|
1318
|
+
Array<int> cnt(comm.Size());
|
|
1319
|
+
cnt = 0;
|
|
1320
|
+
for (auto i : Range(GetNNodes(nt)))
|
|
1321
|
+
for (auto p : GetDistantProcs(Node(nt,i)))
|
|
1322
|
+
cnt[p]++;
|
|
1323
|
+
|
|
1324
|
+
Table<T> dist_data(cnt), recv_data(cnt);
|
|
1325
|
+
|
|
1326
|
+
cnt = 0;
|
|
1327
|
+
for (auto i : Range(GetNNodes(nt)))
|
|
1328
|
+
for (auto p : GetDistantProcs(Node(nt, i)))
|
|
1329
|
+
dist_data[p][cnt[p]++] = data[i];
|
|
1330
|
+
|
|
1331
|
+
NgMPI_Requests requests;
|
|
1332
|
+
for (auto i : cnt.Range())
|
|
1333
|
+
if (cnt[i])
|
|
1334
|
+
{
|
|
1335
|
+
requests += comm.ISend(dist_data[i], i, NG_MPI_TAG_SOLVE);
|
|
1336
|
+
requests += comm.IRecv(recv_data[i], i, NG_MPI_TAG_SOLVE);
|
|
1337
|
+
}
|
|
1338
|
+
requests.WaitAll();
|
|
1339
|
+
|
|
1340
|
+
cnt = 0;
|
|
1341
|
+
auto type = GetMPIType<T>();
|
|
1342
|
+
for (auto i : Range(GetNNodes(nt)))
|
|
1343
|
+
for (auto p : GetDistantProcs(Node(nt, i)))
|
|
1344
|
+
NG_MPI_Reduce_local (&recv_data[p][cnt[p]++],
|
|
1345
|
+
&data[i], 1, type, op);
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
|
|
1349
|
+
#else
|
|
1350
|
+
|
|
1351
|
+
template <typename T>
|
|
1352
|
+
void MeshAccess::
|
|
1353
|
+
AllReduceNodalData (NODE_TYPE nt, Array<T> & data, NG_MPI_Op op) const { ; }
|
|
1354
|
+
|
|
1355
|
+
#endif
|
|
1356
|
+
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
#endif
|