netgen-mesher 6.2.2506.post35.dev0__cp314-cp314-win_amd64.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.
- netgen/NgOCC.py +7 -0
- netgen/__init__.py +114 -0
- netgen/__init__.pyi +22 -0
- netgen/__main__.py +53 -0
- netgen/cmake/NetgenConfig.cmake +79 -0
- netgen/cmake/netgen-targets-release.cmake +69 -0
- netgen/cmake/netgen-targets.cmake +146 -0
- netgen/config/__init__.py +1 -0
- netgen/config/__init__.pyi +52 -0
- netgen/config/__main__.py +4 -0
- netgen/config/config.py +68 -0
- netgen/config/config.pyi +54 -0
- netgen/csg.py +25 -0
- netgen/geom2d.py +178 -0
- netgen/gui.py +82 -0
- netgen/include/core/archive.hpp +1256 -0
- netgen/include/core/array.hpp +1760 -0
- netgen/include/core/autodiff.hpp +1131 -0
- netgen/include/core/autodiffdiff.hpp +733 -0
- netgen/include/core/bitarray.hpp +240 -0
- netgen/include/core/concurrentqueue.h +3619 -0
- netgen/include/core/exception.hpp +145 -0
- netgen/include/core/flags.hpp +199 -0
- netgen/include/core/hashtable.hpp +1281 -0
- netgen/include/core/localheap.hpp +318 -0
- netgen/include/core/logging.hpp +117 -0
- netgen/include/core/memtracer.hpp +221 -0
- netgen/include/core/mpi4py_pycapi.h +245 -0
- netgen/include/core/mpi_wrapper.hpp +643 -0
- netgen/include/core/ng_mpi.hpp +94 -0
- netgen/include/core/ng_mpi_generated_declarations.hpp +155 -0
- netgen/include/core/ng_mpi_native.hpp +25 -0
- netgen/include/core/ngcore.hpp +32 -0
- netgen/include/core/ngcore_api.hpp +152 -0
- netgen/include/core/ngstream.hpp +115 -0
- netgen/include/core/paje_trace.hpp +279 -0
- netgen/include/core/profiler.hpp +382 -0
- netgen/include/core/python_ngcore.hpp +457 -0
- netgen/include/core/ranges.hpp +109 -0
- netgen/include/core/register_archive.hpp +100 -0
- netgen/include/core/signal.hpp +82 -0
- netgen/include/core/simd.hpp +160 -0
- netgen/include/core/simd_arm64.hpp +407 -0
- netgen/include/core/simd_avx.hpp +394 -0
- netgen/include/core/simd_avx512.hpp +285 -0
- netgen/include/core/simd_generic.hpp +1053 -0
- netgen/include/core/simd_math.hpp +178 -0
- netgen/include/core/simd_sse.hpp +289 -0
- netgen/include/core/statushandler.hpp +37 -0
- netgen/include/core/symboltable.hpp +153 -0
- netgen/include/core/table.hpp +810 -0
- netgen/include/core/taskmanager.hpp +1161 -0
- netgen/include/core/type_traits.hpp +65 -0
- netgen/include/core/utils.hpp +385 -0
- netgen/include/core/version.hpp +102 -0
- netgen/include/core/xbool.hpp +47 -0
- netgen/include/csg/algprim.hpp +563 -0
- netgen/include/csg/brick.hpp +150 -0
- netgen/include/csg/csg.hpp +43 -0
- netgen/include/csg/csgeom.hpp +389 -0
- netgen/include/csg/csgparser.hpp +101 -0
- netgen/include/csg/curve2d.hpp +67 -0
- netgen/include/csg/edgeflw.hpp +112 -0
- netgen/include/csg/explicitcurve2d.hpp +113 -0
- netgen/include/csg/extrusion.hpp +185 -0
- netgen/include/csg/gencyl.hpp +70 -0
- netgen/include/csg/geoml.hpp +16 -0
- netgen/include/csg/identify.hpp +213 -0
- netgen/include/csg/manifold.hpp +29 -0
- netgen/include/csg/meshsurf.hpp +46 -0
- netgen/include/csg/polyhedra.hpp +121 -0
- netgen/include/csg/revolution.hpp +180 -0
- netgen/include/csg/singularref.hpp +84 -0
- netgen/include/csg/solid.hpp +295 -0
- netgen/include/csg/specpoin.hpp +194 -0
- netgen/include/csg/spline3d.hpp +99 -0
- netgen/include/csg/splinesurface.hpp +85 -0
- netgen/include/csg/surface.hpp +394 -0
- netgen/include/csg/triapprox.hpp +63 -0
- netgen/include/csg/vscsg.hpp +34 -0
- netgen/include/general/autodiff.hpp +356 -0
- netgen/include/general/autoptr.hpp +39 -0
- netgen/include/general/gzstream.h +121 -0
- netgen/include/general/hashtabl.hpp +1692 -0
- netgen/include/general/myadt.hpp +48 -0
- netgen/include/general/mystring.hpp +226 -0
- netgen/include/general/netgenout.hpp +205 -0
- netgen/include/general/ngarray.hpp +797 -0
- netgen/include/general/ngbitarray.hpp +149 -0
- netgen/include/general/ngpython.hpp +74 -0
- netgen/include/general/optmem.hpp +44 -0
- netgen/include/general/parthreads.hpp +138 -0
- netgen/include/general/seti.hpp +50 -0
- netgen/include/general/sort.hpp +47 -0
- netgen/include/general/spbita2d.hpp +59 -0
- netgen/include/general/stack.hpp +114 -0
- netgen/include/general/table.hpp +280 -0
- netgen/include/general/template.hpp +509 -0
- netgen/include/geom2d/csg2d.hpp +750 -0
- netgen/include/geom2d/geometry2d.hpp +280 -0
- netgen/include/geom2d/spline2d.hpp +234 -0
- netgen/include/geom2d/vsgeom2d.hpp +28 -0
- netgen/include/gprim/adtree.hpp +1392 -0
- netgen/include/gprim/geom2d.hpp +858 -0
- netgen/include/gprim/geom3d.hpp +749 -0
- netgen/include/gprim/geomfuncs.hpp +212 -0
- netgen/include/gprim/geomobjects.hpp +544 -0
- netgen/include/gprim/geomops.hpp +404 -0
- netgen/include/gprim/geomtest3d.hpp +101 -0
- netgen/include/gprim/gprim.hpp +33 -0
- netgen/include/gprim/spline.hpp +778 -0
- netgen/include/gprim/splinegeometry.hpp +73 -0
- netgen/include/gprim/transform3d.hpp +216 -0
- netgen/include/include/acisgeom.hpp +3 -0
- netgen/include/include/csg.hpp +1 -0
- netgen/include/include/geometry2d.hpp +1 -0
- netgen/include/include/gprim.hpp +1 -0
- netgen/include/include/incopengl.hpp +62 -0
- netgen/include/include/inctcl.hpp +13 -0
- netgen/include/include/incvis.hpp +6 -0
- netgen/include/include/linalg.hpp +1 -0
- netgen/include/include/meshing.hpp +1 -0
- netgen/include/include/myadt.hpp +1 -0
- netgen/include/include/mydefs.hpp +70 -0
- netgen/include/include/mystdlib.h +59 -0
- netgen/include/include/netgen_config.hpp +27 -0
- netgen/include/include/netgen_version.hpp +9 -0
- netgen/include/include/nginterface_v2_impl.hpp +395 -0
- netgen/include/include/ngsimd.hpp +1 -0
- netgen/include/include/occgeom.hpp +1 -0
- netgen/include/include/opti.hpp +1 -0
- netgen/include/include/parallel.hpp +1 -0
- netgen/include/include/stlgeom.hpp +1 -0
- netgen/include/include/visual.hpp +1 -0
- netgen/include/interface/rw_medit.hpp +11 -0
- netgen/include/interface/writeuser.hpp +80 -0
- netgen/include/linalg/densemat.hpp +414 -0
- netgen/include/linalg/linalg.hpp +29 -0
- netgen/include/linalg/opti.hpp +142 -0
- netgen/include/linalg/polynomial.hpp +47 -0
- netgen/include/linalg/vector.hpp +217 -0
- netgen/include/meshing/adfront2.hpp +274 -0
- netgen/include/meshing/adfront3.hpp +332 -0
- netgen/include/meshing/basegeom.hpp +370 -0
- netgen/include/meshing/bcfunctions.hpp +53 -0
- netgen/include/meshing/bisect.hpp +72 -0
- netgen/include/meshing/boundarylayer.hpp +113 -0
- netgen/include/meshing/classifyhpel.hpp +1984 -0
- netgen/include/meshing/clusters.hpp +46 -0
- netgen/include/meshing/curvedelems.hpp +274 -0
- netgen/include/meshing/delaunay2d.hpp +73 -0
- netgen/include/meshing/fieldlines.hpp +103 -0
- netgen/include/meshing/findip.hpp +198 -0
- netgen/include/meshing/findip2.hpp +103 -0
- netgen/include/meshing/geomsearch.hpp +69 -0
- netgen/include/meshing/global.hpp +54 -0
- netgen/include/meshing/hpref_hex.hpp +330 -0
- netgen/include/meshing/hpref_prism.hpp +3405 -0
- netgen/include/meshing/hpref_pyramid.hpp +154 -0
- netgen/include/meshing/hpref_quad.hpp +2082 -0
- netgen/include/meshing/hpref_segm.hpp +122 -0
- netgen/include/meshing/hpref_tet.hpp +4230 -0
- netgen/include/meshing/hpref_trig.hpp +848 -0
- netgen/include/meshing/hprefinement.hpp +366 -0
- netgen/include/meshing/improve2.hpp +178 -0
- netgen/include/meshing/improve3.hpp +151 -0
- netgen/include/meshing/localh.hpp +223 -0
- netgen/include/meshing/meshclass.hpp +1076 -0
- netgen/include/meshing/meshfunc.hpp +47 -0
- netgen/include/meshing/meshing.hpp +63 -0
- netgen/include/meshing/meshing2.hpp +163 -0
- netgen/include/meshing/meshing3.hpp +123 -0
- netgen/include/meshing/meshtool.hpp +90 -0
- netgen/include/meshing/meshtype.hpp +1930 -0
- netgen/include/meshing/msghandler.hpp +62 -0
- netgen/include/meshing/paralleltop.hpp +172 -0
- netgen/include/meshing/python_mesh.hpp +206 -0
- netgen/include/meshing/ruler2.hpp +172 -0
- netgen/include/meshing/ruler3.hpp +211 -0
- netgen/include/meshing/soldata.hpp +141 -0
- netgen/include/meshing/specials.hpp +17 -0
- netgen/include/meshing/surfacegeom.hpp +73 -0
- netgen/include/meshing/topology.hpp +1003 -0
- netgen/include/meshing/validate.hpp +21 -0
- netgen/include/meshing/visual_interface.hpp +71 -0
- netgen/include/mydefs.hpp +70 -0
- netgen/include/nginterface.h +474 -0
- netgen/include/nginterface_v2.hpp +406 -0
- netgen/include/nglib.h +697 -0
- netgen/include/nglib_occ.h +50 -0
- netgen/include/occ/occ_edge.hpp +47 -0
- netgen/include/occ/occ_face.hpp +52 -0
- netgen/include/occ/occ_solid.hpp +23 -0
- netgen/include/occ/occ_utils.hpp +376 -0
- netgen/include/occ/occ_vertex.hpp +30 -0
- netgen/include/occ/occgeom.hpp +659 -0
- netgen/include/occ/occmeshsurf.hpp +168 -0
- netgen/include/occ/vsocc.hpp +33 -0
- netgen/include/pybind11/LICENSE +29 -0
- netgen/include/pybind11/attr.h +722 -0
- netgen/include/pybind11/buffer_info.h +208 -0
- netgen/include/pybind11/cast.h +2361 -0
- netgen/include/pybind11/chrono.h +228 -0
- netgen/include/pybind11/common.h +2 -0
- netgen/include/pybind11/complex.h +74 -0
- netgen/include/pybind11/conduit/README.txt +15 -0
- netgen/include/pybind11/conduit/pybind11_conduit_v1.h +116 -0
- netgen/include/pybind11/conduit/pybind11_platform_abi_id.h +87 -0
- netgen/include/pybind11/conduit/wrap_include_python_h.h +72 -0
- netgen/include/pybind11/critical_section.h +56 -0
- netgen/include/pybind11/detail/class.h +823 -0
- netgen/include/pybind11/detail/common.h +1348 -0
- netgen/include/pybind11/detail/cpp_conduit.h +75 -0
- netgen/include/pybind11/detail/descr.h +226 -0
- netgen/include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h +39 -0
- netgen/include/pybind11/detail/exception_translation.h +71 -0
- netgen/include/pybind11/detail/function_record_pyobject.h +191 -0
- netgen/include/pybind11/detail/init.h +538 -0
- netgen/include/pybind11/detail/internals.h +799 -0
- netgen/include/pybind11/detail/native_enum_data.h +209 -0
- netgen/include/pybind11/detail/pybind11_namespace_macros.h +82 -0
- netgen/include/pybind11/detail/struct_smart_holder.h +378 -0
- netgen/include/pybind11/detail/type_caster_base.h +1591 -0
- netgen/include/pybind11/detail/typeid.h +65 -0
- netgen/include/pybind11/detail/using_smart_holder.h +22 -0
- netgen/include/pybind11/detail/value_and_holder.h +90 -0
- netgen/include/pybind11/eigen/common.h +9 -0
- netgen/include/pybind11/eigen/matrix.h +723 -0
- netgen/include/pybind11/eigen/tensor.h +521 -0
- netgen/include/pybind11/eigen.h +12 -0
- netgen/include/pybind11/embed.h +320 -0
- netgen/include/pybind11/eval.h +161 -0
- netgen/include/pybind11/functional.h +147 -0
- netgen/include/pybind11/gil.h +199 -0
- netgen/include/pybind11/gil_safe_call_once.h +102 -0
- netgen/include/pybind11/gil_simple.h +37 -0
- netgen/include/pybind11/iostream.h +265 -0
- netgen/include/pybind11/native_enum.h +67 -0
- netgen/include/pybind11/numpy.h +2312 -0
- netgen/include/pybind11/operators.h +202 -0
- netgen/include/pybind11/options.h +92 -0
- netgen/include/pybind11/pybind11.h +3645 -0
- netgen/include/pybind11/pytypes.h +2680 -0
- netgen/include/pybind11/stl/filesystem.h +114 -0
- netgen/include/pybind11/stl.h +666 -0
- netgen/include/pybind11/stl_bind.h +858 -0
- netgen/include/pybind11/subinterpreter.h +299 -0
- netgen/include/pybind11/trampoline_self_life_support.h +65 -0
- netgen/include/pybind11/type_caster_pyobject_ptr.h +61 -0
- netgen/include/pybind11/typing.h +298 -0
- netgen/include/pybind11/warnings.h +75 -0
- netgen/include/stlgeom/meshstlsurface.hpp +67 -0
- netgen/include/stlgeom/stlgeom.hpp +491 -0
- netgen/include/stlgeom/stlline.hpp +193 -0
- netgen/include/stlgeom/stltool.hpp +331 -0
- netgen/include/stlgeom/stltopology.hpp +419 -0
- netgen/include/stlgeom/vsstl.hpp +58 -0
- netgen/include/visualization/meshdoc.hpp +42 -0
- netgen/include/visualization/mvdraw.hpp +325 -0
- netgen/include/visualization/vispar.hpp +128 -0
- netgen/include/visualization/visual.hpp +28 -0
- netgen/include/visualization/visual_api.hpp +10 -0
- netgen/include/visualization/vssolution.hpp +399 -0
- netgen/lib/libnggui.lib +0 -0
- netgen/lib/ngcore.lib +0 -0
- netgen/lib/nglib.lib +0 -0
- netgen/lib/togl.lib +0 -0
- netgen/libnggui.dll +0 -0
- netgen/libngguipy.lib +0 -0
- netgen/libngguipy.pyd +0 -0
- netgen/libngpy/_NgOCC.pyi +1545 -0
- netgen/libngpy/__init__.pyi +7 -0
- netgen/libngpy/_csg.pyi +259 -0
- netgen/libngpy/_geom2d.pyi +323 -0
- netgen/libngpy/_meshing.pyi +1111 -0
- netgen/libngpy/_stl.pyi +131 -0
- netgen/libngpy.lib +0 -0
- netgen/libngpy.pyd +0 -0
- netgen/meshing.py +65 -0
- netgen/ngcore.dll +0 -0
- netgen/nglib.dll +0 -0
- netgen/occ.py +52 -0
- netgen/read_gmsh.py +259 -0
- netgen/read_meshio.py +22 -0
- netgen/stl.py +2 -0
- netgen/togl.dll +0 -0
- netgen/version.py +2 -0
- netgen/webgui.py +529 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boundarycondition.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boxcyl.geo +32 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/circle_on_cube.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cone.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cube.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandring.geo +55 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandspheres.geo +21 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemcyl.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemsphere.geo +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylinder.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylsphere.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/doc/ng4.pdf +0 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipsoid.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipticcyl.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/extrusion.geo +99 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/fichera.geo +24 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/frame.step +11683 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/hinge.stl +8486 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/lshape3d.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes2.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/matrix.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ortho.geo +11 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/part1.stl +2662 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/period.geo +33 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/exportNeutral.py +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/mesh.py +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/revolution.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/screw.step +1694 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sculpture.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shell.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphere.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphereincube.geo +17 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/square.in2d +35 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarecircle.in2d +48 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarehole.in2d +47 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/torus.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/trafo.geo +57 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twobricks.geo +15 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocubes.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocyl.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/METADATA +15 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/RECORD +340 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/WHEEL +5 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/entry_points.txt +2 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/AUTHORS +1 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/LICENSE +504 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/top_level.txt +2 -0
- pyngcore/__init__.py +1 -0
- pyngcore/pyngcore.cp314-win_amd64.pyd +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
#ifndef FILE_HPREFINEMENT
|
|
2
|
+
#define FILE_HPREFINEMENT
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: hprefinement.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 27. Oct. 2000 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
HP Refinement
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#include "bisect.hpp"
|
|
15
|
+
#include "meshtype.hpp"
|
|
16
|
+
|
|
17
|
+
namespace netgen
|
|
18
|
+
{
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
enum HPREF_ELEMENT_TYPE {
|
|
22
|
+
HP_NONE=0,
|
|
23
|
+
|
|
24
|
+
HP_SEGM = 1,
|
|
25
|
+
HP_SEGM_SINGCORNERL,
|
|
26
|
+
HP_SEGM_SINGCORNERR,
|
|
27
|
+
HP_SEGM_SINGCORNERS,
|
|
28
|
+
|
|
29
|
+
HP_TRIG = 10,
|
|
30
|
+
HP_TRIG_SINGCORNER,
|
|
31
|
+
HP_TRIG_SINGCORNER12,
|
|
32
|
+
HP_TRIG_SINGCORNER123,
|
|
33
|
+
HP_TRIG_SINGCORNER123_2D, // not rotational symmetric
|
|
34
|
+
HP_TRIG_SINGEDGE = 20,
|
|
35
|
+
HP_TRIG_SINGEDGECORNER1, // E = 100, V = 100
|
|
36
|
+
HP_TRIG_SINGEDGECORNER2, // E = 100, V = 010
|
|
37
|
+
HP_TRIG_SINGEDGECORNER12, // E = 100, V = 110
|
|
38
|
+
HP_TRIG_SINGEDGECORNER3,
|
|
39
|
+
HP_TRIG_SINGEDGECORNER13,
|
|
40
|
+
HP_TRIG_SINGEDGECORNER23,
|
|
41
|
+
HP_TRIG_SINGEDGECORNER123,
|
|
42
|
+
HP_TRIG_SINGEDGES = 30,
|
|
43
|
+
HP_TRIG_SINGEDGES2,
|
|
44
|
+
HP_TRIG_SINGEDGES3,
|
|
45
|
+
HP_TRIG_SINGEDGES23,
|
|
46
|
+
HP_TRIG_3SINGEDGES = 40,
|
|
47
|
+
|
|
48
|
+
HP_TRIG_ALFELD,
|
|
49
|
+
HP_TRIG_POWELL,
|
|
50
|
+
|
|
51
|
+
HP_QUAD = 50,
|
|
52
|
+
HP_QUAD_SINGCORNER,
|
|
53
|
+
HP_DUMMY_QUAD_SINGCORNER,
|
|
54
|
+
HP_QUAD_SINGEDGE,
|
|
55
|
+
HP_QUAD_0E_2VA, // V = 1100
|
|
56
|
+
HP_QUAD_0E_2VB, // V = 1010
|
|
57
|
+
HP_QUAD_0E_3V,
|
|
58
|
+
HP_QUAD_0E_4V,
|
|
59
|
+
|
|
60
|
+
// one edge: marked edge is always edge from vertex 1 to vertex 2 (E = 1000)
|
|
61
|
+
HP_QUAD_1E_1VA, // vertex on beginning of edge: V = 1000
|
|
62
|
+
HP_QUAD_1E_1VB, // vertex on end of edge: V = 0100
|
|
63
|
+
HP_QUAD_1E_1VC, // V = 0010
|
|
64
|
+
HP_QUAD_1E_1VD, // V = 0001
|
|
65
|
+
|
|
66
|
+
HP_QUAD_1E_2VA, // V = 1100
|
|
67
|
+
HP_QUAD_1E_2VB, // V = 1010
|
|
68
|
+
HP_QUAD_1E_2VC, // V = 1001
|
|
69
|
+
HP_QUAD_1E_2VD, // V = 0110
|
|
70
|
+
HP_QUAD_1E_2VE, // V = 0101
|
|
71
|
+
HP_QUAD_1E_2VF, // V = 0011
|
|
72
|
+
|
|
73
|
+
HP_QUAD_1E_3VA, // V = 1110
|
|
74
|
+
HP_QUAD_1E_3VB, // V = 1101
|
|
75
|
+
HP_QUAD_1E_3VC, // V = 1011
|
|
76
|
+
HP_QUAD_1E_3VD, // V = 0111
|
|
77
|
+
|
|
78
|
+
HP_QUAD_1E_4V, // V = 1111
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
HP_QUAD_2E, // E = 1001, V = 1000
|
|
82
|
+
HP_QUAD_2E_1VA, // E = 1001, V = 1100
|
|
83
|
+
HP_QUAD_2E_1VB, // E = 1001, V = 1010
|
|
84
|
+
HP_QUAD_2E_1VC, // E = 1001, V = 1001
|
|
85
|
+
HP_QUAD_2E_2VA, // E = 1001, V = 1110
|
|
86
|
+
HP_QUAD_2E_2VB, // E = 1001, V = 1101
|
|
87
|
+
HP_QUAD_2E_2VC, // E = 1001, V = 1011
|
|
88
|
+
HP_QUAD_2E_3V, // E = 1001, V = 1111
|
|
89
|
+
|
|
90
|
+
HP_QUAD_2EB_0V, // E = 1010, V = 0000
|
|
91
|
+
HP_QUAD_2EB_1VA, // E = 1010, V = 1000
|
|
92
|
+
HP_QUAD_2EB_1VB, // E = 1010, V = 0100
|
|
93
|
+
HP_QUAD_2EB_2VA, // E = 1010, V = 1100
|
|
94
|
+
HP_QUAD_2EB_2VB, // E = 1010, V = 1010
|
|
95
|
+
HP_QUAD_2EB_2VC, // E = 1010, V = 1001
|
|
96
|
+
HP_QUAD_2EB_2VD, // E = 1010, V = 0101
|
|
97
|
+
HP_QUAD_2EB_3VA, // E = 1010, V = 1110
|
|
98
|
+
HP_QUAD_2EB_3VB, // E = 1010, V = 1101
|
|
99
|
+
|
|
100
|
+
HP_QUAD_2EB_4V,
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
HP_QUAD_3E, // E = 1101, V = 1100
|
|
104
|
+
HP_QUAD_3E_3VA, // E = 1101, V = 1110
|
|
105
|
+
HP_QUAD_3E_3VB, // E = 1101, V = 1101
|
|
106
|
+
HP_QUAD_3E_4V, // E = 1101, V = 1111
|
|
107
|
+
|
|
108
|
+
HP_QUAD_4E,
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
HP_TET = 100, // no singular vertex/edge
|
|
112
|
+
HP_NONETET, // make void
|
|
113
|
+
HP_TET_0E_1V, // V1
|
|
114
|
+
HP_TET_0E_2V, // V1,2
|
|
115
|
+
HP_TET_0E_3V, // V1,2,3
|
|
116
|
+
HP_TET_0E_4V, // V1,2,3,4
|
|
117
|
+
HP_TET_1E_0V = 200, // E1-2
|
|
118
|
+
HP_TET_1E_1VA, // V1
|
|
119
|
+
HP_TET_1E_1VB, // V3
|
|
120
|
+
HP_TET_1E_2VA, // V1,2
|
|
121
|
+
HP_TET_1E_2VB, // V1,3
|
|
122
|
+
HP_TET_1E_2VC, // V1,4
|
|
123
|
+
HP_TET_1E_2VD, // V3,4
|
|
124
|
+
HP_TET_1E_3VA, // V1,2,3
|
|
125
|
+
HP_TET_1E_3VB, // V1,3,4
|
|
126
|
+
HP_TET_1E_4V, // V1,2,3,4
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
// 2 connected edges, additionally marked Vs
|
|
130
|
+
HP_TET_2EA_0V = 220, // E1-2, E1-3
|
|
131
|
+
HP_TET_2EA_1VA, // V2
|
|
132
|
+
HP_TET_2EA_1VB, // V3
|
|
133
|
+
HP_TET_2EA_1VC, // V4
|
|
134
|
+
HP_TET_2EA_2VA, // V2,3
|
|
135
|
+
HP_TET_2EA_2VB, // V2,4
|
|
136
|
+
HP_TET_2EA_2VC, // V3,4
|
|
137
|
+
HP_TET_2EA_3V, // V2,3,4
|
|
138
|
+
|
|
139
|
+
// 2 opposite edges
|
|
140
|
+
HP_TET_2EB_0V = 230, // E1-2, E3-4
|
|
141
|
+
HP_TET_2EB_1V, // V1
|
|
142
|
+
HP_TET_2EB_2VA, // V1,2
|
|
143
|
+
HP_TET_2EB_2VB, // V1,3
|
|
144
|
+
HP_TET_2EB_2VC, // V1,4
|
|
145
|
+
HP_TET_2EB_3V, // V1,2,3
|
|
146
|
+
HP_TET_2EB_4V, // V1,2,3,4
|
|
147
|
+
|
|
148
|
+
HP_TET_3EA_0V = 400, // E1-2, E1-3, E1-4, 3 edges connected
|
|
149
|
+
HP_TET_3EA_1V, // V2
|
|
150
|
+
HP_TET_3EA_2V, // V2,3
|
|
151
|
+
HP_TET_3EA_3V, // V2,3,4
|
|
152
|
+
|
|
153
|
+
HP_TET_3EB_0V = 420, // E1-2, E1-4, E2-3 3 edges chain
|
|
154
|
+
HP_TET_3EB_1V, //
|
|
155
|
+
HP_TET_3EB_2V, //
|
|
156
|
+
HP_TET_3EC_0V = 430, // 3 edges chain, alter
|
|
157
|
+
HP_TET_3EC_1V, // 3 edges chain, alter
|
|
158
|
+
HP_TET_3EC_2V, // 3 edges chain, alter
|
|
159
|
+
HP_TET_3ED_3V, // 3 edges in a loop e12, e13, e23 NEW .. done
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
HP_TET_1F_0E_0V = 500, // 1 singular face
|
|
163
|
+
HP_TET_1F_0E_1VA, // 1 sing vertex in face (V2) FIX ... (needs HEX7)
|
|
164
|
+
HP_TET_1F_0E_1VB, // 1 sing vertex not in face (V1)
|
|
165
|
+
HP_TET_1F_0E_2V, // 2 sing vertex in face (V2,V3) NEW .. done
|
|
166
|
+
HP_TET_1F_0E_3V, // 3 sing vertex in face (V2,V3,V4) NEWNEW
|
|
167
|
+
HP_TET_1F_1EA_0V, // 1 sing edge not in face
|
|
168
|
+
HP_TET_1F_1EB_0V, // 1 sing edge in face
|
|
169
|
+
HP_TET_1F_1E_1VA, // 1 sing edge in face e23, sing vert 2 NEW done
|
|
170
|
+
HP_TET_1F_1E_1VB, // 1 sing edge in face e24, sing vert 2 NEW done
|
|
171
|
+
HP_TET_1F_1E_2VA, // 1 sing edge not in face (e12), sing v2,v3 NEW done
|
|
172
|
+
HP_TET_1F_1E_2VB, // 1 sing edge not in face (e12), sing v2,v4 NEW done
|
|
173
|
+
HP_TET_1F_1E_2VC, // 1 sing edge not in face (e12), sing v3,v4 NEW
|
|
174
|
+
HP_TET_1F_1EA_3V, // 1 sing edge out of face e12, sing v2, v3, v4 NEWNEW WIP, need Pyramid with 1 sing trig-face
|
|
175
|
+
HP_TET_1F_1E_3V, // 1 sing edge in face e23, sing v2, v3, v4 NEWNEW done
|
|
176
|
+
HP_TET_1F_2Eoo_3V, // 2e out of face: f234, e12, e13, v1,v2,v3 NEWNEW
|
|
177
|
+
HP_TET_1F_2E_0VA, // edge6 && fedge3 .. 1 in face, 1 not in face NEW done
|
|
178
|
+
HP_TET_1F_2E_0VB, // edge6 && fedge2 .. 1 in face, 1 not in face NEW done
|
|
179
|
+
HP_TET_1F_2E_1V, // e4,e5 (E23,E24), V2 NEW NEW WIP
|
|
180
|
+
HP_TET_1F_2E_3V, // e4,e5 (E23,E24), V2,V3,V4 NEW NEW done
|
|
181
|
+
|
|
182
|
+
HP_TET_2F_0E_0V = 600, // 2 singular faces
|
|
183
|
+
HP_TET_2F_0E_1V, // 2 singular faces f234, f134, sing point V4 NEW
|
|
184
|
+
HP_TET_2F_1E_0VA, // 2 singular faces, sing edge e4 NEW done
|
|
185
|
+
HP_TET_2F_1E_0VB, // 2 singular faces, sing edge e5 NEW done
|
|
186
|
+
|
|
187
|
+
HP_TET_2F_1E_3VA, // 2 singular faces f234,f134, e23, v2,v3,v4 NEW3
|
|
188
|
+
HP_TET_2F_1E_4VA, // 2 singular faces f234,f134, e23, v2,v3,v4 NEW3
|
|
189
|
+
|
|
190
|
+
HP_TET_3F_0E_0V = 700, // 3 singular faces, no additional points or edges NEW done
|
|
191
|
+
|
|
192
|
+
HP_TET_ALFELD,
|
|
193
|
+
|
|
194
|
+
HP_PRISM = 1000,
|
|
195
|
+
HP_PRISM_SINGEDGE,
|
|
196
|
+
HP_PRISM_SINGEDGE_V12,
|
|
197
|
+
HP_PRISM_SINGEDGE_H1,
|
|
198
|
+
HP_PRISM_SINGEDGE_H12,
|
|
199
|
+
|
|
200
|
+
HP_PRISM_1FA_0E_0V, // 1 singular trig face
|
|
201
|
+
HP_PRISM_2FA_0E_0V, // 2 singular trig faces
|
|
202
|
+
HP_PRISM_1FB_0E_0V, // 1 singular quad face 1-2-4-5
|
|
203
|
+
|
|
204
|
+
HP_PRISM_1FB_1EA_0V, // 1 singular quad face, edge is 1-4
|
|
205
|
+
HP_PRISM_1FA_1E_0V,
|
|
206
|
+
HP_PRISM_2FA_1E_0V,
|
|
207
|
+
HP_PRISM_1FA_1FB_0E_0V,
|
|
208
|
+
HP_PRISM_2FA_1FB_0E_0V,
|
|
209
|
+
HP_PRISM_1FA_1FB_1EA_0V,
|
|
210
|
+
HP_PRISM_1FA_1FB_1EB_0V,
|
|
211
|
+
HP_PRISM_2FA_1FB_1EA_0V,
|
|
212
|
+
HP_PRISM_1FB_1EC_0V,
|
|
213
|
+
HP_PRISM_1FA_1FB_1EC_0V,
|
|
214
|
+
HP_PRISM_2FA_1FB_1EC_0V,
|
|
215
|
+
HP_PRISM_1FB_2EA_0V,
|
|
216
|
+
HP_PRISM_1FA_1FB_2EA_0V,
|
|
217
|
+
HP_PRISM_2FA_1FB_2EA_0V,
|
|
218
|
+
HP_PRISM_1FB_2EB_0V,
|
|
219
|
+
HP_PRISM_1FA_1FB_2EB_0V,
|
|
220
|
+
HP_PRISM_1FA_1FB_2EC_0V,
|
|
221
|
+
HP_PRISM_2FA_1FB_2EB_0V,
|
|
222
|
+
HP_PRISM_1FB_3E_0V,
|
|
223
|
+
HP_PRISM_1FA_1FB_3E_0V,
|
|
224
|
+
HP_PRISM_2FA_1FB_3E_0V,
|
|
225
|
+
HP_PRISM_2FB_0E_0V,
|
|
226
|
+
HP_PRISM_1FA_2FB_0E_0V,
|
|
227
|
+
HP_PRISM_2FA_2FB_0E_0V,
|
|
228
|
+
HP_PRISM_2FB_1EC_0V,
|
|
229
|
+
HP_PRISM_1FA_2FB_1EC_0V,
|
|
230
|
+
HP_PRISM_1FA_2FB_1EB_0V,
|
|
231
|
+
HP_PRISM_2FA_2FB_1EC_0V,
|
|
232
|
+
HP_PRISM_2FB_3E_0V,
|
|
233
|
+
HP_PRISM_1FA_2FB_3E_0V,
|
|
234
|
+
HP_PRISM_2FA_2FB_3E_0V,
|
|
235
|
+
HP_PRISM_1FA_2E_0V,
|
|
236
|
+
HP_PRISM_2FA_2E_0V,
|
|
237
|
+
HP_PRISM_3E_0V,
|
|
238
|
+
HP_PRISM_1FA_3E_0V,
|
|
239
|
+
HP_PRISM_2FA_3E_0V,
|
|
240
|
+
HP_PRISM_3FB_0V,
|
|
241
|
+
HP_PRISM_1FA_3FB_0V,
|
|
242
|
+
HP_PRISM_2FA_3FB_0V,
|
|
243
|
+
HP_PRISM_3E_4EH,
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
/* HP_PRISM_1FB_1EA_0V, // 1 singular quad face, edge is 1-4
|
|
248
|
+
HP_PRISM_1FB_1EB_0V, // 1 singular quad face, edge is 2-5
|
|
249
|
+
HP_PRISM_2F_0E_0V, // 2 singular quad faces
|
|
250
|
+
*/
|
|
251
|
+
|
|
252
|
+
HP_PYRAMID = 2000,
|
|
253
|
+
HP_PYRAMID_0E_1V,
|
|
254
|
+
HP_PYRAMID_EDGES,
|
|
255
|
+
HP_PYRAMID_1FB_0E_0V, // 1 trig face F125
|
|
256
|
+
HP_PYRAMID_1FB_0E_1VA, // 1 trig face, top vertex
|
|
257
|
+
|
|
258
|
+
HP_HEX = 3000,
|
|
259
|
+
HP_HEX_0E_1V,
|
|
260
|
+
HP_HEX_1E_1V,
|
|
261
|
+
HP_HEX_1E_0V,
|
|
262
|
+
HP_HEX_3E_0V,
|
|
263
|
+
HP_HEX_1F_0E_0V,
|
|
264
|
+
HP_HEX_1FA_1FB_0E_0V,
|
|
265
|
+
|
|
266
|
+
HP_HEX7 = 3100,
|
|
267
|
+
HP_HEX7_1FA, // singular quad face 1,2,3,4
|
|
268
|
+
HP_HEX7_1FB // singular trig face 5,6,7
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
struct HPRef_Struct {
|
|
274
|
+
HPREF_ELEMENT_TYPE geom;
|
|
275
|
+
int (*splitedges)[3];
|
|
276
|
+
int (*splitfaces)[4];
|
|
277
|
+
int (*splitelements)[5];
|
|
278
|
+
HPREF_ELEMENT_TYPE * neweltypes;
|
|
279
|
+
int (*newels)[8];
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
class HPRefElement
|
|
286
|
+
{
|
|
287
|
+
private:
|
|
288
|
+
void Reset(void);
|
|
289
|
+
|
|
290
|
+
public:
|
|
291
|
+
HPRefElement ();
|
|
292
|
+
HPRefElement(Element & el);
|
|
293
|
+
HPRefElement(Element2d & el);
|
|
294
|
+
HPRefElement(Segment & el);
|
|
295
|
+
HPRefElement(HPRefElement & el);
|
|
296
|
+
|
|
297
|
+
void SetType( HPREF_ELEMENT_TYPE t);
|
|
298
|
+
// HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t);
|
|
299
|
+
|
|
300
|
+
/* HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t)
|
|
301
|
+
{
|
|
302
|
+
type = t;
|
|
303
|
+
HPRef_Struct * hprs = Get_HPRef_Struct(t);
|
|
304
|
+
for (int i=0; i<np ; i++)
|
|
305
|
+
{
|
|
306
|
+
pnums[i] = el[i];
|
|
307
|
+
for(int l=0; l<np; l++) param[i][l] = el.param[i][l];
|
|
308
|
+
}
|
|
309
|
+
switch(hprs->geom)
|
|
310
|
+
{
|
|
311
|
+
case HP_SEGM: np=2; sing_edge_left=0; sing_edge_right=0; break;
|
|
312
|
+
case HP_QUAD: np=4; break;
|
|
313
|
+
case HP_TRIG: np=3; break;
|
|
314
|
+
case HP_HEX: np=8; break;
|
|
315
|
+
case HP_PRISM: np=6; break;
|
|
316
|
+
case HP_TET: np=4; break;
|
|
317
|
+
case HP_PYRAMID: np=5; break;
|
|
318
|
+
}
|
|
319
|
+
index = el.index;
|
|
320
|
+
levelx = el.levelx;
|
|
321
|
+
levely = el.levely;
|
|
322
|
+
levelz = el.levelz;
|
|
323
|
+
type = el.type;
|
|
324
|
+
coarse_elnr = el.coarse_elnr;
|
|
325
|
+
singedge_left = el.singedge_left;
|
|
326
|
+
singedge_right = el.singedge_left;
|
|
327
|
+
} */
|
|
328
|
+
|
|
329
|
+
HPREF_ELEMENT_TYPE type;
|
|
330
|
+
PointIndex pnums[8];
|
|
331
|
+
double param[8][3];
|
|
332
|
+
int index;
|
|
333
|
+
int si;
|
|
334
|
+
int levelx;
|
|
335
|
+
int levely;
|
|
336
|
+
int levelz;
|
|
337
|
+
int np;
|
|
338
|
+
int coarse_elnr; // issue (JS): same class is for ElementIndex, SurfaceElementIndex, SegmentIndex
|
|
339
|
+
int domin, domout; // he: needed for segment!! in 3d there should be surf1, surf2!!
|
|
340
|
+
// int coarse_hpelnr;
|
|
341
|
+
PointIndex & operator[](int i) { return(pnums[i]);}
|
|
342
|
+
PointIndex & PNumMod(int i) { return pnums[(i-1) % np]; };
|
|
343
|
+
PointIndex & PNum(int i) {return pnums[(i-1)]; };
|
|
344
|
+
int GetIndex () const { return index; };
|
|
345
|
+
double singedge_left, singedge_right;
|
|
346
|
+
auto PNums() const { return FlatArray<const PointIndex>(np, &pnums[0]); }
|
|
347
|
+
|
|
348
|
+
// EdgePointGeomInfo epgeominfo[2];
|
|
349
|
+
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
enum SplittingType { SPLIT_HP, SPLIT_ALFELD, SPLIT_POWELL};
|
|
354
|
+
|
|
355
|
+
DLL_HEADER extern void HPRefinement (Mesh & mesh, Refinement * ref, SplittingType split, int levels,
|
|
356
|
+
double fac1=0.125, bool setorders=true, bool ref_level = false);
|
|
357
|
+
|
|
358
|
+
inline void HPRefinement (Mesh & mesh, Refinement * ref, int levels,
|
|
359
|
+
double fac1=0.125, bool setorders=true, bool ref_level = false)
|
|
360
|
+
{
|
|
361
|
+
HPRefinement (mesh, ref, SPLIT_HP, levels, fac1, setorders, ref_level);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
} // namespace netgen
|
|
365
|
+
#endif
|
|
366
|
+
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#ifndef NETGEN_IMPROVE2_HPP
|
|
2
|
+
#define NETGEN_IMPROVE2_HPP
|
|
3
|
+
|
|
4
|
+
#include "meshtype.hpp"
|
|
5
|
+
|
|
6
|
+
namespace netgen
|
|
7
|
+
{
|
|
8
|
+
|
|
9
|
+
inline void AppendEdges( const Element2d & elem, PointIndex pi, Array<std::tuple<PointIndex,PointIndex>> & edges )
|
|
10
|
+
{
|
|
11
|
+
for (int j = 0; j < 3; j++)
|
|
12
|
+
{
|
|
13
|
+
PointIndex pi0 = elem[j];
|
|
14
|
+
PointIndex pi1 = elem[(j+1)%3];
|
|
15
|
+
if (pi1 < pi0) Swap(pi0, pi1);
|
|
16
|
+
if(pi0==pi)
|
|
17
|
+
edges.Append(std::make_tuple(pi0, pi1));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
inline void AppendEdges( const Element & elem, PointIndex pi, Array<std::tuple<PointIndex,PointIndex>> & edges )
|
|
22
|
+
{
|
|
23
|
+
static constexpr int tetedges[6][2] =
|
|
24
|
+
{ { 0, 1 }, { 0, 2 }, { 0, 3 },
|
|
25
|
+
{ 1, 2 }, { 1, 3 }, { 2, 3 } };
|
|
26
|
+
|
|
27
|
+
if(elem.Flags().fixed)
|
|
28
|
+
return;
|
|
29
|
+
for (int j = 0; j < 6; j++)
|
|
30
|
+
{
|
|
31
|
+
PointIndex pi0 = elem[tetedges[j][0]];
|
|
32
|
+
PointIndex pi1 = elem[tetedges[j][1]];
|
|
33
|
+
if (pi1 < pi0) Swap(pi0, pi1);
|
|
34
|
+
if(pi0==pi)
|
|
35
|
+
edges.Append(std::make_tuple(pi0, pi1));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
template<typename T_PI2SEI>
|
|
40
|
+
void BuildEdgeList( const Mesh & mesh, const T_PI2SEI & elementsonnode, Array<std::tuple<PointIndex, PointIndex>> & edges )
|
|
41
|
+
{
|
|
42
|
+
// static_assert(is_same_v<TINDEX, ElementIndex>||is_same_v<TINDEX,SurfaceElementIndex>, "Invalid type for TINDEX");
|
|
43
|
+
static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges);
|
|
44
|
+
|
|
45
|
+
int ntasks = 4*ngcore::TaskManager::GetMaxThreads();
|
|
46
|
+
Array<Array<std::tuple<PointIndex,PointIndex>>> task_edges(ntasks);
|
|
47
|
+
|
|
48
|
+
ParallelFor(IntRange(ntasks), [&] (int ti)
|
|
49
|
+
{
|
|
50
|
+
auto myrange = mesh.Points().Range().Split(ti, ntasks);
|
|
51
|
+
ArrayMem<std::tuple<PointIndex,PointIndex>, 100> local_edges;
|
|
52
|
+
for (auto pi : myrange)
|
|
53
|
+
{
|
|
54
|
+
local_edges.SetSize(0);
|
|
55
|
+
|
|
56
|
+
for(auto ei : elementsonnode[pi])
|
|
57
|
+
{
|
|
58
|
+
const auto & elem = mesh[ei];
|
|
59
|
+
if (elem.IsDeleted()) continue;
|
|
60
|
+
|
|
61
|
+
AppendEdges(elem, pi, local_edges);
|
|
62
|
+
}
|
|
63
|
+
QuickSort(local_edges);
|
|
64
|
+
|
|
65
|
+
auto edge_prev = std::make_tuple<PointIndex, PointIndex>(PointIndex::INVALID, PointIndex::INVALID);
|
|
66
|
+
|
|
67
|
+
for(auto edge : local_edges)
|
|
68
|
+
if(edge != edge_prev)
|
|
69
|
+
{
|
|
70
|
+
task_edges[ti].Append(edge);
|
|
71
|
+
edge_prev = edge;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}, ntasks);
|
|
75
|
+
|
|
76
|
+
int num_edges = 0;
|
|
77
|
+
for (auto & edg : task_edges)
|
|
78
|
+
num_edges += edg.Size();
|
|
79
|
+
edges.SetAllocSize(num_edges);
|
|
80
|
+
for (auto & edg : task_edges)
|
|
81
|
+
edges.Append(edg);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class Neighbour
|
|
86
|
+
{
|
|
87
|
+
int nr[3];
|
|
88
|
+
int orient[3];
|
|
89
|
+
|
|
90
|
+
public:
|
|
91
|
+
Neighbour () { ; }
|
|
92
|
+
|
|
93
|
+
void SetNr (int side, int anr) { nr[side] = anr; }
|
|
94
|
+
int GetNr (int side) { return nr[side]; }
|
|
95
|
+
|
|
96
|
+
void SetOrientation (int side, int aorient) { orient[side] = aorient; }
|
|
97
|
+
int GetOrientation (int side) { return orient[side]; }
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
///
|
|
101
|
+
class MeshOptimize2d
|
|
102
|
+
{
|
|
103
|
+
int faceindex = 0;
|
|
104
|
+
int improveedges = 0;
|
|
105
|
+
double metricweight = 0.;
|
|
106
|
+
int writestatus = 1;
|
|
107
|
+
Mesh& mesh;
|
|
108
|
+
const NetgenGeometry& geo;
|
|
109
|
+
public:
|
|
110
|
+
///
|
|
111
|
+
MeshOptimize2d(Mesh& amesh) : mesh(amesh), geo(*mesh.GetGeometry())
|
|
112
|
+
{}
|
|
113
|
+
virtual ~MeshOptimize2d() { ; }
|
|
114
|
+
///
|
|
115
|
+
DLL_HEADER void ImproveMesh (const MeshingParameters & mp);
|
|
116
|
+
DLL_HEADER void ImproveMeshJacobian (const MeshingParameters & mp);
|
|
117
|
+
DLL_HEADER void ImproveVolumeMesh ();
|
|
118
|
+
DLL_HEADER void ProjectBoundaryPoints(NgArray<int> & surfaceindex,
|
|
119
|
+
const NgArray<Point<3>* > & from, NgArray<Point<3>* > & dest);
|
|
120
|
+
|
|
121
|
+
DLL_HEADER bool EdgeSwapping (const int usemetric, Array<Neighbour> &neighbors, Array<bool> &swapped,
|
|
122
|
+
const SurfaceElementIndex t1, const int edge, const int t, Array<int,PointIndex> &pdef, const bool check_only=false);
|
|
123
|
+
DLL_HEADER void EdgeSwapping (int usemetric);
|
|
124
|
+
DLL_HEADER void CombineImprove ();
|
|
125
|
+
DLL_HEADER void SplitImprove ();
|
|
126
|
+
|
|
127
|
+
DLL_HEADER void GenericImprove ();
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
void SetFaceIndex (int fi) { faceindex = fi; }
|
|
131
|
+
void SetImproveEdges (int ie) { improveedges = ie; }
|
|
132
|
+
void SetMetricWeight (double mw) { metricweight = mw; }
|
|
133
|
+
void SetWriteStatus (int ws) { writestatus = ws; }
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
/// liefert zu einem 3d-Punkt die geominfo (Dreieck) und liefert 1, wenn erfolgreich,
|
|
137
|
+
/// 0, wenn nicht (Punkt ausserhalb von chart)
|
|
138
|
+
///
|
|
139
|
+
|
|
140
|
+
void CheckMeshApproximation (Mesh & mesh);
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
///
|
|
144
|
+
friend class Opti2SurfaceMinFunction;
|
|
145
|
+
///
|
|
146
|
+
friend class Opti2EdgeMinFunction;
|
|
147
|
+
///
|
|
148
|
+
friend double Opti2FunctionValueGrad (const Vector & x, Vector & grad);
|
|
149
|
+
///
|
|
150
|
+
friend double Opti2EdgeFunctionValueGrad (const Vector & x, Vector & grad);
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
extern void CalcTriangleBadness (double x2, double x3, double y3,
|
|
158
|
+
double metricweight,
|
|
159
|
+
double h, double & badness,
|
|
160
|
+
double & g1x, double & g1y);
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
extern double CalcTriangleBadness (const Point<3> & p1,
|
|
166
|
+
const Point<3> & p2,
|
|
167
|
+
const Point<3> & p3,
|
|
168
|
+
double metricweight,
|
|
169
|
+
double h);
|
|
170
|
+
|
|
171
|
+
extern double CalcTriangleBadness (const Point<3> & p1,
|
|
172
|
+
const Point<3> & p2,
|
|
173
|
+
const Point<3> & p3,
|
|
174
|
+
const Vec<3> & n,
|
|
175
|
+
double metricweight,
|
|
176
|
+
double h);
|
|
177
|
+
} // namespace netgen
|
|
178
|
+
#endif // NETGEN_IMPROVE2_HPP
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
#ifndef FILE_IMPROVE3
|
|
2
|
+
#define FILE_IMPROVE3
|
|
3
|
+
|
|
4
|
+
namespace netgen
|
|
5
|
+
{
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
///
|
|
9
|
+
class MeshOptimize3d
|
|
10
|
+
{
|
|
11
|
+
Mesh & mesh;
|
|
12
|
+
const MeshingParameters & mp;
|
|
13
|
+
OPTIMIZEGOAL goal = OPT_QUALITY;
|
|
14
|
+
double min_badness = 0;
|
|
15
|
+
|
|
16
|
+
bool HasBadElement(FlatArray<ElementIndex> els);
|
|
17
|
+
bool HasIllegalElement(FlatArray<ElementIndex> els);
|
|
18
|
+
bool NeedsOptimization(FlatArray<ElementIndex> els);
|
|
19
|
+
|
|
20
|
+
public:
|
|
21
|
+
|
|
22
|
+
MeshOptimize3d (Mesh & m, const MeshingParameters & amp, OPTIMIZEGOAL agoal = OPT_QUALITY) :
|
|
23
|
+
mesh(m), mp(amp), goal(agoal) { ; }
|
|
24
|
+
|
|
25
|
+
void SetGoal(OPTIMIZEGOAL agoal) { goal = agoal; }
|
|
26
|
+
void SetMinBadness(double badness) { min_badness = badness; }
|
|
27
|
+
|
|
28
|
+
tuple<double, double, int> UpdateBadness();
|
|
29
|
+
|
|
30
|
+
double CombineImproveEdge (
|
|
31
|
+
Table<ElementIndex, PointIndex> & elements_of_point,
|
|
32
|
+
PointIndex pi0, PointIndex pi1,
|
|
33
|
+
FlatArray<bool, PointIndex> is_point_removed, bool check_only=false);
|
|
34
|
+
|
|
35
|
+
void CombineImprove ();
|
|
36
|
+
|
|
37
|
+
void SplitImprove ();
|
|
38
|
+
double SplitImproveEdge (Table<ElementIndex,PointIndex> & elementsonnode, NgArray<PointIndices<3>> &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only=false);
|
|
39
|
+
|
|
40
|
+
void SplitImprove2 ();
|
|
41
|
+
double SplitImprove2Element (ElementIndex ei, const Table<ElementIndex, PointIndex> & elements_of_point, bool check_only);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
double SwapImproveEdge (const TBitArray<ElementIndex> * working_elements, Table<ElementIndex,PointIndex> & elementsonnode, INDEX_3_HASHTABLE<int> & faces, PointIndex pi1, PointIndex pi2, bool check_only=false);
|
|
45
|
+
void SwapImprove (const TBitArray<ElementIndex> * working_elements = NULL);
|
|
46
|
+
void SwapImproveSurface (const TBitArray<ElementIndex> * working_elements = NULL,
|
|
47
|
+
const NgArray< idmap_type* > * idmaps = NULL);
|
|
48
|
+
void SwapImprove2 (bool conform_segments = false);
|
|
49
|
+
double SwapImprove2 (ElementIndex eli1, int face, Table<ElementIndex, PointIndex> & elementsonnode, DynamicTable<SurfaceElementIndex, PointIndex> & belementsonnode, bool conform_segments, bool check_only=false );
|
|
50
|
+
|
|
51
|
+
void ImproveMesh() { mesh.ImproveMesh(mp, goal); }
|
|
52
|
+
|
|
53
|
+
double
|
|
54
|
+
CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h)
|
|
55
|
+
{
|
|
56
|
+
if (elem.GetType() == TET)
|
|
57
|
+
return CalcTetBadness (points[elem[0]], points[elem[1]],
|
|
58
|
+
points[elem[2]], points[elem[3]], h, mp);
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
double GetLegalPenalty()
|
|
64
|
+
{
|
|
65
|
+
return goal == OPT_LEGAL ? 1e15 : 1e6;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
inline double
|
|
72
|
+
CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h, const MeshingParameters & mp)
|
|
73
|
+
{
|
|
74
|
+
if (elem.GetType() == TET)
|
|
75
|
+
return CalcTetBadness (points[elem[0]], points[elem[1]],
|
|
76
|
+
points[elem[2]], points[elem[3]], h, mp);
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
extern int WrongOrientation (const Mesh::T_POINTS & points, const Element & el);
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/* Functional depending of inner point inside triangular surface */
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class MinFunctionSum : public MinFunction
|
|
89
|
+
{
|
|
90
|
+
protected:
|
|
91
|
+
NgArray<MinFunction*> functions;
|
|
92
|
+
|
|
93
|
+
public:
|
|
94
|
+
|
|
95
|
+
virtual double Func (const Vector & x) const;
|
|
96
|
+
virtual void Grad (const Vector & x, Vector & g) const;
|
|
97
|
+
virtual double FuncGrad (const Vector & x, Vector & g) const;
|
|
98
|
+
virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
|
|
99
|
+
virtual double GradStopping (const Vector & x) const;
|
|
100
|
+
|
|
101
|
+
void AddFunction(MinFunction & fun);
|
|
102
|
+
|
|
103
|
+
const MinFunction & Function(int i) const;
|
|
104
|
+
MinFunction & Function(int i);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class PointFunction1 : public MinFunction
|
|
109
|
+
{
|
|
110
|
+
Mesh::T_POINTS & points;
|
|
111
|
+
const NgArray<PointIndices<3>> & faces;
|
|
112
|
+
const MeshingParameters & mp;
|
|
113
|
+
double h;
|
|
114
|
+
public:
|
|
115
|
+
PointFunction1 (Mesh::T_POINTS & apoints,
|
|
116
|
+
const NgArray<PointIndices<3>> & afaces,
|
|
117
|
+
const MeshingParameters & amp,
|
|
118
|
+
double ah);
|
|
119
|
+
|
|
120
|
+
virtual double Func (const Vector & x) const;
|
|
121
|
+
virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
|
|
122
|
+
virtual double FuncGrad (const Vector & x, Vector & g) const;
|
|
123
|
+
virtual double GradStopping (const Vector & x) const;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
class JacobianPointFunction : public MinFunction
|
|
127
|
+
{
|
|
128
|
+
public:
|
|
129
|
+
Mesh::T_POINTS & points;
|
|
130
|
+
const Array<Element, ElementIndex> & elements;
|
|
131
|
+
TABLE<INDEX> elementsonpoint;
|
|
132
|
+
PointIndex actpind;
|
|
133
|
+
|
|
134
|
+
bool onplane;
|
|
135
|
+
Vec<3> nv;
|
|
136
|
+
|
|
137
|
+
public:
|
|
138
|
+
JacobianPointFunction (Mesh::T_POINTS & apoints,
|
|
139
|
+
const Array<Element, ElementIndex> & aelements);
|
|
140
|
+
virtual ~JacobianPointFunction () { ; }
|
|
141
|
+
virtual void SetPointIndex (PointIndex aactpind);
|
|
142
|
+
virtual double Func (const Vector & x) const;
|
|
143
|
+
virtual double FuncGrad (const Vector & x, Vector & g) const;
|
|
144
|
+
virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
|
|
145
|
+
|
|
146
|
+
inline void SetNV(const Vec<3> & anv) {nv = anv; onplane = true;}
|
|
147
|
+
inline void UnSetNV(void) {onplane = false;}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
} // namespace netgen
|
|
151
|
+
#endif
|