ngsolve 6.2.2506.post75.dev0__cp314-cp314-manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ngsolve might be problematic. Click here for more details.
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvcc +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvlink +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngscxx +15 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsld +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basematrix.hpp +957 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basevector.hpp +1268 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbequations.hpp +2805 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bessel.hpp +1064 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bilinearform.hpp +963 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bla.hpp +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bspline.hpp +116 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cg.hpp +368 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cholesky.hpp +720 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/clapack.h +7254 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/code_generation.hpp +296 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/comp.hpp +79 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compatibility.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/complex_wrapper.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/contact.hpp +235 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_linalg.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngbla.hpp +226 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngstd.hpp +527 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diagonalmatrix.hpp +154 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop.hpp +1286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/dump.hpp +949 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ectypes.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigen.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementbyelement.hpp +195 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/expr.hpp +1686 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facethofe.hpp +111 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fem.hpp +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fespace.hpp +1449 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalspace.hpp +115 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1amg.hpp +124 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hidden.hpp +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/householder.hpp +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integrator.hpp +2012 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/interpolate.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrule.hpp +2542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/irspace.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/jacobi.hpp +153 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/kernels.hpp +762 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/la.hpp +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linalg_kernels.hpp +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linearform.hpp +266 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/matrix.hpp +2140 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/memusage.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mgpre.hpp +204 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mptools.hpp +2281 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multigrid.hpp +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multivector.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngstd.hpp +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/order.hpp +251 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/periodic.hpp +129 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pml.hpp +275 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/postproc.hpp +142 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/precomp.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/prolongation.hpp +377 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_comp.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_fem.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/smoother.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/solve.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsecholesky.hpp +313 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix.hpp +1038 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/specialelement.hpp +125 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/statushandler.hpp +33 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/stringops.hpp +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensor.hpp +522 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpfes.hpp +133 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/triangular.hpp +465 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vector.hpp +1273 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vvector.hpp +208 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/webgui.hpp +92 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +173 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers.py +7 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/METADATA +14 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/RECORD +303 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
#ifndef NGSOLVE_CONTACT_HPP
|
|
2
|
+
#define NGSOLVE_CONTACT_HPP
|
|
3
|
+
|
|
4
|
+
// #include <comp.hpp>
|
|
5
|
+
#include "gridfunction.hpp"
|
|
6
|
+
#include "bilinearform.hpp"
|
|
7
|
+
|
|
8
|
+
namespace ngcomp
|
|
9
|
+
{
|
|
10
|
+
template<int DIM>
|
|
11
|
+
struct ContactPair
|
|
12
|
+
{
|
|
13
|
+
ElementId primary_el, secondary_el;
|
|
14
|
+
IntegrationPoint primary_ip, secondary_ip;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
class GapFunction : public CoefficientFunctionNoDerivative
|
|
18
|
+
{
|
|
19
|
+
protected:
|
|
20
|
+
shared_ptr<GridFunction> displacement;
|
|
21
|
+
shared_ptr<MeshAccess> ma;
|
|
22
|
+
Region master;
|
|
23
|
+
Region other;
|
|
24
|
+
double h;
|
|
25
|
+
bool both_sides;
|
|
26
|
+
|
|
27
|
+
public:
|
|
28
|
+
GapFunction( shared_ptr<MeshAccess> ma_, Region primary_, Region secondary_)
|
|
29
|
+
: CoefficientFunctionNoDerivative(ma_->GetDimension()),
|
|
30
|
+
ma(ma_), master(primary_), other(secondary_)
|
|
31
|
+
{ }
|
|
32
|
+
|
|
33
|
+
virtual void Update(shared_ptr<GridFunction> gf, int intorder_, double h_,
|
|
34
|
+
bool both_sides) = 0;
|
|
35
|
+
void Draw();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
template <int DIM>
|
|
39
|
+
class T_GapFunction : public GapFunction
|
|
40
|
+
{
|
|
41
|
+
unique_ptr<netgen::BoxTree<DIM, int>> searchtree;
|
|
42
|
+
public:
|
|
43
|
+
T_GapFunction( shared_ptr<MeshAccess> mesh_, Region primary_, Region secondary_)
|
|
44
|
+
: GapFunction(mesh_, primary_, secondary_)
|
|
45
|
+
{ }
|
|
46
|
+
|
|
47
|
+
void Update(shared_ptr<GridFunction> gf, int intorder_, double h, bool both_sides) override;
|
|
48
|
+
|
|
49
|
+
const netgen::BoxTree<DIM, int>& GetSearchTree() { return *searchtree; }
|
|
50
|
+
|
|
51
|
+
using GapFunction::Evaluate;
|
|
52
|
+
double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
53
|
+
{
|
|
54
|
+
throw Exception("Scalar evaluate of GapFunction called");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void Evaluate(const BaseMappedIntegrationPoint & ip,
|
|
58
|
+
FlatVector<> result) const override;
|
|
59
|
+
|
|
60
|
+
void Evaluate(const BaseMappedIntegrationRule & mir,
|
|
61
|
+
BareSliceMatrix<> result) const override;
|
|
62
|
+
|
|
63
|
+
optional<ContactPair<DIM>> CreateContactPair(const MappedIntegrationPoint<DIM-1, DIM>& mip, LocalHeap& lh, bool both_sides) const;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
template<int DIM>
|
|
67
|
+
class DisplacedNormal : public CoefficientFunctionNoDerivative
|
|
68
|
+
{
|
|
69
|
+
shared_ptr<GridFunction> displacement;
|
|
70
|
+
public:
|
|
71
|
+
DisplacedNormal()
|
|
72
|
+
: CoefficientFunctionNoDerivative(DIM, false),
|
|
73
|
+
displacement(nullptr) {}
|
|
74
|
+
|
|
75
|
+
void Update(shared_ptr<GridFunction> _displacement)
|
|
76
|
+
{ displacement = _displacement; }
|
|
77
|
+
|
|
78
|
+
using CoefficientFunctionNoDerivative::Evaluate;
|
|
79
|
+
double Evaluate(const BaseMappedIntegrationPoint& ip) const override
|
|
80
|
+
{
|
|
81
|
+
throw Exception("1dim eval called for Normal");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void Evaluate(const BaseMappedIntegrationPoint& ir, FlatVector<> values) const override;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
class ContactEnergy
|
|
88
|
+
{
|
|
89
|
+
shared_ptr<CoefficientFunction> cf;
|
|
90
|
+
shared_ptr<FESpace> fes;
|
|
91
|
+
Array<ProxyFunction*> trial_proxies;
|
|
92
|
+
Array<CoefficientFunction*> cf_gridfunctions;
|
|
93
|
+
bool deformed;
|
|
94
|
+
|
|
95
|
+
public:
|
|
96
|
+
ContactEnergy(shared_ptr<CoefficientFunction> _cf,
|
|
97
|
+
bool _deformed=false);
|
|
98
|
+
|
|
99
|
+
bool IsDeformed() const { return deformed; }
|
|
100
|
+
|
|
101
|
+
double CalcEnergy(const FiniteElement& m_fel,
|
|
102
|
+
const FiniteElement& s_fel,
|
|
103
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
104
|
+
FlatVector<double> elx,
|
|
105
|
+
LocalHeap& lh);
|
|
106
|
+
|
|
107
|
+
void ApplyAdd(const FiniteElement& m_fel,
|
|
108
|
+
const FiniteElement& s_fel,
|
|
109
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
110
|
+
FlatVector<double> elx,
|
|
111
|
+
FlatVector<double> ely,
|
|
112
|
+
LocalHeap& lh);
|
|
113
|
+
|
|
114
|
+
void CalcLinearizedAdd(const FiniteElement& m_fel,
|
|
115
|
+
const FiniteElement& s_fel,
|
|
116
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
117
|
+
FlatVector<double> elx,
|
|
118
|
+
FlatMatrix<double> elmat,
|
|
119
|
+
LocalHeap& lh);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
class ContactIntegrator
|
|
123
|
+
{
|
|
124
|
+
shared_ptr<CoefficientFunction> cf;
|
|
125
|
+
shared_ptr<FESpace> fes;
|
|
126
|
+
Array<ProxyFunction*> trial_proxies, test_proxies;
|
|
127
|
+
Array<CoefficientFunction*> cf_gridfunctions;
|
|
128
|
+
Array<shared_ptr<CoefficientFunction>> dcf_dtest; // derivatives by test-functions
|
|
129
|
+
Matrix<shared_ptr<CoefficientFunction>> ddcf_dtest_dtrial; // derivatives by test- and trial-functions
|
|
130
|
+
bool deformed;
|
|
131
|
+
public:
|
|
132
|
+
ContactIntegrator(shared_ptr<CoefficientFunction> _cf,
|
|
133
|
+
bool _deformed);
|
|
134
|
+
|
|
135
|
+
bool IsDeformed() const { return deformed; }
|
|
136
|
+
|
|
137
|
+
void ApplyAdd(const FiniteElement& m_fel,
|
|
138
|
+
const FiniteElement& s_fel,
|
|
139
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
140
|
+
FlatVector<double> elx,
|
|
141
|
+
FlatVector<double> ely,
|
|
142
|
+
LocalHeap& lh);
|
|
143
|
+
|
|
144
|
+
void CalcLinearizedAdd(const FiniteElement& m_fel,
|
|
145
|
+
const FiniteElement& s_fel,
|
|
146
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
147
|
+
FlatVector<double> elx,
|
|
148
|
+
FlatMatrix<double> elmat,
|
|
149
|
+
LocalHeap& lh);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class ContactBoundary : public std::enable_shared_from_this<ContactBoundary>,
|
|
154
|
+
netgen::UserVisualizationObject
|
|
155
|
+
{
|
|
156
|
+
shared_ptr<GapFunction> gap;
|
|
157
|
+
shared_ptr<CoefficientFunction> normal;
|
|
158
|
+
Region master, other;
|
|
159
|
+
Array<shared_ptr<ContactEnergy>> energies, undeformed_energies, deformed_energies;
|
|
160
|
+
Array<shared_ptr<ContactIntegrator>> integrators, undeformed_integrators, deformed_integrators;
|
|
161
|
+
shared_ptr<FESpace> fes_displacement;
|
|
162
|
+
shared_ptr<FESpace> fes;
|
|
163
|
+
|
|
164
|
+
// For visualization only
|
|
165
|
+
bool draw_pairs = false;
|
|
166
|
+
Array<Vec<3>> primary_points;
|
|
167
|
+
Array<Vec<3>> secondary_points;
|
|
168
|
+
bool volume, element_boundary;
|
|
169
|
+
public:
|
|
170
|
+
void Draw();
|
|
171
|
+
ContactBoundary(Region _master, Region _other, bool draw_pairs = false, bool _volume=false, bool element_boundary=false);
|
|
172
|
+
|
|
173
|
+
~ContactBoundary();
|
|
174
|
+
|
|
175
|
+
void AddEnergy(shared_ptr<CoefficientFunction> form,
|
|
176
|
+
bool deformed=false);
|
|
177
|
+
void AddIntegrator(shared_ptr<CoefficientFunction> form,
|
|
178
|
+
bool deformed=false);
|
|
179
|
+
|
|
180
|
+
// Update search tree for gap function, if bf is not
|
|
181
|
+
// nullptr, update SpecialElements of bf
|
|
182
|
+
void Update(shared_ptr<GridFunction> gf,
|
|
183
|
+
shared_ptr<BilinearForm> bf,
|
|
184
|
+
int intorder, double h, bool both_sides);
|
|
185
|
+
|
|
186
|
+
shared_ptr<CoefficientFunction> Gap() const { return gap; }
|
|
187
|
+
shared_ptr<CoefficientFunction> Normal() const { return normal; }
|
|
188
|
+
const auto& GetEnergies() const { return energies; }
|
|
189
|
+
const auto& GetEnergies(bool def) const { return def ? deformed_energies : undeformed_energies; }
|
|
190
|
+
const auto& GetIntegrators() const { return integrators; }
|
|
191
|
+
const auto& GetIntegrators(bool def) const { return def ? deformed_integrators : undeformed_integrators; }
|
|
192
|
+
shared_ptr<FESpace> GetFESpace() const { return fes; }
|
|
193
|
+
tuple<FlatArray<Vec<3>>, FlatArray<Vec<3>>> GetDrawingPairs() { return {primary_points, secondary_points}; }
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
template<int DIM>
|
|
197
|
+
class MPContactElement : public SpecialElement
|
|
198
|
+
{
|
|
199
|
+
// ContactPair<DIM> pair;
|
|
200
|
+
ElementId primary_ei, secondary_ei;
|
|
201
|
+
IntegrationRule primary_ir, secondary_ir;
|
|
202
|
+
shared_ptr<ContactBoundary> cb;
|
|
203
|
+
FESpace* fes;
|
|
204
|
+
GridFunction* deformation;
|
|
205
|
+
public:
|
|
206
|
+
MPContactElement(ElementId primary_ei, ElementId secondary_ei,
|
|
207
|
+
IntegrationRule primary_ir, IntegrationRule secondary_ir,
|
|
208
|
+
shared_ptr<ContactBoundary> _cb,
|
|
209
|
+
GridFunction* deformation);
|
|
210
|
+
|
|
211
|
+
void GetDofNrs(Array<DofId>& dnums) const override;
|
|
212
|
+
|
|
213
|
+
double Energy(FlatVector<double> elx,
|
|
214
|
+
LocalHeap& lh) const override;
|
|
215
|
+
|
|
216
|
+
void Apply(FlatVector<double> elx,
|
|
217
|
+
FlatVector<double> ely,
|
|
218
|
+
LocalHeap& lh) const override;
|
|
219
|
+
|
|
220
|
+
void CalcElementMatrix(FlatMatrix<double> elmat,
|
|
221
|
+
LocalHeap& lh) const override;
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
void CalcLinearizedElementMatrix(FlatVector<double> elx,
|
|
225
|
+
FlatMatrix<double> elmat,
|
|
226
|
+
LocalHeap& lh) const override;
|
|
227
|
+
|
|
228
|
+
shared_ptr<ContactBoundary> GetContactBoundary() const
|
|
229
|
+
{ return cb; }
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
} // namespace ngcomp
|
|
234
|
+
|
|
235
|
+
#endif // NGSOLVE_CONTACT_HPP
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#ifndef CUDA_LINALG_HPP
|
|
2
|
+
#define CUDA_LINALG_HPP
|
|
3
|
+
|
|
4
|
+
// partial override of overloaded function (MultAdd)
|
|
5
|
+
#pragma nv_diag_suppress 611
|
|
6
|
+
#pragma nv_diag_suppress 20013
|
|
7
|
+
|
|
8
|
+
#include <la.hpp>
|
|
9
|
+
|
|
10
|
+
#include <cuda_runtime.h>
|
|
11
|
+
#include <cublas_v2.h>
|
|
12
|
+
#include <cusparse.h>
|
|
13
|
+
|
|
14
|
+
#include "cuda_ngstd.hpp"
|
|
15
|
+
|
|
16
|
+
namespace ngla
|
|
17
|
+
{
|
|
18
|
+
cublasHandle_t Get_CuBlas_Handle ();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
#include "cuda_ngbla.hpp"
|
|
23
|
+
#include "linalg_kernels.hpp"
|
|
24
|
+
#include "unifiedvector.hpp"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
namespace ngla
|
|
28
|
+
{
|
|
29
|
+
using namespace ngs_cuda;
|
|
30
|
+
|
|
31
|
+
void InitCuLinalg();
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/* AutoVector CreateUnifiedVector(size_t size); */
|
|
35
|
+
|
|
36
|
+
class DevMatrix : public BaseMatrix
|
|
37
|
+
{
|
|
38
|
+
public:
|
|
39
|
+
DevMatrix() { }
|
|
40
|
+
|
|
41
|
+
AutoVector CreateRowVector() const override { return make_unique<UnifiedVector>(Width()); }
|
|
42
|
+
AutoVector CreateColVector() const override { return make_unique<UnifiedVector>(Height()); }
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
shared_ptr<BaseMatrix> CreateDevMatrix (BaseMatrix &mat);
|
|
46
|
+
shared_ptr<BaseMatrix> CreateDevMatrix (Matrix<> &mat);
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DevSparseMatrix : public DevMatrix
|
|
50
|
+
{
|
|
51
|
+
protected:
|
|
52
|
+
//cusparseMatDescr_t * descr;
|
|
53
|
+
cusparseSpMatDescr_t descr;
|
|
54
|
+
int * dev_ind;
|
|
55
|
+
int * dev_col;
|
|
56
|
+
double * dev_val;
|
|
57
|
+
int height, width, nze;
|
|
58
|
+
public:
|
|
59
|
+
DevSparseMatrix () { }
|
|
60
|
+
DevSparseMatrix (const SparseMatrix<double> & mat);
|
|
61
|
+
virtual ~DevSparseMatrix ();
|
|
62
|
+
|
|
63
|
+
virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const;
|
|
64
|
+
virtual void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const;
|
|
65
|
+
|
|
66
|
+
virtual int VHeight() const { return height; }
|
|
67
|
+
virtual int VWidth() const { return width; }
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class DevDiagonalMatrix : public DevMatrix
|
|
72
|
+
{
|
|
73
|
+
protected:
|
|
74
|
+
const UnifiedVector diag;
|
|
75
|
+
|
|
76
|
+
public:
|
|
77
|
+
DevDiagonalMatrix (const UnifiedVector _diag) : diag(_diag) { }
|
|
78
|
+
|
|
79
|
+
virtual xbool IsSymmetric() const { return true; }
|
|
80
|
+
|
|
81
|
+
virtual void Mult (const BaseVector & x, BaseVector & y) const;
|
|
82
|
+
virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const;
|
|
83
|
+
|
|
84
|
+
virtual int VHeight() const { return diag.Size(); }
|
|
85
|
+
virtual int VWidth() const { return diag.Size(); }
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
// compatibility between elder ngsolve (template or not)
|
|
90
|
+
typedef decltype (ConstantElementByElementMatrix (5,5,Matrix<>(),
|
|
91
|
+
declval<Table<int>>(), declval<Table<int>>())) T_ConstEBEMatrix;
|
|
92
|
+
|
|
93
|
+
class DevConstantElementByElementMatrix : public DevMatrix
|
|
94
|
+
{
|
|
95
|
+
size_t h, w; // big matrix shape
|
|
96
|
+
|
|
97
|
+
Matrix<Dev<double>> devmat;
|
|
98
|
+
|
|
99
|
+
DevTable<int> rowdnums, coldnums;
|
|
100
|
+
DevDataTable<int> row_coloring, col_coloring;
|
|
101
|
+
|
|
102
|
+
bool disjoint_rows, disjoint_cols;
|
|
103
|
+
size_t numblocks;
|
|
104
|
+
public:
|
|
105
|
+
DevConstantElementByElementMatrix (const T_ConstEBEMatrix & mat);
|
|
106
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
107
|
+
void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
108
|
+
|
|
109
|
+
int VHeight() const override { return h; }
|
|
110
|
+
int VWidth() const override { return w; }
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class DevBlockDiagonalMatrixSoA : public DevMatrix
|
|
116
|
+
{
|
|
117
|
+
double * dev_data; // Tensor<3> blockdiag;
|
|
118
|
+
int blocks, dimy, dimx;
|
|
119
|
+
Matrix<bool> nonzero;
|
|
120
|
+
Array<Dev<int>> indices, indices_trans;
|
|
121
|
+
public:
|
|
122
|
+
DevBlockDiagonalMatrixSoA (const BlockDiagonalMatrixSoA & mat);
|
|
123
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
124
|
+
void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
125
|
+
int VHeight() const override { return dimy*blocks; }
|
|
126
|
+
int VWidth() const override { return dimx*blocks; }
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class DevEmbeddedMatrix : public EmbeddedMatrix
|
|
132
|
+
{
|
|
133
|
+
public:
|
|
134
|
+
using EmbeddedMatrix::EmbeddedMatrix;
|
|
135
|
+
AutoVector CreateColVector() const override { return make_unique<UnifiedVector>(Height()); }
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
class DevEmbeddedTransposeMatrix : public EmbeddedTransposeMatrix
|
|
139
|
+
{
|
|
140
|
+
public:
|
|
141
|
+
using EmbeddedTransposeMatrix::EmbeddedTransposeMatrix;
|
|
142
|
+
AutoVector CreateRowVector() const override { return make_unique<UnifiedVector>(Width()); }
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class DevProjector : public DevMatrix
|
|
147
|
+
{
|
|
148
|
+
private:
|
|
149
|
+
shared_ptr<DevBitArray> bits;
|
|
150
|
+
bool keep_values;
|
|
151
|
+
public:
|
|
152
|
+
DevProjector (const Projector & proj)
|
|
153
|
+
: bits(make_shared<DevBitArray>(*proj.Mask())),
|
|
154
|
+
keep_values(proj.KeepValues()) { ; }
|
|
155
|
+
|
|
156
|
+
void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
157
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
158
|
+
|
|
159
|
+
void Project (BaseVector & x) const;
|
|
160
|
+
|
|
161
|
+
virtual int VHeight() const override { return bits->Size(); }
|
|
162
|
+
virtual int VWidth() const override { return bits->Size(); }
|
|
163
|
+
|
|
164
|
+
AutoVector CreateRowVector() const override
|
|
165
|
+
{ throw Exception("CreateRowVector not implemented for DevProjector!"); }
|
|
166
|
+
AutoVector CreateColVector() const override
|
|
167
|
+
{ throw Exception("CreateColVector not implemented for DevProjector!"); }
|
|
168
|
+
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
#endif
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#ifndef CUDA_NGBLA
|
|
2
|
+
#define CUDA_NGBLA
|
|
3
|
+
|
|
4
|
+
#include "cuda_ngstd.hpp"
|
|
5
|
+
#include "linalg_kernels.hpp"
|
|
6
|
+
|
|
7
|
+
namespace ngbla
|
|
8
|
+
{
|
|
9
|
+
using namespace ngs_cuda;
|
|
10
|
+
|
|
11
|
+
// template<> struct trivtrans<Dev<double>> { static constexpr bool value = true; };
|
|
12
|
+
template<> struct is_scalar_type<Dev<double>> { static constexpr bool value = true; };
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
template <typename T>
|
|
16
|
+
class Vector<Dev<T>> : public FlatVector<Dev<T>>
|
|
17
|
+
{
|
|
18
|
+
using FlatVector<Dev<T>>::size;
|
|
19
|
+
using FlatVector<Dev<T>>::data;
|
|
20
|
+
|
|
21
|
+
public:
|
|
22
|
+
Vector (Vector&) = delete;
|
|
23
|
+
Vector (Vector&&v2)
|
|
24
|
+
: FlatVector<Dev<T>>(v2.Size(), v2.Data())
|
|
25
|
+
{
|
|
26
|
+
v2.data = nullptr;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
Vector (size_t asize)
|
|
30
|
+
: FlatVector<Dev<T>>(asize, Dev<T>::Malloc(asize)) { ; }
|
|
31
|
+
|
|
32
|
+
Vector (FlatVector<T> vec)
|
|
33
|
+
: FlatVector<Dev<T>>(vec.Size(), Dev<T>::Malloc(vec.Size()))
|
|
34
|
+
{
|
|
35
|
+
H2D(vec);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
~Vector()
|
|
39
|
+
{
|
|
40
|
+
Dev<T>::Free(data);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void D2H (FlatVector<T> vec) const
|
|
44
|
+
{
|
|
45
|
+
cudaMemcpy (vec.Data(), data, sizeof(T)*size, cudaMemcpyDeviceToHost);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void H2D (FlatVector<T> vec)
|
|
49
|
+
{
|
|
50
|
+
cudaMemcpy (data, vec.Data(), sizeof(T)*size, cudaMemcpyHostToDevice);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Vector<T> D2H() const
|
|
54
|
+
{
|
|
55
|
+
Vector<T> vh(size);
|
|
56
|
+
D2H (vh);
|
|
57
|
+
return vh;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
inline Vector<double> D2H (FlatVector<Dev<double>> dvec)
|
|
62
|
+
{
|
|
63
|
+
Vector<double> hvec(dvec.Size());
|
|
64
|
+
cudaMemcpy (hvec.Data(), dvec.Data(), sizeof(double)*hvec.Size(), cudaMemcpyDeviceToHost);
|
|
65
|
+
return hvec;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
template <typename T>
|
|
72
|
+
class Matrix<Dev<T>> : public FlatMatrix<Dev<T>>
|
|
73
|
+
{
|
|
74
|
+
using FlatMatrix<Dev<T>>::h;
|
|
75
|
+
using FlatMatrix<Dev<T>>::w;
|
|
76
|
+
using FlatMatrix<Dev<T>>::data;
|
|
77
|
+
|
|
78
|
+
public:
|
|
79
|
+
Matrix (Matrix&) = delete;
|
|
80
|
+
Matrix (Matrix&&m2)
|
|
81
|
+
: FlatMatrix<Dev<T>>(m2.Height(), m2.Width(), m2.Data())
|
|
82
|
+
{
|
|
83
|
+
m2.data = nullptr;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Matrix (size_t h_, size_t w_)
|
|
87
|
+
: FlatMatrix<Dev<T>>(h_, w_, Dev<T>::Malloc(h_*w_)) { ; }
|
|
88
|
+
|
|
89
|
+
Matrix (FlatMatrix<T> mat)
|
|
90
|
+
: FlatMatrix<Dev<T>>(mat.Height(), mat.Width(),
|
|
91
|
+
Dev<T>::Malloc(mat.Height()*mat.Width()))
|
|
92
|
+
{
|
|
93
|
+
H2D(mat);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
~Matrix()
|
|
97
|
+
{
|
|
98
|
+
Dev<T>::Free(data);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
void D2H (FlatMatrix<T> mat) const
|
|
102
|
+
{
|
|
103
|
+
cudaMemcpy (mat.Data(), data, sizeof(T)*h*w, cudaMemcpyDeviceToHost);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
void H2D (FlatMatrix<T> mat)
|
|
107
|
+
{
|
|
108
|
+
cudaMemcpy (data, mat.Data(), sizeof(T)*h*w, cudaMemcpyHostToDevice);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
Matrix<T> D2H() const
|
|
112
|
+
{
|
|
113
|
+
Matrix<T> mh(h, w);
|
|
114
|
+
D2H (mh);
|
|
115
|
+
return mh;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
inline Matrix<double> D2H (SliceMatrix<Dev<double>> dmat)
|
|
120
|
+
{
|
|
121
|
+
Matrix<double> hmat(dmat.Height(), dmat.Width());
|
|
122
|
+
for (size_t i = 0; i < hmat.Height(); i++)
|
|
123
|
+
cudaMemcpy (&hmat(i,0), &dmat(i,0), sizeof(double)*hmat.Width(), cudaMemcpyDeviceToHost);
|
|
124
|
+
return hmat;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
inline Matrix<double,ColMajor> D2H (SliceMatrix<Dev<double>,ColMajor> dmat)
|
|
128
|
+
{
|
|
129
|
+
return Trans(D2H(Trans(dmat)));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
template <ORDERING ORDA, ORDERING ORDB>
|
|
136
|
+
void CudaMultMatMat2 (SliceMatrix<Dev<double>, ORDA> a, SliceMatrix<Dev<double>,ORDB> b,
|
|
137
|
+
SliceMatrix<Dev<double>, ORDERING::ColMajor> c,
|
|
138
|
+
double alpha, double beta)
|
|
139
|
+
{
|
|
140
|
+
cublasStatus_t stat =
|
|
141
|
+
cublasDgemm(ngla::Get_CuBlas_Handle(),
|
|
142
|
+
ORDA==ORDERING::RowMajor ? CUBLAS_OP_T : CUBLAS_OP_N,
|
|
143
|
+
ORDB==ORDERING::RowMajor ? CUBLAS_OP_T : CUBLAS_OP_N,
|
|
144
|
+
c.Height(), c.Width(), a.Width(),
|
|
145
|
+
&alpha, (double*)a.Data(), a.Dist(), (double*)b.Data(), b.Dist(),
|
|
146
|
+
&beta, (double*)c.Data(), c.Dist());
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
template <ORDERING ORDA, ORDERING ORDB>
|
|
150
|
+
void CudaMultMatMat2 (SliceMatrix<Dev<double>, ORDA> a, SliceMatrix<Dev<double>,ORDB> b,
|
|
151
|
+
SliceMatrix<Dev<double>, ORDERING::RowMajor> c,
|
|
152
|
+
double alpha, double beta)
|
|
153
|
+
{
|
|
154
|
+
CudaMultMatMat2 (Trans(b), Trans(a), Trans(c), alpha, beta);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
template <typename TA, typename TB, typename TC,
|
|
159
|
+
enable_if_t<IsConvertibleToSliceMatrix<TA,Dev<double>>(),int> = 0,
|
|
160
|
+
enable_if_t<IsConvertibleToSliceMatrix<TB,Dev<double>>(),int> = 0,
|
|
161
|
+
enable_if_t<IsConvertibleToSliceMatrix<TC,Dev<double>>(),int> = 0>
|
|
162
|
+
void MultMatMat (const TA & a, const TB & b, const TC & c, double alpha=1, double beta=0)
|
|
163
|
+
{
|
|
164
|
+
CudaMultMatMat2(make_SliceMatrix(a), make_SliceMatrix(b), make_SliceMatrix(c), alpha, beta);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
template <typename TOP, typename T, typename TB1, typename TB2>
|
|
169
|
+
class assign_trait<TOP, T, MultExpr<TB1,TB2>,
|
|
170
|
+
enable_if_t<IsConvertibleToSliceMatrix<T,Dev<double>>(),int>>
|
|
171
|
+
{
|
|
172
|
+
public:
|
|
173
|
+
static INLINE T & Assign (MatExpr<T> & self, const Expr<MultExpr<TB1,TB2>> & v)
|
|
174
|
+
{
|
|
175
|
+
auto res = self.View();
|
|
176
|
+
|
|
177
|
+
double alpha = std::is_same_v<TOP,typename MatExpr<T>::AsSub> ? -1 : 1;
|
|
178
|
+
double beta = std::is_same_v<TOP,typename MatExpr<T>::As> ? 0 : 1;
|
|
179
|
+
|
|
180
|
+
MultMatMat (v.Spec().A(), v.Spec().B(), self.Spec(), alpha, beta);
|
|
181
|
+
return self.Spec();
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
template <typename TOP, typename T, typename TB1, typename TB2>
|
|
186
|
+
class assign_trait<TOP, T, ScaleExpr<MultExpr<TB1,TB2>,double>,
|
|
187
|
+
enable_if_t<IsConvertibleToSliceMatrix<T,Dev<double>>(),int>>
|
|
188
|
+
{
|
|
189
|
+
public:
|
|
190
|
+
static inline T & Assign (MatExpr<T> & self, const Expr<ScaleExpr<MultExpr<TB1,TB2>,double>> & v)
|
|
191
|
+
{
|
|
192
|
+
auto res = self.View();
|
|
193
|
+
|
|
194
|
+
double alpha = is_same_v<TOP,typename MatExpr<T>::AsSub> ? -1 : 1;
|
|
195
|
+
double beta = is_same_v<TOP,typename MatExpr<T>::As> ? 0 : 1;
|
|
196
|
+
|
|
197
|
+
alpha *= v.View().S();
|
|
198
|
+
|
|
199
|
+
MultMatMat (v.View().A().A(), v.View().A().B(), self.ViewRW(), alpha, beta);
|
|
200
|
+
return self.Spec();
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
template <typename TOP, typename T, typename TB1, typename TB2>
|
|
205
|
+
class assign_trait<TOP, T, MultExpr<ScaleExpr<TB1,double>,TB2>,
|
|
206
|
+
enable_if_t<IsConvertibleToSliceMatrix<T,Dev<double>>(),int>>
|
|
207
|
+
{
|
|
208
|
+
public:
|
|
209
|
+
static inline T & Assign (MatExpr<T> & self, const Expr<MultExpr<ScaleExpr<TB1,double>,TB2>> & v)
|
|
210
|
+
{
|
|
211
|
+
auto res = self.View();
|
|
212
|
+
|
|
213
|
+
double alpha = is_same_v<TOP,typename MatExpr<T>::AsSub> ? -1 : 1;
|
|
214
|
+
double beta = is_same_v<TOP,typename MatExpr<T>::As> ? 0 : 1;
|
|
215
|
+
|
|
216
|
+
alpha *= v.View().A().S();
|
|
217
|
+
|
|
218
|
+
MultMatMat (v.View().A().A(), v.View().B(), self.ViewRW(), alpha, beta);
|
|
219
|
+
return self.Spec();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
#endif
|