ngsolve 6.2.2506.post74.dev0__cp314-cp314-macosx_10_15_universal2.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.
- netgen/include/analytic_integrals.hpp +10 -0
- netgen/include/arnoldi.hpp +55 -0
- netgen/include/bandmatrix.hpp +334 -0
- netgen/include/basematrix.hpp +957 -0
- netgen/include/basevector.hpp +1268 -0
- netgen/include/bdbequations.hpp +2805 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bem_diffops.hpp +475 -0
- netgen/include/bessel.hpp +1064 -0
- netgen/include/bilinearform.hpp +963 -0
- netgen/include/bla.hpp +29 -0
- netgen/include/blockalloc.hpp +95 -0
- netgen/include/blockjacobi.hpp +328 -0
- netgen/include/bspline.hpp +116 -0
- netgen/include/calcinverse.hpp +141 -0
- netgen/include/cg.hpp +368 -0
- netgen/include/chebyshev.hpp +44 -0
- netgen/include/cholesky.hpp +720 -0
- netgen/include/clapack.h +7254 -0
- netgen/include/code_generation.hpp +296 -0
- netgen/include/coefficient.hpp +2033 -0
- netgen/include/coefficient_impl.hpp +19 -0
- netgen/include/coefficient_stdmath.hpp +167 -0
- netgen/include/commutingAMG.hpp +106 -0
- netgen/include/comp.hpp +79 -0
- netgen/include/compatibility.hpp +41 -0
- netgen/include/complex_wrapper.hpp +73 -0
- netgen/include/compressedfespace.hpp +110 -0
- netgen/include/contact.hpp +235 -0
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/differentialoperator.hpp +276 -0
- netgen/include/diffop.hpp +1286 -0
- netgen/include/diffop_impl.hpp +328 -0
- netgen/include/diffopwithfactor.hpp +123 -0
- netgen/include/discontinuous.hpp +84 -0
- netgen/include/dump.hpp +949 -0
- netgen/include/ectypes.hpp +121 -0
- netgen/include/eigen.hpp +60 -0
- netgen/include/eigensystem.hpp +18 -0
- netgen/include/elasticity_equations.hpp +595 -0
- netgen/include/elementbyelement.hpp +195 -0
- netgen/include/elementtopology.hpp +1760 -0
- netgen/include/elementtransformation.hpp +339 -0
- netgen/include/evalfunc.hpp +405 -0
- netgen/include/expr.hpp +1686 -0
- netgen/include/facetfe.hpp +175 -0
- netgen/include/facetfespace.hpp +180 -0
- netgen/include/facethofe.hpp +111 -0
- netgen/include/facetsurffespace.hpp +112 -0
- netgen/include/fe_interfaces.hpp +32 -0
- netgen/include/fem.hpp +87 -0
- netgen/include/fesconvert.hpp +14 -0
- netgen/include/fespace.hpp +1449 -0
- netgen/include/finiteelement.hpp +286 -0
- netgen/include/globalinterfacespace.hpp +77 -0
- netgen/include/globalspace.hpp +115 -0
- netgen/include/gridfunction.hpp +525 -0
- netgen/include/h1amg.hpp +124 -0
- netgen/include/h1hofe.hpp +188 -0
- netgen/include/h1hofe_impl.hpp +1262 -0
- netgen/include/h1hofefo.hpp +148 -0
- netgen/include/h1hofefo_impl.hpp +185 -0
- netgen/include/h1hofespace.hpp +167 -0
- netgen/include/h1lofe.hpp +1240 -0
- netgen/include/h1lumping.hpp +41 -0
- netgen/include/hcurl_equations.hpp +1381 -0
- netgen/include/hcurlcurlfe.hpp +2241 -0
- netgen/include/hcurlcurlfespace.hpp +78 -0
- netgen/include/hcurlfe.hpp +259 -0
- netgen/include/hcurlfe_utils.hpp +107 -0
- netgen/include/hcurlhdiv_dshape.hpp +857 -0
- netgen/include/hcurlhdivfes.hpp +308 -0
- netgen/include/hcurlhofe.hpp +175 -0
- netgen/include/hcurlhofe_impl.hpp +1871 -0
- netgen/include/hcurlhofespace.hpp +193 -0
- netgen/include/hcurllofe.hpp +1146 -0
- netgen/include/hdiv_equations.hpp +880 -0
- netgen/include/hdivdivfe.hpp +2923 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +206 -0
- netgen/include/hdivfe_utils.hpp +717 -0
- netgen/include/hdivfes.hpp +75 -0
- netgen/include/hdivhofe.hpp +447 -0
- netgen/include/hdivhofe_impl.hpp +1107 -0
- netgen/include/hdivhofefo.hpp +229 -0
- netgen/include/hdivhofespace.hpp +177 -0
- netgen/include/hdivhosurfacefespace.hpp +106 -0
- netgen/include/hdivlofe.hpp +773 -0
- netgen/include/hidden.hpp +74 -0
- netgen/include/householder.hpp +181 -0
- netgen/include/hypre_ams_precond.hpp +123 -0
- netgen/include/hypre_precond.hpp +73 -0
- netgen/include/integrator.hpp +2012 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2542 -0
- netgen/include/intrules_SauterSchwab.hpp +25 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +153 -0
- netgen/include/kernels.hpp +762 -0
- netgen/include/l2hofe.hpp +194 -0
- netgen/include/l2hofe_impl.hpp +564 -0
- netgen/include/l2hofefo.hpp +542 -0
- netgen/include/l2hofespace.hpp +344 -0
- netgen/include/la.hpp +38 -0
- netgen/include/linearform.hpp +266 -0
- netgen/include/matrix.hpp +2140 -0
- netgen/include/memusage.hpp +41 -0
- netgen/include/meshaccess.hpp +1359 -0
- netgen/include/mgpre.hpp +204 -0
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +2281 -0
- netgen/include/multigrid.hpp +42 -0
- netgen/include/multivector.hpp +447 -0
- netgen/include/mumpsinverse.hpp +187 -0
- netgen/include/mycomplex.hpp +361 -0
- netgen/include/ng_lapack.hpp +1661 -0
- netgen/include/ngblas.hpp +1232 -0
- netgen/include/ngs_defines.hpp +30 -0
- netgen/include/ngs_stdcpp_include.hpp +106 -0
- netgen/include/ngs_utils.hpp +121 -0
- netgen/include/ngsobject.hpp +1019 -0
- netgen/include/ngsstream.hpp +113 -0
- netgen/include/ngstd.hpp +72 -0
- netgen/include/nodalhofe.hpp +96 -0
- netgen/include/nodalhofe_impl.hpp +141 -0
- netgen/include/normalfacetfe.hpp +223 -0
- netgen/include/normalfacetfespace.hpp +98 -0
- netgen/include/normalfacetsurfacefespace.hpp +84 -0
- netgen/include/order.hpp +251 -0
- netgen/include/parallel_matrices.hpp +222 -0
- netgen/include/paralleldofs.hpp +340 -0
- netgen/include/parallelngs.hpp +23 -0
- netgen/include/parallelvector.hpp +269 -0
- netgen/include/pardisoinverse.hpp +200 -0
- netgen/include/periodic.hpp +129 -0
- netgen/include/plateaufespace.hpp +25 -0
- netgen/include/pml.hpp +275 -0
- netgen/include/pmltrafo.hpp +631 -0
- netgen/include/postproc.hpp +142 -0
- netgen/include/potentialtools.hpp +22 -0
- netgen/include/precomp.hpp +60 -0
- netgen/include/preconditioner.hpp +602 -0
- netgen/include/prolongation.hpp +377 -0
- netgen/include/python_comp.hpp +107 -0
- netgen/include/python_fem.hpp +89 -0
- netgen/include/python_linalg.hpp +58 -0
- netgen/include/python_ngstd.hpp +386 -0
- netgen/include/recursive_pol.hpp +4896 -0
- netgen/include/recursive_pol_tet.hpp +395 -0
- netgen/include/recursive_pol_trig.hpp +492 -0
- netgen/include/reorderedfespace.hpp +81 -0
- netgen/include/sample_sort.hpp +105 -0
- netgen/include/scalarfe.hpp +335 -0
- netgen/include/shapefunction_utils.hpp +113 -0
- netgen/include/simd_complex.hpp +329 -0
- netgen/include/smoother.hpp +253 -0
- netgen/include/solve.hpp +89 -0
- netgen/include/sparsecholesky.hpp +313 -0
- netgen/include/sparsematrix.hpp +1038 -0
- netgen/include/sparsematrix_dyn.hpp +90 -0
- netgen/include/sparsematrix_impl.hpp +1013 -0
- netgen/include/special_matrix.hpp +463 -0
- netgen/include/specialelement.hpp +125 -0
- netgen/include/statushandler.hpp +33 -0
- netgen/include/stringops.hpp +12 -0
- netgen/include/superluinverse.hpp +136 -0
- netgen/include/symbolicintegrator.hpp +850 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +224 -0
- netgen/include/tangentialfacetfespace.hpp +91 -0
- netgen/include/tensor.hpp +522 -0
- netgen/include/tensorcoefficient.hpp +446 -0
- netgen/include/tensorproductintegrator.hpp +113 -0
- netgen/include/thcurlfe.hpp +128 -0
- netgen/include/thcurlfe_impl.hpp +380 -0
- netgen/include/thdivfe.hpp +80 -0
- netgen/include/thdivfe_impl.hpp +492 -0
- netgen/include/tpdiffop.hpp +461 -0
- netgen/include/tpfes.hpp +133 -0
- netgen/include/tpintrule.hpp +224 -0
- netgen/include/triangular.hpp +465 -0
- netgen/include/tscalarfe.hpp +245 -0
- netgen/include/tscalarfe_impl.hpp +1029 -0
- netgen/include/umfpackinverse.hpp +148 -0
- netgen/include/vector.hpp +1273 -0
- netgen/include/voxelcoefficientfunction.hpp +41 -0
- netgen/include/vtkoutput.hpp +198 -0
- netgen/include/vvector.hpp +208 -0
- netgen/include/webgui.hpp +92 -0
- netgen/libngbla.dylib +0 -0
- netgen/libngcomp.dylib +0 -0
- netgen/libngfem.dylib +0 -0
- netgen/libngla.dylib +0 -0
- netgen/libngsbem.dylib +0 -0
- netgen/libngsolve.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/TensorProductTools.py +210 -0
- ngsolve/__console.py +94 -0
- ngsolve/__expr.py +181 -0
- ngsolve/__init__.py +148 -0
- ngsolve/__init__.pyi +233 -0
- ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve/bla.pyi +1153 -0
- ngsolve/bvp.py +78 -0
- ngsolve/bvp.pyi +32 -0
- ngsolve/cmake/NGSolveConfig.cmake +102 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
- ngsolve/cmake/ngsolve-targets.cmake +163 -0
- ngsolve/comp/__init__.pyi +5449 -0
- ngsolve/comp/pml.pyi +89 -0
- ngsolve/config/__init__.py +1 -0
- ngsolve/config/__init__.pyi +43 -0
- ngsolve/config/__main__.py +4 -0
- ngsolve/config/config.py +60 -0
- ngsolve/config/config.pyi +45 -0
- ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve/demos/__init__.py +0 -0
- ngsolve/demos/howto/__init__.py +0 -0
- ngsolve/demos/howto/hhj.py +44 -0
- ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve/demos/howto/mixed.py +30 -0
- ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve/demos/howto/pickling.py +26 -0
- ngsolve/demos/howto/pml.py +31 -0
- ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve/demos/intro/__init__.py +0 -0
- ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve/demos/intro/poisson.py +41 -0
- ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve/directsolvers.py +26 -0
- ngsolve/directsolvers.pyi +15 -0
- ngsolve/eigenvalues.py +364 -0
- ngsolve/eigenvalues.pyi +30 -0
- ngsolve/fem.pyi +1647 -0
- ngsolve/internal.py +89 -0
- ngsolve/krylovspace.py +1013 -0
- ngsolve/krylovspace.pyi +298 -0
- ngsolve/la.pyi +1230 -0
- ngsolve/meshes.py +748 -0
- ngsolve/ngs2petsc.py +310 -0
- ngsolve/ngscxx.py +42 -0
- ngsolve/ngslib.so +0 -0
- ngsolve/ngstd.pyi +59 -0
- ngsolve/nonlinearsolvers.py +203 -0
- ngsolve/nonlinearsolvers.pyi +95 -0
- ngsolve/preconditioners.py +11 -0
- ngsolve/preconditioners.pyi +7 -0
- ngsolve/solve.pyi +109 -0
- ngsolve/solve_implementation.py +168 -0
- ngsolve/solve_implementation.pyi +42 -0
- ngsolve/solvers.py +7 -0
- ngsolve/solvers.pyi +14 -0
- ngsolve/timestepping.py +185 -0
- ngsolve/timestepping.pyi +28 -0
- ngsolve/timing.py +108 -0
- ngsolve/timing.pyi +54 -0
- ngsolve/utils.py +167 -0
- ngsolve/utils.pyi +273 -0
- ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,717 @@
|
|
|
1
|
+
#ifndef HDIVFE_UTILS
|
|
2
|
+
#define HDIVFE_UTILS
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
#include "hcurlfe_utils.hpp"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
namespace ngfem
|
|
9
|
+
{
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
// rotated gradient
|
|
13
|
+
template <int DIM> class DuRot;
|
|
14
|
+
|
|
15
|
+
template <> class DuRot<2>
|
|
16
|
+
{
|
|
17
|
+
|
|
18
|
+
public:
|
|
19
|
+
const AutoDiff<2> u;
|
|
20
|
+
|
|
21
|
+
DuRot (const AutoDiff<2> au)
|
|
22
|
+
: u(au) { ; }
|
|
23
|
+
|
|
24
|
+
Vec<2> Value () const
|
|
25
|
+
{
|
|
26
|
+
Vec<2> val;
|
|
27
|
+
val(0) = u.DValue(1);
|
|
28
|
+
val(1) = -u.DValue(0);
|
|
29
|
+
return val;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
Vec<DIM_CURL> CurlValue () const
|
|
34
|
+
{
|
|
35
|
+
return Vec<DIM> (0.0);
|
|
36
|
+
}
|
|
37
|
+
*/
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
template <int DIM, typename SCAL>
|
|
45
|
+
class Class_uDvDw_Cyclic
|
|
46
|
+
{
|
|
47
|
+
public:
|
|
48
|
+
const AutoDiff<DIM,SCAL> u, v, w;
|
|
49
|
+
Class_uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
|
|
50
|
+
const AutoDiff<DIM,SCAL> av,
|
|
51
|
+
const AutoDiff<DIM,SCAL> aw)
|
|
52
|
+
: u(au), v(av), w(aw) { ; }
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
template <int DIM, typename SCAL>
|
|
56
|
+
INLINE Class_uDvDw_Cyclic<DIM,SCAL>
|
|
57
|
+
uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
58
|
+
{ return Class_uDvDw_Cyclic<DIM,SCAL> (u,v,w); }
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
template <int DIM, typename SCAL>
|
|
62
|
+
class uDvDw_Cyclic
|
|
63
|
+
{
|
|
64
|
+
public:
|
|
65
|
+
const AutoDiff<DIM,SCAL> u, v, w;
|
|
66
|
+
uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
|
|
67
|
+
const AutoDiff<DIM,SCAL> av,
|
|
68
|
+
const AutoDiff<DIM,SCAL> aw)
|
|
69
|
+
: u(au), v(av), w(aw) { ; }
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
/*
|
|
74
|
+
template <int DIM, typename SCAL>
|
|
75
|
+
INLINE Class_uDvDw_Cyclic<DIM,SCAL>
|
|
76
|
+
uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
77
|
+
{ return Class_uDvDw_Cyclic<DIM,SCAL> (u,v,w); }
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
template <int DIM, typename SCAL>
|
|
83
|
+
class z_times_uDvDw_Cyclic
|
|
84
|
+
{
|
|
85
|
+
public:
|
|
86
|
+
const AutoDiff<DIM,SCAL> u, v, w, z;
|
|
87
|
+
z_times_uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
|
|
88
|
+
const AutoDiff<DIM,SCAL> av,
|
|
89
|
+
const AutoDiff<DIM,SCAL> aw,
|
|
90
|
+
const AutoDiff<DIM,SCAL> az)
|
|
91
|
+
: u(au), v(av), w(aw), z(az) { ; }
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
template <int DIM, typename SCAL>
|
|
96
|
+
INLINE auto
|
|
97
|
+
z_times_uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v,
|
|
98
|
+
AutoDiff<DIM,SCAL> w, AutoDiff<DIM,SCAL> z)
|
|
99
|
+
{ return Class_z_times_uDvDw_Cyclic<DIM,SCAL> (u,v,w,z); }
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/*
|
|
104
|
+
template <int DIM, typename SCAL>
|
|
105
|
+
INLINE auto
|
|
106
|
+
z_times_uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v,
|
|
107
|
+
AutoDiff<DIM,SCAL> w, AutoDiff<DIM,SCAL> z)
|
|
108
|
+
{ return Class_z_times_uDvDw_Cyclic<DIM,SCAL> (u,v,w,z); }
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
template <int DIM, typename SCAL>
|
|
114
|
+
class Du_Cross_Dv
|
|
115
|
+
{
|
|
116
|
+
public:
|
|
117
|
+
const AutoDiff<DIM,SCAL> u, v;
|
|
118
|
+
Du_Cross_Dv (const AutoDiff<DIM,SCAL> au,
|
|
119
|
+
const AutoDiff<DIM,SCAL> av)
|
|
120
|
+
: u(au), v(av) { ; }
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
template <int DIM, typename SCAL>
|
|
125
|
+
INLINE Class_Du_Cross_Dv<DIM,SCAL>
|
|
126
|
+
Du_Cross_Dv (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v)
|
|
127
|
+
{ return Class_Du_Cross_Dv<DIM,SCAL> (u,v); }
|
|
128
|
+
*/
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
template <int DIM, typename SCAL>
|
|
133
|
+
INLINE Class_Du_Cross_Dv<DIM,SCAL>
|
|
134
|
+
Du_Cross_Dv (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v)
|
|
135
|
+
{ return Class_Du_Cross_Dv<DIM,SCAL> (u,v); }
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
template <int DIM, typename SCAL>
|
|
139
|
+
class wDu_Cross_Dv
|
|
140
|
+
{
|
|
141
|
+
public:
|
|
142
|
+
const AutoDiff<DIM,SCAL> u, v, w;
|
|
143
|
+
wDu_Cross_Dv (const AutoDiff<DIM,SCAL> au,
|
|
144
|
+
const AutoDiff<DIM,SCAL> av,
|
|
145
|
+
const AutoDiff<DIM,SCAL> aw)
|
|
146
|
+
: u(au), v(av), w(aw) { ; }
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/*
|
|
150
|
+
template <int DIM, typename SCAL>
|
|
151
|
+
INLINE Class_wDu_Cross_Dv<DIM,SCAL>
|
|
152
|
+
wDu_Cross_Dv(AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
153
|
+
{ return Class_wDu_Cross_Dv<DIM,SCAL> (u,v,w); }
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
template <int DIM, typename SCAL>
|
|
158
|
+
INLINE Class_wDu_Cross_Dv<DIM,SCAL>
|
|
159
|
+
wDu_Cross_Dv(AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
160
|
+
{ return Class_wDu_Cross_Dv<DIM,SCAL> (u,v,w); }
|
|
161
|
+
*/
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
template <int DIM, typename SCAL>
|
|
165
|
+
class uDvDw_minus_DuvDw
|
|
166
|
+
{
|
|
167
|
+
public:
|
|
168
|
+
const AutoDiff<DIM,SCAL> u, v, w;
|
|
169
|
+
uDvDw_minus_DuvDw (const AutoDiff<DIM,SCAL> au,
|
|
170
|
+
const AutoDiff<DIM,SCAL> av,
|
|
171
|
+
const AutoDiff<DIM,SCAL> aw)
|
|
172
|
+
: u(au), v(av), w(aw) { ; }
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/*
|
|
176
|
+
template <int DIM, typename SCAL>
|
|
177
|
+
INLINE Class_uDvDw_minus_DuvDw<DIM,SCAL>
|
|
178
|
+
uDvDw_minus_DuvDw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
179
|
+
{ return Class_uDvDw_minus_DuvDw<DIM,SCAL> (u,v,w); }
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
template <int DIM, typename SCAL>
|
|
184
|
+
INLINE Class_uDvDw_minus_DuvDw<DIM,SCAL>
|
|
185
|
+
uDvDw_minus_DuvDw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
186
|
+
{ return Class_uDvDw_minus_DuvDw<DIM,SCAL> (u,v,w); }
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
template <int DIM, typename SCAL>
|
|
190
|
+
class curl_uDvw_minus_Duvw
|
|
191
|
+
{
|
|
192
|
+
public:
|
|
193
|
+
const AutoDiff<DIM,SCAL> u, v, w;
|
|
194
|
+
curl_uDvw_minus_Duvw (const AutoDiff<DIM,SCAL> au,
|
|
195
|
+
const AutoDiff<DIM,SCAL> av,
|
|
196
|
+
const AutoDiff<DIM,SCAL> aw)
|
|
197
|
+
: u(au), v(av), w(aw) { ; }
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
template <int DIM, typename SCAL>
|
|
202
|
+
INLINE Class_curl_uDvw_minus_Duvw<DIM,SCAL>
|
|
203
|
+
curl_uDvw_minus_Duvw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
204
|
+
{ return Class_curl_uDvw_minus_Duvw<DIM,SCAL> (u,v,w); }
|
|
205
|
+
*/
|
|
206
|
+
|
|
207
|
+
/*
|
|
208
|
+
template <int DIM, typename SCAL>
|
|
209
|
+
INLINE Class_curl_uDvw_minus_Duvw<DIM,SCAL>
|
|
210
|
+
curl_uDvw_minus_Duvw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
|
|
211
|
+
{ return Class_curl_uDvw_minus_Duvw<DIM,SCAL> (u,v,w); }
|
|
212
|
+
*/
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
#ifdef OLDTHDIV2SHAPE
|
|
216
|
+
template <int DIM, typename SCAL = double> class THDiv2Shape
|
|
217
|
+
{
|
|
218
|
+
public:
|
|
219
|
+
INLINE operator Vec<DIM,SCAL> () { return 0.0; }
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
template <typename SCAL> class THDiv2Shape<2,SCAL>
|
|
224
|
+
{
|
|
225
|
+
Vec<2,SCAL> data;
|
|
226
|
+
public:
|
|
227
|
+
INLINE THDiv2Shape (Du<2,SCAL> uv)
|
|
228
|
+
{
|
|
229
|
+
data = Vec<2,SCAL> (uv.u.DValue(1), -uv.u.DValue(0));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
INLINE THDiv2Shape (uDv<2,SCAL> uv)
|
|
233
|
+
{
|
|
234
|
+
data = Vec<2,SCAL> (-uv.u.Value()*uv.v.DValue(1),
|
|
235
|
+
uv.u.Value()*uv.v.DValue(0));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
INLINE THDiv2Shape (const uDv_minus_vDu<2,SCAL> & uv)
|
|
239
|
+
{
|
|
240
|
+
data(0) = -uv.u.Value() * uv.v.DValue(1) + uv.u.DValue(1) * uv.v.Value();
|
|
241
|
+
data(1) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
INLINE THDiv2Shape (const wuDv_minus_wvDu<2,SCAL> & uv)
|
|
245
|
+
{
|
|
246
|
+
data[0] = -uv.u.Value() * uv.v.DValue(1) + uv.u.DValue(1) * uv.v.Value();
|
|
247
|
+
data[1] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
248
|
+
data[0] *= uv.w.Value();
|
|
249
|
+
data[1] *= uv.w.Value();
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
INLINE operator Vec<2,SCAL> () const { return data; }
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
template <typename SCAL> class THDiv2Shape<3,SCAL>
|
|
257
|
+
{
|
|
258
|
+
Vec<3,SCAL> data;
|
|
259
|
+
public:
|
|
260
|
+
|
|
261
|
+
INLINE THDiv2Shape (const uDvDw_Cyclic<3,SCAL> & uvw)
|
|
262
|
+
{
|
|
263
|
+
/*
|
|
264
|
+
AutoDiff<3,SCAL> hv =
|
|
265
|
+
uvw.u.Value() * Cross (uvw.v, uvw.w) +
|
|
266
|
+
uvw.v.Value() * Cross (uvw.w, uvw.u) +
|
|
267
|
+
uvw.w.Value() * Cross (uvw.u, uvw.v);
|
|
268
|
+
|
|
269
|
+
for (int i = 0; i < 3; i++)
|
|
270
|
+
data[i] = hv.DValue(i);
|
|
271
|
+
*/
|
|
272
|
+
AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
|
|
273
|
+
AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
|
|
274
|
+
AutoDiff<3,SCAL> p3 = Cross (uvw.u, uvw.v);
|
|
275
|
+
|
|
276
|
+
for (int i = 0; i < 3; i++)
|
|
277
|
+
data[i] =
|
|
278
|
+
uvw.u.Value() * p1.DValue(i) +
|
|
279
|
+
uvw.v.Value() * p2.DValue(i) +
|
|
280
|
+
uvw.w.Value() * p3.DValue(i);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
INLINE THDiv2Shape (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
|
|
285
|
+
{
|
|
286
|
+
/*
|
|
287
|
+
AutoDiff<3,SCAL> hv =
|
|
288
|
+
uvw.u.Value() * Cross (uvw.v, uvw.w) +
|
|
289
|
+
uvw.v.Value() * Cross (uvw.w, uvw.u) +
|
|
290
|
+
uvw.w.Value() * Cross (uvw.u, uvw.v);
|
|
291
|
+
|
|
292
|
+
for (int i = 0; i < 3; i++)
|
|
293
|
+
data[i] = hv.DValue(i);
|
|
294
|
+
*/
|
|
295
|
+
AutoDiff<3,SCAL> p1 = Cross (uvwz.v, uvwz.w);
|
|
296
|
+
AutoDiff<3,SCAL> p2 = Cross (uvwz.w, uvwz.u);
|
|
297
|
+
AutoDiff<3,SCAL> p3 = Cross (uvwz.u, uvwz.v);
|
|
298
|
+
|
|
299
|
+
for (int i = 0; i < 3; i++)
|
|
300
|
+
data[i] =
|
|
301
|
+
uvwz.z.Value() * uvwz.u.Value() * p1.DValue(i) +
|
|
302
|
+
uvwz.z.Value() * uvwz.v.Value() * p2.DValue(i) +
|
|
303
|
+
uvwz.z.Value() * uvwz.w.Value() * p3.DValue(i);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
INLINE THDiv2Shape (const Du_Cross_Dv<3,SCAL> & uv)
|
|
307
|
+
{
|
|
308
|
+
AutoDiff<3,SCAL> hv = Cross (uv.u, uv.v);
|
|
309
|
+
for (int i = 0; i < 3; i++)
|
|
310
|
+
data[i] = hv.DValue(i);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
INLINE THDiv2Shape (const wDu_Cross_Dv<3,SCAL> & uvw)
|
|
314
|
+
{
|
|
315
|
+
AutoDiff<3,SCAL> hv = Cross (uvw.u, uvw.v);
|
|
316
|
+
for (int i = 0; i < 3; i++)
|
|
317
|
+
data[i] = uvw.w.Value() * hv.DValue(i);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
INLINE THDiv2Shape (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
|
|
322
|
+
{
|
|
323
|
+
/*
|
|
324
|
+
AutoDiff<3,SCAL> hv =
|
|
325
|
+
uvw.u.Value() * Cross (uvw.v, uvw.w) +
|
|
326
|
+
uvw.v.Value() * Cross (uvw.w, uvw.u);
|
|
327
|
+
|
|
328
|
+
for (int i = 0; i < 3; i++)
|
|
329
|
+
data[i] = hv.DValue(i);
|
|
330
|
+
*/
|
|
331
|
+
AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
|
|
332
|
+
AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
|
|
333
|
+
|
|
334
|
+
for (int i = 0; i < 3; i++)
|
|
335
|
+
data[i] =
|
|
336
|
+
uvw.u.Value() * p1.DValue(i) +
|
|
337
|
+
uvw.v.Value() * p2.DValue(i);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
INLINE THDiv2Shape (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
|
|
341
|
+
{
|
|
342
|
+
AutoDiff<3,SCAL> hv = Cross (uvw.u*uvw.w, uvw.v) - Cross (uvw.v*uvw.w, uvw.u);
|
|
343
|
+
for (int i = 0; i < 3; i++)
|
|
344
|
+
data[i] = hv.DValue(i);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
INLINE operator Vec<3,SCAL> () const { return data; }
|
|
348
|
+
};
|
|
349
|
+
#endif
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
/////////////////////
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
template <typename SCAL>
|
|
357
|
+
INLINE auto HDiv2ShapeNew (Du<2,SCAL> uv)
|
|
358
|
+
{
|
|
359
|
+
return Vec<2,SCAL> (-uv.u.DValue(0), -uv.u.DValue(1)); // signs to fit historic inconsistency
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
template <typename SCAL>
|
|
364
|
+
INLINE auto HDiv2ShapeNew (uDv<2,SCAL> uv)
|
|
365
|
+
{
|
|
366
|
+
return Vec<2,SCAL> (uv.u.Value()*uv.v.DValue(0),
|
|
367
|
+
uv.u.Value()*uv.v.DValue(1));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
template <typename SCAL>
|
|
371
|
+
INLINE auto HDiv2ShapeNew (const uDv_minus_vDu<2,SCAL> & uv)
|
|
372
|
+
{
|
|
373
|
+
Vec<2,SCAL> data;
|
|
374
|
+
data(0) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
375
|
+
data(1) = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
|
|
376
|
+
return data;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
template <typename SCAL>
|
|
380
|
+
INLINE auto HDiv2ShapeNew (const wuDv_minus_wvDu<2,SCAL> & uv)
|
|
381
|
+
{
|
|
382
|
+
Vec<2,SCAL> data;
|
|
383
|
+
data[0] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
384
|
+
data[1] = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
|
|
385
|
+
data[0] *= uv.w.Value();
|
|
386
|
+
data[1] *= uv.w.Value();
|
|
387
|
+
return data;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
template <typename SCAL>
|
|
391
|
+
INLINE auto HDiv2ShapeNew (Du<3,SCAL> uv)
|
|
392
|
+
{
|
|
393
|
+
return Vec<3,SCAL> (-uv.u.DValue(0), -uv.u.DValue(1), -uv.u.DValue(2));
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
template <typename SCAL>
|
|
397
|
+
INLINE auto HDiv2ShapeNew (uDv<3,SCAL> uv)
|
|
398
|
+
{
|
|
399
|
+
return Vec<3,SCAL> (uv.u.Value()*uv.v.DValue(0),
|
|
400
|
+
uv.u.Value()*uv.v.DValue(1),
|
|
401
|
+
uv.u.Value()*uv.v.DValue(2));
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
template <typename SCAL>
|
|
405
|
+
INLINE auto HDiv2ShapeNew (const uDv_minus_vDu<3,SCAL> & uv)
|
|
406
|
+
{
|
|
407
|
+
Vec<3,SCAL> data;
|
|
408
|
+
data(0) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
409
|
+
data(1) = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
|
|
410
|
+
data(2) = uv.u.Value() * uv.v.DValue(2) - uv.u.DValue(2) * uv.v.Value();
|
|
411
|
+
return data;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
template <typename SCAL>
|
|
415
|
+
INLINE auto HDiv2ShapeNew (const wuDv_minus_wvDu<3,SCAL> & uv)
|
|
416
|
+
{
|
|
417
|
+
Vec<3,SCAL> data;
|
|
418
|
+
data[0] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
|
|
419
|
+
data[1] = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
|
|
420
|
+
data[2] = uv.u.Value() * uv.v.DValue(2) - uv.u.DValue(2) * uv.v.Value();
|
|
421
|
+
data[0] *= uv.w.Value();
|
|
422
|
+
data[1] *= uv.w.Value();
|
|
423
|
+
data[2] *= uv.w.Value();
|
|
424
|
+
return data;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
template <typename SCAL>
|
|
428
|
+
INLINE auto HDiv2ShapeNew (const uDvDw_Cyclic<3,SCAL> & uvw)
|
|
429
|
+
{
|
|
430
|
+
AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
|
|
431
|
+
AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
|
|
432
|
+
AutoDiff<3,SCAL> p3 = Cross (uvw.u, uvw.v);
|
|
433
|
+
|
|
434
|
+
Vec<3,SCAL> data;
|
|
435
|
+
for (int i = 0; i < 3; i++)
|
|
436
|
+
data[i] =
|
|
437
|
+
uvw.u.Value() * p1.DValue(i) +
|
|
438
|
+
uvw.v.Value() * p2.DValue(i) +
|
|
439
|
+
uvw.w.Value() * p3.DValue(i);
|
|
440
|
+
return data;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
template <typename SCAL>
|
|
444
|
+
INLINE auto HDiv2ShapeNew (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
|
|
445
|
+
{
|
|
446
|
+
AutoDiff<3,SCAL> p1 = Cross (uvwz.v, uvwz.w);
|
|
447
|
+
AutoDiff<3,SCAL> p2 = Cross (uvwz.w, uvwz.u);
|
|
448
|
+
AutoDiff<3,SCAL> p3 = Cross (uvwz.u, uvwz.v);
|
|
449
|
+
|
|
450
|
+
Vec<3,SCAL> data;
|
|
451
|
+
for (int i = 0; i < 3; i++)
|
|
452
|
+
data[i] =
|
|
453
|
+
uvwz.z.Value() * uvwz.u.Value() * p1.DValue(i) +
|
|
454
|
+
uvwz.z.Value() * uvwz.v.Value() * p2.DValue(i) +
|
|
455
|
+
uvwz.z.Value() * uvwz.w.Value() * p3.DValue(i);
|
|
456
|
+
return data;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
template <typename SCAL>
|
|
461
|
+
INLINE auto HDiv2ShapeNew (const Du_Cross_Dv<3,SCAL> & uv)
|
|
462
|
+
{
|
|
463
|
+
AutoDiff<3,SCAL> hv = Cross (uv.u, uv.v);
|
|
464
|
+
Vec<3,SCAL> data;
|
|
465
|
+
for (int i = 0; i < 3; i++)
|
|
466
|
+
data[i] = hv.DValue(i);
|
|
467
|
+
return data;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
template <typename SCAL>
|
|
471
|
+
INLINE auto HDiv2ShapeNew (const wDu_Cross_Dv<3,SCAL> & uvw)
|
|
472
|
+
{
|
|
473
|
+
AutoDiff<3,SCAL> hv = Cross (uvw.u, uvw.v);
|
|
474
|
+
Vec<3,SCAL> data;
|
|
475
|
+
for (int i = 0; i < 3; i++)
|
|
476
|
+
data[i] = uvw.w.Value() * hv.DValue(i);
|
|
477
|
+
return data;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
template <typename SCAL>
|
|
482
|
+
INLINE auto HDiv2ShapeNew (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
|
|
483
|
+
{
|
|
484
|
+
/*
|
|
485
|
+
AutoDiff<3,SCAL> hv =
|
|
486
|
+
uvw.u.Value() * Cross (uvw.v, uvw.w) +
|
|
487
|
+
uvw.v.Value() * Cross (uvw.w, uvw.u);
|
|
488
|
+
|
|
489
|
+
for (int i = 0; i < 3; i++)
|
|
490
|
+
data[i] = hv.DValue(i);
|
|
491
|
+
*/
|
|
492
|
+
AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
|
|
493
|
+
AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
|
|
494
|
+
|
|
495
|
+
Vec<3,SCAL> data;
|
|
496
|
+
for (int i = 0; i < 3; i++)
|
|
497
|
+
data[i] =
|
|
498
|
+
uvw.u.Value() * p1.DValue(i) +
|
|
499
|
+
uvw.v.Value() * p2.DValue(i);
|
|
500
|
+
return data;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
template <typename SCAL>
|
|
504
|
+
INLINE auto HDiv2ShapeNew (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
|
|
505
|
+
{
|
|
506
|
+
AutoDiff<3,SCAL> hv = Cross (uvw.u*uvw.w, uvw.v) - Cross (uvw.v*uvw.w, uvw.u);
|
|
507
|
+
Vec<3,SCAL> data;
|
|
508
|
+
for (int i = 0; i < 3; i++)
|
|
509
|
+
data[i] = hv.DValue(i);
|
|
510
|
+
return data;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
//////////////////////////
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
/*
|
|
523
|
+
// 2D
|
|
524
|
+
template <int DIM>
|
|
525
|
+
class HDivShapeElement
|
|
526
|
+
{
|
|
527
|
+
double * data;
|
|
528
|
+
public:
|
|
529
|
+
HDivShapeElement (double * adata) : data(adata) { ; }
|
|
530
|
+
|
|
531
|
+
void operator= (THDiv2Shape<DIM> hd2vec)
|
|
532
|
+
{
|
|
533
|
+
Vec<DIM> v = hd2vec;
|
|
534
|
+
for (int j = 0; j < DIM; j++)
|
|
535
|
+
data[j] = v(j);
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
template <int DIM>
|
|
541
|
+
class HDivEvaluateShapeElement
|
|
542
|
+
{
|
|
543
|
+
const double * coefs;
|
|
544
|
+
Vec<DIM> & sum;
|
|
545
|
+
public:
|
|
546
|
+
HDivEvaluateShapeElement (const double * acoefs, Vec<DIM> & asum)
|
|
547
|
+
: coefs(acoefs), sum(asum) { ; }
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
void operator= (THDiv2Shape<DIM> hd2vec)
|
|
551
|
+
{
|
|
552
|
+
sum += *coefs * Vec<DIM> (hd2vec);
|
|
553
|
+
}
|
|
554
|
+
};
|
|
555
|
+
*/
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
template <int DIM, typename SCAL = double> class THDiv2DivShape
|
|
563
|
+
{
|
|
564
|
+
public:
|
|
565
|
+
INLINE operator SCAL () const { return SCAL(0.0); }
|
|
566
|
+
INLINE SCAL Get() const { return SCAL(0.0); }
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
template <typename SCAL> class THDiv2DivShape<2,SCAL>
|
|
570
|
+
{
|
|
571
|
+
SCAL data;
|
|
572
|
+
public:
|
|
573
|
+
INLINE THDiv2DivShape (Du<2,SCAL> uv)
|
|
574
|
+
{
|
|
575
|
+
data = SCAL(0.0);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
INLINE THDiv2DivShape (uDv<2,SCAL> uv)
|
|
579
|
+
{
|
|
580
|
+
AutoDiff<1,SCAL> hd = Cross (uv.u, uv.v);
|
|
581
|
+
data = -hd.DValue(0);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
INLINE THDiv2DivShape (const uDv_minus_vDu<2,SCAL> & uv)
|
|
585
|
+
{
|
|
586
|
+
data = -2*uv.u.DValue(0) * uv.v.DValue(1)
|
|
587
|
+
+ 2*uv.u.DValue(1) * uv.v.DValue(0);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
INLINE THDiv2DivShape (const wuDv_minus_wvDu<2,SCAL> & uv)
|
|
591
|
+
{
|
|
592
|
+
AutoDiff<1,SCAL> hd = Cross (uv.u*uv.w, uv.v) + Cross(uv.u, uv.v*uv.w);
|
|
593
|
+
data = -hd.DValue(0);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
INLINE operator SCAL () const { return data; }
|
|
597
|
+
INLINE SCAL Get() const { return data; }
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
template <typename SCAL> class THDiv2DivShape<3,SCAL>
|
|
602
|
+
{
|
|
603
|
+
SCAL data;
|
|
604
|
+
public:
|
|
605
|
+
|
|
606
|
+
INLINE THDiv2DivShape (const uDvDw_Cyclic<3,SCAL> & uvw)
|
|
607
|
+
{
|
|
608
|
+
data =
|
|
609
|
+
Dot (uvw.u, Cross (uvw.v, uvw.w)) +
|
|
610
|
+
Dot (uvw.v, Cross (uvw.w, uvw.u)) +
|
|
611
|
+
Dot (uvw.w, Cross (uvw.u, uvw.v));
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
INLINE THDiv2DivShape (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
|
|
615
|
+
{
|
|
616
|
+
data =
|
|
617
|
+
Dot (uvwz.z * uvwz.u, Cross (uvwz.v, uvwz.w)) +
|
|
618
|
+
Dot (uvwz.z * uvwz.v, Cross (uvwz.w, uvwz.u)) +
|
|
619
|
+
Dot (uvwz.z * uvwz.w, Cross (uvwz.u, uvwz.v));
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
INLINE THDiv2DivShape (const Du_Cross_Dv<3,SCAL> & uv)
|
|
623
|
+
{
|
|
624
|
+
data = 0.0;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
INLINE THDiv2DivShape (const wDu_Cross_Dv<3,SCAL> & uvw)
|
|
628
|
+
{
|
|
629
|
+
data = Dot (uvw.w, Cross (uvw.u, uvw.v));
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
INLINE THDiv2DivShape (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
|
|
633
|
+
{
|
|
634
|
+
data =
|
|
635
|
+
Dot (uvw.u, Cross (uvw.v, uvw.w)) +
|
|
636
|
+
Dot (uvw.v, Cross (uvw.w, uvw.u));
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
INLINE THDiv2DivShape (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
|
|
640
|
+
{
|
|
641
|
+
data = SCAL(0.0);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
INLINE operator SCAL () const { return data; }
|
|
645
|
+
INLINE SCAL Get() const { return data; }
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
/*
|
|
652
|
+
template <int DIM, typename SCAL = double>
|
|
653
|
+
class HDivDivShapeElement
|
|
654
|
+
{
|
|
655
|
+
SCAL * data;
|
|
656
|
+
public:
|
|
657
|
+
HDivDivShapeElement (SCAL * adata) : data(adata) { ; }
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
void operator= (const THDiv2DivShape<DIM,SCAL> & hd2dshape)
|
|
661
|
+
{
|
|
662
|
+
*data = hd2dshape;
|
|
663
|
+
}
|
|
664
|
+
};
|
|
665
|
+
|
|
666
|
+
template <int DIM>
|
|
667
|
+
class HDivShapeAssign
|
|
668
|
+
{
|
|
669
|
+
double * dshape;
|
|
670
|
+
public:
|
|
671
|
+
HDivShapeAssign (FlatMatrixFixWidth<DIM> mat)
|
|
672
|
+
{ dshape = &mat(0,0); }
|
|
673
|
+
|
|
674
|
+
HDivShapeElement<DIM> operator[] (int i) const
|
|
675
|
+
{ return HDivShapeElement<DIM> (dshape + i*DIM); }
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
template <int DIM>
|
|
680
|
+
class HDivDivShapeAssign
|
|
681
|
+
{
|
|
682
|
+
SliceVector<> dshape;
|
|
683
|
+
public:
|
|
684
|
+
HDivDivShapeAssign (SliceVector<> mat)
|
|
685
|
+
: dshape(mat) { ; }
|
|
686
|
+
|
|
687
|
+
HDivDivShapeElement<DIM> operator[] (int i) const
|
|
688
|
+
{ return HDivDivShapeElement<DIM> (&dshape(i)); }
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
template <int DIM>
|
|
692
|
+
class HDivEvaluateShape
|
|
693
|
+
{
|
|
694
|
+
const double * coefs;
|
|
695
|
+
Vec<DIM> sum;
|
|
696
|
+
public:
|
|
697
|
+
HDivEvaluateShape (FlatVector<> acoefs)
|
|
698
|
+
{ coefs = &acoefs(0); sum = 0.0; }
|
|
699
|
+
|
|
700
|
+
HDivEvaluateShapeElement<DIM> operator[] (int i)
|
|
701
|
+
{ return HDivEvaluateShapeElement<DIM> (coefs+i, sum); }
|
|
702
|
+
|
|
703
|
+
Vec<DIM> Sum() { return sum; }
|
|
704
|
+
};
|
|
705
|
+
*/
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
#endif
|