ngsolve 6.2.2506.post216.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.
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvcc +22 -0
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvlink +17 -0
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngscxx +15 -0
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsld +11 -0
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post216.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basematrix.hpp +963 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basevector.hpp +1268 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbequations.hpp +2807 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bessel.hpp +1064 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bilinearform.hpp +966 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bla.hpp +29 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bspline.hpp +116 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cg.hpp +368 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cholesky.hpp +720 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/clapack.h +7254 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/code_generation.hpp +296 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/comp.hpp +79 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compatibility.hpp +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/complex_wrapper.hpp +101 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/contact.hpp +239 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_core.hpp +216 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_linalg.hpp +185 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngbla.hpp +317 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngstd.hpp +414 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diagonalmatrix.hpp +160 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop.hpp +1286 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/dump.hpp +949 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ectypes.hpp +121 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigen.hpp +60 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementbyelement.hpp +201 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/expr.hpp +1693 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfe.hpp +175 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facethofe.hpp +111 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fem.hpp +87 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fespace.hpp +1454 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalspace.hpp +115 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1amg.hpp +124 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hidden.hpp +74 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/householder.hpp +181 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integrator.hpp +2012 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/interpolate.hpp +49 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrule.hpp +2542 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/irspace.hpp +49 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/jacobi.hpp +153 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/kernels.hpp +724 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/la.hpp +38 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linalg_kernels.hpp +70 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linearform.hpp +266 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/matrix.hpp +2145 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/memusage.hpp +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mgpre.hpp +204 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mptools.hpp +2281 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multigrid.hpp +42 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multivector.hpp +447 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngstd.hpp +72 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/order.hpp +251 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/periodic.hpp +129 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pml.hpp +275 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/postproc.hpp +142 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/precomp.hpp +60 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/prolongation.hpp +380 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_comp.hpp +107 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_fem.hpp +89 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/smoother.hpp +253 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/solve.hpp +89 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsecholesky.hpp +317 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsefactorization_interface.hpp +159 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix.hpp +1052 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1055 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/specialelement.hpp +125 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/statushandler.hpp +33 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/stringops.hpp +12 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensor.hpp +522 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpfes.hpp +133 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/triangular.hpp +465 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vector.hpp +1452 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vvector.hpp +208 -0
- ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/webgui.hpp +92 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +180 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +14 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1182 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/__init__.py +7 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/cudss.py +112 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
- ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +671 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post216.dev0.dist-info/METADATA +14 -0
- ngsolve-6.2.2506.post216.dev0.dist-info/RECORD +306 -0
- ngsolve-6.2.2506.post216.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post216.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post216.dev0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import ngsolve as ngs
|
|
2
|
+
import netgen.meshing as ngm
|
|
3
|
+
import petsc4py.PETSc as psc
|
|
4
|
+
from mpi4py import MPI
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
#PETSc Matrix
|
|
8
|
+
|
|
9
|
+
def CreatePETScMatrix (ngs_mat, freedofs=None):
|
|
10
|
+
locmat = ngs_mat.local_mat
|
|
11
|
+
eh, ew = locmat.entrysizes
|
|
12
|
+
if eh != ew: raise Exception ("only square entries are allowed")
|
|
13
|
+
|
|
14
|
+
val,col,ind = locmat.CSR()
|
|
15
|
+
ind = np.array(ind).astype(psc.IntType)
|
|
16
|
+
col = np.array(col).astype(psc.IntType)
|
|
17
|
+
apsc_loc = psc.Mat().createBAIJ(size=(eh*locmat.height, eh*locmat.width), bsize=eh, csr=(ind,col,val), comm=MPI.COMM_SELF)
|
|
18
|
+
|
|
19
|
+
if freedofs is not None:
|
|
20
|
+
locfree = np.flatnonzero(freedofs).astype(psc.IntType)
|
|
21
|
+
isfree_loc = psc.IS().createBlock(indices=locfree, bsize=eh)
|
|
22
|
+
apsc_loc = apsc_loc.createSubMatrices(isfree_loc)[0]
|
|
23
|
+
|
|
24
|
+
comm = MPI.COMM_WORLD
|
|
25
|
+
if comm.Get_size() > 1:
|
|
26
|
+
pardofs = ngs_mat.row_pardofs
|
|
27
|
+
comm = pardofs.comm.mpi4py
|
|
28
|
+
globnums, nglob = pardofs.EnumerateGlobally(freedofs)
|
|
29
|
+
if freedofs is not None:
|
|
30
|
+
globnums = np.array(globnums, dtype=psc.IntType)[freedofs]
|
|
31
|
+
lgmap = psc.LGMap().create(indices=globnums, bsize=eh, comm=comm)
|
|
32
|
+
mat = psc.Mat().create(comm=comm)
|
|
33
|
+
mat.setSizes(size=nglob*eh, bsize=eh)
|
|
34
|
+
mat.setType(psc.Mat.Type.IS)
|
|
35
|
+
mat.setLGMap(lgmap)
|
|
36
|
+
mat.setISLocalMat(apsc_loc)
|
|
37
|
+
mat.assemble()
|
|
38
|
+
mat.convert("mpiaij")
|
|
39
|
+
return mat
|
|
40
|
+
else:
|
|
41
|
+
if freedofs is not None:
|
|
42
|
+
mat = apsc_loc
|
|
43
|
+
mat.assemble()
|
|
44
|
+
mat.convert("seqaij")
|
|
45
|
+
return mat
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
#PETSc Vector
|
|
49
|
+
|
|
50
|
+
class VectorMapping:
|
|
51
|
+
def __init__ (self, pardofs, freedofs=None):
|
|
52
|
+
self.pardofs = pardofs
|
|
53
|
+
self.freedofs = freedofs
|
|
54
|
+
comm = pardofs.comm.mpi4py
|
|
55
|
+
globnums, self.nglob = pardofs.EnumerateGlobally(freedofs)
|
|
56
|
+
self.es = self.pardofs.entrysize
|
|
57
|
+
if self.freedofs is not None:
|
|
58
|
+
globnums = np.array(globnums, dtype=psc.IntType)[freedofs]
|
|
59
|
+
self.locfree = np.flatnonzero(freedofs).astype(psc.IntType)
|
|
60
|
+
self.isetlocfree = psc.IS().createBlock (indices=self.locfree, bsize=self.es, comm=comm)
|
|
61
|
+
else:
|
|
62
|
+
self.isetlocfree = None
|
|
63
|
+
self.iset = psc.IS().createBlock (indices=globnums, bsize=self.es, comm=comm)
|
|
64
|
+
|
|
65
|
+
def CreatePETScVector (self):
|
|
66
|
+
return psc.Vec().createMPI(self.pardofs.ndofglobal, comm=MPI.COMM_WORLD)
|
|
67
|
+
|
|
68
|
+
def CreateNGSolveVector (self):
|
|
69
|
+
return ngs.la.CreateParallelVector(self.pardofs)
|
|
70
|
+
|
|
71
|
+
def N2P (self, ngs_vector, psc_vector=None):
|
|
72
|
+
if psc_vector is None:
|
|
73
|
+
psc_vector = psc.Vec().createMPI(self.nglob*self.es, bsize=self.es, comm=MPI.COMM_WORLD)
|
|
74
|
+
ngs_vector.Distribute()
|
|
75
|
+
locvec = psc.Vec().createWithArray(ngs_vector.FV().NumPy(), comm=MPI.COMM_SELF)
|
|
76
|
+
if "n2p_scat" not in self.__dict__:
|
|
77
|
+
self.n2p_scat = psc.Scatter().create(locvec, self.isetlocfree, psc_vector, self.iset)
|
|
78
|
+
psc_vector.set(0)
|
|
79
|
+
self.n2p_scat.scatter (locvec, psc_vector, addv=psc.InsertMode.ADD) # 1 max, 2 sum+keep
|
|
80
|
+
return psc_vector
|
|
81
|
+
|
|
82
|
+
def P2N (self, psc_vector, ngs_vector=None):
|
|
83
|
+
if ngs_vector is None:
|
|
84
|
+
ngs_vector = ngs.la.CreateParallelVector(self.pardofs)
|
|
85
|
+
|
|
86
|
+
ngs_vector.SetParallelStatus(ngs.la.PARALLEL_STATUS.CUMULATED)
|
|
87
|
+
ngs_vector[:] = 0.0
|
|
88
|
+
locvec = psc.Vec().createWithArray(ngs_vector.FV().NumPy(), comm=MPI.COMM_SELF)
|
|
89
|
+
if "p2n_scat" not in self.__dict__:
|
|
90
|
+
self.p2n_scat = psc.Scatter().create(psc_vector, self.iset, locvec, self.isetlocfree)
|
|
91
|
+
self.p2n_scat.scatter (psc_vector, locvec, addv=psc.InsertMode.INSERT)
|
|
92
|
+
return ngs_vector
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
#PETSc Preconditioner
|
|
96
|
+
|
|
97
|
+
class PETScPreconditioner(ngs.BaseMatrix):
|
|
98
|
+
def __init__(self,mat,freedofs=None, solverParameters=None):
|
|
99
|
+
ngs.BaseMatrix.__init__(self)
|
|
100
|
+
self.ngsmat = mat
|
|
101
|
+
self.vecmap = VectorMapping (mat.row_pardofs, freedofs)
|
|
102
|
+
self.pscmat = CreatePETScMatrix (mat, freedofs)
|
|
103
|
+
self.precond = psc.PC().create(comm=self.pscmat.getComm())
|
|
104
|
+
|
|
105
|
+
self.precond.setOperators(self.pscmat)
|
|
106
|
+
options_object = psc.Options()
|
|
107
|
+
if solverParameters is not None:
|
|
108
|
+
for optName, optValue in solverParameters.items():
|
|
109
|
+
options_object[optName] = optValue
|
|
110
|
+
|
|
111
|
+
self.precond.setOptionsPrefix(None) # optionsPrefix)
|
|
112
|
+
self.precond.setFromOptions()
|
|
113
|
+
self.precond.setUp()
|
|
114
|
+
self.pscx, self.pscy = self.pscmat.createVecs()
|
|
115
|
+
|
|
116
|
+
def Shape(self):
|
|
117
|
+
return self.ngsmat.shape
|
|
118
|
+
def CreateVector(self,col):
|
|
119
|
+
return self.ngsmat.CreateVector(not col)
|
|
120
|
+
|
|
121
|
+
def Mult(self,x,y):
|
|
122
|
+
self.vecmap.N2P(x,self.pscx)
|
|
123
|
+
self.precond.apply(self.pscx, self.pscy)
|
|
124
|
+
self.vecmap.P2N(self.pscy, y)
|
|
125
|
+
|
|
126
|
+
def MultTrans(self,x,y):
|
|
127
|
+
self.vecmap.N2P(x,self.pscx)
|
|
128
|
+
self.precond.applyTranspose(self.pscx, self.pscy)
|
|
129
|
+
self.vecmap.P2N(self.pscy, y)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
from ngsolve.comp import RegisterPreconditioner
|
|
133
|
+
|
|
134
|
+
# for backward compatibility
|
|
135
|
+
def MakeGAMGPreconditioner(mat, freedofs, flags):
|
|
136
|
+
flags.Set("pc_type", "gamg")
|
|
137
|
+
return PETScPreconditioner(mat, freedofs, flags)
|
|
138
|
+
|
|
139
|
+
RegisterPreconditioner ("gamg", MakeGAMGPreconditioner)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def MakePETScPreconditioner(mat, freedofs, flags):
|
|
143
|
+
return PETScPreconditioner(mat, freedofs, flags)
|
|
144
|
+
|
|
145
|
+
RegisterPreconditioner ("petsc", MakePETScPreconditioner, docflags = { \
|
|
146
|
+
"pc_type" : "type of PETSc preconditioner",
|
|
147
|
+
"levels" : "AMG levels" })
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
#PETSc DMPlex
|
|
151
|
+
|
|
152
|
+
FACE_SETS_LABEL = "Face Sets"
|
|
153
|
+
CELL_SETS_LABEL = "Cell Sets"
|
|
154
|
+
EDGE_SETS_LABEL = "Edge Sets"
|
|
155
|
+
|
|
156
|
+
class DMPlexMapping:
|
|
157
|
+
def __init__(self,mesh=None,name="Default"):
|
|
158
|
+
self.name = name
|
|
159
|
+
print(type(mesh))
|
|
160
|
+
if type(mesh) is ngs.comp.Mesh or type(mesh) is ngm.Mesh:
|
|
161
|
+
self.createPETScDMPlex(mesh)
|
|
162
|
+
elif type(mesh) is psc.DMPlex:
|
|
163
|
+
self.createNGSMesh(mesh)
|
|
164
|
+
else:
|
|
165
|
+
raise ValueError("Mesh format not recognised.")
|
|
166
|
+
def createNGSMesh(self,plex):
|
|
167
|
+
ngmesh = ngm.Mesh(dim=plex.getCoordinateDim())
|
|
168
|
+
self.ngmesh = ngmesh
|
|
169
|
+
if plex.getDimension() == 2:
|
|
170
|
+
coordinates = plex.getCoordinates().getArray().reshape([-1,2])
|
|
171
|
+
self.ngmesh.AddPoints(coordinates)
|
|
172
|
+
cstart,cend = plex.getHeightStratum(0)
|
|
173
|
+
vstart, vend = plex.getHeightStratum(2)
|
|
174
|
+
cells = []
|
|
175
|
+
for i in range(cstart,cend):
|
|
176
|
+
sIndex = plex.getCone(i)
|
|
177
|
+
s1 = plex.getCone(sIndex[0])-vstart
|
|
178
|
+
s2 = plex.getCone(sIndex[1])-vstart
|
|
179
|
+
if np.linalg.det(np.array([coordinates[s1[1]]-coordinates[s1[0]],coordinates[s2[1]]-coordinates[s1[1]]])) < 0.:
|
|
180
|
+
cells = cells+[[s1[1],s1[0],s2[1]]]
|
|
181
|
+
else:
|
|
182
|
+
cells = cells+[[s1[0],s1[1],s2[1]]]
|
|
183
|
+
|
|
184
|
+
fd = ngmesh.Add(ngm.FaceDescriptor(bc=1))
|
|
185
|
+
self.ngmesh.AddElements(dim=plex.getDimension(), index=1, data=np.asarray(cells,dtype=np.int32), base=0)
|
|
186
|
+
|
|
187
|
+
def createPETScDMPlex(self,mesh):
|
|
188
|
+
if type(mesh) is ngs.comp.Mesh:
|
|
189
|
+
self.ngmesh = mesh.ngmesh
|
|
190
|
+
else:
|
|
191
|
+
self.ngmesh = mesh
|
|
192
|
+
comm = mesh.comm
|
|
193
|
+
if self.ngmesh.dim == 3:
|
|
194
|
+
if comm.rank == 0:
|
|
195
|
+
V = self.ngmesh.Coordinates()
|
|
196
|
+
T = self.ngmesh.Elements3D().NumPy()["nodes"]
|
|
197
|
+
T = np.array([list(np.trim_zeros(a, 'b')) for a in list(T)])-1
|
|
198
|
+
surfMesh, dim = False, 3
|
|
199
|
+
if len(T) == 0:
|
|
200
|
+
surfMesh, dim = True, 2
|
|
201
|
+
T = self.ngmesh.Elements2D().NumPy()["nodes"]
|
|
202
|
+
T = np.array([list(np.trim_zeros(a, 'b')) for a in list(T)])-1
|
|
203
|
+
plex = psc.DMPlex().createFromCellList(dim, T, V)
|
|
204
|
+
plex.setName(self.name)
|
|
205
|
+
vStart, vEnd = plex.getDepthStratum(0)
|
|
206
|
+
if surfMesh:
|
|
207
|
+
for e in self.ngmesh.Elements1D():
|
|
208
|
+
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
|
|
209
|
+
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.surfaces[1]))
|
|
210
|
+
else:
|
|
211
|
+
for e in self.ngmesh.Elements2D():
|
|
212
|
+
join = plex.getFullJoin([vStart+v.nr-1 for v in e.vertices])
|
|
213
|
+
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.index))
|
|
214
|
+
for e in self.ngmesh.Elements1D():
|
|
215
|
+
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
|
|
216
|
+
plex.setLabelValue(EDGE_SETS_LABEL, join[0], int(e.index))
|
|
217
|
+
self.plex = plex
|
|
218
|
+
else:
|
|
219
|
+
plex = psc.DMPlex().createFromCellList(3,
|
|
220
|
+
np.zeros((0, 4), dtype=np.int32),
|
|
221
|
+
np.zeros((0, 3), dtype=np.double))
|
|
222
|
+
self.plex = plex
|
|
223
|
+
elif self.ngmesh.dim == 2:
|
|
224
|
+
if comm.rank == 0:
|
|
225
|
+
V = self.ngmesh.Coordinates()
|
|
226
|
+
T = self.ngmesh.Elements2D().NumPy()["nodes"]
|
|
227
|
+
T = np.array([list(np.trim_zeros(a, 'b')) for a in list(T)])-1
|
|
228
|
+
plex = psc.DMPlex().createFromCellList(2, T, V)
|
|
229
|
+
plex.setName(self.name)
|
|
230
|
+
vStart, vEnd = plex.getDepthStratum(0) # vertices
|
|
231
|
+
for e in self.ngmesh.Elements1D():
|
|
232
|
+
join = plex.getJoin([vStart+v.nr-1 for v in e.vertices])
|
|
233
|
+
plex.setLabelValue(FACE_SETS_LABEL, join[0], int(e.index))
|
|
234
|
+
if not ((1 == self.ngmesh.Elements2D().NumPy()["index"]).all()):
|
|
235
|
+
for e in self.ngmesh.Elements2D():
|
|
236
|
+
join = plex.getFullJoin([vStart+v.nr-1 for v in e.vertices])
|
|
237
|
+
plex.setLabelValue(CELL_SETS_LABEL, join[0], int(e.index))
|
|
238
|
+
|
|
239
|
+
self.plex = plex
|
|
240
|
+
else:
|
|
241
|
+
plex = psc.DMPlex().createFromCellList(2,
|
|
242
|
+
np.zeros((0, 3), dtype=np.int32),
|
|
243
|
+
np.zeros((0, 2), dtype=np.double))
|
|
244
|
+
self.plex = plex
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
#Krylov Solver
|
|
248
|
+
|
|
249
|
+
counter = 0
|
|
250
|
+
|
|
251
|
+
class KrylovSolver():
|
|
252
|
+
"""
|
|
253
|
+
Inspired by Firedrake solver class.
|
|
254
|
+
"""
|
|
255
|
+
global counter
|
|
256
|
+
counter += 1
|
|
257
|
+
def __init__(self, a, fes, p=None, solver_parameters=None,options_prefix=None):
|
|
258
|
+
self.fes = fes
|
|
259
|
+
a.Assemble()
|
|
260
|
+
Amat = a.mat
|
|
261
|
+
if p is not None:
|
|
262
|
+
p.Assemble()
|
|
263
|
+
Pmat = p.mat
|
|
264
|
+
else:
|
|
265
|
+
Pmat = None
|
|
266
|
+
if not isinstance(Amat, ngs.la.SparseMatrixd):
|
|
267
|
+
raise TypeError("Provided operator is a '%s', not an la.SparseMatrixd" % type(Amat).__name__)
|
|
268
|
+
if Pmat is not None and not isinstance(Pmat, ngs.la.SparseMatrixd):
|
|
269
|
+
raise TypeError("Provided preconditioner is a '%s', not an la.SparseMatrixd" % type(Pmat).__name__)
|
|
270
|
+
|
|
271
|
+
self.solver_parameters = solver_parameters
|
|
272
|
+
self.options_prefix = options_prefix
|
|
273
|
+
options_object = psc.Options()
|
|
274
|
+
for optName, optValue in self.solver_parameters.items():
|
|
275
|
+
options_object[optName] = optValue
|
|
276
|
+
|
|
277
|
+
#Creating the PETSc Matrix
|
|
278
|
+
Asc = CreatePETScMatrix(Amat, fes.FreeDofs())
|
|
279
|
+
self.A = Asc
|
|
280
|
+
self.comm = MPI.COMM_WORLD
|
|
281
|
+
#Setting up the preconditioner
|
|
282
|
+
if Pmat is not None:
|
|
283
|
+
Psc = CreatePETScMatrix(Pmat, fes.FreeDofs())
|
|
284
|
+
self.P = Psc
|
|
285
|
+
else:
|
|
286
|
+
self.P = Asc
|
|
287
|
+
#Setting options prefix
|
|
288
|
+
self.A.setOptionsPrefix(self.options_prefix)
|
|
289
|
+
self.P.setOptionsPrefix(self.options_prefix)
|
|
290
|
+
self.A.setFromOptions()
|
|
291
|
+
self.P.setFromOptions()
|
|
292
|
+
|
|
293
|
+
self.ksp = psc.KSP().create(comm=self.comm)
|
|
294
|
+
|
|
295
|
+
# Operator setting must come after null space has been
|
|
296
|
+
# applied
|
|
297
|
+
self.ksp.setOperators(A=self.A, P=self.P)
|
|
298
|
+
# Set from options now (we're not allowed to change parameters
|
|
299
|
+
# anyway).
|
|
300
|
+
self.ksp.setOptionsPrefix(self.options_prefix)
|
|
301
|
+
self.ksp.setFromOptions()
|
|
302
|
+
def solve(self, f):
|
|
303
|
+
f.Assemble()
|
|
304
|
+
u = ngs.GridFunction(self.fes)
|
|
305
|
+
self.vmap = VectorMapping(self.fes.ParallelDofs(), self.fes.FreeDofs())
|
|
306
|
+
upsc, fpsc = self.A.createVecs()
|
|
307
|
+
self.vmap.N2P(f.vec, fpsc)
|
|
308
|
+
self.ksp.solve(fpsc, upsc)
|
|
309
|
+
self.vmap.P2N(upsc, u.vec);
|
|
310
|
+
return u
|
|
Binary file
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from shutil import which
|
|
2
|
+
import glob
|
|
3
|
+
import pathlib
|
|
4
|
+
import subprocess
|
|
5
|
+
import sys
|
|
6
|
+
import sysconfig
|
|
7
|
+
|
|
8
|
+
import netgen.config as ngc
|
|
9
|
+
import ngsolve.config as ngsc
|
|
10
|
+
|
|
11
|
+
def find_compiler():
|
|
12
|
+
compiler = which(ngsc.CMAKE_CXX_COMPILER) or which(ngsc.CMAKE_CXX_COMPILER).split('/')[-1] or which('g++') or which('c++') or which('clang++')
|
|
13
|
+
if compiler is None:
|
|
14
|
+
raise RuntimeError("No compiler found")
|
|
15
|
+
ccache = which('ccache')
|
|
16
|
+
if ccache:
|
|
17
|
+
return [ccache, compiler]
|
|
18
|
+
else:
|
|
19
|
+
return [compiler]
|
|
20
|
+
|
|
21
|
+
def find_includes():
|
|
22
|
+
for prefix in [ngc.CMAKE_INSTALL_PREFIX]:
|
|
23
|
+
files = sorted(pathlib.Path(prefix).glob('include/nglib.h'))
|
|
24
|
+
if len(files):
|
|
25
|
+
return "-I"+str(files[0].parent)
|
|
26
|
+
|
|
27
|
+
if __name__ == '__main__':
|
|
28
|
+
compiler = find_compiler()
|
|
29
|
+
flags = []
|
|
30
|
+
flags.append(ngc.ngcore_compile_options)
|
|
31
|
+
for d in ngc.ngcore_compile_definitions.split(';') + ngsc.NGSOLVE_COMPILE_DEFINITIONS.split(';'):
|
|
32
|
+
flags.append(f"-D{d}")
|
|
33
|
+
|
|
34
|
+
for o in ngsc.NGSOLVE_COMPILE_OPTIONS.split(';'):
|
|
35
|
+
if o.startswith("$<$<COMPILE_LANGUAGE:CXX>:"):
|
|
36
|
+
o = o.split(':')[2].split('>')[0]
|
|
37
|
+
flags.append(o)
|
|
38
|
+
|
|
39
|
+
flags.append(find_includes())
|
|
40
|
+
flags.append(f"-I{sysconfig.get_path('include')}")
|
|
41
|
+
|
|
42
|
+
subprocess.run(compiler + flags + sys.argv[1:])
|
|
Binary file
|
ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
from ngsolve.la import InnerProduct, SparseFactorizationInterface
|
|
2
|
+
from math import sqrt
|
|
3
|
+
from ngsolve import Projector, Norm
|
|
4
|
+
from .utils import TimeFunction
|
|
5
|
+
|
|
6
|
+
class NewtonSolver:
|
|
7
|
+
def __init__(self, a, u, rhs=None, freedofs=None,
|
|
8
|
+
inverse="", solver=None, lin_solver_cls=None,
|
|
9
|
+
lin_solver_args=None):
|
|
10
|
+
self.a, self.u, self.inverse = a, u, inverse
|
|
11
|
+
self.w = u.vec.CreateVector()
|
|
12
|
+
self.r = u.vec.CreateVector()
|
|
13
|
+
self.rhs = rhs
|
|
14
|
+
self.uh = u.vec.CreateVector()
|
|
15
|
+
self.inv = None if solver is None else solver
|
|
16
|
+
self.lin_solver_cls = lin_solver_cls
|
|
17
|
+
self.lin_solver_args = lin_solver_args
|
|
18
|
+
if lin_solver_cls is not None:
|
|
19
|
+
assert solver is None
|
|
20
|
+
if solver or lin_solver_cls:
|
|
21
|
+
self.inverse = "given"
|
|
22
|
+
else:
|
|
23
|
+
self.freedofs = freedofs or u.space.FreeDofs(a.condense)
|
|
24
|
+
|
|
25
|
+
@TimeFunction
|
|
26
|
+
def Solve(self, maxit=100, maxerr=1e-11, dampfactor=1,
|
|
27
|
+
printing=False, callback=None, linesearch=False,
|
|
28
|
+
printenergy=False, print_wrong_direction=False):
|
|
29
|
+
numit = 0
|
|
30
|
+
err = 1.
|
|
31
|
+
a, u, w, r,uh = self.a, self.u, self.w, self.r, self.uh
|
|
32
|
+
for it in range(maxit):
|
|
33
|
+
numit += 1
|
|
34
|
+
if printing:
|
|
35
|
+
print("Newton iteration ", it)
|
|
36
|
+
if printenergy:
|
|
37
|
+
print("Energy: ", a.Energy(u.vec))
|
|
38
|
+
|
|
39
|
+
a.AssembleLinearization(u.vec)
|
|
40
|
+
a.Apply(u.vec, r)
|
|
41
|
+
|
|
42
|
+
self._UpdateInverse()
|
|
43
|
+
if self.rhs is not None:
|
|
44
|
+
r.data -= self.rhs.vec
|
|
45
|
+
if a.condense:
|
|
46
|
+
r.data += a.harmonic_extension_trans * r
|
|
47
|
+
w.data = self.inv * r
|
|
48
|
+
w.data += a.harmonic_extension * w
|
|
49
|
+
w.data += a.inner_solve * r
|
|
50
|
+
else:
|
|
51
|
+
w.data = self.inv * r
|
|
52
|
+
|
|
53
|
+
err2 = InnerProduct(w,r)
|
|
54
|
+
if print_wrong_direction:
|
|
55
|
+
if err2 < 0:
|
|
56
|
+
print("wrong direction")
|
|
57
|
+
err = sqrt(abs(err2))
|
|
58
|
+
if printing:
|
|
59
|
+
print("err = ", err)
|
|
60
|
+
|
|
61
|
+
tau = min(1, numit*dampfactor)
|
|
62
|
+
|
|
63
|
+
if linesearch:
|
|
64
|
+
uh.data = u.vec - tau*w
|
|
65
|
+
energy = a.Energy(u.vec)
|
|
66
|
+
while a.Energy(uh) > energy+(max(1e-14*abs(energy),maxerr)) and tau > 1e-10:
|
|
67
|
+
tau *= 0.5
|
|
68
|
+
uh.data = u.vec - tau * w
|
|
69
|
+
if printing:
|
|
70
|
+
print ("tau = ", tau)
|
|
71
|
+
print ("energy uh = ", a.Energy(uh))
|
|
72
|
+
u.vec.data = uh
|
|
73
|
+
|
|
74
|
+
else:
|
|
75
|
+
u.vec.data -= tau * w
|
|
76
|
+
if callback is not None:
|
|
77
|
+
callback(it, err)
|
|
78
|
+
if abs(err) < maxerr: break
|
|
79
|
+
else:
|
|
80
|
+
print("Warning: Newton might not converge! Error = ", err)
|
|
81
|
+
return (-1,numit)
|
|
82
|
+
return (0,numit)
|
|
83
|
+
|
|
84
|
+
def SetDirichlet(self, dirichletvalues):
|
|
85
|
+
a, u, w, r = self.a, self.u, self.w, self.r
|
|
86
|
+
a.AssembleLinearization(u.vec)
|
|
87
|
+
self._UpdateInverse()
|
|
88
|
+
w.data = dirichletvalues-u.vec
|
|
89
|
+
r.data = a.mat * w
|
|
90
|
+
w.data -= self.inv*r
|
|
91
|
+
u.vec.data += w
|
|
92
|
+
|
|
93
|
+
def _UpdateInverse(self):
|
|
94
|
+
if self.inverse == "given":
|
|
95
|
+
if self.lin_solver_cls is not None and self.inv is None:
|
|
96
|
+
self.inv = self.lin_solver_cls(mat=self.a.mat, **(self.lin_solver_args or {}))
|
|
97
|
+
else:
|
|
98
|
+
self.inv.Update()
|
|
99
|
+
else:
|
|
100
|
+
if self.inv is not None and (self.inverse == "sparsecholesky" or isinstance(self.inv, SparseFactorizationInterface)):
|
|
101
|
+
self.inv.Update()
|
|
102
|
+
else:
|
|
103
|
+
self.inv = self.a.mat.Inverse(self.freedofs,
|
|
104
|
+
inverse=self.inverse)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def Newton(a, u, freedofs=None, maxit=100, maxerr=1e-11, inverse="", \
|
|
108
|
+
dirichletvalues=None, dampfactor=1, printing=True, callback=None):
|
|
109
|
+
"""
|
|
110
|
+
Newton's method for solving non-linear problems of the form A(u)=0.
|
|
111
|
+
|
|
112
|
+
Parameters
|
|
113
|
+
----------
|
|
114
|
+
a : BilinearForm
|
|
115
|
+
The BilinearForm of the non-linear variational problem. It does not have to be assembled.
|
|
116
|
+
|
|
117
|
+
u : GridFunction
|
|
118
|
+
The GridFunction where the solution is saved. The values are used as initial guess for Newton's method.
|
|
119
|
+
|
|
120
|
+
freedofs : BitArray
|
|
121
|
+
The FreeDofs on which the assembled matrix is inverted. If argument is 'None' then the FreeDofs of the underlying FESpace is used.
|
|
122
|
+
|
|
123
|
+
maxit : int
|
|
124
|
+
Number of maximal iteration for Newton. If the maximal number is reached before the maximal error Newton might no converge and a warning is displayed.
|
|
125
|
+
|
|
126
|
+
maxerr : float
|
|
127
|
+
The maximal error which Newton should reach before it stops. The error is computed by the square root of the inner product of the residuum and the correction.
|
|
128
|
+
|
|
129
|
+
inverse : string
|
|
130
|
+
A string of the sparse direct solver which should be solved for inverting the assembled Newton matrix.
|
|
131
|
+
|
|
132
|
+
dampfactor : float
|
|
133
|
+
Set the damping factor for Newton's method. If dampfactor is 1 then no damping is done. If value is < 1 then the damping is done by the formula 'min(1,dampfactor*numit)' for the correction, where 'numit' denotes the Newton iteration.
|
|
134
|
+
|
|
135
|
+
printing : bool
|
|
136
|
+
Set if Newton's method should print informations about the actual iteration like the error.
|
|
137
|
+
|
|
138
|
+
Returns
|
|
139
|
+
-------
|
|
140
|
+
(int, int)
|
|
141
|
+
List of two integers. The first one is 0 if Newton's method did converge, -1 otherwise. The second one gives the number of Newton iterations needed.
|
|
142
|
+
|
|
143
|
+
"""
|
|
144
|
+
solver = NewtonSolver(a=a, u=u, freedofs=freedofs, inverse=inverse)
|
|
145
|
+
if dirichletvalues is not None:
|
|
146
|
+
solver.SetDirichlet(dirichletvalues)
|
|
147
|
+
return solver.Solve(maxit=maxit, maxerr=maxerr,
|
|
148
|
+
dampfactor=dampfactor,
|
|
149
|
+
printing=printing,
|
|
150
|
+
callback=callback,
|
|
151
|
+
linesearch=False,
|
|
152
|
+
printenergy=False)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def NewtonMinimization(a, u, freedofs=None, maxit=100, maxerr=1e-11, inverse="", dampfactor=1, linesearch=False, printing=True, callback=None):
|
|
156
|
+
"""
|
|
157
|
+
Newton's method for solving non-linear problems of the form A(u)=0 involving energy integrators.
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
Parameters
|
|
161
|
+
----------
|
|
162
|
+
a : BilinearForm
|
|
163
|
+
The BilinearForm of the non-linear variational problem. It does not have to be assembled.
|
|
164
|
+
|
|
165
|
+
u : GridFunction
|
|
166
|
+
The GridFunction where the solution is saved. The values are used as initial guess for Newton's method.
|
|
167
|
+
|
|
168
|
+
freedofs : BitArray
|
|
169
|
+
The FreeDofs on which the assembled matrix is inverted. If argument is 'None' then the FreeDofs of the underlying FESpace is used.
|
|
170
|
+
|
|
171
|
+
maxit : int
|
|
172
|
+
Number of maximal iteration for Newton. If the maximal number is reached before the maximal error Newton might no converge and a warning is displayed.
|
|
173
|
+
|
|
174
|
+
maxerr : float
|
|
175
|
+
The maximal error which Newton should reach before it stops. The error is computed by the square root of the inner product of the residuum and the correction.
|
|
176
|
+
|
|
177
|
+
inverse : string
|
|
178
|
+
A string of the sparse direct solver which should be solved for inverting the assembled Newton matrix.
|
|
179
|
+
|
|
180
|
+
dampfactor : float
|
|
181
|
+
Set the damping factor for Newton's method. If dampfactor is 1 then no damping is done. If value is < 1 then the damping is done by the formula 'min(1,dampfactor*numit)' for the correction, where 'numit' denotes the Newton iteration.
|
|
182
|
+
|
|
183
|
+
linesearch : bool
|
|
184
|
+
If True then linesearch is used to guarantee that the energy decreases in every Newton iteration.
|
|
185
|
+
|
|
186
|
+
printing : bool
|
|
187
|
+
Set if Newton's method should print informations about the actual iteration like the error.
|
|
188
|
+
|
|
189
|
+
Returns
|
|
190
|
+
-------
|
|
191
|
+
(int, int)
|
|
192
|
+
List of two integers. The first one is 0 if Newton's method did converge, -1 otherwise. The second one gives the number of Newton iterations needed.
|
|
193
|
+
|
|
194
|
+
"""
|
|
195
|
+
solver = NewtonSolver(a=a, u=u, freedofs=freedofs, inverse=inverse)
|
|
196
|
+
return solver.Solve(maxit=maxit, maxerr=maxerr,
|
|
197
|
+
dampfactor=dampfactor,
|
|
198
|
+
printing=printing,
|
|
199
|
+
callback=callback,
|
|
200
|
+
linesearch=linesearch,
|
|
201
|
+
printenergy=printing,
|
|
202
|
+
print_wrong_direction=False)
|
|
203
|
+
|