Commit 06035853 authored by Dave Moxey's avatar Dave Moxey

Merge branch 'feature/new-precons' into 'master'

Low energy preconditioner for variable p and pyramids

See merge request !920
parents ce5ecd42 192d44ae
......@@ -6,5 +6,5 @@
[submodule "docs/developer-guide"]
branch = master
path = docs/developer-guide
url = git@gitlab.nektar.info:nektar/developer-guide
url = git@gitlab.nektar.info:nektar/developer-guide
ignore = all
......@@ -34,6 +34,10 @@ v5.0.0
- Fix mac OSX on buildbots (!876)
- Fix error from (!826) (!876)
- Fix minor bug in ARPACK thirdparty build cmake (!874)
- Added in sum factorisation version for pyramid expnasions and orthogonal expansion in pyramids (!750)
- Switch MeshGraph to use factory pattern and add HDF5 geometry support (!900,
!904)
- Restructure the low energy preconditioner to handle pyramidic and variable p expansions (!920)
- Remove requirement for modmetis, switch to SCOTCH by default (!899)
- Switch MeshGraph to use factory pattern and add HDF5 geometry support
(!900, !904)
......
......@@ -130,6 +130,9 @@ OperatorKey BwdTrans_StdMat::m_typeArr[] = {
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eHexahedron, eBwdTrans, eStdMat,false),
BwdTrans_StdMat::create, "BwdTrans_StdMat_Hex"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(ePyramid, eBwdTrans, eSumFac, false),
BwdTrans_StdMat::create, "BwdTrans_SumFac_Pyr")
};
......
......@@ -139,6 +139,9 @@ OperatorKey IProductWRTBase_StdMat::m_typeArr[] = {
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eHexahedron, eIProductWRTBase, eStdMat, false),
IProductWRTBase_StdMat::create, "IProductWRTBase_StdMat_Hex"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(ePyramid, eIProductWRTBase, eSumFac, false),
IProductWRTBase_StdMat::create, "IProductWRTBase_SumFac_Pyr")
};
......
......@@ -216,7 +216,10 @@ OperatorKey IProductWRTDerivBase_StdMat::m_typeArr[] = {
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eHexahedron, eIProductWRTDerivBase, eStdMat, false),
IProductWRTDerivBase_StdMat::create,
"IProductWRTDerivBase_StdMat_Hex")
"IProductWRTDerivBase_StdMat_Hex"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(ePyramid, eIProductWRTDerivBase, eSumFac, false),
IProductWRTDerivBase_StdMat::create, "IProductWRTDerivBase_SumFac_Pyr")
};
......
......@@ -201,9 +201,6 @@ OperatorKey PhysDeriv_StdMat::m_typeArr[] =
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eTetrahedron, ePhysDeriv, eStdMat, false),
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_Tet"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eTetrahedron, ePhysDeriv, eStdMat, false),
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_Tet"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eTetrahedron, ePhysDeriv, eStdMat, true),
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_NodalTet"),
......@@ -218,7 +215,10 @@ OperatorKey PhysDeriv_StdMat::m_typeArr[] =
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_NodalPrism"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(eHexahedron, ePhysDeriv, eStdMat, false),
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_Hex")
PhysDeriv_StdMat::create, "PhysDeriv_StdMat_Hex"),
GetOperatorFactory().RegisterCreatorFunction(
OperatorKey(ePyramid, ePhysDeriv, eSumFac, false),
PhysDeriv_StdMat::create, "PhysDeriv_SumFac_Pyr")
};
......@@ -1752,6 +1752,5 @@ OperatorKey PhysDeriv_SumFac_Pyr::m_typeArr[] = {
PhysDeriv_SumFac_Pyr::create, "PhysDeriv_SumFac_Pyr")
};
}
}
......@@ -52,15 +52,22 @@ ADD_NEKTAR_TEST(Helmholtz2D_HDG_P7_Modes)
ADD_NEKTAR_TEST(Helmholtz2D_HDG_P7_Modes_AllBCs)
ADD_NEKTAR_TEST(Helmholtz2D_CG_varP_Modes)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex LENGTHY)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_Heterogeneous)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_Heterogeneous_iterLE)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Hex_AllBCs_iter_sc_cont)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Tet)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Tet_VarP)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Tet_VarP_iterLE)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_VarP)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_VarP_iterLE)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_iter_ml)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Prism_Deformed)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Pyr)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Pyr_VarP)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Pyr_VarP_iterLE)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Pyr_Deformed)
ADD_NEKTAR_TEST(Helmholtz3D_CG_Homo1D)
ADD_NEKTAR_TEST(Helmholtz3D_HDG_Homo1D LENGTHY)
......@@ -90,6 +97,7 @@ IF (NEKTAR_USE_PETSC)
ENDIF (NEKTAR_USE_PETSC)
IF (NEKTAR_USE_MPI)
ADD_NEKTAR_TEST(CubeAllElements LENGTHY)
ADD_NEKTAR_TEST(Helmholtz1D_CG_P8_periodic_par3)
ADD_NEKTAR_TEST(Helmholtz2D_CG_P7_Modes_AllBCs_xxt_full)
ADD_NEKTAR_TEST(Helmholtz2D_CG_P7_Modes_AllBCs_xxt_sc)
......
<?xml version="1.0" encoding="utf-8"?>
<test>
<description> Helmholtz 3D with hybrid element, mixed order and low energy precondition with linear space </description>
<executable>Helmholtz3D</executable>
<parameters>-v -I GlobalSysSoln=IterativeStaticCond -I Preconditioner=FullLinearSpaceWithLowEnergyBlock CubeAllElements.xml</parameters>
<files>
<file description="Session File">CubeAllElements.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-6">0.00108997</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-6">0.024387</value>
</metric>
<metric type="Precon" id="3">
<value tolerance="2">46</value>
</metric>
</metrics>
</test>
This diff is collapsed.
<?xml version="1.0" encoding="utf-8" ?>
<test>
<description>Helmholtz 3D CG for Hexahedron, heterogeneous expansion</description>
<executable>Helmholtz3D</executable>
<parameters>-I GlobalSysSoln=IterativeStaticCond -I Preconditioner=LowEnergyBlock Helmholtz3D_Hex_Heterogeneous.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Hex_Heterogeneous.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">5.23385e-05</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-12">0.00014837</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>Helmholtz 3D CG for Prism with Variable P</description>
<executable>Helmholtz3D</executable>
<parameters>Helmholtz3D_Prism_VarP.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Prism_VarP.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-9">0.000213422</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-9">0.00460463</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>Helmholtz 3D CG for Prism</description>
<executable>Helmholtz3D</executable>
<parameters>-I GlobalSysSoln=IterativeStaticCond -I Preconditioner=LowEnergyBlock Helmholtz3D_Prism.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Prism.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-9">0.000742677</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-9">0.0102924</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<test>
<description>Helmholtz 3D CG for Pyramid with Variable P</description>
<executable>Helmholtz3D</executable>
<parameters>Helmholtz3D_Pyr_VarP.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Pyr_VarP.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">7.67439e-05</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-12">0.000518239</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<test>
<description>Helmholtz 3D CG for Pyramid with LE preconditioner</description>
<executable>Helmholtz3D</executable>
<parameters>-I GlobalSysSoln=IterativeStaticCond -I Preconditioner=LowEnergyBlock Helmholtz3D_Pyr_VarP.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Pyr_VarP.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-12">7.67439e-05</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-12">0.000518239</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>Helmholtz 3D CG for Tet with variable P</description>
<executable>Helmholtz3D</executable>
<parameters>Helmholtz3D_Tet_VarP.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Tet_VarP.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-7">0.00426783</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-6">0.0313733</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8"?>
<test>
<description>Helmholtz 3D CG for Tet with variable P</description>
<executable>Helmholtz3D</executable>
<parameters>-I GlobalSysSoln=IterativeStaticCond -I Preconditioner=LowEnergyBlock Helmholtz3D_Tet_VarP.xml</parameters>
<files>
<file description="Session File">Helmholtz3D_Tet_VarP.xml</file>
</files>
<metrics>
<metric type="L2" id="1">
<value tolerance="1e-7">0.00426783</value>
</metric>
<metric type="Linf" id="2">
<value tolerance="1e-6">0.0313733</value>
</metric>
</metrics>
</test>
<?xml version="1.0" encoding="utf-8" ?>
<NEKTAR>
<GEOMETRY DIM="3" SPACE="3">
<VERTEX>
<V ID="0">0.00000000e+00 0.00000000e+00 5.00000000e-01</V>
<V ID="1">5.00000000e-01 0.00000000e+00 5.00000000e-01</V>
<V ID="2">5.00000000e-01 0.00000000e+00 0.00000000e+00</V>
<V ID="3">0.00000000e+00 0.00000000e+00 0.00000000e+00</V>
<V ID="4">5.00000000e-01 5.00000000e-01 5.00000000e-01</V>
<V ID="5">5.00000000e-01 5.00000000e-01 0.00000000e+00</V>
<V ID="6">0.00000000e+00 0.00000000e+00 1.00000000e+00</V>
<V ID="7">5.00000000e-01 0.00000000e+00 1.00000000e+00</V>
<V ID="8">5.00000000e-01 5.00000000e-01 1.00000000e+00</V>
<V ID="9">0.00000000e+00 5.00000000e-01 5.00000000e-01</V>
<V ID="10">0.00000000e+00 5.00000000e-01 0.00000000e+00</V>
<V ID="11">0.00000000e+00 5.00000000e-01 1.00000000e+00</V>
<V ID="12">5.00000000e-01 1.00000000e+00 5.00000000e-01</V>
<V ID="13">5.00000000e-01 1.00000000e+00 0.00000000e+00</V>
<V ID="14">5.00000000e-01 1.00000000e+00 1.00000000e+00</V>
<V ID="15">0.00000000e+00 1.00000000e+00 5.00000000e-01</V>
<V ID="16">0.00000000e+00 1.00000000e+00 0.00000000e+00</V>
<V ID="17">0.00000000e+00 1.00000000e+00 1.00000000e+00</V>
<V ID="18">1.00000000e+00 0.00000000e+00 5.00000000e-01</V>
<V ID="19">1.00000000e+00 0.00000000e+00 0.00000000e+00</V>
<V ID="20">1.00000000e+00 5.00000000e-01 5.00000000e-01</V>
<V ID="21">1.00000000e+00 5.00000000e-01 0.00000000e+00</V>
<V ID="22">1.00000000e+00 0.00000000e+00 1.00000000e+00</V>
<V ID="23">1.00000000e+00 5.00000000e-01 1.00000000e+00</V>
<V ID="24">1.00000000e+00 1.00000000e+00 5.00000000e-01</V>
<V ID="25">1.00000000e+00 1.00000000e+00 0.00000000e+00</V>
<V ID="26">1.00000000e+00 1.00000000e+00 1.00000000e+00</V>
</VERTEX>
<EDGE>
<E ID="0"> 0 1 </E>
<E ID="1"> 0 3 </E>
<E ID="2"> 0 4 </E>
<E ID="3"> 1 2 </E>
<E ID="4"> 1 4 </E>
<E ID="5"> 2 5 </E>
<E ID="6"> 3 2 </E>
<E ID="7"> 3 5 </E>
<E ID="8"> 4 5 </E>
<E ID="9"> 6 7 </E>
<E ID="10"> 6 0 </E>
<E ID="11"> 6 8 </E>
<E ID="12"> 7 1 </E>
<E ID="13"> 7 8 </E>
<E ID="14"> 8 4 </E>
<E ID="15"> 0 9 </E>
<E ID="16"> 4 9 </E>
<E ID="17"> 5 10 </E>
<E ID="18"> 3 10 </E>
<E ID="19"> 9 10 </E>
<E ID="20"> 6 11 </E>
<E ID="21"> 8 11 </E>
<E ID="22"> 11 9 </E>
<E ID="23"> 9 12 </E>
<E ID="24"> 4 12 </E>
<E ID="25"> 5 13 </E>
<E ID="26"> 10 13 </E>
<E ID="27"> 12 13 </E>
<E ID="28"> 11 14 </E>
<E ID="29"> 8 14 </E>
<E ID="30"> 14 12 </E>
<E ID="31"> 9 15 </E>
<E ID="32"> 12 15 </E>
<E ID="33"> 13 16 </E>
<E ID="34"> 10 16 </E>
<E ID="35"> 15 16 </E>
<E ID="36"> 11 17 </E>
<E ID="37"> 14 17 </E>
<E ID="38"> 17 15 </E>
<E ID="39"> 1 18 </E>
<E ID="40"> 1 20 </E>
<E ID="41"> 18 19 </E>
<E ID="42"> 18 20 </E>
<E ID="43"> 19 21 </E>
<E ID="44"> 2 19 </E>
<E ID="45"> 2 21 </E>
<E ID="46"> 20 21 </E>
<E ID="47"> 7 22 </E>
<E ID="48"> 7 23 </E>
<E ID="49"> 22 18 </E>
<E ID="50"> 22 23 </E>
<E ID="51"> 23 20 </E>
<E ID="52"> 20 4 </E>
<E ID="53"> 21 5 </E>
<E ID="54"> 23 8 </E>
<E ID="55"> 4 24 </E>
<E ID="56"> 20 24 </E>
<E ID="57"> 21 25 </E>
<E ID="58"> 5 25 </E>
<E ID="59"> 24 25 </E>
<E ID="60"> 8 26 </E>
<E ID="61"> 23 26 </E>
<E ID="62"> 26 24 </E>
<E ID="63"> 24 12 </E>
<E ID="64"> 25 13 </E>
<E ID="65"> 26 14 </E>
</EDGE>
<FACE>
<Q ID="0"> 0 3 6 1</Q>
<T ID="1"> 0 4 2</T>
<Q ID="2"> 3 5 8 4</Q>
<T ID="3"> 6 5 7</T>
<Q ID="4"> 1 7 8 2</Q>
<Q ID="5"> 9 12 0 10</Q>
<T ID="6"> 9 13 11</T>
<Q ID="7"> 12 4 14 13</Q>
<Q ID="8"> 10 2 14 11</Q>
<Q ID="9"> 15 1 18 19</Q>
<T ID="10"> 15 2 16</T>
<T ID="11"> 18 7 17</T>
<Q ID="12"> 19 17 8 16</Q>
<Q ID="13"> 20 10 15 22</Q>
<T ID="14"> 20 11 21</T>
<Q ID="15"> 22 16 14 21</Q>
<Q ID="16"> 23 19 26 27</Q>
<T ID="17"> 23 16 24</T>
<T ID="18"> 26 17 25</T>
<Q ID="19"> 27 25 8 24</Q>
<Q ID="20"> 28 22 23 30</Q>
<T ID="21"> 28 21 29</T>
<Q ID="22"> 30 24 14 29</Q>
<Q ID="23"> 32 35 33 27</Q>
<T ID="24"> 32 31 23</T>
<Q ID="25"> 35 34 19 31</Q>
<T ID="26"> 33 34 26</T>
<Q ID="27"> 37 38 32 30</Q>
<T ID="28"> 37 36 28</T>
<Q ID="29"> 38 31 22 36</Q>
<Q ID="30"> 39 41 44 3</Q>
<T ID="31"> 39 42 40</T>
<Q ID="32"> 41 43 46 42</Q>
<T ID="33"> 44 43 45</T>
<Q ID="34"> 3 45 46 40</Q>
<Q ID="35"> 47 49 39 12</Q>
<T ID="36"> 47 50 48</T>
<Q ID="37"> 49 42 51 50</Q>
<Q ID="38"> 12 40 51 48</Q>
<T ID="39"> 40 52 4</T>
<Q ID="40"> 46 53 8 52</Q>
<T ID="41"> 45 53 5</T>
<T ID="42"> 48 54 13</T>
<Q ID="43"> 51 52 14 54</Q>
<Q ID="44"> 56 59 57 46</Q>
<T ID="45"> 56 55 52</T>
<Q ID="46"> 59 58 8 55</Q>
<T ID="47"> 57 58 53</T>
<Q ID="48"> 61 62 56 51</Q>
<T ID="49"> 61 60 54</T>
<Q ID="50"> 62 55 14 60</Q>
<Q ID="51"> 63 27 64 59</Q>
<T ID="52"> 63 24 55</T>
<T ID="53"> 64 25 58</T>
<Q ID="54"> 65 30 63 62</Q>
<T ID="55"> 65 29 60</T>
</FACE>
<ELEMENT>
<R ID="0"> 0 1 2 3 4 </R>
<R ID="1"> 5 6 7 1 8 </R>
<R ID="2"> 9 10 4 11 12 </R>
<R ID="3"> 13 14 8 10 15 </R>
<R ID="4"> 16 17 12 18 19 </R>
<R ID="5"> 20 21 15 17 22 </R>
<R ID="6"> 23 24 25 26 16 </R>
<R ID="7"> 27 28 29 24 20 </R>
<R ID="8"> 30 31 32 33 34 </R>
<R ID="9"> 35 36 37 31 38 </R>
<R ID="10"> 34 39 40 41 2 </R>
<R ID="11"> 38 42 43 39 7 </R>
<R ID="12"> 44 45 46 47 40 </R>
<R ID="13"> 48 49 50 45 43 </R>
<R ID="14"> 51 52 19 53 46 </R>
<R ID="15"> 54 55 22 52 50 </R>
</ELEMENT>
<COMPOSITE>
<C ID="10"> R[0-3] </C>
<C ID="11"> R[4-7] </C>
<C ID="12"> R[8-11] </C>
<C ID="13"> R[12-15] </C>
<C ID="1"> F[0,3,5-6,9,11,13-14,18,21,23,25-30,32-33,35-37,41-42,44,47-49,51,53-55] </C>
</COMPOSITE>
<DOMAIN> C[10-13] </DOMAIN>
</GEOMETRY>
<EXPANSIONS>
<E COMPOSITE="C[10]" NUMMODES="4" TYPE="MODIFIED" FIELDS="u" />
<E COMPOSITE="C[11]" NUMMODES="6" TYPE="MODIFIED" FIELDS="u" />
<E COMPOSITE="C[12]" NUMMODES="4" TYPE="MODIFIED" FIELDS="u" />
<E COMPOSITE="C[13]" NUMMODES="5" TYPE="MODIFIED" FIELDS="u" />
</EXPANSIONS>
<CONDITIONS>
<PARAMETERS>
<P> Lambda = 1 </P>
</PARAMETERS>
<VARIABLES>
<V ID="0"> u </V>
</VARIABLES>
<BOUNDARYREGIONS>
<B ID="0"> C[1] </B>
</BOUNDARYREGIONS>
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="u" VALUE="sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</REGION>
</BOUNDARYCONDITIONS>
<FUNCTION NAME="Forcing">
<E VAR="u" VALUE="-(Lambda+3*PI*PI/4)*sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</FUNCTION>
<FUNCTION NAME="ExactSolution">
<E VAR="u" VALUE="sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</FUNCTION>
</CONDITIONS>
</NEKTAR>
<?xml version="1.0" encoding="utf-8" ?>
<NEKTAR>
<EXPANSIONS>
<E COMPOSITE="C[10]" NUMMODES="7" TYPE="MODIFIED" FIELDS="u" />
<E COMPOSITE="C[11]" NUMMODES="5" TYPE="MODIFIED" FIELDS="u" />
<E COMPOSITE="C[12]" NUMMODES="6" TYPE="MODIFIED" FIELDS="u" />
</EXPANSIONS>
<CONDITIONS>
<PARAMETERS>
<P> Lambda = 1 </P>
</PARAMETERS>
<VARIABLES>
<V ID="0"> u </V>
</VARIABLES>
<BOUNDARYREGIONS>
<B ID="0"> C[1-6] </B>
</BOUNDARYREGIONS>
<BOUNDARYCONDITIONS>
<REGION REF="0">
<D VAR="u" VALUE="sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</REGION>
</BOUNDARYCONDITIONS>
<FUNCTION NAME="Forcing">
<E VAR="u" VALUE="-(Lambda+3*PI*PI/4)*sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</FUNCTION>
<FUNCTION NAME="ExactSolution">
<E VAR="u" VALUE="sin(PI/2*x)*sin(PI/2*y)*sin(PI/2*z)" />
</FUNCTION>
</CONDITIONS>
<GEOMETRY DIM="3" SPACE="3">
<VERTEX>
<V ID="0">0.00000000e+00 0.00000000e+00 0.00000000e+00</V>
<V ID="1">1.00000000e+00 0.00000000e+00 0.00000000e+00</V>
<V ID="2">1.00000000e+00 1.00000000e+00 0.00000000e+00</V>
<V ID="3">0.00000000e+00 1.00000000e+00 0.00000000e+00</V>
<V ID="4">5.00000000e-01 5.00000000e-01 5.00000000e-01</V>
<V ID="5">0.00000000e+00 0.00000000e+00 1.00000000e+00</V>
<V ID="6">1.00000000e+00 0.00000000e+00 1.00000000e+00</V>
<V ID="7">1.00000000e+00 1.00000000e+00 1.00000000e+00</V>
<V ID="8">0.00000000e+00 1.00000000e+00 1.00000000e+00</V>
</VERTEX>
<EDGE>
<E ID="0"> 0 1 </E>
<E ID="1"> 1 2 </E>
<E ID="2"> 3 2 </E>
<E ID="3"> 0 3 </E>
<E ID="4"> 0 4 </E>
<E ID="5"> 1 4 </E>
<E ID="6"> 2 4 </E>
<E ID="7"> 3 4 </E>
<E ID="8"> 0 5 </E>
<E ID="9"> 5 6 </E>
<E ID="10"> 1 6 </E>
<E ID="11"> 5 4 </E>
<E ID="12"> 6 4 </E>
<E ID="13"> 6 7 </E>
<E ID="14"> 2 7 </E>
<E ID="15"> 7 4 </E>
<E ID="16"> 7 8 </E>
<E ID="17"> 3 8 </E>
<E ID="18"> 8 4 </E>
<E ID="19"> 8 5 </E>
</EDGE>
<FACE>
<Q ID="0"> 0 1 2 3</Q>
<T ID="1"> 0 5 4</T>
<T ID="2"> 1 6 5</T>
<T ID="3"> 2 6 7</T>
<T ID="4"> 3 7 4</T>
<Q ID="5"> 8 9 10 0</Q>
<T ID="6"> 8 11 4</T>
<T ID="7"> 9 12 11</T>
<T ID="8"> 10 12 5</T>
<Q ID="9"> 10 13 14 1</Q>
<T ID="10"> 13 15 12</T>
<T ID="11"> 14 15 6</T>
<Q ID="12"> 14 16 17 2</Q>
<T ID="13"> 16 18 15</T>
<T ID="14"> 17 18 7</T>
<Q ID="15"> 17 19 8 3</Q>
<T ID="16"> 19 11 18</T>
<Q ID="17"> 19 16 13 9</Q>
</FACE>
<ELEMENT>
<P ID="0"> 0 1 2 3 4 </P>
<P ID="1"> 5 6 7 8 1 </P>
<P ID="2"> 9 8 10 11 2 </P>
<P ID="3"> 12 11 13 14 3 </P>
<P ID="4"> 15 14 16 6 4 </P>
<P ID="5"> 17 16 13 10 7 </P>
</ELEMENT>
<COMPOSITE>
<C ID="10"> P[0,1] </C>
<C ID="11"> P[2,3] </C>
<C ID="12"> P[4,5] </C>
<C ID="1"> F[0] </C>
<C ID="2"> F[5] </C>
<C ID="3"> F[9] </C>
<C ID="4"> F[12] </C>
<C ID="5"> F[15] </C>
<C ID="6"> F[17] </C>
</COMPOSITE>
<DOMAIN> C[10-12] </DOMAIN>
</GEOMETRY>
</NEKTAR>
This diff is collapsed.
......@@ -334,7 +334,6 @@
<PARAMETERS>
<P> Lambda = 1 </P>
</PARAMETERS>
<VARIABLES>
<V ID="0"> u </V>
</VARIABLES>
......
......@@ -112,8 +112,11 @@ namespace Nektar
{
inline int getNumberOfCoefficients(int Na, int Nb)
{
ASSERTL2(Na > 1, "Order in 'a' direction must be > 1.");
ASSERTL2(Nb > 1, "Order in 'b' direction must be > 1.");
// Note these assertions have been set to > 0 because
// it can also be used to evaluate face expansion
// order
ASSERTL2(Na > 0, "Order in 'a' direction must be > 0.");
ASSERTL2(Nb > 0, "Order in 'b' direction must be > 0.");
ASSERTL1(Na <= Nb, "order in 'a' direction is higher "
"than order in 'b' direction");
return Na*(Na+1)/2 + Na*(Nb-Na);
......@@ -133,8 +136,11 @@ namespace Nektar
{
inline int getNumberOfCoefficients(int Na, int Nb)
{
ASSERTL2(Na > 1, "Order in 'a' direction must be > 1.");
ASSERTL2(Nb > 1, "Order in 'b' direction must be > 1.");
// Note these assertions have been set to > 0 because
// it can also be used to evaluate face expansion
// order
ASSERTL2(Na > 0, "Order in 'a' direction must be > 0.");
ASSERTL2(Nb > 0, "Order in 'b' direction must be > 0.");
return Na*Nb;
}
......
This diff is collapsed.
......@@ -147,14 +147,19 @@ namespace Nektar
v_GetEdgeInverseBoundaryMap(int eid);
LOCAL_REGIONS_EXPORT virtual Array<OneD, unsigned int>
v_GetFaceInverseBoundaryMap(int fid, StdRegions::Orientation faceOrient = StdRegions::eNoOrientation);
v_GetFaceInverseBoundaryMap(int fid, StdRegions::Orientation faceOrient = StdRegions::eNoOrientation, int P1=-1, int P2=-1);
LOCAL_REGIONS_EXPORT void v_GetInverseBoundaryMaps(
Array<OneD, unsigned int> &vmap,
Array<OneD, Array<OneD, unsigned int> > &emap,
Array<OneD, Array<OneD, unsigned int> > &fmap );
LOCAL_REGIONS_EXPORT virtual DNekMatSharedPtr v_BuildTransformationMatrix(
const DNekScalMatSharedPtr &r_bnd,
const StdRegions::MatrixType matrixType);
LOCAL_REGIONS_EXPORT virtual DNekMatSharedPtr v_BuildInverseTransformationMatrix(
const DNekScalMatSharedPtr & m_transformationmatrix);
const DNekScalMatSharedPtr & transformationmatrix);
LOCAL_REGIONS_EXPORT virtual DNekMatSharedPtr v_BuildVertexMatrix(
const DNekScalMatSharedPtr &r_bnd);
......
......@@ -1643,19 +1643,6 @@ namespace Nektar
returnval = MemoryManager<DNekScalMat>::AllocateSharedPtr(one,R);
}
break;
case StdRegions::ePreconRT:
{
NekDouble one = 1.0;
MatrixKey helmkey(StdRegions::eHelmholtz, mkey.GetShapeType(), *this,mkey.GetConstFactors(), mkey.GetVarCoeffs());