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,224 @@
|
|
|
1
|
+
#ifndef TPINTRULE_HPP
|
|
2
|
+
#define TPINTRULE_HPP
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
#include "scalarfe.hpp"
|
|
6
|
+
#include "coefficient.hpp"
|
|
7
|
+
|
|
8
|
+
namespace ngfem
|
|
9
|
+
{
|
|
10
|
+
class TPIntegrationRule : public IntegrationRule
|
|
11
|
+
{
|
|
12
|
+
const ArrayMem< const IntegrationRule *,2> irs;
|
|
13
|
+
public:
|
|
14
|
+
INLINE TPIntegrationRule(const Array< const IntegrationRule *> & airs) : irs(airs)
|
|
15
|
+
{
|
|
16
|
+
this->size = irs[0]->GetNIP()*irs[1]->GetNIP();
|
|
17
|
+
}
|
|
18
|
+
INLINE TPIntegrationRule(int asize)
|
|
19
|
+
{
|
|
20
|
+
this->size = asize;
|
|
21
|
+
}
|
|
22
|
+
INLINE const IntegrationRule & operator() (int i) const {return *irs[i];}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
26
|
+
|
|
27
|
+
class NGS_DLL_HEADER TPMappedIntegrationRule : public BaseMappedIntegrationRule
|
|
28
|
+
{
|
|
29
|
+
ArrayMem<BaseMappedIntegrationRule *,2> irs;
|
|
30
|
+
ArrayMem<int,2> dims;
|
|
31
|
+
int facet = -1;
|
|
32
|
+
public:
|
|
33
|
+
INLINE TPMappedIntegrationRule(const IntegrationRule & ir, const ElementTransformation & eltrans ) : BaseMappedIntegrationRule(ir, eltrans) {
|
|
34
|
+
}
|
|
35
|
+
INLINE TPMappedIntegrationRule(BaseMappedIntegrationRule & mirx, BaseMappedIntegrationRule & miry, const IntegrationRule & tpir, const ElementTransformation & eltrans ) : BaseMappedIntegrationRule(tpir, eltrans) {
|
|
36
|
+
irs[0] = &mirx;
|
|
37
|
+
irs[1] = &miry;
|
|
38
|
+
dims[0] = mirx.GetTransformation().SpaceDim();
|
|
39
|
+
dims[1] = miry.GetTransformation().SpaceDim();
|
|
40
|
+
}
|
|
41
|
+
INLINE void SetFacet(int afacet) {
|
|
42
|
+
facet = afacet;
|
|
43
|
+
}
|
|
44
|
+
virtual ~TPMappedIntegrationRule() {}
|
|
45
|
+
virtual BaseMappedIntegrationRule & Range(int first, int next, LocalHeap & lh) const
|
|
46
|
+
{ throw Exception("TPMappedIntegrationRule::Range not implemented"); }
|
|
47
|
+
virtual SliceMatrix<> GetPoints() const
|
|
48
|
+
{ throw Exception("TPMappedIntegrationRule::GetPoints not implemented"); }
|
|
49
|
+
virtual SliceMatrix<> GetNormals() const
|
|
50
|
+
{ throw Exception("TPMappedIntegrationRule::GetNormals not implemented"); }
|
|
51
|
+
virtual void ComputeNormalsAndMeasure (ELEMENT_TYPE et, int facetnr)
|
|
52
|
+
{ throw Exception("TPMappedIntegrationRule::ComputeNormalsAndMeasure not implemented"); }
|
|
53
|
+
virtual bool IsComplex() const
|
|
54
|
+
{
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
INLINE void AppendDim(int adim) {
|
|
58
|
+
dims.Append(adim);
|
|
59
|
+
}
|
|
60
|
+
INLINE void AppendIR(BaseMappedIntegrationRule * miri) {
|
|
61
|
+
irs.Append(miri);
|
|
62
|
+
}
|
|
63
|
+
INLINE const Array<int> & GetDims() const {
|
|
64
|
+
return dims;
|
|
65
|
+
}
|
|
66
|
+
INLINE Array<int> & GetDims() {
|
|
67
|
+
return dims;
|
|
68
|
+
}
|
|
69
|
+
INLINE const Array<BaseMappedIntegrationRule *> & GetIRs() const {
|
|
70
|
+
return irs;
|
|
71
|
+
}
|
|
72
|
+
INLINE Array<BaseMappedIntegrationRule *> & GetIRs() {
|
|
73
|
+
return irs;
|
|
74
|
+
}
|
|
75
|
+
INLINE const int GetFacet() const {
|
|
76
|
+
return facet;
|
|
77
|
+
}
|
|
78
|
+
virtual BaseMappedIntegrationRule & Range(size_t first, size_t next, LocalHeap & lh) const
|
|
79
|
+
{ throw Exception("TPMappedIntegrationRule::Range not implemented"); }
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
///////////////////////////////////////////////////////////////////////////////////////
|
|
83
|
+
class TPElementTransformation : public ElementTransformation
|
|
84
|
+
{
|
|
85
|
+
ElementId ei;
|
|
86
|
+
ArrayMem<ElementTransformation*, 2> trafos;
|
|
87
|
+
|
|
88
|
+
public:
|
|
89
|
+
INLINE TPElementTransformation ( ElementId aei ) :
|
|
90
|
+
ElementTransformation (ET_POINT, VOL, aei.Nr(), 0), ei(aei)
|
|
91
|
+
{
|
|
92
|
+
//trafos.SetSize(nmeshes);
|
|
93
|
+
}
|
|
94
|
+
INLINE ElementTransformation & GetTrafo(int i) const {return *trafos[i];}
|
|
95
|
+
void SetTrafos(Array<ElementTransformation *> & atrafos) {trafos = atrafos;}
|
|
96
|
+
virtual void CalcJacobian (const IntegrationPoint & ip, FlatMatrix<> dxdxi) const {
|
|
97
|
+
throw Exception("TPElementTransformation::CalcJacobian not implemented");
|
|
98
|
+
}
|
|
99
|
+
virtual void CalcPoint (const IntegrationPoint & ip, FlatVector<> point) const {
|
|
100
|
+
throw Exception("TPElementTransformation::CalcPoint not implemented");
|
|
101
|
+
}
|
|
102
|
+
virtual void CalcPointJacobian (const IntegrationPoint & ip, FlatVector<> point, FlatMatrix<> dxdxi) const {
|
|
103
|
+
throw Exception("TPElementTransformation::CalcPointJacobian not implemented");
|
|
104
|
+
}
|
|
105
|
+
virtual void CalcMultiPointJacobian (const IntegrationRule & ir, BaseMappedIntegrationRule & bmir) const {
|
|
106
|
+
throw Exception("TPElementTransformation::CalcMultiPointJacobian not implemented");
|
|
107
|
+
}
|
|
108
|
+
virtual void CalcMultiPointJacobian (const SIMD_IntegrationRule & ir, SIMD_BaseMappedIntegrationRule & mir) const {
|
|
109
|
+
throw Exception("TPElementTransformation::CalcMultiPointJacobian not implemented");
|
|
110
|
+
}
|
|
111
|
+
virtual int SpaceDim () const {
|
|
112
|
+
return trafos[0]->SpaceDim() + trafos[1]->SpaceDim();
|
|
113
|
+
}
|
|
114
|
+
virtual VorB VB() const {
|
|
115
|
+
return VorB( (trafos[0]->VB()==BND) || (trafos[1]->VB() == BND) );
|
|
116
|
+
}
|
|
117
|
+
virtual BaseMappedIntegrationPoint & operator() (const IntegrationPoint & ip, Allocator & lh) const {
|
|
118
|
+
throw Exception("TPElementTransformation::operator() not implemented"); }
|
|
119
|
+
|
|
120
|
+
virtual BaseMappedIntegrationRule & operator() (const IntegrationRule & ir, Allocator & lh) const
|
|
121
|
+
{
|
|
122
|
+
const TPIntegrationRule & tpir = dynamic_cast<const TPIntegrationRule &>(ir);
|
|
123
|
+
TPMappedIntegrationRule * mir = new (lh) TPMappedIntegrationRule(ir, *this);
|
|
124
|
+
for(int i=0;i<2;i++)
|
|
125
|
+
{
|
|
126
|
+
BaseMappedIntegrationRule & miri = (*trafos[i])(tpir(i),lh);
|
|
127
|
+
mir->AppendDim(trafos[i]->SpaceDim());
|
|
128
|
+
mir->AppendIR(&miri);
|
|
129
|
+
}
|
|
130
|
+
return *mir;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
////////////////////////////////////////////////////////////////////////////////////////////
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class TPHighOrderFE : public FiniteElement
|
|
137
|
+
{
|
|
138
|
+
public:
|
|
139
|
+
ArrayMem<const FiniteElement *,2> elements;
|
|
140
|
+
HD NGS_DLL_HEADER
|
|
141
|
+
virtual void CalcShape (const IntegrationPoint & ip,
|
|
142
|
+
SliceVector<> shape) const
|
|
143
|
+
{ cout << "calcshape ip" << endl; }
|
|
144
|
+
|
|
145
|
+
/// compute dshape, matrix: ndof x spacedim
|
|
146
|
+
HD NGS_DLL_HEADER
|
|
147
|
+
virtual void CalcDShape (const IntegrationPoint & ip,
|
|
148
|
+
SliceMatrix<> dshape) const
|
|
149
|
+
{ cout << "calcdshape ip" << endl; }
|
|
150
|
+
|
|
151
|
+
HD NGS_DLL_HEADER
|
|
152
|
+
virtual void CalcShape (const IntegrationRule & irbase, SliceMatrix<> shape) const
|
|
153
|
+
{
|
|
154
|
+
const TPIntegrationRule & ir = dynamic_cast<const TPIntegrationRule &>(irbase);
|
|
155
|
+
int ndof0 = elements[0]->GetNDof();
|
|
156
|
+
int ndof1 = elements[1]->GetNDof();
|
|
157
|
+
int nip0 = ir(0).Size();
|
|
158
|
+
int nip1 = ir(1).Size();
|
|
159
|
+
Matrix<double> shape0( ndof0, ir(0).Size() );
|
|
160
|
+
Matrix<double> shape1( ndof1, ir(1).Size() );
|
|
161
|
+
dynamic_cast<const BaseScalarFiniteElement*>(elements[0])->CalcShape( ir(0), shape0 );
|
|
162
|
+
dynamic_cast<const BaseScalarFiniteElement*>(elements[1])->CalcShape( ir(1), shape1 );
|
|
163
|
+
int ii=0;
|
|
164
|
+
for(int m=0;m<ndof0;m++)
|
|
165
|
+
for(int n=0;n<ndof1;n++)
|
|
166
|
+
{
|
|
167
|
+
int ip=0;
|
|
168
|
+
for(int i=0;i<nip0;i++)
|
|
169
|
+
for(int j=0;j<nip1;j++)
|
|
170
|
+
shape(ii,ip++) = shape0(m,i)*shape1(n,j);
|
|
171
|
+
ii++;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
INLINE const FiniteElement* Elements(int i) { return elements[i]; }
|
|
175
|
+
//int NElements() { return elements.Size();}
|
|
176
|
+
HD virtual ELEMENT_TYPE ElementType() const { return ET_POINT; }
|
|
177
|
+
|
|
178
|
+
INLINE TPHighOrderFE (Array<const FiniteElement *> & els)
|
|
179
|
+
{
|
|
180
|
+
//elements.SetSize(els.Size());
|
|
181
|
+
elements = els;
|
|
182
|
+
ndof = elements[0]->GetNDof()*elements[1]->GetNDof();
|
|
183
|
+
order = max2(elements[0]->Order(),elements[1]->Order());
|
|
184
|
+
}
|
|
185
|
+
HD virtual NGS_DLL_HEADER ~TPHighOrderFE () { ; }
|
|
186
|
+
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
class ProlongateCoefficientFunction : public CoefficientFunction
|
|
190
|
+
{
|
|
191
|
+
private:
|
|
192
|
+
shared_ptr<CoefficientFunction> coef;
|
|
193
|
+
int prolongateto;
|
|
194
|
+
int dimx,dimy;
|
|
195
|
+
public:
|
|
196
|
+
///
|
|
197
|
+
ProlongateCoefficientFunction(shared_ptr<CoefficientFunction> acoef,int aprolongateto,int adimension,int adimx,int adimy, bool ais_complex = false)
|
|
198
|
+
: CoefficientFunction(adimension,ais_complex), coef(acoef), prolongateto(aprolongateto), dimx(adimx), dimy(adimy)
|
|
199
|
+
{ ; }
|
|
200
|
+
///
|
|
201
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const;
|
|
202
|
+
///
|
|
203
|
+
virtual void Evaluate (const BaseMappedIntegrationRule & ir, BareSliceMatrix<double> values) const;
|
|
204
|
+
virtual void EvaluateStdRule (const BaseMappedIntegrationRule & ir, FlatMatrix<double> values) const;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
class ProlongateCoefficientFunctionVisualization : public CoefficientFunction
|
|
208
|
+
{
|
|
209
|
+
private:
|
|
210
|
+
const ProlongateCoefficientFunction & pcf;
|
|
211
|
+
public:
|
|
212
|
+
///
|
|
213
|
+
ProlongateCoefficientFunctionVisualization(const ProlongateCoefficientFunction & apcf)
|
|
214
|
+
: CoefficientFunction(apcf.Dimension(),apcf.IsComplex()), pcf(apcf)
|
|
215
|
+
{ ; }
|
|
216
|
+
///
|
|
217
|
+
using CoefficientFunction::Evaluate;
|
|
218
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const { return pcf.Evaluate(ip); }
|
|
219
|
+
///
|
|
220
|
+
virtual void Evaluate (const BaseMappedIntegrationRule & ir, FlatMatrix<double> values) const { pcf.EvaluateStdRule(ir,values); }
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
}
|
|
224
|
+
#endif // TPINTRULE_HPP
|
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
#ifndef FILE_TRIANGULAR
|
|
2
|
+
#define FILE_TRIANGULAR
|
|
3
|
+
|
|
4
|
+
/****************************************************************************/
|
|
5
|
+
/* File: triangular.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: Nov 2020 */
|
|
8
|
+
/****************************************************************************/
|
|
9
|
+
|
|
10
|
+
namespace ngbla
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
enum TRIG_SIDE { LowerLeft, UpperRight };
|
|
15
|
+
enum TRIG_NORMAL { NonNormalized = 0, Normalized = 1 };
|
|
16
|
+
constexpr TRIG_SIDE operator! (TRIG_SIDE s)
|
|
17
|
+
{ return (s == LowerLeft) ? UpperRight : LowerLeft; }
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
// Solve T X = Y
|
|
21
|
+
// rhs is overwritten by solution
|
|
22
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized,
|
|
23
|
+
typename TT, typename TX, ORDERING OT, ORDERING OX>
|
|
24
|
+
void TriangularSolve (BareSliceMatrix<TT,OT> T, SliceMatrix<TX,OX> X)
|
|
25
|
+
{
|
|
26
|
+
size_t n = X.Height();
|
|
27
|
+
|
|
28
|
+
if (n == 0) return;
|
|
29
|
+
if (n == 1)
|
|
30
|
+
{
|
|
31
|
+
if (NORM == NonNormalized)
|
|
32
|
+
X.Row(0) *= 1.0/T(0.0);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (n < 8)
|
|
37
|
+
{
|
|
38
|
+
if constexpr (SIDE == UpperRight)
|
|
39
|
+
for (size_t i = n; i-- > 0; )
|
|
40
|
+
{
|
|
41
|
+
for (size_t j = i+1; j < n; j++)
|
|
42
|
+
X.Row(i) -= T(i,j) * X.Row(j);
|
|
43
|
+
if (NORM==NonNormalized)
|
|
44
|
+
X.Row(i) *= 1.0/T(i,i);
|
|
45
|
+
}
|
|
46
|
+
else
|
|
47
|
+
for (size_t i = 0; i < n; i++)
|
|
48
|
+
{
|
|
49
|
+
for (size_t j = 0; j < i; j++)
|
|
50
|
+
X.Row(i) -= T(i,j) * X.Row(j);
|
|
51
|
+
if (NORM==NonNormalized)
|
|
52
|
+
X.Row(i) *= 1.0/T(i,i);
|
|
53
|
+
}
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if (X.Width() > 256)
|
|
61
|
+
{
|
|
62
|
+
size_t m = X.Width();
|
|
63
|
+
IntRange r1(0,m/2), r2(m/2,m);
|
|
64
|
+
TriangularSolve<SIDE,NORM> (T, X.Cols(r1));
|
|
65
|
+
TriangularSolve<SIDE,NORM> (T, X.Cols(r2));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
IntRange r1(0,n/2), r2(n/2,n);
|
|
71
|
+
auto T11 = T.Rows(r1).Cols(r1);
|
|
72
|
+
auto T12 = T.Rows(r1).Cols(r2).AddSize(r1.Size(), r2.Size());
|
|
73
|
+
auto T21 = T.Rows(r2).Cols(r1).AddSize(r2.Size(), r1.Size());
|
|
74
|
+
auto T22 = T.Rows(r2).Cols(r2);
|
|
75
|
+
auto X1 = X.Rows(r1);
|
|
76
|
+
auto X2 = X.Rows(r2);
|
|
77
|
+
|
|
78
|
+
if (SIDE == LowerLeft)
|
|
79
|
+
{
|
|
80
|
+
TriangularSolve<SIDE,NORM> (T11.Bare(), X1);
|
|
81
|
+
X2 -= T21 * X1;
|
|
82
|
+
TriangularSolve<SIDE,NORM> (T22.Bare(), X2);
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
{
|
|
86
|
+
TriangularSolve<SIDE,NORM> (T22.Bare(), X2);
|
|
87
|
+
X1 -= T12 * X2;
|
|
88
|
+
TriangularSolve<SIDE,NORM> (T11.Bare(), X1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
extern NGS_DLL_HEADER void TriangularSolveLL (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
93
|
+
template <> inline void TriangularSolve<LowerLeft,NonNormalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
94
|
+
{
|
|
95
|
+
TriangularSolveLL(T,X);
|
|
96
|
+
}
|
|
97
|
+
extern NGS_DLL_HEADER void TriangularSolveLLN (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
98
|
+
template <> inline void TriangularSolve<LowerLeft,Normalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
99
|
+
{
|
|
100
|
+
TriangularSolveLLN(T,X);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
extern NGS_DLL_HEADER void TriangularSolveUR (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
104
|
+
template <> inline void TriangularSolve<UpperRight,NonNormalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
105
|
+
{
|
|
106
|
+
TriangularSolveUR(T,X);
|
|
107
|
+
}
|
|
108
|
+
extern NGS_DLL_HEADER void TriangularSolveURN (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
109
|
+
template <> inline void TriangularSolve<UpperRight,Normalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
110
|
+
{
|
|
111
|
+
TriangularSolveURN(T,X);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT, typename TX,
|
|
117
|
+
typename enable_if<IsConvertibleToBareSliceMatrix<TT>(),int>::type = 0,
|
|
118
|
+
typename enable_if<IsConvertibleToSliceMatrix<TX>(),int>::type = 0>
|
|
119
|
+
void TriangularSolve (const TT & T, TX && X)
|
|
120
|
+
{
|
|
121
|
+
TriangularSolve<SIDE,NORM> (make_BareSliceMatrix(T), make_SliceMatrix(X));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT,
|
|
125
|
+
typename enable_if<IsConvertibleToSliceMatrix<TT>(),int>::type = 0>
|
|
126
|
+
void TriangularSolve (const TT & T, FlatVector<> x)
|
|
127
|
+
{
|
|
128
|
+
TriangularSolve<SIDE,NORM> (make_BareSliceMatrix(T), SliceMatrix<>(x.Size(),1,1,&x(0)));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
// Y = T X
|
|
136
|
+
// input X is overwritten
|
|
137
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized,
|
|
138
|
+
typename TT, typename TX, ORDERING OT, ORDERING OX>
|
|
139
|
+
void TriangularMult2 (BareSliceMatrix<TT,OT> T, SliceMatrix<TX,OX> X)
|
|
140
|
+
{
|
|
141
|
+
// static Timer t("TriangularMult generic, rec"); RegionTimer r(t);
|
|
142
|
+
|
|
143
|
+
size_t n = X.Height();
|
|
144
|
+
|
|
145
|
+
if (n == 0) return;
|
|
146
|
+
if (n == 1)
|
|
147
|
+
{
|
|
148
|
+
if (NORM == NonNormalized)
|
|
149
|
+
X.Row(0) *= T(0.0);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (n < 8) {
|
|
154
|
+
if constexpr (SIDE == UpperRight) {
|
|
155
|
+
for (size_t i = 0; i < n; i++)
|
|
156
|
+
{
|
|
157
|
+
if (NORM==NonNormalized)
|
|
158
|
+
X.Row(i) *= T(i,i);
|
|
159
|
+
for (size_t j = i+1; j < n; j++)
|
|
160
|
+
X.Row(i) += T(i,j) * X.Row(j);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
for (size_t i = n; i > 0; i--)
|
|
165
|
+
{
|
|
166
|
+
size_t im = i-1;
|
|
167
|
+
if (NORM==NonNormalized)
|
|
168
|
+
X.Row(im) *= T(im,im);
|
|
169
|
+
for (size_t j = 0; j < im; j++)
|
|
170
|
+
X.Row(im) += T(im,j) * X.Row(j);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
size_t n2 = n/2;
|
|
177
|
+
// if (n2 > 4) n2 = n2 - n2%4;
|
|
178
|
+
IntRange r1(0,n2), r2(n2,n);
|
|
179
|
+
auto T11 = T.Rows(r1).Cols(r1);
|
|
180
|
+
auto T12 = T.Rows(r1).Cols(r2).AddSize(r1.Size(), r2.Size());;
|
|
181
|
+
auto T21 = T.Rows(r2).Cols(r1).AddSize(r2.Size(), r1.Size());
|
|
182
|
+
auto T22 = T.Rows(r2).Cols(r2);
|
|
183
|
+
auto X1 = X.Rows(r1);
|
|
184
|
+
auto X2 = X.Rows(r2);
|
|
185
|
+
|
|
186
|
+
if (SIDE == LowerLeft)
|
|
187
|
+
{
|
|
188
|
+
TriangularMult2<SIDE,NORM> (T22.Bare(), X2);
|
|
189
|
+
X2 += T21 * X1;
|
|
190
|
+
TriangularMult2<SIDE,NORM> (T11.Bare(), X1);
|
|
191
|
+
}
|
|
192
|
+
else
|
|
193
|
+
{
|
|
194
|
+
TriangularMult2<SIDE,NORM> (T11.Bare(), X1);
|
|
195
|
+
X1 += T12 * X2;
|
|
196
|
+
TriangularMult2<SIDE,NORM> (T22.Bare(), X2);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Y = T X
|
|
201
|
+
// input X is overwritten
|
|
202
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized,
|
|
203
|
+
typename TT, typename TX, ORDERING OT, ORDERING OX>
|
|
204
|
+
void TriangularMult (BareSliceMatrix<TT,OT> T, SliceMatrix<TX,OX> X)
|
|
205
|
+
{
|
|
206
|
+
static Timer t("TriangularMult generic"); RegionTimer r(t);
|
|
207
|
+
size_t i = 0;
|
|
208
|
+
constexpr size_t bw = 256;
|
|
209
|
+
for ( ; i+bw <= X.Width(); i += bw)
|
|
210
|
+
TriangularMult2<SIDE,NORM> (T, X.Cols(i,i+bw));
|
|
211
|
+
if (i < X.Width())
|
|
212
|
+
TriangularMult2<SIDE,NORM> (T, X.Cols(i,X.Width()));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
extern NGS_DLL_HEADER void TriangularMultLL (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
217
|
+
extern NGS_DLL_HEADER void TriangularMultLLN (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
218
|
+
extern NGS_DLL_HEADER void TriangularMultLL (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X);
|
|
219
|
+
extern NGS_DLL_HEADER void TriangularMultLLN (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X);
|
|
220
|
+
|
|
221
|
+
template <> inline void TriangularMult<LowerLeft,NonNormalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
222
|
+
{
|
|
223
|
+
TriangularMultLL(T,X);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
template <> inline void TriangularMult<LowerLeft,Normalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
227
|
+
{
|
|
228
|
+
TriangularMultLLN(T,X);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
template <> inline void TriangularMult<LowerLeft,NonNormalized> (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X)
|
|
232
|
+
{
|
|
233
|
+
TriangularMultLL(T,X);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
template <> inline void TriangularMult<LowerLeft,Normalized> (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X)
|
|
237
|
+
{
|
|
238
|
+
TriangularMultLLN(T,X);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
extern NGS_DLL_HEADER void TriangularMultUR (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
244
|
+
extern NGS_DLL_HEADER void TriangularMultURN (BareSliceMatrix<double> T, SliceMatrix<double> X);
|
|
245
|
+
extern NGS_DLL_HEADER void TriangularMultUR (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X);
|
|
246
|
+
extern NGS_DLL_HEADER void TriangularMultURN (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X);
|
|
247
|
+
|
|
248
|
+
template <> inline void TriangularMult<UpperRight,NonNormalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
249
|
+
{
|
|
250
|
+
TriangularMultUR(T,X);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
template <> inline void TriangularMult<UpperRight,Normalized> (BareSliceMatrix<double> T, SliceMatrix<double> X)
|
|
254
|
+
{
|
|
255
|
+
TriangularMultURN(T,X);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
template <> inline void TriangularMult<UpperRight,NonNormalized> (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X)
|
|
259
|
+
{
|
|
260
|
+
TriangularMultUR(T,X);
|
|
261
|
+
}
|
|
262
|
+
template <> inline void TriangularMult<UpperRight,Normalized> (BareSliceMatrix<double,ColMajor> T, SliceMatrix<double> X)
|
|
263
|
+
{
|
|
264
|
+
TriangularMultURN(T,X);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT, typename TX,
|
|
270
|
+
typename enable_if<IsConvertibleToSliceMatrix<TT>(),int>::type = 0,
|
|
271
|
+
typename enable_if<IsConvertibleToSliceMatrix<TX>(),int>::type = 0>
|
|
272
|
+
void TriangularMult (const TT & T, TX & X)
|
|
273
|
+
{
|
|
274
|
+
TriangularMult<SIDE,NORM> (make_BareSliceMatrix(T), make_SliceMatrix(X));
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT,
|
|
278
|
+
typename enable_if<IsConvertibleToSliceMatrix<TT>(),int>::type = 0>
|
|
279
|
+
void TriangularMult (const TT & T, FlatVector<> x)
|
|
280
|
+
{
|
|
281
|
+
TriangularMult<SIDE,NORM> (make_BareSliceMatrix(T), SliceMatrix<>(x.Size(),1,1,&x(0)));
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
// X = X * T
|
|
286
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT, typename TX,
|
|
287
|
+
typename enable_if<IsConvertibleToSliceMatrix<TT>(),int>::type = 0,
|
|
288
|
+
typename enable_if<IsConvertibleToSliceMatrix<TX>(),int>::type = 0>
|
|
289
|
+
void MultTriangular (TX & X, const TT & T)
|
|
290
|
+
{
|
|
291
|
+
TriangularMult<!SIDE,NORM> (Trans(make_BareSliceMatrix(T)), Trans(make_SliceMatrix(X)));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized,
|
|
296
|
+
typename TT, typename TX, ORDERING OT, ORDERING OX>
|
|
297
|
+
void MultTriangular (SliceMatrix<TX,OX> X, SliceMatrix<TT,OT> T)
|
|
298
|
+
{
|
|
299
|
+
TriangularMult<!SIDE,NORM> (Trans(T), Trans(X));
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
extern NGS_DLL_HEADER void MultTriangularLLN (SliceMatrix<double> X, BareSliceMatrix<double> T);
|
|
303
|
+
template <> inline void MultTriangular<LowerLeft,Normalized> (SliceMatrix<double> X, SliceMatrix<double> T)
|
|
304
|
+
{
|
|
305
|
+
MultTriangularLLN(X,T);
|
|
306
|
+
}
|
|
307
|
+
extern NGS_DLL_HEADER void MultTriangularUR (SliceMatrix<double> X, BareSliceMatrix<double> T);
|
|
308
|
+
template <> inline void MultTriangular<UpperRight> (SliceMatrix<double> X, SliceMatrix<double> T)
|
|
309
|
+
{
|
|
310
|
+
MultTriangularUR(X,T);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, ORDERING OT, ORDERING OXY>
|
|
316
|
+
extern NGS_DLL_HEADER void GeneralizedTriangularMult_SM (SliceMatrix<double, OT> T,
|
|
317
|
+
SliceMatrix<double, OXY> X,
|
|
318
|
+
SliceMatrix<double, OXY> Y);
|
|
319
|
+
|
|
320
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT, typename TX, typename TY>
|
|
321
|
+
void GeneralizedTriangularMult (const TT & T,
|
|
322
|
+
const TX & X,
|
|
323
|
+
const TY & Y)
|
|
324
|
+
{
|
|
325
|
+
GeneralizedTriangularMult_SM<SIDE,NORM> (make_SliceMatrix(T), make_SliceMatrix(X), make_SliceMatrix(Y));
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, ORDERING OT, ORDERING OXY>
|
|
331
|
+
extern NGS_DLL_HEADER void GeneralizedTriangularSub_SM (SliceMatrix<double, OT> T,
|
|
332
|
+
SliceMatrix<double, OXY> X,
|
|
333
|
+
SliceMatrix<double, OXY> Y);
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT, typename TX, typename TY>
|
|
337
|
+
void GeneralizedTriangularSub (const TT & T,
|
|
338
|
+
const TX & X,
|
|
339
|
+
const TY & Y)
|
|
340
|
+
{
|
|
341
|
+
GeneralizedTriangularSub_SM<SIDE,NORM> (make_SliceMatrix(T), make_SliceMatrix(X), make_SliceMatrix(Y));
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
/*
|
|
351
|
+
static Timer triginv_loops ("TriangularInvert loops");
|
|
352
|
+
static Timer triginv_L1 ("TriangularInvert L1");
|
|
353
|
+
static Timer triginv_L2 ("TriangularInvert L2");
|
|
354
|
+
static Timer triginv_R1 ("TriangularInvert R1");
|
|
355
|
+
static Timer triginv_R2 ("TriangularInvert r2");
|
|
356
|
+
*/
|
|
357
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized,
|
|
358
|
+
typename TT, ORDERING TO>
|
|
359
|
+
void TriangularInvert (SliceMatrix<TT,TO> T)
|
|
360
|
+
{
|
|
361
|
+
size_t n = T.Height();
|
|
362
|
+
|
|
363
|
+
if (n == 0) return;
|
|
364
|
+
if (n == 1)
|
|
365
|
+
{
|
|
366
|
+
if (NORM == NonNormalized)
|
|
367
|
+
T(0,0) = 1.0/T(0,0);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
if (n < 16)
|
|
372
|
+
{
|
|
373
|
+
// RegionTimer reg(triginv_loops);
|
|
374
|
+
for (size_t j = 0; j < n; j++)
|
|
375
|
+
{
|
|
376
|
+
auto rowj = T.Row(j);
|
|
377
|
+
TT invdiag = 1.0;
|
|
378
|
+
if constexpr (NORM == NonNormalized) {
|
|
379
|
+
invdiag = 1.0/T(j,j);
|
|
380
|
+
|
|
381
|
+
if constexpr (SIDE==LowerLeft) {
|
|
382
|
+
rowj.Range(0,j) *= invdiag;
|
|
383
|
+
}
|
|
384
|
+
else
|
|
385
|
+
rowj.Range(j+1,n) *= invdiag;
|
|
386
|
+
rowj(j) = invdiag;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if constexpr (SIDE == UpperRight) {
|
|
390
|
+
for (size_t k = 0; k < j; k++)
|
|
391
|
+
{
|
|
392
|
+
auto rowk = T.Row(k);
|
|
393
|
+
TT help = rowk(j);
|
|
394
|
+
rowk.Range(j+1,n) -= help * rowj.Range(j+1,n);
|
|
395
|
+
rowk(j) = -help*invdiag;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
else
|
|
399
|
+
for (size_t k = j+1; k < n; k++)
|
|
400
|
+
{
|
|
401
|
+
auto rowk = T.Row(k);
|
|
402
|
+
TT help = rowk(j);
|
|
403
|
+
rowk.Range(j) -= help * rowj.Range(j);
|
|
404
|
+
rowk(j) = -help*invdiag;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
size_t n2 = n/2;
|
|
412
|
+
IntRange r1(0,n2), r2(n2,n);
|
|
413
|
+
auto T11 = T.Rows(r1).Cols(r1);
|
|
414
|
+
auto T12 = T.Rows(r1).Cols(r2);
|
|
415
|
+
auto T21 = T.Rows(r2).Cols(r1);
|
|
416
|
+
auto T22 = T.Rows(r2).Cols(r2);
|
|
417
|
+
|
|
418
|
+
TriangularInvert<SIDE,NORM> (T11);
|
|
419
|
+
TriangularInvert<SIDE,NORM> (T22);
|
|
420
|
+
|
|
421
|
+
if (SIDE == LowerLeft)
|
|
422
|
+
{
|
|
423
|
+
T21 *= -1;
|
|
424
|
+
// triginv_L1.Start();
|
|
425
|
+
TriangularMult<SIDE,NORM> (T22, T21);
|
|
426
|
+
// triginv_L1.Stop();
|
|
427
|
+
// triginv_L2.Start();
|
|
428
|
+
// TriangularMult<!SIDE,NORM> (Trans(T11), Trans(T21));
|
|
429
|
+
MultTriangular<SIDE,NORM> (T21, T11);
|
|
430
|
+
// triginv_L2.Stop();
|
|
431
|
+
}
|
|
432
|
+
else
|
|
433
|
+
{
|
|
434
|
+
T12 *= -1;
|
|
435
|
+
// triginv_R1.Start();
|
|
436
|
+
TriangularMult<SIDE,NORM> (T11, T12);
|
|
437
|
+
// triginv_R1.Stop();
|
|
438
|
+
// triginv_R2.Start();
|
|
439
|
+
// TriangularMult<!SIDE,NORM> (Trans(T22), Trans(T12));
|
|
440
|
+
MultTriangular<SIDE,NORM> (T12, T22);
|
|
441
|
+
// triginv_R2.Stop();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
template <TRIG_SIDE SIDE, TRIG_NORMAL NORM=NonNormalized, typename TT,
|
|
446
|
+
typename enable_if<IsConvertibleToSliceMatrix<TT>(),int>::type = 0>
|
|
447
|
+
void TriangularInvert (const TT & T)
|
|
448
|
+
{
|
|
449
|
+
TriangularInvert<SIDE,NORM> (make_SliceMatrix(T));
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
extern NGS_DLL_HEADER void CalcLU (SliceMatrix<double> A, FlatArray<int> p);
|
|
457
|
+
extern NGS_DLL_HEADER void InverseFromLU (SliceMatrix<double> A, FlatArray<int> p);
|
|
458
|
+
extern NGS_DLL_HEADER void SolveFromLU (SliceMatrix<double> A, FlatArray<int> p, SliceMatrix<double,ColMajor> X);
|
|
459
|
+
extern NGS_DLL_HEADER void SolveTransFromLU (SliceMatrix<double> A, FlatArray<int> p, SliceMatrix<double,ColMajor> X);
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
}
|
|
465
|
+
#endif
|