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,1381 @@
|
|
|
1
|
+
#ifndef FILE_HCURL_EQUATIONS
|
|
2
|
+
#define FILE_HCURL_EQUATIONS
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: hcurl_equations.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 10. Feb. 2002 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include "hcurlhdiv_dshape.hpp"
|
|
11
|
+
#include "hcurlfe.hpp"
|
|
12
|
+
#include "diffop.hpp"
|
|
13
|
+
#include "coefficient.hpp"
|
|
14
|
+
#include "bdbequations.hpp"
|
|
15
|
+
|
|
16
|
+
namespace ngfem
|
|
17
|
+
{
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
|
|
22
|
+
Maxwell integrators:
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Finite Element Integrators for H(curl)
|
|
26
|
+
|
|
27
|
+
Mapping with covariant transformation
|
|
28
|
+
|
|
29
|
+
Requires H(curl) finite elements
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/// Identity operator, covariant transformation
|
|
37
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
38
|
+
class DiffOpIdEdge : public DiffOp<DiffOpIdEdge<D, FEL> >
|
|
39
|
+
{
|
|
40
|
+
public:
|
|
41
|
+
enum { DIM = 1 };
|
|
42
|
+
enum { DIM_SPACE = D };
|
|
43
|
+
enum { DIM_ELEMENT = D };
|
|
44
|
+
enum { DIM_DMAT = D };
|
|
45
|
+
enum { DIFFORDER = 0 };
|
|
46
|
+
|
|
47
|
+
static const FEL & Cast (const FiniteElement & fel)
|
|
48
|
+
{ return static_cast<const FEL&> (fel); }
|
|
49
|
+
|
|
50
|
+
static constexpr bool SUPPORT_PML = true;
|
|
51
|
+
template <typename MIP, typename MAT>
|
|
52
|
+
static void GenerateMatrix (const FiniteElement & fel,
|
|
53
|
+
const MIP & mip,
|
|
54
|
+
MAT && mat, LocalHeap & lh)
|
|
55
|
+
{
|
|
56
|
+
// GenerateMatrix2 (fel, mip, SliceIfPossible<double> (Trans(mat)), lh);
|
|
57
|
+
GenerateMatrix2 (fel, mip, make_BareSliceMatrix (Trans(mat)), lh);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
61
|
+
static void GenerateMatrix2 (const AFEL & fel, const MIP & mip,
|
|
62
|
+
MAT && mat, LocalHeap & lh)
|
|
63
|
+
{
|
|
64
|
+
HeapReset hr(lh);
|
|
65
|
+
mat = Cast(fel).GetShape(mip.IP(), lh) * mip.GetJacobianInverse();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
template <typename AFEL>
|
|
69
|
+
static void GenerateMatrix2 (const AFEL & fel,
|
|
70
|
+
const MappedIntegrationPoint<D,D> & mip,
|
|
71
|
+
BareSliceMatrix<> mat, LocalHeap & lh)
|
|
72
|
+
{
|
|
73
|
+
Cast(fel).CalcMappedShape (mip, mat);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
static int DimRef() { return D; }
|
|
80
|
+
|
|
81
|
+
template <typename IP, typename MAT>
|
|
82
|
+
static void GenerateMatrixRef (const FiniteElement & fel, const IP & ip,
|
|
83
|
+
MAT && mat, LocalHeap & lh)
|
|
84
|
+
{
|
|
85
|
+
Cast(fel).CalcShape (ip, Trans(mat));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
template <typename MIP, typename MAT>
|
|
89
|
+
static void CalcTransformationMatrix (const MIP & mip,
|
|
90
|
+
MAT & mat, LocalHeap & lh)
|
|
91
|
+
{
|
|
92
|
+
mat = Trans(static_cast<const MappedIntegrationPoint<D,D>&>(mip).GetJacobianInverse());
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
static void GenerateMatrixIR (const FiniteElement & fel,
|
|
100
|
+
const MappedIntegrationRule<D,D> & mir,
|
|
101
|
+
BareSliceMatrix<double,ColMajor> mat, LocalHeap & lh)
|
|
102
|
+
{
|
|
103
|
+
Cast(fel).CalcMappedShape (mir, Trans(mat));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
107
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
108
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
109
|
+
{
|
|
110
|
+
Cast(fel).CalcMappedShape (mir, mat);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
115
|
+
static void Apply (const FEL1 & fel, const MIP & mip,
|
|
116
|
+
const TVX & x, TVY && y,
|
|
117
|
+
LocalHeap & lh)
|
|
118
|
+
{
|
|
119
|
+
// typedef typename TVX::TSCAL TSCAL;
|
|
120
|
+
typedef decltype(RemoveConst(x(0))) TSCAL;
|
|
121
|
+
HeapReset hr(lh);
|
|
122
|
+
Vec<D,TSCAL> hx;
|
|
123
|
+
hx = Trans (Cast(fel).GetShape (mip.IP(), lh)) * x;
|
|
124
|
+
y = Trans (mip.GetJacobianInverse()) * hx;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
template <typename FEL1, class TVX, class TVY>
|
|
128
|
+
static void Apply (const FEL1 & fel, const MappedIntegrationPoint<D,D> & mip,
|
|
129
|
+
const TVX & x, TVY && y,
|
|
130
|
+
LocalHeap & lh)
|
|
131
|
+
{
|
|
132
|
+
HeapReset hr(lh);
|
|
133
|
+
FlatMatrixFixWidth<D> shape(fel.GetNDof(), lh);
|
|
134
|
+
Cast(fel).CalcMappedShape (mip, shape);
|
|
135
|
+
y = Trans(shape) * x;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
140
|
+
static void ApplyTrans (const FEL1 & fel, const MIP & mip,
|
|
141
|
+
const TVX & x, TVY & y,
|
|
142
|
+
LocalHeap & lh)
|
|
143
|
+
{
|
|
144
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
145
|
+
HeapReset hr(lh);
|
|
146
|
+
Vec<D,TSCAL> hx;
|
|
147
|
+
hx = mip.GetJacobianInverse() * x;
|
|
148
|
+
y.Range(0,fel.GetNDof()) = Cast(fel).GetShape (mip.IP(),lh) * hx;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
template <typename FEL1, class TVX, class TVY>
|
|
152
|
+
static void ApplyTrans (const FEL1 & fel, const MappedIntegrationPoint<D,D> & mip,
|
|
153
|
+
const TVX & x, TVY & y,
|
|
154
|
+
LocalHeap & lh)
|
|
155
|
+
{
|
|
156
|
+
HeapReset hr(lh);
|
|
157
|
+
FlatMatrixFixWidth<D> shape(fel.GetNDof(), lh);
|
|
158
|
+
Cast(fel).CalcMappedShape (mip, shape);
|
|
159
|
+
y.Range(0,fel.GetNDof()) = shape * x;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
using DiffOp<DiffOpIdEdge<D, FEL> >::ApplyIR;
|
|
163
|
+
template <class MIR>
|
|
164
|
+
static void ApplyIR (const FiniteElement & fel, const MIR & mir,
|
|
165
|
+
BareSliceVector<double> x, SliceMatrix<double> y,
|
|
166
|
+
LocalHeap & lh)
|
|
167
|
+
{
|
|
168
|
+
Cast(fel).Evaluate (mir, x, y);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
173
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
174
|
+
{
|
|
175
|
+
Cast(fel).Evaluate (mir, x, y);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
179
|
+
BareSliceVector<Complex> x, BareSliceMatrix<SIMD<Complex>> y)
|
|
180
|
+
{
|
|
181
|
+
Cast(fel).Evaluate (mir, x, y);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
185
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
186
|
+
{
|
|
187
|
+
Cast(fel).AddTrans (mir, y, x);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
191
|
+
BareSliceMatrix<SIMD<Complex>> y, BareSliceVector<Complex> x)
|
|
192
|
+
{
|
|
193
|
+
Cast(fel).AddTrans (mir, y, x);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static shared_ptr<CoefficientFunction>
|
|
197
|
+
DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
198
|
+
shared_ptr<CoefficientFunction> dir,
|
|
199
|
+
bool Eulerian)
|
|
200
|
+
{
|
|
201
|
+
if (Eulerian) throw Exception("DiffShape Eulerian not implemented for DiffOpIdEdge");
|
|
202
|
+
return -TransposeCF(dir->Operator("Grad")) * proxy;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
/// Operator $curl$, Piola-transformation
|
|
214
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
215
|
+
class DiffOpCurlEdge : public DiffOp<DiffOpCurlEdge<D, FEL> >
|
|
216
|
+
{
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
template <typename FEL> class DiffOpCurlEdge<2,FEL>
|
|
220
|
+
: public DiffOp<DiffOpCurlEdge<2, FEL> >
|
|
221
|
+
{
|
|
222
|
+
public:
|
|
223
|
+
enum { DIM = 1 };
|
|
224
|
+
enum { DIM_SPACE = 2 };
|
|
225
|
+
enum { DIM_ELEMENT = 2 };
|
|
226
|
+
enum { DIM_DMAT = 1 };
|
|
227
|
+
enum { DIFFORDER = 1 };
|
|
228
|
+
|
|
229
|
+
static string Name() { return "curl"; }
|
|
230
|
+
|
|
231
|
+
static constexpr bool SUPPORT_PML = true;
|
|
232
|
+
|
|
233
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
234
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
235
|
+
MAT && mat, LocalHeap & lh)
|
|
236
|
+
{
|
|
237
|
+
HeapReset hr(lh);
|
|
238
|
+
mat = 1.0/mip.GetJacobiDet() *
|
|
239
|
+
Trans (static_cast<const FEL&> (fel).GetCurlShape(mip.IP(), lh));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
243
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
244
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
245
|
+
{
|
|
246
|
+
static_cast<const FEL&>(fel).CalcMappedCurlShape (mir, mat);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
250
|
+
static void Apply (const AFEL & fel, const MIP & mip,
|
|
251
|
+
const TVX & x, TVY && y,
|
|
252
|
+
LocalHeap & lh)
|
|
253
|
+
{
|
|
254
|
+
HeapReset hr(lh);
|
|
255
|
+
y = (1.0/mip.GetJacobiDet()) *
|
|
256
|
+
(Trans (static_cast<const FEL&>(fel).GetCurlShape(mip.IP(), lh)) * x);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
using DiffOp<DiffOpCurlEdge<2> >::ApplySIMDIR;
|
|
260
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
261
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
262
|
+
{
|
|
263
|
+
static_cast<const FEL&> (fel).EvaluateCurl (mir, x, y);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
using DiffOp<DiffOpCurlEdge<2> >::AddTransSIMDIR;
|
|
267
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
268
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
269
|
+
{
|
|
270
|
+
static_cast<const FEL&> (fel).AddCurlTrans (mir, y, x);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
static shared_ptr<CoefficientFunction>
|
|
274
|
+
DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
275
|
+
shared_ptr<CoefficientFunction> dir,
|
|
276
|
+
bool Eulerian)
|
|
277
|
+
{
|
|
278
|
+
if (Eulerian) throw Exception("DiffShape Eulerian not implemented for DiffOpCurlEdge");
|
|
279
|
+
auto grad = dir->Operator("Grad");
|
|
280
|
+
return -TraceCF(grad) * proxy;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
template <typename FEL> class DiffOpCurlEdge<3,FEL> : public DiffOp<DiffOpCurlEdge<3,FEL> >
|
|
286
|
+
{
|
|
287
|
+
public:
|
|
288
|
+
enum { DIM = 1 };
|
|
289
|
+
enum { DIM_SPACE = 3 };
|
|
290
|
+
enum { DIM_ELEMENT = 3 };
|
|
291
|
+
enum { DIM_DMAT = 3 };
|
|
292
|
+
enum { DIFFORDER = 1 };
|
|
293
|
+
|
|
294
|
+
static string Name() { return "curl"; }
|
|
295
|
+
|
|
296
|
+
static constexpr bool SUPPORT_PML = true;
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
template <typename MIP, typename MAT>
|
|
300
|
+
static void GenerateMatrix (const FiniteElement & fel,
|
|
301
|
+
const MIP & mip,
|
|
302
|
+
MAT && mat, LocalHeap & lh)
|
|
303
|
+
{
|
|
304
|
+
// GenerateMatrix2 (fel, mip, SliceIfPossible<double> (Trans(mat)), lh);
|
|
305
|
+
GenerateMatrix2 (fel, mip, make_BareSliceMatrix (Trans(mat)), lh);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
309
|
+
static void GenerateMatrix2 (const AFEL & fel, const MIP & mip,
|
|
310
|
+
MAT && mat, LocalHeap & lh)
|
|
311
|
+
{
|
|
312
|
+
// cout << "diffopcurl: slow matrix" << endl;
|
|
313
|
+
// cout << "mtype = " << typeid(mat).name() << endl;
|
|
314
|
+
|
|
315
|
+
mat = (1.0/mip.GetJacobiDet())
|
|
316
|
+
* (static_cast<const FEL&>(fel).GetCurlShape(mip.IP(), lh) * Trans(mip.GetJacobian()));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
template <typename AFEL>
|
|
320
|
+
static void GenerateMatrix2 (const AFEL & fel,
|
|
321
|
+
const MappedIntegrationPoint<3,3> & mip,
|
|
322
|
+
BareSliceMatrix<> mat, LocalHeap & lh)
|
|
323
|
+
{
|
|
324
|
+
static_cast<const FEL&> (fel).CalcMappedCurlShape (mip, mat);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
static void GenerateMatrixIR (const FiniteElement & fel,
|
|
328
|
+
const MappedIntegrationRule<3,3> & mir,
|
|
329
|
+
BareSliceMatrix<double,ColMajor> mat, LocalHeap & lh)
|
|
330
|
+
{
|
|
331
|
+
static_cast<const FEL&> (fel).CalcMappedCurlShape (mir, Trans(mat));
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
335
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
336
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
337
|
+
{
|
|
338
|
+
static_cast<const FEL&>(fel).CalcMappedCurlShape (mir, mat);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
343
|
+
static void Apply (const AFEL & fel, const MIP & mip,
|
|
344
|
+
const TVX & x, TVY && y,
|
|
345
|
+
LocalHeap & lh)
|
|
346
|
+
{
|
|
347
|
+
// typedef typename TVX::TSCAL TSCAL;
|
|
348
|
+
// Vec<3,TSCAL> hx;
|
|
349
|
+
auto hx = static_cast<const FEL&>(fel).EvaluateCurlShape (mip.IP(), x, lh);
|
|
350
|
+
y = (1.0/mip.GetJacobiDet()) * (mip.GetJacobian() * hx);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
355
|
+
static void ApplyTrans (const AFEL & fel, const MIP & mip,
|
|
356
|
+
const TVX & x, TVY & y,
|
|
357
|
+
LocalHeap & lh)
|
|
358
|
+
{
|
|
359
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
360
|
+
|
|
361
|
+
Vec<3,TSCAL> hx;
|
|
362
|
+
hx = (1.0/mip.GetJacobiDet()) * (Trans (mip.GetJacobian()) * x);
|
|
363
|
+
y.Range(0,fel.GetNDof()) = static_cast<const FEL&>(fel).GetCurlShape(mip.IP(), lh) * hx;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
using DiffOp<DiffOpCurlEdge<3> >::ApplySIMDIR;
|
|
367
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
368
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
369
|
+
{
|
|
370
|
+
static_cast<const FEL&> (fel).EvaluateCurl (mir, x, y);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
using DiffOp<DiffOpCurlEdge<3> >::AddTransSIMDIR;
|
|
374
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
375
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
376
|
+
{
|
|
377
|
+
static_cast<const FEL&> (fel).AddCurlTrans (mir, y, x);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
381
|
+
BareSliceMatrix<SIMD<Complex>> y, BareSliceVector<Complex> x)
|
|
382
|
+
{
|
|
383
|
+
static_cast<const FEL&> (fel).AddCurlTrans (mir, y, x);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
static shared_ptr<CoefficientFunction>
|
|
387
|
+
DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
388
|
+
shared_ptr<CoefficientFunction> dir,
|
|
389
|
+
bool Eulerian)
|
|
390
|
+
{
|
|
391
|
+
if (Eulerian) throw Exception("DiffShape Eulerian not implemented for DiffOpCurlEdge");
|
|
392
|
+
auto grad = dir->Operator("Grad");
|
|
393
|
+
return grad * proxy - TraceCF(grad) * proxy;
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
// \int_{C} v.\tau
|
|
414
|
+
template <int D>
|
|
415
|
+
class DiffOpTangentialComponentEdge : public DiffOp<DiffOpTangentialComponentEdge<D> >
|
|
416
|
+
{
|
|
417
|
+
public:
|
|
418
|
+
enum { DIM = D };
|
|
419
|
+
enum { DIM_SPACE = D };
|
|
420
|
+
enum { DIM_ELEMENT = D };
|
|
421
|
+
enum { DIM_DMAT = 1 };
|
|
422
|
+
enum { DIFFORDER = 0 };
|
|
423
|
+
static constexpr bool SUPPORT_PML = true;
|
|
424
|
+
|
|
425
|
+
template <typename FEL, typename MIP, typename MAT>
|
|
426
|
+
static void GenerateMatrix (const FEL & fel, const MIP & mip,
|
|
427
|
+
MAT & mat, LocalHeap & lh)
|
|
428
|
+
{
|
|
429
|
+
Vec<D> tv = mip.GetTV();
|
|
430
|
+
Vec<D> tv_JI = mip.GetJacobianInverse () * tv;
|
|
431
|
+
|
|
432
|
+
mat = Trans ( fel.GetShape(mip.IP(), lh) * tv_JI );
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
/// Identity on codim 2
|
|
438
|
+
template <int D, typename FEL = HCurlFiniteElement<D-2> >
|
|
439
|
+
class DiffOpIdBBoundaryEdge : public DiffOp<DiffOpIdBBoundaryEdge<D,FEL> >
|
|
440
|
+
{
|
|
441
|
+
public:
|
|
442
|
+
enum { DIM = 1 };
|
|
443
|
+
enum { DIM_SPACE = D };
|
|
444
|
+
enum { DIM_ELEMENT = D-2 };
|
|
445
|
+
enum { DIM_DMAT = D };
|
|
446
|
+
enum { DIFFORDER = 0 };
|
|
447
|
+
static constexpr bool SUPPORT_PML = true;
|
|
448
|
+
|
|
449
|
+
template <typename FEL1, typename MIP, typename MAT>
|
|
450
|
+
static void GenerateMatrix (const FEL1 & fel, const MIP & mip,
|
|
451
|
+
MAT && mat, LocalHeap & lh)
|
|
452
|
+
{
|
|
453
|
+
mat = Trans (mip.GetJacobianInverse ()) *
|
|
454
|
+
Trans (static_cast<const FEL&> (fel).GetShape(mip.IP(),lh));
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
458
|
+
static void Apply (const FEL1 & fel, const MIP & mip,
|
|
459
|
+
const TVX & x, TVY && y,
|
|
460
|
+
LocalHeap & lh)
|
|
461
|
+
{
|
|
462
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
463
|
+
|
|
464
|
+
Vec<DIM_ELEMENT,TSCAL> hx;
|
|
465
|
+
hx = Trans (static_cast<const FEL&> (fel).GetShape (mip.IP(),lh)) * x;
|
|
466
|
+
y = Trans (mip.GetJacobianInverse()) * hx;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
470
|
+
static void ApplyTrans (const FEL1 & fel, const MIP & mip,
|
|
471
|
+
const TVX & x, TVY & y,
|
|
472
|
+
LocalHeap & lh)
|
|
473
|
+
{
|
|
474
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
475
|
+
|
|
476
|
+
Vec<DIM_ELEMENT,TSCAL> hx;
|
|
477
|
+
hx = mip.GetJacobianInverse() * x;
|
|
478
|
+
y.Range(0, fel.GetNDof()) = static_cast<const FEL&> (fel).GetShape (mip.IP(),lh) * hx;
|
|
479
|
+
|
|
480
|
+
/*
|
|
481
|
+
FlatMatrixFixWidth<DIM_ELEMENT> mshape (y.Height(), &hv(0));
|
|
482
|
+
FlatMatrix<> mshape2 (y.Height(), DIM_ELEMENT, &hv(0));
|
|
483
|
+
y = mshape2 * hx;
|
|
484
|
+
*/
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
488
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
489
|
+
{
|
|
490
|
+
static_cast<const FEL&> (fel).Evaluate (mir, x, y);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
494
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
495
|
+
{
|
|
496
|
+
static_cast<const FEL&> (fel).AddTrans (mir, y, x);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
501
|
+
BareSliceVector<Complex> x, BareSliceMatrix<SIMD<Complex>> y)
|
|
502
|
+
{
|
|
503
|
+
static_cast<const FEL&> (fel).Evaluate (mir, x, y);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
507
|
+
BareSliceMatrix<SIMD<Complex>> y, BareSliceVector<Complex> x)
|
|
508
|
+
{
|
|
509
|
+
static_cast<const FEL&> (fel).AddTrans (mir, y, x);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
/// Identity on boundary
|
|
518
|
+
template <int D, typename FEL = HCurlFiniteElement<D-1> >
|
|
519
|
+
class DiffOpIdBoundaryEdge : public DiffOp<DiffOpIdBoundaryEdge<D,FEL> >
|
|
520
|
+
{
|
|
521
|
+
public:
|
|
522
|
+
enum { DIM = 1 };
|
|
523
|
+
enum { DIM_SPACE = D };
|
|
524
|
+
enum { DIM_ELEMENT = D-1 };
|
|
525
|
+
enum { DIM_DMAT = D };
|
|
526
|
+
enum { DIFFORDER = 0 };
|
|
527
|
+
|
|
528
|
+
static constexpr bool SUPPORT_PML = true;
|
|
529
|
+
template <typename FEL1, typename MIP, typename MAT>
|
|
530
|
+
static void GenerateMatrix (const FEL1 & fel, const MIP & mip,
|
|
531
|
+
MAT && mat, LocalHeap & lh)
|
|
532
|
+
{
|
|
533
|
+
// GenerateMatrix2 (fel, mip, SliceIfPossible<double> (Trans(mat)), lh);
|
|
534
|
+
GenerateMatrix2 (fel, mip, make_BareSliceMatrix (Trans(mat)), lh);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
538
|
+
static void GenerateMatrix2 (const AFEL & fel, const MIP & mip,
|
|
539
|
+
MAT && mat, LocalHeap & lh)
|
|
540
|
+
{
|
|
541
|
+
HeapReset hr(lh);
|
|
542
|
+
mat = static_cast<const FEL&> (fel).GetShape(mip.IP(),lh)*mip.GetJacobianInverse();
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
template <typename AFEL>
|
|
546
|
+
static void GenerateMatrix2 (const AFEL & fel,
|
|
547
|
+
const MappedIntegrationPoint<D-1,D> & bmip,
|
|
548
|
+
BareSliceMatrix<> mat, LocalHeap & lh)
|
|
549
|
+
{
|
|
550
|
+
static_cast<const FEL&> (fel).CalcMappedShape (bmip, mat);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
555
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
556
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
557
|
+
{
|
|
558
|
+
static_cast<const FEL&>(fel).CalcMappedShape (mir, mat);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
562
|
+
static void Apply (const FEL1 & fel, const MIP & mip,
|
|
563
|
+
const TVX & x, TVY && y,
|
|
564
|
+
LocalHeap & lh)
|
|
565
|
+
{
|
|
566
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
567
|
+
HeapReset hr(lh);
|
|
568
|
+
Vec<D-1,TSCAL> hx;
|
|
569
|
+
hx = Trans (static_cast<const FEL&> (fel).GetShape (mip.IP(),lh)) * x;
|
|
570
|
+
y = Trans (mip.GetJacobianInverse()) * hx;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
template <typename FEL1, typename MIP, class TVX, class TVY>
|
|
574
|
+
static void ApplyTrans (const FEL1 & fel, const MIP & mip,
|
|
575
|
+
const TVX & x, TVY & y,
|
|
576
|
+
LocalHeap & lh)
|
|
577
|
+
{
|
|
578
|
+
typedef typename TVX::TSCAL TSCAL;
|
|
579
|
+
HeapReset hr(lh);
|
|
580
|
+
Vec<DIM_ELEMENT,TSCAL> hx;
|
|
581
|
+
hx = mip.GetJacobianInverse() * x;
|
|
582
|
+
y.Range(0,fel.GetNDof()) = static_cast<const FEL&> (fel).GetShape (mip.IP(),lh) * hx;
|
|
583
|
+
|
|
584
|
+
/*
|
|
585
|
+
FlatMatrixFixWidth<DIM_ELEMENT> mshape (y.Height(), &hv(0));
|
|
586
|
+
FlatMatrix<> mshape2 (y.Height(), DIM_ELEMENT, &hv(0));
|
|
587
|
+
y = mshape2 * hx;
|
|
588
|
+
*/
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
592
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
593
|
+
{
|
|
594
|
+
static_cast<const FEL&> (fel).Evaluate (mir, x, y);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
598
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
599
|
+
{
|
|
600
|
+
static_cast<const FEL&> (fel).AddTrans (mir, y, x);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
605
|
+
BareSliceVector<Complex> x, BareSliceMatrix<SIMD<Complex>> y)
|
|
606
|
+
{
|
|
607
|
+
static_cast<const FEL&> (fel).Evaluate (mir, x, y);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
611
|
+
BareSliceMatrix<SIMD<Complex>> y, BareSliceVector<Complex> x)
|
|
612
|
+
{
|
|
613
|
+
static_cast<const FEL&> (fel).AddTrans (mir, y, x);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
static shared_ptr<CoefficientFunction>
|
|
617
|
+
DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
618
|
+
shared_ptr<CoefficientFunction> dir,
|
|
619
|
+
bool Eulerian)
|
|
620
|
+
{
|
|
621
|
+
if (Eulerian) throw Exception("DiffShape Eulerian not implemented for DiffOpIdBoundaryEdge");
|
|
622
|
+
int dim = dir->Dimension();
|
|
623
|
+
auto n = NormalVectorCF(dim) -> Reshape(Array<int> ( { dim, 1 } ));
|
|
624
|
+
//n -> SetDimensions( Array<int> ( { dim, 1 } ) );
|
|
625
|
+
auto Pn = n * TransposeCF(n);
|
|
626
|
+
|
|
627
|
+
return (2*SymmetricCF(Pn * dir->Operator("Gradboundary"))
|
|
628
|
+
-TransposeCF(dir->Operator("Gradboundary"))) * proxy;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
};
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
/// Curl on boundary
|
|
636
|
+
template <typename FEL = HCurlFiniteElement<2> >
|
|
637
|
+
class DiffOpCurlBoundaryEdge : public DiffOp<DiffOpCurlBoundaryEdge<FEL> >
|
|
638
|
+
{
|
|
639
|
+
public:
|
|
640
|
+
enum { DIM = 1 };
|
|
641
|
+
enum { DIM_SPACE = 3 };
|
|
642
|
+
enum { DIM_ELEMENT = 2 };
|
|
643
|
+
enum { DIM_DMAT = 1 };
|
|
644
|
+
enum { DIFFORDER = 1 };
|
|
645
|
+
|
|
646
|
+
static string Name() { return "curl"; }
|
|
647
|
+
|
|
648
|
+
static const FEL & Cast(const FiniteElement & fel)
|
|
649
|
+
{
|
|
650
|
+
return static_cast<const FEL&> (fel);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
static int DimRef() { return 1; }
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
static constexpr bool SUPPORT_PML = true;
|
|
658
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
659
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
660
|
+
MAT && mat, LocalHeap & lh)
|
|
661
|
+
{
|
|
662
|
+
mat = 1.0/mip.GetJacobiDet() *
|
|
663
|
+
Trans (static_cast<const FEL&>(fel).GetCurlShape(mip.IP(),lh));
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
template<typename IP, typename MAT>
|
|
667
|
+
static void GenerateMatrixRef (const FiniteElement & fel, const IP & ip,
|
|
668
|
+
MAT && mat, LocalHeap & lh)
|
|
669
|
+
{
|
|
670
|
+
Cast(fel).CalcCurlShape (ip, Trans(mat));
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
template <typename MIP, typename MAT>
|
|
674
|
+
static void CalcTransformationMatrix (const MIP & mip,
|
|
675
|
+
MAT & mat, LocalHeap & lh)
|
|
676
|
+
{
|
|
677
|
+
// auto & mip = static_cast<const MappedIntegrationPoint<D-1,D>&>(bmip);
|
|
678
|
+
mat = 1./mip.GetJacobiDet();
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
683
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
684
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
685
|
+
{
|
|
686
|
+
constexpr size_t BS=16;
|
|
687
|
+
LocalHeapMem<BS*SIMD<double>::Size()*sizeof(SIMD<MappedIntegrationPoint<2,2>>)+64> lh("genmatlh");
|
|
688
|
+
FE_ElementTransformation<2,2> trafo2d(fel.ElementType());
|
|
689
|
+
for (size_t first = 0; first < mir.Size(); first += BS)
|
|
690
|
+
{
|
|
691
|
+
HeapReset hr(lh);
|
|
692
|
+
size_t next = std::min(first+BS, mir.Size());
|
|
693
|
+
SIMD_MappedIntegrationRule<2,2> mir2d(mir.IR().Range(first, next), trafo2d, lh);
|
|
694
|
+
static_cast<const FEL&>(fel).CalcMappedCurlShape (mir2d, mat.Cols(first, next));
|
|
695
|
+
}
|
|
696
|
+
for (size_t i = 0; i < mir.Size(); i++)
|
|
697
|
+
mat.Col(i).Range(fel.GetNDof()) *= 1.0 / mir[i].GetJacobiDet();
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
701
|
+
static void Apply (const AFEL & fel, const MIP & mip,
|
|
702
|
+
const TVX & x, TVY && y,
|
|
703
|
+
LocalHeap & lh)
|
|
704
|
+
{
|
|
705
|
+
y = (1.0/mip.GetJacobiDet()) *
|
|
706
|
+
(Trans (static_cast<const FEL&> (fel).GetCurlShape(mip.IP(),lh)) * x);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
710
|
+
static void ApplyTrans (const AFEL & fel, const MIP & mip,
|
|
711
|
+
const TVX & x, TVY & y,
|
|
712
|
+
LocalHeap & lh)
|
|
713
|
+
{
|
|
714
|
+
y.Range(0,fel.GetNDof()) = static_cast<const FEL&>(fel).GetCurlShape(mip.IP(),lh) * ((1.0/mip.GetJacobiDet()) * x);
|
|
715
|
+
|
|
716
|
+
}
|
|
717
|
+
};
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
template <typename FEL = HCurlFiniteElement<2> >
|
|
722
|
+
class DiffOpCurlBoundaryEdgeVec : public DiffOp<DiffOpCurlBoundaryEdgeVec<FEL> >
|
|
723
|
+
{
|
|
724
|
+
public:
|
|
725
|
+
enum { DIM = 1 };
|
|
726
|
+
enum { DIM_SPACE = 3 };
|
|
727
|
+
enum { DIM_ELEMENT = 2 };
|
|
728
|
+
enum { DIM_DMAT = 3 };
|
|
729
|
+
enum { DIFFORDER = 1 };
|
|
730
|
+
|
|
731
|
+
static string Name() { return "curl"; }
|
|
732
|
+
|
|
733
|
+
static constexpr bool SUPPORT_PML = true;
|
|
734
|
+
static const FEL & Cast (const FiniteElement & fel)
|
|
735
|
+
{ return static_cast<const FEL&> (fel); }
|
|
736
|
+
|
|
737
|
+
template <typename AFEL, typename MIP, typename MAT>
|
|
738
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
739
|
+
MAT && mat, LocalHeap & lh)
|
|
740
|
+
{
|
|
741
|
+
auto scaled_nv = (1.0/mip.GetJacobiDet()) * mip.GetNV();
|
|
742
|
+
mat = scaled_nv * Trans(Cast(fel).GetCurlShape (mip.IP(), lh));
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
746
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
747
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
748
|
+
{
|
|
749
|
+
static_cast<const FEL&>(fel).CalcMappedCurlShape (mir, mat);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
754
|
+
static void Apply (const AFEL & fel, const MIP & mip,
|
|
755
|
+
const TVX & x, TVY && y,
|
|
756
|
+
LocalHeap & lh)
|
|
757
|
+
{
|
|
758
|
+
y = ( (1.0/mip.GetJacobiDet())*(InnerProduct (Cast(fel).GetCurlShape (mip.IP(), lh), x) )) * mip.GetNV();
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
762
|
+
static void ApplyTrans (const AFEL & fel, const MIP & mip,
|
|
763
|
+
const TVX & x, TVY & y,
|
|
764
|
+
LocalHeap & lh)
|
|
765
|
+
{
|
|
766
|
+
y.Range(0,fel.GetNDof()) =
|
|
767
|
+
((1.0/mip.GetJacobiDet())* InnerProduct (x, mip.GetNV()) ) * Cast(fel).GetCurlShape (mip.IP(), lh).AsVector();
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
static shared_ptr<CoefficientFunction>
|
|
771
|
+
DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
772
|
+
shared_ptr<CoefficientFunction> dir,
|
|
773
|
+
bool Eulerian)
|
|
774
|
+
{
|
|
775
|
+
if (Eulerian) throw Exception("DiffShape Eulerian not implemented for DiffOpCurlBoundaryEdge");
|
|
776
|
+
auto grad = dir->Operator("Gradboundary");
|
|
777
|
+
return -TraceCF(grad)*proxy + grad * proxy;
|
|
778
|
+
}
|
|
779
|
+
};
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
template <int D>
|
|
783
|
+
class DiffOpHCurlDualBoundary;
|
|
784
|
+
|
|
785
|
+
/// Dual operator for HCurl
|
|
786
|
+
template <int D>
|
|
787
|
+
class DiffOpHCurlDual : public DiffOp<DiffOpHCurlDual<D> >
|
|
788
|
+
{
|
|
789
|
+
public:
|
|
790
|
+
typedef DiffOp<DiffOpHCurlDual<D>> BASE;
|
|
791
|
+
enum { DIM = 1 };
|
|
792
|
+
enum { DIM_SPACE = D };
|
|
793
|
+
enum { DIM_ELEMENT = D };
|
|
794
|
+
enum { DIM_DMAT = D };
|
|
795
|
+
enum { DIFFORDER = 0 };
|
|
796
|
+
|
|
797
|
+
typedef DiffOpHCurlDualBoundary<D> DIFFOP_TRACE;
|
|
798
|
+
|
|
799
|
+
static auto & Cast (const FiniteElement & fel)
|
|
800
|
+
{ return static_cast<const HCurlFiniteElement<D>&> (fel); }
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
804
|
+
typename std::enable_if<std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
805
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
806
|
+
MAT && mat, LocalHeap & lh)
|
|
807
|
+
{
|
|
808
|
+
Cast(fel).CalcDualShape (mip, Trans(mat));
|
|
809
|
+
}
|
|
810
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
811
|
+
typename std::enable_if<!std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
812
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
813
|
+
MAT && mat, LocalHeap & lh)
|
|
814
|
+
{
|
|
815
|
+
// fel.CalcDualShape (mip, mat);
|
|
816
|
+
throw Exception(string("DiffOpHCurlDual not available for mat ")+typeid(mat).name());
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
820
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
821
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
822
|
+
{
|
|
823
|
+
Cast(fel).CalcDualShape (mir, mat);
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
using BASE::ApplySIMDIR;
|
|
827
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
828
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
829
|
+
{
|
|
830
|
+
Cast(fel).EvaluateDual (mir, x, y);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
using BASE::AddTransSIMDIR;
|
|
834
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
835
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
836
|
+
{
|
|
837
|
+
Cast(fel).AddDualTrans (mir, y, x);
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
};
|
|
841
|
+
|
|
842
|
+
/// Dual boundary operator for HCurl
|
|
843
|
+
template <int D>
|
|
844
|
+
class DiffOpHCurlDualBoundary : public DiffOp<DiffOpHCurlDualBoundary<D> >
|
|
845
|
+
{
|
|
846
|
+
public:
|
|
847
|
+
typedef DiffOp<DiffOpHCurlDualBoundary<D>> BASE;
|
|
848
|
+
enum { DIM = 1 };
|
|
849
|
+
enum { DIM_SPACE = D };
|
|
850
|
+
enum { DIM_ELEMENT = D-1 };
|
|
851
|
+
enum { DIM_DMAT = D };
|
|
852
|
+
enum { DIFFORDER = 0 };
|
|
853
|
+
|
|
854
|
+
typedef void DIFFOP_TRACE;
|
|
855
|
+
|
|
856
|
+
static auto & Cast (const FiniteElement & fel)
|
|
857
|
+
{ return static_cast<const HCurlFiniteElement<D-1>&> (fel); }
|
|
858
|
+
|
|
859
|
+
|
|
860
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
861
|
+
typename std::enable_if<std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
862
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
863
|
+
MAT && mat, LocalHeap & lh)
|
|
864
|
+
{
|
|
865
|
+
Cast(fel).CalcDualShape (mip, Trans(mat));
|
|
866
|
+
}
|
|
867
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
868
|
+
typename std::enable_if<!std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
869
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
870
|
+
MAT & mat, LocalHeap & lh)
|
|
871
|
+
{
|
|
872
|
+
throw Exception(string("DiffOpHCurlDual not available for mat ")+typeid(mat).name());
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & fel,
|
|
876
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
877
|
+
BareSliceMatrix<SIMD<double>> mat)
|
|
878
|
+
{
|
|
879
|
+
Cast(fel).CalcDualShape (mir, mat);
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
using BASE::ApplySIMDIR;
|
|
883
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
884
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
885
|
+
{
|
|
886
|
+
Cast(fel).EvaluateDual (mir, x, y);
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
using BASE::AddTransSIMDIR;
|
|
890
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & mir,
|
|
891
|
+
BareSliceMatrix<SIMD<double>> y, BareSliceVector<double> x)
|
|
892
|
+
{
|
|
893
|
+
Cast(fel).AddDualTrans (mir, y, x);
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
// bilinearform integrators
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
/*
|
|
907
|
+
///
|
|
908
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
909
|
+
class CurlCurlEdgeIntegrator
|
|
910
|
+
: public T_BDBIntegrator<DiffOpCurlEdge<D>, DiagDMat<DIM_CURL_TRAIT<D>::DIM>, FEL>
|
|
911
|
+
{
|
|
912
|
+
typedef T_BDBIntegrator<DiffOpCurlEdge<D>, DiagDMat<DIM_CURL_TRAIT<D>::DIM>, FEL> BASE;
|
|
913
|
+
public:
|
|
914
|
+
using BASE::T_BDBIntegrator;
|
|
915
|
+
virtual string Name () const { return "CurlCurlEdge"; }
|
|
916
|
+
};
|
|
917
|
+
*/
|
|
918
|
+
|
|
919
|
+
template <int D>
|
|
920
|
+
using CurlCurlEdgeIntegrator = T_BDBIntegrator<DiffOpCurlEdge<D>, DiagDMat<DIM_CURL_(D)>, HCurlFiniteElement<D>>;
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
|
|
924
|
+
///
|
|
925
|
+
class CurlCurlBoundaryEdgeIntegrator
|
|
926
|
+
: public T_BDBIntegrator<DiffOpCurlBoundaryEdge<>, DiagDMat<1>, HCurlFiniteElement<2> >
|
|
927
|
+
{
|
|
928
|
+
typedef T_BDBIntegrator<DiffOpCurlBoundaryEdge<>, DiagDMat<1>, HCurlFiniteElement<2> > BASE;
|
|
929
|
+
public:
|
|
930
|
+
using T_BDBIntegrator<DiffOpCurlBoundaryEdge<>, DiagDMat<1>, HCurlFiniteElement<2> >::T_BDBIntegrator;
|
|
931
|
+
///
|
|
932
|
+
virtual bool BoundaryForm () const { return 1; }
|
|
933
|
+
///
|
|
934
|
+
virtual string Name () const { return "CurlCurlBoundaryEdge"; }
|
|
935
|
+
};
|
|
936
|
+
|
|
937
|
+
///
|
|
938
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
939
|
+
class CurlCurlEdgeOrthoIntegrator
|
|
940
|
+
: public T_BDBIntegrator<DiffOpCurlEdge<D>, OrthoDMat<DIM_CURL_(D)>, FEL>
|
|
941
|
+
{
|
|
942
|
+
typedef T_BDBIntegrator<DiffOpCurlEdge<D>, OrthoDMat<DIM_CURL_(D)>, FEL> BASE;
|
|
943
|
+
public:
|
|
944
|
+
using T_BDBIntegrator<DiffOpCurlEdge<D>, OrthoDMat<DIM_CURL_(D)>, FEL>::T_BDBIntegrator;
|
|
945
|
+
///
|
|
946
|
+
virtual string Name () const { return "CurlCurlEdgeOrtho"; }
|
|
947
|
+
};
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
|
|
951
|
+
/*
|
|
952
|
+
///
|
|
953
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
954
|
+
class MassEdgeIntegrator
|
|
955
|
+
: public T_BDBIntegrator<DiffOpIdEdge<D>, DiagDMat<D>, FEL>
|
|
956
|
+
{
|
|
957
|
+
typedef T_BDBIntegrator<DiffOpIdEdge<D>, DiagDMat<D>, FEL> BASE;
|
|
958
|
+
public:
|
|
959
|
+
using BASE::T_BDBIntegrator;
|
|
960
|
+
///
|
|
961
|
+
virtual string Name () const { return "MassEdge"; }
|
|
962
|
+
};
|
|
963
|
+
*/
|
|
964
|
+
|
|
965
|
+
template <int D>
|
|
966
|
+
using MassEdgeIntegrator = T_BDBIntegrator<DiffOpIdEdge<D>, DiagDMat<D>, HCurlFiniteElement<D>>;
|
|
967
|
+
|
|
968
|
+
|
|
969
|
+
///
|
|
970
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
971
|
+
class MassEdgeOrthoIntegrator
|
|
972
|
+
: public T_BDBIntegrator<DiffOpIdEdge<D>, OrthoDMat<D>, FEL>
|
|
973
|
+
{
|
|
974
|
+
public:
|
|
975
|
+
using T_BDBIntegrator<DiffOpIdEdge<D>, OrthoDMat<D>, FEL>::T_BDBIntegrator;
|
|
976
|
+
/*
|
|
977
|
+
///
|
|
978
|
+
MassEdgeOrthoIntegrator (CoefficientFunction * coeff1,
|
|
979
|
+
CoefficientFunction * coeff2)
|
|
980
|
+
: T_BDBIntegrator<DiffOpIdEdge<D>, OrthoDMat<D>, FEL> (OrthoDMat<D> (coeff1, coeff2))
|
|
981
|
+
{ ; }
|
|
982
|
+
|
|
983
|
+
MassEdgeOrthoIntegrator (CoefficientFunction * coeff1,
|
|
984
|
+
CoefficientFunction * coeff2,
|
|
985
|
+
CoefficientFunction * coeff3)
|
|
986
|
+
: T_BDBIntegrator<DiffOpIdEdge<D>, OrthoDMat<D>, FEL> (OrthoDMat<D> (coeff1, coeff2, coeff3))
|
|
987
|
+
{ ; }
|
|
988
|
+
|
|
989
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
990
|
+
{
|
|
991
|
+
if (D == 2)
|
|
992
|
+
return new MassEdgeOrthoIntegrator (coeffs[0], coeffs[1]);
|
|
993
|
+
else
|
|
994
|
+
return new MassEdgeOrthoIntegrator (coeffs[0], coeffs[1], coeffs[2]);
|
|
995
|
+
}
|
|
996
|
+
*/
|
|
997
|
+
///
|
|
998
|
+
virtual string Name () const { return "MassEdgeOrtho"; }
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
|
|
1005
|
+
///
|
|
1006
|
+
template <int D, typename FEL = HCurlFiniteElement<D-1> >
|
|
1007
|
+
class RobinEdgeIntegrator
|
|
1008
|
+
: public T_BDBIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DiagDMat<D>, FEL>
|
|
1009
|
+
{
|
|
1010
|
+
typedef T_BDBIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DiagDMat<D>, FEL> BASE;
|
|
1011
|
+
public:
|
|
1012
|
+
using T_BDBIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DiagDMat<D>, FEL>::T_BDBIntegrator;
|
|
1013
|
+
virtual string Name () const { return "RobinEdge"; }
|
|
1014
|
+
};
|
|
1015
|
+
|
|
1016
|
+
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
|
|
1020
|
+
// Linearform integrators
|
|
1021
|
+
|
|
1022
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
1023
|
+
class NGS_DLL_HEADER SourceEdgeIntegrator
|
|
1024
|
+
: public T_BIntegrator<DiffOpIdEdge<D>, DVec<D>, FEL>
|
|
1025
|
+
{
|
|
1026
|
+
typedef T_BIntegrator<DiffOpIdEdge<D>, DVec<D>, FEL> BASE;
|
|
1027
|
+
public:
|
|
1028
|
+
using T_BIntegrator<DiffOpIdEdge<D>, DVec<D>, FEL>::T_BIntegrator;
|
|
1029
|
+
virtual string Name () const { return "SourceEdge"; }
|
|
1030
|
+
};
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
///
|
|
1040
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
1041
|
+
class TangentialSourceEdgeIntegrator
|
|
1042
|
+
: public T_BIntegrator<DiffOpIdEdge<D>, TVec<D>, FEL>
|
|
1043
|
+
{
|
|
1044
|
+
public:
|
|
1045
|
+
using T_BIntegrator<DiffOpIdEdge<D>, TVec<D>, FEL>::T_BIntegrator;
|
|
1046
|
+
///
|
|
1047
|
+
virtual string Name () const { return "TangentialSourceEdge"; }
|
|
1048
|
+
};
|
|
1049
|
+
|
|
1050
|
+
|
|
1051
|
+
///
|
|
1052
|
+
template <int D, typename FEL = HCurlFiniteElement<D-1> >
|
|
1053
|
+
class NeumannEdgeIntegrator
|
|
1054
|
+
: public T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DVec<D>, FEL>
|
|
1055
|
+
{
|
|
1056
|
+
typedef T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DVec<D>, FEL> BASE;
|
|
1057
|
+
public:
|
|
1058
|
+
using T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>, DVec<D>, FEL>::T_BIntegrator;
|
|
1059
|
+
///
|
|
1060
|
+
/*
|
|
1061
|
+
NeumannEdgeIntegrator (CoefficientFunction * coeff1,
|
|
1062
|
+
CoefficientFunction * coeff2,
|
|
1063
|
+
CoefficientFunction * coeff3)
|
|
1064
|
+
: T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>,DVec<D>, FEL>
|
|
1065
|
+
(DVec<D> (coeff1, coeff2, coeff3))
|
|
1066
|
+
{ ; }
|
|
1067
|
+
NeumannEdgeIntegrator (CoefficientFunction * coeff1,
|
|
1068
|
+
CoefficientFunction * coeff2)
|
|
1069
|
+
: T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>,DVec<D>, FEL>
|
|
1070
|
+
(DVec<D> (coeff1, coeff2))
|
|
1071
|
+
{ ; }
|
|
1072
|
+
|
|
1073
|
+
NeumannEdgeIntegrator (Array<CoefficientFunction*> & coeffs)
|
|
1074
|
+
: T_BIntegrator<DiffOpIdBoundaryEdge<D,FEL>,DVec<D>, FEL>
|
|
1075
|
+
(DVec<D> (coeffs))
|
|
1076
|
+
{ ; }
|
|
1077
|
+
*/
|
|
1078
|
+
|
|
1079
|
+
/*
|
|
1080
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
1081
|
+
{
|
|
1082
|
+
if (D == 3)
|
|
1083
|
+
return new NeumannEdgeIntegrator<3> (coeffs[0], coeffs[1], coeffs[2]);
|
|
1084
|
+
else
|
|
1085
|
+
return new NeumannEdgeIntegrator<2> (coeffs[0], coeffs[1]);
|
|
1086
|
+
}
|
|
1087
|
+
*/
|
|
1088
|
+
///
|
|
1089
|
+
virtual bool BoundaryForm () const { return 1; }
|
|
1090
|
+
///
|
|
1091
|
+
virtual string Name () const { return "NeumannEdge"; }
|
|
1092
|
+
};
|
|
1093
|
+
|
|
1094
|
+
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
|
|
1098
|
+
|
|
1099
|
+
///
|
|
1100
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
1101
|
+
class CurlEdgeIntegrator
|
|
1102
|
+
: public T_BIntegrator<DiffOpCurlEdge<D>, DVec<DIM_CURL_(D)>, FEL>
|
|
1103
|
+
{
|
|
1104
|
+
typedef T_BIntegrator<DiffOpCurlEdge<D>, DVec<DIM_CURL_(D)>, FEL> BASE;
|
|
1105
|
+
public:
|
|
1106
|
+
using T_BIntegrator<DiffOpCurlEdge<D>, DVec<DIM_CURL_(D)>, FEL>::T_BIntegrator;
|
|
1107
|
+
/*
|
|
1108
|
+
///
|
|
1109
|
+
CurlEdgeIntegrator (CoefficientFunction * coeff1)
|
|
1110
|
+
: T_BIntegrator<DiffOpCurlEdge<D>, DVec<DIM_CURL_TRAIT<D>::DIM>, FEL>
|
|
1111
|
+
(DVec<DIM_CURL_TRAIT<D>::DIM> (coeff1))
|
|
1112
|
+
{ ; }
|
|
1113
|
+
|
|
1114
|
+
CurlEdgeIntegrator (CoefficientFunction * coeffx,
|
|
1115
|
+
CoefficientFunction * coeffy,
|
|
1116
|
+
CoefficientFunction * coeffz)
|
|
1117
|
+
: T_BIntegrator<DiffOpCurlEdge<D,FEL>, DVec<DIM_CURL_TRAIT<D>::DIM>, FEL>
|
|
1118
|
+
(DVec<DIM_CURL_TRAIT<D>::DIM> (coeffx, coeffy, coeffz))
|
|
1119
|
+
{ ; }
|
|
1120
|
+
|
|
1121
|
+
CurlEdgeIntegrator (Array<CoefficientFunction*> & coeffs)
|
|
1122
|
+
: T_BIntegrator<DiffOpCurlEdge<D,FEL>, DVec<DIM_CURL_TRAIT<D>::DIM>, FEL>
|
|
1123
|
+
(DVec<DIM_CURL_TRAIT<D>::DIM> (coeffs))
|
|
1124
|
+
{ ; }
|
|
1125
|
+
*/
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
/*
|
|
1129
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
1130
|
+
{
|
|
1131
|
+
if (D == 2)
|
|
1132
|
+
return new CurlEdgeIntegrator<2> (coeffs[0]);
|
|
1133
|
+
else
|
|
1134
|
+
return new CurlEdgeIntegrator<3> (coeffs[0], coeffs[1], coeffs[2]);
|
|
1135
|
+
}
|
|
1136
|
+
*/
|
|
1137
|
+
|
|
1138
|
+
///
|
|
1139
|
+
virtual bool BoundaryForm () const { return 0; }
|
|
1140
|
+
///
|
|
1141
|
+
virtual string Name () const { return "CurlEdge"; }
|
|
1142
|
+
};
|
|
1143
|
+
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
|
|
1147
|
+
///
|
|
1148
|
+
template <typename FEL = HCurlFiniteElement<2> >
|
|
1149
|
+
class CurlBoundaryEdgeIntegrator
|
|
1150
|
+
: public T_BIntegrator<DiffOpCurlBoundaryEdge<FEL>, DVec<1>, FEL>
|
|
1151
|
+
{
|
|
1152
|
+
typedef T_BIntegrator<DiffOpCurlBoundaryEdge<FEL>, DVec<1>, FEL> BASE;
|
|
1153
|
+
public:
|
|
1154
|
+
using T_BIntegrator<DiffOpCurlBoundaryEdge<FEL>, DVec<1>, FEL>::T_BIntegrator;
|
|
1155
|
+
/*
|
|
1156
|
+
///
|
|
1157
|
+
CurlBoundaryEdgeIntegrator (CoefficientFunction * coeff1)
|
|
1158
|
+
: T_BIntegrator<DiffOpCurlBoundaryEdge<FEL>, DVec<1>, FEL>
|
|
1159
|
+
(DVec<1> (coeff1))
|
|
1160
|
+
{ ; }
|
|
1161
|
+
|
|
1162
|
+
static Integrator * Create (Array<CoefficientFunction*> & coeffs)
|
|
1163
|
+
{
|
|
1164
|
+
return new CurlBoundaryEdgeIntegrator (coeffs[0]);
|
|
1165
|
+
}
|
|
1166
|
+
*/
|
|
1167
|
+
///
|
|
1168
|
+
virtual bool BoundaryForm () const { return 1; }
|
|
1169
|
+
///
|
|
1170
|
+
virtual string Name () const { return "CurlBoundaryEdge"; }
|
|
1171
|
+
};
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
template <int D, typename FEL = HCurlFiniteElement<D-1> >
|
|
1177
|
+
class DiffOpGradientBoundaryHCurl;
|
|
1178
|
+
|
|
1179
|
+
/// Gradient operator for HCurl
|
|
1180
|
+
template <int D, typename FEL = HCurlFiniteElement<D> >
|
|
1181
|
+
// class DiffOpGradientHCurl : public DiffOp<DiffOpGradientHCurl<D> >
|
|
1182
|
+
class DiffOpGradientHCurl : public NumDiffGradient<DiffOpGradientHCurl<D>, DiffOpIdEdge<D>, FEL>
|
|
1183
|
+
{
|
|
1184
|
+
typedef NumDiffGradient<DiffOpGradientHCurl<D>, DiffOpIdEdge<D>, FEL> BASE;
|
|
1185
|
+
public:
|
|
1186
|
+
using BASE::eps;
|
|
1187
|
+
using BASE::DIM_ELEMENT;
|
|
1188
|
+
using BASE::DIM_SPACE;
|
|
1189
|
+
|
|
1190
|
+
// enum { DIM = 1 };
|
|
1191
|
+
// enum { DIM_SPACE = D };
|
|
1192
|
+
// enum { DIM_ELEMENT = D };
|
|
1193
|
+
// enum { DIM_DMAT = D*D };
|
|
1194
|
+
// enum { DIFFORDER = 1 };
|
|
1195
|
+
|
|
1196
|
+
static string Name() { return "grad"; }
|
|
1197
|
+
|
|
1198
|
+
static Array<int> GetDimensions() { return Array<int> ( { DIM_SPACE, DIM_SPACE } ); }
|
|
1199
|
+
|
|
1200
|
+
// static constexpr double eps() { return 1e-4; }
|
|
1201
|
+
|
|
1202
|
+
typedef DiffOpGradientBoundaryHCurl<D> DIFFOP_TRACE;
|
|
1203
|
+
///
|
|
1204
|
+
|
|
1205
|
+
/*
|
|
1206
|
+
template <typename AFEL, typename SIP, typename MAT,
|
|
1207
|
+
typename std::enable_if<!std::is_convertible<MAT,SliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
1208
|
+
static void GenerateMatrix (const AFEL & fel, const SIP & sip,
|
|
1209
|
+
MAT & mat, LocalHeap & lh)
|
|
1210
|
+
{
|
|
1211
|
+
cout << "nicht gut" << endl;
|
|
1212
|
+
cout << "type(fel) = " << typeid(fel).name() << ", sip = " << typeid(sip).name()
|
|
1213
|
+
<< ", mat = " << typeid(mat).name() << endl;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
// template <typename AFEL, typename SIP>
|
|
1217
|
+
// static void GenerateMatrix (const AFEL & fel, const SIP & sip,
|
|
1218
|
+
// SliceMatrix<double,ColMajor> mat, LocalHeap & lh)
|
|
1219
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
1220
|
+
typename std::enable_if<std::is_convertible<MAT,SliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
1221
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
1222
|
+
MAT mat, LocalHeap & lh)
|
|
1223
|
+
{
|
|
1224
|
+
// cout << "gen matrix" << endl;
|
|
1225
|
+
CalcDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(fel), mip, Trans(mat), lh, eps());
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
|
|
1229
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
1230
|
+
static void Apply (const AFEL & fel, const MIP & mip,
|
|
1231
|
+
const TVX & x, TVY && y,
|
|
1232
|
+
LocalHeap & lh)
|
|
1233
|
+
{
|
|
1234
|
+
// cout << "apply matrix" << endl;
|
|
1235
|
+
// typedef typename TVX::TSCAL TSCAL;
|
|
1236
|
+
HeapReset hr(lh);
|
|
1237
|
+
FlatMatrixFixWidth<D*D> hm(fel.GetNDof(),lh);
|
|
1238
|
+
CalcDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(fel), mip, hm, lh, eps());
|
|
1239
|
+
y = Trans(hm)*x;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
template <typename AFEL, typename MIP, class TVX, class TVY>
|
|
1243
|
+
static void ApplyTrans (const AFEL & fel, const MIP & mip,
|
|
1244
|
+
const TVX & x, TVY & by,
|
|
1245
|
+
LocalHeap & lh)
|
|
1246
|
+
{
|
|
1247
|
+
ApplyTransDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(fel), mip, x, by, lh, eps());
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
static void GenerateMatrixSIMDIR (const FiniteElement & bfel,
|
|
1251
|
+
const SIMD_BaseMappedIntegrationRule & bmir, BareSliceMatrix<SIMD<double>> mat)
|
|
1252
|
+
{
|
|
1253
|
+
// cout << "gen matrix simd" << endl;
|
|
1254
|
+
CalcSIMDDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(bfel), static_cast<const SIMD_MappedIntegrationRule<D,D> &>(bmir), mat, eps());
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
using BASE::ApplySIMDIR;
|
|
1258
|
+
static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & bmir,
|
|
1259
|
+
BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
|
|
1260
|
+
{
|
|
1261
|
+
cout << "apply simd" << endl;
|
|
1262
|
+
ApplySIMDDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(fel), bmir, x, y, eps());
|
|
1263
|
+
}
|
|
1264
|
+
|
|
1265
|
+
using DiffOp<DiffOpGradientHCurl<D>>::AddTransSIMDIR;
|
|
1266
|
+
static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & bmir,
|
|
1267
|
+
BareSliceMatrix<SIMD<double>> x, BareSliceVector<double> y)
|
|
1268
|
+
{
|
|
1269
|
+
AddTransSIMDDShapeFE<FEL,D,D,D>(static_cast<const FEL&>(fel), bmir, x, y, eps());
|
|
1270
|
+
}
|
|
1271
|
+
*/
|
|
1272
|
+
|
|
1273
|
+
};
|
|
1274
|
+
|
|
1275
|
+
/// Boundary Gradient operator for HCurl
|
|
1276
|
+
template <int D, typename FEL>// = HCurlFiniteElement<D-1> >
|
|
1277
|
+
class DiffOpGradientBoundaryHCurl : public DiffOp<DiffOpGradientBoundaryHCurl<D> >
|
|
1278
|
+
{
|
|
1279
|
+
public:
|
|
1280
|
+
enum { DIM = 1 };
|
|
1281
|
+
enum { DIM_SPACE = D };
|
|
1282
|
+
enum { DIM_ELEMENT = D-1 };
|
|
1283
|
+
enum { DIM_DMAT = D*D };
|
|
1284
|
+
enum { DIFFORDER = 1 };
|
|
1285
|
+
|
|
1286
|
+
static string Name() { return "gradboundary"; }
|
|
1287
|
+
|
|
1288
|
+
static Array<int> GetDimensions() { return Array<int> ( { DIM_SPACE, DIM_SPACE } ); }
|
|
1289
|
+
|
|
1290
|
+
static constexpr double eps() { return 1e-6; }
|
|
1291
|
+
|
|
1292
|
+
typedef void DIFFOP_TRACE;
|
|
1293
|
+
///
|
|
1294
|
+
template <typename AFEL, typename SIP, typename MAT,
|
|
1295
|
+
typename std::enable_if<!std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
1296
|
+
static void GenerateMatrix (const AFEL & fel, const SIP & sip,
|
|
1297
|
+
MAT && mat, LocalHeap & lh)
|
|
1298
|
+
{
|
|
1299
|
+
cout << "nicht gut" << endl;
|
|
1300
|
+
cout << "type(fel) = " << typeid(fel).name() << ", sip = " << typeid(sip).name()
|
|
1301
|
+
<< ", mat = " << typeid(mat).name() << endl;
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
template <typename AFEL, typename MIP, typename MAT,
|
|
1305
|
+
typename std::enable_if<std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
|
|
1306
|
+
static void GenerateMatrix (const AFEL & fel, const MIP & mip,
|
|
1307
|
+
MAT mat, LocalHeap & lh)
|
|
1308
|
+
{
|
|
1309
|
+
CalcDShapeFE<FEL,D,D-1,D>(static_cast<const FEL&>(fel), mip, Trans(mat), lh, eps());
|
|
1310
|
+
}
|
|
1311
|
+
};
|
|
1312
|
+
|
|
1313
|
+
|
|
1314
|
+
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
|
|
1318
|
+
|
|
1319
|
+
|
|
1320
|
+
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
#ifdef FILE_HCURL_EQUATIONS_CPP
|
|
1324
|
+
#define HCURL_EQUATIONS_EXTERN
|
|
1325
|
+
#else
|
|
1326
|
+
#define HCURL_EQUATIONS_EXTERN extern
|
|
1327
|
+
#endif
|
|
1328
|
+
|
|
1329
|
+
HCURL_EQUATIONS_EXTERN template class DiffOpIdEdge<2>;
|
|
1330
|
+
HCURL_EQUATIONS_EXTERN template class DiffOpIdEdge<3>;
|
|
1331
|
+
|
|
1332
|
+
HCURL_EQUATIONS_EXTERN template class DiffOpCurlEdge<2>;
|
|
1333
|
+
HCURL_EQUATIONS_EXTERN template class DiffOpCurlEdge<3>;
|
|
1334
|
+
|
|
1335
|
+
|
|
1336
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpIdEdge<2> >;
|
|
1337
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpIdEdge<3> >;
|
|
1338
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpIdBoundaryEdge<2> >;
|
|
1339
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpIdBoundaryEdge<3> >;
|
|
1340
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpCurlEdge<2> >;
|
|
1341
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpCurlEdge<3> >;
|
|
1342
|
+
HCURL_EQUATIONS_EXTERN template class NGS_DLL_HEADER T_DifferentialOperator<DiffOpCurlBoundaryEdge<> >;
|
|
1343
|
+
|
|
1344
|
+
// HCURL_EQUATIONS_EXTERN template class MassEdgeIntegrator<2>;
|
|
1345
|
+
// HCURL_EQUATIONS_EXTERN template class MassEdgeIntegrator<3>;
|
|
1346
|
+
|
|
1347
|
+
HCURL_EQUATIONS_EXTERN template class RobinEdgeIntegrator<2>;
|
|
1348
|
+
HCURL_EQUATIONS_EXTERN template class RobinEdgeIntegrator<3>;
|
|
1349
|
+
|
|
1350
|
+
// HCURL_EQUATIONS_EXTERN template class CurlCurlEdgeIntegrator<2>;
|
|
1351
|
+
// HCURL_EQUATIONS_EXTERN template class CurlCurlEdgeIntegrator<3>;
|
|
1352
|
+
|
|
1353
|
+
// HCURL_EQUATIONS_EXTERN template class MassEdgeAnisotropicIntegrator<3>;
|
|
1354
|
+
|
|
1355
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpIdEdge<2>, DiagDMat<2>, HCurlFiniteElement<2>>;
|
|
1356
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpIdEdge<3>, DiagDMat<3>, HCurlFiniteElement<3>>;
|
|
1357
|
+
// HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpIdEdge<3>, SymDMat<3>, HCurlFiniteElement<3>>;
|
|
1358
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpIdBoundaryEdge<2>, DiagDMat<2>, HCurlFiniteElement<1>>;
|
|
1359
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpIdBoundaryEdge<3>, DiagDMat<3>, HCurlFiniteElement<2>>;
|
|
1360
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpCurlEdge<2>, DiagDMat<1>, HCurlFiniteElement<2>>;
|
|
1361
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpCurlEdge<3>, DiagDMat<3>, HCurlFiniteElement<3>>;
|
|
1362
|
+
HCURL_EQUATIONS_EXTERN template class T_BDBIntegrator<DiffOpCurlBoundaryEdge<>, DiagDMat<1>, HCurlFiniteElement<2> >;
|
|
1363
|
+
|
|
1364
|
+
HCURL_EQUATIONS_EXTERN template class SourceEdgeIntegrator<2, HCurlFiniteElement<2>>;
|
|
1365
|
+
HCURL_EQUATIONS_EXTERN template class SourceEdgeIntegrator<3, HCurlFiniteElement<3>>;
|
|
1366
|
+
|
|
1367
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpIdEdge<2>, DVec<2>, HCurlFiniteElement<2>>;
|
|
1368
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpIdEdge<3>, DVec<3>, HCurlFiniteElement<3>>;
|
|
1369
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpIdBoundaryEdge<2>, DVec<2>, HCurlFiniteElement<1>>;
|
|
1370
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpIdBoundaryEdge<3>, DVec<3>, HCurlFiniteElement<2>>;
|
|
1371
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpCurlEdge<2>, DVec<1>, HCurlFiniteElement<2>>;
|
|
1372
|
+
HCURL_EQUATIONS_EXTERN template class T_BIntegrator<DiffOpCurlEdge<3>, DVec<3>, HCurlFiniteElement<3>>;
|
|
1373
|
+
|
|
1374
|
+
|
|
1375
|
+
/*
|
|
1376
|
+
HCURL_EQUATIONS_EXTERN template class
|
|
1377
|
+
HCURL_EQUATIONS_EXTERN template class
|
|
1378
|
+
*/
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
#endif
|